@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.
- package/CHANGELOG.md +195 -0
- package/README.md +131 -8
- package/package.json +95 -13
- package/schemas/component-manifest.json +3294 -405
- package/schemas/manifest-omissions.json +173 -0
- package/src/blog/src/breakpoints.js +6 -6
- package/src/blog/src/content/blog-atoms-showcase.js +1 -1
- package/src/blog/src/content/blog-page-layout.js +2 -2
- package/src/blog/src/lib/article-toc.js +7 -7
- package/src/blog/src/shell/blog-shell.js +1 -1
- package/src/blog/src/tokens/blog.js +2 -2
- package/src/blog/src/tokens/core.js +34 -35
- package/src/blog/src/tokens/legacy.js +0 -9
- package/src/blog/tokens/blog.js +2 -2
- package/src/blog/tokens/core.js +34 -35
- package/src/blog/tokens/legacy.js +0 -9
- package/src/blog/tokens.css +36 -46
- package/src/components/accordion/accordion-bg.css.js +83 -59
- package/src/components/accordion/accordion-bg.js +29 -10
- package/src/components/accordion/accordion-bg.stories.js +67 -67
- package/src/components/accordion/accordion-keyboard.js +80 -0
- package/src/components/accordion/accordion.css.js +142 -80
- package/src/components/accordion/accordion.js +37 -10
- package/src/components/accordion/accordion.stories.js +7 -7
- package/src/components/agent-endpoints/agent-endpoints.css.js +36 -39
- package/src/components/agent-endpoints/agent-endpoints.js +30 -20
- package/src/components/agent-endpoints/agent-endpoints.stories.js +1 -1
- package/src/components/ai-guardian-demo.stories.js +91 -91
- package/src/components/alert/alert.css.js +198 -0
- package/src/components/alert/alert.js +103 -0
- package/src/components/alert/alert.stories.js +206 -0
- package/src/components/anchor/anchor-nav.css.js +213 -101
- package/src/components/anchor/anchor-nav.js +26 -40
- package/src/components/anchor/anchor.stories.js +22 -12
- package/src/components/annotation/annotation.css.js +58 -0
- package/src/components/annotation/annotation.js +67 -0
- package/src/components/annotation/annotation.stories.js +63 -0
- package/src/components/architecture.stories.js +285 -0
- package/src/components/atoms.stories.js +342 -0
- package/src/components/avatar/avatar.css.js +67 -0
- package/src/components/avatar/avatar.js +42 -0
- package/src/components/avatar/avatar.stories.js +95 -0
- package/src/components/awards/awards-flex.css.js +209 -23
- package/src/components/awards/awards-flex.js +66 -7
- package/src/components/awards/awards-flex.stories.js +1 -1
- package/src/components/awards/{awards-light.stories.js → awards-summary.stories.js} +54 -64
- package/src/components/awards/awards.css.js +116 -58
- package/src/components/awards/awards.js +102 -28
- package/src/components/awards/awards.stories.js +1 -1
- package/src/components/back/back.css.js +51 -22
- package/src/components/back/back.js +28 -7
- package/src/components/back/back.stories.js +9 -3
- package/src/components/badge/badge.css.js +158 -46
- package/src/components/badge/badge.js +62 -74
- package/src/components/badge/badge.stories.js +176 -248
- package/src/components/bento-grid/bento-grid.css.js +21 -16
- package/src/components/bento-grid/bento-grid.js +16 -4
- package/src/components/bento-grid/bento-grid.stories.js +19 -18
- package/src/components/bento-grid/bento-item.css.js +52 -28
- package/src/components/bento-grid/bento-item.js +2 -2
- package/src/components/blockquote/blockquote.css.js +47 -0
- package/src/components/blockquote/blockquote.js +29 -0
- package/src/components/blockquote/blockquote.stories.js +62 -0
- package/src/components/breadcrumb/breadcrumb.css.js +92 -22
- package/src/components/breadcrumb/breadcrumb.js +56 -11
- package/src/components/button/button.css.js +531 -161
- package/src/components/button/button.js +206 -214
- package/src/components/button/button.stories.js +322 -174
- package/src/components/caption/caption.css.js +21 -0
- package/src/components/caption/caption.js +31 -0
- package/src/components/caption/caption.stories.js +62 -0
- package/src/components/card-features/card-features.css.js +14 -22
- package/src/components/card-features/card-features.js +68 -9
- package/src/components/card-features/card-features.stories.js +11 -11
- package/src/components/cards/card.css.js +60 -81
- package/src/components/cards/card.js +56 -25
- package/src/components/cards/card.stories.js +39 -39
- package/src/components/carousel/carousel.css.js +93 -99
- package/src/components/carousel/carousel.js +32 -4
- package/src/components/checkbox/checkbox.css.js +111 -93
- package/src/components/checkbox/checkbox.js +64 -90
- package/src/components/checkbox/checkbox.stories.js +96 -29
- package/src/components/code/code.css.js +70 -0
- package/src/components/code/code.js +40 -0
- package/src/components/code/code.stories.js +73 -0
- package/src/components/compare/compare.css.js +179 -43
- package/src/components/compare/compare.js +52 -25
- package/src/components/compare/compare.stories.js +61 -4
- package/src/components/comparison-panel/comparison-panel.css.js +38 -51
- package/src/components/comparison-panel/comparison-panel.js +5 -4
- package/src/components/comparison-panel/comparison-panel.stories.js +1 -1
- package/src/components/compatibility-table/compatibility-table.css.js +180 -80
- package/src/components/compatibility-table/compatibility-table.js +37 -9
- package/src/components/control-alignment.stories.js +393 -0
- package/src/components/cta-banner/cta-banner.css.js +41 -13
- package/src/components/cta-banner/cta-banner.js +6 -5
- package/src/components/cta-banner/cta-banner.stories.js +43 -98
- package/src/components/display/display.css.js +25 -1
- package/src/components/display/display.js +46 -13
- package/src/components/display/display.stories.js +270 -40
- package/src/components/divider/divider-horizontal.js +21 -5
- package/src/components/divider/divider-vertical.js +15 -7
- package/src/components/divider/divider.css.js +2 -2
- package/src/components/divider/divider.stories.js +38 -34
- package/src/components/dropdown/dropdown.css.js +93 -126
- package/src/components/dropdown/dropdown.js +114 -34
- package/src/components/dropdown/dropdown.stories.js +56 -24
- package/src/components/features/features.css.js +24 -11
- package/src/components/features/features.js +7 -3
- package/src/components/features/features.stories.js +37 -37
- package/src/components/features-tab/features-tab.css.js +19 -8
- package/src/components/features-tab/features-tab.js +6 -5
- package/src/components/features-tab/features-tab.stories.js +23 -23
- package/src/components/fieldset/fieldset.css.js +30 -0
- package/src/components/fieldset/fieldset.js +28 -0
- package/src/components/fieldset/fieldset.stories.js +84 -0
- package/src/components/footer/footer-links-group.css.js +10 -14
- package/src/components/footer/footer-links-group.js +4 -3
- package/src/components/footer/footer-lp.css.js +59 -30
- package/src/components/footer/footer-lp.js +17 -12
- package/src/components/footer/footer-lp.stories.js +63 -75
- package/src/components/footer/footer-nav-menu.css.js +26 -4
- package/src/components/footer/footer-nav-menu.js +3 -2
- package/src/components/footer/footer.css.js +146 -264
- package/src/components/footer/footer.js +176 -106
- package/src/components/footer/footer.stories.js +9 -9
- package/src/components/footer/localeMap.js +1 -1
- package/src/components/grid/grid.css.js +1 -1
- package/src/components/grid/grid.js +49 -7
- package/src/components/grid/grid.stories.js +111 -0
- package/src/components/header/header-code.css.js +61 -51
- package/src/components/header/header-code.js +28 -14
- package/src/components/header/header-code.stories.js +5 -5
- package/src/components/header/header.css.js +655 -176
- package/src/components/header/header.js +269 -36
- package/src/components/header/header.stories.js +841 -18
- package/src/components/heading/heading.css.js +14 -17
- package/src/components/heading/heading.js +48 -33
- package/src/components/heading/heading.stories.js +27 -25
- package/src/components/help-text/help-text.css.js +21 -0
- package/src/components/help-text/help-text.js +25 -0
- package/src/components/help-text/help-text.stories.js +66 -0
- package/src/components/highlight/highlight.css.js +86 -64
- package/src/components/highlight/highlight.js +18 -27
- package/src/components/highlight/highlight.stories.js +14 -3
- package/src/components/icons/analysis-icon.js +6 -16
- package/src/components/icons/arrow-down-icon.js +6 -19
- package/src/components/icons/arrow-icon.js +44 -0
- package/src/components/icons/arrow-right-icon.js +30 -23
- package/src/components/icons/arrow-up-icon.js +19 -18
- package/src/components/icons/bd-ai-icon.js +1 -1
- package/src/components/icons/brand-marks.stories.js +279 -0
- package/src/components/icons/brand-signature-icon.js +42 -0
- package/src/components/icons/check-icon.js +27 -0
- package/src/components/icons/circle-info-icon.js +33 -0
- package/src/components/icons/close-icon.js +6 -18
- package/src/components/icons/family-icon.js +8 -20
- package/src/components/icons/globe-icon.js +6 -18
- package/src/components/icons/guide-icon.js +6 -18
- package/src/components/icons/icon-element.js +99 -0
- package/src/components/icons/icons.js +36 -0
- package/src/components/icons/icons.stories.js +184 -52
- package/src/components/icons/individual-icon.js +6 -18
- package/src/components/icons/laurel-icon.js +9 -19
- package/src/components/icons/machine-learning-icon.js +6 -17
- package/src/components/icons/marks.js +41 -0
- package/src/components/icons/minus-icon.js +7 -21
- package/src/components/icons/missing-icon.js +52 -0
- package/src/components/icons/plus-icon.js +7 -21
- package/src/components/icons/quote-icon.js +19 -19
- package/src/components/image/image.css.js +72 -25
- package/src/components/image/image.js +11 -6
- package/src/components/image/image.stories.js +2 -2
- package/src/components/input/custom-form.stories.js +214 -62
- package/src/components/input/input-clipboard.css.js +51 -144
- package/src/components/input/input-clipboard.js +31 -15
- package/src/components/input/input.css.js +8 -146
- package/src/components/input/input.js +93 -38
- package/src/components/install-options/install-options.css.js +84 -77
- package/src/components/install-options/install-options.js +33 -30
- package/src/components/install-options/install-options.stories.js +3 -3
- package/src/components/label/label.css.js +35 -0
- package/src/components/label/label.js +38 -0
- package/src/components/label/label.stories.js +82 -0
- package/src/components/light-carousel/light-carousel.css.js +111 -63
- package/src/components/light-carousel/light-carousel.js +85 -11
- package/src/components/light-carousel/light-carousel.stories.js +126 -82
- package/src/components/link/link.css.js +150 -99
- package/src/components/link/link.js +86 -11
- package/src/components/link/link.stories.js +124 -30
- package/src/components/list/list-item/list-item.css.js +74 -22
- package/src/components/list/list-item/list-item.js +32 -10
- package/src/components/list/list-item/list-item.stories.js +23 -23
- package/src/components/list/list.css.js +8 -2
- package/src/components/list/list.js +3 -2
- package/src/components/list/list.stories.js +222 -0
- package/src/components/modal/modal.css.js +114 -24
- package/src/components/modal/modal.js +83 -7
- package/src/components/modal/modal.stories.js +9 -9
- package/src/components/overview/overview.css.js +19 -14
- package/src/components/overview/overview.js +6 -5
- package/src/components/overview/overview.stories.js +10 -10
- package/src/components/page-switcher/page-switcher.css.js +97 -40
- package/src/components/page-switcher/page-switcher.js +28 -5
- package/src/components/page-switcher/page-switcher.stories.js +95 -0
- package/src/components/paragraph/paragraph.css.js +15 -10
- package/src/components/paragraph/paragraph.js +41 -44
- package/src/components/paragraph/paragraph.stories.js +56 -21
- package/src/components/picture/picture.css.js +103 -44
- package/src/components/picture/picture.js +100 -30
- package/src/components/picture/picture.stories.js +1 -1
- package/src/components/pricing-cards/new-pricing-card.js +3 -3
- package/src/components/pricing-cards/new-pricing.css.js +24 -15
- package/src/components/pricing-cards/pricing-card-actions.css.js +1 -1
- package/src/components/pricing-cards/pricing-card-actions.js +3 -4
- package/src/components/pricing-cards/pricing-card-container.css.js +3 -3
- package/src/components/pricing-cards/pricing-card-container.js +3 -2
- package/src/components/pricing-cards/pricing-card-header.css.js +10 -8
- package/src/components/pricing-cards/pricing-card-header.js +6 -7
- package/src/components/pricing-cards/pricing-card-pricing.css.js +16 -9
- package/src/components/pricing-cards/pricing-card-pricing.js +8 -6
- package/src/components/pricing-cards/pricing-card-show-more.css.js +11 -3
- package/src/components/pricing-cards/pricing-card-show-more.js +8 -3
- package/src/components/pricing-cards/pricing-card.css.js +244 -190
- package/src/components/pricing-cards/pricing-card.js +54 -70
- package/src/components/pricing-cards/pricing-feature-item.css.js +25 -8
- package/src/components/pricing-cards/pricing-feature-item.js +8 -3
- package/src/components/process-steps/process-steps.css.js +26 -14
- package/src/components/process-steps/process-steps.js +23 -6
- package/src/components/process-steps/process-steps.stories.js +1 -1
- package/src/components/progress/progress.css.js +80 -0
- package/src/components/progress/progress.js +42 -0
- package/src/components/progress/progress.stories.js +79 -0
- package/src/components/quick-answer/quick-answer.css.js +75 -13
- package/src/components/quick-answer/quick-answer.js +8 -3
- package/src/components/radio/radio.css.js +92 -128
- package/src/components/radio/radio.js +106 -127
- package/src/components/radio/radio.stories.js +54 -19
- package/src/components/review/review-grid.css.js +5 -6
- package/src/components/review/review-grid.js +14 -11
- package/src/components/review/review.css.js +11 -6
- package/src/components/review/review.js +3 -8
- package/src/components/shared/ensemble.css.js +93 -0
- package/src/components/shared/form-field.css.js +206 -0
- package/src/components/shared/prop-vocabulary.js +48 -0
- package/src/components/shared/token-scales.js +306 -0
- package/src/components/skeleton/skeleton.css.js +34 -0
- package/src/components/skeleton/skeleton.js +32 -0
- package/src/components/skeleton/skeleton.stories.js +70 -0
- package/src/components/spinner/spinner.css.js +62 -0
- package/src/components/spinner/spinner.js +38 -0
- package/src/components/spinner/spinner.stories.js +92 -0
- package/src/components/spotlight-section/spotlight-section.css.js +14 -13
- package/src/components/spotlight-section/spotlight-section.js +42 -39
- package/src/components/switch/switch.css.js +103 -0
- package/src/components/switch/switch.js +44 -0
- package/src/components/switch/switch.stories.js +86 -0
- package/src/components/tab-list/content-switcher.stories.js +189 -0
- package/src/components/tab-list/tab-list.css.js +250 -0
- package/src/components/tab-list/tab-list.js +184 -0
- package/src/components/tab-list/tab-list.stories.js +221 -0
- package/src/components/tabs/tabs.css.js +14 -123
- package/src/components/tabs/tabs.js +16 -19
- package/src/components/tabs/tabs.stories.js +95 -95
- package/src/components/tag/tag.css.js +54 -0
- package/src/components/tag/tag.js +32 -0
- package/src/components/tag/tag.stories.js +126 -0
- package/src/components/terminal/terminal-message.css.js +164 -60
- package/src/components/terminal/terminal-message.js +5 -5
- package/src/components/terminal/terminal-message.stories.js +70 -1
- package/src/components/termsOfUse/terms.css.js +25 -20
- package/src/components/termsOfUse/terms.js +13 -9
- package/src/components/termsOfUse/terms.stories.js +1 -1
- package/src/components/textarea/textarea.css.js +51 -0
- package/src/components/textarea/textarea.js +136 -0
- package/src/components/textarea/textarea.stories.js +191 -0
- package/src/components/tooltip/tooltip.css.js +75 -0
- package/src/components/tooltip/tooltip.js +156 -0
- package/src/components/tooltip/tooltip.stories.js +161 -0
- package/src/components/trust-panel/trust-panel.css.js +85 -33
- package/src/components/trust-panel/trust-panel.js +18 -10
- package/src/components/trust-panel/trust-panel.stories.js +1 -1
- package/src/components/ultimate-security-demo.stories.js +431 -0
- package/src/components/video/video.css.js +17 -0
- package/src/components/video/video.js +40 -0
- package/src/components/video/video.stories.js +106 -0
- package/src/components/video-player/video-player.css.js +67 -11
- package/src/components/video-player/video-player.js +35 -4
- package/src/components/video-player/video-player.stories.js +1 -1
- package/src/components/visual-alignment.stories.js +411 -0
- package/src/components/visually-hidden/visually-hidden.css.js +24 -0
- package/src/components/visually-hidden/visually-hidden.js +16 -0
- package/src/components/visually-hidden/visually-hidden.stories.js +56 -0
- package/src/stories/Button.stories.js +17 -17
- package/src/stories/Header.stories.js +10 -10
- package/src/stories/Page.js +1 -1
- package/src/stories/Page.stories.js +6 -6
- package/src/tokens/borders.stories.js +339 -0
- package/src/tokens/color-responsibilities.stories.js +227 -0
- package/src/tokens/dark-derivation.js +309 -0
- package/src/tokens/dark-findings.js +197 -0
- package/src/tokens/dark-mode.stories.js +207 -0
- package/src/tokens/dimension.stories.js +251 -0
- package/src/tokens/elevation.stories.js +143 -0
- package/src/tokens/focus.stories.js +276 -0
- package/src/tokens/fonts.css +20 -20
- package/src/tokens/fonts.stories.js +354 -374
- package/src/tokens/layout.css +25 -11
- package/src/tokens/motion.stories.js +231 -0
- package/src/tokens/shape.stories.js +272 -0
- package/src/tokens/spacing-rhythm.stories.js +359 -0
- package/src/tokens/spacing.stories.js +208 -703
- package/src/tokens/story-chrome.js +503 -0
- package/src/tokens/surfaces.stories.js +224 -0
- package/src/tokens/text-on-surface.stories.js +164 -0
- package/src/tokens/token-map.js +220 -0
- package/src/tokens/token-map.stories.js +257 -0
- package/src/tokens/token-purposes.js +266 -0
- package/src/tokens/tokens-grid.stories.js +388 -900
- package/src/tokens/tokens.css +1633 -1045
- package/src/tokens/tokens.js +1130 -492
- package/src/tokens/tokens.stories.js +137 -47
- package/src/tokens/type-ceiling-words.js +299 -0
- package/src/tokens/typography.stories.js +1003 -965
- package/src/tokens/vertical-rhythm.stories.js +224 -0
- package/src/components/awards/awards-icon.js +0 -56
- package/src/components/awards/awards-light.js +0 -240
- package/src/components/banner/banner.js +0 -60
- package/src/components/banner/banner.stories.js +0 -51
- package/src/components/button/icons.js +0 -24
- package/src/components/input/index.js +0 -0
- package/src/components/light-carousel/light-carousel-simple.css.js +0 -183
- package/src/components/light-carousel/light-carousel-simple.js +0 -74
- package/src/tokens/colors.js +0 -121
- package/src/tokens/typography.css.js +0 -207
- package/src/tokens/typography.js +0 -0
|
@@ -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 : '
|
|
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
|
|
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
|
-
| \`
|
|
35
|
-
| \`
|
|
36
|
-
| \`
|
|
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
|
|
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: '
|
|
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: '
|
|
200
|
+
defaultValue: { summary: "'Enter something...' ('Paste something...' on the clipboard field)" },
|
|
71
201
|
category : 'Input'
|
|
72
202
|
}
|
|
73
203
|
},
|
|
74
|
-
|
|
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: '
|
|
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: '
|
|
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 : '
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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"
|
|
331
|
-
<bd-custom-input label="Medium (md)" placeholder="md variant"
|
|
332
|
-
<bd-custom-input label="Large (lg)" placeholder="lg variant"
|
|
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"
|
|
353
|
-
<bd-custom-input label="Email" type="email" placeholder="you@example.com"
|
|
354
|
-
<bd-custom-input label="Password" type="password" placeholder="••••••••"
|
|
355
|
-
<bd-custom-input label="Number" type="number" placeholder="0"
|
|
356
|
-
<bd-custom-input label="Tel" type="tel" placeholder="+40 700 000 000"
|
|
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
|
-
|
|
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)"
|
|
419
|
-
<bd-custom-dropdown label="Medium (md)"
|
|
420
|
-
<bd-custom-dropdown label="Large (lg)"
|
|
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
|
|
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
|
|
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
|
|
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)"
|
|
505
|
-
<bd-custom-input-clipboard label="Medium (md)"
|
|
506
|
-
<bd-custom-input-clipboard label="Large (lg)"
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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"
|
|
700
|
-
<bd-button size="md"
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
943
|
+
size="md"
|
|
792
944
|
value="whsec_live_8d2f4b6a0c3e5f7d9b1a4c6e8f2d0b4a"
|
|
793
945
|
tooltip="Used to verify incoming webhook payloads">
|
|
794
946
|
</bd-custom-input-clipboard>
|