@boostdev/design-system-components 2.7.1 → 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-3AY2YKCM.js +223 -0
- package/dist/web-components/chunk-3WAV6MDN.js +212 -0
- package/dist/web-components/{chunk-CZBIVR4V.js → chunk-47AT5KZD.js} +88 -16
- 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-5R6IFELV.js → chunk-AIBOHNDU.js} +11 -1
- package/dist/web-components/{chunk-ITHLKR7Q.js → chunk-AP4RDUL2.js} +16 -5
- 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-CM3KYZ6Z.js → chunk-JH6LQKLK.js} +78 -6
- 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-57TRNCWQ.js → chunk-WFVKU4GX.js} +22 -11
- 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-F5E3IT7G.js → chunk-XIZWAWMJ.js} +50 -11
- 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 +60 -13
- 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 +102 -17
- 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 +136 -23
- 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 +96 -8
- package/src/web-components/interaction/form/bds-slider.spec.ts +83 -0
- package/src/web-components/interaction/form/bds-slider.ts +181 -33
- package/src/web-components/interaction/form/bds-switch.spec.ts +68 -0
- package/src/web-components/interaction/form/bds-switch.ts +142 -41
- package/src/web-components/interaction/form/bds-textarea.spec.ts +71 -0
- package/src/web-components/interaction/form/bds-textarea.ts +109 -8
- 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 +30 -12
- 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 +113 -36
- 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 +16 -15
- 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 +11 -1
- 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 +19 -6
- 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-5TFWOPLH.js +0 -49
- package/dist/web-components/chunk-7FMR53BW.js +0 -127
- package/dist/web-components/chunk-AGKJTMJI.js +0 -56
- package/dist/web-components/chunk-BQLZ7I4G.js +0 -56
- package/dist/web-components/chunk-IYGF6CD5.js +0 -118
- package/dist/web-components/chunk-QBB6ZX4R.js +0 -107
- package/dist/web-components/chunk-Y3POAKGS.js +0 -133
- 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
|
@@ -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
|
};
|
|
@@ -52,4 +52,103 @@ describe('bds-checkbox-group', () => {
|
|
|
52
52
|
expect(message?.textContent?.trim()).toBe('Select all that apply');
|
|
53
53
|
cleanup(el);
|
|
54
54
|
});
|
|
55
|
+
|
|
56
|
+
it('propagates disabled to slotted bds-checkbox elements', async () => {
|
|
57
|
+
const el = await fixture(
|
|
58
|
+
'<bds-checkbox-group label="Interests" disabled>' +
|
|
59
|
+
'<bds-checkbox value="sports">Sports</bds-checkbox>' +
|
|
60
|
+
'<bds-checkbox value="music">Music</bds-checkbox>' +
|
|
61
|
+
'</bds-checkbox-group>',
|
|
62
|
+
) as BdsCheckboxGroup;
|
|
63
|
+
await Promise.resolve();
|
|
64
|
+
const checkboxes = Array.from(el.querySelectorAll('bds-checkbox'));
|
|
65
|
+
expect(checkboxes.every(checkbox => checkbox.hasAttribute('disabled'))).toBe(true);
|
|
66
|
+
cleanup(el);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it('removes propagated disabled from slotted bds-checkbox elements when re-enabled, keeping individually-disabled ones', async () => {
|
|
70
|
+
const el = await fixture(
|
|
71
|
+
'<bds-checkbox-group label="Interests" disabled>' +
|
|
72
|
+
'<bds-checkbox value="sports">Sports</bds-checkbox>' +
|
|
73
|
+
'<bds-checkbox value="music" disabled>Music</bds-checkbox>' +
|
|
74
|
+
'</bds-checkbox-group>',
|
|
75
|
+
) as BdsCheckboxGroup;
|
|
76
|
+
await Promise.resolve();
|
|
77
|
+
|
|
78
|
+
el.disabled = false;
|
|
79
|
+
await el.updateComplete;
|
|
80
|
+
await Promise.resolve();
|
|
81
|
+
|
|
82
|
+
const [sports, music] = Array.from(el.querySelectorAll('bds-checkbox'));
|
|
83
|
+
expect(sports.hasAttribute('disabled')).toBe(false);
|
|
84
|
+
expect(music.hasAttribute('disabled')).toBe(true);
|
|
85
|
+
cleanup(el);
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
it('propagates disabled to a bds-checkbox slotted in after the group is already disabled', async () => {
|
|
89
|
+
const el = await fixture('<bds-checkbox-group label="Interests" disabled></bds-checkbox-group>') as BdsCheckboxGroup;
|
|
90
|
+
const checkbox = document.createElement('bds-checkbox');
|
|
91
|
+
checkbox.setAttribute('value', 'sports');
|
|
92
|
+
el.appendChild(checkbox);
|
|
93
|
+
// slotchange fires asynchronously; allow a microtask.
|
|
94
|
+
await new Promise(r => requestAnimationFrame(() => r(null)));
|
|
95
|
+
expect(checkbox.hasAttribute('disabled')).toBe(true);
|
|
96
|
+
cleanup(el);
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
it('exposes a visually-hidden "(required)" text alternative instead of aria-required on the fieldset', async () => {
|
|
100
|
+
const el = await fixture('<bds-checkbox-group label="Test" required></bds-checkbox-group>');
|
|
101
|
+
const fieldset = el.shadowRoot!.querySelector('fieldset')!;
|
|
102
|
+
// aria-required is not supported ARIA on role=group (which is what a bare
|
|
103
|
+
// <fieldset> maps to) — assert it is never set.
|
|
104
|
+
expect(fieldset.hasAttribute('aria-required')).toBe(false);
|
|
105
|
+
const requiredLabel = el.shadowRoot!.querySelector('.requiredLabel');
|
|
106
|
+
expect(requiredLabel?.textContent?.trim()).toBe('(required)');
|
|
107
|
+
cleanup(el);
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
it('omits the required text alternative when not required', async () => {
|
|
111
|
+
const el = await fixture('<bds-checkbox-group label="Test"></bds-checkbox-group>');
|
|
112
|
+
expect(el.shadowRoot!.querySelector('.requiredLabel')).toBeNull();
|
|
113
|
+
cleanup(el);
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
it('wires aria-describedby on the fieldset to the error message id', async () => {
|
|
117
|
+
const el = await fixture('<bds-checkbox-group label="Test" error="Select at least one"></bds-checkbox-group>');
|
|
118
|
+
const fieldset = el.shadowRoot!.querySelector('fieldset')!;
|
|
119
|
+
const message = el.shadowRoot!.querySelector('.message--error')!;
|
|
120
|
+
expect(fieldset.getAttribute('aria-describedby')).toBe(message.id);
|
|
121
|
+
cleanup(el);
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
it('wires aria-describedby on the fieldset to the hint message id', async () => {
|
|
125
|
+
const el = await fixture('<bds-checkbox-group label="Test" hint="Select all that apply"></bds-checkbox-group>');
|
|
126
|
+
const fieldset = el.shadowRoot!.querySelector('fieldset')!;
|
|
127
|
+
const message = el.shadowRoot!.querySelector('.message--hint')!;
|
|
128
|
+
expect(fieldset.getAttribute('aria-describedby')).toBe(message.id);
|
|
129
|
+
cleanup(el);
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
it('omits aria-describedby on the fieldset when there is no error or hint', async () => {
|
|
133
|
+
const el = await fixture('<bds-checkbox-group label="Test"></bds-checkbox-group>');
|
|
134
|
+
const fieldset = el.shadowRoot!.querySelector('fieldset')!;
|
|
135
|
+
expect(fieldset.hasAttribute('aria-describedby')).toBe(false);
|
|
136
|
+
cleanup(el);
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
it('uses medium font-weight token for the legend (not semibold)', () => {
|
|
140
|
+
const styles = BdsCheckboxGroup.styles.toString();
|
|
141
|
+
expect(styles).toContain('--bds-font_weight--medium');
|
|
142
|
+
expect(styles).not.toContain('--bds-font_weight--semibold');
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
it('uses the on-bg error color token for the error message (not the raw error token)', () => {
|
|
146
|
+
const styles = BdsCheckboxGroup.styles.toString();
|
|
147
|
+
expect(styles).toContain('--bds-color_error_on-bg');
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
it('applies :host([disabled]) visual styling for the group', () => {
|
|
151
|
+
const styles = BdsCheckboxGroup.styles.toString();
|
|
152
|
+
expect(styles).toContain(':host([disabled])');
|
|
153
|
+
});
|
|
55
154
|
});
|