@salt-ds/core 1.71.0 → 1.72.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 (215) hide show
  1. package/CHANGELOG.md +82 -0
  2. package/css/salt-core.css +189 -77
  3. package/dist-cjs/accordion/AccordionHeader.css.js +1 -1
  4. package/dist-cjs/avatar/Avatar.css.js +1 -1
  5. package/dist-cjs/badge/Badge.css.js +1 -1
  6. package/dist-cjs/banner/Banner.css.js +1 -1
  7. package/dist-cjs/breadcrumbs/Breadcrumb.css.js +1 -1
  8. package/dist-cjs/breadcrumbs/Breadcrumbs.css.js +1 -1
  9. package/dist-cjs/checkbox/Checkbox.css.js +1 -1
  10. package/dist-cjs/checkbox/CheckboxIcon.css.js +1 -1
  11. package/dist-cjs/combo-box/ComboBox.js +18 -36
  12. package/dist-cjs/combo-box/ComboBox.js.map +1 -1
  13. package/dist-cjs/combo-box/useComboBox.js +21 -21
  14. package/dist-cjs/combo-box/useComboBox.js.map +1 -1
  15. package/dist-cjs/dropdown/Dropdown.js +29 -30
  16. package/dist-cjs/dropdown/Dropdown.js.map +1 -1
  17. package/dist-cjs/file-drop-zone/FileDropZone.css.js +1 -1
  18. package/dist-cjs/form-field/FormField.css.js +1 -1
  19. package/dist-cjs/form-field/FormFieldHelperText.css.js +1 -1
  20. package/dist-cjs/form-field/FormFieldLabel.css.js +1 -1
  21. package/dist-cjs/form-field/FormFieldLabel.js +1 -1
  22. package/dist-cjs/form-field/FormFieldLabel.js.map +1 -1
  23. package/dist-cjs/index.js +2 -0
  24. package/dist-cjs/index.js.map +1 -1
  25. package/dist-cjs/input/Input.css.js +1 -1
  26. package/dist-cjs/interactable-card/InteractableCard.css.js +1 -1
  27. package/dist-cjs/interactable-card/InteractableCard.js +18 -7
  28. package/dist-cjs/interactable-card/InteractableCard.js.map +1 -1
  29. package/dist-cjs/interactable-card/InteractableCardGroup.js +71 -39
  30. package/dist-cjs/interactable-card/InteractableCardGroup.js.map +1 -1
  31. package/dist-cjs/interactable-card/InteractableCardGroupContext.js.map +1 -1
  32. package/dist-cjs/interactable-card/useInteractableCard.js +2 -3
  33. package/dist-cjs/interactable-card/useInteractableCard.js.map +1 -1
  34. package/dist-cjs/kbd/Kbd.css.js +1 -1
  35. package/dist-cjs/link/Link.css.js +1 -1
  36. package/dist-cjs/list-box/ListBox.js +19 -26
  37. package/dist-cjs/list-box/ListBox.js.map +1 -1
  38. package/dist-cjs/list-control/ListControlNavigationKeys.js +74 -0
  39. package/dist-cjs/list-control/ListControlNavigationKeys.js.map +1 -0
  40. package/dist-cjs/list-control/ListControlOptionContext.js +47 -0
  41. package/dist-cjs/list-control/ListControlOptionContext.js.map +1 -0
  42. package/dist-cjs/list-control/ListControlOptionStore.js +159 -0
  43. package/dist-cjs/list-control/ListControlOptionStore.js.map +1 -0
  44. package/dist-cjs/list-control/ListControlProvider.js +39 -0
  45. package/dist-cjs/list-control/ListControlProvider.js.map +1 -0
  46. package/dist-cjs/list-control/ListControlRegistry.js +161 -0
  47. package/dist-cjs/list-control/ListControlRegistry.js.map +1 -0
  48. package/dist-cjs/list-control/ListControlState.js +137 -109
  49. package/dist-cjs/list-control/ListControlState.js.map +1 -1
  50. package/dist-cjs/mega-menu/MegaMenuGroupHeading.css.js +1 -1
  51. package/dist-cjs/mega-menu/MegaMenuListItem.css.js +1 -1
  52. package/dist-cjs/menu/MenuGroup.css.js +1 -1
  53. package/dist-cjs/menu/MenuItem.css.js +1 -1
  54. package/dist-cjs/navigation-item/NavigationItem.css.js +1 -1
  55. package/dist-cjs/number-input/NumberInput.js +2 -2
  56. package/dist-cjs/number-input/NumberInput.js.map +1 -1
  57. package/dist-cjs/option/Option.js +58 -39
  58. package/dist-cjs/option/Option.js.map +1 -1
  59. package/dist-cjs/option/OptionGroup.css.js +1 -1
  60. package/dist-cjs/overlay/Overlay.js +12 -2
  61. package/dist-cjs/overlay/Overlay.js.map +1 -1
  62. package/dist-cjs/overlay/OverlayContext.js +6 -0
  63. package/dist-cjs/overlay/OverlayContext.js.map +1 -1
  64. package/dist-cjs/overlay/OverlayFooter.css.js +6 -0
  65. package/dist-cjs/overlay/OverlayFooter.css.js.map +1 -0
  66. package/dist-cjs/overlay/OverlayFooter.js +30 -0
  67. package/dist-cjs/overlay/OverlayFooter.js.map +1 -0
  68. package/dist-cjs/overlay/OverlayHeader.css.js +1 -1
  69. package/dist-cjs/overlay/OverlayHeader.js +51 -11
  70. package/dist-cjs/overlay/OverlayHeader.js.map +1 -1
  71. package/dist-cjs/overlay/OverlayPanel.css.js +1 -1
  72. package/dist-cjs/overlay/OverlayPanel.js +20 -7
  73. package/dist-cjs/overlay/OverlayPanel.js.map +1 -1
  74. package/dist-cjs/overlay/OverlayPanelContent.css.js +1 -1
  75. package/dist-cjs/overlay/OverlayPanelContent.js +11 -13
  76. package/dist-cjs/overlay/OverlayPanelContent.js.map +1 -1
  77. package/dist-cjs/overlay/hasOverlaySection.js +24 -0
  78. package/dist-cjs/overlay/hasOverlaySection.js.map +1 -0
  79. package/dist-cjs/pill-input/PillInput.css.js +1 -1
  80. package/dist-cjs/pill-input/PillInput.js +2 -2
  81. package/dist-cjs/pill-input/PillInput.js.map +1 -1
  82. package/dist-cjs/radio-button/RadioButton.css.js +1 -1
  83. package/dist-cjs/radio-button/RadioButtonIcon.css.js +1 -1
  84. package/dist-cjs/rating/Rating.css.js +1 -1
  85. package/dist-cjs/slider/internal/SliderTrack.css.js +1 -1
  86. package/dist-cjs/stepper/internal/StepText.css.js +1 -1
  87. package/dist-cjs/switch/Switch.css.js +1 -1
  88. package/dist-cjs/table/Table.css.js +1 -1
  89. package/dist-cjs/tag/Tag.css.js +1 -1
  90. package/dist-cjs/text/Text.css.js +1 -1
  91. package/dist-cjs/toast/Toast.css.js +1 -1
  92. package/dist-cjs/toggle-button/ToggleButton.js +8 -2
  93. package/dist-cjs/toggle-button/ToggleButton.js.map +1 -1
  94. package/dist-cjs/toggle-button-group/ToggleButtonGroup.js +71 -8
  95. package/dist-cjs/toggle-button-group/ToggleButtonGroup.js.map +1 -1
  96. package/dist-cjs/toggle-button-group/ToggleButtonGroupContext.js.map +1 -1
  97. package/dist-cjs/toggletip/ToggletipPanel.css.js +1 -1
  98. package/dist-cjs/tooltip/Tooltip.css.js +1 -1
  99. package/dist-cjs/vertical-navigation/VerticalNavigationItemContent.css.js +1 -1
  100. package/dist-cjs/vertical-navigation/VerticalNavigationSubMenu.css.js +1 -1
  101. package/dist-es/accordion/AccordionHeader.css.js +1 -1
  102. package/dist-es/avatar/Avatar.css.js +1 -1
  103. package/dist-es/badge/Badge.css.js +1 -1
  104. package/dist-es/banner/Banner.css.js +1 -1
  105. package/dist-es/breadcrumbs/Breadcrumb.css.js +1 -1
  106. package/dist-es/breadcrumbs/Breadcrumbs.css.js +1 -1
  107. package/dist-es/checkbox/Checkbox.css.js +1 -1
  108. package/dist-es/checkbox/CheckboxIcon.css.js +1 -1
  109. package/dist-es/combo-box/ComboBox.js +18 -36
  110. package/dist-es/combo-box/ComboBox.js.map +1 -1
  111. package/dist-es/combo-box/useComboBox.js +21 -21
  112. package/dist-es/combo-box/useComboBox.js.map +1 -1
  113. package/dist-es/dropdown/Dropdown.js +29 -30
  114. package/dist-es/dropdown/Dropdown.js.map +1 -1
  115. package/dist-es/file-drop-zone/FileDropZone.css.js +1 -1
  116. package/dist-es/form-field/FormField.css.js +1 -1
  117. package/dist-es/form-field/FormFieldHelperText.css.js +1 -1
  118. package/dist-es/form-field/FormFieldLabel.css.js +1 -1
  119. package/dist-es/form-field/FormFieldLabel.js +1 -1
  120. package/dist-es/form-field/FormFieldLabel.js.map +1 -1
  121. package/dist-es/index.js +1 -0
  122. package/dist-es/index.js.map +1 -1
  123. package/dist-es/input/Input.css.js +1 -1
  124. package/dist-es/interactable-card/InteractableCard.css.js +1 -1
  125. package/dist-es/interactable-card/InteractableCard.js +18 -7
  126. package/dist-es/interactable-card/InteractableCard.js.map +1 -1
  127. package/dist-es/interactable-card/InteractableCardGroup.js +72 -40
  128. package/dist-es/interactable-card/InteractableCardGroup.js.map +1 -1
  129. package/dist-es/interactable-card/InteractableCardGroupContext.js.map +1 -1
  130. package/dist-es/interactable-card/useInteractableCard.js +2 -3
  131. package/dist-es/interactable-card/useInteractableCard.js.map +1 -1
  132. package/dist-es/kbd/Kbd.css.js +1 -1
  133. package/dist-es/link/Link.css.js +1 -1
  134. package/dist-es/list-box/ListBox.js +19 -26
  135. package/dist-es/list-box/ListBox.js.map +1 -1
  136. package/dist-es/list-control/ListControlNavigationKeys.js +69 -0
  137. package/dist-es/list-control/ListControlNavigationKeys.js.map +1 -0
  138. package/dist-es/list-control/ListControlOptionContext.js +44 -0
  139. package/dist-es/list-control/ListControlOptionContext.js.map +1 -0
  140. package/dist-es/list-control/ListControlOptionStore.js +153 -0
  141. package/dist-es/list-control/ListControlOptionStore.js.map +1 -0
  142. package/dist-es/list-control/ListControlProvider.js +37 -0
  143. package/dist-es/list-control/ListControlProvider.js.map +1 -0
  144. package/dist-es/list-control/ListControlRegistry.js +158 -0
  145. package/dist-es/list-control/ListControlRegistry.js.map +1 -0
  146. package/dist-es/list-control/ListControlState.js +137 -110
  147. package/dist-es/list-control/ListControlState.js.map +1 -1
  148. package/dist-es/mega-menu/MegaMenuGroupHeading.css.js +1 -1
  149. package/dist-es/mega-menu/MegaMenuListItem.css.js +1 -1
  150. package/dist-es/menu/MenuGroup.css.js +1 -1
  151. package/dist-es/menu/MenuItem.css.js +1 -1
  152. package/dist-es/navigation-item/NavigationItem.css.js +1 -1
  153. package/dist-es/number-input/NumberInput.js +2 -2
  154. package/dist-es/number-input/NumberInput.js.map +1 -1
  155. package/dist-es/option/Option.js +59 -40
  156. package/dist-es/option/Option.js.map +1 -1
  157. package/dist-es/option/OptionGroup.css.js +1 -1
  158. package/dist-es/overlay/Overlay.js +13 -3
  159. package/dist-es/overlay/Overlay.js.map +1 -1
  160. package/dist-es/overlay/OverlayContext.js +6 -0
  161. package/dist-es/overlay/OverlayContext.js.map +1 -1
  162. package/dist-es/overlay/OverlayFooter.css.js +4 -0
  163. package/dist-es/overlay/OverlayFooter.css.js.map +1 -0
  164. package/dist-es/overlay/OverlayFooter.js +28 -0
  165. package/dist-es/overlay/OverlayFooter.js.map +1 -0
  166. package/dist-es/overlay/OverlayHeader.css.js +1 -1
  167. package/dist-es/overlay/OverlayHeader.js +51 -11
  168. package/dist-es/overlay/OverlayHeader.js.map +1 -1
  169. package/dist-es/overlay/OverlayPanel.css.js +1 -1
  170. package/dist-es/overlay/OverlayPanel.js +20 -7
  171. package/dist-es/overlay/OverlayPanel.js.map +1 -1
  172. package/dist-es/overlay/OverlayPanelContent.css.js +1 -1
  173. package/dist-es/overlay/OverlayPanelContent.js +11 -13
  174. package/dist-es/overlay/OverlayPanelContent.js.map +1 -1
  175. package/dist-es/overlay/hasOverlaySection.js +22 -0
  176. package/dist-es/overlay/hasOverlaySection.js.map +1 -0
  177. package/dist-es/pill-input/PillInput.css.js +1 -1
  178. package/dist-es/pill-input/PillInput.js +2 -2
  179. package/dist-es/pill-input/PillInput.js.map +1 -1
  180. package/dist-es/radio-button/RadioButton.css.js +1 -1
  181. package/dist-es/radio-button/RadioButtonIcon.css.js +1 -1
  182. package/dist-es/rating/Rating.css.js +1 -1
  183. package/dist-es/slider/internal/SliderTrack.css.js +1 -1
  184. package/dist-es/stepper/internal/StepText.css.js +1 -1
  185. package/dist-es/switch/Switch.css.js +1 -1
  186. package/dist-es/table/Table.css.js +1 -1
  187. package/dist-es/tag/Tag.css.js +1 -1
  188. package/dist-es/text/Text.css.js +1 -1
  189. package/dist-es/toast/Toast.css.js +1 -1
  190. package/dist-es/toggle-button/ToggleButton.js +8 -2
  191. package/dist-es/toggle-button/ToggleButton.js.map +1 -1
  192. package/dist-es/toggle-button-group/ToggleButtonGroup.js +71 -8
  193. package/dist-es/toggle-button-group/ToggleButtonGroup.js.map +1 -1
  194. package/dist-es/toggle-button-group/ToggleButtonGroupContext.js.map +1 -1
  195. package/dist-es/toggletip/ToggletipPanel.css.js +1 -1
  196. package/dist-es/tooltip/Tooltip.css.js +1 -1
  197. package/dist-es/vertical-navigation/VerticalNavigationItemContent.css.js +1 -1
  198. package/dist-es/vertical-navigation/VerticalNavigationSubMenu.css.js +1 -1
  199. package/dist-types/combo-box/useComboBox.d.ts +3 -6
  200. package/dist-types/interactable-card/InteractableCardGroupContext.d.ts +2 -0
  201. package/dist-types/interactable-card/useInteractableCard.d.ts +1 -2
  202. package/dist-types/list-control/ListControlNavigationKeys.d.ts +30 -0
  203. package/dist-types/list-control/ListControlOptionContext.d.ts +18 -0
  204. package/dist-types/list-control/ListControlOptionStore.d.ts +17 -0
  205. package/dist-types/list-control/ListControlProvider.d.ts +11 -0
  206. package/dist-types/list-control/ListControlRegistry.d.ts +22 -0
  207. package/dist-types/list-control/ListControlState.d.ts +6 -6
  208. package/dist-types/option/Option.d.ts +3 -1
  209. package/dist-types/overlay/Overlay.d.ts +2 -1
  210. package/dist-types/overlay/OverlayContext.d.ts +4 -0
  211. package/dist-types/overlay/OverlayFooter.d.ts +4 -0
  212. package/dist-types/overlay/hasOverlaySection.d.ts +2 -0
  213. package/dist-types/overlay/index.d.ts +1 -0
  214. package/dist-types/toggle-button-group/ToggleButtonGroupContext.d.ts +2 -1
  215. package/package.json +4 -4
@@ -8,6 +8,7 @@ var React = require('react');
8
8
  var makePrefixer = require('../utils/makePrefixer.js');
9
9
  var ownerDocument = require('../utils/ownerDocument.js');
10
10
  var useControlled = require('../utils/useControlled.js');
11
+ var useIsomorphicLayoutEffect = require('../utils/useIsomorphicLayoutEffect.js');
11
12
  require('../utils/useFloatingUI/useFloatingUI.js');
12
13
  var useForkRef = require('../utils/useForkRef.js');
13
14
  require('../utils/useId.js');
@@ -17,6 +18,19 @@ var ToggleButtonGroup$1 = require('./ToggleButtonGroup.css.js');
17
18
  var ToggleButtonGroupContext = require('./ToggleButtonGroupContext.js');
18
19
 
19
20
  const withBaseName = makePrefixer.makePrefixer("saltToggleButtonGroup");
21
+ function isSameValue(a, b) {
22
+ if (Array.isArray(a) && Array.isArray(b)) {
23
+ return a.length === b.length && a.every((value, index) => value === b[index]);
24
+ }
25
+ return a === b;
26
+ }
27
+ const sortButtons = (buttons) => [...buttons].sort((buttonA, buttonB) => {
28
+ const position = buttonA.element.compareDocumentPosition(buttonB.element);
29
+ if (position & Node.DOCUMENT_POSITION_FOLLOWING) return -1;
30
+ if (position & Node.DOCUMENT_POSITION_PRECEDING) return 1;
31
+ return 0;
32
+ });
33
+ const buttonsAreEqual = (buttonsA, buttonsB) => buttonsA.length === buttonsB.length && buttonsA.every((button, index) => button === buttonsB[index]);
20
34
  const ToggleButtonGroup = React.forwardRef(function ToggleButtonGroup2(props, ref) {
21
35
  const {
22
36
  appearance,
@@ -47,11 +61,39 @@ const ToggleButtonGroup = React.forwardRef(function ToggleButtonGroup2(props, re
47
61
  state: "value"
48
62
  });
49
63
  const [focused, setFocused] = React.useState(value);
64
+ const [enabledButtons, setEnabledButtons] = React.useState([]);
65
+ const registerButton = React.useCallback(
66
+ (buttonValue, element) => {
67
+ const button = { element, value: buttonValue };
68
+ setEnabledButtons(
69
+ (currentButtons) => sortButtons([
70
+ ...currentButtons.filter(
71
+ (currentButton) => currentButton.element !== element
72
+ ),
73
+ button
74
+ ])
75
+ );
76
+ return () => {
77
+ setEnabledButtons(
78
+ (currentButtons) => currentButtons.includes(button) ? currentButtons.filter(
79
+ (registeredButton) => registeredButton !== button
80
+ ) : currentButtons
81
+ );
82
+ };
83
+ },
84
+ []
85
+ );
86
+ useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
87
+ setEnabledButtons((currentButtons) => {
88
+ const sortedButtons = sortButtons(currentButtons);
89
+ return buttonsAreEqual(currentButtons, sortedButtons) ? currentButtons : sortedButtons;
90
+ });
91
+ }, [children]);
50
92
  const select = React.useCallback(
51
- (event) => {
52
- const newValue = event.currentTarget.value;
93
+ (event, ...values) => {
94
+ const newValue = values.length === 0 ? event.currentTarget.value : values[0];
53
95
  setValue(newValue);
54
- if (value !== newValue) {
96
+ if (!isSameValue(value, newValue)) {
55
97
  onChange == null ? void 0 : onChange(event);
56
98
  }
57
99
  },
@@ -59,7 +101,7 @@ const ToggleButtonGroup = React.forwardRef(function ToggleButtonGroup2(props, re
59
101
  );
60
102
  const isSelected = React.useCallback(
61
103
  (id) => {
62
- return value === id;
104
+ return isSameValue(value, id);
63
105
  },
64
106
  [value]
65
107
  );
@@ -68,9 +110,18 @@ const ToggleButtonGroup = React.forwardRef(function ToggleButtonGroup2(props, re
68
110
  }, []);
69
111
  const isFocused = React.useCallback(
70
112
  (id) => {
71
- return focused === id || !focused;
113
+ if (enabledButtons.length === 0) {
114
+ return focused === id || focused === void 0 || focused === "";
115
+ }
116
+ const hasFocusTarget = enabledButtons.some(
117
+ (button) => isSameValue(button.value, focused)
118
+ );
119
+ return isSameValue(
120
+ hasFocusTarget ? focused : enabledButtons[0].value,
121
+ id
122
+ );
72
123
  },
73
- [focused]
124
+ [focused, enabledButtons]
74
125
  );
75
126
  const contextValue = React.useMemo(
76
127
  () => ({
@@ -81,6 +132,7 @@ const ToggleButtonGroup = React.forwardRef(function ToggleButtonGroup2(props, re
81
132
  isSelected,
82
133
  orientation,
83
134
  readOnly,
135
+ registerButton,
84
136
  select,
85
137
  sentiment
86
138
  }),
@@ -92,12 +144,17 @@ const ToggleButtonGroup = React.forwardRef(function ToggleButtonGroup2(props, re
92
144
  isSelected,
93
145
  orientation,
94
146
  readOnly,
147
+ registerButton,
95
148
  select,
96
149
  sentiment
97
150
  ]
98
151
  );
99
152
  const handleKeyDown = (event) => {
100
153
  var _a, _b, _c;
154
+ if (event.altKey || event.ctrlKey || event.metaKey) {
155
+ onKeyDown == null ? void 0 : onKeyDown(event);
156
+ return;
157
+ }
101
158
  const elements = Array.from(
102
159
  ((_a = groupRef.current) == null ? void 0 : _a.querySelectorAll("button:not([disabled])")) ?? []
103
160
  );
@@ -106,11 +163,17 @@ const ToggleButtonGroup = React.forwardRef(function ToggleButtonGroup2(props, re
106
163
  switch (event.key) {
107
164
  case "ArrowDown":
108
165
  case "ArrowRight":
109
- (_b = elements[(currentIndex + 1) % elements.length]) == null ? void 0 : _b.focus();
166
+ if (elements.length > 0) {
167
+ event.preventDefault();
168
+ (_b = elements[(currentIndex + 1) % elements.length]) == null ? void 0 : _b.focus();
169
+ }
110
170
  break;
111
171
  case "ArrowUp":
112
172
  case "ArrowLeft":
113
- (_c = elements[(currentIndex - 1 + elements.length) % elements.length]) == null ? void 0 : _c.focus();
173
+ if (elements.length > 0) {
174
+ event.preventDefault();
175
+ (_c = elements[(currentIndex - 1 + elements.length) % elements.length]) == null ? void 0 : _c.focus();
176
+ }
114
177
  break;
115
178
  }
116
179
  onKeyDown == null ? void 0 : onKeyDown(event);
@@ -1 +1 @@
1
- {"version":3,"file":"ToggleButtonGroup.js","sources":["../src/toggle-button-group/ToggleButtonGroup.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type KeyboardEvent,\n type SyntheticEvent,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport type { ButtonAppearance, ButtonSentiment } from \"../button\";\nimport {\n makePrefixer,\n ownerDocument,\n useControlled,\n useForkRef,\n} from \"../utils\";\nimport toggleButtonGroupCss from \"./ToggleButtonGroup.css\";\nimport {\n ToggleButtonGroupContext,\n type Value,\n} from \"./ToggleButtonGroupContext\";\n\nexport interface ToggleButtonGroupProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"onChange\"> {\n /**\n * The appearance of all the toggle buttons within the group.\n * @default solid\n */\n appearance?: Extract<ButtonAppearance, \"bordered\" | \"solid\">;\n /**\n * The default value. Use when the component is not controlled.\n */\n defaultValue?: Value;\n /**\n * If `true`, the Toggle Button Group will be disabled.\n */\n disabled?: boolean;\n /**\n * Value of the toggle button group, to be used when the component is controlled.\n */\n value?: Value;\n /**\n * Callback fired when the selection changes.\n */\n onChange?: (event: SyntheticEvent<HTMLButtonElement>) => void;\n /**\n * If `true`, the toggle button group will be read-only.\n */\n readOnly?: boolean;\n /**\n * The orientation of the toggle buttons.\n */\n orientation?: \"horizontal\" | \"vertical\";\n /**\n * The visual sentimenent of all the toggle buttons within the group.\n * @default neutral\n */\n sentiment?: ButtonSentiment;\n}\n\nconst withBaseName = makePrefixer(\"saltToggleButtonGroup\");\n\nexport const ToggleButtonGroup = forwardRef<\n HTMLDivElement,\n ToggleButtonGroupProps\n>(function ToggleButtonGroup(props, ref) {\n const {\n appearance,\n children,\n className,\n value: valueProp,\n defaultValue,\n disabled,\n onChange,\n onKeyDown,\n orientation = \"horizontal\",\n readOnly,\n sentiment,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-toggle-button-group\",\n css: toggleButtonGroupCss,\n window: targetWindow,\n });\n\n const groupRef = useRef<HTMLDivElement>(null);\n const handleRef = useForkRef(ref, groupRef);\n\n const [value, setValue] = useControlled({\n default: defaultValue,\n controlled: valueProp,\n name: \"ToggleButtonGroup\",\n state: \"value\",\n });\n const [focused, setFocused] = useState<Value>(value);\n\n const select = useCallback(\n (event: SyntheticEvent<HTMLButtonElement>) => {\n const newValue = event.currentTarget.value;\n setValue(newValue);\n if (value !== newValue) {\n onChange?.(event);\n }\n },\n [onChange, value],\n );\n\n const isSelected = useCallback(\n (id: Value) => {\n return value === id;\n },\n [value],\n );\n\n const focus = useCallback((id: Value) => {\n setFocused(id);\n }, []);\n\n const isFocused = useCallback(\n (id: Value) => {\n return focused === id || !focused;\n },\n [focused],\n );\n\n const contextValue = useMemo(\n () => ({\n appearance,\n disabled,\n focus,\n isFocused,\n isSelected,\n orientation,\n readOnly,\n select,\n sentiment,\n }),\n [\n appearance,\n disabled,\n focus,\n isFocused,\n isSelected,\n orientation,\n readOnly,\n select,\n sentiment,\n ],\n );\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n const elements: HTMLElement[] = Array.from(\n groupRef.current?.querySelectorAll(\"button:not([disabled])\") ?? [],\n );\n\n const doc = ownerDocument(groupRef.current);\n\n const currentIndex = elements.indexOf(doc.activeElement as HTMLElement);\n switch (event.key) {\n case \"ArrowDown\":\n case \"ArrowRight\":\n elements[(currentIndex + 1) % elements.length]?.focus();\n break;\n case \"ArrowUp\":\n case \"ArrowLeft\":\n elements[\n (currentIndex - 1 + elements.length) % elements.length\n ]?.focus();\n break;\n }\n\n onKeyDown?.(event);\n };\n\n return (\n <ToggleButtonGroupContext.Provider value={contextValue}>\n <div\n aria-disabled={disabled}\n aria-readonly={readOnly}\n className={clsx(\n withBaseName(),\n withBaseName(orientation),\n disabled && withBaseName(\"disabled\"),\n readOnly && withBaseName(\"readOnly\"),\n className,\n )}\n role=\"radiogroup\"\n ref={handleRef}\n onKeyDown={handleKeyDown}\n {...rest}\n >\n {children}\n </div>\n </ToggleButtonGroupContext.Provider>\n );\n});\n"],"names":["makePrefixer","forwardRef","ToggleButtonGroup","useWindow","useComponentCssInjection","toggleButtonGroupCss","useRef","useForkRef","useControlled","useState","useCallback","useMemo","ownerDocument","jsx","ToggleButtonGroupContext","clsx"],"mappings":"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"}
1
+ {"version":3,"file":"ToggleButtonGroup.js","sources":["../src/toggle-button-group/ToggleButtonGroup.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type KeyboardEvent,\n type SyntheticEvent,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport type { ButtonAppearance, ButtonSentiment } from \"../button\";\nimport {\n makePrefixer,\n ownerDocument,\n useControlled,\n useForkRef,\n useIsomorphicLayoutEffect,\n} from \"../utils\";\nimport toggleButtonGroupCss from \"./ToggleButtonGroup.css\";\nimport {\n ToggleButtonGroupContext,\n type Value,\n} from \"./ToggleButtonGroupContext\";\n\nexport interface ToggleButtonGroupProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"onChange\"> {\n /**\n * The appearance of all the toggle buttons within the group.\n * @default solid\n */\n appearance?: Extract<ButtonAppearance, \"bordered\" | \"solid\">;\n /**\n * The default value. Use when the component is not controlled.\n */\n defaultValue?: Value;\n /**\n * If `true`, the Toggle Button Group will be disabled.\n */\n disabled?: boolean;\n /**\n * Value of the toggle button group, to be used when the component is controlled.\n */\n value?: Value;\n /**\n * Callback fired when the selection changes.\n */\n onChange?: (event: SyntheticEvent<HTMLButtonElement>) => void;\n /**\n * If `true`, the toggle button group will be read-only.\n */\n readOnly?: boolean;\n /**\n * The orientation of the toggle buttons.\n */\n orientation?: \"horizontal\" | \"vertical\";\n /**\n * The visual sentimenent of all the toggle buttons within the group.\n * @default neutral\n */\n sentiment?: ButtonSentiment;\n}\n\nconst withBaseName = makePrefixer(\"saltToggleButtonGroup\");\n\nfunction isSameValue(a: Value, b: Value) {\n if (Array.isArray(a) && Array.isArray(b)) {\n return (\n a.length === b.length && a.every((value, index) => value === b[index])\n );\n }\n return a === b;\n}\n\ninterface RegisteredButton {\n element: HTMLElement;\n value: Value;\n}\n\nconst sortButtons = (buttons: RegisteredButton[]) =>\n [...buttons].sort((buttonA, buttonB) => {\n const position = buttonA.element.compareDocumentPosition(buttonB.element);\n if (position & Node.DOCUMENT_POSITION_FOLLOWING) return -1;\n if (position & Node.DOCUMENT_POSITION_PRECEDING) return 1;\n return 0;\n });\n\nconst buttonsAreEqual = (\n buttonsA: RegisteredButton[],\n buttonsB: RegisteredButton[],\n) =>\n buttonsA.length === buttonsB.length &&\n buttonsA.every((button, index) => button === buttonsB[index]);\n\nexport const ToggleButtonGroup = forwardRef<\n HTMLDivElement,\n ToggleButtonGroupProps\n>(function ToggleButtonGroup(props, ref) {\n const {\n appearance,\n children,\n className,\n value: valueProp,\n defaultValue,\n disabled,\n onChange,\n onKeyDown,\n orientation = \"horizontal\",\n readOnly,\n sentiment,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-toggle-button-group\",\n css: toggleButtonGroupCss,\n window: targetWindow,\n });\n\n const groupRef = useRef<HTMLDivElement>(null);\n const handleRef = useForkRef(ref, groupRef);\n\n const [value, setValue] = useControlled({\n default: defaultValue,\n controlled: valueProp,\n name: \"ToggleButtonGroup\",\n state: \"value\",\n });\n const [focused, setFocused] = useState<Value>(value);\n const [enabledButtons, setEnabledButtons] = useState<RegisteredButton[]>([]);\n\n const registerButton = useCallback(\n (buttonValue: Value, element: HTMLElement) => {\n const button = { element, value: buttonValue };\n setEnabledButtons((currentButtons) =>\n sortButtons([\n ...currentButtons.filter(\n (currentButton) => currentButton.element !== element,\n ),\n button,\n ]),\n );\n\n return () => {\n setEnabledButtons((currentButtons) =>\n currentButtons.includes(button)\n ? currentButtons.filter(\n (registeredButton) => registeredButton !== button,\n )\n : currentButtons,\n );\n };\n },\n [],\n );\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: re-sorts registered buttons after children move.\n useIsomorphicLayoutEffect(() => {\n setEnabledButtons((currentButtons) => {\n const sortedButtons = sortButtons(currentButtons);\n return buttonsAreEqual(currentButtons, sortedButtons)\n ? currentButtons\n : sortedButtons;\n });\n }, [children]);\n\n const select = useCallback(\n (\n event: SyntheticEvent<HTMLButtonElement>,\n ...values: [newValue?: Value]\n ) => {\n const newValue =\n values.length === 0 ? event.currentTarget.value : values[0];\n setValue(newValue);\n if (!isSameValue(value, newValue)) {\n onChange?.(event);\n }\n },\n [onChange, value],\n );\n\n const isSelected = useCallback(\n (id: Value) => {\n return isSameValue(value, id);\n },\n [value],\n );\n\n const focus = useCallback((id: Value) => {\n setFocused(id);\n }, []);\n\n const isFocused = useCallback(\n (id: Value) => {\n // Trust the focused value until buttons register (e.g. server rendering).\n if (enabledButtons.length === 0) {\n return focused === id || focused === undefined || focused === \"\";\n }\n\n const hasFocusTarget = enabledButtons.some((button) =>\n isSameValue(button.value, focused),\n );\n\n return isSameValue(\n hasFocusTarget ? focused : enabledButtons[0].value,\n id,\n );\n },\n [focused, enabledButtons],\n );\n\n const contextValue = useMemo(\n () => ({\n appearance,\n disabled,\n focus,\n isFocused,\n isSelected,\n orientation,\n readOnly,\n registerButton,\n select,\n sentiment,\n }),\n [\n appearance,\n disabled,\n focus,\n isFocused,\n isSelected,\n orientation,\n readOnly,\n registerButton,\n select,\n sentiment,\n ],\n );\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n // Leave modified arrow keys (e.g. browser history shortcuts) to the browser.\n if (event.altKey || event.ctrlKey || event.metaKey) {\n onKeyDown?.(event);\n return;\n }\n\n const elements: HTMLElement[] = Array.from(\n groupRef.current?.querySelectorAll(\"button:not([disabled])\") ?? [],\n );\n\n const doc = ownerDocument(groupRef.current);\n\n const currentIndex = elements.indexOf(doc.activeElement as HTMLElement);\n switch (event.key) {\n case \"ArrowDown\":\n case \"ArrowRight\":\n if (elements.length > 0) {\n event.preventDefault();\n elements[(currentIndex + 1) % elements.length]?.focus();\n }\n break;\n case \"ArrowUp\":\n case \"ArrowLeft\":\n if (elements.length > 0) {\n event.preventDefault();\n elements[\n (currentIndex - 1 + elements.length) % elements.length\n ]?.focus();\n }\n break;\n }\n\n onKeyDown?.(event);\n };\n\n return (\n <ToggleButtonGroupContext.Provider value={contextValue}>\n <div\n aria-disabled={disabled}\n aria-readonly={readOnly}\n className={clsx(\n withBaseName(),\n withBaseName(orientation),\n disabled && withBaseName(\"disabled\"),\n readOnly && withBaseName(\"readOnly\"),\n className,\n )}\n role=\"radiogroup\"\n ref={handleRef}\n onKeyDown={handleKeyDown}\n {...rest}\n >\n {children}\n </div>\n </ToggleButtonGroupContext.Provider>\n );\n});\n"],"names":["makePrefixer","forwardRef","ToggleButtonGroup","useWindow","useComponentCssInjection","toggleButtonGroupCss","useRef","useForkRef","useControlled","useState","useCallback","useIsomorphicLayoutEffect","useMemo","ownerDocument","jsx","ToggleButtonGroupContext","clsx"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ToggleButtonGroupContext.js","sources":["../src/toggle-button-group/ToggleButtonGroupContext.ts"],"sourcesContent":["import { type SyntheticEvent, useContext } from \"react\";\nimport type { ButtonAppearance, ButtonSentiment } from \"../button\";\nimport { createContext } from \"../utils\";\n\nexport type Value = string | readonly string[] | number | undefined;\n\nexport interface ToggleButtonGroupContextValue {\n appearance?: Extract<ButtonAppearance, \"bordered\" | \"solid\">;\n disabled?: boolean;\n focus: (id: Value) => void;\n isFocused: (id: Value) => boolean;\n isSelected: (id: Value) => boolean;\n orientation: \"horizontal\" | \"vertical\";\n readOnly?: boolean;\n select: (event: SyntheticEvent<HTMLButtonElement>) => void;\n sentiment?: ButtonSentiment;\n}\n\nexport const ToggleButtonGroupContext = createContext<\n ToggleButtonGroupContextValue | undefined\n>(\"ToggleButtonGroupContext\", undefined);\n\nexport function useToggleButtonGroup() {\n return useContext(ToggleButtonGroupContext);\n}\n"],"names":["createContext","useContext"],"mappings":";;;;;;;;;;;AAkBO,MAAM,wBAAA,GAA2BA,2BAAA,CAEtC,0BAAA,EAA4B,MAAS;AAEhC,SAAS,oBAAA,GAAuB;AACrC,EAAA,OAAOC,iBAAW,wBAAwB,CAAA;AAC5C;;;;;"}
1
+ {"version":3,"file":"ToggleButtonGroupContext.js","sources":["../src/toggle-button-group/ToggleButtonGroupContext.ts"],"sourcesContent":["import { type SyntheticEvent, useContext } from \"react\";\nimport type { ButtonAppearance, ButtonSentiment } from \"../button\";\nimport { createContext } from \"../utils\";\n\nexport type Value = string | readonly string[] | number | undefined;\n\nexport interface ToggleButtonGroupContextValue {\n appearance?: Extract<ButtonAppearance, \"bordered\" | \"solid\">;\n disabled?: boolean;\n focus: (id: Value) => void;\n isFocused: (id: Value) => boolean;\n isSelected: (id: Value) => boolean;\n orientation: \"horizontal\" | \"vertical\";\n readOnly?: boolean;\n registerButton: (value: Value, element: HTMLElement) => () => void;\n select: (event: SyntheticEvent<HTMLButtonElement>, value?: Value) => void;\n sentiment?: ButtonSentiment;\n}\n\nexport const ToggleButtonGroupContext = createContext<\n ToggleButtonGroupContextValue | undefined\n>(\"ToggleButtonGroupContext\", undefined);\n\nexport function useToggleButtonGroup() {\n return useContext(ToggleButtonGroupContext);\n}\n"],"names":["createContext","useContext"],"mappings":";;;;;;;;;;;AAmBO,MAAM,wBAAA,GAA2BA,2BAAA,CAEtC,0BAAA,EAA4B,MAAS;AAEhC,SAAS,oBAAA,GAAuB;AACrC,EAAA,OAAOC,iBAAW,wBAAwB,CAAA;AAC5C;;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = ".saltToggletipPanel {\n --toggletip-background: var(--salt-container-primary-background);\n --toggletip-borderColor: var(--salt-container-bold-borderColor);\n\n box-sizing: border-box;\n padding: var(--salt-spacing-100);\n\n font-family: var(--salt-text-fontFamily);\n font-size: var(--salt-text-fontSize);\n font-weight: var(--salt-text-fontWeight);\n line-height: var(--salt-text-lineHeight);\n\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--toggletip-borderColor);\n border-radius: var(--salt-palette-corner-weak);\n\n background: var(--toggletip-background);\n box-shadow: var(--salt-overlayable-shadow-popout);\n\n color: var(--salt-content-primary-foreground);\n z-index: var(--salt-zIndex-flyover);\n\n max-width: 45ch;\n max-height: 100vh;\n}\n\n.saltToggletipPanel-content {\n max-height: 100%;\n overflow-y: auto;\n}\n\n.saltToggletipPanel-content:focus-visible {\n outline-offset: var(--salt-spacing-fixed-100);\n}\n";
3
+ var css_248z = ".saltToggletipPanel {\n --toggletip-background: var(--salt-container-primary-background);\n --toggletip-borderColor: var(--salt-container-bold-borderColor);\n\n box-sizing: border-box;\n padding: var(--salt-spacing-100);\n\n font-family: var(--salt-text-fontFamily);\n font-size: var(--salt-text-fontSize);\n font-weight: var(--salt-text-fontWeight);\n line-height: var(--salt-text-lineHeight);\n letter-spacing: var(--salt-text-letterSpacing);\n\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--toggletip-borderColor);\n border-radius: var(--salt-palette-corner-weak);\n\n background: var(--toggletip-background);\n box-shadow: var(--salt-overlayable-shadow-popout);\n\n color: var(--salt-content-primary-foreground);\n z-index: var(--salt-zIndex-flyover);\n\n max-width: 45ch;\n max-height: 100vh;\n}\n\n.saltToggletipPanel-content {\n max-height: 100%;\n overflow-y: auto;\n}\n\n.saltToggletipPanel-content:focus-visible {\n outline-offset: var(--salt-spacing-fixed-100);\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=ToggletipPanel.css.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = "/* Styles applied to root component */\n.saltTooltip {\n --tooltip-background: var(--saltTooltip-background, var(--salt-container-primary-background));\n --tooltip-zIndex: var(--saltTooltip-zIndex, var(--salt-zIndex-flyover));\n /* apply icon margin based on the text line height so it's aligned on all densities */\n --tooltip-icon-marginTop: calc((var(--salt-text-lineHeight) - max(var(--salt-size-icon), 12px)) / 2);\n --tooltip-status-borderColor: var(--salt-container-bold-borderColor);\n /* Single line height should be size-base */\n --tooltip-borderWidth: var(--salt-size-fixed-100);\n --tooltip-padding: calc(var(--salt-spacing-75) - var(--tooltip-borderWidth)) var(--salt-spacing-100);\n}\n\n.saltTooltip {\n box-sizing: border-box;\n background: var(--tooltip-background);\n border-color: var(--saltTooltip-borderColor, var(--tooltip-status-borderColor));\n border-style: var(--saltTooltip-borderStyle, var(--salt-borderStyle-solid));\n border-width: var(--saltTooltip-borderWidth, var(--tooltip-borderWidth));\n border-radius: var(--saltTooltip-borderRadius, var(--salt-palette-corner-weak, 0));\n box-shadow: var(--saltTooltip-shadow, var(--salt-overlayable-shadow-popout));\n color: var(--saltTooltip-text-color, var(--salt-content-primary-foreground));\n font-family: var(--salt-text-fontFamily);\n font-size: var(--saltTooltip-fontSize, var(--salt-text-fontSize));\n font-weight: var(--saltTooltip-fontWeight, var(--salt-text-fontWeight));\n line-height: var(--saltTooltip-lineHeight, var(--salt-text-lineHeight));\n max-width: var(--saltTooltip-maxWidth, 60ch);\n padding: var(--saltTooltip-padding, var(--tooltip-padding));\n position: relative;\n text-align: var(--saltTooltip-textAlign, left);\n z-index: var(--tooltip-zIndex);\n}\n\n/* Styles applied to container */\n.saltTooltip-container {\n display: flex;\n align-items: baseline;\n position: relative;\n}\n\n/* Styles applied to content */\n.saltTooltip-content {\n overflow: hidden;\n}\n\n/* Styles applied to status indicator */\n.saltTooltip-icon {\n --saltIcon-margin: var(--tooltip-icon-marginTop) var(--salt-spacing-75) 0 0;\n vertical-align: top;\n align-self: flex-start;\n}\n\n/* Styles applied when status = \"info\" */\n.saltTooltip-info {\n --tooltip-status-borderColor: var(--salt-status-info-borderColor);\n}\n\n/* Styles applied when status = \"error\" */\n.saltTooltip-error {\n --tooltip-status-borderColor: var(--salt-status-error-borderColor);\n}\n\n/* Styles applied when status = \"warning\" */\n.saltTooltip-warning {\n --tooltip-status-borderColor: var(--salt-status-warning-borderColor);\n}\n\n/* Styles applied when status = \"success\" */\n.saltTooltip-success {\n --tooltip-status-borderColor: var(--salt-status-success-borderColor);\n}\n";
3
+ var css_248z = "/* Styles applied to root component */\n.saltTooltip {\n --tooltip-background: var(--saltTooltip-background, var(--salt-container-primary-background));\n --tooltip-zIndex: var(--saltTooltip-zIndex, var(--salt-zIndex-flyover));\n /* apply icon margin based on the text line height so it's aligned on all densities */\n --tooltip-icon-marginTop: calc((var(--salt-text-lineHeight) - max(var(--salt-size-icon), 12px)) / 2);\n --tooltip-status-borderColor: var(--salt-container-bold-borderColor);\n /* Single line height should be size-base */\n --tooltip-borderWidth: var(--salt-size-fixed-100);\n --tooltip-padding: calc(var(--salt-spacing-75) - var(--tooltip-borderWidth)) var(--salt-spacing-100);\n}\n\n.saltTooltip {\n box-sizing: border-box;\n background: var(--tooltip-background);\n border-color: var(--saltTooltip-borderColor, var(--tooltip-status-borderColor));\n border-style: var(--saltTooltip-borderStyle, var(--salt-borderStyle-solid));\n border-width: var(--saltTooltip-borderWidth, var(--tooltip-borderWidth));\n border-radius: var(--saltTooltip-borderRadius, var(--salt-palette-corner-weak, 0));\n box-shadow: var(--saltTooltip-shadow, var(--salt-overlayable-shadow-popout));\n color: var(--saltTooltip-text-color, var(--salt-content-primary-foreground));\n font-family: var(--salt-text-fontFamily);\n font-size: var(--saltTooltip-fontSize, var(--salt-text-fontSize));\n font-weight: var(--saltTooltip-fontWeight, var(--salt-text-fontWeight));\n line-height: var(--saltTooltip-lineHeight, var(--salt-text-lineHeight));\n letter-spacing: var(--salt-text-letterSpacing);\n max-width: var(--saltTooltip-maxWidth, 60ch);\n padding: var(--saltTooltip-padding, var(--tooltip-padding));\n position: relative;\n text-align: var(--saltTooltip-textAlign, left);\n z-index: var(--tooltip-zIndex);\n}\n\n/* Styles applied to container */\n.saltTooltip-container {\n display: flex;\n align-items: baseline;\n position: relative;\n}\n\n/* Styles applied to content */\n.saltTooltip-content {\n overflow: hidden;\n}\n\n/* Styles applied to status indicator */\n.saltTooltip-icon {\n --saltIcon-margin: var(--tooltip-icon-marginTop) var(--salt-spacing-75) 0 0;\n vertical-align: top;\n align-self: flex-start;\n}\n\n/* Styles applied when status = \"info\" */\n.saltTooltip-info {\n --tooltip-status-borderColor: var(--salt-status-info-borderColor);\n}\n\n/* Styles applied when status = \"error\" */\n.saltTooltip-error {\n --tooltip-status-borderColor: var(--salt-status-error-borderColor);\n}\n\n/* Styles applied when status = \"warning\" */\n.saltTooltip-warning {\n --tooltip-status-borderColor: var(--salt-status-warning-borderColor);\n}\n\n/* Styles applied when status = \"success\" */\n.saltTooltip-success {\n --tooltip-status-borderColor: var(--salt-status-success-borderColor);\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=Tooltip.css.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = ".saltVerticalNavigationItemContent {\n --verticalNavigationItem-iconPadding: calc(var(--saltVerticalNavigationItem-iconPaddingMultiplier, 0) * (var(--salt-size-icon) + var(--salt-spacing-100)));\n --verticalNavigationItem-depthPadding: calc(var(--salt-spacing-100) * max(0, calc(var(--verticalNavigationItem-depth, 0) - 1)));\n}\n\n.saltVerticalNavigation-indicator .saltVerticalNavigationItemContent {\n --verticalNavigationItem-paddingLeft: calc(var(--salt-spacing-150) + var(--salt-size-indicator) + var(--verticalNavigationItem-depthPadding) + var(--verticalNavigationItem-iconPadding));\n --verticalNavigationItem-paddingBlock: var(--salt-spacing-50);\n}\n\n.saltVerticalNavigation-bordered .saltVerticalNavigationItemContent {\n --verticalNavigationItem-paddingLeft: calc(var(--salt-spacing-100) + var(--verticalNavigationItem-depthPadding) + var(--verticalNavigationItem-iconPadding));\n --verticalNavigationItem-paddingBlock: calc(var(--salt-spacing-50) - var(--salt-size-fixed-100));\n}\n\n.saltVerticalNavigationItemContent {\n display: flex;\n flex-direction: row;\n gap: var(--salt-spacing-100);\n appearance: none;\n -webkit-appearance: none;\n min-height: calc(var(--salt-size-base) + var(--salt-spacing-100));\n min-width: 4em;\n padding: var(--verticalNavigationItem-paddingBlock) var(--salt-spacing-100) var(--verticalNavigationItem-paddingBlock) var(--verticalNavigationItem-paddingLeft);\n position: relative;\n flex-shrink: 0;\n box-sizing: border-box;\n border-radius: var(--salt-palette-corner-weak, 0);\n overflow: hidden;\n\n cursor: var(--salt-cursor-hover);\n color: var(--salt-content-primary-foreground);\n font-weight: var(--salt-text-h4-fontWeight);\n font-family: var(--salt-text-h4-fontFamily);\n text-align: var(--salt-text-textAlign);\n letter-spacing: var(--salt-text-letterSpacing);\n line-height: var(--salt-text-h4-lineHeight);\n font-size: var(--salt-text-h4-fontSize);\n}\n\n.saltVerticalNavigation-indicator .saltVerticalNavigationItemContent-active,\n.saltVerticalNavigation-indicator .saltVerticalNavigationItemContent-active:hover {\n background: var(--salt-navigable-accent-background-active);\n}\n\n.saltVerticalNavigation-indicator .saltVerticalNavigationItemContent::before {\n left: var(--salt-spacing-50);\n content: \"\";\n position: absolute;\n top: var(--salt-spacing-50);\n bottom: var(--salt-spacing-50);\n border-radius: var(--salt-palette-corner-strongest);\n width: var(--salt-size-indicator);\n}\n\n.saltVerticalNavigation-indicator .saltVerticalNavigationItemContent-active::before {\n background: var(--salt-navigable-accent-indicator-active);\n}\n\n.saltVerticalNavigation-bordered .saltVerticalNavigationItemContent {\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) transparent;\n}\n\n.saltVerticalNavigation-bordered .saltVerticalNavigationItemContent-active,\n.saltVerticalNavigation-bordered .saltVerticalNavigationItemContent-active:hover {\n background: var(--salt-navigable-accent-background-active);\n border-color: var(--salt-navigable-accent-borderColor-active);\n}\n\n.saltVerticalNavigationItemContent .saltIcon,\n.saltVerticalNavigationItemContent .saltBadge {\n min-height: var(--salt-text-lineHeight);\n}\n\n.saltVerticalNavigationItemContent-focused {\n outline: var(--salt-focused-outline);\n outline-offset: calc(var(--salt-size-fixed-100) * -2);\n z-index: 1;\n}\n\n.saltVerticalNavigationItemContent:hover {\n background: var(--salt-overlayable-background-hover);\n}\n\n.saltVerticalNavigation .saltVerticalNavigationItemContent-active,\n.saltVerticalNavigation .saltVerticalNavigationSubMenu .saltVerticalNavigationItemContent-active {\n font-weight: var(--salt-text-h4-fontWeight);\n}\n\n@supports selector(:has(*)) {\n .saltVerticalNavigationItemContent-active:hover:has(.saltVerticalNavigationItemTrigger[aria-controls]) {\n background: linear-gradient(var(--salt-overlayable-background-hover), var(--salt-overlayable-background-hover)) var(--salt-navigable-accent-background-active);\n }\n}\n";
3
+ var css_248z = ".saltVerticalNavigationItemContent {\n --verticalNavigationItem-iconPadding: calc(var(--saltVerticalNavigationItem-iconPaddingMultiplier, 0) * (var(--salt-size-icon) + var(--salt-spacing-100)));\n --verticalNavigationItem-depthPadding: calc(var(--salt-spacing-100) * max(0, calc(var(--verticalNavigationItem-depth, 0) - 1)));\n}\n\n.saltVerticalNavigation-indicator .saltVerticalNavigationItemContent {\n --verticalNavigationItem-paddingLeft: calc(var(--salt-spacing-150) + var(--salt-size-indicator) + var(--verticalNavigationItem-depthPadding) + var(--verticalNavigationItem-iconPadding));\n --verticalNavigationItem-paddingBlock: var(--salt-spacing-50);\n}\n\n.saltVerticalNavigation-bordered .saltVerticalNavigationItemContent {\n --verticalNavigationItem-paddingLeft: calc(var(--salt-spacing-100) + var(--verticalNavigationItem-depthPadding) + var(--verticalNavigationItem-iconPadding));\n --verticalNavigationItem-paddingBlock: calc(var(--salt-spacing-50) - var(--salt-size-fixed-100));\n}\n\n.saltVerticalNavigationItemContent {\n display: flex;\n flex-direction: row;\n gap: var(--salt-spacing-100);\n appearance: none;\n -webkit-appearance: none;\n min-height: calc(var(--salt-size-base) + var(--salt-spacing-100));\n min-width: 4em;\n padding: var(--verticalNavigationItem-paddingBlock) var(--salt-spacing-100) var(--verticalNavigationItem-paddingBlock) var(--verticalNavigationItem-paddingLeft);\n position: relative;\n flex-shrink: 0;\n box-sizing: border-box;\n border-radius: var(--salt-palette-corner-weak, 0);\n overflow: hidden;\n\n cursor: var(--salt-cursor-hover);\n color: var(--salt-content-primary-foreground);\n font-weight: var(--salt-text-heading-fontWeight);\n font-family: var(--salt-text-heading-fontFamily);\n text-align: var(--salt-text-textAlign);\n letter-spacing: var(--salt-text-letterSpacing);\n line-height: var(--salt-text-h4-lineHeight);\n font-size: var(--salt-text-h4-fontSize);\n}\n\n.saltVerticalNavigation-indicator .saltVerticalNavigationItemContent-active,\n.saltVerticalNavigation-indicator .saltVerticalNavigationItemContent-active:hover {\n background: var(--salt-navigable-accent-background-active);\n}\n\n.saltVerticalNavigation-indicator .saltVerticalNavigationItemContent::before {\n left: var(--salt-spacing-50);\n content: \"\";\n position: absolute;\n top: var(--salt-spacing-50);\n bottom: var(--salt-spacing-50);\n border-radius: var(--salt-palette-corner-strongest);\n width: var(--salt-size-indicator);\n}\n\n.saltVerticalNavigation-indicator .saltVerticalNavigationItemContent-active::before {\n background: var(--salt-navigable-accent-indicator-active);\n}\n\n.saltVerticalNavigation-bordered .saltVerticalNavigationItemContent {\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) transparent;\n}\n\n.saltVerticalNavigation-bordered .saltVerticalNavigationItemContent-active,\n.saltVerticalNavigation-bordered .saltVerticalNavigationItemContent-active:hover {\n background: var(--salt-navigable-accent-background-active);\n border-color: var(--salt-navigable-accent-borderColor-active);\n}\n\n.saltVerticalNavigationItemContent .saltIcon,\n.saltVerticalNavigationItemContent .saltBadge {\n min-height: var(--salt-text-lineHeight);\n}\n\n.saltVerticalNavigationItemContent-focused {\n outline: var(--salt-focused-outline);\n outline-offset: calc(var(--salt-size-fixed-100) * -2);\n z-index: 1;\n}\n\n.saltVerticalNavigationItemContent:hover {\n background: var(--salt-overlayable-background-hover);\n}\n\n.saltVerticalNavigation .saltVerticalNavigationItemContent-active,\n.saltVerticalNavigation .saltVerticalNavigationSubMenu .saltVerticalNavigationItemContent-active {\n font-weight: var(--salt-text-heading-fontWeight);\n}\n\n@supports selector(:has(*)) {\n .saltVerticalNavigationItemContent-active:hover:has(.saltVerticalNavigationItemTrigger[aria-controls]) {\n background: linear-gradient(var(--salt-overlayable-background-hover), var(--salt-overlayable-background-hover)) var(--salt-navigable-accent-background-active);\n }\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=VerticalNavigationItemContent.css.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = ".saltVerticalNavigationSubMenu {\n display: flex;\n flex-direction: column;\n gap: var(--salt-spacing-fixed-100);\n list-style: none;\n padding: var(--salt-spacing-fixed-100) 0 0;\n margin: 0;\n}\n\n.saltVerticalNavigationSubMenu .saltVerticalNavigationItemContent {\n font-weight: var(--salt-text-h4-fontWeight-small);\n}\n";
3
+ var css_248z = ".saltVerticalNavigationSubMenu {\n display: flex;\n flex-direction: column;\n gap: var(--salt-spacing-fixed-100);\n list-style: none;\n padding: var(--salt-spacing-fixed-100) 0 0;\n margin: 0;\n}\n\n.saltVerticalNavigationSubMenu .saltVerticalNavigationItemContent {\n font-weight: var(--salt-text-heading-fontWeight-small);\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=VerticalNavigationSubMenu.css.js.map
@@ -1,4 +1,4 @@
1
- var css_248z = ".saltAccordionHeader {\n display: flex;\n gap: var(--salt-spacing-100);\n padding: var(--salt-spacing-50) var(--salt-spacing-100);\n border: 0;\n width: 100%;\n min-height: calc(var(--salt-size-base) + var(--salt-spacing-100));\n background: transparent;\n font-size: var(--salt-text-fontSize);\n line-height: var(--salt-text-lineHeight);\n font-family: var(--salt-text-fontFamily);\n color: var(--salt-content-primary-foreground);\n font-weight: var(--salt-text-fontWeight-strong);\n text-align: left;\n cursor: var(--salt-cursor-hover);\n box-sizing: border-box;\n -webkit-tap-highlight-color: transparent;\n}\n\n.saltAccordionHeader:focus-visible {\n outline: var(--salt-focused-outline);\n outline-offset: calc(-1 * var(--salt-focused-outlineWidth));\n}\n\n.saltAccordionHeader-content {\n padding: var(--salt-spacing-75) 0;\n width: 100%;\n box-sizing: border-box;\n}\n\n.saltAccordionHeader .saltAccordionHeader-icon {\n height: var(--salt-size-base);\n}\n\n.saltAccordionHeader-error {\n background: var(--salt-status-error-background);\n}\n\n.saltAccordionHeader-error:focus-visible {\n outline-color: var(--salt-status-error-borderColor);\n}\n\n.saltAccordionHeader-warning {\n background: var(--salt-status-warning-background);\n}\n\n.saltAccordionHeader-warning:focus-visible {\n outline-color: var(--salt-status-warning-borderColor);\n}\n\n.saltAccordionHeader-success {\n background: var(--salt-status-success-background);\n}\n\n.saltAccordionHeader-success:focus-visible {\n outline-color: var(--salt-status-success-borderColor);\n}\n\n.saltAccordionHeader .saltAccordionHeader-statusIndicator {\n height: var(--salt-size-base);\n margin-left: auto;\n}\n\n.saltAccordionHeader:disabled {\n background: transparent;\n color: var(--salt-content-primary-foreground-disabled);\n cursor: var(--salt-cursor-disabled);\n}\n";
1
+ var css_248z = ".saltAccordionHeader {\n display: flex;\n gap: var(--salt-spacing-100);\n padding: var(--salt-spacing-50) var(--salt-spacing-100);\n border: 0;\n width: 100%;\n min-height: calc(var(--salt-size-base) + var(--salt-spacing-100));\n background: transparent;\n font-size: var(--salt-text-fontSize);\n line-height: var(--salt-text-lineHeight);\n font-family: var(--salt-text-fontFamily);\n color: var(--salt-content-primary-foreground);\n font-weight: var(--salt-text-fontWeight-strong);\n letter-spacing: var(--salt-text-letterSpacing);\n text-align: left;\n cursor: var(--salt-cursor-hover);\n box-sizing: border-box;\n -webkit-tap-highlight-color: transparent;\n}\n\n.saltAccordionHeader:focus-visible {\n outline: var(--salt-focused-outline);\n outline-offset: calc(-1 * var(--salt-focused-outlineWidth));\n}\n\n.saltAccordionHeader-content {\n padding: var(--salt-spacing-75) 0;\n width: 100%;\n box-sizing: border-box;\n}\n\n.saltAccordionHeader .saltAccordionHeader-icon {\n height: var(--salt-size-base);\n}\n\n.saltAccordionHeader-error {\n background: var(--salt-status-error-background);\n}\n\n.saltAccordionHeader-error:focus-visible {\n outline-color: var(--salt-status-error-borderColor);\n}\n\n.saltAccordionHeader-warning {\n background: var(--salt-status-warning-background);\n}\n\n.saltAccordionHeader-warning:focus-visible {\n outline-color: var(--salt-status-warning-borderColor);\n}\n\n.saltAccordionHeader-success {\n background: var(--salt-status-success-background);\n}\n\n.saltAccordionHeader-success:focus-visible {\n outline-color: var(--salt-status-success-borderColor);\n}\n\n.saltAccordionHeader .saltAccordionHeader-statusIndicator {\n height: var(--salt-size-base);\n margin-left: auto;\n}\n\n.saltAccordionHeader:disabled {\n background: transparent;\n opacity: 0.4;\n color: var(--salt-content-primary-foreground);\n cursor: var(--salt-cursor-disabled);\n}\n";
2
2
 
3
3
  export { css_248z as default };
4
4
  //# sourceMappingURL=AccordionHeader.css.js.map
@@ -1,4 +1,4 @@
1
- var css_248z = "/* TODO: Remove hardcoded values - unitless notation-fontSize / size-base because Firefox can't do unit division */\n.salt-density-high {\n --avatar-fontSize-ratio: calc(8 / 20);\n}\n\n.salt-density-medium {\n --avatar-fontSize-ratio: calc(10 / 28);\n}\n\n.salt-density-low {\n --avatar-fontSize-ratio: calc(12 / 36);\n}\n\n.salt-density-touch {\n --avatar-fontSize-ratio: calc(14 / 44);\n}\n\n.salt-density-mobile {\n --avatar-fontSize-ratio: calc(12 / 44);\n}\n\n/* Default variables applied to the root element */\n.saltAvatar {\n --avatar-size-multiplier: var(--saltAvatar-size-multiplier, 1);\n --avatar-base-size: var(--salt-size-base);\n --avatar-direct-fontSize: calc(var(--saltAvatar-size) * var(--avatar-fontSize-ratio) / var(--avatar-size-multiplier));\n --avatar-base-fontSize: var(--saltAvatar-fontSize, var(--avatar-direct-fontSize, var(--salt-text-notation-fontSize)));\n --avatar-container-size: var(--saltAvatar-size, calc(var(--avatar-base-size) * var(--avatar-size-multiplier)));\n --avatar-fontSize: calc(var(--avatar-base-fontSize) * var(--avatar-size-multiplier));\n /* Icon styling */\n --saltIcon-size: calc(var(--avatar-container-size) / 2);\n}\n\n/* Style applied to the root element */\n.saltAvatar {\n color: var(--saltAvatar-foreground, var(--salt-content-bold-foreground));\n background: var(--saltAvatar-background, var(--avatar-background));\n font-size: var(--avatar-fontSize);\n line-height: var(--saltAvatar-lineHeight, var(--salt-text-notation-lineHeight));\n font-family: var(--salt-text-notation-fontFamily);\n font-weight: var(--salt-text-notation-fontWeight);\n width: var(--avatar-container-size);\n min-width: var(--avatar-container-size);\n height: var(--avatar-container-size);\n min-height: var(--avatar-container-size);\n border-radius: var(--saltAvatar-borderRadius, var(--salt-palette-corner-strongest, 50%));\n border: none;\n padding: 0;\n appearance: none;\n -webkit-appearance: none;\n text-decoration: none;\n position: relative;\n\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n user-select: none;\n}\n\n.saltAvatar-entity {\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n.saltAvatar-accent {\n --avatar-background: var(--salt-sentiment-accent-background);\n}\n\n.saltAvatar-category-1 {\n --avatar-background: var(--salt-category-1-bold-background);\n}\n.saltAvatar-category-2 {\n --avatar-background: var(--salt-category-2-bold-background);\n}\n\n.saltAvatar-category-3 {\n --avatar-background: var(--salt-category-3-bold-background);\n}\n\n.saltAvatar-category-4 {\n --avatar-background: var(--salt-category-4-bold-background);\n}\n\n.saltAvatar-category-5 {\n --avatar-background: var(--salt-category-5-bold-background);\n}\n\n.saltAvatar-category-6 {\n --avatar-background: var(--salt-category-6-bold-background);\n}\n\n.saltAvatar-category-7 {\n --avatar-background: var(--salt-category-7-bold-background);\n}\n\n.saltAvatar-category-8 {\n --avatar-background: var(--salt-category-8-bold-background);\n}\n\n.saltAvatar-category-9 {\n --avatar-background: var(--salt-category-9-bold-background);\n}\n\n.saltAvatar-category-10 {\n --avatar-background: var(--salt-category-10-bold-background);\n}\n.saltAvatar-category-11 {\n --avatar-background: var(--salt-category-11-bold-background);\n}\n.saltAvatar-category-12 {\n --avatar-background: var(--salt-category-12-bold-background);\n}\n.saltAvatar-category-13 {\n --avatar-background: var(--salt-category-13-bold-background);\n}\n.saltAvatar-category-14 {\n --avatar-background: var(--salt-category-14-bold-background);\n}\n.saltAvatar-category-15 {\n --avatar-background: var(--salt-category-15-bold-background);\n}\n.saltAvatar-category-16 {\n --avatar-background: var(--salt-category-16-bold-background);\n}\n.saltAvatar-category-17 {\n --avatar-background: var(--salt-category-17-bold-background);\n}\n.saltAvatar-category-18 {\n --avatar-background: var(--salt-category-18-bold-background);\n}\n.saltAvatar-category-19 {\n --avatar-background: var(--salt-category-19-bold-background);\n}\n.saltAvatar-category-20 {\n --avatar-background: var(--salt-category-20-bold-background);\n}\n\n.saltAvatar:has(img),\n.saltAvatar-withImage {\n --avatar-background: none;\n}\n\n/* Style applied to the image/svg element. We specifically allow SVGs as the Avatar image to enable SVGs such as Flags to take up the full Avatar space */\n.saltAvatar > img,\n.saltAvatar > svg:not(.saltIcon) {\n width: 100%;\n height: 100%;\n}\n\n.saltAvatar:focus-visible {\n outline-offset: var(--salt-spacing-fixed-100);\n}\n\nbutton.saltAvatar,\na.saltAvatar {\n cursor: var(--salt-cursor-hover);\n}\n\nbutton.saltAvatar:disabled {\n cursor: var(--salt-cursor-disabled);\n}\n\nbutton.saltAvatar::after,\na.saltAvatar::after {\n content: \"\";\n position: absolute;\n inset: 0;\n border-radius: inherit;\n pointer-events: none;\n background: transparent;\n}\n\n.saltAvatar[aria-expanded=\"true\"][aria-haspopup=\"menu\"]::after,\n.saltAvatar[aria-expanded=\"true\"][aria-haspopup=\"dialog\"]::after {\n background: var(--salt-overlayable-background-hover);\n}\n\n@media (hover: hover) {\n button.saltAvatar:hover::after,\n a.saltAvatar:hover::after {\n background: var(--salt-overlayable-background-hover);\n }\n\n button.saltAvatar:disabled:hover::after {\n background: transparent;\n }\n}\n";
1
+ var css_248z = "/* TODO: Remove hardcoded values - unitless notation-fontSize / size-base because Firefox can't do unit division */\n.salt-density-high {\n --avatar-fontSize-ratio: calc(8 / 20);\n}\n\n.salt-density-medium {\n --avatar-fontSize-ratio: calc(10 / 28);\n}\n\n.salt-density-low {\n --avatar-fontSize-ratio: calc(12 / 36);\n}\n\n.salt-density-touch {\n --avatar-fontSize-ratio: calc(14 / 44);\n}\n\n.salt-density-mobile {\n --avatar-fontSize-ratio: calc(12 / 44);\n}\n\n/* Default variables applied to the root element */\n.saltAvatar {\n --avatar-size-multiplier: var(--saltAvatar-size-multiplier, 1);\n --avatar-base-size: var(--salt-size-base);\n --avatar-direct-fontSize: calc(var(--saltAvatar-size) * var(--avatar-fontSize-ratio) / var(--avatar-size-multiplier));\n --avatar-base-fontSize: var(--saltAvatar-fontSize, var(--avatar-direct-fontSize, var(--salt-text-notation-fontSize)));\n --avatar-container-size: var(--saltAvatar-size, calc(var(--avatar-base-size) * var(--avatar-size-multiplier)));\n --avatar-fontSize: calc(var(--avatar-base-fontSize) * var(--avatar-size-multiplier));\n /* Icon styling */\n --saltIcon-size: calc(var(--avatar-container-size) / 2);\n}\n\n/* Style applied to the root element */\n.saltAvatar {\n color: var(--saltAvatar-foreground, var(--salt-content-bold-foreground));\n background: var(--saltAvatar-background, var(--avatar-background));\n font-size: var(--avatar-fontSize);\n line-height: var(--saltAvatar-lineHeight, var(--salt-text-notation-lineHeight));\n font-family: var(--salt-text-fontFamily);\n font-weight: var(--salt-text-notation-fontWeight);\n letter-spacing: var(--salt-text-letterSpacing);\n width: var(--avatar-container-size);\n min-width: var(--avatar-container-size);\n height: var(--avatar-container-size);\n min-height: var(--avatar-container-size);\n border-radius: var(--saltAvatar-borderRadius, var(--salt-palette-corner-strongest, 50%));\n border: none;\n padding: 0;\n appearance: none;\n -webkit-appearance: none;\n text-decoration: none;\n position: relative;\n\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n user-select: none;\n}\n\n.saltAvatar-entity {\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n.saltAvatar-accent {\n --avatar-background: var(--salt-sentiment-accent-background);\n}\n\n.saltAvatar-category-1 {\n --avatar-background: var(--salt-category-1-bold-background);\n}\n.saltAvatar-category-2 {\n --avatar-background: var(--salt-category-2-bold-background);\n}\n\n.saltAvatar-category-3 {\n --avatar-background: var(--salt-category-3-bold-background);\n}\n\n.saltAvatar-category-4 {\n --avatar-background: var(--salt-category-4-bold-background);\n}\n\n.saltAvatar-category-5 {\n --avatar-background: var(--salt-category-5-bold-background);\n}\n\n.saltAvatar-category-6 {\n --avatar-background: var(--salt-category-6-bold-background);\n}\n\n.saltAvatar-category-7 {\n --avatar-background: var(--salt-category-7-bold-background);\n}\n\n.saltAvatar-category-8 {\n --avatar-background: var(--salt-category-8-bold-background);\n}\n\n.saltAvatar-category-9 {\n --avatar-background: var(--salt-category-9-bold-background);\n}\n\n.saltAvatar-category-10 {\n --avatar-background: var(--salt-category-10-bold-background);\n}\n.saltAvatar-category-11 {\n --avatar-background: var(--salt-category-11-bold-background);\n}\n.saltAvatar-category-12 {\n --avatar-background: var(--salt-category-12-bold-background);\n}\n.saltAvatar-category-13 {\n --avatar-background: var(--salt-category-13-bold-background);\n}\n.saltAvatar-category-14 {\n --avatar-background: var(--salt-category-14-bold-background);\n}\n.saltAvatar-category-15 {\n --avatar-background: var(--salt-category-15-bold-background);\n}\n.saltAvatar-category-16 {\n --avatar-background: var(--salt-category-16-bold-background);\n}\n.saltAvatar-category-17 {\n --avatar-background: var(--salt-category-17-bold-background);\n}\n.saltAvatar-category-18 {\n --avatar-background: var(--salt-category-18-bold-background);\n}\n.saltAvatar-category-19 {\n --avatar-background: var(--salt-category-19-bold-background);\n}\n.saltAvatar-category-20 {\n --avatar-background: var(--salt-category-20-bold-background);\n}\n\n.saltAvatar:has(img),\n.saltAvatar-withImage {\n --avatar-background: none;\n}\n\n/* Style applied to the image/svg element. We specifically allow SVGs as the Avatar image to enable SVGs such as Flags to take up the full Avatar space */\n.saltAvatar > img,\n.saltAvatar > svg:not(.saltIcon) {\n width: 100%;\n height: 100%;\n}\n\n.saltAvatar:focus-visible {\n outline-offset: var(--salt-spacing-fixed-100);\n}\n\nbutton.saltAvatar,\na.saltAvatar {\n cursor: var(--salt-cursor-hover);\n}\n\nbutton.saltAvatar:disabled {\n cursor: var(--salt-cursor-disabled);\n}\n\nbutton.saltAvatar::after,\na.saltAvatar::after {\n content: \"\";\n position: absolute;\n inset: 0;\n border-radius: inherit;\n pointer-events: none;\n background: transparent;\n}\n\n.saltAvatar[aria-expanded=\"true\"][aria-haspopup=\"menu\"]::after,\n.saltAvatar[aria-expanded=\"true\"][aria-haspopup=\"dialog\"]::after {\n background: var(--salt-overlayable-background-hover);\n}\n\n@media (hover: hover) {\n button.saltAvatar:hover::after,\n a.saltAvatar:hover::after {\n background: var(--salt-overlayable-background-hover);\n }\n\n button.saltAvatar:disabled:hover::after {\n background: transparent;\n }\n}\n";
2
2
 
3
3
  export { css_248z as default };
4
4
  //# sourceMappingURL=Avatar.css.js.map
@@ -1,4 +1,4 @@
1
- var css_248z = "/* Style applied to the root element */\n.saltBadge {\n display: inline-flex;\n position: relative;\n flex-shrink: 0;\n vertical-align: middle;\n --badge-size: var(--salt-text-notation-lineHeight);\n}\n\n.saltBadge-badge {\n /* Should this vary according to touch size */\n padding-left: var(--salt-spacing-50);\n padding-right: var(--salt-spacing-50);\n height: var(--badge-size);\n min-width: var(--badge-size);\n border-radius: var(--salt-palette-corner-strongest, 9999px);\n\n white-space: nowrap;\n z-index: var(--salt-zIndex-default);\n box-sizing: border-box;\n\n align-items: center;\n justify-content: center;\n display: inline-flex;\n margin: auto;\n\n font-size: var(--salt-text-notation-fontSize);\n font-weight: var(--salt-text-notation-fontWeight);\n font-family: var(--salt-text-fontFamily);\n line-height: var(--salt-text-notation-lineHeight);\n background: var(--salt-sentiment-accent-background);\n color: var(--salt-content-bold-foreground);\n\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n.saltBadge-topRight {\n position: absolute;\n right: var(--salt-spacing-100);\n transform: translateX(100%) translateY(calc(-1 * (var(--badge-size) / 2)));\n}\n\n.saltBadge-dotBadge {\n height: var(--salt-size-adornment);\n min-width: var(--salt-size-adornment);\n padding: 0;\n --badge-size: var(--salt-size-adornment);\n}\n\n.saltBadge-dotBadge.saltBadge-topRight {\n right: calc((var(--salt-size-adornment) / 2));\n}\n";
1
+ var css_248z = "/* Style applied to the root element */\n.saltBadge {\n display: inline-flex;\n position: relative;\n flex-shrink: 0;\n vertical-align: middle;\n --badge-size: var(--salt-text-notation-lineHeight);\n}\n\n.saltBadge-badge {\n /* Should this vary according to touch size */\n padding-left: var(--salt-spacing-50);\n padding-right: var(--salt-spacing-50);\n height: var(--badge-size);\n min-width: var(--badge-size);\n border-radius: var(--salt-palette-corner-strongest, 9999px);\n\n white-space: nowrap;\n z-index: var(--salt-zIndex-default);\n box-sizing: border-box;\n\n align-items: center;\n justify-content: center;\n display: inline-flex;\n margin: auto;\n\n font-size: var(--salt-text-notation-fontSize);\n font-weight: var(--salt-text-notation-fontWeight);\n font-family: var(--salt-text-fontFamily);\n line-height: var(--salt-text-notation-lineHeight);\n letter-spacing: var(--salt-text-letterSpacing);\n background: var(--salt-sentiment-accent-background);\n color: var(--salt-content-bold-foreground);\n\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n.saltBadge-topRight {\n position: absolute;\n right: var(--salt-spacing-100);\n transform: translateX(100%) translateY(calc(-1 * (var(--badge-size) / 2)));\n}\n\n.saltBadge-dotBadge {\n height: var(--salt-size-adornment);\n min-width: var(--salt-size-adornment);\n padding: 0;\n --badge-size: var(--salt-size-adornment);\n}\n\n.saltBadge-dotBadge.saltBadge-topRight {\n right: calc((var(--salt-size-adornment) / 2));\n}\n";
2
2
 
3
3
  export { css_248z as default };
4
4
  //# sourceMappingURL=Badge.css.js.map
@@ -1,4 +1,4 @@
1
- var css_248z = "/* Styles applied to root component */\n.saltBanner {\n --banner-background: var(--salt-container-primary-background);\n\n background: var(--saltBanner-background, var(--banner-background));\n border-color: var(--saltBanner-borderColor, var(--banner-borderColor));\n border-width: var(--saltBanner-borderWidth, var(--salt-size-fixed-100));\n border-style: var(--saltBanner-borderStyle, var(--salt-borderStyle-solid));\n border-radius: var(--saltBanner-borderRadius, var(--salt-palette-corner, 0));\n box-sizing: border-box;\n display: inline-flex;\n gap: var(--salt-spacing-75);\n padding: var(--saltBanner-padding, var(--salt-spacing-50) var(--salt-spacing-100));\n width: 100%;\n min-height: calc(var(--salt-size-base) + var(--salt-spacing-100));\n\n font-family: var(--salt-text-fontFamily);\n font-size: var(--salt-text-fontSize);\n font-weight: var(--salt-text-fontWeight);\n line-height: var(--salt-text-lineHeight);\n color: var(--salt-content-primary-foreground);\n}\n\n/* Styles applied to icon */\n.saltBanner-icon.saltIcon {\n min-height: var(--salt-size-base);\n}\n\n/* Styles applied when state = \"info\" */\n.saltBanner-info {\n --banner-borderColor: var(--salt-status-info-borderColor);\n}\n\n/* Styles applied when state = \"error\" */\n.saltBanner-error {\n --banner-borderColor: var(--salt-status-error-borderColor);\n}\n\n/* Styles applied when state = \"warning\" */\n.saltBanner-warning {\n --banner-borderColor: var(--salt-status-warning-borderColor);\n}\n\n/* Styles applied when state = \"success\" */\n.saltBanner-success {\n --banner-borderColor: var(--salt-status-success-borderColor);\n}\n\n.saltBanner-secondary.saltBanner-info {\n --banner-background: var(--salt-status-info-background);\n}\n\n.saltBanner-secondary.saltBanner-error {\n --banner-background: var(--salt-status-error-background);\n}\n\n.saltBanner-secondary.saltBanner-warning {\n --banner-background: var(--salt-status-warning-background);\n}\n\n.saltBanner-secondary.saltBanner-success {\n --banner-background: var(--salt-status-success-background);\n}\n";
1
+ var css_248z = "/* Styles applied to root component */\n.saltBanner {\n --banner-background: var(--salt-container-primary-background);\n\n background: var(--saltBanner-background, var(--banner-background));\n border-color: var(--saltBanner-borderColor, var(--banner-borderColor));\n border-width: var(--saltBanner-borderWidth, var(--salt-size-fixed-100));\n border-style: var(--saltBanner-borderStyle, var(--salt-borderStyle-solid));\n border-radius: var(--saltBanner-borderRadius, var(--salt-palette-corner, 0));\n box-sizing: border-box;\n display: inline-flex;\n gap: var(--salt-spacing-75);\n padding: var(--saltBanner-padding, var(--salt-spacing-50) var(--salt-spacing-100));\n width: 100%;\n min-height: calc(var(--salt-size-base) + var(--salt-spacing-100));\n\n font-family: var(--salt-text-fontFamily);\n font-size: var(--salt-text-fontSize);\n font-weight: var(--salt-text-fontWeight);\n line-height: var(--salt-text-lineHeight);\n letter-spacing: var(--salt-text-letterSpacing);\n color: var(--salt-content-primary-foreground);\n}\n\n/* Styles applied to icon */\n.saltBanner-icon.saltIcon {\n min-height: var(--salt-size-base);\n}\n\n/* Styles applied when state = \"info\" */\n.saltBanner-info {\n --banner-borderColor: var(--salt-status-info-borderColor);\n}\n\n/* Styles applied when state = \"error\" */\n.saltBanner-error {\n --banner-borderColor: var(--salt-status-error-borderColor);\n}\n\n/* Styles applied when state = \"warning\" */\n.saltBanner-warning {\n --banner-borderColor: var(--salt-status-warning-borderColor);\n}\n\n/* Styles applied when state = \"success\" */\n.saltBanner-success {\n --banner-borderColor: var(--salt-status-success-borderColor);\n}\n\n.saltBanner-secondary.saltBanner-info {\n --banner-background: var(--salt-status-info-background);\n}\n\n.saltBanner-secondary.saltBanner-error {\n --banner-background: var(--salt-status-error-background);\n}\n\n.saltBanner-secondary.saltBanner-warning {\n --banner-background: var(--salt-status-warning-background);\n}\n\n.saltBanner-secondary.saltBanner-success {\n --banner-background: var(--salt-status-success-background);\n}\n";
2
2
 
3
3
  export { css_248z as default };
4
4
  //# sourceMappingURL=Banner.css.js.map
@@ -1,4 +1,4 @@
1
- var css_248z = ".saltBreadcrumb {\n align-items: center;\n display: inline-flex;\n flex: 0 1 auto;\n gap: var(--salt-spacing-100);\n list-style: none;\n min-width: 0;\n}\n\n.saltBreadcrumb-current,\n.saltBreadcrumb-label,\n.saltBreadcrumb-link,\n.saltBreadcrumb-trigger {\n min-width: 0;\n}\n\n.saltBreadcrumb-trigger {\n align-items: center;\n color: var(--salt-content-primary-foreground);\n display: inline-flex;\n font-family: var(--salt-text-label-fontFamily);\n font-size: var(--salt-text-label-fontSize);\n font-weight: var(--salt-text-fontWeight);\n gap: var(--salt-spacing-50);\n letter-spacing: var(--salt-text-letterSpacing);\n line-height: var(--salt-text-label-lineHeight);\n max-width: 100%;\n text-decoration: var(--salt-typography-textDecoration-none);\n}\n\n.saltBreadcrumb-link:not(.saltBreadcrumb-current) {\n text-decoration: var(--salt-typography-textDecoration-underline);\n}\n\n.saltBreadcrumb-link:not(.saltBreadcrumb-current):hover {\n text-decoration: var(--salt-typography-textDecoration-none);\n}\n\n.saltBreadcrumb-link:not(.saltBreadcrumb-current):active {\n text-decoration: var(--salt-typography-textDecoration-underline);\n}\n\n.saltBreadcrumb-trigger:focus {\n outline: var(--salt-focused-outline);\n text-decoration: var(--salt-typography-textDecoration-none);\n}\n\n.saltBreadcrumb-current {\n cursor: var(--salt-cursor-text);\n}\n\n.saltBreadcrumb-separator {\n --saltIcon-color: var(--salt-content-secondary-foreground);\n --saltIcon-size: var(--salt-size-icon);\n\n flex: 0 0 auto;\n}\n";
1
+ var css_248z = ".saltBreadcrumb {\n align-items: center;\n display: inline-flex;\n flex: 0 1 auto;\n gap: var(--salt-spacing-100);\n list-style: none;\n min-width: 0;\n}\n\n.saltBreadcrumb-current,\n.saltBreadcrumb-label,\n.saltBreadcrumb-link,\n.saltBreadcrumb-trigger {\n min-width: 0;\n}\n\n.saltBreadcrumb-trigger {\n align-items: center;\n color: var(--salt-content-primary-foreground);\n display: inline-flex;\n font-family: var(--salt-text-fontFamily);\n font-size: var(--salt-text-label-fontSize);\n font-weight: var(--salt-text-fontWeight);\n gap: var(--salt-spacing-50);\n letter-spacing: var(--salt-text-letterSpacing);\n line-height: var(--salt-text-label-lineHeight);\n max-width: 100%;\n text-decoration: var(--salt-typography-textDecoration-none);\n}\n\n.saltBreadcrumb-link:not(.saltBreadcrumb-current) {\n text-decoration: var(--salt-typography-textDecoration-underline);\n}\n\n.saltBreadcrumb-link:not(.saltBreadcrumb-current):hover {\n text-decoration: var(--salt-typography-textDecoration-none);\n}\n\n.saltBreadcrumb-link:not(.saltBreadcrumb-current):active {\n text-decoration: var(--salt-typography-textDecoration-underline);\n}\n\n.saltBreadcrumb-trigger:focus {\n outline: var(--salt-focused-outline);\n text-decoration: var(--salt-typography-textDecoration-none);\n}\n\n.saltBreadcrumb-current {\n cursor: var(--salt-cursor-text);\n}\n\n.saltBreadcrumb-separator {\n --saltIcon-color: var(--salt-content-secondary-foreground);\n --saltIcon-size: var(--salt-size-icon);\n\n flex: 0 0 auto;\n}\n";
2
2
 
3
3
  export { css_248z as default };
4
4
  //# sourceMappingURL=Breadcrumb.css.js.map
@@ -1,4 +1,4 @@
1
- var css_248z = ".saltBreadcrumbs {\n display: block;\n margin-block: var(--salt-spacing-25);\n}\n\n.saltBreadcrumbs-ol {\n display: flex;\n align-items: center;\n flex-wrap: nowrap;\n gap: var(--salt-spacing-100);\n justify-content: flex-start;\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.saltBreadcrumbs-ol-wrap {\n flex-wrap: wrap;\n}\n\n.saltBreadcrumbs-collapseItem {\n align-items: center;\n display: inline-flex;\n flex: 0 1 auto;\n gap: var(--salt-spacing-100);\n list-style: none;\n min-width: 0;\n}\n\n.saltBreadcrumbs-collapseButton[aria-expanded=\"true\"] {\n --saltButton-background: var(--salt-actionable-subtle-background-active);\n --saltButton-background-hover: var(--salt-actionable-subtle-background-active);\n --saltButton-text-color: var(--salt-actionable-subtle-foreground-active);\n --saltButton-text-color-hover: var(--salt-actionable-subtle-foreground-active);\n --saltButton-borderColor: var(--salt-actionable-subtle-borderColor-active);\n --saltButton-borderColor-hover: var(--salt-actionable-subtle-borderColor-active);\n cursor: var(--salt-cursor-active);\n}\n\n.saltBreadcrumbs-disclosure {\n background: var(--salt-container-primary-background);\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);\n overflow: hidden;\n overflow-y: auto;\n min-width: 10em;\n position: relative;\n z-index: var(--salt-zIndex-flyover);\n box-shadow: var(--salt-overlayable-shadow-popout);\n box-sizing: border-box;\n border-radius: var(--salt-palette-corner, 0);\n}\n\n.saltBreadcrumbs-disclosureList {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.saltBreadcrumbs-disclosureListItem {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.saltBreadcrumbs-disclosureItem {\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background);\n font-size: var(--salt-text-fontSize);\n font-weight: var(--salt-text-fontWeight);\n font-family: var(--salt-text-fontFamily);\n line-height: var(--salt-text-lineHeight);\n letter-spacing: var(--salt-text-letterSpacing);\n min-height: calc(var(--salt-size-base) + var(--salt-spacing-100));\n padding: calc(var(--salt-spacing-100) + var(--salt-spacing-25)) var(--salt-spacing-100);\n display: flex;\n gap: var(--salt-spacing-100);\n position: relative;\n cursor: var(--salt-cursor-hover);\n box-sizing: border-box;\n flex-shrink: 0;\n text-decoration: none;\n width: 100%;\n}\n\n.saltBreadcrumbs-disclosureItem:focus-visible {\n outline: var(--salt-focused-outline);\n outline-offset: calc(var(--salt-size-fixed-100) * -2);\n}\n\n.saltBreadcrumbs-disclosureItem:hover {\n outline: none;\n}\n\n.saltBreadcrumbs-disclosureItem:hover,\n.saltBreadcrumbs-disclosureItem:focus-visible {\n background: var(--salt-selectable-background-hover);\n}\n\n.saltBreadcrumbs-disclosureItem:active {\n background: var(--salt-selectable-background-selected);\n box-shadow:\n 0 calc(var(--salt-size-fixed-100) * -1) 0 0 var(--salt-selectable-borderColor-selected),\n 0 var(--salt-size-fixed-100) 0 0 var(--salt-selectable-borderColor-selected);\n}\n\n.saltBreadcrumbs-disclosureItem[aria-disabled=\"true\"],\n.saltBreadcrumbs-disclosureItem[aria-disabled=\"true\"]:active {\n background: var(--salt-selectable-background-disabled);\n color: var(--salt-content-primary-foreground-disabled);\n cursor: var(--salt-cursor-disabled);\n box-shadow: none;\n}\n";
1
+ var css_248z = ".saltBreadcrumbs {\n display: block;\n margin-block: var(--salt-spacing-25);\n}\n\n.saltBreadcrumbs-ol {\n display: flex;\n align-items: center;\n flex-wrap: nowrap;\n gap: var(--salt-spacing-100);\n justify-content: flex-start;\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.saltBreadcrumbs-ol-wrap {\n flex-wrap: wrap;\n}\n\n.saltBreadcrumbs-collapseItem {\n align-items: center;\n display: inline-flex;\n flex: 0 1 auto;\n gap: var(--salt-spacing-100);\n list-style: none;\n min-width: 0;\n}\n\n.saltBreadcrumbs-collapseButton[aria-expanded=\"true\"] {\n --saltButton-background: var(--salt-actionable-subtle-background-active);\n --saltButton-background-hover: var(--salt-actionable-subtle-background-active);\n --saltButton-text-color: var(--salt-actionable-subtle-foreground-active);\n --saltButton-text-color-hover: var(--salt-actionable-subtle-foreground-active);\n --saltButton-borderColor: var(--salt-actionable-subtle-borderColor-active);\n --saltButton-borderColor-hover: var(--salt-actionable-subtle-borderColor-active);\n cursor: var(--salt-cursor-active);\n}\n\n.saltBreadcrumbs-disclosure {\n background: var(--salt-container-primary-background);\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);\n overflow: hidden;\n overflow-y: auto;\n min-width: 10em;\n position: relative;\n z-index: var(--salt-zIndex-flyover);\n box-shadow: var(--salt-overlayable-shadow-popout);\n box-sizing: border-box;\n border-radius: var(--salt-palette-corner, 0);\n}\n\n.saltBreadcrumbs-disclosureList {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.saltBreadcrumbs-disclosureListItem {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.saltBreadcrumbs-disclosureItem {\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background);\n font-size: var(--salt-text-fontSize);\n font-weight: var(--salt-text-fontWeight);\n font-family: var(--salt-text-fontFamily);\n line-height: var(--salt-text-lineHeight);\n letter-spacing: var(--salt-text-letterSpacing);\n min-height: calc(var(--salt-size-base) + var(--salt-spacing-100));\n padding: calc(var(--salt-spacing-100) + var(--salt-spacing-25)) var(--salt-spacing-100);\n display: flex;\n gap: var(--salt-spacing-100);\n position: relative;\n cursor: var(--salt-cursor-hover);\n box-sizing: border-box;\n flex-shrink: 0;\n text-decoration: none;\n width: 100%;\n}\n\n.saltBreadcrumbs-disclosureItem:focus-visible {\n outline: var(--salt-focused-outline);\n outline-offset: calc(var(--salt-size-fixed-100) * -2);\n}\n\n.saltBreadcrumbs-disclosureItem:hover {\n outline: none;\n}\n\n.saltBreadcrumbs-disclosureItem:hover,\n.saltBreadcrumbs-disclosureItem:focus-visible {\n background: var(--salt-selectable-background-hover);\n}\n\n.saltBreadcrumbs-disclosureItem:active {\n background: var(--salt-selectable-background-selected);\n box-shadow:\n 0 calc(var(--salt-size-fixed-100) * -1) 0 0 var(--salt-selectable-borderColor-selected),\n 0 var(--salt-size-fixed-100) 0 0 var(--salt-selectable-borderColor-selected);\n}\n\n.saltBreadcrumbs-disclosureItem[aria-disabled=\"true\"],\n.saltBreadcrumbs-disclosureItem[aria-disabled=\"true\"]:active {\n opacity: 0.4;\n background: var(--salt-selectable-background);\n color: var(--salt-content-primary-foreground);\n cursor: var(--salt-cursor-disabled);\n box-shadow: none;\n}\n";
2
2
 
3
3
  export { css_248z as default };
4
4
  //# sourceMappingURL=Breadcrumbs.css.js.map
@@ -1,4 +1,4 @@
1
- var css_248z = "/* Styles applied to root component */\n.saltCheckbox {\n display: inline-flex;\n width: fit-content;\n gap: var(--salt-spacing-100);\n position: relative;\n cursor: var(--salt-cursor-hover);\n\n font-size: var(--salt-text-fontSize);\n line-height: var(--salt-text-lineHeight);\n font-family: var(--salt-text-fontFamily);\n font-weight: var(--salt-text-fontWeight);\n}\n\n/* Styles applied to root component if `disabled={true}` */\n.saltCheckbox-disabled {\n color: var(--salt-content-primary-foreground);\n\n cursor: var(--salt-cursor-disabled);\n opacity: 0.4;\n}\n\n/* Styles applied to root component if `readOnly={true}` */\n.saltCheckbox-readOnly {\n color: var(--salt-content-primary-foreground);\n cursor: var(--salt-cursor-readonly);\n}\n\n.saltCheckbox-input,\n.saltCheckboxIcon {\n margin: calc((var(--salt-text-lineHeight) - var(--salt-size-selectable)) / 2) 0;\n box-sizing: border-box;\n}\n\n/* Styles applied to the icon component if focused */\n.saltCheckbox-input:focus-visible + .saltCheckboxIcon {\n outline-offset: var(--salt-spacing-fixed-100);\n outline: var(--saltCheckbox-outline, var(--salt-focused-outline));\n border-color: var(--salt-selectable-borderColor-hover);\n color: var(--salt-selectable-foreground-hover);\n clip-path: unset;\n}\n\n.saltCheckbox-input:focus-visible + .saltCheckboxIcon-checked {\n border-color: var(--salt-selectable-borderColor-selected);\n color: var(--salt-selectable-foreground-selected);\n}\n\n.saltCheckbox-error .saltCheckbox-input:focus-visible + .saltCheckboxIcon {\n outline-color: var(--salt-status-error-foreground-decorative);\n border-color: var(--salt-status-error-borderColor);\n color: var(--salt-status-error-foreground-decorative);\n}\n\n.saltCheckbox-warning .saltCheckbox-input:focus-visible + .saltCheckboxIcon {\n outline-color: var(--salt-status-warning-foreground-decorative);\n border-color: var(--salt-status-warning-borderColor);\n color: var(--salt-status-warning-foreground-decorative);\n}\n\n/* Styles applied to input element */\n.saltCheckbox-input {\n cursor: inherit;\n opacity: 0;\n padding: 0;\n position: absolute;\n z-index: var(--salt-zIndex-default);\n}\n";
1
+ var css_248z = "/* Styles applied to root component */\n.saltCheckbox {\n display: inline-flex;\n width: fit-content;\n gap: var(--salt-spacing-100);\n position: relative;\n cursor: var(--salt-cursor-hover);\n\n font-size: var(--salt-text-fontSize);\n line-height: var(--salt-text-lineHeight);\n font-family: var(--salt-text-fontFamily);\n font-weight: var(--salt-text-fontWeight);\n letter-spacing: var(--salt-text-letterSpacing);\n}\n\n/* Styles applied to root component if `disabled={true}` */\n.saltCheckbox-disabled {\n color: var(--salt-content-primary-foreground);\n\n cursor: var(--salt-cursor-disabled);\n opacity: 0.4;\n}\n\n/* Styles applied to root component if `readOnly={true}` */\n.saltCheckbox-readOnly {\n color: var(--salt-content-primary-foreground);\n cursor: var(--salt-cursor-readonly);\n}\n\n.saltCheckbox-input,\n.saltCheckboxIcon {\n margin: calc((var(--salt-text-lineHeight) - var(--salt-size-selectable)) / 2) 0;\n box-sizing: border-box;\n}\n\n/* Styles applied to the icon component if focused */\n.saltCheckbox-input:focus-visible + .saltCheckboxIcon {\n outline-offset: var(--salt-spacing-fixed-100);\n outline: var(--saltCheckbox-outline, var(--salt-focused-outline));\n border-color: var(--salt-selectable-borderColor-hover);\n color: var(--salt-selectable-foreground-hover);\n clip-path: unset;\n}\n\n.saltCheckbox-input:focus-visible + .saltCheckboxIcon-checked {\n border-color: var(--salt-selectable-borderColor-selected);\n color: var(--salt-selectable-foreground-selected);\n}\n\n.saltCheckbox-error .saltCheckbox-input:focus-visible + .saltCheckboxIcon {\n outline-color: var(--salt-status-error-foreground-decorative);\n border-color: var(--salt-status-error-borderColor);\n color: var(--salt-status-error-foreground-decorative);\n}\n\n.saltCheckbox-warning .saltCheckbox-input:focus-visible + .saltCheckboxIcon {\n outline-color: var(--salt-status-warning-foreground-decorative);\n border-color: var(--salt-status-warning-borderColor);\n color: var(--salt-status-warning-foreground-decorative);\n}\n\n/* Styles applied to input element */\n.saltCheckbox-input {\n cursor: inherit;\n opacity: 0;\n padding: 0;\n position: absolute;\n z-index: var(--salt-zIndex-default);\n}\n";
2
2
 
3
3
  export { css_248z as default };
4
4
  //# sourceMappingURL=Checkbox.css.js.map
@@ -1,4 +1,4 @@
1
- var css_248z = ".saltCheckboxIcon {\n --checkbox-size: var(--salt-size-selectable);\n width: var(--checkbox-size);\n min-width: var(--checkbox-size);\n height: var(--checkbox-size);\n min-height: var(--checkbox-size);\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor);\n border-radius: var(--salt-palette-corner-weaker, 0);\n color: var(--salt-selectable-foreground);\n background: var(--salt-container-primary-background);\n position: relative;\n --saltIcon-size: 100%;\n display: flex;\n /* Using overflow:hidden here causes a thin white line */\n clip-path: border-box;\n box-sizing: border-box;\n}\n\n.saltCheckboxIcon-checked,\n.saltCheckbox:hover .saltCheckboxIcon-checked {\n border-color: var(--salt-selectable-borderColor-selected);\n color: var(--salt-selectable-foreground-selected);\n}\n\n.saltCheckbox:hover .saltCheckboxIcon,\n.saltCheckbox:hover .saltCheckboxIcon-indeterminate {\n border-color: var(--salt-selectable-borderColor-hover);\n color: var(--salt-selectable-foreground-hover);\n}\n\n.saltCheckboxIcon-checked.saltCheckboxIcon-indeterminate {\n border-color: var(--salt-selectable-borderColor);\n color: var(--salt-selectable-foreground);\n}\n\n.saltCheckboxIcon-disabled,\n.saltCheckbox:hover .saltCheckboxIcon-disabled,\n.saltCheckboxIcon-disabled.saltCheckboxIcon-indeterminate,\n.saltCheckbox:hover .saltCheckboxIcon-disabled.saltCheckboxIcon-indeterminate {\n opacity: 0.4;\n\n border-color: var(--salt-selectable-borderColor);\n background: var(--salt-container-primary-background);\n color: var(--salt-selectable-foreground);\n}\n\n.saltCheckboxIcon-checked.saltCheckboxIcon-disabled,\n.saltCheckbox:hover .saltCheckboxIcon-checked.saltCheckboxIcon-disabled {\n border-color: var(--salt-selectable-borderColor-selected);\n color: var(--salt-selectable-foreground-selected);\n}\n\n.saltCheckboxIcon-indeterminate::before {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 50%;\n width: calc(var(--checkbox-size) - 6px);\n height: 2px;\n background: currentColor;\n transform: translate(-50%, -50%);\n}\n\n.saltCheckboxIcon-error,\n.saltCheckbox:hover .saltCheckboxIcon-error {\n color: var(--salt-status-error-foreground-decorative);\n border-color: var(--salt-status-error-borderColor);\n outline-color: var(--salt-status-error-foreground-decorative);\n}\n\n.saltCheckboxIcon-warning,\n.saltCheckbox:hover .saltCheckboxIcon-warning {\n color: var(--salt-status-warning-foreground-decorative);\n border-color: var(--salt-status-warning-borderColor);\n outline-color: var(--salt-status-warning-foreground-decorative);\n}\n\n.saltCheckboxIcon-readOnly,\n.saltCheckbox:hover .saltCheckboxIcon-readOnly,\n.saltCheckbox-input:focus-visible + .saltCheckboxIcon-readOnly {\n border-color: var(--salt-selectable-borderColor-readonly);\n border-style: var(--salt-borderStyle-dashed);\n color: var(--salt-content-primary-foreground);\n}\n\n.saltCheckboxIcon > svg {\n position: absolute;\n /* Ensure a gap doesn't appear when device scaling is used */\n transform: scale(1.01);\n}\n";
1
+ var css_248z = ".saltCheckboxIcon {\n --checkbox-size: var(--salt-size-selectable);\n width: var(--checkbox-size);\n min-width: var(--checkbox-size);\n height: var(--checkbox-size);\n min-height: var(--checkbox-size);\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor);\n border-radius: var(--salt-palette-corner-weaker, 0);\n color: var(--salt-selectable-foreground);\n background: var(--salt-container-primary-background);\n position: relative;\n --saltIcon-size: 100%;\n display: flex;\n /* Using overflow:hidden here causes a thin white line */\n clip-path: border-box;\n box-sizing: border-box;\n}\n\n.saltCheckboxIcon-checked,\n.saltCheckbox:hover .saltCheckboxIcon-checked {\n border-color: var(--salt-selectable-borderColor-selected);\n color: var(--salt-selectable-foreground-selected);\n}\n\n.saltCheckbox:hover .saltCheckboxIcon,\n.saltCheckbox:hover .saltCheckboxIcon-indeterminate {\n border-color: var(--salt-selectable-borderColor-hover);\n color: var(--salt-selectable-foreground-hover);\n}\n\n.saltCheckboxIcon-checked.saltCheckboxIcon-indeterminate {\n border-color: var(--salt-selectable-borderColor);\n color: var(--salt-selectable-foreground);\n}\n\n.saltCheckbox-disabled:hover .saltCheckboxIcon,\n.saltCheckbox-disabled:hover .saltCheckboxIcon-indeterminate {\n border-color: var(--salt-selectable-borderColor);\n color: var(--salt-selectable-foreground);\n}\n\n.saltCheckbox-disabled:hover .saltCheckboxIcon-checked {\n border-color: var(--salt-selectable-borderColor-selected);\n color: var(--salt-selectable-foreground-selected);\n}\n\n.saltCheckbox-disabled:hover .saltCheckboxIcon-checked.saltCheckboxIcon-indeterminate {\n border-color: var(--salt-selectable-borderColor);\n color: var(--salt-selectable-foreground);\n}\n\n.saltCheckboxIcon-disabled,\n.saltCheckbox:hover .saltCheckboxIcon-disabled,\n.saltCheckboxIcon-disabled.saltCheckboxIcon-indeterminate,\n.saltCheckbox:hover .saltCheckboxIcon-disabled.saltCheckboxIcon-indeterminate {\n opacity: 0.4;\n\n border-color: var(--salt-selectable-borderColor);\n background: var(--salt-container-primary-background);\n color: var(--salt-selectable-foreground);\n}\n\n.saltCheckboxIcon-checked.saltCheckboxIcon-disabled,\n.saltCheckbox:hover .saltCheckboxIcon-checked.saltCheckboxIcon-disabled {\n border-color: var(--salt-selectable-borderColor-selected);\n color: var(--salt-selectable-foreground-selected);\n}\n\n.saltCheckboxIcon-indeterminate::before {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 50%;\n width: calc(var(--checkbox-size) - 6px);\n height: 2px;\n background: currentColor;\n transform: translate(-50%, -50%);\n}\n\n.saltCheckboxIcon-error,\n.saltCheckbox:hover .saltCheckboxIcon-error {\n color: var(--salt-status-error-foreground-decorative);\n border-color: var(--salt-status-error-borderColor);\n outline-color: var(--salt-status-error-foreground-decorative);\n}\n\n.saltCheckboxIcon-warning,\n.saltCheckbox:hover .saltCheckboxIcon-warning {\n color: var(--salt-status-warning-foreground-decorative);\n border-color: var(--salt-status-warning-borderColor);\n outline-color: var(--salt-status-warning-foreground-decorative);\n}\n\n.saltCheckboxIcon-readOnly,\n.saltCheckbox:hover .saltCheckboxIcon-readOnly,\n.saltCheckbox-input:focus-visible + .saltCheckboxIcon-readOnly {\n border-color: var(--salt-selectable-borderColor-readonly);\n border-style: var(--salt-borderStyle-dashed);\n color: var(--salt-content-primary-foreground);\n}\n\n.saltCheckboxIcon > svg {\n position: absolute;\n /* Ensure a gap doesn't appear when device scaling is used */\n transform: scale(1.01);\n}\n";
2
2
 
3
3
  export { css_248z as default };
4
4
  //# sourceMappingURL=CheckboxIcon.css.js.map
@@ -6,7 +6,8 @@ import { forwardRef, useRef, Children, useEffect } from 'react';
6
6
  import { Button } from '../button/Button.js';
7
7
  import '../form-field-context/FormFieldContext.js';
8
8
  import { useFormFieldProps } from '../form-field-context/useFormFieldProps.js';
9
- import { ListControlContext } from '../list-control/ListControlContext.js';
9
+ import { isModifiedListControlNavigationKey, isListControlNavigationKey, getComboBoxNavigationTarget } from '../list-control/ListControlNavigationKeys.js';
10
+ import { ListControlProvider } from '../list-control/ListControlProvider.js';
10
11
  import { defaultValueToString } from '../list-control/ListControlState.js';
11
12
  import { OptionList } from '../option/OptionList.js';
12
13
  import { PillInput } from '../pill-input/PillInput.js';
@@ -166,7 +167,7 @@ const ComboBox = forwardRef(function ComboBox2(props, ref) {
166
167
  if (!event.repeat) {
167
168
  shouldAutoSelectRef.current = false;
168
169
  }
169
- if (readOnly) {
170
+ if (readOnly || isModifiedListControlNavigationKey(event)) {
170
171
  return;
171
172
  }
172
173
  if (!openState) {
@@ -175,41 +176,22 @@ const ComboBox = forwardRef(function ComboBox2(props, ref) {
175
176
  return;
176
177
  }
177
178
  }
179
+ if ((!openState || !hasValidChildren) && isListControlNavigationKey(event.key)) {
180
+ return;
181
+ }
178
182
  const activeOption = activeState;
179
- let newActive;
183
+ if (event.key === "PageUp" || event.key === "PageDown") {
184
+ event.preventDefault();
185
+ }
186
+ const newActive = getComboBoxNavigationTarget(event.key, activeOption, {
187
+ getFirstOption,
188
+ getLastOption,
189
+ getOptionAfter,
190
+ getOptionBefore,
191
+ getOptionPageAbove,
192
+ getOptionPageBelow
193
+ });
180
194
  switch (event.key) {
181
- case "ArrowDown":
182
- newActive = activeOption ? getOptionAfter(activeOption) : getFirstOption();
183
- break;
184
- case "ArrowUp":
185
- newActive = activeOption ? getOptionBefore(activeOption) : getLastOption();
186
- break;
187
- case "Home":
188
- newActive = getFirstOption();
189
- break;
190
- case "End":
191
- newActive = getLastOption();
192
- break;
193
- case "PageUp":
194
- if (activeOption) {
195
- newActive = getOptionPageAbove(activeOption);
196
- } else {
197
- const lastOption = getLastOption();
198
- if (lastOption) {
199
- newActive = getOptionPageAbove(lastOption == null ? void 0 : lastOption.data);
200
- }
201
- }
202
- break;
203
- case "PageDown":
204
- if (activeOption) {
205
- newActive = getOptionPageBelow(activeOption);
206
- } else {
207
- const firstOption = getFirstOption();
208
- if (firstOption) {
209
- newActive = getOptionPageBelow(firstOption.data);
210
- }
211
- }
212
- break;
213
195
  case "Enter":
214
196
  if (openState && (activeState == null ? void 0 : activeState.disabled)) {
215
197
  event.preventDefault();
@@ -345,7 +327,7 @@ const ComboBox = forwardRef(function ComboBox2(props, ref) {
345
327
  endAdornmentProp,
346
328
  showOptionsButton
347
329
  ] }) : endAdornmentProp;
348
- return /* @__PURE__ */ jsxs(ListControlContext.Provider, { value: listControl, children: [
330
+ return /* @__PURE__ */ jsxs(ListControlProvider, { value: listControl, children: [
349
331
  /* @__PURE__ */ jsx(
350
332
  PillInput,
351
333
  {