@salt-ds/lab 1.0.0-alpha.25 → 1.0.0-alpha.27

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 (348) hide show
  1. package/css/salt-lab.css +452 -522
  2. package/dist-cjs/combo-box-next/ComboBoxNext.js +303 -166
  3. package/dist-cjs/combo-box-next/ComboBoxNext.js.map +1 -1
  4. package/dist-cjs/combo-box-next/useComboBoxNext.js +55 -0
  5. package/dist-cjs/combo-box-next/useComboBoxNext.js.map +1 -0
  6. package/dist-cjs/dropdown/DropdownBase.js +1 -1
  7. package/dist-cjs/dropdown/DropdownBase.js.map +1 -1
  8. package/dist-cjs/dropdown-next/DropdownNext.css.js +1 -1
  9. package/dist-cjs/dropdown-next/DropdownNext.js +333 -170
  10. package/dist-cjs/dropdown-next/DropdownNext.js.map +1 -1
  11. package/dist-cjs/editable-label/EditableLabel.js +1 -1
  12. package/dist-cjs/editable-label/EditableLabel.js.map +1 -1
  13. package/dist-cjs/index.js +12 -10
  14. package/dist-cjs/index.js.map +1 -1
  15. package/dist-cjs/layer-layout/LayerLayout.js +0 -1
  16. package/dist-cjs/layer-layout/LayerLayout.js.map +1 -1
  17. package/dist-cjs/list-control/ListControlContext.js +36 -0
  18. package/dist-cjs/list-control/ListControlContext.js.map +1 -0
  19. package/dist-cjs/list-control/ListControlState.js +193 -0
  20. package/dist-cjs/list-control/ListControlState.js.map +1 -0
  21. package/dist-cjs/navigation-item/ConditionalWrapper.js +2 -4
  22. package/dist-cjs/navigation-item/ConditionalWrapper.js.map +1 -1
  23. package/dist-cjs/navigation-item/ExpansionIcon.js +2 -4
  24. package/dist-cjs/navigation-item/ExpansionIcon.js.map +1 -1
  25. package/dist-cjs/navigation-item/NavigationItem.css.js +1 -1
  26. package/dist-cjs/navigation-item/NavigationItem.js +4 -7
  27. package/dist-cjs/navigation-item/NavigationItem.js.map +1 -1
  28. package/dist-cjs/option/Option.css.js +6 -0
  29. package/dist-cjs/option/Option.css.js.map +1 -0
  30. package/dist-cjs/option/Option.js +113 -0
  31. package/dist-cjs/option/Option.js.map +1 -0
  32. package/dist-cjs/option/OptionGroup.css.js +6 -0
  33. package/dist-cjs/option/OptionGroup.css.js.map +1 -0
  34. package/dist-cjs/option/OptionGroup.js +44 -0
  35. package/dist-cjs/option/OptionGroup.js.map +1 -0
  36. package/dist-cjs/option/OptionList.css.js +6 -0
  37. package/dist-cjs/option/OptionList.css.js.map +1 -0
  38. package/dist-cjs/option/OptionList.js +40 -0
  39. package/dist-cjs/option/OptionList.js.map +1 -0
  40. package/dist-cjs/pagination/CompactInput.css.js +6 -0
  41. package/dist-cjs/pagination/CompactInput.css.js.map +1 -0
  42. package/dist-cjs/pagination/CompactInput.js +31 -35
  43. package/dist-cjs/pagination/CompactInput.js.map +1 -1
  44. package/dist-cjs/pagination/CompactPaginator.css.js +6 -0
  45. package/dist-cjs/pagination/CompactPaginator.css.js.map +1 -0
  46. package/dist-cjs/pagination/CompactPaginator.js +76 -0
  47. package/dist-cjs/pagination/CompactPaginator.js.map +1 -0
  48. package/dist-cjs/pagination/GoToInput.css.js +6 -0
  49. package/dist-cjs/pagination/GoToInput.css.js.map +1 -0
  50. package/dist-cjs/pagination/GoToInput.js +37 -59
  51. package/dist-cjs/pagination/GoToInput.js.map +1 -1
  52. package/dist-cjs/pagination/PageButton.css.js +6 -0
  53. package/dist-cjs/pagination/PageButton.css.js.map +1 -0
  54. package/dist-cjs/pagination/PageButton.js +34 -33
  55. package/dist-cjs/pagination/PageButton.js.map +1 -1
  56. package/dist-cjs/pagination/PageRanges.css.js +6 -0
  57. package/dist-cjs/pagination/PageRanges.css.js.map +1 -0
  58. package/dist-cjs/pagination/PageRanges.js +73 -0
  59. package/dist-cjs/pagination/PageRanges.js.map +1 -0
  60. package/dist-cjs/pagination/Pagination.css.js +1 -1
  61. package/dist-cjs/pagination/Pagination.js +21 -38
  62. package/dist-cjs/pagination/Pagination.js.map +1 -1
  63. package/dist-cjs/pagination/PaginationContext.js +1 -6
  64. package/dist-cjs/pagination/PaginationContext.js.map +1 -1
  65. package/dist-cjs/pagination/Paginator.css.js +6 -0
  66. package/dist-cjs/pagination/Paginator.css.js.map +1 -0
  67. package/dist-cjs/pagination/Paginator.js +33 -43
  68. package/dist-cjs/pagination/Paginator.js.map +1 -1
  69. package/dist-cjs/pagination/usePaginationContext.js +1 -1
  70. package/dist-cjs/pagination/usePaginationContext.js.map +1 -1
  71. package/dist-cjs/scrim/Scrim.css.js +1 -1
  72. package/dist-cjs/scrim/Scrim.js +10 -140
  73. package/dist-cjs/scrim/Scrim.js.map +1 -1
  74. package/dist-cjs/tokenized-input/internal/InputPill.js +13 -9
  75. package/dist-cjs/tokenized-input/internal/InputPill.js.map +1 -1
  76. package/dist-cjs/tokenized-input-next/TokenizedInputNext.css.js +6 -0
  77. package/dist-cjs/tokenized-input-next/TokenizedInputNext.css.js.map +1 -0
  78. package/dist-cjs/tokenized-input-next/TokenizedInputNext.js +244 -0
  79. package/dist-cjs/tokenized-input-next/TokenizedInputNext.js.map +1 -0
  80. package/dist-cjs/tokenized-input-next/internal/InputPill.css.js +6 -0
  81. package/dist-cjs/tokenized-input-next/internal/InputPill.css.js.map +1 -0
  82. package/dist-cjs/tokenized-input-next/internal/InputPill.js +83 -0
  83. package/dist-cjs/tokenized-input-next/internal/InputPill.js.map +1 -0
  84. package/dist-cjs/tokenized-input-next/internal/calcFirstHiddenIndex.js +22 -0
  85. package/dist-cjs/tokenized-input-next/internal/calcFirstHiddenIndex.js.map +1 -0
  86. package/dist-cjs/tokenized-input-next/internal/useResizeObserver.js +37 -0
  87. package/dist-cjs/tokenized-input-next/internal/useResizeObserver.js.map +1 -0
  88. package/dist-cjs/tokenized-input-next/internal/useWidth.js +48 -0
  89. package/dist-cjs/tokenized-input-next/internal/useWidth.js.map +1 -0
  90. package/dist-cjs/tokenized-input-next/useTokenizedInputNext.js +479 -0
  91. package/dist-cjs/tokenized-input-next/useTokenizedInputNext.js.map +1 -0
  92. package/dist-cjs/toolbar/overflow-panel/OverflowPanel.js +1 -1
  93. package/dist-cjs/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
  94. package/dist-cjs/tree/Tree.js +1 -2
  95. package/dist-cjs/tree/Tree.js.map +1 -1
  96. package/dist-es/combo-box-next/ComboBoxNext.js +306 -169
  97. package/dist-es/combo-box-next/ComboBoxNext.js.map +1 -1
  98. package/dist-es/combo-box-next/useComboBoxNext.js +51 -0
  99. package/dist-es/combo-box-next/useComboBoxNext.js.map +1 -0
  100. package/dist-es/dropdown/DropdownBase.js +1 -1
  101. package/dist-es/dropdown/DropdownBase.js.map +1 -1
  102. package/dist-es/dropdown-next/DropdownNext.css.js +1 -1
  103. package/dist-es/dropdown-next/DropdownNext.js +332 -169
  104. package/dist-es/dropdown-next/DropdownNext.js.map +1 -1
  105. package/dist-es/editable-label/EditableLabel.js +1 -1
  106. package/dist-es/editable-label/EditableLabel.js.map +1 -1
  107. package/dist-es/index.js +6 -5
  108. package/dist-es/index.js.map +1 -1
  109. package/dist-es/layer-layout/LayerLayout.js +0 -1
  110. package/dist-es/layer-layout/LayerLayout.js.map +1 -1
  111. package/dist-es/list-control/ListControlContext.js +31 -0
  112. package/dist-es/list-control/ListControlContext.js.map +1 -0
  113. package/dist-es/list-control/ListControlState.js +189 -0
  114. package/dist-es/list-control/ListControlState.js.map +1 -0
  115. package/dist-es/navigation-item/ConditionalWrapper.js +2 -4
  116. package/dist-es/navigation-item/ConditionalWrapper.js.map +1 -1
  117. package/dist-es/navigation-item/ExpansionIcon.js +2 -4
  118. package/dist-es/navigation-item/ExpansionIcon.js.map +1 -1
  119. package/dist-es/navigation-item/NavigationItem.css.js +1 -1
  120. package/dist-es/navigation-item/NavigationItem.js +4 -7
  121. package/dist-es/navigation-item/NavigationItem.js.map +1 -1
  122. package/dist-es/option/Option.css.js +4 -0
  123. package/dist-es/option/Option.css.js.map +1 -0
  124. package/dist-es/option/Option.js +109 -0
  125. package/dist-es/option/Option.js.map +1 -0
  126. package/dist-es/option/OptionGroup.css.js +4 -0
  127. package/dist-es/option/OptionGroup.css.js.map +1 -0
  128. package/dist-es/option/OptionGroup.js +40 -0
  129. package/dist-es/option/OptionGroup.js.map +1 -0
  130. package/dist-es/option/OptionList.css.js +4 -0
  131. package/dist-es/option/OptionList.css.js.map +1 -0
  132. package/dist-es/option/OptionList.js +36 -0
  133. package/dist-es/option/OptionList.js.map +1 -0
  134. package/dist-es/pagination/CompactInput.css.js +4 -0
  135. package/dist-es/pagination/CompactInput.css.js.map +1 -0
  136. package/dist-es/pagination/CompactInput.js +32 -36
  137. package/dist-es/pagination/CompactInput.js.map +1 -1
  138. package/dist-es/pagination/CompactPaginator.css.js +4 -0
  139. package/dist-es/pagination/CompactPaginator.css.js.map +1 -0
  140. package/dist-es/pagination/CompactPaginator.js +72 -0
  141. package/dist-es/pagination/CompactPaginator.js.map +1 -0
  142. package/dist-es/pagination/GoToInput.css.js +4 -0
  143. package/dist-es/pagination/GoToInput.css.js.map +1 -0
  144. package/dist-es/pagination/GoToInput.js +40 -62
  145. package/dist-es/pagination/GoToInput.js.map +1 -1
  146. package/dist-es/pagination/PageButton.css.js +4 -0
  147. package/dist-es/pagination/PageButton.css.js.map +1 -0
  148. package/dist-es/pagination/PageButton.js +34 -33
  149. package/dist-es/pagination/PageButton.js.map +1 -1
  150. package/dist-es/pagination/PageRanges.css.js +4 -0
  151. package/dist-es/pagination/PageRanges.css.js.map +1 -0
  152. package/dist-es/pagination/PageRanges.js +69 -0
  153. package/dist-es/pagination/PageRanges.js.map +1 -0
  154. package/dist-es/pagination/Pagination.css.js +1 -1
  155. package/dist-es/pagination/Pagination.js +20 -37
  156. package/dist-es/pagination/Pagination.js.map +1 -1
  157. package/dist-es/pagination/PaginationContext.js +1 -6
  158. package/dist-es/pagination/PaginationContext.js.map +1 -1
  159. package/dist-es/pagination/Paginator.css.js +4 -0
  160. package/dist-es/pagination/Paginator.css.js.map +1 -0
  161. package/dist-es/pagination/Paginator.js +32 -42
  162. package/dist-es/pagination/Paginator.js.map +1 -1
  163. package/dist-es/pagination/usePaginationContext.js +1 -1
  164. package/dist-es/pagination/usePaginationContext.js.map +1 -1
  165. package/dist-es/scrim/Scrim.css.js +1 -1
  166. package/dist-es/scrim/Scrim.js +12 -138
  167. package/dist-es/scrim/Scrim.js.map +1 -1
  168. package/dist-es/tokenized-input/internal/InputPill.js +15 -11
  169. package/dist-es/tokenized-input/internal/InputPill.js.map +1 -1
  170. package/dist-es/tokenized-input-next/TokenizedInputNext.css.js +4 -0
  171. package/dist-es/tokenized-input-next/TokenizedInputNext.css.js.map +1 -0
  172. package/dist-es/tokenized-input-next/TokenizedInputNext.js +240 -0
  173. package/dist-es/tokenized-input-next/TokenizedInputNext.js.map +1 -0
  174. package/dist-es/tokenized-input-next/internal/InputPill.css.js +4 -0
  175. package/dist-es/tokenized-input-next/internal/InputPill.css.js.map +1 -0
  176. package/dist-es/tokenized-input-next/internal/InputPill.js +79 -0
  177. package/dist-es/tokenized-input-next/internal/InputPill.js.map +1 -0
  178. package/dist-es/tokenized-input-next/internal/calcFirstHiddenIndex.js +18 -0
  179. package/dist-es/tokenized-input-next/internal/calcFirstHiddenIndex.js.map +1 -0
  180. package/dist-es/tokenized-input-next/internal/useResizeObserver.js +33 -0
  181. package/dist-es/tokenized-input-next/internal/useResizeObserver.js.map +1 -0
  182. package/dist-es/tokenized-input-next/internal/useWidth.js +42 -0
  183. package/dist-es/tokenized-input-next/internal/useWidth.js.map +1 -0
  184. package/dist-es/tokenized-input-next/useTokenizedInputNext.js +471 -0
  185. package/dist-es/tokenized-input-next/useTokenizedInputNext.js.map +1 -0
  186. package/dist-es/toolbar/overflow-panel/OverflowPanel.js +1 -1
  187. package/dist-es/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
  188. package/dist-es/tree/Tree.js +1 -2
  189. package/dist-es/tree/Tree.js.map +1 -1
  190. package/dist-types/combo-box-next/ComboBoxNext.d.ts +7 -80
  191. package/dist-types/combo-box-next/useComboBoxNext.d.ts +31 -0
  192. package/dist-types/dialog/useDialog.d.ts +6 -7
  193. package/dist-types/drawer/useDrawer.d.ts +6 -7
  194. package/dist-types/dropdown-next/DropdownNext.d.ts +25 -27
  195. package/dist-types/index.d.ts +2 -2
  196. package/dist-types/list-control/ListControlContext.d.ts +20 -0
  197. package/dist-types/list-control/ListControlState.d.ts +68 -0
  198. package/dist-types/navigation-item/ConditionalWrapper.d.ts +1 -1
  199. package/dist-types/navigation-item/ExpansionIcon.d.ts +1 -1
  200. package/dist-types/option/Option.d.ts +20 -0
  201. package/dist-types/option/OptionGroup.d.ts +12 -0
  202. package/dist-types/option/OptionList.d.ts +5 -0
  203. package/dist-types/option/index.d.ts +2 -0
  204. package/dist-types/pagination/CompactInput.d.ts +2 -8
  205. package/dist-types/pagination/CompactPaginator.d.ts +1 -0
  206. package/dist-types/pagination/GoToInput.d.ts +13 -4
  207. package/dist-types/pagination/PageButton.d.ts +2 -3
  208. package/dist-types/pagination/PageRanges.d.ts +5 -0
  209. package/dist-types/pagination/Pagination.d.ts +15 -4
  210. package/dist-types/pagination/PaginationContext.d.ts +2 -4
  211. package/dist-types/pagination/Paginator.d.ts +6 -3
  212. package/dist-types/pagination/index.d.ts +2 -0
  213. package/dist-types/scrim/Scrim.d.ts +6 -61
  214. package/dist-types/scrim/index.d.ts +0 -1
  215. package/dist-types/tabs/drag-drop/drag-utils.d.ts +6 -6
  216. package/dist-types/tokenized-input/internal/InputPill.d.ts +7 -5
  217. package/dist-types/tokenized-input-next/TokenizedInputNext.d.ts +51 -0
  218. package/dist-types/tokenized-input-next/index.d.ts +2 -0
  219. package/dist-types/tokenized-input-next/internal/InputPill.d.ts +29 -0
  220. package/dist-types/tokenized-input-next/internal/calcFirstHiddenIndex.d.ts +4 -0
  221. package/dist-types/tokenized-input-next/internal/useResizeObserver.d.ts +6 -0
  222. package/dist-types/tokenized-input-next/internal/useWidth.d.ts +7 -0
  223. package/dist-types/tokenized-input-next/useTokenizedInputNext.d.ts +47 -0
  224. package/package.json +3 -3
  225. package/dist-cjs/combo-box-next/ComboBoxNext.css.js +0 -6
  226. package/dist-cjs/combo-box-next/ComboBoxNext.css.js.map +0 -1
  227. package/dist-cjs/combo-box-next/useComboBox.js +0 -147
  228. package/dist-cjs/combo-box-next/useComboBox.js.map +0 -1
  229. package/dist-cjs/combo-box-next/useComboboxPortal.js +0 -75
  230. package/dist-cjs/combo-box-next/useComboboxPortal.js.map +0 -1
  231. package/dist-cjs/combo-box-next/utils.js +0 -36
  232. package/dist-cjs/combo-box-next/utils.js.map +0 -1
  233. package/dist-cjs/dropdown-next/useDropdownNext.js +0 -188
  234. package/dist-cjs/dropdown-next/useDropdownNext.js.map +0 -1
  235. package/dist-cjs/focus-manager/FocusManager.js +0 -158
  236. package/dist-cjs/focus-manager/FocusManager.js.map +0 -1
  237. package/dist-cjs/focus-manager/internal/findAllTabbableElements.js +0 -45
  238. package/dist-cjs/focus-manager/internal/findAllTabbableElements.js.map +0 -1
  239. package/dist-cjs/focus-manager/internal/useReturnFocus.js +0 -59
  240. package/dist-cjs/focus-manager/internal/useReturnFocus.js.map +0 -1
  241. package/dist-cjs/pagination/ArrowButton.js +0 -64
  242. package/dist-cjs/pagination/ArrowButton.js.map +0 -1
  243. package/dist-cjs/pagination/CompactControls.js +0 -38
  244. package/dist-cjs/pagination/CompactControls.js.map +0 -1
  245. package/dist-cjs/pagination/RegularControls.js +0 -58
  246. package/dist-cjs/pagination/RegularControls.js.map +0 -1
  247. package/dist-cjs/pagination/utils.js +0 -10
  248. package/dist-cjs/pagination/utils.js.map +0 -1
  249. package/dist-cjs/pill/ClosablePill.js +0 -61
  250. package/dist-cjs/pill/ClosablePill.js.map +0 -1
  251. package/dist-cjs/pill/Pill.css.js +0 -6
  252. package/dist-cjs/pill/Pill.css.js.map +0 -1
  253. package/dist-cjs/pill/Pill.js +0 -49
  254. package/dist-cjs/pill/Pill.js.map +0 -1
  255. package/dist-cjs/pill/PillBase.js +0 -133
  256. package/dist-cjs/pill/PillBase.js.map +0 -1
  257. package/dist-cjs/pill/SelectablePill.js +0 -55
  258. package/dist-cjs/pill/SelectablePill.js.map +0 -1
  259. package/dist-cjs/pill/constants.js +0 -8
  260. package/dist-cjs/pill/constants.js.map +0 -1
  261. package/dist-cjs/pill/internal/DeleteButton.js +0 -37
  262. package/dist-cjs/pill/internal/DeleteButton.js.map +0 -1
  263. package/dist-cjs/pill/internal/DivButton.js +0 -68
  264. package/dist-cjs/pill/internal/DivButton.js.map +0 -1
  265. package/dist-cjs/pill/internal/PillCheckbox.css.js +0 -6
  266. package/dist-cjs/pill/internal/PillCheckbox.css.js.map +0 -1
  267. package/dist-cjs/pill/internal/PillCheckbox.js +0 -27
  268. package/dist-cjs/pill/internal/PillCheckbox.js.map +0 -1
  269. package/dist-cjs/pill-next/PillNext.css.js +0 -6
  270. package/dist-cjs/pill-next/PillNext.css.js.map +0 -1
  271. package/dist-cjs/pill-next/PillNext.js +0 -65
  272. package/dist-cjs/pill-next/PillNext.js.map +0 -1
  273. package/dist-cjs/scrim/ScrimContext.js +0 -13
  274. package/dist-cjs/scrim/ScrimContext.js.map +0 -1
  275. package/dist-cjs/scrim/internal/PreventFocus.js +0 -39
  276. package/dist-cjs/scrim/internal/PreventFocus.js.map +0 -1
  277. package/dist-es/combo-box-next/ComboBoxNext.css.js +0 -4
  278. package/dist-es/combo-box-next/ComboBoxNext.css.js.map +0 -1
  279. package/dist-es/combo-box-next/useComboBox.js +0 -143
  280. package/dist-es/combo-box-next/useComboBox.js.map +0 -1
  281. package/dist-es/combo-box-next/useComboboxPortal.js +0 -71
  282. package/dist-es/combo-box-next/useComboboxPortal.js.map +0 -1
  283. package/dist-es/combo-box-next/utils.js +0 -31
  284. package/dist-es/combo-box-next/utils.js.map +0 -1
  285. package/dist-es/dropdown-next/useDropdownNext.js +0 -184
  286. package/dist-es/dropdown-next/useDropdownNext.js.map +0 -1
  287. package/dist-es/focus-manager/FocusManager.js +0 -154
  288. package/dist-es/focus-manager/FocusManager.js.map +0 -1
  289. package/dist-es/focus-manager/internal/findAllTabbableElements.js +0 -41
  290. package/dist-es/focus-manager/internal/findAllTabbableElements.js.map +0 -1
  291. package/dist-es/focus-manager/internal/useReturnFocus.js +0 -55
  292. package/dist-es/focus-manager/internal/useReturnFocus.js.map +0 -1
  293. package/dist-es/pagination/ArrowButton.js +0 -60
  294. package/dist-es/pagination/ArrowButton.js.map +0 -1
  295. package/dist-es/pagination/CompactControls.js +0 -34
  296. package/dist-es/pagination/CompactControls.js.map +0 -1
  297. package/dist-es/pagination/RegularControls.js +0 -54
  298. package/dist-es/pagination/RegularControls.js.map +0 -1
  299. package/dist-es/pagination/utils.js +0 -6
  300. package/dist-es/pagination/utils.js.map +0 -1
  301. package/dist-es/pill/ClosablePill.js +0 -57
  302. package/dist-es/pill/ClosablePill.js.map +0 -1
  303. package/dist-es/pill/Pill.css.js +0 -4
  304. package/dist-es/pill/Pill.css.js.map +0 -1
  305. package/dist-es/pill/Pill.js +0 -45
  306. package/dist-es/pill/Pill.js.map +0 -1
  307. package/dist-es/pill/PillBase.js +0 -129
  308. package/dist-es/pill/PillBase.js.map +0 -1
  309. package/dist-es/pill/SelectablePill.js +0 -51
  310. package/dist-es/pill/SelectablePill.js.map +0 -1
  311. package/dist-es/pill/constants.js +0 -4
  312. package/dist-es/pill/constants.js.map +0 -1
  313. package/dist-es/pill/internal/DeleteButton.js +0 -33
  314. package/dist-es/pill/internal/DeleteButton.js.map +0 -1
  315. package/dist-es/pill/internal/DivButton.js +0 -64
  316. package/dist-es/pill/internal/DivButton.js.map +0 -1
  317. package/dist-es/pill/internal/PillCheckbox.css.js +0 -4
  318. package/dist-es/pill/internal/PillCheckbox.css.js.map +0 -1
  319. package/dist-es/pill/internal/PillCheckbox.js +0 -23
  320. package/dist-es/pill/internal/PillCheckbox.js.map +0 -1
  321. package/dist-es/pill-next/PillNext.css.js +0 -4
  322. package/dist-es/pill-next/PillNext.css.js.map +0 -1
  323. package/dist-es/pill-next/PillNext.js +0 -57
  324. package/dist-es/pill-next/PillNext.js.map +0 -1
  325. package/dist-es/scrim/ScrimContext.js +0 -9
  326. package/dist-es/scrim/ScrimContext.js.map +0 -1
  327. package/dist-es/scrim/internal/PreventFocus.js +0 -35
  328. package/dist-es/scrim/internal/PreventFocus.js.map +0 -1
  329. package/dist-types/combo-box-next/useComboBox.d.ts +0 -44
  330. package/dist-types/combo-box-next/useComboboxPortal.d.ts +0 -22
  331. package/dist-types/combo-box-next/utils.d.ts +0 -7
  332. package/dist-types/dropdown-next/useDropdownNext.d.ts +0 -42
  333. package/dist-types/pagination/ArrowButton.d.ts +0 -7
  334. package/dist-types/pagination/CompactControls.d.ts +0 -8
  335. package/dist-types/pagination/RegularControls.d.ts +0 -8
  336. package/dist-types/pagination/utils.d.ts +0 -1
  337. package/dist-types/pill/ClosablePill.d.ts +0 -8
  338. package/dist-types/pill/Pill.d.ts +0 -15
  339. package/dist-types/pill/PillBase.d.ts +0 -52
  340. package/dist-types/pill/SelectablePill.d.ts +0 -17
  341. package/dist-types/pill/constants.d.ts +0 -1
  342. package/dist-types/pill/index.d.ts +0 -3
  343. package/dist-types/pill/internal/DeleteButton.d.ts +0 -8
  344. package/dist-types/pill/internal/DivButton.d.ts +0 -12
  345. package/dist-types/pill/internal/PillCheckbox.d.ts +0 -3
  346. package/dist-types/pill-next/PillNext.d.ts +0 -7
  347. package/dist-types/pill-next/index.d.ts +0 -1
  348. package/dist-types/scrim/ScrimContext.d.ts +0 -1
@@ -1,184 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { offset, size, flip, shift, limitShift, useInteractions, useDismiss, useRole } from '@floating-ui/react';
3
- import { useControlled, useFloatingUI } from '@salt-ds/core';
4
- import '../list-next/ListNext.js';
5
- import { ListItemNext } from '../list-next/ListItemNext.js';
6
- import { useList } from '../list-next/useList.js';
7
-
8
- const useDropdownNext = ({
9
- listProps,
10
- openControlProp,
11
- onOpenChange: onOpenChangeProp,
12
- placement: placementProp
13
- }) => {
14
- const [open, setOpen] = useControlled({
15
- controlled: openControlProp,
16
- default: false,
17
- name: "DropdownNext",
18
- state: "open"
19
- });
20
- const {
21
- focusHandler: listFocusHandler,
22
- keyDownHandler: listKeyDownHandler,
23
- mouseOverHandler: listMouseOverHandler,
24
- activeDescendant,
25
- selectedItem,
26
- setSelectedItem,
27
- highlightedItem,
28
- setHighlightedItem,
29
- contextValue: listContextValue
30
- } = useList({
31
- ...listProps
32
- });
33
- const { select, highlight } = listContextValue;
34
- const getListItems = (source) => {
35
- if (!source)
36
- return;
37
- return source.map((item, index) => {
38
- return /* @__PURE__ */ jsx(ListItemNext, {
39
- value: item,
40
- onMouseDown: (event) => {
41
- select(event);
42
- },
43
- onMouseMove: (event) => {
44
- highlight(event);
45
- },
46
- children: item
47
- }, index);
48
- });
49
- };
50
- const onOpenChange = (open2) => {
51
- setOpen(open2);
52
- onOpenChangeProp == null ? void 0 : onOpenChangeProp(open2);
53
- };
54
- const {
55
- floating,
56
- reference,
57
- x,
58
- y,
59
- strategy,
60
- placement,
61
- context,
62
- elements,
63
- refs
64
- } = useFloatingUI({
65
- open,
66
- onOpenChange,
67
- placement: placementProp,
68
- middleware: [
69
- offset(0),
70
- size({
71
- apply({ rects, elements: elements2 }) {
72
- Object.assign(elements2.floating.style, {
73
- width: `${rects.reference.width}px`
74
- });
75
- }
76
- }),
77
- flip(),
78
- shift({ limiter: limitShift() })
79
- ]
80
- });
81
- const { getReferenceProps, getFloatingProps, getItemProps } = useInteractions(
82
- [useDismiss(context), useRole(context, { role: "listbox" })]
83
- );
84
- const getDropdownNextProps = () => {
85
- return getFloatingProps({
86
- "data-placement": placement,
87
- ref: floating
88
- });
89
- };
90
- const getPosition = () => {
91
- var _a, _b;
92
- return {
93
- top: y != null ? y : 0,
94
- left: x != null ? x : 0,
95
- position: strategy,
96
- width: (_a = elements.floating) == null ? void 0 : _a.clientWidth,
97
- height: (_b = elements.floating) == null ? void 0 : _b.clientHeight
98
- };
99
- };
100
- const focusHandler = (event) => {
101
- if (selectedItem) {
102
- listFocusHandler(event);
103
- }
104
- };
105
- const mouseDownHandler = () => {
106
- setOpen(!open);
107
- };
108
- const mouseOverHandler = () => {
109
- listMouseOverHandler();
110
- };
111
- const listSelectHandler = () => {
112
- setOpen(false);
113
- };
114
- const keyDownHandler = (event) => {
115
- const { key } = event;
116
- switch (key) {
117
- case "ArrowUp":
118
- listKeyDownHandler(event);
119
- break;
120
- case "ArrowDown":
121
- setOpen(true);
122
- listKeyDownHandler(event);
123
- break;
124
- case " ":
125
- case "Enter":
126
- if (!open) {
127
- setOpen(true);
128
- break;
129
- }
130
- if (open) {
131
- listKeyDownHandler(event);
132
- setOpen(false);
133
- break;
134
- }
135
- break;
136
- case "Escape":
137
- setOpen(false);
138
- break;
139
- case "Tab":
140
- setOpen(false);
141
- break;
142
- case "PageUp":
143
- case "PageDown":
144
- case "Home":
145
- case "End":
146
- if (open) {
147
- listKeyDownHandler(event);
148
- break;
149
- }
150
- break;
151
- }
152
- };
153
- return {
154
- handlers: {
155
- keyDownHandler,
156
- focusHandler,
157
- mouseOverHandler,
158
- mouseDownHandler,
159
- listSelectHandler
160
- },
161
- refs,
162
- open,
163
- getReferenceProps,
164
- getItemProps,
165
- activeDescendant,
166
- selectedItem,
167
- setSelectedItem,
168
- highlightedItem,
169
- setHighlightedItem,
170
- getListItems,
171
- portalProps: {
172
- open,
173
- setOpen,
174
- floating,
175
- reference,
176
- getFloatingProps,
177
- getDropdownNextProps,
178
- getPosition
179
- }
180
- };
181
- };
182
-
183
- export { useDropdownNext };
184
- //# sourceMappingURL=useDropdownNext.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useDropdownNext.js","sources":["../src/dropdown-next/useDropdownNext.tsx"],"sourcesContent":["import {\n useInteractions,\n useDismiss,\n useRole,\n flip,\n shift,\n limitShift,\n offset,\n size,\n} from \"@floating-ui/react\";\nimport {\n useControlled,\n useFloatingUI,\n UseFloatingUIProps,\n} from \"@salt-ds/core\";\nimport { ListItemNext } from \"../list-next\";\nimport { HTMLProps, KeyboardEvent, FocusEvent } from \"react\";\nimport { useList, UseListProps } from \"../list-next/useList\";\n\ninterface UseDropdownNextProps\n extends Partial<\n Pick<UseFloatingUIProps, \"onOpenChange\" | \"open\" | \"placement\">\n > {\n listProps: UseListProps;\n // props for controlled dropdown\n openControlProp?: boolean;\n}\n\nexport const useDropdownNext = ({\n listProps,\n openControlProp,\n onOpenChange: onOpenChangeProp,\n placement: placementProp,\n}: UseDropdownNextProps) => {\n const [open, setOpen] = useControlled({\n controlled: openControlProp,\n default: false,\n name: \"DropdownNext\",\n state: \"open\",\n });\n\n // USELIST HOOK\n const {\n focusHandler: listFocusHandler,\n keyDownHandler: listKeyDownHandler,\n mouseOverHandler: listMouseOverHandler,\n activeDescendant,\n selectedItem,\n setSelectedItem,\n highlightedItem,\n setHighlightedItem,\n contextValue: listContextValue,\n } = useList({\n ...listProps,\n });\n\n const { select, highlight } = listContextValue;\n\n // LIST SOURCE\n const getListItems = (source: string[]) => {\n if (!source) return;\n\n return source.map((item, index) => {\n return (\n <ListItemNext\n key={index}\n value={item}\n onMouseDown={(event) => {\n select(event);\n }}\n onMouseMove={(event) => {\n highlight(event);\n }}\n >\n {item}\n </ListItemNext>\n );\n });\n };\n\n // FLOATING PORTAL\n const onOpenChange = (open: boolean) => {\n setOpen(open);\n onOpenChangeProp?.(open);\n };\n\n const {\n floating,\n reference,\n x,\n y,\n strategy,\n placement,\n context,\n elements,\n refs,\n } = useFloatingUI({\n open,\n onOpenChange,\n placement: placementProp,\n middleware: [\n offset(0),\n size({\n apply({ rects, elements }) {\n Object.assign(elements.floating.style, {\n width: `${rects.reference.width}px`,\n });\n },\n }),\n flip(),\n shift({ limiter: limitShift() }),\n ],\n });\n\n const { getReferenceProps, getFloatingProps, getItemProps } = useInteractions(\n [useDismiss(context), useRole(context, { role: \"listbox\" })]\n );\n\n const getDropdownNextProps = (): HTMLProps<HTMLDivElement> => {\n return getFloatingProps({\n // @ts-ignore\n \"data-placement\": placement,\n ref: floating,\n });\n };\n\n const getPosition = () => ({\n top: y ?? 0,\n left: x ?? 0,\n position: strategy,\n width: elements.floating?.clientWidth,\n height: elements.floating?.clientHeight,\n });\n\n // handles focus on mouse and keyboard\n const focusHandler = (event: FocusEvent<HTMLElement>) => {\n if (selectedItem) {\n listFocusHandler(event as FocusEvent<HTMLUListElement>);\n }\n };\n\n // handles mouse click on dropdown button\n const mouseDownHandler = () => {\n setOpen(!open);\n };\n\n // handles mouse hover on dropdown button\n const mouseOverHandler = () => {\n listMouseOverHandler();\n };\n\n const listSelectHandler = () => {\n setOpen(false);\n };\n\n const keyDownHandler = (event: KeyboardEvent<HTMLElement>) => {\n const { key } = event;\n switch (key) {\n case \"ArrowUp\":\n listKeyDownHandler(event);\n break;\n case \"ArrowDown\":\n setOpen(true);\n listKeyDownHandler(event);\n break;\n case \" \":\n case \"Enter\":\n if (!open) {\n setOpen(true);\n break;\n }\n if (open) {\n listKeyDownHandler(event);\n setOpen(false);\n break;\n }\n break;\n case \"Escape\":\n setOpen(false);\n break;\n case \"Tab\":\n setOpen(false);\n break;\n case \"PageUp\":\n case \"PageDown\":\n case \"Home\":\n case \"End\":\n if (open) {\n listKeyDownHandler(event);\n break;\n }\n break;\n default:\n break;\n }\n };\n\n return {\n handlers: {\n keyDownHandler,\n focusHandler,\n mouseOverHandler,\n mouseDownHandler,\n listSelectHandler,\n },\n refs,\n open,\n getReferenceProps,\n getItemProps,\n activeDescendant,\n selectedItem,\n setSelectedItem,\n highlightedItem,\n setHighlightedItem,\n getListItems,\n portalProps: {\n open,\n setOpen,\n floating,\n reference,\n getFloatingProps,\n getDropdownNextProps,\n getPosition,\n },\n };\n};\n"],"names":["open","elements"],"mappings":"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"}
@@ -1,154 +0,0 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { useRef, useState, useCallback } from 'react';
3
- import { ownerDocument, useIsomorphicLayoutEffect } from '@salt-ds/core';
4
- import { findAllTabbableElements } from './internal/findAllTabbableElements.js';
5
- import { useReturnFocus } from './internal/useReturnFocus.js';
6
-
7
- const defaultSelector = `
8
- [tabindex="0"],
9
- a:not([tabindex="-1"]),
10
- area:not([tabindex="-1"]),
11
- details:not([tabindex="-1"]),
12
- iframe:not([tabindex="-1"]),
13
- select:not([tabindex="-1"]),
14
- textarea:not([tabindex="-1"]),
15
- button:not([tabindex="-1"]),
16
- input:not([tabindex="-1"])
17
- `;
18
- function tryFocus(node) {
19
- if (!node)
20
- return;
21
- const initialTabIndex = node.getAttribute("tabindex");
22
- node.setAttribute("tabindex", "-1");
23
- const removeTabIndex = () => {
24
- if (initialTabIndex === null) {
25
- node.removeAttribute("tabindex");
26
- } else {
27
- node.setAttribute("tabindex", initialTabIndex);
28
- }
29
- node.removeEventListener("blur", removeTabIndex);
30
- };
31
- node.addEventListener("blur", removeTabIndex);
32
- node.focus();
33
- }
34
- function FocusManager(props) {
35
- const {
36
- active,
37
- autoFocusRef,
38
- children,
39
- className,
40
- disableAutoFocus,
41
- disableFocusTrap,
42
- disableReturnFocus,
43
- fallbackFocusRef,
44
- tabEnabledSelectors = defaultSelector,
45
- returnFocusOptions
46
- } = props;
47
- const containerRef = useRef(null);
48
- const trapStartRef = useRef(null);
49
- const trapEndRef = useRef(null);
50
- const staticElementRef = useRef(null);
51
- const [hasFocus, setHasFocus] = useState(false);
52
- useReturnFocus({
53
- focusOptions: returnFocusOptions,
54
- disabled: disableReturnFocus || disableAutoFocus,
55
- active,
56
- document: ownerDocument(containerRef.current)
57
- });
58
- const resolveElementAtIndex = useCallback(
59
- (tabbableElements, index) => {
60
- if (tabbableElements.length >= 1) {
61
- const element = tabbableElements[index];
62
- if (element == null ? void 0 : element.shadowRoot) {
63
- return element.shadowRoot.querySelector(
64
- tabEnabledSelectors
65
- );
66
- }
67
- return element;
68
- }
69
- },
70
- [tabEnabledSelectors]
71
- );
72
- const getFirstElement = useCallback(() => {
73
- const tabbableElements = findAllTabbableElements(
74
- containerRef.current,
75
- tabEnabledSelectors,
76
- [trapEndRef.current, trapStartRef.current]
77
- );
78
- return resolveElementAtIndex(tabbableElements, 0);
79
- }, [resolveElementAtIndex, tabEnabledSelectors]);
80
- const getLastElement = () => {
81
- const tabbableElements = findAllTabbableElements(
82
- containerRef.current,
83
- tabEnabledSelectors,
84
- [trapEndRef.current, trapStartRef.current]
85
- );
86
- return resolveElementAtIndex(tabbableElements, tabbableElements.length - 1);
87
- };
88
- const handleTrapStartFocus = (event) => {
89
- const isEnteringFocusTrap = !hasFocus && ownerDocument(containerRef.current).activeElement === trapStartRef.current;
90
- const nextElement = isEnteringFocusTrap ? getFirstElement() : getLastElement();
91
- if (nextElement) {
92
- nextElement.focus();
93
- }
94
- event.preventDefault();
95
- };
96
- const handleTrapEndFocus = (event) => {
97
- const nextElement = getFirstElement();
98
- if (nextElement) {
99
- nextElement.focus();
100
- }
101
- event.preventDefault();
102
- };
103
- useIsomorphicLayoutEffect(() => {
104
- if (active && !disableAutoFocus) {
105
- let nodeToFocus;
106
- if (autoFocusRef == null ? void 0 : autoFocusRef.current) {
107
- nodeToFocus = autoFocusRef.current;
108
- } else {
109
- nodeToFocus = getFirstElement() || (fallbackFocusRef == null ? void 0 : fallbackFocusRef.current);
110
- }
111
- if (!nodeToFocus) {
112
- console.error(
113
- "Your focus trap needs to contain at least once focused node."
114
- );
115
- } else if (nodeToFocus !== ownerDocument(nodeToFocus).activeElement) {
116
- tryFocus(nodeToFocus);
117
- }
118
- }
119
- }, [
120
- active,
121
- disableAutoFocus,
122
- getFirstElement,
123
- autoFocusRef,
124
- fallbackFocusRef
125
- ]);
126
- const enforceFocus = active && !disableFocusTrap;
127
- return /* @__PURE__ */ jsxs("div", {
128
- className,
129
- onFocus: () => setHasFocus(true),
130
- ref: containerRef,
131
- children: [
132
- /* @__PURE__ */ jsx("div", {
133
- "aria-hidden": "true",
134
- onFocus: handleTrapStartFocus,
135
- ref: trapStartRef,
136
- tabIndex: enforceFocus ? 0 : -1
137
- }),
138
- /* @__PURE__ */ jsx("div", {
139
- ref: staticElementRef,
140
- tabIndex: -1
141
- }),
142
- children,
143
- /* @__PURE__ */ jsx("div", {
144
- "aria-hidden": "true",
145
- onFocus: handleTrapEndFocus,
146
- ref: trapEndRef,
147
- tabIndex: enforceFocus ? 0 : -1
148
- })
149
- ]
150
- });
151
- }
152
-
153
- export { FocusManager };
154
- //# sourceMappingURL=FocusManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FocusManager.js","sources":["../src/focus-manager/FocusManager.tsx"],"sourcesContent":["import {\n FocusEvent,\n ReactNode,\n RefObject,\n useCallback,\n useRef,\n useState,\n} from \"react\";\nimport { ownerDocument, useIsomorphicLayoutEffect } from \"@salt-ds/core\";\nimport { findAllTabbableElements } from \"./internal/findAllTabbableElements\";\nimport { useReturnFocus, UseReturnFocusProps } from \"./internal/useReturnFocus\";\n\nconst defaultSelector = `\n[tabindex=\"0\"],\na:not([tabindex=\"-1\"]),\narea:not([tabindex=\"-1\"]),\ndetails:not([tabindex=\"-1\"]),\niframe:not([tabindex=\"-1\"]),\nselect:not([tabindex=\"-1\"]),\ntextarea:not([tabindex=\"-1\"]),\nbutton:not([tabindex=\"-1\"]),\ninput:not([tabindex=\"-1\"])\n`;\n\nexport interface FocusManagerProps {\n active?: boolean;\n autoFocusRef?: RefObject<HTMLElement>;\n children?: ReactNode;\n className?: string;\n disableAutoFocus?: boolean;\n disableFocusTrap?: boolean;\n disableReturnFocus?: boolean;\n fallbackFocusRef?: RefObject<HTMLElement>;\n tabEnabledSelectors?: string;\n returnFocusOptions?: UseReturnFocusProps[\"focusOptions\"];\n}\n\nfunction tryFocus(node?: HTMLElement) {\n if (!node) return;\n\n const initialTabIndex = node.getAttribute(\"tabindex\");\n node.setAttribute(\"tabindex\", \"-1\");\n\n const removeTabIndex = () => {\n if (initialTabIndex === null) {\n node.removeAttribute(\"tabindex\");\n } else {\n node.setAttribute(\"tabindex\", initialTabIndex);\n }\n\n node.removeEventListener(\"blur\", removeTabIndex);\n };\n\n node.addEventListener(\"blur\", removeTabIndex);\n\n node.focus();\n}\n\nexport function FocusManager(props: FocusManagerProps): JSX.Element {\n const {\n active,\n autoFocusRef,\n children,\n className,\n disableAutoFocus,\n disableFocusTrap,\n disableReturnFocus,\n fallbackFocusRef,\n tabEnabledSelectors = defaultSelector,\n returnFocusOptions,\n } = props;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const trapStartRef = useRef<HTMLDivElement>(null);\n const trapEndRef = useRef<HTMLDivElement>(null);\n const staticElementRef = useRef<HTMLDivElement>(null);\n const [hasFocus, setHasFocus] = useState(false);\n\n useReturnFocus({\n focusOptions: returnFocusOptions,\n disabled: disableReturnFocus || disableAutoFocus,\n active,\n document: ownerDocument(containerRef.current),\n });\n\n /**\n * Given a list of elements and an index, the corresponding element is returned, if exists.\n * Alternatively, for a shadow root, the first tabbable element is returned.\n * @param {Node[]} tabbableElements A list of elements from which to select.\n * @param {number} index The list index.\n */\n const resolveElementAtIndex = useCallback(\n (tabbableElements: HTMLElement[], index: number) => {\n if (tabbableElements.length >= 1) {\n const element = tabbableElements[index];\n\n if (element?.shadowRoot) {\n return element.shadowRoot.querySelector<HTMLElement>(\n tabEnabledSelectors\n );\n }\n\n return element;\n }\n },\n [tabEnabledSelectors]\n );\n\n /**\n * Return the first tabbable element within the content area.\n */\n const getFirstElement = useCallback(() => {\n const tabbableElements = findAllTabbableElements(\n containerRef.current,\n tabEnabledSelectors,\n [trapEndRef.current, trapStartRef.current]\n );\n return resolveElementAtIndex(tabbableElements, 0);\n }, [resolveElementAtIndex, tabEnabledSelectors]);\n\n /**\n * Return the last tabbable element within the content area.\n */\n const getLastElement = () => {\n const tabbableElements = findAllTabbableElements(\n containerRef.current,\n tabEnabledSelectors,\n [trapEndRef.current, trapStartRef.current]\n );\n return resolveElementAtIndex(tabbableElements, tabbableElements.length - 1);\n };\n\n /**\n * When the trap-start sentinel node gains focus, pass focus to either\n * the first or last tabbable element, depending on the direction of travel\n * (i.e. Tab or Shift+Tab)\n * @param {React.FocusEvent} event The synthetic focus event.\n */\n const handleTrapStartFocus = (event: FocusEvent<HTMLDivElement>) => {\n const isEnteringFocusTrap =\n !hasFocus &&\n ownerDocument(containerRef.current).activeElement ===\n trapStartRef.current;\n\n const nextElement = isEnteringFocusTrap\n ? getFirstElement()\n : getLastElement();\n\n if (nextElement) {\n nextElement.focus();\n }\n\n event.preventDefault();\n };\n\n /**\n * When the trap-end sentinel node gains focus, pass focus to either\n * the first tabbable element.\n * @param {React.FocusEvent} event The synthetic focus event.\n */\n const handleTrapEndFocus = (event: FocusEvent<HTMLDivElement>) => {\n const nextElement = getFirstElement();\n\n if (nextElement) {\n nextElement.focus();\n }\n\n event.preventDefault();\n };\n\n useIsomorphicLayoutEffect(() => {\n if (active && !disableAutoFocus) {\n let nodeToFocus;\n\n if (autoFocusRef?.current) {\n nodeToFocus = autoFocusRef.current;\n } else {\n nodeToFocus = getFirstElement() || fallbackFocusRef?.current;\n }\n\n if (!nodeToFocus) {\n // This will always be the case when we're applying the shim in a desktop window. Need to consider how to fix.\n console.error(\n \"Your focus trap needs to contain at least once focused node.\"\n );\n } else if (nodeToFocus !== ownerDocument(nodeToFocus).activeElement) {\n tryFocus(nodeToFocus);\n }\n }\n }, [\n active,\n disableAutoFocus,\n getFirstElement,\n autoFocusRef,\n fallbackFocusRef,\n ]);\n\n const enforceFocus = active && !disableFocusTrap;\n\n return (\n <div\n className={className}\n onFocus={() => setHasFocus(true)}\n ref={containerRef}\n >\n <div\n aria-hidden=\"true\"\n onFocus={handleTrapStartFocus}\n ref={trapStartRef}\n tabIndex={enforceFocus ? 0 : -1}\n />\n <div ref={staticElementRef} tabIndex={-1} />\n {children}\n <div\n aria-hidden=\"true\"\n onFocus={handleTrapEndFocus}\n ref={trapEndRef}\n tabIndex={enforceFocus ? 0 : -1}\n />\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -1,41 +0,0 @@
1
- import { ownerWindow } from '@salt-ds/core';
2
-
3
- const anyKeyboardFocusedElementSelector = '*:not(style):not(script):not(noscript):not(link):not([tabindex="-1"])';
4
- function findAllTabbableElements(rootNode, selector, elementsToIgnore = []) {
5
- if (!rootNode) {
6
- return [];
7
- }
8
- const nodes = Array.from(
9
- rootNode.querySelectorAll(anyKeyboardFocusedElementSelector)
10
- ).slice();
11
- return nodes.reduce((foundNodes, node) => {
12
- var _a;
13
- if (elementsToIgnore.indexOf(node) !== -1) {
14
- return foundNodes;
15
- }
16
- const win = ownerWindow(node);
17
- if ((node.getBoundingClientRect().width === 0 || win.getComputedStyle(node).visibility !== "visible") && node instanceof HTMLSlotElement && typeof node.assignedElements !== "function") {
18
- return foundNodes;
19
- }
20
- if (node instanceof HTMLSlotElement && typeof node.assignedElements === "function") {
21
- return foundNodes.concat(
22
- node.assignedElements().filter((n) => !n.shadowRoot)
23
- );
24
- }
25
- if (!node.shadowRoot && node.matches(selector)) {
26
- const rootNode2 = (_a = node.parentNode) == null ? void 0 : _a.getRootNode();
27
- return foundNodes.concat(
28
- rootNode2 instanceof ShadowRoot ? rootNode2.host : node
29
- );
30
- }
31
- if (node.shadowRoot) {
32
- return foundNodes.concat(
33
- findAllTabbableElements(node.shadowRoot, selector, elementsToIgnore)
34
- );
35
- }
36
- return foundNodes;
37
- }, []);
38
- }
39
-
40
- export { findAllTabbableElements };
41
- //# sourceMappingURL=findAllTabbableElements.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"findAllTabbableElements.js","sources":["../src/focus-manager/internal/findAllTabbableElements.ts"],"sourcesContent":["import { ownerWindow } from \"@salt-ds/core\";\n\n/**\n * Used to reduce the number of initial nodes that are checked to see if tabbable.\n *\n * Not possible to immediately check if a node is tabbable because the node may be a custom element\n * and therefore could potentially have a tabbable node within its shadow root.\n */\nconst anyKeyboardFocusedElementSelector =\n '*:not(style):not(script):not(noscript):not(link):not([tabindex=\"-1\"])';\n\ntype HTMLElementOrNull = HTMLElement | null;\n\n/**\n * Finds all the elements in the given root node that can be focused by a 'tab' keypress.\n * In addition, the trap-start and trap-end sentinel nodes are excluded, and all contained shadow roots are walked recursively\n * @param {Node} rootNode The containing node from which traversal begins.\n * @param {string} selector The CSS selector used to query for matching, tabbable elements.\n * @param {Node[]} elementsToIgnore Elements to ignore\n */\nexport function findAllTabbableElements(\n rootNode: HTMLElementOrNull | ShadowRoot,\n selector: string,\n elementsToIgnore: HTMLElementOrNull[] = []\n): HTMLElement[] {\n if (!rootNode) {\n return [];\n }\n\n const nodes = Array.from<HTMLElement | HTMLSlotElement>(\n rootNode.querySelectorAll(anyKeyboardFocusedElementSelector)\n ).slice();\n\n return nodes.reduce((foundNodes, node) => {\n if (elementsToIgnore.indexOf(node) !== -1) {\n return foundNodes;\n }\n\n const win = ownerWindow(node);\n // Skip hidden nodes. assignedElements needs to be checked here to make sure we don't ignore slots\n if (\n (node.getBoundingClientRect().width === 0 ||\n win.getComputedStyle(node).visibility !== \"visible\") &&\n node instanceof HTMLSlotElement &&\n typeof node.assignedElements !== \"function\"\n ) {\n return foundNodes;\n }\n\n // If node is a slot return assigned elements.\n if (\n node instanceof HTMLSlotElement &&\n typeof node.assignedElements === \"function\"\n ) {\n return foundNodes.concat(\n node.assignedElements().filter((n) => !n.shadowRoot) as HTMLElement[]\n );\n }\n\n if (!node.shadowRoot && node.matches(selector)) {\n // If this element is inside a shadowRoot then the host not the element itself is needed.\n const rootNode = node.parentNode?.getRootNode();\n return foundNodes.concat(\n rootNode instanceof ShadowRoot ? (rootNode.host as HTMLElement) : node\n );\n }\n if (node.shadowRoot) {\n return foundNodes.concat(\n findAllTabbableElements(node.shadowRoot, selector, elementsToIgnore)\n );\n }\n\n return foundNodes;\n }, [] as HTMLElement[]);\n}\n"],"names":["rootNode"],"mappings":";;AAQA,MAAM,iCACJ,GAAA,uEAAA,CAAA;AAWK,SAAS,uBACd,CAAA,QAAA,EACA,QACA,EAAA,gBAAA,GAAwC,EACzB,EAAA;AACf,EAAA,IAAI,CAAC,QAAU,EAAA;AACb,IAAA,OAAO,EAAC,CAAA;AAAA,GACV;AAEA,EAAA,MAAM,QAAQ,KAAM,CAAA,IAAA;AAAA,IAClB,QAAA,CAAS,iBAAiB,iCAAiC,CAAA;AAAA,IAC3D,KAAM,EAAA,CAAA;AAER,EAAA,OAAO,KAAM,CAAA,MAAA,CAAO,CAAC,UAAA,EAAY,IAAS,KAAA;AAjC5C,IAAA,IAAA,EAAA,CAAA;AAkCI,IAAA,IAAI,gBAAiB,CAAA,OAAA,CAAQ,IAAI,CAAA,KAAM,CAAI,CAAA,EAAA;AACzC,MAAO,OAAA,UAAA,CAAA;AAAA,KACT;AAEA,IAAM,MAAA,GAAA,GAAM,YAAY,IAAI,CAAA,CAAA;AAE5B,IAAA,IAAA,CACG,KAAK,qBAAsB,EAAA,CAAE,KAAU,KAAA,CAAA,IACtC,IAAI,gBAAiB,CAAA,IAAI,CAAE,CAAA,UAAA,KAAe,cAC5C,IAAgB,YAAA,eAAA,IAChB,OAAO,IAAA,CAAK,qBAAqB,UACjC,EAAA;AACA,MAAO,OAAA,UAAA,CAAA;AAAA,KACT;AAGA,IAAA,IACE,IAAgB,YAAA,eAAA,IAChB,OAAO,IAAA,CAAK,qBAAqB,UACjC,EAAA;AACA,MAAA,OAAO,UAAW,CAAA,MAAA;AAAA,QAChB,IAAA,CAAK,kBAAmB,CAAA,MAAA,CAAO,CAAC,CAAM,KAAA,CAAC,EAAE,UAAU,CAAA;AAAA,OACrD,CAAA;AAAA,KACF;AAEA,IAAA,IAAI,CAAC,IAAK,CAAA,UAAA,IAAc,IAAK,CAAA,OAAA,CAAQ,QAAQ,CAAG,EAAA;AAE9C,MAAMA,MAAAA,SAAAA,GAAAA,CAAW,EAAK,GAAA,IAAA,CAAA,UAAA,KAAL,IAAiB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAA,EAAA,CAAA;AAClC,MAAA,OAAO,UAAW,CAAA,MAAA;AAAA,QAChBA,SAAAA,YAAoB,UAAcA,GAAAA,SAAAA,CAAS,IAAuB,GAAA,IAAA;AAAA,OACpE,CAAA;AAAA,KACF;AACA,IAAA,IAAI,KAAK,UAAY,EAAA;AACnB,MAAA,OAAO,UAAW,CAAA,MAAA;AAAA,QAChB,uBAAwB,CAAA,IAAA,CAAK,UAAY,EAAA,QAAA,EAAU,gBAAgB,CAAA;AAAA,OACrE,CAAA;AAAA,KACF;AAEA,IAAO,OAAA,UAAA,CAAA;AAAA,GACT,EAAG,EAAmB,CAAA,CAAA;AACxB;;;;"}
@@ -1,55 +0,0 @@
1
- import { useRef, useEffect } from 'react';
2
- import { useIsomorphicLayoutEffect } from '@salt-ds/core';
3
-
4
- function getActiveElement(doc) {
5
- if (!doc) {
6
- return null;
7
- }
8
- const activeElement = doc.activeElement;
9
- if (activeElement == null ? void 0 : activeElement.shadowRoot) {
10
- return getActiveElement(activeElement.shadowRoot);
11
- }
12
- return activeElement;
13
- }
14
- function useReturnFocus({
15
- focusOptions: focusOptionsProp,
16
- disabled,
17
- active,
18
- document
19
- }) {
20
- const previousFocusedElement = useRef();
21
- useIsomorphicLayoutEffect(() => {
22
- if (active) {
23
- previousFocusedElement.current = getActiveElement(document);
24
- }
25
- }, [document, active]);
26
- const focusOptionsRef = useRef(focusOptionsProp);
27
- useEffect(() => {
28
- focusOptionsRef.current = focusOptionsProp;
29
- }, [focusOptionsProp]);
30
- useIsomorphicLayoutEffect(() => {
31
- const returnFocus = () => {
32
- const focusOptions = typeof focusOptionsRef.current === "object" ? focusOptionsRef.current : void 0;
33
- setTimeout(() => {
34
- var _a;
35
- if (previousFocusedElement.current) {
36
- (_a = previousFocusedElement.current) == null ? void 0 : _a.focus(focusOptions);
37
- }
38
- }, 0);
39
- };
40
- if (!disabled) {
41
- if (!active) {
42
- returnFocus();
43
- }
44
- return () => {
45
- if (active) {
46
- returnFocus();
47
- }
48
- };
49
- }
50
- return void 0;
51
- }, [disabled, active]);
52
- }
53
-
54
- export { useReturnFocus };
55
- //# sourceMappingURL=useReturnFocus.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useReturnFocus.js","sources":["../src/focus-manager/internal/useReturnFocus.ts"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"@salt-ds/core\";\n\nfunction getActiveElement(doc: DocumentOrShadowRoot): HTMLElement | null {\n if (!doc) {\n return null;\n }\n\n const activeElement = doc.activeElement;\n\n if (activeElement?.shadowRoot) {\n return getActiveElement(activeElement.shadowRoot);\n }\n\n return activeElement as HTMLElement;\n}\n\nexport interface UseReturnFocusProps {\n active?: boolean;\n disabled?: boolean;\n document: DocumentOrShadowRoot;\n focusOptions?: FocusOptions;\n}\n\nexport function useReturnFocus({\n focusOptions: focusOptionsProp,\n disabled,\n active,\n document,\n}: UseReturnFocusProps): void {\n const previousFocusedElement = useRef<HTMLElement | null>();\n\n useIsomorphicLayoutEffect(() => {\n if (active) {\n previousFocusedElement.current = getActiveElement(document);\n }\n }, [document, active]);\n\n const focusOptionsRef = useRef(focusOptionsProp);\n\n useEffect(() => {\n focusOptionsRef.current = focusOptionsProp;\n }, [focusOptionsProp]);\n\n useIsomorphicLayoutEffect(() => {\n const returnFocus = () => {\n const focusOptions =\n typeof focusOptionsRef.current === \"object\"\n ? focusOptionsRef.current\n : undefined;\n\n setTimeout(() => {\n if (previousFocusedElement.current) {\n previousFocusedElement.current?.focus(focusOptions);\n }\n }, 0);\n };\n\n if (!disabled) {\n if (!active) {\n returnFocus();\n }\n\n return () => {\n if (active) {\n returnFocus();\n }\n };\n }\n\n return undefined;\n }, [disabled, active]);\n}\n"],"names":[],"mappings":";;;AAGA,SAAS,iBAAiB,GAA+C,EAAA;AACvE,EAAA,IAAI,CAAC,GAAK,EAAA;AACR,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAA,MAAM,gBAAgB,GAAI,CAAA,aAAA,CAAA;AAE1B,EAAA,IAAI,+CAAe,UAAY,EAAA;AAC7B,IAAO,OAAA,gBAAA,CAAiB,cAAc,UAAU,CAAA,CAAA;AAAA,GAClD;AAEA,EAAO,OAAA,aAAA,CAAA;AACT,CAAA;AASO,SAAS,cAAe,CAAA;AAAA,EAC7B,YAAc,EAAA,gBAAA;AAAA,EACd,QAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AACF,CAA8B,EAAA;AAC5B,EAAA,MAAM,yBAAyB,MAA2B,EAAA,CAAA;AAE1D,EAAA,yBAAA,CAA0B,MAAM;AAC9B,IAAA,IAAI,MAAQ,EAAA;AACV,MAAuB,sBAAA,CAAA,OAAA,GAAU,iBAAiB,QAAQ,CAAA,CAAA;AAAA,KAC5D;AAAA,GACC,EAAA,CAAC,QAAU,EAAA,MAAM,CAAC,CAAA,CAAA;AAErB,EAAM,MAAA,eAAA,GAAkB,OAAO,gBAAgB,CAAA,CAAA;AAE/C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,eAAA,CAAgB,OAAU,GAAA,gBAAA,CAAA;AAAA,GAC5B,EAAG,CAAC,gBAAgB,CAAC,CAAA,CAAA;AAErB,EAAA,yBAAA,CAA0B,MAAM;AAC9B,IAAA,MAAM,cAAc,MAAM;AACxB,MAAA,MAAM,eACJ,OAAO,eAAA,CAAgB,OAAY,KAAA,QAAA,GAC/B,gBAAgB,OAChB,GAAA,KAAA,CAAA,CAAA;AAEN,MAAA,UAAA,CAAW,MAAM;AAnDvB,QAAA,IAAA,EAAA,CAAA;AAoDQ,QAAA,IAAI,uBAAuB,OAAS,EAAA;AAClC,UAAuB,CAAA,EAAA,GAAA,sBAAA,CAAA,OAAA,KAAvB,mBAAgC,KAAM,CAAA,YAAA,CAAA,CAAA;AAAA,SACxC;AAAA,SACC,CAAC,CAAA,CAAA;AAAA,KACN,CAAA;AAEA,IAAA,IAAI,CAAC,QAAU,EAAA;AACb,MAAA,IAAI,CAAC,MAAQ,EAAA;AACX,QAAY,WAAA,EAAA,CAAA;AAAA,OACd;AAEA,MAAA,OAAO,MAAM;AACX,QAAA,IAAI,MAAQ,EAAA;AACV,UAAY,WAAA,EAAA,CAAA;AAAA,SACd;AAAA,OACF,CAAA;AAAA,KACF;AAEA,IAAO,OAAA,KAAA,CAAA,CAAA;AAAA,GACN,EAAA,CAAC,QAAU,EAAA,MAAM,CAAC,CAAA,CAAA;AACvB;;;;"}
@@ -1,60 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { Button } from '@salt-ds/core';
3
- import { ChevronLeftIcon, ChevronRightIcon } from '@salt-ds/icons';
4
- import { clsx } from 'clsx';
5
- import { withBaseName } from './utils.js';
6
-
7
- const contentByType = /* @__PURE__ */ new Map([
8
- [
9
- "previous",
10
- {
11
- icon: ChevronLeftIcon,
12
- name: "Previous Page",
13
- className: withBaseName("previousButton")
14
- }
15
- ],
16
- [
17
- "next",
18
- {
19
- icon: ChevronRightIcon,
20
- name: "Next Page",
21
- className: withBaseName("nextButton")
22
- }
23
- ]
24
- ]);
25
- const ArrowButton = ({
26
- arrowButtonType,
27
- onPress,
28
- onKeyDown: onKeyDownProp,
29
- onClick: onClickProp,
30
- ...restProps
31
- }) => {
32
- const { icon: Icon, name, className } = contentByType.get(arrowButtonType);
33
- const onKeyDown = (event) => {
34
- if (event.key === "Enter") {
35
- event.preventDefault();
36
- onPress();
37
- }
38
- onKeyDownProp && onKeyDownProp(event);
39
- };
40
- const onClick = (event) => {
41
- onPress();
42
- onClickProp && onClickProp(event);
43
- };
44
- return /* @__PURE__ */ jsx(Button, {
45
- ...restProps,
46
- variant: "secondary",
47
- className: clsx(withBaseName("arrowButton"), className),
48
- role: "link",
49
- name,
50
- "aria-label": name,
51
- onKeyDown,
52
- onClick,
53
- children: /* @__PURE__ */ jsx(Icon, {
54
- "aria-label": name
55
- })
56
- });
57
- };
58
-
59
- export { ArrowButton };
60
- //# sourceMappingURL=ArrowButton.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ArrowButton.js","sources":["../src/pagination/ArrowButton.tsx"],"sourcesContent":["import { Button, ButtonProps } from \"@salt-ds/core\";\nimport { ChevronLeftIcon, ChevronRightIcon, IconProps } from \"@salt-ds/icons\";\nimport { clsx } from \"clsx\";\nimport { ComponentType, KeyboardEventHandler, MouseEventHandler } from \"react\";\nimport { withBaseName } from \"./utils\";\n\nexport type ArrowButtonType = \"previous\" | \"next\";\n\nexport interface ArrowButtonProps extends ButtonProps {\n arrowButtonType: ArrowButtonType;\n onPress: () => void;\n}\n\ninterface ButtonContent {\n icon: ComponentType<IconProps>;\n name: string;\n className: string;\n}\n\nconst contentByType = new Map<ArrowButtonType, ButtonContent>([\n [\n \"previous\",\n {\n icon: ChevronLeftIcon,\n name: \"Previous Page\",\n className: withBaseName(\"previousButton\"),\n },\n ],\n [\n \"next\",\n {\n icon: ChevronRightIcon,\n name: \"Next Page\",\n className: withBaseName(\"nextButton\"),\n },\n ],\n]);\n\nexport const ArrowButton = ({\n arrowButtonType,\n onPress,\n onKeyDown: onKeyDownProp,\n onClick: onClickProp,\n ...restProps\n}: ArrowButtonProps) => {\n const { icon: Icon, name, className } = contentByType.get(arrowButtonType)!;\n\n const onKeyDown: KeyboardEventHandler<HTMLButtonElement> = (event) => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n onPress();\n }\n onKeyDownProp && onKeyDownProp(event);\n };\n\n const onClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n onPress();\n onClickProp && onClickProp(event);\n };\n\n return (\n <Button\n {...restProps}\n variant=\"secondary\"\n className={clsx(withBaseName(\"arrowButton\"), className)}\n role=\"link\"\n name={name}\n aria-label={name}\n onKeyDown={onKeyDown}\n onClick={onClick}\n >\n <Icon aria-label={name} />\n </Button>\n );\n};\n"],"names":[],"mappings":";;;;;;AAmBA,MAAM,aAAA,uBAAoB,GAAoC,CAAA;AAAA,EAC5D;AAAA,IACE,UAAA;AAAA,IACA;AAAA,MACE,IAAM,EAAA,eAAA;AAAA,MACN,IAAM,EAAA,eAAA;AAAA,MACN,SAAA,EAAW,aAAa,gBAAgB,CAAA;AAAA,KAC1C;AAAA,GACF;AAAA,EACA;AAAA,IACE,MAAA;AAAA,IACA;AAAA,MACE,IAAM,EAAA,gBAAA;AAAA,MACN,IAAM,EAAA,WAAA;AAAA,MACN,SAAA,EAAW,aAAa,YAAY,CAAA;AAAA,KACtC;AAAA,GACF;AACF,CAAC,CAAA,CAAA;AAEM,MAAM,cAAc,CAAC;AAAA,EAC1B,eAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAW,EAAA,aAAA;AAAA,EACX,OAAS,EAAA,WAAA;AAAA,EACN,GAAA,SAAA;AACL,CAAwB,KAAA;AACtB,EAAM,MAAA,EAAE,MAAM,IAAM,EAAA,IAAA,EAAM,WAAc,GAAA,aAAA,CAAc,IAAI,eAAe,CAAA,CAAA;AAEzE,EAAM,MAAA,SAAA,GAAqD,CAAC,KAAU,KAAA;AACpE,IAAI,IAAA,KAAA,CAAM,QAAQ,OAAS,EAAA;AACzB,MAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,MAAQ,OAAA,EAAA,CAAA;AAAA,KACV;AACA,IAAA,aAAA,IAAiB,cAAc,KAAK,CAAA,CAAA;AAAA,GACtC,CAAA;AAEA,EAAM,MAAA,OAAA,GAAgD,CAAC,KAAU,KAAA;AAC/D,IAAQ,OAAA,EAAA,CAAA;AACR,IAAA,WAAA,IAAe,YAAY,KAAK,CAAA,CAAA;AAAA,GAClC,CAAA;AAEA,EAAA,uBACG,GAAA,CAAA,MAAA,EAAA;AAAA,IACE,GAAG,SAAA;AAAA,IACJ,OAAQ,EAAA,WAAA;AAAA,IACR,SAAW,EAAA,IAAA,CAAK,YAAa,CAAA,aAAa,GAAG,SAAS,CAAA;AAAA,IACtD,IAAK,EAAA,MAAA;AAAA,IACL,IAAA;AAAA,IACA,YAAY,EAAA,IAAA;AAAA,IACZ,SAAA;AAAA,IACA,OAAA;AAAA,IAEA,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA;AAAA,MAAK,YAAY,EAAA,IAAA;AAAA,KAAM,CAAA;AAAA,GAC1B,CAAA,CAAA;AAEJ;;;;"}
@@ -1,34 +0,0 @@
1
- import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
- import { CompactInput } from './CompactInput.js';
3
- import { PageButton } from './PageButton.js';
4
- import { withBaseName } from './utils.js';
5
-
6
- const CompactControls = ({
7
- page,
8
- count,
9
- onPageChange,
10
- FormFieldProps: FormFieldProps2
11
- }) => {
12
- return /* @__PURE__ */ jsxs(Fragment, {
13
- children: [
14
- /* @__PURE__ */ jsx(CompactInput, {
15
- page,
16
- count,
17
- onPageChange,
18
- FormFieldProps: FormFieldProps2
19
- }),
20
- /* @__PURE__ */ jsx("span", {
21
- className: withBaseName("compactSeparator"),
22
- children: "of"
23
- }),
24
- /* @__PURE__ */ jsx(PageButton, {
25
- page: count,
26
- onPageChange,
27
- disabled: page === count
28
- })
29
- ]
30
- });
31
- };
32
-
33
- export { CompactControls };
34
- //# sourceMappingURL=CompactControls.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CompactControls.js","sources":["../src/pagination/CompactControls.tsx"],"sourcesContent":["import { FormFieldLegacyProps as FormFieldProps } from \"../form-field-legacy\";\nimport { CompactInput } from \"./CompactInput\";\nimport { PageButton } from \"./PageButton\";\nimport { withBaseName } from \"./utils\";\n\nexport interface CompactControlsProps {\n count: number;\n page: number;\n onPageChange: (page: number) => void;\n FormFieldProps?: Partial<FormFieldProps>;\n}\n\nexport const CompactControls = ({\n page,\n count,\n onPageChange,\n FormFieldProps,\n}: CompactControlsProps) => {\n return (\n <>\n <CompactInput\n page={page}\n count={count}\n onPageChange={onPageChange}\n FormFieldProps={FormFieldProps}\n />\n <span className={withBaseName(\"compactSeparator\")}>of</span>\n <PageButton\n page={count}\n onPageChange={onPageChange}\n disabled={page === count}\n />\n </>\n );\n};\n"],"names":["FormFieldProps"],"mappings":";;;;;AAYO,MAAM,kBAAkB,CAAC;AAAA,EAC9B,IAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAAA,EAAAA,eAAAA;AACF,CAA4B,KAAA;AAC1B,EACE,uBAAA,IAAA,CAAA,QAAA,EAAA;AAAA,IACE,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,YAAA,EAAA;AAAA,QACC,IAAA;AAAA,QACA,KAAA;AAAA,QACA,YAAA;AAAA,QACA,cAAgBA,EAAAA,eAAAA;AAAA,OAClB,CAAA;AAAA,sBACC,GAAA,CAAA,MAAA,EAAA;AAAA,QAAK,SAAA,EAAW,aAAa,kBAAkB,CAAA;AAAA,QAAG,QAAA,EAAA,IAAA;AAAA,OAAE,CAAA;AAAA,sBACpD,GAAA,CAAA,UAAA,EAAA;AAAA,QACC,IAAM,EAAA,KAAA;AAAA,QACN,YAAA;AAAA,QACA,UAAU,IAAS,KAAA,KAAA;AAAA,OACrB,CAAA;AAAA,KAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
@@ -1,54 +0,0 @@
1
- import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
- import { withBaseName } from './utils.js';
3
- import { usePagination } from './usePagination.js';
4
- import { PageButton } from './PageButton.js';
5
-
6
- const Ellipsis = () => {
7
- return /* @__PURE__ */ jsx("div", {
8
- className: withBaseName("ellipsis"),
9
- children: `\u2026`
10
- });
11
- };
12
- const mapRange = (range, fn) => {
13
- const result = [];
14
- for (let i = range[0]; i <= range[1]; ++i) {
15
- result.push(fn(i));
16
- }
17
- return result;
18
- };
19
- function RegularControls({
20
- page,
21
- count,
22
- onPageChange,
23
- siblingCount = 2,
24
- boundaryCount = 1
25
- }) {
26
- const renderPages = (range, selectedPage) => {
27
- if (!range) {
28
- return null;
29
- }
30
- return mapRange(range, (i) => /* @__PURE__ */ jsx(PageButton, {
31
- page: i,
32
- isSelected: selectedPage === i,
33
- onPageChange
34
- }, i));
35
- };
36
- const [leftPages, middlePages, rightPages] = usePagination(
37
- page,
38
- count,
39
- Math.max(1, boundaryCount),
40
- siblingCount
41
- );
42
- return /* @__PURE__ */ jsxs(Fragment, {
43
- children: [
44
- renderPages(leftPages, page),
45
- leftPages && /* @__PURE__ */ jsx(Ellipsis, {}),
46
- renderPages(middlePages, page),
47
- rightPages && /* @__PURE__ */ jsx(Ellipsis, {}),
48
- renderPages(rightPages, page)
49
- ]
50
- });
51
- }
52
-
53
- export { RegularControls };
54
- //# sourceMappingURL=RegularControls.js.map