@okta/odyssey-react-mui 1.21.2 → 1.23.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 (593) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/dist/@types/i18next.d.js.map +1 -1
  3. package/dist/Autocomplete.js +106 -38
  4. package/dist/Autocomplete.js.map +1 -1
  5. package/dist/Callout.js +12 -24
  6. package/dist/Callout.js.map +1 -1
  7. package/dist/Checkbox.js +26 -11
  8. package/dist/Checkbox.js.map +1 -1
  9. package/dist/CheckboxGroup.js +14 -3
  10. package/dist/CheckboxGroup.js.map +1 -1
  11. package/dist/DataTable/DataTable.js +10 -2
  12. package/dist/DataTable/DataTable.js.map +1 -1
  13. package/dist/DataTable/useScrollIndication.js +9 -5
  14. package/dist/DataTable/useScrollIndication.js.map +1 -1
  15. package/dist/Field.js +3 -1
  16. package/dist/Field.js.map +1 -1
  17. package/dist/FileUploader/FileUploadIllustration.js.map +1 -0
  18. package/dist/FileUploader/FileUploadPreview.js.map +1 -0
  19. package/dist/{labs/FileUpload.js → FileUploader/FileUploader.js} +6 -5
  20. package/dist/FileUploader/FileUploader.js.map +1 -0
  21. package/dist/FileUploader/index.js +13 -0
  22. package/dist/FileUploader/index.js.map +1 -0
  23. package/dist/OdysseyCacheProvider.js +4 -3
  24. package/dist/OdysseyCacheProvider.js.map +1 -1
  25. package/dist/OdysseyProvider.js +10 -3
  26. package/dist/OdysseyProvider.js.map +1 -1
  27. package/dist/OdysseyThemeProvider.js +3 -2
  28. package/dist/OdysseyThemeProvider.js.map +1 -1
  29. package/dist/Radio.js +33 -6
  30. package/dist/Radio.js.map +1 -1
  31. package/dist/RadioGroup.js +17 -5
  32. package/dist/RadioGroup.js.map +1 -1
  33. package/dist/Select.js +89 -31
  34. package/dist/Select.js.map +1 -1
  35. package/dist/{labs/Switch.js → Switch.js} +77 -23
  36. package/dist/Switch.js.map +1 -0
  37. package/dist/Tabs.js +7 -9
  38. package/dist/Tabs.js.map +1 -1
  39. package/dist/Tag.js +102 -4
  40. package/dist/Tag.js.map +1 -1
  41. package/dist/TextField.js +16 -39
  42. package/dist/TextField.js.map +1 -1
  43. package/dist/Toast.js +2 -2
  44. package/dist/Toast.js.map +1 -1
  45. package/dist/ToastStack.js.map +1 -1
  46. package/dist/createShadowDomElements.js +43 -0
  47. package/dist/createShadowDomElements.js.map +1 -0
  48. package/dist/i18n.js +1 -1
  49. package/dist/i18n.js.map +1 -1
  50. package/dist/index.js +3 -2
  51. package/dist/index.js.map +1 -1
  52. package/dist/index.scss +96 -8
  53. package/dist/labs/AppTile.js +124 -0
  54. package/dist/labs/AppTile.js.map +1 -0
  55. package/dist/labs/DataView/BulkActionsMenu.js.map +1 -0
  56. package/dist/labs/{DataComponents/StackContent.js → DataView/CardLayoutContent.js} +14 -14
  57. package/dist/labs/DataView/CardLayoutContent.js.map +1 -0
  58. package/dist/labs/{DataComponents/StackCard.js → DataView/DataCard.js} +6 -6
  59. package/dist/labs/DataView/DataCard.js.map +1 -0
  60. package/dist/labs/{DataComponents → DataView}/DataTable.js +6 -2
  61. package/dist/labs/DataView/DataTable.js.map +1 -0
  62. package/dist/labs/{DataComponents → DataView}/DataView.js +79 -30
  63. package/dist/labs/DataView/DataView.js.map +1 -0
  64. package/dist/labs/DataView/DetailPanel.js.map +1 -0
  65. package/dist/labs/DataView/LayoutSwitcher.js.map +1 -0
  66. package/dist/labs/DataView/RowActions.js.map +1 -0
  67. package/dist/labs/{DataComponents/TableContent.js → DataView/TableLayoutContent.js} +34 -20
  68. package/dist/labs/DataView/TableLayoutContent.js.map +1 -0
  69. package/dist/labs/{DataComponents → DataView}/TableSettings.js +2 -2
  70. package/dist/labs/DataView/TableSettings.js.map +1 -0
  71. package/dist/labs/DataView/componentTypes.js.map +1 -0
  72. package/dist/labs/{DataComponents → DataView}/constants.js +2 -2
  73. package/dist/labs/DataView/constants.js.map +1 -0
  74. package/dist/labs/DataView/dataTypes.js.map +1 -0
  75. package/dist/labs/DataView/fetchData.js.map +1 -0
  76. package/dist/labs/{DataComponents → DataView}/index.js +0 -1
  77. package/dist/labs/DataView/index.js.map +1 -0
  78. package/dist/labs/DataView/tableConstants.js.map +1 -0
  79. package/dist/labs/DataView/useFilterConversion.js.map +1 -0
  80. package/dist/labs/DateField.js +2 -0
  81. package/dist/labs/DateField.js.map +1 -1
  82. package/dist/labs/DatePicker.js +5 -1
  83. package/dist/labs/DatePicker.js.map +1 -1
  84. package/dist/labs/SideNav/CollapseIcon.js +44 -0
  85. package/dist/labs/SideNav/CollapseIcon.js.map +1 -0
  86. package/dist/labs/SideNav/OktaLogo.js +36 -0
  87. package/dist/labs/SideNav/OktaLogo.js.map +1 -0
  88. package/dist/labs/SideNav/SideNav.js +335 -0
  89. package/dist/labs/SideNav/SideNav.js.map +1 -0
  90. package/dist/labs/SideNav/SideNavFooterContent.js +49 -0
  91. package/dist/labs/SideNav/SideNavFooterContent.js.map +1 -0
  92. package/dist/labs/SideNav/SideNavHeader.js +81 -0
  93. package/dist/labs/SideNav/SideNavHeader.js.map +1 -0
  94. package/dist/labs/SideNav/SideNavItemContent.js +157 -0
  95. package/dist/labs/SideNav/SideNavItemContent.js.map +1 -0
  96. package/dist/labs/SideNav/SideNavItemLinkContent.js +71 -0
  97. package/dist/labs/SideNav/SideNavItemLinkContent.js.map +1 -0
  98. package/dist/labs/SideNav/index.js +14 -0
  99. package/dist/labs/SideNav/index.js.map +1 -0
  100. package/dist/labs/SideNav/types.js +2 -0
  101. package/dist/labs/SideNav/types.js.map +1 -0
  102. package/dist/labs/TopNav.js +2 -1
  103. package/dist/labs/TopNav.js.map +1 -1
  104. package/dist/labs/index.js +3 -4
  105. package/dist/labs/index.js.map +1 -1
  106. package/dist/labs/useDateFieldsTranslations.js +1 -1
  107. package/dist/labs/useDateFieldsTranslations.js.map +1 -1
  108. package/dist/properties/ts/odyssey-react-mui.js +3 -1
  109. package/dist/properties/ts/odyssey-react-mui.js.map +1 -1
  110. package/dist/properties/ts/odyssey-react-mui_cs.js +17 -3
  111. package/dist/properties/ts/odyssey-react-mui_cs.js.map +1 -1
  112. package/dist/properties/ts/odyssey-react-mui_da.js +17 -3
  113. package/dist/properties/ts/odyssey-react-mui_da.js.map +1 -1
  114. package/dist/properties/ts/odyssey-react-mui_de.js +16 -2
  115. package/dist/properties/ts/odyssey-react-mui_de.js.map +1 -1
  116. package/dist/properties/ts/odyssey-react-mui_el.js +18 -4
  117. package/dist/properties/ts/odyssey-react-mui_el.js.map +1 -1
  118. package/dist/properties/ts/odyssey-react-mui_es.js +17 -3
  119. package/dist/properties/ts/odyssey-react-mui_es.js.map +1 -1
  120. package/dist/properties/ts/odyssey-react-mui_fi.js +17 -3
  121. package/dist/properties/ts/odyssey-react-mui_fi.js.map +1 -1
  122. package/dist/properties/ts/odyssey-react-mui_fr.js +17 -3
  123. package/dist/properties/ts/odyssey-react-mui_fr.js.map +1 -1
  124. package/dist/properties/ts/odyssey-react-mui_ht.js +18 -4
  125. package/dist/properties/ts/odyssey-react-mui_ht.js.map +1 -1
  126. package/dist/properties/ts/odyssey-react-mui_hu.js +17 -3
  127. package/dist/properties/ts/odyssey-react-mui_hu.js.map +1 -1
  128. package/dist/properties/ts/odyssey-react-mui_id.js +17 -3
  129. package/dist/properties/ts/odyssey-react-mui_id.js.map +1 -1
  130. package/dist/properties/ts/odyssey-react-mui_it.js +17 -3
  131. package/dist/properties/ts/odyssey-react-mui_it.js.map +1 -1
  132. package/dist/properties/ts/odyssey-react-mui_ja.js +16 -2
  133. package/dist/properties/ts/odyssey-react-mui_ja.js.map +1 -1
  134. package/dist/properties/ts/odyssey-react-mui_ko.js +16 -2
  135. package/dist/properties/ts/odyssey-react-mui_ko.js.map +1 -1
  136. package/dist/properties/ts/odyssey-react-mui_ms.js +17 -3
  137. package/dist/properties/ts/odyssey-react-mui_ms.js.map +1 -1
  138. package/dist/properties/ts/odyssey-react-mui_nb.js +17 -3
  139. package/dist/properties/ts/odyssey-react-mui_nb.js.map +1 -1
  140. package/dist/properties/ts/odyssey-react-mui_nl_NL.js +17 -3
  141. package/dist/properties/ts/odyssey-react-mui_nl_NL.js.map +1 -1
  142. package/dist/properties/ts/odyssey-react-mui_pl.js +17 -3
  143. package/dist/properties/ts/odyssey-react-mui_pl.js.map +1 -1
  144. package/dist/properties/ts/odyssey-react-mui_pt_BR.js +17 -3
  145. package/dist/properties/ts/odyssey-react-mui_pt_BR.js.map +1 -1
  146. package/dist/properties/ts/odyssey-react-mui_ro.js +17 -3
  147. package/dist/properties/ts/odyssey-react-mui_ro.js.map +1 -1
  148. package/dist/properties/ts/odyssey-react-mui_ru.js +17 -3
  149. package/dist/properties/ts/odyssey-react-mui_ru.js.map +1 -1
  150. package/dist/properties/ts/odyssey-react-mui_sv.js +17 -3
  151. package/dist/properties/ts/odyssey-react-mui_sv.js.map +1 -1
  152. package/dist/properties/ts/odyssey-react-mui_th.js +16 -2
  153. package/dist/properties/ts/odyssey-react-mui_th.js.map +1 -1
  154. package/dist/properties/ts/odyssey-react-mui_tr.js +17 -3
  155. package/dist/properties/ts/odyssey-react-mui_tr.js.map +1 -1
  156. package/dist/properties/ts/odyssey-react-mui_uk.js +17 -3
  157. package/dist/properties/ts/odyssey-react-mui_uk.js.map +1 -1
  158. package/dist/properties/ts/odyssey-react-mui_vi.js +17 -3
  159. package/dist/properties/ts/odyssey-react-mui_vi.js.map +1 -1
  160. package/dist/properties/ts/odyssey-react-mui_zh_CN.js +16 -2
  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 +16 -2
  163. package/dist/properties/ts/odyssey-react-mui_zh_TW.js.map +1 -1
  164. package/dist/src/Autocomplete.d.ts +30 -0
  165. package/dist/src/Autocomplete.d.ts.map +1 -1
  166. package/dist/src/Callout.d.ts +11 -23
  167. package/dist/src/Callout.d.ts.map +1 -1
  168. package/dist/src/Checkbox.d.ts +2 -2
  169. package/dist/src/Checkbox.d.ts.map +1 -1
  170. package/dist/src/CheckboxGroup.d.ts +3 -3
  171. package/dist/src/CheckboxGroup.d.ts.map +1 -1
  172. package/dist/src/DataTable/DataTable.d.ts +9 -1
  173. package/dist/src/DataTable/DataTable.d.ts.map +1 -1
  174. package/dist/src/DataTable/useScrollIndication.d.ts.map +1 -1
  175. package/dist/src/Field.d.ts +3 -2
  176. package/dist/src/Field.d.ts.map +1 -1
  177. package/dist/src/FileUploader/FileUploadIllustration.d.ts.map +1 -0
  178. package/dist/src/{labs → FileUploader}/FileUploadPreview.d.ts +2 -2
  179. package/dist/src/FileUploader/FileUploadPreview.d.ts.map +1 -0
  180. package/dist/src/{labs/FileUpload.d.ts → FileUploader/FileUploader.d.ts} +5 -4
  181. package/dist/src/FileUploader/FileUploader.d.ts.map +1 -0
  182. package/dist/src/FileUploader/index.d.ts +13 -0
  183. package/dist/src/FileUploader/index.d.ts.map +1 -0
  184. package/dist/src/NativeSelect.d.ts +1 -1
  185. package/dist/src/OdysseyCacheProvider.d.ts +7 -3
  186. package/dist/src/OdysseyCacheProvider.d.ts.map +1 -1
  187. package/dist/src/OdysseyProvider.d.ts +1 -1
  188. package/dist/src/OdysseyProvider.d.ts.map +1 -1
  189. package/dist/src/OdysseyThemeProvider.d.ts +3 -1
  190. package/dist/src/OdysseyThemeProvider.d.ts.map +1 -1
  191. package/dist/src/OdysseyTranslationProvider.d.ts +1 -1
  192. package/dist/src/OdysseyTranslationProvider.d.ts.map +1 -1
  193. package/dist/src/PasswordField.d.ts +1 -1
  194. package/dist/src/Radio.d.ts +6 -8
  195. package/dist/src/Radio.d.ts.map +1 -1
  196. package/dist/src/RadioGroup.d.ts +4 -5
  197. package/dist/src/RadioGroup.d.ts.map +1 -1
  198. package/dist/src/SearchField.d.ts +1 -1
  199. package/dist/src/Select.d.ts +38 -2
  200. package/dist/src/Select.d.ts.map +1 -1
  201. package/dist/src/{labs/Switch.d.ts → Switch.d.ts} +8 -4
  202. package/dist/src/Switch.d.ts.map +1 -0
  203. package/dist/src/Tabs.d.ts +6 -8
  204. package/dist/src/Tabs.d.ts.map +1 -1
  205. package/dist/src/Tag.d.ts +7 -1
  206. package/dist/src/Tag.d.ts.map +1 -1
  207. package/dist/src/TextField.d.ts +17 -40
  208. package/dist/src/TextField.d.ts.map +1 -1
  209. package/dist/src/ToastStack.d.ts +2 -2
  210. package/dist/src/ToastStack.d.ts.map +1 -1
  211. package/dist/src/{createShadowRootElement.d.ts → createShadowDomElements.d.ts} +6 -1
  212. package/dist/src/createShadowDomElements.d.ts.map +1 -0
  213. package/dist/src/i18n.d.ts +2 -2
  214. package/dist/src/i18n.d.ts.map +1 -1
  215. package/dist/src/index.d.ts +3 -2
  216. package/dist/src/index.d.ts.map +1 -1
  217. package/dist/src/labs/AppTile.d.ts +39 -0
  218. package/dist/src/labs/AppTile.d.ts.map +1 -0
  219. package/dist/src/labs/DataView/BulkActionsMenu.d.ts.map +1 -0
  220. package/dist/src/labs/{DataComponents/StackContent.d.ts → DataView/CardLayoutContent.d.ts} +7 -7
  221. package/dist/src/labs/DataView/CardLayoutContent.d.ts.map +1 -0
  222. package/dist/src/labs/{DataComponents/StackCard.d.ts → DataView/DataCard.d.ts} +4 -4
  223. package/dist/src/labs/DataView/DataCard.d.ts.map +1 -0
  224. package/dist/src/labs/DataView/DataTable.d.ts +16 -0
  225. package/dist/src/labs/DataView/DataTable.d.ts.map +1 -0
  226. package/dist/src/labs/{DataComponents → DataView}/DataView.d.ts +1 -1
  227. package/dist/src/labs/DataView/DataView.d.ts.map +1 -0
  228. package/dist/src/labs/{DataComponents → DataView}/DetailPanel.d.ts +2 -2
  229. package/dist/src/labs/DataView/DetailPanel.d.ts.map +1 -0
  230. package/dist/src/labs/DataView/LayoutSwitcher.d.ts.map +1 -0
  231. package/dist/src/labs/DataView/RowActions.d.ts.map +1 -0
  232. package/dist/src/labs/{DataComponents/TableContent.d.ts → DataView/TableLayoutContent.d.ts} +8 -7
  233. package/dist/src/labs/DataView/TableLayoutContent.d.ts.map +1 -0
  234. package/dist/src/labs/{DataComponents → DataView}/TableSettings.d.ts +3 -3
  235. package/dist/src/labs/DataView/TableSettings.d.ts.map +1 -0
  236. package/dist/src/labs/{DataComponents → DataView}/componentTypes.d.ts +21 -9
  237. package/dist/src/labs/DataView/componentTypes.d.ts.map +1 -0
  238. package/dist/src/labs/{DataComponents → DataView}/constants.d.ts +1 -1
  239. package/dist/src/labs/DataView/constants.d.ts.map +1 -0
  240. package/dist/src/labs/DataView/dataTypes.d.ts.map +1 -0
  241. package/dist/src/labs/DataView/fetchData.d.ts.map +1 -0
  242. package/dist/src/labs/{DataComponents → DataView}/index.d.ts +0 -1
  243. package/dist/src/labs/DataView/index.d.ts.map +1 -0
  244. package/dist/src/labs/DataView/tableConstants.d.ts.map +1 -0
  245. package/dist/src/labs/{DataComponents → DataView}/useFilterConversion.d.ts +2 -2
  246. package/dist/src/labs/DataView/useFilterConversion.d.ts.map +1 -0
  247. package/dist/src/labs/DateField.d.ts +2 -2
  248. package/dist/src/labs/DateField.d.ts.map +1 -1
  249. package/dist/src/labs/DatePicker.d.ts +2 -2
  250. package/dist/src/labs/DatePicker.d.ts.map +1 -1
  251. package/dist/src/labs/SideNav/CollapseIcon.d.ts +17 -0
  252. package/dist/src/labs/SideNav/CollapseIcon.d.ts.map +1 -0
  253. package/dist/src/labs/SideNav/OktaLogo.d.ts +14 -0
  254. package/dist/src/labs/SideNav/OktaLogo.d.ts.map +1 -0
  255. package/dist/src/labs/SideNav/SideNav.d.ts +16 -0
  256. package/dist/src/labs/SideNav/SideNav.d.ts.map +1 -0
  257. package/dist/{test-selectors/odysseyTestSelectors.js → src/labs/SideNav/SideNavFooterContent.d.ts} +6 -9
  258. package/dist/src/labs/SideNav/SideNavFooterContent.d.ts.map +1 -0
  259. package/dist/src/labs/SideNav/SideNavHeader.d.ts +16 -0
  260. package/dist/src/labs/SideNav/SideNavHeader.d.ts.map +1 -0
  261. package/dist/src/labs/SideNav/SideNavItemContent.d.ts +33 -0
  262. package/dist/src/labs/SideNav/SideNavItemContent.d.ts.map +1 -0
  263. package/dist/src/labs/SideNav/SideNavItemLinkContent.d.ts +16 -0
  264. package/dist/src/labs/SideNav/SideNavItemLinkContent.d.ts.map +1 -0
  265. package/dist/src/labs/SideNav/index.d.ts +14 -0
  266. package/dist/src/labs/SideNav/index.d.ts.map +1 -0
  267. package/dist/src/labs/{SideNav.d.ts → SideNav/types.d.ts} +54 -33
  268. package/dist/src/labs/SideNav/types.d.ts.map +1 -0
  269. package/dist/src/labs/TopNav.d.ts +1 -0
  270. package/dist/src/labs/TopNav.d.ts.map +1 -1
  271. package/dist/src/labs/index.d.ts +2 -3
  272. package/dist/src/labs/index.d.ts.map +1 -1
  273. package/dist/src/properties/ts/odyssey-react-mui.d.ts +2 -0
  274. package/dist/src/properties/ts/odyssey-react-mui.d.ts.map +1 -1
  275. package/dist/src/properties/ts/odyssey-react-mui_cs.d.ts +15 -1
  276. package/dist/src/properties/ts/odyssey-react-mui_cs.d.ts.map +1 -1
  277. package/dist/src/properties/ts/odyssey-react-mui_da.d.ts +15 -1
  278. package/dist/src/properties/ts/odyssey-react-mui_da.d.ts.map +1 -1
  279. package/dist/src/properties/ts/odyssey-react-mui_de.d.ts +15 -1
  280. package/dist/src/properties/ts/odyssey-react-mui_de.d.ts.map +1 -1
  281. package/dist/src/properties/ts/odyssey-react-mui_el.d.ts +15 -1
  282. package/dist/src/properties/ts/odyssey-react-mui_el.d.ts.map +1 -1
  283. package/dist/src/properties/ts/odyssey-react-mui_es.d.ts +15 -1
  284. package/dist/src/properties/ts/odyssey-react-mui_es.d.ts.map +1 -1
  285. package/dist/src/properties/ts/odyssey-react-mui_fi.d.ts +15 -1
  286. package/dist/src/properties/ts/odyssey-react-mui_fi.d.ts.map +1 -1
  287. package/dist/src/properties/ts/odyssey-react-mui_fr.d.ts +15 -1
  288. package/dist/src/properties/ts/odyssey-react-mui_fr.d.ts.map +1 -1
  289. package/dist/src/properties/ts/odyssey-react-mui_ht.d.ts +16 -2
  290. package/dist/src/properties/ts/odyssey-react-mui_ht.d.ts.map +1 -1
  291. package/dist/src/properties/ts/odyssey-react-mui_hu.d.ts +15 -1
  292. package/dist/src/properties/ts/odyssey-react-mui_hu.d.ts.map +1 -1
  293. package/dist/src/properties/ts/odyssey-react-mui_id.d.ts +15 -1
  294. package/dist/src/properties/ts/odyssey-react-mui_id.d.ts.map +1 -1
  295. package/dist/src/properties/ts/odyssey-react-mui_it.d.ts +15 -1
  296. package/dist/src/properties/ts/odyssey-react-mui_it.d.ts.map +1 -1
  297. package/dist/src/properties/ts/odyssey-react-mui_ja.d.ts +15 -1
  298. package/dist/src/properties/ts/odyssey-react-mui_ja.d.ts.map +1 -1
  299. package/dist/src/properties/ts/odyssey-react-mui_ko.d.ts +15 -1
  300. package/dist/src/properties/ts/odyssey-react-mui_ko.d.ts.map +1 -1
  301. package/dist/src/properties/ts/odyssey-react-mui_ms.d.ts +15 -1
  302. package/dist/src/properties/ts/odyssey-react-mui_ms.d.ts.map +1 -1
  303. package/dist/src/properties/ts/odyssey-react-mui_nb.d.ts +15 -1
  304. package/dist/src/properties/ts/odyssey-react-mui_nb.d.ts.map +1 -1
  305. package/dist/src/properties/ts/odyssey-react-mui_nl_NL.d.ts +15 -1
  306. package/dist/src/properties/ts/odyssey-react-mui_nl_NL.d.ts.map +1 -1
  307. package/dist/src/properties/ts/odyssey-react-mui_pl.d.ts +15 -1
  308. package/dist/src/properties/ts/odyssey-react-mui_pl.d.ts.map +1 -1
  309. package/dist/src/properties/ts/odyssey-react-mui_pt_BR.d.ts +15 -1
  310. package/dist/src/properties/ts/odyssey-react-mui_pt_BR.d.ts.map +1 -1
  311. package/dist/src/properties/ts/odyssey-react-mui_ro.d.ts +15 -1
  312. package/dist/src/properties/ts/odyssey-react-mui_ro.d.ts.map +1 -1
  313. package/dist/src/properties/ts/odyssey-react-mui_ru.d.ts +15 -1
  314. package/dist/src/properties/ts/odyssey-react-mui_ru.d.ts.map +1 -1
  315. package/dist/src/properties/ts/odyssey-react-mui_sv.d.ts +15 -1
  316. package/dist/src/properties/ts/odyssey-react-mui_sv.d.ts.map +1 -1
  317. package/dist/src/properties/ts/odyssey-react-mui_th.d.ts +15 -1
  318. package/dist/src/properties/ts/odyssey-react-mui_th.d.ts.map +1 -1
  319. package/dist/src/properties/ts/odyssey-react-mui_tr.d.ts +15 -1
  320. package/dist/src/properties/ts/odyssey-react-mui_tr.d.ts.map +1 -1
  321. package/dist/src/properties/ts/odyssey-react-mui_uk.d.ts +15 -1
  322. package/dist/src/properties/ts/odyssey-react-mui_uk.d.ts.map +1 -1
  323. package/dist/src/properties/ts/odyssey-react-mui_vi.d.ts +15 -1
  324. package/dist/src/properties/ts/odyssey-react-mui_vi.d.ts.map +1 -1
  325. package/dist/src/properties/ts/odyssey-react-mui_zh_CN.d.ts +15 -1
  326. package/dist/src/properties/ts/odyssey-react-mui_zh_CN.d.ts.map +1 -1
  327. package/dist/src/properties/ts/odyssey-react-mui_zh_TW.d.ts +15 -1
  328. package/dist/src/properties/ts/odyssey-react-mui_zh_TW.d.ts.map +1 -1
  329. package/dist/src/test-selectors/getByQuerySelector.d.ts +148 -0
  330. package/dist/src/test-selectors/getByQuerySelector.d.ts.map +1 -0
  331. package/dist/src/test-selectors/getComputedAccessibleErrorMessageText.d.ts +14 -0
  332. package/dist/src/test-selectors/getComputedAccessibleErrorMessageText.d.ts.map +1 -0
  333. package/dist/src/test-selectors/getComputedAccessibleText.d.ts +23 -0
  334. package/dist/src/test-selectors/getComputedAccessibleText.d.ts.map +1 -0
  335. package/dist/src/test-selectors/index.d.ts +2 -2
  336. package/dist/src/test-selectors/index.d.ts.map +1 -1
  337. package/{src/test-selectors/odysseyTestSelectors.ts → dist/src/test-selectors/interpolateString.d.ts} +4 -11
  338. package/dist/src/test-selectors/interpolateString.d.ts.map +1 -0
  339. package/dist/src/test-selectors/linkedHtmlSelectors.d.ts +24 -0
  340. package/dist/src/test-selectors/linkedHtmlSelectors.d.ts.map +1 -0
  341. package/dist/src/test-selectors/queryOdysseySelector.d.ts +5755 -0
  342. package/dist/src/test-selectors/queryOdysseySelector.d.ts.map +1 -0
  343. package/dist/src/test-selectors/querySelector.d.ts +59 -3613
  344. package/dist/src/test-selectors/querySelector.d.ts.map +1 -1
  345. package/dist/src/test-selectors/sanityChecks.d.ts +18 -0
  346. package/dist/src/test-selectors/sanityChecks.d.ts.map +1 -0
  347. package/dist/src/test-selectors/testSelector.d.ts +46 -0
  348. package/dist/src/test-selectors/testSelector.d.ts.map +1 -0
  349. package/dist/src/theme/components.d.ts +3 -1
  350. package/dist/src/theme/components.d.ts.map +1 -1
  351. package/dist/src/theme/createOdysseyMuiTheme.d.ts +3 -1
  352. package/dist/src/theme/createOdysseyMuiTheme.d.ts.map +1 -1
  353. package/dist/test-selectors/getByQuerySelector.js +64 -0
  354. package/dist/test-selectors/getByQuerySelector.js.map +1 -0
  355. package/dist/test-selectors/getComputedAccessibleErrorMessageText.js +25 -0
  356. package/dist/test-selectors/getComputedAccessibleErrorMessageText.js.map +1 -0
  357. package/dist/test-selectors/getComputedAccessibleText.js +24 -0
  358. package/dist/test-selectors/getComputedAccessibleText.js.map +1 -0
  359. package/dist/test-selectors/index.js +2 -2
  360. package/dist/test-selectors/index.js.map +1 -1
  361. package/dist/test-selectors/interpolateString.js +25 -0
  362. package/dist/test-selectors/interpolateString.js.map +1 -0
  363. package/dist/test-selectors/linkedHtmlSelectors.js +34 -0
  364. package/dist/test-selectors/linkedHtmlSelectors.js.map +1 -0
  365. package/dist/test-selectors/queryOdysseySelector.js +26 -0
  366. package/dist/test-selectors/queryOdysseySelector.js.map +1 -0
  367. package/dist/test-selectors/querySelector.js +82 -58
  368. package/dist/test-selectors/querySelector.js.map +1 -1
  369. package/dist/test-selectors/sanityChecks.js +33 -0
  370. package/dist/test-selectors/sanityChecks.js.map +1 -0
  371. package/dist/test-selectors/testSelector.js +2 -0
  372. package/dist/test-selectors/testSelector.js.map +1 -0
  373. package/dist/test-selectors/testSelectors.json +1 -1
  374. package/dist/theme/components.js +231 -146
  375. package/dist/theme/components.js.map +1 -1
  376. package/dist/theme/createOdysseyMuiTheme.js +3 -2
  377. package/dist/theme/createOdysseyMuiTheme.js.map +1 -1
  378. package/dist/tsconfig.production.tsbuildinfo +1 -1
  379. package/dist/tsconfig.tsbuildinfo +1 -1
  380. package/jest.setup.js +3 -0
  381. package/package.json +5 -5
  382. package/scripts/generateTestSelectorsJson.ts +1 -1
  383. package/src/@types/i18next.d.ts +1 -1
  384. package/src/Autocomplete.tsx +140 -45
  385. package/src/Callout.tsx +13 -25
  386. package/src/Checkbox.tsx +39 -9
  387. package/src/CheckboxGroup.tsx +20 -4
  388. package/src/DataTable/DataTable.tsx +24 -1
  389. package/src/DataTable/useScrollIndication.tsx +11 -4
  390. package/src/Field.tsx +5 -2
  391. package/src/{labs → FileUploader}/FileUploadPreview.tsx +3 -3
  392. package/src/{labs/FileUpload.tsx → FileUploader/FileUploader.tsx} +7 -6
  393. package/src/FileUploader/index.ts +13 -0
  394. package/src/OdysseyCacheProvider.test.tsx +1 -0
  395. package/src/OdysseyCacheProvider.tsx +18 -4
  396. package/src/OdysseyProvider.tsx +12 -4
  397. package/src/OdysseyThemeProvider.tsx +6 -2
  398. package/src/Radio.tsx +41 -12
  399. package/src/RadioGroup.tsx +26 -7
  400. package/src/Select.tsx +116 -45
  401. package/src/{labs/Switch.tsx → Switch.tsx} +95 -41
  402. package/src/Tabs.tsx +8 -10
  403. package/src/Tag.tsx +134 -3
  404. package/src/TextField.tsx +18 -41
  405. package/src/Toast.tsx +1 -1
  406. package/src/ToastStack.tsx +2 -2
  407. package/src/createShadowDomElements.ts +53 -0
  408. package/src/i18n.ts +3 -3
  409. package/src/index.ts +7 -2
  410. package/src/labs/AppTile.tsx +200 -0
  411. package/src/labs/{DataComponents/StackContent.tsx → DataView/CardLayoutContent.tsx} +24 -19
  412. package/src/labs/{DataComponents/StackCard.tsx → DataView/DataCard.tsx} +7 -7
  413. package/src/labs/{DataComponents → DataView}/DataTable.tsx +8 -4
  414. package/src/labs/DataView/DataView.test.tsx +158 -0
  415. package/src/labs/{DataComponents → DataView}/DataView.tsx +119 -42
  416. package/src/labs/{DataComponents → DataView}/DetailPanel.tsx +2 -2
  417. package/src/labs/{DataComponents/TableContent.tsx → DataView/TableLayoutContent.tsx} +59 -27
  418. package/src/labs/{DataComponents → DataView}/TableSettings.tsx +5 -4
  419. package/src/labs/{DataComponents → DataView}/componentTypes.ts +24 -9
  420. package/src/labs/{DataComponents → DataView}/constants.tsx +2 -2
  421. package/src/labs/{DataComponents → DataView}/index.tsx +0 -1
  422. package/src/labs/{DataComponents → DataView}/useFilterConversion.ts +2 -2
  423. package/src/labs/DateField.tsx +3 -0
  424. package/src/labs/DatePicker.tsx +12 -1
  425. package/src/labs/SideNav/CollapseIcon.tsx +48 -0
  426. package/src/labs/SideNav/OktaLogo.tsx +39 -0
  427. package/src/labs/SideNav/SideNav.tsx +486 -0
  428. package/src/labs/SideNav/SideNavFooterContent.tsx +64 -0
  429. package/src/labs/SideNav/SideNavHeader.tsx +88 -0
  430. package/src/labs/SideNav/SideNavItemContent.tsx +216 -0
  431. package/src/labs/SideNav/SideNavItemLinkContent.tsx +87 -0
  432. package/src/labs/SideNav/index.ts +15 -0
  433. package/src/labs/SideNav/types.ts +152 -0
  434. package/src/labs/TopNav.tsx +3 -1
  435. package/src/labs/index.ts +3 -4
  436. package/src/labs/useDateFieldsTranslations.ts +1 -1
  437. package/src/properties/odyssey-react-mui.properties +2 -1
  438. package/src/properties/translations/odyssey-react-mui_cs.properties +15 -3
  439. package/src/properties/translations/odyssey-react-mui_da.properties +15 -3
  440. package/src/properties/translations/odyssey-react-mui_de.properties +14 -2
  441. package/src/properties/translations/odyssey-react-mui_el.properties +16 -4
  442. package/src/properties/translations/odyssey-react-mui_es.properties +15 -3
  443. package/src/properties/translations/odyssey-react-mui_fi.properties +15 -3
  444. package/src/properties/translations/odyssey-react-mui_fr.properties +15 -3
  445. package/src/properties/translations/odyssey-react-mui_ht.properties +17 -6
  446. package/src/properties/translations/odyssey-react-mui_hu.properties +15 -3
  447. package/src/properties/translations/odyssey-react-mui_id.properties +15 -3
  448. package/src/properties/translations/odyssey-react-mui_it.properties +15 -3
  449. package/src/properties/translations/odyssey-react-mui_ja.properties +14 -2
  450. package/src/properties/translations/odyssey-react-mui_ko.properties +14 -2
  451. package/src/properties/translations/odyssey-react-mui_ms.properties +15 -3
  452. package/src/properties/translations/odyssey-react-mui_nb.properties +15 -3
  453. package/src/properties/translations/odyssey-react-mui_nl_NL.properties +15 -3
  454. package/src/properties/translations/odyssey-react-mui_pl.properties +15 -3
  455. package/src/properties/translations/odyssey-react-mui_pt_BR.properties +15 -3
  456. package/src/properties/translations/odyssey-react-mui_ro.properties +15 -3
  457. package/src/properties/translations/odyssey-react-mui_ru.properties +15 -3
  458. package/src/properties/translations/odyssey-react-mui_sv.properties +15 -3
  459. package/src/properties/translations/odyssey-react-mui_th.properties +14 -2
  460. package/src/properties/translations/odyssey-react-mui_tr.properties +15 -3
  461. package/src/properties/translations/odyssey-react-mui_uk.properties +15 -3
  462. package/src/properties/translations/odyssey-react-mui_vi.properties +15 -3
  463. package/src/properties/translations/odyssey-react-mui_zh_CN.properties +14 -2
  464. package/src/properties/translations/odyssey-react-mui_zh_TW.properties +14 -2
  465. package/src/properties/ts/odyssey-react-mui.ts +1 -1
  466. package/src/properties/ts/odyssey-react-mui_cs.ts +1 -1
  467. package/src/properties/ts/odyssey-react-mui_da.ts +1 -1
  468. package/src/properties/ts/odyssey-react-mui_de.ts +1 -1
  469. package/src/properties/ts/odyssey-react-mui_el.ts +1 -1
  470. package/src/properties/ts/odyssey-react-mui_es.ts +1 -1
  471. package/src/properties/ts/odyssey-react-mui_fi.ts +1 -1
  472. package/src/properties/ts/odyssey-react-mui_fr.ts +1 -1
  473. package/src/properties/ts/odyssey-react-mui_ht.ts +1 -1
  474. package/src/properties/ts/odyssey-react-mui_hu.ts +1 -1
  475. package/src/properties/ts/odyssey-react-mui_id.ts +1 -1
  476. package/src/properties/ts/odyssey-react-mui_it.ts +1 -1
  477. package/src/properties/ts/odyssey-react-mui_ja.ts +1 -1
  478. package/src/properties/ts/odyssey-react-mui_ko.ts +1 -1
  479. package/src/properties/ts/odyssey-react-mui_ms.ts +1 -1
  480. package/src/properties/ts/odyssey-react-mui_nb.ts +1 -1
  481. package/src/properties/ts/odyssey-react-mui_nl_NL.ts +1 -1
  482. package/src/properties/ts/odyssey-react-mui_pl.ts +1 -1
  483. package/src/properties/ts/odyssey-react-mui_pt_BR.ts +1 -1
  484. package/src/properties/ts/odyssey-react-mui_ro.ts +1 -1
  485. package/src/properties/ts/odyssey-react-mui_ru.ts +1 -1
  486. package/src/properties/ts/odyssey-react-mui_sv.ts +1 -1
  487. package/src/properties/ts/odyssey-react-mui_th.ts +1 -1
  488. package/src/properties/ts/odyssey-react-mui_tr.ts +1 -1
  489. package/src/properties/ts/odyssey-react-mui_uk.ts +1 -1
  490. package/src/properties/ts/odyssey-react-mui_vi.ts +1 -1
  491. package/src/properties/ts/odyssey-react-mui_zh_CN.ts +1 -1
  492. package/src/properties/ts/odyssey-react-mui_zh_TW.ts +1 -1
  493. package/src/test-selectors/getByQuerySelector.ts +176 -0
  494. package/src/test-selectors/getComputedAccessibleErrorMessageText.ts +52 -0
  495. package/src/test-selectors/getComputedAccessibleText.ts +36 -0
  496. package/src/test-selectors/index.ts +2 -2
  497. package/src/test-selectors/interpolateString.ts +41 -0
  498. package/src/test-selectors/linkedHtmlSelectors.ts +73 -0
  499. package/src/test-selectors/queryOdysseySelector.ts +36 -0
  500. package/src/test-selectors/querySelector.ts +221 -170
  501. package/src/test-selectors/sanityChecks.ts +53 -0
  502. package/src/test-selectors/testSelector.ts +143 -0
  503. package/src/theme/components.tsx +238 -150
  504. package/src/theme/createOdysseyMuiTheme.ts +4 -1
  505. package/dist/createShadowRootElement.js +0 -26
  506. package/dist/createShadowRootElement.js.map +0 -1
  507. package/dist/labs/DataComponents/BulkActionsMenu.js.map +0 -1
  508. package/dist/labs/DataComponents/DataStack.js +0 -85
  509. package/dist/labs/DataComponents/DataStack.js.map +0 -1
  510. package/dist/labs/DataComponents/DataTable.js.map +0 -1
  511. package/dist/labs/DataComponents/DataView.js.map +0 -1
  512. package/dist/labs/DataComponents/DetailPanel.js.map +0 -1
  513. package/dist/labs/DataComponents/LayoutSwitcher.js.map +0 -1
  514. package/dist/labs/DataComponents/RowActions.js.map +0 -1
  515. package/dist/labs/DataComponents/StackCard.js.map +0 -1
  516. package/dist/labs/DataComponents/StackContent.js.map +0 -1
  517. package/dist/labs/DataComponents/TableContent.js.map +0 -1
  518. package/dist/labs/DataComponents/TableSettings.js.map +0 -1
  519. package/dist/labs/DataComponents/componentTypes.js.map +0 -1
  520. package/dist/labs/DataComponents/constants.js.map +0 -1
  521. package/dist/labs/DataComponents/dataTypes.js.map +0 -1
  522. package/dist/labs/DataComponents/fetchData.js.map +0 -1
  523. package/dist/labs/DataComponents/index.js.map +0 -1
  524. package/dist/labs/DataComponents/tableConstants.js.map +0 -1
  525. package/dist/labs/DataComponents/useFilterConversion.js.map +0 -1
  526. package/dist/labs/FileUpload.js.map +0 -1
  527. package/dist/labs/FileUploadIllustration.js.map +0 -1
  528. package/dist/labs/FileUploadPreview.js.map +0 -1
  529. package/dist/labs/SideNav.js +0 -478
  530. package/dist/labs/SideNav.js.map +0 -1
  531. package/dist/labs/Switch.js.map +0 -1
  532. package/dist/src/createShadowRootElement.d.ts.map +0 -1
  533. package/dist/src/labs/DataComponents/BulkActionsMenu.d.ts.map +0 -1
  534. package/dist/src/labs/DataComponents/DataStack.d.ts +0 -20
  535. package/dist/src/labs/DataComponents/DataStack.d.ts.map +0 -1
  536. package/dist/src/labs/DataComponents/DataTable.d.ts +0 -16
  537. package/dist/src/labs/DataComponents/DataTable.d.ts.map +0 -1
  538. package/dist/src/labs/DataComponents/DataView.d.ts.map +0 -1
  539. package/dist/src/labs/DataComponents/DetailPanel.d.ts.map +0 -1
  540. package/dist/src/labs/DataComponents/LayoutSwitcher.d.ts.map +0 -1
  541. package/dist/src/labs/DataComponents/RowActions.d.ts.map +0 -1
  542. package/dist/src/labs/DataComponents/StackCard.d.ts.map +0 -1
  543. package/dist/src/labs/DataComponents/StackContent.d.ts.map +0 -1
  544. package/dist/src/labs/DataComponents/TableContent.d.ts.map +0 -1
  545. package/dist/src/labs/DataComponents/TableSettings.d.ts.map +0 -1
  546. package/dist/src/labs/DataComponents/componentTypes.d.ts.map +0 -1
  547. package/dist/src/labs/DataComponents/constants.d.ts.map +0 -1
  548. package/dist/src/labs/DataComponents/dataTypes.d.ts.map +0 -1
  549. package/dist/src/labs/DataComponents/fetchData.d.ts.map +0 -1
  550. package/dist/src/labs/DataComponents/index.d.ts.map +0 -1
  551. package/dist/src/labs/DataComponents/tableConstants.d.ts.map +0 -1
  552. package/dist/src/labs/DataComponents/useFilterConversion.d.ts.map +0 -1
  553. package/dist/src/labs/FileUpload.d.ts.map +0 -1
  554. package/dist/src/labs/FileUploadIllustration.d.ts.map +0 -1
  555. package/dist/src/labs/FileUploadPreview.d.ts.map +0 -1
  556. package/dist/src/labs/SideNav.d.ts.map +0 -1
  557. package/dist/src/labs/Switch.d.ts.map +0 -1
  558. package/dist/src/test-selectors/featureTestSelector.d.ts +0 -31
  559. package/dist/src/test-selectors/featureTestSelector.d.ts.map +0 -1
  560. package/dist/src/test-selectors/odysseyTestSelectors.d.ts +0 -120
  561. package/dist/src/test-selectors/odysseyTestSelectors.d.ts.map +0 -1
  562. package/dist/test-selectors/featureTestSelector.js +0 -2
  563. package/dist/test-selectors/featureTestSelector.js.map +0 -1
  564. package/dist/test-selectors/odysseyTestSelectors.js.map +0 -1
  565. package/src/createShadowRootElement.ts +0 -31
  566. package/src/labs/DataComponents/DataStack.tsx +0 -105
  567. package/src/labs/SideNav.tsx +0 -745
  568. package/src/test-selectors/featureTestSelector.ts +0 -41
  569. /package/dist/{labs → FileUploader}/FileUploadIllustration.js +0 -0
  570. /package/dist/{labs → FileUploader}/FileUploadPreview.js +0 -0
  571. /package/dist/labs/{DataComponents → DataView}/BulkActionsMenu.js +0 -0
  572. /package/dist/labs/{DataComponents → DataView}/DetailPanel.js +0 -0
  573. /package/dist/labs/{DataComponents → DataView}/LayoutSwitcher.js +0 -0
  574. /package/dist/labs/{DataComponents → DataView}/RowActions.js +0 -0
  575. /package/dist/labs/{DataComponents → DataView}/componentTypes.js +0 -0
  576. /package/dist/labs/{DataComponents → DataView}/dataTypes.js +0 -0
  577. /package/dist/labs/{DataComponents → DataView}/fetchData.js +0 -0
  578. /package/dist/labs/{DataComponents → DataView}/tableConstants.js +0 -0
  579. /package/dist/labs/{DataComponents → DataView}/useFilterConversion.js +0 -0
  580. /package/dist/src/{labs → FileUploader}/FileUploadIllustration.d.ts +0 -0
  581. /package/dist/src/labs/{DataComponents → DataView}/BulkActionsMenu.d.ts +0 -0
  582. /package/dist/src/labs/{DataComponents → DataView}/LayoutSwitcher.d.ts +0 -0
  583. /package/dist/src/labs/{DataComponents → DataView}/RowActions.d.ts +0 -0
  584. /package/dist/src/labs/{DataComponents → DataView}/dataTypes.d.ts +0 -0
  585. /package/dist/src/labs/{DataComponents → DataView}/fetchData.d.ts +0 -0
  586. /package/dist/src/labs/{DataComponents → DataView}/tableConstants.d.ts +0 -0
  587. /package/src/{labs → FileUploader}/FileUploadIllustration.tsx +0 -0
  588. /package/src/labs/{DataComponents → DataView}/BulkActionsMenu.tsx +0 -0
  589. /package/src/labs/{DataComponents → DataView}/LayoutSwitcher.tsx +0 -0
  590. /package/src/labs/{DataComponents → DataView}/RowActions.tsx +0 -0
  591. /package/src/labs/{DataComponents → DataView}/dataTypes.ts +0 -0
  592. /package/src/labs/{DataComponents → DataView}/fetchData.ts +0 -0
  593. /package/src/labs/{DataComponents → DataView}/tableConstants.tsx +0 -0
@@ -0,0 +1,335 @@
1
+ /*!
2
+ * Copyright (c) 2022-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 styled from "@emotion/styled";
14
+ import { memo, useMemo, useState, useCallback, useRef, useEffect } from "react";
15
+ import { ExpandLeftIcon } from "../../icons.generated/index.js";
16
+ import { NavAccordion } from "../NavAccordion.js";
17
+ import { useOdysseyDesignTokens } from "../../OdysseyDesignTokensContext.js";
18
+ import { OktaLogo } from "./OktaLogo.js";
19
+ import { SideNavHeader } from "./SideNavHeader.js";
20
+ import { SideNavItemContent, SideNavListItemContainer } from "./SideNavItemContent.js";
21
+ import { SideNavFooterContent } from "./SideNavFooterContent.js";
22
+ import { jsx as _jsx } from "react/jsx-runtime";
23
+ import { jsxs as _jsxs } from "react/jsx-runtime";
24
+ export const DEFAULT_SIDE_NAV_WIDTH = "300px";
25
+ const SideNavContainer = styled("div", {
26
+ shouldForwardProp: prop => prop !== "expandedWidth"
27
+ })(({
28
+ expandedWidth
29
+ }) => ({
30
+ display: "flex",
31
+ height: "100%",
32
+ maxWidth: expandedWidth,
33
+ overflow: "hidden"
34
+ }));
35
+ const SideNavCollapsedContainer = styled("div", {
36
+ shouldForwardProp: prop => prop !== "odysseyDesignTokens" && prop !== "isSideNavCollapsed"
37
+ })(({
38
+ odysseyDesignTokens,
39
+ isSideNavCollapsed
40
+ }) => ({
41
+ backgroundColor: odysseyDesignTokens.HueNeutral300,
42
+ paddingTop: odysseyDesignTokens.Spacing5,
43
+ cursor: "pointer",
44
+ width: isSideNavCollapsed ? "auto" : 0,
45
+ opacity: isSideNavCollapsed ? 1 : 0,
46
+ visibility: isSideNavCollapsed ? "visible" : "hidden",
47
+ transitionProperty: "opacity",
48
+ transitionDuration: odysseyDesignTokens.TransitionDurationMain,
49
+ transitionTimingFunction: odysseyDesignTokens.TransitionTimingMain
50
+ }));
51
+ const SideNavExpandContainer = styled("nav", {
52
+ shouldForwardProp: prop => prop !== "odysseyDesignTokens" && prop !== "isSideNavCollapsed" && prop !== "expandedWidth"
53
+ })(({
54
+ odysseyDesignTokens,
55
+ isSideNavCollapsed,
56
+ expandedWidth
57
+ }) => ({
58
+ backgroundColor: odysseyDesignTokens.HueNeutralWhite,
59
+ flexDirection: "column",
60
+ display: "flex",
61
+ opacity: isSideNavCollapsed ? 0 : 1,
62
+ visibility: isSideNavCollapsed ? "hidden" : "visible",
63
+ width: isSideNavCollapsed ? "0" : expandedWidth,
64
+ transitionProperty: "opacity, width",
65
+ transitionDuration: odysseyDesignTokens.TransitionDurationMain,
66
+ transitionTimingFunction: odysseyDesignTokens.TransitionTimingMain,
67
+ borderRight: `${odysseyDesignTokens.BorderWidthMain} ${odysseyDesignTokens.BorderStyleMain} ${odysseyDesignTokens.HueNeutral50}`
68
+ }));
69
+ const SideNavHeaderContainer = styled("div", {
70
+ shouldForwardProp: prop => prop !== "hasContentScrolled" && prop !== "odysseyDesignTokens"
71
+ })(({
72
+ hasContentScrolled,
73
+ odysseyDesignTokens
74
+ }) => ({
75
+ position: "sticky",
76
+ top: 0,
77
+ ...(hasContentScrolled && {
78
+ borderBottom: `${odysseyDesignTokens.BorderWidthMain} ${odysseyDesignTokens.BorderStyleMain} ${odysseyDesignTokens.HueNeutral50}`
79
+ })
80
+ }));
81
+ const SideNavListContainer = styled.ul({
82
+ padding: 0,
83
+ listStyle: "none",
84
+ listStyleType: "none"
85
+ });
86
+ const SideNavScrollableContainer = styled.div({
87
+ flex: 1,
88
+ overflowY: "auto"
89
+ });
90
+ const SectionHeader = styled("li", {
91
+ shouldForwardProp: prop => prop !== "odysseyDesignTokens"
92
+ })(({
93
+ odysseyDesignTokens
94
+ }) => ({
95
+ fontFamily: odysseyDesignTokens.TypographyFamilyHeading,
96
+ fontSize: odysseyDesignTokens.TypographySizeOverline,
97
+ fontWeight: odysseyDesignTokens.TypographyWeightHeadingBold,
98
+ color: odysseyDesignTokens.HueNeutral600,
99
+ paddingTop: odysseyDesignTokens.Spacing3,
100
+ paddingBottom: odysseyDesignTokens.Spacing3,
101
+ paddingLeft: odysseyDesignTokens.Spacing4,
102
+ textTransform: "uppercase"
103
+ }));
104
+ const SideNavFooter = styled("div", {
105
+ shouldForwardProp: prop => prop !== "isContentScrollable" && prop !== "odysseyDesignTokens"
106
+ })(({
107
+ isContentScrollable,
108
+ odysseyDesignTokens
109
+ }) => ({
110
+ position: "sticky",
111
+ bottom: 0,
112
+ paddingTop: odysseyDesignTokens.Spacing2,
113
+ transitionProperty: "box-shadow",
114
+ transitionDuration: odysseyDesignTokens.TransitionDurationMain,
115
+ transitionTiming: odysseyDesignTokens.TransitionTimingMain,
116
+ ...(isContentScrollable && {
117
+ boxShadow: odysseyDesignTokens.DepthHigh
118
+ })
119
+ }));
120
+ const SideNavFooterItemsContainer = styled("div", {
121
+ shouldForwardProp: prop => prop !== "odysseyDesignTokens"
122
+ })(({
123
+ odysseyDesignTokens
124
+ }) => ({
125
+ paddingTop: odysseyDesignTokens.Spacing2,
126
+ paddingBottom: odysseyDesignTokens.Spacing2,
127
+ display: "flex",
128
+ justifyContent: "center",
129
+ flexWrap: "wrap",
130
+ alignItems: "center",
131
+ fontSize: odysseyDesignTokens.TypographySizeOverline,
132
+ "& a": {
133
+ color: `${odysseyDesignTokens.TypographyColorHeading} !important`
134
+ },
135
+ "& a:hover": {
136
+ textDecoration: "none"
137
+ },
138
+ "& a:visited": {
139
+ color: odysseyDesignTokens.TypographyColorHeading
140
+ }
141
+ }));
142
+ const getHasScrollableContent = scrollableContainer => scrollableContainer.scrollHeight > scrollableContainer.clientHeight;
143
+ const SideNav = ({
144
+ navHeaderText,
145
+ isCollapsible,
146
+ onCollapse,
147
+ onExpand,
148
+ sideNavItems,
149
+ expandedWidth = DEFAULT_SIDE_NAV_WIDTH,
150
+ footerItems,
151
+ footerComponent,
152
+ logo
153
+ }) => {
154
+ const [isSideNavCollapsed, setSideNavCollapsed] = useState(false);
155
+ const odysseyDesignTokens = useOdysseyDesignTokens();
156
+ const [isContentScrollable, setIsContentScrollable] = useState(false);
157
+ const [hasContentScrolled, setHasContentScrolled] = useState(false);
158
+ const scrollableContentRef = useRef(null);
159
+ const resizeObserverRef = useRef(null);
160
+ const intersectionObserverRef = useRef(null);
161
+ useEffect(() => {
162
+ const updateIsContentScrollable = () => {
163
+ if (scrollableContentRef.current && scrollableContentRef.current.parentElement) {
164
+ setIsContentScrollable(getHasScrollableContent(scrollableContentRef.current.parentElement));
165
+ }
166
+ };
167
+ let resizeObserverDebounceTimer;
168
+ if (!resizeObserverRef.current) {
169
+ resizeObserverRef.current = new ResizeObserver(() => {
170
+ cancelAnimationFrame(resizeObserverDebounceTimer);
171
+ resizeObserverDebounceTimer = requestAnimationFrame(updateIsContentScrollable);
172
+ });
173
+ }
174
+ if (resizeObserverRef.current && scrollableContentRef.current) {
175
+ resizeObserverRef.current.observe(scrollableContentRef.current);
176
+ if (scrollableContentRef.current.parentElement) {
177
+ resizeObserverRef.current.observe(scrollableContentRef.current.parentElement);
178
+ }
179
+ }
180
+ updateIsContentScrollable();
181
+ if (!intersectionObserverRef.current && scrollableContentRef.current) {
182
+ intersectionObserverRef.current = new IntersectionObserver(entries => {
183
+ const isIntersecting = entries.slice().sort((a, b) => a.time - b.time).at(0)?.isIntersecting;
184
+ setHasContentScrolled(!isIntersecting);
185
+ }, {
186
+ root: scrollableContentRef.current.parentElement,
187
+ threshold: 1.0
188
+ });
189
+ }
190
+ if (intersectionObserverRef.current && scrollableContentRef.current) {
191
+ const ul = scrollableContentRef.current;
192
+ const li = ul?.firstChild;
193
+ intersectionObserverRef.current.observe(li);
194
+ }
195
+ return () => {
196
+ if (resizeObserverRef.current) {
197
+ resizeObserverRef.current.disconnect();
198
+ resizeObserverRef.current = null;
199
+ }
200
+ if (intersectionObserverRef.current) {
201
+ intersectionObserverRef.current.disconnect();
202
+ intersectionObserverRef.current = null;
203
+ }
204
+ cancelAnimationFrame(resizeObserverDebounceTimer);
205
+ };
206
+ }, []);
207
+ const scrollIntoViewRef = useRef(null);
208
+ const firstSideNavItemIdWithIsSelected = useMemo(() => {
209
+ const flattenedItems = sideNavItems.flatMap(sideNavItem => sideNavItem.children ? [sideNavItem, ...sideNavItem.children] : sideNavItem);
210
+ const firstItemWithIsSelected = flattenedItems.find(sideNavItem => sideNavItem.isSelected);
211
+ return firstItemWithIsSelected?.id;
212
+ }, [sideNavItems]);
213
+ useEffect(() => {
214
+ if (firstSideNavItemIdWithIsSelected && scrollIntoViewRef.current) {
215
+ scrollIntoViewRef.current.scrollIntoView();
216
+ }
217
+ }, [firstSideNavItemIdWithIsSelected, scrollIntoViewRef]);
218
+ const getRefIfThisIsFirstNodeWithIsSelected = useCallback(itemId => itemId === firstSideNavItemIdWithIsSelected ? scrollIntoViewRef : undefined, [firstSideNavItemIdWithIsSelected]);
219
+ const processedSideNavItems = useMemo(() => sideNavItems.map(item => ({
220
+ ...item,
221
+ children: item.children?.map(childProps => _jsx(SideNavItemContent, {
222
+ scrollRef: getRefIfThisIsFirstNodeWithIsSelected(childProps.id),
223
+ ...childProps
224
+ }, childProps.id))
225
+ })), [getRefIfThisIsFirstNodeWithIsSelected, sideNavItems]);
226
+ const sideNavCollapseHandler = useCallback(() => {
227
+ setSideNavCollapsed(!isSideNavCollapsed);
228
+ onCollapse?.();
229
+ }, [isSideNavCollapsed, setSideNavCollapsed, onCollapse]);
230
+ const sideNavExpandClickHandler = useCallback(() => {
231
+ setSideNavCollapsed(!isSideNavCollapsed);
232
+ onExpand?.();
233
+ }, [isSideNavCollapsed, setSideNavCollapsed, onExpand]);
234
+ const sideNavExpandKeyHandler = useCallback(event => {
235
+ if (event?.key === "Enter" || event?.code === "Space") {
236
+ event.preventDefault();
237
+ setSideNavCollapsed(!isSideNavCollapsed);
238
+ onExpand?.();
239
+ }
240
+ }, [isSideNavCollapsed, setSideNavCollapsed, onExpand]);
241
+ const expandLeftIconStyles = useMemo(() => ({
242
+ fontSize: "1em",
243
+ margin: `0 ${odysseyDesignTokens.Spacing1}`
244
+ }), [odysseyDesignTokens]);
245
+ return _jsxs(SideNavContainer, {
246
+ expandedWidth: expandedWidth,
247
+ children: [_jsx(SideNavCollapsedContainer, {
248
+ tabIndex: 0,
249
+ role: "button",
250
+ odysseyDesignTokens: odysseyDesignTokens,
251
+ isSideNavCollapsed: isSideNavCollapsed,
252
+ onClick: sideNavExpandClickHandler,
253
+ onKeyDown: sideNavExpandKeyHandler,
254
+ "data-se": "collapsed-region",
255
+ "data-aria-label": "expand side navigation",
256
+ children: _jsx(ExpandLeftIcon, {
257
+ sx: expandLeftIconStyles
258
+ })
259
+ }), _jsxs(SideNavExpandContainer, {
260
+ odysseyDesignTokens: odysseyDesignTokens,
261
+ isSideNavCollapsed: isSideNavCollapsed,
262
+ "data-se": "expanded-region",
263
+ expandedWidth: expandedWidth,
264
+ "aria-label": navHeaderText,
265
+ children: [_jsx(SideNavHeaderContainer, {
266
+ odysseyDesignTokens: odysseyDesignTokens,
267
+ hasContentScrolled: hasContentScrolled,
268
+ children: _jsx(SideNavHeader, {
269
+ logo: logo || _jsx(OktaLogo, {}),
270
+ navHeaderText: navHeaderText,
271
+ isCollapsible: isCollapsible,
272
+ onCollapse: sideNavCollapseHandler
273
+ })
274
+ }), _jsx(SideNavScrollableContainer, {
275
+ "data-se": "scrollable-region",
276
+ children: _jsx(SideNavListContainer, {
277
+ ref: scrollableContentRef,
278
+ children: processedSideNavItems?.map(item => {
279
+ const {
280
+ id,
281
+ label,
282
+ isSectionHeader,
283
+ startIcon,
284
+ children,
285
+ isDefaultExpanded,
286
+ isDisabled,
287
+ isExpanded
288
+ } = item;
289
+ if (isSectionHeader) {
290
+ return _jsx(SectionHeader, {
291
+ id: id,
292
+ odysseyDesignTokens: odysseyDesignTokens,
293
+ children: label
294
+ }, id);
295
+ } else if (children) {
296
+ return _jsx(SideNavListItemContainer, {
297
+ id: id,
298
+ odysseyDesignTokens: odysseyDesignTokens,
299
+ children: _jsx(NavAccordion, {
300
+ label: label,
301
+ isDefaultExpanded: isDefaultExpanded,
302
+ isExpanded: isExpanded,
303
+ startIcon: startIcon,
304
+ isDisabled: isDisabled,
305
+ children: _jsx(SideNavListContainer, {
306
+ id: `${id}-list`,
307
+ children: children
308
+ })
309
+ })
310
+ }, id);
311
+ } else {
312
+ return _jsx(SideNavItemContent, {
313
+ scrollRef: getRefIfThisIsFirstNodeWithIsSelected(item.id),
314
+ ...item
315
+ }, item.id);
316
+ }
317
+ })
318
+ })
319
+ }), (footerItems || footerComponent) && _jsxs(SideNavFooter, {
320
+ odysseyDesignTokens: odysseyDesignTokens,
321
+ isContentScrollable: isContentScrollable,
322
+ children: [footerComponent, footerItems && !footerComponent && _jsx(SideNavFooterItemsContainer, {
323
+ odysseyDesignTokens: odysseyDesignTokens,
324
+ children: _jsx(SideNavFooterContent, {
325
+ footerItems: footerItems
326
+ })
327
+ })]
328
+ })]
329
+ })]
330
+ });
331
+ };
332
+ const MemoizedSideNav = memo(SideNav);
333
+ MemoizedSideNav.displayName = "SideNav";
334
+ export { MemoizedSideNav as SideNav };
335
+ //# sourceMappingURL=SideNav.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SideNav.js","names":["styled","memo","useMemo","useState","useCallback","useRef","useEffect","ExpandLeftIcon","NavAccordion","useOdysseyDesignTokens","OktaLogo","SideNavHeader","SideNavItemContent","SideNavListItemContainer","SideNavFooterContent","jsx","_jsx","jsxs","_jsxs","DEFAULT_SIDE_NAV_WIDTH","SideNavContainer","shouldForwardProp","prop","expandedWidth","display","height","maxWidth","overflow","SideNavCollapsedContainer","odysseyDesignTokens","isSideNavCollapsed","backgroundColor","HueNeutral300","paddingTop","Spacing5","cursor","width","opacity","visibility","transitionProperty","transitionDuration","TransitionDurationMain","transitionTimingFunction","TransitionTimingMain","SideNavExpandContainer","HueNeutralWhite","flexDirection","borderRight","BorderWidthMain","BorderStyleMain","HueNeutral50","SideNavHeaderContainer","hasContentScrolled","position","top","borderBottom","SideNavListContainer","ul","padding","listStyle","listStyleType","SideNavScrollableContainer","div","flex","overflowY","SectionHeader","fontFamily","TypographyFamilyHeading","fontSize","TypographySizeOverline","fontWeight","TypographyWeightHeadingBold","color","HueNeutral600","Spacing3","paddingBottom","paddingLeft","Spacing4","textTransform","SideNavFooter","isContentScrollable","bottom","Spacing2","transitionTiming","boxShadow","DepthHigh","SideNavFooterItemsContainer","justifyContent","flexWrap","alignItems","TypographyColorHeading","textDecoration","getHasScrollableContent","scrollableContainer","scrollHeight","clientHeight","SideNav","navHeaderText","isCollapsible","onCollapse","onExpand","sideNavItems","footerItems","footerComponent","logo","setSideNavCollapsed","setIsContentScrollable","setHasContentScrolled","scrollableContentRef","resizeObserverRef","intersectionObserverRef","updateIsContentScrollable","current","parentElement","resizeObserverDebounceTimer","ResizeObserver","cancelAnimationFrame","requestAnimationFrame","observe","IntersectionObserver","entries","isIntersecting","slice","sort","a","b","time","at","root","threshold","li","firstChild","disconnect","scrollIntoViewRef","firstSideNavItemIdWithIsSelected","flattenedItems","flatMap","sideNavItem","children","firstItemWithIsSelected","find","isSelected","id","scrollIntoView","getRefIfThisIsFirstNodeWithIsSelected","itemId","undefined","processedSideNavItems","map","item","childProps","scrollRef","sideNavCollapseHandler","sideNavExpandClickHandler","sideNavExpandKeyHandler","event","key","code","preventDefault","expandLeftIconStyles","margin","Spacing1","tabIndex","role","onClick","onKeyDown","sx","ref","label","isSectionHeader","startIcon","isDefaultExpanded","isDisabled","isExpanded","MemoizedSideNav","displayName"],"sources":["../../../src/labs/SideNav/SideNav.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2022-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport styled from \"@emotion/styled\";\nimport {\n memo,\n useMemo,\n useState,\n useCallback,\n KeyboardEvent,\n useRef,\n useEffect,\n} from \"react\";\n\nimport { ExpandLeftIcon } from \"../../icons.generated\";\nimport { NavAccordion } from \"../NavAccordion\";\nimport {\n DesignTokens,\n useOdysseyDesignTokens,\n} from \"../../OdysseyDesignTokensContext\";\nimport type { SideNavProps } from \"./types\";\nimport { OktaLogo } from \"./OktaLogo\";\nimport { SideNavHeader } from \"./SideNavHeader\";\nimport {\n SideNavItemContent,\n SideNavListItemContainer,\n} from \"./SideNavItemContent\";\nimport { SideNavFooterContent } from \"./SideNavFooterContent\";\n\nexport const DEFAULT_SIDE_NAV_WIDTH = \"300px\";\n\nconst SideNavContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"expandedWidth\",\n})(({ expandedWidth }: { expandedWidth: SideNavProps[\"expandedWidth\"] }) => ({\n display: \"flex\",\n height: \"100%\",\n maxWidth: expandedWidth,\n overflow: \"hidden\",\n}));\n\nconst SideNavCollapsedContainer = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" && prop !== \"isSideNavCollapsed\",\n})(\n ({\n odysseyDesignTokens,\n isSideNavCollapsed,\n }: {\n odysseyDesignTokens: DesignTokens;\n isSideNavCollapsed: boolean;\n }) => ({\n backgroundColor: odysseyDesignTokens.HueNeutral300,\n paddingTop: odysseyDesignTokens.Spacing5,\n cursor: \"pointer\",\n width: isSideNavCollapsed ? \"auto\" : 0,\n opacity: isSideNavCollapsed ? 1 : 0,\n visibility: isSideNavCollapsed ? \"visible\" : \"hidden\",\n transitionProperty: \"opacity\",\n transitionDuration: odysseyDesignTokens.TransitionDurationMain,\n transitionTimingFunction: odysseyDesignTokens.TransitionTimingMain,\n }),\n);\n\nconst SideNavExpandContainer = styled(\"nav\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" &&\n prop !== \"isSideNavCollapsed\" &&\n prop !== \"expandedWidth\",\n})(\n ({\n odysseyDesignTokens,\n isSideNavCollapsed,\n expandedWidth,\n }: {\n odysseyDesignTokens: DesignTokens;\n isSideNavCollapsed: boolean;\n expandedWidth: string;\n }) => ({\n backgroundColor: odysseyDesignTokens.HueNeutralWhite,\n flexDirection: \"column\",\n display: \"flex\",\n opacity: isSideNavCollapsed ? 0 : 1,\n visibility: isSideNavCollapsed ? \"hidden\" : \"visible\",\n width: isSideNavCollapsed ? \"0\" : expandedWidth,\n transitionProperty: \"opacity, width\",\n transitionDuration: odysseyDesignTokens.TransitionDurationMain,\n transitionTimingFunction: odysseyDesignTokens.TransitionTimingMain,\n borderRight: `${odysseyDesignTokens.BorderWidthMain} ${odysseyDesignTokens.BorderStyleMain} ${odysseyDesignTokens.HueNeutral50}`,\n }),\n);\n\nconst SideNavHeaderContainer = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"hasContentScrolled\" && prop !== \"odysseyDesignTokens\",\n})(\n ({\n hasContentScrolled,\n odysseyDesignTokens,\n }: {\n hasContentScrolled: boolean;\n odysseyDesignTokens: DesignTokens;\n }) => ({\n position: \"sticky\",\n top: 0,\n // The bottom border should appear only if the scrollable region has been scrolled\n ...(hasContentScrolled && {\n borderBottom: `${odysseyDesignTokens.BorderWidthMain} ${odysseyDesignTokens.BorderStyleMain} ${odysseyDesignTokens.HueNeutral50}`,\n }),\n }),\n);\n\nconst SideNavListContainer = styled.ul({\n padding: 0,\n listStyle: \"none\",\n listStyleType: \"none\",\n});\n\nconst SideNavScrollableContainer = styled.div({\n flex: 1,\n overflowY: \"auto\",\n});\n\nconst SectionHeader = styled(\"li\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})(({ odysseyDesignTokens }: { odysseyDesignTokens: DesignTokens }) => ({\n fontFamily: odysseyDesignTokens.TypographyFamilyHeading,\n fontSize: odysseyDesignTokens.TypographySizeOverline,\n fontWeight: odysseyDesignTokens.TypographyWeightHeadingBold,\n color: odysseyDesignTokens.HueNeutral600,\n paddingTop: odysseyDesignTokens.Spacing3,\n paddingBottom: odysseyDesignTokens.Spacing3,\n paddingLeft: odysseyDesignTokens.Spacing4,\n textTransform: \"uppercase\",\n}));\n\nconst SideNavFooter = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"isContentScrollable\" && prop !== \"odysseyDesignTokens\",\n})(\n ({\n isContentScrollable,\n odysseyDesignTokens,\n }: {\n isContentScrollable: boolean;\n odysseyDesignTokens: DesignTokens;\n }) => ({\n position: \"sticky\",\n bottom: 0,\n paddingTop: odysseyDesignTokens.Spacing2,\n transitionProperty: \"box-shadow\",\n transitionDuration: odysseyDesignTokens.TransitionDurationMain,\n transitionTiming: odysseyDesignTokens.TransitionTimingMain,\n // The box shadow should appear above the footer only if the scrollable region has overflow\n ...(isContentScrollable && {\n boxShadow: odysseyDesignTokens.DepthHigh,\n }),\n }),\n);\n\nconst SideNavFooterItemsContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})(({ odysseyDesignTokens }: { odysseyDesignTokens: DesignTokens }) => ({\n paddingTop: odysseyDesignTokens.Spacing2,\n paddingBottom: odysseyDesignTokens.Spacing2,\n display: \"flex\",\n justifyContent: \"center\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n fontSize: odysseyDesignTokens.TypographySizeOverline,\n \"& a\": {\n color: `${odysseyDesignTokens.TypographyColorHeading} !important`,\n },\n \"& a:hover\": {\n textDecoration: \"none\",\n },\n \"& a:visited\": {\n color: odysseyDesignTokens.TypographyColorHeading,\n },\n}));\n\nconst getHasScrollableContent = (scrollableContainer: HTMLElement) =>\n scrollableContainer.scrollHeight > scrollableContainer.clientHeight;\n\nconst SideNav = ({\n navHeaderText,\n isCollapsible,\n onCollapse,\n onExpand,\n sideNavItems,\n expandedWidth = DEFAULT_SIDE_NAV_WIDTH,\n footerItems,\n footerComponent,\n logo,\n}: SideNavProps) => {\n const [isSideNavCollapsed, setSideNavCollapsed] = useState(false);\n const odysseyDesignTokens = useOdysseyDesignTokens();\n const [isContentScrollable, setIsContentScrollable] = useState(false);\n const [hasContentScrolled, setHasContentScrolled] = useState(false);\n const scrollableContentRef = useRef<HTMLUListElement>(null);\n const resizeObserverRef = useRef<ResizeObserver | null>(null);\n const intersectionObserverRef = useRef<IntersectionObserver | null>(null);\n\n useEffect(() => {\n const updateIsContentScrollable = () => {\n if (\n scrollableContentRef.current &&\n scrollableContentRef.current.parentElement\n ) {\n setIsContentScrollable(\n getHasScrollableContent(scrollableContentRef.current.parentElement),\n );\n }\n };\n\n // If the window is resized, we may need to re-determine if the scrollable container has overflow\n // Setup a ResizeObserver to know if the size of the scrollableContent changes\n let resizeObserverDebounceTimer: ReturnType<typeof requestAnimationFrame>;\n if (!resizeObserverRef.current) {\n resizeObserverRef.current = new ResizeObserver(() => {\n cancelAnimationFrame(resizeObserverDebounceTimer);\n resizeObserverDebounceTimer = requestAnimationFrame(\n updateIsContentScrollable,\n );\n });\n }\n\n if (resizeObserverRef.current && scrollableContentRef.current) {\n // Observe the <ul> itself (in case it changes size due to the content expanding)\n resizeObserverRef.current.observe(scrollableContentRef.current);\n if (scrollableContentRef.current.parentElement) {\n // ALSO observe the parent (<SideNavScrollableContainer>) in case the window resizes\n resizeObserverRef.current.observe(\n scrollableContentRef.current.parentElement,\n );\n }\n }\n\n // Determine if the scrollable container has overflow or not on load\n updateIsContentScrollable();\n\n // Finally, we only want to have the border on the bottom of the header iff the user has scrolled\n // the scrollable container\n if (!intersectionObserverRef.current && scrollableContentRef.current) {\n intersectionObserverRef.current = new IntersectionObserver(\n (entries) => {\n // If isIntersecting is true, then we're at the top of the scroll container\n // If isIntersecting is false, some scrolling has occurred.\n // The entries must be sorted by time and we only really need to look at the latest one\n const isIntersecting = entries\n .slice()\n .sort((a, b) => a.time - b.time)\n .at(0)?.isIntersecting;\n setHasContentScrolled(!isIntersecting);\n },\n {\n root: scrollableContentRef.current.parentElement,\n threshold: 1.0,\n },\n );\n }\n if (intersectionObserverRef.current && scrollableContentRef.current) {\n const ul = scrollableContentRef.current;\n const li = ul?.firstChild;\n intersectionObserverRef.current.observe(li as HTMLElement);\n }\n\n // Cleanup when unmounted:\n return () => {\n if (resizeObserverRef.current) {\n resizeObserverRef.current.disconnect();\n resizeObserverRef.current = null;\n }\n if (intersectionObserverRef.current) {\n intersectionObserverRef.current.disconnect();\n intersectionObserverRef.current = null;\n }\n cancelAnimationFrame(resizeObserverDebounceTimer); // Ensure timer is cleared on component unmount\n };\n }, []);\n\n const scrollIntoViewRef = useRef<HTMLLIElement>(null);\n /**\n * Look through the sideNavItems and determine which is the first node\n * with isSelected. This should be the node we set a ref on in order to\n * call scrollIntoView in the effect\n */\n const firstSideNavItemIdWithIsSelected = useMemo(() => {\n const flattenedItems = sideNavItems.flatMap((sideNavItem) =>\n sideNavItem.children\n ? [sideNavItem, ...sideNavItem.children]\n : sideNavItem,\n );\n const firstItemWithIsSelected = flattenedItems.find(\n (sideNavItem) => sideNavItem.isSelected,\n );\n return firstItemWithIsSelected?.id;\n }, [sideNavItems]);\n /**\n * Once we've rendered and if we have an item to scroll to, do the scroll action.\n * This must rely on checking firstSideNavItemIdWithIsSelected or it will not run\n * once the actual ref is populated.\n */\n useEffect(() => {\n if (firstSideNavItemIdWithIsSelected && scrollIntoViewRef.current) {\n scrollIntoViewRef.current.scrollIntoView();\n }\n }, [firstSideNavItemIdWithIsSelected, scrollIntoViewRef]);\n\n /**\n * We only want to put a ref on a node iff it is the first selected node.\n * This function returns the ref only if the ID provided matches the first\n * selected node, otherwise returns undefined (so that the node has no ref)\n */\n const getRefIfThisIsFirstNodeWithIsSelected = useCallback(\n (itemId: string) =>\n itemId === firstSideNavItemIdWithIsSelected\n ? scrollIntoViewRef\n : undefined,\n [firstSideNavItemIdWithIsSelected],\n );\n\n const processedSideNavItems = useMemo(\n () =>\n sideNavItems.map((item) => ({\n ...item,\n children: item.children?.map((childProps) => (\n <SideNavItemContent\n key={childProps.id}\n scrollRef={getRefIfThisIsFirstNodeWithIsSelected(childProps.id)}\n {...childProps}\n />\n )),\n })),\n [getRefIfThisIsFirstNodeWithIsSelected, sideNavItems],\n );\n\n const sideNavCollapseHandler = useCallback(() => {\n setSideNavCollapsed(!isSideNavCollapsed);\n onCollapse?.();\n }, [isSideNavCollapsed, setSideNavCollapsed, onCollapse]);\n\n const sideNavExpandClickHandler = useCallback(() => {\n setSideNavCollapsed(!isSideNavCollapsed);\n onExpand?.();\n }, [isSideNavCollapsed, setSideNavCollapsed, onExpand]);\n\n const sideNavExpandKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n if (event?.key === \"Enter\" || event?.code === \"Space\") {\n event.preventDefault();\n setSideNavCollapsed(!isSideNavCollapsed);\n onExpand?.();\n }\n },\n [isSideNavCollapsed, setSideNavCollapsed, onExpand],\n );\n\n const expandLeftIconStyles = useMemo(\n () => ({\n fontSize: \"1em\",\n margin: `0 ${odysseyDesignTokens.Spacing1}`,\n }),\n [odysseyDesignTokens],\n );\n\n return (\n <SideNavContainer expandedWidth={expandedWidth}>\n <SideNavCollapsedContainer\n tabIndex={0}\n role=\"button\"\n odysseyDesignTokens={odysseyDesignTokens}\n isSideNavCollapsed={isSideNavCollapsed}\n onClick={sideNavExpandClickHandler}\n onKeyDown={sideNavExpandKeyHandler}\n data-se=\"collapsed-region\"\n data-aria-label=\"expand side navigation\"\n >\n <ExpandLeftIcon sx={expandLeftIconStyles} />\n </SideNavCollapsedContainer>\n <SideNavExpandContainer\n odysseyDesignTokens={odysseyDesignTokens}\n isSideNavCollapsed={isSideNavCollapsed}\n data-se=\"expanded-region\"\n expandedWidth={expandedWidth}\n aria-label={navHeaderText}\n >\n <SideNavHeaderContainer\n odysseyDesignTokens={odysseyDesignTokens}\n hasContentScrolled={hasContentScrolled}\n >\n <SideNavHeader\n logo={logo || <OktaLogo />}\n navHeaderText={navHeaderText}\n isCollapsible={isCollapsible}\n onCollapse={sideNavCollapseHandler}\n />\n </SideNavHeaderContainer>\n <SideNavScrollableContainer data-se=\"scrollable-region\">\n <SideNavListContainer ref={scrollableContentRef}>\n {processedSideNavItems?.map((item) => {\n const {\n id,\n label,\n isSectionHeader,\n startIcon,\n children,\n isDefaultExpanded,\n isDisabled,\n isExpanded,\n } = item;\n\n if (isSectionHeader) {\n return (\n <SectionHeader\n id={id}\n key={id}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n {label}\n </SectionHeader>\n );\n } else if (children) {\n return (\n <SideNavListItemContainer\n id={id}\n key={id}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <NavAccordion\n label={label}\n isDefaultExpanded={isDefaultExpanded}\n isExpanded={isExpanded}\n startIcon={startIcon}\n isDisabled={isDisabled}\n >\n <SideNavListContainer id={`${id}-list`}>\n {children}\n </SideNavListContainer>\n </NavAccordion>\n </SideNavListItemContainer>\n );\n } else {\n return (\n <SideNavItemContent\n key={item.id}\n scrollRef={getRefIfThisIsFirstNodeWithIsSelected(item.id)}\n {...item}\n />\n );\n }\n })}\n </SideNavListContainer>\n </SideNavScrollableContainer>\n {(footerItems || footerComponent) && (\n <SideNavFooter\n odysseyDesignTokens={odysseyDesignTokens}\n isContentScrollable={isContentScrollable}\n >\n {footerComponent}\n {footerItems && !footerComponent && (\n <SideNavFooterItemsContainer\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <SideNavFooterContent footerItems={footerItems} />\n </SideNavFooterItemsContainer>\n )}\n </SideNavFooter>\n )}\n </SideNavExpandContainer>\n </SideNavContainer>\n );\n};\n\nconst MemoizedSideNav = memo(SideNav);\nMemoizedSideNav.displayName = \"SideNav\";\n\nexport { MemoizedSideNav as SideNav };\n"],"mappings":"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"}
@@ -0,0 +1,49 @@
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 { memo, useMemo } from "react";
14
+ import { useOdysseyDesignTokens } from "../../OdysseyDesignTokensContext.js";
15
+ import { Box } from "../../Box.js";
16
+ import { Link } from "../../Link.js";
17
+ import { jsx as _jsx } from "react/jsx-runtime";
18
+ import { jsxs as _jsxs } from "react/jsx-runtime";
19
+ const SideNavFooterContent = ({
20
+ footerItems
21
+ }) => {
22
+ const odysseyDesignTokens = useOdysseyDesignTokens();
23
+ const footerContent = useMemo(() => {
24
+ return footerItems?.map((item, index) => _jsxs(Box, {
25
+ sx: {
26
+ display: "flex"
27
+ },
28
+ children: [item.href ? _jsx(Link, {
29
+ href: item.href,
30
+ children: item.label
31
+ }, item.id) : _jsx(Box, {
32
+ component: "span",
33
+ children: item.label
34
+ }, item.id), index < footerItems.length - 1 && _jsx(Box, {
35
+ sx: {
36
+ marginLeft: odysseyDesignTokens.Spacing4,
37
+ marginRight: odysseyDesignTokens.Spacing4,
38
+ color: odysseyDesignTokens.HueNeutral300
39
+ },
40
+ children: "|"
41
+ }, `${item.id}-separator`)]
42
+ }, `${item.id}-wrapper`));
43
+ }, [footerItems, odysseyDesignTokens]);
44
+ return footerContent;
45
+ };
46
+ const MemoizedSideNavFooterContent = memo(SideNavFooterContent);
47
+ MemoizedSideNavFooterContent.displayName = "SideNavFooterContent";
48
+ export { MemoizedSideNavFooterContent as SideNavFooterContent };
49
+ //# sourceMappingURL=SideNavFooterContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SideNavFooterContent.js","names":["memo","useMemo","useOdysseyDesignTokens","Box","Link","jsx","_jsx","jsxs","_jsxs","SideNavFooterContent","footerItems","odysseyDesignTokens","footerContent","map","item","index","sx","display","children","href","label","id","component","length","marginLeft","Spacing4","marginRight","color","HueNeutral300","MemoizedSideNavFooterContent","displayName"],"sources":["../../../src/labs/SideNav/SideNavFooterContent.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2024-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { memo, useMemo } from \"react\";\nimport { useOdysseyDesignTokens } from \"../../OdysseyDesignTokensContext\";\nimport type { SideNavFooterItem } from \"./types\";\nimport { Box } from \"../../Box\";\nimport { Link } from \"../../Link\";\n\nconst SideNavFooterContent = ({\n footerItems,\n}: {\n footerItems: SideNavFooterItem[];\n}) => {\n const odysseyDesignTokens = useOdysseyDesignTokens();\n\n const footerContent = useMemo(() => {\n return footerItems?.map((item, index) => (\n <Box\n key={`${item.id}-wrapper`}\n sx={{\n display: \"flex\",\n }}\n >\n {item.href ? (\n <Link key={item.id} href={item.href}>\n {item.label}\n </Link>\n ) : (\n <Box component=\"span\" key={item.id}>\n {item.label}\n </Box>\n )}\n {index < footerItems.length - 1 && (\n <Box\n key={`${item.id}-separator`}\n sx={{\n marginLeft: odysseyDesignTokens.Spacing4,\n marginRight: odysseyDesignTokens.Spacing4,\n color: odysseyDesignTokens.HueNeutral300,\n }}\n >\n |\n </Box>\n )}\n </Box>\n ));\n }, [footerItems, odysseyDesignTokens]);\n\n return footerContent;\n};\nconst MemoizedSideNavFooterContent = memo(SideNavFooterContent);\nMemoizedSideNavFooterContent.displayName = \"SideNavFooterContent\";\n\nexport { MemoizedSideNavFooterContent as SideNavFooterContent };\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,IAAI,EAAEC,OAAO,QAAQ,OAAO;AAAC,SAC7BC,sBAAsB;AAAA,SAEtBC,GAAG;AAAA,SACHC,IAAI;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAEb,MAAMC,oBAAoB,GAAGA,CAAC;EAC5BC;AAGF,CAAC,KAAK;EACJ,MAAMC,mBAAmB,GAAGT,sBAAsB,CAAC,CAAC;EAEpD,MAAMU,aAAa,GAAGX,OAAO,CAAC,MAAM;IAClC,OAAOS,WAAW,EAAEG,GAAG,CAAC,CAACC,IAAI,EAAEC,KAAK,KAClCP,KAAA,CAACL,GAAG;MAEFa,EAAE,EAAE;QACFC,OAAO,EAAE;MACX,CAAE;MAAAC,QAAA,GAEDJ,IAAI,CAACK,IAAI,GACRb,IAAA,CAACF,IAAI;QAAee,IAAI,EAAEL,IAAI,CAACK,IAAK;QAAAD,QAAA,EACjCJ,IAAI,CAACM;MAAK,GADFN,IAAI,CAACO,EAEV,CAAC,GAEPf,IAAA,CAACH,GAAG;QAACmB,SAAS,EAAC,MAAM;QAAAJ,QAAA,EAClBJ,IAAI,CAACM;MAAK,GADcN,IAAI,CAACO,EAE3B,CACN,EACAN,KAAK,GAAGL,WAAW,CAACa,MAAM,GAAG,CAAC,IAC7BjB,IAAA,CAACH,GAAG;QAEFa,EAAE,EAAE;UACFQ,UAAU,EAAEb,mBAAmB,CAACc,QAAQ;UACxCC,WAAW,EAAEf,mBAAmB,CAACc,QAAQ;UACzCE,KAAK,EAAEhB,mBAAmB,CAACiB;QAC7B,CAAE;QAAAV,QAAA,EACH;MAED,GARQ,GAAEJ,IAAI,CAACO,EAAG,YAQb,CACN;IAAA,GAzBK,GAAEP,IAAI,CAACO,EAAG,UA0Bb,CACN,CAAC;EACJ,CAAC,EAAE,CAACX,WAAW,EAAEC,mBAAmB,CAAC,CAAC;EAEtC,OAAOC,aAAa;AACtB,CAAC;AACD,MAAMiB,4BAA4B,GAAG7B,IAAI,CAACS,oBAAoB,CAAC;AAC/DoB,4BAA4B,CAACC,WAAW,GAAG,sBAAsB;AAEjE,SAASD,4BAA4B,IAAIpB,oBAAoB"}
@@ -0,0 +1,81 @@
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 styled from "@emotion/styled";
14
+ import { memo, useMemo } from "react";
15
+ import { useOdysseyDesignTokens } from "../../OdysseyDesignTokensContext.js";
16
+ import { Box } from "../../Box.js";
17
+ import { Heading6 } from "../../Typography.js";
18
+ import { CollapseIcon } from "./CollapseIcon.js";
19
+ import { TOP_NAV_HEIGHT_TOKEN } from "../TopNav.js";
20
+ import { jsx as _jsx } from "react/jsx-runtime";
21
+ import { jsxs as _jsxs } from "react/jsx-runtime";
22
+ const SideNavLogoContainer = styled("div", {
23
+ shouldForwardProp: prop => prop !== "odysseyDesignTokens"
24
+ })(({
25
+ odysseyDesignTokens
26
+ }) => ({
27
+ height: odysseyDesignTokens[TOP_NAV_HEIGHT_TOKEN],
28
+ padding: odysseyDesignTokens.Spacing3,
29
+ borderColor: odysseyDesignTokens.HueNeutral50,
30
+ borderStyle: odysseyDesignTokens.BorderStyleMain,
31
+ borderWidth: 0,
32
+ borderBottomWidth: odysseyDesignTokens.BorderWidthMain
33
+ }));
34
+ const SideNavHeaderContainer = styled("div", {
35
+ shouldForwardProp: prop => prop !== "odysseyDesignTokens"
36
+ })(({
37
+ odysseyDesignTokens
38
+ }) => ({
39
+ display: "flex",
40
+ justifyContent: "space-between",
41
+ alignItems: "center",
42
+ paddingLeft: odysseyDesignTokens.Spacing4,
43
+ paddingRight: odysseyDesignTokens.Spacing4,
44
+ paddingTop: odysseyDesignTokens.Spacing3,
45
+ paddingBottom: odysseyDesignTokens.Spacing3
46
+ }));
47
+ const SideNavHeader = ({
48
+ navHeaderText,
49
+ isCollapsible,
50
+ onCollapse,
51
+ logo
52
+ }) => {
53
+ const odysseyDesignTokens = useOdysseyDesignTokens();
54
+ const sideNavHeaderStyles = useMemo(() => ({
55
+ marginTop: odysseyDesignTokens.Spacing2
56
+ }), [odysseyDesignTokens]);
57
+ return _jsxs(Box, {
58
+ sx: {
59
+ display: "flex",
60
+ flexDirection: "column"
61
+ },
62
+ children: [_jsx(SideNavLogoContainer, {
63
+ odysseyDesignTokens: odysseyDesignTokens,
64
+ children: logo
65
+ }), _jsxs(SideNavHeaderContainer, {
66
+ odysseyDesignTokens: odysseyDesignTokens,
67
+ children: [_jsx(Box, {
68
+ sx: sideNavHeaderStyles,
69
+ children: _jsx(Heading6, {
70
+ children: navHeaderText
71
+ })
72
+ }), isCollapsible && _jsx(CollapseIcon, {
73
+ onClick: onCollapse
74
+ })]
75
+ })]
76
+ });
77
+ };
78
+ const MemoizedSideNavHeader = memo(SideNavHeader);
79
+ MemoizedSideNavHeader.displayName = "SideNavHeader";
80
+ export { MemoizedSideNavHeader as SideNavHeader };
81
+ //# sourceMappingURL=SideNavHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SideNavHeader.js","names":["styled","memo","useMemo","useOdysseyDesignTokens","Box","Heading6","CollapseIcon","TOP_NAV_HEIGHT_TOKEN","jsx","_jsx","jsxs","_jsxs","SideNavLogoContainer","shouldForwardProp","prop","odysseyDesignTokens","height","padding","Spacing3","borderColor","HueNeutral50","borderStyle","BorderStyleMain","borderWidth","borderBottomWidth","BorderWidthMain","SideNavHeaderContainer","display","justifyContent","alignItems","paddingLeft","Spacing4","paddingRight","paddingTop","paddingBottom","SideNavHeader","navHeaderText","isCollapsible","onCollapse","logo","sideNavHeaderStyles","marginTop","Spacing2","sx","flexDirection","children","onClick","MemoizedSideNavHeader","displayName"],"sources":["../../../src/labs/SideNav/SideNavHeader.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2024-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport styled from \"@emotion/styled\";\nimport { memo, ReactNode, useMemo } from \"react\";\nimport {\n type DesignTokens,\n useOdysseyDesignTokens,\n} from \"../../OdysseyDesignTokensContext\";\nimport { Box } from \"../../Box\";\nimport { Heading6 } from \"../../Typography\";\nimport { CollapseIcon } from \"./CollapseIcon\";\nimport type { SideNavProps } from \"./types\";\nimport { TOP_NAV_HEIGHT_TOKEN } from \"../TopNav\";\n\nconst SideNavLogoContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})(({ odysseyDesignTokens }: { odysseyDesignTokens: DesignTokens }) => ({\n height: odysseyDesignTokens[TOP_NAV_HEIGHT_TOKEN],\n padding: odysseyDesignTokens.Spacing3,\n borderColor: odysseyDesignTokens.HueNeutral50,\n borderStyle: odysseyDesignTokens.BorderStyleMain,\n borderWidth: 0,\n borderBottomWidth: odysseyDesignTokens.BorderWidthMain,\n}));\n\nconst SideNavHeaderContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})(({ odysseyDesignTokens }: { odysseyDesignTokens: DesignTokens }) => ({\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n paddingLeft: odysseyDesignTokens.Spacing4,\n paddingRight: odysseyDesignTokens.Spacing4,\n paddingTop: odysseyDesignTokens.Spacing3,\n paddingBottom: odysseyDesignTokens.Spacing3,\n}));\n\nconst SideNavHeader = ({\n navHeaderText,\n isCollapsible,\n onCollapse,\n logo,\n}: Pick<\n SideNavProps,\n \"navHeaderText\" | \"isCollapsible\" | \"onCollapse\" | \"logo\"\n>): ReactNode => {\n const odysseyDesignTokens = useOdysseyDesignTokens();\n\n const sideNavHeaderStyles = useMemo(\n () => ({\n marginTop: odysseyDesignTokens.Spacing2,\n }),\n [odysseyDesignTokens],\n );\n\n return (\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n <SideNavLogoContainer odysseyDesignTokens={odysseyDesignTokens}>\n {logo}\n </SideNavLogoContainer>\n <SideNavHeaderContainer odysseyDesignTokens={odysseyDesignTokens}>\n <Box sx={sideNavHeaderStyles}>\n <Heading6>{navHeaderText}</Heading6>\n </Box>\n {isCollapsible && <CollapseIcon onClick={onCollapse} />}\n </SideNavHeaderContainer>\n </Box>\n );\n};\nconst MemoizedSideNavHeader = memo(SideNavHeader);\nMemoizedSideNavHeader.displayName = \"SideNavHeader\";\n\nexport { MemoizedSideNavHeader as SideNavHeader };\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,MAAM,MAAM,iBAAiB;AACpC,SAASC,IAAI,EAAaC,OAAO,QAAQ,OAAO;AAAC,SAG/CC,sBAAsB;AAAA,SAEfC,GAAG;AAAA,SACHC,QAAQ;AAAA,SACRC,YAAY;AAAA,SAEZC,oBAAoB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAE7B,MAAMC,oBAAoB,GAAGZ,MAAM,CAAC,KAAK,EAAE;EACzCa,iBAAiB,EAAGC,IAAI,IAAKA,IAAI,KAAK;AACxC,CAAC,CAAC,CAAC,CAAC;EAAEC;AAA2D,CAAC,MAAM;EACtEC,MAAM,EAAED,mBAAmB,CAACR,oBAAoB,CAAC;EACjDU,OAAO,EAAEF,mBAAmB,CAACG,QAAQ;EACrCC,WAAW,EAAEJ,mBAAmB,CAACK,YAAY;EAC7CC,WAAW,EAAEN,mBAAmB,CAACO,eAAe;EAChDC,WAAW,EAAE,CAAC;EACdC,iBAAiB,EAAET,mBAAmB,CAACU;AACzC,CAAC,CAAC,CAAC;AAEH,MAAMC,sBAAsB,GAAG1B,MAAM,CAAC,KAAK,EAAE;EAC3Ca,iBAAiB,EAAGC,IAAI,IAAKA,IAAI,KAAK;AACxC,CAAC,CAAC,CAAC,CAAC;EAAEC;AAA2D,CAAC,MAAM;EACtEY,OAAO,EAAE,MAAM;EACfC,cAAc,EAAE,eAAe;EAC/BC,UAAU,EAAE,QAAQ;EACpBC,WAAW,EAAEf,mBAAmB,CAACgB,QAAQ;EACzCC,YAAY,EAAEjB,mBAAmB,CAACgB,QAAQ;EAC1CE,UAAU,EAAElB,mBAAmB,CAACG,QAAQ;EACxCgB,aAAa,EAAEnB,mBAAmB,CAACG;AACrC,CAAC,CAAC,CAAC;AAEH,MAAMiB,aAAa,GAAGA,CAAC;EACrBC,aAAa;EACbC,aAAa;EACbC,UAAU;EACVC;AAIF,CAAC,KAAgB;EACf,MAAMxB,mBAAmB,GAAGZ,sBAAsB,CAAC,CAAC;EAEpD,MAAMqC,mBAAmB,GAAGtC,OAAO,CACjC,OAAO;IACLuC,SAAS,EAAE1B,mBAAmB,CAAC2B;EACjC,CAAC,CAAC,EACF,CAAC3B,mBAAmB,CACtB,CAAC;EAED,OACEJ,KAAA,CAACP,GAAG;IACFuC,EAAE,EAAE;MACFhB,OAAO,EAAE,MAAM;MACfiB,aAAa,EAAE;IACjB,CAAE;IAAAC,QAAA,GAEFpC,IAAA,CAACG,oBAAoB;MAACG,mBAAmB,EAAEA,mBAAoB;MAAA8B,QAAA,EAC5DN;IAAI,CACe,CAAC,EACvB5B,KAAA,CAACe,sBAAsB;MAACX,mBAAmB,EAAEA,mBAAoB;MAAA8B,QAAA,GAC/DpC,IAAA,CAACL,GAAG;QAACuC,EAAE,EAAEH,mBAAoB;QAAAK,QAAA,EAC3BpC,IAAA,CAACJ,QAAQ;UAAAwC,QAAA,EAAET;QAAa,CAAW;MAAC,CACjC,CAAC,EACLC,aAAa,IAAI5B,IAAA,CAACH,YAAY;QAACwC,OAAO,EAAER;MAAW,CAAE,CAAC;IAAA,CACjC,CAAC;EAAA,CACtB,CAAC;AAEV,CAAC;AACD,MAAMS,qBAAqB,GAAG9C,IAAI,CAACkC,aAAa,CAAC;AACjDY,qBAAqB,CAACC,WAAW,GAAG,eAAe;AAEnD,SAASD,qBAAqB,IAAIZ,aAAa"}