@salt-ds/lab 1.0.0-alpha.10 → 1.0.0-alpha.12

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 (234) hide show
  1. package/dist-cjs/accordion/Accordion.css.js +1 -1
  2. package/dist-cjs/accordion/Accordion.js +33 -108
  3. package/dist-cjs/accordion/Accordion.js.map +1 -1
  4. package/dist-cjs/accordion/AccordionContext.js +15 -11
  5. package/dist-cjs/accordion/AccordionContext.js.map +1 -1
  6. package/dist-cjs/accordion/AccordionGroup.js +23 -0
  7. package/dist-cjs/accordion/AccordionGroup.js.map +1 -0
  8. package/dist-cjs/accordion/AccordionHeader.css.js +6 -0
  9. package/dist-cjs/accordion/AccordionHeader.css.js.map +1 -0
  10. package/dist-cjs/accordion/AccordionHeader.js +50 -0
  11. package/dist-cjs/accordion/AccordionHeader.js.map +1 -0
  12. package/dist-cjs/accordion/AccordionPanel.css.js +6 -0
  13. package/dist-cjs/accordion/AccordionPanel.css.js.map +1 -0
  14. package/dist-cjs/accordion/AccordionPanel.js +45 -0
  15. package/dist-cjs/accordion/AccordionPanel.js.map +1 -0
  16. package/dist-cjs/common-hooks/useKeyboardNavigation.js +0 -3
  17. package/dist-cjs/common-hooks/useKeyboardNavigation.js.map +1 -1
  18. package/dist-cjs/dialog/DialogTitle.css.js +1 -1
  19. package/dist-cjs/dialog/DialogTitle.js +2 -3
  20. package/dist-cjs/dialog/DialogTitle.js.map +1 -1
  21. package/dist-cjs/dropdown/Dropdown.js +5 -2
  22. package/dist-cjs/dropdown/Dropdown.js.map +1 -1
  23. package/dist-cjs/dropdown/useDropdown.js +12 -0
  24. package/dist-cjs/dropdown/useDropdown.js.map +1 -1
  25. package/dist-cjs/form-field-legacy/FormFieldLegacy.css.js +1 -1
  26. package/dist-cjs/index.js +23 -10
  27. package/dist-cjs/index.js.map +1 -1
  28. package/dist-cjs/list/useList.js +0 -1
  29. package/dist-cjs/list/useList.js.map +1 -1
  30. package/dist-cjs/list-deprecated/ListItem.css.js +1 -1
  31. package/dist-cjs/list-next/ListItemNext.css.js +6 -0
  32. package/dist-cjs/list-next/ListItemNext.css.js.map +1 -0
  33. package/dist-cjs/list-next/ListItemNext.js +74 -0
  34. package/dist-cjs/list-next/ListItemNext.js.map +1 -0
  35. package/dist-cjs/list-next/ListNext.css.js +6 -0
  36. package/dist-cjs/list-next/ListNext.css.js.map +1 -0
  37. package/dist-cjs/list-next/ListNext.js +92 -0
  38. package/dist-cjs/list-next/ListNext.js.map +1 -0
  39. package/dist-cjs/list-next/ListNextContext.js +18 -0
  40. package/dist-cjs/list-next/ListNextContext.js.map +1 -0
  41. package/dist-cjs/list-next/useList.js +188 -0
  42. package/dist-cjs/list-next/useList.js.map +1 -0
  43. package/dist-cjs/logo/Logo.css.js +1 -1
  44. package/dist-cjs/logo/Logo.js +4 -36
  45. package/dist-cjs/logo/Logo.js.map +1 -1
  46. package/dist-cjs/logo/LogoImage.js +24 -0
  47. package/dist-cjs/logo/LogoImage.js.map +1 -0
  48. package/dist-cjs/logo/LogoSeparator.css.js +6 -0
  49. package/dist-cjs/logo/LogoSeparator.css.js.map +1 -0
  50. package/dist-cjs/logo/LogoSeparator.js +32 -0
  51. package/dist-cjs/logo/LogoSeparator.js.map +1 -0
  52. package/dist-cjs/multiline-input/MultilineInput.css.js +6 -0
  53. package/dist-cjs/multiline-input/MultilineInput.css.js.map +1 -0
  54. package/dist-cjs/multiline-input/MultilineInput.js +150 -0
  55. package/dist-cjs/multiline-input/MultilineInput.js.map +1 -0
  56. package/dist-cjs/pill/Pill.css.js +1 -1
  57. package/dist-cjs/query-input/internal/QueryInputBody.js +5 -5
  58. package/dist-cjs/query-input/internal/QueryInputBody.js.map +1 -1
  59. package/dist-cjs/tabs-next/OverflowMenu.js +49 -0
  60. package/dist-cjs/tabs-next/OverflowMenu.js.map +1 -0
  61. package/dist-cjs/tabs-next/TabNext.css.js +6 -0
  62. package/dist-cjs/tabs-next/TabNext.css.js.map +1 -0
  63. package/dist-cjs/tabs-next/TabNext.js +87 -0
  64. package/dist-cjs/tabs-next/TabNext.js.map +1 -0
  65. package/dist-cjs/tabs-next/TabNextContext.js +23 -0
  66. package/dist-cjs/tabs-next/TabNextContext.js.map +1 -0
  67. package/dist-cjs/tabs-next/TabstripNext.css.js +6 -0
  68. package/dist-cjs/tabs-next/TabstripNext.css.js.map +1 -0
  69. package/dist-cjs/tabs-next/TabstripNext.js +180 -0
  70. package/dist-cjs/tabs-next/TabstripNext.js.map +1 -0
  71. package/dist-cjs/toggle-button/ToggleButton.css.js +1 -1
  72. package/dist-cjs/toggle-button/ToggleButton.js +44 -74
  73. package/dist-cjs/toggle-button/ToggleButton.js.map +1 -1
  74. package/dist-cjs/toggle-button-group/ToggleButtonGroup.css.js +6 -0
  75. package/dist-cjs/toggle-button-group/ToggleButtonGroup.js +111 -0
  76. package/dist-cjs/toggle-button-group/ToggleButtonGroup.js.map +1 -0
  77. package/dist-cjs/toggle-button-group/ToggleButtonGroupContext.js +15 -0
  78. package/dist-cjs/toggle-button-group/ToggleButtonGroupContext.js.map +1 -0
  79. package/dist-cjs/tokenized-input/TokenizedInput.css.js +1 -1
  80. package/dist-cjs/toolbar/ToolbarButton.css.js +1 -1
  81. package/dist-es/accordion/Accordion.css.js +1 -1
  82. package/dist-es/accordion/Accordion.js +35 -110
  83. package/dist-es/accordion/Accordion.js.map +1 -1
  84. package/dist-es/accordion/AccordionContext.js +15 -11
  85. package/dist-es/accordion/AccordionContext.js.map +1 -1
  86. package/dist-es/accordion/AccordionGroup.js +19 -0
  87. package/dist-es/accordion/AccordionGroup.js.map +1 -0
  88. package/dist-es/accordion/AccordionHeader.css.js +4 -0
  89. package/dist-es/accordion/AccordionHeader.css.js.map +1 -0
  90. package/dist-es/accordion/AccordionHeader.js +46 -0
  91. package/dist-es/accordion/AccordionHeader.js.map +1 -0
  92. package/dist-es/accordion/AccordionPanel.css.js +4 -0
  93. package/dist-es/accordion/AccordionPanel.css.js.map +1 -0
  94. package/dist-es/accordion/AccordionPanel.js +41 -0
  95. package/dist-es/accordion/AccordionPanel.js.map +1 -0
  96. package/dist-es/common-hooks/useKeyboardNavigation.js +0 -3
  97. package/dist-es/common-hooks/useKeyboardNavigation.js.map +1 -1
  98. package/dist-es/dialog/DialogTitle.css.js +1 -1
  99. package/dist-es/dialog/DialogTitle.js +3 -4
  100. package/dist-es/dialog/DialogTitle.js.map +1 -1
  101. package/dist-es/dropdown/Dropdown.js +5 -2
  102. package/dist-es/dropdown/Dropdown.js.map +1 -1
  103. package/dist-es/dropdown/useDropdown.js +12 -0
  104. package/dist-es/dropdown/useDropdown.js.map +1 -1
  105. package/dist-es/form-field-legacy/FormFieldLegacy.css.js +1 -1
  106. package/dist-es/index.js +12 -5
  107. package/dist-es/index.js.map +1 -1
  108. package/dist-es/list/useList.js +0 -1
  109. package/dist-es/list/useList.js.map +1 -1
  110. package/dist-es/list-deprecated/ListItem.css.js +1 -1
  111. package/dist-es/list-next/ListItemNext.css.js +4 -0
  112. package/dist-es/list-next/ListItemNext.css.js.map +1 -0
  113. package/dist-es/list-next/ListItemNext.js +70 -0
  114. package/dist-es/list-next/ListItemNext.js.map +1 -0
  115. package/dist-es/list-next/ListNext.css.js +4 -0
  116. package/dist-es/list-next/ListNext.css.js.map +1 -0
  117. package/dist-es/list-next/ListNext.js +88 -0
  118. package/dist-es/list-next/ListNext.js.map +1 -0
  119. package/dist-es/list-next/ListNextContext.js +13 -0
  120. package/dist-es/list-next/ListNextContext.js.map +1 -0
  121. package/dist-es/list-next/useList.js +184 -0
  122. package/dist-es/list-next/useList.js.map +1 -0
  123. package/dist-es/logo/Logo.css.js +1 -1
  124. package/dist-es/logo/Logo.js +5 -37
  125. package/dist-es/logo/Logo.js.map +1 -1
  126. package/dist-es/logo/LogoImage.js +20 -0
  127. package/dist-es/logo/LogoImage.js.map +1 -0
  128. package/dist-es/logo/LogoSeparator.css.js +4 -0
  129. package/dist-es/logo/LogoSeparator.css.js.map +1 -0
  130. package/dist-es/logo/LogoSeparator.js +28 -0
  131. package/dist-es/logo/LogoSeparator.js.map +1 -0
  132. package/dist-es/multiline-input/MultilineInput.css.js +4 -0
  133. package/dist-es/multiline-input/MultilineInput.css.js.map +1 -0
  134. package/dist-es/multiline-input/MultilineInput.js +146 -0
  135. package/dist-es/multiline-input/MultilineInput.js.map +1 -0
  136. package/dist-es/pill/Pill.css.js +1 -1
  137. package/dist-es/query-input/internal/QueryInputBody.js +5 -5
  138. package/dist-es/query-input/internal/QueryInputBody.js.map +1 -1
  139. package/dist-es/tabs-next/OverflowMenu.js +45 -0
  140. package/dist-es/tabs-next/OverflowMenu.js.map +1 -0
  141. package/dist-es/tabs-next/TabNext.css.js +4 -0
  142. package/dist-es/tabs-next/TabNext.css.js.map +1 -0
  143. package/dist-es/tabs-next/TabNext.js +79 -0
  144. package/dist-es/tabs-next/TabNext.js.map +1 -0
  145. package/dist-es/tabs-next/TabNextContext.js +18 -0
  146. package/dist-es/tabs-next/TabNextContext.js.map +1 -0
  147. package/dist-es/tabs-next/TabstripNext.css.js +4 -0
  148. package/dist-es/tabs-next/TabstripNext.css.js.map +1 -0
  149. package/dist-es/tabs-next/TabstripNext.js +172 -0
  150. package/dist-es/tabs-next/TabstripNext.js.map +1 -0
  151. package/dist-es/toggle-button/ToggleButton.css.js +1 -1
  152. package/dist-es/toggle-button/ToggleButton.js +45 -75
  153. package/dist-es/toggle-button/ToggleButton.js.map +1 -1
  154. package/dist-es/toggle-button-group/ToggleButtonGroup.css.js +4 -0
  155. package/dist-es/toggle-button-group/ToggleButtonGroup.js +107 -0
  156. package/dist-es/toggle-button-group/ToggleButtonGroup.js.map +1 -0
  157. package/dist-es/toggle-button-group/ToggleButtonGroupContext.js +10 -0
  158. package/dist-es/toggle-button-group/ToggleButtonGroupContext.js.map +1 -0
  159. package/dist-es/tokenized-input/TokenizedInput.css.js +1 -1
  160. package/dist-es/toolbar/ToolbarButton.css.js +1 -1
  161. package/dist-types/accordion/Accordion.d.ts +22 -6
  162. package/dist-types/accordion/AccordionContext.d.ts +8 -8
  163. package/dist-types/accordion/AccordionGroup.d.ts +4 -0
  164. package/dist-types/accordion/AccordionHeader.d.ts +4 -0
  165. package/dist-types/accordion/AccordionPanel.d.ts +4 -0
  166. package/dist-types/accordion/index.d.ts +3 -4
  167. package/dist-types/dropdown/useDropdown.d.ts +1 -1
  168. package/dist-types/index.d.ts +4 -0
  169. package/dist-types/list-next/ListItemNext.d.ts +11 -0
  170. package/dist-types/list-next/ListNext.d.ts +10 -0
  171. package/dist-types/list-next/ListNextContext.d.ts +10 -0
  172. package/dist-types/list-next/index.d.ts +2 -0
  173. package/dist-types/list-next/useList.d.ts +29 -0
  174. package/dist-types/logo/Logo.d.ts +3 -31
  175. package/dist-types/logo/LogoImage.d.ts +5 -0
  176. package/dist-types/logo/LogoSeparator.d.ts +3 -0
  177. package/dist-types/logo/index.d.ts +2 -0
  178. package/dist-types/multiline-input/MultilineInput.d.ts +40 -0
  179. package/dist-types/multiline-input/index.d.ts +1 -0
  180. package/dist-types/tabs-next/OverflowMenu.d.ts +11 -0
  181. package/dist-types/tabs-next/TabNext.d.ts +5 -0
  182. package/dist-types/tabs-next/TabNextContext.d.ts +17 -0
  183. package/dist-types/tabs-next/TabstripNext.d.ts +10 -0
  184. package/dist-types/tabs-next/index.d.ts +2 -0
  185. package/dist-types/toggle-button/ToggleButton.d.ts +6 -11
  186. package/dist-types/toggle-button/index.d.ts +0 -1
  187. package/dist-types/toggle-button-group/ToggleButtonGroup.d.ts +25 -0
  188. package/dist-types/toggle-button-group/ToggleButtonGroupContext.d.ts +10 -0
  189. package/dist-types/toggle-button-group/index.d.ts +2 -0
  190. package/package.json +7 -5
  191. package/dist-cjs/accordion/AccordionDetails.js +0 -87
  192. package/dist-cjs/accordion/AccordionDetails.js.map +0 -1
  193. package/dist-cjs/accordion/AccordionSection.js +0 -111
  194. package/dist-cjs/accordion/AccordionSection.js.map +0 -1
  195. package/dist-cjs/accordion/AccordionSectionContext.js +0 -24
  196. package/dist-cjs/accordion/AccordionSectionContext.js.map +0 -1
  197. package/dist-cjs/accordion/AccordionSummary.js +0 -64
  198. package/dist-cjs/accordion/AccordionSummary.js.map +0 -1
  199. package/dist-cjs/accordion/utils.js +0 -8
  200. package/dist-cjs/accordion/utils.js.map +0 -1
  201. package/dist-cjs/logo/internal/LogoTitle.js +0 -28
  202. package/dist-cjs/logo/internal/LogoTitle.js.map +0 -1
  203. package/dist-cjs/toggle-button/ToggleButtonGroup.css.js +0 -6
  204. package/dist-cjs/toggle-button/ToggleButtonGroup.js +0 -147
  205. package/dist-cjs/toggle-button/ToggleButtonGroup.js.map +0 -1
  206. package/dist-cjs/toggle-button/internal/ToggleButtonGroupContext.js +0 -10
  207. package/dist-cjs/toggle-button/internal/ToggleButtonGroupContext.js.map +0 -1
  208. package/dist-es/accordion/AccordionDetails.js +0 -83
  209. package/dist-es/accordion/AccordionDetails.js.map +0 -1
  210. package/dist-es/accordion/AccordionSection.js +0 -107
  211. package/dist-es/accordion/AccordionSection.js.map +0 -1
  212. package/dist-es/accordion/AccordionSectionContext.js +0 -19
  213. package/dist-es/accordion/AccordionSectionContext.js.map +0 -1
  214. package/dist-es/accordion/AccordionSummary.js +0 -60
  215. package/dist-es/accordion/AccordionSummary.js.map +0 -1
  216. package/dist-es/accordion/utils.js +0 -4
  217. package/dist-es/accordion/utils.js.map +0 -1
  218. package/dist-es/logo/internal/LogoTitle.js +0 -24
  219. package/dist-es/logo/internal/LogoTitle.js.map +0 -1
  220. package/dist-es/toggle-button/ToggleButtonGroup.css.js +0 -4
  221. package/dist-es/toggle-button/ToggleButtonGroup.js +0 -143
  222. package/dist-es/toggle-button/ToggleButtonGroup.js.map +0 -1
  223. package/dist-es/toggle-button/internal/ToggleButtonGroupContext.js +0 -6
  224. package/dist-es/toggle-button/internal/ToggleButtonGroupContext.js.map +0 -1
  225. package/dist-types/accordion/AccordionDetails.d.ts +0 -8
  226. package/dist-types/accordion/AccordionSection.d.ts +0 -9
  227. package/dist-types/accordion/AccordionSectionContext.d.ts +0 -8
  228. package/dist-types/accordion/AccordionSummary.d.ts +0 -5
  229. package/dist-types/accordion/utils.d.ts +0 -1
  230. package/dist-types/logo/internal/LogoTitle.d.ts +0 -6
  231. package/dist-types/toggle-button/ToggleButtonGroup.d.ts +0 -18
  232. package/dist-types/toggle-button/internal/ToggleButtonGroupContext.d.ts +0 -14
  233. /package/dist-cjs/{toggle-button → toggle-button-group}/ToggleButtonGroup.css.js.map +0 -0
  234. /package/dist-es/{toggle-button → toggle-button-group}/ToggleButtonGroup.css.js.map +0 -0
@@ -3,29 +3,28 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
+ var React = require('react');
6
7
  var core = require('@salt-ds/core');
7
8
  var clsx = require('clsx');
8
- var React = require('react');
9
- var ToggleButtonGroupContext = require('./internal/ToggleButtonGroupContext.js');
9
+ require('../toggle-button-group/ToggleButtonGroup.js');
10
+ var ToggleButtonGroupContext = require('../toggle-button-group/ToggleButtonGroupContext.js');
10
11
  var window = require('@salt-ds/window');
11
12
  var styles = require('@salt-ds/styles');
12
13
  var ToggleButton$1 = require('./ToggleButton.css.js');
13
14
 
14
15
  const withBaseName = core.makePrefixer("saltToggleButton");
15
16
  const ToggleButton = React.forwardRef(
16
- (props, ref) => {
17
+ function ToggleButton2(props, ref) {
17
18
  const {
18
- "aria-label": ariaLabel,
19
+ children,
19
20
  className,
20
- onToggle,
21
- toggled = false,
22
- tooltipText = ariaLabel,
23
- variant: variantProp = "primary",
24
21
  disabled: disabledProp,
25
- disableTooltip: disableTooltipProp,
26
- focusableWhenDisabled: focusableWhenDisabledProp,
27
- "data-button-index": index,
28
- ...restProps
22
+ value,
23
+ onClick,
24
+ onFocus,
25
+ onChange,
26
+ selected: selectedProp,
27
+ ...rest
29
28
  } = props;
30
29
  const targetWindow = window.useWindow();
31
30
  styles.useComponentCssInjection({
@@ -33,70 +32,41 @@ const ToggleButton = React.forwardRef(
33
32
  css: ToggleButton$1,
34
33
  window: targetWindow
35
34
  });
36
- const [iconOnly, setIconOnly] = React.useState(false);
37
35
  const buttonRef = React.useRef(null);
38
- const groupContext = React.useContext(ToggleButtonGroupContext.ToggleButtonGroupContext);
39
- const handleIconOnlyButton = React.useCallback(
40
- (button) => {
41
- setIconOnly(
42
- (button == null ? void 0 : button.querySelector(".saltIcon")) != null && (button == null ? void 0 : button.childElementCount) === 1
43
- );
44
- },
45
- [setIconOnly]
46
- );
47
- const {
48
- register,
49
- unregister,
50
- disabled = disabledProp,
51
- disableTooltip = disableTooltipProp,
52
- focusableWhenDisabled = focusableWhenDisabledProp,
53
- orientation = "horizontal",
54
- variant = variantProp
55
- } = groupContext || {};
56
- React.useEffect(() => {
57
- if (index !== void 0 && register && unregister && (!disabled || focusableWhenDisabled)) {
58
- register(buttonRef.current, index);
59
- return function cleanup() {
60
- unregister(index);
61
- };
62
- }
63
- }, [index, disabled, focusableWhenDisabled, register, unregister]);
64
- const handleToggle = (event) => {
65
- if (!disabled) {
66
- onToggle == null ? void 0 : onToggle(event, !toggled);
67
- }
36
+ const handleRef = core.useForkRef(ref, buttonRef);
37
+ const toggleButtonGroup = ToggleButtonGroupContext.useToggleButtonGroup();
38
+ const toggleButtonGroupSelected = toggleButtonGroup ? toggleButtonGroup.isSelected(value) : selectedProp;
39
+ const focusable = toggleButtonGroup ? toggleButtonGroup == null ? void 0 : toggleButtonGroup.isFocused(value) : true;
40
+ const disabled = (toggleButtonGroup == null ? void 0 : toggleButtonGroup.disabled) || disabledProp;
41
+ const [selected, setSelected] = core.useControlled({
42
+ controlled: toggleButtonGroupSelected,
43
+ default: Boolean(selectedProp),
44
+ name: "ToggleButton",
45
+ state: "selected"
46
+ });
47
+ const handleClick = (event) => {
48
+ toggleButtonGroup == null ? void 0 : toggleButtonGroup.select(event);
49
+ setSelected(!selected);
50
+ onChange == null ? void 0 : onChange(event);
51
+ onClick == null ? void 0 : onClick(event);
52
+ };
53
+ const handleFocus = (event) => {
54
+ toggleButtonGroup == null ? void 0 : toggleButtonGroup.focus(value);
55
+ onFocus == null ? void 0 : onFocus(event);
68
56
  };
69
- const tabIndex = toggled && !disabled ? 0 : -1;
70
- return /* @__PURE__ */ jsxRuntime.jsx(core.Tooltip, {
71
- content: tooltipText,
72
- disabled: disableTooltip,
73
- placement: orientation === "horizontal" ? "bottom" : "right",
74
- children: /* @__PURE__ */ jsxRuntime.jsx(core.Button, {
75
- ref: handleIconOnlyButton,
76
- "aria-checked": toggled,
77
- "aria-label": ariaLabel,
78
- "aria-posinset": index !== void 0 ? index + 1 : void 0,
79
- className: clsx.clsx(
80
- withBaseName(),
81
- withBaseName(orientation),
82
- {
83
- [withBaseName("primary")]: variant === "primary",
84
- [withBaseName("cta")]: variant === "cta",
85
- [withBaseName("secondary")]: variant === "secondary",
86
- [withBaseName("toggled")]: toggled,
87
- [withBaseName("disabled")]: disabled,
88
- [withBaseName("iconOnly")]: iconOnly
89
- },
90
- className
91
- ),
92
- onClick: handleToggle,
93
- disabled,
94
- focusableWhenDisabled,
95
- role: groupContext ? "radio" : "checkbox",
96
- tabIndex: groupContext ? tabIndex : void 0,
97
- variant,
98
- ...restProps
99
- })
57
+ const ariaChecked = selected && !disabled;
58
+ return /* @__PURE__ */ jsxRuntime.jsx("button", {
59
+ "aria-checked": ariaChecked,
60
+ className: clsx.clsx(withBaseName(), className),
61
+ disabled,
62
+ role: toggleButtonGroup ? "radio" : "checkbox",
63
+ ref: handleRef,
64
+ onClick: handleClick,
65
+ onFocus: handleFocus,
66
+ tabIndex: focusable && !disabled ? 0 : -1,
67
+ value,
68
+ ...rest,
69
+ children
100
70
  });
101
71
  }
102
72
  );
@@ -1 +1 @@
1
- {"version":3,"file":"ToggleButton.js","sources":["../src/toggle-button/ToggleButton.tsx"],"sourcesContent":["import { Button, ButtonProps, makePrefixer, Tooltip } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport {\n forwardRef,\n SyntheticEvent,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { ToggleButtonGroupContext } from \"./internal/ToggleButtonGroupContext\";\n\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\n\nimport toggleButtonCss from \"./ToggleButton.css\";\n\nconst withBaseName = makePrefixer(\"saltToggleButton\");\n\nexport type ToggleButtonToggleEventHandler = (\n event: SyntheticEvent<HTMLButtonElement>,\n toggled: boolean\n) => void;\n\nexport interface ToggleButtonProps extends ButtonProps {\n \"aria-label\"?: string;\n \"data-button-index\"?: number;\n toggled?: boolean;\n tooltipText?: string;\n disableTooltip?: boolean;\n onToggle?: ToggleButtonToggleEventHandler;\n}\n\nexport const ToggleButton = forwardRef<HTMLButtonElement, ToggleButtonProps>(\n (props, ref) => {\n const {\n \"aria-label\": ariaLabel,\n className,\n onToggle,\n toggled = false,\n tooltipText = ariaLabel,\n variant: variantProp = \"primary\",\n disabled: disabledProp,\n disableTooltip: disableTooltipProp,\n focusableWhenDisabled: focusableWhenDisabledProp,\n \"data-button-index\": index,\n ...restProps\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-toggle-button\",\n css: toggleButtonCss,\n window: targetWindow,\n });\n\n const [iconOnly, setIconOnly] = useState(false);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const groupContext = useContext(ToggleButtonGroupContext);\n\n const handleIconOnlyButton = useCallback(\n (button: HTMLButtonElement | null) => {\n setIconOnly(\n button?.querySelector(\".saltIcon\") != null &&\n button?.childElementCount === 1\n );\n },\n [setIconOnly]\n );\n\n const {\n register,\n unregister,\n disabled = disabledProp,\n disableTooltip = disableTooltipProp,\n focusableWhenDisabled = focusableWhenDisabledProp,\n orientation = \"horizontal\",\n variant = variantProp,\n } = groupContext || {};\n\n useEffect(() => {\n if (\n index !== undefined &&\n register &&\n unregister &&\n (!disabled || focusableWhenDisabled)\n ) {\n register(buttonRef.current, index);\n\n return function cleanup() {\n unregister(index);\n };\n }\n }, [index, disabled, focusableWhenDisabled, register, unregister]);\n\n const handleToggle = (event: SyntheticEvent<HTMLButtonElement>) => {\n if (!disabled) {\n onToggle?.(event, !toggled);\n }\n };\n\n const tabIndex = toggled && !disabled ? 0 : -1;\n\n return (\n <Tooltip\n content={tooltipText}\n disabled={disableTooltip}\n placement={orientation === \"horizontal\" ? \"bottom\" : \"right\"}\n >\n <Button\n ref={handleIconOnlyButton}\n aria-checked={toggled}\n aria-label={ariaLabel}\n aria-posinset={index !== undefined ? index + 1 : undefined}\n className={clsx(\n withBaseName(),\n withBaseName(orientation),\n {\n [withBaseName(\"primary\")]: variant === \"primary\",\n [withBaseName(\"cta\")]: variant === \"cta\",\n [withBaseName(\"secondary\")]: variant === \"secondary\",\n [withBaseName(\"toggled\")]: toggled,\n [withBaseName(\"disabled\")]: disabled,\n [withBaseName(\"iconOnly\")]: iconOnly,\n },\n className\n )}\n onClick={handleToggle}\n disabled={disabled}\n focusableWhenDisabled={focusableWhenDisabled}\n role={groupContext ? \"radio\" : \"checkbox\"}\n tabIndex={groupContext ? tabIndex : undefined}\n variant={variant}\n {...restProps}\n />\n </Tooltip>\n );\n }\n);\n"],"names":["makePrefixer","forwardRef","useWindow","useComponentCssInjection","toggleButtonCss","useState","useRef","useContext","ToggleButtonGroupContext","useCallback","useEffect","jsx","Tooltip","Button","clsx"],"mappings":"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"}
1
+ {"version":3,"file":"ToggleButton.js","sources":["../src/toggle-button/ToggleButton.tsx"],"sourcesContent":["import {\n ComponentProps,\n forwardRef,\n useRef,\n MouseEvent,\n FocusEvent,\n} from \"react\";\nimport { makePrefixer, useControlled, useForkRef } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport { useToggleButtonGroup } from \"../toggle-button-group\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\n\nimport toggleButtonCss from \"./ToggleButton.css\";\n\nexport interface ToggleButtonProps extends ComponentProps<\"button\"> {\n selected?: boolean;\n onChange?: (event: MouseEvent<HTMLButtonElement>) => void;\n value: string | ReadonlyArray<string> | number | undefined;\n}\n\nconst withBaseName = makePrefixer(\"saltToggleButton\");\n\nexport const ToggleButton = forwardRef<HTMLButtonElement, ToggleButtonProps>(\n function ToggleButton(props, ref) {\n const {\n children,\n className,\n disabled: disabledProp,\n value,\n onClick,\n onFocus,\n onChange,\n selected: selectedProp,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-toggle-button\",\n css: toggleButtonCss,\n window: targetWindow,\n });\n\n const buttonRef = useRef<HTMLButtonElement>(null);\n const handleRef = useForkRef(ref, buttonRef);\n\n const toggleButtonGroup = useToggleButtonGroup();\n\n const toggleButtonGroupSelected = toggleButtonGroup\n ? toggleButtonGroup.isSelected(value)\n : selectedProp;\n const focusable = toggleButtonGroup\n ? toggleButtonGroup?.isFocused(value)\n : true;\n const disabled = toggleButtonGroup?.disabled || disabledProp;\n\n const [selected, setSelected] = useControlled({\n controlled: toggleButtonGroupSelected,\n default: Boolean(selectedProp),\n name: \"ToggleButton\",\n state: \"selected\",\n });\n\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n toggleButtonGroup?.select(event);\n setSelected(!selected);\n onChange?.(event);\n onClick?.(event);\n };\n\n const handleFocus = (event: FocusEvent<HTMLButtonElement>) => {\n toggleButtonGroup?.focus(value);\n onFocus?.(event);\n };\n\n const ariaChecked = selected && !disabled;\n\n return (\n <button\n aria-checked={ariaChecked}\n className={clsx(withBaseName(), className)}\n disabled={disabled}\n role={toggleButtonGroup ? \"radio\" : \"checkbox\"}\n ref={handleRef}\n onClick={handleClick}\n onFocus={handleFocus}\n tabIndex={focusable && !disabled ? 0 : -1}\n value={value}\n {...rest}\n >\n {children}\n </button>\n );\n }\n);\n"],"names":["makePrefixer","forwardRef","ToggleButton","useWindow","useComponentCssInjection","toggleButtonCss","useRef","useForkRef","useToggleButtonGroup","useControlled","jsx","clsx"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var css_248z = ".saltToggleButtonGroup {\n display: flex;\n background: var(--salt-container-primary-background);\n border: var(--salt-size-border) var(--salt-container-borderStyle) var(--salt-container-primary-borderColor);\n width: fit-content;\n gap: var(--salt-spacing-50);\n padding: calc(var(--salt-spacing-50) - var(--salt-size-border));\n flex-direction: row;\n}\n\n.saltToggleButtonGroup-horizontal .saltToggleButton {\n height: calc(var(--salt-size-base) - var(--salt-spacing-100));\n}\n\n.saltToggleButtonGroup-vertical {\n flex-direction: column;\n}\n\n.saltToggleButtonGroup-vertical .saltToggleButton {\n justify-content: start;\n}\n";
4
+
5
+ module.exports = css_248z;
6
+ //# sourceMappingURL=ToggleButtonGroup.css.js.map
@@ -0,0 +1,111 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var React = require('react');
7
+ var core = require('@salt-ds/core');
8
+ var clsx = require('clsx');
9
+ var window = require('@salt-ds/window');
10
+ var styles = require('@salt-ds/styles');
11
+ var ToggleButtonGroupContext = require('./ToggleButtonGroupContext.js');
12
+ var ToggleButtonGroup$1 = require('./ToggleButtonGroup.css.js');
13
+
14
+ const withBaseName = core.makePrefixer("saltToggleButtonGroup");
15
+ const ToggleButtonGroup = React.forwardRef(function ToggleButtonGroup2(props, ref) {
16
+ const {
17
+ children,
18
+ className,
19
+ value: valueProp,
20
+ defaultValue,
21
+ disabled,
22
+ onChange,
23
+ onKeyDown,
24
+ orientation = "horizontal",
25
+ ...rest
26
+ } = props;
27
+ const targetWindow = window.useWindow();
28
+ styles.useComponentCssInjection({
29
+ testId: "salt-toggle-button-group",
30
+ css: ToggleButtonGroup$1,
31
+ window: targetWindow
32
+ });
33
+ const groupRef = React.useRef(null);
34
+ const handleRef = core.useForkRef(ref, groupRef);
35
+ const [value, setValue] = core.useControlled({
36
+ default: defaultValue,
37
+ controlled: valueProp,
38
+ name: "ToggleButtonGroup",
39
+ state: "value"
40
+ });
41
+ const [focused, setFocused] = React.useState(value);
42
+ const select = React.useCallback(
43
+ (event) => {
44
+ const newValue = event.currentTarget.value;
45
+ setValue(newValue);
46
+ if (value !== newValue) {
47
+ onChange == null ? void 0 : onChange(event);
48
+ }
49
+ },
50
+ [onChange, value, setValue]
51
+ );
52
+ const isSelected = React.useCallback(
53
+ (id) => {
54
+ return value === id;
55
+ },
56
+ [value]
57
+ );
58
+ const focus = (id) => {
59
+ setFocused(id);
60
+ };
61
+ const isFocused = React.useCallback(
62
+ (id) => {
63
+ return focused === id || !focused;
64
+ },
65
+ [focused]
66
+ );
67
+ const contextValue = React.useMemo(
68
+ () => ({
69
+ select,
70
+ isSelected,
71
+ focus,
72
+ isFocused,
73
+ disabled
74
+ }),
75
+ [select, isSelected, isFocused, disabled]
76
+ );
77
+ const handleKeyDown = (event) => {
78
+ var _a, _b, _c, _d;
79
+ const elements = Array.from(
80
+ (_b = (_a = groupRef.current) == null ? void 0 : _a.querySelectorAll("button:not([disabled])")) != null ? _b : []
81
+ );
82
+ const currentIndex = elements.findIndex(
83
+ (element) => element === document.activeElement
84
+ );
85
+ switch (event.key) {
86
+ case "ArrowDown":
87
+ case "ArrowRight":
88
+ (_c = elements[(currentIndex + 1) % elements.length]) == null ? void 0 : _c.focus();
89
+ break;
90
+ case "ArrowUp":
91
+ case "ArrowLeft":
92
+ (_d = elements[(currentIndex - 1 + elements.length) % elements.length]) == null ? void 0 : _d.focus();
93
+ break;
94
+ }
95
+ onKeyDown == null ? void 0 : onKeyDown(event);
96
+ };
97
+ return /* @__PURE__ */ jsxRuntime.jsx(ToggleButtonGroupContext.ToggleButtonGroupContext.Provider, {
98
+ value: contextValue,
99
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", {
100
+ className: clsx.clsx(withBaseName(), withBaseName(orientation), className),
101
+ role: "radiogroup",
102
+ ref: handleRef,
103
+ onKeyDown: handleKeyDown,
104
+ ...rest,
105
+ children
106
+ })
107
+ });
108
+ });
109
+
110
+ exports.ToggleButtonGroup = ToggleButtonGroup;
111
+ //# sourceMappingURL=ToggleButtonGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToggleButtonGroup.js","sources":["../src/toggle-button-group/ToggleButtonGroup.tsx"],"sourcesContent":["import {\n ComponentPropsWithoutRef,\n forwardRef,\n KeyboardEvent,\n SyntheticEvent,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { makePrefixer, useControlled, useForkRef } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\n\nimport { ToggleButtonGroupContext } from \"./ToggleButtonGroupContext\";\nimport toggleButtonGroupCss from \"./ToggleButtonGroup.css\";\n\nexport interface ToggleButtonGroupProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"onChange\"> {\n /**\n * The default value. Use when the component is not controlled.\n */\n defaultValue?: string | ReadonlyArray<string> | number | undefined;\n /**\n * If `true`, the Toggle Button Group will be disabled.\n */\n disabled?: boolean;\n /**\n * The value. Use when the component is controlled.\n */\n value?: string | ReadonlyArray<string> | number | undefined;\n /**\n * Callback fired when the selection changes.\n * @param event\n */\n onChange?: (event: SyntheticEvent<HTMLButtonElement>) => void;\n /**\n * The orientation of the toggle buttons.\n */\n orientation?: \"horizontal\" | \"vertical\";\n}\n\nconst withBaseName = makePrefixer(\"saltToggleButtonGroup\");\n\nexport const ToggleButtonGroup = forwardRef<\n HTMLDivElement,\n ToggleButtonGroupProps\n>(function ToggleButtonGroup(props, ref) {\n const {\n children,\n className,\n value: valueProp,\n defaultValue,\n disabled,\n onChange,\n onKeyDown,\n orientation = \"horizontal\",\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<\n string | ReadonlyArray<string> | number | undefined\n >(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, setValue]\n );\n\n const isSelected = useCallback(\n (id: string | ReadonlyArray<string> | number | undefined) => {\n return value === id;\n },\n [value]\n );\n\n const focus = (id: string | ReadonlyArray<string> | number | undefined) => {\n setFocused(id);\n };\n\n const isFocused = useCallback(\n (id: string | ReadonlyArray<string> | number | undefined) => {\n return focused === id || !focused;\n },\n [focused]\n );\n\n const contextValue = useMemo(\n () => ({\n select,\n isSelected,\n focus,\n isFocused,\n disabled,\n }),\n [select, isSelected, isFocused, disabled]\n );\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n const elements: HTMLElement[] = Array.from(\n groupRef.current?.querySelectorAll(\"button:not([disabled])\") ?? []\n );\n const currentIndex = elements.findIndex(\n (element) => element === document.activeElement\n );\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 className={clsx(withBaseName(), withBaseName(orientation), className)}\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","jsx","ToggleButtonGroupContext","clsx"],"mappings":";;;;;;;;;;;;;AA2CA,MAAM,YAAA,GAAeA,kBAAa,uBAAuB,CAAA,CAAA;AAElD,MAAM,iBAAoB,GAAAC,gBAAA,CAG/B,SAASC,kBAAAA,CAAkB,OAAO,GAAK,EAAA;AACvC,EAAM,MAAA;AAAA,IACJ,QAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAO,EAAA,SAAA;AAAA,IACP,YAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAc,GAAA,YAAA;AAAA,IACX,GAAA,IAAA;AAAA,GACD,GAAA,KAAA,CAAA;AAEJ,EAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,0BAAA;AAAA,IACR,GAAK,EAAAC,mBAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,QAAA,GAAWC,aAAuB,IAAI,CAAA,CAAA;AAC5C,EAAM,MAAA,SAAA,GAAYC,eAAW,CAAA,GAAA,EAAK,QAAQ,CAAA,CAAA;AAE1C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIC,kBAAc,CAAA;AAAA,IACtC,OAAS,EAAA,YAAA;AAAA,IACT,UAAY,EAAA,SAAA;AAAA,IACZ,IAAM,EAAA,mBAAA;AAAA,IACN,KAAO,EAAA,OAAA;AAAA,GACR,CAAA,CAAA;AACD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIC,eAE5B,KAAK,CAAA,CAAA;AAEP,EAAA,MAAM,MAAS,GAAAC,iBAAA;AAAA,IACb,CAAC,KAA6C,KAAA;AAC5C,MAAM,MAAA,QAAA,GAAW,MAAM,aAAc,CAAA,KAAA,CAAA;AACrC,MAAA,QAAA,CAAS,QAAQ,CAAA,CAAA;AACjB,MAAA,IAAI,UAAU,QAAU,EAAA;AACtB,QAAW,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,QAAA,CAAA,KAAA,CAAA,CAAA;AAAA,OACb;AAAA,KACF;AAAA,IACA,CAAC,QAAU,EAAA,KAAA,EAAO,QAAQ,CAAA;AAAA,GAC5B,CAAA;AAEA,EAAA,MAAM,UAAa,GAAAA,iBAAA;AAAA,IACjB,CAAC,EAA4D,KAAA;AAC3D,MAAA,OAAO,KAAU,KAAA,EAAA,CAAA;AAAA,KACnB;AAAA,IACA,CAAC,KAAK,CAAA;AAAA,GACR,CAAA;AAEA,EAAM,MAAA,KAAA,GAAQ,CAAC,EAA4D,KAAA;AACzE,IAAA,UAAA,CAAW,EAAE,CAAA,CAAA;AAAA,GACf,CAAA;AAEA,EAAA,MAAM,SAAY,GAAAA,iBAAA;AAAA,IAChB,CAAC,EAA4D,KAAA;AAC3D,MAAO,OAAA,OAAA,KAAY,MAAM,CAAC,OAAA,CAAA;AAAA,KAC5B;AAAA,IACA,CAAC,OAAO,CAAA;AAAA,GACV,CAAA;AAEA,EAAA,MAAM,YAAe,GAAAC,aAAA;AAAA,IACnB,OAAO;AAAA,MACL,MAAA;AAAA,MACA,UAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,UAAY,EAAA,SAAA,EAAW,QAAQ,CAAA;AAAA,GAC1C,CAAA;AAEA,EAAM,MAAA,aAAA,GAAgB,CAAC,KAAyC,KAAA;AAzHlE,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AA0HI,IAAA,MAAM,WAA0B,KAAM,CAAA,IAAA;AAAA,MAAA,CACpC,oBAAS,OAAT,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAkB,gBAAiB,CAAA,wBAAA,CAAA,KAAnC,YAAgE,EAAC;AAAA,KACnE,CAAA;AACA,IAAA,MAAM,eAAe,QAAS,CAAA,SAAA;AAAA,MAC5B,CAAC,OAAY,KAAA,OAAA,KAAY,QAAS,CAAA,aAAA;AAAA,KACpC,CAAA;AACA,IAAA,QAAQ,KAAM,CAAA,GAAA;AAAA,MACP,KAAA,WAAA,CAAA;AAAA,MACA,KAAA,YAAA;AACH,QAAA,CAAA,EAAA,GAAA,QAAA,CAAA,CAAU,YAAe,GAAA,CAAA,IAAK,QAAS,CAAA,MAAA,CAAA,KAAvC,IAAgD,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,EAAA,CAAA;AAChD,QAAA,MAAA;AAAA,MACG,KAAA,SAAA,CAAA;AAAA,MACA,KAAA,WAAA;AACH,QAAA,CAAA,EAAA,GAAA,QAAA,CAAA,CACG,eAAe,CAAI,GAAA,QAAA,CAAS,MAAU,IAAA,QAAA,CAAS,YADlD,IAEG,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,EAAA,CAAA;AACH,QAAA,MAAA;AAAA,KAAA;AAGJ,IAAY,SAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,SAAA,CAAA,KAAA,CAAA,CAAA;AAAA,GACd,CAAA;AAEA,EACE,uBAAAC,cAAA,CAACC,kDAAyB,QAAzB,EAAA;AAAA,IAAkC,KAAO,EAAA,YAAA;AAAA,IACxC,QAAC,kBAAAD,cAAA,CAAA,KAAA,EAAA;AAAA,MACC,WAAWE,SAAK,CAAA,YAAA,IAAgB,YAAa,CAAA,WAAW,GAAG,SAAS,CAAA;AAAA,MACpE,IAAK,EAAA,YAAA;AAAA,MACL,GAAK,EAAA,SAAA;AAAA,MACL,SAAW,EAAA,aAAA;AAAA,MACV,GAAG,IAAA;AAAA,MAEH,QAAA;AAAA,KACH,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ,CAAC;;;;"}
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var core = require('@salt-ds/core');
6
+ var React = require('react');
7
+
8
+ const ToggleButtonGroupContext = core.createContext("ToggleButtonGroupContext", void 0);
9
+ function useToggleButtonGroup() {
10
+ return React.useContext(ToggleButtonGroupContext);
11
+ }
12
+
13
+ exports.ToggleButtonGroupContext = ToggleButtonGroupContext;
14
+ exports.useToggleButtonGroup = useToggleButtonGroup;
15
+ //# sourceMappingURL=ToggleButtonGroupContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToggleButtonGroupContext.js","sources":["../src/toggle-button-group/ToggleButtonGroupContext.ts"],"sourcesContent":["import { createContext } from \"@salt-ds/core\";\nimport { SyntheticEvent, useContext } from \"react\";\n\nexport interface ToggleButtonGroupContextValue {\n disabled?: boolean;\n select: (event: SyntheticEvent<HTMLButtonElement>) => void;\n isSelected: (\n id: string | ReadonlyArray<string> | number | undefined\n ) => boolean;\n focus: (id: string | ReadonlyArray<string> | number | undefined) => void;\n isFocused: (\n id: string | ReadonlyArray<string> | number | undefined\n ) => boolean;\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":";;;;;;;AAea,MAAA,wBAAA,GAA2BA,kBAEtC,CAAA,0BAAA,EAA4B,KAAS,CAAA,EAAA;AAEhC,SAAS,oBAAuB,GAAA;AACrC,EAAA,OAAOC,iBAAW,wBAAwB,CAAA,CAAA;AAC5C;;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = "/* Styles applied to root component (TokenizedInput) */\n.salt-density-medium {\n --tokenizedInput-gutter-size: var(--salt-size-basis-unit);\n --tokenizedInput-pill-group-y-padding: calc(var(--salt-size-unit) / 2);\n --tokenizedInput-last-pill-margin: var(--salt-size-unit);\n}\n.salt-density-touch {\n --tokenizedInput-gutter-size: var(--salt-size-basis-unit);\n --tokenizedInput-pill-group-y-padding: calc(var(--salt-size-unit) / 2 + 2px);\n --tokenizedInput-last-pill-margin: calc(var(--salt-size-unit) / 2);\n}\n\n.salt-density-low {\n --tokenizedInput-gutter-size: var(--salt-size-basis-unit);\n --tokenizedInput-pill-group-y-padding: calc(var(--salt-size-unit) / 2 + 1px);\n --tokenizedInput-last-pill-margin: calc(var(--salt-size-unit) / 2);\n}\n\n.salt-density-high {\n --tokenizedInput-gutter-size: calc(var(--salt-size-basis-unit) - 1px);\n --tokenizedInput-pill-group-y-padding: calc(var(--salt-size-unit) / 2 + 1px);\n --tokenizedInput-last-pill-margin: var(--salt-size-unit);\n}\n\n.saltTokenizedInput {\n --tokenizedInput-spacing: var(--salt-size-unit);\n --tokenizedInput-height: var(--salt-size-base);\n}\n\n.saltTokenizedInput {\n display: inline-flex;\n justify-content: space-between;\n min-width: 8em; /* same min-width as Input component */\n width: 100%;\n}\n\n/* Styles applied to root component on hover state */\n.saltTokenizedInput:hover {\n cursor: var(--salt-selectable-cursor-hover);\n}\n\n/* Styles applied to root component on hover state if `disabled={true}` */\n.saltTokenizedInput.saltTokenizedInput-disabled:hover {\n cursor: var(--salt-selectable-cursor-disabled);\n}\n\n/* Styles applied to container of pills */\n.saltTokenizedInput-pillGroup {\n align-content: flex-start;\n display: flex;\n flex: 1;\n flex-wrap: wrap;\n min-height: var(--tokenizedInput-height);\n padding: var(--tokenizedInput-pill-group-y-padding) var(--tokenizedInput-spacing);\n}\n\n/* Styles applied to root component if `disabled={true}` */\n.saltTokenizedInput-disabled {\n cursor: var(--salt-editable-cursor-disabled);\n opacity: var(--saltTokenizedInput-disabled-opacity, var(--salt-palette-opacity-foreground));\n}\n\n/* Styles applied to root component if `focused={true}` */\n.saltTokenizedInput-focused {\n outline: var(--saltTokenizedInput-focused-outline, var(--salt-focused-outline));\n}\n\n/* Styles applied to root component if `expanded={true}` */\n.saltTokenizedInput-expanded {\n height: auto;\n\n /* Pill CSS API */\n --saltPill-maxWidth: calc(100px - var(--salt-size-unit));\n}\n\n/* Styles applied to Input and Clear Button if `expanded={false}` */\n.saltTokenizedInput-hidden,\n.saltTokenizedInput-input.saltTokenizedInput-hidden,\n.saltButton.saltTokenizedInput-hidden {\n display: none;\n}\n\n/**\n Styles applied to inner Input component\n Used to be .inputRoot\n**/\n.saltInputLegacy.saltTokenizedInput-input {\n align-items: flex-start;\n cursor: text;\n flex-grow: 1;\n padding: 0;\n outline: none;\n width: auto;\n height: auto;\n min-width: 0;\n min-height: 0;\n}\n\n/* Styles applied to Clear Button */\n.saltTokenizedInput-clearButton {\n flex: none;\n align-self: flex-end;\n}\n\n/* Styles applied to Expand Button */\n.saltTokenizedInput-expandButton {\n padding: 0 calc(var(--tokenizedInput-spacing) / 4);\n}\n\n/* Styles applied to root component and pill container if `expanded={true}` */\n.saltTokenizedInput-expanded,\n.saltTokenizedInput-expanded .saltTokenizedInput-pillGroup {\n height: auto;\n}\n\n/* TODO: Adjust specificity of .InputPill depending on styling solution.\n This is an example of internal sub-component naming convension. */\n.saltTokenizedInput .saltInputPill,\n.saltTokenizedInput-expandButton,\n.saltInputLegacy.saltTokenizedInput-input,\n.saltTokenizedInput-inputField.saltTokenizedInput-inputMultiline .saltTokenizedInput-input {\n margin: calc(var(--tokenizedInput-gutter-size) / 2) 0;\n height: calc(var(--tokenizedInput-height) - var(--tokenizedInput-spacing) * 1.5);\n}\n\n/* Styles applied to inner Pills */\n.saltTokenizedInput .saltInputPill {\n min-width: 0;\n margin-right: var(--tokenizedInput-gutter-size);\n --saltPill-maxWidth: 100px;\n}\n\n.saltTokenizedInput .saltInputPill > * {\n min-width: 0;\n}\n\n/* Styles applied to a Pill if `expanded={false} && index >= firstHiddenIndex` */\n.saltTokenizedInput .saltInputPill.saltInputPill-hidden {\n display: none;\n}\n\n/* Styles applied to the last visible Pill when all visible */\n.saltTokenizedInput .saltInputPill-pillLastVisible {\n margin-right: var(--saltTokenizedInput-pill-last-visible-marginRight, var(--tokenizedInput-last-pill-margin));\n}\n\n/* Styles applied to a Pill when active */\n.saltTokenizedInput .saltInputPill-pillActive {\n background: var(--saltTokenizedInput-pill-background-active, var(--salt-selectable-background-hover));\n}\n\n/* Styles applied to a Pills delete icon */\n.saltTokenizedInput .saltInputPill-pillActive .saltPill-deleteIcon {\n color: var(--saltTokenizedInput-pill-delete-icon-color, var(--salt-actionable-cta-foreground-hover));\n}\n\n/* Styles applied to a Pills delete button */\n.saltTokenizedInput .saltInputPill-pillActive .saltPill-deleteButton {\n color: var(--saltTokenizedInput-pill-delete-button-color-active, var(--salt-actionable-cta-foreground-hover));\n background: var(--saltTokenizedInput-pill-delete-button-background-active, var(--salt-actionable-cta-background-hover));\n}\n";
3
+ var css_248z = "/* Styles applied to root component (TokenizedInput) */\n.salt-density-medium {\n --tokenizedInput-gutter-size: var(--salt-size-basis-unit);\n --tokenizedInput-pill-group-y-padding: calc(var(--salt-size-unit) / 2);\n --tokenizedInput-last-pill-margin: var(--salt-size-unit);\n}\n.salt-density-touch {\n --tokenizedInput-gutter-size: var(--salt-size-basis-unit);\n --tokenizedInput-pill-group-y-padding: calc(var(--salt-size-unit) / 2 + 2px);\n --tokenizedInput-last-pill-margin: calc(var(--salt-size-unit) / 2);\n}\n\n.salt-density-low {\n --tokenizedInput-gutter-size: var(--salt-size-basis-unit);\n --tokenizedInput-pill-group-y-padding: calc(var(--salt-size-unit) / 2 + 1px);\n --tokenizedInput-last-pill-margin: calc(var(--salt-size-unit) / 2);\n}\n\n.salt-density-high {\n --tokenizedInput-gutter-size: calc(var(--salt-size-basis-unit) - 1px);\n --tokenizedInput-pill-group-y-padding: calc(var(--salt-size-unit) / 2 + 1px);\n --tokenizedInput-last-pill-margin: var(--salt-size-unit);\n}\n\n.saltTokenizedInput {\n --tokenizedInput-spacing: var(--salt-size-unit);\n --tokenizedInput-height: var(--salt-size-base);\n}\n\n.saltTokenizedInput {\n display: inline-flex;\n justify-content: space-between;\n min-width: 8em; /* same min-width as Input component */\n width: 100%;\n}\n\n/* Styles applied to root component on hover state */\n.saltTokenizedInput:hover {\n cursor: var(--salt-selectable-cursor-hover);\n}\n\n/* Styles applied to root component on hover state if `disabled={true}` */\n.saltTokenizedInput.saltTokenizedInput-disabled:hover {\n cursor: var(--salt-selectable-cursor-disabled);\n}\n\n/* Styles applied to container of pills */\n.saltTokenizedInput-pillGroup {\n align-content: flex-start;\n display: flex;\n flex: 1;\n flex-wrap: wrap;\n min-height: var(--tokenizedInput-height);\n padding: var(--tokenizedInput-pill-group-y-padding) var(--tokenizedInput-spacing);\n}\n\n/* Styles applied to root component if `disabled={true}` */\n.saltTokenizedInput-disabled {\n cursor: var(--salt-editable-cursor-disabled);\n opacity: var(--saltTokenizedInput-disabled-opacity, var(--salt-palette-opacity-disabled));\n}\n\n/* Styles applied to root component if `focused={true}` */\n.saltTokenizedInput-focused {\n outline: var(--saltTokenizedInput-focused-outline, var(--salt-focused-outline));\n}\n\n/* Styles applied to root component if `expanded={true}` */\n.saltTokenizedInput-expanded {\n height: auto;\n\n /* Pill CSS API */\n --saltPill-maxWidth: calc(100px - var(--salt-size-unit));\n}\n\n/* Styles applied to Input and Clear Button if `expanded={false}` */\n.saltTokenizedInput-hidden,\n.saltTokenizedInput-input.saltTokenizedInput-hidden,\n.saltButton.saltTokenizedInput-hidden {\n display: none;\n}\n\n/**\n Styles applied to inner Input component\n Used to be .inputRoot\n**/\n.saltInputLegacy.saltTokenizedInput-input {\n align-items: flex-start;\n cursor: text;\n flex-grow: 1;\n padding: 0;\n outline: none;\n width: auto;\n height: auto;\n min-width: 0;\n min-height: 0;\n}\n\n/* Styles applied to Clear Button */\n.saltTokenizedInput-clearButton {\n flex: none;\n align-self: flex-end;\n}\n\n/* Styles applied to Expand Button */\n.saltTokenizedInput-expandButton {\n padding: 0 calc(var(--tokenizedInput-spacing) / 4);\n}\n\n/* Styles applied to root component and pill container if `expanded={true}` */\n.saltTokenizedInput-expanded,\n.saltTokenizedInput-expanded .saltTokenizedInput-pillGroup {\n height: auto;\n}\n\n/* TODO: Adjust specificity of .InputPill depending on styling solution.\n This is an example of internal sub-component naming convension. */\n.saltTokenizedInput .saltInputPill,\n.saltTokenizedInput-expandButton,\n.saltInputLegacy.saltTokenizedInput-input,\n.saltTokenizedInput-inputField.saltTokenizedInput-inputMultiline .saltTokenizedInput-input {\n margin: calc(var(--tokenizedInput-gutter-size) / 2) 0;\n height: calc(var(--tokenizedInput-height) - var(--tokenizedInput-spacing) * 1.5);\n}\n\n/* Styles applied to inner Pills */\n.saltTokenizedInput .saltInputPill {\n min-width: 0;\n margin-right: var(--tokenizedInput-gutter-size);\n --saltPill-maxWidth: 100px;\n}\n\n.saltTokenizedInput .saltInputPill > * {\n min-width: 0;\n}\n\n/* Styles applied to a Pill if `expanded={false} && index >= firstHiddenIndex` */\n.saltTokenizedInput .saltInputPill.saltInputPill-hidden {\n display: none;\n}\n\n/* Styles applied to the last visible Pill when all visible */\n.saltTokenizedInput .saltInputPill-pillLastVisible {\n margin-right: var(--saltTokenizedInput-pill-last-visible-marginRight, var(--tokenizedInput-last-pill-margin));\n}\n\n/* Styles applied to a Pill when active */\n.saltTokenizedInput .saltInputPill-pillActive {\n background: var(--saltTokenizedInput-pill-background-active, var(--salt-selectable-background-hover));\n}\n\n/* Styles applied to a Pills delete icon */\n.saltTokenizedInput .saltInputPill-pillActive .saltPill-deleteIcon {\n color: var(--saltTokenizedInput-pill-delete-icon-color, var(--salt-actionable-cta-foreground-hover));\n}\n\n/* Styles applied to a Pills delete button */\n.saltTokenizedInput .saltInputPill-pillActive .saltPill-deleteButton {\n color: var(--saltTokenizedInput-pill-delete-button-color-active, var(--salt-actionable-cta-foreground-hover));\n background: var(--saltTokenizedInput-pill-delete-button-background-active, var(--salt-actionable-cta-background-hover));\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=TokenizedInput.css.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = "/* .saltToolbarButton {\n outline: none !important;\n} */\n\n.saltToolbarButton:not([data-is-inside-panel]) {\n --saltButton-fontSize: 0;\n --saltButton-letterSpacing: 0;\n}\n";
3
+ var css_248z = "/* .saltToolbarButton {\n outline: none !important;\n} */\n\n.saltToolbarButton:not([data-is-inside-panel]) {\n --saltButton-fontSize: 0;\n --saltButton-letterSpacing: 0;\n gap: 0;\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=ToolbarButton.css.js.map
@@ -1,4 +1,4 @@
1
- var css_248z = ".saltAccordion {\n --accordion-borderStyle: var(--saltAccordion-borderStyle, none);\n --accordion-borderColor: var(--saltAccordion-borderColor, transparent);\n --accordion-borderWidth: var(--saltAccordion-borderWidth, 0);\n --accordion-borderRadius: var(--saltAccordion-borderRadius, 0);\n --accordion-padding: var(--saltAccordion-padding, 0);\n --accordion-margin: var(--saltAccordion-margin, 0);\n}\n\n.saltAccordion {\n border-style: var(--accordion-borderStyle);\n border-color: var(--accordion-borderColor);\n border-width: var(--accordion-borderWidth);\n padding: var(--accordion-padding);\n margin: var(--accordion-margin);\n border-radius: var(--accordion-borderRadius);\n}\n\n.salt-density-high {\n --accordion-summary-paddingLeft: 20px;\n --accordion-details-padding: 3px 4px 5px 20px;\n}\n\n.salt-density-medium {\n --accordion-summary-paddingLeft: 28px;\n --accordion-details-padding: 8px 8px 9px 28px;\n}\n\n.salt-density-low {\n --accordion-summary-paddingLeft: 36px;\n --accordion-details-padding: 12px 12px 13px 38px;\n}\n\n.salt-density-touch {\n --accordion-summary-paddingLeft: 44px;\n --accordion-details-padding: 18px 16px 17px 44px;\n}\n\n.saltAccordionSection {\n --accordion-summary-height: var(--saltAccordion-summary-height, var(--salt-size-stackable));\n --accordion-summary-fontWeight: var(--saltAccordion-summary-fontWeight, initial);\n\n --accordion-summary-background: var(--saltAccordion-summary-background, var(--salt-container-primary-background));\n --accordion-summary-background-active: var(--saltAccordion-summary-background-active, var(--salt-container-primary-background));\n --accordion-summary-background-disabled: var(--saltAccordion-summary-background-disabled, var(--salt-container-primary-background));\n --accordion-summary-background-hover: var(--saltAccordion-summary-background-hover, var(--salt-actionable-primary-background-hover));\n\n --accordion-summary-text-color: var(--saltAccordion-summary-text-color, var(--salt-text-primary-foreground));\n --accordion-summary-text-color-active: var(--saltAccordion-summary-text-color-active, var(--salt-text-primary-foreground));\n --accordion-summary-text-color-disabled: var(--saltAccordion-summary-text-color-disabled, var(--salt-text-primary-foreground-disabled));\n --accordion-summary-text-color-hover: var(--saltAccordion-summary-text-color-hover, var(--salt-text-primary-foreground));\n\n --accordion-summary-icon-transition-default: transform 150ms cubic-bezier(0.4, 0, 0.2, 1);\n --accordion-summary-icon-transform: var(--saltAccordion-summary-icon-expand-transform, rotate(90deg));\n --accordion-summary-icon-transition: var(--saltAccordion-summary-icon-transition, var(--accordion-summary-icon-transition-default));\n}\n\n.saltAccordionSection {\n border-color: var(--saltAccordion-section-borderColor, var(--salt-separable-secondary-borderColor));\n border-style: var(--saltAccordion-section-borderStyle, var(--salt-container-borderStyle));\n border-width: var(--saltAccordion-section-borderWidth, 0 0 1px 0);\n margin: var(--saltAccordion-section-margin, 0);\n position: relative;\n}\n\n.saltAccordionSection:focus-within {\n z-index: var(--salt-zIndex-default);\n}\n\n.saltAccordionSection-expanded {\n}\n\n.saltAccordionSection-disabled {\n}\n\n.saltAccordionSummary {\n height: var(--accordion-summary-height);\n line-height: var(--accordion-summary-height);\n font-weight: var(--accordion-summary-fontWeight);\n background: var(--accordion-summary-background);\n color: var(--accordion-summary-text-color);\n font-size: var(--saltAccordion-summary-fontSize, var(--salt-text-fontSize));\n font-family: var(--saltAccordion-summary-fontFamily, var(--salt-text-fontFamily));\n display: flex;\n align-items: center;\n}\n\n.saltAccordionSummary:focus-visible {\n outline-style: var(--salt-focused-outlineStyle);\n outline-width: var(--salt-focused-outlineWidth);\n outline-color: var(--salt-focused-outlineColor);\n outline-offset: var(--salt-focused-outlineOffset);\n}\n\n.saltAccordionSummary:hover {\n background: var(--accordion-summary-background-hover);\n color: var(--accordion-summary-text-color-hover);\n cursor: var(--salt-selectable-cursor-hover);\n}\n\n.saltAccordionSummary-expanded {\n background: var(--accordion-summary-background-active);\n color: var(--accordion-summary-text-color-active);\n}\n\n.saltAccordionSummary-disabled,\n.saltAccordionSummary.saltAccordionSummary-disabled:hover {\n background: var(--accordion-summary-background-disabled);\n color: var(--accordion-summary-text-color-disabled);\n cursor: var(--salt-selectable-cursor-disabled);\n}\n\n.saltAccordionSummary-icon {\n width: var(--accordion-summary-paddingLeft);\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n transition: var(--accordion-summary-icon-transition);\n}\n\n.saltAccordionSummary-expanded .saltAccordionSummary-icon {\n transform: var(--accordion-summary-icon-transform);\n}\n\n.saltAccordionDetails {\n transition: height 150ms cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n}\n\n.saltAccordionDetails-content {\n padding: var(--saltAccordion-details-padding, var(--accordion-details-padding));\n}\n\n.saltAccordionDetails-disabled {\n}\n\n.saltAccordionDetails-dummy {\n position: fixed;\n top: -10000px;\n left: 0;\n}\n";
1
+ var css_248z = ".saltAccordion {\n border-bottom: var(--salt-size-border) var(--salt-separable-borderStyle) var(--salt-separable-tertiary-borderColor);\n}\n";
2
2
 
3
3
  export { css_248z as default };
4
4
  //# sourceMappingURL=Accordion.css.js.map
@@ -1,6 +1,6 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { forwardRef, useState, useCallback, useEffect, useMemo } from 'react';
3
- import { makePrefixer, useControlled } from '@salt-ds/core';
2
+ import { forwardRef } from 'react';
3
+ import { makePrefixer, useId, useControlled } from '@salt-ds/core';
4
4
  import { clsx } from 'clsx';
5
5
  import { AccordionContext } from './AccordionContext.js';
6
6
  import { useWindow } from '@salt-ds/window';
@@ -8,122 +8,47 @@ import { useComponentCssInjection } from '@salt-ds/styles';
8
8
  import css_248z from './Accordion.css.js';
9
9
 
10
10
  const withBaseName = makePrefixer("saltAccordion");
11
- function sliceToSize(items, size) {
12
- if (size !== void 0) {
13
- const cutOffCount = items ? items.length - size : 0;
14
- if (cutOffCount > 0) {
15
- items = items.slice(cutOffCount);
16
- }
17
- }
18
- return items;
19
- }
20
11
  const Accordion = forwardRef(
21
- function Accordion2({
22
- disabled = false,
23
- expandedSectionIds: expandedSectionIdsProp,
24
- defaultExpandedSectionIds = [],
25
- maxExpandedItems,
26
- onChange: onChangeProp,
27
- className,
28
- children,
29
- ...restProps
30
- }, ref) {
12
+ function Accordion2(props, ref) {
13
+ const {
14
+ className,
15
+ defaultExpanded,
16
+ expanded: expandedProp,
17
+ disabled,
18
+ id: idProp,
19
+ onToggle,
20
+ value,
21
+ ...rest
22
+ } = props;
23
+ const id = useId(idProp);
31
24
  const targetWindow = useWindow();
32
25
  useComponentCssInjection({
33
26
  testId: "salt-accordion",
34
27
  css: css_248z,
35
28
  window: targetWindow
36
29
  });
37
- const [sectionIds, setSectionIds] = useState(/* @__PURE__ */ new Set());
38
- const [expandedSectionIds, setExpandedSectionIds] = useControlled(
39
- {
40
- controlled: expandedSectionIdsProp,
41
- default: defaultExpandedSectionIds,
42
- name: "Accordion",
43
- state: "ExpandedSectionIds"
44
- }
45
- );
46
- const registerSection = useCallback(
47
- (sectionId, isExpanded2) => {
48
- setSectionIds((sectionIds2) => {
49
- const newSectionIds = new Set(sectionIds2);
50
- newSectionIds.add(sectionId);
51
- return newSectionIds;
52
- });
53
- if (isExpanded2) {
54
- setExpandedSectionIds((oldExpandedSectionIds) => {
55
- const newExpandedSectionIds = [...oldExpandedSectionIds];
56
- newExpandedSectionIds.push(sectionId);
57
- return newExpandedSectionIds;
58
- });
59
- }
60
- },
61
- []
62
- );
63
- const unregisterSection = useCallback((sectionId) => {
64
- if (expandedSectionIds.includes(sectionId)) {
65
- setExpandedSectionIds(
66
- (oldValue) => oldValue.filter((id) => id !== sectionId)
67
- );
68
- }
69
- setSectionIds((sectionIds2) => {
70
- const newSectionIds = new Set(sectionIds2);
71
- newSectionIds.delete(sectionId);
72
- return newSectionIds;
73
- });
74
- }, []);
75
- useEffect(() => {
76
- if (expandedSectionIds && maxExpandedItems !== void 0 && expandedSectionIds.length > maxExpandedItems) {
77
- const newExpandedSectionIds = sliceToSize(
78
- expandedSectionIds,
79
- maxExpandedItems
80
- );
81
- setExpandedSectionIds(newExpandedSectionIds || []);
82
- if (onChangeProp) {
83
- onChangeProp(newExpandedSectionIds || null);
84
- }
85
- }
86
- }, [maxExpandedItems]);
87
- const onChange = useCallback(
88
- (sectionId, isExpanded2) => {
89
- let newExpandedSectionIds = [...expandedSectionIds];
90
- if (isExpanded2) {
91
- newExpandedSectionIds.push(sectionId);
92
- if (maxExpandedItems != null && newExpandedSectionIds.length > maxExpandedItems) {
93
- newExpandedSectionIds.shift();
94
- }
95
- } else {
96
- newExpandedSectionIds = newExpandedSectionIds.filter(
97
- (id) => id !== sectionId
98
- );
99
- }
100
- setExpandedSectionIds(newExpandedSectionIds);
101
- if (onChangeProp) {
102
- onChangeProp(newExpandedSectionIds);
103
- }
30
+ const [expanded, setExpanded] = useControlled({
31
+ controlled: expandedProp,
32
+ default: Boolean(defaultExpanded),
33
+ name: "Accordion",
34
+ state: "expanded"
35
+ });
36
+ const toggle = (event) => {
37
+ setExpanded((prev) => !prev);
38
+ onToggle == null ? void 0 : onToggle(event);
39
+ };
40
+ return /* @__PURE__ */ jsx(AccordionContext.Provider, {
41
+ value: {
42
+ value,
43
+ toggle,
44
+ expanded,
45
+ disabled: Boolean(disabled),
46
+ id: id != null ? id : ""
104
47
  },
105
- [expandedSectionIds, onChangeProp]
106
- );
107
- const isExpanded = useCallback(
108
- (sectionId) => expandedSectionIds.includes(sectionId),
109
- [expandedSectionIds]
110
- );
111
- const contextValue = useMemo(() => {
112
- return {
113
- registerSection,
114
- unregisterSection,
115
- onChange,
116
- isExpanded,
117
- disabled
118
- };
119
- }, [registerSection, unregisterSection, onChange, isExpanded, disabled]);
120
- return /* @__PURE__ */ jsx("div", {
121
- className: clsx(withBaseName(), className),
122
- ...restProps,
123
- ref,
124
- children: /* @__PURE__ */ jsx(AccordionContext.Provider, {
125
- value: contextValue,
126
- children
48
+ children: /* @__PURE__ */ jsx("div", {
49
+ ref,
50
+ className: clsx(withBaseName(), className),
51
+ ...rest
127
52
  })
128
53
  });
129
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Accordion.js","sources":["../src/accordion/Accordion.tsx"],"sourcesContent":["import {\n forwardRef,\n HTMLAttributes,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { makePrefixer, useControlled } from \"@salt-ds/core\";\n\nimport { clsx } from \"clsx\";\nimport { AccordionContext } from \"./AccordionContext\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\n\nimport accordionCss from \"./Accordion.css\";\n\nconst withBaseName = makePrefixer(\"saltAccordion\");\n\nexport interface AccordionProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n disabled?: boolean;\n maxExpandedItems?: number;\n expandedSectionIds?: string[];\n defaultExpandedSectionIds?: string[];\n // expandedSectionIds in the order they were expanded.\n // The oldest expanded item is the first in this list.\n // When maxExpandedItems is reached, the first item in this list is the first to be collapsed\n onChange?: (expandedSectionIds: string[] | null) => void;\n}\n\nfunction sliceToSize<T>(items?: T[], size?: number) {\n if (size !== undefined) {\n const cutOffCount = items ? items.length - size : 0;\n if (cutOffCount > 0) {\n items = items!.slice(cutOffCount);\n }\n }\n return items;\n}\n\nexport const Accordion = forwardRef<HTMLDivElement, AccordionProps>(\n function Accordion(\n {\n disabled = false,\n expandedSectionIds: expandedSectionIdsProp,\n defaultExpandedSectionIds = [],\n maxExpandedItems,\n onChange: onChangeProp,\n className,\n children,\n ...restProps\n },\n ref\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-accordion\",\n css: accordionCss,\n window: targetWindow,\n });\n\n const [sectionIds, setSectionIds] = useState<Set<string>>(new Set());\n\n const [expandedSectionIds, setExpandedSectionIds] = useControlled<string[]>(\n {\n controlled: expandedSectionIdsProp,\n default: defaultExpandedSectionIds,\n name: \"Accordion\",\n state: \"ExpandedSectionIds\",\n }\n );\n\n const registerSection = useCallback(\n (sectionId: string, isExpanded: boolean) => {\n setSectionIds((sectionIds) => {\n const newSectionIds = new Set(sectionIds);\n newSectionIds.add(sectionId);\n return newSectionIds;\n });\n if (isExpanded) {\n setExpandedSectionIds((oldExpandedSectionIds) => {\n const newExpandedSectionIds = [...oldExpandedSectionIds];\n newExpandedSectionIds.push(sectionId);\n return newExpandedSectionIds;\n });\n }\n },\n []\n );\n\n const unregisterSection = useCallback((sectionId: string) => {\n if (expandedSectionIds.includes(sectionId)) {\n setExpandedSectionIds((oldValue) =>\n oldValue.filter((id) => id !== sectionId)\n );\n }\n setSectionIds((sectionIds) => {\n const newSectionIds = new Set(sectionIds);\n newSectionIds.delete(sectionId);\n return newSectionIds;\n });\n }, []);\n\n useEffect(() => {\n if (\n expandedSectionIds &&\n maxExpandedItems !== undefined &&\n expandedSectionIds.length > maxExpandedItems\n ) {\n const newExpandedSectionIds = sliceToSize(\n expandedSectionIds,\n maxExpandedItems\n );\n setExpandedSectionIds(newExpandedSectionIds || []);\n if (onChangeProp) {\n onChangeProp(newExpandedSectionIds || null);\n }\n }\n }, [maxExpandedItems]);\n\n const onChange = useCallback(\n (sectionId: string, isExpanded: boolean) => {\n let newExpandedSectionIds = [...expandedSectionIds];\n if (isExpanded) {\n newExpandedSectionIds.push(sectionId);\n if (\n maxExpandedItems != null &&\n newExpandedSectionIds.length > maxExpandedItems\n ) {\n newExpandedSectionIds.shift();\n }\n } else {\n newExpandedSectionIds = newExpandedSectionIds.filter(\n (id) => id !== sectionId\n );\n }\n setExpandedSectionIds(newExpandedSectionIds);\n if (onChangeProp) {\n onChangeProp(newExpandedSectionIds);\n }\n },\n [expandedSectionIds, onChangeProp]\n );\n\n const isExpanded = useCallback(\n (sectionId: string) => expandedSectionIds.includes(sectionId),\n [expandedSectionIds]\n );\n\n const contextValue: AccordionContext = useMemo(() => {\n return {\n registerSection,\n unregisterSection,\n onChange,\n isExpanded,\n disabled,\n };\n }, [registerSection, unregisterSection, onChange, isExpanded, disabled]);\n\n return (\n <div className={clsx(withBaseName(), className)} {...restProps} ref={ref}>\n <AccordionContext.Provider value={contextValue}>\n {children}\n </AccordionContext.Provider>\n </div>\n );\n }\n);\n"],"names":["Accordion","accordionCss","isExpanded","sectionIds"],"mappings":"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"}
1
+ {"version":3,"file":"Accordion.js","sources":["../src/accordion/Accordion.tsx"],"sourcesContent":["import { ComponentPropsWithoutRef, forwardRef, SyntheticEvent } from \"react\";\nimport { makePrefixer, useControlled, useId } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport { AccordionContext } from \"./AccordionContext\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport accordionCss from \"./Accordion.css\";\nexport interface AccordionProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * AccordionGroup value.\n */\n value: string;\n /**\n * Whether the accordion is expanded.\n */\n expanded?: boolean;\n /**\n * Whether the accordion is expanded by default.\n */\n defaultExpanded?: boolean;\n /**\n * Callback fired when the accordion is toggled.\n * @param event\n */\n onToggle?: (event: SyntheticEvent<HTMLButtonElement>) => void;\n /**\n * Whether the accordion is disabled.\n */\n disabled?: boolean;\n}\n\nconst withBaseName = makePrefixer(\"saltAccordion\");\n\nexport const Accordion = forwardRef<HTMLDivElement, AccordionProps>(\n function Accordion(props, ref) {\n const {\n className,\n defaultExpanded,\n expanded: expandedProp,\n disabled,\n id: idProp,\n onToggle,\n value,\n ...rest\n } = props;\n\n const id = useId(idProp);\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-accordion\",\n css: accordionCss,\n window: targetWindow,\n });\n\n const [expanded, setExpanded] = useControlled({\n controlled: expandedProp,\n default: Boolean(defaultExpanded),\n name: \"Accordion\",\n state: \"expanded\",\n });\n\n const toggle = (event: SyntheticEvent<HTMLButtonElement>) => {\n setExpanded((prev) => !prev);\n onToggle?.(event);\n };\n\n return (\n <AccordionContext.Provider\n value={{\n value,\n toggle,\n expanded,\n disabled: Boolean(disabled),\n id: id ?? \"\",\n }}\n >\n <div ref={ref} className={clsx(withBaseName(), className)} {...rest} />\n </AccordionContext.Provider>\n );\n }\n);\n"],"names":["Accordion","accordionCss"],"mappings":";;;;;;;;;AA+BA,MAAM,YAAA,GAAe,aAAa,eAAe,CAAA,CAAA;AAE1C,MAAM,SAAY,GAAA,UAAA;AAAA,EACvB,SAASA,UAAU,CAAA,KAAA,EAAO,GAAK,EAAA;AAC7B,IAAM,MAAA;AAAA,MACJ,SAAA;AAAA,MACA,eAAA;AAAA,MACA,QAAU,EAAA,YAAA;AAAA,MACV,QAAA;AAAA,MACA,EAAI,EAAA,MAAA;AAAA,MACJ,QAAA;AAAA,MACA,KAAA;AAAA,MACG,GAAA,IAAA;AAAA,KACD,GAAA,KAAA,CAAA;AAEJ,IAAM,MAAA,EAAA,GAAK,MAAM,MAAM,CAAA,CAAA;AACvB,IAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,IAAyB,wBAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,gBAAA;AAAA,MACR,GAAK,EAAAC,QAAA;AAAA,MACL,MAAQ,EAAA,YAAA;AAAA,KACT,CAAA,CAAA;AAED,IAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,aAAc,CAAA;AAAA,MAC5C,UAAY,EAAA,YAAA;AAAA,MACZ,OAAA,EAAS,QAAQ,eAAe,CAAA;AAAA,MAChC,IAAM,EAAA,WAAA;AAAA,MACN,KAAO,EAAA,UAAA;AAAA,KACR,CAAA,CAAA;AAED,IAAM,MAAA,MAAA,GAAS,CAAC,KAA6C,KAAA;AAC3D,MAAY,WAAA,CAAA,CAAC,IAAS,KAAA,CAAC,IAAI,CAAA,CAAA;AAC3B,MAAW,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,QAAA,CAAA,KAAA,CAAA,CAAA;AAAA,KACb,CAAA;AAEA,IACE,uBAAA,GAAA,CAAC,iBAAiB,QAAjB,EAAA;AAAA,MACC,KAAO,EAAA;AAAA,QACL,KAAA;AAAA,QACA,MAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAA,EAAU,QAAQ,QAAQ,CAAA;AAAA,QAC1B,IAAI,EAAM,IAAA,IAAA,GAAA,EAAA,GAAA,EAAA;AAAA,OACZ;AAAA,MAEA,QAAC,kBAAA,GAAA,CAAA,KAAA,EAAA;AAAA,QAAI,GAAA;AAAA,QAAU,SAAW,EAAA,IAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,QAAI,GAAG,IAAA;AAAA,OAAM,CAAA;AAAA,KACvE,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}