@okta/odyssey-react-mui 1.32.0 → 1.32.4

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 (458) hide show
  1. package/dist/cjs/theme/components.cjs +6 -0
  2. package/dist/cjs/theme/components.cjs.map +1 -1
  3. package/dist/cjs/ui-shell/SideNav/SideNav.cjs +2 -1
  4. package/dist/cjs/ui-shell/SideNav/SideNav.cjs.map +1 -1
  5. package/dist/cjs/ui-shell/SideNav/SideNavItemContent.cjs +36 -11
  6. package/dist/cjs/ui-shell/SideNav/SideNavItemContent.cjs.map +1 -1
  7. package/dist/cjs/ui-shell/SideNav/SideNavItemLinkContent.cjs +3 -1
  8. package/dist/cjs/ui-shell/SideNav/SideNavItemLinkContent.cjs.map +1 -1
  9. package/dist/cjs/ui-shell/SideNav/SideNavLogo.cjs +14 -2
  10. package/dist/cjs/ui-shell/SideNav/SideNavLogo.cjs.map +1 -1
  11. package/dist/cjs/ui-shell/SideNav/SideNavToggleButton.cjs +1 -1
  12. package/dist/cjs/ui-shell/SideNav/SideNavToggleButton.cjs.map +1 -1
  13. package/dist/cjs/ui-shell/SideNav/types.cjs.map +1 -1
  14. package/dist/cjs/ui-shell/UiShellContent.cjs +48 -32
  15. package/dist/cjs/ui-shell/UiShellContent.cjs.map +1 -1
  16. package/dist/cjs/ui-shell/index.cjs +9 -1
  17. package/dist/cjs/ui-shell/index.cjs.map +1 -1
  18. package/dist/cjs/useContrastMode.cjs +1 -1
  19. package/dist/cjs/useContrastMode.cjs.map +1 -1
  20. package/dist/esm/theme/components.js +6 -0
  21. package/dist/esm/theme/components.js.map +1 -1
  22. package/dist/esm/ui-shell/SideNav/SideNav.js +2 -1
  23. package/dist/esm/ui-shell/SideNav/SideNav.js.map +1 -1
  24. package/dist/esm/ui-shell/SideNav/SideNavItemContent.js +37 -12
  25. package/dist/esm/ui-shell/SideNav/SideNavItemContent.js.map +1 -1
  26. package/dist/esm/ui-shell/SideNav/SideNavItemLinkContent.js +3 -1
  27. package/dist/esm/ui-shell/SideNav/SideNavItemLinkContent.js.map +1 -1
  28. package/dist/esm/ui-shell/SideNav/SideNavLogo.js +14 -2
  29. package/dist/esm/ui-shell/SideNav/SideNavLogo.js.map +1 -1
  30. package/dist/esm/ui-shell/SideNav/SideNavToggleButton.js +1 -1
  31. package/dist/esm/ui-shell/SideNav/SideNavToggleButton.js.map +1 -1
  32. package/dist/esm/ui-shell/SideNav/types.js.map +1 -1
  33. package/dist/esm/ui-shell/UiShellContent.js +45 -31
  34. package/dist/esm/ui-shell/UiShellContent.js.map +1 -1
  35. package/dist/esm/ui-shell/index.js +1 -0
  36. package/dist/esm/ui-shell/index.js.map +1 -1
  37. package/dist/esm/useContrastMode.js +2 -2
  38. package/dist/esm/useContrastMode.js.map +1 -1
  39. package/dist/index.cjs +1 -1
  40. package/dist/index.mjs +1 -1
  41. package/dist/index.scss +1 -1
  42. package/dist/tsconfig.production.tsbuildinfo +1 -1
  43. package/dist/types/theme/components.d.ts.map +1 -1
  44. package/dist/types/ui-shell/SideNav/SideNav.d.ts.map +1 -1
  45. package/dist/types/ui-shell/SideNav/SideNavItemContent.d.ts +9 -7
  46. package/dist/types/ui-shell/SideNav/SideNavItemContent.d.ts.map +1 -1
  47. package/dist/types/ui-shell/SideNav/SideNavItemLinkContent.d.ts +1 -1
  48. package/dist/types/ui-shell/SideNav/SideNavItemLinkContent.d.ts.map +1 -1
  49. package/dist/types/ui-shell/SideNav/SideNavLogo.d.ts.map +1 -1
  50. package/dist/types/ui-shell/SideNav/types.d.ts +5 -1
  51. package/dist/types/ui-shell/SideNav/types.d.ts.map +1 -1
  52. package/dist/types/ui-shell/UiShellContent.d.ts +8 -2
  53. package/dist/types/ui-shell/UiShellContent.d.ts.map +1 -1
  54. package/dist/types/ui-shell/index.d.ts +1 -1
  55. package/dist/types/ui-shell/index.d.ts.map +1 -1
  56. package/package.json +4 -4
  57. package/.browserslistrc +0 -1
  58. package/.svgrrc.cjs +0 -13
  59. package/CHANGELOG.md +0 -1490
  60. package/babel.config.cjs +0 -112
  61. package/i18n.config.json +0 -10
  62. package/scripts/generateIconsIndex.ts +0 -49
  63. package/scripts/generateTestSelectorsJson.ts +0 -33
  64. package/scripts/properties-to-ts.ts +0 -111
  65. package/src/@types/i18next.d.ts +0 -24
  66. package/src/@types/properties.d.ts +0 -292
  67. package/src/@types/react-augment.d.ts +0 -22
  68. package/src/Accordion.tsx +0 -117
  69. package/src/Autocomplete.tsx +0 -321
  70. package/src/Badge.tsx +0 -112
  71. package/src/Banner.tsx +0 -112
  72. package/src/Box.tsx +0 -44
  73. package/src/Breadcrumbs.tsx +0 -221
  74. package/src/Buttons/BaseButton.tsx +0 -250
  75. package/src/Buttons/BaseMenuButton.tsx +0 -342
  76. package/src/Buttons/Button.tsx +0 -30
  77. package/src/Buttons/ButtonContext.tsx +0 -23
  78. package/src/Buttons/MenuButton.tsx +0 -33
  79. package/src/Buttons/MenuContext.ts +0 -25
  80. package/src/Buttons/MenuItem.tsx +0 -103
  81. package/src/Buttons/index.ts +0 -25
  82. package/src/Callout.tsx +0 -176
  83. package/src/Card.tsx +0 -186
  84. package/src/Checkbox.tsx +0 -261
  85. package/src/CheckboxGroup.tsx +0 -127
  86. package/src/CircularProgress.tsx +0 -42
  87. package/src/CssBaseline.tsx +0 -20
  88. package/src/DataTable/DataTable.tsx +0 -968
  89. package/src/DataTable/DataTableRowActions.tsx +0 -132
  90. package/src/DataTable/DataTableSettings.tsx +0 -136
  91. package/src/DataTable/constants.ts +0 -13
  92. package/src/DataTable/index.tsx +0 -28
  93. package/src/DataTable/reorderDataRowsLocally.tsx +0 -48
  94. package/src/DataTable/useRowReordering.tsx +0 -232
  95. package/src/DataTable/useScrollIndication.tsx +0 -125
  96. package/src/DatePickers/DateField.tsx +0 -267
  97. package/src/DatePickers/DateFieldActionBar.tsx +0 -65
  98. package/src/DatePickers/DateFieldLocalizationProvider.tsx +0 -46
  99. package/src/DatePickers/DatePicker.test.tsx +0 -66
  100. package/src/DatePickers/DatePicker.tsx +0 -299
  101. package/src/DatePickers/DatePicker.types.d.ts +0 -14
  102. package/src/DatePickers/TimeZonePicker.tsx +0 -59
  103. package/src/DatePickers/datePickerTheme.tsx +0 -377
  104. package/src/DatePickers/index.ts +0 -15
  105. package/src/DatePickers/useDateFieldsTranslations.ts +0 -94
  106. package/src/DatePickers/useOdysseyDateFields.ts +0 -303
  107. package/src/Dialog.tsx +0 -178
  108. package/src/Drawer.tsx +0 -255
  109. package/src/EmptyState.tsx +0 -79
  110. package/src/ErrorMessageList.tsx +0 -56
  111. package/src/Field.tsx +0 -189
  112. package/src/FieldComponentProps.ts +0 -66
  113. package/src/FieldError.tsx +0 -59
  114. package/src/FieldHint.tsx +0 -72
  115. package/src/FieldLabel.tsx +0 -67
  116. package/src/Fieldset.tsx +0 -116
  117. package/src/FieldsetContext.tsx +0 -23
  118. package/src/FileUploader/FileUploadIllustration.tsx +0 -66
  119. package/src/FileUploader/FileUploadPreview.tsx +0 -151
  120. package/src/FileUploader/FileUploader.tsx +0 -311
  121. package/src/FileUploader/index.ts +0 -13
  122. package/src/Form.tsx +0 -185
  123. package/src/FormCheckedProps.ts +0 -59
  124. package/src/HintLink.tsx +0 -28
  125. package/src/HtmlProps.ts +0 -112
  126. package/src/IconWithTooltip.tsx +0 -90
  127. package/src/Link.tsx +0 -115
  128. package/src/MuiPropsChild.tsx +0 -42
  129. package/src/MuiPropsContext.ts +0 -18
  130. package/src/NativeSelect.tsx +0 -249
  131. package/src/NullElement.tsx +0 -13
  132. package/src/OdysseyCacheProvider.test.tsx +0 -39
  133. package/src/OdysseyCacheProvider.tsx +0 -86
  134. package/src/OdysseyDesignTokensContext.tsx +0 -23
  135. package/src/OdysseyProvider.tsx +0 -92
  136. package/src/OdysseyThemeProvider.test.tsx +0 -211
  137. package/src/OdysseyThemeProvider.tsx +0 -109
  138. package/src/OdysseyTranslationProvider.test.tsx +0 -95
  139. package/src/OdysseyTranslationProvider.tsx +0 -77
  140. package/src/OdysseyTranslationProvider.types.ts +0 -47
  141. package/src/Pagination/Pagination.test.tsx +0 -327
  142. package/src/Pagination/Pagination.tsx +0 -417
  143. package/src/Pagination/constants.ts +0 -13
  144. package/src/Pagination/index.ts +0 -15
  145. package/src/Pagination/usePagination.ts +0 -45
  146. package/src/PasswordField.tsx +0 -253
  147. package/src/Radio.tsx +0 -199
  148. package/src/RadioGroup.tsx +0 -164
  149. package/src/ScreenReaderText.tsx +0 -53
  150. package/src/SearchField.tsx +0 -240
  151. package/src/Select.tsx +0 -576
  152. package/src/Stack.tsx +0 -56
  153. package/src/Status.tsx +0 -67
  154. package/src/Surface.tsx +0 -61
  155. package/src/SvgIcon.ts +0 -22
  156. package/src/Switch.tsx +0 -425
  157. package/src/Tabs.tsx +0 -259
  158. package/src/Tag.tsx +0 -317
  159. package/src/TagList.tsx +0 -55
  160. package/src/TagListContext.tsx +0 -23
  161. package/src/TextField.tsx +0 -298
  162. package/src/Toast.tsx +0 -151
  163. package/src/ToastStack.tsx +0 -43
  164. package/src/Tooltip.tsx +0 -61
  165. package/src/Typography.test.tsx +0 -26
  166. package/src/Typography.tsx +0 -474
  167. package/src/createContrastColors.ts +0 -112
  168. package/src/createUniqueAlphabeticalId.test.ts +0 -22
  169. package/src/createUniqueAlphabeticalId.ts +0 -17
  170. package/src/createUniqueId.test.ts +0 -22
  171. package/src/createUniqueId.ts +0 -17
  172. package/src/getTypedObjectKeys.ts +0 -15
  173. package/src/hexToRgb.ts +0 -40
  174. package/src/i18n.ts +0 -110
  175. package/src/icons.generated/Add.tsx +0 -44
  176. package/src/icons.generated/AddCircle.tsx +0 -46
  177. package/src/icons.generated/Apps.tsx +0 -44
  178. package/src/icons.generated/ArrowBottom.tsx +0 -46
  179. package/src/icons.generated/ArrowDown.tsx +0 -46
  180. package/src/icons.generated/ArrowLeft.tsx +0 -46
  181. package/src/icons.generated/ArrowLowerLeft.tsx +0 -46
  182. package/src/icons.generated/ArrowLowerRight.tsx +0 -46
  183. package/src/icons.generated/ArrowRight.tsx +0 -46
  184. package/src/icons.generated/ArrowTop.tsx +0 -46
  185. package/src/icons.generated/ArrowUnsorted.tsx +0 -46
  186. package/src/icons.generated/ArrowUp.tsx +0 -46
  187. package/src/icons.generated/ArrowUpperLeft.tsx +0 -46
  188. package/src/icons.generated/ArrowUpperRight.tsx +0 -46
  189. package/src/icons.generated/Bug.tsx +0 -44
  190. package/src/icons.generated/Calendar.tsx +0 -46
  191. package/src/icons.generated/Call.tsx +0 -44
  192. package/src/icons.generated/Chat.tsx +0 -44
  193. package/src/icons.generated/Check.tsx +0 -44
  194. package/src/icons.generated/CheckCircleFilled.tsx +0 -47
  195. package/src/icons.generated/ChevronDown.tsx +0 -46
  196. package/src/icons.generated/ChevronLeft.tsx +0 -46
  197. package/src/icons.generated/ChevronRight.tsx +0 -46
  198. package/src/icons.generated/ChevronUp.tsx +0 -46
  199. package/src/icons.generated/Clock.tsx +0 -44
  200. package/src/icons.generated/Close.tsx +0 -44
  201. package/src/icons.generated/CloseCircleFilled.tsx +0 -47
  202. package/src/icons.generated/CollapseLeft.tsx +0 -46
  203. package/src/icons.generated/CollapseRight.tsx +0 -46
  204. package/src/icons.generated/Copy.tsx +0 -44
  205. package/src/icons.generated/Custom.tsx +0 -50
  206. package/src/icons.generated/DangerDiamond.tsx +0 -46
  207. package/src/icons.generated/DangerDiamondFilled.tsx +0 -47
  208. package/src/icons.generated/Delete.tsx +0 -44
  209. package/src/icons.generated/Deny.tsx +0 -44
  210. package/src/icons.generated/Devices.tsx +0 -46
  211. package/src/icons.generated/Directory.tsx +0 -46
  212. package/src/icons.generated/Documentation.tsx +0 -46
  213. package/src/icons.generated/Download.tsx +0 -46
  214. package/src/icons.generated/DragIndicator.tsx +0 -46
  215. package/src/icons.generated/Duo.tsx +0 -62
  216. package/src/icons.generated/Edit.tsx +0 -44
  217. package/src/icons.generated/Email.tsx +0 -49
  218. package/src/icons.generated/ExpandLeft.tsx +0 -46
  219. package/src/icons.generated/ExpandRight.tsx +0 -46
  220. package/src/icons.generated/ExternalLink.tsx +0 -44
  221. package/src/icons.generated/Fido2.tsx +0 -72
  222. package/src/icons.generated/Filter.tsx +0 -44
  223. package/src/icons.generated/Folder.tsx +0 -44
  224. package/src/icons.generated/Globe.tsx +0 -44
  225. package/src/icons.generated/GoogleAuth.tsx +0 -70
  226. package/src/icons.generated/Grid.tsx +0 -47
  227. package/src/icons.generated/Group.tsx +0 -44
  228. package/src/icons.generated/Hide.tsx +0 -44
  229. package/src/icons.generated/Home.tsx +0 -44
  230. package/src/icons.generated/Idp.tsx +0 -54
  231. package/src/icons.generated/InformationCircle.tsx +0 -47
  232. package/src/icons.generated/InformationCircleFilled.tsx +0 -47
  233. package/src/icons.generated/Link.tsx +0 -44
  234. package/src/icons.generated/List.tsx +0 -44
  235. package/src/icons.generated/Lock.tsx +0 -44
  236. package/src/icons.generated/More.tsx +0 -44
  237. package/src/icons.generated/Notification.tsx +0 -46
  238. package/src/icons.generated/OktaVerify.tsx +0 -46
  239. package/src/icons.generated/OnPremMfa.tsx +0 -52
  240. package/src/icons.generated/OneTimePassword.tsx +0 -65
  241. package/src/icons.generated/Password.tsx +0 -80
  242. package/src/icons.generated/Pause.tsx +0 -44
  243. package/src/icons.generated/QuestionCircle.tsx +0 -46
  244. package/src/icons.generated/QuestionCircleFilled.tsx +0 -47
  245. package/src/icons.generated/Refresh.tsx +0 -46
  246. package/src/icons.generated/Reset.tsx +0 -44
  247. package/src/icons.generated/Resume.tsx +0 -44
  248. package/src/icons.generated/Search.tsx +0 -44
  249. package/src/icons.generated/SecurityQuestion.tsx +0 -51
  250. package/src/icons.generated/Server.tsx +0 -44
  251. package/src/icons.generated/Settings.tsx +0 -46
  252. package/src/icons.generated/Show.tsx +0 -44
  253. package/src/icons.generated/SmartCard.tsx +0 -65
  254. package/src/icons.generated/Sms.tsx +0 -55
  255. package/src/icons.generated/Subtract.tsx +0 -46
  256. package/src/icons.generated/SymantecVip.tsx +0 -52
  257. package/src/icons.generated/Sync.tsx +0 -44
  258. package/src/icons.generated/ThumbsDown.tsx +0 -46
  259. package/src/icons.generated/ThumbsUp.tsx +0 -46
  260. package/src/icons.generated/Unlock.tsx +0 -44
  261. package/src/icons.generated/Upload.tsx +0 -44
  262. package/src/icons.generated/User.tsx +0 -44
  263. package/src/icons.generated/Video.tsx +0 -44
  264. package/src/icons.generated/VoiceCall.tsx +0 -62
  265. package/src/icons.generated/Warning.tsx +0 -46
  266. package/src/icons.generated/WarningFilled.tsx +0 -46
  267. package/src/icons.generated/Yubikey.tsx +0 -44
  268. package/src/icons.generated/index.ts +0 -107
  269. package/src/index.ts +0 -118
  270. package/src/inputUtils.ts +0 -80
  271. package/src/labs/AppTile.tsx +0 -421
  272. package/src/labs/DataFilters.tsx +0 -871
  273. package/src/labs/DataTable.tsx +0 -877
  274. package/src/labs/DataTablePagination.tsx +0 -88
  275. package/src/labs/DataView/BulkActionsMenu.tsx +0 -98
  276. package/src/labs/DataView/CardLayoutContent.tsx +0 -272
  277. package/src/labs/DataView/DataCard.tsx +0 -357
  278. package/src/labs/DataView/DataTable.tsx +0 -128
  279. package/src/labs/DataView/DataView.test.tsx +0 -1168
  280. package/src/labs/DataView/DataView.tsx +0 -504
  281. package/src/labs/DataView/DetailPanel.tsx +0 -31
  282. package/src/labs/DataView/LayoutSwitcher.tsx +0 -72
  283. package/src/labs/DataView/RowActions.tsx +0 -125
  284. package/src/labs/DataView/TableLayoutContent.tsx +0 -500
  285. package/src/labs/DataView/TableSettings.tsx +0 -144
  286. package/src/labs/DataView/componentTypes.ts +0 -129
  287. package/src/labs/DataView/constants.tsx +0 -28
  288. package/src/labs/DataView/dataTypes.ts +0 -83
  289. package/src/labs/DataView/fetchData.ts +0 -49
  290. package/src/labs/DataView/index.ts +0 -19
  291. package/src/labs/DataView/tableConstants.tsx +0 -137
  292. package/src/labs/DataView/testSupportData.tsx +0 -301
  293. package/src/labs/DataView/useFilterConversion.ts +0 -88
  294. package/src/labs/DatePickers/DateTimeField.tsx +0 -267
  295. package/src/labs/DatePickers/DateTimePicker.test.tsx +0 -70
  296. package/src/labs/DatePickers/DateTimePicker.tsx +0 -303
  297. package/src/labs/DatePickers/dateTimePickerTheme.ts +0 -216
  298. package/src/labs/DatePickers/index.ts +0 -13
  299. package/src/labs/GroupPicker.tsx +0 -261
  300. package/src/labs/OdysseyPickers/ComposablePicker.test.tsx +0 -32
  301. package/src/labs/OdysseyPickers/ComposablePicker.tsx +0 -188
  302. package/src/labs/OdysseyPickers/Picker.tsx +0 -381
  303. package/src/labs/OdysseyPickers/PickerVirtualizationListBox.tsx +0 -192
  304. package/src/labs/OdysseyPickers/PickerWithOptionAdornment.tsx +0 -429
  305. package/src/labs/OdysseyPickers/index.ts +0 -15
  306. package/src/labs/PageTemplate/Layout.tsx +0 -85
  307. package/src/labs/PageTemplate/PageTemplate.tsx +0 -234
  308. package/src/labs/PageTemplate/index.ts +0 -14
  309. package/src/labs/PaginatedTable.tsx +0 -290
  310. package/src/labs/README.md +0 -46
  311. package/src/labs/StaticTable.tsx +0 -131
  312. package/src/labs/UserProfile.tsx +0 -104
  313. package/src/labs/UserProfileMenuButton.tsx +0 -86
  314. package/src/labs/index.ts +0 -47
  315. package/src/labs/materialReactTableTypes.tsx +0 -19
  316. package/src/properties/odyssey-react-mui.properties +0 -140
  317. package/src/properties/translations/odyssey-react-mui_cs.properties +0 -140
  318. package/src/properties/translations/odyssey-react-mui_da.properties +0 -140
  319. package/src/properties/translations/odyssey-react-mui_de.properties +0 -140
  320. package/src/properties/translations/odyssey-react-mui_el.properties +0 -140
  321. package/src/properties/translations/odyssey-react-mui_es.properties +0 -140
  322. package/src/properties/translations/odyssey-react-mui_fi.properties +0 -140
  323. package/src/properties/translations/odyssey-react-mui_fr.properties +0 -140
  324. package/src/properties/translations/odyssey-react-mui_ht.properties +0 -140
  325. package/src/properties/translations/odyssey-react-mui_hu.properties +0 -140
  326. package/src/properties/translations/odyssey-react-mui_id.properties +0 -140
  327. package/src/properties/translations/odyssey-react-mui_it.properties +0 -140
  328. package/src/properties/translations/odyssey-react-mui_ja.properties +0 -140
  329. package/src/properties/translations/odyssey-react-mui_ko.properties +0 -140
  330. package/src/properties/translations/odyssey-react-mui_ms.properties +0 -140
  331. package/src/properties/translations/odyssey-react-mui_nb.properties +0 -140
  332. package/src/properties/translations/odyssey-react-mui_nl_NL.properties +0 -140
  333. package/src/properties/translations/odyssey-react-mui_ok_PL.properties +0 -126
  334. package/src/properties/translations/odyssey-react-mui_ok_SK.properties +0 -126
  335. package/src/properties/translations/odyssey-react-mui_pl.properties +0 -140
  336. package/src/properties/translations/odyssey-react-mui_pt_BR.properties +0 -140
  337. package/src/properties/translations/odyssey-react-mui_ro.properties +0 -140
  338. package/src/properties/translations/odyssey-react-mui_ru.properties +0 -140
  339. package/src/properties/translations/odyssey-react-mui_sv.properties +0 -140
  340. package/src/properties/translations/odyssey-react-mui_th.properties +0 -140
  341. package/src/properties/translations/odyssey-react-mui_tr.properties +0 -140
  342. package/src/properties/translations/odyssey-react-mui_uk.properties +0 -140
  343. package/src/properties/translations/odyssey-react-mui_vi.properties +0 -140
  344. package/src/properties/translations/odyssey-react-mui_zh_CN.properties +0 -140
  345. package/src/properties/translations/odyssey-react-mui_zh_TW.properties +0 -140
  346. package/src/properties/ts/odyssey-react-mui.ts +0 -1
  347. package/src/properties/ts/odyssey-react-mui_cs.ts +0 -1
  348. package/src/properties/ts/odyssey-react-mui_da.ts +0 -1
  349. package/src/properties/ts/odyssey-react-mui_de.ts +0 -1
  350. package/src/properties/ts/odyssey-react-mui_el.ts +0 -1
  351. package/src/properties/ts/odyssey-react-mui_es.ts +0 -1
  352. package/src/properties/ts/odyssey-react-mui_fi.ts +0 -1
  353. package/src/properties/ts/odyssey-react-mui_fr.ts +0 -1
  354. package/src/properties/ts/odyssey-react-mui_ht.ts +0 -1
  355. package/src/properties/ts/odyssey-react-mui_hu.ts +0 -1
  356. package/src/properties/ts/odyssey-react-mui_id.ts +0 -1
  357. package/src/properties/ts/odyssey-react-mui_it.ts +0 -1
  358. package/src/properties/ts/odyssey-react-mui_ja.ts +0 -1
  359. package/src/properties/ts/odyssey-react-mui_ko.ts +0 -1
  360. package/src/properties/ts/odyssey-react-mui_ms.ts +0 -1
  361. package/src/properties/ts/odyssey-react-mui_nb.ts +0 -1
  362. package/src/properties/ts/odyssey-react-mui_nl_NL.ts +0 -1
  363. package/src/properties/ts/odyssey-react-mui_ok_PL.ts +0 -1
  364. package/src/properties/ts/odyssey-react-mui_ok_SK.ts +0 -1
  365. package/src/properties/ts/odyssey-react-mui_pl.ts +0 -1
  366. package/src/properties/ts/odyssey-react-mui_pt_BR.ts +0 -1
  367. package/src/properties/ts/odyssey-react-mui_ro.ts +0 -1
  368. package/src/properties/ts/odyssey-react-mui_ru.ts +0 -1
  369. package/src/properties/ts/odyssey-react-mui_sv.ts +0 -1
  370. package/src/properties/ts/odyssey-react-mui_th.ts +0 -1
  371. package/src/properties/ts/odyssey-react-mui_tr.ts +0 -1
  372. package/src/properties/ts/odyssey-react-mui_uk.ts +0 -1
  373. package/src/properties/ts/odyssey-react-mui_vi.ts +0 -1
  374. package/src/properties/ts/odyssey-react-mui_zh_CN.ts +0 -1
  375. package/src/properties/ts/odyssey-react-mui_zh_TW.ts +0 -1
  376. package/src/remUtils.ts +0 -27
  377. package/src/shadow-dom/index.ts +0 -13
  378. package/src/shadow-dom/shadow-dom.test.ts +0 -24
  379. package/src/shadow-dom/shadow-dom.ts +0 -54
  380. package/src/test-selectors/getByQuerySelector.ts +0 -176
  381. package/src/test-selectors/getComputedAccessibleErrorMessageText.ts +0 -52
  382. package/src/test-selectors/getComputedAccessibleText.ts +0 -36
  383. package/src/test-selectors/index.ts +0 -15
  384. package/src/test-selectors/interpolateString.ts +0 -41
  385. package/src/test-selectors/linkedHtmlSelectors.ts +0 -73
  386. package/src/test-selectors/queryOdysseySelector.ts +0 -36
  387. package/src/test-selectors/querySelector.ts +0 -249
  388. package/src/test-selectors/sanityChecks.ts +0 -53
  389. package/src/test-selectors/testSelector.ts +0 -143
  390. package/src/theme/components.tsx +0 -3275
  391. package/src/theme/components.types.ts +0 -111
  392. package/src/theme/createOdysseyMuiTheme.ts +0 -54
  393. package/src/theme/index.ts +0 -13
  394. package/src/theme/mixins.ts +0 -29
  395. package/src/theme/mixins.types.ts +0 -31
  396. package/src/theme/palette.ts +0 -112
  397. package/src/theme/palette.types.ts +0 -24
  398. package/src/theme/shape.ts +0 -31
  399. package/src/theme/spacing.ts +0 -34
  400. package/src/theme/theme.ts +0 -13
  401. package/src/theme/typography.ts +0 -137
  402. package/src/theme/typography.types.ts +0 -41
  403. package/src/theme/useContrastMode.test.tsx +0 -504
  404. package/src/ui-shell/AppSwitcher/AppSwitcher.tsx +0 -94
  405. package/src/ui-shell/AppSwitcher/AppSwitcherApp.tsx +0 -146
  406. package/src/ui-shell/AppSwitcher/OktaAura.tsx +0 -50
  407. package/src/ui-shell/AppSwitcher/index.ts +0 -13
  408. package/src/ui-shell/SideNav/CollapseIcon.tsx +0 -34
  409. package/src/ui-shell/SideNav/HandleIcon.tsx +0 -35
  410. package/src/ui-shell/SideNav/NavAccordion.tsx +0 -243
  411. package/src/ui-shell/SideNav/OktaLogo.tsx +0 -34
  412. package/src/ui-shell/SideNav/SideNav.test.tsx +0 -326
  413. package/src/ui-shell/SideNav/SideNav.tsx +0 -810
  414. package/src/ui-shell/SideNav/SideNavFooterContent.tsx +0 -85
  415. package/src/ui-shell/SideNav/SideNavHeader.tsx +0 -134
  416. package/src/ui-shell/SideNav/SideNavItemContent.tsx +0 -402
  417. package/src/ui-shell/SideNav/SideNavItemContentContext.tsx +0 -29
  418. package/src/ui-shell/SideNav/SideNavItemLinkContent.tsx +0 -90
  419. package/src/ui-shell/SideNav/SideNavLogo.tsx +0 -65
  420. package/src/ui-shell/SideNav/SideNavToggleButton.tsx +0 -272
  421. package/src/ui-shell/SideNav/SortableList/SortableItem.tsx +0 -237
  422. package/src/ui-shell/SideNav/SortableList/SortableList.tsx +0 -132
  423. package/src/ui-shell/SideNav/SortableList/SortableOverlay.tsx +0 -34
  424. package/src/ui-shell/SideNav/index.ts +0 -16
  425. package/src/ui-shell/SideNav/types.ts +0 -224
  426. package/src/ui-shell/TopNav/TopNav.tsx +0 -109
  427. package/src/ui-shell/TopNav/TopNavLinksList.tsx +0 -68
  428. package/src/ui-shell/TopNav/TopNavListItem.tsx +0 -209
  429. package/src/ui-shell/TopNav/index.ts +0 -13
  430. package/src/ui-shell/UiShell.test.tsx +0 -366
  431. package/src/ui-shell/UiShell.tsx +0 -153
  432. package/src/ui-shell/UiShellContent.tsx +0 -350
  433. package/src/ui-shell/UiShellProvider.tsx +0 -103
  434. package/src/ui-shell/bufferLatest.test.ts +0 -79
  435. package/src/ui-shell/bufferLatest.ts +0 -64
  436. package/src/ui-shell/createMessageBus.test.ts +0 -115
  437. package/src/ui-shell/createMessageBus.ts +0 -53
  438. package/src/ui-shell/createStore.test.ts +0 -103
  439. package/src/ui-shell/createStore.ts +0 -37
  440. package/src/ui-shell/index.ts +0 -21
  441. package/src/ui-shell/renderUiShell.test.tsx +0 -203
  442. package/src/ui-shell/renderUiShell.tsx +0 -158
  443. package/src/ui-shell/useHasUiShell.ts +0 -25
  444. package/src/ui-shell/useScrollState.ts +0 -59
  445. package/src/useAutocomplete.tsx +0 -184
  446. package/src/useContrastMode.tsx +0 -143
  447. package/src/useNormalizedKey.ts +0 -17
  448. package/src/useUniqueAlphabeticalId.ts +0 -21
  449. package/src/useUniqueId.ts +0 -21
  450. package/src/web-component/createReactRootElements.test.ts +0 -40
  451. package/src/web-component/createReactRootElements.ts +0 -39
  452. package/src/web-component/index.ts +0 -13
  453. package/src/web-component/renderReactInWebComponent.test.tsx +0 -128
  454. package/src/web-component/renderReactInWebComponent.ts +0 -135
  455. package/tsconfig.json +0 -16
  456. package/tsconfig.production.json +0 -13
  457. package/vitest.config.ts +0 -36
  458. package/vitest.setup.ts +0 -32
@@ -379,7 +379,8 @@ const SideNav = ({
379
379
  children: _jsx(SideNavItemContent, {
380
380
  ...childProps,
381
381
  scrollRef: getRefIfThisIsFirstNodeWithIsSelected(childProps.id),
382
- onItemSelected: setSelectedItem
382
+ onItemSelected: setSelectedItem,
383
+ translate: childProps.translate
383
384
  })
384
385
  }, childProps.id)
385
386
  };
@@ -1 +1 @@
1
- {"version":3,"file":"SideNav.js","names":["styled","memo","useMemo","useState","useCallback","useRef","useEffect","createElement","_createElement","useTranslation","arrayMove","ErrorBoundary","NavAccordion","useOdysseyDesignTokens","OdysseyThemeProvider","SideNavHeader","SideNavItemContent","StyledSideNavListItem","SideNavFooterContent","SideNavItemContentContext","SideNavToggleButton","SortableList","Overline","useUiShellContext","jsx","_jsx","jsxs","_jsxs","DEFAULT_SIDE_NAV_WIDTH","SIDENAV_COLLAPSE_ICON_POSITION","StyledCollapsibleContent","shouldForwardProp","prop","odysseyDesignTokens","isSideNavCollapsed","position","display","gridTemplateColumns","height","transition","TransitionDurationMain","transitionTimingFunction","TransitionTimingMain","overflow","opacity","StyledOpacityTransitionContainer","gridTemplateRows","StyledSideNav","backgroundColor","isAppContentWhiteBackground","HueNeutralWhite","borderRightWidth","BorderWidthMain","borderRightStyle","BorderStyleMain","borderRightColor","HueNeutral100","HueNeutral200","content","right","top","transform","width","Spacing2","zIndex","Spacing3","SideNavHeaderContainer","borderColor","hasContentScrolled","flexShrink","borderBottomWidth","borderBottomStyle","borderBottomColor","concat","SideNavListContainer","padding","listStyle","listStyleType","margin","SideNavScrollableContainer","flex","overflowY","paddingInline","SectionHeaderContainer","contrastFontColor","paddingBlock","Spacing1","Spacing4","marginBlock","color","HueNeutral600","SideNavFooter","sideNavBackgroundColor","PersistentSideNavFooter","isContentScrollable","transitionProperty","transitionDuration","transitionTiming","boxShadow","SideNavFooterItemsContainer","sideNavContrastColors","flexWrap","alignItems","fontSize","TypographySizeOverline","fontColor","textDecoration","HueNeutral900","LoadingItemContainer","gap","getHasScrollableContent","scrollableContainer","scrollHeight","clientHeight","LoadingItem","children","_Skeleton","variant","SideNav","appName","footerComponent","footerItems","hasCustomFooter","isCollapsible","isCollapsed","isCompact","isLoading","logoProps","onCollapse","onExpand","onSort","sideNavItems","setSideNavCollapsed","setHasContentScrolled","setIsContentScrollable","sideNavItemsList","updateSideNavItemsList","uiShellContext","t","scrollableContentRef","resizeObserverRef","intersectionObserverRef","blankElement","updateIsContentScrollable","current","parentElement","resizeObserverDebounceTimer","ResizeObserver","cancelAnimationFrame","requestAnimationFrame","observe","IntersectionObserver","entries","isIntersecting","slice","sort","a","b","time","at","root","threshold","ulElement","liElement","Array","from","disconnect","scrollIntoViewRef","firstSideNavItemIdWithIsSelected","flattenedItems","flatMap","sideNavItem","nestedNavItems","firstItemWithIsSelected","find","isSelected","id","scrollIntoView","getRefIfThisIsFirstNodeWithIsSelected","itemId","undefined","sideNavItemContentProviderValue","depth","setSelectedItem","selectedItemId","updatedSideNavItems","map","item","childItem","processedSideNavItems","childNavItems","childProps","isDisabled","isSortable","navItem","Provider","value","scrollRef","onItemSelected","sideNavExpandClickHandler","sideNavExpandKeyHandler","event","key","code","preventDefault","setSortedItems","parentId","activeId","activeIndex","overIndex","sortedSideNavItems","appBackgroundColor","ariaControls","onClick","onKeyDown","role","ref","fill","_","index","label","isSectionHeader","startIcon","isDefaultExpanded","isExpanded","fallback","component","disabled","items","onChange","renderItem","sortableItem","Item","MemoizedSideNav","displayName"],"sources":["../../../../src/ui-shell/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 useRef,\n useEffect,\n KeyboardEventHandler,\n} from \"react\";\nimport { Skeleton } from \"@mui/material\";\nimport { useTranslation } from \"react-i18next\";\nimport { arrayMove } from \"@dnd-kit/sortable\";\nimport { UniqueIdentifier } from \"@dnd-kit/core\";\nimport { ErrorBoundary } from \"react-error-boundary\";\nimport { Property } from \"csstype\";\n\nimport { ContrastColors } from \"../../createContrastColors.js\";\nimport { NavAccordion } from \"./NavAccordion.js\";\nimport {\n DesignTokens,\n useOdysseyDesignTokens,\n} from \"../../OdysseyDesignTokensContext.js\";\nimport { OdysseyThemeProvider } from \"../../OdysseyThemeProvider.js\";\nimport type { SideNavProps } from \"./types.js\";\nimport { SideNavHeader } from \"./SideNavHeader.js\";\nimport {\n SideNavItemContent,\n StyledSideNavListItem,\n} from \"./SideNavItemContent.js\";\nimport { SideNavFooterContent } from \"./SideNavFooterContent.js\";\nimport { SideNavItemContentContext } from \"./SideNavItemContentContext.js\";\nimport { SideNavToggleButton } from \"./SideNavToggleButton.js\";\nimport { SortableList } from \"./SortableList/SortableList.js\";\nimport { Overline } from \"../../Typography.js\";\nimport {\n UiShellColors,\n useUiShellContext,\n} from \"../../ui-shell/UiShellProvider.js\";\n\nexport const DEFAULT_SIDE_NAV_WIDTH = \"300px\";\n\n// The side nav collapse icon is placed absolutely from the top (Logo container + nav header height)\n// to align it in the middle of the nav header text\nexport const SIDENAV_COLLAPSE_ICON_POSITION = \"77px\";\n\nconst StyledCollapsibleContent = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" && prop !== \"isSideNavCollapsed\",\n})<{\n odysseyDesignTokens: DesignTokens;\n isSideNavCollapsed: boolean;\n}>(({ odysseyDesignTokens, isSideNavCollapsed }) => ({\n position: \"relative\",\n display: \"inline-grid\",\n gridTemplateColumns: DEFAULT_SIDE_NAV_WIDTH,\n height: \"100%\",\n transition: `grid-template-columns ${odysseyDesignTokens.TransitionDurationMain}, opacity 300ms`,\n transitionTimingFunction: odysseyDesignTokens.TransitionTimingMain,\n overflow: \"hidden\",\n\n ...(isSideNavCollapsed && {\n gridTemplateColumns: 0,\n opacity: 0,\n }),\n}));\n\nconst StyledOpacityTransitionContainer = 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 display: \"inline-grid\",\n gridTemplateRows: \"max-content 1fr max-content\",\n height: \"100%\",\n transition: `opacity 50ms`,\n transitionTimingFunction: odysseyDesignTokens.TransitionTimingMain,\n overflow: \"hidden\",\n\n ...(isSideNavCollapsed && {\n opacity: 0,\n }),\n }),\n);\n\nconst StyledSideNav = styled(\"nav\", {\n shouldForwardProp: (prop) =>\n prop !== \"backgroundColor\" &&\n prop !== \"odysseyDesignTokens\" &&\n prop !== \"isAppContentWhiteBackground\" &&\n prop !== \"isSideNavCollapsed\",\n})<{\n isAppContentWhiteBackground: boolean;\n backgroundColor?: UiShellColors[\"sideNavBackgroundColor\"];\n isSideNavCollapsed: boolean;\n odysseyDesignTokens: DesignTokens;\n}>(\n ({\n backgroundColor,\n isAppContentWhiteBackground,\n isSideNavCollapsed,\n odysseyDesignTokens,\n }) => ({\n position: \"relative\",\n display: \"inline-block\",\n height: \"100%\",\n backgroundColor: backgroundColor || odysseyDesignTokens.HueNeutralWhite,\n\n ...(isAppContentWhiteBackground && {\n borderRightWidth: odysseyDesignTokens.BorderWidthMain,\n borderRightStyle:\n odysseyDesignTokens.BorderStyleMain as Property.BorderRightStyle,\n borderRightColor: odysseyDesignTokens.HueNeutral100,\n }),\n\n \"&::after\": {\n backgroundColor: odysseyDesignTokens.HueNeutral200,\n content: \"''\",\n height: \"100%\",\n opacity: 0,\n position: \"absolute\",\n right: 0,\n top: 0,\n transform: `translateX(0)`,\n transition: `opacity ${odysseyDesignTokens.TransitionDurationMain}, transform ${odysseyDesignTokens.TransitionDurationMain}`,\n width: odysseyDesignTokens.Spacing2,\n zIndex: 2,\n },\n\n \"&:has([data-sidenav-toggle='true']:hover), &:has([data-sidenav-toggle='true']:focus-visible)\":\n {\n ...(isSideNavCollapsed && {\n \"&::after\": {\n opacity: 1,\n transform: `translateX(100%)`,\n },\n\n \"[data-sidenav-toggle='true']\": {\n transform: `translate3d(calc(100% + ${odysseyDesignTokens.Spacing3}), 0, 0)`,\n },\n }),\n },\n\n \"[data-sidenav-toggle='true']\": {\n position: \"absolute\",\n top: SIDENAV_COLLAPSE_ICON_POSITION,\n right: 0,\n transition: `transform ${odysseyDesignTokens.TransitionDurationMain}`,\n transform: `translate3d(100%, 0, 0)`,\n },\n }),\n);\n\nconst SideNavHeaderContainer = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"borderColor\" &&\n prop !== \"hasContentScrolled\" &&\n prop !== \"odysseyDesignTokens\",\n})(\n ({\n borderColor,\n hasContentScrolled,\n odysseyDesignTokens,\n }: {\n borderColor: ContrastColors[\"fontColor\"];\n hasContentScrolled: boolean;\n odysseyDesignTokens: DesignTokens;\n }) => ({\n flexShrink: 0,\n // The bottom border should appear only if the scrollable region has been scrolled\n ...(hasContentScrolled && {\n borderBottomWidth: odysseyDesignTokens.BorderWidthMain,\n borderBottomStyle:\n odysseyDesignTokens.BorderStyleMain as Property.BorderBottomStyle,\n borderBottomColor: odysseyDesignTokens.HueNeutral100,\n\n ...(borderColor && {\n borderBottomColor: borderColor.concat(\"15\"),\n }),\n }),\n }),\n);\n\nconst SideNavListContainer = styled(\"ul\")(() => ({\n padding: 0,\n listStyle: \"none\",\n listStyleType: \"none\",\n margin: 0,\n}));\n\nconst SideNavScrollableContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{ odysseyDesignTokens: DesignTokens }>(({ odysseyDesignTokens }) => ({\n display: \"grid\",\n gridTemplateRows: \"1fr max-content\",\n flex: \"1 1 100%\",\n overflowY: \"auto\",\n paddingInline: odysseyDesignTokens.Spacing2,\n}));\n\nconst SectionHeaderContainer = styled(\"li\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" && prop !== \"contrastFontColor\",\n})(\n ({\n contrastFontColor,\n odysseyDesignTokens,\n }: {\n contrastFontColor: ContrastColors[\"fontColor\"];\n odysseyDesignTokens: DesignTokens;\n }) => ({\n paddingBlock: odysseyDesignTokens.Spacing1,\n paddingInline: odysseyDesignTokens.Spacing4,\n marginBlock: `${odysseyDesignTokens.Spacing3}`,\n color: contrastFontColor || odysseyDesignTokens.HueNeutral600,\n }),\n);\n\nconst SideNavFooter = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" && prop !== \"sideNavBackgroundColor\",\n})(\n ({\n odysseyDesignTokens,\n sideNavBackgroundColor,\n }: {\n odysseyDesignTokens: DesignTokens;\n sideNavBackgroundColor?: UiShellColors[\"sideNavBackgroundColor\"];\n }) => ({\n flexShrink: 0,\n padding: odysseyDesignTokens.Spacing4,\n backgroundColor: odysseyDesignTokens.HueNeutralWhite,\n\n ...(sideNavBackgroundColor && {\n backgroundColor: sideNavBackgroundColor,\n }),\n }),\n);\n\nconst PersistentSideNavFooter = styled(SideNavFooter, {\n shouldForwardProp: (prop) =>\n prop !== \"isContentScrollable\" &&\n prop !== \"odysseyDesignTokens\" &&\n prop !== \"sideNavBackgroundColor\",\n})(\n ({\n isContentScrollable,\n odysseyDesignTokens,\n sideNavBackgroundColor,\n }: {\n isContentScrollable: boolean;\n odysseyDesignTokens: DesignTokens;\n sideNavBackgroundColor?: UiShellColors[\"sideNavBackgroundColor\"];\n }) => ({\n transitionProperty: \"box-shadow\",\n transitionDuration: odysseyDesignTokens.TransitionDurationMain,\n transitionTiming: odysseyDesignTokens.TransitionTimingMain,\n zIndex: 2,\n // The box shadow should appear above the footer only if the scrollable region has overflow\n ...(isContentScrollable && {\n boxShadow: \"0px -8px 8px -8px rgba(39, 39, 39, 0.08)\",\n }),\n ...(sideNavBackgroundColor && {\n backgroundColor: sideNavBackgroundColor,\n }),\n }),\n);\n\nconst SideNavFooterItemsContainer = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" && prop !== \"sideNavContrastColors\",\n})<{\n odysseyDesignTokens: DesignTokens;\n sideNavContrastColors: UiShellColors[\"sideNavContrastColors\"];\n}>(({ odysseyDesignTokens, sideNavContrastColors }) => ({\n display: \"flex\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n fontSize: odysseyDesignTokens.TypographySizeOverline,\n\n \"a, span\": {\n color: odysseyDesignTokens.HueNeutral600,\n transition: `color ${odysseyDesignTokens.TransitionDurationMain}`,\n\n \"&:visited\": {\n color: odysseyDesignTokens.HueNeutral600,\n\n ...(sideNavContrastColors?.fontColor && {\n color: sideNavContrastColors?.fontColor,\n }),\n },\n\n \"&:hover\": {\n textDecoration: \"none\",\n color: odysseyDesignTokens.HueNeutral900,\n\n ...(sideNavContrastColors?.fontColor && {\n color: sideNavContrastColors?.fontColor,\n }),\n },\n\n ...(sideNavContrastColors?.fontColor && {\n color: sideNavContrastColors?.fontColor,\n }),\n },\n}));\n\nconst LoadingItemContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{ odysseyDesignTokens: DesignTokens }>(({ odysseyDesignTokens }) => ({\n alignItems: \"center\",\n display: \"flex\",\n gap: odysseyDesignTokens.Spacing2,\n paddingBlock: odysseyDesignTokens.Spacing2,\n paddingInline: odysseyDesignTokens.Spacing4,\n}));\n\nconst getHasScrollableContent = (scrollableContainer: HTMLElement) =>\n scrollableContainer.scrollHeight > scrollableContainer.clientHeight;\n\nconst LoadingItem = () => {\n const odysseyDesignTokens: DesignTokens = useOdysseyDesignTokens();\n return (\n <LoadingItemContainer odysseyDesignTokens={odysseyDesignTokens}>\n <Skeleton\n variant=\"circular\"\n width={odysseyDesignTokens.Spacing4}\n height={odysseyDesignTokens.Spacing4}\n />\n <Skeleton variant=\"rounded\" width=\"100%\" />\n </LoadingItemContainer>\n );\n};\n\nconst SideNav = ({\n appName,\n footerComponent,\n footerItems,\n hasCustomFooter,\n isCollapsible,\n isCollapsed = false,\n isCompact,\n isLoading,\n logoProps,\n onCollapse,\n onExpand,\n onSort,\n sideNavItems,\n}: SideNavProps) => {\n const [isSideNavCollapsed, setSideNavCollapsed] = useState(isCollapsed);\n const [hasContentScrolled, setHasContentScrolled] = useState(false);\n const [isContentScrollable, setIsContentScrollable] = useState(false);\n const [sideNavItemsList, updateSideNavItemsList] = useState(sideNavItems);\n\n const uiShellContext = useUiShellContext();\n const odysseyDesignTokens: DesignTokens = useOdysseyDesignTokens();\n const { t } = useTranslation();\n\n const scrollableContentRef = useRef<HTMLUListElement>(null);\n const resizeObserverRef = useRef<ResizeObserver | null>(null);\n const intersectionObserverRef = useRef<IntersectionObserver | null>(null);\n\n const blankElement = useMemo(() => <div />, []);\n\n // The default value (sideNavItems) passed to useState is ONLY used by the useState hook for\n // the very first value. Subsequent updates to the prop (sideNavItems) need to cause the state\n // to update!\n useEffect(() => updateSideNavItemsList(sideNavItems), [sideNavItems]);\n\n // update sidenav collapse status\n useEffect(() => setSideNavCollapsed(isCollapsed), [isCollapsed]);\n\n useEffect(() => {\n // This is called directly in this effect AND perhaps as a result of the ResizeObserver\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\n if (intersectionObserverRef.current && scrollableContentRef.current) {\n const ulElement = scrollableContentRef.current;\n const [liElement] = Array.from(ulElement?.children || []);\n\n if (liElement) {\n intersectionObserverRef.current.observe(liElement);\n }\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 }, [sideNavItemsList]);\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 = sideNavItemsList.flatMap((sideNavItem) =>\n sideNavItem.nestedNavItems\n ? [sideNavItem, ...sideNavItem.nestedNavItems]\n : sideNavItem,\n );\n const firstItemWithIsSelected = flattenedItems.find(\n (sideNavItem) => sideNavItem.isSelected,\n );\n return firstItemWithIsSelected?.id;\n }, [sideNavItemsList]);\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]);\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 sideNavItemContentProviderValue = useMemo(\n () => ({ isCompact, depth: 1 }),\n [isCompact],\n );\n\n const setSelectedItem = useCallback(\n (selectedItemId: string) => {\n const updatedSideNavItems = sideNavItemsList.map((item) => {\n if (item.id === selectedItemId) {\n item.isSelected = true;\n } else if (item.isSelected) {\n delete item.isSelected;\n }\n\n return item.nestedNavItems\n ? {\n ...item,\n nestedNavItems: item.nestedNavItems.map((childItem) => {\n if (childItem.id === selectedItemId) {\n childItem.isSelected = true;\n } else if (childItem.isSelected) {\n delete childItem.isSelected;\n }\n return childItem;\n }),\n }\n : item;\n });\n updateSideNavItemsList(updatedSideNavItems);\n },\n [sideNavItemsList],\n );\n\n const processedSideNavItems = useMemo(() => {\n return sideNavItemsList?.map((item) => ({\n ...item,\n childNavItems: item.nestedNavItems?.map((childProps) => {\n return {\n id: childProps.id,\n isSelected: childProps.isSelected,\n isDisabled: childProps.isDisabled,\n isSortable: childProps.isSortable,\n navItem: (\n <SideNavItemContentContext.Provider\n value={{\n ...sideNavItemContentProviderValue,\n depth: 2,\n isSortable: item.isSortable,\n }}\n key={childProps.id}\n >\n <SideNavItemContent\n {...childProps}\n scrollRef={getRefIfThisIsFirstNodeWithIsSelected(childProps.id)}\n onItemSelected={setSelectedItem}\n />\n </SideNavItemContentContext.Provider>\n ),\n };\n }),\n }));\n }, [\n getRefIfThisIsFirstNodeWithIsSelected,\n sideNavItemsList,\n sideNavItemContentProviderValue,\n setSelectedItem,\n ]);\n\n const sideNavExpandClickHandler = useCallback(() => {\n if (isSideNavCollapsed) {\n onExpand?.();\n } else {\n onCollapse?.();\n }\n\n setSideNavCollapsed(!isSideNavCollapsed);\n }, [isSideNavCollapsed, setSideNavCollapsed, onExpand, onCollapse]);\n\n const sideNavExpandKeyHandler = useCallback<\n KeyboardEventHandler<HTMLButtonElement>\n >(\n (event) => {\n if (event?.key === \"Enter\" || event?.code === \"Space\") {\n event.preventDefault();\n sideNavExpandClickHandler();\n }\n },\n [sideNavExpandClickHandler],\n );\n\n const setSortedItems = useCallback(\n (\n parentId: string,\n activeId: UniqueIdentifier,\n activeIndex: number,\n overIndex: number,\n ) => {\n const sortedSideNavItems = sideNavItemsList.map((item) =>\n item.id === parentId && item.nestedNavItems\n ? {\n ...item,\n nestedNavItems: arrayMove(\n item.nestedNavItems,\n activeIndex,\n overIndex,\n ),\n }\n : item,\n );\n updateSideNavItemsList(sortedSideNavItems);\n onSort?.(sortedSideNavItems, parentId, activeId, activeIndex, overIndex);\n },\n [onSort, sideNavItemsList],\n );\n\n return (\n <StyledSideNav\n aria-label={t(\"navigation.label\")}\n backgroundColor={uiShellContext?.sideNavBackgroundColor}\n id=\"side-nav-expandable\"\n isAppContentWhiteBackground={\n uiShellContext?.appBackgroundColor ===\n odysseyDesignTokens.HueNeutralWhite\n }\n isSideNavCollapsed={isSideNavCollapsed}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n {isCollapsible && (\n <SideNavToggleButton\n ariaControls=\"side-nav-expandable\"\n isSideNavCollapsed={isSideNavCollapsed}\n onClick={sideNavExpandClickHandler}\n onKeyDown={sideNavExpandKeyHandler}\n />\n )}\n <OdysseyThemeProvider>\n <StyledCollapsibleContent\n data-se=\"collapsible-region\"\n isSideNavCollapsed={isSideNavCollapsed}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <StyledOpacityTransitionContainer\n isSideNavCollapsed={isSideNavCollapsed}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <SideNavHeaderContainer\n hasContentScrolled={hasContentScrolled}\n odysseyDesignTokens={odysseyDesignTokens}\n borderColor={uiShellContext?.sideNavContrastColors?.fontColor}\n >\n <SideNavHeader\n appName={appName}\n isLoading={isLoading}\n logoProps={logoProps}\n />\n </SideNavHeaderContainer>\n <SideNavScrollableContainer\n odysseyDesignTokens={odysseyDesignTokens}\n data-se=\"scrollable-region\"\n >\n <SideNavListContainer role=\"none\" ref={scrollableContentRef}>\n {isLoading\n ? Array(6)\n .fill(null)\n .map((_, index) => <LoadingItem key={index} />)\n : processedSideNavItems?.map((item) => {\n const {\n id,\n label,\n isSectionHeader,\n startIcon,\n childNavItems,\n isSortable,\n isDefaultExpanded,\n isDisabled,\n isExpanded,\n } = item;\n\n if (isSectionHeader) {\n return (\n <ErrorBoundary fallback={blankElement}>\n <SectionHeaderContainer\n contrastFontColor={\n uiShellContext?.sideNavContrastColors?.fontColor\n }\n id={id}\n key={id}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <Overline component=\"h3\">{label}</Overline>\n </SectionHeaderContainer>\n </ErrorBoundary>\n );\n } else if (childNavItems) {\n return (\n <ErrorBoundary fallback={blankElement}>\n <StyledSideNavListItem\n id={id}\n key={id}\n odysseyDesignTokens={odysseyDesignTokens}\n disabled={isDisabled}\n aria-disabled={isDisabled}\n >\n <NavAccordion\n label={label}\n isCompact={isCompact}\n isDefaultExpanded={isDefaultExpanded}\n isExpanded={isExpanded}\n startIcon={startIcon}\n isDisabled={isDisabled}\n >\n <SideNavListContainer role=\"none\">\n {isSortable ? (\n <SortableList\n parentId={item.id}\n items={childNavItems}\n onChange={setSortedItems}\n renderItem={(sortableItem) => (\n <SortableList.Item\n id={sortableItem.id}\n isDisabled={sortableItem.isDisabled}\n isSelected={sortableItem.isSelected}\n isSortable={sortableItem.isSortable}\n >\n {sortableItem.navItem}\n </SortableList.Item>\n )}\n />\n ) : (\n childNavItems.map((item) => item.navItem)\n )}\n </SideNavListContainer>\n </NavAccordion>\n </StyledSideNavListItem>\n </ErrorBoundary>\n );\n } else {\n return (\n <ErrorBoundary fallback={blankElement}>\n <SideNavItemContentContext.Provider\n key={item.id}\n value={sideNavItemContentProviderValue}\n >\n <SideNavItemContent\n {...item}\n key={item.id}\n onItemSelected={setSelectedItem}\n scrollRef={getRefIfThisIsFirstNodeWithIsSelected(\n item.id,\n )}\n startIcon={item.startIcon}\n />\n </SideNavItemContentContext.Provider>\n </ErrorBoundary>\n );\n }\n })}\n </SideNavListContainer>\n {!isLoading && footerItems && !hasCustomFooter && (\n <SideNavFooter\n odysseyDesignTokens={odysseyDesignTokens}\n sideNavBackgroundColor={\n uiShellContext?.sideNavBackgroundColor\n }\n >\n <SideNavFooterItemsContainer\n odysseyDesignTokens={odysseyDesignTokens}\n sideNavContrastColors={\n uiShellContext?.sideNavContrastColors\n }\n >\n <SideNavFooterContent footerItems={footerItems} />\n </SideNavFooterItemsContainer>\n </SideNavFooter>\n )}\n </SideNavScrollableContainer>\n {!isLoading && !footerItems && hasCustomFooter && (\n <PersistentSideNavFooter\n isContentScrollable={isContentScrollable}\n odysseyDesignTokens={odysseyDesignTokens}\n sideNavBackgroundColor={uiShellContext?.sideNavBackgroundColor}\n >\n {footerComponent}\n </PersistentSideNavFooter>\n )}\n </StyledOpacityTransitionContainer>\n </StyledCollapsibleContent>\n </OdysseyThemeProvider>\n </StyledSideNav>\n );\n};\n\nconst MemoizedSideNav = memo(SideNav);\nMemoizedSideNav.displayName = \"SideNav\";\n\nexport { MemoizedSideNav as SideNav };\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"SideNav.js","names":["styled","memo","useMemo","useState","useCallback","useRef","useEffect","createElement","_createElement","useTranslation","arrayMove","ErrorBoundary","NavAccordion","useOdysseyDesignTokens","OdysseyThemeProvider","SideNavHeader","SideNavItemContent","StyledSideNavListItem","SideNavFooterContent","SideNavItemContentContext","SideNavToggleButton","SortableList","Overline","useUiShellContext","jsx","_jsx","jsxs","_jsxs","DEFAULT_SIDE_NAV_WIDTH","SIDENAV_COLLAPSE_ICON_POSITION","StyledCollapsibleContent","shouldForwardProp","prop","odysseyDesignTokens","isSideNavCollapsed","position","display","gridTemplateColumns","height","transition","TransitionDurationMain","transitionTimingFunction","TransitionTimingMain","overflow","opacity","StyledOpacityTransitionContainer","gridTemplateRows","StyledSideNav","backgroundColor","isAppContentWhiteBackground","HueNeutralWhite","borderRightWidth","BorderWidthMain","borderRightStyle","BorderStyleMain","borderRightColor","HueNeutral100","HueNeutral200","content","right","top","transform","width","Spacing2","zIndex","Spacing3","SideNavHeaderContainer","borderColor","hasContentScrolled","flexShrink","borderBottomWidth","borderBottomStyle","borderBottomColor","concat","SideNavListContainer","padding","listStyle","listStyleType","margin","SideNavScrollableContainer","flex","overflowY","paddingInline","SectionHeaderContainer","contrastFontColor","paddingBlock","Spacing1","Spacing4","marginBlock","color","HueNeutral600","SideNavFooter","sideNavBackgroundColor","PersistentSideNavFooter","isContentScrollable","transitionProperty","transitionDuration","transitionTiming","boxShadow","SideNavFooterItemsContainer","sideNavContrastColors","flexWrap","alignItems","fontSize","TypographySizeOverline","fontColor","textDecoration","HueNeutral900","LoadingItemContainer","gap","getHasScrollableContent","scrollableContainer","scrollHeight","clientHeight","LoadingItem","children","_Skeleton","variant","SideNav","appName","footerComponent","footerItems","hasCustomFooter","isCollapsible","isCollapsed","isCompact","isLoading","logoProps","onCollapse","onExpand","onSort","sideNavItems","setSideNavCollapsed","setHasContentScrolled","setIsContentScrollable","sideNavItemsList","updateSideNavItemsList","uiShellContext","t","scrollableContentRef","resizeObserverRef","intersectionObserverRef","blankElement","updateIsContentScrollable","current","parentElement","resizeObserverDebounceTimer","ResizeObserver","cancelAnimationFrame","requestAnimationFrame","observe","IntersectionObserver","entries","isIntersecting","slice","sort","a","b","time","at","root","threshold","ulElement","liElement","Array","from","disconnect","scrollIntoViewRef","firstSideNavItemIdWithIsSelected","flattenedItems","flatMap","sideNavItem","nestedNavItems","firstItemWithIsSelected","find","isSelected","id","scrollIntoView","getRefIfThisIsFirstNodeWithIsSelected","itemId","undefined","sideNavItemContentProviderValue","depth","setSelectedItem","selectedItemId","updatedSideNavItems","map","item","childItem","processedSideNavItems","childNavItems","childProps","isDisabled","isSortable","navItem","Provider","value","scrollRef","onItemSelected","translate","sideNavExpandClickHandler","sideNavExpandKeyHandler","event","key","code","preventDefault","setSortedItems","parentId","activeId","activeIndex","overIndex","sortedSideNavItems","appBackgroundColor","ariaControls","onClick","onKeyDown","role","ref","fill","_","index","label","isSectionHeader","startIcon","isDefaultExpanded","isExpanded","fallback","component","disabled","items","onChange","renderItem","sortableItem","Item","MemoizedSideNav","displayName"],"sources":["../../../../src/ui-shell/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 useRef,\n useEffect,\n KeyboardEventHandler,\n} from \"react\";\nimport { Skeleton } from \"@mui/material\";\nimport { useTranslation } from \"react-i18next\";\nimport { arrayMove } from \"@dnd-kit/sortable\";\nimport { UniqueIdentifier } from \"@dnd-kit/core\";\nimport { ErrorBoundary } from \"react-error-boundary\";\nimport { Property } from \"csstype\";\n\nimport { ContrastColors } from \"../../createContrastColors.js\";\nimport { NavAccordion } from \"./NavAccordion.js\";\nimport {\n DesignTokens,\n useOdysseyDesignTokens,\n} from \"../../OdysseyDesignTokensContext.js\";\nimport { OdysseyThemeProvider } from \"../../OdysseyThemeProvider.js\";\nimport type { SideNavProps } from \"./types.js\";\nimport { SideNavHeader } from \"./SideNavHeader.js\";\nimport {\n SideNavItemContent,\n StyledSideNavListItem,\n} from \"./SideNavItemContent.js\";\nimport { SideNavFooterContent } from \"./SideNavFooterContent.js\";\nimport { SideNavItemContentContext } from \"./SideNavItemContentContext.js\";\nimport { SideNavToggleButton } from \"./SideNavToggleButton.js\";\nimport { SortableList } from \"./SortableList/SortableList.js\";\nimport { Overline } from \"../../Typography.js\";\nimport {\n UiShellColors,\n useUiShellContext,\n} from \"../../ui-shell/UiShellProvider.js\";\n\nexport const DEFAULT_SIDE_NAV_WIDTH = \"300px\";\n\n// The side nav collapse icon is placed absolutely from the top (Logo container + nav header height)\n// to align it in the middle of the nav header text\nexport const SIDENAV_COLLAPSE_ICON_POSITION = \"77px\";\n\nconst StyledCollapsibleContent = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" && prop !== \"isSideNavCollapsed\",\n})<{\n odysseyDesignTokens: DesignTokens;\n isSideNavCollapsed: boolean;\n}>(({ odysseyDesignTokens, isSideNavCollapsed }) => ({\n position: \"relative\",\n display: \"inline-grid\",\n gridTemplateColumns: DEFAULT_SIDE_NAV_WIDTH,\n height: \"100%\",\n transition: `grid-template-columns ${odysseyDesignTokens.TransitionDurationMain}, opacity 300ms`,\n transitionTimingFunction: odysseyDesignTokens.TransitionTimingMain,\n overflow: \"hidden\",\n\n ...(isSideNavCollapsed && {\n gridTemplateColumns: 0,\n opacity: 0,\n }),\n}));\n\nconst StyledOpacityTransitionContainer = 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 display: \"inline-grid\",\n gridTemplateRows: \"max-content 1fr max-content\",\n height: \"100%\",\n transition: `opacity 50ms`,\n transitionTimingFunction: odysseyDesignTokens.TransitionTimingMain,\n overflow: \"hidden\",\n\n ...(isSideNavCollapsed && {\n opacity: 0,\n }),\n }),\n);\n\nconst StyledSideNav = styled(\"nav\", {\n shouldForwardProp: (prop) =>\n prop !== \"backgroundColor\" &&\n prop !== \"odysseyDesignTokens\" &&\n prop !== \"isAppContentWhiteBackground\" &&\n prop !== \"isSideNavCollapsed\",\n})<{\n isAppContentWhiteBackground: boolean;\n backgroundColor?: UiShellColors[\"sideNavBackgroundColor\"];\n isSideNavCollapsed: boolean;\n odysseyDesignTokens: DesignTokens;\n}>(\n ({\n backgroundColor,\n isAppContentWhiteBackground,\n isSideNavCollapsed,\n odysseyDesignTokens,\n }) => ({\n position: \"relative\",\n display: \"inline-block\",\n height: \"100%\",\n backgroundColor: backgroundColor || odysseyDesignTokens.HueNeutralWhite,\n\n ...(isAppContentWhiteBackground && {\n borderRightWidth: odysseyDesignTokens.BorderWidthMain,\n borderRightStyle:\n odysseyDesignTokens.BorderStyleMain as Property.BorderRightStyle,\n borderRightColor: odysseyDesignTokens.HueNeutral100,\n }),\n\n \"&::after\": {\n backgroundColor: odysseyDesignTokens.HueNeutral200,\n content: \"''\",\n height: \"100%\",\n opacity: 0,\n position: \"absolute\",\n right: 0,\n top: 0,\n transform: `translateX(0)`,\n transition: `opacity ${odysseyDesignTokens.TransitionDurationMain}, transform ${odysseyDesignTokens.TransitionDurationMain}`,\n width: odysseyDesignTokens.Spacing2,\n zIndex: 2,\n },\n\n \"&:has([data-sidenav-toggle='true']:hover), &:has([data-sidenav-toggle='true']:focus-visible)\":\n {\n ...(isSideNavCollapsed && {\n \"&::after\": {\n opacity: 1,\n transform: `translateX(100%)`,\n },\n\n \"[data-sidenav-toggle='true']\": {\n transform: `translate3d(calc(100% + ${odysseyDesignTokens.Spacing3}), 0, 0)`,\n },\n }),\n },\n\n \"[data-sidenav-toggle='true']\": {\n position: \"absolute\",\n top: SIDENAV_COLLAPSE_ICON_POSITION,\n right: 0,\n transition: `transform ${odysseyDesignTokens.TransitionDurationMain}`,\n transform: `translate3d(100%, 0, 0)`,\n },\n }),\n);\n\nconst SideNavHeaderContainer = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"borderColor\" &&\n prop !== \"hasContentScrolled\" &&\n prop !== \"odysseyDesignTokens\",\n})(\n ({\n borderColor,\n hasContentScrolled,\n odysseyDesignTokens,\n }: {\n borderColor: ContrastColors[\"fontColor\"];\n hasContentScrolled: boolean;\n odysseyDesignTokens: DesignTokens;\n }) => ({\n flexShrink: 0,\n // The bottom border should appear only if the scrollable region has been scrolled\n ...(hasContentScrolled && {\n borderBottomWidth: odysseyDesignTokens.BorderWidthMain,\n borderBottomStyle:\n odysseyDesignTokens.BorderStyleMain as Property.BorderBottomStyle,\n borderBottomColor: odysseyDesignTokens.HueNeutral100,\n\n ...(borderColor && {\n borderBottomColor: borderColor.concat(\"15\"),\n }),\n }),\n }),\n);\n\nconst SideNavListContainer = styled(\"ul\")(() => ({\n padding: 0,\n listStyle: \"none\",\n listStyleType: \"none\",\n margin: 0,\n}));\n\nconst SideNavScrollableContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{ odysseyDesignTokens: DesignTokens }>(({ odysseyDesignTokens }) => ({\n display: \"grid\",\n gridTemplateRows: \"1fr max-content\",\n flex: \"1 1 100%\",\n overflowY: \"auto\",\n paddingInline: odysseyDesignTokens.Spacing2,\n}));\n\nconst SectionHeaderContainer = styled(\"li\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" && prop !== \"contrastFontColor\",\n})(\n ({\n contrastFontColor,\n odysseyDesignTokens,\n }: {\n contrastFontColor: ContrastColors[\"fontColor\"];\n odysseyDesignTokens: DesignTokens;\n }) => ({\n paddingBlock: odysseyDesignTokens.Spacing1,\n paddingInline: odysseyDesignTokens.Spacing4,\n marginBlock: `${odysseyDesignTokens.Spacing3}`,\n color: contrastFontColor || odysseyDesignTokens.HueNeutral600,\n }),\n);\n\nconst SideNavFooter = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" && prop !== \"sideNavBackgroundColor\",\n})(\n ({\n odysseyDesignTokens,\n sideNavBackgroundColor,\n }: {\n odysseyDesignTokens: DesignTokens;\n sideNavBackgroundColor?: UiShellColors[\"sideNavBackgroundColor\"];\n }) => ({\n flexShrink: 0,\n padding: odysseyDesignTokens.Spacing4,\n backgroundColor: odysseyDesignTokens.HueNeutralWhite,\n\n ...(sideNavBackgroundColor && {\n backgroundColor: sideNavBackgroundColor,\n }),\n }),\n);\n\nconst PersistentSideNavFooter = styled(SideNavFooter, {\n shouldForwardProp: (prop) =>\n prop !== \"isContentScrollable\" &&\n prop !== \"odysseyDesignTokens\" &&\n prop !== \"sideNavBackgroundColor\",\n})(\n ({\n isContentScrollable,\n odysseyDesignTokens,\n sideNavBackgroundColor,\n }: {\n isContentScrollable: boolean;\n odysseyDesignTokens: DesignTokens;\n sideNavBackgroundColor?: UiShellColors[\"sideNavBackgroundColor\"];\n }) => ({\n transitionProperty: \"box-shadow\",\n transitionDuration: odysseyDesignTokens.TransitionDurationMain,\n transitionTiming: odysseyDesignTokens.TransitionTimingMain,\n zIndex: 2,\n // The box shadow should appear above the footer only if the scrollable region has overflow\n ...(isContentScrollable && {\n boxShadow: \"0px -8px 8px -8px rgba(39, 39, 39, 0.08)\",\n }),\n ...(sideNavBackgroundColor && {\n backgroundColor: sideNavBackgroundColor,\n }),\n }),\n);\n\nconst SideNavFooterItemsContainer = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" && prop !== \"sideNavContrastColors\",\n})<{\n odysseyDesignTokens: DesignTokens;\n sideNavContrastColors: UiShellColors[\"sideNavContrastColors\"];\n}>(({ odysseyDesignTokens, sideNavContrastColors }) => ({\n display: \"flex\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n fontSize: odysseyDesignTokens.TypographySizeOverline,\n\n \"a, span\": {\n color: odysseyDesignTokens.HueNeutral600,\n transition: `color ${odysseyDesignTokens.TransitionDurationMain}`,\n\n \"&:visited\": {\n color: odysseyDesignTokens.HueNeutral600,\n\n ...(sideNavContrastColors?.fontColor && {\n color: sideNavContrastColors?.fontColor,\n }),\n },\n\n \"&:hover\": {\n textDecoration: \"none\",\n color: odysseyDesignTokens.HueNeutral900,\n\n ...(sideNavContrastColors?.fontColor && {\n color: sideNavContrastColors?.fontColor,\n }),\n },\n\n ...(sideNavContrastColors?.fontColor && {\n color: sideNavContrastColors?.fontColor,\n }),\n },\n}));\n\nconst LoadingItemContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{ odysseyDesignTokens: DesignTokens }>(({ odysseyDesignTokens }) => ({\n alignItems: \"center\",\n display: \"flex\",\n gap: odysseyDesignTokens.Spacing2,\n paddingBlock: odysseyDesignTokens.Spacing2,\n paddingInline: odysseyDesignTokens.Spacing4,\n}));\n\nconst getHasScrollableContent = (scrollableContainer: HTMLElement) =>\n scrollableContainer.scrollHeight > scrollableContainer.clientHeight;\n\nconst LoadingItem = () => {\n const odysseyDesignTokens: DesignTokens = useOdysseyDesignTokens();\n return (\n <LoadingItemContainer odysseyDesignTokens={odysseyDesignTokens}>\n <Skeleton\n variant=\"circular\"\n width={odysseyDesignTokens.Spacing4}\n height={odysseyDesignTokens.Spacing4}\n />\n <Skeleton variant=\"rounded\" width=\"100%\" />\n </LoadingItemContainer>\n );\n};\n\nconst SideNav = ({\n appName,\n footerComponent,\n footerItems,\n hasCustomFooter,\n isCollapsible,\n isCollapsed = false,\n isCompact,\n isLoading,\n logoProps,\n onCollapse,\n onExpand,\n onSort,\n sideNavItems,\n}: SideNavProps) => {\n const [isSideNavCollapsed, setSideNavCollapsed] = useState(isCollapsed);\n const [hasContentScrolled, setHasContentScrolled] = useState(false);\n const [isContentScrollable, setIsContentScrollable] = useState(false);\n const [sideNavItemsList, updateSideNavItemsList] = useState(sideNavItems);\n\n const uiShellContext = useUiShellContext();\n const odysseyDesignTokens: DesignTokens = useOdysseyDesignTokens();\n const { t } = useTranslation();\n\n const scrollableContentRef = useRef<HTMLUListElement>(null);\n const resizeObserverRef = useRef<ResizeObserver | null>(null);\n const intersectionObserverRef = useRef<IntersectionObserver | null>(null);\n\n const blankElement = useMemo(() => <div />, []);\n\n // The default value (sideNavItems) passed to useState is ONLY used by the useState hook for\n // the very first value. Subsequent updates to the prop (sideNavItems) need to cause the state\n // to update!\n useEffect(() => updateSideNavItemsList(sideNavItems), [sideNavItems]);\n\n // update sidenav collapse status\n useEffect(() => setSideNavCollapsed(isCollapsed), [isCollapsed]);\n\n useEffect(() => {\n // This is called directly in this effect AND perhaps as a result of the ResizeObserver\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\n if (intersectionObserverRef.current && scrollableContentRef.current) {\n const ulElement = scrollableContentRef.current;\n const [liElement] = Array.from(ulElement?.children || []);\n\n if (liElement) {\n intersectionObserverRef.current.observe(liElement);\n }\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 }, [sideNavItemsList]);\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 = sideNavItemsList.flatMap((sideNavItem) =>\n sideNavItem.nestedNavItems\n ? [sideNavItem, ...sideNavItem.nestedNavItems]\n : sideNavItem,\n );\n const firstItemWithIsSelected = flattenedItems.find(\n (sideNavItem) => sideNavItem.isSelected,\n );\n return firstItemWithIsSelected?.id;\n }, [sideNavItemsList]);\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]);\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 sideNavItemContentProviderValue = useMemo(\n () => ({ isCompact, depth: 1 }),\n [isCompact],\n );\n\n const setSelectedItem = useCallback(\n (selectedItemId: string) => {\n const updatedSideNavItems = sideNavItemsList.map((item) => {\n if (item.id === selectedItemId) {\n item.isSelected = true;\n } else if (item.isSelected) {\n delete item.isSelected;\n }\n\n return item.nestedNavItems\n ? {\n ...item,\n nestedNavItems: item.nestedNavItems.map((childItem) => {\n if (childItem.id === selectedItemId) {\n childItem.isSelected = true;\n } else if (childItem.isSelected) {\n delete childItem.isSelected;\n }\n return childItem;\n }),\n }\n : item;\n });\n updateSideNavItemsList(updatedSideNavItems);\n },\n [sideNavItemsList],\n );\n\n const processedSideNavItems = useMemo(() => {\n return sideNavItemsList?.map((item) => ({\n ...item,\n childNavItems: item.nestedNavItems?.map((childProps) => {\n return {\n id: childProps.id,\n isSelected: childProps.isSelected,\n isDisabled: childProps.isDisabled,\n isSortable: childProps.isSortable,\n navItem: (\n <SideNavItemContentContext.Provider\n value={{\n ...sideNavItemContentProviderValue,\n depth: 2,\n isSortable: item.isSortable,\n }}\n key={childProps.id}\n >\n <SideNavItemContent\n {...childProps}\n scrollRef={getRefIfThisIsFirstNodeWithIsSelected(childProps.id)}\n onItemSelected={setSelectedItem}\n translate={childProps.translate}\n />\n </SideNavItemContentContext.Provider>\n ),\n };\n }),\n }));\n }, [\n getRefIfThisIsFirstNodeWithIsSelected,\n sideNavItemsList,\n sideNavItemContentProviderValue,\n setSelectedItem,\n ]);\n\n const sideNavExpandClickHandler = useCallback(() => {\n if (isSideNavCollapsed) {\n onExpand?.();\n } else {\n onCollapse?.();\n }\n\n setSideNavCollapsed(!isSideNavCollapsed);\n }, [isSideNavCollapsed, setSideNavCollapsed, onExpand, onCollapse]);\n\n const sideNavExpandKeyHandler = useCallback<\n KeyboardEventHandler<HTMLButtonElement>\n >(\n (event) => {\n if (event?.key === \"Enter\" || event?.code === \"Space\") {\n event.preventDefault();\n sideNavExpandClickHandler();\n }\n },\n [sideNavExpandClickHandler],\n );\n\n const setSortedItems = useCallback(\n (\n parentId: string,\n activeId: UniqueIdentifier,\n activeIndex: number,\n overIndex: number,\n ) => {\n const sortedSideNavItems = sideNavItemsList.map((item) =>\n item.id === parentId && item.nestedNavItems\n ? {\n ...item,\n nestedNavItems: arrayMove(\n item.nestedNavItems,\n activeIndex,\n overIndex,\n ),\n }\n : item,\n );\n updateSideNavItemsList(sortedSideNavItems);\n onSort?.(sortedSideNavItems, parentId, activeId, activeIndex, overIndex);\n },\n [onSort, sideNavItemsList],\n );\n\n return (\n <StyledSideNav\n aria-label={t(\"navigation.label\")}\n backgroundColor={uiShellContext?.sideNavBackgroundColor}\n id=\"side-nav-expandable\"\n isAppContentWhiteBackground={\n uiShellContext?.appBackgroundColor ===\n odysseyDesignTokens.HueNeutralWhite\n }\n isSideNavCollapsed={isSideNavCollapsed}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n {isCollapsible && (\n <SideNavToggleButton\n ariaControls=\"side-nav-expandable\"\n isSideNavCollapsed={isSideNavCollapsed}\n onClick={sideNavExpandClickHandler}\n onKeyDown={sideNavExpandKeyHandler}\n />\n )}\n <OdysseyThemeProvider>\n <StyledCollapsibleContent\n data-se=\"collapsible-region\"\n isSideNavCollapsed={isSideNavCollapsed}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <StyledOpacityTransitionContainer\n isSideNavCollapsed={isSideNavCollapsed}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <SideNavHeaderContainer\n hasContentScrolled={hasContentScrolled}\n odysseyDesignTokens={odysseyDesignTokens}\n borderColor={uiShellContext?.sideNavContrastColors?.fontColor}\n >\n <SideNavHeader\n appName={appName}\n isLoading={isLoading}\n logoProps={logoProps}\n />\n </SideNavHeaderContainer>\n <SideNavScrollableContainer\n odysseyDesignTokens={odysseyDesignTokens}\n data-se=\"scrollable-region\"\n >\n <SideNavListContainer role=\"none\" ref={scrollableContentRef}>\n {isLoading\n ? Array(6)\n .fill(null)\n .map((_, index) => <LoadingItem key={index} />)\n : processedSideNavItems?.map((item) => {\n const {\n id,\n label,\n isSectionHeader,\n startIcon,\n childNavItems,\n isSortable,\n isDefaultExpanded,\n isDisabled,\n isExpanded,\n } = item;\n\n if (isSectionHeader) {\n return (\n <ErrorBoundary fallback={blankElement}>\n <SectionHeaderContainer\n contrastFontColor={\n uiShellContext?.sideNavContrastColors?.fontColor\n }\n id={id}\n key={id}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <Overline component=\"h3\">{label}</Overline>\n </SectionHeaderContainer>\n </ErrorBoundary>\n );\n } else if (childNavItems) {\n return (\n <ErrorBoundary fallback={blankElement}>\n <StyledSideNavListItem\n id={id}\n key={id}\n odysseyDesignTokens={odysseyDesignTokens}\n disabled={isDisabled}\n aria-disabled={isDisabled}\n >\n <NavAccordion\n label={label}\n isCompact={isCompact}\n isDefaultExpanded={isDefaultExpanded}\n isExpanded={isExpanded}\n startIcon={startIcon}\n isDisabled={isDisabled}\n >\n <SideNavListContainer role=\"none\">\n {isSortable ? (\n <SortableList\n parentId={item.id}\n items={childNavItems}\n onChange={setSortedItems}\n renderItem={(sortableItem) => (\n <SortableList.Item\n id={sortableItem.id}\n isDisabled={sortableItem.isDisabled}\n isSelected={sortableItem.isSelected}\n isSortable={sortableItem.isSortable}\n >\n {sortableItem.navItem}\n </SortableList.Item>\n )}\n />\n ) : (\n childNavItems.map((item) => item.navItem)\n )}\n </SideNavListContainer>\n </NavAccordion>\n </StyledSideNavListItem>\n </ErrorBoundary>\n );\n } else {\n return (\n <ErrorBoundary fallback={blankElement}>\n <SideNavItemContentContext.Provider\n key={item.id}\n value={sideNavItemContentProviderValue}\n >\n <SideNavItemContent\n {...item}\n key={item.id}\n onItemSelected={setSelectedItem}\n scrollRef={getRefIfThisIsFirstNodeWithIsSelected(\n item.id,\n )}\n startIcon={item.startIcon}\n />\n </SideNavItemContentContext.Provider>\n </ErrorBoundary>\n );\n }\n })}\n </SideNavListContainer>\n {!isLoading && footerItems && !hasCustomFooter && (\n <SideNavFooter\n odysseyDesignTokens={odysseyDesignTokens}\n sideNavBackgroundColor={\n uiShellContext?.sideNavBackgroundColor\n }\n >\n <SideNavFooterItemsContainer\n odysseyDesignTokens={odysseyDesignTokens}\n sideNavContrastColors={\n uiShellContext?.sideNavContrastColors\n }\n >\n <SideNavFooterContent footerItems={footerItems} />\n </SideNavFooterItemsContainer>\n </SideNavFooter>\n )}\n </SideNavScrollableContainer>\n {!isLoading && !footerItems && hasCustomFooter && (\n <PersistentSideNavFooter\n isContentScrollable={isContentScrollable}\n odysseyDesignTokens={odysseyDesignTokens}\n sideNavBackgroundColor={uiShellContext?.sideNavBackgroundColor}\n >\n {footerComponent}\n </PersistentSideNavFooter>\n )}\n </StyledOpacityTransitionContainer>\n </StyledCollapsibleContent>\n </OdysseyThemeProvider>\n </StyledSideNav>\n );\n};\n\nconst MemoizedSideNav = memo(SideNav);\nMemoizedSideNav.displayName = \"SideNav\";\n\nexport { MemoizedSideNav as SideNav };\n"],"mappings":"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","ignoreList":[]}
@@ -12,7 +12,7 @@ import _Link from "@mui/material/Link";
12
12
  */
13
13
 
14
14
  import styled from "@emotion/styled";
15
- import { memo, useCallback, useImperativeHandle, useMemo, useRef } from "react";
15
+ import { memo, useCallback, useImperativeHandle, useMemo, useRef, useState } from "react";
16
16
  import { useOdysseyDesignTokens } from "../../OdysseyDesignTokensContext.js";
17
17
  import { SideNavItemLinkContent } from "./SideNavItemLinkContent.js";
18
18
  import { useSideNavItemContent } from "./SideNavItemContentContext.js";
@@ -49,7 +49,8 @@ export const getBaseNavItemContentStyles = ({
49
49
  isDisabled,
50
50
  isSelected,
51
51
  odysseyDesignTokens,
52
- sideNavContrastColors
52
+ sideNavContrastColors,
53
+ isActiveDropTarget
53
54
  }) => ({
54
55
  display: "flex",
55
56
  alignItems: "center",
@@ -62,6 +63,9 @@ export const getBaseNavItemContentStyles = ({
62
63
  borderRadius: odysseyDesignTokens.BorderRadiusMain,
63
64
  transition: `backgroundColor ${odysseyDesignTokens.TransitionDurationMain}, color ${odysseyDesignTokens.TransitionDurationMain}`,
64
65
  cursor: "pointer",
66
+ ...(isActiveDropTarget && {
67
+ backgroundColor: sideNavContrastColors?.itemHoverBackgroundColor || odysseyDesignTokens.HueNeutral50
68
+ }),
65
69
  "&:hover, li:has(> button:hover, > button:focus, > button:focus-visible) &": {
66
70
  textDecoration: "none",
67
71
  backgroundColor: sideNavContrastColors?.itemHoverBackgroundColor || odysseyDesignTokens.HueNeutral50,
@@ -102,19 +106,21 @@ export const getNavItemContentStyles = ({
102
106
  })
103
107
  });
104
108
  const NavItemContentContainer = styled("div", {
105
- shouldForwardProp: prop => prop !== "odysseyDesignTokens" && prop != "contextValue" && prop !== "isDisabled" && prop !== "sideNavContrastColors" && prop !== "isSelected"
109
+ shouldForwardProp: prop => prop !== "odysseyDesignTokens" && prop != "contextValue" && prop !== "isDisabled" && prop !== "sideNavContrastColors" && prop !== "isSelected" && prop !== "isActiveDropTarget"
106
110
  })(({
107
111
  isDisabled,
108
112
  isSelected,
109
113
  contextValue,
110
114
  odysseyDesignTokens,
111
- sideNavContrastColors
115
+ sideNavContrastColors,
116
+ isActiveDropTarget
112
117
  }) => ({
113
118
  ...getBaseNavItemContentStyles({
114
119
  isDisabled,
115
120
  isSelected,
116
121
  odysseyDesignTokens,
117
- sideNavContrastColors
122
+ sideNavContrastColors,
123
+ isActiveDropTarget
118
124
  }),
119
125
  ...getNavItemContentStyles({
120
126
  odysseyDesignTokens,
@@ -122,19 +128,21 @@ const NavItemContentContainer = styled("div", {
122
128
  })
123
129
  }));
124
130
  const StyledNavItemLink = styled(_Link, {
125
- shouldForwardProp: prop => prop != "contextValue" && prop !== "isDisabled" && prop !== "isSelected" && prop !== "odysseyDesignTokens" && prop !== "sideNavContrastColors"
131
+ shouldForwardProp: prop => prop != "contextValue" && prop !== "isDisabled" && prop !== "isSelected" && prop !== "odysseyDesignTokens" && prop !== "sideNavContrastColors" && prop !== "isActiveDropTarget"
126
132
  })(({
127
133
  isDisabled,
128
134
  isSelected,
129
135
  contextValue,
130
136
  odysseyDesignTokens,
131
- sideNavContrastColors
137
+ sideNavContrastColors,
138
+ isActiveDropTarget
132
139
  }) => ({
133
140
  ...getBaseNavItemContentStyles({
134
141
  isDisabled,
135
142
  isSelected,
136
143
  odysseyDesignTokens,
137
- sideNavContrastColors
144
+ sideNavContrastColors,
145
+ isActiveDropTarget
138
146
  }),
139
147
  ...getNavItemContentStyles({
140
148
  odysseyDesignTokens,
@@ -155,12 +163,14 @@ const SideNavItemContent = ({
155
163
  isDisabled,
156
164
  isSelected,
157
165
  scrollRef,
158
- onItemSelected
166
+ onItemSelected,
167
+ translate
159
168
  }) => {
160
169
  const uiShellContext = useUiShellContext();
161
170
  const sidenavItemContentContext = useSideNavItemContent();
162
171
  const contextValue = useMemo(() => sidenavItemContentContext, [sidenavItemContentContext]);
163
172
  const odysseyDesignTokens = useOdysseyDesignTokens();
173
+ const [isActiveDropTarget, setIsActiveDropTarget] = useState(false);
164
174
  const localScrollRef = useRef(null);
165
175
  useImperativeHandle(scrollRef, () => {
166
176
  return {
@@ -189,19 +199,30 @@ const SideNavItemContent = ({
189
199
  odysseyDesignTokens: odysseyDesignTokens,
190
200
  ref: localScrollRef,
191
201
  sideNavContrastColors: uiShellContext?.sideNavContrastColors,
202
+ onDragOver: () => {
203
+ setIsActiveDropTarget(true);
204
+ },
205
+ onDragLeave: () => {
206
+ setIsActiveDropTarget(false);
207
+ },
208
+ onDrop: () => {
209
+ setIsActiveDropTarget(false);
210
+ },
192
211
  children: isDisabled ? _jsx(NavItemContentContainer, {
193
212
  contextValue: contextValue,
194
213
  isDisabled: isDisabled,
195
214
  isSelected: isSelected,
196
215
  odysseyDesignTokens: odysseyDesignTokens,
197
216
  sideNavContrastColors: uiShellContext?.sideNavContrastColors,
217
+ isActiveDropTarget: false,
198
218
  children: _jsx(SideNavItemLinkContent, {
199
219
  count: count,
200
220
  label: label,
201
221
  startIcon: startIcon,
202
222
  endIcon: endIcon,
203
223
  statusLabel: statusLabel,
204
- severity: severity
224
+ severity: severity,
225
+ translate: translate
205
226
  })
206
227
  }) : !href ? _jsx(NavItemContentContainer, {
207
228
  contextValue: contextValue,
@@ -213,13 +234,15 @@ const SideNavItemContent = ({
213
234
  role: "button",
214
235
  sideNavContrastColors: uiShellContext?.sideNavContrastColors,
215
236
  tabIndex: 0,
237
+ isActiveDropTarget: isActiveDropTarget,
216
238
  children: _jsx(SideNavItemLinkContent, {
217
239
  count: count,
218
240
  label: label,
219
241
  startIcon: startIcon,
220
242
  endIcon: endIcon,
221
243
  statusLabel: statusLabel,
222
- severity: severity
244
+ severity: severity,
245
+ translate: translate
223
246
  })
224
247
  }) : _jsxs(StyledNavItemLink, {
225
248
  contextValue: contextValue,
@@ -230,13 +253,15 @@ const SideNavItemContent = ({
230
253
  onClick: itemClickHandler,
231
254
  sideNavContrastColors: uiShellContext?.sideNavContrastColors,
232
255
  target: target,
256
+ isActiveDropTarget: isActiveDropTarget,
233
257
  children: [_jsx(SideNavItemLinkContent, {
234
258
  count: count,
235
259
  label: label,
236
260
  startIcon: startIcon,
237
261
  endIcon: endIcon,
238
262
  statusLabel: statusLabel,
239
- severity: severity
263
+ severity: severity,
264
+ translate: translate
240
265
  }), target === "_blank" && _jsx("span", {
241
266
  className: "Link-indicator",
242
267
  role: "presentation",
@@ -1 +1 @@
1
- {"version":3,"file":"SideNavItemContent.js","names":["styled","memo","useCallback","useImperativeHandle","useMemo","useRef","useOdysseyDesignTokens","SideNavItemLinkContent","useSideNavItemContent","ExternalLinkIcon","useUiShellContext","jsx","_jsx","jsxs","_jsxs","StyledSideNavListItem","shouldForwardProp","prop","isSelected","odysseyDesignTokens","sideNavContrastColors","display","alignItems","backgroundColor","borderRadius","BorderRadiusMain","transition","TransitionDurationMain","color","fontColor","TypographyColorAction","itemSelectedBackgroundColor","HueBlue50","scrollToNode","node","scrollIntoView","behavior","block","inline","getBaseNavItemContentStyles","isDisabled","width","textDecoration","TypographyColorHeading","minHeight","paddingBlock","Spacing3","paddingInlineEnd","Spacing4","cursor","itemHoverBackgroundColor","HueNeutral50","fontWeight","TypographyWeightBodyBold","TypographyColorDisabled","itemDisabledFontColor","outline","boxShadow","focusRingColor","PalettePrimaryMain","getNavItemContentStyles","contextValue","paddingInlineStart","depth","Spacing6","isCompact","Spacing1","NavItemContentContainer","StyledNavItemLink","_Link","SideNavItemContent","count","id","label","href","target","startIcon","severity","statusLabel","endIcon","onClick","scrollRef","onItemSelected","uiShellContext","sidenavItemContentContext","localScrollRef","current","itemClickHandler","event","sideNavItemContentKeyHandler","key","preventDefault","undefined","disabled","ref","children","onKeyDown","role","tabIndex","className","MemoizedSideNavItemContent","displayName"],"sources":["../../../../src/ui-shell/SideNav/SideNavItemContent.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 {\n KeyboardEventHandler,\n memo,\n MouseEventHandler,\n useCallback,\n useImperativeHandle,\n useMemo,\n useRef,\n} from \"react\";\nimport { Link as NavItemLink } from \"@mui/material\";\nimport {\n type DesignTokens,\n useOdysseyDesignTokens,\n} from \"../../OdysseyDesignTokensContext.js\";\nimport { SideNavItemLinkContent } from \"./SideNavItemLinkContent.js\";\nimport type { SideNavItem } from \"./types.js\";\nimport {\n SideNavItemContentContextValue,\n useSideNavItemContent,\n} from \"./SideNavItemContentContext.js\";\nimport { ExternalLinkIcon } from \"../../icons.generated/index.js\";\nimport {\n UiShellColors,\n useUiShellContext,\n} from \"../../ui-shell/UiShellProvider.js\";\n\nexport const StyledSideNavListItem = styled(\"li\", {\n shouldForwardProp: (prop) =>\n prop !== \"isSelected\" &&\n prop !== \"odysseyDesignTokens\" &&\n prop !== \"sideNavContrastColors\",\n})<{\n sideNavContrastColors?: UiShellColors[\"sideNavContrastColors\"];\n odysseyDesignTokens: DesignTokens;\n isSelected?: boolean;\n itemSelectedBackgroundColor?: string;\n disabled?: boolean;\n}>(({ isSelected, odysseyDesignTokens, sideNavContrastColors }) => ({\n display: \"flex\",\n alignItems: \"center\",\n backgroundColor: \"unset\",\n borderRadius: odysseyDesignTokens.BorderRadiusMain,\n transition: `backgroundColor ${odysseyDesignTokens.TransitionDurationMain}, color ${odysseyDesignTokens.TransitionDurationMain}`,\n\n ...(isSelected && {\n color: sideNavContrastColors?.fontColor\n ? `${sideNavContrastColors.fontColor}`\n : `${odysseyDesignTokens.TypographyColorAction}`,\n backgroundColor:\n sideNavContrastColors?.itemSelectedBackgroundColor ||\n odysseyDesignTokens.HueBlue50,\n }),\n}));\n\nconst scrollToNode = (node: HTMLElement | null) => {\n if (node) {\n node?.scrollIntoView({\n behavior: \"instant\",\n block: \"center\",\n inline: \"nearest\",\n });\n }\n};\n\ntype ScrollIntoViewHandle = {\n scrollIntoView: () => void;\n};\n\nexport const getBaseNavItemContentStyles = ({\n isDisabled,\n isSelected,\n odysseyDesignTokens,\n sideNavContrastColors,\n}: {\n isSelected?: boolean;\n isDisabled?: boolean;\n odysseyDesignTokens: DesignTokens;\n sideNavContrastColors: UiShellColors[\"sideNavContrastColors\"];\n}) => ({\n display: \"flex\",\n alignItems: \"center\",\n width: \"100%\",\n textDecoration: \"none\",\n // !important needed here to override more specific base link styling\n color: sideNavContrastColors?.fontColor\n ? `${sideNavContrastColors?.fontColor} !important`\n : `${odysseyDesignTokens.TypographyColorHeading} !important`,\n minHeight: \"unset\",\n paddingBlock: odysseyDesignTokens.Spacing3,\n paddingInlineEnd: odysseyDesignTokens.Spacing4,\n borderRadius: odysseyDesignTokens.BorderRadiusMain,\n transition: `backgroundColor ${odysseyDesignTokens.TransitionDurationMain}, color ${odysseyDesignTokens.TransitionDurationMain}`,\n cursor: \"pointer\",\n\n // When hover or focus of the drag handle, apply general hover styles\n \"&:hover, li:has(> button:hover, > button:focus, > button:focus-visible) &\": {\n textDecoration: \"none\",\n backgroundColor:\n sideNavContrastColors?.itemHoverBackgroundColor ||\n odysseyDesignTokens.HueNeutral50,\n\n ...(isSelected && {\n backgroundColor:\n sideNavContrastColors?.itemSelectedBackgroundColor ||\n odysseyDesignTokens.HueBlue50,\n color:\n sideNavContrastColors?.fontColor ||\n odysseyDesignTokens.TypographyColorAction,\n }),\n\n ...(isDisabled && {\n backgroundColor: \"unset\",\n }),\n },\n\n ...(isSelected && {\n color: sideNavContrastColors?.fontColor\n ? `${sideNavContrastColors?.fontColor} !important`\n : `${odysseyDesignTokens.TypographyColorAction} !important`,\n fontWeight: odysseyDesignTokens.TypographyWeightBodyBold,\n }),\n\n ...(isDisabled && {\n cursor: \"default\",\n color: `${odysseyDesignTokens.TypographyColorDisabled} !important`,\n\n ...(sideNavContrastColors?.itemDisabledFontColor && {\n color: `${sideNavContrastColors?.itemDisabledFontColor} !important`,\n }),\n }),\n\n \"&:focus-visible\": {\n outline: \"none\",\n boxShadow: `inset 0 0 0 2px ${sideNavContrastColors?.focusRingColor || odysseyDesignTokens.PalettePrimaryMain}`,\n },\n});\n\nexport const getNavItemContentStyles = ({\n odysseyDesignTokens,\n contextValue,\n}: {\n odysseyDesignTokens: DesignTokens;\n contextValue: SideNavItemContentContextValue;\n}) => ({\n paddingInlineStart: `calc(${odysseyDesignTokens.Spacing4} * ${contextValue.depth} + ${odysseyDesignTokens.Spacing6})`,\n\n ...(contextValue.depth === 1 && {\n paddingInlineStart: odysseyDesignTokens.Spacing4,\n }),\n\n ...(contextValue.isCompact && {\n paddingBlock: odysseyDesignTokens.Spacing1,\n }),\n});\n\nconst NavItemContentContainer = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" &&\n prop != \"contextValue\" &&\n prop !== \"isDisabled\" &&\n prop !== \"sideNavContrastColors\" &&\n prop !== \"isSelected\",\n})<{\n contextValue: SideNavItemContentContextValue;\n odysseyDesignTokens: DesignTokens;\n sideNavContrastColors: UiShellColors[\"sideNavContrastColors\"];\n isSelected?: boolean;\n isDisabled?: boolean;\n}>(\n ({\n isDisabled,\n isSelected,\n contextValue,\n odysseyDesignTokens,\n sideNavContrastColors,\n }) => ({\n ...getBaseNavItemContentStyles({\n isDisabled,\n isSelected,\n odysseyDesignTokens,\n sideNavContrastColors,\n }),\n\n ...getNavItemContentStyles({\n odysseyDesignTokens,\n contextValue,\n }),\n }),\n);\n\nconst StyledNavItemLink = styled(NavItemLink, {\n shouldForwardProp: (prop) =>\n prop != \"contextValue\" &&\n prop !== \"isDisabled\" &&\n prop !== \"isSelected\" &&\n prop !== \"odysseyDesignTokens\" &&\n prop !== \"sideNavContrastColors\",\n})<{\n contextValue: SideNavItemContentContextValue;\n odysseyDesignTokens: DesignTokens;\n sideNavContrastColors: UiShellColors[\"sideNavContrastColors\"];\n isSelected?: boolean;\n isDisabled?: boolean;\n}>(\n ({\n isDisabled,\n isSelected,\n contextValue,\n odysseyDesignTokens,\n sideNavContrastColors,\n }) => ({\n ...getBaseNavItemContentStyles({\n isDisabled,\n isSelected,\n odysseyDesignTokens,\n sideNavContrastColors,\n }),\n\n ...getNavItemContentStyles({\n odysseyDesignTokens,\n contextValue,\n }),\n }),\n);\n\nconst SideNavItemContent = ({\n count,\n id,\n label,\n href,\n target,\n startIcon,\n severity,\n statusLabel,\n endIcon,\n onClick,\n isDisabled,\n isSelected,\n scrollRef,\n onItemSelected,\n}: Pick<\n SideNavItem,\n | \"count\"\n | \"id\"\n | \"label\"\n | \"href\"\n | \"target\"\n | \"startIcon\"\n | \"severity\"\n | \"statusLabel\"\n | \"endIcon\"\n | \"onClick\"\n | \"isDisabled\"\n | \"isSelected\"\n> & {\n /**\n * The ref used to scroll to this item\n */\n scrollRef?: React.RefObject<ScrollIntoViewHandle>;\n onItemSelected?: (selectedItemId: string) => void;\n}) => {\n const uiShellContext = useUiShellContext();\n const sidenavItemContentContext = useSideNavItemContent();\n const contextValue = useMemo(\n () => sidenavItemContentContext,\n [sidenavItemContentContext],\n );\n\n const odysseyDesignTokens = useOdysseyDesignTokens();\n\n const localScrollRef = useRef<HTMLLIElement>(null);\n useImperativeHandle(scrollRef, () => {\n return {\n scrollIntoView: () => {\n scrollToNode(localScrollRef.current);\n },\n };\n }, []);\n\n const itemClickHandler = useCallback<\n MouseEventHandler<HTMLDivElement | HTMLAnchorElement>\n >(\n (event) => {\n onItemSelected?.(id);\n onClick?.(event);\n },\n [id, onClick, onItemSelected],\n );\n\n const sideNavItemContentKeyHandler = useCallback<\n KeyboardEventHandler<HTMLDivElement>\n >(\n (event) => {\n if (event?.key === \"Enter\") {\n event.preventDefault();\n onItemSelected?.(id);\n onClick?.(event);\n }\n },\n [id, onClick, onItemSelected],\n );\n\n return (\n <StyledSideNavListItem\n aria-disabled={isDisabled}\n aria-current={isSelected ? \"page\" : undefined}\n disabled={isDisabled}\n id={id}\n isSelected={isSelected}\n key={id}\n odysseyDesignTokens={odysseyDesignTokens}\n ref={localScrollRef}\n sideNavContrastColors={uiShellContext?.sideNavContrastColors}\n >\n {\n // Use Link for nav items with links and div for disabled or non-link items\n isDisabled ? (\n <NavItemContentContainer\n contextValue={contextValue}\n isDisabled={isDisabled}\n isSelected={isSelected}\n odysseyDesignTokens={odysseyDesignTokens}\n sideNavContrastColors={uiShellContext?.sideNavContrastColors}\n >\n <SideNavItemLinkContent\n count={count}\n label={label}\n startIcon={startIcon}\n endIcon={endIcon}\n statusLabel={statusLabel}\n severity={severity}\n />\n </NavItemContentContainer>\n ) : !href ? (\n <NavItemContentContainer\n contextValue={contextValue}\n isDisabled={isDisabled}\n isSelected={isSelected}\n onClick={itemClickHandler}\n onKeyDown={sideNavItemContentKeyHandler}\n odysseyDesignTokens={odysseyDesignTokens}\n role=\"button\"\n sideNavContrastColors={uiShellContext?.sideNavContrastColors}\n tabIndex={0}\n >\n <SideNavItemLinkContent\n count={count}\n label={label}\n startIcon={startIcon}\n endIcon={endIcon}\n statusLabel={statusLabel}\n severity={severity}\n />\n </NavItemContentContainer>\n ) : (\n <StyledNavItemLink\n contextValue={contextValue}\n href={href}\n isDisabled={isDisabled}\n isSelected={isSelected}\n odysseyDesignTokens={odysseyDesignTokens}\n onClick={itemClickHandler}\n sideNavContrastColors={uiShellContext?.sideNavContrastColors}\n target={target}\n >\n <SideNavItemLinkContent\n count={count}\n label={label}\n startIcon={startIcon}\n endIcon={endIcon}\n statusLabel={statusLabel}\n severity={severity}\n />\n {target === \"_blank\" && (\n <span className=\"Link-indicator\" role=\"presentation\">\n <ExternalLinkIcon />\n </span>\n )}\n </StyledNavItemLink>\n )\n }\n </StyledSideNavListItem>\n );\n};\n\nconst MemoizedSideNavItemContent = memo(SideNavItemContent);\nMemoizedSideNavItemContent.displayName = \"SideNavItemContent\";\n\nexport { MemoizedSideNavItemContent as SideNavItemContent };\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"SideNavItemContent.js","names":["styled","memo","useCallback","useImperativeHandle","useMemo","useRef","useState","useOdysseyDesignTokens","SideNavItemLinkContent","useSideNavItemContent","ExternalLinkIcon","useUiShellContext","jsx","_jsx","jsxs","_jsxs","StyledSideNavListItem","shouldForwardProp","prop","isSelected","odysseyDesignTokens","sideNavContrastColors","display","alignItems","backgroundColor","borderRadius","BorderRadiusMain","transition","TransitionDurationMain","color","fontColor","TypographyColorAction","itemSelectedBackgroundColor","HueBlue50","scrollToNode","node","scrollIntoView","behavior","block","inline","getBaseNavItemContentStyles","isDisabled","isActiveDropTarget","width","textDecoration","TypographyColorHeading","minHeight","paddingBlock","Spacing3","paddingInlineEnd","Spacing4","cursor","itemHoverBackgroundColor","HueNeutral50","fontWeight","TypographyWeightBodyBold","TypographyColorDisabled","itemDisabledFontColor","outline","boxShadow","focusRingColor","PalettePrimaryMain","getNavItemContentStyles","contextValue","paddingInlineStart","depth","Spacing6","isCompact","Spacing1","NavItemContentContainer","StyledNavItemLink","_Link","SideNavItemContent","count","id","label","href","target","startIcon","severity","statusLabel","endIcon","onClick","scrollRef","onItemSelected","translate","uiShellContext","sidenavItemContentContext","setIsActiveDropTarget","localScrollRef","current","itemClickHandler","event","sideNavItemContentKeyHandler","key","preventDefault","undefined","disabled","ref","onDragOver","onDragLeave","onDrop","children","onKeyDown","role","tabIndex","className","MemoizedSideNavItemContent","displayName"],"sources":["../../../../src/ui-shell/SideNav/SideNavItemContent.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 {\n KeyboardEventHandler,\n memo,\n MouseEventHandler,\n useCallback,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { Link as NavItemLink } from \"@mui/material\";\nimport {\n type DesignTokens,\n useOdysseyDesignTokens,\n} from \"../../OdysseyDesignTokensContext.js\";\nimport { SideNavItemLinkContent } from \"./SideNavItemLinkContent.js\";\nimport type { SideNavItem } from \"./types.js\";\nimport {\n SideNavItemContentContextValue,\n useSideNavItemContent,\n} from \"./SideNavItemContentContext.js\";\nimport { ExternalLinkIcon } from \"../../icons.generated/index.js\";\nimport {\n UiShellColors,\n useUiShellContext,\n} from \"../../ui-shell/UiShellProvider.js\";\n\nexport const StyledSideNavListItem = styled(\"li\", {\n shouldForwardProp: (prop) =>\n prop !== \"isSelected\" &&\n prop !== \"odysseyDesignTokens\" &&\n prop !== \"sideNavContrastColors\",\n})<{\n sideNavContrastColors?: UiShellColors[\"sideNavContrastColors\"];\n odysseyDesignTokens: DesignTokens;\n isSelected?: boolean;\n itemSelectedBackgroundColor?: string;\n disabled?: boolean;\n}>(({ isSelected, odysseyDesignTokens, sideNavContrastColors }) => ({\n display: \"flex\",\n alignItems: \"center\",\n backgroundColor: \"unset\",\n borderRadius: odysseyDesignTokens.BorderRadiusMain,\n transition: `backgroundColor ${odysseyDesignTokens.TransitionDurationMain}, color ${odysseyDesignTokens.TransitionDurationMain}`,\n\n ...(isSelected && {\n color: sideNavContrastColors?.fontColor\n ? `${sideNavContrastColors.fontColor}`\n : `${odysseyDesignTokens.TypographyColorAction}`,\n backgroundColor:\n sideNavContrastColors?.itemSelectedBackgroundColor ||\n odysseyDesignTokens.HueBlue50,\n }),\n}));\n\nconst scrollToNode = (node: HTMLElement | null) => {\n if (node) {\n node?.scrollIntoView({\n behavior: \"instant\",\n block: \"center\",\n inline: \"nearest\",\n });\n }\n};\n\ntype ScrollIntoViewHandle = {\n scrollIntoView: () => void;\n};\n\nexport const getBaseNavItemContentStyles = ({\n isDisabled,\n isSelected,\n odysseyDesignTokens,\n sideNavContrastColors,\n isActiveDropTarget,\n}: {\n isSelected?: boolean;\n isDisabled?: boolean;\n odysseyDesignTokens: DesignTokens;\n sideNavContrastColors: UiShellColors[\"sideNavContrastColors\"];\n isActiveDropTarget: boolean;\n}) => ({\n display: \"flex\",\n alignItems: \"center\",\n width: \"100%\",\n textDecoration: \"none\",\n // !important needed here to override more specific base link styling\n color: sideNavContrastColors?.fontColor\n ? `${sideNavContrastColors?.fontColor} !important`\n : `${odysseyDesignTokens.TypographyColorHeading} !important`,\n minHeight: \"unset\",\n paddingBlock: odysseyDesignTokens.Spacing3,\n paddingInlineEnd: odysseyDesignTokens.Spacing4,\n borderRadius: odysseyDesignTokens.BorderRadiusMain,\n transition: `backgroundColor ${odysseyDesignTokens.TransitionDurationMain}, color ${odysseyDesignTokens.TransitionDurationMain}`,\n cursor: \"pointer\",\n ...(isActiveDropTarget && {\n backgroundColor:\n sideNavContrastColors?.itemHoverBackgroundColor ||\n odysseyDesignTokens.HueNeutral50,\n }),\n\n // When hover or focus of the drag handle, apply general hover styles\n \"&:hover, li:has(> button:hover, > button:focus, > button:focus-visible) &\": {\n textDecoration: \"none\",\n backgroundColor:\n sideNavContrastColors?.itemHoverBackgroundColor ||\n odysseyDesignTokens.HueNeutral50,\n\n ...(isSelected && {\n backgroundColor:\n sideNavContrastColors?.itemSelectedBackgroundColor ||\n odysseyDesignTokens.HueBlue50,\n color:\n sideNavContrastColors?.fontColor ||\n odysseyDesignTokens.TypographyColorAction,\n }),\n\n ...(isDisabled && {\n backgroundColor: \"unset\",\n }),\n },\n\n ...(isSelected && {\n color: sideNavContrastColors?.fontColor\n ? `${sideNavContrastColors?.fontColor} !important`\n : `${odysseyDesignTokens.TypographyColorAction} !important`,\n fontWeight: odysseyDesignTokens.TypographyWeightBodyBold,\n }),\n\n ...(isDisabled && {\n cursor: \"default\",\n color: `${odysseyDesignTokens.TypographyColorDisabled} !important`,\n\n ...(sideNavContrastColors?.itemDisabledFontColor && {\n color: `${sideNavContrastColors?.itemDisabledFontColor} !important`,\n }),\n }),\n\n \"&:focus-visible\": {\n outline: \"none\",\n boxShadow: `inset 0 0 0 2px ${sideNavContrastColors?.focusRingColor || odysseyDesignTokens.PalettePrimaryMain}`,\n },\n});\n\nexport const getNavItemContentStyles = ({\n odysseyDesignTokens,\n contextValue,\n}: {\n odysseyDesignTokens: DesignTokens;\n contextValue: SideNavItemContentContextValue;\n}) => ({\n paddingInlineStart: `calc(${odysseyDesignTokens.Spacing4} * ${contextValue.depth} + ${odysseyDesignTokens.Spacing6})`,\n\n ...(contextValue.depth === 1 && {\n paddingInlineStart: odysseyDesignTokens.Spacing4,\n }),\n\n ...(contextValue.isCompact && {\n paddingBlock: odysseyDesignTokens.Spacing1,\n }),\n});\n\nconst NavItemContentContainer = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" &&\n prop != \"contextValue\" &&\n prop !== \"isDisabled\" &&\n prop !== \"sideNavContrastColors\" &&\n prop !== \"isSelected\" &&\n prop !== \"isActiveDropTarget\",\n})<{\n contextValue: SideNavItemContentContextValue;\n odysseyDesignTokens: DesignTokens;\n sideNavContrastColors: UiShellColors[\"sideNavContrastColors\"];\n isSelected?: boolean;\n isDisabled?: boolean;\n isActiveDropTarget: boolean;\n}>(\n ({\n isDisabled,\n isSelected,\n contextValue,\n odysseyDesignTokens,\n sideNavContrastColors,\n isActiveDropTarget,\n }) => ({\n ...getBaseNavItemContentStyles({\n isDisabled,\n isSelected,\n odysseyDesignTokens,\n sideNavContrastColors,\n isActiveDropTarget,\n }),\n\n ...getNavItemContentStyles({\n odysseyDesignTokens,\n contextValue,\n }),\n }),\n);\n\nconst StyledNavItemLink = styled(NavItemLink, {\n shouldForwardProp: (prop) =>\n prop != \"contextValue\" &&\n prop !== \"isDisabled\" &&\n prop !== \"isSelected\" &&\n prop !== \"odysseyDesignTokens\" &&\n prop !== \"sideNavContrastColors\" &&\n prop !== \"isActiveDropTarget\",\n})<{\n contextValue: SideNavItemContentContextValue;\n odysseyDesignTokens: DesignTokens;\n sideNavContrastColors: UiShellColors[\"sideNavContrastColors\"];\n isSelected?: boolean;\n isDisabled?: boolean;\n isActiveDropTarget: boolean;\n}>(\n ({\n isDisabled,\n isSelected,\n contextValue,\n odysseyDesignTokens,\n sideNavContrastColors,\n isActiveDropTarget,\n }) => ({\n ...getBaseNavItemContentStyles({\n isDisabled,\n isSelected,\n odysseyDesignTokens,\n sideNavContrastColors,\n isActiveDropTarget,\n }),\n\n ...getNavItemContentStyles({\n odysseyDesignTokens,\n contextValue,\n }),\n }),\n);\n\nconst SideNavItemContent = ({\n count,\n id,\n label,\n href,\n target,\n startIcon,\n severity,\n statusLabel,\n endIcon,\n onClick,\n isDisabled,\n isSelected,\n scrollRef,\n onItemSelected,\n translate,\n}: Pick<\n SideNavItem,\n | \"count\"\n | \"id\"\n | \"label\"\n | \"href\"\n | \"target\"\n | \"startIcon\"\n | \"severity\"\n | \"statusLabel\"\n | \"endIcon\"\n | \"onClick\"\n | \"isDisabled\"\n | \"isSelected\"\n | \"translate\"\n> & {\n /**\n * The ref used to scroll to this item\n */\n scrollRef?: React.RefObject<ScrollIntoViewHandle>;\n onItemSelected?: (selectedItemId: string) => void;\n}) => {\n const uiShellContext = useUiShellContext();\n const sidenavItemContentContext = useSideNavItemContent();\n const contextValue = useMemo(\n () => sidenavItemContentContext,\n [sidenavItemContentContext],\n );\n\n const odysseyDesignTokens = useOdysseyDesignTokens();\n const [isActiveDropTarget, setIsActiveDropTarget] = useState(false);\n\n const localScrollRef = useRef<HTMLLIElement>(null);\n useImperativeHandle(scrollRef, () => {\n return {\n scrollIntoView: () => {\n scrollToNode(localScrollRef.current);\n },\n };\n }, []);\n\n const itemClickHandler = useCallback<\n MouseEventHandler<HTMLDivElement | HTMLAnchorElement>\n >(\n (event) => {\n onItemSelected?.(id);\n onClick?.(event);\n },\n [id, onClick, onItemSelected],\n );\n\n const sideNavItemContentKeyHandler = useCallback<\n KeyboardEventHandler<HTMLDivElement>\n >(\n (event) => {\n if (event?.key === \"Enter\") {\n event.preventDefault();\n onItemSelected?.(id);\n onClick?.(event);\n }\n },\n [id, onClick, onItemSelected],\n );\n\n return (\n <StyledSideNavListItem\n aria-disabled={isDisabled}\n aria-current={isSelected ? \"page\" : undefined}\n disabled={isDisabled}\n id={id}\n isSelected={isSelected}\n key={id}\n odysseyDesignTokens={odysseyDesignTokens}\n ref={localScrollRef}\n sideNavContrastColors={uiShellContext?.sideNavContrastColors}\n onDragOver={() => {\n setIsActiveDropTarget(true);\n }}\n onDragLeave={() => {\n setIsActiveDropTarget(false);\n }}\n onDrop={() => {\n setIsActiveDropTarget(false);\n }}\n >\n {\n // Use Link for nav items with links and div for disabled or non-link items\n isDisabled ? (\n <NavItemContentContainer\n contextValue={contextValue}\n isDisabled={isDisabled}\n isSelected={isSelected}\n odysseyDesignTokens={odysseyDesignTokens}\n sideNavContrastColors={uiShellContext?.sideNavContrastColors}\n isActiveDropTarget={false}\n >\n <SideNavItemLinkContent\n count={count}\n label={label}\n startIcon={startIcon}\n endIcon={endIcon}\n statusLabel={statusLabel}\n severity={severity}\n translate={translate}\n />\n </NavItemContentContainer>\n ) : !href ? (\n <NavItemContentContainer\n contextValue={contextValue}\n isDisabled={isDisabled}\n isSelected={isSelected}\n onClick={itemClickHandler}\n onKeyDown={sideNavItemContentKeyHandler}\n odysseyDesignTokens={odysseyDesignTokens}\n role=\"button\"\n sideNavContrastColors={uiShellContext?.sideNavContrastColors}\n tabIndex={0}\n isActiveDropTarget={isActiveDropTarget}\n >\n <SideNavItemLinkContent\n count={count}\n label={label}\n startIcon={startIcon}\n endIcon={endIcon}\n statusLabel={statusLabel}\n severity={severity}\n translate={translate}\n />\n </NavItemContentContainer>\n ) : (\n <StyledNavItemLink\n contextValue={contextValue}\n href={href}\n isDisabled={isDisabled}\n isSelected={isSelected}\n odysseyDesignTokens={odysseyDesignTokens}\n onClick={itemClickHandler}\n sideNavContrastColors={uiShellContext?.sideNavContrastColors}\n target={target}\n isActiveDropTarget={isActiveDropTarget}\n >\n <SideNavItemLinkContent\n count={count}\n label={label}\n startIcon={startIcon}\n endIcon={endIcon}\n statusLabel={statusLabel}\n severity={severity}\n translate={translate}\n />\n {target === \"_blank\" && (\n <span className=\"Link-indicator\" role=\"presentation\">\n <ExternalLinkIcon />\n </span>\n )}\n </StyledNavItemLink>\n )\n }\n </StyledSideNavListItem>\n );\n};\n\nconst MemoizedSideNavItemContent = memo(SideNavItemContent);\nMemoizedSideNavItemContent.displayName = \"SideNavItemContent\";\n\nexport { MemoizedSideNavItemContent as SideNavItemContent };\n"],"mappings":"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","ignoreList":[]}
@@ -36,7 +36,8 @@ const SideNavItemLinkContent = ({
36
36
  startIcon,
37
37
  endIcon,
38
38
  severity,
39
- statusLabel
39
+ statusLabel,
40
+ translate
40
41
  }) => {
41
42
  const odysseyDesignTokens = useOdysseyDesignTokens();
42
43
  const sideNavItemContentStyles = useMemo(() => ({
@@ -49,6 +50,7 @@ const SideNavItemLinkContent = ({
49
50
  children: [startIcon && startIcon, _jsxs(SideNavItemLabelContainer, {
50
51
  odysseyDesignTokens: odysseyDesignTokens,
51
52
  isIconVisible: Boolean(startIcon),
53
+ translate: translate,
52
54
  children: [label, !count && severity && _jsx(Box, {
53
55
  sx: sideNavItemContentStyles,
54
56
  children: severity && _jsx(Status, {
@@ -1 +1 @@
1
- {"version":3,"file":"SideNavItemLinkContent.js","names":["styled","memo","useMemo","useOdysseyDesignTokens","Box","Status","Badge","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","SideNavItemLabelContainer","shouldForwardProp","prop","odysseyDesignTokens","isIconVisible","width","display","flexWrap","alignItems","fontSize","TypographySizeBody","marginInlineStart","Spacing3","SideNavItemLinkContent","count","label","startIcon","endIcon","severity","statusLabel","sideNavItemContentStyles","gap","Spacing1","Spacing2","children","Boolean","sx","badgeContent","MemoizedSideNavItemLinkContent","displayName"],"sources":["../../../../src/ui-shell/SideNav/SideNavItemLinkContent.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.js\";\nimport { Box } from \"../../Box.js\";\nimport { Status } from \"../../Status.js\";\nimport type { SideNavItem } from \"./types.js\";\nimport { Badge } from \"../../Badge.js\";\n\nconst SideNavItemLabelContainer = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" && prop !== \"isIconVisible\",\n})<{\n odysseyDesignTokens: DesignTokens;\n isIconVisible: boolean;\n}>(({ odysseyDesignTokens, isIconVisible }) => ({\n width: \"100%\",\n display: \"flex\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n fontSize: odysseyDesignTokens.TypographySizeBody,\n marginInlineStart: isIconVisible ? odysseyDesignTokens.Spacing3 : 0,\n}));\n\nconst SideNavItemLinkContent = ({\n count,\n label,\n startIcon,\n endIcon,\n severity,\n statusLabel,\n}: Pick<\n SideNavItem,\n \"count\" | \"label\" | \"startIcon\" | \"endIcon\" | \"severity\" | \"statusLabel\"\n>): ReactNode => {\n const odysseyDesignTokens = useOdysseyDesignTokens();\n\n const sideNavItemContentStyles = useMemo(\n () => ({\n alignItems: \"center\",\n display: \"flex\",\n gap: odysseyDesignTokens.Spacing1,\n marginInlineStart: odysseyDesignTokens.Spacing2,\n }),\n [odysseyDesignTokens],\n );\n\n return (\n <>\n {startIcon && startIcon}\n <SideNavItemLabelContainer\n odysseyDesignTokens={odysseyDesignTokens}\n isIconVisible={Boolean(startIcon)}\n >\n {label}\n {!count && severity && (\n <Box sx={sideNavItemContentStyles}>\n {severity && (\n <Status severity={severity} label={statusLabel || \"\"} />\n )}\n </Box>\n )}\n {!severity && count && (\n <Box sx={sideNavItemContentStyles}>\n {count && <Badge badgeContent={count} />}\n </Box>\n )}\n </SideNavItemLabelContainer>\n {endIcon && endIcon}\n </>\n );\n};\nconst MemoizedSideNavItemLinkContent = memo(SideNavItemLinkContent);\nMemoizedSideNavItemLinkContent.displayName = \"SideNavItemLinkContent\";\n\nexport { MemoizedSideNavItemLinkContent as SideNavItemLinkContent };\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;AAChD,SAEEC,sBAAsB,QACjB,qCAAqC;AAC5C,SAASC,GAAG,QAAQ,cAAc;AAClC,SAASC,MAAM,QAAQ,iBAAiB;AAExC,SAASC,KAAK,QAAQ,gBAAgB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA,EAAAC,QAAA,IAAAC,SAAA;AAEvC,MAAMC,yBAAyB,GAAGb,MAAM,CAAC,KAAK,EAAE;EAC9Cc,iBAAiB,EAAGC,IAAI,IACtBA,IAAI,KAAK,qBAAqB,IAAIA,IAAI,KAAK;AAC/C,CAAC,CAAC,CAGC,CAAC;EAAEC,mBAAmB;EAAEC;AAAc,CAAC,MAAM;EAC9CC,KAAK,EAAE,MAAM;EACbC,OAAO,EAAE,MAAM;EACfC,QAAQ,EAAE,MAAM;EAChBC,UAAU,EAAE,QAAQ;EACpBC,QAAQ,EAAEN,mBAAmB,CAACO,kBAAkB;EAChDC,iBAAiB,EAAEP,aAAa,GAAGD,mBAAmB,CAACS,QAAQ,GAAG;AACpE,CAAC,CAAC,CAAC;AAEH,MAAMC,sBAAsB,GAAGA,CAAC;EAC9BC,KAAK;EACLC,KAAK;EACLC,SAAS;EACTC,OAAO;EACPC,QAAQ;EACRC;AAIF,CAAC,KAAgB;EACf,MAAMhB,mBAAmB,GAAGb,sBAAsB,CAAC,CAAC;EAEpD,MAAM8B,wBAAwB,GAAG/B,OAAO,CACtC,OAAO;IACLmB,UAAU,EAAE,QAAQ;IACpBF,OAAO,EAAE,MAAM;IACfe,GAAG,EAAElB,mBAAmB,CAACmB,QAAQ;IACjCX,iBAAiB,EAAER,mBAAmB,CAACoB;EACzC,CAAC,CAAC,EACF,CAACpB,mBAAmB,CACtB,CAAC;EAED,OACEN,KAAA,CAAAE,SAAA;IAAAyB,QAAA,GACGR,SAAS,IAAIA,SAAS,EACvBnB,KAAA,CAACG,yBAAyB;MACxBG,mBAAmB,EAAEA,mBAAoB;MACzCC,aAAa,EAAEqB,OAAO,CAACT,SAAS,CAAE;MAAAQ,QAAA,GAEjCT,KAAK,EACL,CAACD,KAAK,IAAII,QAAQ,IACjBvB,IAAA,CAACJ,GAAG;QAACmC,EAAE,EAAEN,wBAAyB;QAAAI,QAAA,EAC/BN,QAAQ,IACPvB,IAAA,CAACH,MAAM;UAAC0B,QAAQ,EAAEA,QAAS;UAACH,KAAK,EAAEI,WAAW,IAAI;QAAG,CAAE;MACxD,CACE,CACN,EACA,CAACD,QAAQ,IAAIJ,KAAK,IACjBnB,IAAA,CAACJ,GAAG;QAACmC,EAAE,EAAEN,wBAAyB;QAAAI,QAAA,EAC/BV,KAAK,IAAInB,IAAA,CAACF,KAAK;UAACkC,YAAY,EAAEb;QAAM,CAAE;MAAC,CACrC,CACN;IAAA,CACwB,CAAC,EAC3BG,OAAO,IAAIA,OAAO;EAAA,CACnB,CAAC;AAEP,CAAC;AACD,MAAMW,8BAA8B,GAAGxC,IAAI,CAACyB,sBAAsB,CAAC;AACnEe,8BAA8B,CAACC,WAAW,GAAG,wBAAwB;AAErE,SAASD,8BAA8B,IAAIf,sBAAsB","ignoreList":[]}
1
+ {"version":3,"file":"SideNavItemLinkContent.js","names":["styled","memo","useMemo","useOdysseyDesignTokens","Box","Status","Badge","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","SideNavItemLabelContainer","shouldForwardProp","prop","odysseyDesignTokens","isIconVisible","width","display","flexWrap","alignItems","fontSize","TypographySizeBody","marginInlineStart","Spacing3","SideNavItemLinkContent","count","label","startIcon","endIcon","severity","statusLabel","translate","sideNavItemContentStyles","gap","Spacing1","Spacing2","children","Boolean","sx","badgeContent","MemoizedSideNavItemLinkContent","displayName"],"sources":["../../../../src/ui-shell/SideNav/SideNavItemLinkContent.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.js\";\nimport { Box } from \"../../Box.js\";\nimport { Status } from \"../../Status.js\";\nimport type { SideNavItem } from \"./types.js\";\nimport { Badge } from \"../../Badge.js\";\n\nconst SideNavItemLabelContainer = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" && prop !== \"isIconVisible\",\n})<{\n odysseyDesignTokens: DesignTokens;\n isIconVisible: boolean;\n}>(({ odysseyDesignTokens, isIconVisible }) => ({\n width: \"100%\",\n display: \"flex\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n fontSize: odysseyDesignTokens.TypographySizeBody,\n marginInlineStart: isIconVisible ? odysseyDesignTokens.Spacing3 : 0,\n}));\n\nconst SideNavItemLinkContent = ({\n count,\n label,\n startIcon,\n endIcon,\n severity,\n statusLabel,\n translate,\n}: Pick<\n SideNavItem,\n | \"count\"\n | \"label\"\n | \"startIcon\"\n | \"endIcon\"\n | \"severity\"\n | \"statusLabel\"\n | \"translate\"\n>): ReactNode => {\n const odysseyDesignTokens = useOdysseyDesignTokens();\n\n const sideNavItemContentStyles = useMemo(\n () => ({\n alignItems: \"center\",\n display: \"flex\",\n gap: odysseyDesignTokens.Spacing1,\n marginInlineStart: odysseyDesignTokens.Spacing2,\n }),\n [odysseyDesignTokens],\n );\n\n return (\n <>\n {startIcon && startIcon}\n <SideNavItemLabelContainer\n odysseyDesignTokens={odysseyDesignTokens}\n isIconVisible={Boolean(startIcon)}\n translate={translate}\n >\n {label}\n {!count && severity && (\n <Box sx={sideNavItemContentStyles}>\n {severity && (\n <Status severity={severity} label={statusLabel || \"\"} />\n )}\n </Box>\n )}\n {!severity && count && (\n <Box sx={sideNavItemContentStyles}>\n {count && <Badge badgeContent={count} />}\n </Box>\n )}\n </SideNavItemLabelContainer>\n {endIcon && endIcon}\n </>\n );\n};\nconst MemoizedSideNavItemLinkContent = memo(SideNavItemLinkContent);\nMemoizedSideNavItemLinkContent.displayName = \"SideNavItemLinkContent\";\n\nexport { MemoizedSideNavItemLinkContent as SideNavItemLinkContent };\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;AAChD,SAEEC,sBAAsB,QACjB,qCAAqC;AAC5C,SAASC,GAAG,QAAQ,cAAc;AAClC,SAASC,MAAM,QAAQ,iBAAiB;AAExC,SAASC,KAAK,QAAQ,gBAAgB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA,EAAAC,QAAA,IAAAC,SAAA;AAEvC,MAAMC,yBAAyB,GAAGb,MAAM,CAAC,KAAK,EAAE;EAC9Cc,iBAAiB,EAAGC,IAAI,IACtBA,IAAI,KAAK,qBAAqB,IAAIA,IAAI,KAAK;AAC/C,CAAC,CAAC,CAGC,CAAC;EAAEC,mBAAmB;EAAEC;AAAc,CAAC,MAAM;EAC9CC,KAAK,EAAE,MAAM;EACbC,OAAO,EAAE,MAAM;EACfC,QAAQ,EAAE,MAAM;EAChBC,UAAU,EAAE,QAAQ;EACpBC,QAAQ,EAAEN,mBAAmB,CAACO,kBAAkB;EAChDC,iBAAiB,EAAEP,aAAa,GAAGD,mBAAmB,CAACS,QAAQ,GAAG;AACpE,CAAC,CAAC,CAAC;AAEH,MAAMC,sBAAsB,GAAGA,CAAC;EAC9BC,KAAK;EACLC,KAAK;EACLC,SAAS;EACTC,OAAO;EACPC,QAAQ;EACRC,WAAW;EACXC;AAUF,CAAC,KAAgB;EACf,MAAMjB,mBAAmB,GAAGb,sBAAsB,CAAC,CAAC;EAEpD,MAAM+B,wBAAwB,GAAGhC,OAAO,CACtC,OAAO;IACLmB,UAAU,EAAE,QAAQ;IACpBF,OAAO,EAAE,MAAM;IACfgB,GAAG,EAAEnB,mBAAmB,CAACoB,QAAQ;IACjCZ,iBAAiB,EAAER,mBAAmB,CAACqB;EACzC,CAAC,CAAC,EACF,CAACrB,mBAAmB,CACtB,CAAC;EAED,OACEN,KAAA,CAAAE,SAAA;IAAA0B,QAAA,GACGT,SAAS,IAAIA,SAAS,EACvBnB,KAAA,CAACG,yBAAyB;MACxBG,mBAAmB,EAAEA,mBAAoB;MACzCC,aAAa,EAAEsB,OAAO,CAACV,SAAS,CAAE;MAClCI,SAAS,EAAEA,SAAU;MAAAK,QAAA,GAEpBV,KAAK,EACL,CAACD,KAAK,IAAII,QAAQ,IACjBvB,IAAA,CAACJ,GAAG;QAACoC,EAAE,EAAEN,wBAAyB;QAAAI,QAAA,EAC/BP,QAAQ,IACPvB,IAAA,CAACH,MAAM;UAAC0B,QAAQ,EAAEA,QAAS;UAACH,KAAK,EAAEI,WAAW,IAAI;QAAG,CAAE;MACxD,CACE,CACN,EACA,CAACD,QAAQ,IAAIJ,KAAK,IACjBnB,IAAA,CAACJ,GAAG;QAACoC,EAAE,EAAEN,wBAAyB;QAAAI,QAAA,EAC/BX,KAAK,IAAInB,IAAA,CAACF,KAAK;UAACmC,YAAY,EAAEd;QAAM,CAAE;MAAC,CACrC,CACN;IAAA,CACwB,CAAC,EAC3BG,OAAO,IAAIA,OAAO;EAAA,CACnB,CAAC;AAEP,CAAC;AACD,MAAMY,8BAA8B,GAAGzC,IAAI,CAACyB,sBAAsB,CAAC;AACnEgB,8BAA8B,CAACC,WAAW,GAAG,wBAAwB;AAErE,SAASD,8BAA8B,IAAIhB,sBAAsB","ignoreList":[]}
@@ -14,10 +14,17 @@ import { memo, useMemo } from "react";
14
14
  import styled from "@emotion/styled";
15
15
  import { OktaLogo } from "./OktaLogo.js";
16
16
  import { jsx as _jsx } from "react/jsx-runtime";
17
- const StyledLogoContainer = styled("div")(() => ({
17
+ const StyledLogoContainer = styled("div", {
18
+ shouldForwardProp: prop => prop !== "isLogoInteractive"
19
+ })(({
20
+ isLogoInteractive
21
+ }) => ({
18
22
  display: "flex",
19
23
  alignItems: "center",
20
- height: "100%"
24
+ height: "100%",
25
+ ...(isLogoInteractive && {
26
+ cursor: "pointer"
27
+ })
21
28
  }));
22
29
  const StyledLogoLink = styled("a")(() => ({
23
30
  display: "flex",
@@ -46,9 +53,14 @@ const SideNavLogo = ({
46
53
  "aria-label": optionalProps.ariaLabel,
47
54
  "data-se": "sidenav-header-logo",
48
55
  href: optionalProps.href,
56
+ onClick: optionalProps.onClick,
49
57
  children: logo
50
58
  }) : _jsx(StyledLogoContainer, {
51
59
  role: "presentation",
60
+ "aria-label": optionalProps.ariaLabel,
61
+ "data-se": "sidenav-header-logo",
62
+ onClick: optionalProps.onClick,
63
+ isLogoInteractive: Boolean(optionalProps.onClick) || optionalProps.href,
52
64
  children: logo
53
65
  });
54
66
  };