@repobit/dex-system-design 0.25.12 → 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 +187 -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
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { html } from 'lit';
|
|
2
|
+
import { docsPage, refSection, resolve, toPx } from './story-chrome.js';
|
|
3
|
+
/* The registry itself, not a copy of it. A table transcribed by hand is a table
|
|
4
|
+
that drifts from the thing it documents the first time either one changes. */
|
|
5
|
+
import pairings from '../../scripts/typography-pairings.json';
|
|
6
|
+
|
|
7
|
+
export default {
|
|
8
|
+
title: 'Foundations/Typography/Vertical Rhythm',
|
|
9
|
+
tags : ['autodocs']
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
/* Every role the package ships, in the order a page uses them. The samples are
|
|
13
|
+
rendered from the tokens rather than transcribed, so this page cannot drift
|
|
14
|
+
from them: if a role changes, this changes with it. */
|
|
15
|
+
const ROLES = [
|
|
16
|
+
['display-sm', 'display', 'A number or word used as an image: a statistic, a headline figure.'],
|
|
17
|
+
['display-md', 'display', 'The same, one step larger.'],
|
|
18
|
+
['display-lg', 'display', 'The largest display step in use.'],
|
|
19
|
+
['heading-h1', 'heading', 'The page title. One per page.'],
|
|
20
|
+
['heading-h2', 'heading', 'A page section: a region the page is built out of.'],
|
|
21
|
+
['heading-h3', 'heading', "A component section: the title of a collection a component owns."],
|
|
22
|
+
['heading-h4', 'heading', 'A sub-section, or a card title in a large panel.'],
|
|
23
|
+
['heading-h5', 'heading', 'An item title: the title of one card inside a collection.'],
|
|
24
|
+
['heading-h6', 'heading', 'The smallest heading; a column head in a footer.'],
|
|
25
|
+
['body-lead', 'body', 'The paragraph directly under a page title.'],
|
|
26
|
+
['body-large', 'body', 'Body copy that wants room, in a wide measure.'],
|
|
27
|
+
['body-regular', 'body', 'Default running text.'],
|
|
28
|
+
['body-small', 'body', 'Supporting copy: a card body, a quote, a caption line that wraps.'],
|
|
29
|
+
['control-label-xl', 'label', 'The name of a large control.'],
|
|
30
|
+
['label-large', 'label', 'The name of a control at default size.'],
|
|
31
|
+
['label-default', 'label', 'A form label.'],
|
|
32
|
+
['label-small', 'label', 'A small label: a badge, a tag, a field hint.'],
|
|
33
|
+
['label-extra-small', 'label', 'The smallest label step, 11px.'],
|
|
34
|
+
['caption-default', 'caption', 'Text under an image or a figure.'],
|
|
35
|
+
['caption-small', 'caption', 'The same, tighter.'],
|
|
36
|
+
['link-standalone', 'link', 'A link that is not inside a sentence.'],
|
|
37
|
+
['code-block', 'code', 'A block of monospaced code.']
|
|
38
|
+
];
|
|
39
|
+
|
|
40
|
+
const DIACRITICS = 'Ă Â Î Ș Ț ă â î ș ț';
|
|
41
|
+
const MIXED = 'AI Security 2026 — Minimum / Maximum';
|
|
42
|
+
const DESCENDERS = 'gjpqy ÅÎȘț';
|
|
43
|
+
const TWO_LINE = 'A sentence just long enough that it takes two lines and no more.';
|
|
44
|
+
const WRAPPING = `A line long enough to wrap more than once, so the space between the lines
|
|
45
|
+
is something you can look at rather than something you have to take on trust.`;
|
|
46
|
+
|
|
47
|
+
const axes = role => {
|
|
48
|
+
const size = resolve(`--typography-${role}-fontSize`);
|
|
49
|
+
const lh = resolve(`--typography-${role}-lineHeight`);
|
|
50
|
+
const px = parseFloat(toPx(size)); // toPx returns a px string, not a number
|
|
51
|
+
const ratio = lh && !Number.isNaN(Number(lh)) && px ? Number(lh) : null;
|
|
52
|
+
return {
|
|
53
|
+
size, lh, px,
|
|
54
|
+
ratio : ratio ? Math.round(ratio * 1000) / 1000 : lh,
|
|
55
|
+
box : ratio && px ? `${Math.round(ratio * px * 100) / 100}px` : '—',
|
|
56
|
+
weight: resolve(`--typography-${role}-fontWeight`),
|
|
57
|
+
track : resolve(`--typography-${role}-letterSpacing`),
|
|
58
|
+
family: (resolve(`--typography-${role}-fontFamily`).split(',')[0] || '').replace(/["']/g, '')
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
const styleFor = role => `
|
|
63
|
+
font-size: var(--typography-${role}-fontSize);
|
|
64
|
+
line-height: var(--typography-${role}-lineHeight);
|
|
65
|
+
font-weight: var(--typography-${role}-fontWeight);
|
|
66
|
+
letter-spacing: var(--typography-${role}-letterSpacing);
|
|
67
|
+
font-family: var(--typography-${role}-fontFamily);
|
|
68
|
+
margin: 0;`;
|
|
69
|
+
|
|
70
|
+
const sample = (role, text, extra = '') =>
|
|
71
|
+
html`<p style="${styleFor(role)}${extra}">${text}</p>`;
|
|
72
|
+
|
|
73
|
+
const roleBlock = ([role, family, responsibility]) => {
|
|
74
|
+
const a = axes(role);
|
|
75
|
+
return html`
|
|
76
|
+
<div style="padding:var(--spacing-24) 0;border-top:var(--border-width-1) solid var(--color-border-subtle);overflow-x:auto">
|
|
77
|
+
<p style="margin:0 0 var(--spacing-12);font-family:var(--typography-fontFamily-mono);font-size:var(--typography-fontSize-xs);color:var(--color-text-muted)">
|
|
78
|
+
<b style="color:var(--color-text-primary)">${role}</b>
|
|
79
|
+
· ${family}
|
|
80
|
+
· size ${a.size}${a.px ? ` (${a.px}px)` : ''}
|
|
81
|
+
· line-height ${a.lh}
|
|
82
|
+
· ratio ${a.ratio}
|
|
83
|
+
· line box ${a.box}
|
|
84
|
+
· weight ${a.weight}
|
|
85
|
+
· tracking ${a.track}
|
|
86
|
+
· family ${a.family}
|
|
87
|
+
</p>
|
|
88
|
+
<p style="margin:0 0 var(--spacing-12);color:var(--color-text-secondary);font-size:var(--typography-fontSize-sm)">
|
|
89
|
+
${responsibility}
|
|
90
|
+
</p>
|
|
91
|
+
${sample(role, 'One line, the way most of these are used.')}
|
|
92
|
+
${sample(role, TWO_LINE, 'margin-top:var(--spacing-8);max-width:26ch')}
|
|
93
|
+
${sample(role, WRAPPING, 'margin-top:var(--spacing-8);max-width:34ch')}
|
|
94
|
+
${sample(role, DIACRITICS, 'margin-top:var(--spacing-8)')}
|
|
95
|
+
${sample(role, MIXED, 'margin-top:var(--spacing-8)')}
|
|
96
|
+
${sample(role, DESCENDERS, 'margin-top:var(--spacing-8)')}
|
|
97
|
+
</div>`;
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
const MATRIX = Object.entries(pairings.pairings)
|
|
101
|
+
.map(([size, entry]) => [size, entry.leadings.join(', '), entry.roles]);
|
|
102
|
+
const EXCEPTIONS = Object.entries(pairings.knownExceptions);
|
|
103
|
+
|
|
104
|
+
export const VerticalRhythm = () =>
|
|
105
|
+
docsPage({
|
|
106
|
+
title: 'Vertical rhythm',
|
|
107
|
+
lede : `Every typography role the package ships, with the leading it resolves to and
|
|
108
|
+
what that leading does to real text — including the Romanian diacritics and
|
|
109
|
+
the descenders that decide whether a line box is actually big enough.`,
|
|
110
|
+
note: html`<b>Roles define intent. The matrix defines what is technically approved.
|
|
111
|
+
Passing the matrix does not establish semantic correctness.</b>
|
|
112
|
+
16px at 1.25 is approved because control text needs it; that does not make it
|
|
113
|
+
body typography. When you are choosing, choose a <i>role</i> — the matrix only
|
|
114
|
+
exists to catch a pairing nobody has ever looked at.`,
|
|
115
|
+
children: html`
|
|
116
|
+
${refSection({
|
|
117
|
+
name : 'Semantic typography roles',
|
|
118
|
+
meta : `${ROLES.length} roles, rendered from the tokens`,
|
|
119
|
+
children: html`
|
|
120
|
+
<p>
|
|
121
|
+
Each block shows one line, the diacritics, a mixed sample, and the same role
|
|
122
|
+
wrapping. The wrapping sample is the one worth looking at: a leading that is
|
|
123
|
+
comfortable on one line can be too tight or too loose across three.
|
|
124
|
+
</p>
|
|
125
|
+
${ROLES.map(roleBlock)}`
|
|
126
|
+
})}
|
|
127
|
+
|
|
128
|
+
${refSection({
|
|
129
|
+
name : 'Technical compatibility boundaries',
|
|
130
|
+
meta : 'not a semantic map',
|
|
131
|
+
children: html`
|
|
132
|
+
<p style="border-left:var(--border-width-4) solid var(--color-border-brand);padding-left:var(--spacing-16)">
|
|
133
|
+
<b>Compatibility does not imply semantic suitability.</b><br />
|
|
134
|
+
The compatibility matrix does not assign semantic meaning. Typography roles
|
|
135
|
+
define intent. The matrix only identifies size × leading combinations known to
|
|
136
|
+
be technically valid.
|
|
137
|
+
</p>
|
|
138
|
+
<p>
|
|
139
|
+
A size carries more than one leading because more than one role shares it and
|
|
140
|
+
their text behaves differently. Anything not listed is not forbidden — it is
|
|
141
|
+
<i>unreviewed</i>, and <code>lint:tokens</code> reports it as
|
|
142
|
+
<code>typography-pairing</code> so somebody decides rather than the number
|
|
143
|
+
deciding.
|
|
144
|
+
</p>
|
|
145
|
+
<div class="table-scroll">
|
|
146
|
+
<table>
|
|
147
|
+
<caption>Leadings approved for each font size, and the roles they exist for</caption>
|
|
148
|
+
<thead>
|
|
149
|
+
<tr>
|
|
150
|
+
<th scope="col">Size</th>
|
|
151
|
+
<th scope="col">Approved leadings</th>
|
|
152
|
+
<th scope="col">Roles this exists for</th>
|
|
153
|
+
</tr>
|
|
154
|
+
</thead>
|
|
155
|
+
<tbody>
|
|
156
|
+
${MATRIX.map(([size, leadings, why]) => html`
|
|
157
|
+
<tr>
|
|
158
|
+
<td class="num">${size}px</td>
|
|
159
|
+
<td class="num">${leadings}</td>
|
|
160
|
+
<td>${why}</td>
|
|
161
|
+
</tr>`)}
|
|
162
|
+
</tbody>
|
|
163
|
+
</table>
|
|
164
|
+
</div>
|
|
165
|
+
<p>
|
|
166
|
+
Both tables on this page are read from
|
|
167
|
+
<code>scripts/typography-pairings.json</code> at build time rather than
|
|
168
|
+
transcribed, so neither can drift from what the lint enforces.
|
|
169
|
+
</p>
|
|
170
|
+
|
|
171
|
+
<div class="table-scroll">
|
|
172
|
+
<table>
|
|
173
|
+
<caption>Recorded exceptions: pairings that stay as they are, and why</caption>
|
|
174
|
+
<thead>
|
|
175
|
+
<tr>
|
|
176
|
+
<th scope="col">Where</th>
|
|
177
|
+
<th scope="col">Pairing</th>
|
|
178
|
+
<th scope="col">Status</th>
|
|
179
|
+
<th scope="col">Why it stays</th>
|
|
180
|
+
<th scope="col">Review trigger</th>
|
|
181
|
+
</tr>
|
|
182
|
+
</thead>
|
|
183
|
+
<tbody>
|
|
184
|
+
${EXCEPTIONS.map(([name, e]) => html`
|
|
185
|
+
<tr>
|
|
186
|
+
<td><code>${name}</code><br /><span style="color:var(--color-text-muted)">${e.role}</span></td>
|
|
187
|
+
<td class="num">${e.pairing}</td>
|
|
188
|
+
<td class="num">${e.status}</td>
|
|
189
|
+
<td>${e.reason}</td>
|
|
190
|
+
<td>${e.reviewTrigger}</td>
|
|
191
|
+
</tr>`)}
|
|
192
|
+
</tbody>
|
|
193
|
+
</table>
|
|
194
|
+
</div>
|
|
195
|
+
|
|
196
|
+
<h3 style="font-size:var(--typography-fontSize-base);margin:var(--spacing-32) 0 var(--spacing-8)">
|
|
197
|
+
Everything set at tight is running on the ink floor
|
|
198
|
+
</h3>
|
|
199
|
+
<p>
|
|
200
|
+
Measured two ways that agree. Canvas text metrics against IBM Plex Sans at every
|
|
201
|
+
production weight, with each face loaded before measuring, give 59.09px of glyph
|
|
202
|
+
ink at 48px/700 against a 60px line box — <b>0.91px of clearance</b>. Reading the
|
|
203
|
+
glyph outlines straight out of the woff2 gives the same figure as a ratio:
|
|
204
|
+
<b>1.231</b>, the point at which the ink of one line meets the ink of the next.
|
|
205
|
+
</p>
|
|
206
|
+
<p>
|
|
207
|
+
That floor is set by Romanian. <code>ș ț Ș Ț</code> reach −0.275em in Bold, a
|
|
208
|
+
third deeper than <code>g</code>, and the tallest accented capitals reach
|
|
209
|
+
+0.977em. Per weight the ink spans 1.174 Light, 1.194 Regular, 1.219 Medium,
|
|
210
|
+
1.235 SemiBold, 1.252 Bold.
|
|
211
|
+
</p>
|
|
212
|
+
<p>
|
|
213
|
+
Nothing clips: <code>ĂÂÎȘȚ</code> and <code>gjpqy</code> render whole at every
|
|
214
|
+
role, which is what the samples above are for. But the margin at
|
|
215
|
+
<code>tight</code> is thin and deliberate. The six display roles and
|
|
216
|
+
heading-h1 and heading-h2 all run 1.25, which at 36px is <b>0.68px</b> of
|
|
217
|
+
clearance and at 48px is 0.91px — <b>the least margin in the system, and the
|
|
218
|
+
reason the display ramp was not tightened further</b> when the leading was
|
|
219
|
+
reviewed against the font in September 2026. Every other role clears by between
|
|
220
|
+
1.6px and 4.6px.
|
|
221
|
+
</p>`
|
|
222
|
+
})}
|
|
223
|
+
`
|
|
224
|
+
});
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { LitElement, css, html } from "lit";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Optional `src` (image URL) with `label` for alt text, or default slot for inline SVG.
|
|
5
|
-
*/
|
|
6
|
-
class BdIcon extends LitElement {
|
|
7
|
-
static properties = {
|
|
8
|
-
src : { type: String },
|
|
9
|
-
label : { type: String },
|
|
10
|
-
width : { type: String },
|
|
11
|
-
height: { type: String }
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
static styles = css`
|
|
15
|
-
:host {
|
|
16
|
-
display: inline-block;
|
|
17
|
-
vertical-align: middle;
|
|
18
|
-
line-height: 0;
|
|
19
|
-
color: var(--color-blue-500);
|
|
20
|
-
}
|
|
21
|
-
.wrap,
|
|
22
|
-
img {
|
|
23
|
-
display: block;
|
|
24
|
-
width: var(--bd-icon-w, auto);
|
|
25
|
-
height: var(--bd-icon-h, auto);
|
|
26
|
-
}
|
|
27
|
-
img {
|
|
28
|
-
object-fit: contain;
|
|
29
|
-
}
|
|
30
|
-
::slotted(svg) {
|
|
31
|
-
display: block;
|
|
32
|
-
width: 100%;
|
|
33
|
-
height: 100%;
|
|
34
|
-
}
|
|
35
|
-
`;
|
|
36
|
-
|
|
37
|
-
render() {
|
|
38
|
-
const w = this.width || "";
|
|
39
|
-
const h = this.height || "";
|
|
40
|
-
const style = `${w ? `--bd-icon-w:${w};` : ""}${h ? `--bd-icon-h:${h};` : ""}`;
|
|
41
|
-
if (this.src) {
|
|
42
|
-
return html`
|
|
43
|
-
<img
|
|
44
|
-
src="${this.src}"
|
|
45
|
-
alt="${this.label || ""}"
|
|
46
|
-
style="${style}"
|
|
47
|
-
loading="lazy"
|
|
48
|
-
decoding="async"
|
|
49
|
-
/>
|
|
50
|
-
`;
|
|
51
|
-
}
|
|
52
|
-
return html`<span class="wrap" style="${style}"><slot></slot></span>`;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
customElements.define("bd-icon", BdIcon);
|
|
@@ -1,240 +0,0 @@
|
|
|
1
|
-
import { LitElement, css, html } from "lit";
|
|
2
|
-
import { tokens } from "../../tokens/tokens.js";
|
|
3
|
-
import "../awards/awards-icon.js";
|
|
4
|
-
import { awardsCSS } from "./awards.css.js";
|
|
5
|
-
|
|
6
|
-
const awardslightOverride = css`
|
|
7
|
-
.bd-awards-root {
|
|
8
|
-
gap: 0;
|
|
9
|
-
}
|
|
10
|
-
`;
|
|
11
|
-
export class AwardsSection extends LitElement {
|
|
12
|
-
static properties = {
|
|
13
|
-
tagline : { type: String },
|
|
14
|
-
headline : { type: String },
|
|
15
|
-
subtext : { type: String },
|
|
16
|
-
secretTitle : { type: String },
|
|
17
|
-
secretSubtext : { type: String },
|
|
18
|
-
desktopAwards : { type: Array },
|
|
19
|
-
features : { type: Array },
|
|
20
|
-
_narrow : { state: true },
|
|
21
|
-
_featureNarrow: { state: true }
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
static styles = [tokens, awardsCSS, awardslightOverride];
|
|
26
|
-
|
|
27
|
-
/** @type {MediaQueryList | null} */
|
|
28
|
-
_mql599 = null;
|
|
29
|
-
/** @type {MediaQueryList | null} */
|
|
30
|
-
_mql767 = null;
|
|
31
|
-
_on599 = () => {
|
|
32
|
-
this._narrow = this._mql599?.matches ?? false;
|
|
33
|
-
};
|
|
34
|
-
_on767 = () => {
|
|
35
|
-
this._featureNarrow = this._mql767?.matches ?? false;
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
constructor() {
|
|
39
|
-
super();
|
|
40
|
-
this.tagline = "You're Making A Great Choice";
|
|
41
|
-
this.headline =
|
|
42
|
-
"World-class security software you can trust. Always.";
|
|
43
|
-
this.subtext =
|
|
44
|
-
"We've added 25 new accolades in the past two years to the hundreds we have won since we started in 2001 - so you know you are in good hands.";
|
|
45
|
-
this.secretTitle = "What's our secret";
|
|
46
|
-
this.secretSubtext =
|
|
47
|
-
"At the heart of Bitdefender lies a powerhouse of proprietary technology, setting it miles apart from the competition.";
|
|
48
|
-
|
|
49
|
-
this.desktopAwards = [
|
|
50
|
-
{
|
|
51
|
-
label : "PC MAG\nEDITORS' CHOICE",
|
|
52
|
-
type : "red",
|
|
53
|
-
format: "svg",
|
|
54
|
-
src : "/assets/pc-mag.svg",
|
|
55
|
-
id : "pc-mag"
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
label : "AV\ncomparatives",
|
|
59
|
-
type : "dark",
|
|
60
|
-
format: "svg",
|
|
61
|
-
src : "/assets/av-comparatives.svg",
|
|
62
|
-
id : "av-comparatives"
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
label : "Best\nBrands\n2024",
|
|
66
|
-
type : "dark",
|
|
67
|
-
format: "svg",
|
|
68
|
-
src : "/assets/best-brands.svg",
|
|
69
|
-
id : "best-brands"
|
|
70
|
-
},
|
|
71
|
-
{
|
|
72
|
-
label : "PC\nChoice\n2024",
|
|
73
|
-
type : "red",
|
|
74
|
-
format: "svg",
|
|
75
|
-
src : "/assets/pc-mag-2024.svg",
|
|
76
|
-
id : "pc-mag-2024"
|
|
77
|
-
},
|
|
78
|
-
{
|
|
79
|
-
label : "PC MAG\nREADERS'\nCHOICE",
|
|
80
|
-
type : "red",
|
|
81
|
-
format: "svg",
|
|
82
|
-
src : "/assets/pc-mag-readers.svg",
|
|
83
|
-
id : "pc-mag-readers"
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
label : "PC\nBusiness\nChoice",
|
|
87
|
-
type : "red",
|
|
88
|
-
format: "svg",
|
|
89
|
-
src : "/assets/pc-mag-business.svg",
|
|
90
|
-
id : "pc-mag-business"
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
label : "AV\nTEST\nTOP\nPRODUCT",
|
|
94
|
-
type : "red",
|
|
95
|
-
format: "svg",
|
|
96
|
-
src : "/assets/top-product.svg",
|
|
97
|
-
id : "top-product"
|
|
98
|
-
}
|
|
99
|
-
];
|
|
100
|
-
|
|
101
|
-
this.features = [
|
|
102
|
-
{
|
|
103
|
-
icon : "brain",
|
|
104
|
-
title: "Machine Learning",
|
|
105
|
-
description:
|
|
106
|
-
"Imagine Bitdefender as a super-smart detective, constantly learning and getting better at spotting bad guys. Just like how you learn from your experiences, Bitdefender learns from millions of cyber threats it encounters every day. It studies their patterns, figures out their tricks, and uses that knowledge to protect your devices from future attacks."
|
|
107
|
-
},
|
|
108
|
-
{
|
|
109
|
-
icon : "chart",
|
|
110
|
-
title: "Behavioral Analysis",
|
|
111
|
-
description:
|
|
112
|
-
"Bitdefender keeps an eye on how you and your devices normally behave. So, when something unusual happens, like a strange file trying to sneak into your computer or a suspicious website trying to steal your info, Bitdefender sounds the alarm. It's like having a loyal sidekick that never sleeps, always on the lookout for trouble and ready to jump into action to keep you safe."
|
|
113
|
-
}
|
|
114
|
-
];
|
|
115
|
-
|
|
116
|
-
this._narrow = false;
|
|
117
|
-
this._featureNarrow = false;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
connectedCallback() {
|
|
121
|
-
super.connectedCallback();
|
|
122
|
-
if (typeof window !== "undefined" && window.matchMedia) {
|
|
123
|
-
this._mql599 = window.matchMedia("(max-width: 599px)");
|
|
124
|
-
this._mql767 = window.matchMedia("(max-width: 767px)");
|
|
125
|
-
this._narrow = this._mql599.matches;
|
|
126
|
-
this._featureNarrow = this._mql767.matches;
|
|
127
|
-
this._mql599.addEventListener("change", this._on599);
|
|
128
|
-
this._mql767.addEventListener("change", this._on767);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
disconnectedCallback() {
|
|
133
|
-
super.disconnectedCallback();
|
|
134
|
-
this._mql599?.removeEventListener("change", this._on599);
|
|
135
|
-
this._mql767?.removeEventListener("change", this._on767);
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
_renderBadge(award) {
|
|
139
|
-
const ariaLabel = award.label.replace(/\n/g, " ");
|
|
140
|
-
const classes = `bd-awards-badge ${award.type === "dark" ? "bd-awards-badge--dark" : ""}`;
|
|
141
|
-
return html`
|
|
142
|
-
<div class="${classes}" data-award-id="${award.id}" role="listitem">
|
|
143
|
-
<bd-icon src="${award.src}" label="${ariaLabel}"></bd-icon>
|
|
144
|
-
</div>
|
|
145
|
-
`;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
_renderFeature(f) {
|
|
149
|
-
const narrow = this._featureNarrow;
|
|
150
|
-
const iconSrc =
|
|
151
|
-
f.icon === "brain"
|
|
152
|
-
? "/assets/machine-learning.svg"
|
|
153
|
-
: "/assets/analysis.svg";
|
|
154
|
-
|
|
155
|
-
return html`
|
|
156
|
-
<article class="bd-awards-feature-card">
|
|
157
|
-
<div class="bd-awards-feature-icon" aria-hidden="true">
|
|
158
|
-
<bd-icon src="${iconSrc}" label=""></bd-icon>
|
|
159
|
-
</div>
|
|
160
|
-
<div class="bd-awards-feature-text">
|
|
161
|
-
${narrow
|
|
162
|
-
? html`<bd-h as="h6" class="bd-awards-feature-title">${f.title}</bd-h>`
|
|
163
|
-
: html`<bd-h as="h4" class="bd-awards-feature-title">${f.title}</bd-h>`}
|
|
164
|
-
${narrow
|
|
165
|
-
? html`<bd-p kind="small" class="bd-awards-feature-desc">${f.description}</bd-p>`
|
|
166
|
-
: html`<bd-p kind="regular" class="bd-awards-feature-desc">${f.description}</bd-p>`}
|
|
167
|
-
</div>
|
|
168
|
-
</article>
|
|
169
|
-
`;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
render() {
|
|
173
|
-
const narrow = this._narrow;
|
|
174
|
-
|
|
175
|
-
return html`
|
|
176
|
-
<section
|
|
177
|
-
class="bd-awards-root"
|
|
178
|
-
aria-label="Awards and recognition"
|
|
179
|
-
>
|
|
180
|
-
<div class="bd-awards-trust-banner">
|
|
181
|
-
<div class="bd-awards-trust-intro">
|
|
182
|
-
<span class="bd-awards-laurel-icon" aria-hidden="true">
|
|
183
|
-
<bd-icon
|
|
184
|
-
label=""
|
|
185
|
-
>
|
|
186
|
-
<svg
|
|
187
|
-
width="80"
|
|
188
|
-
height="80"
|
|
189
|
-
viewBox="0 0 80 80"
|
|
190
|
-
fill="none"
|
|
191
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
192
|
-
aria-hidden="true"
|
|
193
|
-
>
|
|
194
|
-
<path
|
|
195
|
-
d="M48.0751 11.994C48.0751 17.6107 52.457 21.9791 58.0908 21.9791C58.0908 16.4873 53.5837 11.994 48.0751 11.994ZM61.8466 19.7325C62.9734 16.737 65.1017 13.9911 68.1064 12.2437C68.9828 11.7444 70.1096 12.1189 70.6103 12.8677L72.7387 16.6121C75.3678 21.1054 75.493 26.3476 73.615 30.8409C74.9922 30.3417 76.6197 29.9672 78.2473 29.9672C79.2488 29.9672 80 30.8409 80 31.8394V35.9583C80 41.2005 77.4961 45.8186 73.615 48.8141C75.2426 49.0637 76.7449 49.563 78.1221 50.4367C78.9984 50.9359 79.2488 52.0592 78.8732 52.8081L76.7449 56.5525C73.2394 62.5436 66.4789 65.4143 60.0939 64.291L59.4679 64.0414C57.9656 63.2925 56.4632 62.6684 54.9609 62.0443C53.8341 61.6699 52.7074 61.2955 51.4554 61.0458C58.9671 57.0518 64.1002 49.0637 64.1002 39.9523C64.1002 34.835 62.2222 29.9672 59.0923 25.9732H58.0908C50.3286 25.9732 44.0689 19.7325 44.0689 11.994V9.99702C44.0689 8.99851 44.9452 8 46.072 8H48.0751C54.9609 8 60.8451 13.1174 61.8466 19.7325ZM39.9374 67.9106V68.0354H37.5587C32.9264 68.0354 28.2942 69.0339 24.1628 71.1558L22.9108 71.7798C21.9092 72.2791 20.6573 71.9046 20.1565 70.9061C19.6557 69.9076 20.1565 68.6595 21.0329 68.1602L22.2848 67.5362C24.1628 66.6625 26.0407 65.9136 28.0438 65.2895C26.6667 64.6654 25.2895 63.9166 24.0376 63.0429C23.1612 63.4173 22.2848 63.6669 21.5336 63.9166C14.6479 65.7888 7.01095 62.918 3.25509 56.5525L1.25196 52.8081C0.751174 52.0592 1.00156 50.9359 1.87793 50.4367C3.25509 49.563 4.75743 49.0637 6.38498 48.8141C2.50391 45.8186 0 41.2005 0 35.9583V31.8394C0 30.8409 0.751174 29.9672 1.75274 29.9672C3.38028 29.9672 5.00782 30.3417 6.38498 30.8409C4.50704 26.3476 4.75743 21.1054 7.26135 16.6121L9.38967 12.8677C9.89045 12.1189 11.0172 11.7444 11.8936 12.2437C14.8983 13.9911 17.0266 16.737 18.1534 19.7325C19.2801 13.1174 25.0391 8 32.0501 8H34.0532C35.0548 8 36.0563 8.99851 36.0563 9.99702V11.994C36.0563 19.7325 29.6714 25.9732 22.0344 25.9732H20.9077C17.7778 29.9672 16.025 34.835 16.025 39.9523C16.025 53.1826 26.7919 63.9166 40.0626 63.9166H42.4413C47.6995 63.9166 52.9577 65.1647 57.7152 67.5362L58.9671 68.1602C59.9687 68.6595 60.3443 69.9076 59.8435 70.9061C59.3427 71.7798 58.0908 72.2791 57.0892 71.7798L55.8372 71.1558C51.7058 69.0339 47.0736 67.9106 42.4413 67.9106H40.0626H39.9374ZM22.0344 21.9791C27.543 21.9791 32.0501 17.6107 32.0501 11.994C29.1706 11.994 26.6667 13.2422 24.7887 15.1144C23.036 16.8618 22.0344 19.3581 22.0344 21.9791ZM12.0188 44.196C12.0188 39.3282 8.5133 35.2094 4.00626 34.2109V35.9583C4.00626 41.2005 7.26135 45.6937 12.0188 47.3163V44.196ZM68.1064 47.3163C72.7387 45.6937 76.1189 41.2005 76.1189 35.9583V34.2109C71.4867 35.3342 68.1064 39.3282 68.1064 44.196V47.3163ZM17.7778 57.6759C15.3991 53.4322 10.3912 51.56 5.88419 53.0578L6.76056 54.5555C9.38967 59.0488 14.5227 61.1707 19.4053 60.297L17.7778 57.6759ZM12.0188 32.3387L13.6463 29.7176C16.025 25.4739 15.1487 20.2317 11.6432 17.1114L10.7668 18.6092C8.13772 23.1025 8.88889 28.5943 12.0188 32.3387ZM66.3537 29.7176L67.9812 32.3387C71.1111 28.5943 71.8623 23.1025 69.2332 18.6092L68.3568 17.1114C64.8513 20.2317 63.975 25.4739 66.3537 29.7176ZM62.2222 57.6759L60.5947 60.297C65.4773 61.1707 70.6103 59.0488 73.2394 54.5555L74.1158 53.0578C69.6088 51.56 64.6009 53.4322 62.2222 57.6759Z"
|
|
196
|
-
fill="currentColor"
|
|
197
|
-
/>
|
|
198
|
-
</svg>
|
|
199
|
-
</bd-icon>
|
|
200
|
-
</span>
|
|
201
|
-
|
|
202
|
-
${narrow
|
|
203
|
-
? html`<bd-p kind="small" class="bd-awards-tagline">${this.tagline}</bd-p>`
|
|
204
|
-
: html`<bd-p kind="large" class="bd-awards-tagline">${this.tagline}</bd-p>`}
|
|
205
|
-
|
|
206
|
-
${narrow
|
|
207
|
-
? html`
|
|
208
|
-
<bd-h as="h4" class="bd-awards-headline">
|
|
209
|
-
<span class="bd-awards-headline-line">World-class security</span>
|
|
210
|
-
<span class="bd-awards-headline-line">software you can trust.</span>
|
|
211
|
-
<span class="bd-awards-headline-line">Always.</span>
|
|
212
|
-
</bd-h>
|
|
213
|
-
`
|
|
214
|
-
: html`<bd-h as="h3" class="bd-awards-headline">${this.headline}</bd-h>`}
|
|
215
|
-
|
|
216
|
-
${narrow
|
|
217
|
-
? html`<bd-p kind="small" class="bd-awards-subtext">${this.subtext}</bd-p>`
|
|
218
|
-
: html`<bd-p kind="regular" class="bd-awards-subtext">${this.subtext}</bd-p>`}
|
|
219
|
-
</div>
|
|
220
|
-
|
|
221
|
-
<div
|
|
222
|
-
class="bd-awards-bar"
|
|
223
|
-
role="list"
|
|
224
|
-
aria-label="Industry awards"
|
|
225
|
-
>
|
|
226
|
-
<div class="bd-awards-row" role="presentation">
|
|
227
|
-
${this.desktopAwards.slice(0, 3).map((a) => this._renderBadge(a))}
|
|
228
|
-
</div>
|
|
229
|
-
<div class="bd-awards-row" role="presentation">
|
|
230
|
-
${this.desktopAwards.slice(3).map((a) => this._renderBadge(a))}
|
|
231
|
-
</div>
|
|
232
|
-
</div>
|
|
233
|
-
</div>
|
|
234
|
-
|
|
235
|
-
<div class="bd-awards-lower">
|
|
236
|
-
`;
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
customElements.define("bd-awards-section-light", AwardsSection);
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { LitElement, css, html } from "lit";
|
|
2
|
-
import { tokens } from "../../tokens/tokens.js";
|
|
3
|
-
|
|
4
|
-
class Banner extends LitElement {
|
|
5
|
-
static properties = {
|
|
6
|
-
variant: { type: String, reflect: true }
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
static styles = [tokens, css`
|
|
10
|
-
:host {
|
|
11
|
-
display: block;
|
|
12
|
-
width: 100%;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
.banner {
|
|
16
|
-
padding: var(--spacing-12) var(--spacing-16);
|
|
17
|
-
font-family: var(--typography-fontFamily-sans);
|
|
18
|
-
font-size: var(--typography-body-regular-fontSize);
|
|
19
|
-
font-weight: var(--typography-fontWeight-normal);
|
|
20
|
-
color: var(--color-neutral-900);
|
|
21
|
-
background: var(--color-neutral-50);
|
|
22
|
-
border-radius: var(--radius-sm);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
:host([variant="info"]) .banner {
|
|
26
|
-
background: var(--color-blue-50);
|
|
27
|
-
color: var(--color-blue-700);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
:host([variant="success"]) .banner {
|
|
31
|
-
background: var(--color-green-50);
|
|
32
|
-
color: var(--color-green-800);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
:host([variant="warning"]) .banner {
|
|
36
|
-
background: var(--color-yellow-50);
|
|
37
|
-
color: var(--color-yellow-800);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
:host([variant="error"]) .banner {
|
|
41
|
-
background: var(--color-red-50);
|
|
42
|
-
color: var(--color-red-700);
|
|
43
|
-
}
|
|
44
|
-
`];
|
|
45
|
-
|
|
46
|
-
constructor() {
|
|
47
|
-
super();
|
|
48
|
-
this.variant = "info";
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
render() {
|
|
52
|
-
return html`
|
|
53
|
-
<div class="banner" role="alert">
|
|
54
|
-
<slot></slot>
|
|
55
|
-
</div>
|
|
56
|
-
`;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
customElements.define("bd-banner", Banner);
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { html } from 'lit';
|
|
2
|
-
import './banner.js';
|
|
3
|
-
|
|
4
|
-
export default {
|
|
5
|
-
title : 'Components/Banner',
|
|
6
|
-
tags : ['autodocs'],
|
|
7
|
-
argTypes: {
|
|
8
|
-
message: {
|
|
9
|
-
control : 'text',
|
|
10
|
-
description: 'Text mesaj banner',
|
|
11
|
-
table : { type: { summary: 'string' } }
|
|
12
|
-
},
|
|
13
|
-
variant: {
|
|
14
|
-
control : { type: 'select' },
|
|
15
|
-
options : ['info', 'success', 'warning', 'error'],
|
|
16
|
-
description: 'Varianta vizuala',
|
|
17
|
-
table : { type: { summary: 'string' }, defaultValue: { summary: 'info' } }
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
export const Info = {
|
|
23
|
-
name : 'Info',
|
|
24
|
-
render: () => html`<bd-banner variant="info">This is an informational message.</bd-banner>`
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
export const Success = {
|
|
28
|
-
name : 'Success',
|
|
29
|
-
render: () => html`<bd-banner variant="success">Operation completed successfully.</bd-banner>`
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
export const Warning = {
|
|
33
|
-
name : 'Warning',
|
|
34
|
-
render: () => html`<bd-banner variant="warning">Please review before continuing.</bd-banner>`
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
export const Error = {
|
|
38
|
-
name : 'Error',
|
|
39
|
-
render: () => html`<bd-banner variant="error">Something went wrong. Please try again.</bd-banner>`
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
export const Playground = {
|
|
43
|
-
name: '🛝 Playground',
|
|
44
|
-
args: {
|
|
45
|
-
message: 'This is a banner message.',
|
|
46
|
-
variant: 'info'
|
|
47
|
-
},
|
|
48
|
-
render: (args) => html`
|
|
49
|
-
<bd-banner variant="${args.variant}" message="${args.message}"></bd-banner>
|
|
50
|
-
`
|
|
51
|
-
};
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { LitElement, css, html } from "lit";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class ArrowIconComponent extends LitElement {
|
|
5
|
-
|
|
6
|
-
static styles = css`
|
|
7
|
-
.arrow-icon {
|
|
8
|
-
height: 10px;
|
|
9
|
-
font-weight: 600;
|
|
10
|
-
}
|
|
11
|
-
`;
|
|
12
|
-
render() {
|
|
13
|
-
return html`
|
|
14
|
-
<svg class="arrow-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 404.39">
|
|
15
|
-
<path
|
|
16
|
-
fill-rule="nonzero"
|
|
17
|
-
d="M438.95 219.45 0 219.99v-34.98l443.3-.55L269.8 25.79 293.39 0 512 199.92 288.88 404.39l-23.59-25.8z"
|
|
18
|
-
/>
|
|
19
|
-
</svg>
|
|
20
|
-
`;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
customElements.define('arrow-icon', ArrowIconComponent);
|
|
File without changes
|