@okta/odyssey-react-mui 1.24.1 → 1.26.0

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 (504) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/Autocomplete.js +30 -191
  3. package/dist/Autocomplete.js.map +1 -1
  4. package/dist/Box.js +2 -0
  5. package/dist/Box.js.map +1 -1
  6. package/dist/Card.js +1 -0
  7. package/dist/Card.js.map +1 -1
  8. package/dist/OdysseyDesignTokensContext.js +3 -2
  9. package/dist/OdysseyDesignTokensContext.js.map +1 -1
  10. package/dist/OdysseyProvider.js +22 -40
  11. package/dist/OdysseyProvider.js.map +1 -1
  12. package/dist/OdysseyThemeProvider.js +33 -12
  13. package/dist/OdysseyThemeProvider.js.map +1 -1
  14. package/dist/OdysseyTranslationProvider.types.js +1 -1
  15. package/dist/OdysseyTranslationProvider.types.js.map +1 -1
  16. package/dist/Pagination/Pagination.js +46 -14
  17. package/dist/Pagination/Pagination.js.map +1 -1
  18. package/dist/Select.js +10 -2
  19. package/dist/Select.js.map +1 -1
  20. package/dist/Surface.js +4 -1
  21. package/dist/Surface.js.map +1 -1
  22. package/dist/Tag.js +97 -47
  23. package/dist/Tag.js.map +1 -1
  24. package/dist/i18n.js +2 -0
  25. package/dist/i18n.js.map +1 -1
  26. package/dist/index.js +6 -7
  27. package/dist/index.js.map +1 -1
  28. package/dist/index.scss +1 -1
  29. package/dist/labs/AppTile.js +137 -39
  30. package/dist/labs/AppTile.js.map +1 -1
  31. package/dist/labs/DataView/CardLayoutContent.js +7 -8
  32. package/dist/labs/DataView/CardLayoutContent.js.map +1 -1
  33. package/dist/labs/DataView/DataCard.js +96 -43
  34. package/dist/labs/DataView/DataCard.js.map +1 -1
  35. package/dist/labs/DataView/TableLayoutContent.js +3 -2
  36. package/dist/labs/DataView/TableLayoutContent.js.map +1 -1
  37. package/dist/labs/DataView/componentTypes.js.map +1 -1
  38. package/dist/labs/DataView/index.js.map +1 -1
  39. package/dist/labs/OdysseyPickers/ComposablePicker.js +113 -0
  40. package/dist/labs/OdysseyPickers/ComposablePicker.js.map +1 -0
  41. package/dist/labs/OdysseyPickers/Picker.js +261 -0
  42. package/dist/labs/OdysseyPickers/Picker.js.map +1 -0
  43. package/dist/labs/OdysseyPickers/PickerVirtualizationListBox.js +132 -0
  44. package/dist/labs/OdysseyPickers/PickerVirtualizationListBox.js.map +1 -0
  45. package/dist/labs/OdysseyPickers/PickerWithOptionAdornment.js +291 -0
  46. package/dist/labs/OdysseyPickers/PickerWithOptionAdornment.js.map +1 -0
  47. package/dist/{src/createShadowDomElements.d.ts → labs/OdysseyPickers/index.js} +4 -7
  48. package/dist/labs/OdysseyPickers/index.js.map +1 -0
  49. package/dist/labs/PageTemplate.js +14 -10
  50. package/dist/labs/PageTemplate.js.map +1 -1
  51. package/dist/labs/SideNav/CollapseIcon.js +11 -25
  52. package/dist/labs/SideNav/CollapseIcon.js.map +1 -1
  53. package/dist/labs/SideNav/HandleIcon.js +32 -0
  54. package/dist/labs/SideNav/HandleIcon.js.map +1 -0
  55. package/dist/labs/{NavAccordion.js → SideNav/NavAccordion.js} +35 -6
  56. package/dist/labs/SideNav/NavAccordion.js.map +1 -0
  57. package/dist/labs/SideNav/OktaAura.js +32 -0
  58. package/dist/labs/SideNav/OktaAura.js.map +1 -0
  59. package/dist/labs/SideNav/OktaLogo.js +6 -9
  60. package/dist/labs/SideNav/OktaLogo.js.map +1 -1
  61. package/dist/labs/SideNav/SideNav.js +239 -169
  62. package/dist/labs/SideNav/SideNav.js.map +1 -1
  63. package/dist/labs/SideNav/SideNavFooterContent.js +32 -18
  64. package/dist/labs/SideNav/SideNavFooterContent.js.map +1 -1
  65. package/dist/labs/SideNav/SideNavHeader.js +48 -37
  66. package/dist/labs/SideNav/SideNavHeader.js.map +1 -1
  67. package/dist/labs/SideNav/SideNavItemContent.js +100 -58
  68. package/dist/labs/SideNav/SideNavItemContent.js.map +1 -1
  69. package/dist/labs/SideNav/SideNavItemContentContext.js +19 -0
  70. package/dist/labs/SideNav/SideNavItemContentContext.js.map +1 -0
  71. package/dist/labs/SideNav/SideNavItemLinkContent.js +14 -13
  72. package/dist/labs/SideNav/SideNavItemLinkContent.js.map +1 -1
  73. package/dist/labs/SideNav/SideNavLogo.js +42 -0
  74. package/dist/labs/SideNav/SideNavLogo.js.map +1 -0
  75. package/dist/labs/SideNav/SideNavToggleButton.js +170 -0
  76. package/dist/labs/SideNav/SideNavToggleButton.js.map +1 -0
  77. package/dist/labs/SideNav/types.js.map +1 -1
  78. package/dist/labs/TopNav/TopNav.js +65 -0
  79. package/dist/labs/TopNav/TopNav.js.map +1 -0
  80. package/dist/labs/TopNav/TopNavLinksList.js +38 -0
  81. package/dist/labs/TopNav/TopNavLinksList.js.map +1 -0
  82. package/dist/labs/TopNav/TopNavListItem.js +132 -0
  83. package/dist/labs/TopNav/TopNavListItem.js.map +1 -0
  84. package/dist/labs/TopNav/UserProfile.js +65 -0
  85. package/dist/labs/TopNav/UserProfile.js.map +1 -0
  86. package/dist/labs/TopNav/index.js +14 -0
  87. package/dist/labs/TopNav/index.js.map +1 -0
  88. package/dist/labs/UiShell/UiShell.js +68 -0
  89. package/dist/labs/UiShell/UiShell.js.map +1 -0
  90. package/dist/labs/UiShell/UiShellContent.js +114 -0
  91. package/dist/labs/UiShell/UiShellContent.js.map +1 -0
  92. package/dist/labs/UiShell/bufferLatest.js +37 -0
  93. package/dist/labs/UiShell/bufferLatest.js.map +1 -0
  94. package/dist/labs/UiShell/createMessageBus.js +30 -0
  95. package/dist/labs/UiShell/createMessageBus.js.map +1 -0
  96. package/dist/labs/UiShell/createStore.js +24 -0
  97. package/dist/labs/UiShell/createStore.js.map +1 -0
  98. package/dist/labs/UiShell/index.js +15 -0
  99. package/dist/labs/UiShell/index.js.map +1 -0
  100. package/dist/labs/UiShell/renderUiShell.js +78 -0
  101. package/dist/labs/UiShell/renderUiShell.js.map +1 -0
  102. package/dist/labs/UiShell/useHasUiShell.js +22 -0
  103. package/dist/labs/UiShell/useHasUiShell.js.map +1 -0
  104. package/dist/labs/UiShell/useScrollState.js +41 -0
  105. package/dist/labs/UiShell/useScrollState.js.map +1 -0
  106. package/dist/labs/index.js +5 -3
  107. package/dist/labs/index.js.map +1 -1
  108. package/dist/properties/ts/odyssey-react-mui.js +7 -1
  109. package/dist/properties/ts/odyssey-react-mui.js.map +1 -1
  110. package/dist/properties/ts/odyssey-react-mui_cs.js +3 -1
  111. package/dist/properties/ts/odyssey-react-mui_cs.js.map +1 -1
  112. package/dist/properties/ts/odyssey-react-mui_da.js +3 -1
  113. package/dist/properties/ts/odyssey-react-mui_da.js.map +1 -1
  114. package/dist/properties/ts/odyssey-react-mui_de.js +3 -1
  115. package/dist/properties/ts/odyssey-react-mui_de.js.map +1 -1
  116. package/dist/properties/ts/odyssey-react-mui_el.js +3 -1
  117. package/dist/properties/ts/odyssey-react-mui_el.js.map +1 -1
  118. package/dist/properties/ts/odyssey-react-mui_es.js +3 -1
  119. package/dist/properties/ts/odyssey-react-mui_es.js.map +1 -1
  120. package/dist/properties/ts/odyssey-react-mui_fi.js +3 -1
  121. package/dist/properties/ts/odyssey-react-mui_fi.js.map +1 -1
  122. package/dist/properties/ts/odyssey-react-mui_fr.js +5 -3
  123. package/dist/properties/ts/odyssey-react-mui_fr.js.map +1 -1
  124. package/dist/properties/ts/odyssey-react-mui_ht.js +3 -1
  125. package/dist/properties/ts/odyssey-react-mui_ht.js.map +1 -1
  126. package/dist/properties/ts/odyssey-react-mui_hu.js +3 -1
  127. package/dist/properties/ts/odyssey-react-mui_hu.js.map +1 -1
  128. package/dist/properties/ts/odyssey-react-mui_id.js +3 -1
  129. package/dist/properties/ts/odyssey-react-mui_id.js.map +1 -1
  130. package/dist/properties/ts/odyssey-react-mui_it.js +4 -2
  131. package/dist/properties/ts/odyssey-react-mui_it.js.map +1 -1
  132. package/dist/properties/ts/odyssey-react-mui_ja.js +9 -7
  133. package/dist/properties/ts/odyssey-react-mui_ja.js.map +1 -1
  134. package/dist/properties/ts/odyssey-react-mui_ko.js +3 -1
  135. package/dist/properties/ts/odyssey-react-mui_ko.js.map +1 -1
  136. package/dist/properties/ts/odyssey-react-mui_ms.js +3 -1
  137. package/dist/properties/ts/odyssey-react-mui_ms.js.map +1 -1
  138. package/dist/properties/ts/odyssey-react-mui_nb.js +3 -1
  139. package/dist/properties/ts/odyssey-react-mui_nb.js.map +1 -1
  140. package/dist/properties/ts/odyssey-react-mui_nl_NL.js +3 -1
  141. package/dist/properties/ts/odyssey-react-mui_nl_NL.js.map +1 -1
  142. package/dist/properties/ts/odyssey-react-mui_pl.js +3 -1
  143. package/dist/properties/ts/odyssey-react-mui_pl.js.map +1 -1
  144. package/dist/properties/ts/odyssey-react-mui_pt_BR.js +3 -1
  145. package/dist/properties/ts/odyssey-react-mui_pt_BR.js.map +1 -1
  146. package/dist/properties/ts/odyssey-react-mui_ro.js +3 -1
  147. package/dist/properties/ts/odyssey-react-mui_ro.js.map +1 -1
  148. package/dist/properties/ts/odyssey-react-mui_ru.js +3 -1
  149. package/dist/properties/ts/odyssey-react-mui_ru.js.map +1 -1
  150. package/dist/properties/ts/odyssey-react-mui_sv.js +3 -1
  151. package/dist/properties/ts/odyssey-react-mui_sv.js.map +1 -1
  152. package/dist/properties/ts/odyssey-react-mui_th.js +3 -1
  153. package/dist/properties/ts/odyssey-react-mui_th.js.map +1 -1
  154. package/dist/properties/ts/odyssey-react-mui_tr.js +4 -2
  155. package/dist/properties/ts/odyssey-react-mui_tr.js.map +1 -1
  156. package/dist/properties/ts/odyssey-react-mui_uk.js +3 -1
  157. package/dist/properties/ts/odyssey-react-mui_uk.js.map +1 -1
  158. package/dist/properties/ts/odyssey-react-mui_vi.js +3 -1
  159. package/dist/properties/ts/odyssey-react-mui_vi.js.map +1 -1
  160. package/dist/properties/ts/odyssey-react-mui_zh_CN.js +3 -1
  161. package/dist/properties/ts/odyssey-react-mui_zh_CN.js.map +1 -1
  162. package/dist/properties/ts/odyssey-react-mui_zh_TW.js +3 -1
  163. package/dist/properties/ts/odyssey-react-mui_zh_TW.js.map +1 -1
  164. package/dist/src/Autocomplete.d.ts +21 -22
  165. package/dist/src/Autocomplete.d.ts.map +1 -1
  166. package/dist/src/Box.d.ts +3 -1
  167. package/dist/src/Box.d.ts.map +1 -1
  168. package/dist/src/Card.d.ts.map +1 -1
  169. package/dist/src/OdysseyDesignTokensContext.d.ts +5 -4
  170. package/dist/src/OdysseyDesignTokensContext.d.ts.map +1 -1
  171. package/dist/src/OdysseyProvider.d.ts +1 -3
  172. package/dist/src/OdysseyProvider.d.ts.map +1 -1
  173. package/dist/src/OdysseyThemeProvider.d.ts +10 -4
  174. package/dist/src/OdysseyThemeProvider.d.ts.map +1 -1
  175. package/dist/src/OdysseyTranslationProvider.d.ts +1 -1
  176. package/dist/src/OdysseyTranslationProvider.d.ts.map +1 -1
  177. package/dist/src/OdysseyTranslationProvider.types.d.ts +1 -1
  178. package/dist/src/OdysseyTranslationProvider.types.d.ts.map +1 -1
  179. package/dist/src/Pagination/Pagination.d.ts +21 -7
  180. package/dist/src/Pagination/Pagination.d.ts.map +1 -1
  181. package/dist/src/Select.d.ts.map +1 -1
  182. package/dist/src/Surface.d.ts.map +1 -1
  183. package/dist/src/Tag.d.ts +5 -2
  184. package/dist/src/Tag.d.ts.map +1 -1
  185. package/dist/src/i18n.d.ts.map +1 -1
  186. package/dist/src/index.d.ts +6 -7
  187. package/dist/src/index.d.ts.map +1 -1
  188. package/dist/src/labs/AppTile.d.ts +3 -1
  189. package/dist/src/labs/AppTile.d.ts.map +1 -1
  190. package/dist/src/labs/DataView/CardLayoutContent.d.ts.map +1 -1
  191. package/dist/src/labs/DataView/DataCard.d.ts +9 -3
  192. package/dist/src/labs/DataView/DataCard.d.ts.map +1 -1
  193. package/dist/src/labs/DataView/TableLayoutContent.d.ts.map +1 -1
  194. package/dist/src/labs/DataView/componentTypes.d.ts +1 -1
  195. package/dist/src/labs/DataView/componentTypes.d.ts.map +1 -1
  196. package/dist/src/labs/DataView/index.d.ts +1 -0
  197. package/dist/src/labs/DataView/index.d.ts.map +1 -1
  198. package/dist/src/labs/OdysseyPickers/ComposablePicker.d.ts +33 -0
  199. package/dist/src/labs/OdysseyPickers/ComposablePicker.d.ts.map +1 -0
  200. package/dist/src/labs/OdysseyPickers/Picker.d.ts +98 -0
  201. package/dist/src/labs/OdysseyPickers/Picker.d.ts.map +1 -0
  202. package/dist/src/labs/OdysseyPickers/PickerVirtualizationListBox.d.ts +17 -0
  203. package/dist/src/labs/OdysseyPickers/PickerVirtualizationListBox.d.ts.map +1 -0
  204. package/dist/src/labs/OdysseyPickers/PickerWithOptionAdornment.d.ts +26 -0
  205. package/dist/src/labs/OdysseyPickers/PickerWithOptionAdornment.d.ts.map +1 -0
  206. package/dist/src/labs/OdysseyPickers/index.d.ts +15 -0
  207. package/dist/src/labs/OdysseyPickers/index.d.ts.map +1 -0
  208. package/dist/src/labs/PageTemplate.d.ts +1 -1
  209. package/dist/src/labs/PageTemplate.d.ts.map +1 -1
  210. package/dist/src/labs/SideNav/CollapseIcon.d.ts +1 -4
  211. package/dist/src/labs/SideNav/CollapseIcon.d.ts.map +1 -1
  212. package/dist/src/labs/SideNav/HandleIcon.d.ts +14 -0
  213. package/dist/src/labs/SideNav/HandleIcon.d.ts.map +1 -0
  214. package/dist/src/labs/{NavAccordion.d.ts → SideNav/NavAccordion.d.ts} +6 -2
  215. package/dist/src/labs/SideNav/NavAccordion.d.ts.map +1 -0
  216. package/dist/src/labs/SideNav/OktaAura.d.ts +14 -0
  217. package/dist/src/labs/SideNav/OktaAura.d.ts.map +1 -0
  218. package/dist/src/labs/SideNav/OktaLogo.d.ts.map +1 -1
  219. package/dist/src/labs/SideNav/SideNav.d.ts +2 -1
  220. package/dist/src/labs/SideNav/SideNav.d.ts.map +1 -1
  221. package/dist/src/labs/SideNav/SideNavFooterContent.d.ts +1 -1
  222. package/dist/src/labs/SideNav/SideNavFooterContent.d.ts.map +1 -1
  223. package/dist/src/labs/SideNav/SideNavHeader.d.ts +12 -3
  224. package/dist/src/labs/SideNav/SideNavHeader.d.ts.map +1 -1
  225. package/dist/src/labs/SideNav/SideNavItemContent.d.ts +2 -3
  226. package/dist/src/labs/SideNav/SideNavItemContent.d.ts.map +1 -1
  227. package/dist/src/labs/SideNav/SideNavItemContentContext.d.ts +18 -0
  228. package/dist/src/labs/SideNav/SideNavItemContentContext.d.ts.map +1 -0
  229. package/dist/src/labs/SideNav/SideNavItemLinkContent.d.ts +1 -1
  230. package/dist/src/labs/SideNav/SideNavItemLinkContent.d.ts.map +1 -1
  231. package/dist/src/labs/SideNav/SideNavLogo.d.ts +15 -0
  232. package/dist/src/labs/SideNav/SideNavLogo.d.ts.map +1 -0
  233. package/dist/src/labs/SideNav/SideNavToggleButton.d.ts +38 -0
  234. package/dist/src/labs/SideNav/SideNavToggleButton.d.ts.map +1 -0
  235. package/dist/src/labs/SideNav/types.d.ts +67 -33
  236. package/dist/src/labs/SideNav/types.d.ts.map +1 -1
  237. package/dist/src/labs/TopNav/TopNav.d.ts +31 -0
  238. package/dist/src/labs/TopNav/TopNav.d.ts.map +1 -0
  239. package/dist/src/labs/TopNav/TopNavLinksList.d.ts +44 -0
  240. package/dist/src/labs/TopNav/TopNavLinksList.d.ts.map +1 -0
  241. package/dist/src/labs/TopNav/TopNavListItem.d.ts +42 -0
  242. package/dist/src/labs/TopNav/TopNavListItem.d.ts.map +1 -0
  243. package/dist/src/labs/TopNav/UserProfile.d.ts +29 -0
  244. package/dist/src/labs/TopNav/UserProfile.d.ts.map +1 -0
  245. package/dist/src/labs/TopNav/index.d.ts +14 -0
  246. package/dist/src/labs/TopNav/index.d.ts.map +1 -0
  247. package/dist/src/labs/UiShell/UiShell.d.ts +33 -0
  248. package/dist/src/labs/UiShell/UiShell.d.ts.map +1 -0
  249. package/dist/src/labs/UiShell/UiShellContent.d.ts +47 -0
  250. package/dist/src/labs/UiShell/UiShellContent.d.ts.map +1 -0
  251. package/dist/src/labs/UiShell/bufferLatest.d.ts +31 -0
  252. package/dist/src/labs/UiShell/bufferLatest.d.ts.map +1 -0
  253. package/dist/src/labs/UiShell/createMessageBus.d.ts +24 -0
  254. package/dist/src/labs/UiShell/createMessageBus.d.ts.map +1 -0
  255. package/dist/src/labs/UiShell/createStore.d.ts +22 -0
  256. package/dist/src/labs/UiShell/createStore.d.ts.map +1 -0
  257. package/dist/src/labs/UiShell/index.d.ts +16 -0
  258. package/dist/src/labs/UiShell/index.d.ts.map +1 -0
  259. package/dist/src/labs/UiShell/renderUiShell.d.ts +45 -0
  260. package/dist/src/labs/UiShell/renderUiShell.d.ts.map +1 -0
  261. package/dist/src/labs/UiShell/useHasUiShell.d.ts +13 -0
  262. package/dist/src/labs/UiShell/useHasUiShell.d.ts.map +1 -0
  263. package/dist/src/labs/UiShell/useScrollState.d.ts +16 -0
  264. package/dist/src/labs/UiShell/useScrollState.d.ts.map +1 -0
  265. package/dist/src/labs/index.d.ts +6 -2
  266. package/dist/src/labs/index.d.ts.map +1 -1
  267. package/dist/src/properties/ts/odyssey-react-mui.d.ts +6 -0
  268. package/dist/src/properties/ts/odyssey-react-mui.d.ts.map +1 -1
  269. package/dist/src/properties/ts/odyssey-react-mui_cs.d.ts +2 -0
  270. package/dist/src/properties/ts/odyssey-react-mui_cs.d.ts.map +1 -1
  271. package/dist/src/properties/ts/odyssey-react-mui_da.d.ts +2 -0
  272. package/dist/src/properties/ts/odyssey-react-mui_da.d.ts.map +1 -1
  273. package/dist/src/properties/ts/odyssey-react-mui_de.d.ts +2 -0
  274. package/dist/src/properties/ts/odyssey-react-mui_de.d.ts.map +1 -1
  275. package/dist/src/properties/ts/odyssey-react-mui_el.d.ts +2 -0
  276. package/dist/src/properties/ts/odyssey-react-mui_el.d.ts.map +1 -1
  277. package/dist/src/properties/ts/odyssey-react-mui_es.d.ts +2 -0
  278. package/dist/src/properties/ts/odyssey-react-mui_es.d.ts.map +1 -1
  279. package/dist/src/properties/ts/odyssey-react-mui_fi.d.ts +2 -0
  280. package/dist/src/properties/ts/odyssey-react-mui_fi.d.ts.map +1 -1
  281. package/dist/src/properties/ts/odyssey-react-mui_fr.d.ts +2 -0
  282. package/dist/src/properties/ts/odyssey-react-mui_fr.d.ts.map +1 -1
  283. package/dist/src/properties/ts/odyssey-react-mui_ht.d.ts +2 -0
  284. package/dist/src/properties/ts/odyssey-react-mui_ht.d.ts.map +1 -1
  285. package/dist/src/properties/ts/odyssey-react-mui_hu.d.ts +2 -0
  286. package/dist/src/properties/ts/odyssey-react-mui_hu.d.ts.map +1 -1
  287. package/dist/src/properties/ts/odyssey-react-mui_id.d.ts +2 -0
  288. package/dist/src/properties/ts/odyssey-react-mui_id.d.ts.map +1 -1
  289. package/dist/src/properties/ts/odyssey-react-mui_it.d.ts +2 -0
  290. package/dist/src/properties/ts/odyssey-react-mui_it.d.ts.map +1 -1
  291. package/dist/src/properties/ts/odyssey-react-mui_ja.d.ts +2 -0
  292. package/dist/src/properties/ts/odyssey-react-mui_ja.d.ts.map +1 -1
  293. package/dist/src/properties/ts/odyssey-react-mui_ko.d.ts +2 -0
  294. package/dist/src/properties/ts/odyssey-react-mui_ko.d.ts.map +1 -1
  295. package/dist/src/properties/ts/odyssey-react-mui_ms.d.ts +2 -0
  296. package/dist/src/properties/ts/odyssey-react-mui_ms.d.ts.map +1 -1
  297. package/dist/src/properties/ts/odyssey-react-mui_nb.d.ts +2 -0
  298. package/dist/src/properties/ts/odyssey-react-mui_nb.d.ts.map +1 -1
  299. package/dist/src/properties/ts/odyssey-react-mui_nl_NL.d.ts +2 -0
  300. package/dist/src/properties/ts/odyssey-react-mui_nl_NL.d.ts.map +1 -1
  301. package/dist/src/properties/ts/odyssey-react-mui_pl.d.ts +2 -0
  302. package/dist/src/properties/ts/odyssey-react-mui_pl.d.ts.map +1 -1
  303. package/dist/src/properties/ts/odyssey-react-mui_pt_BR.d.ts +2 -0
  304. package/dist/src/properties/ts/odyssey-react-mui_pt_BR.d.ts.map +1 -1
  305. package/dist/src/properties/ts/odyssey-react-mui_ro.d.ts +2 -0
  306. package/dist/src/properties/ts/odyssey-react-mui_ro.d.ts.map +1 -1
  307. package/dist/src/properties/ts/odyssey-react-mui_ru.d.ts +2 -0
  308. package/dist/src/properties/ts/odyssey-react-mui_ru.d.ts.map +1 -1
  309. package/dist/src/properties/ts/odyssey-react-mui_sv.d.ts +2 -0
  310. package/dist/src/properties/ts/odyssey-react-mui_sv.d.ts.map +1 -1
  311. package/dist/src/properties/ts/odyssey-react-mui_th.d.ts +2 -0
  312. package/dist/src/properties/ts/odyssey-react-mui_th.d.ts.map +1 -1
  313. package/dist/src/properties/ts/odyssey-react-mui_tr.d.ts +2 -0
  314. package/dist/src/properties/ts/odyssey-react-mui_tr.d.ts.map +1 -1
  315. package/dist/src/properties/ts/odyssey-react-mui_uk.d.ts +2 -0
  316. package/dist/src/properties/ts/odyssey-react-mui_uk.d.ts.map +1 -1
  317. package/dist/src/properties/ts/odyssey-react-mui_vi.d.ts +2 -0
  318. package/dist/src/properties/ts/odyssey-react-mui_vi.d.ts.map +1 -1
  319. package/dist/src/properties/ts/odyssey-react-mui_zh_CN.d.ts +2 -0
  320. package/dist/src/properties/ts/odyssey-react-mui_zh_CN.d.ts.map +1 -1
  321. package/dist/src/properties/ts/odyssey-react-mui_zh_TW.d.ts +2 -0
  322. package/dist/src/properties/ts/odyssey-react-mui_zh_TW.d.ts.map +1 -1
  323. package/dist/src/test-selectors/querySelector.d.ts +2 -2
  324. package/dist/src/theme/components.d.ts +3 -1
  325. package/dist/src/theme/components.d.ts.map +1 -1
  326. package/dist/src/theme/createOdysseyMuiTheme.d.ts +3 -1
  327. package/dist/src/theme/createOdysseyMuiTheme.d.ts.map +1 -1
  328. package/dist/src/useAutocomplete.d.ts +29 -0
  329. package/dist/src/useAutocomplete.d.ts.map +1 -0
  330. package/dist/src/useContrastMode.d.ts +46 -0
  331. package/dist/src/useContrastMode.d.ts.map +1 -0
  332. package/dist/src/web-component/index.d.ts +14 -0
  333. package/dist/src/web-component/index.d.ts.map +1 -0
  334. package/dist/src/web-component/renderReactInWebComponent.d.ts +76 -0
  335. package/dist/src/web-component/renderReactInWebComponent.d.ts.map +1 -0
  336. package/dist/src/web-component/shadow-dom.d.ts +23 -0
  337. package/dist/src/web-component/shadow-dom.d.ts.map +1 -0
  338. package/dist/test-selectors/querySelector.js.map +1 -1
  339. package/dist/theme/components.js +41 -32
  340. package/dist/theme/components.js.map +1 -1
  341. package/dist/theme/createOdysseyMuiTheme.js +3 -0
  342. package/dist/theme/createOdysseyMuiTheme.js.map +1 -1
  343. package/dist/tsconfig.production.tsbuildinfo +1 -1
  344. package/dist/tsconfig.tsbuildinfo +1 -1
  345. package/dist/useAutocomplete.js +105 -0
  346. package/dist/useAutocomplete.js.map +1 -0
  347. package/dist/useContrastMode.js +93 -0
  348. package/dist/useContrastMode.js.map +1 -0
  349. package/dist/web-component/index.js +14 -0
  350. package/dist/web-component/index.js.map +1 -0
  351. package/dist/web-component/renderReactInWebComponent.js +72 -0
  352. package/dist/web-component/renderReactInWebComponent.js.map +1 -0
  353. package/dist/{createShadowDomElements.js → web-component/shadow-dom.js} +10 -12
  354. package/dist/web-component/shadow-dom.js.map +1 -0
  355. package/jest.config.cjs +21 -2
  356. package/jest.setup.js +0 -3
  357. package/package.json +4 -3
  358. package/src/Autocomplete.tsx +40 -330
  359. package/src/Box.tsx +4 -2
  360. package/src/Card.tsx +1 -0
  361. package/src/OdysseyDesignTokensContext.tsx +6 -3
  362. package/src/OdysseyProvider.tsx +29 -56
  363. package/src/OdysseyThemeProvider.test.tsx +209 -0
  364. package/src/OdysseyThemeProvider.tsx +43 -17
  365. package/src/OdysseyTranslationProvider.types.ts +1 -0
  366. package/src/Pagination/Pagination.test.tsx +305 -0
  367. package/src/Pagination/Pagination.tsx +86 -38
  368. package/src/Select.tsx +12 -3
  369. package/src/Surface.tsx +2 -1
  370. package/src/Tag.tsx +102 -41
  371. package/src/createUniqueAlphabeticalId.test.ts +1 -1
  372. package/src/createUniqueId.test.ts +1 -1
  373. package/src/i18n.ts +2 -0
  374. package/src/index.ts +6 -7
  375. package/src/labs/AppTile.tsx +169 -40
  376. package/src/labs/DataView/CardLayoutContent.tsx +12 -14
  377. package/src/labs/DataView/DataCard.tsx +137 -69
  378. package/src/labs/DataView/DataView.test.tsx +6 -4
  379. package/src/labs/DataView/TableLayoutContent.tsx +6 -2
  380. package/src/labs/DataView/componentTypes.ts +1 -1
  381. package/src/labs/DataView/index.tsx +1 -0
  382. package/src/labs/OdysseyPickers/ComposablePicker.test.tsx +29 -0
  383. package/src/labs/OdysseyPickers/ComposablePicker.tsx +188 -0
  384. package/src/labs/OdysseyPickers/Picker.tsx +381 -0
  385. package/src/labs/OdysseyPickers/PickerVirtualizationListBox.tsx +191 -0
  386. package/src/labs/OdysseyPickers/PickerWithOptionAdornment.tsx +429 -0
  387. package/src/labs/OdysseyPickers/index.ts +15 -0
  388. package/src/labs/PageTemplate.tsx +18 -10
  389. package/src/labs/SideNav/CollapseIcon.tsx +14 -28
  390. package/src/labs/SideNav/HandleIcon.tsx +35 -0
  391. package/src/labs/{NavAccordion.tsx → SideNav/NavAccordion.tsx} +48 -8
  392. package/src/labs/SideNav/OktaAura.tsx +35 -0
  393. package/src/labs/SideNav/OktaLogo.tsx +5 -10
  394. package/src/labs/SideNav/SideNav.test.tsx +323 -0
  395. package/src/labs/SideNav/SideNav.tsx +291 -204
  396. package/src/labs/SideNav/SideNavFooterContent.tsx +36 -28
  397. package/src/labs/SideNav/SideNavHeader.tsx +62 -45
  398. package/src/labs/SideNav/SideNavItemContent.tsx +142 -62
  399. package/src/labs/SideNav/SideNavItemContentContext.tsx +27 -0
  400. package/src/labs/SideNav/SideNavItemLinkContent.tsx +17 -14
  401. package/src/labs/SideNav/SideNavLogo.tsx +41 -0
  402. package/src/labs/SideNav/SideNavToggleButton.tsx +249 -0
  403. package/src/labs/SideNav/types.ts +72 -33
  404. package/src/labs/TopNav/TopNav.tsx +95 -0
  405. package/src/labs/TopNav/TopNavLinksList.tsx +68 -0
  406. package/src/labs/TopNav/TopNavListItem.tsx +209 -0
  407. package/src/labs/TopNav/UserProfile.tsx +79 -0
  408. package/src/labs/TopNav/index.ts +14 -0
  409. package/src/labs/UiShell/UiShell.test.tsx +284 -0
  410. package/src/labs/UiShell/UiShell.tsx +109 -0
  411. package/src/labs/UiShell/UiShellContent.tsx +170 -0
  412. package/src/labs/UiShell/bufferLatest.test.ts +79 -0
  413. package/src/labs/UiShell/bufferLatest.ts +64 -0
  414. package/src/labs/UiShell/createMessageBus.test.ts +115 -0
  415. package/src/labs/UiShell/createMessageBus.ts +53 -0
  416. package/src/labs/UiShell/createStore.test.ts +103 -0
  417. package/src/labs/UiShell/createStore.ts +37 -0
  418. package/src/labs/UiShell/index.ts +17 -0
  419. package/src/labs/UiShell/renderUiShell.test.tsx +197 -0
  420. package/src/labs/UiShell/renderUiShell.tsx +132 -0
  421. package/src/labs/UiShell/useHasUiShell.ts +25 -0
  422. package/src/labs/UiShell/useScrollState.ts +56 -0
  423. package/src/labs/index.ts +10 -3
  424. package/src/properties/odyssey-react-mui.properties +7 -0
  425. package/src/properties/translations/odyssey-react-mui_cs.properties +2 -1
  426. package/src/properties/translations/odyssey-react-mui_da.properties +2 -1
  427. package/src/properties/translations/odyssey-react-mui_de.properties +2 -1
  428. package/src/properties/translations/odyssey-react-mui_el.properties +2 -1
  429. package/src/properties/translations/odyssey-react-mui_es.properties +2 -1
  430. package/src/properties/translations/odyssey-react-mui_fi.properties +2 -1
  431. package/src/properties/translations/odyssey-react-mui_fr.properties +4 -3
  432. package/src/properties/translations/odyssey-react-mui_ht.properties +2 -1
  433. package/src/properties/translations/odyssey-react-mui_hu.properties +2 -1
  434. package/src/properties/translations/odyssey-react-mui_id.properties +2 -1
  435. package/src/properties/translations/odyssey-react-mui_it.properties +3 -2
  436. package/src/properties/translations/odyssey-react-mui_ja.properties +8 -7
  437. package/src/properties/translations/odyssey-react-mui_ko.properties +2 -1
  438. package/src/properties/translations/odyssey-react-mui_ms.properties +2 -1
  439. package/src/properties/translations/odyssey-react-mui_nb.properties +2 -1
  440. package/src/properties/translations/odyssey-react-mui_nl_NL.properties +2 -1
  441. package/src/properties/translations/odyssey-react-mui_pl.properties +2 -1
  442. package/src/properties/translations/odyssey-react-mui_pt_BR.properties +2 -1
  443. package/src/properties/translations/odyssey-react-mui_ro.properties +2 -1
  444. package/src/properties/translations/odyssey-react-mui_ru.properties +2 -1
  445. package/src/properties/translations/odyssey-react-mui_sv.properties +2 -1
  446. package/src/properties/translations/odyssey-react-mui_th.properties +2 -1
  447. package/src/properties/translations/odyssey-react-mui_tr.properties +3 -2
  448. package/src/properties/translations/odyssey-react-mui_uk.properties +2 -1
  449. package/src/properties/translations/odyssey-react-mui_vi.properties +2 -1
  450. package/src/properties/translations/odyssey-react-mui_zh_CN.properties +2 -1
  451. package/src/properties/translations/odyssey-react-mui_zh_TW.properties +2 -1
  452. package/src/properties/ts/odyssey-react-mui.ts +1 -1
  453. package/src/properties/ts/odyssey-react-mui_cs.ts +1 -1
  454. package/src/properties/ts/odyssey-react-mui_da.ts +1 -1
  455. package/src/properties/ts/odyssey-react-mui_de.ts +1 -1
  456. package/src/properties/ts/odyssey-react-mui_el.ts +1 -1
  457. package/src/properties/ts/odyssey-react-mui_es.ts +1 -1
  458. package/src/properties/ts/odyssey-react-mui_fi.ts +1 -1
  459. package/src/properties/ts/odyssey-react-mui_fr.ts +1 -1
  460. package/src/properties/ts/odyssey-react-mui_ht.ts +1 -1
  461. package/src/properties/ts/odyssey-react-mui_hu.ts +1 -1
  462. package/src/properties/ts/odyssey-react-mui_id.ts +1 -1
  463. package/src/properties/ts/odyssey-react-mui_it.ts +1 -1
  464. package/src/properties/ts/odyssey-react-mui_ja.ts +1 -1
  465. package/src/properties/ts/odyssey-react-mui_ko.ts +1 -1
  466. package/src/properties/ts/odyssey-react-mui_ms.ts +1 -1
  467. package/src/properties/ts/odyssey-react-mui_nb.ts +1 -1
  468. package/src/properties/ts/odyssey-react-mui_nl_NL.ts +1 -1
  469. package/src/properties/ts/odyssey-react-mui_pl.ts +1 -1
  470. package/src/properties/ts/odyssey-react-mui_pt_BR.ts +1 -1
  471. package/src/properties/ts/odyssey-react-mui_ro.ts +1 -1
  472. package/src/properties/ts/odyssey-react-mui_ru.ts +1 -1
  473. package/src/properties/ts/odyssey-react-mui_sv.ts +1 -1
  474. package/src/properties/ts/odyssey-react-mui_th.ts +1 -1
  475. package/src/properties/ts/odyssey-react-mui_tr.ts +1 -1
  476. package/src/properties/ts/odyssey-react-mui_uk.ts +1 -1
  477. package/src/properties/ts/odyssey-react-mui_vi.ts +1 -1
  478. package/src/properties/ts/odyssey-react-mui_zh_CN.ts +1 -1
  479. package/src/properties/ts/odyssey-react-mui_zh_TW.ts +1 -1
  480. package/src/test-selectors/querySelector.ts +1 -1
  481. package/src/theme/components.tsx +55 -31
  482. package/src/theme/createOdysseyMuiTheme.ts +4 -0
  483. package/src/theme/useContrastMode.test.tsx +503 -0
  484. package/src/useAutocomplete.tsx +183 -0
  485. package/src/useContrastMode.tsx +149 -0
  486. package/src/web-component/index.ts +14 -0
  487. package/src/web-component/renderReactInWebComponent.test.tsx +156 -0
  488. package/src/web-component/renderReactInWebComponent.ts +153 -0
  489. package/src/web-component/shadow-dom.test.ts +24 -0
  490. package/src/{createShadowDomElements.ts → web-component/shadow-dom.ts} +15 -14
  491. package/dist/ContrastModeProvider.js +0 -86
  492. package/dist/ContrastModeProvider.js.map +0 -1
  493. package/dist/createShadowDomElements.js.map +0 -1
  494. package/dist/labs/NavAccordion.js.map +0 -1
  495. package/dist/labs/TopNav.js +0 -281
  496. package/dist/labs/TopNav.js.map +0 -1
  497. package/dist/src/ContrastModeProvider.d.ts +0 -34
  498. package/dist/src/ContrastModeProvider.d.ts.map +0 -1
  499. package/dist/src/createShadowDomElements.d.ts.map +0 -1
  500. package/dist/src/labs/NavAccordion.d.ts.map +0 -1
  501. package/dist/src/labs/TopNav.d.ts +0 -78
  502. package/dist/src/labs/TopNav.d.ts.map +0 -1
  503. package/src/ContrastModeProvider.tsx +0 -131
  504. package/src/labs/TopNav.tsx +0 -396
@@ -0,0 +1,305 @@
1
+ /*!
2
+ * Copyright (c) 2024-present, Okta, Inc. and/or its affiliates. All rights reserved.
3
+ * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
4
+ *
5
+ * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
6
+ * Unless required by applicable law or agreed to in writing, software
7
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
8
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9
+ *
10
+ * See the License for the specific language governing permissions and limitations under the License.
11
+ */
12
+
13
+ import { fireEvent, render, screen, waitFor } from "@testing-library/react";
14
+ import { Pagination } from "./Pagination";
15
+
16
+ describe("Pagination", () => {
17
+ it("renders the expected controls in 'paged' variant", () => {
18
+ const onPaginationChange = jest.fn();
19
+ render(
20
+ <Pagination
21
+ currentPageLabel="Page"
22
+ nextLabel="Next page"
23
+ previousLabel="Previous page"
24
+ rowsPerPageLabel="Rows per page"
25
+ loadMoreLabel="Load more"
26
+ totalRows={100}
27
+ lastRow={10}
28
+ pageIndex={1}
29
+ pageSize={10}
30
+ onPaginationChange={onPaginationChange}
31
+ variant="paged"
32
+ />,
33
+ );
34
+
35
+ expect(screen.getByLabelText("Rows per page")).toBeInTheDocument();
36
+ expect(screen.getByLabelText("Page")).toBeInTheDocument();
37
+ expect(screen.getByLabelText("Previous page")).toBeInTheDocument();
38
+ expect(screen.getByLabelText("Next page")).toBeInTheDocument();
39
+ // Temporarily disabled while we figure out why i18n string interpolation
40
+ // isn't playing nicely with testing-library. Can confirm this works properly
41
+ // via VRT results
42
+ // expect(screen.getByText("1-10 of 100")).toBeInTheDocument();
43
+ });
44
+
45
+ it("calls onPaginationChange with correct pageIndex when clicking next", async () => {
46
+ const onPaginationChange = jest.fn();
47
+ render(
48
+ <Pagination
49
+ currentPageLabel="Page"
50
+ nextLabel="Next page"
51
+ previousLabel="Previous page"
52
+ rowsPerPageLabel="Rows per page"
53
+ loadMoreLabel="Load more"
54
+ totalRows={100}
55
+ lastRow={10}
56
+ pageIndex={1}
57
+ pageSize={10}
58
+ onPaginationChange={onPaginationChange}
59
+ variant="paged"
60
+ />,
61
+ );
62
+
63
+ fireEvent.click(screen.getByLabelText("Next page"));
64
+
65
+ await waitFor(() => {
66
+ expect(onPaginationChange).toHaveBeenCalledWith({
67
+ pageIndex: 2,
68
+ pageSize: 10,
69
+ });
70
+ });
71
+ });
72
+
73
+ it("calls onPaginationChange with correct pageIndex when clicking previous", async () => {
74
+ const onPaginationChange = jest.fn();
75
+ render(
76
+ <Pagination
77
+ currentPageLabel="Page"
78
+ nextLabel="Next page"
79
+ previousLabel="Previous page"
80
+ rowsPerPageLabel="Rows per page"
81
+ loadMoreLabel="Load more"
82
+ totalRows={100}
83
+ lastRow={20}
84
+ pageIndex={2}
85
+ pageSize={10}
86
+ onPaginationChange={onPaginationChange}
87
+ variant="paged"
88
+ />,
89
+ );
90
+
91
+ fireEvent.click(screen.getByLabelText("Previous page"));
92
+
93
+ await waitFor(() => {
94
+ expect(onPaginationChange).toHaveBeenCalledWith({
95
+ pageIndex: 1,
96
+ pageSize: 10,
97
+ });
98
+ });
99
+ });
100
+
101
+ it("disables previous button on first page", () => {
102
+ const onPaginationChange = jest.fn();
103
+ render(
104
+ <Pagination
105
+ currentPageLabel="Page"
106
+ nextLabel="Next page"
107
+ previousLabel="Previous page"
108
+ rowsPerPageLabel="Rows per page"
109
+ loadMoreLabel="Load more"
110
+ totalRows={100}
111
+ lastRow={10}
112
+ pageIndex={1}
113
+ pageSize={10}
114
+ onPaginationChange={onPaginationChange}
115
+ variant="paged"
116
+ />,
117
+ );
118
+
119
+ expect(screen.getByLabelText("Previous page")).toBeDisabled();
120
+ });
121
+
122
+ it("disables next button on last page", () => {
123
+ const onPaginationChange = jest.fn();
124
+ render(
125
+ <Pagination
126
+ currentPageLabel="Page"
127
+ nextLabel="Next page"
128
+ previousLabel="Previous page"
129
+ rowsPerPageLabel="Rows per page"
130
+ loadMoreLabel="Load more"
131
+ totalRows={100}
132
+ lastRow={100}
133
+ pageIndex={10}
134
+ pageSize={10}
135
+ onPaginationChange={onPaginationChange}
136
+ variant="paged"
137
+ />,
138
+ );
139
+
140
+ expect(screen.getByLabelText("Next page")).toBeDisabled();
141
+ });
142
+
143
+ it("updates pageIndex when entering a new page number", async () => {
144
+ const onPaginationChange = jest.fn();
145
+ render(
146
+ <Pagination
147
+ currentPageLabel="Page"
148
+ nextLabel="Next page"
149
+ previousLabel="Previous page"
150
+ rowsPerPageLabel="Rows per page"
151
+ loadMoreLabel="Load more"
152
+ totalRows={100}
153
+ lastRow={10}
154
+ pageIndex={1}
155
+ pageSize={10}
156
+ onPaginationChange={onPaginationChange}
157
+ variant="paged"
158
+ />,
159
+ );
160
+
161
+ const pageInput = screen.getByLabelText("Page");
162
+ fireEvent.change(pageInput, { target: { value: "5" } });
163
+ fireEvent.blur(pageInput);
164
+
165
+ await waitFor(() => {
166
+ expect(onPaginationChange).toHaveBeenCalledWith({
167
+ pageIndex: 5,
168
+ pageSize: 10,
169
+ });
170
+ });
171
+ });
172
+
173
+ it("updates pageSize when entering a new rows per page value", async () => {
174
+ const onPaginationChange = jest.fn();
175
+ render(
176
+ <Pagination
177
+ currentPageLabel="Page"
178
+ nextLabel="Next page"
179
+ previousLabel="Previous page"
180
+ rowsPerPageLabel="Rows per page"
181
+ loadMoreLabel="Load more"
182
+ totalRows={100}
183
+ lastRow={10}
184
+ pageIndex={1}
185
+ pageSize={10}
186
+ onPaginationChange={onPaginationChange}
187
+ variant="paged"
188
+ />,
189
+ );
190
+
191
+ const rowsPerPageInput = screen.getByLabelText("Rows per page");
192
+ fireEvent.change(rowsPerPageInput, { target: { value: "20" } });
193
+ fireEvent.blur(rowsPerPageInput);
194
+
195
+ await waitFor(() => {
196
+ expect(onPaginationChange).toHaveBeenCalledWith({
197
+ pageIndex: 1,
198
+ pageSize: 20,
199
+ });
200
+ });
201
+ });
202
+
203
+ it("renders 'Load more' button in 'loadMore' variant", () => {
204
+ const onPaginationChange = jest.fn();
205
+ render(
206
+ <Pagination
207
+ loadMoreLabel="Load more"
208
+ onPaginationChange={onPaginationChange}
209
+ pageIndex={1}
210
+ pageSize={20}
211
+ totalRows={100}
212
+ variant="loadMore"
213
+ />,
214
+ );
215
+
216
+ expect(screen.getByText("Load more")).toBeInTheDocument();
217
+ });
218
+
219
+ it("calls onPaginationChange with increased pageSize when clicking 'Load more'", async () => {
220
+ const onPaginationChange = jest.fn();
221
+ render(
222
+ <Pagination
223
+ loadMoreLabel="Load more"
224
+ onPaginationChange={onPaginationChange}
225
+ pageIndex={1}
226
+ pageSize={20}
227
+ totalRows={100}
228
+ variant="loadMore"
229
+ />,
230
+ );
231
+
232
+ fireEvent.click(screen.getByText("Load more"));
233
+
234
+ await waitFor(() => {
235
+ expect(onPaginationChange).toHaveBeenCalledWith({
236
+ pageIndex: 1,
237
+ pageSize: 40, // Assuming initial pageSize is 20, it should increment by 20
238
+ });
239
+ });
240
+ });
241
+
242
+ it("disables 'Load more' button when isMoreDisabled is true", () => {
243
+ const onPaginationChange = jest.fn();
244
+ render(
245
+ <Pagination
246
+ loadMoreLabel="Load more"
247
+ onPaginationChange={onPaginationChange}
248
+ pageIndex={1}
249
+ pageSize={100}
250
+ totalRows={100}
251
+ variant="loadMore"
252
+ isMoreDisabled={true}
253
+ />,
254
+ );
255
+
256
+ expect(screen.getByText("Load more")).toBeDisabled();
257
+ });
258
+
259
+ it("disables 'Next page' button when isMoreDisabled is true", () => {
260
+ const onPaginationChange = jest.fn();
261
+ render(
262
+ <Pagination
263
+ currentPageLabel="Page"
264
+ nextLabel="Next page"
265
+ previousLabel="Previous page"
266
+ rowsPerPageLabel="Rows per page"
267
+ loadMoreLabel="Load more"
268
+ totalRows={100}
269
+ lastRow={10}
270
+ pageIndex={1}
271
+ pageSize={10}
272
+ onPaginationChange={onPaginationChange}
273
+ variant="paged"
274
+ isMoreDisabled={true}
275
+ />,
276
+ );
277
+
278
+ expect(screen.getByLabelText("Next page")).toBeDisabled();
279
+ });
280
+
281
+ it("disables all controls when isDisabled is true", () => {
282
+ const onPaginationChange = jest.fn();
283
+ render(
284
+ <Pagination
285
+ currentPageLabel="Page"
286
+ nextLabel="Next page"
287
+ previousLabel="Previous page"
288
+ rowsPerPageLabel="Rows per page"
289
+ loadMoreLabel="Load more"
290
+ totalRows={100}
291
+ lastRow={10}
292
+ pageIndex={1}
293
+ pageSize={10}
294
+ onPaginationChange={onPaginationChange}
295
+ variant="paged"
296
+ isDisabled={true}
297
+ />,
298
+ );
299
+
300
+ expect(screen.getByLabelText("Rows per page")).toBeDisabled();
301
+ expect(screen.getByLabelText("Page")).toBeDisabled();
302
+ expect(screen.getByLabelText("Previous page")).toBeDisabled();
303
+ expect(screen.getByLabelText("Next page")).toBeDisabled();
304
+ });
305
+ });
@@ -23,6 +23,7 @@ import {
23
23
  import { Box } from "../Box";
24
24
  import { paginationTypeValues } from "./constants";
25
25
  import { usePagination } from "./usePagination";
26
+ import { useTranslation } from "react-i18next";
26
27
 
27
28
  const PaginationContainer = styled("div")({
28
29
  display: "flex",
@@ -68,11 +69,25 @@ export type PaginationProps = {
68
69
  /**
69
70
  * The labeled rendered for the current page index
70
71
  */
71
- currentPageLabel: string;
72
+ currentPageLabel?: string;
72
73
  /**
73
74
  * The number of items currently visible on the page
74
75
  */
75
76
  currentRowsCount?: number;
77
+ /**
78
+ * If true, the page input will be visible and the user can directly manipulate which page
79
+ * is visible.
80
+ */
81
+ hasPageInput?: boolean;
82
+ /**
83
+ * If true, the row count input will be visible and the user can directly manipulate how many rows
84
+ * are visible.
85
+ */
86
+ hasRowCountInput?: boolean;
87
+ /**
88
+ * If true, the "X - X of total X" label will be visible
89
+ */
90
+ hasRowCountLabel?: boolean;
76
91
  /**
77
92
  * If true, the pagination controls will be disabled
78
93
  */
@@ -84,11 +99,11 @@ export type PaginationProps = {
84
99
  /**
85
100
  * The current page last row index
86
101
  */
87
- lastRow: number;
102
+ lastRow?: number;
88
103
  /**
89
104
  * If the pagination is of "loadMore" variant, then this is the the load more label
90
105
  */
91
- loadMoreLabel: string;
106
+ loadMoreLabel?: string;
92
107
  /**
93
108
  * The max page
94
109
  */
@@ -100,7 +115,7 @@ export type PaginationProps = {
100
115
  /**
101
116
  * The label for the next control
102
117
  */
103
- nextLabel: string;
118
+ nextLabel?: string;
104
119
  /**
105
120
  * Page index and page size setter
106
121
  */
@@ -122,11 +137,11 @@ export type PaginationProps = {
122
137
  /**
123
138
  * The label for the previous control
124
139
  */
125
- previousLabel: string;
140
+ previousLabel?: string;
126
141
  /**
127
142
  * The label that shows how many results are rendered per page
128
143
  */
129
- rowsPerPageLabel: string;
144
+ rowsPerPageLabel?: string;
130
145
  /**
131
146
  * Total rows count
132
147
  */
@@ -139,34 +154,51 @@ export type PaginationProps = {
139
154
  };
140
155
 
141
156
  const Pagination = ({
142
- currentPageLabel,
157
+ currentPageLabel: currentPageLabelProp,
158
+ currentRowsCount,
159
+ hasPageInput = true,
160
+ hasRowCountInput = true,
161
+ hasRowCountLabel = true,
143
162
  isDisabled,
144
163
  isMoreDisabled,
145
164
  lastRow,
146
- loadMoreLabel,
165
+ loadMoreLabel: loadMoreLabelProp,
147
166
  maxPageIndex,
148
167
  maxPageSize,
149
- nextLabel,
150
- onPaginationChange,
168
+ nextLabel: nextLabelProp,
169
+ onPaginationChange: onPaginationChangeProp,
151
170
  pageIndex,
152
171
  pageSize,
153
- previousLabel,
154
- rowsPerPageLabel,
172
+ previousLabel: previousLabelProp,
173
+ rowsPerPageLabel: rowsPerPageLabelProp,
155
174
  totalRows,
156
- currentRowsCount,
157
175
  variant,
158
176
  }: PaginationProps) => {
159
177
  const odysseyDesignTokens = useOdysseyDesignTokens();
178
+ const { t } = useTranslation();
160
179
 
161
180
  const [page, setPage] = useState<number>(pageIndex);
162
181
  const [rowsPerPage, setRowsPerPage] = useState<number>(pageSize);
163
182
  const initialRowsPerPage = useRef<number>(pageSize);
164
183
 
184
+ const currentPageLabel = currentPageLabelProp ?? t("pagination.page");
185
+ const loadMoreLabel = loadMoreLabelProp ?? t("pagination.loadmore");
186
+ const nextLabel = nextLabelProp ?? t("pagination.next");
187
+ const previousLabel = previousLabelProp ?? t("pagination.previous");
188
+ const rowsPerPageLabel = rowsPerPageLabelProp ?? t("pagination.rowsperpage");
189
+
165
190
  useEffect(() => {
166
191
  setPage(pageIndex);
167
192
  setRowsPerPage(pageSize);
168
193
  }, [pageIndex, pageSize]);
169
194
 
195
+ const onPaginationChange = useCallback(
196
+ ({ pageIndex, pageSize }: { pageIndex: number; pageSize: number }) => {
197
+ onPaginationChangeProp({ pageIndex, pageSize });
198
+ },
199
+ [onPaginationChangeProp],
200
+ );
201
+
170
202
  const { totalRowsLabel } = usePagination({
171
203
  pageIndex,
172
204
  pageSize,
@@ -175,18 +207,30 @@ const Pagination = ({
175
207
  });
176
208
 
177
209
  const handlePaginationChange = useCallback(() => {
178
- const updatedPage =
179
- totalRows && page * totalRows > lastRow
180
- ? Math.ceil(totalRows / rowsPerPage)
181
- : page;
182
- const updatedRowsPerPage =
183
- totalRows && rowsPerPage > totalRows ? totalRows : rowsPerPage;
210
+ let updatedPage = page;
211
+ let updatedRowsPerPage = rowsPerPage;
212
+
213
+ if (totalRows) {
214
+ const maxPageIndex = Math.ceil(totalRows / updatedRowsPerPage);
215
+
216
+ // Ensure rowsPerPage does not exceed totalRows
217
+ if (updatedRowsPerPage > totalRows) {
218
+ updatedRowsPerPage = totalRows;
219
+ }
220
+
221
+ // Ensure page is within valid range
222
+ if (updatedPage > maxPageIndex) {
223
+ updatedPage = maxPageIndex;
224
+ } else if (updatedPage < 1) {
225
+ updatedPage = 1;
226
+ }
227
+ }
184
228
 
185
229
  onPaginationChange({
186
230
  pageIndex: updatedPage,
187
231
  pageSize: updatedRowsPerPage,
188
232
  });
189
- }, [page, rowsPerPage, lastRow, onPaginationChange, totalRows]);
233
+ }, [page, rowsPerPage, onPaginationChange, totalRows]);
190
234
 
191
235
  // The following handlers use React.KeyboardEvent (rather than just KeyboardEvent) becuase React.KeyboardEvent
192
236
  // is generic, while plain KeyboardEvent is not. We need this generic so we can specify the HTMLInputElement,
@@ -259,7 +303,7 @@ const Pagination = ({
259
303
  const nextButtonDisabled = useMemo(
260
304
  () =>
261
305
  isMoreDisabled ||
262
- (totalRows ? lastRow >= totalRows : false) ||
306
+ (lastRow && (totalRows ? lastRow >= totalRows : false)) ||
263
307
  isDisabled,
264
308
  [isMoreDisabled, totalRows, lastRow, isDisabled],
265
309
  );
@@ -288,28 +332,32 @@ const Pagination = ({
288
332
  return variant === "paged" ? (
289
333
  <PaginationContainer>
290
334
  <PaginationSegment odysseyDesignTokens={odysseyDesignTokens}>
291
- <Box>
335
+ {hasRowCountInput && (
336
+ <Box>
337
+ <Paragraph component="span" color="textSecondary">
338
+ {rowsPerPageLabel}
339
+ </Paragraph>
340
+ <PaginationInput
341
+ odysseyDesignTokens={odysseyDesignTokens}
342
+ type="number"
343
+ value={rowsPerPage}
344
+ onChange={setRowsPerPageFromEvent}
345
+ onBlur={handlePaginationChange}
346
+ onKeyDown={handleRowsPerPageSubmit}
347
+ disabled={isDisabled}
348
+ inputProps={rowsPerPageInputProps}
349
+ />
350
+ </Box>
351
+ )}
352
+ {hasRowCountLabel && (
292
353
  <Paragraph component="span" color="textSecondary">
293
- {rowsPerPageLabel}
354
+ {totalRowsLabel}
294
355
  </Paragraph>
295
- <PaginationInput
296
- odysseyDesignTokens={odysseyDesignTokens}
297
- type="number"
298
- value={rowsPerPage}
299
- onChange={setRowsPerPageFromEvent}
300
- onBlur={handlePaginationChange}
301
- onKeyDown={handleRowsPerPageSubmit}
302
- disabled={isDisabled}
303
- inputProps={rowsPerPageInputProps}
304
- />
305
- </Box>
306
- <Paragraph component="span" color="textSecondary">
307
- {totalRowsLabel}
308
- </Paragraph>
356
+ )}
309
357
  </PaginationSegment>
310
358
 
311
359
  <PaginationSegment odysseyDesignTokens={odysseyDesignTokens}>
312
- {totalRows && (
360
+ {totalRows && hasPageInput && (
313
361
  <Box>
314
362
  <Paragraph component="span" color="textSecondary">
315
363
  {currentPageLabel}
package/src/Select.tsx CHANGED
@@ -19,6 +19,7 @@ import {
19
19
  useState,
20
20
  useImperativeHandle,
21
21
  } from "react";
22
+ import styled from "@emotion/styled";
22
23
  import {
23
24
  Box as MuiBox,
24
25
  Checkbox as MuiCheckbox,
@@ -27,9 +28,10 @@ import {
27
28
  ListSubheader,
28
29
  MenuItem as MuiMenuItem,
29
30
  Select as MuiSelect,
31
+ SelectProps as MuiSelectProps,
30
32
  SelectChangeEvent,
31
33
  } from "@mui/material";
32
- import { SelectProps as MuiSelectProps } from "@mui/material";
34
+
33
35
  import { Field } from "./Field";
34
36
  import {
35
37
  FieldComponentProps,
@@ -43,13 +45,12 @@ import {
43
45
  useInputValues,
44
46
  getControlState,
45
47
  } from "./inputUtils";
46
- import { normalizedKey } from "./useNormalizedKey";
47
- import styled from "@emotion/styled";
48
48
  import {
49
49
  useOdysseyDesignTokens,
50
50
  DesignTokens,
51
51
  } from "./OdysseyDesignTokensContext";
52
52
  import { TestSelector } from "./test-selectors";
53
+ import { normalizedKey } from "./useNormalizedKey";
53
54
 
54
55
  export const SelectTestSelector = {
55
56
  accessibleText: {
@@ -508,6 +509,14 @@ const Select = <
508
509
  selectRef.current = el;
509
510
  }}
510
511
  labelId={labelElementId}
512
+ MenuProps={{
513
+ sx: {
514
+ ".MuiPaper-root": {
515
+ maxHeight: "50vh",
516
+ minHeight: "200px",
517
+ },
518
+ },
519
+ }}
511
520
  multiple={hasMultipleChoices}
512
521
  name={nameOverride ?? id}
513
522
  onBlur={onBlur}
package/src/Surface.tsx CHANGED
@@ -18,6 +18,7 @@ import {
18
18
  DesignTokens,
19
19
  useOdysseyDesignTokens,
20
20
  } from "./OdysseyDesignTokensContext";
21
+ import { OdysseyThemeProvider } from "./OdysseyThemeProvider";
21
22
 
22
23
  const StyledContainer = styled(MuiPaper, {
23
24
  shouldForwardProp: (prop) => prop !== "odysseyDesignTokens",
@@ -37,7 +38,7 @@ const Surface = ({ children }: SurfaceProps) => {
37
38
 
38
39
  return (
39
40
  <StyledContainer odysseyDesignTokens={odysseyDesignTokens}>
40
- {children}
41
+ <OdysseyThemeProvider>{children}</OdysseyThemeProvider>
41
42
  </StyledContainer>
42
43
  );
43
44
  };