@salt-ds/core 1.70.0 → 1.72.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (315) hide show
  1. package/CHANGELOG.md +144 -0
  2. package/css/salt-core.css +466 -106
  3. package/dist-cjs/accordion/AccordionHeader.css.js +1 -1
  4. package/dist-cjs/aria-announcer/AriaAnnouncerProvider.js +8 -0
  5. package/dist-cjs/aria-announcer/AriaAnnouncerProvider.js.map +1 -1
  6. package/dist-cjs/avatar/Avatar.css.js +1 -1
  7. package/dist-cjs/badge/Badge.css.js +1 -1
  8. package/dist-cjs/banner/Banner.css.js +1 -1
  9. package/dist-cjs/breadcrumbs/Breadcrumb.css.js +1 -1
  10. package/dist-cjs/breadcrumbs/Breadcrumbs.css.js +1 -1
  11. package/dist-cjs/card/Card.css.js +1 -1
  12. package/dist-cjs/card/Card.js +4 -0
  13. package/dist-cjs/card/Card.js.map +1 -1
  14. package/dist-cjs/checkbox/Checkbox.css.js +1 -1
  15. package/dist-cjs/checkbox/CheckboxIcon.css.js +1 -1
  16. package/dist-cjs/combo-box/ComboBox.js +18 -36
  17. package/dist-cjs/combo-box/ComboBox.js.map +1 -1
  18. package/dist-cjs/combo-box/useComboBox.js +21 -21
  19. package/dist-cjs/combo-box/useComboBox.js.map +1 -1
  20. package/dist-cjs/drawer/Drawer.css.js +1 -1
  21. package/dist-cjs/drawer/Drawer.js +30 -5
  22. package/dist-cjs/drawer/Drawer.js.map +1 -1
  23. package/dist-cjs/drawer/DrawerCloseButton.js +1 -1
  24. package/dist-cjs/drawer/DrawerCloseButton.js.map +1 -1
  25. package/dist-cjs/drawer/DrawerContent.css.js +6 -0
  26. package/dist-cjs/drawer/DrawerContent.css.js.map +1 -0
  27. package/dist-cjs/drawer/DrawerContent.js +75 -0
  28. package/dist-cjs/drawer/DrawerContent.js.map +1 -0
  29. package/dist-cjs/drawer/DrawerContext.js +30 -0
  30. package/dist-cjs/drawer/DrawerContext.js.map +1 -0
  31. package/dist-cjs/drawer/DrawerFooter.css.js +6 -0
  32. package/dist-cjs/drawer/DrawerFooter.css.js.map +1 -0
  33. package/dist-cjs/drawer/DrawerFooter.js +30 -0
  34. package/dist-cjs/drawer/DrawerFooter.js.map +1 -0
  35. package/dist-cjs/drawer/DrawerHeader.css.js +6 -0
  36. package/dist-cjs/drawer/DrawerHeader.css.js.map +1 -0
  37. package/dist-cjs/drawer/DrawerHeader.js +95 -0
  38. package/dist-cjs/drawer/DrawerHeader.js.map +1 -0
  39. package/dist-cjs/drawer/hasDrawerSection.js +22 -0
  40. package/dist-cjs/drawer/hasDrawerSection.js.map +1 -0
  41. package/dist-cjs/dropdown/Dropdown.js +29 -30
  42. package/dist-cjs/dropdown/Dropdown.js.map +1 -1
  43. package/dist-cjs/file-drop-zone/FileDropZone.css.js +1 -1
  44. package/dist-cjs/form-field/FormField.css.js +1 -1
  45. package/dist-cjs/form-field/FormField.js +15 -0
  46. package/dist-cjs/form-field/FormField.js.map +1 -1
  47. package/dist-cjs/form-field/FormFieldHelperText.css.js +1 -1
  48. package/dist-cjs/form-field/FormFieldLabel.css.js +1 -1
  49. package/dist-cjs/form-field/FormFieldLabel.js +1 -1
  50. package/dist-cjs/form-field/FormFieldLabel.js.map +1 -1
  51. package/dist-cjs/index.js +10 -0
  52. package/dist-cjs/index.js.map +1 -1
  53. package/dist-cjs/input/Input.css.js +1 -1
  54. package/dist-cjs/interactable-card/InteractableCard.css.js +1 -1
  55. package/dist-cjs/interactable-card/InteractableCard.js +23 -7
  56. package/dist-cjs/interactable-card/InteractableCard.js.map +1 -1
  57. package/dist-cjs/interactable-card/InteractableCardGroup.js +71 -39
  58. package/dist-cjs/interactable-card/InteractableCardGroup.js.map +1 -1
  59. package/dist-cjs/interactable-card/InteractableCardGroupContext.js.map +1 -1
  60. package/dist-cjs/interactable-card/useInteractableCard.js +2 -3
  61. package/dist-cjs/interactable-card/useInteractableCard.js.map +1 -1
  62. package/dist-cjs/kbd/Kbd.css.js +1 -1
  63. package/dist-cjs/link/Link.css.js +1 -1
  64. package/dist-cjs/link-button/LinkButton.css.js +6 -0
  65. package/dist-cjs/link-button/LinkButton.css.js.map +1 -0
  66. package/dist-cjs/link-button/LinkButton.js +87 -0
  67. package/dist-cjs/link-button/LinkButton.js.map +1 -0
  68. package/dist-cjs/link-card/LinkCard.css.js +1 -1
  69. package/dist-cjs/link-card/LinkCard.js +4 -0
  70. package/dist-cjs/link-card/LinkCard.js.map +1 -1
  71. package/dist-cjs/list-box/ListBox.js +19 -26
  72. package/dist-cjs/list-box/ListBox.js.map +1 -1
  73. package/dist-cjs/list-control/ListControlNavigationKeys.js +74 -0
  74. package/dist-cjs/list-control/ListControlNavigationKeys.js.map +1 -0
  75. package/dist-cjs/list-control/ListControlOptionContext.js +47 -0
  76. package/dist-cjs/list-control/ListControlOptionContext.js.map +1 -0
  77. package/dist-cjs/list-control/ListControlOptionStore.js +159 -0
  78. package/dist-cjs/list-control/ListControlOptionStore.js.map +1 -0
  79. package/dist-cjs/list-control/ListControlProvider.js +39 -0
  80. package/dist-cjs/list-control/ListControlProvider.js.map +1 -0
  81. package/dist-cjs/list-control/ListControlRegistry.js +161 -0
  82. package/dist-cjs/list-control/ListControlRegistry.js.map +1 -0
  83. package/dist-cjs/list-control/ListControlState.js +137 -109
  84. package/dist-cjs/list-control/ListControlState.js.map +1 -1
  85. package/dist-cjs/mega-menu/MegaMenuGroupHeading.css.js +1 -1
  86. package/dist-cjs/mega-menu/MegaMenuListItem.css.js +1 -1
  87. package/dist-cjs/menu/MenuGroup.css.js +1 -1
  88. package/dist-cjs/menu/MenuItem.css.js +1 -1
  89. package/dist-cjs/menu/MenuItem.js +0 -1
  90. package/dist-cjs/menu/MenuItem.js.map +1 -1
  91. package/dist-cjs/navigation-item/NavigationItem.css.js +1 -1
  92. package/dist-cjs/number-input/NumberInput.js +2 -2
  93. package/dist-cjs/number-input/NumberInput.js.map +1 -1
  94. package/dist-cjs/option/Option.js +58 -39
  95. package/dist-cjs/option/Option.js.map +1 -1
  96. package/dist-cjs/option/OptionGroup.css.js +1 -1
  97. package/dist-cjs/overlay/Overlay.js +12 -2
  98. package/dist-cjs/overlay/Overlay.js.map +1 -1
  99. package/dist-cjs/overlay/OverlayContext.js +6 -0
  100. package/dist-cjs/overlay/OverlayContext.js.map +1 -1
  101. package/dist-cjs/overlay/OverlayFooter.css.js +6 -0
  102. package/dist-cjs/overlay/OverlayFooter.css.js.map +1 -0
  103. package/dist-cjs/overlay/OverlayFooter.js +30 -0
  104. package/dist-cjs/overlay/OverlayFooter.js.map +1 -0
  105. package/dist-cjs/overlay/OverlayHeader.css.js +1 -1
  106. package/dist-cjs/overlay/OverlayHeader.js +51 -11
  107. package/dist-cjs/overlay/OverlayHeader.js.map +1 -1
  108. package/dist-cjs/overlay/OverlayPanel.css.js +1 -1
  109. package/dist-cjs/overlay/OverlayPanel.js +20 -7
  110. package/dist-cjs/overlay/OverlayPanel.js.map +1 -1
  111. package/dist-cjs/overlay/OverlayPanelContent.css.js +1 -1
  112. package/dist-cjs/overlay/OverlayPanelContent.js +11 -13
  113. package/dist-cjs/overlay/OverlayPanelContent.js.map +1 -1
  114. package/dist-cjs/overlay/hasOverlaySection.js +24 -0
  115. package/dist-cjs/overlay/hasOverlaySection.js.map +1 -0
  116. package/dist-cjs/panel/Panel.css.js +1 -1
  117. package/dist-cjs/panel/Panel.js +13 -2
  118. package/dist-cjs/panel/Panel.js.map +1 -1
  119. package/dist-cjs/pill-input/PillInput.css.js +1 -1
  120. package/dist-cjs/pill-input/PillInput.js +2 -2
  121. package/dist-cjs/pill-input/PillInput.js.map +1 -1
  122. package/dist-cjs/radio-button/RadioButton.css.js +1 -1
  123. package/dist-cjs/radio-button/RadioButtonIcon.css.js +1 -1
  124. package/dist-cjs/rating/Rating.css.js +1 -1
  125. package/dist-cjs/slider/internal/SliderTrack.css.js +1 -1
  126. package/dist-cjs/stepper/internal/StepText.css.js +1 -1
  127. package/dist-cjs/switch/Switch.css.js +1 -1
  128. package/dist-cjs/table/Table.css.js +1 -1
  129. package/dist-cjs/tabs/internal/overflow/useOverflowSelectionState.js +10 -2
  130. package/dist-cjs/tabs/internal/overflow/useOverflowSelectionState.js.map +1 -1
  131. package/dist-cjs/tag/Tag.css.js +1 -1
  132. package/dist-cjs/text/Text.css.js +1 -1
  133. package/dist-cjs/toast/Toast.css.js +1 -1
  134. package/dist-cjs/toggle-button/ToggleButton.js +8 -2
  135. package/dist-cjs/toggle-button/ToggleButton.js.map +1 -1
  136. package/dist-cjs/toggle-button-group/ToggleButtonGroup.js +71 -8
  137. package/dist-cjs/toggle-button-group/ToggleButtonGroup.js.map +1 -1
  138. package/dist-cjs/toggle-button-group/ToggleButtonGroupContext.js.map +1 -1
  139. package/dist-cjs/toggletip/ToggletipPanel.css.js +1 -1
  140. package/dist-cjs/tooltip/Tooltip.css.js +1 -1
  141. package/dist-cjs/vertical-navigation/VerticalNavigationItemContent.css.js +1 -1
  142. package/dist-cjs/vertical-navigation/VerticalNavigationSubMenu.css.js +1 -1
  143. package/dist-es/accordion/AccordionHeader.css.js +1 -1
  144. package/dist-es/aria-announcer/AriaAnnouncerProvider.js +8 -0
  145. package/dist-es/aria-announcer/AriaAnnouncerProvider.js.map +1 -1
  146. package/dist-es/avatar/Avatar.css.js +1 -1
  147. package/dist-es/badge/Badge.css.js +1 -1
  148. package/dist-es/banner/Banner.css.js +1 -1
  149. package/dist-es/breadcrumbs/Breadcrumb.css.js +1 -1
  150. package/dist-es/breadcrumbs/Breadcrumbs.css.js +1 -1
  151. package/dist-es/card/Card.css.js +1 -1
  152. package/dist-es/card/Card.js +4 -0
  153. package/dist-es/card/Card.js.map +1 -1
  154. package/dist-es/checkbox/Checkbox.css.js +1 -1
  155. package/dist-es/checkbox/CheckboxIcon.css.js +1 -1
  156. package/dist-es/combo-box/ComboBox.js +18 -36
  157. package/dist-es/combo-box/ComboBox.js.map +1 -1
  158. package/dist-es/combo-box/useComboBox.js +21 -21
  159. package/dist-es/combo-box/useComboBox.js.map +1 -1
  160. package/dist-es/drawer/Drawer.css.js +1 -1
  161. package/dist-es/drawer/Drawer.js +31 -6
  162. package/dist-es/drawer/Drawer.js.map +1 -1
  163. package/dist-es/drawer/DrawerCloseButton.js +1 -1
  164. package/dist-es/drawer/DrawerCloseButton.js.map +1 -1
  165. package/dist-es/drawer/DrawerContent.css.js +4 -0
  166. package/dist-es/drawer/DrawerContent.css.js.map +1 -0
  167. package/dist-es/drawer/DrawerContent.js +73 -0
  168. package/dist-es/drawer/DrawerContent.js.map +1 -0
  169. package/dist-es/drawer/DrawerContext.js +27 -0
  170. package/dist-es/drawer/DrawerContext.js.map +1 -0
  171. package/dist-es/drawer/DrawerFooter.css.js +4 -0
  172. package/dist-es/drawer/DrawerFooter.css.js.map +1 -0
  173. package/dist-es/drawer/DrawerFooter.js +28 -0
  174. package/dist-es/drawer/DrawerFooter.js.map +1 -0
  175. package/dist-es/drawer/DrawerHeader.css.js +4 -0
  176. package/dist-es/drawer/DrawerHeader.css.js.map +1 -0
  177. package/dist-es/drawer/DrawerHeader.js +93 -0
  178. package/dist-es/drawer/DrawerHeader.js.map +1 -0
  179. package/dist-es/drawer/hasDrawerSection.js +20 -0
  180. package/dist-es/drawer/hasDrawerSection.js.map +1 -0
  181. package/dist-es/dropdown/Dropdown.js +29 -30
  182. package/dist-es/dropdown/Dropdown.js.map +1 -1
  183. package/dist-es/file-drop-zone/FileDropZone.css.js +1 -1
  184. package/dist-es/form-field/FormField.css.js +1 -1
  185. package/dist-es/form-field/FormField.js +16 -1
  186. package/dist-es/form-field/FormField.js.map +1 -1
  187. package/dist-es/form-field/FormFieldHelperText.css.js +1 -1
  188. package/dist-es/form-field/FormFieldLabel.css.js +1 -1
  189. package/dist-es/form-field/FormFieldLabel.js +1 -1
  190. package/dist-es/form-field/FormFieldLabel.js.map +1 -1
  191. package/dist-es/index.js +5 -0
  192. package/dist-es/index.js.map +1 -1
  193. package/dist-es/input/Input.css.js +1 -1
  194. package/dist-es/interactable-card/InteractableCard.css.js +1 -1
  195. package/dist-es/interactable-card/InteractableCard.js +23 -7
  196. package/dist-es/interactable-card/InteractableCard.js.map +1 -1
  197. package/dist-es/interactable-card/InteractableCardGroup.js +72 -40
  198. package/dist-es/interactable-card/InteractableCardGroup.js.map +1 -1
  199. package/dist-es/interactable-card/InteractableCardGroupContext.js.map +1 -1
  200. package/dist-es/interactable-card/useInteractableCard.js +2 -3
  201. package/dist-es/interactable-card/useInteractableCard.js.map +1 -1
  202. package/dist-es/kbd/Kbd.css.js +1 -1
  203. package/dist-es/link/Link.css.js +1 -1
  204. package/dist-es/link-button/LinkButton.css.js +4 -0
  205. package/dist-es/link-button/LinkButton.css.js.map +1 -0
  206. package/dist-es/link-button/LinkButton.js +85 -0
  207. package/dist-es/link-button/LinkButton.js.map +1 -0
  208. package/dist-es/link-card/LinkCard.css.js +1 -1
  209. package/dist-es/link-card/LinkCard.js +4 -0
  210. package/dist-es/link-card/LinkCard.js.map +1 -1
  211. package/dist-es/list-box/ListBox.js +19 -26
  212. package/dist-es/list-box/ListBox.js.map +1 -1
  213. package/dist-es/list-control/ListControlNavigationKeys.js +69 -0
  214. package/dist-es/list-control/ListControlNavigationKeys.js.map +1 -0
  215. package/dist-es/list-control/ListControlOptionContext.js +44 -0
  216. package/dist-es/list-control/ListControlOptionContext.js.map +1 -0
  217. package/dist-es/list-control/ListControlOptionStore.js +153 -0
  218. package/dist-es/list-control/ListControlOptionStore.js.map +1 -0
  219. package/dist-es/list-control/ListControlProvider.js +37 -0
  220. package/dist-es/list-control/ListControlProvider.js.map +1 -0
  221. package/dist-es/list-control/ListControlRegistry.js +158 -0
  222. package/dist-es/list-control/ListControlRegistry.js.map +1 -0
  223. package/dist-es/list-control/ListControlState.js +137 -110
  224. package/dist-es/list-control/ListControlState.js.map +1 -1
  225. package/dist-es/mega-menu/MegaMenuGroupHeading.css.js +1 -1
  226. package/dist-es/mega-menu/MegaMenuListItem.css.js +1 -1
  227. package/dist-es/menu/MenuGroup.css.js +1 -1
  228. package/dist-es/menu/MenuItem.css.js +1 -1
  229. package/dist-es/menu/MenuItem.js +0 -1
  230. package/dist-es/menu/MenuItem.js.map +1 -1
  231. package/dist-es/navigation-item/NavigationItem.css.js +1 -1
  232. package/dist-es/number-input/NumberInput.js +2 -2
  233. package/dist-es/number-input/NumberInput.js.map +1 -1
  234. package/dist-es/option/Option.js +59 -40
  235. package/dist-es/option/Option.js.map +1 -1
  236. package/dist-es/option/OptionGroup.css.js +1 -1
  237. package/dist-es/overlay/Overlay.js +13 -3
  238. package/dist-es/overlay/Overlay.js.map +1 -1
  239. package/dist-es/overlay/OverlayContext.js +6 -0
  240. package/dist-es/overlay/OverlayContext.js.map +1 -1
  241. package/dist-es/overlay/OverlayFooter.css.js +4 -0
  242. package/dist-es/overlay/OverlayFooter.css.js.map +1 -0
  243. package/dist-es/overlay/OverlayFooter.js +28 -0
  244. package/dist-es/overlay/OverlayFooter.js.map +1 -0
  245. package/dist-es/overlay/OverlayHeader.css.js +1 -1
  246. package/dist-es/overlay/OverlayHeader.js +51 -11
  247. package/dist-es/overlay/OverlayHeader.js.map +1 -1
  248. package/dist-es/overlay/OverlayPanel.css.js +1 -1
  249. package/dist-es/overlay/OverlayPanel.js +20 -7
  250. package/dist-es/overlay/OverlayPanel.js.map +1 -1
  251. package/dist-es/overlay/OverlayPanelContent.css.js +1 -1
  252. package/dist-es/overlay/OverlayPanelContent.js +11 -13
  253. package/dist-es/overlay/OverlayPanelContent.js.map +1 -1
  254. package/dist-es/overlay/hasOverlaySection.js +22 -0
  255. package/dist-es/overlay/hasOverlaySection.js.map +1 -0
  256. package/dist-es/panel/Panel.css.js +1 -1
  257. package/dist-es/panel/Panel.js +13 -2
  258. package/dist-es/panel/Panel.js.map +1 -1
  259. package/dist-es/pill-input/PillInput.css.js +1 -1
  260. package/dist-es/pill-input/PillInput.js +2 -2
  261. package/dist-es/pill-input/PillInput.js.map +1 -1
  262. package/dist-es/radio-button/RadioButton.css.js +1 -1
  263. package/dist-es/radio-button/RadioButtonIcon.css.js +1 -1
  264. package/dist-es/rating/Rating.css.js +1 -1
  265. package/dist-es/slider/internal/SliderTrack.css.js +1 -1
  266. package/dist-es/stepper/internal/StepText.css.js +1 -1
  267. package/dist-es/switch/Switch.css.js +1 -1
  268. package/dist-es/table/Table.css.js +1 -1
  269. package/dist-es/tabs/internal/overflow/useOverflowSelectionState.js +10 -2
  270. package/dist-es/tabs/internal/overflow/useOverflowSelectionState.js.map +1 -1
  271. package/dist-es/tag/Tag.css.js +1 -1
  272. package/dist-es/text/Text.css.js +1 -1
  273. package/dist-es/toast/Toast.css.js +1 -1
  274. package/dist-es/toggle-button/ToggleButton.js +8 -2
  275. package/dist-es/toggle-button/ToggleButton.js.map +1 -1
  276. package/dist-es/toggle-button-group/ToggleButtonGroup.js +71 -8
  277. package/dist-es/toggle-button-group/ToggleButtonGroup.js.map +1 -1
  278. package/dist-es/toggle-button-group/ToggleButtonGroupContext.js.map +1 -1
  279. package/dist-es/toggletip/ToggletipPanel.css.js +1 -1
  280. package/dist-es/tooltip/Tooltip.css.js +1 -1
  281. package/dist-es/vertical-navigation/VerticalNavigationItemContent.css.js +1 -1
  282. package/dist-es/vertical-navigation/VerticalNavigationSubMenu.css.js +1 -1
  283. package/dist-types/card/Card.d.ts +10 -0
  284. package/dist-types/combo-box/useComboBox.d.ts +3 -6
  285. package/dist-types/drawer/Drawer.d.ts +1 -1
  286. package/dist-types/drawer/DrawerCloseButton.d.ts +3 -0
  287. package/dist-types/drawer/DrawerContent.d.ts +3 -0
  288. package/dist-types/drawer/DrawerContext.d.ts +9 -0
  289. package/dist-types/drawer/DrawerFooter.d.ts +3 -0
  290. package/dist-types/drawer/DrawerHeader.d.ts +24 -0
  291. package/dist-types/drawer/hasDrawerSection.d.ts +2 -0
  292. package/dist-types/drawer/index.d.ts +3 -0
  293. package/dist-types/index.d.ts +1 -0
  294. package/dist-types/interactable-card/InteractableCard.d.ts +9 -1
  295. package/dist-types/interactable-card/InteractableCardGroupContext.d.ts +2 -0
  296. package/dist-types/interactable-card/useInteractableCard.d.ts +1 -2
  297. package/dist-types/link-button/LinkButton.d.ts +26 -0
  298. package/dist-types/link-button/index.d.ts +1 -0
  299. package/dist-types/link-card/LinkCard.d.ts +8 -0
  300. package/dist-types/list-control/ListControlNavigationKeys.d.ts +30 -0
  301. package/dist-types/list-control/ListControlOptionContext.d.ts +18 -0
  302. package/dist-types/list-control/ListControlOptionStore.d.ts +17 -0
  303. package/dist-types/list-control/ListControlProvider.d.ts +11 -0
  304. package/dist-types/list-control/ListControlRegistry.d.ts +22 -0
  305. package/dist-types/list-control/ListControlState.d.ts +6 -6
  306. package/dist-types/option/Option.d.ts +3 -1
  307. package/dist-types/overlay/Overlay.d.ts +2 -1
  308. package/dist-types/overlay/OverlayContext.d.ts +4 -0
  309. package/dist-types/overlay/OverlayFooter.d.ts +4 -0
  310. package/dist-types/overlay/hasOverlaySection.d.ts +2 -0
  311. package/dist-types/overlay/index.d.ts +1 -0
  312. package/dist-types/panel/Panel.d.ts +4 -0
  313. package/dist-types/toggle-button-group/ToggleButtonGroupContext.d.ts +2 -1
  314. package/dist-types/utils/useIsomorphicLayoutEffect.d.ts +2 -2
  315. package/package.json +14 -10
@@ -1 +1 @@
1
- {"version":3,"file":"useComboBox.js","sources":["../src/combo-box/useComboBox.ts"],"sourcesContent":["import type { ComponentPropsWithoutRef, SyntheticEvent } from \"react\";\nimport type { OptionValue } from \"../list-control/ListControlContext\";\nimport {\n type ListControlProps,\n useListControl,\n} from \"../list-control/ListControlState\";\nimport { useControlled } from \"../utils\";\n\nexport type UseComboBoxProps<Item> = ListControlProps<Item> &\n Pick<ComponentPropsWithoutRef<\"input\">, \"value\" | \"defaultValue\">;\n\nexport function useComboBox<Item>(props: UseComboBoxProps<Item>) {\n const {\n open,\n defaultOpen,\n onOpenChange,\n multiselect,\n defaultSelected,\n selected,\n onSelectionChange,\n disabled,\n readOnly,\n valueToString,\n value,\n defaultValue,\n } = props;\n\n const listControl = useListControl<Item>({\n open,\n defaultOpen,\n onOpenChange,\n multiselect,\n defaultSelected,\n selected,\n onSelectionChange,\n disabled,\n readOnly,\n valueToString,\n });\n\n const { selectedState, getOptionsMatching, setSelectedState, setOpen } =\n listControl;\n\n const [valueState, setValueState] = useControlled({\n controlled: value,\n default:\n defaultValue ??\n (selectedState.length === 1 && !multiselect\n ? listControl.valueToString(selectedState[0])\n : defaultValue),\n name: \"ComboBox\",\n state: \"value\",\n });\n\n const select = (event: SyntheticEvent, option: OptionValue<Item>) => {\n if (option.disabled || disabled || readOnly) {\n return;\n }\n\n let newSelected = [option.value];\n\n if (multiselect) {\n if (selectedState.includes(option.value)) {\n newSelected = selectedState.filter((item) => item !== option.value);\n } else {\n newSelected = selectedState.concat([option.value]);\n }\n }\n\n setSelectedState(newSelected);\n const newValue = getOptionsMatching((option) =>\n newSelected.includes(option.value),\n ).map((option) => listControl.valueToString(option.data.value));\n setValueState(multiselect ? \"\" : newValue[0]);\n onSelectionChange?.(event, newSelected);\n\n if (!multiselect) {\n setOpen(false);\n }\n };\n\n const removePill = (event: SyntheticEvent, itemToRemove: Item) => {\n if (!multiselect || disabled || readOnly) {\n return;\n }\n\n let newSelected: Item[];\n\n if (selectedState.includes(itemToRemove)) {\n newSelected = selectedState.filter((item) => item !== itemToRemove);\n } else {\n newSelected = selectedState.concat([itemToRemove]);\n }\n\n setSelectedState(newSelected);\n setValueState(\"\");\n onSelectionChange?.(event, newSelected);\n };\n\n return { ...listControl, select, valueState, setValueState, removePill };\n}\n"],"names":["useListControl","useControlled","option"],"mappings":"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"}
1
+ {"version":3,"file":"useComboBox.js","sources":["../src/combo-box/useComboBox.ts"],"sourcesContent":["import type { ComponentPropsWithoutRef, SyntheticEvent } from \"react\";\nimport type { OptionValue } from \"../list-control/ListControlContext\";\nimport {\n type ListControlProps,\n useListControl,\n} from \"../list-control/ListControlState\";\nimport { useControlled, useEventCallback } from \"../utils\";\n\nexport type UseComboBoxProps<Item> = ListControlProps<Item> &\n Pick<ComponentPropsWithoutRef<\"input\">, \"value\" | \"defaultValue\">;\n\nexport function useComboBox<Item>(props: UseComboBoxProps<Item>) {\n const {\n open,\n defaultOpen,\n onOpenChange,\n multiselect,\n defaultSelected,\n selected,\n onSelectionChange,\n disabled,\n readOnly,\n valueToString,\n value,\n defaultValue,\n } = props;\n\n const listControl = useListControl<Item>({\n open,\n defaultOpen,\n onOpenChange,\n multiselect,\n defaultSelected,\n selected,\n onSelectionChange,\n disabled,\n readOnly,\n valueToString,\n });\n\n const { selectedState, setSelectedState, setOpen } = listControl;\n\n const [valueState, setValueState] = useControlled({\n controlled: value,\n default:\n defaultValue ??\n (selectedState.length === 1 && !multiselect\n ? listControl.valueToString(selectedState[0])\n : defaultValue),\n name: \"ComboBox\",\n state: \"value\",\n });\n\n const select = useEventCallback(\n (event: SyntheticEvent, option: OptionValue<Item>) => {\n if (option.disabled || disabled || readOnly) {\n return;\n }\n\n let newSelected = [option.value];\n\n if (multiselect) {\n if (selectedState.includes(option.value)) {\n newSelected = selectedState.filter((item) => item !== option.value);\n } else {\n newSelected = selectedState.concat([option.value]);\n }\n }\n\n setSelectedState(newSelected);\n setValueState(multiselect ? \"\" : listControl.valueToString(option.value));\n onSelectionChange?.(event, newSelected);\n\n if (!multiselect) {\n setOpen(false);\n }\n },\n );\n\n const removePill = (event: SyntheticEvent, itemToRemove: Item) => {\n if (!multiselect || disabled || readOnly) {\n return;\n }\n\n let newSelected: Item[];\n\n if (selectedState.includes(itemToRemove)) {\n newSelected = selectedState.filter((item) => item !== itemToRemove);\n } else {\n newSelected = selectedState.concat([itemToRemove]);\n }\n\n setSelectedState(newSelected);\n setValueState(\"\");\n onSelectionChange?.(event, newSelected);\n };\n\n return { ...listControl, select, valueState, setValueState, removePill };\n}\n"],"names":["useListControl","useControlled","useEventCallback"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = "/* Styles applied to Drawer component */\n.saltDrawer {\n background: var(--drawer-background);\n display: flex;\n flex-direction: column;\n max-height: 100%;\n max-width: 100%;\n overflow: auto;\n padding: var(--salt-spacing-300);\n box-shadow: var(--salt-overlayable-shadow-modal);\n z-index: var(--salt-zIndex-drawer);\n position: fixed;\n top: 0;\n box-sizing: border-box;\n}\n\n/* Styles applied when variant = \"primary\" */\n.saltDrawer-primary {\n --drawer-background: var(--salt-container-primary-background);\n}\n\n/* Styles applied when variant = \"secondary\" */\n.saltDrawer-secondary {\n --drawer-background: var(--salt-container-secondary-background);\n}\n\n/* Styles applied when variant = \"tertiary\" */\n.saltDrawer-tertiary {\n --drawer-background: var(--salt-container-tertiary-background);\n}\n\n/* Styles applied when position = \"top\" */\n.saltDrawer-top {\n left: 0;\n right: 0;\n bottom: auto;\n}\n\n/* Styles applied when position = \"top\" and the component mounts */\n.saltDrawer-top.saltDrawer-enterAnimation {\n animation: var(--salt-animation-slide-in-bottom);\n}\n\n/* Styles applied when position = \"top\" and the component unmounts */\n.saltDrawer-top.saltDrawer-exitAnimation {\n animation: var(--salt-animation-slide-out-bottom);\n}\n\n/* Styles applied when position = \"right\" */\n.saltDrawer-right {\n left: auto;\n right: 0;\n height: 100%;\n}\n\n/* Styles applied when position = \"right\" and the component mounts */\n.saltDrawer-right.saltDrawer-enterAnimation {\n animation: var(--salt-animation-slide-in-right);\n}\n\n/* Styles applied when position = \"right\" and the component unmounts */\n.saltDrawer-right.saltDrawer-exitAnimation {\n animation: var(--salt-animation-slide-out-right);\n}\n\n/* Styles applied when position = \"left\" */\n.saltDrawer-left {\n left: 0;\n right: auto;\n height: 100%;\n}\n\n/* Styles applied when position = \"left\" and the component mounts */\n.saltDrawer-left.saltDrawer-enterAnimation {\n animation: var(--salt-animation-slide-in-left);\n}\n\n/* Styles applied when position = \"left\" and the component unmounts */\n.saltDrawer-left.saltDrawer-exitAnimation {\n animation: var(--salt-animation-slide-out-left);\n}\n\n/* Styles applied when position = \"bottom\" */\n.saltDrawer-bottom {\n left: 0;\n right: 0;\n bottom: 0;\n top: auto;\n}\n\n/* Styles applied when position = \"bottom\" and the component mounts */\n.saltDrawer-bottom.saltDrawer-enterAnimation {\n animation: var(--salt-animation-slide-in-top);\n}\n\n/* Styles applied when position = \"bottom\" and the component unmounts */\n.saltDrawer-bottom.saltDrawer-exitAnimation {\n animation: var(--salt-animation-slide-out-top);\n}\n";
3
+ var css_248z = "/* Styles applied to Drawer component */\n.saltDrawer {\n background: var(--drawer-background);\n display: flex;\n flex-direction: column;\n max-height: 100%;\n max-width: 100%;\n overflow: auto;\n /* Legacy padding for unsectioned drawers only. */\n padding: var(--salt-spacing-300);\n box-shadow: var(--salt-overlayable-shadow-modal);\n z-index: var(--salt-zIndex-drawer);\n position: fixed;\n top: 0;\n box-sizing: border-box;\n}\n\n.saltDrawer.saltDrawer-sectioned {\n padding: 0;\n}\n\n@supports selector(:has(*)) {\n .saltDrawer:has(> .saltDrawerHeader, > .saltDrawerContent, > .saltDrawerFooter) {\n padding: 0;\n }\n}\n\n/* Styles applied when variant = \"primary\" */\n.saltDrawer-primary {\n --drawer-background: var(--salt-container-primary-background);\n}\n\n/* Styles applied when variant = \"secondary\" */\n.saltDrawer-secondary {\n --drawer-background: var(--salt-container-secondary-background);\n}\n\n/* Styles applied when variant = \"tertiary\" */\n.saltDrawer-tertiary {\n --drawer-background: var(--salt-container-tertiary-background);\n}\n\n/* Styles applied when position = \"top\" */\n.saltDrawer-top {\n left: 0;\n right: 0;\n bottom: auto;\n}\n\n/* Styles applied when position = \"top\" and the component mounts */\n.saltDrawer-top.saltDrawer-enterAnimation {\n animation: var(--salt-animation-slide-in-bottom);\n}\n\n/* Styles applied when position = \"top\" and the component unmounts */\n.saltDrawer-top.saltDrawer-exitAnimation {\n animation: var(--salt-animation-slide-out-bottom);\n}\n\n/* Styles applied when position = \"right\" */\n.saltDrawer-right {\n left: auto;\n right: 0;\n height: 100%;\n}\n\n/* Styles applied when position = \"right\" and the component mounts */\n.saltDrawer-right.saltDrawer-enterAnimation {\n animation: var(--salt-animation-slide-in-right);\n}\n\n/* Styles applied when position = \"right\" and the component unmounts */\n.saltDrawer-right.saltDrawer-exitAnimation {\n animation: var(--salt-animation-slide-out-right);\n}\n\n/* Styles applied when position = \"left\" */\n.saltDrawer-left {\n left: 0;\n right: auto;\n height: 100%;\n}\n\n/* Styles applied when position = \"left\" and the component mounts */\n.saltDrawer-left.saltDrawer-enterAnimation {\n animation: var(--salt-animation-slide-in-left);\n}\n\n/* Styles applied when position = \"left\" and the component unmounts */\n.saltDrawer-left.saltDrawer-exitAnimation {\n animation: var(--salt-animation-slide-out-left);\n}\n\n/* Styles applied when position = \"bottom\" */\n.saltDrawer-bottom {\n left: 0;\n right: 0;\n bottom: 0;\n top: auto;\n}\n\n/* Styles applied when position = \"bottom\" and the component mounts */\n.saltDrawer-bottom.saltDrawer-enterAnimation {\n animation: var(--salt-animation-slide-in-top);\n}\n\n/* Styles applied when position = \"bottom\" and the component unmounts */\n.saltDrawer-bottom.saltDrawer-exitAnimation {\n animation: var(--salt-animation-slide-out-top);\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=Drawer.css.js.map
@@ -10,10 +10,12 @@ var Scrim = require('../scrim/Scrim.js');
10
10
  var makePrefixer = require('../utils/makePrefixer.js');
11
11
  var useFloatingUI = require('../utils/useFloatingUI/useFloatingUI.js');
12
12
  var useForkRef = require('../utils/useForkRef.js');
13
- require('../utils/useId.js');
13
+ var useId = require('../utils/useId.js');
14
14
  require('../salt-provider/SaltProvider.js');
15
15
  require('../viewport/ViewportProvider.js');
16
16
  var Drawer$1 = require('./Drawer.css.js');
17
+ var DrawerContext = require('./DrawerContext.js');
18
+ var hasDrawerSection = require('./hasDrawerSection.js');
17
19
 
18
20
  const ConditionalScrimWrapper = ({
19
21
  condition,
@@ -42,6 +44,9 @@ const Drawer = React.forwardRef(
42
44
  disableDismiss,
43
45
  disableScrim,
44
46
  initialFocus,
47
+ id,
48
+ "aria-labelledby": ariaLabelledBy,
49
+ "aria-describedby": ariaDescribedBy,
45
50
  ...rest
46
51
  } = props;
47
52
  const targetWindow = window.useWindow();
@@ -50,7 +55,13 @@ const Drawer = React.forwardRef(
50
55
  css: Drawer$1,
51
56
  window: targetWindow
52
57
  });
58
+ const drawerId = useId.useId(id);
59
+ const sectioned = hasDrawerSection.hasDrawerSection(children);
53
60
  const [showComponent, setShowComponent] = React.useState(false);
61
+ const [headerId, setHeaderId] = React.useState(void 0);
62
+ const [descriptionId, setDescriptionId] = React.useState(
63
+ void 0
64
+ );
54
65
  const { Component: FloatingComponent } = useFloatingUI.useFloatingComponent();
55
66
  const { context, floating, elements } = useFloatingUI.useFloatingUI({
56
67
  open: showComponent,
@@ -58,7 +69,7 @@ const Drawer = React.forwardRef(
58
69
  });
59
70
  const { getFloatingProps } = react.useInteractions([
60
71
  react.useClick(context),
61
- react.useDismiss(context, { enabled: !disableDismiss })
72
+ react.useDismiss(context, { outsidePress: !disableDismiss })
62
73
  ]);
63
74
  const handleRef = useForkRef.useForkRef(floating, ref);
64
75
  React.useEffect(() => {
@@ -72,15 +83,28 @@ const Drawer = React.forwardRef(
72
83
  return () => clearTimeout(animate);
73
84
  }
74
85
  }, [open, showComponent]);
75
- return /* @__PURE__ */ jsxRuntime.jsx(ConditionalScrimWrapper, { condition: showComponent && !disableScrim, children: /* @__PURE__ */ jsxRuntime.jsx(
86
+ const contextValue = React.useMemo(
87
+ () => ({
88
+ drawerId,
89
+ headerId,
90
+ setHeaderId,
91
+ descriptionId,
92
+ setDescriptionId
93
+ }),
94
+ [drawerId, headerId, descriptionId]
95
+ );
96
+ return /* @__PURE__ */ jsxRuntime.jsx(DrawerContext.DrawerContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxRuntime.jsx(ConditionalScrimWrapper, { condition: showComponent && !disableScrim, children: /* @__PURE__ */ jsxRuntime.jsx(
76
97
  FloatingComponent,
77
98
  {
99
+ id: drawerId,
78
100
  open: showComponent,
79
101
  ref: handleRef,
80
102
  role: "dialog",
81
103
  width: (_a = elements.floating) == null ? void 0 : _a.offsetWidth,
82
104
  height: (_b = elements.floating) == null ? void 0 : _b.offsetHeight,
83
105
  "aria-modal": "true",
106
+ "aria-labelledby": clsx.clsx(ariaLabelledBy, headerId) || void 0,
107
+ "aria-describedby": clsx.clsx(ariaDescribedBy, descriptionId) || void 0,
84
108
  focusManagerProps: {
85
109
  context,
86
110
  initialFocus,
@@ -92,7 +116,8 @@ const Drawer = React.forwardRef(
92
116
  {
93
117
  [withBaseName("enterAnimation")]: open,
94
118
  [withBaseName("exitAnimation")]: !open,
95
- [withBaseName(variant)]: variant
119
+ [withBaseName(variant)]: variant,
120
+ [withBaseName("sectioned")]: sectioned
96
121
  },
97
122
  className
98
123
  ),
@@ -100,7 +125,7 @@ const Drawer = React.forwardRef(
100
125
  ...rest,
101
126
  children
102
127
  }
103
- ) });
128
+ ) }) });
104
129
  }
105
130
  );
106
131
 
@@ -1 +1 @@
1
- {"version":3,"file":"Drawer.js","sources":["../src/drawer/Drawer.tsx"],"sourcesContent":["import {\n type FloatingFocusManager,\n useClick,\n useDismiss,\n useInteractions,\n} from \"@floating-ui/react\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type PropsWithChildren,\n useEffect,\n useState,\n} from \"react\";\nimport { Scrim } from \"../scrim\";\nimport {\n makePrefixer,\n useFloatingComponent,\n useFloatingUI,\n useForkRef,\n} from \"../utils\";\nimport drawerCss from \"./Drawer.css\";\n\ninterface ConditionalScrimWrapperProps extends PropsWithChildren {\n condition: boolean;\n}\n\nconst ConditionalScrimWrapper = ({\n condition,\n children,\n}: ConditionalScrimWrapperProps) => {\n return condition ? <Scrim fixed> {children} </Scrim> : <>{children} </>;\n};\n\nexport interface DrawerProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Defines the drawer position within the screen. Defaults to `left`.\n */\n position?: \"left\" | \"top\" | \"right\" | \"bottom\";\n /**\n * Display or hide the component.\n */\n open?: boolean;\n /**\n * Callback function triggered when open state changes.\n */\n onOpenChange?: (newOpen: boolean) => void;\n /**\n * Change background color palette\n */\n variant?: \"primary\" | \"secondary\" | \"tertiary\";\n /**\n * Prevent the dialog closing on click away\n * */\n disableDismiss?: boolean;\n /**\n * Prevent Scrim from rendering\n * */\n disableScrim?: boolean;\n /**\n * Which element to initially focus. Can be either a number (tabbable index as specified by the order) or a ref.\n * Default value is 0 (first tabbable element).\n * */\n initialFocus?: ComponentPropsWithoutRef<\n typeof FloatingFocusManager\n >[\"initialFocus\"];\n}\n\nconst withBaseName = makePrefixer(\"saltDrawer\");\n\nexport const Drawer = forwardRef<HTMLDivElement, DrawerProps>(\n function Drawer(props, ref) {\n const {\n children,\n className,\n position = \"left\",\n open = false,\n onOpenChange,\n variant = \"primary\",\n disableDismiss,\n disableScrim,\n initialFocus,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-drawer\",\n css: drawerCss,\n window: targetWindow,\n });\n\n const [showComponent, setShowComponent] = useState(false);\n const { Component: FloatingComponent } = useFloatingComponent();\n\n const { context, floating, elements } = useFloatingUI({\n open: showComponent,\n onOpenChange,\n });\n\n const { getFloatingProps } = useInteractions([\n useClick(context),\n useDismiss(context, { enabled: !disableDismiss }),\n ]);\n\n const handleRef = useForkRef<HTMLDivElement>(floating, ref);\n\n useEffect(() => {\n if (open && !showComponent) {\n setShowComponent(true);\n }\n\n if (!open && showComponent) {\n const animate = setTimeout(() => {\n setShowComponent(false);\n }, 300); // var(--salt-duration-perceptible)\n return () => clearTimeout(animate);\n }\n }, [open, showComponent]);\n\n return (\n <ConditionalScrimWrapper condition={showComponent && !disableScrim}>\n <FloatingComponent\n open={showComponent}\n ref={handleRef}\n role={\"dialog\"}\n width={elements.floating?.offsetWidth}\n height={elements.floating?.offsetHeight}\n aria-modal=\"true\"\n focusManagerProps={{\n context: context,\n initialFocus,\n outsideElementsInert: true,\n }}\n className={clsx(\n withBaseName(),\n withBaseName(position),\n {\n [withBaseName(\"enterAnimation\")]: open,\n [withBaseName(\"exitAnimation\")]: !open,\n [withBaseName(variant)]: variant,\n },\n className,\n )}\n {...getFloatingProps()}\n {...rest}\n >\n {children}\n </FloatingComponent>\n </ConditionalScrimWrapper>\n );\n },\n);\n"],"names":["jsxs","Scrim","Fragment","makePrefixer","forwardRef","Drawer","useWindow","useComponentCssInjection","drawerCss","useState","useFloatingComponent","useFloatingUI","useInteractions","useClick","useDismiss","useForkRef","useEffect","jsx","clsx"],"mappings":"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"}
1
+ {"version":3,"file":"Drawer.js","sources":["../src/drawer/Drawer.tsx"],"sourcesContent":["import {\n type FloatingFocusManager,\n useClick,\n useDismiss,\n useInteractions,\n} from \"@floating-ui/react\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type PropsWithChildren,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { Scrim } from \"../scrim\";\nimport {\n makePrefixer,\n useFloatingComponent,\n useFloatingUI,\n useForkRef,\n useId,\n} from \"../utils\";\nimport drawerCss from \"./Drawer.css\";\nimport { DrawerContext } from \"./DrawerContext\";\nimport { hasDrawerSection } from \"./hasDrawerSection\";\n\ninterface ConditionalScrimWrapperProps extends PropsWithChildren {\n condition: boolean;\n}\n\nconst ConditionalScrimWrapper = ({\n condition,\n children,\n}: ConditionalScrimWrapperProps) => {\n return condition ? <Scrim fixed> {children} </Scrim> : <>{children} </>;\n};\n\nexport interface DrawerProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Defines the drawer position within the screen. Defaults to `left`.\n */\n position?: \"left\" | \"top\" | \"right\" | \"bottom\";\n /**\n * Display or hide the component.\n */\n open?: boolean;\n /**\n * Callback function triggered when open state changes.\n */\n onOpenChange?: (newOpen: boolean) => void;\n /**\n * Change background color palette\n */\n variant?: \"primary\" | \"secondary\" | \"tertiary\";\n /**\n * Prevent the drawer closing on click away\n * */\n disableDismiss?: boolean;\n /**\n * Prevent Scrim from rendering\n * */\n disableScrim?: boolean;\n /**\n * Which element to initially focus. Can be either a number (tabbable index as specified by the order) or a ref.\n * Default value is 0 (first tabbable element).\n * */\n initialFocus?: ComponentPropsWithoutRef<\n typeof FloatingFocusManager\n >[\"initialFocus\"];\n}\n\nconst withBaseName = makePrefixer(\"saltDrawer\");\n\nexport const Drawer = forwardRef<HTMLDivElement, DrawerProps>(\n function Drawer(props, ref) {\n const {\n children,\n className,\n position = \"left\",\n open = false,\n onOpenChange,\n variant = \"primary\",\n disableDismiss,\n disableScrim,\n initialFocus,\n id,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-drawer\",\n css: drawerCss,\n window: targetWindow,\n });\n\n const drawerId = useId(id);\n\n const sectioned = hasDrawerSection(children);\n\n const [showComponent, setShowComponent] = useState(false);\n const [headerId, setHeaderId] = useState<string | undefined>(undefined);\n const [descriptionId, setDescriptionId] = useState<string | undefined>(\n undefined,\n );\n const { Component: FloatingComponent } = useFloatingComponent();\n\n const { context, floating, elements } = useFloatingUI({\n open: showComponent,\n onOpenChange,\n });\n\n const { getFloatingProps } = useInteractions([\n useClick(context),\n useDismiss(context, { outsidePress: !disableDismiss }),\n ]);\n\n const handleRef = useForkRef<HTMLDivElement>(floating, ref);\n\n useEffect(() => {\n if (open && !showComponent) {\n setShowComponent(true);\n }\n\n if (!open && showComponent) {\n const animate = setTimeout(() => {\n setShowComponent(false);\n }, 300); // var(--salt-duration-perceptible)\n return () => clearTimeout(animate);\n }\n }, [open, showComponent]);\n\n const contextValue = useMemo(\n () => ({\n drawerId,\n headerId,\n setHeaderId,\n descriptionId,\n setDescriptionId,\n }),\n [drawerId, headerId, descriptionId],\n );\n\n return (\n <DrawerContext.Provider value={contextValue}>\n <ConditionalScrimWrapper condition={showComponent && !disableScrim}>\n <FloatingComponent\n id={drawerId}\n open={showComponent}\n ref={handleRef}\n role={\"dialog\"}\n width={elements.floating?.offsetWidth}\n height={elements.floating?.offsetHeight}\n aria-modal=\"true\"\n aria-labelledby={clsx(ariaLabelledBy, headerId) || undefined}\n aria-describedby={clsx(ariaDescribedBy, descriptionId) || undefined}\n focusManagerProps={{\n context: context,\n initialFocus,\n outsideElementsInert: true,\n }}\n className={clsx(\n withBaseName(),\n withBaseName(position),\n {\n [withBaseName(\"enterAnimation\")]: open,\n [withBaseName(\"exitAnimation\")]: !open,\n [withBaseName(variant)]: variant,\n [withBaseName(\"sectioned\")]: sectioned,\n },\n className,\n )}\n {...getFloatingProps()}\n {...rest}\n >\n {children}\n </FloatingComponent>\n </ConditionalScrimWrapper>\n </DrawerContext.Provider>\n );\n },\n);\n"],"names":["jsxs","Scrim","Fragment","makePrefixer","forwardRef","Drawer","useWindow","useComponentCssInjection","drawerCss","useId","hasDrawerSection","useState","useFloatingComponent","useFloatingUI","useInteractions","useClick","useDismiss","useForkRef","useEffect","useMemo","jsx","DrawerContext","clsx"],"mappings":"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"}
@@ -28,7 +28,7 @@ const DrawerCloseButton = React.forwardRef(
28
28
  Button.Button,
29
29
  {
30
30
  ref,
31
- "aria-label": "Close Drawer",
31
+ "aria-label": "Close drawer",
32
32
  appearance: "transparent",
33
33
  className: clsx.clsx(withBaseName(), className),
34
34
  ...rest,
@@ -1 +1 @@
1
- {"version":3,"file":"DrawerCloseButton.js","sources":["../src/drawer/DrawerCloseButton.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { forwardRef } from \"react\";\nimport { Button, type ButtonProps } from \"../button\";\nimport { useIcon } from \"../semantic-icon-provider\";\nimport { makePrefixer } from \"../utils\";\n\nimport drawerCloseButtonCss from \"./DrawerCloseButton.css\";\n\nconst withBaseName = makePrefixer(\"saltDrawerCloseButton\");\n\nexport const DrawerCloseButton = forwardRef<HTMLButtonElement, ButtonProps>(\n function DrawerCloseButton({ className, ...rest }, ref) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-drawer-close-button\",\n css: drawerCloseButtonCss,\n window: targetWindow,\n });\n const { CloseIcon } = useIcon();\n\n return (\n <div className={withBaseName(\"container\")}>\n <Button\n ref={ref}\n aria-label=\"Close Drawer\"\n appearance=\"transparent\"\n className={clsx(withBaseName(), className)}\n {...rest}\n >\n <CloseIcon aria-hidden />\n </Button>\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","DrawerCloseButton","useWindow","useComponentCssInjection","drawerCloseButtonCss","useIcon","jsx","Button","clsx"],"mappings":";;;;;;;;;;;;;;;;AAUA,MAAM,YAAA,GAAeA,0BAAa,uBAAuB,CAAA;AAElD,MAAM,iBAAA,GAAoBC,gBAAA;AAAA,EAC/B,SAASC,kBAAAA,CAAkB,EAAE,WAAW,GAAG,IAAA,IAAQ,GAAA,EAAK;AACtD,IAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,IAAAC,+BAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,0BAAA;AAAA,MACR,GAAA,EAAKC,mBAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AACD,IAAA,MAAM,EAAE,SAAA,EAAU,GAAIC,4BAAA,EAAQ;AAE9B,IAAA,uBACEC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,YAAA,CAAa,WAAW,CAAA,EACtC,QAAA,kBAAAA,cAAA;AAAA,MAACC,aAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,YAAA,EAAW,cAAA;AAAA,QACX,UAAA,EAAW,aAAA;AAAA,QACX,SAAA,EAAWC,SAAA,CAAK,YAAA,EAAa,EAAG,SAAS,CAAA;AAAA,QACxC,GAAG,IAAA;AAAA,QAEJ,QAAA,kBAAAF,cAAA,CAAC,SAAA,EAAA,EAAU,aAAA,EAAW,IAAA,EAAC;AAAA;AAAA,KACzB,EACF,CAAA;AAAA,EAEJ;AACF;;;;"}
1
+ {"version":3,"file":"DrawerCloseButton.js","sources":["../src/drawer/DrawerCloseButton.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { forwardRef } from \"react\";\nimport { Button, type ButtonProps } from \"../button\";\nimport { useIcon } from \"../semantic-icon-provider\";\nimport { makePrefixer } from \"../utils\";\n\nimport drawerCloseButtonCss from \"./DrawerCloseButton.css\";\n\nconst withBaseName = makePrefixer(\"saltDrawerCloseButton\");\n\n/**\n * @deprecated since 1.71.0. Use `Button` in `DrawerHeader`'s `actions` instead.\n */\nexport const DrawerCloseButton = forwardRef<HTMLButtonElement, ButtonProps>(\n function DrawerCloseButton({ className, ...rest }, ref) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-drawer-close-button\",\n css: drawerCloseButtonCss,\n window: targetWindow,\n });\n const { CloseIcon } = useIcon();\n\n return (\n <div className={withBaseName(\"container\")}>\n <Button\n ref={ref}\n aria-label=\"Close drawer\"\n appearance=\"transparent\"\n className={clsx(withBaseName(), className)}\n {...rest}\n >\n <CloseIcon aria-hidden />\n </Button>\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","DrawerCloseButton","useWindow","useComponentCssInjection","drawerCloseButtonCss","useIcon","jsx","Button","clsx"],"mappings":";;;;;;;;;;;;;;;;AAUA,MAAM,YAAA,GAAeA,0BAAa,uBAAuB,CAAA;AAKlD,MAAM,iBAAA,GAAoBC,gBAAA;AAAA,EAC/B,SAASC,kBAAAA,CAAkB,EAAE,WAAW,GAAG,IAAA,IAAQ,GAAA,EAAK;AACtD,IAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,IAAAC,+BAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,0BAAA;AAAA,MACR,GAAA,EAAKC,mBAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AACD,IAAA,MAAM,EAAE,SAAA,EAAU,GAAIC,4BAAA,EAAQ;AAE9B,IAAA,uBACEC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,YAAA,CAAa,WAAW,CAAA,EACtC,QAAA,kBAAAA,cAAA;AAAA,MAACC,aAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,YAAA,EAAW,cAAA;AAAA,QACX,UAAA,EAAW,aAAA;AAAA,QACX,SAAA,EAAWC,SAAA,CAAK,YAAA,EAAa,EAAG,SAAS,CAAA;AAAA,QACxC,GAAG,IAAA;AAAA,QAEJ,QAAA,kBAAAF,cAAA,CAAC,SAAA,EAAA,EAAU,aAAA,EAAW,IAAA,EAAC;AAAA;AAAA,KACzB,EACF,CAAA;AAAA,EAEJ;AACF;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var css_248z = ".saltDrawerContent {\n color: var(--salt-content-primary-foreground);\n padding: 0 var(--salt-spacing-300);\n flex: 1 1 auto;\n min-height: var(--salt-text-lineHeight);\n display: flex;\n box-sizing: border-box;\n}\n\n.saltDrawerContent:first-child {\n padding-top: var(--salt-spacing-300);\n}\n\n.saltDrawerContent:last-child {\n padding-bottom: var(--salt-spacing-300);\n}\n\n.saltDrawerContent-inner {\n flex: 1;\n min-width: 0;\n overflow-y: auto;\n border-top: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) transparent;\n border-bottom: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) transparent;\n box-sizing: border-box;\n}\n\n.saltDrawerContent-inner:focus-visible {\n outline: var(--salt-focused-outline);\n outline-offset: calc(-1 * var(--salt-focused-outlineWidth));\n}\n\n.saltDrawerContent-inner.saltDrawerContent-scrollTop {\n border-top-color: var(--salt-separable-tertiary-borderColor);\n}\n\n.saltDrawerContent-inner.saltDrawerContent-scrollBottom {\n border-bottom-color: var(--salt-separable-tertiary-borderColor);\n}\n";
4
+
5
+ module.exports = css_248z;
6
+ //# sourceMappingURL=DrawerContent.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DrawerContent.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,75 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var styles = require('@salt-ds/styles');
5
+ var window = require('@salt-ds/window');
6
+ var clsx = require('clsx');
7
+ var React = require('react');
8
+ var makePrefixer = require('../utils/makePrefixer.js');
9
+ var useIsomorphicLayoutEffect = require('../utils/useIsomorphicLayoutEffect.js');
10
+ require('../utils/useFloatingUI/useFloatingUI.js');
11
+ require('../utils/useId.js');
12
+ var useResizeObserver = require('../utils/useResizeObserver.js');
13
+ require('../salt-provider/SaltProvider.js');
14
+ require('../viewport/ViewportProvider.js');
15
+ var DrawerContent$1 = require('./DrawerContent.css.js');
16
+ var DrawerContext = require('./DrawerContext.js');
17
+
18
+ const withBaseName = makePrefixer.makePrefixer("saltDrawerContent");
19
+ const DrawerContent = React.forwardRef(
20
+ function DrawerContent2(props, ref) {
21
+ const { children, className, onScroll, onScrollCapture, ...rest } = props;
22
+ const targetWindow = window.useWindow();
23
+ styles.useComponentCssInjection({
24
+ testId: "salt-drawer-content",
25
+ css: DrawerContent$1,
26
+ window: targetWindow
27
+ });
28
+ const { drawerId, headerId } = DrawerContext.useDrawerContext();
29
+ const scrollRef = React.useRef(null);
30
+ const [isOverflowing, setIsOverflowing] = React.useState(false);
31
+ const [canScrollUp, setCanScrollUp] = React.useState(false);
32
+ const [canScrollDown, setCanScrollDown] = React.useState(false);
33
+ const readScrollPosition = React.useCallback(() => {
34
+ const container = scrollRef.current;
35
+ if (!container) return;
36
+ const overflowingY = container.scrollHeight > container.clientHeight;
37
+ setIsOverflowing(
38
+ overflowingY || container.scrollWidth > container.clientWidth
39
+ );
40
+ setCanScrollUp(overflowingY && container.scrollTop > 0);
41
+ setCanScrollDown(
42
+ overflowingY && container.scrollHeight - container.scrollTop - container.clientHeight > 1
43
+ );
44
+ }, []);
45
+ const handleScrollCapture = (event) => {
46
+ targetWindow == null ? void 0 : targetWindow.requestAnimationFrame(readScrollPosition);
47
+ onScrollCapture == null ? void 0 : onScrollCapture(event);
48
+ };
49
+ useResizeObserver.useResizeObserver({ ref: scrollRef, onResize: readScrollPosition });
50
+ useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
51
+ readScrollPosition();
52
+ }, [readScrollPosition]);
53
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: clsx.clsx(withBaseName(), className), ...rest, children: /* @__PURE__ */ jsxRuntime.jsx(
54
+ "div",
55
+ {
56
+ ref: scrollRef,
57
+ className: clsx.clsx(withBaseName("inner"), {
58
+ [withBaseName("scrollTop")]: canScrollUp,
59
+ [withBaseName("scrollBottom")]: canScrollDown
60
+ }),
61
+ onScroll,
62
+ onScrollCapture: handleScrollCapture,
63
+ ...isOverflowing && {
64
+ tabIndex: 0,
65
+ role: "region",
66
+ "aria-labelledby": headerId ?? drawerId
67
+ },
68
+ children
69
+ }
70
+ ) });
71
+ }
72
+ );
73
+
74
+ exports.DrawerContent = DrawerContent;
75
+ //# sourceMappingURL=DrawerContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DrawerContent.js","sources":["../src/drawer/DrawerContent.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type UIEventHandler,\n useCallback,\n useRef,\n useState,\n} from \"react\";\nimport {\n makePrefixer,\n useIsomorphicLayoutEffect,\n useResizeObserver,\n} from \"../utils\";\nimport drawerContentCss from \"./DrawerContent.css\";\nimport { useDrawerContext } from \"./DrawerContext\";\n\nconst withBaseName = makePrefixer(\"saltDrawerContent\");\n\nexport type DrawerContentProps = ComponentPropsWithoutRef<\"div\">;\n\nexport const DrawerContent = forwardRef<HTMLDivElement, DrawerContentProps>(\n function DrawerContent(props, ref) {\n const { children, className, onScroll, onScrollCapture, ...rest } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-drawer-content\",\n css: drawerContentCss,\n window: targetWindow,\n });\n\n const { drawerId, headerId } = useDrawerContext();\n\n const scrollRef = useRef<HTMLDivElement>(null);\n const [isOverflowing, setIsOverflowing] = useState(false);\n const [canScrollUp, setCanScrollUp] = useState(false);\n const [canScrollDown, setCanScrollDown] = useState(false);\n\n const readScrollPosition = useCallback(() => {\n const container = scrollRef.current;\n if (!container) return;\n\n const overflowingY = container.scrollHeight > container.clientHeight;\n setIsOverflowing(\n overflowingY || container.scrollWidth > container.clientWidth,\n );\n setCanScrollUp(overflowingY && container.scrollTop > 0);\n setCanScrollDown(\n overflowingY &&\n container.scrollHeight -\n container.scrollTop -\n container.clientHeight >\n 1,\n );\n }, []);\n\n const handleScrollCapture: UIEventHandler<HTMLDivElement> = (event) => {\n targetWindow?.requestAnimationFrame(readScrollPosition);\n onScrollCapture?.(event);\n };\n\n useResizeObserver({ ref: scrollRef, onResize: readScrollPosition });\n\n useIsomorphicLayoutEffect(() => {\n readScrollPosition();\n }, [readScrollPosition]);\n\n return (\n <div ref={ref} className={clsx(withBaseName(), className)} {...rest}>\n <div\n ref={scrollRef}\n className={clsx(withBaseName(\"inner\"), {\n [withBaseName(\"scrollTop\")]: canScrollUp,\n [withBaseName(\"scrollBottom\")]: canScrollDown,\n })}\n onScroll={onScroll}\n onScrollCapture={handleScrollCapture}\n {...(isOverflowing && {\n tabIndex: 0,\n role: \"region\",\n \"aria-labelledby\": headerId ?? drawerId,\n })}\n >\n {children}\n </div>\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","DrawerContent","useWindow","useComponentCssInjection","drawerContentCss","useDrawerContext","useRef","useState","useCallback","useResizeObserver","useIsomorphicLayoutEffect","jsx","clsx"],"mappings":";;;;;;;;;;;;;;;;;AAmBA,MAAM,YAAA,GAAeA,0BAAa,mBAAmB,CAAA;AAI9C,MAAM,aAAA,GAAgBC,gBAAA;AAAA,EAC3B,SAASC,cAAAA,CAAc,KAAA,EAAO,GAAA,EAAK;AACjC,IAAA,MAAM,EAAE,QAAA,EAAU,SAAA,EAAW,UAAU,eAAA,EAAiB,GAAG,MAAK,GAAI,KAAA;AAEpE,IAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,IAAAC,+BAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,qBAAA;AAAA,MACR,GAAA,EAAKC,eAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,MAAM,EAAE,QAAA,EAAU,QAAA,EAAS,GAAIC,8BAAA,EAAiB;AAEhD,IAAA,MAAM,SAAA,GAAYC,aAAuB,IAAI,CAAA;AAC7C,IAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIC,eAAS,KAAK,CAAA;AACxD,IAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAS,KAAK,CAAA;AACpD,IAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,eAAS,KAAK,CAAA;AAExD,IAAA,MAAM,kBAAA,GAAqBC,kBAAY,MAAM;AAC3C,MAAA,MAAM,YAAY,SAAA,CAAU,OAAA;AAC5B,MAAA,IAAI,CAAC,SAAA,EAAW;AAEhB,MAAA,MAAM,YAAA,GAAe,SAAA,CAAU,YAAA,GAAe,SAAA,CAAU,YAAA;AACxD,MAAA,gBAAA;AAAA,QACE,YAAA,IAAgB,SAAA,CAAU,WAAA,GAAc,SAAA,CAAU;AAAA,OACpD;AACA,MAAA,cAAA,CAAe,YAAA,IAAgB,SAAA,CAAU,SAAA,GAAY,CAAC,CAAA;AACtD,MAAA,gBAAA;AAAA,QACE,gBACE,SAAA,CAAU,YAAA,GACR,SAAA,CAAU,SAAA,GACV,UAAU,YAAA,GACV;AAAA,OACN;AAAA,IACF,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,MAAM,mBAAA,GAAsD,CAAC,KAAA,KAAU;AACrE,MAAA,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAc,qBAAA,CAAsB,kBAAA,CAAA;AACpC,MAAA,eAAA,IAAA,IAAA,GAAA,MAAA,GAAA,eAAA,CAAkB,KAAA,CAAA;AAAA,IACpB,CAAA;AAEA,IAAAC,mCAAA,CAAkB,EAAE,GAAA,EAAK,SAAA,EAAW,QAAA,EAAU,oBAAoB,CAAA;AAElE,IAAAC,mDAAA,CAA0B,MAAM;AAC9B,MAAA,kBAAA,EAAmB;AAAA,IACrB,CAAA,EAAG,CAAC,kBAAkB,CAAC,CAAA;AAEvB,IAAA,uBACEC,cAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,SAAA,EAAWC,SAAA,CAAK,cAAa,EAAG,SAAS,CAAA,EAAI,GAAG,IAAA,EAC7D,QAAA,kBAAAD,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,SAAA;AAAA,QACL,SAAA,EAAWC,SAAA,CAAK,YAAA,CAAa,OAAO,CAAA,EAAG;AAAA,UACrC,CAAC,YAAA,CAAa,WAAW,CAAC,GAAG,WAAA;AAAA,UAC7B,CAAC,YAAA,CAAa,cAAc,CAAC,GAAG;AAAA,SACjC,CAAA;AAAA,QACD,QAAA;AAAA,QACA,eAAA,EAAiB,mBAAA;AAAA,QAChB,GAAI,aAAA,IAAiB;AAAA,UACpB,QAAA,EAAU,CAAA;AAAA,UACV,IAAA,EAAM,QAAA;AAAA,UACN,mBAAmB,QAAA,IAAY;AAAA,SACjC;AAAA,QAEC;AAAA;AAAA,KACH,EACF,CAAA;AAAA,EAEJ;AACF;;;;"}
@@ -0,0 +1,30 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var createContext = require('../utils/createContext.js');
5
+ require('clsx');
6
+ require('react/jsx-runtime');
7
+ require('../utils/useFloatingUI/useFloatingUI.js');
8
+ require('../utils/useId.js');
9
+ require('../salt-provider/SaltProvider.js');
10
+ require('../viewport/ViewportProvider.js');
11
+
12
+ const DrawerContext = createContext.createContext(
13
+ "DrawerContext",
14
+ {
15
+ drawerId: void 0,
16
+ headerId: void 0,
17
+ setHeaderId: () => {
18
+ },
19
+ descriptionId: void 0,
20
+ setDescriptionId: () => {
21
+ }
22
+ }
23
+ );
24
+ const useDrawerContext = () => {
25
+ return React.useContext(DrawerContext);
26
+ };
27
+
28
+ exports.DrawerContext = DrawerContext;
29
+ exports.useDrawerContext = useDrawerContext;
30
+ //# sourceMappingURL=DrawerContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DrawerContext.js","sources":["../src/drawer/DrawerContext.ts"],"sourcesContent":["import { useContext } from \"react\";\nimport { createContext } from \"../utils\";\n\nexport interface DrawerContextValue {\n drawerId?: string;\n headerId?: string;\n setHeaderId?: (id: string | undefined) => void;\n descriptionId?: string;\n setDescriptionId?: (id: string | undefined) => void;\n}\n\nexport const DrawerContext = createContext<DrawerContextValue>(\n \"DrawerContext\",\n {\n drawerId: undefined,\n headerId: undefined,\n setHeaderId: () => {},\n descriptionId: undefined,\n setDescriptionId: () => {},\n },\n);\n\nexport const useDrawerContext = () => {\n return useContext(DrawerContext);\n};\n"],"names":["createContext","useContext"],"mappings":";;;;;;;;;;;AAWO,MAAM,aAAA,GAAgBA,2BAAA;AAAA,EAC3B,eAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,MAAA;AAAA,IACV,QAAA,EAAU,MAAA;AAAA,IACV,aAAa,MAAM;AAAA,IAAC,CAAA;AAAA,IACpB,aAAA,EAAe,MAAA;AAAA,IACf,kBAAkB,MAAM;AAAA,IAAC;AAAA;AAE7B;AAEO,MAAM,mBAAmB,MAAM;AACpC,EAAA,OAAOC,iBAAW,aAAa,CAAA;AACjC;;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var css_248z = ".saltDrawerFooter {\n padding: var(--salt-spacing-300);\n display: flex;\n justify-content: flex-end;\n align-items: center;\n gap: var(--salt-spacing-100);\n flex-shrink: 0;\n box-sizing: border-box;\n}\n";
4
+
5
+ module.exports = css_248z;
6
+ //# sourceMappingURL=DrawerFooter.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DrawerFooter.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,30 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var styles = require('@salt-ds/styles');
5
+ var window = require('@salt-ds/window');
6
+ var clsx = require('clsx');
7
+ var React = require('react');
8
+ var makePrefixer = require('../utils/makePrefixer.js');
9
+ require('../utils/useFloatingUI/useFloatingUI.js');
10
+ require('../utils/useId.js');
11
+ require('../salt-provider/SaltProvider.js');
12
+ require('../viewport/ViewportProvider.js');
13
+ var DrawerFooter$1 = require('./DrawerFooter.css.js');
14
+
15
+ const withBaseName = makePrefixer.makePrefixer("saltDrawerFooter");
16
+ const DrawerFooter = React.forwardRef(
17
+ function DrawerFooter2(props, ref) {
18
+ const { className, ...rest } = props;
19
+ const targetWindow = window.useWindow();
20
+ styles.useComponentCssInjection({
21
+ testId: "salt-drawer-footer",
22
+ css: DrawerFooter$1,
23
+ window: targetWindow
24
+ });
25
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: clsx.clsx(withBaseName(), className), ref, ...rest });
26
+ }
27
+ );
28
+
29
+ exports.DrawerFooter = DrawerFooter;
30
+ //# sourceMappingURL=DrawerFooter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DrawerFooter.js","sources":["../src/drawer/DrawerFooter.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { type ComponentPropsWithoutRef, forwardRef } from \"react\";\nimport { makePrefixer } from \"../utils\";\nimport drawerFooterCss from \"./DrawerFooter.css\";\n\nconst withBaseName = makePrefixer(\"saltDrawerFooter\");\n\nexport type DrawerFooterProps = ComponentPropsWithoutRef<\"div\">;\n\nexport const DrawerFooter = forwardRef<HTMLDivElement, DrawerFooterProps>(\n function DrawerFooter(props, ref) {\n const { className, ...rest } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-drawer-footer\",\n css: drawerFooterCss,\n window: targetWindow,\n });\n\n return (\n <div className={clsx(withBaseName(), className)} ref={ref} {...rest} />\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","DrawerFooter","useWindow","useComponentCssInjection","drawerFooterCss","jsx","clsx"],"mappings":";;;;;;;;;;;;;;AAOA,MAAM,YAAA,GAAeA,0BAAa,kBAAkB,CAAA;AAI7C,MAAM,YAAA,GAAeC,gBAAA;AAAA,EAC1B,SAASC,aAAAA,CAAa,KAAA,EAAO,GAAA,EAAK;AAChC,IAAA,MAAM,EAAE,SAAA,EAAW,GAAG,IAAA,EAAK,GAAI,KAAA;AAE/B,IAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,IAAAC,+BAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,oBAAA;AAAA,MACR,GAAA,EAAKC,cAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,uBACEC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWC,SAAA,CAAK,YAAA,IAAgB,SAAS,CAAA,EAAG,GAAA,EAAW,GAAG,IAAA,EAAM,CAAA;AAAA,EAEzE;AACF;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var css_248z = ".saltDrawerHeader {\n padding: var(--salt-spacing-300);\n display: flex;\n gap: var(--salt-spacing-100);\n flex-shrink: 0;\n box-sizing: border-box;\n}\n\n.saltDrawerHeader-header {\n margin: 0;\n}\n\n.saltDrawerHeader-container {\n flex-grow: 1;\n margin: 0;\n display: flex;\n flex-direction: column;\n gap: var(--salt-spacing-50);\n padding-top: calc((var(--salt-size-base) - var(--salt-text-h2-lineHeight)) / 2);\n align-items: flex-start;\n min-width: 0;\n word-break: break-word;\n}\n\n.saltDrawerHeader-header > .saltText {\n display: block;\n margin: 0;\n}\n\n.saltDrawerHeader-actionsContainer {\n align-self: flex-start;\n display: flex;\n}\n\n.saltDrawerHeader-withAccent {\n position: relative;\n}\n\n.saltDrawerHeader-withAccent::before {\n content: \"\";\n position: absolute;\n top: var(--salt-spacing-300);\n bottom: var(--salt-spacing-300);\n left: 0;\n width: var(--salt-size-bar);\n background: var(--salt-sentiment-accent-background);\n}\n";
4
+
5
+ module.exports = css_248z;
6
+ //# sourceMappingURL=DrawerHeader.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DrawerHeader.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,95 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var styles = require('@salt-ds/styles');
5
+ var window = require('@salt-ds/window');
6
+ var clsx = require('clsx');
7
+ var React = require('react');
8
+ require('../text/Code.js');
9
+ require('../text/Display.js');
10
+ var Headings = require('../text/Headings.js');
11
+ require('../text/Label.js');
12
+ var Text = require('../text/Text.js');
13
+ require('../text/TextAction.js');
14
+ require('../text/TextNotation.js');
15
+ var makePrefixer = require('../utils/makePrefixer.js');
16
+ var useIsomorphicLayoutEffect = require('../utils/useIsomorphicLayoutEffect.js');
17
+ require('../utils/useFloatingUI/useFloatingUI.js');
18
+ var useId = require('../utils/useId.js');
19
+ require('../salt-provider/SaltProvider.js');
20
+ require('../viewport/ViewportProvider.js');
21
+ var DrawerContext = require('./DrawerContext.js');
22
+ var DrawerHeader$1 = require('./DrawerHeader.css.js');
23
+
24
+ const withBaseName = makePrefixer.makePrefixer("saltDrawerHeader");
25
+ const DrawerHeader = React.forwardRef(
26
+ function DrawerHeader2(props, ref) {
27
+ const {
28
+ actions,
29
+ className,
30
+ description,
31
+ disableAccent,
32
+ header,
33
+ preheader,
34
+ ...rest
35
+ } = props;
36
+ const targetWindow = window.useWindow();
37
+ styles.useComponentCssInjection({
38
+ testId: "salt-drawer-header",
39
+ css: DrawerHeader$1,
40
+ window: targetWindow
41
+ });
42
+ const { setHeaderId, setDescriptionId } = DrawerContext.useDrawerContext();
43
+ const headingId = useId.useId();
44
+ const descriptionId = useId.useId();
45
+ const hasHeading = Boolean(header || preheader);
46
+ const hasDescription = Boolean(description);
47
+ useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
48
+ setHeaderId == null ? void 0 : setHeaderId(hasHeading ? headingId : void 0);
49
+ return () => {
50
+ setHeaderId == null ? void 0 : setHeaderId(void 0);
51
+ };
52
+ }, [hasHeading, headingId, setHeaderId]);
53
+ useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
54
+ setDescriptionId == null ? void 0 : setDescriptionId(hasDescription ? descriptionId : void 0);
55
+ return () => {
56
+ setDescriptionId == null ? void 0 : setDescriptionId(void 0);
57
+ };
58
+ }, [hasDescription, descriptionId, setDescriptionId]);
59
+ return /* @__PURE__ */ jsxRuntime.jsxs(
60
+ "div",
61
+ {
62
+ className: clsx.clsx(
63
+ withBaseName(),
64
+ {
65
+ [withBaseName("withAccent")]: !disableAccent
66
+ },
67
+ className
68
+ ),
69
+ ref,
70
+ ...rest,
71
+ children: [
72
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: withBaseName("container"), children: [
73
+ hasHeading && /* @__PURE__ */ jsxRuntime.jsxs(Headings.H2, { id: headingId, className: withBaseName("header"), children: [
74
+ preheader && /* @__PURE__ */ jsxRuntime.jsx(Text.Text, { as: "span", color: "primary", children: preheader }),
75
+ header
76
+ ] }),
77
+ description && /* @__PURE__ */ jsxRuntime.jsx(
78
+ Text.Text,
79
+ {
80
+ id: descriptionId,
81
+ color: "secondary",
82
+ className: withBaseName("description"),
83
+ children: description
84
+ }
85
+ )
86
+ ] }),
87
+ actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: withBaseName("actionsContainer"), children: actions })
88
+ ]
89
+ }
90
+ );
91
+ }
92
+ );
93
+
94
+ exports.DrawerHeader = DrawerHeader;
95
+ //# sourceMappingURL=DrawerHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DrawerHeader.js","sources":["../src/drawer/DrawerHeader.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type ReactNode,\n} from \"react\";\nimport { H2, Text } from \"../text\";\nimport { makePrefixer, useId, useIsomorphicLayoutEffect } from \"../utils\";\nimport { useDrawerContext } from \"./DrawerContext\";\nimport drawerHeaderCss from \"./DrawerHeader.css\";\n\nconst withBaseName = makePrefixer(\"saltDrawerHeader\");\n\nexport interface DrawerHeaderProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Hides the accent bar in the Drawer Header. Defaults to `false`.\n */\n disableAccent?: boolean;\n /**\n * Displays the header at the top of the Drawer\n */\n header?: ReactNode;\n /**\n * Displays the preheader just above the header\n **/\n preheader?: ReactNode;\n /**\n * Description text is displayed just below the header\n **/\n description?: ReactNode;\n /**\n * Actions to be displayed in header\n */\n actions?: ReactNode;\n}\n\nexport const DrawerHeader = forwardRef<HTMLDivElement, DrawerHeaderProps>(\n function DrawerHeader(props, ref) {\n const {\n actions,\n className,\n description,\n disableAccent,\n header,\n preheader,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-drawer-header\",\n css: drawerHeaderCss,\n window: targetWindow,\n });\n\n const { setHeaderId, setDescriptionId } = useDrawerContext();\n const headingId = useId();\n const descriptionId = useId();\n const hasHeading = Boolean(header || preheader);\n const hasDescription = Boolean(description);\n\n useIsomorphicLayoutEffect(() => {\n setHeaderId?.(hasHeading ? headingId : undefined);\n\n return () => {\n setHeaderId?.(undefined);\n };\n }, [hasHeading, headingId, setHeaderId]);\n\n useIsomorphicLayoutEffect(() => {\n setDescriptionId?.(hasDescription ? descriptionId : undefined);\n\n return () => {\n setDescriptionId?.(undefined);\n };\n }, [hasDescription, descriptionId, setDescriptionId]);\n\n return (\n <div\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"withAccent\")]: !disableAccent,\n },\n className,\n )}\n ref={ref}\n {...rest}\n >\n <div className={withBaseName(\"container\")}>\n {hasHeading && (\n <H2 id={headingId} className={withBaseName(\"header\")}>\n {preheader && (\n <Text as=\"span\" color=\"primary\">\n {preheader}\n </Text>\n )}\n {header}\n </H2>\n )}\n {description && (\n <Text\n id={descriptionId}\n color=\"secondary\"\n className={withBaseName(\"description\")}\n >\n {description}\n </Text>\n )}\n </div>\n {actions && (\n <div className={withBaseName(\"actionsContainer\")}>{actions}</div>\n )}\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","DrawerHeader","useWindow","useComponentCssInjection","drawerHeaderCss","useDrawerContext","useId","useIsomorphicLayoutEffect","jsxs","clsx","H2","Text","jsx"],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var DrawerContent = require('./DrawerContent.js');
5
+ var DrawerFooter = require('./DrawerFooter.js');
6
+ var DrawerHeader = require('./DrawerHeader.js');
7
+
8
+ const drawerSectionTypes = [DrawerHeader.DrawerHeader, DrawerContent.DrawerContent, DrawerFooter.DrawerFooter];
9
+ function hasDrawerSection(children) {
10
+ return React.Children.toArray(children).some((child) => {
11
+ if (!React.isValidElement(child)) return false;
12
+ if (child.type === React.Fragment) {
13
+ return hasDrawerSection(
14
+ child.props.children
15
+ );
16
+ }
17
+ return drawerSectionTypes.some((sectionType) => child.type === sectionType);
18
+ });
19
+ }
20
+
21
+ exports.hasDrawerSection = hasDrawerSection;
22
+ //# sourceMappingURL=hasDrawerSection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hasDrawerSection.js","sources":["../src/drawer/hasDrawerSection.ts"],"sourcesContent":["import { Children, Fragment, isValidElement, type ReactNode } from \"react\";\nimport { DrawerContent } from \"./DrawerContent\";\nimport { DrawerFooter } from \"./DrawerFooter\";\nimport { DrawerHeader } from \"./DrawerHeader\";\n\nconst drawerSectionTypes = [DrawerHeader, DrawerContent, DrawerFooter];\n\nexport function hasDrawerSection(children: ReactNode): boolean {\n return Children.toArray(children).some((child) => {\n if (!isValidElement(child)) return false;\n\n if (child.type === Fragment) {\n return hasDrawerSection(\n (child.props as { children?: ReactNode }).children,\n );\n }\n\n return drawerSectionTypes.some((sectionType) => child.type === sectionType);\n });\n}\n"],"names":["DrawerHeader","DrawerContent","DrawerFooter","Children","isValidElement","Fragment"],"mappings":";;;;;;;AAKA,MAAM,kBAAA,GAAqB,CAACA,yBAAA,EAAcC,2BAAA,EAAeC,yBAAY,CAAA;AAE9D,SAAS,iBAAiB,QAAA,EAA8B;AAC7D,EAAA,OAAOC,eAAS,OAAA,CAAQ,QAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,KAAA,KAAU;AAChD,IAAA,IAAI,CAACC,oBAAA,CAAe,KAAK,CAAA,EAAG,OAAO,KAAA;AAEnC,IAAA,IAAI,KAAA,CAAM,SAASC,cAAA,EAAU;AAC3B,MAAA,OAAO,gBAAA;AAAA,QACJ,MAAM,KAAA,CAAmC;AAAA,OAC5C;AAAA,IACF;AAEA,IAAA,OAAO,mBAAmB,IAAA,CAAK,CAAC,WAAA,KAAgB,KAAA,CAAM,SAAS,WAAW,CAAA;AAAA,EAC5E,CAAC,CAAA;AACH;;;;"}