@okta/odyssey-react-mui 1.25.0 → 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 (491) hide show
  1. package/CHANGELOG.md +11 -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 +9 -7
  11. package/dist/OdysseyProvider.js.map +1 -1
  12. package/dist/OdysseyThemeProvider.js +33 -13
  13. package/dist/OdysseyThemeProvider.js.map +1 -1
  14. package/dist/Pagination/Pagination.js +46 -14
  15. package/dist/Pagination/Pagination.js.map +1 -1
  16. package/dist/Surface.js +4 -1
  17. package/dist/Surface.js.map +1 -1
  18. package/dist/Tag.js +42 -27
  19. package/dist/Tag.js.map +1 -1
  20. package/dist/index.js +6 -7
  21. package/dist/index.js.map +1 -1
  22. package/dist/index.scss +1 -1
  23. package/dist/labs/AppTile.js +137 -39
  24. package/dist/labs/AppTile.js.map +1 -1
  25. package/dist/labs/DataView/CardLayoutContent.js +7 -8
  26. package/dist/labs/DataView/CardLayoutContent.js.map +1 -1
  27. package/dist/labs/DataView/DataCard.js +96 -43
  28. package/dist/labs/DataView/DataCard.js.map +1 -1
  29. package/dist/labs/DataView/TableLayoutContent.js +3 -2
  30. package/dist/labs/DataView/TableLayoutContent.js.map +1 -1
  31. package/dist/labs/DataView/componentTypes.js.map +1 -1
  32. package/dist/labs/DataView/index.js.map +1 -1
  33. package/dist/labs/OdysseyPickers/ComposablePicker.js +113 -0
  34. package/dist/labs/OdysseyPickers/ComposablePicker.js.map +1 -0
  35. package/dist/labs/OdysseyPickers/Picker.js +261 -0
  36. package/dist/labs/OdysseyPickers/Picker.js.map +1 -0
  37. package/dist/labs/OdysseyPickers/PickerVirtualizationListBox.js +132 -0
  38. package/dist/labs/OdysseyPickers/PickerVirtualizationListBox.js.map +1 -0
  39. package/dist/labs/OdysseyPickers/PickerWithOptionAdornment.js +291 -0
  40. package/dist/labs/OdysseyPickers/PickerWithOptionAdornment.js.map +1 -0
  41. package/dist/{src/createShadowDomElements.d.ts → labs/OdysseyPickers/index.js} +4 -7
  42. package/dist/labs/OdysseyPickers/index.js.map +1 -0
  43. package/dist/labs/PageTemplate.js +14 -10
  44. package/dist/labs/PageTemplate.js.map +1 -1
  45. package/dist/labs/SideNav/CollapseIcon.js +11 -25
  46. package/dist/labs/SideNav/CollapseIcon.js.map +1 -1
  47. package/dist/labs/SideNav/HandleIcon.js +32 -0
  48. package/dist/labs/SideNav/HandleIcon.js.map +1 -0
  49. package/dist/labs/{NavAccordion.js → SideNav/NavAccordion.js} +35 -6
  50. package/dist/labs/SideNav/NavAccordion.js.map +1 -0
  51. package/dist/labs/SideNav/OktaAura.js +32 -0
  52. package/dist/labs/SideNav/OktaAura.js.map +1 -0
  53. package/dist/labs/SideNav/OktaLogo.js +6 -9
  54. package/dist/labs/SideNav/OktaLogo.js.map +1 -1
  55. package/dist/labs/SideNav/SideNav.js +239 -169
  56. package/dist/labs/SideNav/SideNav.js.map +1 -1
  57. package/dist/labs/SideNav/SideNavFooterContent.js +32 -18
  58. package/dist/labs/SideNav/SideNavFooterContent.js.map +1 -1
  59. package/dist/labs/SideNav/SideNavHeader.js +48 -37
  60. package/dist/labs/SideNav/SideNavHeader.js.map +1 -1
  61. package/dist/labs/SideNav/SideNavItemContent.js +100 -58
  62. package/dist/labs/SideNav/SideNavItemContent.js.map +1 -1
  63. package/dist/labs/SideNav/SideNavItemContentContext.js +19 -0
  64. package/dist/labs/SideNav/SideNavItemContentContext.js.map +1 -0
  65. package/dist/labs/SideNav/SideNavItemLinkContent.js +14 -13
  66. package/dist/labs/SideNav/SideNavItemLinkContent.js.map +1 -1
  67. package/dist/labs/SideNav/SideNavLogo.js +42 -0
  68. package/dist/labs/SideNav/SideNavLogo.js.map +1 -0
  69. package/dist/labs/SideNav/SideNavToggleButton.js +170 -0
  70. package/dist/labs/SideNav/SideNavToggleButton.js.map +1 -0
  71. package/dist/labs/SideNav/types.js.map +1 -1
  72. package/dist/labs/TopNav/TopNav.js +65 -0
  73. package/dist/labs/TopNav/TopNav.js.map +1 -0
  74. package/dist/labs/TopNav/TopNavLinksList.js +38 -0
  75. package/dist/labs/TopNav/TopNavLinksList.js.map +1 -0
  76. package/dist/labs/TopNav/TopNavListItem.js +132 -0
  77. package/dist/labs/TopNav/TopNavListItem.js.map +1 -0
  78. package/dist/labs/TopNav/UserProfile.js +65 -0
  79. package/dist/labs/TopNav/UserProfile.js.map +1 -0
  80. package/dist/labs/TopNav/index.js +14 -0
  81. package/dist/labs/TopNav/index.js.map +1 -0
  82. package/dist/labs/UiShell/UiShell.js +68 -0
  83. package/dist/labs/UiShell/UiShell.js.map +1 -0
  84. package/dist/labs/UiShell/UiShellContent.js +114 -0
  85. package/dist/labs/UiShell/UiShellContent.js.map +1 -0
  86. package/dist/labs/UiShell/bufferLatest.js +37 -0
  87. package/dist/labs/UiShell/bufferLatest.js.map +1 -0
  88. package/dist/labs/UiShell/createMessageBus.js +30 -0
  89. package/dist/labs/UiShell/createMessageBus.js.map +1 -0
  90. package/dist/labs/UiShell/createStore.js +24 -0
  91. package/dist/labs/UiShell/createStore.js.map +1 -0
  92. package/dist/labs/UiShell/index.js +15 -0
  93. package/dist/labs/UiShell/index.js.map +1 -0
  94. package/dist/labs/UiShell/renderUiShell.js +78 -0
  95. package/dist/labs/UiShell/renderUiShell.js.map +1 -0
  96. package/dist/labs/UiShell/useHasUiShell.js +22 -0
  97. package/dist/labs/UiShell/useHasUiShell.js.map +1 -0
  98. package/dist/labs/UiShell/useScrollState.js +41 -0
  99. package/dist/labs/UiShell/useScrollState.js.map +1 -0
  100. package/dist/labs/index.js +5 -3
  101. package/dist/labs/index.js.map +1 -1
  102. package/dist/properties/ts/odyssey-react-mui.js +7 -1
  103. package/dist/properties/ts/odyssey-react-mui.js.map +1 -1
  104. package/dist/properties/ts/odyssey-react-mui_cs.js +3 -1
  105. package/dist/properties/ts/odyssey-react-mui_cs.js.map +1 -1
  106. package/dist/properties/ts/odyssey-react-mui_da.js +3 -1
  107. package/dist/properties/ts/odyssey-react-mui_da.js.map +1 -1
  108. package/dist/properties/ts/odyssey-react-mui_de.js +3 -1
  109. package/dist/properties/ts/odyssey-react-mui_de.js.map +1 -1
  110. package/dist/properties/ts/odyssey-react-mui_el.js +3 -1
  111. package/dist/properties/ts/odyssey-react-mui_el.js.map +1 -1
  112. package/dist/properties/ts/odyssey-react-mui_es.js +3 -1
  113. package/dist/properties/ts/odyssey-react-mui_es.js.map +1 -1
  114. package/dist/properties/ts/odyssey-react-mui_fi.js +3 -1
  115. package/dist/properties/ts/odyssey-react-mui_fi.js.map +1 -1
  116. package/dist/properties/ts/odyssey-react-mui_fr.js +5 -3
  117. package/dist/properties/ts/odyssey-react-mui_fr.js.map +1 -1
  118. package/dist/properties/ts/odyssey-react-mui_ht.js +3 -1
  119. package/dist/properties/ts/odyssey-react-mui_ht.js.map +1 -1
  120. package/dist/properties/ts/odyssey-react-mui_hu.js +3 -1
  121. package/dist/properties/ts/odyssey-react-mui_hu.js.map +1 -1
  122. package/dist/properties/ts/odyssey-react-mui_id.js +3 -1
  123. package/dist/properties/ts/odyssey-react-mui_id.js.map +1 -1
  124. package/dist/properties/ts/odyssey-react-mui_it.js +4 -2
  125. package/dist/properties/ts/odyssey-react-mui_it.js.map +1 -1
  126. package/dist/properties/ts/odyssey-react-mui_ja.js +9 -7
  127. package/dist/properties/ts/odyssey-react-mui_ja.js.map +1 -1
  128. package/dist/properties/ts/odyssey-react-mui_ko.js +3 -1
  129. package/dist/properties/ts/odyssey-react-mui_ko.js.map +1 -1
  130. package/dist/properties/ts/odyssey-react-mui_ms.js +3 -1
  131. package/dist/properties/ts/odyssey-react-mui_ms.js.map +1 -1
  132. package/dist/properties/ts/odyssey-react-mui_nb.js +3 -1
  133. package/dist/properties/ts/odyssey-react-mui_nb.js.map +1 -1
  134. package/dist/properties/ts/odyssey-react-mui_nl_NL.js +3 -1
  135. package/dist/properties/ts/odyssey-react-mui_nl_NL.js.map +1 -1
  136. package/dist/properties/ts/odyssey-react-mui_pl.js +3 -1
  137. package/dist/properties/ts/odyssey-react-mui_pl.js.map +1 -1
  138. package/dist/properties/ts/odyssey-react-mui_pt_BR.js +3 -1
  139. package/dist/properties/ts/odyssey-react-mui_pt_BR.js.map +1 -1
  140. package/dist/properties/ts/odyssey-react-mui_ro.js +3 -1
  141. package/dist/properties/ts/odyssey-react-mui_ro.js.map +1 -1
  142. package/dist/properties/ts/odyssey-react-mui_ru.js +3 -1
  143. package/dist/properties/ts/odyssey-react-mui_ru.js.map +1 -1
  144. package/dist/properties/ts/odyssey-react-mui_sv.js +3 -1
  145. package/dist/properties/ts/odyssey-react-mui_sv.js.map +1 -1
  146. package/dist/properties/ts/odyssey-react-mui_th.js +3 -1
  147. package/dist/properties/ts/odyssey-react-mui_th.js.map +1 -1
  148. package/dist/properties/ts/odyssey-react-mui_tr.js +4 -2
  149. package/dist/properties/ts/odyssey-react-mui_tr.js.map +1 -1
  150. package/dist/properties/ts/odyssey-react-mui_uk.js +3 -1
  151. package/dist/properties/ts/odyssey-react-mui_uk.js.map +1 -1
  152. package/dist/properties/ts/odyssey-react-mui_vi.js +3 -1
  153. package/dist/properties/ts/odyssey-react-mui_vi.js.map +1 -1
  154. package/dist/properties/ts/odyssey-react-mui_zh_CN.js +3 -1
  155. package/dist/properties/ts/odyssey-react-mui_zh_CN.js.map +1 -1
  156. package/dist/properties/ts/odyssey-react-mui_zh_TW.js +3 -1
  157. package/dist/properties/ts/odyssey-react-mui_zh_TW.js.map +1 -1
  158. package/dist/src/Autocomplete.d.ts +21 -22
  159. package/dist/src/Autocomplete.d.ts.map +1 -1
  160. package/dist/src/Box.d.ts +3 -1
  161. package/dist/src/Box.d.ts.map +1 -1
  162. package/dist/src/Card.d.ts.map +1 -1
  163. package/dist/src/OdysseyDesignTokensContext.d.ts +5 -4
  164. package/dist/src/OdysseyDesignTokensContext.d.ts.map +1 -1
  165. package/dist/src/OdysseyProvider.d.ts +3 -3
  166. package/dist/src/OdysseyProvider.d.ts.map +1 -1
  167. package/dist/src/OdysseyThemeProvider.d.ts +10 -12
  168. package/dist/src/OdysseyThemeProvider.d.ts.map +1 -1
  169. package/dist/src/OdysseyTranslationProvider.d.ts +1 -1
  170. package/dist/src/OdysseyTranslationProvider.d.ts.map +1 -1
  171. package/dist/src/Pagination/Pagination.d.ts +21 -7
  172. package/dist/src/Pagination/Pagination.d.ts.map +1 -1
  173. package/dist/src/Surface.d.ts.map +1 -1
  174. package/dist/src/Tag.d.ts +5 -2
  175. package/dist/src/Tag.d.ts.map +1 -1
  176. package/dist/src/index.d.ts +6 -7
  177. package/dist/src/index.d.ts.map +1 -1
  178. package/dist/src/labs/AppTile.d.ts +3 -1
  179. package/dist/src/labs/AppTile.d.ts.map +1 -1
  180. package/dist/src/labs/DataView/CardLayoutContent.d.ts.map +1 -1
  181. package/dist/src/labs/DataView/DataCard.d.ts +9 -3
  182. package/dist/src/labs/DataView/DataCard.d.ts.map +1 -1
  183. package/dist/src/labs/DataView/TableLayoutContent.d.ts.map +1 -1
  184. package/dist/src/labs/DataView/componentTypes.d.ts +1 -1
  185. package/dist/src/labs/DataView/componentTypes.d.ts.map +1 -1
  186. package/dist/src/labs/DataView/index.d.ts +1 -0
  187. package/dist/src/labs/DataView/index.d.ts.map +1 -1
  188. package/dist/src/labs/OdysseyPickers/ComposablePicker.d.ts +33 -0
  189. package/dist/src/labs/OdysseyPickers/ComposablePicker.d.ts.map +1 -0
  190. package/dist/src/labs/OdysseyPickers/Picker.d.ts +98 -0
  191. package/dist/src/labs/OdysseyPickers/Picker.d.ts.map +1 -0
  192. package/dist/src/labs/OdysseyPickers/PickerVirtualizationListBox.d.ts +17 -0
  193. package/dist/src/labs/OdysseyPickers/PickerVirtualizationListBox.d.ts.map +1 -0
  194. package/dist/src/labs/OdysseyPickers/PickerWithOptionAdornment.d.ts +26 -0
  195. package/dist/src/labs/OdysseyPickers/PickerWithOptionAdornment.d.ts.map +1 -0
  196. package/dist/src/labs/OdysseyPickers/index.d.ts +15 -0
  197. package/dist/src/labs/OdysseyPickers/index.d.ts.map +1 -0
  198. package/dist/src/labs/PageTemplate.d.ts +1 -1
  199. package/dist/src/labs/PageTemplate.d.ts.map +1 -1
  200. package/dist/src/labs/SideNav/CollapseIcon.d.ts +1 -4
  201. package/dist/src/labs/SideNav/CollapseIcon.d.ts.map +1 -1
  202. package/dist/src/labs/SideNav/HandleIcon.d.ts +14 -0
  203. package/dist/src/labs/SideNav/HandleIcon.d.ts.map +1 -0
  204. package/dist/src/labs/{NavAccordion.d.ts → SideNav/NavAccordion.d.ts} +6 -2
  205. package/dist/src/labs/SideNav/NavAccordion.d.ts.map +1 -0
  206. package/dist/src/labs/SideNav/OktaAura.d.ts +14 -0
  207. package/dist/src/labs/SideNav/OktaAura.d.ts.map +1 -0
  208. package/dist/src/labs/SideNav/OktaLogo.d.ts.map +1 -1
  209. package/dist/src/labs/SideNav/SideNav.d.ts +2 -1
  210. package/dist/src/labs/SideNav/SideNav.d.ts.map +1 -1
  211. package/dist/src/labs/SideNav/SideNavFooterContent.d.ts +1 -1
  212. package/dist/src/labs/SideNav/SideNavFooterContent.d.ts.map +1 -1
  213. package/dist/src/labs/SideNav/SideNavHeader.d.ts +12 -3
  214. package/dist/src/labs/SideNav/SideNavHeader.d.ts.map +1 -1
  215. package/dist/src/labs/SideNav/SideNavItemContent.d.ts +2 -3
  216. package/dist/src/labs/SideNav/SideNavItemContent.d.ts.map +1 -1
  217. package/dist/src/labs/SideNav/SideNavItemContentContext.d.ts +18 -0
  218. package/dist/src/labs/SideNav/SideNavItemContentContext.d.ts.map +1 -0
  219. package/dist/src/labs/SideNav/SideNavItemLinkContent.d.ts +1 -1
  220. package/dist/src/labs/SideNav/SideNavItemLinkContent.d.ts.map +1 -1
  221. package/dist/src/labs/SideNav/SideNavLogo.d.ts +15 -0
  222. package/dist/src/labs/SideNav/SideNavLogo.d.ts.map +1 -0
  223. package/dist/src/labs/SideNav/SideNavToggleButton.d.ts +38 -0
  224. package/dist/src/labs/SideNav/SideNavToggleButton.d.ts.map +1 -0
  225. package/dist/src/labs/SideNav/types.d.ts +67 -33
  226. package/dist/src/labs/SideNav/types.d.ts.map +1 -1
  227. package/dist/src/labs/TopNav/TopNav.d.ts +31 -0
  228. package/dist/src/labs/TopNav/TopNav.d.ts.map +1 -0
  229. package/dist/src/labs/TopNav/TopNavLinksList.d.ts +44 -0
  230. package/dist/src/labs/TopNav/TopNavLinksList.d.ts.map +1 -0
  231. package/dist/src/labs/TopNav/TopNavListItem.d.ts +42 -0
  232. package/dist/src/labs/TopNav/TopNavListItem.d.ts.map +1 -0
  233. package/dist/src/labs/TopNav/UserProfile.d.ts +29 -0
  234. package/dist/src/labs/TopNav/UserProfile.d.ts.map +1 -0
  235. package/dist/src/labs/TopNav/index.d.ts +14 -0
  236. package/dist/src/labs/TopNav/index.d.ts.map +1 -0
  237. package/dist/src/labs/UiShell/UiShell.d.ts +33 -0
  238. package/dist/src/labs/UiShell/UiShell.d.ts.map +1 -0
  239. package/dist/src/labs/UiShell/UiShellContent.d.ts +47 -0
  240. package/dist/src/labs/UiShell/UiShellContent.d.ts.map +1 -0
  241. package/dist/src/labs/UiShell/bufferLatest.d.ts +31 -0
  242. package/dist/src/labs/UiShell/bufferLatest.d.ts.map +1 -0
  243. package/dist/src/labs/UiShell/createMessageBus.d.ts +24 -0
  244. package/dist/src/labs/UiShell/createMessageBus.d.ts.map +1 -0
  245. package/dist/src/labs/UiShell/createStore.d.ts +22 -0
  246. package/dist/src/labs/UiShell/createStore.d.ts.map +1 -0
  247. package/dist/src/labs/UiShell/index.d.ts +16 -0
  248. package/dist/src/labs/UiShell/index.d.ts.map +1 -0
  249. package/dist/src/labs/UiShell/renderUiShell.d.ts +45 -0
  250. package/dist/src/labs/UiShell/renderUiShell.d.ts.map +1 -0
  251. package/dist/src/labs/UiShell/useHasUiShell.d.ts +13 -0
  252. package/dist/src/labs/UiShell/useHasUiShell.d.ts.map +1 -0
  253. package/dist/src/labs/UiShell/useScrollState.d.ts +16 -0
  254. package/dist/src/labs/UiShell/useScrollState.d.ts.map +1 -0
  255. package/dist/src/labs/index.d.ts +6 -2
  256. package/dist/src/labs/index.d.ts.map +1 -1
  257. package/dist/src/properties/ts/odyssey-react-mui.d.ts +6 -0
  258. package/dist/src/properties/ts/odyssey-react-mui.d.ts.map +1 -1
  259. package/dist/src/properties/ts/odyssey-react-mui_cs.d.ts +2 -0
  260. package/dist/src/properties/ts/odyssey-react-mui_cs.d.ts.map +1 -1
  261. package/dist/src/properties/ts/odyssey-react-mui_da.d.ts +2 -0
  262. package/dist/src/properties/ts/odyssey-react-mui_da.d.ts.map +1 -1
  263. package/dist/src/properties/ts/odyssey-react-mui_de.d.ts +2 -0
  264. package/dist/src/properties/ts/odyssey-react-mui_de.d.ts.map +1 -1
  265. package/dist/src/properties/ts/odyssey-react-mui_el.d.ts +2 -0
  266. package/dist/src/properties/ts/odyssey-react-mui_el.d.ts.map +1 -1
  267. package/dist/src/properties/ts/odyssey-react-mui_es.d.ts +2 -0
  268. package/dist/src/properties/ts/odyssey-react-mui_es.d.ts.map +1 -1
  269. package/dist/src/properties/ts/odyssey-react-mui_fi.d.ts +2 -0
  270. package/dist/src/properties/ts/odyssey-react-mui_fi.d.ts.map +1 -1
  271. package/dist/src/properties/ts/odyssey-react-mui_fr.d.ts +2 -0
  272. package/dist/src/properties/ts/odyssey-react-mui_fr.d.ts.map +1 -1
  273. package/dist/src/properties/ts/odyssey-react-mui_ht.d.ts +2 -0
  274. package/dist/src/properties/ts/odyssey-react-mui_ht.d.ts.map +1 -1
  275. package/dist/src/properties/ts/odyssey-react-mui_hu.d.ts +2 -0
  276. package/dist/src/properties/ts/odyssey-react-mui_hu.d.ts.map +1 -1
  277. package/dist/src/properties/ts/odyssey-react-mui_id.d.ts +2 -0
  278. package/dist/src/properties/ts/odyssey-react-mui_id.d.ts.map +1 -1
  279. package/dist/src/properties/ts/odyssey-react-mui_it.d.ts +2 -0
  280. package/dist/src/properties/ts/odyssey-react-mui_it.d.ts.map +1 -1
  281. package/dist/src/properties/ts/odyssey-react-mui_ja.d.ts +2 -0
  282. package/dist/src/properties/ts/odyssey-react-mui_ja.d.ts.map +1 -1
  283. package/dist/src/properties/ts/odyssey-react-mui_ko.d.ts +2 -0
  284. package/dist/src/properties/ts/odyssey-react-mui_ko.d.ts.map +1 -1
  285. package/dist/src/properties/ts/odyssey-react-mui_ms.d.ts +2 -0
  286. package/dist/src/properties/ts/odyssey-react-mui_ms.d.ts.map +1 -1
  287. package/dist/src/properties/ts/odyssey-react-mui_nb.d.ts +2 -0
  288. package/dist/src/properties/ts/odyssey-react-mui_nb.d.ts.map +1 -1
  289. package/dist/src/properties/ts/odyssey-react-mui_nl_NL.d.ts +2 -0
  290. package/dist/src/properties/ts/odyssey-react-mui_nl_NL.d.ts.map +1 -1
  291. package/dist/src/properties/ts/odyssey-react-mui_pl.d.ts +2 -0
  292. package/dist/src/properties/ts/odyssey-react-mui_pl.d.ts.map +1 -1
  293. package/dist/src/properties/ts/odyssey-react-mui_pt_BR.d.ts +2 -0
  294. package/dist/src/properties/ts/odyssey-react-mui_pt_BR.d.ts.map +1 -1
  295. package/dist/src/properties/ts/odyssey-react-mui_ro.d.ts +2 -0
  296. package/dist/src/properties/ts/odyssey-react-mui_ro.d.ts.map +1 -1
  297. package/dist/src/properties/ts/odyssey-react-mui_ru.d.ts +2 -0
  298. package/dist/src/properties/ts/odyssey-react-mui_ru.d.ts.map +1 -1
  299. package/dist/src/properties/ts/odyssey-react-mui_sv.d.ts +2 -0
  300. package/dist/src/properties/ts/odyssey-react-mui_sv.d.ts.map +1 -1
  301. package/dist/src/properties/ts/odyssey-react-mui_th.d.ts +2 -0
  302. package/dist/src/properties/ts/odyssey-react-mui_th.d.ts.map +1 -1
  303. package/dist/src/properties/ts/odyssey-react-mui_tr.d.ts +2 -0
  304. package/dist/src/properties/ts/odyssey-react-mui_tr.d.ts.map +1 -1
  305. package/dist/src/properties/ts/odyssey-react-mui_uk.d.ts +2 -0
  306. package/dist/src/properties/ts/odyssey-react-mui_uk.d.ts.map +1 -1
  307. package/dist/src/properties/ts/odyssey-react-mui_vi.d.ts +2 -0
  308. package/dist/src/properties/ts/odyssey-react-mui_vi.d.ts.map +1 -1
  309. package/dist/src/properties/ts/odyssey-react-mui_zh_CN.d.ts +2 -0
  310. package/dist/src/properties/ts/odyssey-react-mui_zh_CN.d.ts.map +1 -1
  311. package/dist/src/properties/ts/odyssey-react-mui_zh_TW.d.ts +2 -0
  312. package/dist/src/properties/ts/odyssey-react-mui_zh_TW.d.ts.map +1 -1
  313. package/dist/src/test-selectors/querySelector.d.ts +2 -2
  314. package/dist/src/theme/components.d.ts +3 -1
  315. package/dist/src/theme/components.d.ts.map +1 -1
  316. package/dist/src/theme/createOdysseyMuiTheme.d.ts +2 -1
  317. package/dist/src/theme/createOdysseyMuiTheme.d.ts.map +1 -1
  318. package/dist/src/useAutocomplete.d.ts +29 -0
  319. package/dist/src/useAutocomplete.d.ts.map +1 -0
  320. package/dist/src/useContrastMode.d.ts +46 -0
  321. package/dist/src/useContrastMode.d.ts.map +1 -0
  322. package/dist/src/web-component/index.d.ts +14 -0
  323. package/dist/src/web-component/index.d.ts.map +1 -0
  324. package/dist/src/web-component/renderReactInWebComponent.d.ts +76 -0
  325. package/dist/src/web-component/renderReactInWebComponent.d.ts.map +1 -0
  326. package/dist/src/web-component/shadow-dom.d.ts +23 -0
  327. package/dist/src/web-component/shadow-dom.d.ts.map +1 -0
  328. package/dist/test-selectors/querySelector.js.map +1 -1
  329. package/dist/theme/components.js +36 -32
  330. package/dist/theme/components.js.map +1 -1
  331. package/dist/theme/createOdysseyMuiTheme.js +3 -2
  332. package/dist/theme/createOdysseyMuiTheme.js.map +1 -1
  333. package/dist/tsconfig.production.tsbuildinfo +1 -1
  334. package/dist/tsconfig.tsbuildinfo +1 -1
  335. package/dist/useAutocomplete.js +105 -0
  336. package/dist/useAutocomplete.js.map +1 -0
  337. package/dist/useContrastMode.js +93 -0
  338. package/dist/useContrastMode.js.map +1 -0
  339. package/dist/web-component/index.js +14 -0
  340. package/dist/web-component/index.js.map +1 -0
  341. package/dist/web-component/renderReactInWebComponent.js +72 -0
  342. package/dist/web-component/renderReactInWebComponent.js.map +1 -0
  343. package/dist/{createShadowDomElements.js → web-component/shadow-dom.js} +10 -12
  344. package/dist/web-component/shadow-dom.js.map +1 -0
  345. package/jest.config.cjs +1 -1
  346. package/jest.setup.js +0 -3
  347. package/package.json +4 -3
  348. package/src/Autocomplete.tsx +40 -330
  349. package/src/Box.tsx +4 -2
  350. package/src/Card.tsx +1 -0
  351. package/src/OdysseyDesignTokensContext.tsx +6 -3
  352. package/src/OdysseyProvider.tsx +13 -8
  353. package/src/OdysseyThemeProvider.test.tsx +209 -0
  354. package/src/OdysseyThemeProvider.tsx +42 -26
  355. package/src/Pagination/Pagination.test.tsx +305 -0
  356. package/src/Pagination/Pagination.tsx +86 -38
  357. package/src/Surface.tsx +2 -1
  358. package/src/Tag.tsx +64 -39
  359. package/src/createUniqueAlphabeticalId.test.ts +1 -1
  360. package/src/createUniqueId.test.ts +1 -1
  361. package/src/index.ts +6 -7
  362. package/src/labs/AppTile.tsx +169 -40
  363. package/src/labs/DataView/CardLayoutContent.tsx +12 -14
  364. package/src/labs/DataView/DataCard.tsx +137 -69
  365. package/src/labs/DataView/DataView.test.tsx +6 -4
  366. package/src/labs/DataView/TableLayoutContent.tsx +6 -2
  367. package/src/labs/DataView/componentTypes.ts +1 -1
  368. package/src/labs/DataView/index.tsx +1 -0
  369. package/src/labs/OdysseyPickers/ComposablePicker.test.tsx +29 -0
  370. package/src/labs/OdysseyPickers/ComposablePicker.tsx +188 -0
  371. package/src/labs/OdysseyPickers/Picker.tsx +381 -0
  372. package/src/labs/OdysseyPickers/PickerVirtualizationListBox.tsx +191 -0
  373. package/src/labs/OdysseyPickers/PickerWithOptionAdornment.tsx +429 -0
  374. package/src/labs/OdysseyPickers/index.ts +15 -0
  375. package/src/labs/PageTemplate.tsx +18 -10
  376. package/src/labs/SideNav/CollapseIcon.tsx +14 -28
  377. package/src/labs/SideNav/HandleIcon.tsx +35 -0
  378. package/src/labs/{NavAccordion.tsx → SideNav/NavAccordion.tsx} +48 -8
  379. package/src/labs/SideNav/OktaAura.tsx +35 -0
  380. package/src/labs/SideNav/OktaLogo.tsx +5 -10
  381. package/src/labs/SideNav/SideNav.test.tsx +323 -0
  382. package/src/labs/SideNav/SideNav.tsx +291 -204
  383. package/src/labs/SideNav/SideNavFooterContent.tsx +36 -28
  384. package/src/labs/SideNav/SideNavHeader.tsx +62 -45
  385. package/src/labs/SideNav/SideNavItemContent.tsx +142 -62
  386. package/src/labs/SideNav/SideNavItemContentContext.tsx +27 -0
  387. package/src/labs/SideNav/SideNavItemLinkContent.tsx +17 -14
  388. package/src/labs/SideNav/SideNavLogo.tsx +41 -0
  389. package/src/labs/SideNav/SideNavToggleButton.tsx +249 -0
  390. package/src/labs/SideNav/types.ts +72 -33
  391. package/src/labs/TopNav/TopNav.tsx +95 -0
  392. package/src/labs/TopNav/TopNavLinksList.tsx +68 -0
  393. package/src/labs/TopNav/TopNavListItem.tsx +209 -0
  394. package/src/labs/TopNav/UserProfile.tsx +79 -0
  395. package/src/labs/TopNav/index.ts +14 -0
  396. package/src/labs/UiShell/UiShell.test.tsx +284 -0
  397. package/src/labs/UiShell/UiShell.tsx +109 -0
  398. package/src/labs/UiShell/UiShellContent.tsx +170 -0
  399. package/src/labs/UiShell/bufferLatest.test.ts +79 -0
  400. package/src/labs/UiShell/bufferLatest.ts +64 -0
  401. package/src/labs/UiShell/createMessageBus.test.ts +115 -0
  402. package/src/labs/UiShell/createMessageBus.ts +53 -0
  403. package/src/labs/UiShell/createStore.test.ts +103 -0
  404. package/src/labs/UiShell/createStore.ts +37 -0
  405. package/src/labs/UiShell/index.ts +17 -0
  406. package/src/labs/UiShell/renderUiShell.test.tsx +197 -0
  407. package/src/labs/UiShell/renderUiShell.tsx +132 -0
  408. package/src/labs/UiShell/useHasUiShell.ts +25 -0
  409. package/src/labs/UiShell/useScrollState.ts +56 -0
  410. package/src/labs/index.ts +10 -3
  411. package/src/properties/odyssey-react-mui.properties +7 -0
  412. package/src/properties/translations/odyssey-react-mui_cs.properties +2 -1
  413. package/src/properties/translations/odyssey-react-mui_da.properties +2 -1
  414. package/src/properties/translations/odyssey-react-mui_de.properties +2 -1
  415. package/src/properties/translations/odyssey-react-mui_el.properties +2 -1
  416. package/src/properties/translations/odyssey-react-mui_es.properties +2 -1
  417. package/src/properties/translations/odyssey-react-mui_fi.properties +2 -1
  418. package/src/properties/translations/odyssey-react-mui_fr.properties +4 -3
  419. package/src/properties/translations/odyssey-react-mui_ht.properties +2 -1
  420. package/src/properties/translations/odyssey-react-mui_hu.properties +2 -1
  421. package/src/properties/translations/odyssey-react-mui_id.properties +2 -1
  422. package/src/properties/translations/odyssey-react-mui_it.properties +3 -2
  423. package/src/properties/translations/odyssey-react-mui_ja.properties +8 -7
  424. package/src/properties/translations/odyssey-react-mui_ko.properties +2 -1
  425. package/src/properties/translations/odyssey-react-mui_ms.properties +2 -1
  426. package/src/properties/translations/odyssey-react-mui_nb.properties +2 -1
  427. package/src/properties/translations/odyssey-react-mui_nl_NL.properties +2 -1
  428. package/src/properties/translations/odyssey-react-mui_pl.properties +2 -1
  429. package/src/properties/translations/odyssey-react-mui_pt_BR.properties +2 -1
  430. package/src/properties/translations/odyssey-react-mui_ro.properties +2 -1
  431. package/src/properties/translations/odyssey-react-mui_ru.properties +2 -1
  432. package/src/properties/translations/odyssey-react-mui_sv.properties +2 -1
  433. package/src/properties/translations/odyssey-react-mui_th.properties +2 -1
  434. package/src/properties/translations/odyssey-react-mui_tr.properties +3 -2
  435. package/src/properties/translations/odyssey-react-mui_uk.properties +2 -1
  436. package/src/properties/translations/odyssey-react-mui_vi.properties +2 -1
  437. package/src/properties/translations/odyssey-react-mui_zh_CN.properties +2 -1
  438. package/src/properties/translations/odyssey-react-mui_zh_TW.properties +2 -1
  439. package/src/properties/ts/odyssey-react-mui.ts +1 -1
  440. package/src/properties/ts/odyssey-react-mui_cs.ts +1 -1
  441. package/src/properties/ts/odyssey-react-mui_da.ts +1 -1
  442. package/src/properties/ts/odyssey-react-mui_de.ts +1 -1
  443. package/src/properties/ts/odyssey-react-mui_el.ts +1 -1
  444. package/src/properties/ts/odyssey-react-mui_es.ts +1 -1
  445. package/src/properties/ts/odyssey-react-mui_fi.ts +1 -1
  446. package/src/properties/ts/odyssey-react-mui_fr.ts +1 -1
  447. package/src/properties/ts/odyssey-react-mui_ht.ts +1 -1
  448. package/src/properties/ts/odyssey-react-mui_hu.ts +1 -1
  449. package/src/properties/ts/odyssey-react-mui_id.ts +1 -1
  450. package/src/properties/ts/odyssey-react-mui_it.ts +1 -1
  451. package/src/properties/ts/odyssey-react-mui_ja.ts +1 -1
  452. package/src/properties/ts/odyssey-react-mui_ko.ts +1 -1
  453. package/src/properties/ts/odyssey-react-mui_ms.ts +1 -1
  454. package/src/properties/ts/odyssey-react-mui_nb.ts +1 -1
  455. package/src/properties/ts/odyssey-react-mui_nl_NL.ts +1 -1
  456. package/src/properties/ts/odyssey-react-mui_pl.ts +1 -1
  457. package/src/properties/ts/odyssey-react-mui_pt_BR.ts +1 -1
  458. package/src/properties/ts/odyssey-react-mui_ro.ts +1 -1
  459. package/src/properties/ts/odyssey-react-mui_ru.ts +1 -1
  460. package/src/properties/ts/odyssey-react-mui_sv.ts +1 -1
  461. package/src/properties/ts/odyssey-react-mui_th.ts +1 -1
  462. package/src/properties/ts/odyssey-react-mui_tr.ts +1 -1
  463. package/src/properties/ts/odyssey-react-mui_uk.ts +1 -1
  464. package/src/properties/ts/odyssey-react-mui_vi.ts +1 -1
  465. package/src/properties/ts/odyssey-react-mui_zh_CN.ts +1 -1
  466. package/src/properties/ts/odyssey-react-mui_zh_TW.ts +1 -1
  467. package/src/test-selectors/querySelector.ts +1 -1
  468. package/src/theme/components.tsx +50 -33
  469. package/src/theme/createOdysseyMuiTheme.ts +4 -3
  470. package/src/theme/useContrastMode.test.tsx +503 -0
  471. package/src/useAutocomplete.tsx +183 -0
  472. package/src/useContrastMode.tsx +149 -0
  473. package/src/web-component/index.ts +14 -0
  474. package/src/web-component/renderReactInWebComponent.test.tsx +156 -0
  475. package/src/web-component/renderReactInWebComponent.ts +153 -0
  476. package/src/web-component/shadow-dom.test.ts +24 -0
  477. package/src/{createShadowDomElements.ts → web-component/shadow-dom.ts} +15 -14
  478. package/dist/ContrastModeProvider.js +0 -86
  479. package/dist/ContrastModeProvider.js.map +0 -1
  480. package/dist/createShadowDomElements.js.map +0 -1
  481. package/dist/labs/NavAccordion.js.map +0 -1
  482. package/dist/labs/TopNav.js +0 -281
  483. package/dist/labs/TopNav.js.map +0 -1
  484. package/dist/src/ContrastModeProvider.d.ts +0 -34
  485. package/dist/src/ContrastModeProvider.d.ts.map +0 -1
  486. package/dist/src/createShadowDomElements.d.ts.map +0 -1
  487. package/dist/src/labs/NavAccordion.d.ts.map +0 -1
  488. package/dist/src/labs/TopNav.d.ts +0 -78
  489. package/dist/src/labs/TopNav.d.ts.map +0 -1
  490. package/src/ContrastModeProvider.tsx +0 -131
  491. package/src/labs/TopNav.tsx +0 -396
@@ -21,6 +21,7 @@ import {
21
21
  import {
22
22
  Card as MuiCard,
23
23
  CardActionArea as MuiCardActionArea,
24
+ Skeleton as MuiSkeleton,
24
25
  } from "@mui/material";
25
26
  import styled from "@emotion/styled";
26
27
 
@@ -33,6 +34,7 @@ import { Heading5, Paragraph, Subordinate, Support } from ".././Typography";
33
34
  import { Box } from ".././Box";
34
35
 
35
36
  export const APP_TILE_IMAGE_HEIGHT = "64px";
37
+ export const APP_TILE_PLACEHOLDER_IMAGE_WIDTH = "64px";
36
38
 
37
39
  export type AppTileProps = {
38
40
  // Text that appears in the upper right corner of the tile
@@ -43,6 +45,8 @@ export type AppTileProps = {
43
45
  description?: string;
44
46
  // An image or icon at the top of the tile
45
47
  image?: ReactElement;
48
+ // If true, the AppTile is loading
49
+ isLoading?: boolean;
46
50
  // Event handler for when the user clicks the tile
47
51
  onClick: MouseEventHandler;
48
52
  // An 'eyebrow' of text above the title
@@ -76,18 +80,29 @@ export type AppTileProps = {
76
80
  }
77
81
  );
78
82
 
83
+ type LoadingTileProps = {
84
+ children: boolean;
85
+ description: boolean;
86
+ hasTopSection: boolean;
87
+ image: boolean;
88
+ overline: boolean;
89
+ title: boolean;
90
+ };
91
+
79
92
  const ImageContainer = styled("div", {
80
- shouldForwardProp: (prop) =>
81
- prop !== "odysseyDesignTokens" && prop !== "hasAction",
93
+ shouldForwardProp: (prop) => prop !== "odysseyDesignTokens",
82
94
  })<{
83
95
  odysseyDesignTokens: DesignTokens;
84
- hasAction: boolean;
85
- }>(({ odysseyDesignTokens, hasAction }) => ({
96
+ }>(({ odysseyDesignTokens }) => ({
86
97
  display: "flex",
87
98
  alignItems: "flex-start",
88
99
  maxHeight: APP_TILE_IMAGE_HEIGHT,
89
100
  marginBlockEnd: odysseyDesignTokens.Spacing5,
90
- paddingRight: hasAction ? odysseyDesignTokens.Spacing5 : 0,
101
+
102
+ ["img"]: {
103
+ height: APP_TILE_IMAGE_HEIGHT,
104
+ maxWidth: "100%",
105
+ },
91
106
  }));
92
107
 
93
108
  const ActionContainer = styled("div", {
@@ -96,16 +111,27 @@ const ActionContainer = styled("div", {
96
111
  alignItems: "center",
97
112
  display: "flex",
98
113
  minHeight: odysseyDesignTokens.Spacing6,
99
- gap: odysseyDesignTokens.Spacing1,
100
114
  position: "absolute",
101
- right: odysseyDesignTokens.Spacing3,
102
- top: odysseyDesignTokens.Spacing3,
103
- }));
115
+ right: odysseyDesignTokens.Spacing2,
116
+ top: odysseyDesignTokens.Spacing2,
117
+ gap: odysseyDesignTokens.Spacing1,
118
+ zIndex: 1,
104
119
 
105
- const ContentContainer = styled("div")(() => ({
106
- display: "flex",
120
+ ["& > .MuiTypography-root:last-child"]: {
121
+ marginInlineEnd: odysseyDesignTokens.Spacing2,
122
+ },
107
123
  }));
108
124
 
125
+ const ContentContainer = styled("div", {
126
+ shouldForwardProp: (prop) =>
127
+ prop !== "odysseyDesignTokens" && prop !== "hasTopSection",
128
+ })<{ odysseyDesignTokens: DesignTokens; hasTopSection: boolean }>(
129
+ ({ odysseyDesignTokens, hasTopSection }) => ({
130
+ alignItems: "flex-start",
131
+ paddingBlockStart: hasTopSection ? odysseyDesignTokens.Spacing4 : 0,
132
+ }),
133
+ );
134
+
109
135
  const ChildrenContainer = styled("div", {
110
136
  shouldForwardProp: (prop) => prop !== "odysseyDesignTokens",
111
137
  })<{ odysseyDesignTokens: DesignTokens }>(({ odysseyDesignTokens }) => ({
@@ -114,6 +140,98 @@ const ChildrenContainer = styled("div", {
114
140
  },
115
141
  }));
116
142
 
143
+ const LoadingTile = ({
144
+ image,
145
+ overline,
146
+ title,
147
+ description,
148
+ children,
149
+ hasTopSection,
150
+ }: LoadingTileProps) => {
151
+ const odysseyDesignTokens = useOdysseyDesignTokens();
152
+
153
+ return (
154
+ <MuiCard className="isClickable">
155
+ <ContentContainer
156
+ odysseyDesignTokens={odysseyDesignTokens}
157
+ hasTopSection={hasTopSection}
158
+ >
159
+ {hasTopSection && (
160
+ <ActionContainer odysseyDesignTokens={odysseyDesignTokens}>
161
+ <Subordinate>
162
+ <MuiSkeleton width={50} />
163
+ </Subordinate>
164
+ </ActionContainer>
165
+ )}
166
+ <Box sx={{ width: "100%" }}>
167
+ {image && (
168
+ <ImageContainer odysseyDesignTokens={odysseyDesignTokens}>
169
+ <MuiSkeleton
170
+ height={APP_TILE_IMAGE_HEIGHT}
171
+ width={APP_TILE_PLACEHOLDER_IMAGE_WIDTH}
172
+ variant="rectangular"
173
+ />
174
+ </ImageContainer>
175
+ )}
176
+
177
+ {overline && (
178
+ <Support>
179
+ <MuiSkeleton />
180
+ </Support>
181
+ )}
182
+ {title && (
183
+ <Heading5>
184
+ <MuiSkeleton />
185
+ </Heading5>
186
+ )}
187
+ {description && (
188
+ <Paragraph>
189
+ <MuiSkeleton />
190
+ </Paragraph>
191
+ )}
192
+ {children && (
193
+ <ChildrenContainer odysseyDesignTokens={odysseyDesignTokens}>
194
+ <MuiSkeleton
195
+ variant="rounded"
196
+ width="100%"
197
+ height={odysseyDesignTokens.Spacing6}
198
+ />
199
+ </ChildrenContainer>
200
+ )}
201
+ </Box>
202
+ </ContentContainer>
203
+ </MuiCard>
204
+ );
205
+ };
206
+
207
+ const StyledMuiCard = styled(MuiCard, {
208
+ shouldForwardProp: (prop) => prop !== "odysseyDesignTokens",
209
+ })<{ odysseyDesignTokens: DesignTokens }>(({ odysseyDesignTokens }) => ({
210
+ position: "relative",
211
+ boxShadow: "none",
212
+ overflow: "unset",
213
+
214
+ "&::after": {
215
+ position: "absolute",
216
+ top: 0,
217
+ left: 0,
218
+ width: "100%",
219
+ height: "100%",
220
+ opacity: 0,
221
+ boxShadow: odysseyDesignTokens.DepthMedium,
222
+ borderRadius: odysseyDesignTokens.BorderRadiusOuter,
223
+ transition: `opacity ${odysseyDesignTokens.TransitionDurationMain}`,
224
+ zIndex: "-1",
225
+ content: '""',
226
+ },
227
+
228
+ "&:hover": {
229
+ "&::after": {
230
+ opacity: 1,
231
+ },
232
+ },
233
+ }));
234
+
117
235
  const AppTile = ({
118
236
  actionAriaControls,
119
237
  actionAriaHasPopup,
@@ -124,6 +242,7 @@ const AppTile = ({
124
242
  children,
125
243
  description,
126
244
  image,
245
+ isLoading,
127
246
  onActionClick,
128
247
  onClick,
129
248
  overline,
@@ -133,34 +252,33 @@ const AppTile = ({
133
252
 
134
253
  const tileContent = useMemo(
135
254
  () => (
136
- <ContentContainer>
137
- <Box>
138
- {image && (
139
- <ImageContainer
140
- odysseyDesignTokens={odysseyDesignTokens}
141
- hasAction={Boolean(onActionClick)}
142
- >
143
- {image}
144
- </ImageContainer>
145
- )}
255
+ <ContentContainer
256
+ odysseyDesignTokens={odysseyDesignTokens}
257
+ hasTopSection={typeof onActionClick === "function" || !!auxiliaryText}
258
+ >
259
+ {image && (
260
+ <ImageContainer odysseyDesignTokens={odysseyDesignTokens}>
261
+ {image}
262
+ </ImageContainer>
263
+ )}
146
264
 
147
- {overline && <Support component="div">{overline}</Support>}
148
- {title && <Heading5 component="div">{title}</Heading5>}
149
- {description && (
150
- <Paragraph color="textSecondary">{description}</Paragraph>
151
- )}
152
- {children && (
153
- <ChildrenContainer odysseyDesignTokens={odysseyDesignTokens}>
154
- {children}
155
- </ChildrenContainer>
156
- )}
157
- </Box>
265
+ {overline && <Support component="div">{overline}</Support>}
266
+ {title && <Heading5 component="div">{title}</Heading5>}
267
+ {description && (
268
+ <Paragraph color="textSecondary">{description}</Paragraph>
269
+ )}
270
+ {children && (
271
+ <ChildrenContainer odysseyDesignTokens={odysseyDesignTokens}>
272
+ {children}
273
+ </ChildrenContainer>
274
+ )}
158
275
  </ContentContainer>
159
276
  ),
160
277
  [
161
278
  image,
162
- odysseyDesignTokens,
279
+ auxiliaryText,
163
280
  onActionClick,
281
+ odysseyDesignTokens,
164
282
  overline,
165
283
  title,
166
284
  description,
@@ -168,14 +286,23 @@ const AppTile = ({
168
286
  ],
169
287
  );
170
288
 
171
- return (
172
- <MuiCard className="isClickable">
173
- <MuiCardActionArea onClick={onClick}>{tileContent}</MuiCardActionArea>
174
-
289
+ return isLoading ? (
290
+ <LoadingTile
291
+ image={Boolean(image)}
292
+ overline={Boolean(overline)}
293
+ title={Boolean(title)}
294
+ description={Boolean(description)}
295
+ children={Boolean(children)}
296
+ hasTopSection={typeof onActionClick === "function" || !!auxiliaryText}
297
+ />
298
+ ) : (
299
+ <StyledMuiCard odysseyDesignTokens={odysseyDesignTokens}>
175
300
  {(onActionClick || auxiliaryText) && (
176
301
  <ActionContainer odysseyDesignTokens={odysseyDesignTokens}>
177
- {auxiliaryText && <Subordinate>{auxiliaryText}</Subordinate>}
178
- {onActionClick && (
302
+ {auxiliaryText && !isLoading && (
303
+ <Subordinate>{auxiliaryText}</Subordinate>
304
+ )}
305
+ {onActionClick && !isLoading && (
179
306
  <Button
180
307
  endIcon={actionIcon}
181
308
  ariaLabel={actionLabel}
@@ -190,7 +317,9 @@ const AppTile = ({
190
317
  )}
191
318
  </ActionContainer>
192
319
  )}
193
- </MuiCard>
320
+
321
+ <MuiCardActionArea onClick={onClick}>{tileContent}</MuiCardActionArea>
322
+ </StyledMuiCard>
194
323
  );
195
324
  };
196
325
 
@@ -29,7 +29,6 @@ import {
29
29
  import { RowActions } from "./RowActions";
30
30
  import { DataCard } from "./DataCard";
31
31
  import { CardLayout, CardLayoutProps, UniversalProps } from "./componentTypes";
32
- import { DetailPanel } from "./DetailPanel";
33
32
 
34
33
  export type CardLayoutContentProps = {
35
34
  currentLayout: CardLayout;
@@ -100,7 +99,7 @@ const StackContainer = styled("div", {
100
99
  }>(({ odysseyDesignTokens, currentLayout, maxGridColumns }) => ({
101
100
  display: currentLayout === "list" ? "flex" : "grid",
102
101
  flexDirection: "column",
103
- gap: odysseyDesignTokens.Spacing5,
102
+ columnGap: odysseyDesignTokens.Spacing5,
104
103
 
105
104
  ...(currentLayout === "grid" && {
106
105
  [`@media (max-width: 720px)`]: {
@@ -187,8 +186,14 @@ const CardLayoutContent = ({
187
186
  ) : (
188
187
  <>
189
188
  {data.map((row: MRT_RowData, index: number) => {
190
- const { overline, title, description, image, children } =
191
- cardLayoutOptions.itemProps(row);
189
+ const {
190
+ overline,
191
+ title,
192
+ description,
193
+ image,
194
+ children,
195
+ variant,
196
+ } = cardLayoutOptions.itemProps(row);
192
197
  const currentIndex =
193
198
  index + (pagination.pageIndex - 1) * pagination.pageSize;
194
199
 
@@ -209,16 +214,8 @@ const CardLayoutContent = ({
209
214
  }
210
215
  children={children}
211
216
  description={description}
212
- detailPanel={
213
- cardLayoutOptions.renderDetailPanel ? (
214
- <DetailPanel
215
- row={row}
216
- renderDetailPanel={
217
- cardLayoutOptions.renderDetailPanel
218
- }
219
- />
220
- ) : undefined
221
- }
217
+ renderDetailPanel={cardLayoutOptions.renderDetailPanel}
218
+ row={row}
222
219
  image={image}
223
220
  key={row.id}
224
221
  menuButtonChildren={
@@ -242,6 +239,7 @@ const CardLayoutContent = ({
242
239
  }
243
240
  overline={overline}
244
241
  title={title}
242
+ variant={variant}
245
243
  />
246
244
  );
247
245
  })}
@@ -42,16 +42,23 @@ import {
42
42
  ChevronUpIcon,
43
43
  MoreIcon,
44
44
  } from "../../icons.generated";
45
+ import { CardLayoutProps } from "./componentTypes";
46
+ import { MRT_RowData } from "material-react-table";
45
47
 
46
- export const CARD_IMAGE_HEIGHT = "64px";
48
+ export const CARD_IMAGE_SIZE = "64px";
49
+ export const CARD_IMAGE_SIZE_COMPACT = "48px";
50
+
51
+ export const cardVariantValues = ["tile", "stack", "compact"] as const;
47
52
 
48
53
  export type DataCardProps = {
49
54
  children?: ReactNode;
50
55
  description?: string;
51
- detailPanel?: ReactNode;
52
56
  image?: ReactElement;
53
57
  overline?: string;
58
+ renderDetailPanel?: CardLayoutProps["renderDetailPanel"];
59
+ row: MRT_RowData;
54
60
  title?: string;
61
+ variant?: (typeof cardVariantValues)[number];
55
62
  } & (
56
63
  | {
57
64
  Accessory?: never;
@@ -68,45 +75,76 @@ export type DataCardProps = {
68
75
  );
69
76
 
70
77
  const AccessoryContainer = styled("div", {
71
- shouldForwardProp: (prop) => prop !== "odysseyDesignTokens",
78
+ shouldForwardProp: (prop) =>
79
+ prop !== "odysseyDesignTokens" && prop !== "variant",
72
80
  })<{
73
81
  odysseyDesignTokens: DesignTokens;
74
- }>(({ odysseyDesignTokens }) => ({
82
+ variant: (typeof cardVariantValues)[number];
83
+ }>(({ odysseyDesignTokens, variant }) => ({
75
84
  display: "flex",
76
- flexDirection: "column",
85
+ flexDirection: variant === "compact" ? "row" : "column",
77
86
  alignItems: "center",
78
87
  gap: odysseyDesignTokens.Spacing2,
88
+ height: variant === "compact" ? CARD_IMAGE_SIZE_COMPACT : "auto",
79
89
  }));
80
90
 
81
91
  const ImageContainer = styled("div", {
82
92
  shouldForwardProp: (prop) =>
83
- prop !== "odysseyDesignTokens" && prop !== "hasMenuButtonChildren",
93
+ prop !== "odysseyDesignTokens" &&
94
+ prop !== "hasMenuButtonChildren" &&
95
+ prop !== "variant",
84
96
  })<{
85
97
  odysseyDesignTokens: DesignTokens;
86
98
  hasMenuButtonChildren: boolean;
87
- }>(({ odysseyDesignTokens, hasMenuButtonChildren }) => ({
99
+ variant: (typeof cardVariantValues)[number];
100
+ }>(({ odysseyDesignTokens, hasMenuButtonChildren, variant }) => ({
88
101
  display: "flex",
89
102
  alignItems: "flex-start",
90
- maxHeight: `${CARD_IMAGE_HEIGHT}`,
91
- marginBlockEnd: odysseyDesignTokens.Spacing5,
103
+ height: variant === "compact" ? CARD_IMAGE_SIZE_COMPACT : CARD_IMAGE_SIZE,
104
+ maxHeight: variant === "compact" ? CARD_IMAGE_SIZE_COMPACT : CARD_IMAGE_SIZE,
105
+ marginBlockEnd: variant === "tile" ? odysseyDesignTokens.Spacing5 : 0,
92
106
  paddingRight: hasMenuButtonChildren ? odysseyDesignTokens.Spacing5 : 0,
93
107
  }));
94
108
 
95
109
  const MenuButtonContainer = styled("div", {
96
110
  shouldForwardProp: (prop) => prop !== "odysseyDesignTokens",
97
- })<{ odysseyDesignTokens: DesignTokens }>(({ odysseyDesignTokens }) => ({
111
+ })<{
112
+ odysseyDesignTokens: DesignTokens;
113
+ variant: (typeof cardVariantValues)[number];
114
+ }>(({ odysseyDesignTokens, variant }) => ({
98
115
  position: "absolute",
99
116
  right: odysseyDesignTokens.Spacing3,
100
117
  top: odysseyDesignTokens.Spacing3,
118
+ height: variant === "compact" ? CARD_IMAGE_SIZE_COMPACT : "auto",
119
+ display: "flex",
120
+ alignItems: "center",
101
121
  }));
102
122
 
103
- const CardContentContainer = styled("div", {
123
+ const CardInnerContainer = styled("div", {
104
124
  shouldForwardProp: (prop) => prop !== "odysseyDesignTokens",
105
125
  })<{ odysseyDesignTokens: DesignTokens }>(({ odysseyDesignTokens }) => ({
106
126
  display: "flex",
107
127
  gap: odysseyDesignTokens.Spacing3,
108
128
  }));
109
129
 
130
+ const CardImageAndContentContainer = styled("div", {
131
+ shouldForwardProp: (prop) => prop !== "variant",
132
+ })<{ variant: (typeof cardVariantValues)[number] }>(({ variant }) => ({
133
+ display: "flex",
134
+ flexDirection: variant === "tile" ? "column" : "row",
135
+ }));
136
+
137
+ const CardContent = styled("div", {
138
+ shouldForwardProp: (prop) => prop !== "odysseyDesignTokens",
139
+ })<{
140
+ odysseyDesignTokens: DesignTokens;
141
+ variant: (typeof cardVariantValues)[number];
142
+ }>(({ odysseyDesignTokens, variant }) => ({
143
+ "& > .MuiTypography-h5": {
144
+ marginBlockEnd: `${variant === "compact" ? odysseyDesignTokens.Spacing1 : odysseyDesignTokens.Spacing3} !important`,
145
+ },
146
+ }));
147
+
110
148
  const CardChildrenContainer = styled("div", {
111
149
  shouldForwardProp: (prop) => prop !== "odysseyDesignTokens",
112
150
  })<{ odysseyDesignTokens: DesignTokens }>(({ odysseyDesignTokens }) => ({
@@ -115,6 +153,9 @@ const CardChildrenContainer = styled("div", {
115
153
  },
116
154
  }));
117
155
 
156
+ const AccessoryPlaceholder = styled(MuiIconButton)(() => ({
157
+ visibility: "hidden",
158
+ }));
118
159
  const buttonProviderValue = { isFullWidth: true };
119
160
 
120
161
  const DataCard = ({
@@ -122,95 +163,118 @@ const DataCard = ({
122
163
  button,
123
164
  children,
124
165
  description,
125
- detailPanel,
126
166
  image,
127
167
  menuButtonChildren,
128
168
  onClick,
129
169
  overline,
170
+ renderDetailPanel,
171
+ row,
130
172
  title,
173
+ variant = "tile",
131
174
  }: DataCardProps) => {
132
175
  const odysseyDesignTokens = useOdysseyDesignTokens();
133
176
  const { t } = useTranslation();
134
177
 
135
178
  const [isDetailPanelOpen, setIsDetailPanelOpen] = useState<boolean>(false);
136
179
 
137
- const Accessory = useMemo(
138
- () => (
139
- <AccessoryContainer odysseyDesignTokens={odysseyDesignTokens}>
180
+ const ExpansionToggle = useMemo(() => {
181
+ return renderDetailPanel?.({ row }) ? (
182
+ <MuiTooltip
183
+ title={
184
+ isDetailPanelOpen
185
+ ? t("table.rowexpansion.collapse")
186
+ : t("table.rowexpansion.expand")
187
+ }
188
+ >
189
+ <MuiIconButton
190
+ children={isDetailPanelOpen ? <ChevronUpIcon /> : <ChevronDownIcon />}
191
+ onClick={() => setIsDetailPanelOpen(!isDetailPanelOpen)}
192
+ aria-label={
193
+ isDetailPanelOpen
194
+ ? t("table.rowexpansion.collapse")
195
+ : t("table.rowexpansion.expand")
196
+ }
197
+ />
198
+ </MuiTooltip>
199
+ ) : (
200
+ <AccessoryPlaceholder disabled>
201
+ <ChevronDownIcon />
202
+ </AccessoryPlaceholder>
203
+ );
204
+ }, [isDetailPanelOpen, renderDetailPanel, row, t]);
205
+
206
+ const Accessory = useMemo(() => {
207
+ return (
208
+ <AccessoryContainer
209
+ odysseyDesignTokens={odysseyDesignTokens}
210
+ variant={variant}
211
+ >
140
212
  {AccessoryProp}
141
- {detailPanel && (
142
- <MuiTooltip
143
- title={
144
- isDetailPanelOpen
145
- ? t("table.rowexpansion.collapse")
146
- : t("table.rowexpansion.expand")
147
- }
148
- >
149
- <MuiIconButton
150
- children={
151
- isDetailPanelOpen ? <ChevronUpIcon /> : <ChevronDownIcon />
152
- }
153
- onClick={() => setIsDetailPanelOpen(!isDetailPanelOpen)}
154
- aria-label={
155
- isDetailPanelOpen
156
- ? t("table.rowexpansion.collapse")
157
- : t("table.rowexpansion.expand")
158
- }
159
- />
160
- </MuiTooltip>
161
- )}
213
+ {renderDetailPanel && ExpansionToggle}
162
214
  </AccessoryContainer>
163
- ),
164
- [AccessoryProp, detailPanel, isDetailPanelOpen, odysseyDesignTokens, t],
165
- );
215
+ );
216
+ }, [
217
+ AccessoryProp,
218
+ ExpansionToggle,
219
+ odysseyDesignTokens,
220
+ renderDetailPanel,
221
+ variant,
222
+ ]);
166
223
 
167
224
  const cardContent = useMemo(
168
225
  () => (
169
- <CardContentContainer odysseyDesignTokens={odysseyDesignTokens}>
170
- {(AccessoryProp || detailPanel) && <Box>{Accessory}</Box>}
171
- <Box>
226
+ <CardInnerContainer odysseyDesignTokens={odysseyDesignTokens}>
227
+ {(AccessoryProp || renderDetailPanel) && <Box>{Accessory}</Box>}
228
+ <CardImageAndContentContainer variant={variant}>
172
229
  {image && (
173
230
  <ImageContainer
174
231
  odysseyDesignTokens={odysseyDesignTokens}
175
232
  hasMenuButtonChildren={Boolean(menuButtonChildren)}
233
+ variant={variant}
176
234
  >
177
235
  {image}
178
236
  </ImageContainer>
179
237
  )}
180
238
 
181
- {overline && <Support component="div">{overline}</Support>}
182
- {title && <Heading5 component="div">{title}</Heading5>}
183
- {description && (
184
- <Paragraph color="textSecondary">{description}</Paragraph>
185
- )}
239
+ <CardContent
240
+ odysseyDesignTokens={odysseyDesignTokens}
241
+ variant={variant}
242
+ >
243
+ {overline && <Support component="div">{overline}</Support>}
244
+ {title && <Heading5 component="div">{title}</Heading5>}
245
+ {description && (
246
+ <Paragraph color="textSecondary">{description}</Paragraph>
247
+ )}
186
248
 
187
- {button && (
188
- <MuiCardActions>
189
- <ButtonContext.Provider value={buttonProviderValue}>
190
- {button}
191
- </ButtonContext.Provider>
192
- </MuiCardActions>
193
- )}
249
+ {button && (
250
+ <MuiCardActions>
251
+ <ButtonContext.Provider value={buttonProviderValue}>
252
+ {button}
253
+ </ButtonContext.Provider>
254
+ </MuiCardActions>
255
+ )}
194
256
 
195
- {children && (
196
- <CardChildrenContainer odysseyDesignTokens={odysseyDesignTokens}>
197
- {children}
198
- </CardChildrenContainer>
199
- )}
257
+ {children && (
258
+ <CardChildrenContainer odysseyDesignTokens={odysseyDesignTokens}>
259
+ {children}
260
+ </CardChildrenContainer>
261
+ )}
200
262
 
201
- {detailPanel && isDetailPanelOpen && (
202
- <CardChildrenContainer odysseyDesignTokens={odysseyDesignTokens}>
203
- {detailPanel}
204
- </CardChildrenContainer>
205
- )}
206
- </Box>
207
- </CardContentContainer>
263
+ {renderDetailPanel && isDetailPanelOpen && (
264
+ <CardChildrenContainer odysseyDesignTokens={odysseyDesignTokens}>
265
+ {renderDetailPanel({ row })}
266
+ </CardChildrenContainer>
267
+ )}
268
+ </CardContent>
269
+ </CardImageAndContentContainer>
270
+ </CardInnerContainer>
208
271
  ),
209
272
  [
210
273
  odysseyDesignTokens,
211
274
  AccessoryProp,
212
- detailPanel,
275
+ renderDetailPanel,
213
276
  Accessory,
277
+ variant,
214
278
  image,
215
279
  menuButtonChildren,
216
280
  overline,
@@ -219,12 +283,13 @@ const DataCard = ({
219
283
  button,
220
284
  children,
221
285
  isDetailPanelOpen,
286
+ row,
222
287
  ],
223
288
  );
224
289
 
225
290
  return (
226
291
  <MuiCard
227
- className={`${onClick ? "isClickable" : ""} ${Accessory ? "hasAccessory" : ""}`}
292
+ className={`${onClick ? "isClickable" : ""} ${Accessory ? "hasAccessory" : ""} ods-card-${variant}`}
228
293
  >
229
294
  {onClick ? (
230
295
  <MuiCardActionArea onClick={onClick}>{cardContent}</MuiCardActionArea>
@@ -233,7 +298,10 @@ const DataCard = ({
233
298
  )}
234
299
 
235
300
  {menuButtonChildren && (
236
- <MenuButtonContainer odysseyDesignTokens={odysseyDesignTokens}>
301
+ <MenuButtonContainer
302
+ odysseyDesignTokens={odysseyDesignTokens}
303
+ variant={variant}
304
+ >
237
305
  <MenuButton
238
306
  endIcon={<MoreIcon />}
239
307
  ariaLabel={t("table.moreactions.arialabel")}