@boostdev/design-system-components 1.2.5 → 1.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/AGENTS.md +25 -6
  2. package/dist/client.cjs +60 -54
  3. package/dist/client.css +553 -540
  4. package/dist/client.d.cts +7 -5
  5. package/dist/client.d.ts +7 -5
  6. package/dist/client.js +60 -54
  7. package/dist/index.cjs +60 -54
  8. package/dist/index.css +553 -540
  9. package/dist/index.d.cts +7 -5
  10. package/dist/index.d.ts +7 -5
  11. package/dist/index.js +60 -54
  12. package/package.json +1 -1
  13. package/src/components/interaction/Button/Button.mdx +11 -3
  14. package/src/components/interaction/Button/Button.module.css +5 -5
  15. package/src/components/interaction/Command/Command.mdx +1 -0
  16. package/src/components/interaction/Command/Command.module.css +1 -1
  17. package/src/components/interaction/Drawer/Drawer.mdx +2 -0
  18. package/src/components/interaction/Drawer/Drawer.module.css +1 -1
  19. package/src/components/interaction/DropdownMenu/DropdownMenu.mdx +19 -0
  20. package/src/components/interaction/DropdownMenu/DropdownMenu.module.css +2 -2
  21. package/src/components/interaction/Rating/Rating.mdx +14 -0
  22. package/src/components/interaction/Rating/Rating.module.css +2 -2
  23. package/src/components/interaction/Toast/Toast.mdx +12 -4
  24. package/src/components/interaction/Toast/Toast.spec.tsx +11 -0
  25. package/src/components/interaction/Toast/Toast.tsx +11 -4
  26. package/src/components/interaction/form/Combobox/Combobox.mdx +2 -0
  27. package/src/components/interaction/form/Combobox/Combobox.module.css +3 -3
  28. package/src/components/interaction/form/FileInput/FileInput.mdx +2 -0
  29. package/src/components/interaction/form/FileInput/FileInput.module.css +2 -2
  30. package/src/components/interaction/form/NumberInput/NumberInput.mdx +4 -0
  31. package/src/components/interaction/form/NumberInput/NumberInput.module.css +3 -3
  32. package/src/components/interaction/form/SegmentedControl/SegmentedControl.mdx +1 -0
  33. package/src/components/interaction/form/SegmentedControl/SegmentedControl.module.css +1 -1
  34. package/src/components/interaction/form/Slider/Slider.mdx +4 -0
  35. package/src/components/interaction/form/Slider/Slider.module.css +8 -8
  36. package/src/components/interaction/form/Switch/Switch.mdx +3 -0
  37. package/src/components/interaction/form/Switch/Switch.module.css +1 -1
  38. package/src/components/interaction/form/Textarea/Textarea.mdx +1 -1
  39. package/src/components/interaction/form/Textarea/Textarea.module.css +1 -1
  40. package/src/components/layout/ButtonGroup/ButtonGroup.mdx +2 -0
  41. package/src/components/layout/Card/Card.mdx +17 -6
  42. package/src/components/layout/Card/Card.module.css +12 -8
  43. package/src/components/layout/Card/Card.spec.tsx +30 -0
  44. package/src/components/layout/Card/Card.stories.tsx +3 -1
  45. package/src/components/layout/Card/Card.tsx +12 -8
  46. package/src/components/layout/SectionHeader/SectionHeader.mdx +10 -2
  47. package/src/components/layout/SectionHeader/SectionHeader.module.css +29 -17
  48. package/src/components/layout/SectionHeader/SectionHeader.spec.tsx +5 -0
  49. package/src/components/layout/SectionHeader/SectionHeader.stories.tsx +2 -1
  50. package/src/components/layout/SectionHeader/SectionHeader.tsx +1 -1
  51. package/src/components/ui/Accordion/Accordion.mdx +1 -0
  52. package/src/components/ui/Accordion/Accordion.module.css +1 -1
  53. package/src/components/ui/Alert/Alert.mdx +6 -3
  54. package/src/components/ui/Alert/Alert.module.css +1 -1
  55. package/src/components/ui/Calendar/Calendar.mdx +5 -0
  56. package/src/components/ui/Calendar/Calendar.module.css +5 -5
  57. package/src/components/ui/Carousel/Carousel.mdx +14 -0
  58. package/src/components/ui/Carousel/Carousel.module.css +1 -1
  59. package/src/components/ui/NotificationBanner/NotificationBanner.mdx +18 -0
  60. package/src/components/ui/NotificationBanner/NotificationBanner.module.css +1 -1
  61. package/src/components/ui/Pagination/Pagination.mdx +21 -0
  62. package/src/components/ui/Pagination/Pagination.module.css +5 -5
  63. package/src/components/ui/Table/Table.mdx +2 -0
  64. package/src/components/ui/Table/Table.module.css +2 -2
  65. package/src/components/ui/Tabs/Tabs.mdx +17 -0
  66. package/src/components/ui/Tabs/Tabs.module.css +3 -3
  67. package/src/css/bdc.css +1 -0
@@ -6,7 +6,7 @@ const meta = {
6
6
  component: Card,
7
7
  argTypes: {
8
8
  variant: { control: 'select', options: ['default', 'elevated', 'outlined'] },
9
- padding: { control: 'select', options: ['none', 'small', 'medium', 'large'] },
9
+ padding: { control: 'select', options: ['none', 'small', 'medium', 'large', 'extra-large'] },
10
10
  textAlign: { control: 'select', options: ['start', 'center', 'end'] },
11
11
  },
12
12
  } satisfies Meta<typeof Card>;
@@ -18,6 +18,8 @@ export const Default: Story = { args: { children: 'Card content', variant: 'defa
18
18
  export const Elevated: Story = { args: { children: 'Elevated card', variant: 'elevated' } };
19
19
  export const Outlined: Story = { args: { children: 'Outlined card', variant: 'outlined' } };
20
20
  export const Clickable: Story = { args: { children: 'Click me', onClick: () => alert('clicked') } };
21
+ export const AsLink: Story = { args: { children: 'Card as link', as: 'a', href: '#' } as Record<string, unknown> };
22
+ export const AsSection: Story = { args: { children: 'Card as section', as: 'section' } as Record<string, unknown> };
21
23
  export const Centered: Story = { args: { children: 'Centered', textAlign: 'center' } };
22
24
  export const AllVariants: Story = {
23
25
  args: { children: '' },
@@ -1,23 +1,27 @@
1
- import { HTMLAttributes } from 'react';
1
+ import { ElementType, ComponentPropsWithoutRef } from 'react';
2
2
  import css from './Card.module.css';
3
3
  import { cn } from '@boostdev/design-system-foundation';
4
4
  import type { WithClassName } from '../../../types';
5
5
 
6
- interface CardProps extends WithClassName, HTMLAttributes<HTMLElement> {
6
+ type CardOwnProps = WithClassName & {
7
7
  variant?: 'default' | 'elevated' | 'outlined';
8
- padding?: 'none' | 'small' | 'medium' | 'large';
8
+ padding?: 'none' | 'small' | 'medium' | 'large' | 'extra-large';
9
9
  textAlign?: 'start' | 'center' | 'end';
10
- }
10
+ as?: ElementType;
11
+ };
12
+
13
+ type CardProps<C extends ElementType = 'div'> = CardOwnProps & Omit<ComponentPropsWithoutRef<C>, keyof CardOwnProps>;
11
14
 
12
- export function Card({
15
+ export function Card<C extends ElementType = 'div'>({
13
16
  children,
14
17
  className,
15
18
  variant = 'default',
16
19
  padding = 'medium',
17
20
  textAlign = 'start',
21
+ as,
18
22
  onClick,
19
23
  ...rest
20
- }: CardProps) {
24
+ }: CardProps<C>) {
21
25
  const classNames = cn(
22
26
  css.card,
23
27
  css[`--${variant}`],
@@ -27,14 +31,14 @@ export function Card({
27
31
  className,
28
32
  );
29
33
 
30
- const Component = onClick ? 'button' : 'div';
34
+ const Component = as ?? (onClick ? 'button' : 'div');
31
35
 
32
36
  return (
33
37
  <Component
34
38
  {...rest}
35
39
  className={classNames}
36
40
  onClick={onClick}
37
- {...(onClick && { type: 'button' as const })}
41
+ {...(!as && onClick && { type: 'button' as const })}
38
42
  >
39
43
  {children}
40
44
  </Component>
@@ -19,12 +19,15 @@ Heading block with optional subtitle for introducing a content section.
19
19
  ### Without subtitle
20
20
  <Canvas of={Stories.WithoutSubtitle} />
21
21
 
22
- ### Large
23
- <Canvas of={Stories.Large} />
22
+ ### Extra Small
23
+ <Canvas of={Stories.ExtraSmall} />
24
24
 
25
25
  ### Small
26
26
  <Canvas of={Stories.Small} />
27
27
 
28
+ ### Large
29
+ <Canvas of={Stories.Large} />
30
+
28
31
  ### Centered
29
32
  <Canvas of={Stories.Centered} />
30
33
 
@@ -40,7 +43,12 @@ Heading block with optional subtitle for introducing a content section.
40
43
  <tr><th>Variable</th><th>Default</th><th>Description</th></tr>
41
44
  </thead>
42
45
  <tbody>
46
+ <tr><td>`--sectionHeader-title-color`</td><td>`var(--bds-color_on-bg)`</td><td>Title text colour</td></tr>
47
+ <tr><td>`--sectionHeader_title-size`</td><td>varies by `size` prop</td><td>Title font-size (overrides the variant default)</td></tr>
48
+ <tr><td>`--sectionHeader_title-line-height`</td><td>varies by `size` prop</td><td>Title line-height</td></tr>
49
+ <tr><td>`--sectionHeader_title-weight`</td><td>`var(--bds-font_weight--bold)`</td><td>Title font-weight</td></tr>
43
50
  <tr><td>`--sectionHeader_subtitle-color`</td><td>`var(--bds-color_grey--strong)`</td><td>Subtitle text colour</td></tr>
51
+ <tr><td>`--sectionHeader_subtitle-size`</td><td>varies by `size` prop</td><td>Subtitle font-size</td></tr>
44
52
  </tbody>
45
53
  </table>
46
54
 
@@ -34,37 +34,49 @@
34
34
  text-align: end;
35
35
  }
36
36
 
37
- .sectionHeader.--small .title {
38
- font-size: var(--bds-font_size--heading-1);
39
- line-height: var(--bds-font_line-height--heading);
40
- font-weight: var(--bds-font_weight--bold);
37
+ /* medium first — default size, so MCP extraction picks up its fallbacks */
38
+ .sectionHeader.--medium .title {
39
+ font-size: var(--sectionHeader_title-size, var(--bds-font_size--display));
40
+ line-height: var(--sectionHeader_title-line-height, var(--bds-font_line-height--display));
41
+ font-weight: var(--sectionHeader_title-weight, var(--bds-font_weight--bold));
41
42
  }
42
43
 
43
- .sectionHeader.--small .subtitle {
44
- font-size: var(--bds-font_size--body);
44
+ .sectionHeader.--medium .subtitle {
45
+ font-size: var(--sectionHeader_subtitle-size, var(--bds-font_size--heading-3));
46
+ line-height: 1.3;
47
+ }
48
+
49
+ .sectionHeader.--xs .title {
50
+ font-size: var(--sectionHeader_title-size, 1.5em);
51
+ line-height: var(--sectionHeader_title-line-height, var(--bds-font_line-height--heading));
52
+ font-weight: var(--sectionHeader_title-weight, var(--bds-font_weight--bold));
53
+ }
54
+
55
+ .sectionHeader.--xs .subtitle {
56
+ font-size: var(--sectionHeader_subtitle-size, var(--bds-font_size--body));
45
57
  line-height: 1.4;
46
58
  }
47
59
 
48
- .sectionHeader.--medium .title {
49
- font-size: var(--bds-font_size--display);
50
- line-height: var(--bds-font_line-height--display);
51
- font-weight: var(--bds-font_weight--bold);
60
+ .sectionHeader.--small .title {
61
+ font-size: var(--sectionHeader_title-size, var(--bds-font_size--heading-1));
62
+ line-height: var(--sectionHeader_title-line-height, var(--bds-font_line-height--heading));
63
+ font-weight: var(--sectionHeader_title-weight, var(--bds-font_weight--bold));
52
64
  }
53
65
 
54
- .sectionHeader.--medium .subtitle {
55
- font-size: var(--bds-font_size--heading-3);
56
- line-height: 1.3;
66
+ .sectionHeader.--small .subtitle {
67
+ font-size: var(--sectionHeader_subtitle-size, var(--bds-font_size--body));
68
+ line-height: 1.4;
57
69
  }
58
70
 
59
71
  .sectionHeader.--large .title {
60
- font-size: var(--bds-font_size--display);
61
- line-height: var(--bds-font_line-height--display);
62
- font-weight: var(--bds-font_weight--bold);
72
+ font-size: var(--sectionHeader_title-size, var(--bds-font_size--display));
73
+ line-height: var(--sectionHeader_title-line-height, var(--bds-font_line-height--display));
74
+ font-weight: var(--sectionHeader_title-weight, var(--bds-font_weight--bold));
63
75
  letter-spacing: var(--bds-font_tracking--tight);
64
76
  }
65
77
 
66
78
  .sectionHeader.--large .subtitle {
67
- font-size: var(--bds-font_size--heading-2);
79
+ font-size: var(--sectionHeader_subtitle-size, var(--bds-font_size--heading-2));
68
80
  line-height: 1.3;
69
81
  font-weight: var(--bds-font_weight--medium);
70
82
  }
@@ -28,4 +28,9 @@ describe('SectionHeader', () => {
28
28
  const { container } = render(<SectionHeader title="Title" className="custom" />);
29
29
  expect(container.firstChild).toHaveClass('custom');
30
30
  });
31
+
32
+ it('renders the xs size variant', () => {
33
+ const { container } = render(<SectionHeader title="XS Title" size="xs" />);
34
+ expect(container.firstChild).toHaveClass('--xs');
35
+ });
31
36
  });
@@ -6,7 +6,7 @@ const meta = {
6
6
  component: SectionHeader,
7
7
  argTypes: {
8
8
  alignment: { control: 'select', options: ['start', 'center', 'end'] },
9
- size: { control: 'select', options: ['small', 'medium', 'large'] },
9
+ size: { control: 'select', options: ['xs', 'small', 'medium', 'large'] },
10
10
  },
11
11
  } satisfies Meta<typeof SectionHeader>;
12
12
 
@@ -16,5 +16,6 @@ type Story = StoryObj<typeof meta>;
16
16
  export const Default: Story = { args: { title: 'Section Title', subtitle: 'A descriptive subtitle.' } };
17
17
  export const WithoutSubtitle: Story = { args: { title: 'Title Only' } };
18
18
  export const Centered: Story = { args: { title: 'Centered Title', subtitle: 'Centered subtitle.', alignment: 'center' } };
19
+ export const ExtraSmall: Story = { args: { title: 'Extra Small Header', subtitle: 'Extra small size.', size: 'xs' } };
19
20
  export const Small: Story = { args: { title: 'Small Header', subtitle: 'Small size.', size: 'small' } };
20
21
  export const Large: Story = { args: { title: 'Large Header', subtitle: 'Large size.', size: 'large' } };
@@ -9,7 +9,7 @@ type SectionHeaderProps = WithClassName & Omit<HTMLAttributes<HTMLDivElement>, '
9
9
  title: string;
10
10
  subtitle?: string;
11
11
  alignment?: 'start' | 'center' | 'end';
12
- size?: 'small' | 'medium' | 'large';
12
+ size?: 'xs' | 'small' | 'medium' | 'large';
13
13
  titleAs?: IntrinsicElement;
14
14
  };
15
15
 
@@ -43,6 +43,7 @@ Vertically stacked sections that can be expanded and collapsed independently.
43
43
  <tbody>
44
44
  <tr><td>`--accordion_border`</td><td>`none`</td><td>Container border</td></tr>
45
45
  <tr><td>`--accordion_radius`</td><td>`var(--bdc-outline_radius)`</td><td>Container corner radius</td></tr>
46
+ <tr><td>`--accordion_trigger-bg--hover`</td><td>`var(--bds-color_bg--subtle)`</td><td>Trigger button background on hover</td></tr>
46
47
  </tbody>
47
48
  </table>
48
49
 
@@ -52,7 +52,7 @@
52
52
 
53
53
  @media (hover: hover) and (pointer: fine) {
54
54
  .trigger:not(:disabled):hover {
55
- background-color: var(--bds-color_bg--subtle);
55
+ background-color: var(--accordion_trigger-bg--hover, var(--bds-color_bg--subtle));
56
56
  }
57
57
  }
58
58
 
@@ -47,11 +47,14 @@ Inline contextual feedback message. Use for confirmations, warnings, errors, and
47
47
 
48
48
  <table>
49
49
  <thead>
50
- <tr><th>Variable</th><th>Description</th></tr>
50
+ <tr><th>Variable</th><th>Default</th><th>Description</th></tr>
51
51
  </thead>
52
52
  <tbody>
53
- <tr><td>`--alert_color`</td><td>Background colour (defaults to variant semantic token)</td></tr>
54
- <tr><td>`--alert_on-color`</td><td>Text and icon colour</td></tr>
53
+ <tr><td>`--alert_color`</td><td>Per variant</td><td>Background colour (defaults to variant semantic token)</td></tr>
54
+ <tr><td>`--alert_on-color`</td><td>Per variant</td><td>Text and icon colour</td></tr>
55
+ <tr><td>`--alert_dismiss-border`</td><td>`none`</td><td>Dismiss button border</td></tr>
56
+ <tr><td>`--alert_dismiss-radius`</td><td>`var(--bds-border_radius--circle)`</td><td>Dismiss button border radius</td></tr>
57
+ <tr><td>`--alert_dismiss-opacity--hover`</td><td>`0.7`</td><td>Dismiss button opacity on hover</td></tr>
55
58
  </tbody>
56
59
  </table>
57
60
 
@@ -84,7 +84,7 @@
84
84
 
85
85
  @media (hover: hover) and (pointer: fine) {
86
86
  .dismiss:hover {
87
- opacity: 0.7;
87
+ opacity: var(--alert_dismiss-opacity--hover, 0.7);
88
88
  }
89
89
  }
90
90
  }
@@ -38,6 +38,11 @@ Date picker calendar grid. Use standalone or as the popover content inside a dat
38
38
  <tr><td>`--calendar_radius`</td><td>`var(--bdc-outline_radius)`</td><td>Container corner radius</td></tr>
39
39
  <tr><td>`--calendar_shadow`</td><td>`var(--bds-shadow_s)`</td><td>Container box shadow</td></tr>
40
40
  <tr><td>`--calendar_today-border`</td><td>`none`</td><td>Border on today's date cell</td></tr>
41
+ <tr><td>`--calendar_navBtn-bg--hover`</td><td>`var(--bds-color_bg--subtle)`</td><td>Month navigation button background on hover</td></tr>
42
+ <tr><td>`--calendar_day-bg--hover`</td><td>`var(--bds-color_bg--subtle)`</td><td>Day cell background on hover</td></tr>
43
+ <tr><td>`--calendar_today-color`</td><td>`var(--bds-color_interactive)`</td><td>Today's date text colour</td></tr>
44
+ <tr><td>`--calendar_day-bg--selected`</td><td>`var(--bds-color_interactive)`</td><td>Selected day background</td></tr>
45
+ <tr><td>`--calendar_day-color--selected`</td><td>`var(--bds-color_on-interactive)`</td><td>Selected day text colour</td></tr>
41
46
  </tbody>
42
47
  </table>
43
48
 
@@ -51,7 +51,7 @@
51
51
 
52
52
  @media (hover: hover) and (pointer: fine) {
53
53
  .navBtn:hover {
54
- background-color: var(--bds-color_bg--subtle);
54
+ background-color: var(--calendar_navBtn-bg--hover, var(--bds-color_bg--subtle));
55
55
  }
56
56
  }
57
57
 
@@ -95,22 +95,22 @@
95
95
 
96
96
  @media (hover: hover) and (pointer: fine) {
97
97
  .day:not(.disabled, .selected):hover {
98
- background-color: var(--bds-color_bg--subtle);
98
+ background-color: var(--calendar_day-bg--hover, var(--bds-color_bg--subtle));
99
99
  }
100
100
  }
101
101
 
102
102
  .today {
103
103
  font-weight: var(--bds-font_weight--semibold);
104
104
 
105
- --bdc_color: var(--bds-color_interactive);
105
+ --bdc_color: var(--calendar_today-color, var(--bds-color_interactive));
106
106
 
107
107
  border: var(--calendar_today-border, none);
108
108
  box-shadow: inset 0 0 0 var(--bdc-outline_width) var(--bdc_color);
109
109
  }
110
110
 
111
111
  .selected {
112
- background-color: var(--bds-color_interactive);
113
- color: var(--bds-color_on-interactive);
112
+ background-color: var(--calendar_day-bg--selected, var(--bds-color_interactive));
113
+ color: var(--calendar_day-color--selected, var(--bds-color_on-interactive));
114
114
  font-weight: var(--bds-font_weight--semibold);
115
115
  }
116
116
 
@@ -24,6 +24,20 @@ Horizontally scrollable slide container with previous/next navigation.
24
24
 
25
25
  <ArgTypes of={Stories} />
26
26
 
27
+ ## CSS variables
28
+
29
+
30
+ <table>
31
+ <thead>
32
+ <tr><th>Variable</th><th>Default</th><th>Description</th></tr>
33
+ </thead>
34
+ <tbody>
35
+ <tr><td>`--carousel_indicator-radius`</td><td>`var(--bds-border_radius--circle)`</td><td>Navigation button border radius</td></tr>
36
+ <tr><td>`--carousel_navBtn-bg--hover`</td><td>`var(--bds-color_bg--subtle)`</td><td>Navigation button background on hover</td></tr>
37
+ </tbody>
38
+ </table>
39
+
40
+
27
41
  ## Accessibility
28
42
 
29
43
  - Prev/next buttons have `aria-label="Previous"` / `"Next"`
@@ -57,7 +57,7 @@
57
57
 
58
58
  @media (hover: hover) and (pointer: fine) {
59
59
  .navBtn:hover {
60
- background-color: var(--bds-color_bg--subtle);
60
+ background-color: var(--carousel_navBtn-bg--hover, var(--bds-color_bg--subtle));
61
61
  }
62
62
  }
63
63
 
@@ -39,6 +39,24 @@ Full-width banner for page-level system messages. Sits at the top of the page or
39
39
 
40
40
  <ArgTypes of={Stories} />
41
41
 
42
+ ## CSS variables
43
+
44
+
45
+ <table>
46
+ <thead>
47
+ <tr><th>Variable</th><th>Default</th><th>Description</th></tr>
48
+ </thead>
49
+ <tbody>
50
+ <tr><td>`--banner_bg`</td><td>Per variant</td><td>Banner background colour</td></tr>
51
+ <tr><td>`--banner_text`</td><td>Per variant</td><td>Banner text colour</td></tr>
52
+ <tr><td>`--banner_border`</td><td>Per variant</td><td>Banner bottom border colour</td></tr>
53
+ <tr><td>`--banner_dismiss-radius`</td><td>`var(--bds-border_radius--circle)`</td><td>Dismiss button border radius</td></tr>
54
+ <tr><td>`--banner_dismiss-border`</td><td>`none`</td><td>Dismiss button border</td></tr>
55
+ <tr><td>`--banner_dismiss-opacity--hover`</td><td>`0.7`</td><td>Dismiss button opacity on hover</td></tr>
56
+ </tbody>
57
+ </table>
58
+
59
+
42
60
  ## Accessibility
43
61
 
44
62
  - Uses `role="alert"` for error/warning variants and `role="status"` for info/success
@@ -72,7 +72,7 @@
72
72
 
73
73
  @media (hover: hover) and (pointer: fine) {
74
74
  .dismiss:hover {
75
- opacity: 0.7;
75
+ opacity: var(--banner_dismiss-opacity--hover, 0.7);
76
76
  }
77
77
  }
78
78
  }
@@ -32,6 +32,27 @@ Navigation control for paged data sets. Renders prev/next buttons plus numbered
32
32
 
33
33
  <ArgTypes of={Stories} />
34
34
 
35
+ ## CSS variables
36
+
37
+
38
+ <table>
39
+ <thead>
40
+ <tr><th>Variable</th><th>Default</th><th>Description</th></tr>
41
+ </thead>
42
+ <tbody>
43
+ <tr><td>`--pagination_radius`</td><td>`var(--bds-border_radius--full)`</td><td>Page button border radius</td></tr>
44
+ <tr><td>`--btn_bg`</td><td>`transparent`</td><td>Default button background</td></tr>
45
+ <tr><td>`--btn_color`</td><td>`var(--bds-color_on-bg)`</td><td>Default button text colour</td></tr>
46
+ <tr><td>`--btn_border`</td><td>`var(--bds-color_bg--subtle)`</td><td>Default button border colour</td></tr>
47
+ <tr><td>`--btn_bg--hover`</td><td>`var(--bds-color_bg--subtle)`</td><td>Button background on hover</td></tr>
48
+ <tr><td>`--btn_color--hover`</td><td>`var(--bds-color_interactive_on-bg)`</td><td>Button text colour on hover</td></tr>
49
+ <tr><td>`--btn_bg--active`</td><td>`var(--bds-color_interactive)`</td><td>Active (current page) button background</td></tr>
50
+ <tr><td>`--btn_color--active`</td><td>`var(--bds-color_on-interactive)`</td><td>Active (current page) button text colour</td></tr>
51
+ <tr><td>`--btn_border--active`</td><td>`var(--bds-color_interactive)`</td><td>Active (current page) button border colour</td></tr>
52
+ </tbody>
53
+ </table>
54
+
55
+
35
56
  ## Accessibility
36
57
 
37
58
  - Wraps in `<nav aria-label="Pagination">`
@@ -53,15 +53,15 @@
53
53
 
54
54
  @media (hover: hover) and (pointer: fine) {
55
55
  .button:not(:disabled, .--active):hover {
56
- --btn_bg: var(--bds-color_bg--subtle);
57
- --btn_color: var(--bds-color_interactive_on-bg);
56
+ --btn_bg: var(--btn_bg--hover, var(--bds-color_bg--subtle));
57
+ --btn_color: var(--btn_color--hover, var(--bds-color_interactive_on-bg));
58
58
  }
59
59
  }
60
60
 
61
61
  .button.--active {
62
- --btn_bg: var(--bds-color_interactive);
63
- --btn_color: var(--bds-color_on-interactive);
64
- --btn_border: var(--bds-color_interactive);
62
+ --btn_bg: var(--btn_bg--active, var(--bds-color_interactive));
63
+ --btn_color: var(--btn_color--active, var(--bds-color_on-interactive));
64
+ --btn_border: var(--btn_border--active, var(--bds-color_interactive));
65
65
  }
66
66
 
67
67
  .button.--nav svg {
@@ -40,6 +40,8 @@ Data table with optional sortable columns and caption.
40
40
  <tbody>
41
41
  <tr><td>`--table_border`</td><td>`none`</td><td>Container border</td></tr>
42
42
  <tr><td>`--table_radius`</td><td>`var(--bdc-outline_radius)`</td><td>Container corner radius</td></tr>
43
+ <tr><td>`--table_sortBtn-color--hover`</td><td>`var(--bds-color_on-bg)`</td><td>Sort button text colour on hover</td></tr>
44
+ <tr><td>`--table_row-bg--hover`</td><td>`var(--bds-color_bg--subtle)`</td><td>Table row background on hover</td></tr>
43
45
  </tbody>
44
46
  </table>
45
47
 
@@ -65,7 +65,7 @@
65
65
 
66
66
  @media (hover: hover) and (pointer: fine) {
67
67
  .sortButton:hover {
68
- color: var(--bds-color_on-bg);
68
+ color: var(--table_sortBtn-color--hover, var(--bds-color_on-bg));
69
69
  }
70
70
  }
71
71
 
@@ -97,7 +97,7 @@
97
97
 
98
98
  @media (hover: hover) and (pointer: fine) {
99
99
  .tbody .tr:hover {
100
- background-color: var(--bds-color_bg--subtle);
100
+ background-color: var(--table_row-bg--hover, var(--bds-color_bg--subtle));
101
101
  }
102
102
  }
103
103
 
@@ -33,6 +33,23 @@ Organises content into discrete panels accessible via a horizontal tab list.
33
33
 
34
34
  <ArgTypes of={Stories} />
35
35
 
36
+ ## CSS variables
37
+
38
+
39
+ <table>
40
+ <thead>
41
+ <tr><th>Variable</th><th>Default</th><th>Description</th></tr>
42
+ </thead>
43
+ <tbody>
44
+ <tr><td>`--tab_color`</td><td>`var(--bds-color_on-bg)`</td><td>Default tab text colour</td></tr>
45
+ <tr><td>`--tab_border-color`</td><td>`transparent`</td><td>Default tab bottom border colour</td></tr>
46
+ <tr><td>`--tab_color--active`</td><td>`var(--bds-color_interactive_on-bg)`</td><td>Active tab text colour</td></tr>
47
+ <tr><td>`--tab_border-color--active`</td><td>`var(--bds-color_interactive)`</td><td>Active tab bottom border colour</td></tr>
48
+ <tr><td>`--tab_color--hover`</td><td>`var(--bds-color_interactive_on-bg)`</td><td>Tab text colour on hover</td></tr>
49
+ </tbody>
50
+ </table>
51
+
52
+
36
53
  ## Accessibility
37
54
 
38
55
  - Implements ARIA tabs pattern: `role="tablist"`, `role="tab"`, `role="tabpanel"`
@@ -26,8 +26,8 @@
26
26
  }
27
27
 
28
28
  .tab.--active {
29
- --tab_color: var(--bds-color_interactive_on-bg);
30
- --tab_border-color: var(--bds-color_interactive);
29
+ --tab_color: var(--tab_color--active, var(--bds-color_interactive_on-bg));
30
+ --tab_border-color: var(--tab_border-color--active, var(--bds-color_interactive));
31
31
  }
32
32
 
33
33
  .tab:disabled {
@@ -43,7 +43,7 @@
43
43
 
44
44
  @media (hover: hover) and (pointer: fine) {
45
45
  .tab:not(:disabled, .--active):hover {
46
- --tab_color: var(--bds-color_interactive_on-bg);
46
+ --tab_color: var(--tab_color--hover, var(--bds-color_interactive_on-bg));
47
47
  }
48
48
  }
49
49
 
package/src/css/bdc.css CHANGED
@@ -68,6 +68,7 @@
68
68
  --bdc-outline_width: 1px;
69
69
  --bdc-outline_offset: -1px; /* available for consumer use; bdc borders now use inset box-shadow */
70
70
  --bdc-outline_radius: var(--bds-border_radius--xs);
71
+ --bdc-outline_radius--l: 1.5em;
71
72
 
72
73
  /* Shadow: opt-in; transparent (not 'none') so it's valid in a comma-separated box-shadow list */
73
74
  --bdc-outline_shadow: 0 0 0 0 transparent;