@boostdev/design-system-components 2.8.0 → 2.11.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/AGENTS.md +54 -46
- package/README.md +34 -20
- package/dist/client.cjs +1317 -779
- package/dist/client.css +1029 -812
- package/dist/client.d.cts +88 -26
- package/dist/client.d.ts +88 -26
- package/dist/client.js +1278 -732
- package/dist/index.cjs +1317 -779
- package/dist/index.css +1029 -812
- package/dist/index.d.cts +88 -26
- package/dist/index.d.ts +88 -26
- package/dist/index.js +1278 -732
- package/dist/web-components/chunk-2OLVQUBU.js +193 -0
- package/dist/web-components/{chunk-OF6FFGOT.js → chunk-3AY2YKCM.js} +77 -21
- package/dist/web-components/chunk-3WAV6MDN.js +212 -0
- package/dist/web-components/{chunk-UUKSDCYS.js → chunk-47AT5KZD.js} +87 -15
- package/dist/web-components/chunk-4A2YYTYN.js +93 -0
- package/dist/web-components/{chunk-Q4T5BJT6.js → chunk-62NK3ZSC.js} +18 -3
- package/dist/web-components/chunk-66M6ETWD.js +77 -0
- package/dist/web-components/{chunk-NCPQ7AF3.js → chunk-6G22I2CK.js} +18 -3
- package/dist/web-components/{chunk-QDST57JC.js → chunk-7ZOJ7N4E.js} +14 -4
- package/dist/web-components/{chunk-QLT6MTZF.js → chunk-AIBOHNDU.js} +10 -0
- package/dist/web-components/{chunk-X3NQMBAQ.js → chunk-AP4RDUL2.js} +14 -3
- package/dist/web-components/{chunk-QWPACK5L.js → chunk-BPYKZVDK.js} +11 -1
- package/dist/web-components/{chunk-YLVTEY23.js → chunk-BTCMJQKB.js} +53 -21
- package/dist/web-components/chunk-CUKQ2L5B.js +245 -0
- package/dist/web-components/chunk-DIZDCL7Z.js +14 -0
- package/dist/web-components/{chunk-PC3IOQAH.js → chunk-DV5T43ZC.js} +27 -7
- package/dist/web-components/{chunk-2QA62WCQ.js → chunk-EF7IVYTY.js} +10 -0
- package/dist/web-components/{chunk-L3XHOMN6.js → chunk-F3ZDNHZZ.js} +26 -1
- package/dist/web-components/chunk-FEDABOR5.js +248 -0
- package/dist/web-components/{chunk-6I2DBFQ7.js → chunk-HGFCJXOQ.js} +36 -5
- package/dist/web-components/{chunk-SOQQ7RVJ.js → chunk-IPGHUCJT.js} +23 -8
- package/dist/web-components/chunk-ITD2MV5K.js +392 -0
- package/dist/web-components/{chunk-ARMKC4BQ.js → chunk-JH6LQKLK.js} +77 -5
- package/dist/web-components/chunk-JMCXAAFK.js +120 -0
- package/dist/web-components/{chunk-KUI55GFB.js → chunk-JUPCZVVW.js} +50 -18
- package/dist/web-components/chunk-JV5QT2OU.js +146 -0
- package/dist/web-components/{chunk-3GFWLSLS.js → chunk-KA3VPKMY.js} +29 -6
- package/dist/web-components/{chunk-CR5PGUHV.js → chunk-KJGRFDFI.js} +26 -11
- package/dist/web-components/{chunk-PY62FTRW.js → chunk-KZPRFY5P.js} +68 -33
- package/dist/web-components/{chunk-X46KL5BK.js → chunk-LDIPCTRN.js} +18 -1
- package/dist/web-components/chunk-M3ECULRH.js +174 -0
- package/dist/web-components/chunk-NBN2ENWJ.js +90 -0
- package/dist/web-components/chunk-NIN3JO6Q.js +189 -0
- package/dist/web-components/{chunk-2FGATTGT.js → chunk-NTQ4TCUT.js} +76 -55
- package/dist/web-components/chunk-OY74D4X6.js +302 -0
- package/dist/web-components/{chunk-3S42DZ7W.js → chunk-P24JYC5V.js} +7 -0
- package/dist/web-components/{chunk-BKIHQYJR.js → chunk-PXPPKCLT.js} +17 -2
- package/dist/web-components/{chunk-TQ7IQ4GZ.js → chunk-QEF2IRID.js} +71 -29
- package/dist/web-components/chunk-QZAIRJ75.js +111 -0
- package/dist/web-components/{chunk-6I3CFC26.js → chunk-RSZ3BWBK.js} +20 -5
- package/dist/web-components/chunk-RVF7W653.js +101 -0
- package/dist/web-components/chunk-SEO2F5KJ.js +234 -0
- package/dist/web-components/{chunk-VMMVWLXL.js → chunk-SFZ6Q4BP.js} +10 -0
- package/dist/web-components/{chunk-LY62SAVN.js → chunk-SYNLFKD3.js} +12 -2
- package/dist/web-components/chunk-TMWXRHGF.js +192 -0
- package/dist/web-components/{chunk-65JXQOBA.js → chunk-U3YZE6R6.js} +51 -7
- package/dist/web-components/chunk-UO7ROSHD.js +424 -0
- package/dist/web-components/chunk-VANAKB6D.js +152 -0
- package/dist/web-components/{chunk-PXZWYO6Z.js → chunk-VED2DFJ6.js} +108 -29
- package/dist/web-components/chunk-W6H5ID2U.js +161 -0
- package/dist/web-components/{chunk-FSZRP43R.js → chunk-WFVKU4GX.js} +21 -10
- package/dist/web-components/{chunk-OQTRTMAB.js → chunk-WIBAN7KP.js} +10 -0
- package/dist/web-components/chunk-XI7KRAH7.js +54 -0
- package/dist/web-components/{chunk-ORC56MDY.js → chunk-XIZWAWMJ.js} +45 -6
- package/dist/web-components/{chunk-FXURM6D5.js → chunk-YFAXGRPR.js} +10 -0
- package/dist/web-components/globals.js +1 -1
- package/dist/web-components/index.d.ts +77 -707
- package/dist/web-components/index.js +339 -2066
- package/dist/web-components/interaction/bds-accordion-item.js +1 -1
- package/dist/web-components/interaction/bds-accordion.js +1 -1
- package/dist/web-components/interaction/bds-button.d.ts +10 -2
- package/dist/web-components/interaction/bds-button.js +1 -1
- package/dist/web-components/interaction/bds-collapsible.d.ts +7 -2
- package/dist/web-components/interaction/bds-collapsible.js +1 -1
- package/dist/web-components/interaction/bds-dialog.d.ts +11 -3
- package/dist/web-components/interaction/bds-dialog.js +1 -1
- package/dist/web-components/interaction/bds-drawer.d.ts +7 -1
- package/dist/web-components/interaction/bds-drawer.js +1 -1
- package/dist/web-components/interaction/bds-dropdown-menu-item.d.ts +51 -0
- package/dist/web-components/interaction/bds-dropdown-menu-item.js +7 -0
- package/dist/web-components/interaction/bds-dropdown-menu.d.ts +70 -0
- package/dist/web-components/interaction/bds-dropdown-menu.js +7 -0
- package/dist/web-components/interaction/bds-popover.d.ts +14 -3
- package/dist/web-components/interaction/bds-popover.js +1 -1
- package/dist/web-components/interaction/bds-skip-link.js +1 -1
- package/dist/web-components/interaction/bds-tab-panel.js +1 -1
- package/dist/web-components/interaction/bds-tab.js +1 -1
- package/dist/web-components/interaction/bds-tabs.d.ts +1 -0
- package/dist/web-components/interaction/bds-tabs.js +1 -1
- package/dist/web-components/interaction/bds-toast-provider.js +1 -1
- package/dist/web-components/interaction/bds-tooltip.d.ts +19 -3
- package/dist/web-components/interaction/bds-tooltip.js +1 -1
- package/dist/web-components/interaction/form/bds-checkbox-group.d.ts +83 -0
- package/dist/web-components/interaction/form/bds-checkbox-group.js +7 -0
- package/dist/web-components/interaction/form/bds-checkbox.d.ts +6 -0
- package/dist/web-components/interaction/form/bds-checkbox.js +1 -1
- package/dist/web-components/interaction/form/bds-combobox.d.ts +18 -0
- package/dist/web-components/interaction/form/bds-combobox.js +1 -1
- package/dist/web-components/interaction/form/bds-field-group.d.ts +89 -0
- package/dist/web-components/interaction/form/bds-field-group.js +7 -0
- package/dist/web-components/interaction/form/bds-file-input.d.ts +1 -1
- package/dist/web-components/interaction/form/bds-file-input.js +1 -1
- package/dist/web-components/interaction/form/bds-form-input.d.ts +92 -0
- package/dist/web-components/interaction/form/bds-form-input.js +7 -0
- package/dist/web-components/interaction/form/bds-number-input.d.ts +18 -1
- package/dist/web-components/interaction/form/bds-number-input.js +1 -1
- package/dist/web-components/interaction/form/bds-radio-group.d.ts +81 -0
- package/dist/web-components/interaction/form/bds-radio-group.js +7 -0
- package/dist/web-components/interaction/form/bds-radio.d.ts +34 -6
- package/dist/web-components/interaction/form/bds-radio.js +1 -1
- package/dist/web-components/interaction/form/bds-segmented-control.d.ts +4 -4
- package/dist/web-components/interaction/form/bds-segmented-control.js +1 -1
- package/dist/web-components/interaction/form/bds-select.d.ts +22 -1
- package/dist/web-components/interaction/form/bds-select.js +1 -1
- package/dist/web-components/interaction/form/bds-slider.d.ts +42 -10
- package/dist/web-components/interaction/form/bds-slider.js +1 -1
- package/dist/web-components/interaction/form/bds-switch.d.ts +20 -0
- package/dist/web-components/interaction/form/bds-switch.js +1 -1
- package/dist/web-components/interaction/form/bds-textarea.d.ts +23 -3
- package/dist/web-components/interaction/form/bds-textarea.js +1 -1
- package/dist/web-components/layout/bds-grid-item.d.ts +63 -0
- package/dist/web-components/layout/bds-grid-item.js +7 -0
- package/dist/web-components/layout/bds-grid.d.ts +108 -0
- package/dist/web-components/layout/bds-grid.js +7 -0
- package/dist/web-components/ui/bds-alert.d.ts +16 -2
- package/dist/web-components/ui/bds-alert.js +1 -1
- package/dist/web-components/ui/bds-avatar.d.ts +2 -1
- package/dist/web-components/ui/bds-avatar.js +1 -1
- package/dist/web-components/ui/bds-badge.js +1 -1
- package/dist/web-components/ui/bds-breadcrumb.d.ts +3 -1
- package/dist/web-components/ui/bds-breadcrumb.js +1 -1
- package/dist/web-components/ui/bds-button-container.d.ts +52 -0
- package/dist/web-components/ui/bds-button-container.js +7 -0
- package/dist/web-components/ui/bds-button-group.d.ts +21 -0
- package/dist/web-components/ui/bds-button-group.js +8 -0
- package/dist/web-components/ui/bds-calendar.d.ts +121 -0
- package/dist/web-components/ui/bds-calendar.js +7 -0
- package/dist/web-components/ui/bds-card.d.ts +12 -3
- package/dist/web-components/ui/bds-card.js +1 -1
- package/dist/web-components/ui/bds-carousel.d.ts +98 -0
- package/dist/web-components/ui/bds-carousel.js +7 -0
- package/dist/web-components/ui/bds-description-list.js +1 -1
- package/dist/web-components/ui/bds-icon-wrapper.d.ts +0 -9
- package/dist/web-components/ui/bds-icon-wrapper.js +1 -1
- package/dist/web-components/ui/bds-link.js +1 -1
- package/dist/web-components/ui/bds-loading.js +1 -1
- package/dist/web-components/ui/bds-notification-banner.js +1 -1
- package/dist/web-components/ui/bds-pagination.d.ts +47 -0
- package/dist/web-components/ui/bds-pagination.js +7 -0
- package/dist/web-components/ui/bds-progress-circle.d.ts +3 -1
- package/dist/web-components/ui/bds-progress-circle.js +1 -1
- package/dist/web-components/ui/bds-progress.d.ts +3 -1
- package/dist/web-components/ui/bds-progress.js +1 -1
- package/dist/web-components/ui/bds-rating.js +1 -1
- package/dist/web-components/ui/bds-section-header.d.ts +18 -4
- package/dist/web-components/ui/bds-section-header.js +1 -1
- package/dist/web-components/ui/bds-separator.js +1 -1
- package/dist/web-components/ui/bds-skeleton.js +1 -1
- package/dist/web-components/ui/bds-table.d.ts +52 -0
- package/dist/web-components/ui/bds-table.js +7 -0
- package/dist/web-components/ui/bds-typography.d.ts +1 -0
- package/dist/web-components/ui/bds-typography.js +1 -1
- package/package.json +60 -3
- package/src/components/interaction/Button/Button.module.css +23 -14
- package/src/components/interaction/Button/Button.spec.tsx +20 -0
- package/src/components/interaction/Button/Button.tsx +2 -2
- package/src/components/interaction/Command/Command.mdx +5 -2
- package/src/components/interaction/Command/Command.module.css +23 -7
- package/src/components/interaction/Command/Command.spec.tsx +35 -0
- package/src/components/interaction/Command/Command.tsx +15 -4
- package/src/components/interaction/Command/index.ts +1 -1
- package/src/components/interaction/Dialog/Dialog.mdx +4 -4
- package/src/components/interaction/Dialog/Dialog.module.css +20 -0
- package/src/components/interaction/Dialog/Dialog.spec.tsx +20 -0
- package/src/components/interaction/Dialog/Dialog.tsx +8 -3
- package/src/components/interaction/Dialog/index.ts +1 -0
- package/src/components/interaction/Drawer/Drawer.mdx +5 -2
- package/src/components/interaction/Drawer/Drawer.module.css +34 -3
- package/src/components/interaction/Drawer/Drawer.spec.tsx +67 -1
- package/src/components/interaction/Drawer/Drawer.tsx +30 -12
- package/src/components/interaction/Drawer/index.ts +1 -0
- package/src/components/interaction/DropdownMenu/DropdownMenu.mdx +2 -0
- package/src/components/interaction/DropdownMenu/DropdownMenu.spec.tsx +34 -0
- package/src/components/interaction/DropdownMenu/DropdownMenu.tsx +15 -5
- package/src/components/interaction/DropdownMenu/index.ts +1 -0
- package/src/components/interaction/Popover/Popover.mdx +6 -2
- package/src/components/interaction/Popover/Popover.module.css +26 -18
- package/src/components/interaction/Popover/Popover.spec.tsx +38 -0
- package/src/components/interaction/Popover/Popover.tsx +19 -5
- package/src/components/interaction/Popover/index.ts +1 -0
- package/src/components/interaction/Rating/Rating.mdx +1 -1
- package/src/components/interaction/Rating/Rating.module.css +2 -2
- package/src/components/interaction/Rating/Rating.tsx +1 -1
- package/src/components/interaction/Rating/index.ts +1 -0
- package/src/components/interaction/Toast/Toast.mdx +3 -0
- package/src/components/interaction/Toast/Toast.module.css +35 -5
- package/src/components/interaction/Toast/Toast.spec.tsx +69 -1
- package/src/components/interaction/Toast/Toast.tsx +15 -9
- package/src/components/interaction/form/Checkbox/Checkbox.mdx +3 -0
- package/src/components/interaction/form/Checkbox/Checkbox.module.css +13 -6
- package/src/components/interaction/form/Checkbox/Checkbox.spec.tsx +6 -0
- package/src/components/interaction/form/Checkbox/Checkbox.tsx +1 -1
- package/src/components/interaction/form/CheckboxGroup/CheckboxGroup.mdx +16 -1
- package/src/components/interaction/form/CheckboxGroup/CheckboxGroup.module.css +24 -8
- package/src/components/interaction/form/CheckboxGroup/CheckboxGroup.spec.tsx +32 -2
- package/src/components/interaction/form/CheckboxGroup/CheckboxGroup.tsx +14 -2
- package/src/components/interaction/form/Combobox/Combobox.mdx +11 -4
- package/src/components/interaction/form/Combobox/Combobox.module.css +6 -6
- package/src/components/interaction/form/Combobox/Combobox.spec.tsx +47 -0
- package/src/components/interaction/form/Combobox/Combobox.tsx +10 -5
- package/src/components/interaction/form/FieldGroup/FieldGroup.mdx +9 -10
- package/src/components/interaction/form/FieldGroup/FieldGroup.module.css +57 -23
- package/src/components/interaction/form/FieldGroup/FieldGroup.spec.tsx +129 -7
- package/src/components/interaction/form/FieldGroup/FieldGroup.tsx +72 -12
- package/src/components/interaction/form/FileInput/FileInput.mdx +9 -1
- package/src/components/interaction/form/FileInput/FileInput.module.css +8 -8
- package/src/components/interaction/form/FileInput/FileInput.spec.tsx +89 -1
- package/src/components/interaction/form/FileInput/FileInput.tsx +6 -2
- package/src/components/interaction/form/FormInput/FormInput.mdx +9 -5
- package/src/components/interaction/form/FormInput/FormInput.module.css +17 -8
- package/src/components/interaction/form/FormInput/FormInput.spec.tsx +20 -0
- package/src/components/interaction/form/FormInput/FormInput.tsx +7 -2
- package/src/components/interaction/form/NumberInput/NumberInput.mdx +5 -1
- package/src/components/interaction/form/NumberInput/NumberInput.module.css +6 -6
- package/src/components/interaction/form/NumberInput/NumberInput.spec.tsx +51 -0
- package/src/components/interaction/form/NumberInput/NumberInput.tsx +36 -8
- package/src/components/interaction/form/Radio/Radio.mdx +8 -1
- package/src/components/interaction/form/Radio/Radio.module.css +20 -7
- package/src/components/interaction/form/Radio/Radio.spec.tsx +15 -0
- package/src/components/interaction/form/Radio/Radio.tsx +10 -4
- package/src/components/interaction/form/RadioGroup/RadioGroup.mdx +16 -1
- package/src/components/interaction/form/RadioGroup/RadioGroup.module.css +24 -8
- package/src/components/interaction/form/RadioGroup/RadioGroup.spec.tsx +32 -2
- package/src/components/interaction/form/RadioGroup/RadioGroup.tsx +14 -2
- package/src/components/interaction/form/SegmentedControl/SegmentedControl.mdx +9 -3
- package/src/components/interaction/form/SegmentedControl/SegmentedControl.module.css +25 -12
- package/src/components/interaction/form/SegmentedControl/SegmentedControl.spec.tsx +86 -5
- package/src/components/interaction/form/SegmentedControl/SegmentedControl.tsx +44 -4
- package/src/components/interaction/form/Select/Select.mdx +10 -4
- package/src/components/interaction/form/Select/Select.module.css +4 -4
- package/src/components/interaction/form/Select/Select.spec.tsx +34 -0
- package/src/components/interaction/form/Select/Select.tsx +21 -9
- package/src/components/interaction/form/Slider/Slider.mdx +4 -1
- package/src/components/interaction/form/Slider/Slider.module.css +32 -8
- package/src/components/interaction/form/Slider/Slider.spec.tsx +29 -0
- package/src/components/interaction/form/Slider/Slider.tsx +9 -7
- package/src/components/interaction/form/Switch/Switch.mdx +2 -2
- package/src/components/interaction/form/Switch/Switch.module.css +12 -13
- package/src/components/interaction/form/Switch/Switch.spec.tsx +20 -0
- package/src/components/interaction/form/Switch/Switch.tsx +2 -1
- package/src/components/interaction/form/Textarea/Textarea.mdx +5 -0
- package/src/components/interaction/form/Textarea/Textarea.module.css +5 -5
- package/src/components/interaction/form/Textarea/Textarea.spec.tsx +13 -0
- package/src/components/interaction/form/Textarea/Textarea.tsx +3 -1
- package/src/components/interaction/form/atoms/Message.module.css +1 -1
- package/src/components/interaction/form/atoms/Message.spec.tsx +29 -0
- package/src/components/interaction/form/atoms/Message.tsx +1 -1
- package/src/components/layout/ButtonGroup/ButtonGroup.mdx +11 -0
- package/src/components/layout/ButtonGroup/ButtonGroup.module.css +1 -5
- package/src/components/layout/ButtonGroup/ButtonGroup.stories.tsx +14 -0
- package/src/components/layout/Card/Card.mdx +6 -1
- package/src/components/layout/Card/Card.module.css +26 -5
- package/src/components/layout/Card/Card.spec.tsx +7 -0
- package/src/components/layout/Card/Card.tsx +4 -3
- package/src/components/layout/Grid/Grid.spec.tsx +44 -0
- package/src/components/layout/Grid/Grid.tsx +5 -5
- package/src/components/layout/Grid/GridItem.tsx +6 -6
- package/src/components/layout/Grid/masonry.ts +31 -5
- package/src/components/layout/Grid/useIsomorphicLayoutEffect.ts +11 -0
- package/src/components/layout/IconWrapper/IconWrapper.mdx +8 -2
- package/src/components/layout/IconWrapper/IconWrapper.module.css +9 -6
- package/src/components/layout/SectionHeader/SectionHeader.mdx +4 -1
- package/src/components/layout/SectionHeader/SectionHeader.module.css +10 -9
- package/src/components/ui/Accordion/Accordion.mdx +4 -1
- package/src/components/ui/Accordion/Accordion.module.css +2 -1
- package/src/components/ui/Alert/Alert.mdx +21 -4
- package/src/components/ui/Alert/Alert.module.css +9 -4
- package/src/components/ui/Alert/Alert.spec.tsx +20 -0
- package/src/components/ui/Avatar/Avatar.mdx +8 -3
- package/src/components/ui/Avatar/Avatar.module.css +13 -8
- package/src/components/ui/Badge/Badge.mdx +3 -1
- package/src/components/ui/Breadcrumb/Breadcrumb.mdx +3 -0
- package/src/components/ui/Breadcrumb/Breadcrumb.module.css +4 -0
- package/src/components/ui/Breadcrumb/Breadcrumb.spec.tsx +12 -0
- package/src/components/ui/Breadcrumb/Breadcrumb.tsx +11 -3
- package/src/components/ui/Calendar/Calendar.mdx +6 -0
- package/src/components/ui/Calendar/Calendar.module.css +68 -19
- package/src/components/ui/Calendar/Calendar.spec.tsx +139 -24
- package/src/components/ui/Calendar/Calendar.stories.tsx +14 -0
- package/src/components/ui/Calendar/Calendar.tsx +143 -154
- package/src/components/ui/Calendar/CalendarRange.mdx +39 -0
- package/src/components/ui/Calendar/CalendarRange.spec.tsx +119 -0
- package/src/components/ui/Calendar/CalendarRange.stories.tsx +51 -0
- package/src/components/ui/Calendar/CalendarRange.tsx +213 -0
- package/src/components/ui/Calendar/MonthGrid.tsx +141 -0
- package/src/components/ui/Calendar/calendar-core.spec.ts +176 -0
- package/src/components/ui/Calendar/calendar-core.ts +164 -0
- package/src/components/ui/Calendar/index.ts +1 -0
- package/src/components/ui/Carousel/Carousel.mdx +8 -3
- package/src/components/ui/Carousel/Carousel.module.css +7 -5
- package/src/components/ui/Carousel/Carousel.spec.tsx +67 -0
- package/src/components/ui/Carousel/Carousel.tsx +19 -7
- package/src/components/ui/Collapsible/Collapsible.mdx +17 -6
- package/src/components/ui/Collapsible/Collapsible.module.css +7 -2
- package/src/components/ui/Collapsible/Collapsible.spec.tsx +40 -0
- package/src/components/ui/Collapsible/Collapsible.tsx +19 -2
- package/src/components/ui/DescriptionList/DescriptionList.mdx +2 -0
- package/src/components/ui/Link/Link.mdx +4 -2
- package/src/components/ui/Loading/Loading.mdx +6 -3
- package/src/components/ui/Loading/Loading.module.css +7 -7
- package/src/components/ui/Loading/Loading.spec.tsx +12 -0
- package/src/components/ui/Loading/Loading.tsx +8 -3
- package/src/components/ui/NotificationBanner/NotificationBanner.mdx +4 -0
- package/src/components/ui/NotificationBanner/NotificationBanner.module.css +5 -0
- package/src/components/ui/NotificationBanner/NotificationBanner.spec.tsx +20 -0
- package/src/components/ui/Pagination/Pagination.mdx +29 -7
- package/src/components/ui/Pagination/Pagination.module.css +15 -14
- package/src/components/ui/Progress/Progress.mdx +6 -2
- package/src/components/ui/Progress/Progress.module.css +1 -1
- package/src/components/ui/Progress/Progress.spec.tsx +17 -0
- package/src/components/ui/Progress/Progress.tsx +2 -2
- package/src/components/ui/ProgressCircle/ProgressCircle.mdx +8 -4
- package/src/components/ui/ProgressCircle/ProgressCircle.module.css +2 -2
- package/src/components/ui/ProgressCircle/ProgressCircle.spec.tsx +11 -1
- package/src/components/ui/ProgressCircle/ProgressCircle.tsx +1 -1
- package/src/components/ui/Separator/Separator.mdx +7 -0
- package/src/components/ui/Separator/Separator.module.css +1 -0
- package/src/components/ui/Skeleton/Skeleton.mdx +17 -0
- package/src/components/ui/Skeleton/Skeleton.module.css +12 -5
- package/src/components/ui/SkipLink/SkipLink.mdx +19 -0
- package/src/components/ui/SkipLink/SkipLink.module.css +8 -7
- package/src/components/ui/SkipLink/SkipLink.spec.tsx +28 -0
- package/src/components/ui/Table/Table.mdx +14 -0
- package/src/components/ui/Table/Table.module.css +13 -8
- package/src/components/ui/Table/Table.spec.tsx +56 -0
- package/src/components/ui/Table/Table.tsx +44 -6
- package/src/components/ui/Tabs/Tabs.mdx +16 -0
- package/src/components/ui/Tabs/Tabs.module.css +3 -3
- package/src/components/ui/Tabs/Tabs.spec.tsx +20 -0
- package/src/components/ui/Tabs/Tabs.tsx +5 -1
- package/src/components/ui/Tooltip/Tooltip.mdx +9 -0
- package/src/components/ui/Tooltip/Tooltip.module.css +32 -12
- package/src/components/ui/Tooltip/Tooltip.spec.tsx +56 -0
- package/src/components/ui/Tooltip/Tooltip.tsx +26 -7
- package/src/components/ui/Typography/Typography.mdx +7 -0
- package/src/components/ui/Typography/Typography.module.css +5 -5
- package/src/index.ts +7 -3
- package/src/stories/DesignSystem/Borders.mdx +14 -9
- package/src/stories/DesignSystem/Colors.mdx +43 -41
- package/src/stories/DesignSystem/Overview.mdx +4 -3
- package/src/stories/Introduction.mdx +5 -5
- package/src/web-components/globals.ts +7 -0
- package/src/web-components/index.ts +2 -0
- package/src/web-components/interaction/BdsAccordion.mdx +10 -1
- package/src/web-components/interaction/BdsButton.mdx +15 -4
- package/src/web-components/interaction/BdsButton.stories.tsx +1 -1
- package/src/web-components/interaction/BdsCollapsible.mdx +3 -3
- package/src/web-components/interaction/BdsDialog.mdx +12 -7
- package/src/web-components/interaction/BdsDialog.stories.tsx +2 -2
- package/src/web-components/interaction/BdsDrawer.mdx +9 -6
- package/src/web-components/interaction/BdsDropdownMenu.mdx +20 -1
- package/src/web-components/interaction/BdsPopover.mdx +7 -3
- package/src/web-components/interaction/BdsSkipLink.mdx +14 -1
- package/src/web-components/interaction/BdsTabs.mdx +18 -1
- package/src/web-components/interaction/BdsToastProvider.mdx +21 -3
- package/src/web-components/interaction/BdsTooltip.mdx +4 -4
- package/src/web-components/interaction/bds-accordion-item.ts +10 -0
- package/src/web-components/interaction/bds-accordion.spec.ts +41 -0
- package/src/web-components/interaction/bds-accordion.ts +28 -2
- package/src/web-components/interaction/bds-button.spec.ts +81 -0
- package/src/web-components/interaction/bds-button.ts +55 -8
- package/src/web-components/interaction/bds-collapsible.spec.ts +93 -2
- package/src/web-components/interaction/bds-collapsible.ts +49 -7
- package/src/web-components/interaction/bds-dialog.spec.ts +49 -0
- package/src/web-components/interaction/bds-dialog.ts +68 -11
- package/src/web-components/interaction/bds-drawer.spec.ts +93 -4
- package/src/web-components/interaction/bds-drawer.ts +54 -21
- package/src/web-components/interaction/bds-dropdown-menu-item.ts +12 -1
- package/src/web-components/interaction/bds-dropdown-menu.spec.ts +63 -0
- package/src/web-components/interaction/bds-dropdown-menu.ts +45 -7
- package/src/web-components/interaction/bds-popover.spec.ts +80 -6
- package/src/web-components/interaction/bds-popover.ts +83 -32
- package/src/web-components/interaction/bds-skip-link.spec.ts +18 -0
- package/src/web-components/interaction/bds-skip-link.ts +29 -8
- package/src/web-components/interaction/bds-tab-panel.ts +10 -0
- package/src/web-components/interaction/bds-tab.spec.ts +25 -0
- package/src/web-components/interaction/bds-tab.ts +20 -5
- package/src/web-components/interaction/bds-tabs.spec.ts +92 -5
- package/src/web-components/interaction/bds-tabs.ts +42 -1
- package/src/web-components/interaction/bds-toast-provider.spec.ts +43 -0
- package/src/web-components/interaction/bds-toast-provider.ts +50 -21
- package/src/web-components/interaction/bds-tooltip.spec.ts +71 -0
- package/src/web-components/interaction/bds-tooltip.ts +100 -5
- package/src/web-components/interaction/form/BdsCheckbox.mdx +20 -1
- package/src/web-components/interaction/form/BdsCheckbox.stories.tsx +8 -0
- package/src/web-components/interaction/form/BdsCheckboxGroup.mdx +4 -3
- package/src/web-components/interaction/form/BdsCombobox.mdx +39 -2
- package/src/web-components/interaction/form/BdsCombobox.stories.tsx +31 -0
- package/src/web-components/interaction/form/BdsFieldGroup.mdx +8 -3
- package/src/web-components/interaction/form/BdsFieldGroup.stories.tsx +1 -1
- package/src/web-components/interaction/form/BdsFileInput.mdx +26 -5
- package/src/web-components/interaction/form/BdsFormInput.mdx +16 -1
- package/src/web-components/interaction/form/BdsNumberInput.mdx +34 -2
- package/src/web-components/interaction/form/BdsNumberInput.stories.tsx +27 -3
- package/src/web-components/interaction/form/BdsRadio.mdx +39 -12
- package/src/web-components/interaction/form/BdsRadio.stories.tsx +26 -0
- package/src/web-components/interaction/form/BdsRadioGroup.mdx +9 -4
- package/src/web-components/interaction/form/BdsSegmentedControl.mdx +37 -11
- package/src/web-components/interaction/form/BdsSelect.mdx +22 -4
- package/src/web-components/interaction/form/BdsSelect.stories.tsx +33 -0
- package/src/web-components/interaction/form/BdsSlider.mdx +36 -19
- package/src/web-components/interaction/form/BdsSlider.stories.tsx +24 -0
- package/src/web-components/interaction/form/BdsSwitch.mdx +38 -11
- package/src/web-components/interaction/form/BdsSwitch.stories.tsx +16 -0
- package/src/web-components/interaction/form/BdsTextarea.mdx +42 -16
- package/src/web-components/interaction/form/BdsTextarea.stories.tsx +21 -0
- package/src/web-components/interaction/form/bds-checkbox-group.spec.ts +99 -0
- package/src/web-components/interaction/form/bds-checkbox-group.ts +95 -9
- package/src/web-components/interaction/form/bds-checkbox.spec.ts +55 -0
- package/src/web-components/interaction/form/bds-checkbox.ts +30 -5
- package/src/web-components/interaction/form/bds-combobox.spec.ts +79 -0
- package/src/web-components/interaction/form/bds-combobox.ts +101 -16
- package/src/web-components/interaction/form/bds-field-group.spec.ts +158 -0
- package/src/web-components/interaction/form/bds-field-group.ts +167 -23
- package/src/web-components/interaction/form/bds-file-input.spec.ts +73 -5
- package/src/web-components/interaction/form/bds-file-input.ts +71 -34
- package/src/web-components/interaction/form/bds-form-input.spec.ts +22 -0
- package/src/web-components/interaction/form/bds-form-input.ts +27 -16
- package/src/web-components/interaction/form/bds-number-input.spec.ts +49 -0
- package/src/web-components/interaction/form/bds-number-input.ts +118 -29
- package/src/web-components/interaction/form/bds-radio-group.spec.ts +57 -0
- package/src/web-components/interaction/form/bds-radio-group.ts +60 -12
- package/src/web-components/interaction/form/bds-radio.spec.ts +123 -0
- package/src/web-components/interaction/form/bds-radio.ts +135 -22
- package/src/web-components/interaction/form/bds-segmented-control.spec.ts +55 -0
- package/src/web-components/interaction/form/bds-segmented-control.ts +81 -59
- package/src/web-components/interaction/form/bds-select.spec.ts +57 -0
- package/src/web-components/interaction/form/bds-select.ts +95 -7
- package/src/web-components/interaction/form/bds-slider.spec.ts +83 -0
- package/src/web-components/interaction/form/bds-slider.ts +154 -26
- package/src/web-components/interaction/form/bds-switch.spec.ts +68 -0
- package/src/web-components/interaction/form/bds-switch.ts +87 -20
- package/src/web-components/interaction/form/bds-textarea.spec.ts +71 -0
- package/src/web-components/interaction/form/bds-textarea.ts +108 -7
- package/src/web-components/layout/BdsGrid.mdx +6 -2
- package/src/web-components/layout/BdsGrid.stories.tsx +4 -0
- package/src/web-components/layout/bds-grid-item.spec.ts +21 -0
- package/src/web-components/layout/bds-grid-item.ts +17 -3
- package/src/web-components/layout/bds-grid.spec.ts +98 -0
- package/src/web-components/layout/bds-grid.ts +139 -19
- package/src/web-components/ui/BdsAlert.mdx +6 -5
- package/src/web-components/ui/BdsAlert.stories.tsx +6 -6
- package/src/web-components/ui/BdsAvatar.mdx +4 -2
- package/src/web-components/ui/BdsBreadcrumb.mdx +3 -2
- package/src/web-components/ui/BdsButtonContainer.mdx +64 -0
- package/src/web-components/ui/BdsButtonContainer.stories.tsx +84 -0
- package/src/web-components/ui/BdsCalendar.mdx +29 -4
- package/src/web-components/ui/BdsCalendar.stories.tsx +16 -18
- package/src/web-components/ui/BdsCalendarRange.mdx +71 -0
- package/src/web-components/ui/BdsCalendarRange.stories.tsx +31 -0
- package/src/web-components/ui/BdsCard.mdx +7 -3
- package/src/web-components/ui/BdsCard.stories.tsx +17 -1
- package/src/web-components/ui/BdsCarousel.mdx +40 -12
- package/src/web-components/ui/BdsDescriptionList.mdx +6 -1
- package/src/web-components/ui/BdsIconWrapper.mdx +3 -2
- package/src/web-components/ui/BdsLink.mdx +14 -2
- package/src/web-components/ui/BdsNotificationBanner.mdx +18 -0
- package/src/web-components/ui/BdsPagination.mdx +40 -1
- package/src/web-components/ui/BdsProgress.mdx +8 -2
- package/src/web-components/ui/BdsProgressCircle.mdx +5 -2
- package/src/web-components/ui/BdsRating.mdx +7 -0
- package/src/web-components/ui/BdsSectionHeader.mdx +22 -3
- package/src/web-components/ui/BdsSectionHeader.stories.tsx +15 -13
- package/src/web-components/ui/BdsTable.mdx +23 -2
- package/src/web-components/ui/BdsTable.stories.tsx +8 -2
- package/src/web-components/ui/BdsTypography.mdx +17 -1
- package/src/web-components/ui/bds-alert.spec.ts +17 -2
- package/src/web-components/ui/bds-alert.ts +31 -5
- package/src/web-components/ui/bds-avatar.spec.ts +29 -0
- package/src/web-components/ui/bds-avatar.ts +29 -11
- package/src/web-components/ui/bds-badge.spec.ts +5 -0
- package/src/web-components/ui/bds-badge.ts +11 -1
- package/src/web-components/ui/bds-breadcrumb.spec.ts +30 -0
- package/src/web-components/ui/bds-breadcrumb.ts +26 -4
- package/src/web-components/ui/bds-button-container.spec.ts +39 -0
- package/src/web-components/ui/bds-button-container.ts +123 -0
- package/src/web-components/ui/bds-button-group.spec.ts +14 -20
- package/src/web-components/ui/bds-button-group.ts +13 -64
- package/src/web-components/ui/bds-calendar-range.spec.ts +123 -0
- package/src/web-components/ui/bds-calendar-range.ts +307 -0
- package/src/web-components/ui/bds-calendar.spec.ts +176 -0
- package/src/web-components/ui/bds-calendar.ts +186 -344
- package/src/web-components/ui/bds-card.spec.ts +32 -0
- package/src/web-components/ui/bds-card.ts +34 -9
- package/src/web-components/ui/bds-carousel.spec.ts +147 -0
- package/src/web-components/ui/bds-carousel.ts +109 -32
- package/src/web-components/ui/bds-description-list.spec.ts +15 -0
- package/src/web-components/ui/bds-description-list.ts +37 -3
- package/src/web-components/ui/bds-icon-wrapper.spec.ts +12 -0
- package/src/web-components/ui/bds-icon-wrapper.ts +15 -14
- package/src/web-components/ui/bds-link.spec.ts +17 -0
- package/src/web-components/ui/bds-link.ts +26 -11
- package/src/web-components/ui/bds-loading.ts +10 -0
- package/src/web-components/ui/bds-notification-banner.spec.ts +13 -0
- package/src/web-components/ui/bds-notification-banner.ts +18 -1
- package/src/web-components/ui/bds-pagination.spec.ts +44 -0
- package/src/web-components/ui/bds-pagination.ts +39 -19
- package/src/web-components/ui/bds-progress-circle.spec.ts +21 -0
- package/src/web-components/ui/bds-progress-circle.ts +17 -5
- package/src/web-components/ui/bds-progress.spec.ts +21 -0
- package/src/web-components/ui/bds-progress.ts +17 -4
- package/src/web-components/ui/bds-rating.spec.ts +6 -0
- package/src/web-components/ui/bds-rating.ts +12 -2
- package/src/web-components/ui/bds-section-header.spec.ts +39 -8
- package/src/web-components/ui/bds-section-header.ts +47 -13
- package/src/web-components/ui/bds-separator.ts +10 -0
- package/src/web-components/ui/bds-skeleton.ts +10 -0
- package/src/web-components/ui/bds-table.spec.ts +63 -0
- package/src/web-components/ui/bds-table.ts +88 -28
- package/src/web-components/ui/bds-typography.spec.ts +47 -0
- package/src/web-components/ui/bds-typography.ts +28 -10
- package/src/web-components/ui/calendar-styles.ts +94 -0
- package/dist/web-components/chunk-7YURXHTS.js +0 -147
- package/dist/web-components/chunk-A3RLT3AS.js +0 -49
- package/dist/web-components/chunk-AGKJTMJI.js +0 -56
- package/dist/web-components/chunk-BQLZ7I4G.js +0 -56
- package/dist/web-components/chunk-DZOEPVFT.js +0 -107
- package/dist/web-components/chunk-JYYRJS2D.js +0 -118
- package/dist/web-components/chunk-Y4MAXTMA.js +0 -80
- package/dist/web-components/chunk-Y7V7LM6R.js +0 -98
- package/src/web-components/ui/BdsButtonGroup.mdx +0 -69
- package/src/web-components/ui/BdsButtonGroup.stories.tsx +0 -66
|
@@ -45,8 +45,8 @@ Use `<bds-radio-group>` whenever you have a set of mutually exclusive options. T
|
|
|
45
45
|
| `name` | string | `""` | Shared name propagated to all slotted `<bds-radio>` elements |
|
|
46
46
|
| `error` | string | — | Error message shown below items; takes priority over `hint` |
|
|
47
47
|
| `hint` | string | — | Helper text shown below items |
|
|
48
|
-
| `required` | boolean | `false` | Shows a required indicator on the legend
|
|
49
|
-
| `disabled` | boolean | `false` | Disables the
|
|
48
|
+
| `required` | boolean | `false` | Shows a required indicator on the legend and sets `aria-required` on the fieldset |
|
|
49
|
+
| `disabled` | boolean | `false` | Disables the fieldset **and** propagates `disabled` to every slotted `<bds-radio>` |
|
|
50
50
|
|
|
51
51
|
## Slots
|
|
52
52
|
|
|
@@ -54,6 +54,10 @@ Use `<bds-radio-group>` whenever you have a set of mutually exclusive options. T
|
|
|
54
54
|
|-------------|---------------------------|
|
|
55
55
|
| `(default)` | `<bds-radio>` elements |
|
|
56
56
|
|
|
57
|
+
## Overridable CSS custom properties
|
|
58
|
+
|
|
59
|
+
The legend uses `var(--bds-font_weight--medium)` (matching the React `RadioGroup`). `bds-radio-group` has no component-local override tokens of its own — style slotted `<bds-radio>` elements directly via their own tokens.
|
|
60
|
+
|
|
57
61
|
## Usage in plain HTML
|
|
58
62
|
|
|
59
63
|
```html
|
|
@@ -68,6 +72,7 @@ Use `<bds-radio-group>` whenever you have a set of mutually exclusive options. T
|
|
|
68
72
|
|
|
69
73
|
- Renders a `<fieldset>` with a `<legend>`, which is announced as a group by screen readers
|
|
70
74
|
- The `name` attribute is automatically propagated to all slotted `<bds-radio>` elements
|
|
71
|
-
- `required` adds a visual asterisk to the legend
|
|
72
|
-
- `disabled` on the group disables
|
|
75
|
+
- `required` adds a visual asterisk to the legend and sets `aria-required="true"` on the fieldset
|
|
76
|
+
- `disabled` on the group disables the native `<fieldset>` **and** is explicitly propagated (attribute set/removed) to every slotted `<bds-radio>` — a shadow-DOM `<fieldset disabled>` alone has no effect on slotted light-DOM content, so this propagation is required for the group's `disabled` state to actually disable its radios. A `<bds-radio>` that was already individually marked `disabled` in markup stays disabled if the group is later re-enabled.
|
|
77
|
+
- `aria-describedby` on the fieldset references the error/hint message id so assistive technology announces it alongside the group
|
|
73
78
|
- Error messages use `role="alert"` so they are announced immediately
|
|
@@ -52,9 +52,10 @@ Use `<bds-segmented-control>` for mutually exclusive view or mode toggles where
|
|
|
52
52
|
|
|
53
53
|
## Events
|
|
54
54
|
|
|
55
|
-
| Event
|
|
56
|
-
|
|
57
|
-
| `change` |
|
|
55
|
+
| Event | Detail | Description |
|
|
56
|
+
|--------------|-----------------|-----------------------------------------------------------------------|
|
|
57
|
+
| `bds-change` | `{ value }` | Fired when a new segment is selected (radio mode only) |
|
|
58
|
+
| `change` | — | **Deprecated** alias for `bds-change`, kept for backward compatibility |
|
|
58
59
|
|
|
59
60
|
## Usage in plain HTML
|
|
60
61
|
|
|
@@ -76,19 +77,44 @@ Use `<bds-segmented-control>` for mutually exclusive view or mode toggles where
|
|
|
76
77
|
|
|
77
78
|
## CSS Custom Properties
|
|
78
79
|
|
|
80
|
+
Token names match the React `SegmentedControl` component (`--control_*`) so themes
|
|
81
|
+
written against React apply here unchanged. The previous web-component-only
|
|
82
|
+
`--segmented_*` names still work as deprecated aliases.
|
|
83
|
+
|
|
79
84
|
| Property | Default | Description |
|
|
80
85
|
|----------|---------|-------------|
|
|
81
|
-
| `--
|
|
82
|
-
| `--
|
|
83
|
-
| `--
|
|
84
|
-
| `--
|
|
85
|
-
| `--
|
|
86
|
-
| `--
|
|
86
|
+
| `--control_track-pad` | `var(--bds-space_xxs)` | Padding between the track edge and the items/thumb |
|
|
87
|
+
| `--control_track-bg` | `var(--bds-color_bg--subtle)` | Track background colour (both variants) |
|
|
88
|
+
| `--control_radius` | `var(--bds-border_radius--full)` | Track (outer) border radius — pill by default |
|
|
89
|
+
| `--control_thumb-radius` | `var(--bds-border_radius--full)` | Thumb, indicator, and item border radius |
|
|
90
|
+
| `--control_thumb-bg` | `var(--bds-color_interactive)` | Filled thumb colour (filled variant) |
|
|
91
|
+
| `--control_thumb-shadow` | `var(--bds-shadow_s)` | Filled thumb box-shadow (filled variant) |
|
|
92
|
+
| `--control_indicator-width` | `2px` | Inset border width of the sliding indicator (outline variant) |
|
|
93
|
+
| `--control_indicator-color` | `var(--bds-color_interactive)` | Inset border colour of the sliding indicator (outline variant) |
|
|
94
|
+
| `--control_item-bg` | `transparent` | Inactive item background (outline variant) |
|
|
95
|
+
| `--control_item-bg--active` | `var(--bds-color_bg)` | Active item background (outline variant) |
|
|
96
|
+
| `--control_label-color` | `var(--bds-color_on-bg)` | Item text colour |
|
|
97
|
+
| `--control_label-color--active` | `var(--bds-color_on-interactive)` (filled) / `var(--bds-color_interactive)` (outline) | Active item text colour |
|
|
98
|
+
| `--control_label-color--hover` | `var(--bds-color_on-bg)` | Inactive, non-disabled item text colour on hover (fine pointers only) |
|
|
99
|
+
|
|
100
|
+
<details>
|
|
101
|
+
<summary>Deprecated aliases</summary>
|
|
102
|
+
|
|
103
|
+
| Old property | Maps to |
|
|
104
|
+
|--------------|---------|
|
|
105
|
+
| `--segmented_color_bg` | `--control_track-bg` |
|
|
106
|
+
| `--segmented_item-bg` | `--control_item-bg` |
|
|
107
|
+
| `--segmented_item-bg--active` | `--control_item-bg--active` |
|
|
108
|
+
| `--segmented_thumb-color` | `--control_thumb-bg` |
|
|
109
|
+
| `--segmented_color` | `--control_label-color` |
|
|
110
|
+
| `--segmented_color--active` | `--control_label-color--active` |
|
|
111
|
+
|
|
112
|
+
</details>
|
|
87
113
|
|
|
88
114
|
## Accessibility
|
|
89
115
|
|
|
90
|
-
- In radio mode, each option renders as a visually hidden `<input type="radio">` inside a `<label>`, so keyboard users can navigate with arrow keys
|
|
91
|
-
- In link mode, options render as `<a>` elements with `aria-current="page"` on the active item
|
|
116
|
+
- In radio mode, each option renders as a visually hidden `<input type="radio">` inside a `<label>`, so keyboard users can navigate with arrow keys; the visible `<label>` shows a focus ring when its radio has keyboard (`:focus-visible`) focus
|
|
117
|
+
- In link mode, options render as `<a>` elements with `aria-current="page"` on the active item and get the focus ring directly
|
|
92
118
|
- Disabled options have `aria-disabled="true"` and remove the `href` from link mode items
|
|
93
119
|
- `disabled` on the host element disables all options
|
|
94
120
|
- The sliding thumb and indicator use `aria-hidden="true"` so they are not announced by screen readers
|
|
@@ -27,6 +27,15 @@ Use `<bds-select>` for pick-from-list dropdowns where users cannot type to searc
|
|
|
27
27
|
### With placeholder
|
|
28
28
|
<Canvas of={Stories.WithPlaceholder} />
|
|
29
29
|
|
|
30
|
+
### With label
|
|
31
|
+
<Canvas of={Stories.WithLabel} />
|
|
32
|
+
|
|
33
|
+
### With hint
|
|
34
|
+
<Canvas of={Stories.WithHint} />
|
|
35
|
+
|
|
36
|
+
### With error
|
|
37
|
+
<Canvas of={Stories.WithError} />
|
|
38
|
+
|
|
30
39
|
### Required
|
|
31
40
|
<Canvas of={Stories.Required} />
|
|
32
41
|
|
|
@@ -48,20 +57,26 @@ Use `<bds-select>` for pick-from-list dropdowns where users cannot type to searc
|
|
|
48
57
|
| `value` | string | `""` | Currently selected value |
|
|
49
58
|
| `options` | string | `"[]"` | JSON array of `{ value, label, disabled? }` option objects |
|
|
50
59
|
| `placeholder` | string | `""` | Placeholder option label (disabled, empty value) |
|
|
60
|
+
| `label` | string | `""` | Visible label text (rendered as a shadow `<label for>`) |
|
|
61
|
+
| `hint` | string | — | Helper text shown below the select |
|
|
62
|
+
| `error` | string | — | Error message; when set the select enters error state |
|
|
51
63
|
| `required` | boolean | `false` | Marks the field as required |
|
|
52
64
|
| `disabled` | boolean | `false` | Disables the select |
|
|
53
65
|
|
|
66
|
+
When `label` is omitted, set `aria-label` on the host element (`<bds-select aria-label="Country">`) and it is forwarded to the inner `<select>` so the control still has an accessible name.
|
|
67
|
+
|
|
54
68
|
## Events
|
|
55
69
|
|
|
56
|
-
| Event
|
|
57
|
-
|
|
58
|
-
| `change` |
|
|
70
|
+
| Event | Detail | Description |
|
|
71
|
+
|--------------|----------------------|-----------------------------------------|
|
|
72
|
+
| `bds-change` | `{ value: string }` | Fired when the selected value changes |
|
|
59
73
|
|
|
60
74
|
## Usage in plain HTML
|
|
61
75
|
|
|
62
76
|
```html
|
|
63
77
|
<bds-select
|
|
64
78
|
name="country"
|
|
79
|
+
label="Country"
|
|
65
80
|
placeholder="Choose a country…"
|
|
66
81
|
options='[{"value":"nl","label":"Netherlands"},{"value":"be","label":"Belgium"}]'
|
|
67
82
|
></bds-select>
|
|
@@ -70,7 +85,10 @@ Use `<bds-select>` for pick-from-list dropdowns where users cannot type to searc
|
|
|
70
85
|
## Accessibility
|
|
71
86
|
|
|
72
87
|
- Wraps a native `<select>` which has full browser and assistive technology support
|
|
88
|
+
- `label` renders a shadow `<label for>` associated with the inner `<select>` via matching `id`/`for`; if omitted, a host `aria-label` is forwarded to the select instead
|
|
89
|
+
- `error` sets `aria-invalid="true"` and links the error message via `aria-describedby`; the message uses `role="alert"` so it is announced immediately
|
|
90
|
+
- `hint` is linked via `aria-describedby` for screen reader announcement
|
|
73
91
|
- The custom chevron icon is `aria-hidden="true"` to avoid duplicate announcements
|
|
74
|
-
- `required` uses the native `<select required>` attribute for browser validation
|
|
92
|
+
- `required` uses the native `<select required>` attribute for browser validation and sets `aria-required="true"`
|
|
75
93
|
- `disabled` uses the native `<select disabled>` attribute
|
|
76
94
|
- Participates in HTML forms via the Form-Associated Custom Elements API
|
|
@@ -22,6 +22,9 @@ function BdsSelect({
|
|
|
22
22
|
value,
|
|
23
23
|
options,
|
|
24
24
|
placeholder,
|
|
25
|
+
label,
|
|
26
|
+
hint,
|
|
27
|
+
error,
|
|
25
28
|
required,
|
|
26
29
|
disabled,
|
|
27
30
|
}: {
|
|
@@ -29,6 +32,9 @@ function BdsSelect({
|
|
|
29
32
|
value?: string;
|
|
30
33
|
options?: string;
|
|
31
34
|
placeholder?: string;
|
|
35
|
+
label?: string;
|
|
36
|
+
hint?: string;
|
|
37
|
+
error?: string;
|
|
32
38
|
required?: boolean;
|
|
33
39
|
disabled?: boolean;
|
|
34
40
|
}) {
|
|
@@ -37,6 +43,9 @@ function BdsSelect({
|
|
|
37
43
|
value,
|
|
38
44
|
options,
|
|
39
45
|
placeholder,
|
|
46
|
+
label,
|
|
47
|
+
hint,
|
|
48
|
+
error,
|
|
40
49
|
required: required || undefined,
|
|
41
50
|
disabled: disabled || undefined,
|
|
42
51
|
});
|
|
@@ -71,6 +80,30 @@ export const WithPlaceholder: Story = {
|
|
|
71
80
|
args: { name: 'country', options: COUNTRIES, placeholder: 'Choose a country…' },
|
|
72
81
|
};
|
|
73
82
|
|
|
83
|
+
export const WithLabel: Story = {
|
|
84
|
+
args: { name: 'country', options: COUNTRIES, label: 'Country', placeholder: 'Choose a country…' },
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
export const WithHint: Story = {
|
|
88
|
+
args: {
|
|
89
|
+
name: 'country',
|
|
90
|
+
options: COUNTRIES,
|
|
91
|
+
label: 'Country',
|
|
92
|
+
placeholder: 'Choose a country…',
|
|
93
|
+
hint: 'Used to calculate shipping costs',
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export const WithError: Story = {
|
|
98
|
+
args: {
|
|
99
|
+
name: 'country',
|
|
100
|
+
options: COUNTRIES,
|
|
101
|
+
label: 'Country',
|
|
102
|
+
placeholder: 'Choose a country…',
|
|
103
|
+
error: 'Please select a country',
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
|
|
74
107
|
export const Required: Story = {
|
|
75
108
|
args: { name: 'country', options: COUNTRIES, placeholder: 'Choose a country…', required: true },
|
|
76
109
|
};
|
|
@@ -5,7 +5,7 @@ import * as Stories from './BdsSlider.stories';
|
|
|
5
5
|
|
|
6
6
|
# <bds-slider>
|
|
7
7
|
|
|
8
|
-
Form-associated range slider. Wraps a native `<input type="range">` with a styled fill track driven by the `--slider_fill` CSS custom property.
|
|
8
|
+
Form-associated range slider. Wraps a native `<input type="range">` with a styled fill track driven by the `--slider_fill` CSS custom property, plus label/hint/error wiring matching the other form web components.
|
|
9
9
|
|
|
10
10
|
> **Status: experimental** — API may change before stable release.
|
|
11
11
|
|
|
@@ -30,6 +30,12 @@ Use `<bds-slider>` for continuous or stepped numeric ranges — volume controls,
|
|
|
30
30
|
### With custom min/max (1–5)
|
|
31
31
|
<Canvas of={Stories.WithMinMax} />
|
|
32
32
|
|
|
33
|
+
### With label and value
|
|
34
|
+
<Canvas of={Stories.WithLabel} />
|
|
35
|
+
|
|
36
|
+
### Error state
|
|
37
|
+
<Canvas of={Stories.WithError} />
|
|
38
|
+
|
|
33
39
|
### Disabled
|
|
34
40
|
<Canvas of={Stories.Disabled} />
|
|
35
41
|
|
|
@@ -39,39 +45,50 @@ Use `<bds-slider>` for continuous or stepped numeric ranges — volume controls,
|
|
|
39
45
|
|
|
40
46
|
## Attributes
|
|
41
47
|
|
|
42
|
-
| Attribute
|
|
43
|
-
|
|
44
|
-
| `name`
|
|
45
|
-
| `value`
|
|
46
|
-
| `min`
|
|
47
|
-
| `max`
|
|
48
|
-
| `step`
|
|
49
|
-
| `
|
|
48
|
+
| Attribute | Type | Default | Description |
|
|
49
|
+
|--------------|---------|---------|-------------------------------------------------------|
|
|
50
|
+
| `name` | string | `""` | Form field name |
|
|
51
|
+
| `value` | number | `0` | Current value |
|
|
52
|
+
| `min` | number | `0` | Minimum value |
|
|
53
|
+
| `max` | number | `100` | Maximum value |
|
|
54
|
+
| `step` | number | `1` | Step increment |
|
|
55
|
+
| `label` | string | `""` | Visible label text, associated with the input via `for`/`id` |
|
|
56
|
+
| `hint` | string | — | Helper text shown below the slider |
|
|
57
|
+
| `error` | string | — | Error message; when set the slider enters error state and the input gets `aria-invalid="true"` |
|
|
58
|
+
| `show-value` | boolean | `false` | Shows the current value next to the label |
|
|
59
|
+
| `disabled` | boolean | `false` | Disables the slider |
|
|
50
60
|
|
|
51
61
|
## Events
|
|
52
62
|
|
|
53
|
-
| Event
|
|
54
|
-
|
|
55
|
-
| `input`
|
|
56
|
-
| `change` |
|
|
63
|
+
| Event | Detail | Description |
|
|
64
|
+
|--------------|-------------------|-----------------------------------------------------------------------------------------------------------|
|
|
65
|
+
| `input` | — | Native event, fired continuously as the user drags |
|
|
66
|
+
| `bds-change` | `{ value: number }` | Fired when the user releases. Re-dispatched from the host as a composed event so it reliably crosses the shadow boundary — the native `change` event does not. |
|
|
57
67
|
|
|
58
68
|
## CSS Custom Properties
|
|
59
69
|
|
|
60
|
-
| Property
|
|
61
|
-
|
|
62
|
-
| `--
|
|
63
|
-
| `--
|
|
64
|
-
| `--
|
|
70
|
+
| Property | Description | Default |
|
|
71
|
+
|---------------------------|-------------------------------------------------------|-----------------------------------|
|
|
72
|
+
| `--slider_color` | Track `color` (used as a fallback text/context colour) | `--bds-color_on-bg` |
|
|
73
|
+
| `--slider_color-active` | Fill track + thumb colour | `--bdc-color_active` |
|
|
74
|
+
| `--slider_color--error` | Fill track + thumb colour when `error` is set | `--bds-color_error` |
|
|
75
|
+
| `--slider_track-bg` | Unfilled track colour | `--bds-color_bg--subtle` |
|
|
76
|
+
| `--slider_track-height` | Track thickness | `--bds-space_xxs` |
|
|
77
|
+
| `--slider_track-radius` | Track corner radius | `--bds-border_radius--full` |
|
|
78
|
+
| `--slider_thumb-size` | Thumb diameter | `calc(--bds-space_s * 2)` |
|
|
79
|
+
| `--slider_thumb-radius` | Thumb corner radius | `--bds-border_radius--circle` |
|
|
65
80
|
|
|
66
81
|
## Usage in plain HTML
|
|
67
82
|
|
|
68
83
|
```html
|
|
69
|
-
<bds-slider name="volume" value="50" min="0" max="100" step="5"></bds-slider>
|
|
84
|
+
<bds-slider name="volume" label="Volume" value="50" min="0" max="100" step="5" show-value></bds-slider>
|
|
70
85
|
```
|
|
71
86
|
|
|
72
87
|
## Accessibility
|
|
73
88
|
|
|
74
89
|
- Wraps a native `<input type="range">` which has full browser and assistive technology support
|
|
90
|
+
- `label` renders a shadow `<label for>` bound to the input — set it so the slider has an accessible name
|
|
91
|
+
- `hint`/`error` text is wired to the input via `aria-describedby`; `error` also sets `aria-invalid="true"`
|
|
75
92
|
- Arrow keys adjust the value by `step`
|
|
76
93
|
- `disabled` prevents interaction and reduces opacity
|
|
77
94
|
- Participates in HTML forms via the Form-Associated Custom Elements API
|
|
@@ -8,6 +8,10 @@ function BdsSlider({
|
|
|
8
8
|
min,
|
|
9
9
|
max,
|
|
10
10
|
step,
|
|
11
|
+
label,
|
|
12
|
+
hint,
|
|
13
|
+
error,
|
|
14
|
+
showValue,
|
|
11
15
|
disabled,
|
|
12
16
|
}: {
|
|
13
17
|
name?: string;
|
|
@@ -15,6 +19,10 @@ function BdsSlider({
|
|
|
15
19
|
min?: number;
|
|
16
20
|
max?: number;
|
|
17
21
|
step?: number;
|
|
22
|
+
label?: string;
|
|
23
|
+
hint?: string;
|
|
24
|
+
error?: string;
|
|
25
|
+
showValue?: boolean;
|
|
18
26
|
disabled?: boolean;
|
|
19
27
|
}) {
|
|
20
28
|
return React.createElement('bds-slider', {
|
|
@@ -23,6 +31,10 @@ function BdsSlider({
|
|
|
23
31
|
min,
|
|
24
32
|
max,
|
|
25
33
|
step,
|
|
34
|
+
label,
|
|
35
|
+
hint,
|
|
36
|
+
error,
|
|
37
|
+
'show-value': showValue || undefined,
|
|
26
38
|
disabled: disabled || undefined,
|
|
27
39
|
});
|
|
28
40
|
}
|
|
@@ -37,6 +49,10 @@ const meta = {
|
|
|
37
49
|
min: { control: 'number' },
|
|
38
50
|
max: { control: 'number' },
|
|
39
51
|
step: { control: 'number' },
|
|
52
|
+
label: { control: 'text' },
|
|
53
|
+
hint: { control: 'text' },
|
|
54
|
+
error: { control: 'text' },
|
|
55
|
+
showValue: { control: 'boolean' },
|
|
40
56
|
disabled: { control: 'boolean' },
|
|
41
57
|
},
|
|
42
58
|
decorators: [
|
|
@@ -63,6 +79,14 @@ export const WithMinMax: Story = {
|
|
|
63
79
|
args: { name: 'rating', value: 3, min: 1, max: 5 },
|
|
64
80
|
};
|
|
65
81
|
|
|
82
|
+
export const WithLabel: Story = {
|
|
83
|
+
args: { name: 'volume', label: 'Volume', value: 50, showValue: true, hint: 'Adjust the playback volume' },
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export const WithError: Story = {
|
|
87
|
+
args: { name: 'volume', label: 'Volume', value: 90, error: 'Value exceeds the recommended maximum' },
|
|
88
|
+
};
|
|
89
|
+
|
|
66
90
|
export const Disabled: Story = {
|
|
67
91
|
args: { name: 'volume', value: 40, disabled: true },
|
|
68
92
|
};
|
|
@@ -30,19 +30,27 @@ Use `<bds-switch>` for binary on/off settings where the change takes immediate e
|
|
|
30
30
|
### Disabled
|
|
31
31
|
<Canvas of={Stories.Disabled} />
|
|
32
32
|
|
|
33
|
+
### Small size
|
|
34
|
+
<Canvas of={Stories.Small} />
|
|
35
|
+
|
|
36
|
+
### With error
|
|
37
|
+
<Canvas of={Stories.WithError} />
|
|
38
|
+
|
|
33
39
|
## Props
|
|
34
40
|
|
|
35
41
|
<ArgTypes of={Stories} />
|
|
36
42
|
|
|
37
43
|
## Attributes
|
|
38
44
|
|
|
39
|
-
| Attribute | Type | Default
|
|
40
|
-
|
|
41
|
-
| `name` | string | `""`
|
|
42
|
-
| `value` | string | `"on"`
|
|
43
|
-
| `checked` | boolean | `false`
|
|
44
|
-
| `required` | boolean | `false`
|
|
45
|
-
| `disabled` | boolean | `false`
|
|
45
|
+
| Attribute | Type | Default | Description |
|
|
46
|
+
|------------|---------|------------|--------------------------------------------------------------|
|
|
47
|
+
| `name` | string | `""` | Form field name |
|
|
48
|
+
| `value` | string | `"on"` | Value submitted when the switch is on |
|
|
49
|
+
| `checked` | boolean | `false` | Whether the switch is on |
|
|
50
|
+
| `required` | boolean | `false` | Marks the field as required |
|
|
51
|
+
| `disabled` | boolean | `false` | Disables the switch |
|
|
52
|
+
| `error` | string | — | Error message; when set the track shows the error colour and the input reports `aria-invalid="true"` |
|
|
53
|
+
| `size` | string | `"medium"` | Track/thumb size: `small`, `medium`, `large` |
|
|
46
54
|
|
|
47
55
|
## Slots
|
|
48
56
|
|
|
@@ -52,21 +60,40 @@ Use `<bds-switch>` for binary on/off settings where the change takes immediate e
|
|
|
52
60
|
|
|
53
61
|
## Events
|
|
54
62
|
|
|
55
|
-
| Event
|
|
56
|
-
|
|
57
|
-
| `change` |
|
|
63
|
+
| Event | Detail | Description |
|
|
64
|
+
|--------------|------------------------|----------------------------------------------------------------------------------------------------------------|
|
|
65
|
+
| `bds-change` | `{ checked: boolean }` | Composed event fired when the switch is toggled; crosses the shadow boundary so it can be listened for on the host element |
|
|
58
66
|
|
|
59
67
|
## Usage in plain HTML
|
|
60
68
|
|
|
61
69
|
```html
|
|
62
70
|
<bds-switch name="notifications" value="enabled">Enable notifications</bds-switch>
|
|
63
71
|
<bds-switch name="darkMode" value="on" checked>Dark mode</bds-switch>
|
|
72
|
+
<bds-switch name="compact" size="small">Compact mode</bds-switch>
|
|
73
|
+
<bds-switch name="terms" required error="You must accept the terms">Accept terms</bds-switch>
|
|
64
74
|
```
|
|
65
75
|
|
|
76
|
+
## CSS custom properties
|
|
77
|
+
|
|
78
|
+
| Property | Default | Description |
|
|
79
|
+
|----------------------------------|-------------------------------------------|---------------------------------------------|
|
|
80
|
+
| `--switch_color` | `var(--bds-color_on-bg)` | Label text colour |
|
|
81
|
+
| `--switch_thumb-size` | `1.25em` (`1em` small / `1.5em` large) | Thumb diameter — also drives track sizing |
|
|
82
|
+
| `--switch_track-pad` | `var(--bds-space_xxxs)` | Padding between track edge and thumb |
|
|
83
|
+
| `--switch_track-radius` | `var(--bds-border_radius--full)` | Track corner radius |
|
|
84
|
+
| `--switch_track-bg` | `var(--bds-color_grey--subtle)` | Track background when off |
|
|
85
|
+
| `--switch_track-bg--active` | `var(--bdc-color_active--subtle)` | Track background when on |
|
|
86
|
+
| `--switch_thumb-bg` | `var(--bds-color_interactive)` | Thumb (and track border) colour when off |
|
|
87
|
+
| `--switch_thumb-bg--active` | `var(--bds-color_interactive)` | Thumb colour when on |
|
|
88
|
+
| `--switch_thumb-radius` | `var(--bds-border_radius--circle)` | Thumb corner radius |
|
|
89
|
+
| `--switch_border-color--error` | `var(--bds-color_error)` | Track border colour when `error` is set |
|
|
90
|
+
| `--switch_shadow` | `var(--bdc-outline_shadow)` | Track box-shadow tail |
|
|
91
|
+
|
|
66
92
|
## Accessibility
|
|
67
93
|
|
|
68
94
|
- Uses `role="switch"` on the inner `<input type="checkbox">` for correct screen reader announcement
|
|
69
95
|
- The inner `<input>` is associated with a `<label>` via matching `id`/`for` attributes
|
|
70
96
|
- The visual track and thumb are inside the `<label>` — clicking the label or the track both toggle the switch
|
|
71
97
|
- `disabled` sets `pointer-events: none` and reduces opacity
|
|
72
|
-
-
|
|
98
|
+
- `error` sets `aria-invalid="true"` on the inner input
|
|
99
|
+
- Participates in HTML forms via the Form-Associated Custom Elements API; `formResetCallback` restores the switch's initial `checked` state on form reset
|
|
@@ -8,6 +8,8 @@ function BdsSwitch({
|
|
|
8
8
|
checked,
|
|
9
9
|
required,
|
|
10
10
|
disabled,
|
|
11
|
+
error,
|
|
12
|
+
size,
|
|
11
13
|
children,
|
|
12
14
|
}: {
|
|
13
15
|
name?: string;
|
|
@@ -15,6 +17,8 @@ function BdsSwitch({
|
|
|
15
17
|
checked?: boolean;
|
|
16
18
|
required?: boolean;
|
|
17
19
|
disabled?: boolean;
|
|
20
|
+
error?: string;
|
|
21
|
+
size?: 'small' | 'medium' | 'large';
|
|
18
22
|
children?: React.ReactNode;
|
|
19
23
|
}) {
|
|
20
24
|
return React.createElement(
|
|
@@ -25,6 +29,8 @@ function BdsSwitch({
|
|
|
25
29
|
checked: checked || undefined,
|
|
26
30
|
required: required || undefined,
|
|
27
31
|
disabled: disabled || undefined,
|
|
32
|
+
error,
|
|
33
|
+
size,
|
|
28
34
|
},
|
|
29
35
|
children,
|
|
30
36
|
);
|
|
@@ -39,6 +45,8 @@ const meta = {
|
|
|
39
45
|
checked: { control: 'boolean' },
|
|
40
46
|
required: { control: 'boolean' },
|
|
41
47
|
disabled: { control: 'boolean' },
|
|
48
|
+
error: { control: 'text' },
|
|
49
|
+
size: { control: 'select', options: ['small', 'medium', 'large'] },
|
|
42
50
|
},
|
|
43
51
|
} satisfies Meta<typeof BdsSwitch>;
|
|
44
52
|
|
|
@@ -56,3 +64,11 @@ export const Checked: Story = {
|
|
|
56
64
|
export const Disabled: Story = {
|
|
57
65
|
args: { name: 'notifications', value: 'enabled', disabled: true, children: 'Notifications (disabled)' },
|
|
58
66
|
};
|
|
67
|
+
|
|
68
|
+
export const Small: Story = {
|
|
69
|
+
args: { name: 'compact', value: 'enabled', size: 'small', children: 'Compact mode' },
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export const WithError: Story = {
|
|
73
|
+
args: { name: 'terms', value: 'accepted', required: true, error: 'You must accept the terms', children: 'Accept terms' },
|
|
74
|
+
};
|
|
@@ -30,6 +30,15 @@ Use `<bds-textarea>` for multiline text entry — messages, comments, descriptio
|
|
|
30
30
|
### Tall (8 rows)
|
|
31
31
|
<Canvas of={Stories.TallRows} />
|
|
32
32
|
|
|
33
|
+
### With label
|
|
34
|
+
<Canvas of={Stories.WithLabel} />
|
|
35
|
+
|
|
36
|
+
### With hint
|
|
37
|
+
<Canvas of={Stories.WithHint} />
|
|
38
|
+
|
|
39
|
+
### With error
|
|
40
|
+
<Canvas of={Stories.WithError} />
|
|
41
|
+
|
|
33
42
|
### Required
|
|
34
43
|
<Canvas of={Stories.Required} />
|
|
35
44
|
|
|
@@ -42,32 +51,49 @@ Use `<bds-textarea>` for multiline text entry — messages, comments, descriptio
|
|
|
42
51
|
|
|
43
52
|
## Attributes
|
|
44
53
|
|
|
45
|
-
| Attribute | Type | Default | Description
|
|
46
|
-
|
|
47
|
-
| `name` | string | `""` | Form field name
|
|
48
|
-
| `value` | string | `""` | Text value
|
|
49
|
-
| `placeholder` | string | `""` | Placeholder text
|
|
50
|
-
| `rows` | number | `4` | Number of visible rows
|
|
51
|
-
| `
|
|
52
|
-
| `
|
|
54
|
+
| Attribute | Type | Default | Description |
|
|
55
|
+
|---------------|---------|---------|----------------------------------------------------------|
|
|
56
|
+
| `name` | string | `""` | Form field name |
|
|
57
|
+
| `value` | string | `""` | Text value |
|
|
58
|
+
| `placeholder` | string | `""` | Placeholder text |
|
|
59
|
+
| `rows` | number | `4` | Number of visible rows |
|
|
60
|
+
| `label` | string | `""` | Visible label text, associated via `for`/`id` |
|
|
61
|
+
| `hint` | string | — | Helper text shown below the textarea |
|
|
62
|
+
| `error` | string | — | Error message; when set the textarea enters error state |
|
|
63
|
+
| `required` | boolean | `false` | Marks the field as required |
|
|
64
|
+
| `disabled` | boolean | `false` | Disables the textarea |
|
|
53
65
|
|
|
54
66
|
## Events
|
|
55
67
|
|
|
56
|
-
| Event
|
|
57
|
-
|
|
58
|
-
| `input` |
|
|
59
|
-
| `change` |
|
|
68
|
+
| Event | Detail | Description |
|
|
69
|
+
|--------------|------------------------|-------------------------------------|
|
|
70
|
+
| `bds-input` | `{ value: string }` | Fired on every keystroke |
|
|
71
|
+
| `bds-change` | `{ value: string }` | Fired when the value is committed |
|
|
72
|
+
|
|
73
|
+
## CSS Custom Properties
|
|
74
|
+
|
|
75
|
+
| Property | Description |
|
|
76
|
+
|-------------------------|-------------------------------------------------------------------|
|
|
77
|
+
| `--textarea_border` | Native `border` shorthand (defaults to `none`; the frame is drawn by the inset bdc box-shadow) |
|
|
78
|
+
| `--textarea_radius` | Border radius (defaults to `--bdc-outline_radius--l`) |
|
|
79
|
+
| `--textarea_shadow` | Extra `box-shadow` layer appended after the bdc frame shadow |
|
|
80
|
+
| `--textarea_color_bg` | Background colour (defaults to `--bds-color_bg`) |
|
|
81
|
+
| `--textarea_color` | Text colour (defaults to `--bds-color_on-bg`) |
|
|
60
82
|
|
|
61
83
|
## Usage in plain HTML
|
|
62
84
|
|
|
63
85
|
```html
|
|
64
|
-
<bds-textarea name="message" placeholder="Enter message…" rows="6"></bds-textarea>
|
|
65
|
-
<bds-textarea name="bio" required rows="4"></bds-textarea>
|
|
86
|
+
<bds-textarea name="message" label="Message" placeholder="Enter message…" rows="6"></bds-textarea>
|
|
87
|
+
<bds-textarea name="bio" label="Bio" required rows="4"></bds-textarea>
|
|
88
|
+
<bds-textarea name="feedback" label="Feedback" error="Feedback is required"></bds-textarea>
|
|
66
89
|
```
|
|
67
90
|
|
|
68
91
|
## Accessibility
|
|
69
92
|
|
|
70
93
|
- Wraps a native `<textarea>` which has full browser and assistive technology support
|
|
71
|
-
- `
|
|
94
|
+
- `label` renders a `<label for>` associated with the textarea via matching `id`
|
|
95
|
+
- `error` sets `aria-invalid="true"` on the textarea and links the error message via `aria-describedby`; the message uses `role="alert"` so it is announced immediately
|
|
96
|
+
- `hint` is linked to the textarea via `aria-describedby` for screen reader announcement
|
|
97
|
+
- `required` uses the native `required` attribute for browser validation plus `aria-required="true"`
|
|
72
98
|
- `disabled` sets `pointer-events: none`, reduces opacity, and removes the resize handle
|
|
73
|
-
- Participates in HTML forms via the Form-Associated Custom Elements API
|
|
99
|
+
- Participates in HTML forms via the Form-Associated Custom Elements API; `formResetCallback` restores the textarea's initial value
|
|
@@ -7,6 +7,9 @@ function BdsTextarea({
|
|
|
7
7
|
value,
|
|
8
8
|
placeholder,
|
|
9
9
|
rows,
|
|
10
|
+
label,
|
|
11
|
+
hint,
|
|
12
|
+
error,
|
|
10
13
|
required,
|
|
11
14
|
disabled,
|
|
12
15
|
}: {
|
|
@@ -14,6 +17,9 @@ function BdsTextarea({
|
|
|
14
17
|
value?: string;
|
|
15
18
|
placeholder?: string;
|
|
16
19
|
rows?: number;
|
|
20
|
+
label?: string;
|
|
21
|
+
hint?: string;
|
|
22
|
+
error?: string;
|
|
17
23
|
required?: boolean;
|
|
18
24
|
disabled?: boolean;
|
|
19
25
|
}) {
|
|
@@ -22,6 +28,9 @@ function BdsTextarea({
|
|
|
22
28
|
value,
|
|
23
29
|
placeholder,
|
|
24
30
|
rows,
|
|
31
|
+
label,
|
|
32
|
+
hint,
|
|
33
|
+
error,
|
|
25
34
|
required: required || undefined,
|
|
26
35
|
disabled: disabled || undefined,
|
|
27
36
|
});
|
|
@@ -61,6 +70,18 @@ export const TallRows: Story = {
|
|
|
61
70
|
args: { name: 'message', placeholder: 'Enter a longer text…', rows: 8 },
|
|
62
71
|
};
|
|
63
72
|
|
|
73
|
+
export const WithLabel: Story = {
|
|
74
|
+
args: { name: 'message', label: 'Message', placeholder: 'Enter your message…' },
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export const WithHint: Story = {
|
|
78
|
+
args: { name: 'message', label: 'Message', hint: 'Max 500 characters' },
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
export const WithError: Story = {
|
|
82
|
+
args: { name: 'message', label: 'Message', error: 'Message is required' },
|
|
83
|
+
};
|
|
84
|
+
|
|
64
85
|
export const Required: Story = {
|
|
65
86
|
args: { name: 'message', placeholder: 'Required field', required: true },
|
|
66
87
|
};
|