@repobit/dex-system-design 0.25.12 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +204 -0
- package/README.md +131 -8
- package/package.json +96 -13
- package/schemas/component-manifest.json +3294 -405
- package/schemas/manifest-omissions.json +173 -0
- package/src/blog/src/breakpoints.js +6 -6
- package/src/blog/src/content/blog-atoms-showcase.js +1 -1
- package/src/blog/src/content/blog-page-layout.js +2 -2
- package/src/blog/src/lib/article-toc.js +7 -7
- package/src/blog/src/shell/blog-shell.js +1 -1
- package/src/blog/src/tokens/blog.js +2 -2
- package/src/blog/src/tokens/core.js +34 -35
- package/src/blog/src/tokens/legacy.js +0 -9
- package/src/blog/tokens/blog.js +2 -2
- package/src/blog/tokens/core.js +34 -35
- package/src/blog/tokens/legacy.js +0 -9
- package/src/blog/tokens.css +36 -46
- package/src/components/accordion/accordion-bg.css.js +83 -59
- package/src/components/accordion/accordion-bg.js +29 -10
- package/src/components/accordion/accordion-bg.stories.js +67 -67
- package/src/components/accordion/accordion-keyboard.js +80 -0
- package/src/components/accordion/accordion.css.js +142 -80
- package/src/components/accordion/accordion.js +37 -10
- package/src/components/accordion/accordion.stories.js +7 -7
- package/src/components/agent-endpoints/agent-endpoints.css.js +36 -39
- package/src/components/agent-endpoints/agent-endpoints.js +30 -20
- package/src/components/agent-endpoints/agent-endpoints.stories.js +1 -1
- package/src/components/ai-guardian-demo.stories.js +91 -91
- package/src/components/alert/alert.css.js +198 -0
- package/src/components/alert/alert.js +103 -0
- package/src/components/alert/alert.stories.js +206 -0
- package/src/components/anchor/anchor-nav.css.js +213 -101
- package/src/components/anchor/anchor-nav.js +26 -40
- package/src/components/anchor/anchor.stories.js +22 -12
- package/src/components/annotation/annotation.css.js +58 -0
- package/src/components/annotation/annotation.js +67 -0
- package/src/components/annotation/annotation.stories.js +63 -0
- package/src/components/architecture.stories.js +285 -0
- package/src/components/atoms.stories.js +342 -0
- package/src/components/avatar/avatar.css.js +67 -0
- package/src/components/avatar/avatar.js +42 -0
- package/src/components/avatar/avatar.stories.js +95 -0
- package/src/components/awards/awards-flex.css.js +209 -23
- package/src/components/awards/awards-flex.js +66 -7
- package/src/components/awards/awards-flex.stories.js +1 -1
- package/src/components/awards/{awards-light.stories.js → awards-summary.stories.js} +54 -64
- package/src/components/awards/awards.css.js +116 -58
- package/src/components/awards/awards.js +102 -28
- package/src/components/awards/awards.stories.js +1 -1
- package/src/components/back/back.css.js +51 -22
- package/src/components/back/back.js +28 -7
- package/src/components/back/back.stories.js +9 -3
- package/src/components/badge/badge.css.js +158 -46
- package/src/components/badge/badge.js +62 -74
- package/src/components/badge/badge.stories.js +176 -248
- package/src/components/bento-grid/bento-grid.css.js +21 -16
- package/src/components/bento-grid/bento-grid.js +16 -4
- package/src/components/bento-grid/bento-grid.stories.js +19 -18
- package/src/components/bento-grid/bento-item.css.js +52 -28
- package/src/components/bento-grid/bento-item.js +2 -2
- package/src/components/blockquote/blockquote.css.js +47 -0
- package/src/components/blockquote/blockquote.js +29 -0
- package/src/components/blockquote/blockquote.stories.js +62 -0
- package/src/components/breadcrumb/breadcrumb.css.js +92 -22
- package/src/components/breadcrumb/breadcrumb.js +56 -11
- package/src/components/button/button.css.js +531 -161
- package/src/components/button/button.js +206 -214
- package/src/components/button/button.stories.js +322 -174
- package/src/components/caption/caption.css.js +21 -0
- package/src/components/caption/caption.js +31 -0
- package/src/components/caption/caption.stories.js +62 -0
- package/src/components/card-features/card-features.css.js +14 -22
- package/src/components/card-features/card-features.js +68 -9
- package/src/components/card-features/card-features.stories.js +11 -11
- package/src/components/cards/card.css.js +60 -81
- package/src/components/cards/card.js +56 -25
- package/src/components/cards/card.stories.js +39 -39
- package/src/components/carousel/carousel.css.js +93 -99
- package/src/components/carousel/carousel.js +32 -4
- package/src/components/checkbox/checkbox.css.js +111 -93
- package/src/components/checkbox/checkbox.js +64 -90
- package/src/components/checkbox/checkbox.stories.js +96 -29
- package/src/components/code/code.css.js +70 -0
- package/src/components/code/code.js +40 -0
- package/src/components/code/code.stories.js +73 -0
- package/src/components/compare/compare.css.js +179 -43
- package/src/components/compare/compare.js +52 -25
- package/src/components/compare/compare.stories.js +61 -4
- package/src/components/comparison-panel/comparison-panel.css.js +38 -51
- package/src/components/comparison-panel/comparison-panel.js +5 -4
- package/src/components/comparison-panel/comparison-panel.stories.js +1 -1
- package/src/components/compatibility-table/compatibility-table.css.js +180 -80
- package/src/components/compatibility-table/compatibility-table.js +37 -9
- package/src/components/control-alignment.stories.js +393 -0
- package/src/components/cta-banner/cta-banner.css.js +41 -13
- package/src/components/cta-banner/cta-banner.js +6 -5
- package/src/components/cta-banner/cta-banner.stories.js +43 -98
- package/src/components/display/display.css.js +25 -1
- package/src/components/display/display.js +46 -13
- package/src/components/display/display.stories.js +270 -40
- package/src/components/divider/divider-horizontal.js +21 -5
- package/src/components/divider/divider-vertical.js +15 -7
- package/src/components/divider/divider.css.js +2 -2
- package/src/components/divider/divider.stories.js +38 -34
- package/src/components/dropdown/dropdown.css.js +93 -126
- package/src/components/dropdown/dropdown.js +114 -34
- package/src/components/dropdown/dropdown.stories.js +56 -24
- package/src/components/features/features.css.js +24 -11
- package/src/components/features/features.js +7 -3
- package/src/components/features/features.stories.js +37 -37
- package/src/components/features-tab/features-tab.css.js +19 -8
- package/src/components/features-tab/features-tab.js +6 -5
- package/src/components/features-tab/features-tab.stories.js +23 -23
- package/src/components/fieldset/fieldset.css.js +30 -0
- package/src/components/fieldset/fieldset.js +28 -0
- package/src/components/fieldset/fieldset.stories.js +84 -0
- package/src/components/footer/footer-links-group.css.js +10 -14
- package/src/components/footer/footer-links-group.js +4 -3
- package/src/components/footer/footer-lp.css.js +59 -30
- package/src/components/footer/footer-lp.js +17 -12
- package/src/components/footer/footer-lp.stories.js +63 -75
- package/src/components/footer/footer-nav-menu.css.js +26 -4
- package/src/components/footer/footer-nav-menu.js +3 -2
- package/src/components/footer/footer.css.js +146 -264
- package/src/components/footer/footer.js +176 -106
- package/src/components/footer/footer.stories.js +9 -9
- package/src/components/footer/localeMap.js +1 -1
- package/src/components/grid/grid.css.js +1 -1
- package/src/components/grid/grid.js +49 -7
- package/src/components/grid/grid.stories.js +111 -0
- package/src/components/header/header-code.css.js +61 -51
- package/src/components/header/header-code.js +28 -14
- package/src/components/header/header-code.stories.js +5 -5
- package/src/components/header/header.css.js +655 -176
- package/src/components/header/header.js +269 -36
- package/src/components/header/header.stories.js +841 -18
- package/src/components/heading/heading.css.js +14 -17
- package/src/components/heading/heading.js +48 -33
- package/src/components/heading/heading.stories.js +27 -25
- package/src/components/help-text/help-text.css.js +21 -0
- package/src/components/help-text/help-text.js +25 -0
- package/src/components/help-text/help-text.stories.js +66 -0
- package/src/components/highlight/highlight.css.js +86 -64
- package/src/components/highlight/highlight.js +18 -27
- package/src/components/highlight/highlight.stories.js +14 -3
- package/src/components/icons/analysis-icon.js +6 -16
- package/src/components/icons/arrow-down-icon.js +6 -19
- package/src/components/icons/arrow-icon.js +44 -0
- package/src/components/icons/arrow-right-icon.js +30 -23
- package/src/components/icons/arrow-up-icon.js +19 -18
- package/src/components/icons/bd-ai-icon.js +1 -1
- package/src/components/icons/brand-marks.stories.js +279 -0
- package/src/components/icons/brand-signature-icon.js +42 -0
- package/src/components/icons/check-icon.js +27 -0
- package/src/components/icons/circle-info-icon.js +33 -0
- package/src/components/icons/close-icon.js +6 -18
- package/src/components/icons/family-icon.js +8 -20
- package/src/components/icons/globe-icon.js +6 -18
- package/src/components/icons/guide-icon.js +6 -18
- package/src/components/icons/icon-element.js +99 -0
- package/src/components/icons/icons.js +36 -0
- package/src/components/icons/icons.stories.js +184 -52
- package/src/components/icons/individual-icon.js +6 -18
- package/src/components/icons/laurel-icon.js +9 -19
- package/src/components/icons/machine-learning-icon.js +6 -17
- package/src/components/icons/marks.js +41 -0
- package/src/components/icons/minus-icon.js +7 -21
- package/src/components/icons/missing-icon.js +52 -0
- package/src/components/icons/plus-icon.js +7 -21
- package/src/components/icons/quote-icon.js +19 -19
- package/src/components/image/image.css.js +72 -25
- package/src/components/image/image.js +11 -6
- package/src/components/image/image.stories.js +2 -2
- package/src/components/input/custom-form.stories.js +214 -62
- package/src/components/input/input-clipboard.css.js +51 -144
- package/src/components/input/input-clipboard.js +31 -15
- package/src/components/input/input.css.js +8 -146
- package/src/components/input/input.js +93 -38
- package/src/components/install-options/install-options.css.js +84 -77
- package/src/components/install-options/install-options.js +33 -30
- package/src/components/install-options/install-options.stories.js +3 -3
- package/src/components/label/label.css.js +35 -0
- package/src/components/label/label.js +38 -0
- package/src/components/label/label.stories.js +82 -0
- package/src/components/light-carousel/light-carousel.css.js +111 -63
- package/src/components/light-carousel/light-carousel.js +85 -11
- package/src/components/light-carousel/light-carousel.stories.js +126 -82
- package/src/components/link/link.css.js +150 -99
- package/src/components/link/link.js +86 -11
- package/src/components/link/link.stories.js +124 -30
- package/src/components/list/list-item/list-item.css.js +74 -22
- package/src/components/list/list-item/list-item.js +32 -10
- package/src/components/list/list-item/list-item.stories.js +23 -23
- package/src/components/list/list.css.js +8 -2
- package/src/components/list/list.js +3 -2
- package/src/components/list/list.stories.js +222 -0
- package/src/components/modal/modal.css.js +114 -24
- package/src/components/modal/modal.js +83 -7
- package/src/components/modal/modal.stories.js +9 -9
- package/src/components/overview/overview.css.js +19 -14
- package/src/components/overview/overview.js +6 -5
- package/src/components/overview/overview.stories.js +10 -10
- package/src/components/page-switcher/page-switcher.css.js +97 -40
- package/src/components/page-switcher/page-switcher.js +28 -5
- package/src/components/page-switcher/page-switcher.stories.js +95 -0
- package/src/components/paragraph/paragraph.css.js +15 -10
- package/src/components/paragraph/paragraph.js +41 -44
- package/src/components/paragraph/paragraph.stories.js +56 -21
- package/src/components/picture/picture.css.js +103 -44
- package/src/components/picture/picture.js +100 -30
- package/src/components/picture/picture.stories.js +1 -1
- package/src/components/pricing-cards/new-pricing-card.js +3 -3
- package/src/components/pricing-cards/new-pricing.css.js +24 -15
- package/src/components/pricing-cards/pricing-card-actions.css.js +1 -1
- package/src/components/pricing-cards/pricing-card-actions.js +3 -4
- package/src/components/pricing-cards/pricing-card-container.css.js +3 -3
- package/src/components/pricing-cards/pricing-card-container.js +3 -2
- package/src/components/pricing-cards/pricing-card-header.css.js +10 -8
- package/src/components/pricing-cards/pricing-card-header.js +6 -7
- package/src/components/pricing-cards/pricing-card-pricing.css.js +16 -9
- package/src/components/pricing-cards/pricing-card-pricing.js +8 -6
- package/src/components/pricing-cards/pricing-card-show-more.css.js +11 -3
- package/src/components/pricing-cards/pricing-card-show-more.js +8 -3
- package/src/components/pricing-cards/pricing-card.css.js +244 -190
- package/src/components/pricing-cards/pricing-card.js +54 -70
- package/src/components/pricing-cards/pricing-feature-item.css.js +25 -8
- package/src/components/pricing-cards/pricing-feature-item.js +8 -3
- package/src/components/process-steps/process-steps.css.js +26 -14
- package/src/components/process-steps/process-steps.js +23 -6
- package/src/components/process-steps/process-steps.stories.js +1 -1
- package/src/components/progress/progress.css.js +80 -0
- package/src/components/progress/progress.js +42 -0
- package/src/components/progress/progress.stories.js +79 -0
- package/src/components/quick-answer/quick-answer.css.js +75 -13
- package/src/components/quick-answer/quick-answer.js +8 -3
- package/src/components/radio/radio.css.js +92 -128
- package/src/components/radio/radio.js +106 -127
- package/src/components/radio/radio.stories.js +54 -19
- package/src/components/review/review-grid.css.js +5 -6
- package/src/components/review/review-grid.js +14 -11
- package/src/components/review/review.css.js +11 -6
- package/src/components/review/review.js +3 -8
- package/src/components/shared/ensemble.css.js +93 -0
- package/src/components/shared/form-field.css.js +206 -0
- package/src/components/shared/prop-vocabulary.js +48 -0
- package/src/components/shared/token-scales.js +306 -0
- package/src/components/skeleton/skeleton.css.js +34 -0
- package/src/components/skeleton/skeleton.js +32 -0
- package/src/components/skeleton/skeleton.stories.js +70 -0
- package/src/components/spinner/spinner.css.js +62 -0
- package/src/components/spinner/spinner.js +38 -0
- package/src/components/spinner/spinner.stories.js +92 -0
- package/src/components/spotlight-section/spotlight-section.css.js +14 -13
- package/src/components/spotlight-section/spotlight-section.js +42 -39
- package/src/components/switch/switch.css.js +103 -0
- package/src/components/switch/switch.js +44 -0
- package/src/components/switch/switch.stories.js +86 -0
- package/src/components/tab-list/content-switcher.stories.js +189 -0
- package/src/components/tab-list/tab-list.css.js +250 -0
- package/src/components/tab-list/tab-list.js +184 -0
- package/src/components/tab-list/tab-list.stories.js +221 -0
- package/src/components/tabs/tabs.css.js +14 -123
- package/src/components/tabs/tabs.js +16 -19
- package/src/components/tabs/tabs.stories.js +95 -95
- package/src/components/tag/tag.css.js +54 -0
- package/src/components/tag/tag.js +32 -0
- package/src/components/tag/tag.stories.js +126 -0
- package/src/components/terminal/terminal-message.css.js +164 -60
- package/src/components/terminal/terminal-message.js +5 -5
- package/src/components/terminal/terminal-message.stories.js +70 -1
- package/src/components/termsOfUse/terms.css.js +25 -20
- package/src/components/termsOfUse/terms.js +13 -9
- package/src/components/termsOfUse/terms.stories.js +1 -1
- package/src/components/textarea/textarea.css.js +51 -0
- package/src/components/textarea/textarea.js +136 -0
- package/src/components/textarea/textarea.stories.js +191 -0
- package/src/components/tooltip/tooltip.css.js +75 -0
- package/src/components/tooltip/tooltip.js +156 -0
- package/src/components/tooltip/tooltip.stories.js +161 -0
- package/src/components/trust-panel/trust-panel.css.js +85 -33
- package/src/components/trust-panel/trust-panel.js +18 -10
- package/src/components/trust-panel/trust-panel.stories.js +1 -1
- package/src/components/ultimate-security-demo.stories.js +431 -0
- package/src/components/video/video.css.js +17 -0
- package/src/components/video/video.js +40 -0
- package/src/components/video/video.stories.js +106 -0
- package/src/components/video-player/video-player.css.js +67 -11
- package/src/components/video-player/video-player.js +35 -4
- package/src/components/video-player/video-player.stories.js +1 -1
- package/src/components/visual-alignment.stories.js +411 -0
- package/src/components/visually-hidden/visually-hidden.css.js +24 -0
- package/src/components/visually-hidden/visually-hidden.js +16 -0
- package/src/components/visually-hidden/visually-hidden.stories.js +56 -0
- package/src/stories/Button.stories.js +17 -17
- package/src/stories/Header.stories.js +10 -10
- package/src/stories/Page.js +1 -1
- package/src/stories/Page.stories.js +6 -6
- package/src/tokens/borders.stories.js +339 -0
- package/src/tokens/color-responsibilities.stories.js +227 -0
- package/src/tokens/dark-derivation.js +309 -0
- package/src/tokens/dark-findings.js +197 -0
- package/src/tokens/dark-mode.stories.js +207 -0
- package/src/tokens/dimension.stories.js +251 -0
- package/src/tokens/elevation.stories.js +143 -0
- package/src/tokens/focus.stories.js +276 -0
- package/src/tokens/fonts.css +20 -20
- package/src/tokens/fonts.stories.js +354 -374
- package/src/tokens/layout.css +25 -11
- package/src/tokens/motion.stories.js +231 -0
- package/src/tokens/shape.stories.js +272 -0
- package/src/tokens/spacing-rhythm.stories.js +359 -0
- package/src/tokens/spacing.stories.js +208 -703
- package/src/tokens/story-chrome.js +503 -0
- package/src/tokens/surfaces.stories.js +224 -0
- package/src/tokens/text-on-surface.stories.js +164 -0
- package/src/tokens/token-map.js +220 -0
- package/src/tokens/token-map.stories.js +257 -0
- package/src/tokens/token-purposes.js +266 -0
- package/src/tokens/tokens-grid.stories.js +388 -900
- package/src/tokens/tokens.css +1633 -1045
- package/src/tokens/tokens.js +1130 -492
- package/src/tokens/tokens.stories.js +137 -47
- package/src/tokens/type-ceiling-words.js +299 -0
- package/src/tokens/typography.stories.js +1003 -965
- package/src/tokens/vertical-rhythm.stories.js +224 -0
- package/src/components/awards/awards-icon.js +0 -56
- package/src/components/awards/awards-light.js +0 -240
- package/src/components/banner/banner.js +0 -60
- package/src/components/banner/banner.stories.js +0 -51
- package/src/components/button/icons.js +0 -24
- package/src/components/input/index.js +0 -0
- package/src/components/light-carousel/light-carousel-simple.css.js +0 -183
- package/src/components/light-carousel/light-carousel-simple.js +0 -74
- package/src/tokens/colors.js +0 -121
- package/src/tokens/typography.css.js +0 -207
- package/src/tokens/typography.js +0 -0
|
@@ -1,31 +1,34 @@
|
|
|
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 "../button/button.js";
|
|
4
5
|
import "../heading/heading.js";
|
|
5
6
|
import carouselCSS from "./card.css.js";
|
|
7
|
+
import { ensembleCSS } from "../shared/ensemble.css.js";
|
|
8
|
+
import { matchesBelow } from "../shared/token-scales.js";
|
|
6
9
|
|
|
7
10
|
class Card extends LitElement {
|
|
8
11
|
static properties = {
|
|
9
|
-
title
|
|
10
|
-
|
|
11
|
-
|
|
12
|
+
title : { type: String },
|
|
13
|
+
headingLevel: { type: Number, attribute: "heading-level" },
|
|
14
|
+
subtitle : { type: String },
|
|
15
|
+
bgBlue : { type: Boolean, reflect: true, attribute: "bg-blue" },
|
|
12
16
|
// "" (default — existing grey-box carousel look) | "outline" — bordered,
|
|
13
|
-
// centered cards with a light-blue tint, blue title and centered icon
|
|
14
|
-
//
|
|
15
|
-
//
|
|
16
|
-
|
|
17
|
-
// its own variant attribute explicitly.
|
|
18
|
-
variant : { type: String, reflect: true },
|
|
17
|
+
// centered cards with a light-blue tint, blue title and centered icon.
|
|
18
|
+
// Propagated to every slotted bd-card-item (see _onSlotChange) unless an
|
|
19
|
+
// item sets its own variant attribute.
|
|
20
|
+
variant : { type: String, reflect: true },
|
|
19
21
|
// Opt-in: lays the cards out on a CSS grid and makes every card a subgrid,
|
|
20
22
|
// so icon, title, each content row and CTA line up across cards (desktop
|
|
21
23
|
// only). Replaces the JS height equalization for this section.
|
|
22
|
-
alignRows
|
|
23
|
-
_itemCount: { state: true }
|
|
24
|
+
alignRows : { type: Boolean, reflect: true, attribute: "align-rows" },
|
|
25
|
+
_itemCount : { state: true }
|
|
24
26
|
};
|
|
25
27
|
|
|
26
28
|
constructor() {
|
|
27
29
|
super();
|
|
28
30
|
this.title = "";
|
|
31
|
+
this.headingLevel = 2;
|
|
29
32
|
this.subtitle = "";
|
|
30
33
|
this.bgBlue = false;
|
|
31
34
|
this.variant = "";
|
|
@@ -128,7 +131,10 @@ class Card extends LitElement {
|
|
|
128
131
|
if (!items.length) return;
|
|
129
132
|
|
|
130
133
|
|
|
131
|
-
|
|
134
|
+
/* matchesBelow, not innerWidth <= 768: at exactly 768 the old test was
|
|
135
|
+
true while this component's own CSS, which uses below('md'), had
|
|
136
|
+
already switched to the wide layout. The two disagreed on one pixel. */
|
|
137
|
+
if (matchesBelow('md')) {
|
|
132
138
|
items.forEach(item => {
|
|
133
139
|
const box = item.renderRoot?.querySelector(".bd-light-box-s");
|
|
134
140
|
const iconW = item.renderRoot?.querySelector(".bd-light-box-header-s");
|
|
@@ -253,13 +259,25 @@ class Card extends LitElement {
|
|
|
253
259
|
this._mutationObserver?.disconnect();
|
|
254
260
|
}
|
|
255
261
|
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Level is the document-outline question and belongs to page composition;
|
|
265
|
+
* the type scale is this component's and stays where it was. visual-level
|
|
266
|
+
* pins the look at h1 so only the semantics move. Defaults to h2, because a
|
|
267
|
+
* reusable section cannot know it is the page's only heading.
|
|
268
|
+
*/
|
|
269
|
+
get _headingTag() {
|
|
270
|
+
const n = Number(this.headingLevel);
|
|
271
|
+
return Number.isInteger(n) && n >= 1 && n <= 6 ? `h${n}` : "h2";
|
|
272
|
+
}
|
|
273
|
+
|
|
256
274
|
render() {
|
|
257
275
|
return html`
|
|
258
|
-
<section class="bd-light-carousel-s">
|
|
276
|
+
<section class="bd-ensemble bd-light-carousel-s">
|
|
259
277
|
${this.title
|
|
260
278
|
? html`
|
|
261
279
|
<div class="bd-header-light-carousel-s">
|
|
262
|
-
<bd-h as="h1" class="bd-section-title-s">${this.title}</bd-h>
|
|
280
|
+
<bd-h as="${this._headingTag}" visual-level="h1" class="bd-section-title-s">${this.title}</bd-h>
|
|
263
281
|
${this.subtitle
|
|
264
282
|
? html`<p class="bd-section-subtitle-s">${this.subtitle}</p>`
|
|
265
283
|
: ""}
|
|
@@ -278,15 +296,16 @@ class Card extends LitElement {
|
|
|
278
296
|
|
|
279
297
|
class CardItem extends LitElement {
|
|
280
298
|
static properties = {
|
|
281
|
-
title
|
|
282
|
-
subtitle: { type: String },
|
|
283
|
-
icon
|
|
284
|
-
align
|
|
285
|
-
bgBlue
|
|
286
|
-
ctaAlign: { type: String, attribute: "cta-align" },
|
|
299
|
+
title : { type: String },
|
|
300
|
+
subtitle : { type: String },
|
|
301
|
+
icon : { type: String },
|
|
302
|
+
align : { type: String },
|
|
303
|
+
bgBlue : { type: Boolean, reflect: true, attribute: "bg-blue" },
|
|
304
|
+
ctaAlign : { type: String, attribute: "cta-align" },
|
|
305
|
+
headingLevel: { type: Number, attribute: "heading-level" },
|
|
287
306
|
// "" (default) | "outline" — see Card.variant above. Reflected so
|
|
288
307
|
// card.css.js can target it with :host([variant="outline"]).
|
|
289
|
-
variant
|
|
308
|
+
variant : { type: String, reflect: true }
|
|
290
309
|
};
|
|
291
310
|
|
|
292
311
|
constructor() {
|
|
@@ -299,6 +318,7 @@ class CardItem extends LitElement {
|
|
|
299
318
|
this._authorSetVariant = this.hasAttribute("variant");
|
|
300
319
|
|
|
301
320
|
this.title = "";
|
|
321
|
+
this.headingLevel = 3;
|
|
302
322
|
this.subtitle = "";
|
|
303
323
|
this.icon = "";
|
|
304
324
|
this.align = "start";
|
|
@@ -373,6 +393,17 @@ class CardItem extends LitElement {
|
|
|
373
393
|
return this._contentNodes().length > 0;
|
|
374
394
|
}
|
|
375
395
|
|
|
396
|
+
|
|
397
|
+
/**
|
|
398
|
+
* One level below the section default. The h5 it used to carry was a type
|
|
399
|
+
* choice, not an outline one, so the size stays on visual-level while the
|
|
400
|
+
* level itself stops skipping three steps below its own section.
|
|
401
|
+
*/
|
|
402
|
+
get _headingTag() {
|
|
403
|
+
const n = Number(this.headingLevel);
|
|
404
|
+
return Number.isInteger(n) && n >= 1 && n <= 6 ? `h${n}` : "h3";
|
|
405
|
+
}
|
|
406
|
+
|
|
376
407
|
render() {
|
|
377
408
|
const isOutline = this.variant === "outline";
|
|
378
409
|
const isCentered = this.align === "center" || isOutline;
|
|
@@ -400,7 +431,7 @@ class CardItem extends LitElement {
|
|
|
400
431
|
? html`
|
|
401
432
|
<div class="bd-light-title-badge-wrapper-s ${!hasContent ? "bd-light-title-no-content" : ""}">
|
|
402
433
|
<div class="bd-card-title-group">
|
|
403
|
-
<bd-h as="h5" fontWeight="
|
|
434
|
+
<bd-h as="${this._headingTag}" visual-level="h5" fontWeight="bold">${this.title}</bd-h>
|
|
404
435
|
${this.subtitle
|
|
405
436
|
? html`<p class="bd-card-item-subtitle">${this.subtitle}</p>`
|
|
406
437
|
: ""}
|
|
@@ -430,8 +461,8 @@ class CardItem extends LitElement {
|
|
|
430
461
|
}
|
|
431
462
|
}
|
|
432
463
|
|
|
433
|
-
Card.styles = [
|
|
434
|
-
CardItem.styles = [
|
|
464
|
+
Card.styles = [ensembleCSS, carouselCSS];
|
|
465
|
+
CardItem.styles = [carouselCSS];
|
|
435
466
|
|
|
436
467
|
customElements.define("bd-card-item", CardItem);
|
|
437
468
|
customElements.define("bd-card-section", Card);
|
|
@@ -50,16 +50,16 @@ left-aligned instead of centered.
|
|
|
50
50
|
// ─── Shared data ──────────────────────────────────────────────────────────────
|
|
51
51
|
|
|
52
52
|
const icons = [
|
|
53
|
-
html`<bd-individual-icon slot="icon" width="32" height="32" color="
|
|
54
|
-
html`<bd-globe-icon slot="icon" width="32" height="32" color="
|
|
55
|
-
html`<bd-machine-learning-icon slot="icon" width="32" height="32" color="
|
|
56
|
-
html`<bd-analysis-icon slot="icon" width="32" height="32" color="
|
|
57
|
-
html`<bd-family-icon slot="icon" width="32" height="32" color="
|
|
58
|
-
html`<bd-arrow-up-icon slot="icon" width="32" height="32" color="
|
|
59
|
-
html`<bd-individual-icon slot="icon" width="32" height="32" color="
|
|
60
|
-
html`<bd-globe-icon slot="icon" width="32" height="32" color="
|
|
61
|
-
html`<bd-machine-learning-icon slot="icon" width="32" height="32" color="
|
|
62
|
-
html`<bd-analysis-icon slot="icon" width="32" height="32" color="
|
|
53
|
+
html`<bd-individual-icon slot="icon" width="32" height="32" color="var(--color-blue-500)"></bd-individual-icon>`,
|
|
54
|
+
html`<bd-globe-icon slot="icon" width="32" height="32" color="var(--color-blue-500)"></bd-globe-icon>`,
|
|
55
|
+
html`<bd-machine-learning-icon slot="icon" width="32" height="32" color="var(--color-blue-500)"></bd-machine-learning-icon>`,
|
|
56
|
+
html`<bd-analysis-icon slot="icon" width="32" height="32" color="var(--color-blue-500)"></bd-analysis-icon>`,
|
|
57
|
+
html`<bd-family-icon slot="icon" width="32" height="32" color="var(--color-blue-500)"></bd-family-icon>`,
|
|
58
|
+
html`<bd-arrow-up-icon slot="icon" width="32" height="32" color="var(--color-blue-500)"></bd-arrow-up-icon>`,
|
|
59
|
+
html`<bd-individual-icon slot="icon" width="32" height="32" color="var(--color-blue-500)"></bd-individual-icon>`,
|
|
60
|
+
html`<bd-globe-icon slot="icon" width="32" height="32" color="var(--color-blue-500)"></bd-globe-icon>`,
|
|
61
|
+
html`<bd-machine-learning-icon slot="icon" width="32" height="32" color="var(--color-blue-500)"></bd-machine-learning-icon>`,
|
|
62
|
+
html`<bd-analysis-icon slot="icon" width="32" height="32" color="var(--color-blue-500)"></bd-analysis-icon>`
|
|
63
63
|
];
|
|
64
64
|
|
|
65
65
|
const titles = [
|
|
@@ -179,19 +179,19 @@ export const WithBlueBg = {
|
|
|
179
179
|
render: () => html`
|
|
180
180
|
<bd-card-section title="Why Bitdefender">
|
|
181
181
|
<bd-card-item title="AI Protection" bg-blue>
|
|
182
|
-
<bd-individual-icon slot="icon" width="32" height="32" color="
|
|
182
|
+
<bd-individual-icon slot="icon" width="32" height="32" color="var(--color-blue-500)"></bd-individual-icon>
|
|
183
183
|
<bd-p>Powered by machine learning and behavioral analysis.</bd-p>
|
|
184
184
|
</bd-card-item>
|
|
185
185
|
<bd-card-item title="Multi-layer Security" bg-blue>
|
|
186
|
-
<bd-globe-icon slot="icon" width="32" height="32" color="
|
|
186
|
+
<bd-globe-icon slot="icon" width="32" height="32" color="var(--color-blue-500)"></bd-globe-icon>
|
|
187
187
|
<bd-p>Multiple independent protection layers stop any attack.</bd-p>
|
|
188
188
|
</bd-card-item>
|
|
189
189
|
<bd-card-item title="VPN Included" bg-blue>
|
|
190
|
-
<bd-machine-learning-icon slot="icon" width="32" height="32" color="
|
|
190
|
+
<bd-machine-learning-icon slot="icon" width="32" height="32" color="var(--color-blue-500)"></bd-machine-learning-icon>
|
|
191
191
|
<bd-p>Unlimited encrypted VPN traffic for all your devices.</bd-p>
|
|
192
192
|
</bd-card-item>
|
|
193
193
|
<bd-card-item title="Parental Controls" bg-blue>
|
|
194
|
-
<bd-analysis-icon slot="icon" width="32" height="32" color="
|
|
194
|
+
<bd-analysis-icon slot="icon" width="32" height="32" color="var(--color-blue-500)"></bd-analysis-icon>
|
|
195
195
|
<bd-p>Advanced controls to protect your children online.</bd-p>
|
|
196
196
|
</bd-card-item>
|
|
197
197
|
</bd-card-section>
|
|
@@ -206,19 +206,19 @@ export const MixedBlueBg = {
|
|
|
206
206
|
render: () => html`
|
|
207
207
|
<bd-card-section title="Features">
|
|
208
208
|
<bd-card-item title="AI Protection" bg-blue>
|
|
209
|
-
<bd-individual-icon slot="icon" width="32" height="32" color="
|
|
209
|
+
<bd-individual-icon slot="icon" width="32" height="32" color="var(--color-blue-500)"></bd-individual-icon>
|
|
210
210
|
<bd-p>Powered by machine learning and behavioral analysis.</bd-p>
|
|
211
211
|
</bd-card-item>
|
|
212
212
|
<bd-card-item title="Multi-layer Security">
|
|
213
|
-
<bd-globe-icon slot="icon" width="32" height="32" color="
|
|
213
|
+
<bd-globe-icon slot="icon" width="32" height="32" color="var(--color-blue-500)"></bd-globe-icon>
|
|
214
214
|
<bd-p>Multiple independent protection layers stop any attack.</bd-p>
|
|
215
215
|
</bd-card-item>
|
|
216
216
|
<bd-card-item title="VPN Included" bg-blue>
|
|
217
|
-
<bd-machine-learning-icon slot="icon" width="32" height="32" color="
|
|
217
|
+
<bd-machine-learning-icon slot="icon" width="32" height="32" color="var(--color-blue-500)"></bd-machine-learning-icon>
|
|
218
218
|
<bd-p>Unlimited encrypted VPN traffic for all your devices.</bd-p>
|
|
219
219
|
</bd-card-item>
|
|
220
220
|
<bd-card-item title="Parental Controls">
|
|
221
|
-
<bd-analysis-icon slot="icon" width="32" height="32" color="
|
|
221
|
+
<bd-analysis-icon slot="icon" width="32" height="32" color="var(--color-blue-500)"></bd-analysis-icon>
|
|
222
222
|
<bd-p>Advanced controls to protect your children online.</bd-p>
|
|
223
223
|
</bd-card-item>
|
|
224
224
|
</bd-card-section>
|
|
@@ -233,24 +233,24 @@ export const WithCTA = {
|
|
|
233
233
|
render: () => html`
|
|
234
234
|
<bd-card-section title="Why Bitdefender">
|
|
235
235
|
<bd-card-item title="AI Protection">
|
|
236
|
-
<bd-individual-icon slot="icon" width="32" height="32" color="
|
|
236
|
+
<bd-individual-icon slot="icon" width="32" height="32" color="var(--color-blue-500)"></bd-individual-icon>
|
|
237
237
|
<bd-p>Powered by machine learning and behavioral analysis.</bd-p>
|
|
238
|
-
<bd-button-link slot="cta" href="#"
|
|
238
|
+
<bd-button-link slot="cta" href="#" variant="primary" size="sm">Learn more</bd-button-link>
|
|
239
239
|
</bd-card-item>
|
|
240
240
|
<bd-card-item title="Multi-layer Security">
|
|
241
|
-
<bd-globe-icon slot="icon" width="32" height="32" color="
|
|
241
|
+
<bd-globe-icon slot="icon" width="32" height="32" color="var(--color-blue-500)"></bd-globe-icon>
|
|
242
242
|
<bd-p>Multiple independent protection layers stop any attack.</bd-p>
|
|
243
|
-
<bd-button-link slot="cta" href="#"
|
|
243
|
+
<bd-button-link slot="cta" href="#" variant="primary" size="sm">Learn more</bd-button-link>
|
|
244
244
|
</bd-card-item>
|
|
245
245
|
<bd-card-item title="VPN Included">
|
|
246
|
-
<bd-machine-learning-icon slot="icon" width="32" height="32" color="
|
|
246
|
+
<bd-machine-learning-icon slot="icon" width="32" height="32" color="var(--color-blue-500)"></bd-machine-learning-icon>
|
|
247
247
|
<bd-p>Unlimited encrypted VPN traffic for all your devices.</bd-p>
|
|
248
|
-
<bd-button-link slot="cta" href="#"
|
|
248
|
+
<bd-button-link slot="cta" href="#" variant="primary" size="sm">Learn more</bd-button-link>
|
|
249
249
|
</bd-card-item>
|
|
250
250
|
<bd-card-item title="Parental Controls">
|
|
251
|
-
<bd-analysis-icon slot="icon" width="32" height="32" color="
|
|
251
|
+
<bd-analysis-icon slot="icon" width="32" height="32" color="var(--color-blue-500)"></bd-analysis-icon>
|
|
252
252
|
<bd-p>Advanced controls to protect your children online.</bd-p>
|
|
253
|
-
<bd-button-link slot="cta" href="#"
|
|
253
|
+
<bd-button-link slot="cta" href="#" variant="primary" size="sm">Learn more</bd-button-link>
|
|
254
254
|
</bd-card-item>
|
|
255
255
|
</bd-card-section>
|
|
256
256
|
`,
|
|
@@ -339,16 +339,16 @@ export const NoSlottedContent = {
|
|
|
339
339
|
render: () => html`
|
|
340
340
|
<bd-card-section title="Features">
|
|
341
341
|
<bd-card-item align="center" title="AI Protection">
|
|
342
|
-
<bd-individual-icon slot="icon" width="32" height="32" color="
|
|
342
|
+
<bd-individual-icon slot="icon" width="32" height="32" color="var(--color-blue-500)"></bd-individual-icon>
|
|
343
343
|
</bd-card-item>
|
|
344
344
|
<bd-card-item title="Multi-layer Security">
|
|
345
|
-
<bd-globe-icon slot="icon" width="32" height="32" color="
|
|
345
|
+
<bd-globe-icon slot="icon" width="32" height="32" color="var(--color-blue-500)"></bd-globe-icon>
|
|
346
346
|
</bd-card-item>
|
|
347
347
|
<bd-card-item title="VPN Included">
|
|
348
|
-
<bd-machine-learning-icon slot="icon" width="32" height="32" color="
|
|
348
|
+
<bd-machine-learning-icon slot="icon" width="32" height="32" color="var(--color-blue-500)"></bd-machine-learning-icon>
|
|
349
349
|
</bd-card-item>
|
|
350
350
|
<bd-card-item title="Parental Controls">
|
|
351
|
-
<bd-analysis-icon slot="icon" width="32" height="32" color="
|
|
351
|
+
<bd-analysis-icon slot="icon" width="32" height="32" color="var(--color-blue-500)"></bd-analysis-icon>
|
|
352
352
|
</bd-card-item>
|
|
353
353
|
</bd-card-section>
|
|
354
354
|
`,
|
|
@@ -361,17 +361,17 @@ export const WithImages = {
|
|
|
361
361
|
<bd-card-item title="Total Security">
|
|
362
362
|
<img slot="icon" src="/assets/tabs-img1.png" alt="Total Security" />
|
|
363
363
|
<bd-p>Complete protection for all your devices with advanced threat detection.</bd-p>
|
|
364
|
-
<bd-button-link slot="cta" href="#"
|
|
364
|
+
<bd-button-link slot="cta" href="#" variant="primary" size="sm">Learn more</bd-button-link>
|
|
365
365
|
</bd-card-item>
|
|
366
366
|
<bd-card-item title="Internet Security">
|
|
367
367
|
<img slot="icon" src="/assets/tabs-img2.png" alt="Internet Security" />
|
|
368
368
|
<bd-p>Stay safe online.</bd-p>
|
|
369
|
-
<bd-button-link slot="cta" href="#"
|
|
369
|
+
<bd-button-link slot="cta" href="#" variant="primary" size="sm">Learn more</bd-button-link>
|
|
370
370
|
</bd-card-item>
|
|
371
371
|
<bd-card-item title="Antivirus Plus">
|
|
372
372
|
<img slot="icon" src="/assets/tabs-img3.png" alt="Antivirus Plus" />
|
|
373
373
|
<bd-p>Essential protection for your Windows PC with real-time antivirus and anti-phishing.</bd-p>
|
|
374
|
-
<bd-button-link slot="cta" href="#"
|
|
374
|
+
<bd-button-link slot="cta" href="#" variant="primary" size="sm">Learn more</bd-button-link>
|
|
375
375
|
</bd-card-item>
|
|
376
376
|
</bd-card-section>
|
|
377
377
|
`,
|
|
@@ -383,7 +383,7 @@ export const MixedIconsAndImages = {
|
|
|
383
383
|
render: () => html`
|
|
384
384
|
<bd-card-section title="Mixed Media">
|
|
385
385
|
<bd-card-item title="AI Protection">
|
|
386
|
-
<bd-individual-icon slot="icon" width="32" height="32" color="
|
|
386
|
+
<bd-individual-icon slot="icon" width="32" height="32" color="var(--color-blue-500)"></bd-individual-icon>
|
|
387
387
|
<bd-p>Powered by machine learning and behavioral analysis.</bd-p>
|
|
388
388
|
</bd-card-item>
|
|
389
389
|
<bd-card-item title="Total Security">
|
|
@@ -391,7 +391,7 @@ export const MixedIconsAndImages = {
|
|
|
391
391
|
<bd-p>Complete protection for all your devices.</bd-p>
|
|
392
392
|
</bd-card-item>
|
|
393
393
|
<bd-card-item title="VPN Included">
|
|
394
|
-
<bd-globe-icon slot="icon" width="32" height="32" color="
|
|
394
|
+
<bd-globe-icon slot="icon" width="32" height="32" color="var(--color-blue-500)"></bd-globe-icon>
|
|
395
395
|
<bd-p>Unlimited encrypted VPN traffic for all your devices, anywhere.</bd-p>
|
|
396
396
|
</bd-card-item>
|
|
397
397
|
<bd-card-item title="Internet Security">
|
|
@@ -494,9 +494,9 @@ export const Playground = {
|
|
|
494
494
|
?bg-blue=${args.bgBlue}
|
|
495
495
|
cta-align="${args.ctaAlign}"
|
|
496
496
|
>
|
|
497
|
-
<bd-individual-icon slot="icon" width="32" height="32" color="
|
|
497
|
+
<bd-individual-icon slot="icon" width="32" height="32" color="var(--color-blue-500)"></bd-individual-icon>
|
|
498
498
|
<bd-p>Powered by machine learning and behavioral analysis.</bd-p>
|
|
499
|
-
<bd-button-link slot="cta" href="#"
|
|
499
|
+
<bd-button-link slot="cta" href="#" variant="primary" size="sm">Learn more</bd-button-link>
|
|
500
500
|
</bd-card-item>
|
|
501
501
|
<bd-card-item
|
|
502
502
|
title="VPN Included"
|
|
@@ -504,9 +504,9 @@ export const Playground = {
|
|
|
504
504
|
?bg-blue=${args.bgBlue}
|
|
505
505
|
cta-align="${args.ctaAlign}"
|
|
506
506
|
>
|
|
507
|
-
<bd-globe-icon slot="icon" width="32" height="32" color="
|
|
507
|
+
<bd-globe-icon slot="icon" width="32" height="32" color="var(--color-blue-500)"></bd-globe-icon>
|
|
508
508
|
<bd-p>Unlimited encrypted VPN traffic.</bd-p>
|
|
509
|
-
<bd-button-link slot="cta" href="#"
|
|
509
|
+
<bd-button-link slot="cta" href="#" variant="primary" size="sm">Learn more</bd-button-link>
|
|
510
510
|
</bd-card-item>
|
|
511
511
|
</bd-card-section>
|
|
512
512
|
`,
|
|
@@ -1,12 +1,9 @@
|
|
|
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;
|
|
6
|
-
--background-card-grey: var(--color-neutral-25);
|
|
7
|
-
--border-card-grey: var(--color-neutral-50);
|
|
8
|
-
--bd-blue-color: var(--color-blue-500);
|
|
9
|
-
--bd-accesibility-focus: var(--color-blue-800);
|
|
10
7
|
}
|
|
11
8
|
|
|
12
9
|
|
|
@@ -24,11 +21,12 @@ export default css`
|
|
|
24
21
|
user-select: none;
|
|
25
22
|
}
|
|
26
23
|
|
|
27
|
-
.bd-section-title
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
24
|
+
/* No .bd-section-title rule. The title is a bd-h at visual-level="h3", so
|
|
25
|
+
the heading-h3 role carries the whole of its type -- the three
|
|
26
|
+
declarations that stood here spelled out that role's size and weight by
|
|
27
|
+
hand while leaving its line-height unset, which is how the title came to
|
|
28
|
+
render at the browser's default leading and with the browser's default h2
|
|
29
|
+
margins. LightCarousel and CardFeatures declare no such rule either. */
|
|
32
30
|
div.bd-arrow {
|
|
33
31
|
padding: var(--spacing-2);
|
|
34
32
|
visibility: visible;
|
|
@@ -38,8 +36,9 @@ export default css`
|
|
|
38
36
|
.bd-arrow:focus-visible,
|
|
39
37
|
.bd-plus-button:focus-visible,
|
|
40
38
|
.bd-modal-content button:focus-visible {
|
|
41
|
-
|
|
42
|
-
outline
|
|
39
|
+
/* the one focus ring — see Foundations/Focus */
|
|
40
|
+
outline: none;
|
|
41
|
+
box-shadow: var(--focus-outline-primary);
|
|
43
42
|
}
|
|
44
43
|
|
|
45
44
|
.bd-header-carousel {
|
|
@@ -50,8 +49,10 @@ export default css`
|
|
|
50
49
|
margin-top: 50px;
|
|
51
50
|
}
|
|
52
51
|
|
|
53
|
-
.bd-heading{
|
|
54
|
-
|
|
52
|
+
/* A ".bd-heading{padding: 20px}" rule stood here. .bd-heading is the class
|
|
53
|
+
bd-h puts on the element inside its own shadow root, so this stylesheet
|
|
54
|
+
never reached it: measured 0 matches across 27 carousel sections and 102
|
|
55
|
+
carousel items. */
|
|
55
56
|
.bd-carousel-container {
|
|
56
57
|
display: flex;
|
|
57
58
|
flex-direction: column;
|
|
@@ -69,10 +70,18 @@ export default css`
|
|
|
69
70
|
box-shadow: var(--spacing-0) var(--spacing-2) var(--spacing-4) rgba(0, 0, 0, 0.1);
|
|
70
71
|
position: absolute;
|
|
71
72
|
bottom: -65px;
|
|
72
|
-
background: var(--
|
|
73
|
-
color:
|
|
74
|
-
|
|
75
|
-
|
|
73
|
+
background: var(--color-surface-brand);
|
|
74
|
+
color: var(--color-text-inverse);
|
|
75
|
+
/* no role: .bd-arrow is an <img> -- left-arrow.svg / right-arrow.svg in
|
|
76
|
+
carousel.js. It renders no text, so this styles nothing but the alt
|
|
77
|
+
text a browser shows when the SVG fails to load. Fallback typography
|
|
78
|
+
is not a role decision. */
|
|
79
|
+
font-size: var(--typography-fontSize-xl);
|
|
80
|
+
/* no role: .bd-arrow is an <img> -- left-arrow.svg / right-arrow.svg in
|
|
81
|
+
carousel.js. It renders no text, so this styles nothing but the alt
|
|
82
|
+
text a browser shows when the SVG fails to load. Fallback typography
|
|
83
|
+
is not a role decision. */
|
|
84
|
+
line-height: var(--typography-lineHeight-none);
|
|
76
85
|
text-align: center;
|
|
77
86
|
}
|
|
78
87
|
|
|
@@ -123,8 +132,8 @@ export default css`
|
|
|
123
132
|
}
|
|
124
133
|
|
|
125
134
|
.bd-disabled {
|
|
126
|
-
background:
|
|
127
|
-
color:
|
|
135
|
+
background: var(--color-neutral-50);
|
|
136
|
+
color: var(--color-text-muted-inverse);
|
|
128
137
|
cursor: not-allowed;
|
|
129
138
|
}
|
|
130
139
|
|
|
@@ -144,7 +153,7 @@ export default css`
|
|
|
144
153
|
position: relative;
|
|
145
154
|
overflow-x: hidden;
|
|
146
155
|
overflow-y: hidden;
|
|
147
|
-
z-index:
|
|
156
|
+
z-index: var(--z-base);
|
|
148
157
|
scroll-snap-type: x mandatory;
|
|
149
158
|
-webkit-overflow-scrolling: touch;
|
|
150
159
|
transition: scroll-snap-align 0.6s cubic-bezier(0.23, 1, 0.32, 1);
|
|
@@ -168,109 +177,83 @@ export default css`
|
|
|
168
177
|
min-height: 217px;
|
|
169
178
|
min-width: unset;
|
|
170
179
|
width: 350px;
|
|
171
|
-
background: var(--
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
180
|
+
background: var(--color-surface-container);
|
|
181
|
+
/* --radius-2xl, the step the other ten cards take.
|
|
182
|
+
bd-light-carousel made this exact move and wrote the argument for it:
|
|
183
|
+
"nothing about a carousel item asks for a softer corner than the same
|
|
184
|
+
card sitting in a grid". Same family, same reasoning, this file was
|
|
185
|
+
behind. Visible: the corner tightens 24px to 16px. */
|
|
186
|
+
border-radius: var(--card-radius);
|
|
187
|
+
/* No edge, for the reason bd-bentoitem's rule states: this card sits on
|
|
188
|
+
surface/container over the page ground, and that role is documented as
|
|
189
|
+
reading like its own object without a border or a shadow to say so.
|
|
190
|
+
|
|
191
|
+
What stood here was a --border-width-2 edge, and the comment it carried
|
|
192
|
+
was about the UNIT rather than the edge: --spacing-2 and --border-width-2
|
|
193
|
+
are both 2px at a 16px root and diverge above it, so at a 24px root this
|
|
194
|
+
edge went to 3px while bd-bentoitem's held at 1px. That argument is spent
|
|
195
|
+
-- neither card draws an edge now -- but it is worth keeping the
|
|
196
|
+
conclusion: a border is a hairline against a shape, not a distance
|
|
197
|
+
between things, so it never belongs on the spacing scale. */
|
|
198
|
+
/* --spacing-32, the step, not 2em. Both are 32px at a 16px root and the
|
|
199
|
+
em was never a decision -- ten other cards spell the same inset with the
|
|
200
|
+
scale, and an em here would also drift with any font-size this box ever
|
|
201
|
+
inherits. */
|
|
202
|
+
padding: var(--card-padding);
|
|
175
203
|
display: flex;
|
|
176
204
|
flex-direction: column;
|
|
177
205
|
align-items: start;
|
|
178
206
|
justify-content: center;
|
|
179
207
|
text-align: start;
|
|
180
208
|
cursor: pointer;
|
|
181
|
-
transition: transform
|
|
209
|
+
transition: transform var(--transition-duration-normal) var(--transition-easing-smooth);
|
|
182
210
|
font-family: var(--typography-fontFamily-sans);
|
|
183
211
|
position: relative;
|
|
184
|
-
z-index:
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
.bd-box bd-h {
|
|
188
|
-
font-size: var(--spacing-18);
|
|
189
|
-
margin: var(--spacing-0) var(--spacing-0) 0.5em var(--spacing-0);
|
|
190
|
-
font-weight: 600;
|
|
191
|
-
font-family: var(--typography-fontFamily-sans);
|
|
192
|
-
padding: 10px 0; /* Adaugă aici */
|
|
193
|
-
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
.bd-box p {
|
|
197
|
-
font-size: var(--spacing-16);
|
|
198
|
-
margin: var(--spacing-0) var(--spacing-0) 1em var(--spacing-0);
|
|
199
|
-
font-family: var(--typography-fontFamily-sans);
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
.bd-modal {
|
|
203
|
-
position: fixed;
|
|
204
|
-
top: var(--spacing-0);
|
|
205
|
-
left: var(--spacing-0);
|
|
206
|
-
width: 100%;
|
|
207
|
-
height: 100%;
|
|
208
|
-
background: rgba(0, 0, 0, 0.5);
|
|
209
|
-
display: flex;
|
|
210
|
-
justify-content: center;
|
|
211
|
-
align-items: center;
|
|
212
|
-
z-index: 9999;
|
|
213
|
-
backdrop-filter: blur(var(--spacing-12));
|
|
214
|
-
opacity: 0;
|
|
215
|
-
transform: scale(0.9);
|
|
216
|
-
transition: opacity 0.3s ease, transform 0.3s ease;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
.bd-modal[open] {
|
|
220
|
-
opacity: 1;
|
|
221
|
-
transform: scale(1);
|
|
212
|
+
z-index: var(--z-raised);
|
|
222
213
|
}
|
|
223
214
|
|
|
224
|
-
.bd-modal-content {
|
|
225
|
-
background: #fff;
|
|
226
|
-
padding: 2em;
|
|
227
|
-
border-radius: var(--spacing-12);
|
|
228
|
-
max-width: 500px;
|
|
229
|
-
text-align: start;
|
|
230
|
-
box-shadow: var(--spacing-0) var(--spacing-2) var(--spacing-8) rgba(0, 0, 0, 0.2);
|
|
231
|
-
font-family: var(--typography-fontFamily-sans);
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
.bd-modal-content h2 {
|
|
235
|
-
margin: var(--spacing-0) var(--spacing-0) 1em var(--spacing-0);
|
|
236
|
-
font-family: var(--typography-fontFamily-sans);
|
|
237
|
-
}
|
|
238
215
|
|
|
239
|
-
.
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
color: #fff;
|
|
244
|
-
border: none;
|
|
245
|
-
border-radius: var(--spacing-8);
|
|
246
|
-
cursor: pointer;
|
|
247
|
-
font-family: var(--typography-fontFamily-sans);
|
|
248
|
-
}
|
|
216
|
+
/* A verbatim copy of modal.css.js stood here. The carousel renders
|
|
217
|
+
<bd-modal>, which styles its own shadow root, so none of it could ever
|
|
218
|
+
match: measured zero .bd-modal / .bd-modal-content elements in every
|
|
219
|
+
carousel story, including "Modal — Click + to Open". */
|
|
249
220
|
|
|
250
221
|
.bd-plus-button {
|
|
251
222
|
content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40" fill="none"><circle cx="20" cy="20" r="19" stroke="%23006DFF" stroke-width="2"/><path d="M19 11H21V29H19V11Z" fill="%23006DFF"/><path d="M29 19V21L11 21L11 19L29 19Z" fill="%23006DFF"/></svg>');
|
|
252
223
|
position: absolute;
|
|
253
224
|
bottom: var(--spacing-10);
|
|
254
225
|
right: var(--spacing-10);
|
|
255
|
-
color: var(--bd-blue-color);
|
|
256
226
|
width: var(--spacing-44);
|
|
257
227
|
height: var(--spacing-44);
|
|
258
228
|
display: flex;
|
|
259
229
|
align-items: center;
|
|
260
230
|
justify-content: center;
|
|
261
231
|
border-radius: 50%;
|
|
262
|
-
font-size: 30px;
|
|
263
|
-
font-weight: bold;
|
|
264
232
|
cursor: pointer;
|
|
233
|
+
/* color, font-size: 30px and font-weight: bold stood here, styling the "+"
|
|
234
|
+
this div contains (carousel.js:49). They painted nothing. The content:
|
|
235
|
+
url() above REPLACES the element, so the text node is never laid out --
|
|
236
|
+
measured in components-carousel--modal-trigger, the "+" range reports 0
|
|
237
|
+
client rects while the box is 44x44 and computed color is still
|
|
238
|
+
rgb(0, 109, 255).
|
|
239
|
+
.
|
|
240
|
+
Removing the color also retired --bd-blue-color, the last private alias
|
|
241
|
+
plans/foundation-plan.md claimed had already been removed. What actually
|
|
242
|
+
paints the mark is %23006DFF, baked into the data URI twice -- reachable
|
|
243
|
+
by no token rule. plans/LATER.md entry 3. */
|
|
265
244
|
}
|
|
266
245
|
.bd-plus-button:hover {
|
|
267
246
|
content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40" fill="none"><circle cx="20" cy="20" r="19" fill="%23F0F7FF" stroke="%23006DFF" stroke-width="2"/><path d="M19 11H21V29H19V11Z" fill="%23006DFF"/><path d="M29 19V21L11 21L11 19L29 19Z" fill="%23006DFF"/></svg>');
|
|
268
247
|
}
|
|
269
248
|
|
|
270
249
|
|
|
271
|
-
bd-carousel-item::part(content)
|
|
272
|
-
|
|
273
|
-
|
|
250
|
+
/* A "bd-carousel-item::part(content)" rule stood here and was dead three
|
|
251
|
+
times over. The items are light-DOM children of bd-carousel-section -- its
|
|
252
|
+
shadow root holds a slot -- so a selector in this stylesheet cannot reach
|
|
253
|
+
them in either host that adopts it; bd-carousel-item exposes no part named
|
|
254
|
+
"content" at all; and .bd-box above already sets this same font-family,
|
|
255
|
+
which everything inside it inherits. Measured: the item's box computes the
|
|
256
|
+
IBM Plex Sans stack with this rule gone. */
|
|
274
257
|
|
|
275
258
|
.bd-plus-button:active {
|
|
276
259
|
content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40" fill="none"><circle cx="20" cy="20" r="19" fill="%23006DFF" stroke="%23006DFF" stroke-width="2"/><path d="M19 11H21V29H19V11Z" fill="white"/><path d="M29 19V21L11 21L11 19L29 19Z" fill="white"/></svg>');
|
|
@@ -284,7 +267,7 @@ export default css`
|
|
|
284
267
|
margin-left: var(--spacing-6);
|
|
285
268
|
}
|
|
286
269
|
|
|
287
|
-
@media (
|
|
270
|
+
@media ${unsafeCSS(below('md'))} {
|
|
288
271
|
.bd-carousel-track {
|
|
289
272
|
flex-wrap: nowrap;
|
|
290
273
|
overflow-x: hidden;
|
|
@@ -304,7 +287,11 @@ export default css`
|
|
|
304
287
|
|
|
305
288
|
.bd-arrow {
|
|
306
289
|
bottom: -75px;
|
|
307
|
-
|
|
290
|
+
/* no role: .bd-arrow is an <img> -- left-arrow.svg / right-arrow.svg in
|
|
291
|
+
carousel.js. It renders no text, so this styles nothing but the alt
|
|
292
|
+
text a browser shows when the SVG fails to load. Fallback typography
|
|
293
|
+
is not a role decision. */
|
|
294
|
+
font-size: var(--typography-fontSize-base);
|
|
308
295
|
}
|
|
309
296
|
|
|
310
297
|
.bd-arrow:first-of-type {
|
|
@@ -326,11 +313,18 @@ export default css`
|
|
|
326
313
|
padding: 2em;
|
|
327
314
|
}
|
|
328
315
|
|
|
329
|
-
.bd-plus-icon {
|
|
330
|
-
font-size: var(--spacing-24);
|
|
331
|
-
}
|
|
332
316
|
.bd-carousel-icon {
|
|
333
317
|
bottom: var(--spacing-10);
|
|
334
318
|
}
|
|
335
319
|
}
|
|
320
|
+
|
|
321
|
+
/* A reader who asked for less motion was still getting the track snap and the item lift. Twenty-three
|
|
322
|
+
of the thirty animated directories in this package honour the query; this
|
|
323
|
+
one did not. */
|
|
324
|
+
@media (prefers-reduced-motion: reduce) {
|
|
325
|
+
.bd-carousel-track,
|
|
326
|
+
.bd-box {
|
|
327
|
+
transition: none;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
336
330
|
`;
|