@boostdev/design-system-components 0.1.18 → 1.0.1

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 (137) hide show
  1. package/AGENTS.md +65 -27
  2. package/README.md +64 -29
  3. package/dist/client.cjs +419 -242
  4. package/dist/client.css +1378 -1186
  5. package/dist/client.d.cts +43 -16
  6. package/dist/client.d.ts +43 -16
  7. package/dist/client.js +421 -246
  8. package/dist/index.cjs +419 -242
  9. package/dist/index.css +1378 -1186
  10. package/dist/index.d.cts +43 -16
  11. package/dist/index.d.ts +43 -16
  12. package/dist/index.js +421 -246
  13. package/package.json +9 -4
  14. package/src/components/interaction/Button/Button.mdx +8 -11
  15. package/src/components/interaction/Button/Button.module.css +74 -44
  16. package/src/components/interaction/Button/Button.stories.tsx +4 -4
  17. package/src/components/interaction/Button/Button.tsx +5 -5
  18. package/src/components/interaction/Button/index.ts +1 -0
  19. package/src/components/interaction/Command/Command.module.css +53 -38
  20. package/src/components/interaction/Command/Command.spec.tsx +24 -0
  21. package/src/components/interaction/Command/Command.tsx +5 -0
  22. package/src/components/interaction/Dialog/Dialog.mdx +2 -2
  23. package/src/components/interaction/Dialog/Dialog.module.css +20 -10
  24. package/src/components/interaction/Dialog/Dialog.spec.tsx +19 -0
  25. package/src/components/interaction/Dialog/Dialog.tsx +22 -0
  26. package/src/components/interaction/Drawer/Drawer.module.css +11 -11
  27. package/src/components/interaction/Drawer/Drawer.spec.tsx +30 -0
  28. package/src/components/interaction/Drawer/Drawer.tsx +7 -3
  29. package/src/components/interaction/DropdownMenu/DropdownMenu.module.css +24 -19
  30. package/src/components/interaction/DropdownMenu/DropdownMenu.stories.tsx +4 -4
  31. package/src/components/interaction/Popover/Popover.module.css +17 -12
  32. package/src/components/interaction/Popover/Popover.spec.tsx +25 -4
  33. package/src/components/interaction/Popover/Popover.stories.tsx +1 -1
  34. package/src/components/interaction/Popover/Popover.tsx +5 -2
  35. package/src/components/interaction/Rating/Rating.module.css +3 -3
  36. package/src/components/interaction/Toast/Toast.module.css +19 -19
  37. package/src/components/interaction/Toast/Toast.tsx +1 -1
  38. package/src/components/interaction/form/Checkbox/Checkbox.mdx +2 -2
  39. package/src/components/interaction/form/Checkbox/Checkbox.module.css +22 -18
  40. package/src/components/interaction/form/Checkbox/Checkbox.tsx +2 -2
  41. package/src/components/interaction/form/CheckboxGroup/CheckboxGroup.module.css +29 -0
  42. package/src/components/interaction/form/CheckboxGroup/CheckboxGroup.spec.tsx +87 -0
  43. package/src/components/interaction/form/CheckboxGroup/CheckboxGroup.stories.tsx +62 -0
  44. package/src/components/interaction/form/CheckboxGroup/CheckboxGroup.tsx +46 -0
  45. package/src/components/interaction/form/CheckboxGroup/index.ts +2 -0
  46. package/src/components/interaction/form/Combobox/Combobox.module.css +44 -34
  47. package/src/components/interaction/form/Combobox/Combobox.tsx +0 -1
  48. package/src/components/interaction/form/FileInput/FileInput.module.css +24 -16
  49. package/src/components/interaction/form/FileInput/FileInput.tsx +5 -2
  50. package/src/components/interaction/form/FormInput/FormInput.module.css +21 -16
  51. package/src/components/interaction/form/FormInput/FormInput.tsx +3 -0
  52. package/src/components/interaction/form/NumberInput/NumberInput.module.css +25 -19
  53. package/src/components/interaction/form/NumberInput/NumberInput.tsx +12 -3
  54. package/src/components/interaction/form/Radio/Radio.mdx +3 -3
  55. package/src/components/interaction/form/Radio/Radio.module.css +28 -24
  56. package/src/components/interaction/form/Radio/Radio.stories.tsx +1 -1
  57. package/src/components/interaction/form/Radio/Radio.tsx +2 -2
  58. package/src/components/interaction/form/RadioGroup/RadioGroup.module.css +29 -0
  59. package/src/components/interaction/form/RadioGroup/RadioGroup.spec.tsx +75 -0
  60. package/src/components/interaction/form/RadioGroup/RadioGroup.stories.tsx +64 -0
  61. package/src/components/interaction/form/RadioGroup/RadioGroup.tsx +46 -0
  62. package/src/components/interaction/form/RadioGroup/index.ts +2 -0
  63. package/src/components/interaction/form/SegmentedControl/SegmentedControl.mdx +5 -5
  64. package/src/components/interaction/form/SegmentedControl/SegmentedControl.module.css +26 -26
  65. package/src/components/interaction/form/SegmentedControl/SegmentedControl.tsx +4 -0
  66. package/src/components/interaction/form/Select/Select.module.css +24 -19
  67. package/src/components/interaction/form/Select/Select.tsx +3 -0
  68. package/src/components/interaction/form/Slider/Slider.mdx +1 -1
  69. package/src/components/interaction/form/Slider/Slider.module.css +24 -24
  70. package/src/components/interaction/form/Slider/Slider.tsx +1 -0
  71. package/src/components/interaction/form/Switch/Switch.mdx +4 -4
  72. package/src/components/interaction/form/Switch/Switch.module.css +22 -16
  73. package/src/components/interaction/form/Switch/Switch.tsx +1 -1
  74. package/src/components/interaction/form/Textarea/Textarea.module.css +23 -18
  75. package/src/components/interaction/form/Textarea/Textarea.tsx +3 -0
  76. package/src/components/interaction/form/atoms/InputContainer.module.css +2 -2
  77. package/src/components/interaction/form/atoms/Label.module.css +2 -2
  78. package/src/components/interaction/form/atoms/Message.module.css +2 -2
  79. package/src/components/layout/ButtonGroup/ButtonGroup.module.css +2 -2
  80. package/src/components/layout/ButtonGroup/ButtonGroup.stories.tsx +2 -2
  81. package/src/components/layout/ButtonGroup/ButtonGroup.tsx +8 -3
  82. package/src/components/layout/ButtonGroup/index.ts +1 -0
  83. package/src/components/layout/Card/Card.module.css +30 -16
  84. package/src/components/layout/Card/Card.tsx +1 -1
  85. package/src/components/layout/IconWrapper/IconWrapper.mdx +2 -2
  86. package/src/components/layout/IconWrapper/IconWrapper.module.css +5 -5
  87. package/src/components/layout/IconWrapper/IconWrapper.tsx +4 -3
  88. package/src/components/layout/IconWrapper/index.ts +1 -0
  89. package/src/components/layout/SectionHeader/SectionHeader.module.css +23 -23
  90. package/src/components/layout/SectionHeader/SectionHeader.spec.tsx +2 -2
  91. package/src/components/layout/SectionHeader/SectionHeader.tsx +2 -2
  92. package/src/components/ui/Accordion/Accordion.module.css +23 -18
  93. package/src/components/ui/Alert/Alert.module.css +31 -27
  94. package/src/components/ui/Avatar/Avatar.module.css +6 -6
  95. package/src/components/ui/Avatar/Avatar.tsx +1 -1
  96. package/src/components/ui/Badge/Badge.mdx +2 -2
  97. package/src/components/ui/Badge/Badge.module.css +15 -15
  98. package/src/components/ui/Breadcrumb/Breadcrumb.module.css +11 -11
  99. package/src/components/ui/Calendar/Calendar.module.css +39 -29
  100. package/src/components/ui/Calendar/Calendar.tsx +6 -2
  101. package/src/components/ui/Carousel/Carousel.module.css +15 -10
  102. package/src/components/ui/Carousel/Carousel.stories.tsx +1 -1
  103. package/src/components/ui/Collapsible/Collapsible.mdx +6 -6
  104. package/src/components/ui/Collapsible/Collapsible.module.css +18 -18
  105. package/src/components/ui/DescriptionList/DescriptionList.module.css +8 -8
  106. package/src/components/ui/Link/Link.module.css +14 -14
  107. package/src/components/ui/Loading/Loading.module.css +8 -2
  108. package/src/components/ui/NotificationBanner/NotificationBanner.module.css +27 -23
  109. package/src/components/ui/Pagination/Pagination.module.css +22 -17
  110. package/src/components/ui/Progress/Progress.mdx +1 -1
  111. package/src/components/ui/Progress/Progress.module.css +10 -10
  112. package/src/components/ui/ProgressCircle/ProgressCircle.module.css +8 -8
  113. package/src/components/ui/Separator/Separator.module.css +1 -1
  114. package/src/components/ui/Separator/Separator.tsx +1 -1
  115. package/src/components/ui/Skeleton/Skeleton.module.css +5 -5
  116. package/src/components/ui/SkipLink/SkipLink.module.css +17 -12
  117. package/src/components/ui/Table/Table.module.css +35 -30
  118. package/src/components/ui/Table/Table.tsx +2 -1
  119. package/src/components/ui/Tabs/Tabs.module.css +17 -17
  120. package/src/components/ui/Tabs/Tabs.tsx +0 -1
  121. package/src/components/ui/Tooltip/Tooltip.module.css +12 -12
  122. package/src/components/ui/Tooltip/Tooltip.spec.tsx +3 -3
  123. package/src/components/ui/Tooltip/Tooltip.tsx +10 -2
  124. package/src/components/ui/Typography/Typography.module.css +18 -18
  125. package/src/css/bdc.css +66 -0
  126. package/src/css/index.css +5 -0
  127. package/src/index.ts +7 -0
  128. package/src/stories/DesignSystem/Borders.mdx +158 -0
  129. package/src/stories/DesignSystem/Colors.mdx +196 -0
  130. package/src/stories/DesignSystem/Elevation.mdx +127 -0
  131. package/src/stories/DesignSystem/Grid.mdx +140 -0
  132. package/src/stories/DesignSystem/Motion.mdx +96 -0
  133. package/src/stories/DesignSystem/Overview.mdx +99 -0
  134. package/src/stories/DesignSystem/Spacing.mdx +74 -0
  135. package/src/stories/DesignSystem/Typography.mdx +110 -0
  136. package/src/stories/Introduction.css +2 -2
  137. package/src/stories/Introduction.mdx +7 -7
@@ -1 +1,2 @@
1
1
  export { IconWrapper } from './IconWrapper';
2
+ export type { IconWrapperProps } from './IconWrapper';
@@ -2,26 +2,26 @@
2
2
  .sectionHeader {
3
3
  display: flex;
4
4
  flex-direction: column;
5
- gap: var(--space_m);
6
- grid-column: var(--grid_span-100);
5
+ gap: var(--bds-space_m);
6
+ grid-column: var(--bds-grid_span-100);
7
7
  }
8
8
 
9
9
  .title {
10
- color: var(--sectionHeader-title-color, var(--color_on-bg));
10
+ color: var(--sectionHeader-title-color, var(--bds-on-bg));
11
11
  margin: 0;
12
- font-family: var(--font_family--body);
12
+ font-family: var(--bds-font_family--body);
13
13
  }
14
14
 
15
15
  .subtitle {
16
- color: var(--sectionHeader_subtitle-color, var(--color_grey--strong));
16
+ color: var(--sectionHeader_subtitle-color, var(--bds-grey--strong));
17
17
  margin: 0;
18
- font-family: var(--font_family--body);
19
- font-weight: var(--font_weight--medium);
18
+ font-family: var(--bds-font_family--body);
19
+ font-weight: var(--bds-font_weight--medium);
20
20
  }
21
21
 
22
22
  .sectionHeader.--start {
23
23
  align-items: flex-start;
24
- text-align: left;
24
+ text-align: start;
25
25
  }
26
26
 
27
27
  .sectionHeader.--center {
@@ -31,41 +31,41 @@
31
31
 
32
32
  .sectionHeader.--end {
33
33
  align-items: flex-end;
34
- text-align: right;
34
+ text-align: end;
35
35
  }
36
36
 
37
37
  .sectionHeader.--small .title {
38
- font-size: var(--font_size--heading-1);
39
- line-height: var(--font_line-height--heading);
40
- font-weight: var(--font_weight--bold);
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);
41
41
  }
42
42
 
43
43
  .sectionHeader.--small .subtitle {
44
- font-size: var(--font_size--body);
44
+ font-size: var(--bds-font_size--body);
45
45
  line-height: 1.4;
46
46
  }
47
47
 
48
48
  .sectionHeader.--medium .title {
49
- font-size: var(--font_size--display);
50
- line-height: var(--font_line-height--display);
51
- font-weight: var(--font_weight--bold);
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);
52
52
  }
53
53
 
54
54
  .sectionHeader.--medium .subtitle {
55
- font-size: var(--font_size--heading-3);
55
+ font-size: var(--bds-font_size--heading-3);
56
56
  line-height: 1.3;
57
57
  }
58
58
 
59
59
  .sectionHeader.--large .title {
60
- font-size: var(--font_size--display);
61
- line-height: var(--font_line-height--display);
62
- font-weight: var(--font_weight--bold);
63
- letter-spacing: var(--font_tracking--tight);
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);
63
+ letter-spacing: var(--bds-font_tracking--tight);
64
64
  }
65
65
 
66
66
  .sectionHeader.--large .subtitle {
67
- font-size: var(--font_size--heading-2);
67
+ font-size: var(--bds-font_size--heading-2);
68
68
  line-height: 1.3;
69
- font-weight: var(--font_weight--medium);
69
+ font-weight: var(--bds-font_weight--medium);
70
70
  }
71
71
  }
@@ -17,11 +17,11 @@ describe('SectionHeader', () => {
17
17
  expect(screen.queryByText('Subtitle text')).not.toBeInTheDocument();
18
18
  });
19
19
 
20
- it('renders inside a header element', () => {
20
+ it('renders inside a div wrapper', () => {
21
21
  render(<SectionHeader title="Title" />);
22
22
  const heading = screen.getByRole('heading', { level: 2 });
23
23
  expect(heading).toBeInTheDocument();
24
- expect(heading.closest('header')).toBeInTheDocument();
24
+ expect(heading.closest('div')).toBeInTheDocument();
25
25
  });
26
26
 
27
27
  it('accepts a custom className', () => {
@@ -23,9 +23,9 @@ export function SectionHeader({
23
23
  }: Readonly<SectionHeaderProps>) {
24
24
  const Title = titleAs;
25
25
  return (
26
- <header className={cn(css.sectionHeader, css[`--${alignment}`], css[`--${size}`], className)}>
26
+ <div className={cn(css.sectionHeader, css[`--${alignment}`], css[`--${size}`], className)}>
27
27
  <Title className={css.title}>{title}</Title>
28
28
  {subtitle && <p className={css.subtitle}>{subtitle}</p>}
29
- </header>
29
+ </div>
30
30
  );
31
31
  }
@@ -2,13 +2,18 @@
2
2
  .accordion {
3
3
  display: flex;
4
4
  flex-direction: column;
5
- border: 1px solid var(--color_bg--subtle);
6
- border-radius: var(--border_radius--s);
5
+ border: var(--accordion_border, none);
6
+ --bdc_color: var(--bds-bg--subtle);
7
+ --bdc-outline_radius: var(--bds-border_radius--s);
8
+
9
+ outline: var(--bdc-outline_width) solid var(--bdc_color);
10
+ outline-offset: var(--bdc-outline_offset);
11
+ border-radius: var(--accordion_radius, var(--bdc-outline_radius));
7
12
  overflow: hidden;
8
13
  }
9
14
 
10
15
  .item {
11
- border-bottom: 1px solid var(--color_bg--subtle);
16
+ border-bottom: 1px solid var(--bds-bg--subtle);
12
17
  }
13
18
 
14
19
  .item:last-child {
@@ -25,13 +30,13 @@
25
30
  align-items: center;
26
31
  justify-content: space-between;
27
32
  width: 100%;
28
- padding: var(--space_m);
29
- font-family: var(--font_family--body);
30
- font-size: var(--font_size--body);
31
- font-weight: var(--font_weight--semibold);
32
- color: var(--color_on-bg);
33
+ padding: var(--bds-space_m);
34
+ font-family: var(--bds-font_family--body);
35
+ font-size: var(--bds-font_size--body);
36
+ font-weight: var(--bds-font_weight--semibold);
37
+ color: var(--bds-on-bg);
33
38
  cursor: pointer;
34
- transition: var(--animation_transition);
39
+ transition: var(--bds-animation_transition);
35
40
  box-sizing: border-box;
36
41
  }
37
42
 
@@ -41,14 +46,14 @@
41
46
  }
42
47
 
43
48
  .trigger:focus-visible {
44
- outline: var(--outline_default);
45
- outline-offset: calc(var(--outline_offset) * -1);
46
- border-radius: var(--border_radius--xs);
49
+ outline: var(--bds-outline_default);
50
+ outline-offset: calc(var(--bds-outline_offset) * -1);
51
+ border-radius: var(--bds-border_radius--xs);
47
52
  }
48
53
 
49
54
  @media (hover: hover) and (pointer: fine) {
50
55
  .trigger:not(:disabled):hover {
51
- background-color: var(--color_bg--subtle);
56
+ background-color: var(--bds-bg--subtle);
52
57
  }
53
58
  }
54
59
 
@@ -61,7 +66,7 @@
61
66
  width: 1.25rem;
62
67
  height: 1.25rem;
63
68
  flex-shrink: 0;
64
- transition: transform var(--animation_transition-duration) var(--animation_easing);
69
+ transition: transform var(--bds-animation_transition-duration) var(--bds-animation_easing);
65
70
  }
66
71
 
67
72
  .item.--open .chevron {
@@ -73,10 +78,10 @@
73
78
  }
74
79
 
75
80
  .panelContent {
76
- padding: 0 var(--space_m) var(--space_m);
77
- color: var(--color_on-bg);
78
- font-size: var(--font_size--body);
79
- line-height: var(--font_line-height--body);
81
+ padding: 0 var(--bds-space_m) var(--bds-space_m);
82
+ color: var(--bds-on-bg);
83
+ font-size: var(--bds-font_size--body);
84
+ line-height: var(--bds-font_line-height--body);
80
85
  }
81
86
 
82
87
  @media (prefers-reduced-motion: reduce) {
@@ -2,38 +2,38 @@
2
2
  .alert {
3
3
  display: flex;
4
4
  align-items: flex-start;
5
- gap: var(--space_s);
6
- padding: var(--space_m);
7
- border-radius: var(--border_radius--s);
8
- border-inline-start: var(--space_s) solid var(--alert_border, var(--color_blue));
9
- background-color: var(--alert_bg, var(--color_blue--subtle));
10
- color: var(--alert_text, var(--color_on-blue--subtle));
11
- font-size: var(--font_size--body);
12
- line-height: var(--font_line-height--body);
5
+ gap: var(--bds-space_s);
6
+ padding: var(--bds-space_m);
7
+ border-radius: var(--bds-border_radius--s);
8
+ border-inline-start: var(--bds-space_s) solid var(--alert_border, var(--bds-blue));
9
+ background-color: var(--alert_bg, var(--bds-blue--subtle));
10
+ color: var(--alert_text, var(--bds-on-blue--subtle));
11
+ font-size: var(--bds-font_size--body);
12
+ line-height: var(--bds-font_line-height--body);
13
13
  }
14
14
 
15
15
  .--variant_info {
16
- --alert_bg: var(--color_blue--subtle);
17
- --alert_text: var(--color_on-blue--subtle);
18
- --alert_border: var(--color_blue);
16
+ --alert_bg: var(--bds-blue--subtle);
17
+ --alert_text: var(--bds-on-blue--subtle);
18
+ --alert_border: var(--bds-blue);
19
19
  }
20
20
 
21
21
  .--variant_success {
22
- --alert_bg: var(--color_success--subtle);
23
- --alert_text: var(--color_on-success--subtle);
24
- --alert_border: var(--color_success);
22
+ --alert_bg: var(--bds-success--subtle);
23
+ --alert_text: var(--bds-on-success--subtle);
24
+ --alert_border: var(--bds-success);
25
25
  }
26
26
 
27
27
  .--variant_warning {
28
- --alert_bg: var(--color_orange--subtle);
29
- --alert_text: var(--color_on-orange--subtle);
30
- --alert_border: var(--color_warning);
28
+ --alert_bg: var(--bds-orange--subtle);
29
+ --alert_text: var(--bds-on-orange--subtle);
30
+ --alert_border: var(--bds-warning);
31
31
  }
32
32
 
33
33
  .--variant_error {
34
- --alert_bg: rgb(from var(--color_error) r g b / 12%);
35
- --alert_text: var(--color_on-bg);
36
- --alert_border: var(--color_error);
34
+ --alert_bg: rgb(from var(--bds-error) r g b / 12%);
35
+ --alert_text: var(--bds-on-bg);
36
+ --alert_border: var(--bds-error);
37
37
  }
38
38
 
39
39
  .icon {
@@ -47,12 +47,12 @@
47
47
  flex: 1;
48
48
  display: flex;
49
49
  flex-direction: column;
50
- gap: var(--space_xxs);
50
+ gap: var(--bds-space_xxs);
51
51
  }
52
52
 
53
53
  .title {
54
- font-weight: var(--font_weight--semibold);
55
- font-size: var(--font_size--body);
54
+ font-weight: var(--bds-font_weight--semibold);
55
+ font-size: var(--bds-font_size--body);
56
56
  }
57
57
 
58
58
  .dismiss {
@@ -63,9 +63,13 @@
63
63
  flex-shrink: 0;
64
64
  cursor: pointer;
65
65
  color: currentcolor;
66
- transition: var(--animation_transition);
67
- border: 1px solid currentcolor;
66
+ transition: var(--bds-animation_transition);
67
+ border: var(--alert_dismiss-border, none);
68
68
  border-radius: 50%;
69
+ --bdc_color: currentcolor;
70
+
71
+ outline: var(--bdc-outline_width) solid var(--bdc_color);
72
+ outline-offset: var(--bdc-outline_offset);
69
73
 
70
74
  }
71
75
 
@@ -75,8 +79,8 @@
75
79
  }
76
80
 
77
81
  .dismiss:focus-visible {
78
- outline: var(--outline_default);
79
- outline-offset: var(--outline_offset);
82
+ outline: var(--bds-outline_default);
83
+ outline-offset: var(--bds-outline_offset);
80
84
  }
81
85
 
82
86
  @media (hover: hover) and (pointer: fine) {
@@ -11,9 +11,9 @@
11
11
  }
12
12
 
13
13
  .avatar.--fallback {
14
- background-color: var(--avatar_bg, var(--color_blue));
15
- color: var(--avatar_text, var(--color_on-blue));
16
- font-weight: var(--font_weight--semibold);
14
+ background-color: var(--avatar_bg, var(--bds-blue));
15
+ color: var(--avatar_text, var(--bds-on-blue));
16
+ font-weight: var(--bds-font_weight--semibold);
17
17
  }
18
18
 
19
19
  .avatar.--size_small { --avatar_size: 2em; }
@@ -30,9 +30,9 @@
30
30
  .initials {
31
31
  line-height: 1;
32
32
  user-select: none;
33
- font-size: var(--font_size--body);
33
+ font-size: var(--bds-font_size--body);
34
34
  }
35
35
 
36
- .avatar.--size_small .initials { font-size: var(--font_size--body--s); }
37
- .avatar.--size_large .initials { font-size: var(--font_size--heading-3); }
36
+ .avatar.--size_small .initials { font-size: var(--bds-font_size--body--s); }
37
+ .avatar.--size_large .initials { font-size: var(--bds-font_size--heading-3); }
38
38
  }
@@ -24,7 +24,7 @@ export function Avatar({ src, alt, name, size = 'medium', className }: Readonly<
24
24
  if (src) {
25
25
  return (
26
26
  <span className={cn(css.avatar, sizeClass, className)}>
27
- <img src={src} alt={alt ?? name ?? ''} className={css.image} />
27
+ <img src={src} alt={alt ?? name ?? 'User avatar'} className={css.image} />
28
28
  </span>
29
29
  );
30
30
  }
@@ -50,8 +50,8 @@ Override these on a parent element to customise the badge without touching globa
50
50
  <tr><th>Variable</th><th>Default</th><th>Description</th></tr>
51
51
  </thead>
52
52
  <tbody>
53
- <tr><td>`--badge_color`</td><td>`var(--color_cta--subtle)`</td><td>Background colour</td></tr>
54
- <tr><td>`--badge_on-color`</td><td>`var(--color_on-cta--subtle)`</td><td>Text colour</td></tr>
53
+ <tr><td>`--badge_color`</td><td>`var(--bds-cta--subtle)`</td><td>Background colour</td></tr>
54
+ <tr><td>`--badge_on-color`</td><td>`var(--bds-on-cta--subtle)`</td><td>Text colour</td></tr>
55
55
  </tbody>
56
56
  </table>
57
57
 
@@ -3,38 +3,38 @@
3
3
  display: inline-flex;
4
4
  align-items: center;
5
5
  justify-content: center;
6
- padding: var(--space_xxs) var(--space_xs);
6
+ padding: var(--bds-space_xxs) var(--bds-space_xs);
7
7
  border-radius: var(--badge_radius, 2em);
8
- font-size: var(--badge_font-size, var(--font_size--body--s));
9
- font-weight: var(--font_weight--semibold);
8
+ font-size: var(--badge_font-size, var(--bds-font_size--body--s));
9
+ font-weight: var(--bds-font_weight--semibold);
10
10
  line-height: 1;
11
11
  white-space: nowrap;
12
- background-color: var(--badge_bg, var(--color_blue));
13
- color: var(--badge_text, var(--color_on-blue));
12
+ background-color: var(--badge_bg, var(--bds-blue));
13
+ color: var(--badge_text, var(--bds-on-blue));
14
14
  }
15
15
 
16
16
  .--variant_primary {
17
- --badge_bg: var(--color_interactive);
18
- --badge_text: var(--color_on-interactive);
17
+ --badge_bg: var(--bds-interactive);
18
+ --badge_text: var(--bds-on-interactive);
19
19
  }
20
20
 
21
21
  .--variant_secondary {
22
- --badge_bg: var(--color_bg);
23
- --badge_text: var(--color_on-bg);
22
+ --badge_bg: var(--bds-bg);
23
+ --badge_text: var(--bds-on-bg);
24
24
  }
25
25
 
26
26
  .--variant_success {
27
- --badge_bg: var(--color_success);
28
- --badge_text: var(--color_on-success);
27
+ --badge_bg: var(--bds-success);
28
+ --badge_text: var(--bds-on-success);
29
29
  }
30
30
 
31
31
  .--variant_error {
32
- --badge_bg: var(--color_error);
33
- --badge_text: var(--color_on-error);
32
+ --badge_bg: var(--bds-error);
33
+ --badge_text: var(--bds-on-error);
34
34
  }
35
35
 
36
36
  .--variant_warning {
37
- --badge_bg: var(--color_warning);
38
- --badge_text: var(--color_on-warning);
37
+ --badge_bg: var(--bds-warning);
38
+ --badge_text: var(--bds-on-warning);
39
39
  }
40
40
  }
@@ -1,13 +1,13 @@
1
1
  @layer component {
2
2
  .breadcrumb {
3
- font-size: var(--font_size--body--s);
3
+ font-size: var(--bds-font_size--body--s);
4
4
  }
5
5
 
6
6
  .list {
7
7
  display: flex;
8
8
  flex-wrap: wrap;
9
9
  align-items: center;
10
- gap: var(--space_xxs);
10
+ gap: var(--bds-space_xxs);
11
11
  list-style: none;
12
12
  margin: 0;
13
13
  padding: 0;
@@ -16,19 +16,19 @@
16
16
  .item {
17
17
  display: flex;
18
18
  align-items: center;
19
- gap: var(--space_xxs);
19
+ gap: var(--bds-space_xxs);
20
20
  }
21
21
 
22
22
  .link {
23
- color: var(--color_interactive);
23
+ color: var(--bds-interactive);
24
24
  text-decoration: none;
25
- transition: var(--animation_transition);
25
+ transition: var(--bds-animation_transition);
26
26
  }
27
27
 
28
28
  .link:focus-visible {
29
- outline: var(--outline_default);
30
- outline-offset: var(--outline_offset);
31
- border-radius: var(--border_radius--xs);
29
+ outline: var(--bds-outline_default);
30
+ outline-offset: var(--bds-outline_offset);
31
+ border-radius: var(--bds-border_radius--xs);
32
32
  }
33
33
 
34
34
  @media (hover: hover) and (pointer: fine) {
@@ -39,12 +39,12 @@
39
39
  }
40
40
 
41
41
  .separator {
42
- color: var(--color_on-bg--subtle);
42
+ color: var(--bds-on-bg--subtle);
43
43
  user-select: none;
44
44
  }
45
45
 
46
46
  .current {
47
- color: var(--color_on-bg--subtle);
48
- font-weight: var(--font_weight--semibold);
47
+ color: var(--bds-on-bg--subtle);
48
+ font-weight: var(--bds-font_weight--semibold);
49
49
  }
50
50
  }
@@ -2,12 +2,17 @@
2
2
  .calendar {
3
3
  display: inline-flex;
4
4
  flex-direction: column;
5
- gap: var(--space_s);
6
- background-color: var(--color_bg);
7
- border: 1px solid var(--color_bg--subtle);
8
- border-radius: var(--border_radius--m);
9
- padding: var(--space_m);
10
- box-shadow: var(--shadow_s);
5
+ gap: var(--bds-space_s);
6
+ background-color: var(--bds-bg);
7
+ border: var(--calendar_border, none);
8
+ --bdc_color: var(--bds-bg--subtle);
9
+ --bdc-outline_radius: var(--bds-border_radius--m);
10
+
11
+ outline: var(--bdc-outline_width) solid var(--bdc_color);
12
+ outline-offset: var(--bdc-outline_offset);
13
+ border-radius: var(--calendar_radius, var(--bdc-outline_radius));
14
+ padding: var(--bds-space_m);
15
+ box-shadow: var(--calendar_shadow, var(--bds-shadow_s));
11
16
  width: 20rem;
12
17
  }
13
18
 
@@ -18,9 +23,9 @@
18
23
  }
19
24
 
20
25
  .monthYear {
21
- font-size: var(--font_size--body);
22
- font-weight: var(--font_weight--semibold);
23
- color: var(--color_on-bg);
26
+ font-size: var(--bds-font_size--body);
27
+ font-weight: var(--bds-font_weight--semibold);
28
+ color: var(--bds-on-bg);
24
29
  }
25
30
 
26
31
  .navBtn {
@@ -32,8 +37,8 @@
32
37
  height: 2rem;
33
38
  border-radius: 50%;
34
39
  cursor: pointer;
35
- color: var(--color_on-bg);
36
- transition: var(--animation_transition);
40
+ color: var(--bds-on-bg);
41
+ transition: var(--bds-animation_transition);
37
42
  }
38
43
 
39
44
  .navBtn svg {
@@ -42,13 +47,13 @@
42
47
  }
43
48
 
44
49
  .navBtn:focus-visible {
45
- outline: var(--outline_default);
46
- outline-offset: var(--outline_offset);
50
+ outline: var(--bds-outline_default);
51
+ outline-offset: var(--bds-outline_offset);
47
52
  }
48
53
 
49
54
  @media (hover: hover) and (pointer: fine) {
50
55
  .navBtn:hover {
51
- background-color: var(--color_bg--subtle);
56
+ background-color: var(--bds-bg--subtle);
52
57
  }
53
58
  }
54
59
 
@@ -59,11 +64,11 @@
59
64
  }
60
65
 
61
66
  .weekday {
62
- font-size: var(--font_size--body--s);
63
- font-weight: var(--font_weight--semibold);
64
- color: var(--color_on-bg--muted);
67
+ font-size: var(--bds-font_size--body--s);
68
+ font-weight: var(--bds-font_weight--semibold);
69
+ color: var(--bds-on-bg);
65
70
  text-align: center;
66
- padding-block-end: var(--space_xs);
71
+ padding-block-end: var(--bds-space_xs);
67
72
  }
68
73
 
69
74
  .empty {
@@ -78,33 +83,38 @@
78
83
  width: 100%;
79
84
  aspect-ratio: 1;
80
85
  border-radius: 50%;
81
- font-size: var(--font_size--body--s);
82
- color: var(--color_on-bg);
86
+ font-size: var(--bds-font_size--body--s);
87
+ color: var(--bds-on-bg);
83
88
  cursor: pointer;
84
- transition: var(--animation_transition);
89
+ transition: var(--bds-animation_transition);
85
90
  box-sizing: border-box;
86
91
  }
87
92
 
88
93
  .day:focus-visible {
89
- outline: var(--outline_default);
90
- outline-offset: var(--outline_offset);
94
+ outline: var(--bds-outline_default);
95
+ outline-offset: var(--bds-outline_offset);
91
96
  }
92
97
 
93
98
  @media (hover: hover) and (pointer: fine) {
94
99
  .day:not(.disabled, .selected):hover {
95
- background-color: var(--color_bg--subtle);
100
+ background-color: var(--bds-bg--subtle);
96
101
  }
97
102
  }
98
103
 
99
104
  .today {
100
- border: 2px solid var(--color_interactive);
101
- font-weight: var(--font_weight--semibold);
105
+ font-weight: var(--bds-font_weight--semibold);
106
+
107
+ --bdc_color: var(--bds-interactive);
108
+
109
+ border: var(--calendar_today-border, none);
110
+ outline: var(--bdc-outline_width) solid var(--bdc_color);
111
+ outline-offset: var(--bdc-outline_offset);
102
112
  }
103
113
 
104
114
  .selected {
105
- background-color: var(--color_interactive);
106
- color: var(--color_on-interactive);
107
- font-weight: var(--font_weight--semibold);
115
+ background-color: var(--bds-interactive);
116
+ color: var(--bds-on-interactive);
117
+ font-weight: var(--bds-font_weight--semibold);
108
118
  }
109
119
 
110
120
  .disabled {
@@ -3,6 +3,10 @@ import css from './Calendar.module.css';
3
3
  import { cn } from '@boostdev/design-system-foundation';
4
4
 
5
5
  const DAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];
6
+ const DAY_LABELS: Record<string, string> = {
7
+ Su: 'Sunday', Mo: 'Monday', Tu: 'Tuesday', We: 'Wednesday',
8
+ Th: 'Thursday', Fr: 'Friday', Sa: 'Saturday',
9
+ };
6
10
  const MONTHS = [
7
11
  'January', 'February', 'March', 'April', 'May', 'June',
8
12
  'July', 'August', 'September', 'October', 'November', 'December',
@@ -138,7 +142,7 @@ export function Calendar({ value, defaultValue, min, max, onChange, className }:
138
142
  <thead>
139
143
  <tr>
140
144
  {DAYS.map(d => (
141
- <th key={d} scope="col" abbr={d} className={css.weekday}>
145
+ <th key={d} scope="col" aria-label={DAY_LABELS[d] ?? d} className={css.weekday}>
142
146
  {d}
143
147
  </th>
144
148
  ))}
@@ -167,7 +171,7 @@ export function Calendar({ value, defaultValue, min, max, onChange, className }:
167
171
  disabled && css.disabled,
168
172
  )}
169
173
  aria-label={date.toLocaleDateString('en', { month: 'long', day: 'numeric', year: 'numeric' })}
170
- aria-pressed={isSelected}
174
+ aria-selected={isSelected}
171
175
  aria-current={isToday ? 'date' : undefined}
172
176
  aria-disabled={disabled}
173
177
  disabled={disabled}