@salt-ds/lab 1.0.0-alpha.70 → 1.0.0-alpha.71

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 (280) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/css/salt-lab.css +192 -302
  3. package/dist-cjs/app-header/AppHeader.css.js +1 -1
  4. package/dist-cjs/calendar/CalendarWeekHeader.css.js +1 -1
  5. package/dist-cjs/calendar/internal/CalendarDay.css.js +1 -1
  6. package/dist-cjs/calendar/internal/CalendarMonth.css.js +1 -1
  7. package/dist-cjs/cascading-menu/CascadingMenuItem.css.js +1 -1
  8. package/dist-cjs/color-chooser/ColorChooser.css.js +1 -1
  9. package/dist-cjs/color-chooser/ColorPicker.css.js +1 -1
  10. package/dist-cjs/color-chooser/HexInput.css.js +1 -1
  11. package/dist-cjs/color-chooser/RGBAInput.css.js +1 -1
  12. package/dist-cjs/color-chooser/Swatch.css.js +1 -1
  13. package/dist-cjs/combo-box/useCombobox.js.map +1 -1
  14. package/dist-cjs/common-hooks/selectionTypes.js.map +1 -1
  15. package/dist-cjs/common-hooks/useCollapsibleGroups.js.map +1 -1
  16. package/dist-cjs/common-hooks/useKeyboardNavigation.js.map +1 -1
  17. package/dist-cjs/common-hooks/useKeyboardNavigationPanel.js.map +1 -1
  18. package/dist-cjs/date-input/DateInput.css.js +1 -1
  19. package/dist-cjs/date-picker/DatePickerOverlay.css.js +1 -1
  20. package/dist-cjs/date-picker/DatePickerPanel.css.js +1 -1
  21. package/dist-cjs/form-field-legacy/FormFieldLegacy.css.js +1 -1
  22. package/dist-cjs/form-field-legacy/FormLabel.css.js +1 -1
  23. package/dist-cjs/index.js +0 -8
  24. package/dist-cjs/index.js.map +1 -1
  25. package/dist-cjs/input-legacy/InputLegacy.css.js +1 -1
  26. package/dist-cjs/list/List.css.js +1 -1
  27. package/dist-cjs/list/ListItem.css.js +1 -1
  28. package/dist-cjs/list/useList.js.map +1 -1
  29. package/dist-cjs/list-deprecated/List.css.js +1 -1
  30. package/dist-cjs/list-deprecated/ListItem.css.js +1 -1
  31. package/dist-cjs/list-next/ListItemNext.css.js +1 -1
  32. package/dist-cjs/list-next/ListNext.css.js +1 -1
  33. package/dist-cjs/logo/LogoSeparator.css.js +1 -1
  34. package/dist-cjs/number-input/NumberInput.css.js +1 -1
  35. package/dist-cjs/number-input/NumberInput.js +146 -79
  36. package/dist-cjs/number-input/NumberInput.js.map +1 -1
  37. package/dist-cjs/number-input/internal/useCaret.js +34 -0
  38. package/dist-cjs/number-input/internal/useCaret.js.map +1 -0
  39. package/dist-cjs/number-input/internal/utils.js +56 -14
  40. package/dist-cjs/number-input/internal/utils.js.map +1 -1
  41. package/dist-cjs/number-input/useNumberInput.js +34 -26
  42. package/dist-cjs/number-input/useNumberInput.js.map +1 -1
  43. package/dist-cjs/portal/Portal.js.map +1 -1
  44. package/dist-cjs/query-input/QueryInput.css.js +1 -1
  45. package/dist-cjs/responsive/OverflowReducer.js.map +1 -1
  46. package/dist-cjs/system-status/SystemStatus.css.js +1 -1
  47. package/dist-cjs/tabs/Tabstrip.css.js +1 -1
  48. package/dist-cjs/tabs/drag-drop/Draggable.css.js +1 -1
  49. package/dist-cjs/tabs-next/TabBar.css.js +1 -1
  50. package/dist-cjs/tabs-next/TabNext.css.js +1 -1
  51. package/dist-cjs/tabs-next/TabOverflowList.css.js +1 -1
  52. package/dist-cjs/tokenized-input/TokenizedInput.css.js +1 -1
  53. package/dist-cjs/tokenized-input-next/TokenizedInputNext.css.js +1 -1
  54. package/dist-cjs/toolbar/overflow-panel/OverflowPanel.css.js +1 -1
  55. package/dist-cjs/toolbar/overflow-panel/OverflowSeparator.css.js +1 -1
  56. package/dist-cjs/tree/useTree.js.map +1 -1
  57. package/dist-es/app-header/AppHeader.css.js +1 -1
  58. package/dist-es/calendar/CalendarWeekHeader.css.js +1 -1
  59. package/dist-es/calendar/internal/CalendarDay.css.js +1 -1
  60. package/dist-es/calendar/internal/CalendarMonth.css.js +1 -1
  61. package/dist-es/cascading-menu/CascadingMenuItem.css.js +1 -1
  62. package/dist-es/color-chooser/ColorChooser.css.js +1 -1
  63. package/dist-es/color-chooser/ColorPicker.css.js +1 -1
  64. package/dist-es/color-chooser/HexInput.css.js +1 -1
  65. package/dist-es/color-chooser/RGBAInput.css.js +1 -1
  66. package/dist-es/color-chooser/Swatch.css.js +1 -1
  67. package/dist-es/combo-box/useCombobox.js.map +1 -1
  68. package/dist-es/common-hooks/selectionTypes.js.map +1 -1
  69. package/dist-es/common-hooks/useCollapsibleGroups.js.map +1 -1
  70. package/dist-es/common-hooks/useKeyboardNavigation.js.map +1 -1
  71. package/dist-es/common-hooks/useKeyboardNavigationPanel.js.map +1 -1
  72. package/dist-es/date-input/DateInput.css.js +1 -1
  73. package/dist-es/date-picker/DatePickerOverlay.css.js +1 -1
  74. package/dist-es/date-picker/DatePickerPanel.css.js +1 -1
  75. package/dist-es/form-field-legacy/FormFieldLegacy.css.js +1 -1
  76. package/dist-es/form-field-legacy/FormLabel.css.js +1 -1
  77. package/dist-es/index.js +0 -4
  78. package/dist-es/index.js.map +1 -1
  79. package/dist-es/input-legacy/InputLegacy.css.js +1 -1
  80. package/dist-es/list/List.css.js +1 -1
  81. package/dist-es/list/ListItem.css.js +1 -1
  82. package/dist-es/list/useList.js.map +1 -1
  83. package/dist-es/list-deprecated/List.css.js +1 -1
  84. package/dist-es/list-deprecated/ListItem.css.js +1 -1
  85. package/dist-es/list-next/ListItemNext.css.js +1 -1
  86. package/dist-es/list-next/ListNext.css.js +1 -1
  87. package/dist-es/logo/LogoSeparator.css.js +1 -1
  88. package/dist-es/number-input/NumberInput.css.js +1 -1
  89. package/dist-es/number-input/NumberInput.js +149 -82
  90. package/dist-es/number-input/NumberInput.js.map +1 -1
  91. package/dist-es/number-input/internal/useCaret.js +32 -0
  92. package/dist-es/number-input/internal/useCaret.js.map +1 -0
  93. package/dist-es/number-input/internal/utils.js +52 -10
  94. package/dist-es/number-input/internal/utils.js.map +1 -1
  95. package/dist-es/number-input/useNumberInput.js +35 -27
  96. package/dist-es/number-input/useNumberInput.js.map +1 -1
  97. package/dist-es/portal/Portal.js.map +1 -1
  98. package/dist-es/query-input/QueryInput.css.js +1 -1
  99. package/dist-es/responsive/OverflowReducer.js.map +1 -1
  100. package/dist-es/system-status/SystemStatus.css.js +1 -1
  101. package/dist-es/tabs/Tabstrip.css.js +1 -1
  102. package/dist-es/tabs/drag-drop/Draggable.css.js +1 -1
  103. package/dist-es/tabs-next/TabBar.css.js +1 -1
  104. package/dist-es/tabs-next/TabNext.css.js +1 -1
  105. package/dist-es/tabs-next/TabOverflowList.css.js +1 -1
  106. package/dist-es/tokenized-input/TokenizedInput.css.js +1 -1
  107. package/dist-es/tokenized-input-next/TokenizedInputNext.css.js +1 -1
  108. package/dist-es/toolbar/overflow-panel/OverflowPanel.css.js +1 -1
  109. package/dist-es/toolbar/overflow-panel/OverflowSeparator.css.js +1 -1
  110. package/dist-es/tree/useTree.js.map +1 -1
  111. package/dist-types/app-header/AppHeader.d.ts +1 -1
  112. package/dist-types/button-bar/ButtonBar.d.ts +3 -3
  113. package/dist-types/calendar/Calendar.d.ts +1 -1
  114. package/dist-types/calendar/CalendarWeekHeader.d.ts +1 -1
  115. package/dist-types/calendar/useCalendar.d.ts +1 -1
  116. package/dist-types/calendar/useCalendarDay.d.ts +2 -1
  117. package/dist-types/calendar/useCalendarSelection.d.ts +5 -5
  118. package/dist-types/cascading-menu/internal/CascadingMenuAction.d.ts +2 -2
  119. package/dist-types/cascading-menu/internal/menuPositioning.d.ts +1 -1
  120. package/dist-types/cascading-menu/internal/stateUtils.d.ts +2 -2
  121. package/dist-types/cascading-menu/internal/useClickAway.d.ts +1 -1
  122. package/dist-types/cascading-menu/internal/useRefsManager.d.ts +1 -1
  123. package/dist-types/cascading-menu/internal/useStateReducer.d.ts +2 -2
  124. package/dist-types/cascading-menu/stateChangeTypes.d.ts +1 -1
  125. package/dist-types/color-chooser/Color.d.ts +1 -1
  126. package/dist-types/color-chooser/DictTabs.d.ts +1 -1
  127. package/dist-types/color-chooser/color-utils.d.ts +1 -1
  128. package/dist-types/combo-box/ComboBox.d.ts +3 -3
  129. package/dist-types/combo-box/useCombobox.d.ts +1 -1
  130. package/dist-types/combo-box-deprecated/ComboBoxDeprecated.d.ts +3 -3
  131. package/dist-types/combo-box-deprecated/filterHelpers.d.ts +1 -1
  132. package/dist-types/combo-box-deprecated/internal/DefaultComboBox.d.ts +1 -1
  133. package/dist-types/combo-box-deprecated/internal/MultiSelectComboBox.d.ts +1 -1
  134. package/dist-types/combo-box-deprecated/internal/useComboBox.d.ts +98 -97
  135. package/dist-types/combo-box-deprecated/internal/useMultiSelectComboBox.d.ts +214 -212
  136. package/dist-types/combo-box-deprecated/internal/usePopperStatus.d.ts +3 -3
  137. package/dist-types/common-hooks/collectionTypes.d.ts +3 -3
  138. package/dist-types/common-hooks/itemToString.d.ts +1 -1
  139. package/dist-types/common-hooks/navigationTypes.d.ts +4 -4
  140. package/dist-types/common-hooks/selectionTypes.d.ts +10 -10
  141. package/dist-types/common-hooks/useKeyboardNavigation.d.ts +1 -1
  142. package/dist-types/common-hooks/useSelection.d.ts +2 -2
  143. package/dist-types/common-hooks/utils/collection-item-utils.d.ts +2 -2
  144. package/dist-types/common-hooks/utils/filter-utils.d.ts +2 -2
  145. package/dist-types/contact-details/ContactAction.d.ts +1 -1
  146. package/dist-types/contact-details/ContactAvatar.d.ts +1 -1
  147. package/dist-types/contact-details/ContactDetails.d.ts +1 -1
  148. package/dist-types/date-input/DateInputRange.d.ts +2 -2
  149. package/dist-types/date-input/DateInputSingle.d.ts +1 -1
  150. package/dist-types/date-picker/DatePicker.d.ts +1 -1
  151. package/dist-types/date-picker/DatePickerActions.d.ts +1 -1
  152. package/dist-types/date-picker/DatePickerContext.d.ts +1 -1
  153. package/dist-types/date-picker/DatePickerOverlayProvider.d.ts +1 -1
  154. package/dist-types/date-picker/DatePickerRangeGridPanel.d.ts +1 -1
  155. package/dist-types/date-picker/DatePickerSingleGridPanel.d.ts +1 -1
  156. package/dist-types/date-picker/DatePickerSinglePanel.d.ts +1 -1
  157. package/dist-types/date-picker/useDatePicker.d.ts +1 -1
  158. package/dist-types/deck-layout/DeckLayout.d.ts +3 -3
  159. package/dist-types/dropdown/Dropdown.d.ts +3 -3
  160. package/dist-types/dropdown/DropdownBase.d.ts +1 -1
  161. package/dist-types/dropdown/dropdownTypes.d.ts +1 -1
  162. package/dist-types/dropdown/useClickAway.d.ts +1 -1
  163. package/dist-types/dropdown/useDropdown.d.ts +1 -1
  164. package/dist-types/focus-manager/internal/findAllTabbableElements.d.ts +1 -1
  165. package/dist-types/form-field-legacy/FormFieldLegacy.d.ts +5 -5
  166. package/dist-types/form-field-legacy/NecessityIndicator.d.ts +1 -1
  167. package/dist-types/form-field-legacy/StatusIndicator.d.ts +1 -1
  168. package/dist-types/formatted-input/FormattedInput.d.ts +1 -1
  169. package/dist-types/index.d.ts +0 -1
  170. package/dist-types/input-legacy/StaticInputAdornment.d.ts +1 -1
  171. package/dist-types/layer-layout/LayerLayout.d.ts +1 -1
  172. package/dist-types/list/List.d.ts +3 -3
  173. package/dist-types/list/ListItem.d.ts +1 -1
  174. package/dist-types/list/VirtualizedList.d.ts +3 -3
  175. package/dist-types/list/listTypes.d.ts +2 -2
  176. package/dist-types/list/useList.d.ts +1 -1
  177. package/dist-types/list/useVirtualization.d.ts +1 -1
  178. package/dist-types/list-deprecated/List.d.ts +2 -2
  179. package/dist-types/list-deprecated/ListBase.d.ts +2 -2
  180. package/dist-types/list-deprecated/ListItem.d.ts +1 -1
  181. package/dist-types/list-deprecated/ListItemContext.d.ts +1 -1
  182. package/dist-types/list-deprecated/ListProps.d.ts +5 -5
  183. package/dist-types/list-deprecated/itemToString.d.ts +1 -1
  184. package/dist-types/list-deprecated/useListItem.d.ts +2 -2
  185. package/dist-types/localization-provider/LocalizationProvider.d.ts +3 -3
  186. package/dist-types/logo/Logo.d.ts +1 -1
  187. package/dist-types/logo/LogoSeparator.d.ts +1 -1
  188. package/dist-types/number-input/NumberInput.d.ts +49 -27
  189. package/dist-types/number-input/internal/useCaret.d.ts +5 -0
  190. package/dist-types/number-input/internal/useInterval.d.ts +1 -1
  191. package/dist-types/number-input/internal/utils.d.ts +5 -5
  192. package/dist-types/number-input/useNumberInput.d.ts +11 -6
  193. package/dist-types/query-input/useQueryInput.d.ts +1 -1
  194. package/dist-types/responsive/OverflowReducer.d.ts +4 -4
  195. package/dist-types/responsive/overflowTypes.d.ts +20 -20
  196. package/dist-types/responsive/overflowUtils.d.ts +3 -3
  197. package/dist-types/responsive/useOverflowCollectionItems.d.ts +1 -1
  198. package/dist-types/responsive/useOverflowLayout.d.ts +1 -1
  199. package/dist-types/responsive/useResizeObserver.d.ts +2 -2
  200. package/dist-types/responsive/utils.d.ts +3 -3
  201. package/dist-types/tabs/Tab.d.ts +20 -19
  202. package/dist-types/tabs/Tabs.d.ts +1 -1
  203. package/dist-types/tabs/TabsTypes.d.ts +7 -7
  204. package/dist-types/tabs/drag-drop/Draggable.d.ts +2 -2
  205. package/dist-types/tabs/drag-drop/DropIndicator.d.ts +1 -1
  206. package/dist-types/tabs/drag-drop/drag-utils.d.ts +26 -22
  207. package/dist-types/tabs/drag-drop/dragDropTypes.d.ts +5 -5
  208. package/dist-types/tabs/drag-drop/useDragSpacers.d.ts +1 -1
  209. package/dist-types/tabs/useActivationIndicator.d.ts +1 -1
  210. package/dist-types/tabs/useEditableItem.d.ts +1 -1
  211. package/dist-types/tabs/useKeyboardNavigation.d.ts +1 -1
  212. package/dist-types/tabs/useSelection.d.ts +3 -3
  213. package/dist-types/tabs-next/hooks/useCollection.d.ts +1 -1
  214. package/dist-types/tokenized-input/TokenizedInput.d.ts +2 -2
  215. package/dist-types/tokenized-input/TokenizedInputBase.d.ts +5 -5
  216. package/dist-types/tokenized-input/internal/InputPill.d.ts +1 -1
  217. package/dist-types/tokenized-input/internal/isPlainObject.d.ts +1 -1
  218. package/dist-types/tokenized-input/useTokenizedInput.d.ts +1 -1
  219. package/dist-types/tokenized-input-next/TokenizedInputNext.d.ts +2 -2
  220. package/dist-types/tokenized-input-next/internal/InputPill.d.ts +1 -1
  221. package/dist-types/toolbar/ToolbarButton.d.ts +3 -3
  222. package/dist-types/toolbar/ToolbarProps.d.ts +1 -1
  223. package/dist-types/toolbar/TooltrayProps.d.ts +2 -2
  224. package/dist-types/toolbar/internal/ToolbarButtonRefsContext.d.ts +1 -1
  225. package/dist-types/toolbar/internal/renderTrayTools.d.ts +1 -1
  226. package/dist-types/tree/useTree.d.ts +1 -1
  227. package/dist-types/utils/forwardCallbackProps.d.ts +1 -1
  228. package/dist-types/utils/isEmail.d.ts +1 -1
  229. package/dist-types/utils/useClickOutside.d.ts +1 -1
  230. package/dist-types/utils/useSlideSelection.d.ts +1 -1
  231. package/dist-types/window/ElectronWindow.d.ts +1 -1
  232. package/dist-types/window/WindowContext.d.ts +4 -4
  233. package/package.json +2 -2
  234. package/dist-cjs/carousel/Carousel.css.js +0 -6
  235. package/dist-cjs/carousel/Carousel.css.js.map +0 -1
  236. package/dist-cjs/carousel/Carousel.js +0 -62
  237. package/dist-cjs/carousel/Carousel.js.map +0 -1
  238. package/dist-cjs/carousel/CarouselContext.js +0 -62
  239. package/dist-cjs/carousel/CarouselContext.js.map +0 -1
  240. package/dist-cjs/carousel/CarouselControls.css.js +0 -6
  241. package/dist-cjs/carousel/CarouselControls.css.js.map +0 -1
  242. package/dist-cjs/carousel/CarouselControls.js +0 -122
  243. package/dist-cjs/carousel/CarouselControls.js.map +0 -1
  244. package/dist-cjs/carousel/CarouselReducer.js +0 -77
  245. package/dist-cjs/carousel/CarouselReducer.js.map +0 -1
  246. package/dist-cjs/carousel/CarouselSlide.css.js +0 -6
  247. package/dist-cjs/carousel/CarouselSlide.css.js.map +0 -1
  248. package/dist-cjs/carousel/CarouselSlide.js +0 -110
  249. package/dist-cjs/carousel/CarouselSlide.js.map +0 -1
  250. package/dist-cjs/carousel/CarouselSlider.css.js +0 -6
  251. package/dist-cjs/carousel/CarouselSlider.css.js.map +0 -1
  252. package/dist-cjs/carousel/CarouselSlider.js +0 -93
  253. package/dist-cjs/carousel/CarouselSlider.js.map +0 -1
  254. package/dist-es/carousel/Carousel.css.js +0 -4
  255. package/dist-es/carousel/Carousel.css.js.map +0 -1
  256. package/dist-es/carousel/Carousel.js +0 -60
  257. package/dist-es/carousel/Carousel.js.map +0 -1
  258. package/dist-es/carousel/CarouselContext.js +0 -58
  259. package/dist-es/carousel/CarouselContext.js.map +0 -1
  260. package/dist-es/carousel/CarouselControls.css.js +0 -4
  261. package/dist-es/carousel/CarouselControls.css.js.map +0 -1
  262. package/dist-es/carousel/CarouselControls.js +0 -120
  263. package/dist-es/carousel/CarouselControls.js.map +0 -1
  264. package/dist-es/carousel/CarouselReducer.js +0 -75
  265. package/dist-es/carousel/CarouselReducer.js.map +0 -1
  266. package/dist-es/carousel/CarouselSlide.css.js +0 -4
  267. package/dist-es/carousel/CarouselSlide.css.js.map +0 -1
  268. package/dist-es/carousel/CarouselSlide.js +0 -108
  269. package/dist-es/carousel/CarouselSlide.js.map +0 -1
  270. package/dist-es/carousel/CarouselSlider.css.js +0 -4
  271. package/dist-es/carousel/CarouselSlider.css.js.map +0 -1
  272. package/dist-es/carousel/CarouselSlider.js +0 -91
  273. package/dist-es/carousel/CarouselSlider.js.map +0 -1
  274. package/dist-types/carousel/Carousel.d.ts +0 -23
  275. package/dist-types/carousel/CarouselContext.d.ts +0 -11
  276. package/dist-types/carousel/CarouselControls.d.ts +0 -26
  277. package/dist-types/carousel/CarouselReducer.d.ts +0 -30
  278. package/dist-types/carousel/CarouselSlide.d.ts +0 -32
  279. package/dist-types/carousel/CarouselSlider.d.ts +0 -13
  280. package/dist-types/carousel/index.d.ts +0 -4
@@ -1,6 +1,6 @@
1
1
  import { type KeyboardEvent } from "react";
2
2
  import type { OverflowItem } from "../responsive";
3
- export declare type ExitEditModeHandler = (originalValue: string, editedValue: string, allowDeactivation: boolean, tabIndex: number) => void;
3
+ export type ExitEditModeHandler = (originalValue: string, editedValue: string, allowDeactivation: boolean, tabIndex: number) => void;
4
4
  export interface Editable {
5
5
  editing: boolean;
6
6
  onEnterEditMode: () => void;
@@ -1,6 +1,6 @@
1
1
  import { type FocusEvent, type FocusEventHandler, type KeyboardEvent, type MouseEvent, type MouseEventHandler } from "react";
2
2
  import type { OverflowItem } from "../responsive";
3
- declare type orientationType = "horizontal" | "vertical";
3
+ type orientationType = "horizontal" | "vertical";
4
4
  export interface ContainerNavigationProps {
5
5
  onBlur: FocusEventHandler;
6
6
  onFocus: FocusEventHandler;
@@ -1,10 +1,10 @@
1
1
  import { type KeyboardEvent, type MouseEvent } from "react";
2
2
  export declare const isTabElement: (el: HTMLElement) => boolean;
3
3
  export declare const useSelection: ({ defaultSelected, highlightedIdx, onSelectionChange, selected: selectedProp, }: {
4
- defaultSelected?: number | undefined;
4
+ defaultSelected?: number;
5
5
  highlightedIdx: number;
6
- onSelectionChange?: ((tabIndex: number) => void) | undefined;
7
- selected?: number | null | undefined;
6
+ onSelectionChange?: (tabIndex: number) => void;
7
+ selected?: number | null;
8
8
  }) => {
9
9
  activateTab: (tabIndex: number) => void;
10
10
  isControlled: boolean;
@@ -8,7 +8,7 @@ interface UseCollectionProps {
8
8
  }
9
9
  export declare function useCollection({ wrap }: UseCollectionProps): {
10
10
  registerItem: (item: Item) => () => import("react").MutableRefObject<Item[]>;
11
- item: (id?: string | null | undefined) => Item | null;
11
+ item: (id?: string | null) => Item | null;
12
12
  getNext: (current: string) => Item | null;
13
13
  getPrevious: (current: string) => Item | null;
14
14
  getFirst: () => Item | null;
@@ -1,8 +1,8 @@
1
1
  import { type UseTooltipProps } from "@salt-ds/core";
2
2
  import { type ComponentType } from "react";
3
3
  import { type TokenizedInputBaseProps } from "./TokenizedInputBase";
4
- export declare type StringToItem<Item> = (selectedItems: Array<Item>, value: string) => Item | null | undefined;
5
- export declare type ChangeHandler<Item> = (selectedItems: Item[] | undefined) => void;
4
+ export type StringToItem<Item> = (selectedItems: Array<Item>, value: string) => Item | null | undefined;
5
+ export type ChangeHandler<Item> = (selectedItems: Item[] | undefined) => void;
6
6
  export interface TokenizedInputProps<Item> extends Omit<TokenizedInputBaseProps<Item>, "activeIndices" | "focused" | "highlightedIndex" | "helpers" | "onRemoveItem"> {
7
7
  Tooltip?: ComponentType;
8
8
  delimiter?: string | Array<string>;
@@ -2,9 +2,9 @@ import { type ButtonProps } from "@salt-ds/core";
2
2
  import { type ChangeEventHandler, type FocusEventHandler, type ForwardedRef, type HTMLAttributes, type KeyboardEventHandler, type ReactElement, type ReactEventHandler, type Ref, type SyntheticEvent } from "react";
3
3
  import { type InputLegacyProps as InputProps } from "../input-legacy";
4
4
  import type { TokenizedInputHelpers, TokenizedInputState } from "./useTokenizedInput";
5
- export declare type RemoveItemHandler = (itemIndex: number) => void;
6
- export declare type ItemToString<Item> = (item: Item) => string;
7
- export declare type ExpandButtonProps = Pick<ButtonProps, "role" | "aria-roledescription" | "aria-describedby"> & {
5
+ export type RemoveItemHandler = (itemIndex: number) => void;
6
+ export type ItemToString<Item> = (item: Item) => string;
7
+ export type ExpandButtonProps = Pick<ButtonProps, "role" | "aria-roledescription" | "aria-describedby"> & {
8
8
  accessibleText?: string;
9
9
  };
10
10
  export interface TokenizedInputBaseProps<Item> extends Partial<TokenizedInputState<Item>>, Omit<HTMLAttributes<HTMLDivElement>, "onFocus" | "onBlur" | "onChange" | "onKeyUp" | "onKeyDown"> {
@@ -28,5 +28,5 @@ export interface TokenizedInputBaseProps<Item> extends Partial<TokenizedInputSta
28
28
  onClear?: ReactEventHandler;
29
29
  }
30
30
  export declare const TokenizedInputBase: <Item>(p: TokenizedInputBaseProps<Item> & {
31
- ref?: ForwardedRef<HTMLDivElement> | undefined;
32
- }) => ReactElement<TokenizedInputBaseProps<Item>, string | import("react").JSXElementConstructor<any>>;
31
+ ref?: ForwardedRef<HTMLDivElement>;
32
+ }) => ReactElement<TokenizedInputBaseProps<Item>>;
@@ -1,6 +1,6 @@
1
1
  import { type PillProps } from "@salt-ds/core";
2
2
  import { type MutableRefObject } from "react";
3
- export declare type InputPillProps = PillProps & {
3
+ export type InputPillProps = PillProps & {
4
4
  /**
5
5
  * An ref object holds pills index map to width.
6
6
  */
@@ -1,4 +1,4 @@
1
- export declare type PlainObject = {
1
+ export type PlainObject = {
2
2
  [name: string]: any;
3
3
  };
4
4
  export declare const isPlainObject: (obj: any) => obj is PlainObject;
@@ -17,7 +17,7 @@ export interface TokenizedInputHelpers<Item> {
17
17
  setSelectedItems: (selectedItems: Array<Item>) => void;
18
18
  updateExpanded: (expanded: boolean) => void;
19
19
  }
20
- declare type useTokenizedInputResult<Item> = {
20
+ type useTokenizedInputResult<Item> = {
21
21
  /**
22
22
  * Used to do auto focus. It should be set to the actual input node.
23
23
  */
@@ -1,8 +1,8 @@
1
1
  import { type ButtonProps, type NecessityType, type ValidationStatus } from "@salt-ds/core";
2
2
  import { type ChangeEventHandler, type FocusEventHandler, type HTMLAttributes, type KeyboardEventHandler, type ReactEventHandler, type Ref, type SyntheticEvent, type TextareaHTMLAttributes } from "react";
3
3
  import { type TokenizedInputNextState } from "./useTokenizedInputNext";
4
- declare type ChangeHandler<Item> = (event: SyntheticEvent, selectedItems: Item[] | undefined) => void;
5
- declare type ExpandButtonProps = Pick<ButtonProps, "role" | "aria-roledescription" | "aria-describedby"> & {
4
+ type ChangeHandler<Item> = (event: SyntheticEvent, selectedItems: Item[] | undefined) => void;
5
+ type ExpandButtonProps = Pick<ButtonProps, "role" | "aria-roledescription" | "aria-describedby"> & {
6
6
  "aria-label"?: string;
7
7
  };
8
8
  export interface TokenizedInputNextProps<Item> extends Partial<TokenizedInputNextState<Item>>, Omit<HTMLAttributes<HTMLDivElement>, "onFocus" | "onBlur" | "onChange" | "onKeyUp" | "onKeyDown"> {
@@ -1,6 +1,6 @@
1
1
  import { type PillProps } from "@salt-ds/core";
2
2
  import { type MutableRefObject, type SyntheticEvent } from "react";
3
- export declare type InputPillProps = PillProps & {
3
+ export type InputPillProps = PillProps & {
4
4
  /**
5
5
  * A ref object holds pills index map to width.
6
6
  */
@@ -1,9 +1,9 @@
1
1
  import { type ButtonProps } from "@salt-ds/core";
2
- export declare type ToolbarButtonProps = ButtonProps & {
2
+ export type ToolbarButtonProps = ButtonProps & {
3
3
  overflowLabel?: string;
4
4
  label?: string;
5
5
  };
6
6
  export declare const ToolbarButton: import("react").ForwardRefExoticComponent<ButtonProps & {
7
- overflowLabel?: string | undefined;
8
- label?: string | undefined;
7
+ overflowLabel?: string;
8
+ label?: string;
9
9
  } & import("react").RefAttributes<HTMLButtonElement>>;
@@ -1,6 +1,6 @@
1
1
  import type { TooltipProps } from "@salt-ds/core";
2
2
  import type { ComponentType, HTMLAttributes, ReactNode } from "react";
3
- export declare type OrientationShape = "vertical" | "horizontal";
3
+ export type OrientationShape = "vertical" | "horizontal";
4
4
  export interface ToolbarAlignmentProps {
5
5
  alignCenter?: true | undefined;
6
6
  alignEnd?: true | undefined;
@@ -1,7 +1,7 @@
1
1
  import type { HTMLAttributes } from "react";
2
2
  import type { OrientationShape, ToolbarAlignmentProps } from "./ToolbarProps";
3
- declare type collapsibleType = "dynamic" | "instant";
4
- declare type booleanAttribute = "true" | "false";
3
+ type collapsibleType = "dynamic" | "instant";
4
+ type booleanAttribute = "true" | "false";
5
5
  export interface TooltrayProps extends ToolbarAlignmentProps, HTMLAttributes<HTMLDivElement> {
6
6
  collapse?: boolean;
7
7
  collapsed?: boolean;
@@ -1,5 +1,5 @@
1
1
  import { type RefObject } from "react";
2
- declare type refsMap<T> = {
2
+ type refsMap<T> = {
3
3
  [key: string]: RefObject<T>;
4
4
  };
5
5
  declare const _default: import("react").Context<refsMap<HTMLButtonElement>>;
@@ -1,4 +1,4 @@
1
1
  import { type ReactNode } from "react";
2
2
  import type { OverflowCollectionHookResult, OverflowItem } from "../../responsive/overflowTypes";
3
3
  import type { OrientationShape } from "../ToolbarProps";
4
- export declare const renderTrayTools: (collectionHook: OverflowCollectionHookResult, overflowedItems: OverflowItem[], orientation: OrientationShape, collapsed?: string | boolean | undefined) => ReactNode;
4
+ export declare const renderTrayTools: (collectionHook: OverflowCollectionHookResult, overflowedItems: OverflowItem[], orientation: OrientationShape, collapsed?: boolean | string) => ReactNode;
@@ -1,3 +1,3 @@
1
1
  import { type SelectionStrategy } from "../common-hooks";
2
2
  import type { TreeHookProps, TreeHookResult } from "./treeTypes";
3
- export declare const useTree: <Item, Selection_1 extends SelectionStrategy = "default">({ collectionHook, containerRef, contentRef, defaultSelected, disabled, onSelect, onSelectionChange, onToggle, onHighlight: onHighlightProp, selected: selectedProp, selectionStrategy, }: TreeHookProps<Item, Selection_1>) => TreeHookResult<Item, Selection_1>;
3
+ export declare const useTree: <Item, Selection extends SelectionStrategy = "default">({ collectionHook, containerRef, contentRef, defaultSelected, disabled, onSelect, onSelectionChange, onToggle, onHighlight: onHighlightProp, selected: selectedProp, selectionStrategy, }: TreeHookProps<Item, Selection>) => TreeHookResult<Item, Selection>;
@@ -1,3 +1,3 @@
1
- declare type Props = Record<string, any>;
1
+ type Props = Record<string, any>;
2
2
  export declare const forwardCallbackProps: <P1 extends Props, P2 extends Props>(ownProps: P1, overrideProps: P2) => P1 & P2;
3
3
  export {};
@@ -1 +1 @@
1
- export declare const isEmail: (value?: string | undefined) => boolean;
1
+ export declare const isEmail: (value?: string) => boolean;
@@ -1,5 +1,5 @@
1
1
  import { type Ref } from "react";
2
- declare type MouseEvents = keyof {
2
+ type MouseEvents = keyof {
3
3
  [K in keyof GlobalEventHandlersEventMap as GlobalEventHandlersEventMap[K] extends MouseEvent ? K : never]: GlobalEventHandlersEventMap[K];
4
4
  };
5
5
  export declare function useClickOutside<Element extends HTMLElement>(handler: () => void, triggerEvents?: MouseEvents[], containers?: HTMLElement[]): Ref<Element>;
@@ -1,2 +1,2 @@
1
1
  import type { LayoutAnimationTransition } from "../deck-layout";
2
- export declare const useSlideSelection: (initialValue?: number | undefined) => [LayoutAnimationTransition | undefined, number, (sliderIndex: number, transition?: LayoutAnimationTransition | undefined) => void];
2
+ export declare const useSlideSelection: (initialValue?: number) => [LayoutAnimationTransition | undefined, number, (sliderIndex: number, transition?: LayoutAnimationTransition) => void];
@@ -1,3 +1,3 @@
1
1
  export declare const ElectronWindow: import("react").ForwardRefExoticComponent<{
2
- open?: boolean | undefined;
2
+ open?: boolean;
3
3
  } & Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
@@ -1,14 +1,14 @@
1
1
  import { type ComponentPropsWithoutRef } from "react";
2
- export declare type WindowProps = {
2
+ export type WindowProps = {
3
3
  open?: boolean;
4
4
  } & ComponentPropsWithoutRef<"div">;
5
5
  export declare const Window: import("react").ForwardRefExoticComponent<{
6
- open?: boolean | undefined;
6
+ open?: boolean;
7
7
  } & Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
8
8
  export declare const WindowContext: import("react").Context<import("react").ForwardRefExoticComponent<{
9
- open?: boolean | undefined;
9
+ open?: boolean;
10
10
  } & Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>>;
11
11
  export declare const useWindow: () => import("react").ForwardRefExoticComponent<{
12
- open?: boolean | undefined;
12
+ open?: boolean;
13
13
  } & Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
14
14
  export declare const isDesktop: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salt-ds/lab",
3
- "version": "1.0.0-alpha.70",
3
+ "version": "1.0.0-alpha.71",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -21,7 +21,7 @@
21
21
  ],
22
22
  "dependencies": {
23
23
  "@floating-ui/react": "^0.26.28",
24
- "@salt-ds/core": "^1.47.0",
24
+ "@salt-ds/core": "^1.47.1",
25
25
  "@salt-ds/date-adapters": "0.1.0-alpha.4",
26
26
  "@salt-ds/icons": "^1.14.0",
27
27
  "@salt-ds/styles": "0.2.1",
@@ -1,6 +0,0 @@
1
- 'use strict';
2
-
3
- var css_248z = ".saltCarousel {\n display: grid;\n grid-row-gap: var(--salt-spacing-100);\n grid-template-areas: \"controls\" \"slider\";\n grid-template-rows: auto 1fr;\n}\n\n.saltCarousel.saltCarousel-bottom {\n grid-template-areas: \"slider\" \"controls\";\n grid-template-rows: 1fr auto;\n}\n";
4
-
5
- module.exports = css_248z;
6
- //# sourceMappingURL=Carousel.css.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Carousel.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -1,62 +0,0 @@
1
- 'use strict';
2
-
3
- var jsxRuntime = require('react/jsx-runtime');
4
- var core = require('@salt-ds/core');
5
- var styles = require('@salt-ds/styles');
6
- var window = require('@salt-ds/window');
7
- var clsx = require('clsx');
8
- var react = require('react');
9
- var Carousel$1 = require('./Carousel.css.js');
10
- var CarouselContext = require('./CarouselContext.js');
11
-
12
- const withBaseName = core.makePrefixer("saltCarousel");
13
- const Carousel = react.forwardRef(
14
- function Carousel2({
15
- defaultActiveSlideIndex = 0,
16
- activeSlideIndex,
17
- visibleSlides: visibleSlidesProp = 1,
18
- children,
19
- controlsPlacement = "top",
20
- id: idProp,
21
- ...rest
22
- }, ref) {
23
- const targetWindow = window.useWindow();
24
- styles.useComponentCssInjection({
25
- testId: "salt-carousel",
26
- css: Carousel$1,
27
- window: targetWindow
28
- });
29
- const { matchedBreakpoints } = core.useBreakpoint();
30
- const visibleSlides = core.resolveResponsiveValue(
31
- visibleSlidesProp,
32
- matchedBreakpoints
33
- );
34
- const id = core.useId(idProp);
35
- return /* @__PURE__ */ jsxRuntime.jsx(
36
- CarouselContext.CarouselProvider,
37
- {
38
- defaultActiveSlideIndex,
39
- activeSlideIndex,
40
- visibleSlides,
41
- id,
42
- children: /* @__PURE__ */ jsxRuntime.jsx(
43
- "section",
44
- {
45
- role: "region",
46
- className: clsx.clsx(withBaseName(), {
47
- [withBaseName(controlsPlacement)]: controlsPlacement === "bottom"
48
- }),
49
- "aria-roledescription": "carousel",
50
- id,
51
- ref,
52
- ...rest,
53
- children
54
- }
55
- )
56
- }
57
- );
58
- }
59
- );
60
-
61
- exports.Carousel = Carousel;
62
- //# sourceMappingURL=Carousel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Carousel.js","sources":["../src/carousel/Carousel.tsx"],"sourcesContent":["import {\n type ResponsiveProp,\n makePrefixer,\n resolveResponsiveValue,\n useBreakpoint,\n useId,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { type HTMLAttributes, forwardRef } from \"react\";\nimport carouselCss from \"./Carousel.css\";\nimport { CarouselProvider } from \"./CarouselContext\";\n\nconst withBaseName = makePrefixer(\"saltCarousel\");\n\nexport interface CarouselProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * The initial Index enables you to select the active slide in the carousel.\n * Optional, default 0.\n **/\n defaultActiveSlideIndex?: number;\n /**\n * Controlled index of active slide in the carousel.\n **/\n activeSlideIndex?: number;\n /**\n * Set the placement of the CarouselControls relative to the CarouselSlider element. Defaults to `top`.\n */\n controlsPlacement?: \"top\" | \"bottom\";\n /**\n * Number of slides visible at a time.\n * Optional, default 1.\n **/\n visibleSlides?: ResponsiveProp<number>;\n}\n\nexport const Carousel = forwardRef<HTMLDivElement, CarouselProps>(\n function Carousel(\n {\n defaultActiveSlideIndex = 0,\n activeSlideIndex,\n visibleSlides: visibleSlidesProp = 1,\n children,\n controlsPlacement = \"top\",\n id: idProp,\n ...rest\n },\n ref,\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-carousel\",\n css: carouselCss,\n window: targetWindow,\n });\n const { matchedBreakpoints } = useBreakpoint();\n\n const visibleSlides = resolveResponsiveValue(\n visibleSlidesProp,\n matchedBreakpoints,\n );\n const id = useId(idProp);\n return (\n <CarouselProvider\n defaultActiveSlideIndex={defaultActiveSlideIndex}\n activeSlideIndex={activeSlideIndex}\n visibleSlides={visibleSlides}\n id={id}\n >\n <section\n role=\"region\"\n className={clsx(withBaseName(), {\n [withBaseName(controlsPlacement)]: controlsPlacement === \"bottom\",\n })}\n aria-roledescription=\"carousel\"\n id={id}\n ref={ref}\n {...rest}\n >\n {children}\n </section>\n </CarouselProvider>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","Carousel","useWindow","useComponentCssInjection","carouselCss","useBreakpoint","resolveResponsiveValue","useId","jsx","CarouselProvider","clsx"],"mappings":";;;;;;;;;;;AAcA,MAAM,YAAA,GAAeA,kBAAa,cAAc,CAAA;AAuBzC,MAAM,QAAW,GAAAC,gBAAA;AAAA,EACtB,SAASC,SACP,CAAA;AAAA,IACE,uBAA0B,GAAA,CAAA;AAAA,IAC1B,gBAAA;AAAA,IACA,eAAe,iBAAoB,GAAA,CAAA;AAAA,IACnC,QAAA;AAAA,IACA,iBAAoB,GAAA,KAAA;AAAA,IACpB,EAAI,EAAA,MAAA;AAAA,IACJ,GAAG;AAAA,KAEL,GACA,EAAA;AACA,IAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,eAAA;AAAA,MACR,GAAK,EAAAC,UAAA;AAAA,MACL,MAAQ,EAAA;AAAA,KACT,CAAA;AACD,IAAM,MAAA,EAAE,kBAAmB,EAAA,GAAIC,kBAAc,EAAA;AAE7C,IAAA,MAAM,aAAgB,GAAAC,2BAAA;AAAA,MACpB,iBAAA;AAAA,MACA;AAAA,KACF;AACA,IAAM,MAAA,EAAA,GAAKC,WAAM,MAAM,CAAA;AACvB,IACE,uBAAAC,cAAA;AAAA,MAACC,gCAAA;AAAA,MAAA;AAAA,QACC,uBAAA;AAAA,QACA,gBAAA;AAAA,QACA,aAAA;AAAA,QACA,EAAA;AAAA,QAEA,QAAA,kBAAAD,cAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,IAAK,EAAA,QAAA;AAAA,YACL,SAAA,EAAWE,SAAK,CAAA,YAAA,EAAgB,EAAA;AAAA,cAC9B,CAAC,YAAA,CAAa,iBAAiB,CAAC,GAAG,iBAAsB,KAAA;AAAA,aAC1D,CAAA;AAAA,YACD,sBAAqB,EAAA,UAAA;AAAA,YACrB,EAAA;AAAA,YACA,GAAA;AAAA,YACC,GAAG,IAAA;AAAA,YAEH;AAAA;AAAA;AACH;AAAA,KACF;AAAA;AAGN;;;;"}
@@ -1,62 +0,0 @@
1
- 'use strict';
2
-
3
- var jsxRuntime = require('react/jsx-runtime');
4
- var core = require('@salt-ds/core');
5
- var react = require('react');
6
- var CarouselReducer = require('./CarouselReducer.js');
7
-
8
- const CarouselStateContext = core.createContext(
9
- "CarouselStateContext",
10
- {
11
- slides: /* @__PURE__ */ new Map(),
12
- activeSlideIndex: 0,
13
- visibleSlides: 1,
14
- focusedSlideIndex: 0,
15
- carouselId: void 0
16
- }
17
- );
18
- const CarouselDispatchContext = core.createContext(
19
- "CarouselDispatchContext",
20
- () => {
21
- return;
22
- }
23
- );
24
- function CarouselProvider({
25
- children,
26
- activeSlideIndex: activeSlideIndexProp,
27
- defaultActiveSlideIndex = 0,
28
- visibleSlides = 1,
29
- id
30
- }) {
31
- const [activeSlideIndex, setActiveSlideIndex] = core.useControlled({
32
- controlled: activeSlideIndexProp,
33
- default: defaultActiveSlideIndex,
34
- name: "Carousel",
35
- state: "activeSlideIndex"
36
- });
37
- const [state, dispatch] = react.useReducer(CarouselReducer.carouselReducer, {
38
- slides: /* @__PURE__ */ new Map(),
39
- focusedSlideIndex: activeSlideIndex,
40
- activeSlideIndex,
41
- visibleSlides,
42
- carouselId: id
43
- });
44
- react.useEffect(() => {
45
- dispatch({
46
- type: "updateSlideCount",
47
- payload: visibleSlides
48
- });
49
- }, [visibleSlides]);
50
- react.useEffect(() => {
51
- dispatch({
52
- type: "moveToIndex",
53
- payload: activeSlideIndex
54
- });
55
- }, [activeSlideIndex]);
56
- return /* @__PURE__ */ jsxRuntime.jsx(CarouselStateContext.Provider, { value: state, children: /* @__PURE__ */ jsxRuntime.jsx(CarouselDispatchContext.Provider, { value: dispatch, children }) });
57
- }
58
-
59
- exports.CarouselDispatchContext = CarouselDispatchContext;
60
- exports.CarouselProvider = CarouselProvider;
61
- exports.CarouselStateContext = CarouselStateContext;
62
- //# sourceMappingURL=CarouselContext.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CarouselContext.js","sources":["../src/carousel/CarouselContext.tsx"],"sourcesContent":["import { createContext, useControlled } from \"@salt-ds/core\";\nimport { type ReactNode, useEffect, useReducer } from \"react\";\nimport {\n type CarouselReducerDispatch,\n type CarouselReducerState,\n carouselReducer,\n} from \"./CarouselReducer\";\n\nexport const CarouselStateContext = createContext<CarouselReducerState>(\n \"CarouselStateContext\",\n {\n slides: new Map(),\n activeSlideIndex: 0,\n visibleSlides: 1,\n focusedSlideIndex: 0,\n carouselId: undefined,\n },\n);\nexport const CarouselDispatchContext = createContext<CarouselReducerDispatch>(\n \"CarouselDispatchContext\",\n () => {\n return;\n },\n);\n\nexport function CarouselProvider({\n children,\n activeSlideIndex: activeSlideIndexProp,\n defaultActiveSlideIndex = 0,\n visibleSlides = 1,\n id,\n}: {\n children: ReactNode;\n activeSlideIndex?: number;\n defaultActiveSlideIndex?: number;\n visibleSlides?: number;\n id?: string;\n}) {\n const [activeSlideIndex, setActiveSlideIndex] = useControlled({\n controlled: activeSlideIndexProp,\n default: defaultActiveSlideIndex,\n name: \"Carousel\",\n state: \"activeSlideIndex\",\n });\n const [state, dispatch] = useReducer(carouselReducer, {\n slides: new Map(),\n focusedSlideIndex: activeSlideIndex,\n activeSlideIndex,\n visibleSlides,\n carouselId: id,\n });\n\n useEffect(() => {\n dispatch({\n type: \"updateSlideCount\",\n payload: visibleSlides,\n });\n }, [visibleSlides]);\n\n useEffect(() => {\n dispatch({\n type: \"moveToIndex\",\n payload: activeSlideIndex,\n });\n }, [activeSlideIndex]);\n\n return (\n <CarouselStateContext.Provider value={state}>\n <CarouselDispatchContext.Provider value={dispatch}>\n {children}\n </CarouselDispatchContext.Provider>\n </CarouselStateContext.Provider>\n );\n}\n"],"names":["createContext","useControlled","useReducer","carouselReducer","useEffect","jsx"],"mappings":";;;;;;;AAQO,MAAM,oBAAuB,GAAAA,kBAAA;AAAA,EAClC,sBAAA;AAAA,EACA;AAAA,IACE,MAAA,sBAAY,GAAI,EAAA;AAAA,IAChB,gBAAkB,EAAA,CAAA;AAAA,IAClB,aAAe,EAAA,CAAA;AAAA,IACf,iBAAmB,EAAA,CAAA;AAAA,IACnB,UAAY,EAAA;AAAA;AAEhB;AACO,MAAM,uBAA0B,GAAAA,kBAAA;AAAA,EACrC,yBAAA;AAAA,EACA,MAAM;AACJ,IAAA;AAAA;AAEJ;AAEO,SAAS,gBAAiB,CAAA;AAAA,EAC/B,QAAA;AAAA,EACA,gBAAkB,EAAA,oBAAA;AAAA,EAClB,uBAA0B,GAAA,CAAA;AAAA,EAC1B,aAAgB,GAAA,CAAA;AAAA,EAChB;AACF,CAMG,EAAA;AACD,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIC,kBAAc,CAAA;AAAA,IAC5D,UAAY,EAAA,oBAAA;AAAA,IACZ,OAAS,EAAA,uBAAA;AAAA,IACT,IAAM,EAAA,UAAA;AAAA,IACN,KAAO,EAAA;AAAA,GACR,CAAA;AACD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIC,iBAAWC,+BAAiB,EAAA;AAAA,IACpD,MAAA,sBAAY,GAAI,EAAA;AAAA,IAChB,iBAAmB,EAAA,gBAAA;AAAA,IACnB,gBAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAY,EAAA;AAAA,GACb,CAAA;AAED,EAAAC,eAAA,CAAU,MAAM;AACd,IAAS,QAAA,CAAA;AAAA,MACP,IAAM,EAAA,kBAAA;AAAA,MACN,OAAS,EAAA;AAAA,KACV,CAAA;AAAA,GACH,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAAA,eAAA,CAAU,MAAM;AACd,IAAS,QAAA,CAAA;AAAA,MACP,IAAM,EAAA,aAAA;AAAA,MACN,OAAS,EAAA;AAAA,KACV,CAAA;AAAA,GACH,EAAG,CAAC,gBAAgB,CAAC,CAAA;AAErB,EAAA,uBACGC,cAAA,CAAA,oBAAA,CAAqB,QAArB,EAAA,EAA8B,KAAO,EAAA,KAAA,EACpC,QAAC,kBAAAA,cAAA,CAAA,uBAAA,CAAwB,QAAxB,EAAA,EAAiC,KAAO,EAAA,QAAA,EACtC,UACH,CACF,EAAA,CAAA;AAEJ;;;;;;"}
@@ -1,6 +0,0 @@
1
- 'use strict';
2
-
3
- var css_248z = ".saltCarouselControls {\n display: flex;\n gap: var(--salt-spacing-100);\n align-items: center;\n grid-area: controls;\n}\n.saltCarouselControls-container {\n display: flex;\n flex-flow: wrap;\n align-items: center;\n gap: var(--salt-spacing-100);\n justify-content: space-between;\n}\n.saltCarouselControls-container:last-child {\n margin-left: auto;\n}\n.saltCarouselControls-container h2 {\n margin: 0;\n}\n\n.saltCarouselControls-sr-only {\n display: none;\n}\n.saltCarouselControls:focus-within .saltCarouselControls-sr-only {\n display: block;\n position: fixed;\n top: 0;\n left: 0;\n transform: translate(-100%, -100%);\n}\n";
4
-
5
- module.exports = css_248z;
6
- //# sourceMappingURL=CarouselControls.css.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CarouselControls.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -1,122 +0,0 @@
1
- 'use strict';
2
-
3
- var jsxRuntime = require('react/jsx-runtime');
4
- var core = require('@salt-ds/core');
5
- var styles = require('@salt-ds/styles');
6
- var window = require('@salt-ds/window');
7
- var react = require('react');
8
- var CarouselContext = require('./CarouselContext.js');
9
- var CarouselControls$1 = require('./CarouselControls.css.js');
10
-
11
- const withBaseName = core.makePrefixer("saltCarouselControls");
12
- const CarouselControls = react.forwardRef(function CarouselControls2({
13
- onPrevious,
14
- onNext,
15
- disabled,
16
- className,
17
- title,
18
- labelPlacement = "right",
19
- ...rest
20
- }, ref) {
21
- var _a;
22
- const targetWindow = window.useWindow();
23
- styles.useComponentCssInjection({
24
- testId: "salt-carousel-controls",
25
- css: CarouselControls$1,
26
- window: targetWindow
27
- });
28
- const { slides, carouselId, activeSlideIndex, visibleSlides } = react.useContext(CarouselContext.CarouselStateContext);
29
- const dispatch = react.useContext(CarouselContext.CarouselDispatchContext);
30
- const slideCount = slides.size;
31
- const { NextIcon, PreviousIcon } = core.useIcon();
32
- const [isFocused, setIsFocused] = react.useState(false);
33
- function handleFocusCapture() {
34
- !isFocused && setIsFocused(true);
35
- }
36
- function handleBlurCapture() {
37
- isFocused && setIsFocused(false);
38
- }
39
- const prevButtonRef = react.useRef(null);
40
- const nextButtonRef = react.useRef(null);
41
- const slideIds = [...slides.keys()];
42
- const currentId = slideIds[activeSlideIndex] || null;
43
- const prevId = slideIds[activeSlideIndex - 1] || null;
44
- const nextId = slideIds[activeSlideIndex + 1] || null;
45
- const isOnFirstSlide = activeSlideIndex === 0;
46
- const isOnLastSlide = activeSlideIndex === slideCount - visibleSlides;
47
- const isAnnouncerOn = nextButtonRef.current === document.activeElement || prevButtonRef.current === document.activeElement;
48
- const currentSlideDescription = visibleSlides === 1 && currentId && ((_a = slides.get(currentId)) == null ? void 0 : _a.slideDescription) || void 0;
49
- const controlsLabel = slideCount >= 1 && /* @__PURE__ */ jsxRuntime.jsx(
50
- core.Text,
51
- {
52
- as: "span",
53
- "aria-live": isAnnouncerOn ? "polite" : void 0,
54
- "aria-atomic": "false",
55
- children: /* @__PURE__ */ jsxRuntime.jsxs("strong", { children: [
56
- `${activeSlideIndex + 1} ${visibleSlides > 1 && slideCount > 1 ? ` - ${activeSlideIndex + visibleSlides}` : ""} of
57
- ${slideCount}`,
58
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "saltCarouselControls-sr-only", children: currentSlideDescription })
59
- ] })
60
- }
61
- );
62
- function handlePrevClick(event) {
63
- if (!prevId) return;
64
- dispatch({ type: "scroll", payload: prevId });
65
- onPrevious == null ? void 0 : onPrevious(event, slideIds.indexOf(prevId));
66
- }
67
- function handleNextClick(event) {
68
- if (!nextId) return;
69
- dispatch({ type: "scroll", payload: nextId });
70
- onNext == null ? void 0 : onNext(event, slideIds.indexOf(nextId));
71
- }
72
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: withBaseName("container"), ref, ...rest, children: [
73
- title,
74
- /* @__PURE__ */ jsxRuntime.jsxs(
75
- "div",
76
- {
77
- className: withBaseName(),
78
- ref,
79
- ...rest,
80
- onFocusCapture: handleFocusCapture,
81
- onBlurCapture: handleBlurCapture,
82
- children: [
83
- (labelPlacement === "left" || title) && controlsLabel,
84
- /* @__PURE__ */ jsxRuntime.jsx(
85
- core.Button,
86
- {
87
- ref: prevButtonRef,
88
- focusableWhenDisabled: true,
89
- appearance: "bordered",
90
- sentiment: "neutral",
91
- className: withBaseName("prev-button"),
92
- onClick: handlePrevClick,
93
- disabled: isOnFirstSlide || disabled,
94
- "aria-controls": carouselId,
95
- "aria-label": `Previous slide${visibleSlides > 1 ? "s" : ""}`,
96
- children: /* @__PURE__ */ jsxRuntime.jsx(PreviousIcon, { "aria-hidden": true })
97
- }
98
- ),
99
- /* @__PURE__ */ jsxRuntime.jsx(
100
- core.Button,
101
- {
102
- ref: nextButtonRef,
103
- focusableWhenDisabled: true,
104
- appearance: "bordered",
105
- sentiment: "neutral",
106
- className: withBaseName("next-button"),
107
- onClick: handleNextClick,
108
- disabled: isOnLastSlide || disabled,
109
- "aria-controls": carouselId,
110
- "aria-label": `Next slide${visibleSlides > 1 ? "s" : ""}`,
111
- children: /* @__PURE__ */ jsxRuntime.jsx(NextIcon, { "aria-hidden": true })
112
- }
113
- ),
114
- labelPlacement === "right" && !title && controlsLabel
115
- ]
116
- }
117
- )
118
- ] });
119
- });
120
-
121
- exports.CarouselControls = CarouselControls;
122
- //# sourceMappingURL=CarouselControls.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CarouselControls.js","sources":["../src/carousel/CarouselControls.tsx"],"sourcesContent":["import { Button, Text, makePrefixer, useIcon } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport {\n type HTMLAttributes,\n type MouseEvent,\n type ReactNode,\n type SyntheticEvent,\n forwardRef,\n useContext,\n useRef,\n useState,\n} from \"react\";\nimport {\n CarouselDispatchContext,\n CarouselStateContext,\n} from \"./CarouselContext\";\n\nimport carouselControlsCss from \"./CarouselControls.css\";\n\nconst withBaseName = makePrefixer(\"saltCarouselControls\");\n\nexport interface CarouselControlsProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n /**\n * Callback when Back button is clicked.\n */\n onPrevious?: (\n event: SyntheticEvent<HTMLButtonElement>,\n index: number,\n ) => void;\n /**\n * Callback when Next button is clicked.\n */\n onNext?: (event: SyntheticEvent<HTMLButtonElement>, index: number) => void;\n /**\n * Location of the label relative to the controls.\n *\n * Either 'left', or 'right'`.\n */\n labelPlacement?: \"left\" | \"right\";\n /**\n * If `true`, the carousel controls will be disabled.\n * **/\n disabled?: boolean;\n /**\n * The title of the carousel that accompanies the controls.\n */\n title?: ReactNode;\n}\n\nexport const CarouselControls = forwardRef<\n HTMLDivElement,\n CarouselControlsProps\n>(function CarouselControls(\n {\n onPrevious,\n onNext,\n disabled,\n className,\n title,\n labelPlacement = \"right\",\n ...rest\n },\n ref,\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-carousel-controls\",\n css: carouselControlsCss,\n window: targetWindow,\n });\n const { slides, carouselId, activeSlideIndex, visibleSlides } =\n useContext(CarouselStateContext);\n const dispatch = useContext(CarouselDispatchContext);\n\n const slideCount = slides.size;\n const { NextIcon, PreviousIcon } = useIcon();\n\n const [isFocused, setIsFocused] = useState(false);\n function handleFocusCapture() {\n !isFocused && setIsFocused(true);\n }\n function handleBlurCapture() {\n isFocused && setIsFocused(false);\n }\n\n const prevButtonRef = useRef<HTMLButtonElement>(null);\n const nextButtonRef = useRef<HTMLButtonElement>(null);\n const slideIds = [...slides.keys()];\n\n const currentId = slideIds[activeSlideIndex] || null;\n const prevId = slideIds[activeSlideIndex - 1] || null;\n const nextId = slideIds[activeSlideIndex + 1] || null;\n\n const isOnFirstSlide = activeSlideIndex === 0;\n const isOnLastSlide = activeSlideIndex === slideCount - visibleSlides;\n\n const isAnnouncerOn =\n nextButtonRef.current === document.activeElement ||\n prevButtonRef.current === document.activeElement;\n\n const currentSlideDescription =\n (visibleSlides === 1 &&\n currentId &&\n slides.get(currentId)?.slideDescription) ||\n undefined;\n\n const controlsLabel = slideCount >= 1 && (\n <Text\n as=\"span\"\n aria-live={isAnnouncerOn ? \"polite\" : undefined}\n aria-atomic=\"false\"\n >\n <strong>\n {`${activeSlideIndex + 1} ${visibleSlides > 1 && slideCount > 1 ? ` - ${activeSlideIndex + visibleSlides}` : \"\"} of\n ${slideCount}`}\n\n {\n <span className=\"saltCarouselControls-sr-only\">\n {currentSlideDescription}\n </span>\n }\n </strong>\n </Text>\n );\n\n function handlePrevClick(event: MouseEvent<HTMLButtonElement>) {\n if (!prevId) return;\n dispatch({ type: \"scroll\", payload: prevId });\n onPrevious?.(event, slideIds.indexOf(prevId));\n }\n\n function handleNextClick(event: MouseEvent<HTMLButtonElement>) {\n if (!nextId) return;\n dispatch({ type: \"scroll\", payload: nextId });\n onNext?.(event, slideIds.indexOf(nextId));\n }\n\n return (\n <div className={withBaseName(\"container\")} ref={ref} {...rest}>\n {title}\n <div\n className={withBaseName()}\n ref={ref}\n {...rest}\n onFocusCapture={handleFocusCapture}\n onBlurCapture={handleBlurCapture}\n >\n {(labelPlacement === \"left\" || title) && controlsLabel}\n <Button\n ref={prevButtonRef}\n focusableWhenDisabled\n appearance=\"bordered\"\n sentiment=\"neutral\"\n className={withBaseName(\"prev-button\")}\n onClick={handlePrevClick}\n disabled={isOnFirstSlide || disabled}\n aria-controls={carouselId}\n aria-label={`Previous slide${visibleSlides > 1 ? \"s\" : \"\"}`}\n >\n <PreviousIcon aria-hidden />\n </Button>\n <Button\n ref={nextButtonRef}\n focusableWhenDisabled\n appearance=\"bordered\"\n sentiment=\"neutral\"\n className={withBaseName(\"next-button\")}\n onClick={handleNextClick}\n disabled={isOnLastSlide || disabled}\n aria-controls={carouselId}\n aria-label={`Next slide${visibleSlides > 1 ? \"s\" : \"\"}`}\n >\n <NextIcon aria-hidden />\n </Button>\n {labelPlacement === \"right\" && !title && controlsLabel}\n </div>\n </div>\n );\n});\n"],"names":["makePrefixer","forwardRef","CarouselControls","useWindow","useComponentCssInjection","carouselControlsCss","useContext","CarouselStateContext","CarouselDispatchContext","useIcon","useState","useRef","jsx","Text","jsxs","Button"],"mappings":"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"}