@salt-ds/core 1.32.0 → 1.34.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 (184) hide show
  1. package/css/salt-core.css +30 -26
  2. package/dist-cjs/accordion/Accordion.js +6 -1
  3. package/dist-cjs/accordion/Accordion.js.map +1 -1
  4. package/dist-cjs/accordion/AccordionContext.js +6 -3
  5. package/dist-cjs/accordion/AccordionContext.js.map +1 -1
  6. package/dist-cjs/accordion/AccordionHeader.js +20 -4
  7. package/dist-cjs/accordion/AccordionHeader.js.map +1 -1
  8. package/dist-cjs/accordion/AccordionPanel.css.js +1 -1
  9. package/dist-cjs/accordion/AccordionPanel.js +10 -4
  10. package/dist-cjs/accordion/AccordionPanel.js.map +1 -1
  11. package/dist-cjs/aria-announcer/useAriaAnnouncer.js +2 -2
  12. package/dist-cjs/avatar/useAvatarImage.js +2 -2
  13. package/dist-cjs/breakpoints/BreakpointProvider.js +1 -1
  14. package/dist-cjs/card/Card.css.js +1 -1
  15. package/dist-cjs/card/Card.js.map +1 -1
  16. package/dist-cjs/checkbox/internal/CheckboxGroupContext.js +2 -2
  17. package/dist-cjs/combo-box/ComboBox.js +5 -3
  18. package/dist-cjs/combo-box/ComboBox.js.map +1 -1
  19. package/dist-cjs/combo-box/useComboBox.js +2 -2
  20. package/dist-cjs/dialog/Dialog.js +3 -1
  21. package/dist-cjs/dialog/Dialog.js.map +1 -1
  22. package/dist-cjs/dialog/DialogContent.js.map +1 -1
  23. package/dist-cjs/dropdown/Dropdown.js +1 -0
  24. package/dist-cjs/dropdown/Dropdown.js.map +1 -1
  25. package/dist-cjs/file-drop-zone/FileDropZoneTrigger.js +1 -1
  26. package/dist-cjs/form-field/FormField.css.js +1 -1
  27. package/dist-cjs/form-field/FormField.js.map +1 -1
  28. package/dist-cjs/form-field/FormFieldHelperText.js +1 -1
  29. package/dist-cjs/form-field/FormFieldHelperText.js.map +1 -1
  30. package/dist-cjs/form-field-context/FormFieldContext.js +2 -2
  31. package/dist-cjs/index.js +2 -0
  32. package/dist-cjs/index.js.map +1 -1
  33. package/dist-cjs/interactable-card/InteractableCard.css.js +1 -1
  34. package/dist-cjs/interactable-card/InteractableCard.js.map +1 -1
  35. package/dist-cjs/interactable-card/InteractableCardGroupContext.js +2 -2
  36. package/dist-cjs/link-card/LinkCard.css.js +1 -1
  37. package/dist-cjs/link-card/LinkCard.js.map +1 -1
  38. package/dist-cjs/list-box/ListBox.css.js +1 -1
  39. package/dist-cjs/list-control/ListControlContext.js +2 -2
  40. package/dist-cjs/list-control/ListControlState.js +7 -12
  41. package/dist-cjs/list-control/ListControlState.js.map +1 -1
  42. package/dist-cjs/menu/MenuBase.js +4 -2
  43. package/dist-cjs/menu/MenuBase.js.map +1 -1
  44. package/dist-cjs/menu/MenuContext.js +2 -2
  45. package/dist-cjs/menu/MenuPanel.css.js +1 -1
  46. package/dist-cjs/menu/MenuPanelContext.js +2 -2
  47. package/dist-cjs/menu/MenuTrigger.js +1 -1
  48. package/dist-cjs/menu/MenuTriggerContext.js +2 -2
  49. package/dist-cjs/navigation-item/ExpansionIcon.js +3 -3
  50. package/dist-cjs/navigation-item/ExpansionIcon.js.map +1 -1
  51. package/dist-cjs/navigation-item/NavigationItem.js +16 -9
  52. package/dist-cjs/navigation-item/NavigationItem.js.map +1 -1
  53. package/dist-cjs/navigation-item/NavigationItemAction.js +117 -0
  54. package/dist-cjs/navigation-item/NavigationItemAction.js.map +1 -0
  55. package/dist-cjs/option/Option.css.js +1 -1
  56. package/dist-cjs/option/OptionList.css.js +1 -1
  57. package/dist-cjs/overlay/Overlay.js +1 -1
  58. package/dist-cjs/overlay/OverlayContext.js +2 -2
  59. package/dist-cjs/overlay/OverlayContext.js.map +1 -1
  60. package/dist-cjs/overlay/OverlayTrigger.js +1 -1
  61. package/dist-cjs/pagination/PageButton.css.js +1 -1
  62. package/dist-cjs/pagination/PageRanges.js +1 -1
  63. package/dist-cjs/panel/Panel.css.js +1 -1
  64. package/dist-cjs/panel/Panel.js.map +1 -1
  65. package/dist-cjs/parent-child-layout/useIsViewportLargerThanBreakpoint.js +2 -2
  66. package/dist-cjs/pill-input/useTruncatePills.js +2 -1
  67. package/dist-cjs/pill-input/useTruncatePills.js.map +1 -1
  68. package/dist-cjs/radio-button/RadioButtonIcon.js +0 -1
  69. package/dist-cjs/radio-button/RadioButtonIcon.js.map +1 -1
  70. package/dist-cjs/radio-button/internal/RadioGroupContext.js +2 -2
  71. package/dist-cjs/salt-provider/SaltProvider.js +2 -6
  72. package/dist-cjs/salt-provider/SaltProvider.js.map +1 -1
  73. package/dist-cjs/spinner/svgSpinners/SpinnerSVG.js +1 -1
  74. package/dist-cjs/tag/Tag.js +1 -1
  75. package/dist-cjs/toggle-button-group/ToggleButtonGroupContext.js +2 -2
  76. package/dist-cjs/tooltip/Tooltip.js +1 -1
  77. package/dist-cjs/tooltip/TooltipBase.js +1 -1
  78. package/dist-cjs/tooltip/useAriaAnnounce.js +1 -1
  79. package/dist-cjs/tooltip/useTooltip.js +2 -2
  80. package/dist-cjs/utils/renderProps.js +32 -0
  81. package/dist-cjs/utils/renderProps.js.map +1 -0
  82. package/dist-cjs/utils/useValueEffect.js +1 -1
  83. package/dist-cjs/viewport/ViewportProvider.js +1 -1
  84. package/dist-es/accordion/Accordion.js +7 -2
  85. package/dist-es/accordion/Accordion.js.map +1 -1
  86. package/dist-es/accordion/AccordionContext.js +6 -3
  87. package/dist-es/accordion/AccordionContext.js.map +1 -1
  88. package/dist-es/accordion/AccordionHeader.js +20 -4
  89. package/dist-es/accordion/AccordionHeader.js.map +1 -1
  90. package/dist-es/accordion/AccordionPanel.css.js +1 -1
  91. package/dist-es/accordion/AccordionPanel.js +10 -4
  92. package/dist-es/accordion/AccordionPanel.js.map +1 -1
  93. package/dist-es/aria-announcer/useAriaAnnouncer.js +2 -2
  94. package/dist-es/avatar/useAvatarImage.js +2 -2
  95. package/dist-es/breakpoints/BreakpointProvider.js +1 -1
  96. package/dist-es/card/Card.css.js +1 -1
  97. package/dist-es/card/Card.js.map +1 -1
  98. package/dist-es/checkbox/internal/CheckboxGroupContext.js +2 -2
  99. package/dist-es/combo-box/ComboBox.js +6 -4
  100. package/dist-es/combo-box/ComboBox.js.map +1 -1
  101. package/dist-es/combo-box/useComboBox.js +2 -2
  102. package/dist-es/dialog/Dialog.js +3 -1
  103. package/dist-es/dialog/Dialog.js.map +1 -1
  104. package/dist-es/dialog/DialogContent.js.map +1 -1
  105. package/dist-es/dropdown/Dropdown.js +2 -1
  106. package/dist-es/dropdown/Dropdown.js.map +1 -1
  107. package/dist-es/file-drop-zone/FileDropZoneTrigger.js +1 -1
  108. package/dist-es/form-field/FormField.css.js +1 -1
  109. package/dist-es/form-field/FormField.js.map +1 -1
  110. package/dist-es/form-field/FormFieldHelperText.js +1 -1
  111. package/dist-es/form-field/FormFieldHelperText.js.map +1 -1
  112. package/dist-es/form-field-context/FormFieldContext.js +2 -2
  113. package/dist-es/index.js +1 -0
  114. package/dist-es/index.js.map +1 -1
  115. package/dist-es/interactable-card/InteractableCard.css.js +1 -1
  116. package/dist-es/interactable-card/InteractableCard.js.map +1 -1
  117. package/dist-es/interactable-card/InteractableCardGroupContext.js +2 -2
  118. package/dist-es/link-card/LinkCard.css.js +1 -1
  119. package/dist-es/link-card/LinkCard.js.map +1 -1
  120. package/dist-es/list-box/ListBox.css.js +1 -1
  121. package/dist-es/list-control/ListControlContext.js +2 -2
  122. package/dist-es/list-control/ListControlState.js +7 -12
  123. package/dist-es/list-control/ListControlState.js.map +1 -1
  124. package/dist-es/menu/MenuBase.js +4 -2
  125. package/dist-es/menu/MenuBase.js.map +1 -1
  126. package/dist-es/menu/MenuContext.js +2 -2
  127. package/dist-es/menu/MenuPanel.css.js +1 -1
  128. package/dist-es/menu/MenuPanelContext.js +2 -2
  129. package/dist-es/menu/MenuTrigger.js +1 -1
  130. package/dist-es/menu/MenuTriggerContext.js +2 -2
  131. package/dist-es/navigation-item/ExpansionIcon.js +3 -3
  132. package/dist-es/navigation-item/ExpansionIcon.js.map +1 -1
  133. package/dist-es/navigation-item/NavigationItem.js +16 -9
  134. package/dist-es/navigation-item/NavigationItem.js.map +1 -1
  135. package/dist-es/navigation-item/NavigationItemAction.js +113 -0
  136. package/dist-es/navigation-item/NavigationItemAction.js.map +1 -0
  137. package/dist-es/option/Option.css.js +1 -1
  138. package/dist-es/option/OptionList.css.js +1 -1
  139. package/dist-es/overlay/Overlay.js +1 -1
  140. package/dist-es/overlay/OverlayContext.js +2 -2
  141. package/dist-es/overlay/OverlayContext.js.map +1 -1
  142. package/dist-es/overlay/OverlayTrigger.js +1 -1
  143. package/dist-es/pagination/PageButton.css.js +1 -1
  144. package/dist-es/pagination/PageRanges.js +1 -1
  145. package/dist-es/panel/Panel.css.js +1 -1
  146. package/dist-es/panel/Panel.js.map +1 -1
  147. package/dist-es/parent-child-layout/useIsViewportLargerThanBreakpoint.js +2 -2
  148. package/dist-es/pill-input/useTruncatePills.js +2 -1
  149. package/dist-es/pill-input/useTruncatePills.js.map +1 -1
  150. package/dist-es/radio-button/RadioButtonIcon.js +0 -1
  151. package/dist-es/radio-button/RadioButtonIcon.js.map +1 -1
  152. package/dist-es/radio-button/internal/RadioGroupContext.js +2 -2
  153. package/dist-es/salt-provider/SaltProvider.js +3 -3
  154. package/dist-es/salt-provider/SaltProvider.js.map +1 -1
  155. package/dist-es/spinner/svgSpinners/SpinnerSVG.js +1 -1
  156. package/dist-es/tag/Tag.js +1 -1
  157. package/dist-es/toggle-button-group/ToggleButtonGroupContext.js +2 -2
  158. package/dist-es/tooltip/Tooltip.js +1 -1
  159. package/dist-es/tooltip/TooltipBase.js +1 -1
  160. package/dist-es/tooltip/useAriaAnnounce.js +1 -1
  161. package/dist-es/tooltip/useTooltip.js +2 -2
  162. package/dist-es/utils/renderProps.js +28 -0
  163. package/dist-es/utils/renderProps.js.map +1 -0
  164. package/dist-es/utils/useValueEffect.js +1 -1
  165. package/dist-es/viewport/ViewportProvider.js +1 -1
  166. package/dist-types/accordion/AccordionContext.d.ts +4 -1
  167. package/dist-types/card/Card.d.ts +1 -1
  168. package/dist-types/form-field/FormField.d.ts +5 -3
  169. package/dist-types/interactable-card/InteractableCard.d.ts +1 -1
  170. package/dist-types/link-card/LinkCard.d.ts +1 -1
  171. package/dist-types/navigation-item/ExpansionIcon.d.ts +12 -2
  172. package/dist-types/navigation-item/NavigationItem.d.ts +5 -0
  173. package/dist-types/navigation-item/NavigationItemAction.d.ts +5 -0
  174. package/dist-types/overlay/OverlayContext.d.ts +3 -2
  175. package/dist-types/panel/Panel.d.ts +1 -1
  176. package/dist-types/salt-provider/SaltProvider.d.ts +25 -5
  177. package/dist-types/utils/index.d.ts +1 -0
  178. package/dist-types/utils/renderProps.d.ts +5 -0
  179. package/package.json +1 -1
  180. package/dist-cjs/navigation-item/ConditionalWrapper.js +0 -36
  181. package/dist-cjs/navigation-item/ConditionalWrapper.js.map +0 -1
  182. package/dist-es/navigation-item/ConditionalWrapper.js +0 -32
  183. package/dist-es/navigation-item/ConditionalWrapper.js.map +0 -1
  184. package/dist-types/navigation-item/ConditionalWrapper.d.ts +0 -8
package/css/salt-core.css CHANGED
@@ -99,8 +99,8 @@
99
99
  .saltAccordionPanel-content {
100
100
  padding-left: var(--salt-spacing-100);
101
101
  padding-right: var(--salt-spacing-100);
102
- padding-top: var(--salt-spacing-300);
103
- padding-bottom: var(--salt-spacing-300);
102
+ padding-top: var(--salt-spacing-100);
103
+ padding-bottom: var(--salt-spacing-150);
104
104
  }
105
105
  .saltAccordionPanel-indentedContent {
106
106
  padding-left: calc(var(--salt-spacing-200) + var(--salt-size-icon));
@@ -393,6 +393,11 @@
393
393
  border-color: var(--salt-container-secondary-borderColor);
394
394
  --card-accent-color: var(--salt-container-secondary-borderColor);
395
395
  }
396
+ .saltCard-tertiary {
397
+ background: var(--saltCard-background, var(--salt-container-tertiary-background));
398
+ border-color: var(--salt-container-tertiary-borderColor);
399
+ --card-accent-color: var(--salt-container-tertiary-borderColor);
400
+ }
396
401
  .saltCard-accent::after {
397
402
  content: "";
398
403
  position: absolute;
@@ -1179,6 +1184,7 @@ a:focus .saltCard-interactable.saltCard-disabled {
1179
1184
  line-height: var(--salt-text-lineHeight);
1180
1185
  }
1181
1186
  .saltFormField-labelTop {
1187
+ gap: var(--salt-spacing-75);
1182
1188
  grid-template-areas: "label" "controls";
1183
1189
  }
1184
1190
  .saltFormField-labelTop .saltFormFieldHelperText {
@@ -1502,6 +1508,11 @@ a:focus .saltCard-interactable.saltCard-disabled {
1502
1508
  border-color: var(--salt-container-secondary-borderColor);
1503
1509
  --card-accent-color: var(--salt-container-secondary-borderColor);
1504
1510
  }
1511
+ .saltInteractableCard-tertiary {
1512
+ background: var(--saltInteractableCard-background, var(--salt-container-tertiary-background));
1513
+ border-color: var(--salt-container-tertiary-borderColor);
1514
+ --card-accent-color: var(--salt-container-tertiary-borderColor);
1515
+ }
1505
1516
  .saltInteractableCard-accent::after {
1506
1517
  content: "";
1507
1518
  position: absolute;
@@ -1674,6 +1685,11 @@ a:focus .saltCard-interactable.saltCard-disabled {
1674
1685
  border-color: var(--salt-container-secondary-borderColor);
1675
1686
  --linkCard-accent-color: var(--salt-container-secondary-borderColor);
1676
1687
  }
1688
+ .saltLinkCard-tertiary {
1689
+ background: var(--saltLinkCard-background, var(--salt-container-tertiary-background));
1690
+ border-color: var(--salt-container-tertiary-borderColor);
1691
+ --linkCard-accent-color: var(--salt-container-tertiary-borderColor);
1692
+ }
1677
1693
  .saltLinkCard-accent::after {
1678
1694
  content: "";
1679
1695
  position: absolute;
@@ -1739,10 +1755,10 @@ a:focus .saltCard-interactable.saltCard-disabled {
1739
1755
  isolation: isolate;
1740
1756
  position: relative;
1741
1757
  max-height: inherit;
1742
- border-radius: var(--salt-palette-corner-weak, 0);
1743
1758
  }
1744
1759
  .saltListBox-bordered {
1745
1760
  border: var(--salt-size-border) var(--salt-container-borderStyle) var(--salt-container-primary-borderColor);
1761
+ border-radius: var(--salt-palette-corner, 0);
1746
1762
  }
1747
1763
  .saltListBox:focus-visible {
1748
1764
  outline: none;
@@ -1830,6 +1846,7 @@ a:focus .saltCard-interactable.saltCard-disabled {
1830
1846
  z-index: var(--salt-zIndex-flyover);
1831
1847
  box-shadow: var(--salt-overlayable-shadow-popout);
1832
1848
  box-sizing: border-box;
1849
+ border-radius: var(--salt-palette-corner, 0);
1833
1850
  }
1834
1851
  .saltMenuPanel-container {
1835
1852
  display: flex;
@@ -2175,27 +2192,10 @@ a:focus .saltCard-interactable.saltCard-disabled {
2175
2192
  .saltOption[aria-selected=true] {
2176
2193
  z-index: var(--salt-zIndex-default);
2177
2194
  background: var(--salt-selectable-background-selected);
2178
- }
2179
- .saltOption[aria-selected=true]::after {
2180
- content: "";
2181
- display: block;
2182
- position: absolute;
2183
- top: -1px;
2184
- bottom: -1px;
2185
- left: 0;
2186
- width: 100%;
2187
- }
2188
- .saltOption[aria-selected=true]::after {
2189
- border-top: var(--salt-size-border) var(--salt-selectable-borderStyle-selected) var(--salt-selectable-borderColor-selected);
2190
- border-bottom: var(--salt-size-border) var(--salt-selectable-borderStyle-selected) var(--salt-selectable-borderColor-selected);
2191
- }
2192
- .saltOption[aria-selected=true]:first-of-type::before {
2193
- border-top: unset;
2194
- top: 0;
2195
- }
2196
- .saltOption[aria-selected=true]:last-of-type::before {
2197
- border-bottom: unset;
2198
- bottom: 0;
2195
+ box-shadow:
2196
+ calc(var(--salt-size-border) * -2) 0 0 0 var(--salt-selectable-background-hover),
2197
+ calc(var(--salt-size-border) * -1) 0 0 var(--salt-size-border) var(--salt-selectable-borderColor-selected),
2198
+ 0 calc(var(--salt-size-border) * -1) 0 var(--salt-selectable-borderColor-selected);
2199
2199
  }
2200
2200
  .saltOption[aria-disabled=true] {
2201
2201
  color: var(--salt-content-primary-foreground-disabled);
@@ -2227,7 +2227,7 @@ a:focus .saltCard-interactable.saltCard-disabled {
2227
2227
  .saltOptionList {
2228
2228
  background: var(--salt-container-primary-background);
2229
2229
  border: var(--salt-size-border) var(--salt-selectable-borderStyle-selected) var(--salt-selectable-borderColor-selected);
2230
- border-radius: var(--salt-palette-corner-weak, 0);
2230
+ border-radius: var(--salt-palette-corner, 0);
2231
2231
  overflow: hidden;
2232
2232
  overflow-y: auto;
2233
2233
  position: relative;
@@ -2340,6 +2340,7 @@ a:focus .saltCard-interactable.saltCard-disabled {
2340
2340
  }
2341
2341
  .saltPageButton:hover,
2342
2342
  .saltPageButton:focus-visible {
2343
+ --saltButton-text-color-hover: var(--salt-content-primary-foreground);
2343
2344
  --saltButton-background-hover: var(--salt-selectable-background-hover);
2344
2345
  }
2345
2346
  .saltPageButton:disabled {
@@ -2391,6 +2392,9 @@ a:focus .saltCard-interactable.saltCard-disabled {
2391
2392
  .saltPanel-secondary.saltPanel {
2392
2393
  --panel-background: var(--salt-container-secondary-background);
2393
2394
  }
2395
+ .saltPanel-tertiary.saltPanel {
2396
+ --panel-background: var(--salt-container-tertiary-background);
2397
+ }
2394
2398
  .saltPanel {
2395
2399
  background: var(--saltPanel-background, var(--panel-background));
2396
2400
  color: var(--saltPanel-color, initial);
@@ -3893,4 +3897,4 @@ label.saltText small,
3893
3897
  }
3894
3898
  }
3895
3899
 
3896
- /* src/3fc4a530-d9f6-45b2-81d2-0f406ea4a6b9.css */
3900
+ /* src/dff5db70-591c-4470-81bd-0e7a0db50a3c.css */
@@ -127,6 +127,8 @@ const Accordion = React.forwardRef(
127
127
  ...rest
128
128
  } = props;
129
129
  const id = useId.useId(idProp);
130
+ const [headerId, setHeaderId] = React.useState(`${id}-header`);
131
+ const [panelId, setPanelId] = React.useState(`${id}-panel`);
130
132
  const targetWindow = window.useWindow();
131
133
  styles.useComponentCssInjection({
132
134
  testId: "salt-accordion",
@@ -150,7 +152,10 @@ const Accordion = React.forwardRef(
150
152
  expanded,
151
153
  indicatorSide,
152
154
  disabled: Boolean(disabled),
153
- id: id != null ? id : "",
155
+ headerId,
156
+ setHeaderId,
157
+ panelId,
158
+ setPanelId,
154
159
  status
155
160
  },
156
161
  children: /* @__PURE__ */ jsxRuntime.jsx("div", {
@@ -1 +1 @@
1
- {"version":3,"file":"Accordion.js","sources":["../src/accordion/Accordion.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n type SyntheticEvent,\n forwardRef,\n} from \"react\";\nimport { makePrefixer, useControlled, useId } from \"../utils\";\nimport accordionCss from \"./Accordion.css\";\nimport { AccordionContext } from \"./AccordionContext\";\nexport interface AccordionProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"onToggle\"> {\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 * Side to align the Accordion's indicator. Defaults to `left`.\n */\n indicatorSide?: \"left\" | \"right\";\n /**\n * Callback fired when the accordion is toggled.\n */\n onToggle?: (event: SyntheticEvent<HTMLButtonElement>) => void;\n /**\n * Whether the accordion is disabled.\n */\n disabled?: boolean;\n /**\n * The status of the accordion.\n */\n status?: \"error\" | \"warning\" | \"success\";\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 indicatorSide = \"left\",\n id: idProp,\n onToggle,\n status,\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 indicatorSide,\n disabled: Boolean(disabled),\n id: id ?? \"\",\n status,\n }}\n >\n <div\n ref={ref}\n className={clsx(\n withBaseName(),\n { [withBaseName(status ?? \"\")]: status },\n className,\n )}\n {...rest}\n />\n </AccordionContext.Provider>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","Accordion","useId","useWindow","useComponentCssInjection","accordionCss","useControlled","jsx","AccordionContext","clsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,MAAM,YAAA,GAAeA,0BAAa,eAAe,CAAA,CAAA;AAE1C,MAAM,SAAY,GAAAC,gBAAA;AAAA,EACvB,SAASC,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,aAAgB,GAAA,MAAA;AAAA,MAChB,EAAI,EAAA,MAAA;AAAA,MACJ,QAAA;AAAA,MACA,MAAA;AAAA,MACA,KAAA;AAAA,MACG,GAAA,IAAA;AAAA,KACD,GAAA,KAAA,CAAA;AAEJ,IAAM,MAAA,EAAA,GAAKC,YAAM,MAAM,CAAA,CAAA;AACvB,IAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,gBAAA;AAAA,MACR,GAAK,EAAAC,WAAA;AAAA,MACL,MAAQ,EAAA,YAAA;AAAA,KACT,CAAA,CAAA;AAED,IAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIC,2BAAc,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,uBAAAC,cAAA,CAACC,kCAAiB,QAAjB,EAAA;AAAA,MACC,KAAO,EAAA;AAAA,QACL,KAAA;AAAA,QACA,MAAA;AAAA,QACA,QAAA;AAAA,QACA,aAAA;AAAA,QACA,QAAA,EAAU,QAAQ,QAAQ,CAAA;AAAA,QAC1B,IAAI,EAAM,IAAA,IAAA,GAAA,EAAA,GAAA,EAAA;AAAA,QACV,MAAA;AAAA,OACF;AAAA,MAEA,QAAC,kBAAAD,cAAA,CAAA,KAAA,EAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAW,EAAAE,SAAA;AAAA,UACT,YAAa,EAAA;AAAA,UACb,EAAE,CAAC,YAAA,CAAa,MAAU,IAAA,IAAA,GAAA,MAAA,GAAA,EAAE,IAAI,MAAO,EAAA;AAAA,UACvC,SAAA;AAAA,SACF;AAAA,QACC,GAAG,IAAA;AAAA,OACN,CAAA;AAAA,KACF,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
1
+ {"version":3,"file":"Accordion.js","sources":["../src/accordion/Accordion.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n type SyntheticEvent,\n forwardRef,\n useState,\n} from \"react\";\nimport { makePrefixer, useControlled, useId } from \"../utils\";\nimport accordionCss from \"./Accordion.css\";\nimport { AccordionContext } from \"./AccordionContext\";\nexport interface AccordionProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"onToggle\"> {\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 * Side to align the Accordion's indicator. Defaults to `left`.\n */\n indicatorSide?: \"left\" | \"right\";\n /**\n * Callback fired when the accordion is toggled.\n */\n onToggle?: (event: SyntheticEvent<HTMLButtonElement>) => void;\n /**\n * Whether the accordion is disabled.\n */\n disabled?: boolean;\n /**\n * The status of the accordion.\n */\n status?: \"error\" | \"warning\" | \"success\";\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 indicatorSide = \"left\",\n id: idProp,\n onToggle,\n status,\n value,\n ...rest\n } = props;\n\n const id = useId(idProp);\n const [headerId, setHeaderId] = useState(`${id}-header`);\n const [panelId, setPanelId] = useState(`${id}-panel`);\n\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 indicatorSide,\n disabled: Boolean(disabled),\n headerId,\n setHeaderId,\n panelId,\n setPanelId,\n status,\n }}\n >\n <div\n ref={ref}\n className={clsx(\n withBaseName(),\n { [withBaseName(status ?? \"\")]: status },\n className,\n )}\n {...rest}\n />\n </AccordionContext.Provider>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","Accordion","useId","useState","useWindow","useComponentCssInjection","accordionCss","useControlled","jsx","AccordionContext","clsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CA,MAAM,YAAA,GAAeA,0BAAa,eAAe,CAAA,CAAA;AAE1C,MAAM,SAAY,GAAAC,gBAAA;AAAA,EACvB,SAASC,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,aAAgB,GAAA,MAAA;AAAA,MAChB,EAAI,EAAA,MAAA;AAAA,MACJ,QAAA;AAAA,MACA,MAAA;AAAA,MACA,KAAA;AAAA,MACG,GAAA,IAAA;AAAA,KACD,GAAA,KAAA,CAAA;AAEJ,IAAM,MAAA,EAAA,GAAKC,YAAM,MAAM,CAAA,CAAA;AACvB,IAAA,MAAM,CAAC,QAAU,EAAA,WAAW,CAAI,GAAAC,cAAA,CAAS,GAAG,EAAW,CAAA,OAAA,CAAA,CAAA,CAAA;AACvD,IAAA,MAAM,CAAC,OAAS,EAAA,UAAU,CAAI,GAAAA,cAAA,CAAS,GAAG,EAAU,CAAA,MAAA,CAAA,CAAA,CAAA;AAEpD,IAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,gBAAA;AAAA,MACR,GAAK,EAAAC,WAAA;AAAA,MACL,MAAQ,EAAA,YAAA;AAAA,KACT,CAAA,CAAA;AAED,IAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIC,2BAAc,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,uBAAAC,cAAA,CAACC,kCAAiB,QAAjB,EAAA;AAAA,MACC,KAAO,EAAA;AAAA,QACL,KAAA;AAAA,QACA,MAAA;AAAA,QACA,QAAA;AAAA,QACA,aAAA;AAAA,QACA,QAAA,EAAU,QAAQ,QAAQ,CAAA;AAAA,QAC1B,QAAA;AAAA,QACA,WAAA;AAAA,QACA,OAAA;AAAA,QACA,UAAA;AAAA,QACA,MAAA;AAAA,OACF;AAAA,MAEA,QAAC,kBAAAD,cAAA,CAAA,KAAA,EAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAW,EAAAE,SAAA;AAAA,UACT,YAAa,EAAA;AAAA,UACb,EAAE,CAAC,YAAA,CAAa,MAAU,IAAA,IAAA,GAAA,MAAA,GAAA,EAAE,IAAI,MAAO,EAAA;AAAA,UACvC,SAAA;AAAA,SACF;AAAA,QACC,GAAG,IAAA;AAAA,OACN,CAAA;AAAA,KACF,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
@@ -4,17 +4,17 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var React = require('react');
6
6
  var createContext = require('../utils/createContext.js');
7
+ require('react/jsx-runtime');
8
+ require('clsx');
7
9
  require('../utils/useFloatingUI/useFloatingUI.js');
8
10
  require('../utils/useId.js');
9
11
  require('../salt-provider/SaltProvider.js');
10
12
  require('../viewport/ViewportProvider.js');
11
- require('clsx');
12
13
  require('./AccordionGroup.js');
13
14
  require('./AccordionPanel.js');
14
15
  require('./Accordion.js');
15
16
  require('./AccordionHeader.js');
16
17
  require('../aria-announcer/AriaAnnouncerContext.js');
17
- require('react/jsx-runtime');
18
18
  require('../avatar/Avatar.js');
19
19
  require('../badge/Badge.js');
20
20
  require('../banner/Banner.js');
@@ -117,7 +117,10 @@ const AccordionContext = createContext.createContext(
117
117
  toggle: () => void 0,
118
118
  disabled: false,
119
119
  indicatorSide: "left",
120
- id: ""
120
+ headerId: "",
121
+ setHeaderId: () => void 0,
122
+ panelId: "",
123
+ setPanelId: () => void 0
121
124
  }
122
125
  );
123
126
  function useAccordion() {
@@ -1 +1 @@
1
- {"version":3,"file":"AccordionContext.js","sources":["../src/accordion/AccordionContext.ts"],"sourcesContent":["import { type SyntheticEvent, useContext } from \"react\";\nimport { createContext } from \"../utils\";\n\nexport interface AccordionContextValue {\n value: string;\n expanded: boolean;\n toggle: (event: SyntheticEvent<HTMLButtonElement>) => void;\n disabled: boolean;\n indicatorSide: \"left\" | \"right\";\n id: string;\n status?: \"error\" | \"warning\" | \"success\";\n}\n\nexport const AccordionContext = createContext<AccordionContextValue>(\n \"AccordionContext\",\n {\n value: \"\",\n expanded: false,\n toggle: () => undefined,\n disabled: false,\n indicatorSide: \"left\",\n id: \"\",\n },\n);\n\nexport function useAccordion() {\n return useContext(AccordionContext);\n}\n"],"names":["createContext","useContext"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaO,MAAM,gBAAmB,GAAAA,2BAAA;AAAA,EAC9B,kBAAA;AAAA,EACA;AAAA,IACE,KAAO,EAAA,EAAA;AAAA,IACP,QAAU,EAAA,KAAA;AAAA,IACV,QAAQ,MAAM,KAAA,CAAA;AAAA,IACd,QAAU,EAAA,KAAA;AAAA,IACV,aAAe,EAAA,MAAA;AAAA,IACf,EAAI,EAAA,EAAA;AAAA,GACN;AACF,EAAA;AAEO,SAAS,YAAe,GAAA;AAC7B,EAAA,OAAOC,iBAAW,gBAAgB,CAAA,CAAA;AACpC;;;;;"}
1
+ {"version":3,"file":"AccordionContext.js","sources":["../src/accordion/AccordionContext.ts"],"sourcesContent":["import { type SyntheticEvent, useContext } from \"react\";\nimport { createContext } from \"../utils\";\n\nexport interface AccordionContextValue {\n value: string;\n expanded: boolean;\n toggle: (event: SyntheticEvent<HTMLButtonElement>) => void;\n disabled: boolean;\n indicatorSide: \"left\" | \"right\";\n headerId: string;\n setHeaderId: (id: string) => void;\n panelId: string;\n setPanelId: (id: string) => void;\n status?: \"error\" | \"warning\" | \"success\";\n}\n\nexport const AccordionContext = createContext<AccordionContextValue>(\n \"AccordionContext\",\n {\n value: \"\",\n expanded: false,\n toggle: () => undefined,\n disabled: false,\n indicatorSide: \"left\",\n headerId: \"\",\n setHeaderId: () => undefined,\n panelId: \"\",\n setPanelId: () => undefined,\n },\n);\n\nexport function useAccordion() {\n return useContext(AccordionContext);\n}\n"],"names":["createContext","useContext"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBO,MAAM,gBAAmB,GAAAA,2BAAA;AAAA,EAC9B,kBAAA;AAAA,EACA;AAAA,IACE,KAAO,EAAA,EAAA;AAAA,IACP,QAAU,EAAA,KAAA;AAAA,IACV,QAAQ,MAAM,KAAA,CAAA;AAAA,IACd,QAAU,EAAA,KAAA;AAAA,IACV,aAAe,EAAA,MAAA;AAAA,IACf,QAAU,EAAA,EAAA;AAAA,IACV,aAAa,MAAM,KAAA,CAAA;AAAA,IACnB,OAAS,EAAA,EAAA;AAAA,IACT,YAAY,MAAM,KAAA,CAAA;AAAA,GACpB;AACF,EAAA;AAEO,SAAS,YAAe,GAAA;AAC7B,EAAA,OAAOC,iBAAW,gBAAgB,CAAA,CAAA;AACpC;;;;;"}
@@ -12,6 +12,7 @@ var StatusIndicator = require('../status-indicator/StatusIndicator.js');
12
12
  var makePrefixer = require('../utils/makePrefixer.js');
13
13
  require('../utils/useFloatingUI/useFloatingUI.js');
14
14
  require('../utils/useId.js');
15
+ var useIsomorphicLayoutEffect = require('../utils/useIsomorphicLayoutEffect.js');
15
16
  require('../salt-provider/SaltProvider.js');
16
17
  require('../viewport/ViewportProvider.js');
17
18
  require('./AccordionGroup.js');
@@ -124,8 +125,18 @@ function ExpansionIcon({ expanded }) {
124
125
  });
125
126
  }
126
127
  const AccordionHeader = React.forwardRef(function AccordionHeader2(props, ref) {
127
- const { children, className, onClick, ...rest } = props;
128
- const { value, expanded, toggle, indicatorSide, disabled, id, status } = AccordionContext.useAccordion();
128
+ const { children, className, onClick, id, ...rest } = props;
129
+ const {
130
+ value,
131
+ expanded,
132
+ toggle,
133
+ indicatorSide,
134
+ disabled,
135
+ headerId,
136
+ panelId,
137
+ setHeaderId,
138
+ status
139
+ } = AccordionContext.useAccordion();
129
140
  const targetWindow = window.useWindow();
130
141
  styles.useComponentCssInjection({
131
142
  testId: "salt-accordion-header",
@@ -136,6 +147,11 @@ const AccordionHeader = React.forwardRef(function AccordionHeader2(props, ref) {
136
147
  toggle(event);
137
148
  onClick == null ? void 0 : onClick(event);
138
149
  };
150
+ useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
151
+ if (id) {
152
+ setHeaderId(id);
153
+ }
154
+ }, [id]);
139
155
  return /* @__PURE__ */ jsxRuntime.jsxs("button", {
140
156
  ref,
141
157
  className: clsx.clsx(
@@ -146,8 +162,8 @@ const AccordionHeader = React.forwardRef(function AccordionHeader2(props, ref) {
146
162
  disabled,
147
163
  onClick: handleClick,
148
164
  "aria-expanded": expanded,
149
- id: `${id}-header`,
150
- "aria-controls": `${id}-panel`,
165
+ id: headerId,
166
+ "aria-controls": panelId,
151
167
  value,
152
168
  type: "button",
153
169
  ...rest,
@@ -1 +1 @@
1
- {"version":3,"file":"AccordionHeader.js","sources":["../src/accordion/AccordionHeader.tsx"],"sourcesContent":["import { ChevronDownIcon, ChevronUpIcon } from \"@salt-ds/icons\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n type MouseEvent,\n type ReactNode,\n forwardRef,\n} from \"react\";\nimport { StatusIndicator } from \"../status-indicator\";\n\nimport { makePrefixer } from \"../utils\";\n\nimport { useAccordion } from \"./AccordionContext\";\nimport accordionHeaderCss from \"./AccordionHeader.css\";\n\nexport interface AccordionHeaderProps\n extends ComponentPropsWithoutRef<\"button\"> {\n /**\n * The content of the Accordion Header\n */\n children?: ReactNode;\n}\n\nconst withBaseName = makePrefixer(\"saltAccordionHeader\");\n\nfunction ExpansionIcon({ expanded }: { expanded: boolean }) {\n if (expanded) {\n return <ChevronUpIcon aria-hidden className={withBaseName(\"icon\")} />;\n }\n\n return <ChevronDownIcon aria-hidden className={withBaseName(\"icon\")} />;\n}\n\nexport const AccordionHeader = forwardRef<\n HTMLButtonElement,\n AccordionHeaderProps\n>(function AccordionHeader(props, ref) {\n const { children, className, onClick, ...rest } = props;\n const { value, expanded, toggle, indicatorSide, disabled, id, status } =\n useAccordion();\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-accordion-header\",\n css: accordionHeaderCss,\n window: targetWindow,\n });\n\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n toggle(event);\n onClick?.(event);\n };\n\n return (\n <button\n ref={ref}\n className={clsx(\n withBaseName(),\n { [withBaseName(status ?? \"\")]: status },\n className,\n )}\n disabled={disabled}\n onClick={handleClick}\n aria-expanded={expanded}\n id={`${id}-header`}\n aria-controls={`${id}-panel`}\n value={value}\n type=\"button\"\n {...rest}\n >\n {indicatorSide === \"left\" && <ExpansionIcon expanded={expanded} />}\n <span className={withBaseName(\"content\")}>{children}</span>\n {status && (\n <StatusIndicator\n className={withBaseName(\"statusIndicator\")}\n status={status}\n />\n )}\n {indicatorSide === \"right\" && <ExpansionIcon expanded={expanded} />}\n </button>\n );\n});\n"],"names":["makePrefixer","jsx","ChevronUpIcon","ChevronDownIcon","forwardRef","AccordionHeader","useAccordion","useWindow","useComponentCssInjection","accordionHeaderCss","jsxs","clsx","StatusIndicator"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,MAAM,YAAA,GAAeA,0BAAa,qBAAqB,CAAA,CAAA;AAEvD,SAAS,aAAA,CAAc,EAAE,QAAA,EAAmC,EAAA;AAC1D,EAAA,IAAI,QAAU,EAAA;AACZ,IAAA,uBAAQC,cAAA,CAAAC,mBAAA,EAAA;AAAA,MAAc,aAAW,EAAA,IAAA;AAAA,MAAC,SAAA,EAAW,aAAa,MAAM,CAAA;AAAA,KAAG,CAAA,CAAA;AAAA,GACrE;AAEA,EAAA,uBAAQD,cAAA,CAAAE,qBAAA,EAAA;AAAA,IAAgB,aAAW,EAAA,IAAA;AAAA,IAAC,SAAA,EAAW,aAAa,MAAM,CAAA;AAAA,GAAG,CAAA,CAAA;AACvE,CAAA;AAEO,MAAM,eAAkB,GAAAC,gBAAA,CAG7B,SAASC,gBAAAA,CAAgB,OAAO,GAAK,EAAA;AACrC,EAAA,MAAM,EAAE,QAAA,EAAU,SAAW,EAAA,OAAA,EAAA,GAAY,MAAS,GAAA,KAAA,CAAA;AAClD,EAAM,MAAA,EAAE,OAAO,QAAU,EAAA,MAAA,EAAQ,eAAe,QAAU,EAAA,EAAA,EAAI,MAAO,EAAA,GACnEC,6BAAa,EAAA,CAAA;AAEf,EAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,uBAAA;AAAA,IACR,GAAK,EAAAC,iBAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,WAAA,GAAc,CAAC,KAAyC,KAAA;AAC5D,IAAA,MAAA,CAAO,KAAK,CAAA,CAAA;AACZ,IAAU,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,KAAA,CAAA,CAAA;AAAA,GACZ,CAAA;AAEA,EAAA,uBACGC,eAAA,CAAA,QAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,SAAW,EAAAC,SAAA;AAAA,MACT,YAAa,EAAA;AAAA,MACb,EAAE,CAAC,YAAA,CAAa,MAAU,IAAA,IAAA,GAAA,MAAA,GAAA,EAAE,IAAI,MAAO,EAAA;AAAA,MACvC,SAAA;AAAA,KACF;AAAA,IACA,QAAA;AAAA,IACA,OAAS,EAAA,WAAA;AAAA,IACT,eAAe,EAAA,QAAA;AAAA,IACf,IAAI,CAAG,EAAA,EAAA,CAAA,OAAA,CAAA;AAAA,IACP,iBAAe,CAAG,EAAA,EAAA,CAAA,MAAA,CAAA;AAAA,IAClB,KAAA;AAAA,IACA,IAAK,EAAA,QAAA;AAAA,IACJ,GAAG,IAAA;AAAA,IAEH,QAAA,EAAA;AAAA,MAAA,aAAA,KAAkB,0BAAWV,cAAA,CAAA,aAAA,EAAA;AAAA,QAAc,QAAA;AAAA,OAAoB,CAAA;AAAA,sBAC/DA,cAAA,CAAA,MAAA,EAAA;AAAA,QAAK,SAAA,EAAW,aAAa,SAAS,CAAA;AAAA,QAAI,QAAA;AAAA,OAAS,CAAA;AAAA,MACnD,0BACEA,cAAA,CAAAW,+BAAA,EAAA;AAAA,QACC,SAAA,EAAW,aAAa,iBAAiB,CAAA;AAAA,QACzC,MAAA;AAAA,OACF,CAAA;AAAA,MAED,aAAA,KAAkB,2BAAYX,cAAA,CAAA,aAAA,EAAA;AAAA,QAAc,QAAA;AAAA,OAAoB,CAAA;AAAA,KAAA;AAAA,GACnE,CAAA,CAAA;AAEJ,CAAC;;;;"}
1
+ {"version":3,"file":"AccordionHeader.js","sources":["../src/accordion/AccordionHeader.tsx"],"sourcesContent":["import { ChevronDownIcon, ChevronUpIcon } from \"@salt-ds/icons\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n type MouseEvent,\n type ReactNode,\n forwardRef,\n} from \"react\";\nimport { StatusIndicator } from \"../status-indicator\";\n\nimport { makePrefixer, useIsomorphicLayoutEffect } from \"../utils\";\n\nimport { useAccordion } from \"./AccordionContext\";\nimport accordionHeaderCss from \"./AccordionHeader.css\";\n\nexport interface AccordionHeaderProps\n extends ComponentPropsWithoutRef<\"button\"> {\n /**\n * The content of the Accordion Header\n */\n children?: ReactNode;\n}\n\nconst withBaseName = makePrefixer(\"saltAccordionHeader\");\n\nfunction ExpansionIcon({ expanded }: { expanded: boolean }) {\n if (expanded) {\n return <ChevronUpIcon aria-hidden className={withBaseName(\"icon\")} />;\n }\n\n return <ChevronDownIcon aria-hidden className={withBaseName(\"icon\")} />;\n}\n\nexport const AccordionHeader = forwardRef<\n HTMLButtonElement,\n AccordionHeaderProps\n>(function AccordionHeader(props, ref) {\n const { children, className, onClick, id, ...rest } = props;\n const {\n value,\n expanded,\n toggle,\n indicatorSide,\n disabled,\n headerId,\n panelId,\n setHeaderId,\n status,\n } = useAccordion();\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-accordion-header\",\n css: accordionHeaderCss,\n window: targetWindow,\n });\n\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n toggle(event);\n onClick?.(event);\n };\n\n useIsomorphicLayoutEffect(() => {\n if (id) {\n setHeaderId(id);\n }\n }, [id]);\n\n return (\n <button\n ref={ref}\n className={clsx(\n withBaseName(),\n { [withBaseName(status ?? \"\")]: status },\n className,\n )}\n disabled={disabled}\n onClick={handleClick}\n aria-expanded={expanded}\n id={headerId}\n aria-controls={panelId}\n value={value}\n type=\"button\"\n {...rest}\n >\n {indicatorSide === \"left\" && <ExpansionIcon expanded={expanded} />}\n <span className={withBaseName(\"content\")}>{children}</span>\n {status && (\n <StatusIndicator\n className={withBaseName(\"statusIndicator\")}\n status={status}\n />\n )}\n {indicatorSide === \"right\" && <ExpansionIcon expanded={expanded} />}\n </button>\n );\n});\n"],"names":["makePrefixer","jsx","ChevronUpIcon","ChevronDownIcon","forwardRef","AccordionHeader","useAccordion","useWindow","useComponentCssInjection","accordionHeaderCss","useIsomorphicLayoutEffect","jsxs","clsx","StatusIndicator"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,MAAM,YAAA,GAAeA,0BAAa,qBAAqB,CAAA,CAAA;AAEvD,SAAS,aAAA,CAAc,EAAE,QAAA,EAAmC,EAAA;AAC1D,EAAA,IAAI,QAAU,EAAA;AACZ,IAAA,uBAAQC,cAAA,CAAAC,mBAAA,EAAA;AAAA,MAAc,aAAW,EAAA,IAAA;AAAA,MAAC,SAAA,EAAW,aAAa,MAAM,CAAA;AAAA,KAAG,CAAA,CAAA;AAAA,GACrE;AAEA,EAAA,uBAAQD,cAAA,CAAAE,qBAAA,EAAA;AAAA,IAAgB,aAAW,EAAA,IAAA;AAAA,IAAC,SAAA,EAAW,aAAa,MAAM,CAAA;AAAA,GAAG,CAAA,CAAA;AACvE,CAAA;AAEO,MAAM,eAAkB,GAAAC,gBAAA,CAG7B,SAASC,gBAAAA,CAAgB,OAAO,GAAK,EAAA;AACrC,EAAA,MAAM,EAAE,QAAU,EAAA,SAAA,EAAW,OAAS,EAAA,EAAA,EAAA,GAAO,MAAS,GAAA,KAAA,CAAA;AACtD,EAAM,MAAA;AAAA,IACJ,KAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,aAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA;AAAA,MACEC,6BAAa,EAAA,CAAA;AAEjB,EAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,uBAAA;AAAA,IACR,GAAK,EAAAC,iBAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,WAAA,GAAc,CAAC,KAAyC,KAAA;AAC5D,IAAA,MAAA,CAAO,KAAK,CAAA,CAAA;AACZ,IAAU,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,KAAA,CAAA,CAAA;AAAA,GACZ,CAAA;AAEA,EAAAC,mDAAA,CAA0B,MAAM;AAC9B,IAAA,IAAI,EAAI,EAAA;AACN,MAAA,WAAA,CAAY,EAAE,CAAA,CAAA;AAAA,KAChB;AAAA,GACF,EAAG,CAAC,EAAE,CAAC,CAAA,CAAA;AAEP,EAAA,uBACGC,eAAA,CAAA,QAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,SAAW,EAAAC,SAAA;AAAA,MACT,YAAa,EAAA;AAAA,MACb,EAAE,CAAC,YAAA,CAAa,MAAU,IAAA,IAAA,GAAA,MAAA,GAAA,EAAE,IAAI,MAAO,EAAA;AAAA,MACvC,SAAA;AAAA,KACF;AAAA,IACA,QAAA;AAAA,IACA,OAAS,EAAA,WAAA;AAAA,IACT,eAAe,EAAA,QAAA;AAAA,IACf,EAAI,EAAA,QAAA;AAAA,IACJ,eAAe,EAAA,OAAA;AAAA,IACf,KAAA;AAAA,IACA,IAAK,EAAA,QAAA;AAAA,IACJ,GAAG,IAAA;AAAA,IAEH,QAAA,EAAA;AAAA,MAAA,aAAA,KAAkB,0BAAWX,cAAA,CAAA,aAAA,EAAA;AAAA,QAAc,QAAA;AAAA,OAAoB,CAAA;AAAA,sBAC/DA,cAAA,CAAA,MAAA,EAAA;AAAA,QAAK,SAAA,EAAW,aAAa,SAAS,CAAA;AAAA,QAAI,QAAA;AAAA,OAAS,CAAA;AAAA,MACnD,0BACEA,cAAA,CAAAY,+BAAA,EAAA;AAAA,QACC,SAAA,EAAW,aAAa,iBAAiB,CAAA;AAAA,QACzC,MAAA;AAAA,OACF,CAAA;AAAA,MAED,aAAA,KAAkB,2BAAYZ,cAAA,CAAA,aAAA,EAAA;AAAA,QAAc,QAAA;AAAA,OAAoB,CAAA;AAAA,KAAA;AAAA,GACnE,CAAA,CAAA;AAEJ,CAAC;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = ".saltAccordionPanel {\n display: grid;\n transition: grid-template-rows var(--salt-duration-perceptible) ease-in-out, opacity var(--salt-duration-perceptible) ease-in-out, visibility var(--salt-duration-perceptible) ease-in-out;\n}\n\n.saltAccordionPanel[aria-hidden=\"true\"] {\n grid-template-rows: 0fr;\n opacity: 0;\n visibility: hidden;\n}\n\n.saltAccordionPanel {\n grid-template-rows: 1fr;\n opacity: 1;\n visibility: visible;\n}\n\n.saltAccordionPanel-inner {\n overflow: hidden;\n}\n\n.saltAccordionPanel-content {\n padding-left: var(--salt-spacing-100);\n padding-right: var(--salt-spacing-100);\n padding-top: var(--salt-spacing-300);\n padding-bottom: var(--salt-spacing-300);\n}\n\n.saltAccordionPanel-indentedContent {\n padding-left: calc(var(--salt-spacing-200) + var(--salt-size-icon));\n}\n\n@media (prefers-reduced-motion: reduce) {\n .saltAccordionPanel {\n transition: none;\n }\n}\n";
3
+ var css_248z = ".saltAccordionPanel {\n display: grid;\n transition: grid-template-rows var(--salt-duration-perceptible) ease-in-out, opacity var(--salt-duration-perceptible) ease-in-out, visibility var(--salt-duration-perceptible) ease-in-out;\n}\n\n.saltAccordionPanel[aria-hidden=\"true\"] {\n grid-template-rows: 0fr;\n opacity: 0;\n visibility: hidden;\n}\n\n.saltAccordionPanel {\n grid-template-rows: 1fr;\n opacity: 1;\n visibility: visible;\n}\n\n.saltAccordionPanel-inner {\n overflow: hidden;\n}\n\n.saltAccordionPanel-content {\n padding-left: var(--salt-spacing-100);\n padding-right: var(--salt-spacing-100);\n padding-top: var(--salt-spacing-100);\n padding-bottom: var(--salt-spacing-150);\n}\n\n.saltAccordionPanel-indentedContent {\n padding-left: calc(var(--salt-spacing-200) + var(--salt-size-icon));\n}\n\n@media (prefers-reduced-motion: reduce) {\n .saltAccordionPanel {\n transition: none;\n }\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=AccordionPanel.css.js.map
@@ -10,6 +10,7 @@ var React = require('react');
10
10
  var makePrefixer = require('../utils/makePrefixer.js');
11
11
  require('../utils/useFloatingUI/useFloatingUI.js');
12
12
  require('../utils/useId.js');
13
+ var useIsomorphicLayoutEffect = require('../utils/useIsomorphicLayoutEffect.js');
13
14
  require('../salt-provider/SaltProvider.js');
14
15
  require('../viewport/ViewportProvider.js');
15
16
  require('./AccordionGroup.js');
@@ -113,20 +114,25 @@ var AccordionPanel$1 = require('./AccordionPanel.css.js');
113
114
  const withBaseName = makePrefixer.makePrefixer("saltAccordionPanel");
114
115
  const AccordionPanel = React.forwardRef(
115
116
  function AccordionPanel2(props, ref) {
116
- const { children, className, ...rest } = props;
117
+ const { children, className, id, ...rest } = props;
117
118
  const targetWindow = window.useWindow();
118
119
  styles.useComponentCssInjection({
119
120
  testId: "salt-accordion-panel",
120
121
  css: AccordionPanel$1,
121
122
  window: targetWindow
122
123
  });
123
- const { id, expanded, indicatorSide } = AccordionContext.useAccordion();
124
+ const { headerId, panelId, setPanelId, expanded, indicatorSide } = AccordionContext.useAccordion();
125
+ useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
126
+ if (id) {
127
+ setPanelId(id);
128
+ }
129
+ }, [id]);
124
130
  return /* @__PURE__ */ jsxRuntime.jsx("div", {
125
131
  ref,
126
132
  className: clsx.clsx(withBaseName(), className),
127
133
  role: "region",
128
- id: `${id}-panel`,
129
- "aria-labelledby": `${id}-header`,
134
+ id: panelId,
135
+ "aria-labelledby": headerId,
130
136
  "aria-hidden": !expanded ? "true" : void 0,
131
137
  hidden: !expanded,
132
138
  ...rest,
@@ -1 +1 @@
1
- {"version":3,"file":"AccordionPanel.js","sources":["../src/accordion/AccordionPanel.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n type ReactNode,\n forwardRef,\n} from \"react\";\n\nimport { makePrefixer } from \"../utils\";\nimport { useAccordion } from \"./AccordionContext\";\nimport accordionPanelCss from \"./AccordionPanel.css\";\n\nexport interface AccordionPanelProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * The content of the Accordion Panel\n */\n children?: ReactNode;\n}\n\nconst withBaseName = makePrefixer(\"saltAccordionPanel\");\n\nexport const AccordionPanel = forwardRef<HTMLDivElement, AccordionPanelProps>(\n function AccordionPanel(props, ref) {\n const { children, className, ...rest } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-accordion-panel\",\n css: accordionPanelCss,\n window: targetWindow,\n });\n\n const { id, expanded, indicatorSide } = useAccordion();\n\n return (\n <div\n ref={ref}\n className={clsx(withBaseName(), className)}\n role=\"region\"\n id={`${id}-panel`}\n aria-labelledby={`${id}-header`}\n aria-hidden={!expanded ? \"true\" : undefined}\n hidden={!expanded}\n {...rest}\n >\n <div className={withBaseName(\"inner\")}>\n <div\n className={clsx(withBaseName(\"content\"), {\n [withBaseName(\"indentedContent\")]: indicatorSide === \"left\",\n })}\n >\n {children}\n </div>\n </div>\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","AccordionPanel","useWindow","useComponentCssInjection","accordionPanelCss","useAccordion","jsx","clsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBA,MAAM,YAAA,GAAeA,0BAAa,oBAAoB,CAAA,CAAA;AAE/C,MAAM,cAAiB,GAAAC,gBAAA;AAAA,EAC5B,SAASC,eAAe,CAAA,KAAA,EAAO,GAAK,EAAA;AAClC,IAAA,MAAM,EAAE,QAAA,EAAU,SAAc,EAAA,GAAA,IAAA,EAAS,GAAA,KAAA,CAAA;AAEzC,IAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,sBAAA;AAAA,MACR,GAAK,EAAAC,gBAAA;AAAA,MACL,MAAQ,EAAA,YAAA;AAAA,KACT,CAAA,CAAA;AAED,IAAA,MAAM,EAAE,EAAA,EAAI,QAAU,EAAA,aAAA,KAAkBC,6BAAa,EAAA,CAAA;AAErD,IAAA,uBACGC,cAAA,CAAA,KAAA,EAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAW,EAAAC,SAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,MACzC,IAAK,EAAA,QAAA;AAAA,MACL,IAAI,CAAG,EAAA,EAAA,CAAA,MAAA,CAAA;AAAA,MACP,mBAAiB,CAAG,EAAA,EAAA,CAAA,OAAA,CAAA;AAAA,MACpB,aAAA,EAAa,CAAC,QAAA,GAAW,MAAS,GAAA,KAAA,CAAA;AAAA,MAClC,QAAQ,CAAC,QAAA;AAAA,MACR,GAAG,IAAA;AAAA,MAEJ,QAAC,kBAAAD,cAAA,CAAA,KAAA,EAAA;AAAA,QAAI,SAAA,EAAW,aAAa,OAAO,CAAA;AAAA,QAClC,QAAC,kBAAAA,cAAA,CAAA,KAAA,EAAA;AAAA,UACC,SAAW,EAAAC,SAAA,CAAK,YAAa,CAAA,SAAS,CAAG,EAAA;AAAA,YACvC,CAAC,YAAA,CAAa,iBAAiB,CAAA,GAAI,aAAkB,KAAA,MAAA;AAAA,WACtD,CAAA;AAAA,UAEA,QAAA;AAAA,SACH,CAAA;AAAA,OACF,CAAA;AAAA,KACF,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
1
+ {"version":3,"file":"AccordionPanel.js","sources":["../src/accordion/AccordionPanel.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n type ReactNode,\n forwardRef,\n} from \"react\";\n\nimport { makePrefixer, useIsomorphicLayoutEffect } from \"../utils\";\nimport { useAccordion } from \"./AccordionContext\";\nimport accordionPanelCss from \"./AccordionPanel.css\";\n\nexport interface AccordionPanelProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * The content of the Accordion Panel\n */\n children?: ReactNode;\n}\n\nconst withBaseName = makePrefixer(\"saltAccordionPanel\");\n\nexport const AccordionPanel = forwardRef<HTMLDivElement, AccordionPanelProps>(\n function AccordionPanel(props, ref) {\n const { children, className, id, ...rest } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-accordion-panel\",\n css: accordionPanelCss,\n window: targetWindow,\n });\n\n const { headerId, panelId, setPanelId, expanded, indicatorSide } =\n useAccordion();\n\n useIsomorphicLayoutEffect(() => {\n if (id) {\n setPanelId(id);\n }\n }, [id]);\n\n return (\n <div\n ref={ref}\n className={clsx(withBaseName(), className)}\n role=\"region\"\n id={panelId}\n aria-labelledby={headerId}\n aria-hidden={!expanded ? \"true\" : undefined}\n hidden={!expanded}\n {...rest}\n >\n <div className={withBaseName(\"inner\")}>\n <div\n className={clsx(withBaseName(\"content\"), {\n [withBaseName(\"indentedContent\")]: indicatorSide === \"left\",\n })}\n >\n {children}\n </div>\n </div>\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","AccordionPanel","useWindow","useComponentCssInjection","accordionPanelCss","useAccordion","useIsomorphicLayoutEffect","jsx","clsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBA,MAAM,YAAA,GAAeA,0BAAa,oBAAoB,CAAA,CAAA;AAE/C,MAAM,cAAiB,GAAAC,gBAAA;AAAA,EAC5B,SAASC,eAAe,CAAA,KAAA,EAAO,GAAK,EAAA;AAClC,IAAA,MAAM,EAAE,QAAA,EAAU,SAAW,EAAA,EAAA,EAAA,GAAO,MAAS,GAAA,KAAA,CAAA;AAE7C,IAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,sBAAA;AAAA,MACR,GAAK,EAAAC,gBAAA;AAAA,MACL,MAAQ,EAAA,YAAA;AAAA,KACT,CAAA,CAAA;AAED,IAAA,MAAM,EAAE,QAAU,EAAA,OAAA,EAAS,YAAY,QAAU,EAAA,aAAA,KAC/CC,6BAAa,EAAA,CAAA;AAEf,IAAAC,mDAAA,CAA0B,MAAM;AAC9B,MAAA,IAAI,EAAI,EAAA;AACN,QAAA,UAAA,CAAW,EAAE,CAAA,CAAA;AAAA,OACf;AAAA,KACF,EAAG,CAAC,EAAE,CAAC,CAAA,CAAA;AAEP,IAAA,uBACGC,cAAA,CAAA,KAAA,EAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAW,EAAAC,SAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,MACzC,IAAK,EAAA,QAAA;AAAA,MACL,EAAI,EAAA,OAAA;AAAA,MACJ,iBAAiB,EAAA,QAAA;AAAA,MACjB,aAAA,EAAa,CAAC,QAAA,GAAW,MAAS,GAAA,KAAA,CAAA;AAAA,MAClC,QAAQ,CAAC,QAAA;AAAA,MACR,GAAG,IAAA;AAAA,MAEJ,QAAC,kBAAAD,cAAA,CAAA,KAAA,EAAA;AAAA,QAAI,SAAA,EAAW,aAAa,OAAO,CAAA;AAAA,QAClC,QAAC,kBAAAA,cAAA,CAAA,KAAA,EAAA;AAAA,UACC,SAAW,EAAAC,SAAA,CAAK,YAAa,CAAA,SAAS,CAAG,EAAA;AAAA,YACvC,CAAC,YAAA,CAAa,iBAAiB,CAAA,GAAI,aAAkB,KAAA,MAAA;AAAA,WACtD,CAAA;AAAA,UAEA,QAAA;AAAA,SACH,CAAA;AAAA,OACF,CAAA;AAAA,KACF,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
@@ -4,17 +4,17 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var React = require('react');
6
6
  var debounce = require('../utils/debounce.js');
7
+ require('react/jsx-runtime');
8
+ require('clsx');
7
9
  require('../utils/useFloatingUI/useFloatingUI.js');
8
10
  require('../utils/useId.js');
9
11
  require('../salt-provider/SaltProvider.js');
10
12
  require('../viewport/ViewportProvider.js');
11
- require('clsx');
12
13
  require('../accordion/AccordionGroup.js');
13
14
  require('../accordion/AccordionPanel.js');
14
15
  require('../accordion/Accordion.js');
15
16
  require('../accordion/AccordionHeader.js');
16
17
  var AriaAnnouncerContext = require('./AriaAnnouncerContext.js');
17
- require('react/jsx-runtime');
18
18
  require('../avatar/Avatar.js');
19
19
  require('../badge/Badge.js');
20
20
  require('../banner/Banner.js');
@@ -3,18 +3,18 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var React = require('react');
6
+ require('react/jsx-runtime');
7
+ require('clsx');
6
8
  require('../utils/useFloatingUI/useFloatingUI.js');
7
9
  require('../utils/useId.js');
8
10
  var useIsomorphicLayoutEffect = require('../utils/useIsomorphicLayoutEffect.js');
9
11
  require('../salt-provider/SaltProvider.js');
10
12
  require('../viewport/ViewportProvider.js');
11
- require('clsx');
12
13
  require('../accordion/AccordionGroup.js');
13
14
  require('../accordion/AccordionPanel.js');
14
15
  require('../accordion/Accordion.js');
15
16
  require('../accordion/AccordionHeader.js');
16
17
  require('../aria-announcer/AriaAnnouncerContext.js');
17
- require('react/jsx-runtime');
18
18
  require('./Avatar.js');
19
19
  require('../badge/Badge.js');
20
20
  require('../banner/Banner.js');
@@ -5,12 +5,12 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
6
  var React = require('react');
7
7
  var createContext = require('../utils/createContext.js');
8
+ require('clsx');
8
9
  require('../utils/useFloatingUI/useFloatingUI.js');
9
10
  require('../utils/useId.js');
10
11
  var useIsomorphicLayoutEffect = require('../utils/useIsomorphicLayoutEffect.js');
11
12
  require('../salt-provider/SaltProvider.js');
12
13
  require('../viewport/ViewportProvider.js');
13
- require('clsx');
14
14
  require('../accordion/AccordionGroup.js');
15
15
  require('../accordion/AccordionPanel.js');
16
16
  require('../accordion/Accordion.js');
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = "/* Styles applied to the root element */\n.saltCard {\n border-width: var(--saltCard-borderWidth, var(--salt-size-border));\n border-style: var(--salt-container-borderStyle);\n padding: var(--saltCard-padding, var(--salt-spacing-200));\n position: relative;\n transition: box-shadow var(--salt-duration-instant) ease-in-out;\n box-sizing: border-box;\n border-radius: var(--saltCard-borderRadius, var(--salt-palette-corner, 0));\n}\n\n.saltCard-primary {\n background: var(--saltCard-background, var(--salt-container-primary-background));\n border-color: var(--salt-container-primary-borderColor);\n --card-accent-color: var(--salt-container-primary-borderColor);\n}\n\n.saltCard-secondary {\n background: var(--saltCard-background, var(--salt-container-secondary-background));\n border-color: var(--salt-container-secondary-borderColor);\n --card-accent-color: var(--salt-container-secondary-borderColor);\n}\n\n/* Styles applied to create accent */\n.saltCard-accent::after {\n content: \"\";\n position: absolute;\n background-color: var(--saltCard-accent-color, var(--card-accent-color));\n}\n\n/* Styles applied to Card if `accent=\"bottom\"` (default) */\n.saltCard-accentBottom::after {\n left: calc(-1 * var(--salt-size-border));\n bottom: calc(-1 * var(--salt-size-border));\n height: var(--salt-size-bar);\n width: calc(100% + calc(2 * var(--salt-size-border)));\n}\n\n/* Styles applied to Card if `accent=\"left\"` */\n.saltCard-accentLeft::after {\n left: calc(-1 * var(--salt-size-border));\n top: calc(-1 * var(--salt-size-border));\n height: calc(100% + calc(2 * var(--salt-size-border)));\n width: var(--salt-size-bar);\n}\n\n/* Styles applied to Card if `accent=\"top\"` */\n.saltCard-accentTop::after {\n left: calc(-1 * var(--salt-size-border));\n top: calc(-1 * var(--salt-size-border));\n height: var(--salt-size-bar);\n width: calc(100% + calc(2 * var(--salt-size-border)));\n}\n\n/* Styles applied to Card if `accent=\"right\"` */\n.saltCard-accentRight::after {\n right: calc(-1 * var(--salt-size-border));\n top: calc(-1 * var(--salt-size-border));\n height: calc(100% + calc(2 * var(--salt-size-border)));\n width: var(--salt-size-bar);\n}\n\n/*\n * **Deprecated:** The following styles are deprecated\n * Use Interactable Card component instead\n * for interactable styling\n */\n\n/* **Deprecated:** Styles applied if `interactable={true}` */\n.saltCard-interactable {\n display: block;\n transition: none;\n}\n\n/* **Deprecated:** Styles applied on hover if `interactable={true}` */\na:focus .saltCard-interactable,\n.saltCard-interactable:hover {\n box-shadow: var(--saltCard-boxShadow-hover, var(--salt-overlayable-shadow-hover));\n cursor: var(--saltCard-cursor-hover, var(--salt-selectable-cursor-hover));\n position: relative;\n}\n\n/* **Deprecated:** Styles applied on active state if `interactable={true}` */\n.saltCard-interactable:active {\n box-shadow: var(--saltCard-boxShadow-active, var(--salt-overlayable-shadow-hover));\n outline: var(--salt-focused-outline);\n outline-offset: var(--salt-focused-outlineOffset);\n}\n\n/* **Deprecated:** Styles applied on hover if `interactable={true}` and `disabled={true}` */\na:focus .saltCard-interactable.saltCard-disabled,\n.saltCard-interactable.saltCard-disabled:hover,\n.saltCard-interactable.saltCard-disabled:active {\n box-shadow: var(--saltCard-boxShadow-disabled, var(--salt-overlayable-shadow));\n}\n\n/* **Deprecated:** Styles applied if `disabled={true}` */\n.saltCard-disabled,\n.saltCard-disabled.saltCard-interactable,\na:focus .saltCard-interactable.saltCard-disabled {\n border-color: var(--salt-container-primary-borderColor-disabled);\n color: var(--saltCard-color-disabled, var(--salt-content-primary-foreground-disabled));\n cursor: var(--saltCard-cursor-disabled, var(--salt-selectable-cursor-disabled));\n outline: none;\n}\n\n/* **Deprecated:** Styles applied to nested divs if `disabled={true}` */\n.saltCard-disabled div {\n pointer-events: none;\n}\n\n/* Styles applied if `hoverable` is set */\n@media (hover: hover) {\n .saltCard-hoverable:hover {\n box-shadow: var(--saltCard-boxShadow-hover, var(--salt-overlayable-shadow-hover));\n --card-accent-color: var(--salt-selectable-foreground-hover);\n }\n}\n";
3
+ var css_248z = "/* Styles applied to the root element */\n.saltCard {\n border-width: var(--saltCard-borderWidth, var(--salt-size-border));\n border-style: var(--salt-container-borderStyle);\n padding: var(--saltCard-padding, var(--salt-spacing-200));\n position: relative;\n transition: box-shadow var(--salt-duration-instant) ease-in-out;\n box-sizing: border-box;\n border-radius: var(--saltCard-borderRadius, var(--salt-palette-corner, 0));\n}\n\n.saltCard-primary {\n background: var(--saltCard-background, var(--salt-container-primary-background));\n border-color: var(--salt-container-primary-borderColor);\n --card-accent-color: var(--salt-container-primary-borderColor);\n}\n\n.saltCard-secondary {\n background: var(--saltCard-background, var(--salt-container-secondary-background));\n border-color: var(--salt-container-secondary-borderColor);\n --card-accent-color: var(--salt-container-secondary-borderColor);\n}\n\n.saltCard-tertiary {\n background: var(--saltCard-background, var(--salt-container-tertiary-background));\n border-color: var(--salt-container-tertiary-borderColor);\n --card-accent-color: var(--salt-container-tertiary-borderColor);\n}\n\n/* Styles applied to create accent */\n.saltCard-accent::after {\n content: \"\";\n position: absolute;\n background-color: var(--saltCard-accent-color, var(--card-accent-color));\n}\n\n/* Styles applied to Card if `accent=\"bottom\"` (default) */\n.saltCard-accentBottom::after {\n left: calc(-1 * var(--salt-size-border));\n bottom: calc(-1 * var(--salt-size-border));\n height: var(--salt-size-bar);\n width: calc(100% + calc(2 * var(--salt-size-border)));\n}\n\n/* Styles applied to Card if `accent=\"left\"` */\n.saltCard-accentLeft::after {\n left: calc(-1 * var(--salt-size-border));\n top: calc(-1 * var(--salt-size-border));\n height: calc(100% + calc(2 * var(--salt-size-border)));\n width: var(--salt-size-bar);\n}\n\n/* Styles applied to Card if `accent=\"top\"` */\n.saltCard-accentTop::after {\n left: calc(-1 * var(--salt-size-border));\n top: calc(-1 * var(--salt-size-border));\n height: var(--salt-size-bar);\n width: calc(100% + calc(2 * var(--salt-size-border)));\n}\n\n/* Styles applied to Card if `accent=\"right\"` */\n.saltCard-accentRight::after {\n right: calc(-1 * var(--salt-size-border));\n top: calc(-1 * var(--salt-size-border));\n height: calc(100% + calc(2 * var(--salt-size-border)));\n width: var(--salt-size-bar);\n}\n\n/*\n * **Deprecated:** The following styles are deprecated\n * Use Interactable Card component instead\n * for interactable styling\n */\n\n/* **Deprecated:** Styles applied if `interactable={true}` */\n.saltCard-interactable {\n display: block;\n transition: none;\n}\n\n/* **Deprecated:** Styles applied on hover if `interactable={true}` */\na:focus .saltCard-interactable,\n.saltCard-interactable:hover {\n box-shadow: var(--saltCard-boxShadow-hover, var(--salt-overlayable-shadow-hover));\n cursor: var(--saltCard-cursor-hover, var(--salt-selectable-cursor-hover));\n position: relative;\n}\n\n/* **Deprecated:** Styles applied on active state if `interactable={true}` */\n.saltCard-interactable:active {\n box-shadow: var(--saltCard-boxShadow-active, var(--salt-overlayable-shadow-hover));\n outline: var(--salt-focused-outline);\n outline-offset: var(--salt-focused-outlineOffset);\n}\n\n/* **Deprecated:** Styles applied on hover if `interactable={true}` and `disabled={true}` */\na:focus .saltCard-interactable.saltCard-disabled,\n.saltCard-interactable.saltCard-disabled:hover,\n.saltCard-interactable.saltCard-disabled:active {\n box-shadow: var(--saltCard-boxShadow-disabled, var(--salt-overlayable-shadow));\n}\n\n/* **Deprecated:** Styles applied if `disabled={true}` */\n.saltCard-disabled,\n.saltCard-disabled.saltCard-interactable,\na:focus .saltCard-interactable.saltCard-disabled {\n border-color: var(--salt-container-primary-borderColor-disabled);\n color: var(--saltCard-color-disabled, var(--salt-content-primary-foreground-disabled));\n cursor: var(--saltCard-cursor-disabled, var(--salt-selectable-cursor-disabled));\n outline: none;\n}\n\n/* **Deprecated:** Styles applied to nested divs if `disabled={true}` */\n.saltCard-disabled div {\n pointer-events: none;\n}\n\n/* Styles applied if `hoverable` is set */\n@media (hover: hover) {\n .saltCard-hoverable:hover {\n box-shadow: var(--saltCard-boxShadow-hover, var(--salt-overlayable-shadow-hover));\n --card-accent-color: var(--salt-selectable-foreground-hover);\n }\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=Card.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Card.js","sources":["../src/card/Card.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { type ComponentPropsWithoutRef, forwardRef } from \"react\";\n\nimport { capitalize, makePrefixer } from \"../utils\";\n\nimport cardCss from \"./Card.css\";\n\nconst withBaseName = makePrefixer(\"saltCard\");\nexport interface CardProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * If provided an accent is shown in the specified position.\n */\n accent?: \"bottom\" | \"top\" | \"left\" | \"right\";\n /**\n * **Deprecated:** Use the InteractableCard component instead\n *\n * If `true`, the card will be disabled.\n */\n disabled?: boolean;\n /**\n * If `true` the card will have hover styling.\n */\n hoverable?: boolean;\n /**\n * **Deprecated:** Use the InteractableCard component instead\n *\n * If `true`, interactive styles will be applied to `Card`. These styles give prominence to certain content\n * on the page.\n */\n interactable?: boolean;\n /**\n * Styling variant. Defaults to \"primary\".\n */\n variant?: \"primary\" | \"secondary\";\n}\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(\n function Card(props, ref) {\n const {\n accent,\n children,\n className,\n disabled,\n interactable,\n hoverable,\n variant = \"primary\",\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-card\",\n css: cardCss,\n window: targetWindow,\n });\n\n return (\n <div\n className={clsx(\n withBaseName(),\n withBaseName(variant),\n {\n [withBaseName(\"accent\")]: accent,\n [withBaseName(`accent${capitalize(accent || \"\")}`)]: accent,\n [withBaseName(\"hoverable\")]: hoverable,\n /* **Deprecated:** InteractableCard should be used instead for these features */\n [withBaseName(\"disabled\")]: disabled,\n [withBaseName(\"interactable\")]: interactable,\n },\n className,\n )}\n ref={ref}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","Card","useWindow","useComponentCssInjection","cardCss","jsx","clsx","capitalize"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,MAAM,YAAA,GAAeA,0BAAa,UAAU,CAAA,CAAA;AA6BrC,MAAM,IAAO,GAAAC,gBAAA;AAAA,EAClB,SAASC,KAAK,CAAA,KAAA,EAAO,GAAK,EAAA;AACxB,IAAM,MAAA;AAAA,MACJ,MAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,YAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAU,GAAA,SAAA;AAAA,MACP,GAAA,IAAA;AAAA,KACD,GAAA,KAAA,CAAA;AAEJ,IAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,WAAA;AAAA,MACR,GAAK,EAAAC,MAAA;AAAA,MACL,MAAQ,EAAA,YAAA;AAAA,KACT,CAAA,CAAA;AAED,IAAA,uBACGC,cAAA,CAAA,KAAA,EAAA;AAAA,MACC,SAAW,EAAAC,SAAA;AAAA,QACT,YAAa,EAAA;AAAA,QACb,aAAa,OAAO,CAAA;AAAA,QACpB;AAAA,UACE,CAAC,YAAa,CAAA,QAAQ,CAAI,GAAA,MAAA;AAAA,UAC1B,CAAC,YAAa,CAAA,CAAA,MAAA,EAASC,sBAAW,MAAU,IAAA,EAAE,GAAG,CAAI,GAAA,MAAA;AAAA,UACrD,CAAC,YAAa,CAAA,WAAW,CAAI,GAAA,SAAA;AAAA,UAE7B,CAAC,YAAa,CAAA,UAAU,CAAI,GAAA,QAAA;AAAA,UAC5B,CAAC,YAAa,CAAA,cAAc,CAAI,GAAA,YAAA;AAAA,SAClC;AAAA,QACA,SAAA;AAAA,OACF;AAAA,MACA,GAAA;AAAA,MACC,GAAG,IAAA;AAAA,MAEH,QAAA;AAAA,KACH,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
1
+ {"version":3,"file":"Card.js","sources":["../src/card/Card.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { type ComponentPropsWithoutRef, forwardRef } from \"react\";\n\nimport { capitalize, makePrefixer } from \"../utils\";\n\nimport cardCss from \"./Card.css\";\n\nconst withBaseName = makePrefixer(\"saltCard\");\nexport interface CardProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * If provided an accent is shown in the specified position.\n */\n accent?: \"bottom\" | \"top\" | \"left\" | \"right\";\n /**\n * **Deprecated:** Use the InteractableCard component instead\n *\n * If `true`, the card will be disabled.\n */\n disabled?: boolean;\n /**\n * If `true` the card will have hover styling.\n */\n hoverable?: boolean;\n /**\n * **Deprecated:** Use the InteractableCard component instead\n *\n * If `true`, interactive styles will be applied to `Card`. These styles give prominence to certain content\n * on the page.\n */\n interactable?: boolean;\n /**\n * Styling variant. Defaults to \"primary\".\n */\n variant?: \"primary\" | \"secondary\" | \"tertiary\";\n}\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(\n function Card(props, ref) {\n const {\n accent,\n children,\n className,\n disabled,\n interactable,\n hoverable,\n variant = \"primary\",\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-card\",\n css: cardCss,\n window: targetWindow,\n });\n\n return (\n <div\n className={clsx(\n withBaseName(),\n withBaseName(variant),\n {\n [withBaseName(\"accent\")]: accent,\n [withBaseName(`accent${capitalize(accent || \"\")}`)]: accent,\n [withBaseName(\"hoverable\")]: hoverable,\n /* **Deprecated:** InteractableCard should be used instead for these features */\n [withBaseName(\"disabled\")]: disabled,\n [withBaseName(\"interactable\")]: interactable,\n },\n className,\n )}\n ref={ref}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","Card","useWindow","useComponentCssInjection","cardCss","jsx","clsx","capitalize"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,MAAM,YAAA,GAAeA,0BAAa,UAAU,CAAA,CAAA;AA6BrC,MAAM,IAAO,GAAAC,gBAAA;AAAA,EAClB,SAASC,KAAK,CAAA,KAAA,EAAO,GAAK,EAAA;AACxB,IAAM,MAAA;AAAA,MACJ,MAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,YAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAU,GAAA,SAAA;AAAA,MACP,GAAA,IAAA;AAAA,KACD,GAAA,KAAA,CAAA;AAEJ,IAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,WAAA;AAAA,MACR,GAAK,EAAAC,MAAA;AAAA,MACL,MAAQ,EAAA,YAAA;AAAA,KACT,CAAA,CAAA;AAED,IAAA,uBACGC,cAAA,CAAA,KAAA,EAAA;AAAA,MACC,SAAW,EAAAC,SAAA;AAAA,QACT,YAAa,EAAA;AAAA,QACb,aAAa,OAAO,CAAA;AAAA,QACpB;AAAA,UACE,CAAC,YAAa,CAAA,QAAQ,CAAI,GAAA,MAAA;AAAA,UAC1B,CAAC,YAAa,CAAA,CAAA,MAAA,EAASC,sBAAW,MAAU,IAAA,EAAE,GAAG,CAAI,GAAA,MAAA;AAAA,UACrD,CAAC,YAAa,CAAA,WAAW,CAAI,GAAA,SAAA;AAAA,UAE7B,CAAC,YAAa,CAAA,UAAU,CAAI,GAAA,QAAA;AAAA,UAC5B,CAAC,YAAa,CAAA,cAAc,CAAI,GAAA,YAAA;AAAA,SAClC;AAAA,QACA,SAAA;AAAA,OACF;AAAA,MACA,GAAA;AAAA,MACC,GAAG,IAAA;AAAA,MAEH,QAAA;AAAA,KACH,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
@@ -3,18 +3,18 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var createContext = require('../../utils/createContext.js');
6
+ require('react/jsx-runtime');
6
7
  require('react');
8
+ require('clsx');
7
9
  require('../../utils/useFloatingUI/useFloatingUI.js');
8
10
  require('../../utils/useId.js');
9
11
  require('../../salt-provider/SaltProvider.js');
10
12
  require('../../viewport/ViewportProvider.js');
11
- require('clsx');
12
13
  require('../../accordion/AccordionGroup.js');
13
14
  require('../../accordion/AccordionPanel.js');
14
15
  require('../../accordion/Accordion.js');
15
16
  require('../../accordion/AccordionHeader.js');
16
17
  require('../../aria-announcer/AriaAnnouncerContext.js');
17
- require('react/jsx-runtime');
18
18
  require('../../avatar/Avatar.js');
19
19
  require('../../badge/Badge.js');
20
20
  require('../../banner/Banner.js');
@@ -215,12 +215,14 @@ const ComboBox = React.forwardRef(function ComboBox2(props, ref) {
215
215
  (_a2 = inputRef.current) == null ? void 0 : _a2.focus();
216
216
  }
217
217
  };
218
+ const hasValidChildren = React.Children.toArray(children).filter(Boolean).length > 0;
218
219
  const { x, y, strategy, elements, floating, reference, context } = useFloatingUI.useFloatingUI({
219
- open: openState && !readOnly && React.Children.count(children) > 0,
220
+ open: openState && !readOnly && hasValidChildren,
220
221
  onOpenChange: handleOpenChange,
221
222
  placement: "bottom-start",
222
223
  strategy: "fixed",
223
224
  middleware: [
225
+ react.offset(1),
224
226
  react.size({
225
227
  apply({ rects, elements: elements2, availableHeight }) {
226
228
  Object.assign(elements2.floating.style, {
@@ -401,7 +403,7 @@ const ComboBox = React.forwardRef(function ComboBox2(props, ref) {
401
403
  endAdornment: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
402
404
  children: [
403
405
  endAdornment,
404
- !readOnly ? /* @__PURE__ */ jsxRuntime.jsx(Button.Button, {
406
+ !readOnly && hasValidChildren ? /* @__PURE__ */ jsxRuntime.jsx(Button.Button, {
405
407
  "aria-labelledby": clsx.clsx(buttonId, formFieldLabelledBy),
406
408
  "aria-label": "Show options",
407
409
  "aria-expanded": openState,
@@ -450,7 +452,7 @@ const ComboBox = React.forwardRef(function ComboBox2(props, ref) {
450
452
  emptyReadOnlyMarker: readOnly && selectedState.length > 0 ? "" : void 0
451
453
  }),
452
454
  /* @__PURE__ */ jsxRuntime.jsx(OptionList.OptionList, {
453
- open: (openState || focusedState) && !readOnly && React.Children.count(children) > 0,
455
+ open: (openState || focusedState) && !readOnly && hasValidChildren,
454
456
  collapsed: !openState,
455
457
  ref: handleListRef,
456
458
  id: listId,