@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
@@ -5,7 +5,7 @@ import '../dropdown/dropdown.js';
5
5
  import './input-clipboard.js';
6
6
  import './input.js';
7
7
  export default {
8
- title : 'Components/Form Inputs',
8
+ title : 'Atoms/Input',
9
9
  component : 'bd-custom-input',
10
10
  tags : ['autodocs'],
11
11
  parameters: {
@@ -17,7 +17,7 @@ export default {
17
17
  It includes:
18
18
  - A text / email / password / number / tel **Input** field with validation states
19
19
  - A **Dropdown** select with configurable options and sizing
20
- - An **InputClipboard** field with one-click copy/paste functionality
20
+ - An **InputClipboard** field with a one-click paste button
21
21
 
22
22
  ### States
23
23
  | State | Description |
@@ -29,14 +29,144 @@ It includes:
29
29
  | \`disabled\` | Non-interactive, visually muted |
30
30
 
31
31
  ### Sizes (\`kind\`)
32
- | Value | Use case |
32
+ | Value | Height | Use case |
33
+ |---|---|---|
34
+ | \`sm\` | 33.5px | Compact forms, sidebars, modals |
35
+ | \`md\` | 44px | Default forms |
36
+ | \`lg\` | 54.5px | Hero / marketing sign-up areas |
37
+
38
+ **All four controls of the same size are exactly the same height** — the input,
39
+ the select, the clipboard field and \`bd-button\`, at 33.5, 44 and 54.5px. Each
40
+ derives it from the same three tokens: the vertical \`--spacing-*\`, the
41
+ \`--typography-fontSize-*\` step and \`--typography-lineHeight-tight\`. They are
42
+ not four numbers kept in step by hand, so a change to the type scale moves them
43
+ together. That matters because these controls almost always share a row.
44
+
45
+ \`line-height\` and \`box-sizing\` are part of that contract, not cosmetics. Both
46
+ of the other two fields got this wrong in a different way, and both were
47
+ visible:
48
+
49
+ - the **select** carried \`lineHeight-normal\` (1.5) against a fixed height,
50
+ leaving the line box 3 to 6px taller than the content box, so it clipped the
51
+ descenders of its own option text;
52
+ - the **clipboard field** declared no \`box-sizing\`, so its fixed height was the
53
+ content box and the padding and border were added on top of it — it stood
54
+ around 60% taller than everything beside it.
55
+
56
+ All three now set \`box-sizing: border-box\`, so the 1px border sits inside the
57
+ height rather than adding to it.
58
+
59
+ These size rules are currently **duplicated in three stylesheets** — one per
60
+ component. That duplication is why the two fixes above had to be made three
61
+ times, and it should be collapsed into one shared stylesheet.
62
+
63
+ ### Reading the value
64
+ \`bd-custom-input\` carries a \`value\` property and fires two events, both
65
+ bubbling and composed so they cross the shadow boundary:
66
+
67
+ | Event | Fires | \`detail\` |
68
+ |---|---|---|
69
+ | \`bd-input\` | every keystroke | \`{ value, name }\` |
70
+ | \`bd-change\` | on commit (blur or Enter) | \`{ value, name }\` |
71
+
72
+ \`\`\`js
73
+ input.addEventListener('bd-input', e => console.log(e.detail.value));
74
+ console.log(input.value);
75
+ \`\`\`
76
+
77
+ Do **not** read \`e.target.value\` from a native \`input\` event. That event does
78
+ escape the shadow root, but it retargets to the host, so \`e.target\` is the
79
+ \`<bd-custom-input>\` element — use \`bd-input\` or the \`value\` property.
80
+
81
+ The element is **not** form-associated: the \`<input>\` lives in a shadow root,
82
+ so a \`<form>\` containing it yields no \`FormData\` entry. \`name\` is carried on
83
+ the events for your own use.
84
+
85
+ ### Validation is announced, not just coloured
86
+ \`invalid\` sets \`aria-invalid="true"\`, and when \`tooltip\` is present the input
87
+ points at it with \`aria-describedby\` — so a screen reader announces both that
88
+ the field is wrong and why. Put the reason in \`tooltip\`; it doubles as the
89
+ help text and the error message.
90
+
91
+ The required asterisk is \`aria-hidden\`, because the native \`required\`
92
+ attribute is what actually conveys it.
93
+
94
+ ### The mobile keyboard
95
+ \`type\` alone changes the keyboard on iOS and Android — \`email\` adds @ and a
96
+ dot, \`tel\` gives the phone keypad, \`url\` adds a slash, \`number\` and
97
+ \`search\` each get their own. For everything finer there are three more props:
98
+
99
+ | Prop | What it does on mobile |
33
100
  |---|---|
34
- | \`sm\` | Compact forms, sidebars, modals |
35
- | \`md\` | Default forms |
36
- | \`lg\` | Hero / marketing sign-up areas |
101
+ | \`inputmode\` | Picks the keyboard without changing the field's semantics. \`numeric\`, \`decimal\`, \`tel\`, \`email\`, \`url\`, \`search\`. |
102
+ | \`autocomplete\` | Drives autofill, and it is the single biggest saving on a phone. \`email\`, \`tel\`, \`one-time-code\`, \`current-password\`, \`postal-code\`. |
103
+ | \`enterkeyhint\` | Labels the Enter key. \`next\`, \`done\`, \`go\`, \`search\`, \`send\`. |
104
+
105
+ \`\`\`html
106
+ <bd-custom-input type="email" autocomplete="email" enterkeyhint="next" label="Email"></bd-custom-input>
107
+ <bd-custom-input type="tel" autocomplete="tel" label="Phone"></bd-custom-input>
108
+ <bd-custom-input type="text" inputmode="numeric" autocomplete="one-time-code" enterkeyhint="done" label="Code"></bd-custom-input>
109
+ \`\`\`
110
+
111
+ **Prefer \`inputmode="numeric"\` on a text field over \`type="number"\`** for
112
+ things that are digit strings rather than quantities — codes, PINs, card and
113
+ postal codes. \`type="number"\` adds spinners, changes on a scroll wheel, and
114
+ drops leading zeros.
115
+
116
+ **\`kind="sm"\` is a problem on iOS.** Its font-size is 14px, and Safari zooms
117
+ the page in whenever a focused input is under 16px — and does not zoom back
118
+ out. \`md\` (16px) and \`lg\` (18px) are unaffected. Use \`md\` on anything a
119
+ phone will see, or raise \`sm\` to 16px.
37
120
 
38
121
  ### Input Types
39
- Supports all native HTML input types: \`text\`, \`email\`, \`password\`, \`number\`, \`tel\`.
122
+ Supports the native HTML input types: \`text\`, \`email\`, \`password\`,
123
+ \`number\`, \`tel\`, \`url\`, \`search\`.
124
+
125
+ ### The three controls are not interchangeable
126
+ They share a look and a height, not an API. The controls below are shared, and
127
+ everything else is not:
128
+
129
+ | | \`bd-custom-input\` | \`bd-custom-dropdown\` | \`bd-custom-input-clipboard\` |
130
+ |---|---|---|---|
131
+ | \`label\`, \`kind\`, \`required\`, \`invalid\`, \`validated\`, \`disabled\`, \`tooltip\` | yes | yes | yes |
132
+ | \`value\` | yes | **no** | yes |
133
+ | \`type\`, \`placeholder\`, \`focused\` | yes | **no** | yes |
134
+ | \`name\`, \`inputmode\`, \`autocomplete\`, \`enterkeyhint\` | yes | **no** | **no** |
135
+ | \`options\` | **no** | yes | **no** |
136
+ | emits | \`bd-input\`, \`bd-change\` | **nothing** | \`input\` |
137
+
138
+ Storybook shows one shared control panel for all three, so a knob that does
139
+ nothing on the story you are looking at is expected — check this table.
140
+
141
+ Two of those rows are gaps rather than design:
142
+
143
+ - **The select emits no event and has no \`value\`.** Choosing an option changes
144
+ nothing observable from outside the component, so it cannot currently be read
145
+ without reaching into its shadow root. It needs the same \`value\` +
146
+ \`bd-input\`/\`bd-change\` treatment the input has.
147
+ - **The clipboard field's event is not the input's.** It fires \`input\` — the
148
+ native event's own name — with the string as \`detail\` rather than
149
+ \`{ value, name }\`, and it is neither \`bubbles\` nor \`composed\`, so it reaches
150
+ a listener on the element itself and nothing further up. Renaming it to
151
+ \`bd-input\` would align the three, and is a breaking change.
152
+
153
+ ### The clipboard field pastes, it does not copy
154
+ The button reads the system clipboard with \`navigator.clipboard.readText()\` and
155
+ writes the result **into** the field. It is a paste affordance — the direction
156
+ is inbound, which is the opposite of what a clipboard icon usually suggests. Its
157
+ placeholder default (\`'Paste something...'\`) and its \`aria-label\` both say so.
158
+
159
+ Two consequences worth designing around:
160
+
161
+ - **It needs permission and a user gesture.** \`readText()\` is gated on the
162
+ browser's clipboard-read permission; Safari prompts every time, and a page
163
+ that is not focused rejects outright.
164
+ - **Failure is silent.** A rejected read is written to \`console.error\` and
165
+ nothing changes on screen, so a user who is denied sees a button that does
166
+ nothing. There is no success indicator either.
167
+
168
+ The paste button is 24×24px, which meets WCAG 2.5.8 (AA, 24px) exactly and
169
+ misses 2.5.5 (AAA, 44px) at every size.
40
170
  `
41
171
  }
42
172
  }
@@ -48,7 +178,7 @@ Supports all native HTML input types: \`text\`, \`email\`, \`password\`, \`numbe
48
178
  description: 'Visible label rendered above the field',
49
179
  table : {
50
180
  type : { summary: 'string' },
51
- defaultValue: { summary: 'Nume complet' },
181
+ defaultValue: { summary: "'Default Label' ('Select an option' on the select)" },
52
182
  category : 'Input'
53
183
  }
54
184
  },
@@ -67,17 +197,17 @@ Supports all native HTML input types: \`text\`, \`email\`, \`password\`, \`numbe
67
197
  description: 'Placeholder text shown when the field is empty',
68
198
  table : {
69
199
  type : { summary: 'string' },
70
- defaultValue: { summary: 'Introdu numele tău' },
200
+ defaultValue: { summary: "'Enter something...' ('Paste something...' on the clipboard field)" },
71
201
  category : 'Input'
72
202
  }
73
203
  },
74
- kind: {
204
+ size: {
75
205
  control : { type: 'select' },
76
206
  options : ['sm', 'md', 'lg'],
77
207
  description: 'Size variant — controls height, font-size, and padding',
78
208
  table : {
79
209
  type : { summary: "'sm' | 'md' | 'lg'" },
80
- defaultValue: { summary: 'sm' },
210
+ defaultValue: { summary: 'md' },
81
211
  category : 'Layout'
82
212
  }
83
213
  },
@@ -155,12 +285,34 @@ options: ['Small', 'Medium', 'Large']
155
285
  // ── InputClipboard props ─────────────────────────────────────────────────
156
286
  value: {
157
287
  control : 'text',
158
- description: 'Pre-filled value for the clipboard input',
288
+ description: 'The field contents. On `bd-custom-input` it is also updated as the user types — read it here or from the `bd-input` event detail.',
159
289
  table : {
160
290
  type : { summary: 'string' },
161
- defaultValue: { summary: '' },
162
- category : 'InputClipboard'
291
+ defaultValue: { summary: "''" },
292
+ category : 'Data'
163
293
  }
294
+ },
295
+ name: {
296
+ control : 'text',
297
+ description: 'Carried on the `bd-input` and `bd-change` event detail. NOT submitted with a form — the input sits in a shadow root.',
298
+ table : { type: { summary: 'string' }, defaultValue: { summary: "''" }, category: 'Data' }
299
+ },
300
+ inputmode: {
301
+ control : { type: 'select' },
302
+ options : ['', 'none', 'text', 'decimal', 'numeric', 'tel', 'search', 'email', 'url'],
303
+ description: 'Picks the mobile keyboard without changing what the field means. Prefer `numeric` on a text field over `type="number"` for digit strings such as codes and postal codes.',
304
+ table : { type: { summary: 'string' }, defaultValue: { summary: "''" }, category: 'Mobile' }
305
+ },
306
+ autocomplete: {
307
+ control : 'text',
308
+ description: 'Native autocomplete token — `email`, `tel`, `one-time-code`, `current-password`, `postal-code`. Drives autofill, the single biggest saving on a phone.',
309
+ table : { type: { summary: 'string' }, defaultValue: { summary: "''" }, category: 'Mobile' }
310
+ },
311
+ enterkeyhint: {
312
+ control : { type: 'select' },
313
+ options : ['', 'enter', 'done', 'go', 'next', 'previous', 'search', 'send'],
314
+ description: 'Labels the Enter key on a mobile keyboard.',
315
+ table : { type: { summary: 'string' }, defaultValue: { summary: "''" }, category: 'Mobile' }
164
316
  }
165
317
  }
166
318
  };
@@ -171,7 +323,7 @@ const defaultInputArgs = {
171
323
  label : 'Nume complet',
172
324
  type : 'text',
173
325
  placeholder: 'Introdu numele tău',
174
- kind : 'sm',
326
+ size : 'sm',
175
327
  required : false,
176
328
  focused : false,
177
329
  invalid : false,
@@ -182,14 +334,14 @@ const defaultInputArgs = {
182
334
 
183
335
  const defaultDropdownArgs = {
184
336
  label : 'Select size',
185
- kind : 'md',
337
+ size : 'md',
186
338
  options: ['Small', 'Medium', 'Large'],
187
339
  tooltip: 'Choose an option'
188
340
  };
189
341
 
190
342
  const defaultClipboardArgs = {
191
343
  label : 'Token',
192
- kind : 'sm',
344
+ size : 'sm',
193
345
  placeholder: 'Paste token here',
194
346
  value : '',
195
347
  disabled : false,
@@ -203,7 +355,7 @@ const renderInput = (args) => html`
203
355
  label="${args.label}"
204
356
  type="${args.type}"
205
357
  placeholder="${args.placeholder}"
206
- kind="${args.kind}"
358
+ size="${args.kind}"
207
359
  ?required="${args.required}"
208
360
  ?focused="${args.focused}"
209
361
  ?invalid="${args.invalid}"
@@ -216,7 +368,7 @@ const renderInput = (args) => html`
216
368
  const renderDropdown = (args) => html`
217
369
  <bd-custom-dropdown
218
370
  label="${args.label}"
219
- kind="${args.kind}"
371
+ size="${args.kind}"
220
372
  options='${JSON.stringify(args.options)}'
221
373
  tooltip="${args.tooltip}"
222
374
  ></bd-custom-dropdown>
@@ -225,7 +377,7 @@ const renderDropdown = (args) => html`
225
377
  const renderClipboard = (args) => html`
226
378
  <bd-custom-input-clipboard
227
379
  label="${args.label}"
228
- kind="${args.kind}"
380
+ size="${args.kind}"
229
381
  placeholder="${args.placeholder}"
230
382
  value="${args.value}"
231
383
  ?disabled="${args.disabled}"
@@ -327,9 +479,9 @@ export const InputSizes = {
327
479
  name : 'Input — All Sizes',
328
480
  render: () => html`
329
481
  <div style="display: grid; gap: 1.5rem; max-width: 420px; margin: 2rem auto;">
330
- <bd-custom-input label="Small (sm)" placeholder="sm variant" kind="sm"></bd-custom-input>
331
- <bd-custom-input label="Medium (md)" placeholder="md variant" kind="md"></bd-custom-input>
332
- <bd-custom-input label="Large (lg)" placeholder="lg variant" kind="lg"></bd-custom-input>
482
+ <bd-custom-input label="Small (sm)" placeholder="sm variant" size="sm"></bd-custom-input>
483
+ <bd-custom-input label="Medium (md)" placeholder="md variant" size="md"></bd-custom-input>
484
+ <bd-custom-input label="Large (lg)" placeholder="lg variant" size="lg"></bd-custom-input>
333
485
  </div>
334
486
  `,
335
487
  parameters: {
@@ -349,11 +501,11 @@ export const InputTypes = {
349
501
  name : 'Input — All Types',
350
502
  render: () => html`
351
503
  <div style="display: grid; gap: 1.5rem; max-width: 420px; margin: 2rem auto;">
352
- <bd-custom-input label="Text" type="text" placeholder="Plain text" kind="sm"></bd-custom-input>
353
- <bd-custom-input label="Email" type="email" placeholder="you@example.com" kind="sm"></bd-custom-input>
354
- <bd-custom-input label="Password" type="password" placeholder="••••••••" kind="sm"></bd-custom-input>
355
- <bd-custom-input label="Number" type="number" placeholder="0" kind="sm"></bd-custom-input>
356
- <bd-custom-input label="Tel" type="tel" placeholder="+40 700 000 000" kind="sm"></bd-custom-input>
504
+ <bd-custom-input label="Text" type="text" placeholder="Plain text" size="sm"></bd-custom-input>
505
+ <bd-custom-input label="Email" type="email" placeholder="you@example.com" size="sm"></bd-custom-input>
506
+ <bd-custom-input label="Password" type="password" placeholder="••••••••" size="sm"></bd-custom-input>
507
+ <bd-custom-input label="Number" type="number" placeholder="0" size="sm"></bd-custom-input>
508
+ <bd-custom-input label="Tel" type="tel" placeholder="+40 700 000 000" size="sm"></bd-custom-input>
357
509
  </div>
358
510
  `,
359
511
  parameters: {
@@ -393,7 +545,7 @@ export const DropdownLongList = {
393
545
  args: {
394
546
  ...defaultDropdownArgs,
395
547
  label : 'Select country',
396
- kind : 'sm',
548
+ size : 'sm',
397
549
  options: ['Romania', 'Germany', 'Canada', 'Japan', 'Brazil', 'France', 'Spain', 'Italy', 'United States', 'United Kingdom', 'Australia', 'Netherlands'],
398
550
  tooltip: 'Choose your country'
399
551
  },
@@ -415,9 +567,9 @@ export const DropdownSizes = {
415
567
  name : 'Dropdown — All Sizes',
416
568
  render: () => html`
417
569
  <div style="display: grid; gap: 1.5rem; max-width: 420px; margin: 2rem auto;">
418
- <bd-custom-dropdown label="Small (sm)" kind="sm" options='["Option A","Option B","Option C"]'></bd-custom-dropdown>
419
- <bd-custom-dropdown label="Medium (md)" kind="md" options='["Option A","Option B","Option C"]'></bd-custom-dropdown>
420
- <bd-custom-dropdown label="Large (lg)" kind="lg" options='["Option A","Option B","Option C"]'></bd-custom-dropdown>
570
+ <bd-custom-dropdown label="Small (sm)" size="sm" options='["Option A","Option B","Option C"]'></bd-custom-dropdown>
571
+ <bd-custom-dropdown label="Medium (md)" size="md" options='["Option A","Option B","Option C"]'></bd-custom-dropdown>
572
+ <bd-custom-dropdown label="Large (lg)" size="lg" options='["Option A","Option B","Option C"]'></bd-custom-dropdown>
421
573
  </div>
422
574
  `,
423
575
  parameters: {
@@ -443,7 +595,7 @@ export const ClipboardDefault = {
443
595
  docs: {
444
596
  description: {
445
597
  story:
446
- 'Base clipboard input with an empty value. Clicking the copy icon while the field is empty should be a no-op or show a subtle "nothing to copy" signal.'
598
+ 'Base clipboard field, empty. The button pastes rather than copies: it reads the system clipboard and writes the result into the field, so clicking it while the field is empty is the normal path, not a no-op.'
447
599
  }
448
600
  }
449
601
  }
@@ -465,7 +617,7 @@ export const ClipboardWithValue = {
465
617
  docs: {
466
618
  description: {
467
619
  story:
468
- 'The `value` prop pre-populates the field with an API token. Clicking the clipboard icon copies the value to the OS clipboard and should toggle a brief success indicator.'
620
+ 'The `value` prop pre-populates the field. Note the direction: clicking the button does not copy this token out, it overwrites it with whatever the system clipboard holds. There is no success indicator.'
469
621
  }
470
622
  }
471
623
  }
@@ -488,7 +640,7 @@ export const ClipboardDisabled = {
488
640
  docs: {
489
641
  description: {
490
642
  story:
491
- 'Both the text field and the copy button are non-interactive when `disabled` is set. The copy icon should also appear muted to communicate its unavailability.'
643
+ 'Both the text field and the paste button are non-interactive when `disabled` is set, and the button mutes to `--color-neutral-400` to show it.'
492
644
  }
493
645
  }
494
646
  }
@@ -501,16 +653,16 @@ export const ClipboardSizes = {
501
653
  name : 'InputClipboard — All Sizes',
502
654
  render: () => html`
503
655
  <div style="display: grid; gap: 1.5rem; max-width: 420px; margin: 2rem auto;">
504
- <bd-custom-input-clipboard label="Small (sm)" kind="sm" value="token-sm-example-value"></bd-custom-input-clipboard>
505
- <bd-custom-input-clipboard label="Medium (md)" kind="md" value="token-md-example-value"></bd-custom-input-clipboard>
506
- <bd-custom-input-clipboard label="Large (lg)" kind="lg" value="token-lg-example-value"></bd-custom-input-clipboard>
656
+ <bd-custom-input-clipboard label="Small (sm)" size="sm" value="token-sm-example-value"></bd-custom-input-clipboard>
657
+ <bd-custom-input-clipboard label="Medium (md)" size="md" value="token-md-example-value"></bd-custom-input-clipboard>
658
+ <bd-custom-input-clipboard label="Large (lg)" size="lg" value="token-lg-example-value"></bd-custom-input-clipboard>
507
659
  </div>
508
660
  `,
509
661
  parameters: {
510
662
  docs: {
511
663
  description: {
512
664
  story:
513
- 'Size comparison for all three `kind` values of InputClipboard. Ensures the clipboard icon scales proportionally alongside the field height.'
665
+ 'Size comparison for all three `kind` values. The field height follows `kind` (33.5 / 44 / 54.5px, the same as the input, the select and the button); the paste icon does not scale with it, staying 20px at every size.'
514
666
  }
515
667
  }
516
668
  }
@@ -530,7 +682,7 @@ export const InputsShowcase = {
530
682
  <bd-custom-input
531
683
  label="Nume complet"
532
684
  placeholder="Introdu numele tău"
533
- kind="sm"
685
+ size="sm"
534
686
  required
535
687
  tooltip="Choose a unique username">
536
688
  </bd-custom-input>
@@ -539,7 +691,7 @@ export const InputsShowcase = {
539
691
  label="Adresă de email"
540
692
  type="email"
541
693
  placeholder="you@example.com"
542
- kind="md"
694
+ size="sm"
543
695
  focused
544
696
  tooltip="Click to see focus state">
545
697
  </bd-custom-input>
@@ -547,7 +699,7 @@ export const InputsShowcase = {
547
699
  <bd-custom-input
548
700
  label="Email"
549
701
  type="email"
550
- kind="sm"
702
+ size="sm"
551
703
  placeholder="Enter your email"
552
704
  required
553
705
  invalid
@@ -556,7 +708,7 @@ export const InputsShowcase = {
556
708
 
557
709
  <bd-custom-input
558
710
  label="Email"
559
- kind="sm"
711
+ size="sm"
560
712
  placeholder="Enter email"
561
713
  tooltip="Looks good!"
562
714
  validated>
@@ -566,7 +718,7 @@ export const InputsShowcase = {
566
718
  label="Disabled Input"
567
719
  placeholder="Can't type here"
568
720
  tooltip="This field is disabled"
569
- kind="sm"
721
+ size="sm"
570
722
  disabled>
571
723
  </bd-custom-input>
572
724
  </div>
@@ -592,14 +744,14 @@ export const DropdownsShowcase = {
592
744
 
593
745
  <bd-custom-dropdown
594
746
  label="Select size"
595
- kind="md"
747
+ size="md"
596
748
  options='["Small", "Medium", "Large"]'
597
749
  tooltip="Choose an option">
598
750
  </bd-custom-dropdown>
599
751
 
600
752
  <bd-custom-dropdown
601
753
  label="Select country"
602
- kind="sm"
754
+ size="sm"
603
755
  options='["Romania", "Germany", "Canada", "Japan", "Brazil"]'
604
756
  tooltip="Choose an option">
605
757
  </bd-custom-dropdown>
@@ -626,13 +778,13 @@ export const InputClipboardShowcase = {
626
778
 
627
779
  <bd-custom-input-clipboard
628
780
  label="Token"
629
- kind="sm"
781
+ size="sm"
630
782
  placeholder="Paste token here">
631
783
  </bd-custom-input-clipboard>
632
784
 
633
785
  <bd-custom-input-clipboard
634
786
  label="API Token"
635
- kind="md"
787
+ size="md"
636
788
  value="sk-bd-live-4f8a2c1e9b3d7f6a0e5c8b2d4f1a9e7c"
637
789
  tooltip="Click the icon to copy">
638
790
  </bd-custom-input-clipboard>
@@ -661,7 +813,7 @@ export const FormExample = {
661
813
  <bd-custom-input
662
814
  label="Full Name"
663
815
  placeholder="John Doe"
664
- kind="md"
816
+ size="md"
665
817
  required>
666
818
  </bd-custom-input>
667
819
 
@@ -669,7 +821,7 @@ export const FormExample = {
669
821
  label="Email Address"
670
822
  type="email"
671
823
  placeholder="john@example.com"
672
- kind="md"
824
+ size="md"
673
825
  required>
674
826
  </bd-custom-input>
675
827
 
@@ -677,27 +829,27 @@ export const FormExample = {
677
829
  label="Password"
678
830
  type="password"
679
831
  placeholder="Min. 8 characters"
680
- kind="md"
832
+ size="md"
681
833
  required
682
834
  tooltip="Must contain uppercase, lowercase, number and symbol">
683
835
  </bd-custom-input>
684
836
 
685
837
  <bd-custom-dropdown
686
838
  label="Country"
687
- kind="md"
839
+ size="md"
688
840
  options='["Select a country", "United States", "Canada", "United Kingdom", "Germany", "France", "Romania"]'>
689
841
  </bd-custom-dropdown>
690
842
 
691
843
  <bd-custom-input-clipboard
692
844
  label="API Token"
693
- kind="md"
845
+ size="md"
694
846
  placeholder="Click to paste your token"
695
847
  tooltip="Copy your API token from your account settings">
696
848
  </bd-custom-input-clipboard>
697
849
 
698
850
  <div style="display: flex; gap: 1rem; margin-top: 1rem;">
699
- <bd-button size="md" kind="primary" strong>Submit</bd-button>
700
- <bd-button size="md" kind="outline">Cancel</bd-button>
851
+ <bd-button size="md" variant="primary">Submit</bd-button>
852
+ <bd-button size="md" variant="ghost">Cancel</bd-button>
701
853
  </div>
702
854
  </div>
703
855
  </div>
@@ -722,7 +874,7 @@ export const MobileForm = {
722
874
  <bd-custom-input
723
875
  label="Full Name"
724
876
  placeholder="John Doe"
725
- kind="sm"
877
+ size="sm"
726
878
  required>
727
879
  </bd-custom-input>
728
880
 
@@ -731,7 +883,7 @@ export const MobileForm = {
731
883
  label="Email Address"
732
884
  type="email"
733
885
  placeholder="john@example.com"
734
- kind="sm"
886
+ size="sm"
735
887
  required>
736
888
  </bd-custom-input>
737
889
  </div>
@@ -739,7 +891,7 @@ export const MobileForm = {
739
891
  <div style="margin-top: 1rem;">
740
892
  <bd-custom-dropdown
741
893
  label="Country"
742
- kind="sm"
894
+ size="sm"
743
895
  options='["Select a country", "United States", "Canada", "Romania"]'>
744
896
  </bd-custom-dropdown>
745
897
  </div>
@@ -747,7 +899,7 @@ export const MobileForm = {
747
899
  <div style="margin-top: 1rem;">
748
900
  <bd-custom-input-clipboard
749
901
  label="API Token"
750
- kind="sm"
902
+ size="sm"
751
903
  placeholder="Paste your token">
752
904
  </bd-custom-input-clipboard>
753
905
  </div>
@@ -774,21 +926,21 @@ export const CustomContent = {
774
926
  <bd-custom-input
775
927
  label="Company Registration Number"
776
928
  placeholder="e.g. J40/12345/2024"
777
- kind="md"
929
+ size="md"
778
930
  tooltip="As it appears on your trade registry certificate"
779
931
  required>
780
932
  </bd-custom-input>
781
933
 
782
934
  <bd-custom-dropdown
783
935
  label="Subscription Plan"
784
- kind="md"
936
+ size="md"
785
937
  options='["Starter – Free", "Professional – €9 / mo", "Enterprise – Contact us"]'
786
938
  tooltip="You can upgrade or downgrade at any time">
787
939
  </bd-custom-dropdown>
788
940
 
789
941
  <bd-custom-input-clipboard
790
942
  label="Webhook Secret"
791
- kind="md"
943
+ size="md"
792
944
  value="whsec_live_8d2f4b6a0c3e5f7d9b1a4c6e8f2d0b4a"
793
945
  tooltip="Used to verify incoming webhook payloads">
794
946
  </bd-custom-input-clipboard>