@boostdev/design-system-components 1.1.2 → 1.2.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.
Files changed (169) hide show
  1. package/AGENTS.md +13 -10
  2. package/dist/client.cjs +77 -99
  3. package/dist/client.css +611 -580
  4. package/dist/client.d.cts +13 -16
  5. package/dist/client.d.ts +13 -16
  6. package/dist/client.js +87 -109
  7. package/dist/index.cjs +77 -99
  8. package/dist/index.css +611 -580
  9. package/dist/index.d.cts +13 -16
  10. package/dist/index.d.ts +13 -16
  11. package/dist/index.js +87 -109
  12. package/dist/native/index.cjs +9 -8
  13. package/dist/native/index.d.cts +1 -1
  14. package/dist/native/index.d.ts +1 -1
  15. package/dist/native/index.js +9 -8
  16. package/dist/web-components/{chunk-O4UFI2RX.js → chunk-3REOIRDW.js} +13 -11
  17. package/dist/web-components/{chunk-K5CE6HSB.js → chunk-6MH5UWUD.js} +74 -17
  18. package/dist/web-components/{chunk-VM3YHGQ2.js → chunk-AJSXNDAP.js} +1 -2
  19. package/dist/web-components/{chunk-LSC4N56Q.js → chunk-BX3IPVOB.js} +1 -2
  20. package/dist/web-components/{chunk-CJ5ZOO42.js → chunk-DI46Q2EA.js} +50 -1
  21. package/dist/web-components/{chunk-CAPI25CU.js → chunk-DZRSJGPB.js} +3 -3
  22. package/dist/web-components/{chunk-VSS5ITNE.js → chunk-EBJM3VD4.js} +1 -3
  23. package/dist/web-components/{chunk-O7I63SQX.js → chunk-HHHRF2PS.js} +6 -12
  24. package/dist/web-components/{chunk-OTX4COSV.js → chunk-JUKB3BUP.js} +3 -4
  25. package/dist/web-components/{chunk-IQGLIQSO.js → chunk-N6IMUOY4.js} +2 -5
  26. package/dist/web-components/{chunk-QDRH46TF.js → chunk-QLZ2362S.js} +1 -3
  27. package/dist/web-components/{chunk-IK3PTFZ4.js → chunk-T6AETZRP.js} +1 -3
  28. package/dist/web-components/{chunk-4BX6AWXX.js → chunk-X3FKVHLK.js} +2 -4
  29. package/dist/web-components/{chunk-A67LCT7C.js → chunk-XNA6WTXG.js} +3 -4
  30. package/dist/web-components/{chunk-XIENXR7H.js → chunk-YRXCVKHV.js} +1 -3
  31. package/dist/web-components/{chunk-6T3RKUKG.js → chunk-ZTC6GRP7.js} +1 -2
  32. package/dist/web-components/globals.js +1 -1
  33. package/dist/web-components/index.js +16 -16
  34. package/dist/web-components/interaction/bds-accordion.js +1 -1
  35. package/dist/web-components/interaction/bds-button.d.ts +2 -2
  36. package/dist/web-components/interaction/bds-button.js +1 -1
  37. package/dist/web-components/interaction/bds-dialog.js +1 -1
  38. package/dist/web-components/interaction/bds-drawer.js +1 -1
  39. package/dist/web-components/interaction/form/bds-checkbox.js +1 -1
  40. package/dist/web-components/interaction/form/bds-combobox.js +1 -1
  41. package/dist/web-components/interaction/form/bds-number-input.js +1 -1
  42. package/dist/web-components/interaction/form/bds-radio.js +1 -1
  43. package/dist/web-components/interaction/form/bds-segmented-control.d.ts +20 -3
  44. package/dist/web-components/interaction/form/bds-segmented-control.js +1 -1
  45. package/dist/web-components/interaction/form/bds-select.js +1 -1
  46. package/dist/web-components/interaction/form/bds-switch.js +1 -1
  47. package/dist/web-components/interaction/form/bds-textarea.js +1 -1
  48. package/dist/web-components/ui/bds-alert.js +1 -1
  49. package/dist/web-components/ui/bds-card.js +1 -1
  50. package/dist/web-components/ui/bds-notification-banner.js +1 -1
  51. package/package.json +2 -2
  52. package/src/components/interaction/Button/Button.module.css +12 -11
  53. package/src/components/interaction/Button/Button.native.tsx +10 -9
  54. package/src/components/interaction/Button/Button.tsx +1 -1
  55. package/src/components/interaction/Command/Command.module.css +3 -7
  56. package/src/components/interaction/Dialog/Dialog.module.css +7 -5
  57. package/src/components/interaction/Drawer/Drawer.module.css +49 -1
  58. package/src/components/interaction/DropdownMenu/DropdownMenu.module.css +1 -3
  59. package/src/components/interaction/Popover/Popover.module.css +1 -3
  60. package/src/components/interaction/form/Checkbox/Checkbox.module.css +1 -3
  61. package/src/components/interaction/form/Combobox/Combobox.module.css +2 -6
  62. package/src/components/interaction/form/FormInput/FormInput.module.css +1 -3
  63. package/src/components/interaction/form/NumberInput/NumberInput.module.css +16 -4
  64. package/src/components/interaction/form/Radio/Radio.module.css +6 -16
  65. package/src/components/interaction/form/SegmentedControl/SegmentedControl.mdx +70 -25
  66. package/src/components/interaction/form/SegmentedControl/SegmentedControl.module.css +55 -33
  67. package/src/components/interaction/form/SegmentedControl/SegmentedControl.spec.tsx +127 -56
  68. package/src/components/interaction/form/SegmentedControl/SegmentedControl.stories.tsx +89 -72
  69. package/src/components/interaction/form/SegmentedControl/SegmentedControl.tsx +40 -62
  70. package/src/components/interaction/form/SegmentedControl/index.ts +1 -1
  71. package/src/components/interaction/form/Select/Select.module.css +2 -4
  72. package/src/components/interaction/form/Switch/Switch.module.css +5 -7
  73. package/src/components/interaction/form/Switch/Switch.native.spec.tsx +9 -9
  74. package/src/components/interaction/form/Switch/Switch.native.tsx +2 -2
  75. package/src/components/interaction/form/Textarea/Textarea.module.css +1 -3
  76. package/src/components/interaction/form/atoms/InputContainer.stories.tsx +64 -0
  77. package/src/components/interaction/form/atoms/Label.stories.tsx +33 -0
  78. package/src/components/interaction/form/atoms/Message.stories.tsx +33 -0
  79. package/src/components/layout/Card/Card.module.css +1 -3
  80. package/src/components/ui/Accordion/Accordion.module.css +1 -2
  81. package/src/components/ui/Alert/Alert.module.css +1 -2
  82. package/src/components/ui/Calendar/Calendar.module.css +2 -5
  83. package/src/components/ui/Carousel/Carousel.module.css +1 -3
  84. package/src/components/ui/NotificationBanner/NotificationBanner.module.css +1 -2
  85. package/src/components/ui/Pagination/Pagination.module.css +1 -2
  86. package/src/components/ui/SkipLink/SkipLink.module.css +1 -2
  87. package/src/components/ui/Table/Table.module.css +1 -2
  88. package/src/css/bdc.css +16 -11
  89. package/src/index.ts +1 -1
  90. package/src/web-components/globals.ts +3 -3
  91. package/src/web-components/interaction/BdsAccordion.mdx +51 -0
  92. package/src/web-components/interaction/BdsAccordion.stories.tsx +85 -0
  93. package/src/web-components/interaction/BdsCollapsible.mdx +46 -0
  94. package/src/web-components/interaction/BdsCollapsible.stories.tsx +87 -0
  95. package/src/web-components/interaction/BdsDialog.mdx +49 -0
  96. package/src/web-components/interaction/BdsDialog.stories.tsx +75 -0
  97. package/src/web-components/interaction/BdsDrawer.mdx +50 -0
  98. package/src/web-components/interaction/BdsDrawer.stories.tsx +66 -0
  99. package/src/web-components/interaction/BdsSkipLink.mdx +34 -0
  100. package/src/web-components/interaction/BdsSkipLink.stories.tsx +55 -0
  101. package/src/web-components/interaction/BdsTabs.mdx +47 -0
  102. package/src/web-components/interaction/BdsTabs.stories.tsx +80 -0
  103. package/src/web-components/interaction/BdsTooltip.mdx +38 -0
  104. package/src/web-components/interaction/BdsTooltip.stories.tsx +68 -0
  105. package/src/web-components/interaction/bds-accordion.ts +1 -2
  106. package/src/web-components/interaction/bds-button.ts +15 -13
  107. package/src/web-components/interaction/bds-dialog.ts +2 -5
  108. package/src/web-components/interaction/bds-drawer.ts +50 -1
  109. package/src/web-components/interaction/form/BdsCheckbox.mdx +39 -0
  110. package/src/web-components/interaction/form/BdsCheckbox.stories.tsx +73 -0
  111. package/src/web-components/interaction/form/BdsCombobox.mdx +52 -0
  112. package/src/web-components/interaction/form/BdsCombobox.stories.tsx +91 -0
  113. package/src/web-components/interaction/form/BdsFileInput.mdx +44 -0
  114. package/src/web-components/interaction/form/BdsFileInput.stories.tsx +84 -0
  115. package/src/web-components/interaction/form/BdsNumberInput.mdx +41 -0
  116. package/src/web-components/interaction/form/BdsNumberInput.stories.tsx +90 -0
  117. package/src/web-components/interaction/form/BdsRadio.mdx +41 -0
  118. package/src/web-components/interaction/form/BdsRadio.stories.tsx +90 -0
  119. package/src/web-components/interaction/form/BdsSegmentedControl.mdx +42 -0
  120. package/src/web-components/interaction/form/BdsSegmentedControl.stories.tsx +92 -0
  121. package/src/web-components/interaction/form/BdsSelect.mdx +38 -0
  122. package/src/web-components/interaction/form/BdsSelect.stories.tsx +93 -0
  123. package/src/web-components/interaction/form/BdsSlider.mdx +49 -0
  124. package/src/web-components/interaction/form/BdsSlider.stories.tsx +89 -0
  125. package/src/web-components/interaction/form/BdsSwitch.mdx +39 -0
  126. package/src/web-components/interaction/form/BdsSwitch.stories.tsx +73 -0
  127. package/src/web-components/interaction/form/BdsTextarea.mdx +41 -0
  128. package/src/web-components/interaction/form/BdsTextarea.stories.tsx +79 -0
  129. package/src/web-components/interaction/form/bds-checkbox.ts +1 -3
  130. package/src/web-components/interaction/form/bds-combobox.ts +1 -3
  131. package/src/web-components/interaction/form/bds-number-input.ts +3 -4
  132. package/src/web-components/interaction/form/bds-radio.ts +6 -12
  133. package/src/web-components/interaction/form/bds-segmented-control.ts +91 -20
  134. package/src/web-components/interaction/form/bds-select.ts +2 -4
  135. package/src/web-components/interaction/form/bds-switch.ts +3 -4
  136. package/src/web-components/interaction/form/bds-textarea.ts +1 -3
  137. package/src/web-components/ui/BdsAvatar.mdx +67 -0
  138. package/src/web-components/ui/BdsAvatar.stories.tsx +62 -0
  139. package/src/web-components/ui/BdsBreadcrumb.mdx +63 -0
  140. package/src/web-components/ui/BdsBreadcrumb.stories.tsx +59 -0
  141. package/src/web-components/ui/BdsCard.mdx +83 -0
  142. package/src/web-components/ui/BdsCard.stories.tsx +90 -0
  143. package/src/web-components/ui/BdsDescriptionList.mdx +67 -0
  144. package/src/web-components/ui/BdsDescriptionList.stories.tsx +79 -0
  145. package/src/web-components/ui/BdsIconWrapper.mdx +70 -0
  146. package/src/web-components/ui/BdsIconWrapper.stories.tsx +76 -0
  147. package/src/web-components/ui/BdsLink.mdx +75 -0
  148. package/src/web-components/ui/BdsLink.stories.tsx +64 -0
  149. package/src/web-components/ui/BdsLoading.mdx +62 -0
  150. package/src/web-components/ui/BdsLoading.stories.tsx +37 -0
  151. package/src/web-components/ui/BdsNotificationBanner.mdx +90 -0
  152. package/src/web-components/ui/BdsNotificationBanner.stories.tsx +93 -0
  153. package/src/web-components/ui/BdsProgress.mdx +63 -0
  154. package/src/web-components/ui/BdsProgress.stories.tsx +70 -0
  155. package/src/web-components/ui/BdsProgressCircle.mdx +64 -0
  156. package/src/web-components/ui/BdsProgressCircle.stories.tsx +69 -0
  157. package/src/web-components/ui/BdsRating.mdx +61 -0
  158. package/src/web-components/ui/BdsRating.stories.tsx +39 -0
  159. package/src/web-components/ui/BdsSectionHeader.mdx +69 -0
  160. package/src/web-components/ui/BdsSectionHeader.stories.tsx +56 -0
  161. package/src/web-components/ui/BdsSeparator.mdx +63 -0
  162. package/src/web-components/ui/BdsSeparator.stories.tsx +47 -0
  163. package/src/web-components/ui/BdsSkeleton.mdx +67 -0
  164. package/src/web-components/ui/BdsSkeleton.stories.tsx +50 -0
  165. package/src/web-components/ui/BdsTypography.mdx +83 -0
  166. package/src/web-components/ui/BdsTypography.stories.tsx +51 -0
  167. package/src/web-components/ui/bds-alert.ts +1 -2
  168. package/src/web-components/ui/bds-card.ts +1 -3
  169. package/src/web-components/ui/bds-notification-banner.ts +1 -2
@@ -1,36 +1,36 @@
1
1
  import {
2
2
  BdsSwitch
3
- } from "./chunk-A67LCT7C.js";
3
+ } from "./chunk-XNA6WTXG.js";
4
4
  import {
5
5
  BdsTextarea
6
- } from "./chunk-VSS5ITNE.js";
6
+ } from "./chunk-EBJM3VD4.js";
7
7
  import {
8
8
  BdsCheckbox
9
- } from "./chunk-IK3PTFZ4.js";
9
+ } from "./chunk-T6AETZRP.js";
10
10
  import {
11
11
  BdsCombobox
12
- } from "./chunk-QDRH46TF.js";
12
+ } from "./chunk-QLZ2362S.js";
13
13
  import {
14
14
  BdsFileInput
15
15
  } from "./chunk-PY62FTRW.js";
16
16
  import {
17
17
  BdsNumberInput
18
- } from "./chunk-OTX4COSV.js";
18
+ } from "./chunk-JUKB3BUP.js";
19
19
  import {
20
20
  BdsRadio
21
- } from "./chunk-O7I63SQX.js";
21
+ } from "./chunk-HHHRF2PS.js";
22
22
  import {
23
23
  BdsSegmentedControl
24
- } from "./chunk-K5CE6HSB.js";
24
+ } from "./chunk-6MH5UWUD.js";
25
25
  import {
26
26
  BdsSelect
27
- } from "./chunk-4BX6AWXX.js";
27
+ } from "./chunk-X3FKVHLK.js";
28
28
  import {
29
29
  BdsSlider
30
30
  } from "./chunk-7FMR53BW.js";
31
31
  import {
32
32
  BdsDrawer
33
- } from "./chunk-CJ5ZOO42.js";
33
+ } from "./chunk-DI46Q2EA.js";
34
34
  import {
35
35
  BdsPopover
36
36
  } from "./chunk-ECW3HHWA.js";
@@ -63,19 +63,19 @@ import {
63
63
  } from "./chunk-SOQQ7RVJ.js";
64
64
  import {
65
65
  BdsAccordion
66
- } from "./chunk-6T3RKUKG.js";
66
+ } from "./chunk-ZTC6GRP7.js";
67
67
  import {
68
68
  BdsAccordionItem
69
69
  } from "./chunk-UFFCKVZE.js";
70
70
  import {
71
71
  BdsButton
72
- } from "./chunk-O4UFI2RX.js";
72
+ } from "./chunk-3REOIRDW.js";
73
73
  import {
74
74
  BdsCollapsible
75
75
  } from "./chunk-5IPHEONG.js";
76
76
  import {
77
77
  BdsDialog
78
- } from "./chunk-IQGLIQSO.js";
78
+ } from "./chunk-N6IMUOY4.js";
79
79
  import {
80
80
  BdsIconWrapper
81
81
  } from "./chunk-5TFWOPLH.js";
@@ -87,7 +87,7 @@ import {
87
87
  } from "./chunk-5R6IFELV.js";
88
88
  import {
89
89
  BdsNotificationBanner
90
- } from "./chunk-VM3YHGQ2.js";
90
+ } from "./chunk-AJSXNDAP.js";
91
91
  import {
92
92
  BdsProgress
93
93
  } from "./chunk-ITHLKR7Q.js";
@@ -101,10 +101,10 @@ import {
101
101
  BdsSectionHeader
102
102
  } from "./chunk-Y4MAXTMA.js";
103
103
  import "./chunk-QPOKHLMQ.js";
104
- import "./chunk-CAPI25CU.js";
104
+ import "./chunk-DZRSJGPB.js";
105
105
  import {
106
106
  BdsAlert
107
- } from "./chunk-LSC4N56Q.js";
107
+ } from "./chunk-BX3IPVOB.js";
108
108
  import {
109
109
  BdsAvatar
110
110
  } from "./chunk-57TRNCWQ.js";
@@ -116,7 +116,7 @@ import {
116
116
  } from "./chunk-Q4T5BJT6.js";
117
117
  import {
118
118
  BdsCard
119
- } from "./chunk-XIENXR7H.js";
119
+ } from "./chunk-YRXCVKHV.js";
120
120
  import {
121
121
  BdsDescriptionList
122
122
  } from "./chunk-AGKJTMJI.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  BdsAccordion
3
- } from "../chunk-6T3RKUKG.js";
3
+ } from "../chunk-ZTC6GRP7.js";
4
4
  import "../chunk-LGEZYFUU.js";
5
5
  export {
6
6
  BdsAccordion
@@ -1,13 +1,13 @@
1
1
  import * as lit from 'lit';
2
2
  import { LitElement } from 'lit';
3
3
 
4
- type ButtonVariant = 'default' | 'ghost';
4
+ type ButtonVariant = 'default' | 'outline' | 'ghost';
5
5
  type ButtonSize = 'small' | 'medium' | 'large';
6
6
  /**
7
7
  * `<bds-button>` — framework-agnostic Button custom element.
8
8
  *
9
9
  * Attributes:
10
- * variant — "default" (filled, default) | "ghost" (transparent + outlined)
10
+ * variant — "default" (filled, default) | "outline" (transparent + outlined) | "ghost" (deprecated alias for "outline")
11
11
  * size — "small" | "medium" (default) | "large"
12
12
  * disabled — boolean
13
13
  * href — renders an <a> tag instead of <button>
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  BdsButton
3
- } from "../chunk-O4UFI2RX.js";
3
+ } from "../chunk-3REOIRDW.js";
4
4
  import "../chunk-LGEZYFUU.js";
5
5
  export {
6
6
  BdsButton
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  BdsDialog
3
- } from "../chunk-IQGLIQSO.js";
3
+ } from "../chunk-N6IMUOY4.js";
4
4
  import "../chunk-LGEZYFUU.js";
5
5
  export {
6
6
  BdsDialog
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  BdsDrawer
3
- } from "../chunk-CJ5ZOO42.js";
3
+ } from "../chunk-DI46Q2EA.js";
4
4
  import "../chunk-LGEZYFUU.js";
5
5
  export {
6
6
  BdsDrawer
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  BdsCheckbox
3
- } from "../../chunk-IK3PTFZ4.js";
3
+ } from "../../chunk-T6AETZRP.js";
4
4
  import "../../chunk-LGEZYFUU.js";
5
5
  export {
6
6
  BdsCheckbox
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  BdsCombobox
3
- } from "../../chunk-QDRH46TF.js";
3
+ } from "../../chunk-QLZ2362S.js";
4
4
  import "../../chunk-LGEZYFUU.js";
5
5
  export {
6
6
  BdsCombobox
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  BdsNumberInput
3
- } from "../../chunk-OTX4COSV.js";
3
+ } from "../../chunk-JUKB3BUP.js";
4
4
  import "../../chunk-LGEZYFUU.js";
5
5
  export {
6
6
  BdsNumberInput
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  BdsRadio
3
- } from "../../chunk-O7I63SQX.js";
3
+ } from "../../chunk-HHHRF2PS.js";
4
4
  import "../../chunk-LGEZYFUU.js";
5
5
  export {
6
6
  BdsRadio
@@ -5,22 +5,25 @@ interface SegmentedOption {
5
5
  value: string;
6
6
  label: string;
7
7
  disabled?: boolean;
8
+ /** When set, renders the option as an <a> link instead of a radio button */
9
+ href?: string;
8
10
  }
9
11
  /**
10
12
  * `<bds-segmented-control>` — form-associated Segmented Control custom element.
11
13
  *
12
- * Renders a group of radio buttons styled as a unified segmented control.
14
+ * Renders a group of radio buttons (or links) styled as a unified segmented control.
13
15
  * Passes a JSON `options` attribute because reactive slot content can't be
14
16
  * easily converted to radio groups.
15
17
  *
16
18
  * Attributes:
17
19
  * name — form field name (also used for the internal radio group)
18
20
  * value — currently selected value
19
- * options — JSON array of `{ value, label, disabled? }` option objects
21
+ * options — JSON array of `{ value, label, disabled?, href? }` option objects
20
22
  * disabled — boolean; disables all options
23
+ * variant — "outline" (inset border on active item, default) | "filled" (sliding thumb)
21
24
  *
22
25
  * Events:
23
- * change — fired when a new segment is selected
26
+ * change — fired when a new segment is selected (radio mode only)
24
27
  *
25
28
  * @example
26
29
  * <bds-segmented-control
@@ -28,6 +31,13 @@ interface SegmentedOption {
28
31
  * value="list"
29
32
  * options='[{"value":"list","label":"List"},{"value":"grid","label":"Grid"}]'
30
33
  * ></bds-segmented-control>
34
+ *
35
+ * @example Outline variant with links
36
+ * <bds-segmented-control
37
+ * variant="outline"
38
+ * value="home"
39
+ * options='[{"value":"home","label":"Home","href":"/"},{"value":"about","label":"About","href":"/about"}]'
40
+ * ></bds-segmented-control>
31
41
  */
32
42
  declare class BdsSegmentedControl extends LitElement {
33
43
  static formAssociated: boolean;
@@ -47,17 +57,24 @@ declare class BdsSegmentedControl extends LitElement {
47
57
  type: BooleanConstructor;
48
58
  reflect: boolean;
49
59
  };
60
+ variant: {
61
+ type: StringConstructor;
62
+ reflect: boolean;
63
+ };
50
64
  };
51
65
  name: string;
52
66
  value: string;
53
67
  options: string;
54
68
  disabled: boolean;
69
+ variant: 'outline' | 'filled';
55
70
  private _internals;
56
71
  private readonly _uid;
57
72
  constructor();
58
73
  private get _options();
59
74
  updated(changed: Map<string, unknown>): void;
75
+ private _positionSlider;
60
76
  private _updateThumb;
77
+ private _updateIndicator;
61
78
  formResetCallback(): void;
62
79
  private _handleChange;
63
80
  render(): lit.TemplateResult<1>;
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  BdsSegmentedControl
3
- } from "../../chunk-K5CE6HSB.js";
3
+ } from "../../chunk-6MH5UWUD.js";
4
4
  import "../../chunk-LGEZYFUU.js";
5
5
  export {
6
6
  BdsSegmentedControl
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  BdsSelect
3
- } from "../../chunk-4BX6AWXX.js";
3
+ } from "../../chunk-X3FKVHLK.js";
4
4
  import "../../chunk-LGEZYFUU.js";
5
5
  export {
6
6
  BdsSelect
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  BdsSwitch
3
- } from "../../chunk-A67LCT7C.js";
3
+ } from "../../chunk-XNA6WTXG.js";
4
4
  import "../../chunk-LGEZYFUU.js";
5
5
  export {
6
6
  BdsSwitch
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  BdsTextarea
3
- } from "../../chunk-VSS5ITNE.js";
3
+ } from "../../chunk-EBJM3VD4.js";
4
4
  import "../../chunk-LGEZYFUU.js";
5
5
  export {
6
6
  BdsTextarea
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  BdsAlert
3
- } from "../chunk-LSC4N56Q.js";
3
+ } from "../chunk-BX3IPVOB.js";
4
4
  import "../chunk-LGEZYFUU.js";
5
5
  export {
6
6
  BdsAlert
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  BdsCard
3
- } from "../chunk-XIENXR7H.js";
3
+ } from "../chunk-YRXCVKHV.js";
4
4
  import "../chunk-LGEZYFUU.js";
5
5
  export {
6
6
  BdsCard
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  BdsNotificationBanner
3
- } from "../chunk-VM3YHGQ2.js";
3
+ } from "../chunk-AJSXNDAP.js";
4
4
  import "../chunk-LGEZYFUU.js";
5
5
  export {
6
6
  BdsNotificationBanner
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@boostdev/design-system-components",
3
- "version": "1.1.2",
3
+ "version": "1.2.0",
4
4
  "description": "BoostDev React component library: accessible, token-driven components built on @boostdev/design-system-foundation",
5
5
  "keywords": [
6
6
  "React",
@@ -271,7 +271,7 @@
271
271
  "typecheck": "tsc --noEmit",
272
272
  "lint": "eslint src",
273
273
  "lint:css": "stylelint \"src/**/*.css\"",
274
- "storybook": "storybook dev -p 6006",
274
+ "storybook": "storybook dev -p 6006 --no-manager-cache",
275
275
  "build-storybook": "storybook build",
276
276
  "test": "vitest run",
277
277
  "test:watch": "vitest",
@@ -13,17 +13,17 @@
13
13
  @keyframes pulse {
14
14
  0% {
15
15
  transform: scale(1);
16
- box-shadow: 0 0 0 0 rgb(from var(--button_pulse-color, var(--button_color, var(--bds-color_green))) r g b / 50%);
16
+ box-shadow: 0 0 0 0 rgb(from var(--button_pulse-color, var(--button_color, var(--bds-color_interactive))) r g b / 50%);
17
17
  }
18
18
 
19
19
  70% {
20
20
  transform: scale(1.01);
21
- box-shadow: 0 0 0 var(--bds-space_m) rgb(from var(--button_pulse-color, var(--button_color, var(--bds-color_green))) r g b / 0%);
21
+ box-shadow: 0 0 0 var(--bds-space_m) rgb(from var(--button_pulse-color, var(--button_color, var(--bds-color_interactive))) r g b / 0%);
22
22
  }
23
23
 
24
24
  100% {
25
25
  transform: scale(1);
26
- box-shadow: 0 0 0 0 rgb(from var(--button_pulse-color, var(--button_color, var(--bds-color_green))) r g b / 0%);
26
+ box-shadow: 0 0 0 0 rgb(from var(--button_pulse-color, var(--button_color, var(--bds-color_interactive))) r g b / 0%);
27
27
  }
28
28
  }
29
29
 
@@ -47,27 +47,27 @@
47
47
  line-height: 1;
48
48
 
49
49
  /* Colour model: override --button_color + --button_on-color to re-theme */
50
- --button_color: var(--bds-color_green);
51
- --button_on-color: var(--bds-color_on-green);
50
+ --button_color: var(--bds-color_interactive);
51
+ --button_on-color: var(--bds-color_on-interactive);
52
52
 
53
53
  /* Text-safe variant of --button_color for use on page background (ghost text/border) */
54
- --button_color--on-bg: var(--bds-color_green--strong);
54
+ --button_color--on-bg: var(--bds-color_interactive_on-bg);
55
55
 
56
56
  background-color: var(--button_bg, var(--button_color));
57
57
  color: var(--button_text, var(--button_on-color));
58
58
  border: var(--button_border, none);
59
59
  --bdc_color: transparent;
60
60
 
61
- outline: var(--bdc-outline_width) solid var(--bdc_color);
62
- outline-offset: var(--bdc-outline_offset);
61
+ box-shadow: inset 0 0 0 var(--bdc-outline_width) var(--bdc_color);
63
62
  transition: var(--bds-animation_transition), --bdc_color var(--bds-animation_transition-duration) var(--bds-animation_easing);
64
63
  }
65
64
 
66
65
  /* Default: filled with --button_color, no visible border */
67
66
  .button.--default { /* inherits base — no overrides needed */ }
68
67
 
69
- /* Ghost: transparent background, border and text use text-safe --button_color--on-bg */
70
- .button.--ghost {
68
+ /* Outline: transparent background, border and text use text-safe --button_color--on-bg */
69
+ .button.--outline,
70
+ .button.--ghost /* @deprecated — use variant="outline" */ {
71
71
  --button_bg: transparent;
72
72
  --button_text: var(--button_color--on-bg);
73
73
  --bdc_color: var(--button_color--on-bg);
@@ -150,8 +150,9 @@
150
150
  }
151
151
  }
152
152
 
153
- /* Ghost hover: fills with --button_color */
153
+ /* Outline hover: fills with --button_color */
154
154
  @media (hover: hover) and (pointer: fine) {
155
+ .button.--outline:hover,
155
156
  .button.--ghost:hover {
156
157
  --button_bg: var(--button_color);
157
158
  --button_text: var(--button_on-color);
@@ -3,7 +3,7 @@ import { StyleSheet, Pressable, Text, View, StyleProp, ViewStyle } from 'react-n
3
3
  import { spacing, font, border } from '../../../native/tokens';
4
4
  import { useTheme } from '../../../native/ThemeContext';
5
5
 
6
- type ButtonVariant = 'default' | 'ghost';
6
+ type ButtonVariant = 'default' | 'outline' | 'ghost'; // 'ghost' is deprecated, use 'outline'
7
7
  type ButtonSize = 'small' | 'medium' | 'large';
8
8
 
9
9
  export interface ButtonProps {
@@ -53,26 +53,27 @@ export function Button({
53
53
  const { colors } = useTheme();
54
54
  const { height, px, fontSize, radius } = sizeTokens[size];
55
55
 
56
- // Color model: filled = green bg, ghost = transparent bg + darker green border/text
57
- const primaryColor = colors.colorGreen;
58
- const onPrimaryColor = colors.colorOnGreen;
59
- // Ghost uses colorGreenStrong for text/border — colorGreen (#00c950) fails 3:1 on white (2.15:1)
60
- const ghostTextColor = colors.colorGreenStrong;
56
+ // Color model: filled = interactive bg, outline = transparent bg + interactive_on-bg border/text
57
+ const primaryColor = colors.colorInteractive;
58
+ const onPrimaryColor = colors.colorOnInteractive;
59
+ // Outline uses colorInteractiveOnBg for text/border — colorInteractive may not meet 3:1 on white
60
+ const outlineTextColor = colors.colorInteractiveOnBg;
61
61
 
62
+ const isOutline = variant === 'outline' || variant === 'ghost';
62
63
  const containerStyle: ViewStyle = {
63
64
  height,
64
65
  paddingHorizontal: px,
65
66
  borderRadius: radius,
66
67
  opacity: disabled ? 0.4 : 1,
67
68
  ...(variant === 'default' && { backgroundColor: primaryColor }),
68
- ...(variant === 'ghost' && {
69
+ ...(isOutline && {
69
70
  backgroundColor: 'transparent',
70
71
  borderWidth: 1,
71
- borderColor: ghostTextColor,
72
+ borderColor: outlineTextColor,
72
73
  }),
73
74
  };
74
75
 
75
- const textColor = variant === 'default' ? onPrimaryColor : ghostTextColor;
76
+ const textColor = variant === 'default' ? onPrimaryColor : outlineTextColor;
76
77
 
77
78
  return (
78
79
  <Pressable
@@ -5,7 +5,7 @@ import type { WithClassName } from '../../../types';
5
5
 
6
6
  export interface ButtonProps extends WithClassName, ButtonHTMLAttributes<HTMLButtonElement | HTMLAnchorElement> {
7
7
  href?: string;
8
- variant?: 'default' | 'ghost';
8
+ variant?: 'default' | 'outline' | /** @deprecated Use "outline" instead */ 'ghost';
9
9
  type?: 'button' | 'submit' | 'reset';
10
10
  size?: 'small' | 'medium' | 'large';
11
11
  iconStart?: ReactNode;
@@ -21,15 +21,13 @@
21
21
  background-color: var(--command_color, var(--bds-color_bg));
22
22
  color: var(--command_on-color, var(--bds-color_on-bg));
23
23
  border-radius: var(--bds-border_radius--m);
24
- box-shadow: var(--command_shadow, var(--bds-shadow_xl));
25
24
  overflow: hidden;
26
25
  max-block-size: 70vh;
27
26
  border: var(--command_border, none);
28
27
  --bdc_color: currentcolor;
29
28
  --bdc-outline_radius: var(--bds-border_radius--m);
30
29
 
31
- outline: var(--bdc-outline_width) solid var(--bdc_color);
32
- outline-offset: var(--bdc-outline_offset);
30
+ box-shadow: inset 0 0 0 var(--bdc-outline_width) var(--bdc_color), var(--command_shadow, var(--bds-shadow_xl));
33
31
  }
34
32
 
35
33
  .searchRow {
@@ -73,8 +71,7 @@
73
71
  --bdc_color: currentcolor;
74
72
 
75
73
  border: none;
76
- outline: var(--bdc-outline_width) solid var(--bdc_color);
77
- outline-offset: var(--bdc-outline_offset);
74
+ box-shadow: inset 0 0 0 var(--bdc-outline_width) var(--bdc_color);
78
75
  }
79
76
 
80
77
  .list {
@@ -132,8 +129,7 @@
132
129
  --bdc_color: currentcolor;
133
130
 
134
131
  border: none;
135
- outline: var(--bdc-outline_width) solid var(--bdc_color);
136
- outline-offset: var(--bdc-outline_offset);
132
+ box-shadow: inset 0 0 0 var(--bdc-outline_width) var(--bdc_color);
137
133
  }
138
134
 
139
135
  .empty {
@@ -5,10 +5,8 @@
5
5
  --bdc_color: currentcolor;
6
6
  --bdc-outline_radius: var(--bds-border_radius--m);
7
7
 
8
- outline: var(--bdc-outline_width) solid var(--bdc_color);
9
- outline-offset: var(--bdc-outline_offset);
10
8
  border-radius: var(--dialog_radius, var(--bdc-outline_radius));
11
- box-shadow: var(--dialog_shadow, var(--bdc-outline_shadow));
9
+ box-shadow: inset 0 0 0 var(--bdc-outline_width) var(--bdc_color), var(--dialog_shadow, var(--bdc-outline_shadow));
12
10
  background-color: var(--dialog_color ,var(--bds-color_grey--subtle));
13
11
  color: var(--dialog_on-color, var(--bds-color_on-grey--subtle));
14
12
  padding: var(--bds-space_l);
@@ -41,11 +39,15 @@
41
39
  border: var(--dialog_close-border, none);
42
40
  --bdc_color: currentcolor;
43
41
 
44
- outline: var(--bdc-outline_width) solid var(--bdc_color);
45
- outline-offset: var(--bdc-outline_offset);
42
+ box-shadow: inset 0 0 0 var(--bdc-outline_width) var(--bdc_color);
46
43
  cursor: pointer;
47
44
  }
48
45
 
46
+ .closeButton:focus-visible {
47
+ outline: var(--bds-outline_default);
48
+ outline-offset: var(--bds-outline_offset);
49
+ }
50
+
49
51
  .closeButton svg {
50
52
  inline-size: 1.25em;
51
53
  block-size: 1.25em;
@@ -11,16 +11,32 @@
11
11
  border: none;
12
12
  background: transparent;
13
13
  overflow: hidden;
14
+ transition:
15
+ display var(--bds-animation_transition-duration) allow-discrete,
16
+ overlay var(--bds-animation_transition-duration) allow-discrete;
14
17
  }
15
18
 
16
19
  .drawer::backdrop {
17
20
  background-color: var(--color_backdrop, rgb(0 0 0 / 50%));
18
21
  backdrop-filter: blur(3px);
22
+ transition:
23
+ display var(--bds-animation_transition-duration) allow-discrete,
24
+ overlay var(--bds-animation_transition-duration) allow-discrete,
25
+ background-color var(--bds-animation_transition-duration) var(--bds-animation_easing),
26
+ backdrop-filter var(--bds-animation_transition-duration) var(--bds-animation_easing);
27
+ }
28
+
29
+ @starting-style {
30
+ .drawer[open]::backdrop {
31
+ background-color: transparent;
32
+ backdrop-filter: blur(0);
33
+ }
19
34
  }
20
35
 
21
36
  .panel {
22
37
  position: absolute;
23
38
  inset-block: 0;
39
+ inset-inline: auto;
24
40
  display: flex;
25
41
  flex-direction: column;
26
42
  inline-size: min(28rem, 90vw);
@@ -29,15 +45,40 @@
29
45
  color: var(--drawer_on-color, var(--bds-color_on-bg));
30
46
  box-shadow: var(--bds-shadow_xl);
31
47
  overflow: hidden;
32
- transition: var(--bds-animation_transition);
48
+ translate: 100% 0;
49
+ transition: translate var(--bds-animation_transition-duration) var(--bds-animation_easing);
33
50
  }
34
51
 
35
52
  .--side_right .panel {
36
53
  inset-inline-end: 0;
54
+ translate: 100% 0;
37
55
  }
38
56
 
39
57
  .--side_left .panel {
40
58
  inset-inline-start: 0;
59
+ translate: -100% 0;
60
+ }
61
+
62
+ .drawer[open] .panel {
63
+ translate: 0 0;
64
+ }
65
+
66
+ .drawer[open].--side_right .panel {
67
+ animation: bdc-drawer-slide-right var(--bds-animation_transition-duration) var(--bds-animation_easing) both;
68
+ }
69
+
70
+ .drawer[open].--side_left .panel {
71
+ animation: bdc-drawer-slide-left var(--bds-animation_transition-duration) var(--bds-animation_easing) both;
72
+ }
73
+
74
+ @keyframes bdc-drawer-slide-right {
75
+ from { translate: 100% 0; }
76
+ to { translate: 0 0; }
77
+ }
78
+
79
+ @keyframes bdc-drawer-slide-left {
80
+ from { translate: -100% 0; }
81
+ to { translate: 0 0; }
41
82
  }
42
83
 
43
84
  .header {
@@ -86,8 +127,15 @@
86
127
  }
87
128
 
88
129
  @media (prefers-reduced-motion: reduce) {
130
+ .drawer,
131
+ .drawer::backdrop,
89
132
  .panel {
90
133
  transition: none;
91
134
  }
135
+
136
+ .drawer[open].--side_right .panel,
137
+ .drawer[open].--side_left .panel {
138
+ animation: none;
139
+ }
92
140
  }
93
141
  }
@@ -14,12 +14,10 @@
14
14
  --bdc_color: currentcolor;
15
15
  --bdc-outline_radius: var(--bds-border_radius--s);
16
16
 
17
- outline: var(--bdc-outline_width) solid var(--bdc_color);
18
- outline-offset: var(--bdc-outline_offset);
19
17
  border-radius: var(--dropdown_radius, var(--bdc-outline_radius));
20
18
  background-color: var(--dropdown_color, var(--bds-color_bg));
21
19
  color: var(--dropdown_on-color, var(--bds-color_on-bg));
22
- box-shadow: var(--dropdown_shadow, var(--bds-shadow_m));
20
+ box-shadow: inset 0 0 0 var(--bdc-outline_width) var(--bdc_color), var(--dropdown_shadow, var(--bds-shadow_m));
23
21
  list-style: none;
24
22
  margin: 0;
25
23
  }
@@ -25,11 +25,9 @@
25
25
  --bdc_color: currentcolor;
26
26
  --bdc-outline_radius: var(--bds-border_radius--s);
27
27
 
28
- outline: var(--bdc-outline_width) solid var(--bdc_color);
29
- outline-offset: var(--bdc-outline_offset);
30
28
  border-radius: var(--popover_radius, var(--bdc-outline_radius));
31
29
  background-color: var(--popover_color, var(--bds-color_bg));
32
- box-shadow: var(--popover_shadow, var(--bds-shadow_m));
30
+ box-shadow: inset 0 0 0 var(--bdc-outline_width) var(--bdc_color), var(--popover_shadow, var(--bds-shadow_m));
33
31
  color: var(--popover_on-color, var(--bds-color_on-bg));
34
32
  font-size: var(--bds-font_size--body);
35
33
  }
@@ -21,10 +21,8 @@
21
21
  --bdc_color: currentcolor;
22
22
  --bdc-outline_radius: var(--bds-border_radius--xs);
23
23
 
24
- outline: var(--bdc-outline_width) solid var(--bdc_color);
25
- outline-offset: var(--bdc-outline_offset);
26
24
  border-radius: var(--checkbox_radius, var(--bdc-outline_radius));
27
- box-shadow: var(--checkbox_shadow, var(--bdc-outline_shadow));
25
+ box-shadow: inset 0 0 0 var(--bdc-outline_width) var(--bdc_color), var(--checkbox_shadow, var(--bdc-outline_shadow));
28
26
  appearance: none;
29
27
  background-color: var(--checkbox_color_bg, var(--bds-color_bg));
30
28
  cursor: pointer;