@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.
Files changed (336) hide show
  1. package/CHANGELOG.md +187 -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,28 +1,28 @@
1
1
  // icons/quote-icon.js
2
- import { LitElement, css, html } from "lit";
2
+ import { html } from "lit";
3
+ import { BdIconElement } from "./icon-element.js";
3
4
 
4
- class QuoteIcon extends LitElement {
5
+ /**
6
+ * An opening quotation mark, drawn as a path.
7
+ *
8
+ * It used to be a "“" character in an SVG <text> element at Helvetica
9
+ * 128px: type being asked to draw a picture, so its shape depended on which
10
+ * Helvetica the platform had, and its colour was a hex of its own
11
+ * (#2E6BF6) rather than the ink it sits in. Now it extends BdIconElement like
12
+ * every sibling -- sized from the icon scale, drawn in currentColor.
13
+ */
14
+ class QuoteIcon extends BdIconElement {
15
+ static defaultSize = "xl";
5
16
 
6
- static properties = {
7
- width : { type: Number },
8
- height: { type: Number },
9
- color : { type: String }
10
- };
11
-
12
- constructor() {
13
- super();
14
- this.width = 51;
15
- this.height = 52;
16
- this.color = "#2E6BF6";
17
- }
18
-
19
- static styles = css`:host { display: inline-flex; }`;
20
17
  render() {
21
18
  return html`
22
- <svg xmlns="http://www.w3.org/2000/svg" width="${this.width}" height="${this.height}" viewBox="0 0 51 52" aria-hidden="true">
23
- <text fill="${this.color}" font-size="128" font-family="Helvetica"><tspan x="0" y="99">&#8220;</tspan></text>
19
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" aria-hidden="true">
20
+ <path d="M3 19.5V13c0-4.4 2.2-7.6 6.5-9.2l.9 1.9C7.9 6.9 6.8 8.7 6.6 11H10v8.5H3Zm11 0V13c0-4.4 2.2-7.6 6.5-9.2l.9 1.9c-2.5 1.2-3.6 3-3.8 5.3H21v8.5h-7Z" fill="currentColor"/>
24
21
  </svg>
25
22
  `;
26
23
  }
27
24
  }
28
- customElements.define("bd-quote-icon", QuoteIcon);
25
+
26
+ customElements.define("bd-quote-icon", QuoteIcon);
27
+
28
+ export { QuoteIcon };
@@ -31,23 +31,35 @@ export default css`
31
31
 
32
32
  /* Radius Variants - Updated to match radius prop */
33
33
  .bd-img.radius-none {
34
- border-radius: 0;
34
+ border-radius: var(--radius-none);
35
35
  }
36
36
 
37
37
  .bd-img.radius-sm {
38
- border-radius: var(--radius-sm, var(--spacing-4, 0.25rem));
38
+ border-radius: var(--radius-sm);
39
39
  }
40
40
 
41
41
  .bd-img.radius-md {
42
- border-radius: var(--radius-md, var(--spacing-8, 0.5rem));
42
+ border-radius: var(--radius-md);
43
43
  }
44
44
 
45
45
  .bd-img.radius-lg {
46
- border-radius: var(--radius-lg, var(--spacing-12, 0.75rem));
46
+ border-radius: var(--radius-lg);
47
+ }
48
+
49
+ .bd-img.radius-xl {
50
+ border-radius: var(--radius-xl);
51
+ }
52
+
53
+ .bd-img.radius-2xl {
54
+ border-radius: var(--radius-2xl);
55
+ }
56
+
57
+ .bd-img.radius-3xl {
58
+ border-radius: var(--radius-3xl);
47
59
  }
48
60
 
49
61
  .bd-img.radius-full {
50
- border-radius: 50%;
62
+ border-radius: var(--radius-full);
51
63
  }
52
64
 
53
65
  /* Shadow Variants - Updated to match shadow prop */
@@ -56,33 +68,33 @@ export default css`
56
68
  }
57
69
 
58
70
  .bd-img.shadow-sm {
59
- box-shadow: var(--shadow-sm, 0 1px 2px 0 rgba(0, 0, 0, 0.05));
71
+ box-shadow: var(--shadow-sm);
60
72
  }
61
73
 
62
74
  .bd-img.shadow-md {
63
- box-shadow: var(--shadow-md, 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06));
75
+ box-shadow: var(--shadow-md);
64
76
  }
65
77
 
66
78
  .bd-img.shadow-lg {
67
- box-shadow: var(--shadow-lg, 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05));
79
+ box-shadow: var(--shadow-lg);
68
80
  }
69
81
 
70
82
  /* Shadow XL - Additional variant */
71
83
  .bd-img.shadow-xl {
72
- box-shadow: var(--shadow-xl, 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04));
84
+ box-shadow: var(--shadow-xl);
73
85
  }
74
86
 
75
87
  /* Border Variants - Keep for additional styling options */
76
88
  .bd-img.bordered {
77
- border: 2px solid var(--color-neutral-200);
89
+ border: var(--border-width-2) solid var(--color-border-subtle);
78
90
  }
79
91
 
80
92
  .bd-img.bordered-primary {
81
- border: 2px solid var(--color-blue-500);
93
+ border: var(--border-width-2) solid var(--color-border-brand);
82
94
  }
83
95
 
84
96
  .bd-img.bordered-thick {
85
- border: 4px solid var(--color-neutral-300);
97
+ border: var(--border-width-4) solid var(--color-border-disabled);
86
98
  }
87
99
 
88
100
  /* Responsive Behavior */
@@ -107,43 +119,78 @@ export default css`
107
119
  /* Hover Effects */
108
120
  .bd-img.hover-zoom:hover {
109
121
  transform: scale(1.05);
110
- transition: transform 0.3s ease;
122
+ transition: transform var(--transition-duration-slow) var(--transition-easing-smooth);
111
123
  }
112
124
 
113
125
  .bd-img.hover-shadow:hover {
114
126
  box-shadow: var(--shadow-lg);
115
- transition: box-shadow 0.3s ease;
127
+ transition: box-shadow var(--transition-duration-slow) var(--transition-easing-smooth);
116
128
  }
117
129
 
118
- /* Focus styles for accessibility */
119
- .bd-img:focus {
120
- outline: 2px solid var(--color-primary-500, #3b82f6);
121
- outline-offset: 2px;
130
+ .bd-img:focus-visible {
131
+ /* the one focus ring — see Foundations/Focus */
132
+ outline: none;
133
+ box-shadow: var(--focus-outline-primary);
122
134
  }
123
135
 
124
136
  /* Loading state */
125
137
  .bd-img:not([src]) {
126
- background-color: var(--color-neutral-100, #f3f4f6);
138
+ background-color: var(--color-surface-muted);
139
+ /* no token: the dimension scale stops at 64px */
127
140
  min-height: 100px;
128
141
  display: flex;
129
142
  align-items: center;
130
143
  justify-content: center;
131
- color: var(--color-neutral-400, #9ca3af);
132
- font-size: var(--text-sm, 0.875rem);
133
- }
134
-
144
+ /* --color-text-muted, not --color-text-disabled. Loading is not disabled,
145
+ and the difference is not academic: the disabled text role carries a
146
+ contrast exemption -- WCAG 1.4.3 excuses disabled controls from the
147
+ 4.5:1 minimum -- and this label claims that exemption without being
148
+ entitled to it. It is a sentence a reader is meant to read while they
149
+ wait.
150
+
151
+ Measured on this ground: neutral-400 on neutral-100 is 2.51:1, which
152
+ misses even the 3:1 floor for non-text. --color-text-muted is
153
+ neutral-600 at 5.12:1 and is the role this package already uses for
154
+ low-emphasis readable text -- caption and form help text both resolve
155
+ to it.
156
+
157
+ The ground stays --color-surface-muted. Loading is a state, muted is
158
+ the state surface, and bd-skeleton -- the package's other loading
159
+ affordance -- already sits on it. Only the ink was choosing by value.
160
+ See "Choosing a semantic role" in the package README. */
161
+ color: var(--color-text-muted);
162
+ /* no role: alt text shown when the image has no src -- a glyph/marker/placeholder box, not running
163
+ prose. See list-item.css.js's .bd-list-item-marker::before for the
164
+ argument. */
165
+ font-size: var(--typography-fontSize-sm);
166
+ }
167
+
168
+ /* The placeholder copy is a local property rather than a string in the
169
+ stylesheet: content: "Image loading..." cannot be translated, and this
170
+ atom and bd-picture used two different sentences for the same state. */
135
171
  .bd-img:not([src])::before {
136
- content: "Image loading...";
172
+ content: var(--bd-img-loading-label, "Loading image");
137
173
  }
138
174
 
139
175
  /* Smooth transitions for radius and shadow changes */
140
176
  .bd-img {
141
- transition: border-radius 0.2s ease, box-shadow 0.2s ease;
177
+ transition: border-radius var(--transition-duration-normal) var(--transition-easing-smooth), box-shadow var(--transition-duration-normal) var(--transition-easing-smooth);
142
178
  }
143
179
 
144
180
  /* Performance optimization for transforms */
145
181
  .bd-img.hover-zoom {
146
182
  will-change: transform;
147
183
  }
184
+
185
+ /* A hover that scales the image is the category of motion the setting
186
+ exists for, and this atom had no guard at all. */
187
+ @media (prefers-reduced-motion: reduce) {
188
+ .bd-img,
189
+ .bd-img.hover-zoom:hover,
190
+ .bd-img.hover-shadow:hover {
191
+ transition: none;
192
+ transform: none;
193
+ }
194
+ }
148
195
  }
149
196
  `;
@@ -1,7 +1,11 @@
1
- import { LitElement, html } from "lit";
2
- import { tokens } from "../../tokens/tokens.js";
1
+ import { LitElement, html, nothing } from "lit";
2
+ // Installs the design tokens into document scope; see src/tokens/tokens.js
3
+ import "../../tokens/tokens.js";
3
4
  import imgCSS from "./image.css.js";
4
5
 
6
+ // the radius steps image.css.js implements — the full --radius-* scale
7
+ const RADIUS_STEPS = ['none', 'sm', 'md', 'lg', 'xl', '2xl', '3xl', 'full'];
8
+
5
9
  export class BdImg extends LitElement {
6
10
  static properties = {
7
11
  src : { type: String },
@@ -29,7 +33,8 @@ export class BdImg extends LitElement {
29
33
  render() {
30
34
  const baseClass = 'bd-img';
31
35
  const fitClass = this.fit || 'cover';
32
- const radiusClass = `radius-${this.radius || 'none'}`;
36
+ const radius = RADIUS_STEPS.includes(this.radius) ? this.radius : 'none';
37
+ const radiusClass = `radius-${radius}`;
33
38
  const shadowClass = `shadow-${this.shadow || 'none'}`;
34
39
 
35
40
  const finalClass = `${baseClass} ${fitClass} ${radiusClass} ${shadowClass}`;
@@ -38,8 +43,8 @@ export class BdImg extends LitElement {
38
43
  <img
39
44
  src="${this.src}"
40
45
  alt="${this.alt}"
41
- width="${this.width}"
42
- height="${this.height}"
46
+ width="${this.width ?? nothing}"
47
+ height="${this.height ?? nothing}"
43
48
  loading="${this.loading}"
44
49
  class="${finalClass}"
45
50
  @load="${this._handleLoad}"
@@ -62,7 +67,7 @@ export class BdImg extends LitElement {
62
67
  }));
63
68
  }
64
69
 
65
- static styles = [tokens, imgCSS];
70
+ static styles = [imgCSS];
66
71
  }
67
72
 
68
73
  customElements.define("bd-img", BdImg);
@@ -2,7 +2,7 @@ import { html } from 'lit';
2
2
  import './image.js';
3
3
 
4
4
  export default {
5
- title : 'Components/Image',
5
+ title : 'Atoms/Image',
6
6
  tags : ['autodocs'],
7
7
  parameters: {
8
8
  docs: {
@@ -129,7 +129,7 @@ export const RadiusVariants = {
129
129
  name : 'Radius Variants',
130
130
  render: () => html`
131
131
  <div style="display:flex; gap:16px; flex-wrap:wrap;">
132
- ${['none', 'sm', 'md', 'lg', 'xl', 'full'].map(r => html`
132
+ ${['none', 'sm', 'md', 'lg', 'xl', '2xl', '3xl', 'full'].map(r => html`
133
133
  <div>
134
134
  <p style="font-size:12px; margin-bottom:4px; font-weight:600;">radius-${r}</p>
135
135
  <bd-img src="${sampleSrc}" alt="radius ${r}" width="150" height="150" radius="${r}" fit="cover"></bd-img>