@salt-ds/lab 1.0.0-alpha.51 → 1.0.0-alpha.53

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 (425) hide show
  1. package/css/salt-lab.css +532 -303
  2. package/dist-cjs/breadcrumbs/internal/BreadcrumbsCollapsed.js +3 -2
  3. package/dist-cjs/breadcrumbs/internal/BreadcrumbsCollapsed.js.map +1 -1
  4. package/dist-cjs/calendar/Calendar.css.js +1 -1
  5. package/dist-cjs/calendar/Calendar.js +57 -39
  6. package/dist-cjs/calendar/Calendar.js.map +1 -1
  7. package/dist-cjs/calendar/CalendarDateGrid.css.js +6 -0
  8. package/dist-cjs/calendar/CalendarDateGrid.css.js.map +1 -0
  9. package/dist-cjs/calendar/{internal/CalendarCarousel.js → CalendarDateGrid.js} +39 -16
  10. package/dist-cjs/calendar/CalendarDateGrid.js.map +1 -0
  11. package/dist-cjs/calendar/CalendarNavigation.css.js +6 -0
  12. package/dist-cjs/calendar/CalendarNavigation.js +314 -0
  13. package/dist-cjs/calendar/CalendarNavigation.js.map +1 -0
  14. package/dist-cjs/calendar/{internal/CalendarWeekHeader.js → CalendarWeekHeader.js} +6 -5
  15. package/dist-cjs/calendar/CalendarWeekHeader.js.map +1 -0
  16. package/dist-cjs/calendar/formatDate.js +56 -0
  17. package/dist-cjs/calendar/formatDate.js.map +1 -0
  18. package/dist-cjs/calendar/internal/CalendarDay.css.js +1 -1
  19. package/dist-cjs/calendar/internal/CalendarDay.js +45 -33
  20. package/dist-cjs/calendar/internal/CalendarDay.js.map +1 -1
  21. package/dist-cjs/calendar/internal/CalendarMonth.js +3 -2
  22. package/dist-cjs/calendar/internal/CalendarMonth.js.map +1 -1
  23. package/dist-cjs/calendar/internal/useFocusManagement.js +7 -4
  24. package/dist-cjs/calendar/internal/useFocusManagement.js.map +1 -1
  25. package/dist-cjs/calendar/internal/utils.js +28 -23
  26. package/dist-cjs/calendar/internal/utils.js.map +1 -1
  27. package/dist-cjs/calendar/useCalendar.js +90 -43
  28. package/dist-cjs/calendar/useCalendar.js.map +1 -1
  29. package/dist-cjs/calendar/useCalendarDay.js +19 -10
  30. package/dist-cjs/calendar/useCalendarDay.js.map +1 -1
  31. package/dist-cjs/calendar/useCalendarSelection.js +333 -0
  32. package/dist-cjs/calendar/useCalendarSelection.js.map +1 -0
  33. package/dist-cjs/carousel/Carousel.js +5 -5
  34. package/dist-cjs/carousel/Carousel.js.map +1 -1
  35. package/dist-cjs/cascading-menu/CascadingMenuItem.js +2 -2
  36. package/dist-cjs/cascading-menu/CascadingMenuItem.js.map +1 -1
  37. package/dist-cjs/cascading-menu/internal/useMouseHandlers.js.map +1 -1
  38. package/dist-cjs/color-chooser/ColorChooser.js.map +1 -1
  39. package/dist-cjs/combo-box-deprecated/ComboBox.css.js +1 -1
  40. package/dist-cjs/common-hooks/useCollectionItems.js.map +1 -1
  41. package/dist-cjs/contact-details/ContactMetadata.js +2 -2
  42. package/dist-cjs/contact-details/ContactMetadata.js.map +1 -1
  43. package/dist-cjs/content-status/ContentStatus.css.js +1 -1
  44. package/dist-cjs/date-input/DateInput.css.js +1 -1
  45. package/dist-cjs/date-input/DateInputRange.js +357 -0
  46. package/dist-cjs/date-input/DateInputRange.js.map +1 -0
  47. package/dist-cjs/date-input/DateInputSingle.js +231 -0
  48. package/dist-cjs/date-input/DateInputSingle.js.map +1 -0
  49. package/dist-cjs/date-input/utils.js +65 -0
  50. package/dist-cjs/date-input/utils.js.map +1 -0
  51. package/dist-cjs/date-picker/DatePicker.js +74 -149
  52. package/dist-cjs/date-picker/DatePicker.js.map +1 -1
  53. package/dist-cjs/date-picker/DatePickerActions.css.js +6 -0
  54. package/dist-cjs/date-picker/DatePickerActions.css.js.map +1 -0
  55. package/dist-cjs/date-picker/DatePickerActions.js +106 -0
  56. package/dist-cjs/date-picker/DatePickerActions.js.map +1 -0
  57. package/dist-cjs/date-picker/DatePickerContext.js +23 -17
  58. package/dist-cjs/date-picker/DatePickerContext.js.map +1 -1
  59. package/dist-cjs/date-picker/DatePickerOverlay.css.js +6 -0
  60. package/dist-cjs/date-picker/DatePickerOverlay.css.js.map +1 -0
  61. package/dist-cjs/date-picker/DatePickerOverlay.js +50 -0
  62. package/dist-cjs/date-picker/DatePickerOverlay.js.map +1 -0
  63. package/dist-cjs/date-picker/DatePickerOverlayProvider.js +105 -0
  64. package/dist-cjs/date-picker/DatePickerOverlayProvider.js.map +1 -0
  65. package/dist-cjs/date-picker/DatePickerPanel.css.js +1 -1
  66. package/dist-cjs/date-picker/DatePickerRangeInput.js +119 -0
  67. package/dist-cjs/date-picker/DatePickerRangeInput.js.map +1 -0
  68. package/dist-cjs/date-picker/DatePickerRangePanel.js +230 -0
  69. package/dist-cjs/date-picker/DatePickerRangePanel.js.map +1 -0
  70. package/dist-cjs/date-picker/DatePickerSingleInput.js +98 -0
  71. package/dist-cjs/date-picker/DatePickerSingleInput.js.map +1 -0
  72. package/dist-cjs/date-picker/DatePickerSinglePanel.js +152 -0
  73. package/dist-cjs/date-picker/DatePickerSinglePanel.js.map +1 -0
  74. package/dist-cjs/date-picker/useDatePicker.js +207 -0
  75. package/dist-cjs/date-picker/useDatePicker.js.map +1 -0
  76. package/dist-cjs/dropdown/DropdownButton.js +4 -2
  77. package/dist-cjs/dropdown/DropdownButton.js.map +1 -1
  78. package/dist-cjs/dropdown/useDropdown.js.map +1 -1
  79. package/dist-cjs/form-field-legacy/FormLabel.js.map +1 -1
  80. package/dist-cjs/index.js +53 -10
  81. package/dist-cjs/index.js.map +1 -1
  82. package/dist-cjs/list/List.js.map +1 -1
  83. package/dist-cjs/menu-button/MenuButtonTrigger.css.js +1 -1
  84. package/dist-cjs/menu-button/MenuButtonTrigger.js +2 -2
  85. package/dist-cjs/menu-button/MenuButtonTrigger.js.map +1 -1
  86. package/dist-cjs/query-input/QueryInput.css.js +1 -1
  87. package/dist-cjs/query-input/internal/CategoryListItem.js +2 -2
  88. package/dist-cjs/query-input/internal/CategoryListItem.js.map +1 -1
  89. package/dist-cjs/query-input/internal/ValueList.js +2 -2
  90. package/dist-cjs/query-input/internal/ValueList.js.map +1 -1
  91. package/dist-cjs/search-input/SearchInput.js +2 -1
  92. package/dist-cjs/search-input/SearchInput.js.map +1 -1
  93. package/dist-cjs/slider/Slider.css.js +1 -1
  94. package/dist-cjs/slider/Slider.js +53 -105
  95. package/dist-cjs/slider/Slider.js.map +1 -1
  96. package/dist-cjs/slider/internal/SliderContext.js +21 -0
  97. package/dist-cjs/slider/internal/SliderContext.js.map +1 -0
  98. package/dist-cjs/slider/internal/SliderMarks.js +31 -0
  99. package/dist-cjs/slider/internal/SliderMarks.js.map +1 -0
  100. package/dist-cjs/slider/internal/SliderSelection.js +17 -10
  101. package/dist-cjs/slider/internal/SliderSelection.js.map +1 -1
  102. package/dist-cjs/slider/internal/SliderThumb.js +77 -0
  103. package/dist-cjs/slider/internal/SliderThumb.js.map +1 -0
  104. package/dist-cjs/slider/internal/SliderTrack.js +91 -0
  105. package/dist-cjs/slider/internal/SliderTrack.js.map +1 -0
  106. package/dist-cjs/slider/internal/useKeyDownThumb.js +53 -0
  107. package/dist-cjs/slider/internal/useKeyDownThumb.js.map +1 -0
  108. package/dist-cjs/slider/internal/utils.js +78 -116
  109. package/dist-cjs/slider/internal/utils.js.map +1 -1
  110. package/dist-cjs/static-list/StaticList.css.js +6 -0
  111. package/dist-cjs/static-list/StaticList.css.js.map +1 -0
  112. package/dist-cjs/static-list/StaticList.js +32 -0
  113. package/dist-cjs/static-list/StaticList.js.map +1 -0
  114. package/dist-cjs/static-list/StaticListItem.css.js +6 -0
  115. package/dist-cjs/static-list/StaticListItem.css.js.map +1 -0
  116. package/dist-cjs/static-list/StaticListItem.js +33 -0
  117. package/dist-cjs/static-list/StaticListItem.js.map +1 -0
  118. package/dist-cjs/static-list/StaticListItemContent.css.js +6 -0
  119. package/dist-cjs/static-list/StaticListItemContent.css.js.map +1 -0
  120. package/dist-cjs/static-list/StaticListItemContent.js +30 -0
  121. package/dist-cjs/static-list/StaticListItemContent.js.map +1 -0
  122. package/dist-cjs/stepped-tracker/TrackerStep/TrackerStep.js +8 -8
  123. package/dist-cjs/stepped-tracker/TrackerStep/TrackerStep.js.map +1 -1
  124. package/dist-cjs/stepper-input/StepperInput.css.js +1 -1
  125. package/dist-cjs/stepper-input/StepperInput.js +214 -29
  126. package/dist-cjs/stepper-input/StepperInput.js.map +1 -1
  127. package/dist-cjs/stepper-input/internal/useActivateWhileMouseDown.js +54 -0
  128. package/dist-cjs/stepper-input/internal/useActivateWhileMouseDown.js.map +1 -0
  129. package/dist-cjs/stepper-input/internal/utils.js +43 -0
  130. package/dist-cjs/stepper-input/internal/utils.js.map +1 -0
  131. package/dist-cjs/stepper-input/useStepperInput.js +88 -172
  132. package/dist-cjs/stepper-input/useStepperInput.js.map +1 -1
  133. package/dist-cjs/tabs/Tab.js +14 -12
  134. package/dist-cjs/tabs/Tab.js.map +1 -1
  135. package/dist-cjs/tabs/TabActivationIndicator.css.js +1 -1
  136. package/dist-cjs/tabs/Tabstrip.js +2 -1
  137. package/dist-cjs/tabs/Tabstrip.js.map +1 -1
  138. package/dist-cjs/tabs/useTabs.js.map +1 -1
  139. package/dist-cjs/tabs-next/OverflowMenu.js +2 -2
  140. package/dist-cjs/tabs-next/OverflowMenu.js.map +1 -1
  141. package/dist-cjs/tokenized-input/TokenizedInputBase.js +3 -3
  142. package/dist-cjs/tokenized-input/TokenizedInputBase.js.map +1 -1
  143. package/dist-cjs/tokenized-input/internal/InputPill.js +2 -2
  144. package/dist-cjs/tokenized-input/internal/InputPill.js.map +1 -1
  145. package/dist-cjs/tokenized-input-next/TokenizedInputNext.js +3 -3
  146. package/dist-cjs/tokenized-input-next/TokenizedInputNext.js.map +1 -1
  147. package/dist-cjs/tokenized-input-next/internal/InputPill.js +2 -2
  148. package/dist-cjs/tokenized-input-next/internal/InputPill.js.map +1 -1
  149. package/dist-cjs/toolbar/overflow-panel/OverflowPanel.js +2 -2
  150. package/dist-cjs/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
  151. package/dist-es/breadcrumbs/internal/BreadcrumbsCollapsed.js +3 -2
  152. package/dist-es/breadcrumbs/internal/BreadcrumbsCollapsed.js.map +1 -1
  153. package/dist-es/calendar/Calendar.css.js +1 -1
  154. package/dist-es/calendar/Calendar.js +60 -42
  155. package/dist-es/calendar/Calendar.js.map +1 -1
  156. package/dist-es/calendar/CalendarDateGrid.css.js +4 -0
  157. package/dist-es/calendar/CalendarDateGrid.css.js.map +1 -0
  158. package/dist-es/calendar/{internal/CalendarCarousel.js → CalendarDateGrid.js} +39 -16
  159. package/dist-es/calendar/CalendarDateGrid.js.map +1 -0
  160. package/dist-es/calendar/CalendarNavigation.css.js +4 -0
  161. package/dist-es/calendar/CalendarNavigation.js +310 -0
  162. package/dist-es/calendar/CalendarNavigation.js.map +1 -0
  163. package/dist-es/calendar/{internal/CalendarWeekHeader.js → CalendarWeekHeader.js} +6 -5
  164. package/dist-es/calendar/CalendarWeekHeader.js.map +1 -0
  165. package/dist-es/calendar/formatDate.js +51 -0
  166. package/dist-es/calendar/formatDate.js.map +1 -0
  167. package/dist-es/calendar/internal/CalendarDay.css.js +1 -1
  168. package/dist-es/calendar/internal/CalendarDay.js +45 -33
  169. package/dist-es/calendar/internal/CalendarDay.js.map +1 -1
  170. package/dist-es/calendar/internal/CalendarMonth.js +3 -2
  171. package/dist-es/calendar/internal/CalendarMonth.js.map +1 -1
  172. package/dist-es/calendar/internal/useFocusManagement.js +7 -4
  173. package/dist-es/calendar/internal/useFocusManagement.js.map +1 -1
  174. package/dist-es/calendar/internal/utils.js +29 -23
  175. package/dist-es/calendar/internal/utils.js.map +1 -1
  176. package/dist-es/calendar/useCalendar.js +92 -45
  177. package/dist-es/calendar/useCalendar.js.map +1 -1
  178. package/dist-es/calendar/useCalendarDay.js +20 -11
  179. package/dist-es/calendar/useCalendarDay.js.map +1 -1
  180. package/dist-es/calendar/useCalendarSelection.js +323 -0
  181. package/dist-es/calendar/useCalendarSelection.js.map +1 -0
  182. package/dist-es/carousel/Carousel.js +6 -6
  183. package/dist-es/carousel/Carousel.js.map +1 -1
  184. package/dist-es/cascading-menu/CascadingMenuItem.js +3 -3
  185. package/dist-es/cascading-menu/CascadingMenuItem.js.map +1 -1
  186. package/dist-es/cascading-menu/internal/useMouseHandlers.js.map +1 -1
  187. package/dist-es/color-chooser/ColorChooser.js.map +1 -1
  188. package/dist-es/combo-box-deprecated/ComboBox.css.js +1 -1
  189. package/dist-es/common-hooks/useCollectionItems.js.map +1 -1
  190. package/dist-es/contact-details/ContactMetadata.js +3 -3
  191. package/dist-es/contact-details/ContactMetadata.js.map +1 -1
  192. package/dist-es/content-status/ContentStatus.css.js +1 -1
  193. package/dist-es/date-input/DateInput.css.js +1 -1
  194. package/dist-es/date-input/DateInputRange.js +353 -0
  195. package/dist-es/date-input/DateInputRange.js.map +1 -0
  196. package/dist-es/date-input/DateInputSingle.js +227 -0
  197. package/dist-es/date-input/DateInputSingle.js.map +1 -0
  198. package/dist-es/date-input/utils.js +57 -0
  199. package/dist-es/date-input/utils.js.map +1 -0
  200. package/dist-es/date-picker/DatePicker.js +77 -153
  201. package/dist-es/date-picker/DatePicker.js.map +1 -1
  202. package/dist-es/date-picker/DatePickerActions.css.js +4 -0
  203. package/dist-es/date-picker/DatePickerActions.css.js.map +1 -0
  204. package/dist-es/date-picker/DatePickerActions.js +102 -0
  205. package/dist-es/date-picker/DatePickerActions.js.map +1 -0
  206. package/dist-es/date-picker/DatePickerContext.js +22 -17
  207. package/dist-es/date-picker/DatePickerContext.js.map +1 -1
  208. package/dist-es/date-picker/DatePickerOverlay.css.js +4 -0
  209. package/dist-es/date-picker/DatePickerOverlay.css.js.map +1 -0
  210. package/dist-es/date-picker/DatePickerOverlay.js +46 -0
  211. package/dist-es/date-picker/DatePickerOverlay.js.map +1 -0
  212. package/dist-es/date-picker/DatePickerOverlayProvider.js +100 -0
  213. package/dist-es/date-picker/DatePickerOverlayProvider.js.map +1 -0
  214. package/dist-es/date-picker/DatePickerPanel.css.js +1 -1
  215. package/dist-es/date-picker/DatePickerRangeInput.js +115 -0
  216. package/dist-es/date-picker/DatePickerRangeInput.js.map +1 -0
  217. package/dist-es/date-picker/DatePickerRangePanel.js +222 -0
  218. package/dist-es/date-picker/DatePickerRangePanel.js.map +1 -0
  219. package/dist-es/date-picker/DatePickerSingleInput.js +94 -0
  220. package/dist-es/date-picker/DatePickerSingleInput.js.map +1 -0
  221. package/dist-es/date-picker/DatePickerSinglePanel.js +144 -0
  222. package/dist-es/date-picker/DatePickerSinglePanel.js.map +1 -0
  223. package/dist-es/date-picker/useDatePicker.js +203 -0
  224. package/dist-es/date-picker/useDatePicker.js.map +1 -0
  225. package/dist-es/dropdown/DropdownButton.js +6 -4
  226. package/dist-es/dropdown/DropdownButton.js.map +1 -1
  227. package/dist-es/dropdown/useDropdown.js.map +1 -1
  228. package/dist-es/form-field-legacy/FormLabel.js.map +1 -1
  229. package/dist-es/index.js +19 -3
  230. package/dist-es/index.js.map +1 -1
  231. package/dist-es/list/List.js.map +1 -1
  232. package/dist-es/menu-button/MenuButtonTrigger.css.js +1 -1
  233. package/dist-es/menu-button/MenuButtonTrigger.js +3 -3
  234. package/dist-es/menu-button/MenuButtonTrigger.js.map +1 -1
  235. package/dist-es/query-input/QueryInput.css.js +1 -1
  236. package/dist-es/query-input/internal/CategoryListItem.js +3 -3
  237. package/dist-es/query-input/internal/CategoryListItem.js.map +1 -1
  238. package/dist-es/query-input/internal/ValueList.js +3 -3
  239. package/dist-es/query-input/internal/ValueList.js.map +1 -1
  240. package/dist-es/search-input/SearchInput.js +3 -2
  241. package/dist-es/search-input/SearchInput.js.map +1 -1
  242. package/dist-es/slider/Slider.css.js +1 -1
  243. package/dist-es/slider/Slider.js +55 -107
  244. package/dist-es/slider/Slider.js.map +1 -1
  245. package/dist-es/slider/internal/SliderContext.js +16 -0
  246. package/dist-es/slider/internal/SliderContext.js.map +1 -0
  247. package/dist-es/slider/internal/SliderMarks.js +27 -0
  248. package/dist-es/slider/internal/SliderMarks.js.map +1 -0
  249. package/dist-es/slider/internal/SliderSelection.js +17 -10
  250. package/dist-es/slider/internal/SliderSelection.js.map +1 -1
  251. package/dist-es/slider/internal/SliderThumb.js +73 -0
  252. package/dist-es/slider/internal/SliderThumb.js.map +1 -0
  253. package/dist-es/slider/internal/SliderTrack.js +87 -0
  254. package/dist-es/slider/internal/SliderTrack.js.map +1 -0
  255. package/dist-es/slider/internal/useKeyDownThumb.js +49 -0
  256. package/dist-es/slider/internal/useKeyDownThumb.js.map +1 -0
  257. package/dist-es/slider/internal/utils.js +70 -111
  258. package/dist-es/slider/internal/utils.js.map +1 -1
  259. package/dist-es/static-list/StaticList.css.js +4 -0
  260. package/dist-es/static-list/StaticList.css.js.map +1 -0
  261. package/dist-es/static-list/StaticList.js +28 -0
  262. package/dist-es/static-list/StaticList.js.map +1 -0
  263. package/dist-es/static-list/StaticListItem.css.js +4 -0
  264. package/dist-es/static-list/StaticListItem.css.js.map +1 -0
  265. package/dist-es/static-list/StaticListItem.js +29 -0
  266. package/dist-es/static-list/StaticListItem.js.map +1 -0
  267. package/dist-es/static-list/StaticListItemContent.css.js +4 -0
  268. package/dist-es/static-list/StaticListItemContent.css.js.map +1 -0
  269. package/dist-es/static-list/StaticListItemContent.js +26 -0
  270. package/dist-es/static-list/StaticListItemContent.js.map +1 -0
  271. package/dist-es/stepped-tracker/TrackerStep/TrackerStep.js +9 -9
  272. package/dist-es/stepped-tracker/TrackerStep/TrackerStep.js.map +1 -1
  273. package/dist-es/stepper-input/StepperInput.css.js +1 -1
  274. package/dist-es/stepper-input/StepperInput.js +216 -31
  275. package/dist-es/stepper-input/StepperInput.js.map +1 -1
  276. package/dist-es/stepper-input/internal/useActivateWhileMouseDown.js +50 -0
  277. package/dist-es/stepper-input/internal/useActivateWhileMouseDown.js.map +1 -0
  278. package/dist-es/stepper-input/internal/utils.js +32 -0
  279. package/dist-es/stepper-input/internal/utils.js.map +1 -0
  280. package/dist-es/stepper-input/useStepperInput.js +88 -172
  281. package/dist-es/stepper-input/useStepperInput.js.map +1 -1
  282. package/dist-es/tabs/Tab.js +15 -13
  283. package/dist-es/tabs/Tab.js.map +1 -1
  284. package/dist-es/tabs/TabActivationIndicator.css.js +1 -1
  285. package/dist-es/tabs/Tabstrip.js +4 -3
  286. package/dist-es/tabs/Tabstrip.js.map +1 -1
  287. package/dist-es/tabs/useTabs.js.map +1 -1
  288. package/dist-es/tabs-next/OverflowMenu.js +3 -3
  289. package/dist-es/tabs-next/OverflowMenu.js.map +1 -1
  290. package/dist-es/tokenized-input/TokenizedInputBase.js +3 -3
  291. package/dist-es/tokenized-input/TokenizedInputBase.js.map +1 -1
  292. package/dist-es/tokenized-input/internal/InputPill.js +2 -2
  293. package/dist-es/tokenized-input/internal/InputPill.js.map +1 -1
  294. package/dist-es/tokenized-input-next/TokenizedInputNext.js +3 -3
  295. package/dist-es/tokenized-input-next/TokenizedInputNext.js.map +1 -1
  296. package/dist-es/tokenized-input-next/internal/InputPill.js +2 -2
  297. package/dist-es/tokenized-input-next/internal/InputPill.js.map +1 -1
  298. package/dist-es/toolbar/overflow-panel/OverflowPanel.js +3 -3
  299. package/dist-es/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
  300. package/dist-types/calendar/Calendar.d.ts +55 -11
  301. package/dist-types/calendar/CalendarDateGrid.d.ts +10 -0
  302. package/dist-types/calendar/CalendarNavigation.d.ts +57 -0
  303. package/dist-types/calendar/CalendarWeekHeader.d.ts +5 -0
  304. package/dist-types/calendar/formatDate.d.ts +14 -0
  305. package/dist-types/calendar/index.d.ts +5 -1
  306. package/dist-types/calendar/internal/CalendarDay.d.ts +2 -1
  307. package/dist-types/calendar/internal/CalendarMonth.d.ts +9 -1
  308. package/dist-types/calendar/internal/useFocusManagement.d.ts +2 -1
  309. package/dist-types/calendar/internal/utils.d.ts +7 -8
  310. package/dist-types/calendar/useCalendar.d.ts +100 -16
  311. package/dist-types/calendar/useCalendarDay.d.ts +38 -0
  312. package/dist-types/calendar/useCalendarSelection.d.ts +182 -0
  313. package/dist-types/date-input/DateInputRange.d.ts +150 -0
  314. package/dist-types/date-input/DateInputSingle.d.ts +117 -0
  315. package/dist-types/date-input/index.d.ts +3 -1
  316. package/dist-types/date-input/utils.d.ts +43 -0
  317. package/dist-types/date-picker/DatePicker.d.ts +20 -62
  318. package/dist-types/date-picker/DatePickerActions.d.ts +80 -0
  319. package/dist-types/date-picker/DatePickerContext.d.ts +180 -17
  320. package/dist-types/date-picker/DatePickerOverlay.d.ts +11 -0
  321. package/dist-types/date-picker/DatePickerOverlayProvider.d.ts +67 -0
  322. package/dist-types/date-picker/DatePickerRangeInput.d.ts +7 -0
  323. package/dist-types/date-picker/DatePickerRangePanel.d.ts +80 -0
  324. package/dist-types/date-picker/DatePickerSingleInput.d.ts +7 -0
  325. package/dist-types/date-picker/DatePickerSinglePanel.d.ts +50 -0
  326. package/dist-types/date-picker/index.d.ts +7 -0
  327. package/dist-types/date-picker/useDatePicker.d.ts +112 -0
  328. package/dist-types/index.d.ts +1 -0
  329. package/dist-types/slider/Slider.d.ts +23 -10
  330. package/dist-types/slider/internal/SliderContext.d.ts +11 -0
  331. package/dist-types/slider/internal/SliderMarks.d.ts +7 -0
  332. package/dist-types/slider/internal/SliderSelection.d.ts +3 -3
  333. package/dist-types/slider/internal/SliderThumb.d.ts +8 -0
  334. package/dist-types/slider/internal/SliderTrack.d.ts +4 -0
  335. package/dist-types/slider/internal/index.d.ts +3 -0
  336. package/dist-types/slider/internal/useKeyDownThumb.d.ts +2 -0
  337. package/dist-types/slider/internal/utils.d.ts +18 -10
  338. package/dist-types/slider/types.d.ts +3 -1
  339. package/dist-types/static-list/StaticList.d.ts +8 -0
  340. package/dist-types/static-list/StaticListItem.d.ts +4 -0
  341. package/dist-types/static-list/StaticListItemContent.d.ts +8 -0
  342. package/dist-types/static-list/index.d.ts +3 -0
  343. package/dist-types/stepper-input/StepperInput.d.ts +66 -19
  344. package/dist-types/stepper-input/internal/useActivateWhileMouseDown.d.ts +5 -0
  345. package/dist-types/stepper-input/internal/utils.d.ts +8 -0
  346. package/dist-types/stepper-input/useStepperInput.d.ts +21 -8
  347. package/package.json +3 -3
  348. package/dist-cjs/calendar/internal/CalendarCarousel.css.js +0 -6
  349. package/dist-cjs/calendar/internal/CalendarCarousel.css.js.map +0 -1
  350. package/dist-cjs/calendar/internal/CalendarCarousel.js.map +0 -1
  351. package/dist-cjs/calendar/internal/CalendarNavigation.css.js +0 -6
  352. package/dist-cjs/calendar/internal/CalendarNavigation.js +0 -218
  353. package/dist-cjs/calendar/internal/CalendarNavigation.js.map +0 -1
  354. package/dist-cjs/calendar/internal/CalendarWeekHeader.js.map +0 -1
  355. package/dist-cjs/calendar/useSelection.js +0 -249
  356. package/dist-cjs/calendar/useSelection.js.map +0 -1
  357. package/dist-cjs/date-input/DateInput.js +0 -283
  358. package/dist-cjs/date-input/DateInput.js.map +0 -1
  359. package/dist-cjs/date-picker/DatePickerPanel.js +0 -155
  360. package/dist-cjs/date-picker/DatePickerPanel.js.map +0 -1
  361. package/dist-cjs/slider/internal/SliderHandle.js +0 -44
  362. package/dist-cjs/slider/internal/SliderHandle.js.map +0 -1
  363. package/dist-cjs/slider/internal/SliderMarkLabels.js +0 -45
  364. package/dist-cjs/slider/internal/SliderMarkLabels.js.map +0 -1
  365. package/dist-cjs/slider/internal/SliderRail.js +0 -25
  366. package/dist-cjs/slider/internal/SliderRail.js.map +0 -1
  367. package/dist-cjs/slider/internal/SliderRailMarks.js +0 -48
  368. package/dist-cjs/slider/internal/SliderRailMarks.js.map +0 -1
  369. package/dist-cjs/slider/internal/styles.js +0 -99
  370. package/dist-cjs/slider/internal/styles.js.map +0 -1
  371. package/dist-cjs/slider/internal/useSliderKeyDown.js +0 -50
  372. package/dist-cjs/slider/internal/useSliderKeyDown.js.map +0 -1
  373. package/dist-cjs/slider/internal/useSliderMouseDown.js +0 -96
  374. package/dist-cjs/slider/internal/useSliderMouseDown.js.map +0 -1
  375. package/dist-cjs/stepper-input/internal/useSpinner.js +0 -33
  376. package/dist-cjs/stepper-input/internal/useSpinner.js.map +0 -1
  377. package/dist-es/calendar/internal/CalendarCarousel.css.js +0 -4
  378. package/dist-es/calendar/internal/CalendarCarousel.css.js.map +0 -1
  379. package/dist-es/calendar/internal/CalendarCarousel.js.map +0 -1
  380. package/dist-es/calendar/internal/CalendarNavigation.css.js +0 -4
  381. package/dist-es/calendar/internal/CalendarNavigation.js +0 -214
  382. package/dist-es/calendar/internal/CalendarNavigation.js.map +0 -1
  383. package/dist-es/calendar/internal/CalendarWeekHeader.js.map +0 -1
  384. package/dist-es/calendar/useSelection.js +0 -242
  385. package/dist-es/calendar/useSelection.js.map +0 -1
  386. package/dist-es/date-input/DateInput.js +0 -279
  387. package/dist-es/date-input/DateInput.js.map +0 -1
  388. package/dist-es/date-picker/DatePickerPanel.js +0 -151
  389. package/dist-es/date-picker/DatePickerPanel.js.map +0 -1
  390. package/dist-es/slider/internal/SliderHandle.js +0 -40
  391. package/dist-es/slider/internal/SliderHandle.js.map +0 -1
  392. package/dist-es/slider/internal/SliderMarkLabels.js +0 -41
  393. package/dist-es/slider/internal/SliderMarkLabels.js.map +0 -1
  394. package/dist-es/slider/internal/SliderRail.js +0 -21
  395. package/dist-es/slider/internal/SliderRail.js.map +0 -1
  396. package/dist-es/slider/internal/SliderRailMarks.js +0 -44
  397. package/dist-es/slider/internal/SliderRailMarks.js.map +0 -1
  398. package/dist-es/slider/internal/styles.js +0 -91
  399. package/dist-es/slider/internal/styles.js.map +0 -1
  400. package/dist-es/slider/internal/useSliderKeyDown.js +0 -46
  401. package/dist-es/slider/internal/useSliderKeyDown.js.map +0 -1
  402. package/dist-es/slider/internal/useSliderMouseDown.js +0 -92
  403. package/dist-es/slider/internal/useSliderMouseDown.js.map +0 -1
  404. package/dist-es/stepper-input/internal/useSpinner.js +0 -29
  405. package/dist-es/stepper-input/internal/useSpinner.js.map +0 -1
  406. package/dist-types/calendar/internal/CalendarCarousel.d.ts +0 -3
  407. package/dist-types/calendar/internal/CalendarNavigation.d.ts +0 -16
  408. package/dist-types/calendar/internal/CalendarWeekHeader.d.ts +0 -5
  409. package/dist-types/calendar/useSelection.d.ts +0 -78
  410. package/dist-types/date-input/DateInput.d.ts +0 -60
  411. package/dist-types/date-picker/DatePickerPanel.d.ts +0 -10
  412. package/dist-types/slider/internal/SliderHandle.d.ts +0 -11
  413. package/dist-types/slider/internal/SliderMarkLabels.d.ts +0 -7
  414. package/dist-types/slider/internal/SliderRail.d.ts +0 -1
  415. package/dist-types/slider/internal/SliderRailMarks.d.ts +0 -12
  416. package/dist-types/slider/internal/styles.d.ts +0 -10
  417. package/dist-types/slider/internal/useSliderKeyDown.d.ts +0 -4
  418. package/dist-types/slider/internal/useSliderMouseDown.d.ts +0 -4
  419. package/dist-types/stepper-input/internal/useSpinner.d.ts +0 -5
  420. /package/dist-cjs/calendar/{internal/CalendarNavigation.css.js.map → CalendarNavigation.css.js.map} +0 -0
  421. /package/dist-cjs/calendar/{internal/CalendarWeekHeader.css.js → CalendarWeekHeader.css.js} +0 -0
  422. /package/dist-cjs/calendar/{internal/CalendarWeekHeader.css.js.map → CalendarWeekHeader.css.js.map} +0 -0
  423. /package/dist-es/calendar/{internal/CalendarNavigation.css.js.map → CalendarNavigation.css.js.map} +0 -0
  424. /package/dist-es/calendar/{internal/CalendarWeekHeader.css.js → CalendarWeekHeader.css.js} +0 -0
  425. /package/dist-es/calendar/{internal/CalendarWeekHeader.css.js.map → CalendarWeekHeader.css.js.map} +0 -0
@@ -4,61 +4,246 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
6
  var core = require('@salt-ds/core');
7
- var icons = require('@salt-ds/icons');
8
7
  var styles = require('@salt-ds/styles');
9
8
  var window = require('@salt-ds/window');
10
9
  var clsx = require('clsx');
11
10
  var react = require('react');
12
- var useStepperInput = require('./useStepperInput.js');
11
+ var utils = require('./internal/utils.js');
13
12
  var StepperInput$1 = require('./StepperInput.css.js');
13
+ var useStepperInput = require('./useStepperInput.js');
14
14
 
15
15
  const withBaseName = core.makePrefixer("saltStepperInput");
16
16
  const StepperInput = react.forwardRef(
17
- function StepperInput2(props, ref) {
18
- const {
19
- className,
20
- hideButtons,
21
- onBlur,
22
- onChange,
23
- onFocus,
24
- readOnly,
25
- ...rest
26
- } = props;
17
+ function StepperInput2({
18
+ bordered,
19
+ className: classNameProp,
20
+ decimalPlaces = 0,
21
+ defaultValue: defaultValueProp,
22
+ disabled,
23
+ emptyReadOnlyMarker = "\u2014",
24
+ endAdornment,
25
+ hideButtons,
26
+ inputProps: inputPropsProp = {},
27
+ inputRef: inputRefProp,
28
+ max = Number.MAX_SAFE_INTEGER,
29
+ min = Number.MIN_SAFE_INTEGER,
30
+ onChange: onChangeProp,
31
+ placeholder,
32
+ readOnly: readOnlyProp,
33
+ startAdornment,
34
+ step = 1,
35
+ stepBlock = 10,
36
+ textAlign = "left",
37
+ validationStatus: validationStatusProp,
38
+ value: valueProp,
39
+ variant = "primary",
40
+ ...restProps
41
+ }, ref) {
27
42
  const targetWindow = window.useWindow();
28
43
  styles.useComponentCssInjection({
29
44
  testId: "salt-stepper-input",
30
45
  css: StepperInput$1,
31
46
  window: targetWindow
32
47
  });
48
+ const { IncreaseIcon, DecreaseIcon } = core.useIcon();
49
+ const {
50
+ a11yProps: {
51
+ "aria-describedby": formFieldDescribedBy,
52
+ "aria-labelledby": formFieldLabelledBy
53
+ } = {},
54
+ disabled: formFieldDisabled,
55
+ readOnly: formFieldReadOnly,
56
+ necessity: formFieldRequired,
57
+ validationStatus: formFieldValidationStatus
58
+ } = core.useFormFieldProps();
59
+ const isDisabled = disabled || formFieldDisabled;
60
+ const isReadOnly = readOnlyProp || formFieldReadOnly;
61
+ const validationStatus = formFieldValidationStatus != null ? formFieldValidationStatus : validationStatusProp;
62
+ const {
63
+ "aria-describedby": inputDescribedBy,
64
+ "aria-labelledby": inputLabelledBy,
65
+ className: inputClassName,
66
+ onBlur: inputOnBlur,
67
+ onChange: inputOnChange,
68
+ onFocus: inputOnFocus,
69
+ required: inputRequired,
70
+ onKeyDown: inputOnKeyDown,
71
+ ...restInputProps
72
+ } = inputPropsProp;
73
+ const isRequired = formFieldRequired ? ["required", "asterisk"].includes(formFieldRequired) : inputRequired;
74
+ const [value, setValue] = core.useControlled({
75
+ controlled: valueProp,
76
+ default: typeof defaultValueProp === "number" ? utils.toFixedDecimalPlaces(defaultValueProp, decimalPlaces) : defaultValueProp,
77
+ name: "StepperInput",
78
+ state: "value"
79
+ });
80
+ const [focused, setFocused] = react.useState(false);
33
81
  const inputRef = react.useRef(null);
34
- const { getButtonProps, getInputProps } = useStepperInput.useStepperInput(props, inputRef);
82
+ const forkedInputRef = core.useForkRef(inputRef, inputRefProp);
83
+ const {
84
+ decrementButtonProps,
85
+ decrementValue,
86
+ incrementButtonProps,
87
+ incrementValue
88
+ } = useStepperInput.useStepperInput({
89
+ inputRef,
90
+ setValue,
91
+ decimalPlaces,
92
+ disabled,
93
+ max,
94
+ min,
95
+ onChange: onChangeProp,
96
+ readOnly: isReadOnly,
97
+ step,
98
+ stepBlock,
99
+ value
100
+ });
101
+ const handleInputFocus = (event) => {
102
+ setFocused(true);
103
+ inputOnFocus == null ? void 0 : inputOnFocus(event);
104
+ };
105
+ const handleInputBlur = (event) => {
106
+ setFocused(false);
107
+ if (value === void 0)
108
+ return;
109
+ const floatValue = utils.toFloat(value);
110
+ if (Number.isNaN(floatValue)) {
111
+ setValue(value);
112
+ onChangeProp == null ? void 0 : onChangeProp(event, value);
113
+ } else {
114
+ const roundedValue = utils.toFixedDecimalPlaces(floatValue, decimalPlaces);
115
+ if (value !== "" && !utils.isAllowedNonNumeric(value)) {
116
+ setValue(roundedValue);
117
+ }
118
+ onChangeProp == null ? void 0 : onChangeProp(event, roundedValue);
119
+ }
120
+ inputOnBlur == null ? void 0 : inputOnBlur(event);
121
+ };
122
+ const handleInputChange = (event) => {
123
+ const changedValue = event.target.value;
124
+ setValue(utils.sanitizedInput(changedValue));
125
+ onChangeProp == null ? void 0 : onChangeProp(event, utils.sanitizedInput(changedValue));
126
+ inputOnChange == null ? void 0 : inputOnChange(event);
127
+ };
128
+ const handleInputKeyDown = (event) => {
129
+ switch (event.key) {
130
+ case "ArrowUp": {
131
+ event.preventDefault();
132
+ const block = event.shiftKey;
133
+ incrementValue(event, block);
134
+ break;
135
+ }
136
+ case "ArrowDown": {
137
+ event.preventDefault();
138
+ const block = event.shiftKey;
139
+ decrementValue(event, block);
140
+ break;
141
+ }
142
+ case "Home": {
143
+ event.preventDefault();
144
+ setValue(min);
145
+ onChangeProp == null ? void 0 : onChangeProp(event, min);
146
+ break;
147
+ }
148
+ case "End": {
149
+ event.preventDefault();
150
+ setValue(max);
151
+ onChangeProp == null ? void 0 : onChangeProp(event, max);
152
+ break;
153
+ }
154
+ case "PageUp": {
155
+ event.preventDefault();
156
+ incrementValue(event, true);
157
+ break;
158
+ }
159
+ case "PageDown": {
160
+ event.preventDefault();
161
+ decrementValue(event, true);
162
+ break;
163
+ }
164
+ }
165
+ inputOnKeyDown == null ? void 0 : inputOnKeyDown(event);
166
+ };
35
167
  return /* @__PURE__ */ jsxRuntime.jsxs("div", {
36
- className: clsx.clsx(withBaseName(), className),
168
+ className: clsx.clsx(withBaseName(), classNameProp),
169
+ ...restProps,
37
170
  ref,
38
171
  children: [
39
- /* @__PURE__ */ jsxRuntime.jsx(core.Input, {
40
- onBlur,
41
- onFocus,
42
- ref: inputRef,
43
- readOnly,
44
- ...getInputProps(rest)
172
+ /* @__PURE__ */ jsxRuntime.jsxs("div", {
173
+ className: clsx.clsx(
174
+ withBaseName("inputContainer"),
175
+ withBaseName(variant),
176
+ {
177
+ [withBaseName("focused")]: !isDisabled && focused,
178
+ [withBaseName("disabled")]: isDisabled,
179
+ [withBaseName("readOnly")]: isReadOnly,
180
+ [withBaseName(validationStatus || "")]: validationStatus,
181
+ [withBaseName("bordered")]: bordered
182
+ }
183
+ ),
184
+ children: [
185
+ startAdornment && /* @__PURE__ */ jsxRuntime.jsx("div", {
186
+ className: withBaseName("startAdornmentContainer"),
187
+ children: startAdornment
188
+ }),
189
+ /* @__PURE__ */ jsxRuntime.jsx("input", {
190
+ "aria-describedby": clsx.clsx(formFieldDescribedBy, inputDescribedBy),
191
+ "aria-invalid": utils.isOutOfRange(value, min, max),
192
+ "aria-labelledby": clsx.clsx(formFieldLabelledBy, inputLabelledBy),
193
+ "aria-valuemax": utils.toFloat(utils.toFixedDecimalPlaces(max, decimalPlaces)),
194
+ "aria-valuemin": utils.toFloat(utils.toFixedDecimalPlaces(min, decimalPlaces)),
195
+ "aria-valuenow": value && !Number.isNaN(utils.toFloat(value)) ? utils.toFloat(utils.toFixedDecimalPlaces(utils.toFloat(value), decimalPlaces)) : void 0,
196
+ className: clsx.clsx(
197
+ withBaseName("input"),
198
+ withBaseName(`inputTextAlign${core.capitalize(textAlign)}`),
199
+ inputClassName
200
+ ),
201
+ disabled: isDisabled,
202
+ onBlur: handleInputBlur,
203
+ onChange: handleInputChange,
204
+ onFocus: !isDisabled ? handleInputFocus : void 0,
205
+ onKeyDown: handleInputKeyDown,
206
+ placeholder,
207
+ readOnly: isReadOnly,
208
+ ref: forkedInputRef,
209
+ required: isRequired,
210
+ role: "spinbutton",
211
+ tabIndex: isDisabled ? -1 : 0,
212
+ value,
213
+ ...restInputProps
214
+ }),
215
+ !isDisabled && validationStatus && /* @__PURE__ */ jsxRuntime.jsx(core.StatusAdornment, {
216
+ status: validationStatus
217
+ }),
218
+ endAdornment && /* @__PURE__ */ jsxRuntime.jsx("div", {
219
+ className: withBaseName("endAdornmentContainer"),
220
+ children: endAdornment
221
+ }),
222
+ /* @__PURE__ */ jsxRuntime.jsx("div", {
223
+ className: withBaseName("activationIndicator")
224
+ })
225
+ ]
45
226
  }),
46
- !hideButtons && !readOnly && /* @__PURE__ */ jsxRuntime.jsxs("div", {
227
+ !hideButtons && !isReadOnly && /* @__PURE__ */ jsxRuntime.jsxs("div", {
47
228
  className: withBaseName("buttonContainer"),
48
229
  children: [
49
230
  /* @__PURE__ */ jsxRuntime.jsx(core.Button, {
50
- "aria-label": "increment value",
51
- className: withBaseName("stepperButton"),
52
- ...getButtonProps("increment"),
53
- children: /* @__PURE__ */ jsxRuntime.jsx(icons.TriangleUpIcon, {
231
+ className: clsx.clsx(
232
+ withBaseName("stepperButton"),
233
+ withBaseName("stepperButtonIncrement")
234
+ ),
235
+ ...incrementButtonProps,
236
+ children: /* @__PURE__ */ jsxRuntime.jsx(IncreaseIcon, {
54
237
  "aria-hidden": true
55
238
  })
56
239
  }),
57
240
  /* @__PURE__ */ jsxRuntime.jsx(core.Button, {
58
- "aria-label": "decrement value",
59
- className: withBaseName("stepperButton"),
60
- ...getButtonProps("decrement"),
61
- children: /* @__PURE__ */ jsxRuntime.jsx(icons.TriangleDownIcon, {
241
+ className: clsx.clsx(
242
+ withBaseName("stepperButton"),
243
+ withBaseName("stepperButtonDecrement")
244
+ ),
245
+ ...decrementButtonProps,
246
+ children: /* @__PURE__ */ jsxRuntime.jsx(DecreaseIcon, {
62
247
  "aria-hidden": true
63
248
  })
64
249
  })
@@ -1 +1 @@
1
- {"version":3,"file":"StepperInput.js","sources":["../src/stepper-input/StepperInput.tsx"],"sourcesContent":["import { Button, Input, type InputProps, makePrefixer } from \"@salt-ds/core\";\nimport { TriangleDownIcon, TriangleUpIcon } from \"@salt-ds/icons\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { type FocusEventHandler, forwardRef, useRef } from \"react\";\nimport { useStepperInput } from \"./useStepperInput\";\n\nimport stepperInputCss from \"./StepperInput.css\";\n\nconst withBaseName = makePrefixer(\"saltStepperInput\");\n\nexport interface StepperInputProps\n extends Omit<InputProps, \"onChange\" | \"emptyReadOnlyMarker\"> {\n /**\n * A multiplier applied to the `step` when the value is incremented or decremented using the PageDown/PageUp keys.\n */\n block?: number;\n /**\n * The number of decimal places to display.\n */\n decimalPlaces?: number;\n /**\n * Sets the initial default value of the component.\n */\n defaultValue?: number;\n /**\n * The maximum value that can be selected.\n */\n max?: number;\n /**\n * The minimum value that can be selected.\n */\n min?: number;\n /**\n * Whether to hide the stepper buttons. Defaults to `false`.\n */\n hideButtons?: boolean;\n /**\n * Callback when stepper input loses focus.\n */\n onBlur?: FocusEventHandler<HTMLInputElement>;\n /**\n * Callback when stepper input value is changed.\n */\n onChange?: (changedValue: number | string) => void;\n /**\n * Callback when stepper input gains focus.\n */\n onFocus?: FocusEventHandler<HTMLInputElement>;\n /**\n * The amount to increment or decrement the value by when using the stepper buttons or Up Arrow and Down Arrow keys.\n */\n step?: number;\n /**\n * Determines the text alignment of the display value.\n */\n textAlign?: \"center\" | \"left\" | \"right\";\n /**\n * The value of the stepper input. The component will be controlled if this prop is provided.\n */\n value?: number | string;\n}\n\nexport const StepperInput = forwardRef<HTMLDivElement, StepperInputProps>(\n function StepperInput(props, ref) {\n const {\n className,\n hideButtons,\n onBlur,\n onChange,\n onFocus,\n readOnly,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-stepper-input\",\n css: stepperInputCss,\n window: targetWindow,\n });\n\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n const { getButtonProps, getInputProps } = useStepperInput(props, inputRef);\n\n return (\n <div className={clsx(withBaseName(), className)} ref={ref}>\n <Input\n onBlur={onBlur}\n onFocus={onFocus}\n ref={inputRef}\n readOnly={readOnly}\n {...getInputProps(rest)}\n />\n {!hideButtons && !readOnly && (\n <div className={withBaseName(\"buttonContainer\")}>\n <Button\n aria-label=\"increment value\"\n className={withBaseName(\"stepperButton\")}\n {...getButtonProps(\"increment\")}\n >\n <TriangleUpIcon aria-hidden />\n </Button>\n <Button\n aria-label=\"decrement value\"\n className={withBaseName(\"stepperButton\")}\n {...getButtonProps(\"decrement\")}\n >\n <TriangleDownIcon aria-hidden />\n </Button>\n </div>\n )}\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","StepperInput","useWindow","useComponentCssInjection","stepperInputCss","useRef","useStepperInput","jsxs","clsx","jsx","Input","Button","TriangleUpIcon","TriangleDownIcon"],"mappings":";;;;;;;;;;;;;;AAUA,MAAM,YAAA,GAAeA,kBAAa,kBAAkB,CAAA,CAAA;AAsD7C,MAAM,YAAe,GAAAC,gBAAA;AAAA,EAC1B,SAASC,aAAa,CAAA,KAAA,EAAO,GAAK,EAAA;AAChC,IAAM,MAAA;AAAA,MACJ,SAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,MACG,GAAA,IAAA;AAAA,KACD,GAAA,KAAA,CAAA;AAEJ,IAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,oBAAA;AAAA,MACR,GAAK,EAAAC,cAAA;AAAA,MACL,MAAQ,EAAA,YAAA;AAAA,KACT,CAAA,CAAA;AAED,IAAM,MAAA,QAAA,GAAWC,aAAgC,IAAI,CAAA,CAAA;AAErD,IAAA,MAAM,EAAE,cAAgB,EAAA,aAAA,EAAkB,GAAAC,+BAAA,CAAgB,OAAO,QAAQ,CAAA,CAAA;AAEzE,IAAA,uBACGC,eAAA,CAAA,KAAA,EAAA;AAAA,MAAI,SAAW,EAAAC,SAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,MAAG,GAAA;AAAA,MAC/C,QAAA,EAAA;AAAA,wBAACC,cAAA,CAAAC,UAAA,EAAA;AAAA,UACC,MAAA;AAAA,UACA,OAAA;AAAA,UACA,GAAK,EAAA,QAAA;AAAA,UACL,QAAA;AAAA,UACC,GAAG,cAAc,IAAI,CAAA;AAAA,SACxB,CAAA;AAAA,QACC,CAAC,WAAA,IAAe,CAAC,QAAA,oBACfH,eAAA,CAAA,KAAA,EAAA;AAAA,UAAI,SAAA,EAAW,aAAa,iBAAiB,CAAA;AAAA,UAC5C,QAAA,EAAA;AAAA,4BAACE,cAAA,CAAAE,WAAA,EAAA;AAAA,cACC,YAAW,EAAA,iBAAA;AAAA,cACX,SAAA,EAAW,aAAa,eAAe,CAAA;AAAA,cACtC,GAAG,eAAe,WAAW,CAAA;AAAA,cAE9B,QAAC,kBAAAF,cAAA,CAAAG,oBAAA,EAAA;AAAA,gBAAe,aAAW,EAAA,IAAA;AAAA,eAAC,CAAA;AAAA,aAC9B,CAAA;AAAA,4BACCH,cAAA,CAAAE,WAAA,EAAA;AAAA,cACC,YAAW,EAAA,iBAAA;AAAA,cACX,SAAA,EAAW,aAAa,eAAe,CAAA;AAAA,cACtC,GAAG,eAAe,WAAW,CAAA;AAAA,cAE9B,QAAC,kBAAAF,cAAA,CAAAI,sBAAA,EAAA;AAAA,gBAAiB,aAAW,EAAA,IAAA;AAAA,eAAC,CAAA;AAAA,aAChC,CAAA;AAAA,WAAA;AAAA,SACF,CAAA;AAAA,OAAA;AAAA,KAEJ,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
1
+ {"version":3,"file":"StepperInput.js","sources":["../src/stepper-input/StepperInput.tsx"],"sourcesContent":["import {\n Button,\n StatusAdornment,\n type ValidationStatus,\n capitalize,\n makePrefixer,\n useControlled,\n useForkRef,\n useFormFieldProps,\n useIcon,\n} from \"@salt-ds/core\";\nimport { TriangleDownIcon, TriangleUpIcon } from \"@salt-ds/icons\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ChangeEvent,\n type ComponentPropsWithoutRef,\n type FocusEvent,\n type InputHTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n type Ref,\n type SyntheticEvent,\n forwardRef,\n useRef,\n useState,\n} from \"react\";\nimport {\n isAllowedNonNumeric,\n isOutOfRange,\n sanitizedInput,\n toFixedDecimalPlaces,\n toFloat,\n} from \"./internal/utils\";\n\nimport stepperInputCss from \"./StepperInput.css\";\nimport { useStepperInput } from \"./useStepperInput\";\n\nconst withBaseName = makePrefixer(\"saltStepperInput\");\n\nexport interface StepperInputProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"onChange\"> {\n /**\n * A boolean. When `true`, the input will receive a full border.\n */\n bordered?: boolean;\n /**\n * The number of decimal places to display.\n */\n decimalPlaces?: number;\n /**\n * Sets the initial default value of the component.\n */\n defaultValue?: number | string;\n /**\n * If `true`, the stepper input will be disabled.\n */\n disabled?: boolean;\n /**\n * The marker to use in an empty read only Input.\n * Use `''` to disable this feature. Defaults to '—'.\n * @default '—'\n */\n emptyReadOnlyMarker?: string;\n /**\n * End adornment component\n */\n endAdornment?: ReactNode;\n /**\n * Whether to hide the stepper buttons. Defaults to `false`.\n * @default false\n */\n hideButtons?: boolean;\n /**\n * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n */\n inputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * Optional ref for the input component\n */\n inputRef?: Ref<HTMLInputElement>;\n /**\n * The maximum value that can be selected. Defaults to Number.MAX_SAFE_INTEGER.\n * @default Number.MAX_SAFE_INTEGER\n */\n max?: number;\n /**\n * The minimum value that can be selected. Defaults to Number.MIN_SAFE_INTEGER.\n * @default Number.MIN_SAFE_INTEGER\n */\n min?: number;\n /**\n * Callback when stepper input value is changed.\n * @param event - the event triggers value change, could be undefined during increment / decrement button long press\n */\n onChange?: (\n event: SyntheticEvent | undefined,\n value: number | string,\n ) => void;\n /**\n * A string. Displayed in a dimmed color when the input value is empty.\n */\n placeholder?: string | undefined;\n /**\n * A boolean. If `true`, the component is not editable by the user.\n */\n readOnly?: boolean;\n /**\n * Start adornment component\n */\n startAdornment?: ReactNode;\n /**\n * The amount to increment or decrement the value by when using the stepper buttons or Up Arrow and Down Arrow keys. Default to 1.\n * @default 1\n */\n step?: number;\n /**\n * The amount to change the value when the value is incremented or decremented by holding Shift and pressing Up arrow or Down arrow keys.\n * Defaults to 10.\n * @default 10\n */\n stepBlock?: number;\n /**\n * Alignment of text within container. Defaults to \"left\".\n * @default \"left\"\n */\n textAlign?: \"left\" | \"center\" | \"right\";\n /**\n * Validation status.\n */\n validationStatus?: Extract<ValidationStatus, \"error\" | \"warning\" | \"success\">;\n /**\n * Styling variant. Defaults to \"primary\".\n * @default \"primary\"\n */\n variant?: \"primary\" | \"secondary\";\n /**\n * The value of the stepper input. The component will be controlled if this prop is provided.\n */\n value?: number | string | undefined;\n}\n\nexport const StepperInput = forwardRef<HTMLDivElement, StepperInputProps>(\n function StepperInput(\n {\n bordered,\n className: classNameProp,\n decimalPlaces = 0,\n defaultValue: defaultValueProp,\n disabled,\n emptyReadOnlyMarker = \"—\",\n endAdornment,\n hideButtons,\n inputProps: inputPropsProp = {},\n inputRef: inputRefProp,\n max = Number.MAX_SAFE_INTEGER,\n min = Number.MIN_SAFE_INTEGER,\n onChange: onChangeProp,\n placeholder,\n readOnly: readOnlyProp,\n startAdornment,\n step = 1,\n stepBlock = 10,\n textAlign = \"left\",\n validationStatus: validationStatusProp,\n value: valueProp,\n variant = \"primary\",\n ...restProps\n },\n ref,\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-stepper-input\",\n css: stepperInputCss,\n window: targetWindow,\n });\n\n const { IncreaseIcon, DecreaseIcon } = useIcon();\n\n const {\n a11yProps: {\n \"aria-describedby\": formFieldDescribedBy,\n \"aria-labelledby\": formFieldLabelledBy,\n } = {},\n disabled: formFieldDisabled,\n readOnly: formFieldReadOnly,\n necessity: formFieldRequired,\n validationStatus: formFieldValidationStatus,\n } = useFormFieldProps();\n\n const isDisabled = disabled || formFieldDisabled;\n const isReadOnly = readOnlyProp || formFieldReadOnly;\n const validationStatus = formFieldValidationStatus ?? validationStatusProp;\n\n const {\n \"aria-describedby\": inputDescribedBy,\n \"aria-labelledby\": inputLabelledBy,\n className: inputClassName,\n onBlur: inputOnBlur,\n onChange: inputOnChange,\n onFocus: inputOnFocus,\n required: inputRequired,\n onKeyDown: inputOnKeyDown,\n ...restInputProps\n } = inputPropsProp;\n\n const isRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : inputRequired;\n\n const [value, setValue] = useControlled({\n controlled: valueProp,\n default:\n typeof defaultValueProp === \"number\"\n ? toFixedDecimalPlaces(defaultValueProp, decimalPlaces)\n : defaultValueProp,\n name: \"StepperInput\",\n state: \"value\",\n });\n\n // Won't be needed when `:has` css can be used\n const [focused, setFocused] = useState(false);\n\n const inputRef = useRef<HTMLInputElement | null>(null);\n const forkedInputRef = useForkRef(inputRef, inputRefProp);\n\n const {\n decrementButtonProps,\n decrementValue,\n incrementButtonProps,\n incrementValue,\n } = useStepperInput({\n inputRef,\n setValue,\n decimalPlaces,\n disabled,\n max,\n min,\n onChange: onChangeProp,\n readOnly: isReadOnly,\n step,\n stepBlock,\n value,\n });\n\n const handleInputFocus = (event: FocusEvent<HTMLInputElement>) => {\n setFocused(true);\n\n inputOnFocus?.(event);\n };\n\n const handleInputBlur = (event: FocusEvent<HTMLInputElement>) => {\n setFocused(false);\n\n if (value === undefined) return;\n\n const floatValue = toFloat(value);\n if (Number.isNaN(floatValue)) {\n // Keep original value if NaN\n setValue(value);\n onChangeProp?.(event, value);\n } else {\n const roundedValue = toFixedDecimalPlaces(floatValue, decimalPlaces);\n\n if (value !== \"\" && !isAllowedNonNumeric(value)) {\n setValue(roundedValue);\n }\n\n onChangeProp?.(event, roundedValue);\n }\n\n inputOnBlur?.(event);\n };\n\n const handleInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n const changedValue = event.target.value;\n\n setValue(sanitizedInput(changedValue));\n\n onChangeProp?.(event, sanitizedInput(changedValue));\n inputOnChange?.(event);\n };\n\n const handleInputKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n switch (event.key) {\n case \"ArrowUp\": {\n event.preventDefault();\n const block = event.shiftKey;\n incrementValue(event, block);\n break;\n }\n case \"ArrowDown\": {\n event.preventDefault();\n const block = event.shiftKey;\n decrementValue(event, block);\n break;\n }\n case \"Home\": {\n event.preventDefault();\n setValue(min);\n onChangeProp?.(event, min);\n break;\n }\n case \"End\": {\n event.preventDefault();\n setValue(max);\n onChangeProp?.(event, max);\n break;\n }\n case \"PageUp\": {\n event.preventDefault();\n incrementValue(event, true);\n break;\n }\n case \"PageDown\": {\n event.preventDefault();\n decrementValue(event, true);\n break;\n }\n }\n\n inputOnKeyDown?.(event);\n };\n\n return (\n <div\n className={clsx(withBaseName(), classNameProp)}\n {...restProps}\n ref={ref}\n >\n <div\n className={clsx(\n withBaseName(\"inputContainer\"),\n withBaseName(variant),\n {\n [withBaseName(\"focused\")]: !isDisabled && focused,\n [withBaseName(\"disabled\")]: isDisabled,\n [withBaseName(\"readOnly\")]: isReadOnly,\n [withBaseName(validationStatus || \"\")]: validationStatus,\n [withBaseName(\"bordered\")]: bordered,\n },\n )}\n >\n {startAdornment && (\n <div className={withBaseName(\"startAdornmentContainer\")}>\n {startAdornment}\n </div>\n )}\n <input\n aria-describedby={clsx(formFieldDescribedBy, inputDescribedBy)}\n aria-invalid={isOutOfRange(value, min, max)}\n aria-labelledby={clsx(formFieldLabelledBy, inputLabelledBy)}\n aria-valuemax={toFloat(toFixedDecimalPlaces(max, decimalPlaces))}\n aria-valuemin={toFloat(toFixedDecimalPlaces(min, decimalPlaces))}\n aria-valuenow={\n value && !Number.isNaN(toFloat(value))\n ? toFloat(toFixedDecimalPlaces(toFloat(value), decimalPlaces))\n : undefined\n }\n className={clsx(\n withBaseName(\"input\"),\n withBaseName(`inputTextAlign${capitalize(textAlign)}`),\n inputClassName,\n )}\n disabled={isDisabled}\n onBlur={handleInputBlur}\n onChange={handleInputChange}\n onFocus={!isDisabled ? handleInputFocus : undefined}\n onKeyDown={handleInputKeyDown}\n placeholder={placeholder}\n readOnly={isReadOnly}\n ref={forkedInputRef}\n required={isRequired}\n role=\"spinbutton\"\n tabIndex={isDisabled ? -1 : 0}\n value={value}\n {...restInputProps}\n />\n {!isDisabled && validationStatus && (\n <StatusAdornment status={validationStatus} />\n )}\n {endAdornment && (\n <div className={withBaseName(\"endAdornmentContainer\")}>\n {endAdornment}\n </div>\n )}\n <div className={withBaseName(\"activationIndicator\")} />\n </div>\n\n {!hideButtons && !isReadOnly && (\n <div className={withBaseName(\"buttonContainer\")}>\n <Button\n className={clsx(\n withBaseName(\"stepperButton\"),\n withBaseName(\"stepperButtonIncrement\"),\n )}\n {...incrementButtonProps}\n >\n <IncreaseIcon aria-hidden />\n </Button>\n <Button\n className={clsx(\n withBaseName(\"stepperButton\"),\n withBaseName(\"stepperButtonDecrement\"),\n )}\n {...decrementButtonProps}\n >\n <DecreaseIcon aria-hidden />\n </Button>\n </div>\n )}\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","StepperInput","useWindow","useComponentCssInjection","stepperInputCss","useIcon","useFormFieldProps","useControlled","toFixedDecimalPlaces","useState","useRef","useForkRef","useStepperInput","toFloat","isAllowedNonNumeric","sanitizedInput","jsxs","clsx","jsx","isOutOfRange","capitalize","StatusAdornment","Button"],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var window = require('@salt-ds/window');
6
+ var react = require('react');
7
+ var useInterval = require('./useInterval.js');
8
+
9
+ const INITIAL_DELAY = 500;
10
+ const INTERVAL_DELAY = 100;
11
+ function useActivateWhileMouseDown(activationFn, isAtLimit) {
12
+ const [buttonDown, setButtonDown] = react.useState(false);
13
+ const [delay, setDelay] = react.useState(INITIAL_DELAY);
14
+ const cancelInterval = react.useCallback(() => {
15
+ setButtonDown(false);
16
+ setDelay(INITIAL_DELAY);
17
+ }, []);
18
+ react.useEffect(() => {
19
+ if (isAtLimit)
20
+ cancelInterval();
21
+ }, [isAtLimit, cancelInterval]);
22
+ const targetWindow = window.useWindow();
23
+ react.useEffect(() => {
24
+ if (targetWindow) {
25
+ targetWindow.addEventListener("mouseup", cancelInterval);
26
+ }
27
+ return () => {
28
+ if (targetWindow) {
29
+ targetWindow.removeEventListener("mouseup", cancelInterval);
30
+ }
31
+ };
32
+ }, [cancelInterval, targetWindow]);
33
+ const activate = (event) => {
34
+ activationFn(event);
35
+ if (event.type === "mousedown") {
36
+ setButtonDown(true);
37
+ }
38
+ };
39
+ useInterval.useInterval(
40
+ () => {
41
+ if (!buttonDown)
42
+ return;
43
+ activationFn();
44
+ if (delay === INITIAL_DELAY) {
45
+ setDelay(INTERVAL_DELAY);
46
+ }
47
+ },
48
+ buttonDown ? delay : null
49
+ );
50
+ return { activate, buttonDown };
51
+ }
52
+
53
+ exports.useActivateWhileMouseDown = useActivateWhileMouseDown;
54
+ //# sourceMappingURL=useActivateWhileMouseDown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useActivateWhileMouseDown.js","sources":["../src/stepper-input/internal/useActivateWhileMouseDown.ts"],"sourcesContent":["import { useWindow } from \"@salt-ds/window\";\nimport { type SyntheticEvent, useCallback, useEffect, useState } from \"react\";\nimport { useInterval } from \"./useInterval\";\n\nconst INITIAL_DELAY = 500;\nconst INTERVAL_DELAY = 100;\n\nexport function useActivateWhileMouseDown(\n activationFn: (event?: SyntheticEvent) => void,\n isAtLimit: boolean,\n) {\n const [buttonDown, setButtonDown] = useState(false);\n const [delay, setDelay] = useState(INITIAL_DELAY);\n\n const cancelInterval = useCallback(() => {\n setButtonDown(false);\n setDelay(INITIAL_DELAY);\n }, []);\n\n useEffect(() => {\n if (isAtLimit) cancelInterval();\n }, [isAtLimit, cancelInterval]);\n\n const targetWindow = useWindow();\n\n useEffect(() => {\n if (targetWindow) {\n targetWindow.addEventListener(\"mouseup\", cancelInterval);\n }\n return () => {\n if (targetWindow) {\n targetWindow.removeEventListener(\"mouseup\", cancelInterval);\n }\n };\n }, [cancelInterval, targetWindow]);\n\n const activate = (event: SyntheticEvent) => {\n activationFn(event);\n if (event.type === \"mousedown\") {\n setButtonDown(true);\n }\n };\n\n useInterval(\n () => {\n if (!buttonDown) return;\n activationFn();\n if (delay === INITIAL_DELAY) {\n setDelay(INTERVAL_DELAY);\n }\n },\n buttonDown ? delay : null,\n );\n\n return { activate, buttonDown };\n}\n"],"names":["useState","useCallback","useEffect","useWindow","useInterval"],"mappings":";;;;;;;;AAIA,MAAM,aAAgB,GAAA,GAAA,CAAA;AACtB,MAAM,cAAiB,GAAA,GAAA,CAAA;AAEP,SAAA,yBAAA,CACd,cACA,SACA,EAAA;AACA,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAS,KAAK,CAAA,CAAA;AAClD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAS,aAAa,CAAA,CAAA;AAEhD,EAAM,MAAA,cAAA,GAAiBC,kBAAY,MAAM;AACvC,IAAA,aAAA,CAAc,KAAK,CAAA,CAAA;AACnB,IAAA,QAAA,CAAS,aAAa,CAAA,CAAA;AAAA,GACxB,EAAG,EAAE,CAAA,CAAA;AAEL,EAAAC,eAAA,CAAU,MAAM;AACd,IAAI,IAAA,SAAA;AAAW,MAAe,cAAA,EAAA,CAAA;AAAA,GAC7B,EAAA,CAAC,SAAW,EAAA,cAAc,CAAC,CAAA,CAAA;AAE9B,EAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAE/B,EAAAD,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,YAAc,EAAA;AAChB,MAAa,YAAA,CAAA,gBAAA,CAAiB,WAAW,cAAc,CAAA,CAAA;AAAA,KACzD;AACA,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,YAAc,EAAA;AAChB,QAAa,YAAA,CAAA,mBAAA,CAAoB,WAAW,cAAc,CAAA,CAAA;AAAA,OAC5D;AAAA,KACF,CAAA;AAAA,GACC,EAAA,CAAC,cAAgB,EAAA,YAAY,CAAC,CAAA,CAAA;AAEjC,EAAM,MAAA,QAAA,GAAW,CAAC,KAA0B,KAAA;AAC1C,IAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAClB,IAAI,IAAA,KAAA,CAAM,SAAS,WAAa,EAAA;AAC9B,MAAA,aAAA,CAAc,IAAI,CAAA,CAAA;AAAA,KACpB;AAAA,GACF,CAAA;AAEA,EAAAE,uBAAA;AAAA,IACE,MAAM;AACJ,MAAA,IAAI,CAAC,UAAA;AAAY,QAAA,OAAA;AACjB,MAAa,YAAA,EAAA,CAAA;AACb,MAAA,IAAI,UAAU,aAAe,EAAA;AAC3B,QAAA,QAAA,CAAS,cAAc,CAAA,CAAA;AAAA,OACzB;AAAA,KACF;AAAA,IACA,aAAa,KAAQ,GAAA,IAAA;AAAA,GACvB,CAAA;AAEA,EAAO,OAAA,EAAE,UAAU,UAAW,EAAA,CAAA;AAChC;;;;"}
@@ -0,0 +1,43 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const ACCEPT_INPUT = /^[-+]?[0-9]*\.?([0-9]+)?/g;
6
+ const toFixedDecimalPlaces = (inputNumber, decimalPlaces) => inputNumber.toFixed(decimalPlaces);
7
+ const isAllowedNonNumeric = (inputCharacter) => {
8
+ if (typeof inputCharacter === "number")
9
+ return;
10
+ return "-+".includes(inputCharacter) && inputCharacter.length === 1 || inputCharacter === "";
11
+ };
12
+ const toFloat = (inputValue) => {
13
+ if (isAllowedNonNumeric(inputValue))
14
+ return 0;
15
+ return Number.parseFloat(inputValue.toString());
16
+ };
17
+ const sanitizedInput = (numberString) => (numberString.match(ACCEPT_INPUT) || []).join("");
18
+ const isAtMax = (value, max) => {
19
+ if (value === void 0)
20
+ return true;
21
+ return toFloat(value) >= max;
22
+ };
23
+ const isAtMin = (value, min) => {
24
+ if (value === void 0)
25
+ return true;
26
+ return toFloat(value) <= min;
27
+ };
28
+ const isOutOfRange = (value, min, max) => {
29
+ if (value === void 0)
30
+ return true;
31
+ const floatValue = toFloat(value);
32
+ return floatValue > max || floatValue < min;
33
+ };
34
+
35
+ exports.ACCEPT_INPUT = ACCEPT_INPUT;
36
+ exports.isAllowedNonNumeric = isAllowedNonNumeric;
37
+ exports.isAtMax = isAtMax;
38
+ exports.isAtMin = isAtMin;
39
+ exports.isOutOfRange = isOutOfRange;
40
+ exports.sanitizedInput = sanitizedInput;
41
+ exports.toFixedDecimalPlaces = toFixedDecimalPlaces;
42
+ exports.toFloat = toFloat;
43
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sources":["../src/stepper-input/internal/utils.ts"],"sourcesContent":["// The input should only accept numbers, decimal points, and plus/minus symbols\nexport const ACCEPT_INPUT = /^[-+]?[0-9]*\\.?([0-9]+)?/g;\n\nexport const toFixedDecimalPlaces = (\n inputNumber: number,\n decimalPlaces: number,\n) => inputNumber.toFixed(decimalPlaces);\n\nexport const isAllowedNonNumeric = (inputCharacter: number | string) => {\n if (typeof inputCharacter === \"number\") return;\n return (\n (\"-+\".includes(inputCharacter) && inputCharacter.length === 1) ||\n inputCharacter === \"\"\n );\n};\n\nexport const toFloat = (inputValue: number | string) => {\n // Plus, minus, and empty characters are treated as 0\n if (isAllowedNonNumeric(inputValue)) return 0;\n return Number.parseFloat(inputValue.toString());\n};\n\nexport const sanitizedInput = (numberString: string) =>\n (numberString.match(ACCEPT_INPUT) || []).join(\"\");\n\nexport const isAtMax = (value: number | string | undefined, max: number) => {\n if (value === undefined) return true;\n return toFloat(value) >= max;\n};\n\nexport const isAtMin = (value: number | string | undefined, min: number) => {\n if (value === undefined) return true;\n return toFloat(value) <= min;\n};\n\nexport const isOutOfRange = (\n value: number | string | undefined,\n min: number,\n max: number,\n) => {\n if (value === undefined) return true;\n const floatValue = toFloat(value);\n return floatValue > max || floatValue < min;\n};\n"],"names":[],"mappings":";;;;AACO,MAAM,YAAe,GAAA,4BAAA;AAErB,MAAM,uBAAuB,CAClC,WAAA,EACA,aACG,KAAA,WAAA,CAAY,QAAQ,aAAa,EAAA;AAEzB,MAAA,mBAAA,GAAsB,CAAC,cAAoC,KAAA;AACtE,EAAA,IAAI,OAAO,cAAmB,KAAA,QAAA;AAAU,IAAA,OAAA;AACxC,EAAA,OACG,KAAK,QAAS,CAAA,cAAc,KAAK,cAAe,CAAA,MAAA,KAAW,KAC5D,cAAmB,KAAA,EAAA,CAAA;AAEvB,EAAA;AAEa,MAAA,OAAA,GAAU,CAAC,UAAgC,KAAA;AAEtD,EAAA,IAAI,oBAAoB,UAAU,CAAA;AAAG,IAAO,OAAA,CAAA,CAAA;AAC5C,EAAA,OAAO,MAAO,CAAA,UAAA,CAAW,UAAW,CAAA,QAAA,EAAU,CAAA,CAAA;AAChD,EAAA;AAEa,MAAA,cAAA,GAAiB,CAAC,YAAA,KAAA,CAC5B,YAAa,CAAA,KAAA,CAAM,YAAY,CAAK,IAAA,EAAI,EAAA,IAAA,CAAK,EAAE,EAAA;AAErC,MAAA,OAAA,GAAU,CAAC,KAAA,EAAoC,GAAgB,KAAA;AAC1E,EAAA,IAAI,KAAU,KAAA,KAAA,CAAA;AAAW,IAAO,OAAA,IAAA,CAAA;AAChC,EAAO,OAAA,OAAA,CAAQ,KAAK,CAAK,IAAA,GAAA,CAAA;AAC3B,EAAA;AAEa,MAAA,OAAA,GAAU,CAAC,KAAA,EAAoC,GAAgB,KAAA;AAC1E,EAAA,IAAI,KAAU,KAAA,KAAA,CAAA;AAAW,IAAO,OAAA,IAAA,CAAA;AAChC,EAAO,OAAA,OAAA,CAAQ,KAAK,CAAK,IAAA,GAAA,CAAA;AAC3B,EAAA;AAEO,MAAM,YAAe,GAAA,CAC1B,KACA,EAAA,GAAA,EACA,GACG,KAAA;AACH,EAAA,IAAI,KAAU,KAAA,KAAA,CAAA;AAAW,IAAO,OAAA,IAAA,CAAA;AAChC,EAAM,MAAA,UAAA,GAAa,QAAQ,KAAK,CAAA,CAAA;AAChC,EAAO,OAAA,UAAA,GAAa,OAAO,UAAa,GAAA,GAAA,CAAA;AAC1C;;;;;;;;;;;"}