@salt-ds/lab 1.0.0-alpha.52 → 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 (223) hide show
  1. package/css/salt-lab.css +279 -38
  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.js +55 -26
  5. package/dist-cjs/calendar/Calendar.js.map +1 -1
  6. package/dist-cjs/calendar/CalendarDateGrid.css.js +6 -0
  7. package/dist-cjs/calendar/CalendarDateGrid.css.js.map +1 -0
  8. package/dist-cjs/calendar/{internal/CalendarCarousel.js → CalendarDateGrid.js} +37 -14
  9. package/dist-cjs/calendar/CalendarDateGrid.js.map +1 -0
  10. package/dist-cjs/calendar/CalendarNavigation.js +7 -5
  11. package/dist-cjs/calendar/CalendarNavigation.js.map +1 -1
  12. package/dist-cjs/calendar/{internal/CalendarWeekHeader.js → CalendarWeekHeader.js} +4 -3
  13. package/dist-cjs/calendar/CalendarWeekHeader.js.map +1 -0
  14. package/dist-cjs/calendar/internal/CalendarDay.css.js +1 -1
  15. package/dist-cjs/calendar/internal/CalendarMonth.js.map +1 -1
  16. package/dist-cjs/calendar/useCalendar.js +2 -4
  17. package/dist-cjs/calendar/useCalendar.js.map +1 -1
  18. package/dist-cjs/calendar/useCalendarSelection.js +16 -43
  19. package/dist-cjs/calendar/useCalendarSelection.js.map +1 -1
  20. package/dist-cjs/carousel/Carousel.js +5 -5
  21. package/dist-cjs/carousel/Carousel.js.map +1 -1
  22. package/dist-cjs/cascading-menu/CascadingMenuItem.js +2 -2
  23. package/dist-cjs/cascading-menu/CascadingMenuItem.js.map +1 -1
  24. package/dist-cjs/contact-details/ContactMetadata.js +2 -2
  25. package/dist-cjs/contact-details/ContactMetadata.js.map +1 -1
  26. package/dist-cjs/date-input/DateInputRange.js +2 -0
  27. package/dist-cjs/date-input/DateInputRange.js.map +1 -1
  28. package/dist-cjs/date-input/DateInputSingle.js +2 -0
  29. package/dist-cjs/date-input/DateInputSingle.js.map +1 -1
  30. package/dist-cjs/date-picker/DatePicker.js +40 -5
  31. package/dist-cjs/date-picker/DatePicker.js.map +1 -1
  32. package/dist-cjs/date-picker/DatePickerActions.js +7 -3
  33. package/dist-cjs/date-picker/DatePickerActions.js.map +1 -1
  34. package/dist-cjs/date-picker/DatePickerRangeInput.js +5 -4
  35. package/dist-cjs/date-picker/DatePickerRangeInput.js.map +1 -1
  36. package/dist-cjs/date-picker/DatePickerRangePanel.js +33 -9
  37. package/dist-cjs/date-picker/DatePickerRangePanel.js.map +1 -1
  38. package/dist-cjs/date-picker/DatePickerSingleInput.js +5 -4
  39. package/dist-cjs/date-picker/DatePickerSingleInput.js.map +1 -1
  40. package/dist-cjs/date-picker/DatePickerSinglePanel.js +19 -5
  41. package/dist-cjs/date-picker/DatePickerSinglePanel.js.map +1 -1
  42. package/dist-cjs/date-picker/useDatePicker.js +91 -63
  43. package/dist-cjs/date-picker/useDatePicker.js.map +1 -1
  44. package/dist-cjs/dropdown/DropdownButton.js +4 -2
  45. package/dist-cjs/dropdown/DropdownButton.js.map +1 -1
  46. package/dist-cjs/index.js +10 -0
  47. package/dist-cjs/index.js.map +1 -1
  48. package/dist-cjs/menu-button/MenuButtonTrigger.js +2 -2
  49. package/dist-cjs/menu-button/MenuButtonTrigger.js.map +1 -1
  50. package/dist-cjs/query-input/internal/CategoryListItem.js +2 -2
  51. package/dist-cjs/query-input/internal/CategoryListItem.js.map +1 -1
  52. package/dist-cjs/query-input/internal/ValueList.js +2 -2
  53. package/dist-cjs/query-input/internal/ValueList.js.map +1 -1
  54. package/dist-cjs/search-input/SearchInput.js +2 -1
  55. package/dist-cjs/search-input/SearchInput.js.map +1 -1
  56. package/dist-cjs/static-list/StaticList.css.js +6 -0
  57. package/dist-cjs/static-list/StaticList.css.js.map +1 -0
  58. package/dist-cjs/static-list/StaticList.js +32 -0
  59. package/dist-cjs/static-list/StaticList.js.map +1 -0
  60. package/dist-cjs/static-list/StaticListItem.css.js +6 -0
  61. package/dist-cjs/static-list/StaticListItem.css.js.map +1 -0
  62. package/dist-cjs/static-list/StaticListItem.js +33 -0
  63. package/dist-cjs/static-list/StaticListItem.js.map +1 -0
  64. package/dist-cjs/static-list/StaticListItemContent.css.js +6 -0
  65. package/dist-cjs/static-list/StaticListItemContent.css.js.map +1 -0
  66. package/dist-cjs/static-list/StaticListItemContent.js +30 -0
  67. package/dist-cjs/static-list/StaticListItemContent.js.map +1 -0
  68. package/dist-cjs/stepped-tracker/TrackerStep/TrackerStep.js +8 -8
  69. package/dist-cjs/stepped-tracker/TrackerStep/TrackerStep.js.map +1 -1
  70. package/dist-cjs/stepper-input/StepperInput.css.js +1 -1
  71. package/dist-cjs/stepper-input/StepperInput.js +214 -29
  72. package/dist-cjs/stepper-input/StepperInput.js.map +1 -1
  73. package/dist-cjs/stepper-input/internal/useActivateWhileMouseDown.js +54 -0
  74. package/dist-cjs/stepper-input/internal/useActivateWhileMouseDown.js.map +1 -0
  75. package/dist-cjs/stepper-input/internal/utils.js +43 -0
  76. package/dist-cjs/stepper-input/internal/utils.js.map +1 -0
  77. package/dist-cjs/stepper-input/useStepperInput.js +88 -172
  78. package/dist-cjs/stepper-input/useStepperInput.js.map +1 -1
  79. package/dist-cjs/tabs/Tab.js +14 -12
  80. package/dist-cjs/tabs/Tab.js.map +1 -1
  81. package/dist-cjs/tabs/Tabstrip.js +2 -1
  82. package/dist-cjs/tabs/Tabstrip.js.map +1 -1
  83. package/dist-cjs/tabs-next/OverflowMenu.js +2 -2
  84. package/dist-cjs/tabs-next/OverflowMenu.js.map +1 -1
  85. package/dist-cjs/tokenized-input/TokenizedInputBase.js +3 -3
  86. package/dist-cjs/tokenized-input/TokenizedInputBase.js.map +1 -1
  87. package/dist-cjs/tokenized-input/internal/InputPill.js +2 -2
  88. package/dist-cjs/tokenized-input/internal/InputPill.js.map +1 -1
  89. package/dist-cjs/tokenized-input-next/TokenizedInputNext.js +3 -3
  90. package/dist-cjs/tokenized-input-next/TokenizedInputNext.js.map +1 -1
  91. package/dist-cjs/tokenized-input-next/internal/InputPill.js +2 -2
  92. package/dist-cjs/tokenized-input-next/internal/InputPill.js.map +1 -1
  93. package/dist-cjs/toolbar/overflow-panel/OverflowPanel.js +2 -2
  94. package/dist-cjs/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
  95. package/dist-es/breadcrumbs/internal/BreadcrumbsCollapsed.js +3 -2
  96. package/dist-es/breadcrumbs/internal/BreadcrumbsCollapsed.js.map +1 -1
  97. package/dist-es/calendar/Calendar.js +57 -28
  98. package/dist-es/calendar/Calendar.js.map +1 -1
  99. package/dist-es/calendar/CalendarDateGrid.css.js +4 -0
  100. package/dist-es/calendar/CalendarDateGrid.css.js.map +1 -0
  101. package/dist-es/calendar/{internal/CalendarCarousel.js → CalendarDateGrid.js} +37 -14
  102. package/dist-es/calendar/CalendarDateGrid.js.map +1 -0
  103. package/dist-es/calendar/CalendarNavigation.js +8 -6
  104. package/dist-es/calendar/CalendarNavigation.js.map +1 -1
  105. package/dist-es/calendar/{internal/CalendarWeekHeader.js → CalendarWeekHeader.js} +4 -3
  106. package/dist-es/calendar/CalendarWeekHeader.js.map +1 -0
  107. package/dist-es/calendar/internal/CalendarDay.css.js +1 -1
  108. package/dist-es/calendar/internal/CalendarMonth.js.map +1 -1
  109. package/dist-es/calendar/useCalendar.js +2 -4
  110. package/dist-es/calendar/useCalendar.js.map +1 -1
  111. package/dist-es/calendar/useCalendarSelection.js +16 -43
  112. package/dist-es/calendar/useCalendarSelection.js.map +1 -1
  113. package/dist-es/carousel/Carousel.js +6 -6
  114. package/dist-es/carousel/Carousel.js.map +1 -1
  115. package/dist-es/cascading-menu/CascadingMenuItem.js +3 -3
  116. package/dist-es/cascading-menu/CascadingMenuItem.js.map +1 -1
  117. package/dist-es/contact-details/ContactMetadata.js +3 -3
  118. package/dist-es/contact-details/ContactMetadata.js.map +1 -1
  119. package/dist-es/date-input/DateInputRange.js +2 -0
  120. package/dist-es/date-input/DateInputRange.js.map +1 -1
  121. package/dist-es/date-input/DateInputSingle.js +2 -0
  122. package/dist-es/date-input/DateInputSingle.js.map +1 -1
  123. package/dist-es/date-picker/DatePicker.js +40 -5
  124. package/dist-es/date-picker/DatePicker.js.map +1 -1
  125. package/dist-es/date-picker/DatePickerActions.js +7 -3
  126. package/dist-es/date-picker/DatePickerActions.js.map +1 -1
  127. package/dist-es/date-picker/DatePickerRangeInput.js +5 -4
  128. package/dist-es/date-picker/DatePickerRangeInput.js.map +1 -1
  129. package/dist-es/date-picker/DatePickerRangePanel.js +33 -9
  130. package/dist-es/date-picker/DatePickerRangePanel.js.map +1 -1
  131. package/dist-es/date-picker/DatePickerSingleInput.js +5 -4
  132. package/dist-es/date-picker/DatePickerSingleInput.js.map +1 -1
  133. package/dist-es/date-picker/DatePickerSinglePanel.js +19 -5
  134. package/dist-es/date-picker/DatePickerSinglePanel.js.map +1 -1
  135. package/dist-es/date-picker/useDatePicker.js +92 -64
  136. package/dist-es/date-picker/useDatePicker.js.map +1 -1
  137. package/dist-es/dropdown/DropdownButton.js +6 -4
  138. package/dist-es/dropdown/DropdownButton.js.map +1 -1
  139. package/dist-es/index.js +5 -0
  140. package/dist-es/index.js.map +1 -1
  141. package/dist-es/menu-button/MenuButtonTrigger.js +3 -3
  142. package/dist-es/menu-button/MenuButtonTrigger.js.map +1 -1
  143. package/dist-es/query-input/internal/CategoryListItem.js +3 -3
  144. package/dist-es/query-input/internal/CategoryListItem.js.map +1 -1
  145. package/dist-es/query-input/internal/ValueList.js +3 -3
  146. package/dist-es/query-input/internal/ValueList.js.map +1 -1
  147. package/dist-es/search-input/SearchInput.js +3 -2
  148. package/dist-es/search-input/SearchInput.js.map +1 -1
  149. package/dist-es/static-list/StaticList.css.js +4 -0
  150. package/dist-es/static-list/StaticList.css.js.map +1 -0
  151. package/dist-es/static-list/StaticList.js +28 -0
  152. package/dist-es/static-list/StaticList.js.map +1 -0
  153. package/dist-es/static-list/StaticListItem.css.js +4 -0
  154. package/dist-es/static-list/StaticListItem.css.js.map +1 -0
  155. package/dist-es/static-list/StaticListItem.js +29 -0
  156. package/dist-es/static-list/StaticListItem.js.map +1 -0
  157. package/dist-es/static-list/StaticListItemContent.css.js +4 -0
  158. package/dist-es/static-list/StaticListItemContent.css.js.map +1 -0
  159. package/dist-es/static-list/StaticListItemContent.js +26 -0
  160. package/dist-es/static-list/StaticListItemContent.js.map +1 -0
  161. package/dist-es/stepped-tracker/TrackerStep/TrackerStep.js +9 -9
  162. package/dist-es/stepped-tracker/TrackerStep/TrackerStep.js.map +1 -1
  163. package/dist-es/stepper-input/StepperInput.css.js +1 -1
  164. package/dist-es/stepper-input/StepperInput.js +216 -31
  165. package/dist-es/stepper-input/StepperInput.js.map +1 -1
  166. package/dist-es/stepper-input/internal/useActivateWhileMouseDown.js +50 -0
  167. package/dist-es/stepper-input/internal/useActivateWhileMouseDown.js.map +1 -0
  168. package/dist-es/stepper-input/internal/utils.js +32 -0
  169. package/dist-es/stepper-input/internal/utils.js.map +1 -0
  170. package/dist-es/stepper-input/useStepperInput.js +88 -172
  171. package/dist-es/stepper-input/useStepperInput.js.map +1 -1
  172. package/dist-es/tabs/Tab.js +15 -13
  173. package/dist-es/tabs/Tab.js.map +1 -1
  174. package/dist-es/tabs/Tabstrip.js +4 -3
  175. package/dist-es/tabs/Tabstrip.js.map +1 -1
  176. package/dist-es/tabs-next/OverflowMenu.js +3 -3
  177. package/dist-es/tabs-next/OverflowMenu.js.map +1 -1
  178. package/dist-es/tokenized-input/TokenizedInputBase.js +3 -3
  179. package/dist-es/tokenized-input/TokenizedInputBase.js.map +1 -1
  180. package/dist-es/tokenized-input/internal/InputPill.js +2 -2
  181. package/dist-es/tokenized-input/internal/InputPill.js.map +1 -1
  182. package/dist-es/tokenized-input-next/TokenizedInputNext.js +3 -3
  183. package/dist-es/tokenized-input-next/TokenizedInputNext.js.map +1 -1
  184. package/dist-es/tokenized-input-next/internal/InputPill.js +2 -2
  185. package/dist-es/tokenized-input-next/internal/InputPill.js.map +1 -1
  186. package/dist-es/toolbar/overflow-panel/OverflowPanel.js +3 -3
  187. package/dist-es/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
  188. package/dist-types/calendar/Calendar.d.ts +2 -15
  189. package/dist-types/calendar/CalendarDateGrid.d.ts +10 -0
  190. package/dist-types/calendar/{internal/CalendarWeekHeader.d.ts → CalendarWeekHeader.d.ts} +1 -1
  191. package/dist-types/calendar/index.d.ts +2 -0
  192. package/dist-types/calendar/internal/CalendarMonth.d.ts +9 -1
  193. package/dist-types/calendar/useCalendarSelection.d.ts +0 -7
  194. package/dist-types/date-picker/DatePickerRangePanel.d.ts +17 -1
  195. package/dist-types/date-picker/DatePickerSinglePanel.d.ts +9 -1
  196. package/dist-types/index.d.ts +1 -0
  197. package/dist-types/static-list/StaticList.d.ts +8 -0
  198. package/dist-types/static-list/StaticListItem.d.ts +4 -0
  199. package/dist-types/static-list/StaticListItemContent.d.ts +8 -0
  200. package/dist-types/static-list/index.d.ts +3 -0
  201. package/dist-types/stepper-input/StepperInput.d.ts +66 -19
  202. package/dist-types/stepper-input/internal/useActivateWhileMouseDown.d.ts +5 -0
  203. package/dist-types/stepper-input/internal/utils.d.ts +8 -0
  204. package/dist-types/stepper-input/useStepperInput.d.ts +21 -8
  205. package/package.json +2 -2
  206. package/dist-cjs/calendar/internal/CalendarCarousel.css.js +0 -6
  207. package/dist-cjs/calendar/internal/CalendarCarousel.css.js.map +0 -1
  208. package/dist-cjs/calendar/internal/CalendarCarousel.js.map +0 -1
  209. package/dist-cjs/calendar/internal/CalendarWeekHeader.js.map +0 -1
  210. package/dist-cjs/stepper-input/internal/useSpinner.js +0 -33
  211. package/dist-cjs/stepper-input/internal/useSpinner.js.map +0 -1
  212. package/dist-es/calendar/internal/CalendarCarousel.css.js +0 -4
  213. package/dist-es/calendar/internal/CalendarCarousel.css.js.map +0 -1
  214. package/dist-es/calendar/internal/CalendarCarousel.js.map +0 -1
  215. package/dist-es/calendar/internal/CalendarWeekHeader.js.map +0 -1
  216. package/dist-es/stepper-input/internal/useSpinner.js +0 -29
  217. package/dist-es/stepper-input/internal/useSpinner.js.map +0 -1
  218. package/dist-types/calendar/internal/CalendarCarousel.d.ts +0 -3
  219. package/dist-types/stepper-input/internal/useSpinner.d.ts +0 -5
  220. /package/dist-cjs/calendar/{internal/CalendarWeekHeader.css.js → CalendarWeekHeader.css.js} +0 -0
  221. /package/dist-cjs/calendar/{internal/CalendarWeekHeader.css.js.map → CalendarWeekHeader.css.js.map} +0 -0
  222. /package/dist-es/calendar/{internal/CalendarWeekHeader.css.js → CalendarWeekHeader.css.js} +0 -0
  223. /package/dist-es/calendar/{internal/CalendarWeekHeader.css.js.map → CalendarWeekHeader.css.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ValueList.js","sources":["../src/query-input/internal/ValueList.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { ChevronLeftIcon } from \"@salt-ds/icons\";\nimport type { Dispatch, ReactElement, SetStateAction } from \"react\";\nimport type { SelectHandler } from \"../../common-hooks\";\nimport { List, ListItem } from \"../../list\";\nimport type { QueryInputCategory } from \"../queryInputTypes\";\n\nconst withBaseName = makePrefixer(\"saltQueryInputValueList\");\n\nexport interface ValueListProps {\n category: QueryInputCategory | null;\n rootWidth: number;\n onBack: () => void;\n selectedValues: string[];\n onValueToggle: (category: QueryInputCategory, value: string) => void;\n highlightedValueIndex?: number;\n setHighlightedValueIndex: Dispatch<SetStateAction<number>>;\n}\n\nexport function ValueList(props: ValueListProps) {\n const {\n category,\n rootWidth,\n onBack,\n selectedValues,\n onValueToggle,\n highlightedValueIndex,\n setHighlightedValueIndex,\n } = props;\n\n const handleSelect: SelectHandler = (_, value: string) => {\n onValueToggle(category!, value);\n };\n\n const items: ReactElement[] = category\n ? category.values.map((value) => (\n <ListItem key={value} item={value}>\n {value}\n </ListItem>\n ))\n : [];\n\n return (\n <div className={withBaseName()} tabIndex={0} data-testid=\"value-list\">\n <List\n borderless={true}\n checkable={false}\n highlightedIndex={highlightedValueIndex}\n onHighlight={setHighlightedValueIndex}\n onSelect={handleSelect}\n selectionStrategy=\"multiple\"\n selected={selectedValues}\n width={rootWidth}\n >\n <ListItem\n className={withBaseName(\"back\")}\n onClick={onBack}\n selectable={false}\n >\n <ChevronLeftIcon />\n <div className={withBaseName(\"category\")}>\n {category ? category.name : \"\"}\n </div>\n </ListItem>\n {items}\n </List>\n </div>\n );\n}\n"],"names":["makePrefixer","jsx","ListItem","jsxs","List","ChevronLeftIcon"],"mappings":";;;;;;;;;;;;;;;;AAOA,MAAM,YAAA,GAAeA,kBAAa,yBAAyB,CAAA,CAAA;AAYpD,SAAS,UAAU,KAAuB,EAAA;AAC/C,EAAM,MAAA;AAAA,IACJ,QAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA;AAAA,IACA,qBAAA;AAAA,IACA,wBAAA;AAAA,GACE,GAAA,KAAA,CAAA;AAEJ,EAAM,MAAA,YAAA,GAA8B,CAAC,CAAA,EAAG,KAAkB,KAAA;AACxD,IAAA,aAAA,CAAc,UAAW,KAAK,CAAA,CAAA;AAAA,GAChC,CAAA;AAEA,EAAA,MAAM,QAAwB,QAC1B,GAAA,QAAA,CAAS,OAAO,GAAI,CAAA,CAAC,0BAClBC,cAAA,CAAAC,iBAAA,EAAA;AAAA,IAAqB,IAAM,EAAA,KAAA;AAAA,IACzB,QAAA,EAAA,KAAA;AAAA,GADY,EAAA,KAEf,CACD,CAAA,GACD,EAAC,CAAA;AAEL,EAAA,uBACGD,cAAA,CAAA,KAAA,EAAA;AAAA,IAAI,WAAW,YAAa,EAAA;AAAA,IAAG,QAAU,EAAA,CAAA;AAAA,IAAG,aAAY,EAAA,YAAA;AAAA,IACvD,QAAC,kBAAAE,eAAA,CAAAC,SAAA,EAAA;AAAA,MACC,UAAY,EAAA,IAAA;AAAA,MACZ,SAAW,EAAA,KAAA;AAAA,MACX,gBAAkB,EAAA,qBAAA;AAAA,MAClB,WAAa,EAAA,wBAAA;AAAA,MACb,QAAU,EAAA,YAAA;AAAA,MACV,iBAAkB,EAAA,UAAA;AAAA,MAClB,QAAU,EAAA,cAAA;AAAA,MACV,KAAO,EAAA,SAAA;AAAA,MAEP,QAAA,EAAA;AAAA,wBAACD,eAAA,CAAAD,iBAAA,EAAA;AAAA,UACC,SAAA,EAAW,aAAa,MAAM,CAAA;AAAA,UAC9B,OAAS,EAAA,MAAA;AAAA,UACT,UAAY,EAAA,KAAA;AAAA,UAEZ,QAAA,EAAA;AAAA,4BAAAD,cAAA,CAACI,qBAAgB,EAAA,EAAA,CAAA;AAAA,4BAChBJ,cAAA,CAAA,KAAA,EAAA;AAAA,cAAI,SAAA,EAAW,aAAa,UAAU,CAAA;AAAA,cACpC,QAAA,EAAA,QAAA,GAAW,SAAS,IAAO,GAAA,EAAA;AAAA,aAC9B,CAAA;AAAA,WAAA;AAAA,SACF,CAAA;AAAA,QACC,KAAA;AAAA,OAAA;AAAA,KACH,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"ValueList.js","sources":["../src/query-input/internal/ValueList.tsx"],"sourcesContent":["import { makePrefixer, useIcon } from \"@salt-ds/core\";\nimport type { Dispatch, ReactElement, SetStateAction } from \"react\";\nimport type { SelectHandler } from \"../../common-hooks\";\nimport { List, ListItem } from \"../../list\";\nimport type { QueryInputCategory } from \"../queryInputTypes\";\n\nconst withBaseName = makePrefixer(\"saltQueryInputValueList\");\n\nexport interface ValueListProps {\n category: QueryInputCategory | null;\n rootWidth: number;\n onBack: () => void;\n selectedValues: string[];\n onValueToggle: (category: QueryInputCategory, value: string) => void;\n highlightedValueIndex?: number;\n setHighlightedValueIndex: Dispatch<SetStateAction<number>>;\n}\n\nexport function ValueList(props: ValueListProps) {\n const {\n category,\n rootWidth,\n onBack,\n selectedValues,\n onValueToggle,\n highlightedValueIndex,\n setHighlightedValueIndex,\n } = props;\n const { PreviousIcon } = useIcon();\n\n const handleSelect: SelectHandler = (_, value: string) => {\n onValueToggle(category!, value);\n };\n\n const items: ReactElement[] = category\n ? category.values.map((value) => (\n <ListItem key={value} item={value}>\n {value}\n </ListItem>\n ))\n : [];\n\n return (\n <div className={withBaseName()} tabIndex={0} data-testid=\"value-list\">\n <List\n borderless={true}\n checkable={false}\n highlightedIndex={highlightedValueIndex}\n onHighlight={setHighlightedValueIndex}\n onSelect={handleSelect}\n selectionStrategy=\"multiple\"\n selected={selectedValues}\n width={rootWidth}\n >\n <ListItem\n className={withBaseName(\"back\")}\n onClick={onBack}\n selectable={false}\n >\n <PreviousIcon />\n <div className={withBaseName(\"category\")}>\n {category ? category.name : \"\"}\n </div>\n </ListItem>\n {items}\n </List>\n </div>\n );\n}\n"],"names":["makePrefixer","useIcon","jsx","ListItem","jsxs","List"],"mappings":";;;;;;;;;;;;;;;AAMA,MAAM,YAAA,GAAeA,kBAAa,yBAAyB,CAAA,CAAA;AAYpD,SAAS,UAAU,KAAuB,EAAA;AAC/C,EAAM,MAAA;AAAA,IACJ,QAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA;AAAA,IACA,qBAAA;AAAA,IACA,wBAAA;AAAA,GACE,GAAA,KAAA,CAAA;AACJ,EAAM,MAAA,EAAE,YAAa,EAAA,GAAIC,YAAQ,EAAA,CAAA;AAEjC,EAAM,MAAA,YAAA,GAA8B,CAAC,CAAA,EAAG,KAAkB,KAAA;AACxD,IAAA,aAAA,CAAc,UAAW,KAAK,CAAA,CAAA;AAAA,GAChC,CAAA;AAEA,EAAA,MAAM,QAAwB,QAC1B,GAAA,QAAA,CAAS,OAAO,GAAI,CAAA,CAAC,0BAClBC,cAAA,CAAAC,iBAAA,EAAA;AAAA,IAAqB,IAAM,EAAA,KAAA;AAAA,IACzB,QAAA,EAAA,KAAA;AAAA,GADY,EAAA,KAEf,CACD,CAAA,GACD,EAAC,CAAA;AAEL,EAAA,uBACGD,cAAA,CAAA,KAAA,EAAA;AAAA,IAAI,WAAW,YAAa,EAAA;AAAA,IAAG,QAAU,EAAA,CAAA;AAAA,IAAG,aAAY,EAAA,YAAA;AAAA,IACvD,QAAC,kBAAAE,eAAA,CAAAC,SAAA,EAAA;AAAA,MACC,UAAY,EAAA,IAAA;AAAA,MACZ,SAAW,EAAA,KAAA;AAAA,MACX,gBAAkB,EAAA,qBAAA;AAAA,MAClB,WAAa,EAAA,wBAAA;AAAA,MACb,QAAU,EAAA,YAAA;AAAA,MACV,iBAAkB,EAAA,UAAA;AAAA,MAClB,QAAU,EAAA,cAAA;AAAA,MACV,KAAO,EAAA,SAAA;AAAA,MAEP,QAAA,EAAA;AAAA,wBAACD,eAAA,CAAAD,iBAAA,EAAA;AAAA,UACC,SAAA,EAAW,aAAa,MAAM,CAAA;AAAA,UAC9B,OAAS,EAAA,MAAA;AAAA,UACT,UAAY,EAAA,KAAA;AAAA,UAEZ,QAAA,EAAA;AAAA,4BAAAD,cAAA,CAAC,YAAa,EAAA,EAAA,CAAA;AAAA,4BACbA,cAAA,CAAA,KAAA,EAAA;AAAA,cAAI,SAAA,EAAW,aAAa,UAAU,CAAA;AAAA,cACpC,QAAA,EAAA,QAAA,GAAW,SAAS,IAAO,GAAA,EAAA;AAAA,aAC9B,CAAA;AAAA,WAAA;AAAA,SACF,CAAA;AAAA,QACC,KAAA;AAAA,OAAA;AAAA,KACH,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
@@ -32,6 +32,7 @@ const SearchInput = react.forwardRef(
32
32
  css: SearchInput$1,
33
33
  window: targetWindow
34
34
  });
35
+ const { CloseIcon } = core.useIcon();
35
36
  const inputRef = react.useRef(null);
36
37
  const handleRef = core.useForkRef(inputRef, ref);
37
38
  const [value, setValue, isControlled] = core.useControlled({
@@ -66,7 +67,7 @@ const SearchInput = react.forwardRef(
66
67
  className: clsx.clsx(`${baseName}-clearButton`),
67
68
  onClick: handleClear,
68
69
  variant: "secondary",
69
- children: /* @__PURE__ */ jsxRuntime.jsx(icons.CloseIcon, {
70
+ children: /* @__PURE__ */ jsxRuntime.jsx(CloseIcon, {
70
71
  "aria-label": "clear input",
71
72
  className: `${baseName}-clearIcon`
72
73
  })
@@ -1 +1 @@
1
- {"version":3,"file":"SearchInput.js","sources":["../src/search-input/SearchInput.tsx"],"sourcesContent":["import { Button, useControlled, useForkRef } from \"@salt-ds/core\";\nimport { CloseIcon, SearchIcon } from \"@salt-ds/icons\";\nimport { clsx } from \"clsx\";\nimport {\n type ChangeEvent,\n type ComponentType,\n type KeyboardEvent,\n type SyntheticEvent,\n forwardRef,\n useRef,\n} from \"react\";\nimport {\n InputLegacy as Input,\n type InputLegacyProps as InputProps,\n StaticInputAdornment,\n} from \"../input-legacy\";\n\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport searchInputCss from \"./SearchInput.css\";\n\nconst baseName = \"saltSearchInput\";\n\n//TODO formfield integration\n\nexport interface SearchInputProps extends Omit<InputProps, \"onSubmit\"> {\n /**\n * Override \"search\" icon.\n * Set to `null` to hide.\n */\n IconComponent?: ComponentType<any> | null;\n /**\n * Callback for when clear button is clicked.\n */\n onClear?: () => void;\n /**\n * Callback for change event.\n * Event is either an Input change event or a Button click event.\n */\n onChange?: (event: SyntheticEvent<unknown>, value: string) => void;\n /**\n * Callback to trigger search.\n */\n onSubmit?: (value: InputProps[\"value\"]) => void;\n}\n\nexport const SearchInput = forwardRef<HTMLInputElement, SearchInputProps>(\n function SearchInput(\n {\n IconComponent = SearchIcon,\n className,\n onChange,\n onClear,\n onKeyUp,\n onSubmit,\n value: valueProp,\n defaultValue,\n ...other\n },\n ref,\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-search-input\",\n css: searchInputCss,\n window: targetWindow,\n });\n\n const inputRef = useRef<HTMLInputElement>(null);\n const handleRef = useForkRef(inputRef, ref);\n\n const [value, setValue, isControlled] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"SearchInput\",\n state: \"value\",\n });\n\n const handleChange = (\n event: ChangeEvent<HTMLInputElement>,\n newValue: string,\n ) => {\n setValue(newValue);\n onChange?.(event, newValue);\n };\n\n const handleClear = (event: SyntheticEvent<HTMLButtonElement>) => {\n setValue(\"\");\n if (!isControlled) {\n onChange?.(event, \"\");\n }\n onClear?.();\n inputRef.current?.focus();\n };\n\n const handleKeyUp = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\" && onSubmit && value) {\n onSubmit?.(value);\n }\n\n onKeyUp?.(event);\n };\n\n return (\n <Input\n className={clsx(baseName, className)}\n ref={handleRef}\n endAdornment={\n !!value && (\n <Button\n className={clsx(`${baseName}-clearButton`)}\n onClick={handleClear}\n variant=\"secondary\"\n >\n <CloseIcon\n aria-label=\"clear input\"\n className={`${baseName}-clearIcon`}\n />\n </Button>\n )\n }\n onChange={handleChange}\n onKeyUp={handleKeyUp}\n startAdornment={\n IconComponent && (\n <StaticInputAdornment>\n <IconComponent className={`${baseName}-icon`} />\n </StaticInputAdornment>\n )\n }\n value={value || \"\"}\n {...other}\n />\n );\n },\n);\n"],"names":["forwardRef","SearchInput","SearchIcon","useWindow","useComponentCssInjection","searchInputCss","useRef","useForkRef","useControlled","jsx","Input","clsx","Button","CloseIcon","StaticInputAdornment"],"mappings":"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"}
1
+ {"version":3,"file":"SearchInput.js","sources":["../src/search-input/SearchInput.tsx"],"sourcesContent":["import { Button, useControlled, useForkRef, useIcon } from \"@salt-ds/core\";\nimport { SearchIcon } from \"@salt-ds/icons\";\nimport { clsx } from \"clsx\";\nimport {\n type ChangeEvent,\n type ComponentType,\n type KeyboardEvent,\n type SyntheticEvent,\n forwardRef,\n useRef,\n} from \"react\";\nimport {\n InputLegacy as Input,\n type InputLegacyProps as InputProps,\n StaticInputAdornment,\n} from \"../input-legacy\";\n\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport searchInputCss from \"./SearchInput.css\";\n\nconst baseName = \"saltSearchInput\";\n\n//TODO formfield integration\n\nexport interface SearchInputProps extends Omit<InputProps, \"onSubmit\"> {\n /**\n * Override \"search\" icon.\n * Set to `null` to hide.\n */\n IconComponent?: ComponentType<any> | null;\n /**\n * Callback for when clear button is clicked.\n */\n onClear?: () => void;\n /**\n * Callback for change event.\n * Event is either an Input change event or a Button click event.\n */\n onChange?: (event: SyntheticEvent<unknown>, value: string) => void;\n /**\n * Callback to trigger search.\n */\n onSubmit?: (value: InputProps[\"value\"]) => void;\n}\n\nexport const SearchInput = forwardRef<HTMLInputElement, SearchInputProps>(\n function SearchInput(\n {\n IconComponent = SearchIcon,\n className,\n onChange,\n onClear,\n onKeyUp,\n onSubmit,\n value: valueProp,\n defaultValue,\n ...other\n },\n ref,\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-search-input\",\n css: searchInputCss,\n window: targetWindow,\n });\n const { CloseIcon } = useIcon();\n const inputRef = useRef<HTMLInputElement>(null);\n const handleRef = useForkRef(inputRef, ref);\n\n const [value, setValue, isControlled] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"SearchInput\",\n state: \"value\",\n });\n\n const handleChange = (\n event: ChangeEvent<HTMLInputElement>,\n newValue: string,\n ) => {\n setValue(newValue);\n onChange?.(event, newValue);\n };\n\n const handleClear = (event: SyntheticEvent<HTMLButtonElement>) => {\n setValue(\"\");\n if (!isControlled) {\n onChange?.(event, \"\");\n }\n onClear?.();\n inputRef.current?.focus();\n };\n\n const handleKeyUp = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\" && onSubmit && value) {\n onSubmit?.(value);\n }\n\n onKeyUp?.(event);\n };\n\n return (\n <Input\n className={clsx(baseName, className)}\n ref={handleRef}\n endAdornment={\n !!value && (\n <Button\n className={clsx(`${baseName}-clearButton`)}\n onClick={handleClear}\n variant=\"secondary\"\n >\n <CloseIcon\n aria-label=\"clear input\"\n className={`${baseName}-clearIcon`}\n />\n </Button>\n )\n }\n onChange={handleChange}\n onKeyUp={handleKeyUp}\n startAdornment={\n IconComponent && (\n <StaticInputAdornment>\n <IconComponent className={`${baseName}-icon`} />\n </StaticInputAdornment>\n )\n }\n value={value || \"\"}\n {...other}\n />\n );\n },\n);\n"],"names":["forwardRef","SearchInput","SearchIcon","useWindow","useComponentCssInjection","searchInputCss","useIcon","useRef","useForkRef","useControlled","jsx","Input","clsx","Button","StaticInputAdornment"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var css_248z = ".saltStaticList {\n overflow-y: auto;\n}\n";
4
+
5
+ module.exports = css_248z;
6
+ //# sourceMappingURL=StaticList.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StaticList.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,32 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var core = require('@salt-ds/core');
7
+ var styles = require('@salt-ds/styles');
8
+ var window = require('@salt-ds/window');
9
+ var clsx = require('clsx');
10
+ var react = require('react');
11
+ var StaticList$1 = require('./StaticList.css.js');
12
+
13
+ const withBaseName = core.makePrefixer("saltStaticList");
14
+ const StaticList = react.forwardRef(
15
+ function StaticList2({ children, className, ...rest }, ref) {
16
+ const targetWindow = window.useWindow();
17
+ styles.useComponentCssInjection({
18
+ testId: "salt-static-list",
19
+ css: StaticList$1,
20
+ window: targetWindow
21
+ });
22
+ return /* @__PURE__ */ jsxRuntime.jsx("ol", {
23
+ className: clsx.clsx(withBaseName(), className),
24
+ ref,
25
+ ...rest,
26
+ children
27
+ });
28
+ }
29
+ );
30
+
31
+ exports.StaticList = StaticList;
32
+ //# sourceMappingURL=StaticList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StaticList.js","sources":["../src/static-list/StaticList.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n type ReactNode,\n forwardRef,\n} from \"react\";\n\nimport staticListCss from \"./StaticList.css\";\n\nconst withBaseName = makePrefixer(\"saltStaticList\");\n\nexport interface StaticListProps extends ComponentPropsWithoutRef<\"ul\"> {\n /**\n * The list items to be rendered within the StaticList.\n */\n children: ReactNode;\n}\n\nexport const StaticList = forwardRef<HTMLOListElement, StaticListProps>(\n function StaticList({ children, className, ...rest }, ref) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-static-list\",\n css: staticListCss,\n window: targetWindow,\n });\n\n return (\n <ol className={clsx(withBaseName(), className)} ref={ref} {...rest}>\n {children}\n </ol>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","StaticList","useWindow","useComponentCssInjection","staticListCss","jsx","clsx"],"mappings":";;;;;;;;;;;;AAYA,MAAM,YAAA,GAAeA,kBAAa,gBAAgB,CAAA,CAAA;AAS3C,MAAM,UAAa,GAAAC,gBAAA;AAAA,EACxB,SAASC,WAAW,CAAA,EAAE,UAAU,SAAc,EAAA,GAAA,IAAA,IAAQ,GAAK,EAAA;AACzD,IAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,kBAAA;AAAA,MACR,GAAK,EAAAC,YAAA;AAAA,MACL,MAAQ,EAAA,YAAA;AAAA,KACT,CAAA,CAAA;AAED,IAAA,uBACGC,cAAA,CAAA,IAAA,EAAA;AAAA,MAAG,SAAW,EAAAC,SAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,MAAG,GAAA;AAAA,MAAW,GAAG,IAAA;AAAA,MAC3D,QAAA;AAAA,KACH,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var css_248z = ".saltStaticListItem {\n list-style-type: none;\n display: flex;\n gap: var(--salt-spacing-100);\n box-sizing: border-box;\n padding: var(--salt-spacing-50) var(--salt-spacing-100);\n min-height: calc(var(--salt-size-base) + var(--salt-spacing-100));\n}\n\n.saltStaticListItem > .saltIcon {\n /* Workaround to ensure the icon and button are aligned.*/\n min-height: var(--salt-size-base);\n}\n";
4
+
5
+ module.exports = css_248z;
6
+ //# sourceMappingURL=StaticListItem.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StaticListItem.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,33 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var core = require('@salt-ds/core');
7
+ var styles = require('@salt-ds/styles');
8
+ var window = require('@salt-ds/window');
9
+ var clsx = require('clsx');
10
+ var react = require('react');
11
+ var StaticListItem$1 = require('./StaticListItem.css.js');
12
+
13
+ const withBaseName = core.makePrefixer("saltStaticListItem");
14
+ const StaticListItem = react.forwardRef(
15
+ function StaticListItem2(props, ref) {
16
+ const { className, children, ...restProps } = props;
17
+ const targetWindow = window.useWindow();
18
+ styles.useComponentCssInjection({
19
+ testId: "salt-static-list-item",
20
+ css: StaticListItem$1,
21
+ window: targetWindow
22
+ });
23
+ return /* @__PURE__ */ jsxRuntime.jsx("li", {
24
+ className: clsx.clsx(withBaseName(), className),
25
+ ref,
26
+ ...restProps,
27
+ children
28
+ });
29
+ }
30
+ );
31
+
32
+ exports.StaticListItem = StaticListItem;
33
+ //# sourceMappingURL=StaticListItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StaticListItem.js","sources":["../src/static-list/StaticListItem.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { type ComponentPropsWithoutRef, forwardRef } from \"react\";\n\nimport staticListItemCss from \"./StaticListItem.css\";\n\nconst withBaseName = makePrefixer(\"saltStaticListItem\");\n\nexport interface StaticListItemProps extends ComponentPropsWithoutRef<\"li\"> {}\n\nexport const StaticListItem = forwardRef<HTMLLIElement, StaticListItemProps>(\n function StaticListItem(props, ref) {\n const { className, children, ...restProps } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-static-list-item\",\n css: staticListItemCss,\n window: targetWindow,\n });\n\n return (\n <li className={clsx(withBaseName(), className)} ref={ref} {...restProps}>\n {children}\n </li>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","StaticListItem","useWindow","useComponentCssInjection","staticListItemCss","jsx","clsx"],"mappings":";;;;;;;;;;;;AAQA,MAAM,YAAA,GAAeA,kBAAa,oBAAoB,CAAA,CAAA;AAI/C,MAAM,cAAiB,GAAAC,gBAAA;AAAA,EAC5B,SAASC,eAAe,CAAA,KAAA,EAAO,GAAK,EAAA;AAClC,IAAA,MAAM,EAAE,SAAA,EAAW,QAAa,EAAA,GAAA,SAAA,EAAc,GAAA,KAAA,CAAA;AAE9C,IAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,uBAAA;AAAA,MACR,GAAK,EAAAC,gBAAA;AAAA,MACL,MAAQ,EAAA,YAAA;AAAA,KACT,CAAA,CAAA;AAED,IAAA,uBACGC,cAAA,CAAA,IAAA,EAAA;AAAA,MAAG,SAAW,EAAAC,SAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,MAAG,GAAA;AAAA,MAAW,GAAG,SAAA;AAAA,MAC3D,QAAA;AAAA,KACH,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var css_248z = ".saltStaticListItemContent {\n flex: 1 0;\n margin: var(--salt-spacing-75) 0;\n color: var(--salt-content-primary-foreground);\n font-size: var(--salt-text-fontSize);\n font-weight: var(--salt-text-fontWeight);\n font-family: var(--salt-text-fontFamily);\n line-height: var(--salt-text-lineHeight);\n letter-spacing: var(--salt-text-letterSpacing);\n}\n";
4
+
5
+ module.exports = css_248z;
6
+ //# sourceMappingURL=StaticListItemContent.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StaticListItemContent.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,30 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var core = require('@salt-ds/core');
7
+ var styles = require('@salt-ds/styles');
8
+ var window = require('@salt-ds/window');
9
+ var clsx = require('clsx');
10
+ var react = require('react');
11
+ var StaticListItemContent$1 = require('./StaticListItemContent.css.js');
12
+
13
+ const withBaseName = core.makePrefixer("saltStaticListItemContent");
14
+ const StaticListItemContent = react.forwardRef(function StaticListItemContent2({ children, className, ...restProps }, ref) {
15
+ const targetWindow = window.useWindow();
16
+ styles.useComponentCssInjection({
17
+ testId: "salt-static-list-item-content",
18
+ css: StaticListItemContent$1,
19
+ window: targetWindow
20
+ });
21
+ return /* @__PURE__ */ jsxRuntime.jsx("div", {
22
+ className: clsx.clsx(withBaseName(), className),
23
+ ...restProps,
24
+ ref,
25
+ children
26
+ });
27
+ });
28
+
29
+ exports.StaticListItemContent = StaticListItemContent;
30
+ //# sourceMappingURL=StaticListItemContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StaticListItemContent.js","sources":["../src/static-list/StaticListItemContent.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n type ForwardedRef,\n type ReactNode,\n forwardRef,\n} from \"react\";\nimport staticListItemContent from \"./StaticListItemContent.css\";\n\nconst withBaseName = makePrefixer(\"saltStaticListItemContent\");\n\nexport interface StaticListItemContentProps\n extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * The content of Static List Item\n */\n children?: ReactNode;\n}\n\nexport const StaticListItemContent = forwardRef<\n HTMLDivElement,\n StaticListItemContentProps\n>(function StaticListItemContent({ children, className, ...restProps }, ref) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-static-list-item-content\",\n css: staticListItemContent,\n window: targetWindow,\n });\n\n return (\n <div className={clsx(withBaseName(), className)} {...restProps} ref={ref}>\n {children}\n </div>\n );\n});\n"],"names":["makePrefixer","forwardRef","StaticListItemContent","useWindow","useComponentCssInjection","staticListItemContent","jsx","clsx"],"mappings":";;;;;;;;;;;;AAYA,MAAM,YAAA,GAAeA,kBAAa,2BAA2B,CAAA,CAAA;AAUhD,MAAA,qBAAA,GAAwBC,iBAGnC,SAASC,sBAAAA,CAAsB,EAAE,QAAU,EAAA,SAAA,EAAA,GAAc,SAAU,EAAA,EAAG,GAAK,EAAA;AAC3E,EAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,+BAAA;AAAA,IACR,GAAK,EAAAC,uBAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,uBACGC,cAAA,CAAA,KAAA,EAAA;AAAA,IAAI,SAAW,EAAAC,SAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,IAAI,GAAG,SAAA;AAAA,IAAW,GAAA;AAAA,IAC7D,QAAA;AAAA,GACH,CAAA,CAAA;AAEJ,CAAC;;;;"}
@@ -4,7 +4,6 @@ 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');
@@ -14,13 +13,6 @@ var SteppedTrackerContext = require('../SteppedTrackerContext.js');
14
13
  var TrackerStep$1 = require('./TrackerStep.css.js');
15
14
 
16
15
  const withBaseName = core.makePrefixer("saltTrackerStep");
17
- const iconMap = {
18
- pending: icons.StepDefaultIcon,
19
- active: icons.StepActiveIcon,
20
- completed: icons.StepSuccessIcon,
21
- warning: icons.WarningSolidIcon,
22
- error: icons.ErrorSolidIcon
23
- };
24
16
  const useCheckWithinSteppedTracker = (isWithinSteppedTracker) => {
25
17
  react.useEffect(() => {
26
18
  if (process.env.NODE_ENV !== "production") {
@@ -61,11 +53,19 @@ const TrackerStep = react.forwardRef(
61
53
  css: TrackerStep$1,
62
54
  window: targetWindow
63
55
  });
56
+ const { ErrorIcon, WarningIcon, CompletedIcon, ActiveIcon, PendingIcon } = core.useIcon();
64
57
  const { activeStep, totalSteps, isWithinSteppedTracker } = SteppedTrackerContext.useSteppedTrackerContext();
65
58
  const stepNumber = SteppedTrackerContext.useTrackerStepContext();
66
59
  useCheckWithinSteppedTracker(isWithinSteppedTracker);
67
60
  const isActive = activeStep === stepNumber;
68
61
  const iconName = parseIconName({ stage, status, active: isActive });
62
+ const iconMap = {
63
+ pending: PendingIcon,
64
+ active: ActiveIcon,
65
+ completed: CompletedIcon,
66
+ warning: WarningIcon,
67
+ error: ErrorIcon
68
+ };
69
69
  const Icon = iconMap[iconName];
70
70
  const connectorState = activeStep > stepNumber ? "active" : "default";
71
71
  const hasConnector = stepNumber < totalSteps - 1;
@@ -1 +1 @@
1
- {"version":3,"file":"TrackerStep.js","sources":["../src/stepped-tracker/TrackerStep/TrackerStep.tsx"],"sourcesContent":["import { type ValidationStatus, makePrefixer } from \"@salt-ds/core\";\nimport {\n ErrorSolidIcon,\n StepActiveIcon,\n StepDefaultIcon,\n StepSuccessIcon,\n WarningSolidIcon,\n} from \"@salt-ds/icons\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { type ComponentPropsWithoutRef, forwardRef, useEffect } from \"react\";\nimport { TrackerConnector } from \"../TrackerConnector\";\n\nimport {\n useSteppedTrackerContext,\n useTrackerStepContext,\n} from \"../SteppedTrackerContext\";\n\nimport trackerStepCss from \"./TrackerStep.css\";\n\nconst withBaseName = makePrefixer(\"saltTrackerStep\");\n\ntype StageOptions = \"pending\" | \"completed\";\ntype StatusOptions = Extract<ValidationStatus, \"warning\" | \"error\">;\n\nexport interface TrackerStepProps extends ComponentPropsWithoutRef<\"li\"> {\n /**\n * The stage of the step: \"pending\" or \"completed\" (note, \"active\" is derived from \"activeStep\" in parent SteppedTracker component)\n */\n stage?: StageOptions;\n /**\n * The status of the step: warning or error\n *\n * If the stage is completed or active, the status prop will be ignored\n */\n status?: StatusOptions;\n}\n\nconst iconMap = {\n pending: StepDefaultIcon,\n active: StepActiveIcon,\n completed: StepSuccessIcon,\n warning: WarningSolidIcon,\n error: ErrorSolidIcon,\n};\n\nconst useCheckWithinSteppedTracker = (isWithinSteppedTracker: boolean) => {\n useEffect(() => {\n if (process.env.NODE_ENV !== \"production\") {\n if (!isWithinSteppedTracker) {\n console.error(\n \"The TrackerStep component must be placed within a SteppedTracker component\",\n );\n }\n }\n }, [isWithinSteppedTracker]);\n};\n\nconst parseIconName = ({\n stage,\n status,\n active,\n}: {\n stage: StageOptions;\n status?: StatusOptions;\n active: boolean;\n}) => {\n if (stage === \"completed\") return \"completed\";\n if (active) return \"active\";\n if (status) return status;\n return stage;\n};\n\nexport const TrackerStep = forwardRef<HTMLLIElement, TrackerStepProps>(\n function TrackerStep(props, ref) {\n const {\n stage = \"pending\",\n status,\n style,\n className,\n children,\n ...restProps\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-tracker-step\",\n css: trackerStepCss,\n window: targetWindow,\n });\n\n const { activeStep, totalSteps, isWithinSteppedTracker } =\n useSteppedTrackerContext();\n const stepNumber = useTrackerStepContext();\n\n useCheckWithinSteppedTracker(isWithinSteppedTracker);\n\n const isActive = activeStep === stepNumber;\n const iconName = parseIconName({ stage, status, active: isActive });\n\n const Icon = iconMap[iconName];\n const connectorState = activeStep > stepNumber ? \"active\" : \"default\";\n const hasConnector = stepNumber < totalSteps - 1;\n\n const innerStyle = {\n ...style,\n \"--saltTrackerStep-width\": `${100 / totalSteps}%`,\n };\n\n return (\n <li\n className={clsx(\n withBaseName(),\n withBaseName(`stage-${stage}`),\n withBaseName(`status-${status}`),\n { [withBaseName(\"active\")]: isActive },\n className,\n )}\n style={innerStyle}\n aria-current={isActive ? \"step\" : undefined}\n ref={ref}\n {...restProps}\n >\n <Icon />\n {hasConnector && <TrackerConnector state={connectorState} />}\n <div className={withBaseName(\"body\")}>{children}</div>\n </li>\n );\n },\n);\n"],"names":["makePrefixer","StepDefaultIcon","StepActiveIcon","StepSuccessIcon","WarningSolidIcon","ErrorSolidIcon","useEffect","forwardRef","TrackerStep","useWindow","useComponentCssInjection","trackerStepCss","useSteppedTrackerContext","useTrackerStepContext","jsxs","clsx","jsx","TrackerConnector"],"mappings":"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"}
1
+ {"version":3,"file":"TrackerStep.js","sources":["../src/stepped-tracker/TrackerStep/TrackerStep.tsx"],"sourcesContent":["import { type ValidationStatus, makePrefixer, useIcon } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { type ComponentPropsWithoutRef, forwardRef, useEffect } from \"react\";\nimport { TrackerConnector } from \"../TrackerConnector\";\n\nimport {\n useSteppedTrackerContext,\n useTrackerStepContext,\n} from \"../SteppedTrackerContext\";\n\nimport trackerStepCss from \"./TrackerStep.css\";\n\nconst withBaseName = makePrefixer(\"saltTrackerStep\");\n\ntype StageOptions = \"pending\" | \"completed\";\ntype StatusOptions = Extract<ValidationStatus, \"warning\" | \"error\">;\n\nexport interface TrackerStepProps extends ComponentPropsWithoutRef<\"li\"> {\n /**\n * The stage of the step: \"pending\" or \"completed\" (note, \"active\" is derived from \"activeStep\" in parent SteppedTracker component)\n */\n stage?: StageOptions;\n /**\n * The status of the step: warning or error\n *\n * If the stage is completed or active, the status prop will be ignored\n */\n status?: StatusOptions;\n}\n\nconst useCheckWithinSteppedTracker = (isWithinSteppedTracker: boolean) => {\n useEffect(() => {\n if (process.env.NODE_ENV !== \"production\") {\n if (!isWithinSteppedTracker) {\n console.error(\n \"The TrackerStep component must be placed within a SteppedTracker component\",\n );\n }\n }\n }, [isWithinSteppedTracker]);\n};\n\nconst parseIconName = ({\n stage,\n status,\n active,\n}: {\n stage: StageOptions;\n status?: StatusOptions;\n active: boolean;\n}) => {\n if (stage === \"completed\") return \"completed\";\n if (active) return \"active\";\n if (status) return status;\n return stage;\n};\n\nexport const TrackerStep = forwardRef<HTMLLIElement, TrackerStepProps>(\n function TrackerStep(props, ref) {\n const {\n stage = \"pending\",\n status,\n style,\n className,\n children,\n ...restProps\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-tracker-step\",\n css: trackerStepCss,\n window: targetWindow,\n });\n const { ErrorIcon, WarningIcon, CompletedIcon, ActiveIcon, PendingIcon } =\n useIcon();\n const { activeStep, totalSteps, isWithinSteppedTracker } =\n useSteppedTrackerContext();\n const stepNumber = useTrackerStepContext();\n\n useCheckWithinSteppedTracker(isWithinSteppedTracker);\n\n const isActive = activeStep === stepNumber;\n const iconName = parseIconName({ stage, status, active: isActive });\n const iconMap = {\n pending: PendingIcon,\n active: ActiveIcon,\n completed: CompletedIcon,\n warning: WarningIcon,\n error: ErrorIcon,\n };\n\n const Icon = iconMap[iconName];\n const connectorState = activeStep > stepNumber ? \"active\" : \"default\";\n const hasConnector = stepNumber < totalSteps - 1;\n\n const innerStyle = {\n ...style,\n \"--saltTrackerStep-width\": `${100 / totalSteps}%`,\n };\n\n return (\n <li\n className={clsx(\n withBaseName(),\n withBaseName(`stage-${stage}`),\n withBaseName(`status-${status}`),\n { [withBaseName(\"active\")]: isActive },\n className,\n )}\n style={innerStyle}\n aria-current={isActive ? \"step\" : undefined}\n ref={ref}\n {...restProps}\n >\n <Icon />\n {hasConnector && <TrackerConnector state={connectorState} />}\n <div className={withBaseName(\"body\")}>{children}</div>\n </li>\n );\n },\n);\n"],"names":["makePrefixer","useEffect","forwardRef","TrackerStep","useWindow","useComponentCssInjection","trackerStepCss","useIcon","useSteppedTrackerContext","useTrackerStepContext","jsxs","clsx","jsx","TrackerConnector"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = "/* Styles applied to stepper container */\n.saltStepperInput {\n align-items: center;\n display: flex;\n flex-direction: row;\n gap: var(--salt-spacing-50);\n}\n\n/* Styles applied to stepper buttons container */\n.saltStepperInput-buttonContainer {\n display: flex;\n flex-direction: column;\n gap: var(--salt-spacing-50);\n}\n\n/* Styles applied to stepper buttons */\n.saltStepperInput-stepperButton {\n --saltButton-height: calc((var(--salt-size-base) - var(--salt-spacing-50)) * 0.5);\n --saltButton-width: var(--salt-size-base);\n}\n";
3
+ var css_248z = "/* Styles applied to stepper container */\n.saltStepperInput {\n --stepperInput-border: none;\n --stepperInput-borderColor: var(--salt-editable-borderColor);\n --stepperInput-borderStyle: var(--salt-editable-borderStyle);\n --stepperInput-outlineColor: var(--salt-focused-outlineColor);\n --stepperInput-borderWidth: var(--salt-size-border);\n\n align-items: center;\n color: var(--salt-content-primary-foreground);\n display: inline-flex;\n font-family: var(--salt-text-fontFamily);\n font-size: var(--salt-text-fontSize);\n height: var(--salt-size-base);\n line-height: var(--salt-text-lineHeight);\n min-height: var(--salt-size-base);\n min-width: 4em;\n width: 100%;\n box-sizing: border-box;\n\n gap: var(--salt-spacing-50);\n}\n\n.saltStepperInput:hover {\n --stepperInput-borderStyle: var(--salt-editable-borderStyle-hover);\n --stepperInput-borderColor: var(--salt-editable-borderColor-hover);\n\n background: var(--stepperInput-background-hover);\n cursor: var(--salt-editable-cursor-hover);\n}\n\n.saltStepperInput:active {\n --stepperInput-borderColor: var(--salt-editable-borderColor-active);\n --stepperInput-borderStyle: var(--salt-editable-borderStyle-active);\n --stepperInput-borderWidth: var(--salt-editable-borderWidth-active);\n\n background: var(--stepperInput-background-active);\n cursor: var(--salt-editable-cursor-active);\n}\n\n/* Class applied if `variant=\"primary\"` */\n.saltStepperInput-primary {\n --stepperInput-background: var(--salt-editable-primary-background);\n --stepperInput-background-active: var(--salt-editable-primary-background-active);\n --stepperInput-background-hover: var(--salt-editable-primary-background-hover);\n --stepperInput-background-disabled: var(--salt-editable-primary-background-disabled);\n --stepperInput-background-readonly: var(--salt-editable-primary-background-readonly);\n}\n\n/* Class applied if `variant=\"secondary\"` */\n.saltStepperInput-secondary {\n --stepperInput-background: var(--salt-editable-secondary-background);\n --stepperInput-background-active: var(--salt-editable-secondary-background-active);\n --stepperInput-background-hover: var(--salt-editable-secondary-background-active);\n --stepperInput-background-disabled: var(--salt-editable-secondary-background-disabled);\n --stepperInput-background-readonly: var(--salt-editable-secondary-background-readonly);\n}\n\n/* Style applied to input if `validationState=\"error\"` */\n.saltStepperInput-error,\n.saltStepperInput-error:hover {\n --stepperInput-background: var(--salt-status-error-background);\n --stepperInput-background-active: var(--salt-status-error-background);\n --stepperInput-background-hover: var(--salt-status-error-background);\n --stepperInput-borderColor: var(--salt-status-error-borderColor);\n --stepperInput-outlineColor: var(--salt-status-error-borderColor);\n --stepperInput-background-readonly: var(--salt-status-error-background);\n}\n\n/* Style applied to input if `validationState=\"warning\"` */\n.saltStepperInput-warning,\n.saltStepperInput-warning:hover {\n --stepperInput-background: var(--salt-status-warning-background);\n --stepperInput-background-active: var(--salt-status-warning-background);\n --stepperInput-background-hover: var(--salt-status-warning-background);\n --stepperInput-borderColor: var(--salt-status-warning-borderColor);\n --stepperInput-outlineColor: var(--salt-status-warning-borderColor);\n --stepperInput-background-readonly: var(--salt-status-warning-background);\n}\n\n/* Style applied to input if `validationState=\"success\"` */\n.saltStepperInput-success,\n.saltStepperInput-success:hover {\n --stepperInput-background: var(--salt-status-success-background);\n --stepperInput-background-active: var(--salt-status-success-background);\n --stepperInput-background-hover: var(--salt-status-success-background);\n --stepperInput-borderColor: var(--salt-status-success-borderColor);\n --stepperInput-outlineColor: var(--salt-status-success-borderColor);\n --stepperInput-background-readonly: var(--salt-status-success-background);\n}\n\n.saltStepperInput-inputContainer {\n display: flex;\n background: var(--stepperInput-background);\n border-radius: var(--salt-palette-corner-weak, 0);\n border: var(--stepperInput-border);\n box-sizing: border-box;\n height: var(--salt-size-base);\n min-height: var(--salt-size-base);\n overflow: hidden;\n padding-left: var(--salt-spacing-100);\n padding-right: var(--salt-spacing-100);\n position: relative;\n flex-grow: 1;\n}\n\n/* Style applied to inner input component */\n.saltStepperInput-input {\n background: none;\n border: none;\n box-sizing: content-box;\n color: inherit;\n cursor: inherit;\n display: block;\n flex: 1;\n font: inherit;\n height: 100%;\n letter-spacing: var(--saltStepperInput-letterSpacing, 0);\n margin: 0;\n min-width: 0;\n overflow: hidden;\n padding: 0;\n text-align: var(--stepperInput-textAlign);\n width: 100%;\n}\n\n.saltStepperInput-input:focus {\n outline: none;\n}\n\n/* Style applied to selected input */\n.saltStepperInput-input::selection {\n background: var(--salt-content-foreground-highlight);\n}\n\n/* Style applied to placeholder text */\n.saltStepperInput-input::placeholder {\n color: var(--salt-content-secondary-foreground);\n font-weight: var(--salt-text-fontWeight-small);\n}\n\n/* Styling when focused */\n.saltStepperInput-focused {\n --stepperInput-borderColor: var(--stepperInput-outlineColor);\n --stepperInput-borderWidth: var(--salt-editable-borderWidth-active);\n\n outline: var(--saltStepperInput-outline, var(--salt-focused-outlineWidth) var(--salt-focused-outlineStyle) var(--stepperInput-outlineColor));\n}\n\n/* Style applied if `readOnly={true}` */\n.saltStepperInput-readOnly {\n --stepperInput-borderColor: var(--salt-editable-borderColor-readonly);\n --stepperInput-borderStyle: var(--salt-editable-borderStyle-readonly);\n --stepperInput-borderWidth: var(--salt-size-border);\n\n background: var(--stepperInput-background-readonly);\n cursor: var(--salt-editable-cursor-readonly);\n}\n\n/* Styling when focused if `disabled={true}` */\n.saltStepperInput-focused.saltStepperInput-disabled {\n --stepperInput-borderWidth: var(--salt-size-border);\n outline: none;\n}\n\n/* Styling when focused if `readOnly={true}` */\n.saltStepperInput-focused.saltStepperInput-readOnly {\n --stepperInput-borderWidth: var(--salt-size-border);\n}\n\n/* Style applied to selected input if `disabled={true}` */\n.saltStepperInput-disabled .saltStepperInput-input::selection {\n background: none;\n}\n\n/* Style applied to input if `disabled={true}` */\n.saltStepperInput-disabled,\n.saltStepperInput-disabled:hover,\n.saltStepperInput-disabled:active {\n --stepperInput-borderColor: var(--salt-editable-borderColor-disabled);\n --stepperInput-borderStyle: var(--salt-editable-borderStyle-disabled);\n --stepperInput-borderWidth: var(--salt-size-border);\n\n background: var(--stepperInput-background-disabled);\n cursor: var(--salt-editable-cursor-disabled);\n color: var(--saltStepperInput-color-disabled, var(--salt-content-primary-foreground-disabled));\n}\n\n.saltStepperInput-activationIndicator {\n left: 0;\n bottom: 0;\n width: 100%;\n position: absolute;\n border-bottom: var(--stepperInput-borderWidth) var(--stepperInput-borderStyle) var(--stepperInput-borderColor);\n}\n\n/* Style applied if `bordered={true}` */\n.saltStepperInput-bordered {\n --stepperInput-border: var(--salt-size-border) var(--salt-container-borderStyle) var(--stepperInput-borderColor);\n --stepperInput-borderWidth: 0;\n}\n\n/* Style applied if focused or active when `bordered={true}` */\n.saltStepperInput-bordered.saltStepperInput-focused,\n.saltStepperInput-bordered:active {\n --stepperInput-borderWidth: var(--salt-editable-borderWidth-active);\n}\n\n/* Styling when focused if `disabled={true}` or `readOnly={true}` when `bordered={true}` */\n.saltStepperInput-bordered.saltStepperInput-readOnly,\n.saltStepperInput-bordered.saltStepperInput-disabled:hover {\n --stepperInput-borderWidth: 0;\n}\n\n/* Style applied to start adornments */\n.saltStepperInput-startAdornmentContainer {\n align-items: center;\n display: inline-flex;\n padding-right: var(--salt-spacing-100);\n column-gap: var(--salt-spacing-100);\n}\n\n/* Style applied to end adornments */\n.saltStepperInput-endAdornmentContainer {\n align-items: center;\n display: inline-flex;\n padding-left: var(--salt-spacing-100);\n column-gap: var(--salt-spacing-100);\n}\n\n.saltStepperInput-readOnly .saltStepperInput-startAdornmentContainer {\n margin-left: var(--salt-spacing-50);\n}\n\n.saltStepperInput-startAdornmentContainer .saltButton ~ .saltButton {\n margin-left: calc(-1 * var(--salt-spacing-50));\n}\n\n.saltStepperInput-endAdornmentContainer .saltButton ~ .saltButton {\n margin-left: calc(-1 * var(--salt-spacing-50));\n}\n\n.saltStepperInput-startAdornmentContainer .saltButton:first-child {\n margin-left: calc(var(--salt-spacing-50) * -1);\n}\n\n.saltStepperInput-endAdornmentContainer .saltButton:last-child {\n margin-right: calc(var(--salt-spacing-50) * -1);\n}\n\n.saltStepperInput-startAdornmentContainer > .saltButton,\n.saltStepperInput-endAdornmentContainer > .saltButton {\n --saltButton-padding: calc(var(--salt-spacing-50) - var(--salt-size-border));\n --saltButton-height: calc(var(--salt-size-base) - var(--salt-spacing-100));\n --saltButton-borderRadius: var(--salt-palette-corner-weaker);\n}\n\n.saltStepperInput-inputTextAlignLeft {\n text-align: left;\n}\n\n.saltStepperInput-inputTextAlignCenter {\n text-align: center;\n}\n\n.saltStepperInput-inputTextAlignRight {\n text-align: right;\n}\n\n/* --- Buttons --- */\n\n/* Styles applied to stepper buttons container */\n.saltStepperInput-buttonContainer {\n --stepperInput-buttonGap: var(--salt-size-border-strong);\n display: flex;\n flex-direction: column;\n gap: var(--stepperInput-buttonGap);\n}\n\n/* Styles applied to stepper buttons */\n.saltStepperInput-stepperButton {\n --saltButton-height: calc((var(--salt-size-base) - var(--stepperInput-buttonGap)) * 0.5);\n --saltButton-width: var(--salt-size-base);\n}\n\n.saltStepperInput-stepperButtonIncrement {\n --saltButton-borderRadius: var(--salt-palette-corner-weak, 0) var(--salt-palette-corner-weak, 0) 0 0;\n}\n.saltStepperInput-stepperButtonDecrement {\n --saltButton-borderRadius: 0 0 var(--salt-palette-corner-weak, 0) var(--salt-palette-corner-weak, 0);\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=StepperInput.css.js.map
@@ -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
  })