@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
@@ -1,968 +0,0 @@
1
- /*!
2
- * Copyright (c) 2023-present, Okta, Inc. and/or its affiliates. All rights reserved.
3
- * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
4
- *
5
- * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
6
- * Unless required by applicable law or agreed to in writing, software
7
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
8
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9
- *
10
- * See the License for the specific language governing permissions and limitations under the License.
11
- */
12
-
13
- import {
14
- ReactNode,
15
- memo,
16
- useCallback,
17
- useEffect,
18
- useMemo,
19
- useRef,
20
- useState,
21
- } from "react";
22
- import {
23
- MRT_Cell,
24
- MRT_DensityState,
25
- MRT_Row,
26
- MRT_SortingState,
27
- MRT_TableOptions,
28
- MRT_RowSelectionState,
29
- MRT_RowVirtualizer,
30
- MRT_VisibilityState,
31
- useMaterialReactTable,
32
- MRT_TableContainer,
33
- MRT_Column,
34
- MRT_ColumnDef,
35
- MRT_TableInstance,
36
- } from "material-react-table";
37
- import { useTranslation } from "react-i18next";
38
- import {
39
- ArrowDownIcon,
40
- ArrowUnsortedIcon,
41
- ChevronDownIcon,
42
- DragIndicatorIcon,
43
- MoreIcon,
44
- } from "../icons.generated/index.js";
45
- import { densityValues } from "./constants.js";
46
- import {
47
- Pagination,
48
- paginationTypeValues,
49
- usePagination,
50
- } from "../Pagination/index.js";
51
- import { DataFilter, DataFilters } from "../labs/DataFilters.js";
52
- import {
53
- DataTableRowActions,
54
- DataTableRowActionsProps,
55
- } from "./DataTableRowActions.js";
56
- import { useRowReordering } from "./useRowReordering.js";
57
- import { DataTableSettings } from "./DataTableSettings.js";
58
- import { Box } from "../Box.js";
59
- import { DataTableRowSelectionState, DataTableRowData } from "./index.js";
60
- import {
61
- DesignTokens,
62
- useOdysseyDesignTokens,
63
- } from "../OdysseyDesignTokensContext.js";
64
- import { useScrollIndication } from "./useScrollIndication.js";
65
- import styled from "@emotion/styled";
66
- import { EmptyState } from "../EmptyState.js";
67
- import { Button, MenuButton, MenuButtonProps } from "../Buttons/index.js";
68
- import { Callout } from "../Callout.js";
69
-
70
- export type DataTableColumn<T extends DataTableRowData> = MRT_ColumnDef<T> & {
71
- /**
72
- * @deprecated use hasTextWrapping instead of enableWrapping
73
- */
74
- enableWrapping?: boolean;
75
- hasTextWrapping?: boolean;
76
- };
77
-
78
- type DataTableColumnInstance<T extends DataTableRowData> = Omit<
79
- MRT_Column<T, unknown>,
80
- "columnDef"
81
- > & {
82
- columnDef: DataTableColumn<T>;
83
- };
84
-
85
- type DataTableCell<T extends DataTableRowData> = Omit<MRT_Cell<T>, "column"> & {
86
- column: DataTableColumnInstance<T>;
87
- };
88
-
89
- export type DataTableGetDataType = {
90
- page?: number;
91
- resultsPerPage?: number;
92
- search?: string;
93
- filters?: DataFilter[];
94
- sort?: MRT_SortingState;
95
- };
96
-
97
- export type DataTableOnReorderRowsType = {
98
- rowId: string;
99
- newRowIndex: number;
100
- };
101
-
102
- export type DataTableRenderDetailPanelType = {
103
- row: MRT_Row<DataTableRowData>;
104
- table: MRT_TableInstance<DataTableRowData>;
105
- };
106
-
107
- export type DataTableProps = {
108
- /**
109
- * An optional action button above the table.
110
- */
111
- additionalActionButton?: ReactNode;
112
- /**
113
- * MenuItems that go in an optional action menu above the table.
114
- */
115
- additionalActionMenuItems?: ReactNode;
116
- /**
117
- * Menu items to include in the bulk actions menu, which appears above the table if a row or rows are selected
118
- */
119
- bulkActionMenuItems?: (
120
- selectedRows: MRT_RowSelectionState,
121
- ) => MenuButtonProps["children"];
122
- /**
123
- * The columns that make up the table
124
- */
125
- columns: DataTableColumn<DataTableRowData>[];
126
- /**
127
- * The current page number.
128
- */
129
- currentPage?: number;
130
- /**
131
- * If `error` is not undefined, the DataTable will indicate an error.
132
- */
133
- errorMessage?: string;
134
- /**
135
- * The component to display when the table is displaying the initial empty state
136
- */
137
- emptyPlaceholder?: ReactNode;
138
- /**
139
- * An optional set of filters to render in the filters menu
140
- */
141
- filters?: Array<DataFilter | DataTableColumn<DataTableRowData> | string>;
142
- /**
143
- * The function to get the ID of a row
144
- */
145
- getRowId?: MRT_TableOptions<DataTableRowData>["getRowId"];
146
- /**
147
- * Callback that fires whenever the table needs to fetch new data, due to changes in
148
- * page, results per page, search input, filters, or sorting
149
- */
150
- getData: ({
151
- page,
152
- resultsPerPage,
153
- search,
154
- filters,
155
- sort,
156
- }: DataTableGetDataType) =>
157
- | MRT_TableOptions<DataTableRowData>["data"]
158
- | Promise<MRT_TableOptions<DataTableRowData>["data"]>;
159
- /**
160
- * If true, the end user can resize individual columns.
161
- */
162
- hasColumnResizing?: boolean;
163
- /**
164
- * If true, the end user will be able to show/hide columns.
165
- */
166
- hasColumnVisibility?: boolean;
167
- /**
168
- * If true, the end user will be able to filter columns.
169
- */
170
- hasFilters?: boolean;
171
- /**
172
- * If true, the table will include pagination controls.
173
- */
174
- hasPagination?: boolean;
175
- /**
176
- * If true, the end user can reorder rows via a drag-and-drop interface
177
- */
178
- hasRowReordering?: boolean;
179
- /**
180
- * If true, the table will include checkboxes on each row, enabling
181
- * the user to select some or all rows.
182
- */
183
- hasRowSelection?: boolean;
184
- /**
185
- * If true, the global table search controls will be shown.
186
- */
187
- hasSearch?: boolean;
188
- /**
189
- * If true, the search field will include a Search button, rather than
190
- * firing on input change.
191
- */
192
- hasSearchSubmitButton?: boolean;
193
- /**
194
- * If true, the end user can sort columns (ascending, descending, or neither)
195
- */
196
- hasSorting?: boolean;
197
- /**
198
- * If true, the end user will be able to change the table density.
199
- */
200
- hasChangeableDensity?: boolean;
201
- /**
202
- * The initial density (height & padding) of the table rows. This is available even if the
203
- * table density isn't changeable by the end user via hasChangeableDensity.
204
- */
205
- initialDensity?: (typeof densityValues)[number];
206
- /**
207
- * The initial search value
208
- */
209
- initialSearchValue?: string;
210
- /**
211
- * Is the next or show-more button disabled
212
- */
213
- isPaginationMoreDisabled?: boolean;
214
- /**
215
- * The component to display when the query returns no results
216
- */
217
- noResultsPlaceholder?: ReactNode;
218
- /**
219
- * The number of results per page.
220
- */
221
- resultsPerPage?: number;
222
- /**
223
- * The optional component to display when expanding a row.
224
- */
225
- renderDetailPanel?: MRT_TableOptions<DataTableRowData>["renderDetailPanel"];
226
- /**
227
- * Action buttons to display in each row
228
- */
229
- rowActionButtons?: DataTableRowActionsProps["rowActionButtons"];
230
- /**
231
- * Menu items to include in the optional actions menu on each row.
232
- */
233
- rowActionMenuItems?: DataTableRowActionsProps["rowActionMenuItems"];
234
- /**
235
- * The debounce time, in milliseconds, for the search input firing
236
- * `onChangeSearch` when changed. If `hasSearchSubmitButton` is true,
237
- * this doesn't do anything.
238
- */
239
- searchDelayTime?: number;
240
- /**
241
- * Callback that fires when a row (or rows) is selected or unselected.
242
- */
243
- onChangeRowSelection?: (rowSelection: DataTableRowSelectionState) => void;
244
- /**
245
- * Callback that fires when the user reorders rows within the table. Can be used
246
- * to propogate order change to the backend.
247
- */
248
- onReorderRows?: ({ rowId, newRowIndex }: DataTableOnReorderRowsType) => void;
249
- /**
250
- * The type of pagination controls shown. Defaults to next/prev buttons, but can be
251
- * set to a simple "Load more" button by setting to "loadMore".
252
- */
253
- paginationType?: (typeof paginationTypeValues)[number];
254
- /**
255
- * The total number of rows in the table. Optional, because it's sometimes impossible
256
- * to calculate. Used in table pagination to know when to disable the "next"/"more" button.
257
- */
258
- totalRows?: number;
259
- /**
260
- * The largest number of rows allowed to be shown per page. This only affects the row input
261
- * in pagination.
262
- */
263
- maxResultsPerPage?: number;
264
- /**
265
- * The highest page number allowed to be manually input in pagination
266
- */
267
- maxPages?: number;
268
- };
269
-
270
- const ScrollableTableContainer = styled("div", {
271
- shouldForwardProp: (prop) =>
272
- prop !== "odysseyDesignTokens" &&
273
- prop !== "isScrollableStart" &&
274
- prop !== "isScrollableEnd",
275
- })<{
276
- odysseyDesignTokens: DesignTokens;
277
- isScrollableStart: boolean;
278
- isScrollableEnd: boolean;
279
- }>(({ odysseyDesignTokens, isScrollableStart, isScrollableEnd }) => ({
280
- marginBlockEnd: odysseyDesignTokens.Spacing4,
281
- position: "relative",
282
- borderInlineStartColor: isScrollableStart
283
- ? odysseyDesignTokens.HueNeutral200
284
- : "transparent",
285
- borderInlineStartStyle: "solid",
286
- borderInlineStartWidth: odysseyDesignTokens.BorderWidthMain,
287
- "::before": {
288
- background:
289
- "linear-gradient(-90deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.33) 50%, rgba(0, 0, 0, 1) 100%)",
290
- content: '""',
291
- opacity: isScrollableStart ? "0.075" : "0",
292
- pointerEvents: "none",
293
- position: "absolute",
294
- top: 0,
295
- left: 0,
296
- bottom: 0,
297
- width: odysseyDesignTokens.Spacing6,
298
- zIndex: 100,
299
- transition: `opacity ${odysseyDesignTokens.TransitionDurationMain} ${odysseyDesignTokens.TransitionTimingMain}`,
300
- },
301
- borderInlineEndColor: isScrollableEnd
302
- ? odysseyDesignTokens.HueNeutral200
303
- : "transparent",
304
- borderInlineEndStyle: "solid",
305
- borderInlineEndWidth: odysseyDesignTokens.BorderWidthMain,
306
- "::after": {
307
- background:
308
- "linear-gradient(90deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.33) 50%, rgba(0, 0, 0, 1) 100%)",
309
- content: '""',
310
- opacity: isScrollableEnd ? "0.075" : "0",
311
- pointerEvents: "none",
312
- position: "absolute",
313
- top: 0,
314
- right: 0,
315
- bottom: 0,
316
- width: odysseyDesignTokens.Spacing6,
317
- transition: `opacity ${odysseyDesignTokens.TransitionDurationMain} ${odysseyDesignTokens.TransitionTimingMain}`,
318
- },
319
- }));
320
-
321
- const defaultGetRowId: DataTableProps["getRowId"] = (row) => row.id as string;
322
-
323
- const DataTable = ({
324
- additionalActionButton,
325
- additionalActionMenuItems,
326
- bulkActionMenuItems,
327
- columns,
328
- currentPage = 1,
329
- emptyPlaceholder,
330
- errorMessage: errorMessageProp,
331
- filters: filtersProp,
332
- getData,
333
- getRowId = defaultGetRowId,
334
- hasChangeableDensity,
335
- hasColumnResizing,
336
- hasColumnVisibility,
337
- hasFilters,
338
- hasPagination,
339
- hasRowReordering,
340
- hasRowSelection,
341
- hasSearch,
342
- hasSearchSubmitButton,
343
- hasSorting,
344
- initialDensity = densityValues[0],
345
- initialSearchValue = "",
346
- isPaginationMoreDisabled,
347
- noResultsPlaceholder,
348
- onChangeRowSelection,
349
- onReorderRows,
350
- paginationType = "paged",
351
- renderDetailPanel,
352
- resultsPerPage = 20,
353
- maxResultsPerPage,
354
- maxPages,
355
- rowActionButtons,
356
- rowActionMenuItems,
357
- searchDelayTime,
358
- totalRows,
359
- }: DataTableProps) => {
360
- const { t } = useTranslation();
361
-
362
- const [data, setData] = useState<DataTableRowData[]>([]);
363
- const [pagination, setPagination] = useState({
364
- pageIndex: currentPage,
365
- pageSize: resultsPerPage,
366
- });
367
- const [draggingRow, setDraggingRow] =
368
- useState<MRT_Row<DataTableRowData> | null>();
369
- const [isTableContainerScrolledToStart, setIsTableContainerScrolledToStart] =
370
- useState(true);
371
- const [isTableContainerScrolledToEnd, setIsTableContainerScrolledToEnd] =
372
- useState(true);
373
- const [tableInnerContainerWidth, setTableInnerContainerWidth] =
374
- useState<string>("100%");
375
- const tableOuterContainerRef = useRef<HTMLDivElement>(null);
376
- const tableInnerContainerRef = useRef<HTMLDivElement>(null);
377
- const tableContentRef = useRef<HTMLTableElement>(null);
378
-
379
- // Table states
380
- const [columnSorting, setColumnSorting] = useState<MRT_SortingState>([]);
381
- const [columnVisibility, setColumnVisibility] =
382
- useState<MRT_VisibilityState>();
383
- const [rowDensity, setRowDensity] =
384
- useState<MRT_DensityState>(initialDensity);
385
- const [rowSelection, setRowSelection] = useState<MRT_RowSelectionState>({});
386
- const [search, setSearch] = useState<string>(initialSearchValue);
387
- const [filters, setFilters] = useState<DataFilter[]>();
388
- const [initialFilters, setInitialFilters] = useState<DataFilter[]>();
389
- const [isLoading, setIsLoading] = useState<boolean | undefined>(true);
390
- const [isEmpty, setIsEmpty] = useState<boolean | undefined>();
391
- const [errorMessage, setErrorMessage] = useState<string | undefined>(
392
- errorMessageProp,
393
- );
394
-
395
- useScrollIndication({
396
- tableOuterContainer: tableOuterContainerRef.current,
397
- tableInnerContainer: tableInnerContainerRef.current,
398
- setIsTableContainerScrolledToStart: setIsTableContainerScrolledToStart,
399
- setIsTableContainerScrolledToEnd: setIsTableContainerScrolledToEnd,
400
- setTableInnerContainerWidth: setTableInnerContainerWidth,
401
- });
402
-
403
- const odysseyDesignTokens = useOdysseyDesignTokens();
404
-
405
- const {
406
- dragHandleStyles,
407
- dragHandleText,
408
- draggableTableBodyRowClassName,
409
- handleDragHandleKeyDown,
410
- handleDragHandleOnDragCapture,
411
- handleDragHandleOnDragEnd,
412
- resetDraggingAndHoveredRow,
413
- updateRowOrder,
414
- } = useRowReordering({
415
- totalRows,
416
- onReorderRows,
417
- data,
418
- setData,
419
- draggingRow,
420
- setDraggingRow,
421
- resultsPerPage: pagination.pageSize,
422
- page: pagination.pageIndex,
423
- });
424
-
425
- const rowDensityClassName = useMemo(() => {
426
- return rowDensity === "spacious"
427
- ? "MuiTableBody-spacious"
428
- : rowDensity === "compact"
429
- ? "MuiTableBody-compact"
430
- : "MuiTableBody-default";
431
- }, [rowDensity]);
432
-
433
- const renderRowActions = useCallback(
434
- ({ row }: { row: MRT_Row<DataTableRowData> }) => {
435
- const currentIndex =
436
- row.index + (pagination.pageIndex - 1) * pagination.pageSize;
437
- return (
438
- <DataTableRowActions
439
- row={row}
440
- rowIndex={currentIndex}
441
- rowActionButtons={rowActionButtons}
442
- rowActionMenuItems={rowActionMenuItems}
443
- totalRows={totalRows}
444
- updateRowOrder={
445
- hasRowReordering && onReorderRows ? updateRowOrder : undefined
446
- }
447
- />
448
- );
449
- },
450
- [
451
- pagination,
452
- rowActionButtons,
453
- rowActionMenuItems,
454
- hasRowReordering,
455
- onReorderRows,
456
- totalRows,
457
- updateRowOrder,
458
- ],
459
- );
460
-
461
- /**
462
- * This hack is to provide compatibility with Material-React-Table's
463
- * filterOptions format, which allows for strings and { label: string, value: string }
464
- */
465
- const convertFilterSelectOptions = useCallback(
466
- (options: DataTableColumn<DataTableRowData>["filterSelectOptions"]) =>
467
- options?.map((option) =>
468
- typeof option === "string"
469
- ? {
470
- label: option,
471
- value: option,
472
- }
473
- : {
474
- // If the option isn't a string, it must have value and/or option defined
475
- // If either is undefined, use the other
476
- // These shouldn't need `as`, but this is a legacy file now. --Kevin Ghadyani
477
- label: (option.label ?? option.value) as string,
478
- value: (option.value ?? option.label) as string,
479
- },
480
- ),
481
- [],
482
- );
483
-
484
- const convertColumnToFilter = useCallback(
485
- (column: DataTableColumn<DataTableRowData>) =>
486
- column.enableColumnFilter !== false && column.accessorKey
487
- ? ({
488
- id: column.accessorKey,
489
- label: column.header,
490
- variant: column.filterVariant,
491
- options: convertFilterSelectOptions(column.filterSelectOptions),
492
- } satisfies DataFilter as DataFilter)
493
- : null,
494
- [convertFilterSelectOptions],
495
- );
496
-
497
- /**
498
- * Filters default to the columns, but can be overridden
499
- * with the `filters` prop. `filters` should be an array
500
- * of column accessorKeys, column defs, or DataFilters.
501
- */
502
- const dataTableFilters = useMemo(() => {
503
- const providedFilters = filtersProp || columns;
504
- return providedFilters.reduce<DataFilter[]>((accumulator, item) => {
505
- if (typeof item === "string") {
506
- const foundColumn = columns.find(
507
- (column) => column.accessorKey === item,
508
- );
509
- if (foundColumn) {
510
- const filter = convertColumnToFilter(foundColumn);
511
- if (filter) {
512
- return accumulator.concat(filter);
513
- }
514
- }
515
- } else if ("accessorKey" in item) {
516
- // Checks if it's a column
517
- const filter = convertColumnToFilter(item);
518
- if (filter) {
519
- return accumulator.concat(filter);
520
- }
521
- } else if ("label" in item) {
522
- // Checks if it's a DataFilter
523
- return accumulator.concat(item);
524
- }
525
- // If none of the conditions match, item is ignored (not mapping to undefined)
526
- return accumulator;
527
- }, []);
528
- }, [columns, filtersProp, convertColumnToFilter]);
529
-
530
- const defaultCell = useCallback(
531
- ({ cell }: { cell: DataTableCell<DataTableRowData> }) => {
532
- const value = cell.getValue<string>();
533
- const hasTextWrapping =
534
- cell.column.columnDef.hasTextWrapping ||
535
- cell.column.columnDef.enableWrapping;
536
-
537
- return hasTextWrapping ? (
538
- value
539
- ) : (
540
- <Box
541
- sx={{
542
- whiteSpace: "nowrap",
543
- textOverflow: "ellipsis",
544
- overflow: "hidden",
545
- }}
546
- >
547
- {value}
548
- </Box>
549
- );
550
- },
551
- [],
552
- );
553
-
554
- const emptyState = useCallback(() => {
555
- const noResultsInnerContent = noResultsPlaceholder || (
556
- <EmptyState
557
- heading={t("table.noresults.heading")}
558
- description={t("table.noresults.text")}
559
- />
560
- );
561
-
562
- const emptyStateInnerContent =
563
- emptyPlaceholder && isEmpty ? emptyPlaceholder : noResultsInnerContent;
564
-
565
- return (
566
- <Box sx={{ width: tableInnerContainerWidth }}>
567
- {emptyStateInnerContent}
568
- </Box>
569
- );
570
- }, [
571
- emptyPlaceholder,
572
- isEmpty,
573
- noResultsPlaceholder,
574
- t,
575
- tableInnerContainerWidth,
576
- ]);
577
-
578
- const columnIds = useMemo(() => {
579
- return columns.map((column) => column.accessorKey);
580
- }, [columns]);
581
-
582
- const columnOrder = useMemo(
583
- () => [
584
- "mrt-row-drag",
585
- "mrt-row-select",
586
- "mrt-row-expand",
587
- ...columnIds,
588
- "mrt-row-actions",
589
- ],
590
- [columnIds],
591
- ) as string[];
592
-
593
- const shouldDisplayRowActions = useMemo(
594
- () =>
595
- (hasRowReordering === true && onReorderRows) ||
596
- rowActionButtons ||
597
- rowActionMenuItems
598
- ? true
599
- : false,
600
- [hasRowReordering, onReorderRows, rowActionButtons, rowActionMenuItems],
601
- );
602
-
603
- const dataTable = useMaterialReactTable({
604
- columns: columns,
605
- data: data,
606
- getRowId,
607
- state: {
608
- sorting: columnSorting,
609
- globalFilter: search,
610
- columnVisibility,
611
- isLoading,
612
- rowSelection,
613
- columnOrder,
614
- },
615
- icons: {
616
- ArrowDownwardIcon: ArrowDownIcon,
617
- DragHandleIcon: DragIndicatorIcon,
618
- SyncAltIcon: ArrowUnsortedIcon,
619
- ExpandMoreIcon: ChevronDownIcon,
620
- },
621
-
622
- // Base table settings
623
- enableColumnActions: false,
624
- enableColumnResizing: hasColumnResizing,
625
- enableDensityToggle: false,
626
- enableFilters: false,
627
- enableFullScreenToggle: false,
628
- enableGlobalFilter: false,
629
- enableHiding: false,
630
- enablePagination: false,
631
- layoutMode: "grid-no-grow",
632
- manualFiltering: true,
633
- manualSorting: true,
634
- muiTablePaperProps: {
635
- elevation: 0,
636
- sx: {
637
- overflow: "visible",
638
- },
639
- },
640
- selectAllMode: "all",
641
- displayColumnDefOptions: {
642
- "mrt-row-actions": {
643
- header: "",
644
- grow: true,
645
- muiTableBodyCellProps: {
646
- align: "right",
647
- sx: {
648
- overflow: "visible",
649
- width: "unset",
650
- },
651
- className: "ods-actions-cell",
652
- },
653
- muiTableHeadCellProps: {
654
- align: "right",
655
- sx: {
656
- width: "unset",
657
- },
658
- className: "ods-actions-cell",
659
- children: (
660
- <Box sx={{ display: "flex", visibility: "hidden" }}>
661
- {rowActionButtons && rowActionButtons({ id: null })}
662
- {((hasRowReordering && onReorderRows) || rowActionMenuItems) && (
663
- <Box>
664
- <Button
665
- endIcon={<MoreIcon />}
666
- size="small"
667
- variant="floating"
668
- ariaLabel={t("table.moreactions.arialabel")}
669
- isDisabled
670
- />
671
- </Box>
672
- )}
673
- </Box>
674
- ),
675
- },
676
- },
677
- "mrt-row-drag": {
678
- header: "",
679
- muiTableBodyCellProps: {
680
- sx: {
681
- minWidth: 0,
682
- width: "auto",
683
- },
684
- className: "ods-drag-handle",
685
- },
686
- muiTableHeadCellProps: {
687
- sx: {
688
- minWidth: 0,
689
- width: "auto",
690
- },
691
- children: (
692
- // Add a spacer to simulate the width of the drag handle in the column.
693
- // Without this, the head cells are offset from their body cell counterparts
694
- <Box sx={{ marginInline: "-0.1rem" }}>
695
- <DragIndicatorIcon sx={{ marginInline: 1, opacity: 0 }} />
696
- </Box>
697
- ),
698
- },
699
- },
700
- "mrt-row-select": {
701
- muiTableHeadCellProps: {
702
- padding: "checkbox",
703
- },
704
- muiTableBodyCellProps: {
705
- padding: "checkbox",
706
- },
707
- },
708
- "mrt-row-expand": {
709
- header: "",
710
- },
711
- },
712
- muiTableBodyProps: () => ({
713
- className: rowDensityClassName,
714
- }),
715
- defaultColumn: {
716
- Cell: defaultCell,
717
- },
718
- muiTableBodyCellProps: ({ column }) => ({
719
- className: column.getIsResizing() ? "isResizing" : "",
720
- }),
721
-
722
- // Reordering
723
- enableRowOrdering: hasRowReordering && Boolean(onReorderRows),
724
- enableRowDragging: hasRowReordering && Boolean(onReorderRows),
725
- muiTableBodyRowProps: ({ table, row }) => ({
726
- className: draggableTableBodyRowClassName({
727
- currentRowId: row.id,
728
- draggingRowId: draggingRow?.id,
729
- hoveredRowId: table.getState().hoveredRow?.id,
730
- }),
731
- }),
732
- muiRowDragHandleProps: ({ table, row }) => ({
733
- onKeyDown: (event) => handleDragHandleKeyDown({ table, row, event }),
734
- onBlur: () => resetDraggingAndHoveredRow(table),
735
- onDragEnd: () => handleDragHandleOnDragEnd(table),
736
- onDragCapture: () => handleDragHandleOnDragCapture(table),
737
- sx: dragHandleStyles,
738
- ...dragHandleText,
739
- }),
740
-
741
- // Row actions
742
- enableRowActions: shouldDisplayRowActions,
743
- positionActionsColumn:
744
- "last" as MRT_TableOptions<DataTableRowData>["positionActionsColumn"],
745
- renderRowActions: ({ row }) => renderRowActions({ row }),
746
-
747
- // Row selection
748
- enableRowSelection: hasRowSelection,
749
- onRowSelectionChange: setRowSelection,
750
-
751
- // Sorting
752
- enableSorting: hasSorting,
753
- onSortingChange: setColumnSorting,
754
- muiTableHeadCellProps: ({ column: currentColumn }) => ({
755
- className: columnSorting.find(
756
- (sortedColumn) => sortedColumn.id === currentColumn.id,
757
- )
758
- ? "isSorted"
759
- : "isUnsorted",
760
- }),
761
-
762
- // Virtualization
763
- enableRowVirtualization:
764
- paginationType !== "loadMore" && pagination.pageSize > 50,
765
- rowVirtualizerInstanceRef:
766
- useRef<MRT_RowVirtualizer<HTMLDivElement, HTMLTableRowElement>>(null),
767
- rowVirtualizerOptions: {
768
- overscan: 4,
769
- },
770
-
771
- // States
772
- renderEmptyRowsFallback: emptyState,
773
-
774
- // Refs
775
- muiTableProps: {
776
- ref: tableContentRef,
777
- className:
778
- !shouldDisplayRowActions && hasColumnResizing
779
- ? "ods-hide-spacer-column"
780
- : "",
781
- },
782
-
783
- muiTableContainerProps: {
784
- ref: tableInnerContainerRef,
785
- },
786
-
787
- // Row expansion
788
- enableExpandAll: false,
789
- renderDetailPanel: renderDetailPanel,
790
- });
791
-
792
- // Effects
793
- const bulkActionMenuButton = useMemo(
794
- () => (
795
- <>
796
- <MenuButton
797
- buttonVariant="secondary"
798
- endIcon={<MoreIcon />}
799
- isDisabled={Object.keys(rowSelection).length === 0}
800
- ariaLabel="More actions"
801
- >
802
- {bulkActionMenuItems?.(rowSelection)}
803
- </MenuButton>
804
- </>
805
- ),
806
- [bulkActionMenuItems, rowSelection],
807
- );
808
-
809
- useEffect(() => {
810
- (async () => {
811
- setIsLoading(true);
812
- setErrorMessage(errorMessageProp);
813
- try {
814
- const incomingData = await getData?.({
815
- page: pagination.pageIndex,
816
- resultsPerPage: pagination.pageSize,
817
- search,
818
- filters,
819
- sort: columnSorting,
820
- });
821
- setData(incomingData);
822
- } catch (error) {
823
- setErrorMessage(typeof error === "string" ? error : t("table.error"));
824
- } finally {
825
- setIsLoading(false);
826
- }
827
- })();
828
- }, [
829
- columnSorting,
830
- errorMessageProp,
831
- filters,
832
- getData,
833
- pagination,
834
- search,
835
- t,
836
- ]);
837
-
838
- useEffect(() => {
839
- if (!initialFilters && filters) {
840
- setInitialFilters(filters);
841
- }
842
-
843
- setIsEmpty(
844
- pagination.pageIndex === currentPage &&
845
- pagination.pageSize === resultsPerPage &&
846
- search === "" &&
847
- filters === initialFilters &&
848
- data.length === 0,
849
- );
850
- }, [
851
- filters,
852
- pagination,
853
- search,
854
- data,
855
- currentPage,
856
- initialFilters,
857
- resultsPerPage,
858
- ]);
859
-
860
- useEffect(() => {
861
- setPagination((prev) => ({
862
- pageIndex: 1,
863
- pageSize: prev.pageSize,
864
- }));
865
- }, [filters, search]);
866
-
867
- useEffect(() => {
868
- onChangeRowSelection?.(rowSelection);
869
- }, [rowSelection, onChangeRowSelection]);
870
-
871
- const { lastRow } = usePagination({
872
- currentRowsCount: data.length,
873
- pageIndex: pagination.pageIndex,
874
- pageSize: pagination.pageSize,
875
- totalRows,
876
- });
877
-
878
- // Render the table
879
- return (
880
- <>
881
- {(hasSearch ||
882
- hasFilters ||
883
- hasChangeableDensity ||
884
- hasColumnVisibility ||
885
- bulkActionMenuItems ||
886
- additionalActionButton ||
887
- additionalActionMenuItems) && (
888
- <Box sx={{ marginBottom: 5 }}>
889
- <DataFilters
890
- onChangeSearch={hasSearch ? setSearch : undefined}
891
- onChangeFilters={hasFilters ? setFilters : undefined}
892
- hasSearchSubmitButton={hasSearchSubmitButton}
893
- searchDelayTime={searchDelayTime}
894
- filters={hasFilters ? dataTableFilters : undefined}
895
- defaultSearchTerm={initialSearchValue}
896
- isDisabled={isEmpty}
897
- additionalActions={
898
- <>
899
- <DataTableSettings
900
- hasChangeableDensity={hasChangeableDensity}
901
- rowDensity={rowDensity}
902
- setRowDensity={setRowDensity}
903
- hasColumnVisibility={hasColumnVisibility}
904
- columns={columns}
905
- columnVisibility={columnVisibility}
906
- setColumnVisibility={setColumnVisibility}
907
- />
908
- {bulkActionMenuItems && bulkActionMenuButton}
909
- {additionalActionButton}
910
- {additionalActionMenuItems && (
911
- <MenuButton
912
- endIcon={<MoreIcon />}
913
- ariaLabel={t("table.moreactions.arialabel")}
914
- buttonVariant="secondary"
915
- menuAlignment="right"
916
- >
917
- {additionalActionMenuItems}
918
- </MenuButton>
919
- )}
920
- </>
921
- }
922
- />
923
- </Box>
924
- )}
925
-
926
- {errorMessage && (
927
- <Box sx={{ marginBlockEnd: 2 }}>
928
- <Callout severity="error" text={errorMessage} />
929
- </Box>
930
- )}
931
-
932
- <ScrollableTableContainer
933
- odysseyDesignTokens={odysseyDesignTokens}
934
- isScrollableStart={!isTableContainerScrolledToStart}
935
- isScrollableEnd={!isTableContainerScrolledToEnd}
936
- ref={tableOuterContainerRef}
937
- >
938
- <MRT_TableContainer table={dataTable} />
939
- </ScrollableTableContainer>
940
-
941
- {hasPagination && (
942
- <Pagination
943
- pageIndex={pagination.pageIndex}
944
- pageSize={pagination.pageSize}
945
- maxPageIndex={maxPages}
946
- maxPageSize={maxResultsPerPage}
947
- onPaginationChange={setPagination}
948
- lastRow={lastRow}
949
- totalRows={totalRows}
950
- currentRowsCount={data.length}
951
- isDisabled={isEmpty}
952
- isMoreDisabled={isPaginationMoreDisabled}
953
- variant={paginationType}
954
- rowsPerPageLabel={t("pagination.rowsperpage")}
955
- currentPageLabel={t("pagination.page")}
956
- previousLabel={t("pagination.previous")}
957
- nextLabel={t("pagination.next")}
958
- loadMoreLabel={t("pagination.loadmore")}
959
- />
960
- )}
961
- </>
962
- );
963
- };
964
-
965
- const MemoizedDataTable = memo(DataTable);
966
- MemoizedDataTable.displayName = "DataTable";
967
-
968
- export { MemoizedDataTable as DataTable };