@repobit/dex-system-design 0.25.11 → 0.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (336) hide show
  1. package/CHANGELOG.md +195 -0
  2. package/README.md +131 -8
  3. package/package.json +95 -13
  4. package/schemas/component-manifest.json +3294 -405
  5. package/schemas/manifest-omissions.json +173 -0
  6. package/src/blog/src/breakpoints.js +6 -6
  7. package/src/blog/src/content/blog-atoms-showcase.js +1 -1
  8. package/src/blog/src/content/blog-page-layout.js +2 -2
  9. package/src/blog/src/lib/article-toc.js +7 -7
  10. package/src/blog/src/shell/blog-shell.js +1 -1
  11. package/src/blog/src/tokens/blog.js +2 -2
  12. package/src/blog/src/tokens/core.js +34 -35
  13. package/src/blog/src/tokens/legacy.js +0 -9
  14. package/src/blog/tokens/blog.js +2 -2
  15. package/src/blog/tokens/core.js +34 -35
  16. package/src/blog/tokens/legacy.js +0 -9
  17. package/src/blog/tokens.css +36 -46
  18. package/src/components/accordion/accordion-bg.css.js +83 -59
  19. package/src/components/accordion/accordion-bg.js +29 -10
  20. package/src/components/accordion/accordion-bg.stories.js +67 -67
  21. package/src/components/accordion/accordion-keyboard.js +80 -0
  22. package/src/components/accordion/accordion.css.js +142 -80
  23. package/src/components/accordion/accordion.js +37 -10
  24. package/src/components/accordion/accordion.stories.js +7 -7
  25. package/src/components/agent-endpoints/agent-endpoints.css.js +36 -39
  26. package/src/components/agent-endpoints/agent-endpoints.js +30 -20
  27. package/src/components/agent-endpoints/agent-endpoints.stories.js +1 -1
  28. package/src/components/ai-guardian-demo.stories.js +91 -91
  29. package/src/components/alert/alert.css.js +198 -0
  30. package/src/components/alert/alert.js +103 -0
  31. package/src/components/alert/alert.stories.js +206 -0
  32. package/src/components/anchor/anchor-nav.css.js +213 -101
  33. package/src/components/anchor/anchor-nav.js +26 -40
  34. package/src/components/anchor/anchor.stories.js +22 -12
  35. package/src/components/annotation/annotation.css.js +58 -0
  36. package/src/components/annotation/annotation.js +67 -0
  37. package/src/components/annotation/annotation.stories.js +63 -0
  38. package/src/components/architecture.stories.js +285 -0
  39. package/src/components/atoms.stories.js +342 -0
  40. package/src/components/avatar/avatar.css.js +67 -0
  41. package/src/components/avatar/avatar.js +42 -0
  42. package/src/components/avatar/avatar.stories.js +95 -0
  43. package/src/components/awards/awards-flex.css.js +209 -23
  44. package/src/components/awards/awards-flex.js +66 -7
  45. package/src/components/awards/awards-flex.stories.js +1 -1
  46. package/src/components/awards/{awards-light.stories.js → awards-summary.stories.js} +54 -64
  47. package/src/components/awards/awards.css.js +116 -58
  48. package/src/components/awards/awards.js +102 -28
  49. package/src/components/awards/awards.stories.js +1 -1
  50. package/src/components/back/back.css.js +51 -22
  51. package/src/components/back/back.js +28 -7
  52. package/src/components/back/back.stories.js +9 -3
  53. package/src/components/badge/badge.css.js +158 -46
  54. package/src/components/badge/badge.js +62 -74
  55. package/src/components/badge/badge.stories.js +176 -248
  56. package/src/components/bento-grid/bento-grid.css.js +21 -16
  57. package/src/components/bento-grid/bento-grid.js +16 -4
  58. package/src/components/bento-grid/bento-grid.stories.js +19 -18
  59. package/src/components/bento-grid/bento-item.css.js +52 -28
  60. package/src/components/bento-grid/bento-item.js +2 -2
  61. package/src/components/blockquote/blockquote.css.js +47 -0
  62. package/src/components/blockquote/blockquote.js +29 -0
  63. package/src/components/blockquote/blockquote.stories.js +62 -0
  64. package/src/components/breadcrumb/breadcrumb.css.js +92 -22
  65. package/src/components/breadcrumb/breadcrumb.js +56 -11
  66. package/src/components/button/button.css.js +531 -161
  67. package/src/components/button/button.js +206 -214
  68. package/src/components/button/button.stories.js +322 -174
  69. package/src/components/caption/caption.css.js +21 -0
  70. package/src/components/caption/caption.js +31 -0
  71. package/src/components/caption/caption.stories.js +62 -0
  72. package/src/components/card-features/card-features.css.js +14 -22
  73. package/src/components/card-features/card-features.js +68 -9
  74. package/src/components/card-features/card-features.stories.js +11 -11
  75. package/src/components/cards/card.css.js +60 -81
  76. package/src/components/cards/card.js +56 -25
  77. package/src/components/cards/card.stories.js +39 -39
  78. package/src/components/carousel/carousel.css.js +93 -99
  79. package/src/components/carousel/carousel.js +32 -4
  80. package/src/components/checkbox/checkbox.css.js +111 -93
  81. package/src/components/checkbox/checkbox.js +64 -90
  82. package/src/components/checkbox/checkbox.stories.js +96 -29
  83. package/src/components/code/code.css.js +70 -0
  84. package/src/components/code/code.js +40 -0
  85. package/src/components/code/code.stories.js +73 -0
  86. package/src/components/compare/compare.css.js +179 -43
  87. package/src/components/compare/compare.js +52 -25
  88. package/src/components/compare/compare.stories.js +61 -4
  89. package/src/components/comparison-panel/comparison-panel.css.js +38 -51
  90. package/src/components/comparison-panel/comparison-panel.js +5 -4
  91. package/src/components/comparison-panel/comparison-panel.stories.js +1 -1
  92. package/src/components/compatibility-table/compatibility-table.css.js +180 -80
  93. package/src/components/compatibility-table/compatibility-table.js +37 -9
  94. package/src/components/control-alignment.stories.js +393 -0
  95. package/src/components/cta-banner/cta-banner.css.js +41 -13
  96. package/src/components/cta-banner/cta-banner.js +6 -5
  97. package/src/components/cta-banner/cta-banner.stories.js +43 -98
  98. package/src/components/display/display.css.js +25 -1
  99. package/src/components/display/display.js +46 -13
  100. package/src/components/display/display.stories.js +270 -40
  101. package/src/components/divider/divider-horizontal.js +21 -5
  102. package/src/components/divider/divider-vertical.js +15 -7
  103. package/src/components/divider/divider.css.js +2 -2
  104. package/src/components/divider/divider.stories.js +38 -34
  105. package/src/components/dropdown/dropdown.css.js +93 -126
  106. package/src/components/dropdown/dropdown.js +114 -34
  107. package/src/components/dropdown/dropdown.stories.js +56 -24
  108. package/src/components/features/features.css.js +24 -11
  109. package/src/components/features/features.js +7 -3
  110. package/src/components/features/features.stories.js +37 -37
  111. package/src/components/features-tab/features-tab.css.js +19 -8
  112. package/src/components/features-tab/features-tab.js +6 -5
  113. package/src/components/features-tab/features-tab.stories.js +23 -23
  114. package/src/components/fieldset/fieldset.css.js +30 -0
  115. package/src/components/fieldset/fieldset.js +28 -0
  116. package/src/components/fieldset/fieldset.stories.js +84 -0
  117. package/src/components/footer/footer-links-group.css.js +10 -14
  118. package/src/components/footer/footer-links-group.js +4 -3
  119. package/src/components/footer/footer-lp.css.js +59 -30
  120. package/src/components/footer/footer-lp.js +17 -12
  121. package/src/components/footer/footer-lp.stories.js +63 -75
  122. package/src/components/footer/footer-nav-menu.css.js +26 -4
  123. package/src/components/footer/footer-nav-menu.js +3 -2
  124. package/src/components/footer/footer.css.js +146 -264
  125. package/src/components/footer/footer.js +176 -106
  126. package/src/components/footer/footer.stories.js +9 -9
  127. package/src/components/footer/localeMap.js +1 -1
  128. package/src/components/grid/grid.css.js +1 -1
  129. package/src/components/grid/grid.js +49 -7
  130. package/src/components/grid/grid.stories.js +111 -0
  131. package/src/components/header/header-code.css.js +61 -51
  132. package/src/components/header/header-code.js +28 -14
  133. package/src/components/header/header-code.stories.js +5 -5
  134. package/src/components/header/header.css.js +655 -176
  135. package/src/components/header/header.js +269 -36
  136. package/src/components/header/header.stories.js +841 -18
  137. package/src/components/heading/heading.css.js +14 -17
  138. package/src/components/heading/heading.js +48 -33
  139. package/src/components/heading/heading.stories.js +27 -25
  140. package/src/components/help-text/help-text.css.js +21 -0
  141. package/src/components/help-text/help-text.js +25 -0
  142. package/src/components/help-text/help-text.stories.js +66 -0
  143. package/src/components/highlight/highlight.css.js +86 -64
  144. package/src/components/highlight/highlight.js +18 -27
  145. package/src/components/highlight/highlight.stories.js +14 -3
  146. package/src/components/icons/analysis-icon.js +6 -16
  147. package/src/components/icons/arrow-down-icon.js +6 -19
  148. package/src/components/icons/arrow-icon.js +44 -0
  149. package/src/components/icons/arrow-right-icon.js +30 -23
  150. package/src/components/icons/arrow-up-icon.js +19 -18
  151. package/src/components/icons/bd-ai-icon.js +1 -1
  152. package/src/components/icons/brand-marks.stories.js +279 -0
  153. package/src/components/icons/brand-signature-icon.js +42 -0
  154. package/src/components/icons/check-icon.js +27 -0
  155. package/src/components/icons/circle-info-icon.js +33 -0
  156. package/src/components/icons/close-icon.js +6 -18
  157. package/src/components/icons/family-icon.js +8 -20
  158. package/src/components/icons/globe-icon.js +6 -18
  159. package/src/components/icons/guide-icon.js +6 -18
  160. package/src/components/icons/icon-element.js +99 -0
  161. package/src/components/icons/icons.js +36 -0
  162. package/src/components/icons/icons.stories.js +184 -52
  163. package/src/components/icons/individual-icon.js +6 -18
  164. package/src/components/icons/laurel-icon.js +9 -19
  165. package/src/components/icons/machine-learning-icon.js +6 -17
  166. package/src/components/icons/marks.js +41 -0
  167. package/src/components/icons/minus-icon.js +7 -21
  168. package/src/components/icons/missing-icon.js +52 -0
  169. package/src/components/icons/plus-icon.js +7 -21
  170. package/src/components/icons/quote-icon.js +19 -19
  171. package/src/components/image/image.css.js +72 -25
  172. package/src/components/image/image.js +11 -6
  173. package/src/components/image/image.stories.js +2 -2
  174. package/src/components/input/custom-form.stories.js +214 -62
  175. package/src/components/input/input-clipboard.css.js +51 -144
  176. package/src/components/input/input-clipboard.js +31 -15
  177. package/src/components/input/input.css.js +8 -146
  178. package/src/components/input/input.js +93 -38
  179. package/src/components/install-options/install-options.css.js +84 -77
  180. package/src/components/install-options/install-options.js +33 -30
  181. package/src/components/install-options/install-options.stories.js +3 -3
  182. package/src/components/label/label.css.js +35 -0
  183. package/src/components/label/label.js +38 -0
  184. package/src/components/label/label.stories.js +82 -0
  185. package/src/components/light-carousel/light-carousel.css.js +111 -63
  186. package/src/components/light-carousel/light-carousel.js +85 -11
  187. package/src/components/light-carousel/light-carousel.stories.js +126 -82
  188. package/src/components/link/link.css.js +150 -99
  189. package/src/components/link/link.js +86 -11
  190. package/src/components/link/link.stories.js +124 -30
  191. package/src/components/list/list-item/list-item.css.js +74 -22
  192. package/src/components/list/list-item/list-item.js +32 -10
  193. package/src/components/list/list-item/list-item.stories.js +23 -23
  194. package/src/components/list/list.css.js +8 -2
  195. package/src/components/list/list.js +3 -2
  196. package/src/components/list/list.stories.js +222 -0
  197. package/src/components/modal/modal.css.js +114 -24
  198. package/src/components/modal/modal.js +83 -7
  199. package/src/components/modal/modal.stories.js +9 -9
  200. package/src/components/overview/overview.css.js +19 -14
  201. package/src/components/overview/overview.js +6 -5
  202. package/src/components/overview/overview.stories.js +10 -10
  203. package/src/components/page-switcher/page-switcher.css.js +97 -40
  204. package/src/components/page-switcher/page-switcher.js +28 -5
  205. package/src/components/page-switcher/page-switcher.stories.js +95 -0
  206. package/src/components/paragraph/paragraph.css.js +15 -10
  207. package/src/components/paragraph/paragraph.js +41 -44
  208. package/src/components/paragraph/paragraph.stories.js +56 -21
  209. package/src/components/picture/picture.css.js +103 -44
  210. package/src/components/picture/picture.js +100 -30
  211. package/src/components/picture/picture.stories.js +1 -1
  212. package/src/components/pricing-cards/new-pricing-card.js +3 -3
  213. package/src/components/pricing-cards/new-pricing.css.js +24 -15
  214. package/src/components/pricing-cards/pricing-card-actions.css.js +1 -1
  215. package/src/components/pricing-cards/pricing-card-actions.js +3 -4
  216. package/src/components/pricing-cards/pricing-card-container.css.js +3 -3
  217. package/src/components/pricing-cards/pricing-card-container.js +3 -2
  218. package/src/components/pricing-cards/pricing-card-header.css.js +10 -8
  219. package/src/components/pricing-cards/pricing-card-header.js +6 -7
  220. package/src/components/pricing-cards/pricing-card-pricing.css.js +16 -9
  221. package/src/components/pricing-cards/pricing-card-pricing.js +8 -6
  222. package/src/components/pricing-cards/pricing-card-show-more.css.js +11 -3
  223. package/src/components/pricing-cards/pricing-card-show-more.js +8 -3
  224. package/src/components/pricing-cards/pricing-card.css.js +244 -190
  225. package/src/components/pricing-cards/pricing-card.js +54 -70
  226. package/src/components/pricing-cards/pricing-feature-item.css.js +25 -8
  227. package/src/components/pricing-cards/pricing-feature-item.js +8 -3
  228. package/src/components/process-steps/process-steps.css.js +26 -14
  229. package/src/components/process-steps/process-steps.js +23 -6
  230. package/src/components/process-steps/process-steps.stories.js +1 -1
  231. package/src/components/progress/progress.css.js +80 -0
  232. package/src/components/progress/progress.js +42 -0
  233. package/src/components/progress/progress.stories.js +79 -0
  234. package/src/components/quick-answer/quick-answer.css.js +75 -13
  235. package/src/components/quick-answer/quick-answer.js +8 -3
  236. package/src/components/radio/radio.css.js +92 -128
  237. package/src/components/radio/radio.js +106 -127
  238. package/src/components/radio/radio.stories.js +54 -19
  239. package/src/components/review/review-grid.css.js +5 -6
  240. package/src/components/review/review-grid.js +14 -11
  241. package/src/components/review/review.css.js +11 -6
  242. package/src/components/review/review.js +3 -8
  243. package/src/components/shared/ensemble.css.js +93 -0
  244. package/src/components/shared/form-field.css.js +206 -0
  245. package/src/components/shared/prop-vocabulary.js +48 -0
  246. package/src/components/shared/token-scales.js +306 -0
  247. package/src/components/skeleton/skeleton.css.js +34 -0
  248. package/src/components/skeleton/skeleton.js +32 -0
  249. package/src/components/skeleton/skeleton.stories.js +70 -0
  250. package/src/components/spinner/spinner.css.js +62 -0
  251. package/src/components/spinner/spinner.js +38 -0
  252. package/src/components/spinner/spinner.stories.js +92 -0
  253. package/src/components/spotlight-section/spotlight-section.css.js +14 -13
  254. package/src/components/spotlight-section/spotlight-section.js +42 -39
  255. package/src/components/switch/switch.css.js +103 -0
  256. package/src/components/switch/switch.js +44 -0
  257. package/src/components/switch/switch.stories.js +86 -0
  258. package/src/components/tab-list/content-switcher.stories.js +189 -0
  259. package/src/components/tab-list/tab-list.css.js +250 -0
  260. package/src/components/tab-list/tab-list.js +184 -0
  261. package/src/components/tab-list/tab-list.stories.js +221 -0
  262. package/src/components/tabs/tabs.css.js +14 -123
  263. package/src/components/tabs/tabs.js +16 -19
  264. package/src/components/tabs/tabs.stories.js +95 -95
  265. package/src/components/tag/tag.css.js +54 -0
  266. package/src/components/tag/tag.js +32 -0
  267. package/src/components/tag/tag.stories.js +126 -0
  268. package/src/components/terminal/terminal-message.css.js +164 -60
  269. package/src/components/terminal/terminal-message.js +5 -5
  270. package/src/components/terminal/terminal-message.stories.js +70 -1
  271. package/src/components/termsOfUse/terms.css.js +25 -20
  272. package/src/components/termsOfUse/terms.js +13 -9
  273. package/src/components/termsOfUse/terms.stories.js +1 -1
  274. package/src/components/textarea/textarea.css.js +51 -0
  275. package/src/components/textarea/textarea.js +136 -0
  276. package/src/components/textarea/textarea.stories.js +191 -0
  277. package/src/components/tooltip/tooltip.css.js +75 -0
  278. package/src/components/tooltip/tooltip.js +156 -0
  279. package/src/components/tooltip/tooltip.stories.js +161 -0
  280. package/src/components/trust-panel/trust-panel.css.js +85 -33
  281. package/src/components/trust-panel/trust-panel.js +18 -10
  282. package/src/components/trust-panel/trust-panel.stories.js +1 -1
  283. package/src/components/ultimate-security-demo.stories.js +431 -0
  284. package/src/components/video/video.css.js +17 -0
  285. package/src/components/video/video.js +40 -0
  286. package/src/components/video/video.stories.js +106 -0
  287. package/src/components/video-player/video-player.css.js +67 -11
  288. package/src/components/video-player/video-player.js +35 -4
  289. package/src/components/video-player/video-player.stories.js +1 -1
  290. package/src/components/visual-alignment.stories.js +411 -0
  291. package/src/components/visually-hidden/visually-hidden.css.js +24 -0
  292. package/src/components/visually-hidden/visually-hidden.js +16 -0
  293. package/src/components/visually-hidden/visually-hidden.stories.js +56 -0
  294. package/src/stories/Button.stories.js +17 -17
  295. package/src/stories/Header.stories.js +10 -10
  296. package/src/stories/Page.js +1 -1
  297. package/src/stories/Page.stories.js +6 -6
  298. package/src/tokens/borders.stories.js +339 -0
  299. package/src/tokens/color-responsibilities.stories.js +227 -0
  300. package/src/tokens/dark-derivation.js +309 -0
  301. package/src/tokens/dark-findings.js +197 -0
  302. package/src/tokens/dark-mode.stories.js +207 -0
  303. package/src/tokens/dimension.stories.js +251 -0
  304. package/src/tokens/elevation.stories.js +143 -0
  305. package/src/tokens/focus.stories.js +276 -0
  306. package/src/tokens/fonts.css +20 -20
  307. package/src/tokens/fonts.stories.js +354 -374
  308. package/src/tokens/layout.css +25 -11
  309. package/src/tokens/motion.stories.js +231 -0
  310. package/src/tokens/shape.stories.js +272 -0
  311. package/src/tokens/spacing-rhythm.stories.js +359 -0
  312. package/src/tokens/spacing.stories.js +208 -703
  313. package/src/tokens/story-chrome.js +503 -0
  314. package/src/tokens/surfaces.stories.js +224 -0
  315. package/src/tokens/text-on-surface.stories.js +164 -0
  316. package/src/tokens/token-map.js +220 -0
  317. package/src/tokens/token-map.stories.js +257 -0
  318. package/src/tokens/token-purposes.js +266 -0
  319. package/src/tokens/tokens-grid.stories.js +388 -900
  320. package/src/tokens/tokens.css +1633 -1045
  321. package/src/tokens/tokens.js +1130 -492
  322. package/src/tokens/tokens.stories.js +137 -47
  323. package/src/tokens/type-ceiling-words.js +299 -0
  324. package/src/tokens/typography.stories.js +1003 -965
  325. package/src/tokens/vertical-rhythm.stories.js +224 -0
  326. package/src/components/awards/awards-icon.js +0 -56
  327. package/src/components/awards/awards-light.js +0 -240
  328. package/src/components/banner/banner.js +0 -60
  329. package/src/components/banner/banner.stories.js +0 -51
  330. package/src/components/button/icons.js +0 -24
  331. package/src/components/input/index.js +0 -0
  332. package/src/components/light-carousel/light-carousel-simple.css.js +0 -183
  333. package/src/components/light-carousel/light-carousel-simple.js +0 -74
  334. package/src/tokens/colors.js +0 -121
  335. package/src/tokens/typography.css.js +0 -207
  336. package/src/tokens/typography.js +0 -0
@@ -1,10 +1,14 @@
1
1
  import { LitElement, html } from "lit";
2
- import { tokens } from "../../tokens/tokens.js";
2
+ // Installs the design tokens into document scope; see src/tokens/tokens.js
3
+ import "../../tokens/tokens.js";
3
4
  import "../badge/badge.js";
4
5
  import "../button/button.js";
6
+ import "../divider/divider-horizontal.js";
5
7
  import "../heading/heading.js";
6
8
  import "../paragraph/paragraph.js";
9
+ import "../tab-list/tab-list.js";
7
10
  import pricingCardsCSS from "../pricing-cards/pricing-card.css.js";
11
+ import { contentSwitcherCSS, tabListCSS } from "../tab-list/tab-list.css.js";
8
12
 
9
13
  class PricingContainer extends LitElement {
10
14
  static properties = {
@@ -23,14 +27,12 @@ class PricingContainer extends LitElement {
23
27
  }
24
28
 
25
29
  handleSwitch(event) {
26
- console.log("Plan switched to:", event.detail.planType);
27
30
  this.planType = event.detail.planType;
28
31
  }
29
32
 
30
33
  render() {
31
34
  return html`
32
35
  <style>
33
- ${tokens}
34
36
  ${pricingCardsCSS}
35
37
  </style>
36
38
 
@@ -187,7 +189,6 @@ class PricingCard extends LitElement {
187
189
  render() {
188
190
  return html`
189
191
  <style>
190
- ${tokens}
191
192
  ${pricingCardsCSS}
192
193
  </style>
193
194
 
@@ -198,29 +199,29 @@ class PricingCard extends LitElement {
198
199
  <div class="card-header">
199
200
  <bd-h as="h4" class="card-title">${this.title}</bd-h>
200
201
 
201
- <bd-badge>
202
+ <bd-badge tone="primary" variant="fill">
202
203
  Individual
203
204
  </bd-badge>
204
205
 
205
- <bd-p kind="small" class="badge-subtitle">1 account & 5 devices</bd-p>
206
- <hr class="hr-line" />
206
+ <bd-p variant="small" class="badge-subtitle">1 account & 5 devices</bd-p>
207
+ <bd-divider-horizontal color="subtle"></bd-divider-horizontal>
207
208
  </div>
208
209
 
209
210
  <!-- Pricing section with store integration -->
210
211
  <div class="pricing">
211
212
  <div class="pricing-info" data-store-hide="!it.option.price.discounted">
212
- <bd-p kind="small" class="original-price">
213
+ <bd-p variant="small" class="original-price">
213
214
  <s data-store-render data-store-price="full"></s>
214
215
  </bd-p>
215
- <bd-p kind="small" class="discount">
216
- <bd-badge variant="bd-light-green">
216
+ <bd-p variant="small" class="discount">
217
+ <bd-badge tone="success" variant="shade">
217
218
  Save <span data-store-render data-store-discount="percentage"></span>
218
219
  </bd-badge> </bd-p>
219
220
  </div>
220
221
  <bd-h as="h3" class="price">
221
222
  <span data-store-render data-store-price="discounted||full"></span>/year
222
223
  </bd-h>
223
- <bd-p kind="small" class="terms">
224
+ <bd-p variant="small" class="terms">
224
225
  First year price. Plus applicable sales tax. See
225
226
  <a href="#">terms of use</a> below.
226
227
  </bd-p>
@@ -230,10 +231,9 @@ class PricingCard extends LitElement {
230
231
  <div class="actions">
231
232
  <bd-button-link
232
233
  label="Buy Now"
233
- kind="danger"
234
+ variant="accent"
234
235
  size="md"
235
236
  fullWidth
236
- strong
237
237
  buyLink
238
238
  >
239
239
  Buy Now
@@ -241,16 +241,15 @@ class PricingCard extends LitElement {
241
241
 
242
242
  <bd-button
243
243
  label="Learn More"
244
- kind="outline"
244
+ variant="ghost"
245
245
  size="md"
246
246
  fullWidth
247
- strong
248
247
  >
249
248
  Learn More
250
249
  </bd-button>
251
250
  </div>
252
251
 
253
- <hr class="hr-line" />
252
+ <bd-divider-horizontal color="subtle"></bd-divider-horizontal>
254
253
 
255
254
  <!-- Features sections -->
256
255
  ${this.features ? html`<pricing-card-features .shadow=${this.shadow}></pricing-card-features>` : ""}
@@ -302,7 +301,6 @@ class PricingCardFamily extends LitElement {
302
301
  render() {
303
302
  return html`
304
303
  <style>
305
- ${tokens}
306
304
  ${pricingCardsCSS}
307
305
  </style>
308
306
 
@@ -313,29 +311,29 @@ class PricingCardFamily extends LitElement {
313
311
  <div class="card-header">
314
312
  <bd-h as="h4" class="card-title">${this.title}</bd-h>
315
313
 
316
- <bd-badge>
314
+ <bd-badge tone="primary" variant="fill">
317
315
  Family
318
316
  </bd-badge>
319
317
 
320
- <bd-p kind="small" class="badge-subtitle">5 accounts & 25 devices</bd-p>
321
- <hr class="hr-line" />
318
+ <bd-p variant="small" class="badge-subtitle">5 accounts & 25 devices</bd-p>
319
+ <bd-divider-horizontal color="subtle"></bd-divider-horizontal>
322
320
  </div>
323
321
 
324
322
  <!-- Pricing section with store integration -->
325
323
  <div class="pricing">
326
324
  <div class="pricing-info" data-store-hide="!it.option.price.discounted">
327
- <bd-p kind="small" class="original-price">
325
+ <bd-p variant="small" class="original-price">
328
326
  <s data-store-render data-store-price="full"></s>
329
327
  </bd-p>
330
- <bd-p kind="small" class="discount">
331
- <bd-badge variant="bd-light-green">
328
+ <bd-p variant="small" class="discount">
329
+ <bd-badge tone="success" variant="shade">
332
330
  Save <span data-store-render data-store-discount="percentage"></span>
333
331
  </bd-badge> </bd-p>
334
332
  </div>
335
333
  <bd-h as="h3" class="price">
336
334
  <span data-store-render data-store-price="discounted||full"></span>/year
337
335
  </bd-h>
338
- <bd-p kind="small" class="terms">
336
+ <bd-p variant="small" class="terms">
339
337
  First year price. Plus applicable sales tax. See
340
338
  <a href="#">terms of use</a> below.
341
339
  </bd-p>
@@ -345,10 +343,9 @@ class PricingCardFamily extends LitElement {
345
343
  <div class="actions">
346
344
  <bd-button-link
347
345
  label="Buy Now"
348
- kind="danger"
346
+ variant="accent"
349
347
  size="md"
350
348
  fullWidth
351
- strong
352
349
  buyLink
353
350
  >
354
351
  Buy Now
@@ -356,16 +353,15 @@ class PricingCardFamily extends LitElement {
356
353
 
357
354
  <bd-button
358
355
  label="Learn More"
359
- kind="outline"
356
+ variant="ghost"
360
357
  size="md"
361
358
  fullWidth
362
- strong
363
359
  >
364
360
  Learn More
365
361
  </bd-button>
366
362
  </div>
367
363
 
368
- <hr class="hr-line" />
364
+ <bd-divider-horizontal color="subtle"></bd-divider-horizontal>
369
365
 
370
366
  <!-- Features sections -->
371
367
  ${this.features
@@ -400,10 +396,9 @@ class PricingSwitch extends LitElement {
400
396
  this.shadow = true;
401
397
  }
402
398
 
399
+ /** bd-tab-list reports the option index; the plan type is this component's word for it. */
403
400
  handleSwitch(event) {
404
- const newPlanType = event.target.checked ? "family" : "individual";
405
- console.log("Switch to:", newPlanType);
406
- this.planType = newPlanType;
401
+ this.planType = event.detail.index === 1 ? "family" : "individual";
407
402
 
408
403
  this.dispatchEvent(
409
404
  new CustomEvent("plan-switch", {
@@ -415,30 +410,24 @@ class PricingSwitch extends LitElement {
415
410
  }
416
411
 
417
412
  render() {
413
+ /* bd-tab-list renders into light DOM, which inside this component means
414
+ this shadow root -- so its sheets have to be in scope here. See the note
415
+ at the top of tab-list.js on why that element works this way. */
418
416
  return html`
419
417
  <style>
420
- ${tokens}
421
418
  ${pricingCardsCSS}
419
+ ${tabListCSS}
420
+ ${contentSwitcherCSS}
422
421
  </style>
423
-
422
+
424
423
  <div class="switchBox">
425
- <label class="switch">
426
- <input
427
- type="checkbox"
428
- id="switchCheckbox"
429
- @input=${this.handleSwitch}
430
- ?checked=${this.planType === "family"}
431
- />
432
- <span class="slider round"></span>
433
- <span class="label right">
434
- <span class="icon icon-user-sharp-regular"></span>
435
- Individual
436
- </span>
437
- <span class="label left">
438
- <span class="icon icon-family-pants-sharp-regular"></span>
439
- Family
440
- </span>
441
- </label>
424
+ <bd-tab-list
425
+ appearance="switcher"
426
+ label="Plan type"
427
+ .tabs=${[{ label: "Individual" }, { label: "Family" }]}
428
+ .selected=${this.planType === "family" ? 1 : 0}
429
+ @bd-tab-select=${this.handleSwitch}
430
+ ></bd-tab-list>
442
431
  </div>
443
432
  `;
444
433
  }
@@ -488,7 +477,6 @@ class PricingCardFeatures extends LitElement {
488
477
  const features = this.features || [];
489
478
  return html`
490
479
  <style>
491
- ${tokens}
492
480
  ${pricingCardsCSS}
493
481
  </style>
494
482
 
@@ -502,9 +490,9 @@ class PricingCardFeatures extends LitElement {
502
490
  alt="icon"
503
491
  class="badge-icon"
504
492
  />
505
- <bd-p kind="regular">${feature.name}</bd-p>
493
+ <bd-p variant="regular">${feature.name}</bd-p>
506
494
  ${feature.description
507
- ? html`<div class="tooltip"><bd-p kind="small">${feature.description}</bd-p></div>`
495
+ ? html`<div class="tooltip"><bd-p variant="small">${feature.description}</bd-p></div>`
508
496
  : ""}
509
497
  </li>`
510
498
  )}
@@ -553,7 +541,6 @@ class PricingCardPrivacy extends LitElement {
553
541
  const privacy = this.privacy || [];
554
542
  return html`
555
543
  <style>
556
- ${tokens}
557
544
  ${pricingCardsCSS}
558
545
  </style>
559
546
 
@@ -567,15 +554,15 @@ class PricingCardPrivacy extends LitElement {
567
554
  alt="icon"
568
555
  class="badge-icon"
569
556
  />
570
- <bd-p kind="regular">${priv.name.replace(" 1x", "")}</bd-p>
557
+ <bd-p variant="regular">${priv.name.replace(" 1x", "")}</bd-p>
571
558
  ${priv.badge
572
559
  ? html`
573
- <bd-badge>
560
+ <bd-badge tone="primary" variant="fill">
574
561
  ${priv.badge}
575
562
  `
576
563
  : ""}
577
564
  ${priv.description
578
- ? html`<div class="tooltip"><bd-p kind="small">${priv.description}</bd-p></div>`
565
+ ? html`<div class="tooltip"><bd-p variant="small">${priv.description}</bd-p></div>`
579
566
  : ""}
580
567
  </li>`
581
568
  )}
@@ -608,7 +595,6 @@ class PricingCardIdentify extends LitElement {
608
595
  const identity = this.identity || [];
609
596
  return html`
610
597
  <style>
611
- ${tokens}
612
598
  ${pricingCardsCSS}
613
599
  </style>
614
600
 
@@ -622,16 +608,16 @@ class PricingCardIdentify extends LitElement {
622
608
  alt="icon"
623
609
  class="badge-icon"
624
610
  />
625
- <bd-p kind="regular">${ident.name}</bd-p>
611
+ <bd-p variant="regular">${ident.name}</bd-p>
626
612
  ${ident.badge
627
613
  ? html`
628
- <bd-badge>
614
+ <bd-badge tone="primary" variant="fill">
629
615
  ${ident.badge}
630
616
  </bd-badge>
631
617
  `
632
618
  : ""}
633
619
  ${ident.description
634
- ? html`<div class="tooltip"><bd-p kind="small">${ident.description}</bd-p></div>`
620
+ ? html`<div class="tooltip"><bd-p variant="small">${ident.description}</bd-p></div>`
635
621
  : ""}
636
622
  </li>`
637
623
  )}
@@ -684,7 +670,6 @@ class PricingCardIdentityExtend extends LitElement {
684
670
  const identity = this.identity || [];
685
671
  return html`
686
672
  <style>
687
- ${tokens}
688
673
  ${pricingCardsCSS}
689
674
  </style>
690
675
 
@@ -698,16 +683,16 @@ class PricingCardIdentityExtend extends LitElement {
698
683
  alt="icon"
699
684
  class="badge-icon"
700
685
  />
701
- <bd-p kind="regular">${ident.name}</bd-p>
686
+ <bd-p variant="regular">${ident.name}</bd-p>
702
687
  ${ident.badge
703
688
  ? html`
704
- <bd-badge>
689
+ <bd-badge tone="primary" variant="fill">
705
690
  ${ident.badge}
706
691
  </bd-badge>
707
692
  `
708
693
  : ""}
709
694
  ${ident.description
710
- ? html`<div class="tooltip"><bd-p kind="small">${ident.description}</bd-p></div>`
695
+ ? html`<div class="tooltip"><bd-p variant="small">${ident.description}</bd-p></div>`
711
696
  : ""}
712
697
  </li>`
713
698
  )}
@@ -763,7 +748,6 @@ class PricingCardParentalControl extends LitElement {
763
748
  const parentalControl = this.parentalControl || [];
764
749
  return html`
765
750
  <style>
766
- ${tokens}
767
751
  ${pricingCardsCSS}
768
752
  </style>
769
753
 
@@ -777,16 +761,16 @@ class PricingCardParentalControl extends LitElement {
777
761
  alt="icon"
778
762
  class="badge-icon"
779
763
  />
780
- <bd-p kind="regular">${parental.name}</bd-p>
764
+ <bd-p variant="regular">${parental.name}</bd-p>
781
765
  ${parental.badge
782
766
  ? html`
783
- <bd-badge>
767
+ <bd-badge tone="primary" variant="fill">
784
768
  ${parental.badge}
785
769
  </bd-badge>
786
770
  `
787
771
  : ""}
788
772
  ${parental.description
789
- ? html`<div class="tooltip"><bd-p kind="small">${parental.description}</bd-p></div>`
773
+ ? html`<div class="tooltip"><bd-p variant="small">${parental.description}</bd-p></div>`
790
774
  : ""}
791
775
  </li>`
792
776
  )}
@@ -1,18 +1,35 @@
1
1
  import { css } from "lit";
2
2
 
3
3
  export default css`
4
+ /* The tick is bd-check-icon now, not a "✓" in a ::before. Two things go with
5
+ that. The absolute positioning and the 1.25rem indent it needed are gone --
6
+ a flex row with a gap puts the mark beside the text without either side
7
+ having to know the other's metrics, and the mark no longer shifts when the
8
+ font does. And the icon does not shrink when a feature wraps to two lines,
9
+ which a glyph in a text flow would.
10
+ .
11
+ align-items: start rather than center, so on a wrapped feature the tick sits
12
+ with the FIRST line rather than drifting to the vertical middle of the
13
+ block. */
4
14
  .feature {
15
+ display: flex;
16
+ align-items: start;
17
+ gap: var(--spacing-8);
5
18
  font-family: var(--typography-fontFamily-sans);
6
19
  font-size: var(--typography-label-small-fontSize);
7
- color: #000000;
8
- padding-left: 1.25rem;
9
- position: relative;
20
+ color: var(--color-text-primary);
10
21
  }
11
22
 
12
- .feature::before {
13
- content: "✓";
14
- position: absolute;
15
- left: 0;
16
- color: green;
23
+ /* The tick keeps green-700, the step it already had: white-on-green needs
24
+ it, and here it is green-on-white at 4.75:1. Now through the role:
25
+ tokens.js calls -accent "the saturated step, badge dot, alert rule",
26
+ and badge.css.js:111 records that green-700 already lines up with the
27
+ success dot. A tick is that kind of mark. Value-identical. */
28
+ .feature bd-check-icon {
29
+ color: var(--status-success-accent);
30
+ flex-shrink: 0;
31
+ /* the icon box is 12px and the label's line box is taller, so nudge the
32
+ mark onto the text's optical centre for the first line */
33
+ margin-top: var(--spacing-2);
17
34
  }
18
35
  `;
@@ -1,14 +1,19 @@
1
1
  import { LitElement, html } from "lit";
2
- import { tokens } from "../../tokens/tokens.js";
2
+ // Installs the design tokens into document scope; see src/tokens/tokens.js
3
+ import "../../tokens/tokens.js";
3
4
  import newFeaturePricingCSS from "../pricing-cards/pricing-feature-item.css.js";
5
+ import "../icons/check-icon.js";
4
6
 
5
7
  class PricingFeatureItem extends LitElement {
6
8
 
7
9
 
8
10
  render() {
9
- return html`<div class="feature"><slot></slot></div>`;
11
+ return html`<div class="feature">
12
+ <bd-check-icon size="xs" aria-hidden="true"></bd-check-icon>
13
+ <span class="feature-text"><slot></slot></span>
14
+ </div>`;
10
15
  }
11
16
  }
12
- PricingFeatureItem.styles = [tokens, newFeaturePricingCSS];
17
+ PricingFeatureItem.styles = [newFeaturePricingCSS];
13
18
 
14
19
  customElements.define("pricing-feature-item", PricingFeatureItem);
@@ -4,20 +4,19 @@ export default css`
4
4
  :host {
5
5
  display: block;
6
6
  font-family: var(--typography-fontFamily-sans);
7
+ /* the band runs full-bleed on the host; the column inside it is bd-ensemble */
8
+ background: linear-gradient(160deg, var(--color-neutral-800) 0%, #0b1626 100%);
7
9
  }
8
10
 
9
11
  .bd-processsteps-container {
10
- color: var(--color-neutral-0);
11
- background: linear-gradient(160deg, var(--color-neutral-800) 0%, #0b1626 100%);
12
- padding: var(--spacing-64) var(--spacing-24) var(--spacing-64) var(--spacing-24);
12
+ color: var(--color-text-inverse);
13
+ padding-block: var(--spacing-64);
13
14
  box-sizing: border-box;
14
15
  }
15
16
 
16
17
  .bd-processsteps-title {
17
18
  display: block;
18
19
  margin: 0 0 var(--spacing-12);
19
- color: var(--color-neutral-0, #fff);
20
- line-height: var(--typography-lineHeight-tight, 1.1);
21
20
  max-width: 900px;
22
21
  margin-left: auto;
23
22
  margin-right: auto;
@@ -26,12 +25,10 @@ export default css`
26
25
  .bd-processsteps-description {
27
26
  display: block;
28
27
  margin: 0 0 var(--spacing-40);
29
- color: var(--color-neutral-300, #d1d5db);
28
+ color: var(--color-text-muted-inverse);
30
29
  max-width: 900px;
31
30
  margin-left: auto;
32
31
  margin-right: auto;
33
- --typography-body-regular-fontWeight: var(--typography-fontWeight-bold, 700);
34
-
35
32
  }
36
33
 
37
34
  /* === GRID === */
@@ -49,7 +46,12 @@ export default css`
49
46
  }
50
47
 
51
48
  .bd-processsteps-divider {
52
- border-top: 1px solid rgba(255, 255, 255, 0.12);
49
+ /* A boundary on an inverse ground. --color-border-container-inverse is
50
+ color-mix(in srgb, var(--color-neutral-0) 12%, transparent) -- white at
51
+ 12%, which is exactly the rgba this used to spell, so nothing moves. It
52
+ is also the system's ONLY translucent colour role, which is why this
53
+ literal could not resolve until the boundary question was settled. */
54
+ border-top: var(--border-width-1) solid var(--color-border-container-inverse);
53
55
  margin-bottom: var(--spacing-24);
54
56
  }
55
57
 
@@ -57,10 +59,21 @@ export default css`
57
59
  display: flex;
58
60
  align-items: center;
59
61
  justify-content: center;
60
- width: 40px;
61
- height: 40px;
62
+ /* an icon frame, not a control icon, so it keeps its 40 rather than being
63
+ pushed onto the 32/48 icon steps -- but 40 is a dimension token, not a
64
+ literal */
65
+ width: var(--dimension-40);
66
+ height: var(--dimension-40);
62
67
  margin-bottom: var(--spacing-16);
63
- color: var(--color-blue-400, #60a5fa);
68
+ /* The inverse ink. DECIDED, and this is a real colour change: the icon goes from
69
+ blue to white. It sits on this module's dark band, where the only inks clearing
70
+ 3:1 are blue-400 and white -- and the ink role for a dark ground is
71
+ --color-text-inverse, which is what every other on-dark element here uses:
72
+ bd-link collapses all five kinds to it under surface="dark", and so do the
73
+ header watermark and the footer's social icons. Contrast 3.97:1 at the band's
74
+ light end -> 13.28:1. The alternative was a brand-inverse ink, which vocabulary
75
+ question C established the system does not have and does not want. */
76
+ color: var(--color-text-inverse);
64
77
  }
65
78
 
66
79
  .bd-processsteps-icon-img {
@@ -72,13 +85,12 @@ export default css`
72
85
  .bd-processsteps-step-title {
73
86
  display: block;
74
87
  margin: 0 0 var(--spacing-8);
75
- color: var(--color-neutral-0, #fff);
76
88
  }
77
89
 
78
90
  .bd-processsteps-step-description {
79
91
  display: block;
80
92
  margin: 0;
81
- color: var(--color-neutral-300, #d1d5db);
93
+ color: var(--color-text-muted-inverse);
82
94
  }
83
95
 
84
96
  /* === RESPONSIVE === */
@@ -6,6 +6,7 @@ import "../icons/globe-icon.js";
6
6
  import "../icons/guide-icon.js";
7
7
  import "../paragraph/paragraph.js";
8
8
  import processStepsCSS from "./process-steps.css.js";
9
+ import { ensembleCSS } from "../shared/ensemble.css.js";
9
10
 
10
11
  class ProcessSteps extends LitElement {
11
12
  static properties = {
@@ -14,7 +15,7 @@ class ProcessSteps extends LitElement {
14
15
  steps : { type: Array } // [{ icon: TemplateResult|String, title: String, description: String }]
15
16
  };
16
17
 
17
- static styles = [tokens, processStepsCSS];
18
+ static styles = [tokens, ensembleCSS, processStepsCSS];
18
19
 
19
20
  constructor() {
20
21
  super();
@@ -31,12 +32,28 @@ class ProcessSteps extends LitElement {
31
32
  return icon;
32
33
  }
33
34
 
35
+ /* color="inverse" on both headings, because this module paints its own dark
36
+ surface: process-steps.css.js fills the section with
37
+ linear-gradient(160deg, --color-neutral-800, #0b1626) and sets
38
+ color: --color-text-inverse on the container.
39
+
40
+ That container colour never reached the headings. bd-h sets its own colour
41
+ inside its shadow root, so an inherited value cannot win: measured on the
42
+ dark gradient, every bd-h rendered rgb(21, 23, 25) -- near-black ink on a
43
+ near-black surface, about 1.0:1 -- while bd-p beside it correctly used
44
+ --color-text-muted-inverse at rgb(166, 173, 180) and stayed readable. The
45
+ section title and all three step titles were effectively invisible; it is
46
+ visible in a screenshot and was measured to confirm it.
47
+
48
+ bd-h already exposes the colour role, and footer-links-group does exactly
49
+ this on the footer's dark surface, so this is the module selecting the
50
+ right configuration for the surface it chose -- not a change to bd-h. */
34
51
  render() {
35
52
  return html`
36
- <div class="bd-processsteps-container">
53
+ <div class="bd-ensemble bd-processsteps-container">
37
54
  ${this.title
38
55
  ? html`
39
- <bd-h as="h2" class="bd-processsteps-title">
56
+ <bd-h as="h2" color="inverse" class="bd-processsteps-title">
40
57
  <slot name="title">${this.title}</slot>
41
58
  </bd-h>
42
59
  `
@@ -44,7 +61,7 @@ class ProcessSteps extends LitElement {
44
61
 
45
62
  ${this.description
46
63
  ? html`
47
- <bd-p kind="regular" class="bd-processsteps-description">
64
+ <bd-p variant="regular" class="bd-processsteps-description">
48
65
  <slot name="description">${this.description}</slot>
49
66
  </bd-p>
50
67
  `
@@ -56,8 +73,8 @@ class ProcessSteps extends LitElement {
56
73
  <div class="bd-processsteps-step">
57
74
  <div class="bd-processsteps-divider"></div>
58
75
  <div class="bd-processsteps-icon-wrap">${this._renderIcon(step.icon)}</div>
59
- <bd-h as="h4" class="bd-processsteps-step-title">${step.title}</bd-h>
60
- <bd-p kind="regular" class="bd-processsteps-step-description">${step.description}</bd-p>
76
+ <bd-h as="h4" color="inverse" class="bd-processsteps-step-title">${step.title}</bd-h>
77
+ <bd-p variant="regular" class="bd-processsteps-step-description">${step.description}</bd-p>
61
78
  </div>
62
79
  `
63
80
  )}
@@ -5,7 +5,7 @@ import "../icons/guide-icon.js";
5
5
  import "./process-steps.js";
6
6
 
7
7
  export default {
8
- title : "Components/Process Steps",
8
+ title : "Modules/Process Steps",
9
9
  component : "bd-process-steps",
10
10
  tags : ["autodocs"],
11
11
  parameters: {