@boostdev/design-system-components 1.1.2 → 1.2.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 (213) hide show
  1. package/AGENTS.md +38 -14
  2. package/dist/client.cjs +85 -103
  3. package/dist/client.css +610 -601
  4. package/dist/client.d.cts +13 -16
  5. package/dist/client.d.ts +13 -16
  6. package/dist/client.js +95 -113
  7. package/dist/index.cjs +85 -103
  8. package/dist/index.css +610 -601
  9. package/dist/index.d.cts +13 -16
  10. package/dist/index.d.ts +13 -16
  11. package/dist/index.js +95 -113
  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-K5CE6HSB.js → chunk-2FGATTGT.js} +79 -17
  17. package/dist/web-components/{chunk-O4UFI2RX.js → chunk-3REOIRDW.js} +13 -11
  18. package/dist/web-components/{chunk-5IPHEONG.js → chunk-6I2DBFQ7.js} +1 -0
  19. package/dist/web-components/{chunk-VM3YHGQ2.js → chunk-AJSXNDAP.js} +1 -2
  20. package/dist/web-components/{chunk-LSC4N56Q.js → chunk-BX3IPVOB.js} +1 -2
  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-CJ5ZOO42.js → chunk-OCODKRVZ.js} +68 -44
  27. package/dist/web-components/{chunk-QDRH46TF.js → chunk-QLZ2362S.js} +1 -3
  28. package/dist/web-components/{chunk-IK3PTFZ4.js → chunk-T6AETZRP.js} +1 -3
  29. package/dist/web-components/{chunk-4BX6AWXX.js → chunk-X3FKVHLK.js} +2 -4
  30. package/dist/web-components/{chunk-A67LCT7C.js → chunk-XNA6WTXG.js} +3 -4
  31. package/dist/web-components/{chunk-XIENXR7H.js → chunk-YRXCVKHV.js} +1 -3
  32. package/dist/web-components/{chunk-6T3RKUKG.js → chunk-ZTC6GRP7.js} +1 -2
  33. package/dist/web-components/globals.js +1 -1
  34. package/dist/web-components/index.d.ts +571 -1
  35. package/dist/web-components/index.js +1515 -18
  36. package/dist/web-components/interaction/bds-accordion.js +1 -1
  37. package/dist/web-components/interaction/bds-button.d.ts +2 -2
  38. package/dist/web-components/interaction/bds-button.js +1 -1
  39. package/dist/web-components/interaction/bds-collapsible.js +1 -1
  40. package/dist/web-components/interaction/bds-dialog.js +1 -1
  41. package/dist/web-components/interaction/bds-drawer.js +1 -1
  42. package/dist/web-components/interaction/form/bds-checkbox.js +1 -1
  43. package/dist/web-components/interaction/form/bds-combobox.js +1 -1
  44. package/dist/web-components/interaction/form/bds-number-input.js +1 -1
  45. package/dist/web-components/interaction/form/bds-radio.js +1 -1
  46. package/dist/web-components/interaction/form/bds-segmented-control.d.ts +20 -3
  47. package/dist/web-components/interaction/form/bds-segmented-control.js +1 -1
  48. package/dist/web-components/interaction/form/bds-select.js +1 -1
  49. package/dist/web-components/interaction/form/bds-switch.js +1 -1
  50. package/dist/web-components/interaction/form/bds-textarea.js +1 -1
  51. package/dist/web-components/ui/bds-alert.js +1 -1
  52. package/dist/web-components/ui/bds-card.js +1 -1
  53. package/dist/web-components/ui/bds-notification-banner.js +1 -1
  54. package/package.json +2 -2
  55. package/src/components/interaction/Button/Button.module.css +12 -11
  56. package/src/components/interaction/Button/Button.native.tsx +10 -9
  57. package/src/components/interaction/Button/Button.tsx +1 -1
  58. package/src/components/interaction/Command/Command.module.css +3 -7
  59. package/src/components/interaction/Dialog/Dialog.module.css +7 -5
  60. package/src/components/interaction/Drawer/Drawer.module.css +48 -25
  61. package/src/components/interaction/Drawer/Drawer.tsx +21 -17
  62. package/src/components/interaction/DropdownMenu/DropdownMenu.module.css +1 -3
  63. package/src/components/interaction/Popover/Popover.module.css +1 -3
  64. package/src/components/interaction/form/Checkbox/Checkbox.module.css +1 -3
  65. package/src/components/interaction/form/Combobox/Combobox.module.css +2 -6
  66. package/src/components/interaction/form/FormInput/FormInput.module.css +1 -3
  67. package/src/components/interaction/form/NumberInput/NumberInput.module.css +16 -4
  68. package/src/components/interaction/form/Radio/Radio.module.css +6 -16
  69. package/src/components/interaction/form/SegmentedControl/SegmentedControl.mdx +74 -25
  70. package/src/components/interaction/form/SegmentedControl/SegmentedControl.module.css +65 -36
  71. package/src/components/interaction/form/SegmentedControl/SegmentedControl.spec.tsx +127 -56
  72. package/src/components/interaction/form/SegmentedControl/SegmentedControl.stories.tsx +89 -72
  73. package/src/components/interaction/form/SegmentedControl/SegmentedControl.tsx +40 -62
  74. package/src/components/interaction/form/SegmentedControl/index.ts +1 -1
  75. package/src/components/interaction/form/Select/Select.module.css +2 -4
  76. package/src/components/interaction/form/Switch/Switch.module.css +5 -7
  77. package/src/components/interaction/form/Switch/Switch.native.spec.tsx +9 -9
  78. package/src/components/interaction/form/Switch/Switch.native.tsx +2 -2
  79. package/src/components/interaction/form/Textarea/Textarea.module.css +1 -3
  80. package/src/components/interaction/form/atoms/InputContainer.stories.tsx +64 -0
  81. package/src/components/interaction/form/atoms/Label.stories.tsx +33 -0
  82. package/src/components/interaction/form/atoms/Message.stories.tsx +33 -0
  83. package/src/components/layout/Card/Card.module.css +1 -3
  84. package/src/components/ui/Accordion/Accordion.module.css +1 -2
  85. package/src/components/ui/Alert/Alert.module.css +1 -2
  86. package/src/components/ui/Calendar/Calendar.module.css +2 -5
  87. package/src/components/ui/Carousel/Carousel.module.css +1 -3
  88. package/src/components/ui/NotificationBanner/NotificationBanner.module.css +1 -2
  89. package/src/components/ui/Pagination/Pagination.module.css +1 -2
  90. package/src/components/ui/SkipLink/SkipLink.module.css +1 -2
  91. package/src/components/ui/Table/Table.module.css +1 -2
  92. package/src/css/bdc.css +16 -11
  93. package/src/index.ts +1 -1
  94. package/src/stories/Introduction.mdx +2 -1
  95. package/src/web-components/globals.ts +3 -3
  96. package/src/web-components/index.ts +12 -0
  97. package/src/web-components/interaction/BdsAccordion.mdx +103 -0
  98. package/src/web-components/interaction/BdsAccordion.stories.tsx +94 -0
  99. package/src/web-components/interaction/BdsCollapsible.mdx +116 -0
  100. package/src/web-components/interaction/BdsCollapsible.stories.tsx +68 -0
  101. package/src/web-components/interaction/BdsDialog.mdx +110 -0
  102. package/src/web-components/interaction/BdsDialog.stories.tsx +157 -0
  103. package/src/web-components/interaction/BdsDrawer.mdx +108 -0
  104. package/src/web-components/interaction/BdsDrawer.stories.tsx +196 -0
  105. package/src/web-components/interaction/BdsDropdownMenu.mdx +108 -0
  106. package/src/web-components/interaction/BdsDropdownMenu.stories.tsx +91 -0
  107. package/src/web-components/interaction/BdsSkipLink.mdx +90 -0
  108. package/src/web-components/interaction/BdsSkipLink.stories.tsx +68 -0
  109. package/src/web-components/interaction/BdsTabs.mdx +117 -0
  110. package/src/web-components/interaction/BdsTabs.stories.tsx +94 -0
  111. package/src/web-components/interaction/BdsTooltip.mdx +104 -0
  112. package/src/web-components/interaction/BdsTooltip.stories.tsx +87 -0
  113. package/src/web-components/interaction/bds-accordion.ts +1 -2
  114. package/src/web-components/interaction/bds-button.ts +15 -13
  115. package/src/web-components/interaction/bds-collapsible.ts +1 -0
  116. package/src/web-components/interaction/bds-dialog.ts +2 -5
  117. package/src/web-components/interaction/bds-drawer.ts +70 -44
  118. package/src/web-components/interaction/bds-dropdown-menu-item.ts +124 -0
  119. package/src/web-components/interaction/bds-dropdown-menu.spec.ts +102 -0
  120. package/src/web-components/interaction/bds-dropdown-menu.ts +200 -0
  121. package/src/web-components/interaction/form/BdsCheckbox.mdx +76 -0
  122. package/src/web-components/interaction/form/BdsCheckbox.stories.tsx +72 -0
  123. package/src/web-components/interaction/form/BdsCheckboxGroup.mdx +70 -0
  124. package/src/web-components/interaction/form/BdsCheckboxGroup.stories.tsx +81 -0
  125. package/src/web-components/interaction/form/BdsCombobox.mdx +71 -0
  126. package/src/web-components/interaction/form/BdsCombobox.stories.tsx +93 -0
  127. package/src/web-components/interaction/form/BdsFileInput.mdx +79 -0
  128. package/src/web-components/interaction/form/BdsFileInput.stories.tsx +69 -0
  129. package/src/web-components/interaction/form/BdsFormInput.mdx +98 -0
  130. package/src/web-components/interaction/form/BdsFormInput.stories.tsx +139 -0
  131. package/src/web-components/interaction/form/BdsNumberInput.mdx +70 -0
  132. package/src/web-components/interaction/form/BdsNumberInput.stories.tsx +68 -0
  133. package/src/web-components/interaction/form/BdsRadio.mdx +72 -0
  134. package/src/web-components/interaction/form/BdsRadio.stories.tsx +58 -0
  135. package/src/web-components/interaction/form/BdsRadioGroup.mdx +73 -0
  136. package/src/web-components/interaction/form/BdsRadioGroup.stories.tsx +88 -0
  137. package/src/web-components/interaction/form/BdsSegmentedControl.mdx +95 -0
  138. package/src/web-components/interaction/form/BdsSegmentedControl.stories.tsx +102 -0
  139. package/src/web-components/interaction/form/BdsSelect.mdx +76 -0
  140. package/src/web-components/interaction/form/BdsSelect.stories.tsx +84 -0
  141. package/src/web-components/interaction/form/BdsSlider.mdx +77 -0
  142. package/src/web-components/interaction/form/BdsSlider.stories.tsx +68 -0
  143. package/src/web-components/interaction/form/BdsSwitch.mdx +72 -0
  144. package/src/web-components/interaction/form/BdsSwitch.stories.tsx +58 -0
  145. package/src/web-components/interaction/form/BdsTextarea.mdx +73 -0
  146. package/src/web-components/interaction/form/BdsTextarea.stories.tsx +70 -0
  147. package/src/web-components/interaction/form/bds-checkbox-group.spec.ts +55 -0
  148. package/src/web-components/interaction/form/bds-checkbox-group.ts +117 -0
  149. package/src/web-components/interaction/form/bds-checkbox.ts +1 -3
  150. package/src/web-components/interaction/form/bds-combobox.ts +1 -3
  151. package/src/web-components/interaction/form/bds-form-input.spec.ts +83 -0
  152. package/src/web-components/interaction/form/bds-form-input.ts +268 -0
  153. package/src/web-components/interaction/form/bds-number-input.ts +3 -4
  154. package/src/web-components/interaction/form/bds-radio-group.spec.ts +62 -0
  155. package/src/web-components/interaction/form/bds-radio-group.ts +142 -0
  156. package/src/web-components/interaction/form/bds-radio.ts +6 -12
  157. package/src/web-components/interaction/form/bds-segmented-control.ts +96 -20
  158. package/src/web-components/interaction/form/bds-select.ts +2 -4
  159. package/src/web-components/interaction/form/bds-switch.ts +3 -4
  160. package/src/web-components/interaction/form/bds-textarea.ts +1 -3
  161. package/src/web-components/ui/BdsAvatar.mdx +76 -0
  162. package/src/web-components/ui/BdsAvatar.stories.tsx +48 -0
  163. package/src/web-components/ui/BdsBreadcrumb.mdx +66 -0
  164. package/src/web-components/ui/BdsBreadcrumb.stories.tsx +49 -0
  165. package/src/web-components/ui/BdsButtonGroup.mdx +69 -0
  166. package/src/web-components/ui/BdsButtonGroup.stories.tsx +66 -0
  167. package/src/web-components/ui/BdsCalendar.mdx +93 -0
  168. package/src/web-components/ui/BdsCalendar.stories.tsx +63 -0
  169. package/src/web-components/ui/BdsCard.mdx +88 -0
  170. package/src/web-components/ui/BdsCard.stories.tsx +67 -0
  171. package/src/web-components/ui/BdsCarousel.mdx +83 -0
  172. package/src/web-components/ui/BdsCarousel.stories.tsx +96 -0
  173. package/src/web-components/ui/BdsDescriptionList.mdx +64 -0
  174. package/src/web-components/ui/BdsDescriptionList.stories.tsx +64 -0
  175. package/src/web-components/ui/BdsIconWrapper.mdx +70 -0
  176. package/src/web-components/ui/BdsIconWrapper.stories.tsx +81 -0
  177. package/src/web-components/ui/BdsLink.mdx +79 -0
  178. package/src/web-components/ui/BdsLink.stories.tsx +63 -0
  179. package/src/web-components/ui/BdsLoading.mdx +58 -0
  180. package/src/web-components/ui/BdsLoading.stories.tsx +35 -0
  181. package/src/web-components/ui/BdsNotificationBanner.mdx +85 -0
  182. package/src/web-components/ui/BdsNotificationBanner.stories.tsx +84 -0
  183. package/src/web-components/ui/BdsPagination.mdx +74 -0
  184. package/src/web-components/ui/BdsPagination.stories.tsx +36 -0
  185. package/src/web-components/ui/BdsProgress.mdx +70 -0
  186. package/src/web-components/ui/BdsProgress.stories.tsx +96 -0
  187. package/src/web-components/ui/BdsProgressCircle.mdx +70 -0
  188. package/src/web-components/ui/BdsProgressCircle.stories.tsx +57 -0
  189. package/src/web-components/ui/BdsRating.mdx +61 -0
  190. package/src/web-components/ui/BdsRating.stories.tsx +45 -0
  191. package/src/web-components/ui/BdsSectionHeader.mdx +72 -0
  192. package/src/web-components/ui/BdsSectionHeader.stories.tsx +54 -0
  193. package/src/web-components/ui/BdsSeparator.mdx +77 -0
  194. package/src/web-components/ui/BdsSeparator.stories.tsx +55 -0
  195. package/src/web-components/ui/BdsSkeleton.mdx +61 -0
  196. package/src/web-components/ui/BdsSkeleton.stories.tsx +50 -0
  197. package/src/web-components/ui/BdsTable.mdx +81 -0
  198. package/src/web-components/ui/BdsTable.stories.tsx +83 -0
  199. package/src/web-components/ui/BdsTypography.mdx +74 -0
  200. package/src/web-components/ui/BdsTypography.stories.tsx +52 -0
  201. package/src/web-components/ui/bds-alert.ts +1 -2
  202. package/src/web-components/ui/bds-button-group.spec.ts +40 -0
  203. package/src/web-components/ui/bds-button-group.ts +78 -0
  204. package/src/web-components/ui/bds-calendar.spec.ts +91 -0
  205. package/src/web-components/ui/bds-calendar.ts +427 -0
  206. package/src/web-components/ui/bds-card.ts +1 -3
  207. package/src/web-components/ui/bds-carousel.spec.ts +64 -0
  208. package/src/web-components/ui/bds-carousel.ts +296 -0
  209. package/src/web-components/ui/bds-notification-banner.ts +1 -2
  210. package/src/web-components/ui/bds-pagination.spec.ts +67 -0
  211. package/src/web-components/ui/bds-pagination.ts +197 -0
  212. package/src/web-components/ui/bds-table.spec.ts +45 -0
  213. package/src/web-components/ui/bds-table.ts +96 -0
@@ -737,22 +737,23 @@ function Button({
737
737
  }) {
738
738
  const { colors: colors2 } = useTheme();
739
739
  const { height, px, fontSize, radius } = sizeTokens[size];
740
- const primaryColor = colors2.colorGreen;
741
- const onPrimaryColor = colors2.colorOnGreen;
742
- const ghostTextColor = colors2.colorGreenStrong;
740
+ const primaryColor = colors2.colorInteractive;
741
+ const onPrimaryColor = colors2.colorOnInteractive;
742
+ const outlineTextColor = colors2.colorInteractiveOnBg;
743
+ const isOutline = variant === "outline" || variant === "ghost";
743
744
  const containerStyle = {
744
745
  height,
745
746
  paddingHorizontal: px,
746
747
  borderRadius: radius,
747
748
  opacity: disabled ? 0.4 : 1,
748
749
  ...variant === "default" && { backgroundColor: primaryColor },
749
- ...variant === "ghost" && {
750
+ ...isOutline && {
750
751
  backgroundColor: "transparent",
751
752
  borderWidth: 1,
752
- borderColor: ghostTextColor
753
+ borderColor: outlineTextColor
753
754
  }
754
755
  };
755
- const textColor = variant === "default" ? onPrimaryColor : ghostTextColor;
756
+ const textColor = variant === "default" ? onPrimaryColor : outlineTextColor;
756
757
  return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
757
758
  import_react_native15.Pressable,
758
759
  {
@@ -855,8 +856,8 @@ function Switch({
855
856
  accessibilityLabel: label,
856
857
  accessibilityRole: "switch",
857
858
  accessibilityState: { checked: value, disabled },
858
- thumbColor: value ? colors2.colorOnInteractive : colors2.colorOnBg,
859
- trackColor: { false: colors2.colorBgSubtle, true: colors2.colorInteractive }
859
+ thumbColor: colors2.colorInteractive,
860
+ trackColor: { false: colors2.colorBgSubtle, true: colors2.colorBlueSubtle }
860
861
  }
861
862
  ),
862
863
  /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Label, { label })
@@ -141,7 +141,7 @@ interface ButtonGroupProps {
141
141
  }
142
142
  declare function ButtonGroup({ children, variant, accessibilityLabel, style }: ButtonGroupProps): react_jsx_runtime.JSX.Element;
143
143
 
144
- type ButtonVariant = 'default' | 'ghost';
144
+ type ButtonVariant = 'default' | 'outline' | 'ghost';
145
145
  type ButtonSize = 'small' | 'medium' | 'large';
146
146
  interface ButtonProps {
147
147
  children?: ReactNode;
@@ -141,7 +141,7 @@ interface ButtonGroupProps {
141
141
  }
142
142
  declare function ButtonGroup({ children, variant, accessibilityLabel, style }: ButtonGroupProps): react_jsx_runtime.JSX.Element;
143
143
 
144
- type ButtonVariant = 'default' | 'ghost';
144
+ type ButtonVariant = 'default' | 'outline' | 'ghost';
145
145
  type ButtonSize = 'small' | 'medium' | 'large';
146
146
  interface ButtonProps {
147
147
  children?: ReactNode;
@@ -684,22 +684,23 @@ function Button({
684
684
  }) {
685
685
  const { colors: colors2 } = useTheme();
686
686
  const { height, px, fontSize, radius } = sizeTokens[size];
687
- const primaryColor = colors2.colorGreen;
688
- const onPrimaryColor = colors2.colorOnGreen;
689
- const ghostTextColor = colors2.colorGreenStrong;
687
+ const primaryColor = colors2.colorInteractive;
688
+ const onPrimaryColor = colors2.colorOnInteractive;
689
+ const outlineTextColor = colors2.colorInteractiveOnBg;
690
+ const isOutline = variant === "outline" || variant === "ghost";
690
691
  const containerStyle = {
691
692
  height,
692
693
  paddingHorizontal: px,
693
694
  borderRadius: radius,
694
695
  opacity: disabled ? 0.4 : 1,
695
696
  ...variant === "default" && { backgroundColor: primaryColor },
696
- ...variant === "ghost" && {
697
+ ...isOutline && {
697
698
  backgroundColor: "transparent",
698
699
  borderWidth: 1,
699
- borderColor: ghostTextColor
700
+ borderColor: outlineTextColor
700
701
  }
701
702
  };
702
- const textColor = variant === "default" ? onPrimaryColor : ghostTextColor;
703
+ const textColor = variant === "default" ? onPrimaryColor : outlineTextColor;
703
704
  return /* @__PURE__ */ jsxs5(
704
705
  Pressable4,
705
706
  {
@@ -802,8 +803,8 @@ function Switch({
802
803
  accessibilityLabel: label,
803
804
  accessibilityRole: "switch",
804
805
  accessibilityState: { checked: value, disabled },
805
- thumbColor: value ? colors2.colorOnInteractive : colors2.colorOnBg,
806
- trackColor: { false: colors2.colorBgSubtle, true: colors2.colorInteractive }
806
+ thumbColor: colors2.colorInteractive,
807
+ trackColor: { false: colors2.colorBgSubtle, true: colors2.colorBlueSubtle }
807
808
  }
808
809
  ),
809
810
  /* @__PURE__ */ jsx18(Label, { label })
@@ -1,4 +1,5 @@
1
1
  import {
2
+ A,
2
3
  T,
3
4
  i,
4
5
  i2
@@ -31,7 +32,7 @@ var BdsSegmentedControl = class extends i2 {
31
32
  position: absolute;
32
33
  inset-block: 0.25rem;
33
34
  border-radius: calc(var(--bds-border_radius--s) - 2px);
34
- background-color: var(--segmented_thumb-color, var(--bds-color_bg));
35
+ background-color: var(--segmented_thumb-color, var(--bds-color_interactive));
35
36
  box-shadow: var(--bds-shadow_m);
36
37
  transition: inset-inline-start var(--bds-animation_transition-duration) var(--bds-animation_easing),
37
38
  inline-size var(--bds-animation_transition-duration) var(--bds-animation_easing);
@@ -62,10 +63,11 @@ var BdsSegmentedControl = class extends i2 {
62
63
  transition: color var(--bds-animation_transition-duration) var(--bds-animation_easing);
63
64
  user-select: none;
64
65
  white-space: nowrap;
66
+ text-decoration: none;
65
67
  }
66
68
 
67
69
  .item.--active {
68
- color: var(--segmented_color--active, var(--bds-color_interactive_on-bg));
70
+ color: var(--segmented_color--active, var(--bds-color_on-interactive));
69
71
  }
70
72
 
71
73
  .item.--disabled {
@@ -77,12 +79,51 @@ var BdsSegmentedControl = class extends i2 {
77
79
  outline: var(--bds-outline_default);
78
80
  outline-offset: var(--bds-outline_offset);
79
81
  }
82
+
83
+ /* Outline variant: sliding inset-border indicator (positioned via JS like .thumb) */
84
+ .indicator {
85
+ position: absolute;
86
+ inset-block: 0.25rem;
87
+ border-radius: calc(var(--bds-border_radius--s) - 2px);
88
+ pointer-events: none;
89
+ z-index: 2;
90
+ display: none;
91
+ transition: inset-inline-start var(--bds-animation_transition-duration) var(--bds-animation_easing),
92
+ inline-size var(--bds-animation_transition-duration) var(--bds-animation_easing);
93
+ }
94
+
95
+ /* Outline variant — no thumb, sliding inset-border indicator, interactive active color */
96
+ :host([variant='outline']) .thumb {
97
+ display: none;
98
+ }
99
+
100
+ :host([variant='outline']) .item {
101
+ background-color: var(--segmented_item-bg, transparent);
102
+ }
103
+
104
+ :host([variant='outline']) .item.--active {
105
+ color: var(--segmented_color--active, var(--bds-color_interactive));
106
+ background-color: var(--segmented_item-bg--active, var(--bds-color_bg));
107
+ }
108
+
109
+ :host([variant='outline']) .indicator {
110
+ display: block;
111
+ box-shadow: inset 0 0 0 2px var(--bds-color_interactive);
112
+ }
113
+
114
+ @media (prefers-reduced-motion: reduce) {
115
+ .thumb,
116
+ .indicator {
117
+ transition: none;
118
+ }
119
+ }
80
120
  `;
81
121
  static properties = {
82
122
  name: { type: String, reflect: true },
83
123
  value: { type: String },
84
124
  options: { type: String },
85
- disabled: { type: Boolean, reflect: true }
125
+ disabled: { type: Boolean, reflect: true },
126
+ variant: { type: String, reflect: true }
86
127
  };
87
128
  _internals;
88
129
  _uid = Math.random().toString(36).slice(2, 8);
@@ -93,6 +134,7 @@ var BdsSegmentedControl = class extends i2 {
93
134
  this.value = "";
94
135
  this.options = "[]";
95
136
  this.disabled = false;
137
+ this.variant = "outline";
96
138
  }
97
139
  get _options() {
98
140
  try {
@@ -105,21 +147,32 @@ var BdsSegmentedControl = class extends i2 {
105
147
  super.updated(changed);
106
148
  if (changed.has("value") || changed.has("options")) {
107
149
  this._internals.setFormValue?.(this.value || null);
108
- this._updateThumb();
150
+ if (this.variant === "filled") this._updateThumb();
151
+ if (this.variant === "outline") this._updateIndicator();
152
+ }
153
+ if (changed.has("variant")) {
154
+ if (this.variant === "filled") this._updateThumb();
155
+ if (this.variant === "outline") this._updateIndicator();
109
156
  }
110
157
  }
111
- _updateThumb() {
112
- const opts = this._options;
113
- const selectedIndex = Math.max(0, opts.findIndex((o) => o.value === this.value));
114
- const items = this.shadowRoot?.querySelectorAll(".item");
115
- const thumb = this.shadowRoot?.querySelector(".thumb");
116
- if (!items || !thumb || items.length === 0) return;
158
+ _positionSlider(el, items, selectedIndex) {
159
+ if (!el || items.length === 0) return;
117
160
  const item = items[selectedIndex];
118
161
  if (!item) return;
119
162
  const controlRect = item.parentElement.getBoundingClientRect();
120
163
  const itemRect = item.getBoundingClientRect();
121
- thumb.style.insetInlineStart = `${itemRect.left - controlRect.left}px`;
122
- thumb.style.inlineSize = `${itemRect.width}px`;
164
+ el.style.insetInlineStart = `${itemRect.left - controlRect.left}px`;
165
+ el.style.inlineSize = `${itemRect.width}px`;
166
+ }
167
+ _updateThumb() {
168
+ const selectedIndex = Math.max(0, this._options.findIndex((o) => o.value === this.value));
169
+ const items = this.shadowRoot?.querySelectorAll(".item");
170
+ this._positionSlider(this.shadowRoot?.querySelector(".thumb"), items, selectedIndex);
171
+ }
172
+ _updateIndicator() {
173
+ const selectedIndex = Math.max(0, this._options.findIndex((o) => o.value === this.value));
174
+ const items = this.shadowRoot?.querySelectorAll(".item");
175
+ this._positionSlider(this.shadowRoot?.querySelector(".indicator"), items, selectedIndex);
123
176
  }
124
177
  formResetCallback() {
125
178
  const firstOption = this._options[0];
@@ -135,15 +188,24 @@ var BdsSegmentedControl = class extends i2 {
135
188
  return T`
136
189
  <div class="control" role="group">
137
190
  <span class="thumb" aria-hidden="true"></span>
191
+ <span class="indicator" aria-hidden="true"></span>
138
192
  ${opts.map((opt, i3) => {
139
- const id = `bds-seg-${this._uid}-${i3}`;
140
193
  const isActive = opt.value === this.value;
141
194
  const isDisabled = this.disabled || opt.disabled;
195
+ const itemClass = `item ${isActive ? "--active" : ""} ${isDisabled ? "--disabled" : ""}`.trim();
196
+ if (opt.href) {
197
+ return T`
198
+ <a
199
+ class=${itemClass}
200
+ href=${isDisabled ? A : opt.href}
201
+ aria-current=${isActive ? "page" : A}
202
+ ?aria-disabled=${isDisabled}
203
+ >${opt.label}</a>
204
+ `;
205
+ }
206
+ const id = `bds-seg-${this._uid}-${i3}`;
142
207
  return T`
143
- <label
144
- class="item ${isActive ? "--active" : ""} ${isDisabled ? "--disabled" : ""}"
145
- for=${id}
146
- >
208
+ <label class=${itemClass} for=${id}>
147
209
  <input
148
210
  id=${id}
149
211
  type="radio"
@@ -14,9 +14,9 @@ var BdsButton = class extends i2 {
14
14
  }
15
15
 
16
16
  @keyframes pulse {
17
- 0% { transform: scale(1); box-shadow: 0 0 0 0 rgb(from var(--button_pulse-color, var(--button_color, var(--bds-color_green))) r g b / 50%); }
18
- 70% { transform: scale(1.01); 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%); }
19
- 100% { transform: scale(1); box-shadow: 0 0 0 0 rgb(from var(--button_pulse-color, var(--button_color, var(--bds-color_green))) r g b / 0%); }
17
+ 0% { transform: scale(1); box-shadow: 0 0 0 0 rgb(from var(--button_pulse-color, var(--button_color, var(--bds-color_interactive))) r g b / 50%); }
18
+ 70% { transform: scale(1.01); 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%); }
19
+ 100% { transform: scale(1); box-shadow: 0 0 0 0 rgb(from var(--button_pulse-color, var(--button_color, var(--bds-color_interactive))) r g b / 0%); }
20
20
  }
21
21
 
22
22
  :host {
@@ -40,16 +40,16 @@ var BdsButton = class extends i2 {
40
40
  white-space: nowrap;
41
41
  line-height: 1;
42
42
 
43
- --button_color: var(--bds-color_green);
44
- --button_on-color: var(--bds-color_on-green);
43
+ --button_color: var(--bds-color_interactive);
44
+ --button_on-color: var(--bds-color_on-interactive);
45
+ --button_color--on-bg: var(--bds-color_interactive_on-bg);
45
46
 
46
47
  background-color: var(--button_bg, var(--button_color));
47
48
  color: var(--button_text, var(--button_on-color));
48
49
  border: var(--button_border, none);
49
50
  --bdc_color: transparent;
50
51
 
51
- outline: var(--bdc-outline_width) solid var(--bdc_color);
52
- outline-offset: var(--bdc-outline_offset);
52
+ box-shadow: inset 0 0 0 var(--bdc-outline_width) var(--bdc_color);
53
53
  transition: var(--bds-animation_transition),
54
54
  --bdc_color var(--bds-animation_transition-duration) var(--bds-animation_easing);
55
55
  }
@@ -59,10 +59,11 @@ var BdsButton = class extends i2 {
59
59
  }
60
60
 
61
61
  /* Variants */
62
- .button.ghost {
62
+ .button.outline,
63
+ .button.ghost /* deprecated — use variant="outline" */ {
63
64
  --button_bg: transparent;
64
- --button_text: var(--button_color);
65
- --bdc_color: var(--button_color);
65
+ --button_text: var(--button_color--on-bg);
66
+ --bdc_color: var(--button_color--on-bg);
66
67
  }
67
68
 
68
69
  /* Sizes */
@@ -131,7 +132,8 @@ var BdsButton = class extends i2 {
131
132
  --bdc_color: currentcolor;
132
133
  }
133
134
 
134
- /* Ghost hover */
135
+ /* Outline hover */
136
+ .button.outline:hover,
135
137
  .button.ghost:hover {
136
138
  --button_bg: var(--button_color);
137
139
  --button_text: var(--button_on-color);
@@ -72,6 +72,7 @@ var BdsCollapsible = class extends i2 {
72
72
 
73
73
  .content {
74
74
  padding: var(--bds-space_m);
75
+ background-color: var(--collapsible_content-bg, var(--bds-color_bg));
75
76
  color: var(--collapsible_on-color, var(--bds-color_on-bg));
76
77
  font-size: var(--bds-font_size--body);
77
78
  line-height: var(--bds-font_line-height--body);
@@ -74,8 +74,7 @@ var BdsNotificationBanner = class extends i2 {
74
74
  border-radius: 50%;
75
75
  transition: var(--bds-animation_transition);
76
76
  --bdc_color: currentcolor;
77
- outline: var(--bdc-outline_width) solid var(--bdc_color);
78
- outline-offset: var(--bdc-outline_offset);
77
+ box-shadow: inset 0 0 0 var(--bdc-outline_width) var(--bdc_color);
79
78
  }
80
79
 
81
80
  .dismiss svg {
@@ -87,8 +87,7 @@ var BdsAlert = class extends i2 {
87
87
  transition: var(--bds-animation_transition);
88
88
  border-radius: 50%;
89
89
  --bdc_color: currentcolor;
90
- outline: var(--bdc-outline_width) solid var(--bdc_color);
91
- outline-offset: var(--bdc-outline_offset);
90
+ box-shadow: inset 0 0 0 var(--bdc-outline_width) var(--bdc_color);
92
91
  }
93
92
 
94
93
  .dismiss svg {
@@ -27,7 +27,7 @@ var bdcCss = `
27
27
  @property --bdc-outline_shadow {
28
28
  syntax: '*';
29
29
  inherits: false;
30
- initial-value: none;
30
+ initial-value: 0 0 0 0 transparent;
31
31
  }
32
32
 
33
33
  @layer component {
@@ -39,9 +39,9 @@ var bdcCss = `
39
39
  --bdc_color--error: var(--bds-color_error);
40
40
 
41
41
  --bdc-outline_width: 1px;
42
- --bdc-outline_offset: -1px;
42
+ --bdc-outline_offset: -1px; /* available for consumer use; bdc borders now use inset box-shadow */
43
43
  --bdc-outline_radius: var(--bds-border_radius--xs);
44
- --bdc-outline_shadow: none;
44
+ --bdc-outline_shadow: 0 0 0 0 transparent;
45
45
  }
46
46
  }
47
47
  `;
@@ -27,10 +27,8 @@ var BdsTextarea = class extends i2 {
27
27
  --bdc_color: currentcolor;
28
28
  --bdc-outline_radius: var(--bds-border_radius--xs);
29
29
 
30
- outline: var(--bdc-outline_width) solid var(--bdc_color);
31
- outline-offset: var(--bdc-outline_offset);
32
30
  border-radius: var(--textarea_radius, var(--bdc-outline_radius));
33
- box-shadow: var(--textarea_shadow, var(--bdc-outline_shadow));
31
+ box-shadow: inset 0 0 0 var(--bdc-outline_width) var(--bdc_color), var(--textarea_shadow, var(--bdc-outline_shadow));
34
32
  background-color: var(--textarea_color_bg, var(--bds-color_bg));
35
33
  color: var(--textarea_color, var(--bds-color_on-bg));
36
34
  resize: vertical;
@@ -33,10 +33,8 @@ var BdsRadio = class extends i2 {
33
33
  --bdc_color: currentcolor;
34
34
  --bdc-outline_radius: 50%;
35
35
 
36
- outline: var(--bdc-outline_width) solid var(--bdc_color);
37
- outline-offset: var(--bdc-outline_offset);
38
36
  border-radius: 50%;
39
- box-shadow: var(--radio_shadow, var(--bdc-outline_shadow));
37
+ box-shadow: inset 0 0 0 var(--bdc-outline_width) var(--bdc_color), var(--radio_shadow, var(--bdc-outline_shadow));
40
38
  border: none;
41
39
  appearance: none;
42
40
  background-color: var(--radio_color_bg, var(--bds-color_bg));
@@ -46,18 +44,14 @@ var BdsRadio = class extends i2 {
46
44
  }
47
45
 
48
46
  .input:checked {
49
- background-color: var(--radio_color-active, var(--bdc-color_active));
47
+ background: radial-gradient(
48
+ circle,
49
+ var(--radio_color-active, var(--bdc-color_active)) 35%,
50
+ var(--radio_color_bg, var(--bds-color_bg)) 42%
51
+ );
50
52
  --bdc_color: var(--radio_color-active, var(--bdc-color_active));
51
53
  }
52
54
 
53
- .input:checked::after {
54
- content: '';
55
- position: absolute;
56
- inset: 25%;
57
- border-radius: 50%;
58
- background-color: var(--radio_color-on-active, var(--bdc-color_on-active));
59
- }
60
-
61
55
  .input:focus-visible {
62
56
  outline: var(--bds-outline_default);
63
57
  outline-offset: var(--bds-outline_offset);
@@ -31,10 +31,8 @@ var BdsNumberInput = class extends i2 {
31
31
  --bdc_color: currentcolor;
32
32
  --bdc-outline_radius: var(--bds-border_radius--xs);
33
33
 
34
- outline: var(--bdc-outline_width) solid var(--bdc_color);
35
- outline-offset: var(--bdc-outline_offset);
36
34
  border-radius: var(--number-input_radius, var(--bdc-outline_radius));
37
- box-shadow: var(--number-input_shadow, var(--bdc-outline_shadow));
35
+ box-shadow: inset 0 0 0 var(--bdc-outline_width) var(--bdc_color), var(--number-input_shadow, var(--bdc-outline_shadow));
38
36
  background-color: var(--number-input_color_bg, var(--bds-color_bg));
39
37
  color: var(--number-input_color, var(--bds-color_on-bg));
40
38
  text-align: center;
@@ -62,12 +60,13 @@ var BdsNumberInput = class extends i2 {
62
60
  display: flex;
63
61
  align-items: center;
64
62
  justify-content: center;
63
+ margin: 1px;
65
64
  inline-size: 2rem;
66
65
  block-size: 2rem;
67
66
  border-radius: var(--bds-border_radius--xs);
68
67
  cursor: pointer;
69
68
  flex-shrink: 0;
70
- color: var(--bds-color_on-bg);
69
+ color: var(--bds-color_interactive);
71
70
  transition: var(--bds-animation_transition);
72
71
  }
73
72
 
@@ -18,10 +18,8 @@ var BdsDialog = class extends i2 {
18
18
  --bdc_color: currentcolor;
19
19
  --bdc-outline_radius: var(--bds-border_radius--m);
20
20
 
21
- outline: var(--bdc-outline_width) solid var(--bdc_color);
22
- outline-offset: var(--bdc-outline_offset);
23
21
  border-radius: var(--dialog_radius, var(--bdc-outline_radius));
24
- box-shadow: var(--dialog_shadow, var(--bdc-outline_shadow));
22
+ box-shadow: inset 0 0 0 var(--bdc-outline_width) var(--bdc_color), var(--dialog_shadow, var(--bdc-outline_shadow));
25
23
  background-color: var(--dialog_color, var(--bds-color_grey--subtle));
26
24
  color: var(--dialog_on-color, var(--bds-color_on-grey--subtle));
27
25
  padding: var(--bds-space_l);
@@ -55,8 +53,7 @@ var BdsDialog = class extends i2 {
55
53
  border: var(--dialog_close-border, none);
56
54
  --bdc_color: currentcolor;
57
55
 
58
- outline: var(--bdc-outline_width) solid var(--bdc_color);
59
- outline-offset: var(--bdc-outline_offset);
56
+ box-shadow: inset 0 0 0 var(--bdc-outline_width) var(--bdc_color);
60
57
  cursor: pointer;
61
58
  }
62
59
 
@@ -14,44 +14,65 @@ var BdsDrawer = class extends i2 {
14
14
 
15
15
  .drawer {
16
16
  position: fixed;
17
- inset: 0;
17
+ inset-block: 0;
18
+ inset-inline: auto 0;
19
+ inline-size: min(28rem, 90vw);
20
+ max-inline-size: 100vw;
21
+ block-size: 100dvh;
22
+ max-block-size: 100dvh;
18
23
  margin: 0;
19
24
  padding: 0;
20
- inline-size: 100%;
21
- max-inline-size: 100%;
22
- block-size: 100%;
23
- max-block-size: 100%;
25
+ display: flex;
26
+ flex-direction: column;
27
+ background-color: var(--drawer_color, var(--bds-color_bg));
28
+ color: var(--drawer_on-color, var(--bds-color_on-bg));
24
29
  border: none;
25
- background: transparent;
30
+ box-shadow: var(--bds-shadow_xl);
26
31
  overflow: hidden;
32
+ translate: 100% 0;
33
+ transition:
34
+ translate var(--bds-animation_transition-duration) var(--bds-animation_easing),
35
+ display var(--bds-animation_transition-duration) var(--bds-animation_easing) allow-discrete,
36
+ overlay var(--bds-animation_transition-duration) var(--bds-animation_easing) allow-discrete;
37
+ }
38
+
39
+ :host([side='left']) .drawer {
40
+ inset-inline: 0 auto;
41
+ translate: -100% 0;
42
+ }
43
+
44
+ .drawer[open] {
45
+ translate: 0 0;
46
+ }
47
+
48
+ @starting-style {
49
+ .drawer[open] {
50
+ translate: 100% 0;
51
+ }
52
+
53
+ :host([side='left']) .drawer[open] {
54
+ translate: -100% 0;
55
+ }
27
56
  }
28
57
 
29
58
  .drawer::backdrop {
30
59
  background-color: var(--color_backdrop, rgb(0 0 0 / 50%));
31
60
  backdrop-filter: blur(3px);
61
+ opacity: 0;
62
+ transition:
63
+ opacity var(--bds-animation_transition-duration) var(--bds-animation_easing),
64
+ display var(--bds-animation_transition-duration) allow-discrete,
65
+ overlay var(--bds-animation_transition-duration) allow-discrete;
32
66
  }
33
67
 
34
- .panel {
35
- position: absolute;
36
- inset-block: 0;
37
- display: flex;
38
- flex-direction: column;
39
- inline-size: min(28rem, 90vw);
40
- block-size: 100%;
41
- background-color: var(--drawer_color, var(--bds-color_bg));
42
- color: var(--drawer_on-color, var(--bds-color_on-bg));
43
- box-shadow: var(--bds-shadow_xl);
44
- overflow: hidden;
45
- transition: var(--bds-animation_transition);
46
- }
47
-
48
- :host([side='right']) .panel {
49
- inset-inline-end: 0;
68
+ .drawer[open]::backdrop {
69
+ opacity: 1;
50
70
  }
51
71
 
52
- :host([side='left']) .panel,
53
- :host(:not([side])) .panel {
54
- inset-inline-start: 0;
72
+ @starting-style {
73
+ .drawer[open]::backdrop {
74
+ opacity: 0;
75
+ }
55
76
  }
56
77
 
57
78
  .header {
@@ -105,7 +126,8 @@ var BdsDrawer = class extends i2 {
105
126
  }
106
127
 
107
128
  @media (prefers-reduced-motion: reduce) {
108
- .panel {
129
+ .drawer,
130
+ .drawer::backdrop {
109
131
  transition: none;
110
132
  }
111
133
  }
@@ -165,7 +187,11 @@ var BdsDrawer = class extends i2 {
165
187
  this.dispatchEvent(new CustomEvent("bds-close", { bubbles: true, composed: true }));
166
188
  }
167
189
  _handleBackdropClick(e) {
168
- if (e.target === this._dialog) this._closeDrawer();
190
+ const dialog = this._dialog;
191
+ if (!dialog) return;
192
+ const rect = dialog.getBoundingClientRect();
193
+ const outside = e.clientX < rect.left || e.clientX > rect.right || e.clientY < rect.top || e.clientY > rect.bottom;
194
+ if (outside) this._closeDrawer();
169
195
  }
170
196
  _handleCancel(e) {
171
197
  e.preventDefault();
@@ -200,23 +226,21 @@ var BdsDrawer = class extends i2 {
200
226
  @cancel=${this._handleCancel}
201
227
  @keydown=${this._handleKeydown}
202
228
  >
203
- <div class="panel">
204
- <div class="header">
205
- <span class="title"><slot name="title"></slot></span>
206
- <button
207
- type="button"
208
- class="close-button"
209
- aria-label="Close drawer"
210
- @click=${this._closeDrawer}
211
- >
212
- <svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
213
- <path stroke-linecap="round" stroke-linejoin="round" d="M18 6L6 18M6 6l12 12" />
214
- </svg>
215
- </button>
216
- </div>
217
- <div class="body">
218
- <slot></slot>
219
- </div>
229
+ <div class="header">
230
+ <span class="title"><slot name="title"></slot></span>
231
+ <button
232
+ type="button"
233
+ class="close-button"
234
+ aria-label="Close drawer"
235
+ @click=${this._closeDrawer}
236
+ >
237
+ <svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
238
+ <path stroke-linecap="round" stroke-linejoin="round" d="M18 6L6 18M6 6l12 12" />
239
+ </svg>
240
+ </button>
241
+ </div>
242
+ <div class="body">
243
+ <slot></slot>
220
244
  </div>
221
245
  </dialog>
222
246
  `;
@@ -32,10 +32,8 @@ var BdsCombobox = class extends i2 {
32
32
  --bdc_color: currentcolor;
33
33
  --bdc-outline_radius: var(--bds-border_radius--xs);
34
34
 
35
- outline: var(--bdc-outline_width) solid var(--bdc_color);
36
- outline-offset: var(--bdc-outline_offset);
37
35
  border-radius: var(--combobox_radius, var(--bdc-outline_radius));
38
- box-shadow: var(--combobox_shadow, var(--bdc-outline_shadow));
36
+ box-shadow: inset 0 0 0 var(--bdc-outline_width) var(--bdc_color), var(--combobox_shadow, var(--bdc-outline_shadow));
39
37
  background-color: var(--combobox_color_bg, var(--bds-color_bg));
40
38
  color: var(--combobox_color, var(--bds-color_on-bg));
41
39
  box-sizing: border-box;
@@ -33,10 +33,8 @@ var BdsCheckbox = class extends i2 {
33
33
  --bdc_color: currentcolor;
34
34
  --bdc-outline_radius: var(--bds-border_radius--xs);
35
35
 
36
- outline: var(--bdc-outline_width) solid var(--bdc_color);
37
- outline-offset: var(--bdc-outline_offset);
38
36
  border-radius: var(--checkbox_radius, var(--bdc-outline_radius));
39
- box-shadow: var(--checkbox_shadow, var(--bdc-outline_shadow));
37
+ box-shadow: inset 0 0 0 var(--bdc-outline_width) var(--bdc_color), var(--checkbox_shadow, var(--bdc-outline_shadow));
40
38
  border: none;
41
39
  appearance: none;
42
40
  background-color: var(--checkbox_color_bg, var(--bds-color_bg));