@salt-ds/lab 1.0.0-alpha.14 → 1.0.0-alpha.16

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 (287) hide show
  1. package/dist-cjs/badge/Badge.css.js +1 -1
  2. package/dist-cjs/badge/Badge.js +7 -23
  3. package/dist-cjs/badge/Badge.js.map +1 -1
  4. package/dist-cjs/combo-box-next/ComboBoxNext.css.js +6 -0
  5. package/dist-cjs/combo-box-next/ComboBoxNext.css.js.map +1 -0
  6. package/dist-cjs/combo-box-next/ComboBoxNext.js +177 -0
  7. package/dist-cjs/combo-box-next/ComboBoxNext.js.map +1 -0
  8. package/dist-cjs/combo-box-next/useComboBox.js +137 -0
  9. package/dist-cjs/combo-box-next/useComboBox.js.map +1 -0
  10. package/dist-cjs/combo-box-next/useComboboxPortal.js +69 -0
  11. package/dist-cjs/combo-box-next/useComboboxPortal.js.map +1 -0
  12. package/dist-cjs/combo-box-next/utils.js +40 -0
  13. package/dist-cjs/combo-box-next/utils.js.map +1 -0
  14. package/dist-cjs/content-status/ContentStatus.js +0 -2
  15. package/dist-cjs/content-status/ContentStatus.js.map +1 -1
  16. package/dist-cjs/content-status/internal/StatusIndicator.js +0 -2
  17. package/dist-cjs/content-status/internal/StatusIndicator.js.map +1 -1
  18. package/dist-cjs/dialog/Dialog.css.js +1 -1
  19. package/dist-cjs/dialog/Dialog.js +53 -56
  20. package/dist-cjs/dialog/Dialog.js.map +1 -1
  21. package/dist-cjs/dialog/DialogActions.css.js +1 -1
  22. package/dist-cjs/dialog/DialogActions.js +15 -17
  23. package/dist-cjs/dialog/DialogActions.js.map +1 -1
  24. package/dist-cjs/dialog/DialogCloseButton.css.js +6 -0
  25. package/dist-cjs/dialog/DialogCloseButton.css.js.map +1 -0
  26. package/dist-cjs/dialog/DialogCloseButton.js +39 -0
  27. package/dist-cjs/dialog/DialogCloseButton.js.map +1 -0
  28. package/dist-cjs/dialog/DialogContent.css.js +1 -1
  29. package/dist-cjs/dialog/DialogContent.js +20 -29
  30. package/dist-cjs/dialog/DialogContent.js.map +1 -1
  31. package/dist-cjs/dialog/{internal/DialogContext.js → DialogContext.js} +4 -0
  32. package/dist-cjs/dialog/DialogContext.js.map +1 -0
  33. package/dist-cjs/dialog/DialogTitle.css.js +1 -1
  34. package/dist-cjs/dialog/DialogTitle.js +40 -41
  35. package/dist-cjs/dialog/DialogTitle.js.map +1 -1
  36. package/dist-cjs/dialog/useDialog.js +31 -0
  37. package/dist-cjs/dialog/useDialog.js.map +1 -0
  38. package/dist-cjs/drawer/Drawer.css.js +1 -1
  39. package/dist-cjs/drawer/Drawer.js +39 -45
  40. package/dist-cjs/drawer/Drawer.js.map +1 -1
  41. package/dist-cjs/drawer/useDrawer.js +31 -0
  42. package/dist-cjs/drawer/useDrawer.js.map +1 -0
  43. package/dist-cjs/dropdown-next/DropdownNext.css.js +6 -0
  44. package/dist-cjs/dropdown-next/DropdownNext.css.js.map +1 -0
  45. package/dist-cjs/dropdown-next/DropdownNext.js +181 -0
  46. package/dist-cjs/dropdown-next/DropdownNext.js.map +1 -0
  47. package/dist-cjs/dropdown-next/useDropdownNext.js +169 -0
  48. package/dist-cjs/dropdown-next/useDropdownNext.js.map +1 -0
  49. package/dist-cjs/form-field-legacy/FormFieldLegacy.css.js +1 -1
  50. package/dist-cjs/index.js +19 -13
  51. package/dist-cjs/index.js.map +1 -1
  52. package/dist-cjs/list/Highlighter.js +1 -1
  53. package/dist-cjs/list/Highlighter.js.map +1 -1
  54. package/dist-cjs/list-next/ListItemNext.css.js +1 -1
  55. package/dist-cjs/list-next/ListItemNext.js +17 -6
  56. package/dist-cjs/list-next/ListItemNext.js.map +1 -1
  57. package/dist-cjs/list-next/ListNext.js +21 -10
  58. package/dist-cjs/list-next/ListNext.js.map +1 -1
  59. package/dist-cjs/list-next/ListNextContext.js.map +1 -1
  60. package/dist-cjs/list-next/useList.js +96 -37
  61. package/dist-cjs/list-next/useList.js.map +1 -1
  62. package/dist-cjs/logo/Logo.css.js +1 -1
  63. package/dist-cjs/logo/LogoImage.css.js +6 -0
  64. package/dist-cjs/logo/LogoImage.css.js.map +1 -0
  65. package/dist-cjs/logo/LogoImage.js +9 -0
  66. package/dist-cjs/logo/LogoImage.js.map +1 -1
  67. package/dist-cjs/logo/LogoSeparator.css.js +1 -1
  68. package/dist-cjs/{nav-item/ExpansionButton.js → navigation-item/ExpansionIcon.js} +8 -13
  69. package/dist-cjs/navigation-item/ExpansionIcon.js.map +1 -0
  70. package/dist-cjs/navigation-item/NavigationItem.css.js +6 -0
  71. package/dist-cjs/navigation-item/NavigationItem.css.js.map +1 -0
  72. package/dist-cjs/navigation-item/NavigationItem.js +96 -0
  73. package/dist-cjs/navigation-item/NavigationItem.js.map +1 -0
  74. package/dist-cjs/progress/CircularProgress/CircularProgress.css.js +1 -1
  75. package/dist-cjs/progress/CircularProgress/CircularProgress.js +44 -51
  76. package/dist-cjs/progress/CircularProgress/CircularProgress.js.map +1 -1
  77. package/dist-cjs/progress/LinearProgress/LinearProgress.css.js +1 -1
  78. package/dist-cjs/progress/LinearProgress/LinearProgress.js +9 -49
  79. package/dist-cjs/progress/LinearProgress/LinearProgress.js.map +1 -1
  80. package/dist-cjs/stepped-tracker/StepLabel/StepLabel.css.js +1 -1
  81. package/dist-cjs/stepped-tracker/StepLabel/StepLabel.js +5 -13
  82. package/dist-cjs/stepped-tracker/StepLabel/StepLabel.js.map +1 -1
  83. package/dist-cjs/stepped-tracker/SteppedTracker.css.js +1 -1
  84. package/dist-cjs/stepped-tracker/SteppedTracker.js +0 -5
  85. package/dist-cjs/stepped-tracker/SteppedTracker.js.map +1 -1
  86. package/dist-cjs/stepped-tracker/SteppedTrackerContext.js +1 -7
  87. package/dist-cjs/stepped-tracker/SteppedTrackerContext.js.map +1 -1
  88. package/dist-cjs/stepped-tracker/TrackerConnector/TrackerConnector.css.js +1 -1
  89. package/dist-cjs/stepped-tracker/TrackerStep/TrackerStep.css.js +1 -1
  90. package/dist-cjs/stepped-tracker/TrackerStep/TrackerStep.js +2 -14
  91. package/dist-cjs/stepped-tracker/TrackerStep/TrackerStep.js.map +1 -1
  92. package/dist-cjs/switch/Switch.css.js +1 -1
  93. package/dist-cjs/switch/Switch.js +67 -72
  94. package/dist-cjs/switch/Switch.js.map +1 -1
  95. package/dist-cjs/toast-group/ToastGroup.css.js +6 -0
  96. package/dist-cjs/toast-group/ToastGroup.css.js.map +1 -0
  97. package/dist-cjs/toast-group/ToastGroup.js +32 -0
  98. package/dist-cjs/toast-group/ToastGroup.js.map +1 -0
  99. package/dist-es/badge/Badge.css.js +1 -1
  100. package/dist-es/badge/Badge.js +9 -25
  101. package/dist-es/badge/Badge.js.map +1 -1
  102. package/dist-es/combo-box-next/ComboBoxNext.css.js +4 -0
  103. package/dist-es/combo-box-next/ComboBoxNext.css.js.map +1 -0
  104. package/dist-es/combo-box-next/ComboBoxNext.js +173 -0
  105. package/dist-es/combo-box-next/ComboBoxNext.js.map +1 -0
  106. package/dist-es/combo-box-next/useComboBox.js +133 -0
  107. package/dist-es/combo-box-next/useComboBox.js.map +1 -0
  108. package/dist-es/combo-box-next/useComboboxPortal.js +65 -0
  109. package/dist-es/combo-box-next/useComboboxPortal.js.map +1 -0
  110. package/dist-es/combo-box-next/utils.js +35 -0
  111. package/dist-es/combo-box-next/utils.js.map +1 -0
  112. package/dist-es/content-status/ContentStatus.js +0 -2
  113. package/dist-es/content-status/ContentStatus.js.map +1 -1
  114. package/dist-es/content-status/internal/StatusIndicator.js +0 -2
  115. package/dist-es/content-status/internal/StatusIndicator.js.map +1 -1
  116. package/dist-es/dialog/Dialog.css.js +1 -1
  117. package/dist-es/dialog/Dialog.js +53 -56
  118. package/dist-es/dialog/Dialog.js.map +1 -1
  119. package/dist-es/dialog/DialogActions.css.js +1 -1
  120. package/dist-es/dialog/DialogActions.js +15 -17
  121. package/dist-es/dialog/DialogActions.js.map +1 -1
  122. package/dist-es/dialog/DialogCloseButton.css.js +4 -0
  123. package/dist-es/dialog/DialogCloseButton.css.js.map +1 -0
  124. package/dist-es/dialog/DialogCloseButton.js +31 -0
  125. package/dist-es/dialog/DialogCloseButton.js.map +1 -0
  126. package/dist-es/dialog/DialogContent.css.js +1 -1
  127. package/dist-es/dialog/DialogContent.js +20 -29
  128. package/dist-es/dialog/DialogContent.js.map +1 -1
  129. package/dist-es/dialog/DialogContext.js +9 -0
  130. package/dist-es/dialog/DialogContext.js.map +1 -0
  131. package/dist-es/dialog/DialogTitle.css.js +1 -1
  132. package/dist-es/dialog/DialogTitle.js +37 -42
  133. package/dist-es/dialog/DialogTitle.js.map +1 -1
  134. package/dist-es/dialog/useDialog.js +27 -0
  135. package/dist-es/dialog/useDialog.js.map +1 -0
  136. package/dist-es/drawer/Drawer.css.js +1 -1
  137. package/dist-es/drawer/Drawer.js +40 -46
  138. package/dist-es/drawer/Drawer.js.map +1 -1
  139. package/dist-es/drawer/useDrawer.js +27 -0
  140. package/dist-es/drawer/useDrawer.js.map +1 -0
  141. package/dist-es/dropdown-next/DropdownNext.css.js +4 -0
  142. package/dist-es/dropdown-next/DropdownNext.css.js.map +1 -0
  143. package/dist-es/dropdown-next/DropdownNext.js +177 -0
  144. package/dist-es/dropdown-next/DropdownNext.js.map +1 -0
  145. package/dist-es/dropdown-next/useDropdownNext.js +165 -0
  146. package/dist-es/dropdown-next/useDropdownNext.js.map +1 -0
  147. package/dist-es/form-field-legacy/FormFieldLegacy.css.js +1 -1
  148. package/dist-es/index.js +9 -6
  149. package/dist-es/index.js.map +1 -1
  150. package/dist-es/list/Highlighter.js +1 -1
  151. package/dist-es/list/Highlighter.js.map +1 -1
  152. package/dist-es/list-next/ListItemNext.css.js +1 -1
  153. package/dist-es/list-next/ListItemNext.js +17 -6
  154. package/dist-es/list-next/ListItemNext.js.map +1 -1
  155. package/dist-es/list-next/ListNext.js +21 -10
  156. package/dist-es/list-next/ListNext.js.map +1 -1
  157. package/dist-es/list-next/ListNextContext.js.map +1 -1
  158. package/dist-es/list-next/useList.js +98 -39
  159. package/dist-es/list-next/useList.js.map +1 -1
  160. package/dist-es/logo/Logo.css.js +1 -1
  161. package/dist-es/logo/LogoImage.css.js +4 -0
  162. package/dist-es/logo/LogoImage.css.js.map +1 -0
  163. package/dist-es/logo/LogoImage.js +9 -0
  164. package/dist-es/logo/LogoImage.js.map +1 -1
  165. package/dist-es/logo/LogoSeparator.css.js +1 -1
  166. package/dist-es/navigation-item/ExpansionIcon.js +27 -0
  167. package/dist-es/navigation-item/ExpansionIcon.js.map +1 -0
  168. package/dist-es/navigation-item/NavigationItem.css.js +4 -0
  169. package/dist-es/navigation-item/NavigationItem.css.js.map +1 -0
  170. package/dist-es/navigation-item/NavigationItem.js +92 -0
  171. package/dist-es/navigation-item/NavigationItem.js.map +1 -0
  172. package/dist-es/progress/CircularProgress/CircularProgress.css.js +1 -1
  173. package/dist-es/progress/CircularProgress/CircularProgress.js +45 -52
  174. package/dist-es/progress/CircularProgress/CircularProgress.js.map +1 -1
  175. package/dist-es/progress/LinearProgress/LinearProgress.css.js +1 -1
  176. package/dist-es/progress/LinearProgress/LinearProgress.js +9 -49
  177. package/dist-es/progress/LinearProgress/LinearProgress.js.map +1 -1
  178. package/dist-es/stepped-tracker/StepLabel/StepLabel.css.js +1 -1
  179. package/dist-es/stepped-tracker/StepLabel/StepLabel.js +7 -15
  180. package/dist-es/stepped-tracker/StepLabel/StepLabel.js.map +1 -1
  181. package/dist-es/stepped-tracker/SteppedTracker.css.js +1 -1
  182. package/dist-es/stepped-tracker/SteppedTracker.js +1 -6
  183. package/dist-es/stepped-tracker/SteppedTracker.js.map +1 -1
  184. package/dist-es/stepped-tracker/SteppedTrackerContext.js +1 -7
  185. package/dist-es/stepped-tracker/SteppedTrackerContext.js.map +1 -1
  186. package/dist-es/stepped-tracker/TrackerConnector/TrackerConnector.css.js +1 -1
  187. package/dist-es/stepped-tracker/TrackerStep/TrackerStep.css.js +1 -1
  188. package/dist-es/stepped-tracker/TrackerStep/TrackerStep.js +3 -15
  189. package/dist-es/stepped-tracker/TrackerStep/TrackerStep.js.map +1 -1
  190. package/dist-es/switch/Switch.css.js +1 -1
  191. package/dist-es/switch/Switch.js +70 -75
  192. package/dist-es/switch/Switch.js.map +1 -1
  193. package/dist-es/toast-group/ToastGroup.css.js +4 -0
  194. package/dist-es/toast-group/ToastGroup.css.js.map +1 -0
  195. package/dist-es/toast-group/ToastGroup.js +28 -0
  196. package/dist-es/toast-group/ToastGroup.js.map +1 -0
  197. package/dist-types/badge/Badge.d.ts +5 -16
  198. package/dist-types/combo-box-next/ComboBoxNext.d.ts +70 -0
  199. package/dist-types/combo-box-next/index.d.ts +1 -0
  200. package/dist-types/combo-box-next/useComboBox.d.ts +34 -0
  201. package/dist-types/combo-box-next/useComboboxPortal.d.ts +15 -0
  202. package/dist-types/combo-box-next/utils.d.ts +8 -0
  203. package/dist-types/content-status/internal/StatusIndicator.d.ts +2 -2
  204. package/dist-types/dialog/Dialog.d.ts +17 -12
  205. package/dist-types/dialog/DialogActions.d.ts +1 -3
  206. package/dist-types/dialog/DialogCloseButton.d.ts +3 -0
  207. package/dist-types/dialog/DialogContent.d.ts +1 -3
  208. package/dist-types/dialog/DialogContext.d.ts +9 -0
  209. package/dist-types/dialog/DialogTitle.d.ts +7 -8
  210. package/dist-types/dialog/index.d.ts +4 -2
  211. package/dist-types/dialog/useDialog.d.ts +27 -0
  212. package/dist-types/drawer/Drawer.d.ts +3 -12
  213. package/dist-types/drawer/index.d.ts +1 -0
  214. package/dist-types/drawer/useDrawer.d.ts +27 -0
  215. package/dist-types/dropdown-next/DropdownNext.d.ts +42 -0
  216. package/dist-types/dropdown-next/index.d.ts +1 -0
  217. package/dist-types/dropdown-next/useDropdownNext.d.ts +31 -0
  218. package/dist-types/index.d.ts +4 -3
  219. package/dist-types/list-next/ListItemNext.d.ts +6 -1
  220. package/dist-types/list-next/ListNext.d.ts +7 -2
  221. package/dist-types/list-next/ListNextContext.d.ts +4 -2
  222. package/dist-types/list-next/useList.d.ts +16 -9
  223. package/dist-types/navigation-item/ExpansionIcon.d.ts +3 -0
  224. package/dist-types/navigation-item/NavigationItem.d.ts +36 -0
  225. package/dist-types/navigation-item/index.d.ts +1 -0
  226. package/dist-types/progress/CircularProgress/CircularProgress.d.ts +1 -21
  227. package/dist-types/progress/LinearProgress/LinearProgress.d.ts +1 -26
  228. package/dist-types/stepped-tracker/StepLabel/StepLabel.d.ts +3 -5
  229. package/dist-types/stepped-tracker/SteppedTrackerContext.d.ts +1 -4
  230. package/dist-types/stepped-tracker/TrackerStep/index.d.ts +0 -1
  231. package/dist-types/switch/Switch.d.ts +43 -6
  232. package/dist-types/toast-group/ToastGroup.d.ts +5 -0
  233. package/dist-types/toast-group/index.d.ts +1 -0
  234. package/package.json +5 -5
  235. package/dist-cjs/control-label/ControlLabel.css.js +0 -6
  236. package/dist-cjs/control-label/ControlLabel.css.js.map +0 -1
  237. package/dist-cjs/control-label/ControlLabel.js +0 -48
  238. package/dist-cjs/control-label/ControlLabel.js.map +0 -1
  239. package/dist-cjs/dialog/internal/DialogContext.js.map +0 -1
  240. package/dist-cjs/multiline-input/MultilineInput.css.js +0 -6
  241. package/dist-cjs/multiline-input/MultilineInput.css.js.map +0 -1
  242. package/dist-cjs/multiline-input/MultilineInput.js +0 -162
  243. package/dist-cjs/multiline-input/MultilineInput.js.map +0 -1
  244. package/dist-cjs/nav-item/ExpansionButton.js.map +0 -1
  245. package/dist-cjs/nav-item/NavItem.css.js +0 -6
  246. package/dist-cjs/nav-item/NavItem.css.js.map +0 -1
  247. package/dist-cjs/nav-item/NavItem.js +0 -78
  248. package/dist-cjs/nav-item/NavItem.js.map +0 -1
  249. package/dist-cjs/stepped-tracker/TrackerStep/TrackerStepTooltipContext.js +0 -21
  250. package/dist-cjs/stepped-tracker/TrackerStep/TrackerStepTooltipContext.js.map +0 -1
  251. package/dist-cjs/stepped-tracker/useDetectTruncatedText.js +0 -71
  252. package/dist-cjs/stepped-tracker/useDetectTruncatedText.js.map +0 -1
  253. package/dist-cjs/switch/assets/CheckedIcon.js +0 -34
  254. package/dist-cjs/switch/assets/CheckedIcon.js.map +0 -1
  255. package/dist-es/control-label/ControlLabel.css.js +0 -4
  256. package/dist-es/control-label/ControlLabel.css.js.map +0 -1
  257. package/dist-es/control-label/ControlLabel.js +0 -43
  258. package/dist-es/control-label/ControlLabel.js.map +0 -1
  259. package/dist-es/dialog/internal/DialogContext.js +0 -6
  260. package/dist-es/dialog/internal/DialogContext.js.map +0 -1
  261. package/dist-es/multiline-input/MultilineInput.css.js +0 -4
  262. package/dist-es/multiline-input/MultilineInput.css.js.map +0 -1
  263. package/dist-es/multiline-input/MultilineInput.js +0 -158
  264. package/dist-es/multiline-input/MultilineInput.js.map +0 -1
  265. package/dist-es/nav-item/ExpansionButton.js +0 -32
  266. package/dist-es/nav-item/ExpansionButton.js.map +0 -1
  267. package/dist-es/nav-item/NavItem.css.js +0 -4
  268. package/dist-es/nav-item/NavItem.css.js.map +0 -1
  269. package/dist-es/nav-item/NavItem.js +0 -74
  270. package/dist-es/nav-item/NavItem.js.map +0 -1
  271. package/dist-es/stepped-tracker/TrackerStep/TrackerStepTooltipContext.js +0 -16
  272. package/dist-es/stepped-tracker/TrackerStep/TrackerStepTooltipContext.js.map +0 -1
  273. package/dist-es/stepped-tracker/useDetectTruncatedText.js +0 -69
  274. package/dist-es/stepped-tracker/useDetectTruncatedText.js.map +0 -1
  275. package/dist-es/switch/assets/CheckedIcon.js +0 -30
  276. package/dist-es/switch/assets/CheckedIcon.js.map +0 -1
  277. package/dist-types/control-label/ControlLabel.d.ts +0 -8
  278. package/dist-types/control-label/index.d.ts +0 -1
  279. package/dist-types/dialog/internal/DialogContext.d.ts +0 -6
  280. package/dist-types/multiline-input/MultilineInput.d.ts +0 -40
  281. package/dist-types/multiline-input/index.d.ts +0 -1
  282. package/dist-types/nav-item/ExpansionButton.d.ts +0 -3
  283. package/dist-types/nav-item/NavItem.d.ts +0 -17
  284. package/dist-types/nav-item/index.d.ts +0 -1
  285. package/dist-types/stepped-tracker/TrackerStep/TrackerStepTooltipContext.d.ts +0 -7
  286. package/dist-types/stepped-tracker/useDetectTruncatedText.d.ts +0 -11
  287. package/dist-types/switch/assets/CheckedIcon.d.ts +0 -4
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var react = require('@floating-ui/react');
6
+ var core = require('@salt-ds/core');
7
+
8
+ function useDialog(props) {
9
+ const { open, onOpenChange } = props;
10
+ const { context, floating } = core.useFloatingUI({
11
+ open,
12
+ onOpenChange
13
+ });
14
+ const click = react.useClick(context);
15
+ const role = react.useRole(context);
16
+ const dismiss = react.useDismiss(context);
17
+ const { getFloatingProps, getReferenceProps } = react.useInteractions([
18
+ role,
19
+ dismiss,
20
+ click
21
+ ]);
22
+ return {
23
+ getFloatingProps,
24
+ getReferenceProps,
25
+ floating,
26
+ context
27
+ };
28
+ }
29
+
30
+ exports.useDialog = useDialog;
31
+ //# sourceMappingURL=useDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDialog.js","sources":["../src/dialog/useDialog.ts"],"sourcesContent":["import {\n useClick,\n useDismiss,\n useInteractions,\n useRole,\n} from \"@floating-ui/react\";\nimport { useFloatingUI, UseFloatingUIProps } from \"@salt-ds/core\";\n\nexport type UseDialogProps = Partial<\n Pick<UseFloatingUIProps, \"onOpenChange\" | \"open\">\n>;\n\nexport function useDialog(props: UseDialogProps) {\n const { open, onOpenChange } = props;\n\n const { context, floating } = useFloatingUI({\n open,\n onOpenChange,\n });\n\n const click = useClick(context);\n const role = useRole(context);\n const dismiss = useDismiss(context);\n\n const { getFloatingProps, getReferenceProps } = useInteractions([\n role,\n dismiss,\n click,\n ]);\n\n return {\n getFloatingProps,\n getReferenceProps,\n floating,\n context,\n };\n}\n"],"names":["useFloatingUI","useClick","useRole","useDismiss","useInteractions"],"mappings":";;;;;;;AAYO,SAAS,UAAU,KAAuB,EAAA;AAC/C,EAAM,MAAA,EAAE,IAAM,EAAA,YAAA,EAAiB,GAAA,KAAA,CAAA;AAE/B,EAAA,MAAM,EAAE,OAAA,EAAS,QAAS,EAAA,GAAIA,kBAAc,CAAA;AAAA,IAC1C,IAAA;AAAA,IACA,YAAA;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,KAAA,GAAQC,eAAS,OAAO,CAAA,CAAA;AAC9B,EAAM,MAAA,IAAA,GAAOC,cAAQ,OAAO,CAAA,CAAA;AAC5B,EAAM,MAAA,OAAA,GAAUC,iBAAW,OAAO,CAAA,CAAA;AAElC,EAAA,MAAM,EAAE,gBAAA,EAAkB,iBAAkB,EAAA,GAAIC,qBAAgB,CAAA;AAAA,IAC9D,IAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,GACD,CAAA,CAAA;AAED,EAAO,OAAA;AAAA,IACL,gBAAA;AAAA,IACA,iBAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,GACF,CAAA;AACF;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = "/* Styles applied to Drawer component (root component if Scrim is disabled) */\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: calc(var(--salt-zIndex-appHeader) - 1);\n position: fixed;\n top: 0;\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/* Animation styles applied when the Scrim mounts */\n.saltScrim.saltDrawer-enterAnimation {\n animation: var(--salt-animation-fade-in-center);\n}\n\n/* Animation styles applied when the Scrim unmounts */\n.saltScrim.saltDrawer-exitAnimation {\n animation: var(--salt-animation-fade-out-back);\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\" or position = \"left\" */\n.saltDrawer-right,\n.saltDrawer-left {\n width: calc(10 * var(--salt-size-base));\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 padding: var(--salt-spacing-300);\n box-shadow: var(--salt-overlayable-shadow-modal);\n z-index: calc(var(--salt-zIndex-appHeader) - 1);\n position: fixed;\n top: 0;\n}\n\n.saltDrawer-overlay {\n background: var(--salt-overlayable-background);\n z-index: var(--salt-zIndex-drawer);\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 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\" or position = \"left\" */\n.saltDrawer-right,\n.saltDrawer-left {\n width: calc(10 * var(--salt-size-base));\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
@@ -5,25 +5,22 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
6
  var React = require('react');
7
7
  var clsx = require('clsx');
8
- var Scrim = require('../scrim/Scrim.js');
9
- require('../scrim/ScrimContext.js');
8
+ var react = require('@floating-ui/react');
10
9
  var core = require('@salt-ds/core');
11
10
  var window = require('@salt-ds/window');
12
11
  var styles = require('@salt-ds/styles');
12
+ var useDrawer = require('./useDrawer.js');
13
13
  var Drawer$1 = require('./Drawer.css.js');
14
14
 
15
15
  const DRAWER_POSITIONS = ["left", "top", "right", "bottom"];
16
16
  const withBaseName = core.makePrefixer("saltDrawer");
17
- const ariaAttributes = { role: "dialog", "aria-modal": true };
18
17
  const Drawer = React.forwardRef(function Drawer2(props, ref) {
19
18
  const {
20
19
  children,
21
20
  className,
22
- disableScrim = false,
23
21
  position = "left",
24
- disableAnimations = false,
25
- scrimProps,
26
- isOpen = true,
22
+ open = true,
23
+ onOpenChange,
27
24
  variant = "primary",
28
25
  ...rest
29
26
  } = props;
@@ -34,47 +31,44 @@ const Drawer = React.forwardRef(function Drawer2(props, ref) {
34
31
  window: targetWindow
35
32
  });
36
33
  const [showComponent, setShowComponent] = React.useState(false);
37
- const [isAnimating, setIsAnimating] = React.useState(false);
34
+ const { floating, context } = useDrawer.useDrawer({
35
+ open,
36
+ onOpenChange
37
+ });
38
+ const floatingRef = core.useForkRef(floating, ref);
38
39
  React.useEffect(() => {
39
- if (!isOpen && disableAnimations || !isOpen && !isAnimating) {
40
- setShowComponent(false);
41
- }
42
- if (isOpen && !showComponent) {
40
+ if (open && !showComponent) {
43
41
  setShowComponent(true);
44
42
  }
45
- }, [isOpen, showComponent, disableAnimations, isAnimating]);
46
- const enterAnimation = !disableAnimations && isOpen;
47
- const exitAnimation = !disableAnimations && !isOpen;
48
- const drawer = showComponent ? /* @__PURE__ */ jsxRuntime.jsx("div", {
49
- ref,
50
- className: clsx.clsx(
51
- withBaseName(),
52
- withBaseName(position),
53
- {
54
- [withBaseName("enterAnimation")]: enterAnimation,
55
- [withBaseName("exitAnimation")]: exitAnimation,
56
- [withBaseName(variant)]: variant
57
- },
58
- className
59
- ),
60
- onAnimationStart: () => setIsAnimating(true),
61
- onAnimationEnd: () => {
62
- if (!isOpen && showComponent) {
63
- setShowComponent(false);
64
- }
65
- },
66
- ...disableScrim && ariaAttributes,
67
- ...rest,
68
- children
69
- }) : null;
70
- return disableScrim ? drawer : /* @__PURE__ */ jsxRuntime.jsx(Scrim.Scrim, {
71
- open: showComponent,
72
- className: clsx.clsx({
73
- [withBaseName("enterAnimation")]: enterAnimation,
74
- [withBaseName("exitAnimation")]: exitAnimation
75
- }),
76
- ...scrimProps,
77
- children: drawer
43
+ }, [open, showComponent]);
44
+ return /* @__PURE__ */ jsxRuntime.jsx(react.FloatingPortal, {
45
+ children: showComponent && /* @__PURE__ */ jsxRuntime.jsx(react.FloatingOverlay, {
46
+ className: withBaseName("overlay"),
47
+ lockScroll: true,
48
+ children: /* @__PURE__ */ jsxRuntime.jsx(react.FloatingFocusManager, {
49
+ context,
50
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", {
51
+ ref: floatingRef,
52
+ className: clsx.clsx(
53
+ withBaseName(),
54
+ withBaseName(position),
55
+ {
56
+ [withBaseName("enterAnimation")]: open,
57
+ [withBaseName("exitAnimation")]: !open,
58
+ [withBaseName(variant)]: variant
59
+ },
60
+ className
61
+ ),
62
+ onAnimationEnd: () => {
63
+ if (!open && showComponent) {
64
+ setShowComponent(false);
65
+ }
66
+ },
67
+ ...rest,
68
+ children
69
+ })
70
+ })
71
+ })
78
72
  });
79
73
  });
80
74
 
@@ -1 +1 @@
1
- {"version":3,"file":"Drawer.js","sources":["../src/drawer/Drawer.tsx"],"sourcesContent":["import { forwardRef, HTMLAttributes, useEffect, useState } from \"react\";\nimport { clsx } from \"clsx\";\n\nimport { Scrim, ScrimProps } from \"../scrim\";\n\nimport { makePrefixer } from \"@salt-ds/core\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\n\nimport drawerCss from \"./Drawer.css\";\n\nexport const DRAWER_POSITIONS = [\"left\", \"top\", \"right\", \"bottom\"] as const;\n\nexport type DrawerPositions = typeof DRAWER_POSITIONS[number];\n\nexport interface DrawerProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Disable the scrim.\n */\n disableScrim?: boolean;\n /**\n * Defines the drawer position within the screen.\n */\n position?: DrawerPositions;\n /**\n * Disable all animations.\n */\n disableAnimations?: boolean;\n /**\n * Display or hide the component.\n */\n isOpen?: boolean;\n /**\n * Props to be passed to the Scrim component.\n */\n scrimProps?: Partial<ScrimProps>;\n /**\n * Change background color palette\n */\n variant?: \"primary\" | \"secondary\";\n}\n\nconst withBaseName = makePrefixer(\"saltDrawer\");\n\nconst ariaAttributes = { role: \"dialog\", \"aria-modal\": true };\n\nexport const Drawer = forwardRef<HTMLDivElement, DrawerProps>(function Drawer(\n props,\n ref\n) {\n const {\n children,\n className,\n disableScrim = false,\n position = \"left\",\n disableAnimations = false,\n scrimProps,\n isOpen = true,\n variant = \"primary\",\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\n const [isAnimating, setIsAnimating] = useState(false);\n\n useEffect(() => {\n if ((!isOpen && disableAnimations) || (!isOpen && !isAnimating)) {\n setShowComponent(false);\n }\n\n if (isOpen && !showComponent) {\n setShowComponent(true);\n }\n }, [isOpen, showComponent, disableAnimations, isAnimating]);\n\n const enterAnimation = !disableAnimations && isOpen;\n\n const exitAnimation = !disableAnimations && !isOpen;\n\n const drawer = showComponent ? (\n <div\n ref={ref}\n className={clsx(\n withBaseName(),\n withBaseName(position),\n {\n [withBaseName(\"enterAnimation\")]: enterAnimation,\n [withBaseName(\"exitAnimation\")]: exitAnimation,\n [withBaseName(variant)]: variant,\n },\n className\n )}\n onAnimationStart={() => setIsAnimating(true)}\n onAnimationEnd={() => {\n if (!isOpen && showComponent) {\n setShowComponent(false);\n }\n }}\n {...(disableScrim && ariaAttributes)}\n {...rest}\n >\n {children}\n </div>\n ) : null;\n\n return disableScrim ? (\n drawer\n ) : (\n <Scrim\n open={showComponent}\n className={clsx({\n [withBaseName(\"enterAnimation\")]: enterAnimation,\n [withBaseName(\"exitAnimation\")]: exitAnimation,\n })}\n {...scrimProps}\n >\n {drawer}\n </Scrim>\n );\n});\n"],"names":["makePrefixer","forwardRef","Drawer","useWindow","useComponentCssInjection","drawerCss","useState","useEffect","jsx","clsx","Scrim"],"mappings":"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"}
1
+ {"version":3,"file":"Drawer.js","sources":["../src/drawer/Drawer.tsx"],"sourcesContent":["import { forwardRef, HTMLAttributes, useEffect, useState } from \"react\";\nimport { clsx } from \"clsx\";\nimport {\n FloatingFocusManager,\n FloatingOverlay,\n FloatingPortal,\n} from \"@floating-ui/react\";\nimport { makePrefixer, useForkRef } from \"@salt-ds/core\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useDrawer } from \"./useDrawer\";\n\nimport drawerCss from \"./Drawer.css\";\n\nexport const DRAWER_POSITIONS = [\"left\", \"top\", \"right\", \"bottom\"] as const;\n\nexport type DrawerPositions = typeof DRAWER_POSITIONS[number];\n\nexport interface DrawerProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Defines the drawer position within the screen.\n */\n position?: DrawerPositions;\n /**\n * Display or hide the component.\n */\n open?: boolean;\n /**\n * Callback function triggered when open state changes.\n */\n onOpenChange?: (open: boolean) => void;\n /**\n * Change background color palette\n */\n variant?: \"primary\" | \"secondary\";\n}\n\nconst withBaseName = makePrefixer(\"saltDrawer\");\n\nexport const Drawer = forwardRef<HTMLDivElement, DrawerProps>(function Drawer(\n props,\n ref\n) {\n const {\n children,\n className,\n position = \"left\",\n open = true,\n onOpenChange,\n variant = \"primary\",\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\n const { floating, context } = useDrawer({\n open,\n onOpenChange,\n });\n\n const floatingRef = useForkRef<HTMLDivElement>(floating, ref);\n\n useEffect(() => {\n if (open && !showComponent) {\n setShowComponent(true);\n }\n }, [open, showComponent]);\n\n return (\n <FloatingPortal>\n {showComponent && (\n <FloatingOverlay className={withBaseName(\"overlay\")} lockScroll>\n <FloatingFocusManager context={context}>\n <div\n ref={floatingRef}\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 onAnimationEnd={() => {\n if (!open && showComponent) {\n setShowComponent(false);\n }\n }}\n {...rest}\n >\n {children}\n </div>\n </FloatingFocusManager>\n </FloatingOverlay>\n )}\n </FloatingPortal>\n );\n});\n"],"names":["makePrefixer","forwardRef","Drawer","useWindow","useComponentCssInjection","drawerCss","useState","useDrawer","useForkRef","useEffect","jsx","FloatingPortal","FloatingOverlay","FloatingFocusManager","clsx"],"mappings":";;;;;;;;;;;;;;AAcO,MAAM,gBAAmB,GAAA,CAAC,MAAQ,EAAA,KAAA,EAAO,SAAS,QAAQ,EAAA;AAuBjE,MAAM,YAAA,GAAeA,kBAAa,YAAY,CAAA,CAAA;AAEvC,MAAM,MAAS,GAAAC,gBAAA,CAAwC,SAASC,OAAAA,CACrE,OACA,GACA,EAAA;AACA,EAAM,MAAA;AAAA,IACJ,QAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAW,GAAA,MAAA;AAAA,IACX,IAAO,GAAA,IAAA;AAAA,IACP,YAAA;AAAA,IACA,OAAU,GAAA,SAAA;AAAA,IACP,GAAA,IAAA;AAAA,GACD,GAAA,KAAA,CAAA;AAEJ,EAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,aAAA;AAAA,IACR,GAAK,EAAAC,QAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIC,eAAS,KAAK,CAAA,CAAA;AAExD,EAAA,MAAM,EAAE,QAAA,EAAU,OAAQ,EAAA,GAAIC,mBAAU,CAAA;AAAA,IACtC,IAAA;AAAA,IACA,YAAA;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,WAAA,GAAcC,eAA2B,CAAA,QAAA,EAAU,GAAG,CAAA,CAAA;AAE5D,EAAAC,eAAA,CAAU,MAAM;AACd,IAAI,IAAA,IAAA,IAAQ,CAAC,aAAe,EAAA;AAC1B,MAAA,gBAAA,CAAiB,IAAI,CAAA,CAAA;AAAA,KACvB;AAAA,GACC,EAAA,CAAC,IAAM,EAAA,aAAa,CAAC,CAAA,CAAA;AAExB,EAAA,uBACGC,cAAA,CAAAC,oBAAA,EAAA;AAAA,IACE,2CACED,cAAA,CAAAE,qBAAA,EAAA;AAAA,MAAgB,SAAA,EAAW,aAAa,SAAS,CAAA;AAAA,MAAG,UAAU,EAAA,IAAA;AAAA,MAC7D,QAAC,kBAAAF,cAAA,CAAAG,0BAAA,EAAA;AAAA,QAAqB,OAAA;AAAA,QACpB,QAAC,kBAAAH,cAAA,CAAA,KAAA,EAAA;AAAA,UACC,GAAK,EAAA,WAAA;AAAA,UACL,SAAW,EAAAI,SAAA;AAAA,YACT,YAAa,EAAA;AAAA,YACb,aAAa,QAAQ,CAAA;AAAA,YACrB;AAAA,cACE,CAAC,YAAa,CAAA,gBAAgB,CAAI,GAAA,IAAA;AAAA,cAClC,CAAC,YAAA,CAAa,eAAe,CAAA,GAAI,CAAC,IAAA;AAAA,cAClC,CAAC,YAAa,CAAA,OAAO,CAAI,GAAA,OAAA;AAAA,aAC3B;AAAA,YACA,SAAA;AAAA,WACF;AAAA,UACA,gBAAgB,MAAM;AACpB,YAAI,IAAA,CAAC,QAAQ,aAAe,EAAA;AAC1B,cAAA,gBAAA,CAAiB,KAAK,CAAA,CAAA;AAAA,aACxB;AAAA,WACF;AAAA,UACC,GAAG,IAAA;AAAA,UAEH,QAAA;AAAA,SACH,CAAA;AAAA,OACF,CAAA;AAAA,KACF,CAAA;AAAA,GAEJ,CAAA,CAAA;AAEJ,CAAC;;;;;"}
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var react = require('@floating-ui/react');
6
+ var core = require('@salt-ds/core');
7
+
8
+ function useDrawer(props) {
9
+ const { open, onOpenChange } = props;
10
+ const { context, floating } = core.useFloatingUI({
11
+ open,
12
+ onOpenChange
13
+ });
14
+ const click = react.useClick(context);
15
+ const role = react.useRole(context);
16
+ const dismiss = react.useDismiss(context);
17
+ const { getFloatingProps, getReferenceProps } = react.useInteractions([
18
+ role,
19
+ dismiss,
20
+ click
21
+ ]);
22
+ return {
23
+ getFloatingProps,
24
+ getReferenceProps,
25
+ floating,
26
+ context
27
+ };
28
+ }
29
+
30
+ exports.useDrawer = useDrawer;
31
+ //# sourceMappingURL=useDrawer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDrawer.js","sources":["../src/drawer/useDrawer.ts"],"sourcesContent":["import {\n useClick,\n useDismiss,\n useInteractions,\n useRole,\n} from \"@floating-ui/react\";\nimport { useFloatingUI, UseFloatingUIProps } from \"@salt-ds/core\";\n\nexport type UseDrawerProps = Partial<\n Pick<UseFloatingUIProps, \"onOpenChange\" | \"open\">\n>;\n\nexport function useDrawer(props: UseDrawerProps) {\n const { open, onOpenChange } = props;\n\n const { context, floating } = useFloatingUI({\n open,\n onOpenChange,\n });\n\n const click = useClick(context);\n const role = useRole(context);\n const dismiss = useDismiss(context);\n\n const { getFloatingProps, getReferenceProps } = useInteractions([\n role,\n dismiss,\n click,\n ]);\n\n return {\n getFloatingProps,\n getReferenceProps,\n floating,\n context,\n };\n}\n"],"names":["useFloatingUI","useClick","useRole","useDismiss","useInteractions"],"mappings":";;;;;;;AAYO,SAAS,UAAU,KAAuB,EAAA;AAC/C,EAAM,MAAA,EAAE,IAAM,EAAA,YAAA,EAAiB,GAAA,KAAA,CAAA;AAE/B,EAAA,MAAM,EAAE,OAAA,EAAS,QAAS,EAAA,GAAIA,kBAAc,CAAA;AAAA,IAC1C,IAAA;AAAA,IACA,YAAA;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,KAAA,GAAQC,eAAS,OAAO,CAAA,CAAA;AAC9B,EAAM,MAAA,IAAA,GAAOC,cAAQ,OAAO,CAAA,CAAA;AAC5B,EAAM,MAAA,OAAA,GAAUC,iBAAW,OAAO,CAAA,CAAA;AAElC,EAAA,MAAM,EAAE,gBAAA,EAAkB,iBAAkB,EAAA,GAAIC,qBAAgB,CAAA;AAAA,IAC9D,IAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,GACD,CAAA,CAAA;AAED,EAAO,OAAA;AAAA,IACL,gBAAA;AAAA,IACA,iBAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,GACF,CAAA;AACF;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var css_248z = ".saltDropdownNext-button {\n --dropdownNext-borderColor: var(--salt-editable-borderColor);\n --dropdownNext-borderStyle: var(--salt-editable-borderStyle);\n --dropdownNext-borderWidth: var(--salt-size-border);\n\n align-items: center;\n background: var(--saltDropdownNext-background, var(--dropdownNext-background));\n color: var(--saltDropdownNext-color, var(--salt-text-primary-foreground));\n display: flex;\n font-family: var(--salt-text-fontFamily);\n font-size: var(--saltDropdownNext-fontSize, var(--salt-text-fontSize));\n height: var(--saltDropdownNext-height, var(--salt-size-base));\n line-height: var(--saltDropdownNext-lineHeight, var(--salt-text-lineHeight));\n min-height: var(--saltDropdownNext-minHeight, var(--salt-size-base));\n min-width: var(--saltDropdownNext-minWidth, 160px);\n padding-left: var(--saltDropdownNext-paddingLeft, var(--salt-spacing-100));\n padding-right: var(--saltDropdownNext-paddingRight, var(--salt-spacing-100));\n position: relative;\n border: none;\n border-bottom: var(--dropdownNext-borderWidth) var(--dropdownNext-borderStyle) var(--dropdownNext-borderColor);\n justify-content: space-between;\n}\n\n.saltDropdownNext-button:hover {\n --dropdownNext-borderColor: var(--salt-editable-borderColor-hover);\n\n cursor: var(--salt-selectable-cursor-hover);\n}\n\n.saltDropdownNext-button:focus,\n.saltDropdownNext-button:active {\n --dropdownNext-borderColor: var(--salt-editable-borderColor-active);\n --dropdownNext-borderWidth: var(--salt-editable-borderWidth-active);\n\n outline: var(--saltDropdownNext-outline, var(--salt-focused-outlineWidth) var(--salt-focused-outlineStyle) var(--salt-focused-outlineColor));\n}\n\n.saltDropdownNext-buttonText {\n text-align: left;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding-right: var(--salt-spacing-100);\n user-select: text;\n}\n\n.saltDropdownNext-list {\n border-color: var(--salt-selectable-borderColor-selected);\n box-shadow: var(--salt-overlayable-shadow-popout);\n max-height: calc((var(--salt-size-base) + var(--salt-spacing-100)) * 5);\n}\n\n/* Styling applied to dropdown button if `disabled={true}` */\n.saltDropdownNext-disabled,\n.saltDropdownNext-disabled:hover,\n.saltDropdownNext-disabled:active {\n --dropdownNext-borderColor: var(--salt-editable-borderColor-disabled);\n --dropdownNext-borderStyle: var(--salt-editable-borderStyle-disabled);\n --dropdownNext-borderWidth: var(--salt-size-border);\n\n cursor: var(--salt-selectable-cursor-disabled);\n background: var(--dropdownNext-background-disabled);\n color: var(--saltDropdownNext-color-disabled, var(--salt-text-primary-foreground-disabled));\n outline: 0;\n}\n\n/* Style applied to dropdown button if `readOnly={true}` */\n.saltDropdownNext-button.saltDropdownNext-readOnly,\n.saltDropdownNext-button.saltDropdownNext-readOnly:hover,\n.saltDropdownNext-button.saltDropdownNext-readOnly:active {\n --dropdownNext-borderColor: var(--salt-editable-borderColor-readonly);\n --dropdownNext-borderStyle: var(--salt-editable-borderStyle-readonly);\n --dropdownNext-borderWidth: var(--salt-size-border);\n\n cursor: var(--salt-editable-cursor-readonly);\n background: var(--dropdownNext-background-readonly);\n /* no padding-right when there's no dropdown button icon */\n padding-right: 0;\n}\n\n/* Styling applied to dropdown button icon if `disabled={true}` or `readOnly={true}` */\n.saltDropdownNext-icon.saltDropdownNext-disabled,\n.saltDropdownNext-icon.saltDropdownNext-disabled:hover,\n.saltDropdownNext-icon.saltDropdownNext-disabled:active,\n.saltDropdownNext-icon.saltDropdownNext-readOnly,\n.saltDropdownNext-icon.saltDropdownNext-readOnly:hover,\n.saltDropdownNext-icon.saltDropdownNext-readOnly:active {\n color: var(--salt-text-primary-foreground-disabled);\n}\n\n/* Class applied if `variant=\"primary\"` */\n.saltDropdownNext-primary {\n --dropdownNext-background: var(--salt-editable-primary-background);\n --dropdownNext-background-active: var(--salt-editable-primary-background-active);\n --dropdownNext-background-hover: var(--salt-editable-primary-background-hover);\n --dropdownNext-background-disabled: var(--salt-editable-primary-background-disabled);\n --dropdownNext-background-readonly: var(--salt-editable-primary-background-readonly);\n}\n\n/* Class applied if `variant=\"secondary\"` */\n.saltDropdownNext-secondary {\n --dropdownNext-background: var(--salt-editable-secondary-background);\n --dropdownNext-background-active: var(--salt-editable-secondary-background-active);\n --dropdownNext-background-hover: var(--salt-editable-secondary-background-active);\n --dropdownNext-background-disabled: var(--salt-editable-secondary-background-disabled);\n --dropdownNext-background-readonly: var(--salt-editable-secondary-background-readonly);\n}\n";
4
+
5
+ module.exports = css_248z;
6
+ //# sourceMappingURL=DropdownNext.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DropdownNext.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,181 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var clsx = require('clsx');
7
+ var ListNext = require('../list-next/ListNext.js');
8
+ require('../list-next/ListItemNext.js');
9
+ var core = require('@salt-ds/core');
10
+ var icons = require('@salt-ds/icons');
11
+ var React = require('react');
12
+ var window = require('@salt-ds/window');
13
+ var DropdownNext$1 = require('./DropdownNext.css.js');
14
+ var styles = require('@salt-ds/styles');
15
+ var react = require('@floating-ui/react');
16
+ var useDropdownNext = require('./useDropdownNext.js');
17
+
18
+ const withBaseName = core.makePrefixer("saltDropdownNext");
19
+ const DropdownNext = React.forwardRef(function DropdownNext2(props, ref) {
20
+ const {
21
+ className,
22
+ disabled,
23
+ variant = "primary",
24
+ id: dropdownIdProp,
25
+ defaultSelected,
26
+ readOnly,
27
+ source,
28
+ placement = "bottom",
29
+ open: openControlProp,
30
+ selected: selectedControlProp,
31
+ highlightedItem: highlightedItemControlProp,
32
+ onFocus,
33
+ onKeyDown,
34
+ onBlur,
35
+ onMouseOver,
36
+ onMouseDown,
37
+ listRef: listRefProp,
38
+ ListProps,
39
+ ...restProps
40
+ } = props;
41
+ const targetWindow = window.useWindow();
42
+ styles.useComponentCssInjection({
43
+ testId: "salt-dropdown-next",
44
+ css: DropdownNext$1,
45
+ window: targetWindow
46
+ });
47
+ const listId = core.useId(ListProps == null ? void 0 : ListProps.id);
48
+ const dropdownId = core.useId(dropdownIdProp);
49
+ const listRef = React.useRef(null);
50
+ const setListRef = core.useForkRef(listRefProp, listRef);
51
+ const listProps = {
52
+ defaultSelected,
53
+ disabled,
54
+ ref: listRef,
55
+ id: listId,
56
+ selected: selectedControlProp,
57
+ highlightedItem: highlightedItemControlProp
58
+ };
59
+ const {
60
+ handlers,
61
+ activeDescendant,
62
+ selectedItem,
63
+ highlightedItem,
64
+ getListItems,
65
+ portalProps
66
+ } = useDropdownNext.useDropdownNext({
67
+ listProps,
68
+ placement,
69
+ openControlProp
70
+ });
71
+ const { open, floating, reference, getDropdownNextProps } = portalProps;
72
+ const {
73
+ focusHandler,
74
+ keyDownHandler,
75
+ blurHandler,
76
+ mouseOverHandler,
77
+ mouseDownHandler
78
+ } = handlers;
79
+ const triggerRef = core.useForkRef(ref, reference);
80
+ const getIcon = () => {
81
+ if (readOnly)
82
+ return;
83
+ const iconClassName = clsx.clsx(withBaseName("icon"), {
84
+ [withBaseName("disabled")]: disabled
85
+ });
86
+ return open ? /* @__PURE__ */ jsxRuntime.jsx(icons.ChevronUpIcon, {
87
+ className: iconClassName
88
+ }) : /* @__PURE__ */ jsxRuntime.jsx(icons.ChevronDownIcon, {
89
+ className: iconClassName
90
+ });
91
+ };
92
+ const handleFocus = (event) => {
93
+ if (disabled)
94
+ return;
95
+ focusHandler(event);
96
+ onFocus == null ? void 0 : onFocus(event);
97
+ };
98
+ const handleKeyDown = (event) => {
99
+ if (disabled || readOnly)
100
+ return;
101
+ keyDownHandler(event);
102
+ onKeyDown == null ? void 0 : onKeyDown(event);
103
+ };
104
+ const handleBlur = (event) => {
105
+ blurHandler();
106
+ onBlur == null ? void 0 : onBlur(event);
107
+ };
108
+ const handleMouseOver = (event) => {
109
+ mouseOverHandler();
110
+ onMouseOver == null ? void 0 : onMouseOver(event);
111
+ };
112
+ const handleMouseDown = (event) => {
113
+ if (disabled || readOnly)
114
+ return;
115
+ mouseDownHandler();
116
+ onMouseDown == null ? void 0 : onMouseDown(event);
117
+ };
118
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", {
119
+ className: clsx.clsx(withBaseName()),
120
+ children: [
121
+ /* @__PURE__ */ jsxRuntime.jsxs("button", {
122
+ id: dropdownId,
123
+ disabled,
124
+ onFocus: handleFocus,
125
+ onKeyDown: handleKeyDown,
126
+ onMouseOver: handleMouseOver,
127
+ onMouseDown: handleMouseDown,
128
+ onBlur: handleBlur,
129
+ value: selectedItem,
130
+ className: clsx.clsx(
131
+ withBaseName("button"),
132
+ withBaseName(variant),
133
+ {
134
+ [withBaseName("disabled")]: disabled,
135
+ [withBaseName("readOnly")]: readOnly
136
+ },
137
+ className
138
+ ),
139
+ role: "combobox",
140
+ "aria-haspopup": "listbox",
141
+ "aria-expanded": open,
142
+ "aria-activedescendant": activeDescendant,
143
+ tabIndex: disabled ? -1 : 0,
144
+ "aria-owns": listId,
145
+ "aria-controls": listId,
146
+ "aria-disabled": disabled,
147
+ ...restProps,
148
+ ref: triggerRef,
149
+ children: [
150
+ /* @__PURE__ */ jsxRuntime.jsx("span", {
151
+ className: clsx.clsx(withBaseName("buttonText")),
152
+ children: selectedItem
153
+ }),
154
+ getIcon()
155
+ ]
156
+ }),
157
+ open && /* @__PURE__ */ jsxRuntime.jsx(react.FloatingPortal, {
158
+ children: /* @__PURE__ */ jsxRuntime.jsx(core.SaltProvider, {
159
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", {
160
+ ref: floating,
161
+ ...getDropdownNextProps(),
162
+ children: /* @__PURE__ */ jsxRuntime.jsx(ListNext.ListNext, {
163
+ id: listId,
164
+ className: clsx.clsx(withBaseName("list"), ListProps == null ? void 0 : ListProps.className),
165
+ disableFocus: true,
166
+ disabled: disabled || (ListProps == null ? void 0 : ListProps.disabled),
167
+ selected: selectedItem,
168
+ highlightedItem,
169
+ ...ListProps,
170
+ ref: setListRef,
171
+ children: getListItems(source)
172
+ })
173
+ })
174
+ })
175
+ })
176
+ ]
177
+ });
178
+ });
179
+
180
+ exports.DropdownNext = DropdownNext;
181
+ //# sourceMappingURL=DropdownNext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DropdownNext.js","sources":["../src/dropdown-next/DropdownNext.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport { ListNext, ListNextProps } from \"../list-next\";\nimport {\n makePrefixer,\n useId,\n useForkRef,\n UseFloatingUIProps,\n SaltProvider,\n} from \"@salt-ds/core\";\nimport { ChevronDownIcon, ChevronUpIcon } from \"@salt-ds/icons\";\nimport {\n useRef,\n forwardRef,\n HTMLAttributes,\n FocusEvent,\n KeyboardEvent,\n MouseEvent,\n Ref,\n ForwardedRef,\n} from \"react\";\nimport { useWindow } from \"@salt-ds/window\";\nimport dropdownNextCss from \"./DropdownNext.css\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { FloatingPortal, Placement } from \"@floating-ui/react\";\nimport { useDropdownNext } from \"./useDropdownNext\";\n\nconst withBaseName = makePrefixer(\"saltDropdownNext\");\n\nexport interface DropdownNextProps\n extends Pick<UseFloatingUIProps, \"open\" | \"onOpenChange\" | \"placement\">,\n HTMLAttributes<HTMLButtonElement> {\n /**\n * If `true`, dropdown will be disabled.\n */\n disabled?: boolean;\n /**\n * Initially selected value for the dropdown, for use only in uncontrolled component.\n */\n defaultSelected?: string;\n /**\n * List of options when using a dropdown.\n */\n source: string[];\n /**\n * If `true`, dropdown is read only.\n */\n readOnly?: boolean;\n /**\n * Background styling variant. Defaults to `primary` .\n */\n variant?: \"primary\" | \"secondary\";\n /**\n * Placement of dropdown list. Defaults to `bottom` .\n */\n placement?: Placement;\n /**\n * Optional ref for the list component.\n */\n listRef?: Ref<HTMLUListElement>;\n /**\n * Additional props for dropdown list.\n */\n ListProps?: ListNextProps;\n /* Status open or close for use in controlled component. */\n open?: boolean;\n /* Selected prop for use in controlled component. */\n selected?: string;\n /* Highlighted item prop for use in controlled component. */\n highlightedItem?: string;\n}\n\nexport const DropdownNext = forwardRef(function DropdownNext(\n props: DropdownNextProps,\n ref: ForwardedRef<HTMLButtonElement>\n) {\n const {\n className,\n disabled,\n variant = \"primary\",\n id: dropdownIdProp,\n defaultSelected,\n readOnly,\n source,\n placement = \"bottom\",\n open: openControlProp,\n selected: selectedControlProp,\n highlightedItem: highlightedItemControlProp,\n onFocus,\n onKeyDown,\n onBlur,\n onMouseOver,\n onMouseDown,\n listRef: listRefProp,\n ListProps,\n ...restProps\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-dropdown-next\",\n css: dropdownNextCss,\n window: targetWindow,\n });\n\n const listId = useId(ListProps?.id);\n const dropdownId = useId(dropdownIdProp);\n const listRef = useRef<HTMLUListElement>(null);\n\n const setListRef = useForkRef(listRefProp, listRef);\n const listProps = {\n defaultSelected,\n disabled,\n ref: listRef,\n id: listId,\n selected: selectedControlProp,\n highlightedItem: highlightedItemControlProp,\n };\n\n const {\n handlers,\n activeDescendant,\n selectedItem,\n highlightedItem,\n getListItems,\n portalProps,\n } = useDropdownNext({\n listProps,\n placement,\n openControlProp,\n });\n\n const { open, floating, reference, getDropdownNextProps } = portalProps;\n const {\n focusHandler,\n keyDownHandler,\n blurHandler,\n mouseOverHandler,\n mouseDownHandler,\n } = handlers;\n\n const triggerRef = useForkRef<HTMLButtonElement>(ref, reference);\n\n const getIcon = () => {\n if (readOnly) return;\n\n const iconClassName = clsx(withBaseName(\"icon\"), {\n [withBaseName(\"disabled\")]: disabled,\n });\n\n return open ? (\n <ChevronUpIcon className={iconClassName} />\n ) : (\n <ChevronDownIcon className={iconClassName} />\n );\n };\n\n const handleFocus = (event: FocusEvent<HTMLButtonElement>) => {\n if (disabled) return;\n focusHandler(event);\n onFocus?.(event);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n if (disabled || readOnly) return;\n keyDownHandler(event);\n onKeyDown?.(event);\n };\n\n const handleBlur = (event: FocusEvent<HTMLButtonElement>) => {\n blurHandler();\n onBlur?.(event);\n };\n\n const handleMouseOver = (event: MouseEvent<HTMLButtonElement>) => {\n mouseOverHandler();\n onMouseOver?.(event);\n };\n\n const handleMouseDown = (event: MouseEvent<HTMLButtonElement>) => {\n if (disabled || readOnly) return;\n mouseDownHandler();\n onMouseDown?.(event);\n };\n\n return (\n <div className={clsx(withBaseName())}>\n <button\n id={dropdownId}\n disabled={disabled}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n onMouseOver={handleMouseOver}\n onMouseDown={handleMouseDown}\n onBlur={handleBlur}\n value={selectedItem}\n className={clsx(\n withBaseName(\"button\"),\n withBaseName(variant),\n {\n [withBaseName(\"disabled\")]: disabled,\n [withBaseName(\"readOnly\")]: readOnly,\n },\n className\n )}\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-activedescendant={activeDescendant}\n tabIndex={disabled ? -1 : 0}\n aria-owns={listId}\n aria-controls={listId}\n aria-disabled={disabled}\n {...restProps}\n ref={triggerRef}\n >\n <span className={clsx(withBaseName(\"buttonText\"))}>{selectedItem}</span>\n {getIcon()}\n </button>\n {open && (\n <FloatingPortal>\n <SaltProvider>\n <div ref={floating} {...getDropdownNextProps()}>\n <ListNext\n id={listId}\n className={clsx(withBaseName(\"list\"), ListProps?.className)}\n disableFocus\n disabled={disabled || ListProps?.disabled}\n selected={selectedItem}\n highlightedItem={highlightedItem}\n {...ListProps}\n ref={setListRef}\n >\n {getListItems(source)}\n </ListNext>\n </div>\n </SaltProvider>\n </FloatingPortal>\n )}\n </div>\n );\n});\n"],"names":["makePrefixer","forwardRef","DropdownNext","useWindow","useComponentCssInjection","dropdownNextCss","useId","useRef","useForkRef","useDropdownNext","clsx","jsx","ChevronUpIcon","ChevronDownIcon","jsxs","FloatingPortal","SaltProvider","ListNext"],"mappings":"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"}
@@ -0,0 +1,169 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var react = require('@floating-ui/react');
7
+ var core = require('@salt-ds/core');
8
+ require('../list-next/ListNext.js');
9
+ var ListItemNext = require('../list-next/ListItemNext.js');
10
+ var useList = require('../list-next/useList.js');
11
+
12
+ const useDropdownNext = ({
13
+ listProps,
14
+ openControlProp,
15
+ onOpenChange: onOpenChangeProp,
16
+ placement: placementProp
17
+ }) => {
18
+ const [open, setOpen] = core.useControlled({
19
+ controlled: openControlProp,
20
+ default: false,
21
+ name: "DropdownNext",
22
+ state: "open"
23
+ });
24
+ const {
25
+ focusHandler: listFocusHandler,
26
+ keyDownHandler: listKeyDownHandler,
27
+ blurHandler: listBlurHandler,
28
+ mouseOverHandler: listMouseOverHandler,
29
+ activeDescendant,
30
+ selectedItem,
31
+ setSelectedItem,
32
+ highlightedItem,
33
+ setHighlightedItem,
34
+ contextValue: listContextValue,
35
+ focusVisibleRef
36
+ } = useList.useList({
37
+ ...listProps
38
+ });
39
+ const { select, highlight } = listContextValue;
40
+ const getListItems = (source) => {
41
+ if (!source)
42
+ return;
43
+ return source.map((item, index) => {
44
+ return /* @__PURE__ */ jsxRuntime.jsx(ListItemNext.ListItemNext, {
45
+ value: item,
46
+ onMouseDown: (event) => {
47
+ select(event);
48
+ },
49
+ onMouseMove: (event) => {
50
+ highlight(event);
51
+ },
52
+ children: item
53
+ }, index);
54
+ });
55
+ };
56
+ const onOpenChange = (open2) => {
57
+ setOpen(open2);
58
+ onOpenChangeProp == null ? void 0 : onOpenChangeProp(open2);
59
+ };
60
+ const { floating, reference, x, y, strategy, placement, context } = core.useFloatingUI({
61
+ open,
62
+ onOpenChange,
63
+ placement: placementProp,
64
+ middleware: [
65
+ react.offset(0),
66
+ react.size({
67
+ apply({ rects, elements }) {
68
+ Object.assign(elements.floating.style, {
69
+ width: `${rects.reference.width}px`
70
+ });
71
+ }
72
+ }),
73
+ react.flip(),
74
+ react.shift({ limiter: react.limitShift() })
75
+ ]
76
+ });
77
+ const { getFloatingProps } = react.useInteractions([
78
+ react.useDismiss(context),
79
+ react.useRole(context, { role: "listbox" })
80
+ ]);
81
+ const getDropdownNextProps = () => {
82
+ return getFloatingProps({
83
+ "data-placement": placement,
84
+ ref: floating,
85
+ style: {
86
+ top: y != null ? y : 0,
87
+ left: x != null ? x : 0,
88
+ position: strategy
89
+ }
90
+ });
91
+ };
92
+ const blurHandler = () => {
93
+ listBlurHandler();
94
+ setOpen(false);
95
+ };
96
+ const focusHandler = (event) => {
97
+ if (selectedItem) {
98
+ listFocusHandler(event);
99
+ }
100
+ };
101
+ const mouseDownHandler = () => {
102
+ setOpen(!open);
103
+ };
104
+ const mouseOverHandler = () => {
105
+ listMouseOverHandler();
106
+ };
107
+ const keyDownHandler = (event) => {
108
+ const { key } = event;
109
+ switch (key) {
110
+ case "ArrowUp":
111
+ listKeyDownHandler(event);
112
+ break;
113
+ case "ArrowDown":
114
+ setOpen(true);
115
+ listKeyDownHandler(event);
116
+ break;
117
+ case " ":
118
+ case "Enter":
119
+ if (!open) {
120
+ setOpen(true);
121
+ break;
122
+ }
123
+ if (open) {
124
+ listKeyDownHandler(event);
125
+ setOpen(false);
126
+ break;
127
+ }
128
+ break;
129
+ case "Escape":
130
+ setOpen(false);
131
+ break;
132
+ case "PageUp":
133
+ case "PageDown":
134
+ case "Home":
135
+ case "End":
136
+ if (open) {
137
+ listKeyDownHandler(event);
138
+ break;
139
+ }
140
+ break;
141
+ }
142
+ };
143
+ return {
144
+ handlers: {
145
+ focusHandler,
146
+ keyDownHandler,
147
+ blurHandler,
148
+ mouseOverHandler,
149
+ mouseDownHandler
150
+ },
151
+ activeDescendant,
152
+ selectedItem,
153
+ setSelectedItem,
154
+ highlightedItem,
155
+ setHighlightedItem,
156
+ focusVisibleRef,
157
+ getListItems,
158
+ portalProps: {
159
+ open,
160
+ setOpen,
161
+ floating,
162
+ reference,
163
+ getDropdownNextProps
164
+ }
165
+ };
166
+ };
167
+
168
+ exports.useDropdownNext = useDropdownNext;
169
+ //# sourceMappingURL=useDropdownNext.js.map