@okta/odyssey-react-mui 1.28.1 → 1.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (326) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/Breadcrumbs.js +1 -0
  3. package/dist/Breadcrumbs.js.map +1 -1
  4. package/dist/Buttons/MenuItem.js +1 -0
  5. package/dist/Buttons/MenuItem.js.map +1 -1
  6. package/dist/Checkbox.js +62 -35
  7. package/dist/Checkbox.js.map +1 -1
  8. package/dist/DataTable/reorderDataRowsLocally.js.map +1 -1
  9. package/dist/DataTable/useRowReordering.js.map +1 -1
  10. package/dist/HtmlProps.js.map +1 -1
  11. package/dist/Pagination/Pagination.js +2 -1
  12. package/dist/Pagination/Pagination.js.map +1 -1
  13. package/dist/Radio.js +65 -38
  14. package/dist/Radio.js.map +1 -1
  15. package/dist/Typography.js +20 -0
  16. package/dist/Typography.js.map +1 -1
  17. package/dist/index.scss +1 -1
  18. package/dist/labs/DataFilters.js +9 -5
  19. package/dist/labs/DataFilters.js.map +1 -1
  20. package/dist/labs/DataTable.js +7 -7
  21. package/dist/labs/DataTable.js.map +1 -1
  22. package/dist/labs/DataView/BulkActionsMenu.js.map +1 -1
  23. package/dist/labs/DataView/CardLayoutContent.js +6 -5
  24. package/dist/labs/DataView/CardLayoutContent.js.map +1 -1
  25. package/dist/labs/DataView/DataCard.js +1 -0
  26. package/dist/labs/DataView/DataCard.js.map +1 -1
  27. package/dist/labs/DataView/DataTable.js.map +1 -1
  28. package/dist/labs/DataView/DataView.js +2 -2
  29. package/dist/labs/DataView/DataView.js.map +1 -1
  30. package/dist/labs/DataView/DetailPanel.js.map +1 -1
  31. package/dist/labs/DataView/RowActions.js.map +1 -1
  32. package/dist/labs/DataView/TableLayoutContent.js +1 -1
  33. package/dist/labs/DataView/TableLayoutContent.js.map +1 -1
  34. package/dist/labs/DataView/TableSettings.js.map +1 -1
  35. package/dist/labs/DataView/componentTypes.js.map +1 -1
  36. package/dist/labs/DataView/dataTypes.js.map +1 -1
  37. package/dist/labs/DataView/fetchData.js.map +1 -1
  38. package/dist/labs/DataView/testSupportData.js +201 -0
  39. package/dist/labs/DataView/testSupportData.js.map +1 -0
  40. package/dist/labs/DataView/useFilterConversion.js.map +1 -1
  41. package/dist/labs/{DateField.js → DatePickers/DateField.js} +1 -1
  42. package/dist/labs/DatePickers/DateField.js.map +1 -0
  43. package/dist/labs/DatePickers/DateFieldActionBar.js +56 -0
  44. package/dist/labs/DatePickers/DateFieldActionBar.js.map +1 -0
  45. package/dist/labs/DatePickers/DateFieldLocalizationProvider.js +32 -0
  46. package/dist/labs/DatePickers/DateFieldLocalizationProvider.js.map +1 -0
  47. package/dist/labs/{DatePicker.js → DatePickers/DatePicker.js} +30 -73
  48. package/dist/labs/DatePickers/DatePicker.js.map +1 -0
  49. package/dist/labs/DatePickers/DatePicker.types.d.js.map +1 -0
  50. package/dist/labs/DatePickers/DateTimeField.js +166 -0
  51. package/dist/labs/DatePickers/DateTimeField.js.map +1 -0
  52. package/dist/labs/DatePickers/DateTimePicker.js +233 -0
  53. package/dist/labs/DatePickers/DateTimePicker.js.map +1 -0
  54. package/dist/labs/{datePickerTheme.js → DatePickers/datePickerTheme.js} +2 -2
  55. package/dist/labs/DatePickers/datePickerTheme.js.map +1 -0
  56. package/dist/labs/DatePickers/dateTimePickerTheme.js +230 -0
  57. package/dist/labs/DatePickers/dateTimePickerTheme.js.map +1 -0
  58. package/dist/labs/DatePickers/index.js +15 -0
  59. package/dist/labs/DatePickers/index.js.map +1 -0
  60. package/dist/labs/DatePickers/useDateFieldsTranslations.js.map +1 -0
  61. package/dist/labs/{useOdysseyDateFields.js → DatePickers/useOdysseyDateFields.js} +36 -3
  62. package/dist/labs/DatePickers/useOdysseyDateFields.js.map +1 -0
  63. package/dist/labs/PageTemplate.js +1 -1
  64. package/dist/labs/PageTemplate.js.map +1 -1
  65. package/dist/labs/SideNav/SideNav.js +40 -34
  66. package/dist/labs/SideNav/SideNav.js.map +1 -1
  67. package/dist/labs/SideNav/SideNavHeader.js +6 -4
  68. package/dist/labs/SideNav/SideNavHeader.js.map +1 -1
  69. package/dist/labs/SideNav/SideNavItemContent.js +11 -11
  70. package/dist/labs/SideNav/SideNavItemContent.js.map +1 -1
  71. package/dist/labs/SideNav/SideNavToggleButton.js +1 -1
  72. package/dist/labs/SideNav/SideNavToggleButton.js.map +1 -1
  73. package/dist/labs/SideNav/types.js.map +1 -1
  74. package/dist/labs/TimeZonePicker.js.map +1 -1
  75. package/dist/labs/index.js +1 -3
  76. package/dist/labs/index.js.map +1 -1
  77. package/dist/properties/ts/odyssey-react-mui.js +2 -0
  78. package/dist/properties/ts/odyssey-react-mui.js.map +1 -1
  79. package/dist/src/Breadcrumbs.d.ts.map +1 -1
  80. package/dist/src/Buttons/MenuItem.d.ts.map +1 -1
  81. package/dist/src/Checkbox.d.ts.map +1 -1
  82. package/dist/src/DataTable/reorderDataRowsLocally.d.ts +3 -3
  83. package/dist/src/DataTable/reorderDataRowsLocally.d.ts.map +1 -1
  84. package/dist/src/DataTable/useRowReordering.d.ts +10 -10
  85. package/dist/src/DataTable/useRowReordering.d.ts.map +1 -1
  86. package/dist/src/HtmlProps.d.ts +27 -0
  87. package/dist/src/HtmlProps.d.ts.map +1 -1
  88. package/dist/src/OdysseyTranslationProvider.d.ts +1 -1
  89. package/dist/src/OdysseyTranslationProvider.d.ts.map +1 -1
  90. package/dist/src/Radio.d.ts +1 -1
  91. package/dist/src/Radio.d.ts.map +1 -1
  92. package/dist/src/Typography.d.ts +11 -11
  93. package/dist/src/Typography.d.ts.map +1 -1
  94. package/dist/src/labs/DataFilters.d.ts.map +1 -1
  95. package/dist/src/labs/DataTable.d.ts +11 -11
  96. package/dist/src/labs/DataTable.d.ts.map +1 -1
  97. package/dist/src/labs/DataView/BulkActionsMenu.d.ts +3 -3
  98. package/dist/src/labs/DataView/BulkActionsMenu.d.ts.map +1 -1
  99. package/dist/src/labs/DataView/CardLayoutContent.d.ts +18 -15
  100. package/dist/src/labs/DataView/CardLayoutContent.d.ts.map +1 -1
  101. package/dist/src/labs/DataView/DataCard.d.ts +7 -4
  102. package/dist/src/labs/DataView/DataCard.d.ts.map +1 -1
  103. package/dist/src/labs/DataView/DataTable.d.ts +6 -2
  104. package/dist/src/labs/DataView/DataTable.d.ts.map +1 -1
  105. package/dist/src/labs/DataView/DataView.d.ts +6 -2
  106. package/dist/src/labs/DataView/DataView.d.ts.map +1 -1
  107. package/dist/src/labs/DataView/DetailPanel.d.ts +5 -5
  108. package/dist/src/labs/DataView/DetailPanel.d.ts.map +1 -1
  109. package/dist/src/labs/DataView/RowActions.d.ts +3 -3
  110. package/dist/src/labs/DataView/RowActions.d.ts.map +1 -1
  111. package/dist/src/labs/DataView/TableLayoutContent.d.ts +18 -15
  112. package/dist/src/labs/DataView/TableLayoutContent.d.ts.map +1 -1
  113. package/dist/src/labs/DataView/TableSettings.d.ts +7 -3
  114. package/dist/src/labs/DataView/TableSettings.d.ts.map +1 -1
  115. package/dist/src/labs/DataView/componentTypes.d.ts +17 -17
  116. package/dist/src/labs/DataView/componentTypes.d.ts.map +1 -1
  117. package/dist/src/labs/DataView/dataTypes.d.ts +6 -6
  118. package/dist/src/labs/DataView/dataTypes.d.ts.map +1 -1
  119. package/dist/src/labs/DataView/fetchData.d.ts +6 -6
  120. package/dist/src/labs/DataView/fetchData.d.ts.map +1 -1
  121. package/dist/src/labs/DataView/testSupportData.d.ts +33 -0
  122. package/dist/src/labs/DataView/testSupportData.d.ts.map +1 -0
  123. package/dist/src/labs/DataView/useFilterConversion.d.ts +5 -4
  124. package/dist/src/labs/DataView/useFilterConversion.d.ts.map +1 -1
  125. package/dist/src/labs/{DateField.d.ts → DatePickers/DateField.d.ts} +1 -1
  126. package/dist/src/labs/DatePickers/DateField.d.ts.map +1 -0
  127. package/dist/src/labs/DatePickers/DateFieldActionBar.d.ts +15 -0
  128. package/dist/src/labs/DatePickers/DateFieldActionBar.d.ts.map +1 -0
  129. package/dist/src/labs/DatePickers/DateFieldLocalizationProvider.d.ts +20 -0
  130. package/dist/src/labs/DatePickers/DateFieldLocalizationProvider.d.ts.map +1 -0
  131. package/dist/src/labs/DatePickers/DatePicker.d.ts +17 -0
  132. package/dist/src/labs/DatePickers/DatePicker.d.ts.map +1 -0
  133. package/dist/src/labs/DatePickers/DateTimeField.d.ts +20 -0
  134. package/dist/src/labs/DatePickers/DateTimeField.d.ts.map +1 -0
  135. package/dist/src/labs/DatePickers/DateTimePicker.d.ts +17 -0
  136. package/dist/src/labs/DatePickers/DateTimePicker.d.ts.map +1 -0
  137. package/dist/src/labs/DatePickers/datePickerTheme.d.ts +22 -0
  138. package/dist/src/labs/DatePickers/datePickerTheme.d.ts.map +1 -0
  139. package/dist/src/labs/{datePickerTheme.d.ts → DatePickers/dateTimePickerTheme.d.ts} +2 -2
  140. package/dist/src/labs/DatePickers/dateTimePickerTheme.d.ts.map +1 -0
  141. package/dist/src/labs/DatePickers/index.d.ts +15 -0
  142. package/dist/src/labs/DatePickers/index.d.ts.map +1 -0
  143. package/dist/src/labs/DatePickers/useDateFieldsTranslations.d.ts.map +1 -0
  144. package/dist/src/labs/{useOdysseyDateFields.d.ts → DatePickers/useOdysseyDateFields.d.ts} +49 -6
  145. package/dist/src/labs/DatePickers/useOdysseyDateFields.d.ts.map +1 -0
  146. package/dist/src/labs/SideNav/SideNav.d.ts.map +1 -1
  147. package/dist/src/labs/SideNav/SideNavHeader.d.ts.map +1 -1
  148. package/dist/src/labs/SideNav/SideNavItemContent.d.ts +1 -1
  149. package/dist/src/labs/SideNav/SideNavItemContent.d.ts.map +1 -1
  150. package/dist/src/labs/SideNav/types.d.ts +2 -2
  151. package/dist/src/labs/SideNav/types.d.ts.map +1 -1
  152. package/dist/src/labs/TimeZonePicker.d.ts +4 -1
  153. package/dist/src/labs/TimeZonePicker.d.ts.map +1 -1
  154. package/dist/src/labs/index.d.ts +1 -3
  155. package/dist/src/labs/index.d.ts.map +1 -1
  156. package/dist/src/properties/ts/odyssey-react-mui.d.ts +2 -0
  157. package/dist/src/properties/ts/odyssey-react-mui.d.ts.map +1 -1
  158. package/dist/src/theme/components.d.ts.map +1 -1
  159. package/dist/src/theme/mixins.d.ts.map +1 -1
  160. package/dist/src/theme/mixins.types.d.ts +2 -0
  161. package/dist/src/theme/mixins.types.d.ts.map +1 -1
  162. package/dist/src/{labs → ui-shell}/UiShell/UiShell.d.ts +2 -2
  163. package/dist/src/ui-shell/UiShell/UiShell.d.ts.map +1 -0
  164. package/dist/src/{labs → ui-shell}/UiShell/UiShellContent.d.ts +12 -8
  165. package/dist/src/ui-shell/UiShell/UiShellContent.d.ts.map +1 -0
  166. package/dist/src/ui-shell/UiShell/bufferLatest.d.ts.map +1 -0
  167. package/dist/src/ui-shell/UiShell/createMessageBus.d.ts.map +1 -0
  168. package/dist/src/ui-shell/UiShell/createStore.d.ts.map +1 -0
  169. package/dist/src/ui-shell/UiShell/index.d.ts.map +1 -0
  170. package/dist/src/{labs → ui-shell}/UiShell/renderUiShell.d.ts +3 -4
  171. package/dist/src/ui-shell/UiShell/renderUiShell.d.ts.map +1 -0
  172. package/dist/src/{labs → ui-shell}/UiShell/useHasUiShell.d.ts +1 -0
  173. package/dist/src/ui-shell/UiShell/useHasUiShell.d.ts.map +1 -0
  174. package/dist/src/ui-shell/UiShell/useScrollState.d.ts.map +1 -0
  175. package/dist/src/ui-shell/index.d.ts +14 -0
  176. package/dist/src/ui-shell/index.d.ts.map +1 -0
  177. package/dist/src/{web-component → ui-shell}/renderReactInWebComponent.d.ts +3 -23
  178. package/dist/src/ui-shell/renderReactInWebComponent.d.ts.map +1 -0
  179. package/dist/src/web-component/index.d.ts +0 -1
  180. package/dist/src/web-component/index.d.ts.map +1 -1
  181. package/dist/src/web-component/shadow-dom.d.ts +23 -2
  182. package/dist/src/web-component/shadow-dom.d.ts.map +1 -1
  183. package/dist/theme/components.js +38 -4
  184. package/dist/theme/components.js.map +1 -1
  185. package/dist/theme/mixins.js +2 -1
  186. package/dist/theme/mixins.js.map +1 -1
  187. package/dist/theme/mixins.types.js.map +1 -1
  188. package/dist/tsconfig.production.tsbuildinfo +1 -1
  189. package/dist/{labs → ui-shell}/UiShell/UiShell.js +2 -0
  190. package/dist/ui-shell/UiShell/UiShell.js.map +1 -0
  191. package/dist/{labs → ui-shell}/UiShell/UiShellContent.js +19 -11
  192. package/dist/ui-shell/UiShell/UiShellContent.js.map +1 -0
  193. package/dist/ui-shell/UiShell/bufferLatest.js.map +1 -0
  194. package/dist/ui-shell/UiShell/createMessageBus.js.map +1 -0
  195. package/dist/ui-shell/UiShell/createStore.js.map +1 -0
  196. package/dist/ui-shell/UiShell/index.js.map +1 -0
  197. package/dist/{labs → ui-shell}/UiShell/renderUiShell.js +4 -2
  198. package/dist/ui-shell/UiShell/renderUiShell.js.map +1 -0
  199. package/dist/{labs → ui-shell}/UiShell/useHasUiShell.js +1 -1
  200. package/dist/ui-shell/UiShell/useHasUiShell.js.map +1 -0
  201. package/dist/ui-shell/UiShell/useScrollState.js.map +1 -0
  202. package/dist/ui-shell/index.js +14 -0
  203. package/dist/ui-shell/index.js.map +1 -0
  204. package/dist/{web-component → ui-shell}/renderReactInWebComponent.js +7 -17
  205. package/dist/ui-shell/renderReactInWebComponent.js.map +1 -0
  206. package/dist/web-component/index.js +0 -1
  207. package/dist/web-component/index.js.map +1 -1
  208. package/dist/web-component/shadow-dom.js +12 -2
  209. package/dist/web-component/shadow-dom.js.map +1 -1
  210. package/package.json +10 -3
  211. package/src/Breadcrumbs.tsx +5 -1
  212. package/src/Buttons/MenuItem.tsx +1 -0
  213. package/src/Checkbox.tsx +86 -44
  214. package/src/DataTable/reorderDataRowsLocally.tsx +3 -3
  215. package/src/DataTable/useRowReordering.tsx +16 -23
  216. package/src/HtmlProps.ts +27 -0
  217. package/src/Pagination/Pagination.tsx +2 -2
  218. package/src/Radio.tsx +78 -39
  219. package/src/Typography.tsx +26 -1
  220. package/src/labs/DataFilters.tsx +7 -3
  221. package/src/labs/DataTable.tsx +41 -33
  222. package/src/labs/DataView/BulkActionsMenu.tsx +4 -4
  223. package/src/labs/DataView/CardLayoutContent.tsx +34 -28
  224. package/src/labs/DataView/DataCard.tsx +13 -6
  225. package/src/labs/DataView/DataTable.tsx +11 -4
  226. package/src/labs/DataView/DataView.test.tsx +1012 -87
  227. package/src/labs/DataView/DataView.tsx +18 -11
  228. package/src/labs/DataView/DetailPanel.tsx +4 -4
  229. package/src/labs/DataView/RowActions.tsx +4 -4
  230. package/src/labs/DataView/TableLayoutContent.tsx +30 -24
  231. package/src/labs/DataView/TableSettings.tsx +12 -6
  232. package/src/labs/DataView/componentTypes.ts +17 -17
  233. package/src/labs/DataView/dataTypes.ts +14 -8
  234. package/src/labs/DataView/fetchData.ts +9 -7
  235. package/src/labs/DataView/testSupportData.tsx +301 -0
  236. package/src/labs/DataView/useFilterConversion.ts +8 -8
  237. package/src/labs/{DateField.tsx → DatePickers/DateField.tsx} +2 -2
  238. package/src/labs/DatePickers/DateFieldActionBar.tsx +65 -0
  239. package/src/labs/DatePickers/DateFieldLocalizationProvider.tsx +46 -0
  240. package/src/labs/{DatePicker.tsx → DatePickers/DatePicker.tsx} +31 -136
  241. package/src/labs/DatePickers/DateTimeField.tsx +271 -0
  242. package/src/labs/DatePickers/DateTimePicker.test.tsx +66 -0
  243. package/src/labs/DatePickers/DateTimePicker.tsx +303 -0
  244. package/src/labs/{datePickerTheme.tsx → DatePickers/datePickerTheme.tsx} +2 -2
  245. package/src/labs/DatePickers/dateTimePickerTheme.ts +213 -0
  246. package/src/labs/DatePickers/index.ts +15 -0
  247. package/src/labs/{useOdysseyDateFields.ts → DatePickers/useOdysseyDateFields.ts} +112 -10
  248. package/src/labs/PageTemplate.tsx +1 -1
  249. package/src/labs/SideNav/SideNav.tsx +38 -39
  250. package/src/labs/SideNav/SideNavHeader.tsx +6 -4
  251. package/src/labs/SideNav/SideNavItemContent.tsx +21 -18
  252. package/src/labs/SideNav/SideNavToggleButton.tsx +1 -1
  253. package/src/labs/SideNav/types.ts +2 -2
  254. package/src/labs/TimeZonePicker.tsx +5 -1
  255. package/src/labs/index.ts +2 -3
  256. package/src/properties/odyssey-react-mui.properties +2 -0
  257. package/src/properties/ts/odyssey-react-mui.ts +1 -1
  258. package/src/theme/components.tsx +45 -4
  259. package/src/theme/mixins.ts +1 -0
  260. package/src/theme/mixins.types.ts +2 -0
  261. package/src/{labs → ui-shell}/UiShell/UiShell.tsx +3 -0
  262. package/src/{labs → ui-shell}/UiShell/UiShellContent.tsx +60 -31
  263. package/src/{labs → ui-shell}/UiShell/renderUiShell.test.tsx +16 -22
  264. package/src/{labs → ui-shell}/UiShell/renderUiShell.tsx +7 -4
  265. package/src/{labs → ui-shell}/UiShell/useHasUiShell.ts +1 -1
  266. package/src/ui-shell/index.ts +14 -0
  267. package/src/{web-component → ui-shell}/renderReactInWebComponent.test.tsx +1 -1
  268. package/src/{web-component → ui-shell}/renderReactInWebComponent.ts +9 -45
  269. package/src/web-component/index.ts +0 -1
  270. package/src/web-component/shadow-dom.ts +36 -3
  271. package/dist/labs/DateField.js.map +0 -1
  272. package/dist/labs/DatePicker.js.map +0 -1
  273. package/dist/labs/DatePicker.types.d.js.map +0 -1
  274. package/dist/labs/UiShell/UiShell.js.map +0 -1
  275. package/dist/labs/UiShell/UiShellContent.js.map +0 -1
  276. package/dist/labs/UiShell/bufferLatest.js.map +0 -1
  277. package/dist/labs/UiShell/createMessageBus.js.map +0 -1
  278. package/dist/labs/UiShell/createStore.js.map +0 -1
  279. package/dist/labs/UiShell/index.js.map +0 -1
  280. package/dist/labs/UiShell/renderUiShell.js.map +0 -1
  281. package/dist/labs/UiShell/useHasUiShell.js.map +0 -1
  282. package/dist/labs/UiShell/useScrollState.js.map +0 -1
  283. package/dist/labs/datePickerTheme.js.map +0 -1
  284. package/dist/labs/useDateFieldsTranslations.js.map +0 -1
  285. package/dist/labs/useOdysseyDateFields.js.map +0 -1
  286. package/dist/src/labs/DateField.d.ts.map +0 -1
  287. package/dist/src/labs/DatePicker.d.ts +0 -47
  288. package/dist/src/labs/DatePicker.d.ts.map +0 -1
  289. package/dist/src/labs/UiShell/UiShell.d.ts.map +0 -1
  290. package/dist/src/labs/UiShell/UiShellContent.d.ts.map +0 -1
  291. package/dist/src/labs/UiShell/bufferLatest.d.ts.map +0 -1
  292. package/dist/src/labs/UiShell/createMessageBus.d.ts.map +0 -1
  293. package/dist/src/labs/UiShell/createStore.d.ts.map +0 -1
  294. package/dist/src/labs/UiShell/index.d.ts.map +0 -1
  295. package/dist/src/labs/UiShell/renderUiShell.d.ts.map +0 -1
  296. package/dist/src/labs/UiShell/useHasUiShell.d.ts.map +0 -1
  297. package/dist/src/labs/UiShell/useScrollState.d.ts.map +0 -1
  298. package/dist/src/labs/datePickerTheme.d.ts.map +0 -1
  299. package/dist/src/labs/useDateFieldsTranslations.d.ts.map +0 -1
  300. package/dist/src/labs/useOdysseyDateFields.d.ts.map +0 -1
  301. package/dist/src/web-component/renderReactInWebComponent.d.ts.map +0 -1
  302. package/dist/web-component/renderReactInWebComponent.js.map +0 -1
  303. /package/dist/labs/{DatePicker.types.d.js → DatePickers/DatePicker.types.d.js} +0 -0
  304. /package/dist/labs/{useDateFieldsTranslations.js → DatePickers/useDateFieldsTranslations.js} +0 -0
  305. /package/dist/src/labs/{useDateFieldsTranslations.d.ts → DatePickers/useDateFieldsTranslations.d.ts} +0 -0
  306. /package/dist/src/{labs → ui-shell}/UiShell/bufferLatest.d.ts +0 -0
  307. /package/dist/src/{labs → ui-shell}/UiShell/createMessageBus.d.ts +0 -0
  308. /package/dist/src/{labs → ui-shell}/UiShell/createStore.d.ts +0 -0
  309. /package/dist/src/{labs → ui-shell}/UiShell/index.d.ts +0 -0
  310. /package/dist/src/{labs → ui-shell}/UiShell/useScrollState.d.ts +0 -0
  311. /package/dist/{labs → ui-shell}/UiShell/bufferLatest.js +0 -0
  312. /package/dist/{labs → ui-shell}/UiShell/createMessageBus.js +0 -0
  313. /package/dist/{labs → ui-shell}/UiShell/createStore.js +0 -0
  314. /package/dist/{labs → ui-shell}/UiShell/index.js +0 -0
  315. /package/dist/{labs → ui-shell}/UiShell/useScrollState.js +0 -0
  316. /package/src/labs/{DatePicker.types.d.ts → DatePickers/DatePicker.types.d.ts} +0 -0
  317. /package/src/labs/{useDateFieldsTranslations.ts → DatePickers/useDateFieldsTranslations.ts} +0 -0
  318. /package/src/{labs → ui-shell}/UiShell/UiShell.test.tsx +0 -0
  319. /package/src/{labs → ui-shell}/UiShell/bufferLatest.test.ts +0 -0
  320. /package/src/{labs → ui-shell}/UiShell/bufferLatest.ts +0 -0
  321. /package/src/{labs → ui-shell}/UiShell/createMessageBus.test.ts +0 -0
  322. /package/src/{labs → ui-shell}/UiShell/createMessageBus.ts +0 -0
  323. /package/src/{labs → ui-shell}/UiShell/createStore.test.ts +0 -0
  324. /package/src/{labs → ui-shell}/UiShell/createStore.ts +0 -0
  325. /package/src/{labs → ui-shell}/UiShell/index.ts +0 -0
  326. /package/src/{labs → ui-shell}/UiShell/useScrollState.ts +0 -0
@@ -10,49 +10,33 @@
10
10
  * See the License for the specific language governing permissions and limitations under the License.
11
11
  */
12
12
 
13
- import {
14
- FocusEventHandler,
15
- memo,
16
- useCallback,
17
- useEffect,
18
- useMemo,
19
- useRef,
20
- useState,
21
- } from "react";
13
+ import { memo, useCallback, useEffect, useMemo, useRef } from "react";
22
14
  import { useTranslation } from "react-i18next";
23
15
  import {
24
16
  type DatePickerSlots,
25
17
  DatePicker as MuiDatePicker,
26
18
  DatePickerProps as MuiDatePickerProps,
27
- LocalizationProvider,
28
- PickersActionBarProps,
29
19
  DatePickerSlotProps,
30
20
  } from "@mui/x-date-pickers";
31
21
  import { DateTime } from "luxon";
32
- import { AdapterLuxon } from "@mui/x-date-pickers/AdapterLuxon";
33
22
  import styled from "@emotion/styled";
34
23
 
35
- import { Button } from "../Buttons";
36
- import {
37
- ArrowLeftIcon,
38
- ArrowRightIcon,
39
- CalendarIcon,
40
- ChevronDownIcon,
41
- } from "../icons.generated";
24
+ import { Button } from "../../Buttons";
25
+ import { DateFieldActionBar } from "./DateFieldActionBar";
42
26
  import { DateField, DateFieldProps } from "./DateField";
27
+ import { DateFieldLocalizationProvider } from "./DateFieldLocalizationProvider";
43
28
  import { datePickerTheme } from "./datePickerTheme";
44
- import { FieldComponentProps } from "../FieldComponentProps";
29
+ import { FieldComponentProps } from "../../FieldComponentProps";
45
30
  import {
46
31
  useOdysseyDesignTokens,
47
32
  DesignTokens,
48
- } from "../OdysseyDesignTokensContext";
49
- import { OdysseyThemeProvider } from "../OdysseyThemeProvider";
50
- import { TimeZonePicker, TimeZonePickerProps } from "./TimeZonePicker";
33
+ } from "../../OdysseyDesignTokensContext";
34
+ import { OdysseyThemeProvider } from "../../OdysseyThemeProvider";
35
+ import { TimeZonePicker } from "../TimeZonePicker";
51
36
 
52
37
  import {
53
38
  useOdysseyDateFields,
54
39
  OdysseyDateFieldProps,
55
- TimeZoneOption,
56
40
  } from "./useOdysseyDateFields";
57
41
 
58
42
  const DatePickerContainer = styled.div({
@@ -76,82 +60,12 @@ const TimeZonePickerContainer = styled("div", {
76
60
  marginBlockStart: odysseyDesignTokens.Spacing3,
77
61
  }));
78
62
 
79
- const ActionContainer = styled.div<{ odysseyDesignTokens: DesignTokens }>(
80
- ({ odysseyDesignTokens }) => ({
81
- display: "flex",
82
- justifyContent: "flex-end",
83
- paddingInline: odysseyDesignTokens.Spacing4,
84
- paddingBlockEnd: odysseyDesignTokens.Spacing4,
85
- }),
86
- );
87
-
88
- const ActionBar = ({ actions, onAccept, onCancel }: PickersActionBarProps) => {
89
- const { t } = useTranslation();
90
- const odysseyDesignTokens = useOdysseyDesignTokens();
91
-
92
- // actions will be [] or ["accept", "cancel"]
93
- if (actions && actions.length > 0) {
94
- return (
95
- <ActionContainer odysseyDesignTokens={odysseyDesignTokens}>
96
- <Button
97
- label={t("picker.labels.action.cancel")}
98
- onClick={onCancel}
99
- variant="floating"
100
- />
101
- <Button
102
- label={t("picker.labels.action.apply")}
103
- onClick={onAccept}
104
- variant="primary"
105
- />
106
- </ActionContainer>
107
- );
108
- }
109
-
110
- return null;
111
- };
112
-
113
- const MemoizedActionBar = memo(ActionBar);
114
- MemoizedActionBar.displayName = "ActionBar";
115
-
116
- const formatDayOfWeek = (date: DateTime) => date.toFormat("EEE");
117
-
118
63
  type RenderDateFieldProps = {
119
64
  defaultValue: DateFieldProps["defaultValue"];
120
65
  value: DateFieldProps["value"];
121
66
  } & MuiDatePickerProps<DateTime>;
122
67
 
123
- export type DatePickerProps = {
124
- /**
125
- * The label for the `input` element.
126
- */
127
- label: string;
128
- /**
129
- * Callback fired when the a date field loses focus
130
- */
131
- onBlur?: FocusEventHandler<HTMLInputElement>;
132
- /**
133
- * Callback fired when the a date is selected with the calendar.
134
- */
135
- onCalendarDateChange?: ({
136
- value,
137
- timeZone,
138
- }: {
139
- value: string | undefined;
140
- timeZone: string;
141
- }) => void;
142
- /**
143
- * Callback fired when the date/text input changes.
144
- */
145
- onInputChange?: (value: string) => void;
146
- /**
147
- * If provided, a `TimeZonePicker` will be rendered below the DatePicker. These options will populate as the Autocomplete options
148
- */
149
- timeZoneOptions?: TimeZoneOption[];
150
- /**
151
- * label for `TimeZonePicker`
152
- */
153
- timeZonePickerLabel?: TimeZonePickerProps["label"];
154
- } & OdysseyDateFieldProps &
68
+ export type DatePickerProps = OdysseyDateFieldProps &
155
69
  Pick<
156
70
  FieldComponentProps,
157
71
  | "errorMessage"
@@ -189,18 +103,25 @@ const DatePicker = ({
189
103
  const odysseyDesignTokens = useOdysseyDesignTokens();
190
104
 
191
105
  const {
106
+ closeCalendar,
107
+ commonIcons,
192
108
  defaultedLanguageCode,
193
109
  formatDateTimeToUtcIsoDateString,
110
+ formatDayOfWeek,
194
111
  inputValues,
195
112
  internalTimeZone,
196
- isValidTimeZone,
113
+ isOpen,
197
114
  localeText,
198
115
  minDate,
199
116
  maxDate,
200
- setInternalTimeZone,
117
+ onInputChange,
118
+ onTimeZoneChange,
119
+ popperElement,
120
+ setPopperElement,
201
121
  shouldDisableDate,
202
122
  shouldDisableMonth,
203
123
  shouldDisableYear,
124
+ toggleCalendarVisibility,
204
125
  } = useOdysseyDateFields({
205
126
  defaultValue: defaultValueProp,
206
127
  errorMessage,
@@ -209,18 +130,17 @@ const DatePicker = ({
209
130
  isYearEnabled,
210
131
  minDate: minDateProp,
211
132
  maxDate: maxDateProp,
133
+ onInputChange: onInputChangeProp,
212
134
  timeZone,
213
135
  value: valueProp,
214
136
  });
215
- const [isOpen, setIsOpen] = useState(false);
216
- const [popperElement, setPopperElement] = useState<HTMLInputElement | null>();
217
137
 
218
138
  const { language } = i18n;
219
139
  const containerRef = useRef<HTMLInputElement>(null);
220
140
 
221
141
  useEffect(() => {
222
142
  setPopperElement(containerRef.current);
223
- }, []);
143
+ }, [setPopperElement]);
224
144
 
225
145
  const formatDateTimeToJsDateStringOnCalendarSelection = useCallback<
226
146
  NonNullable<MuiDatePickerProps<DateTime>["onChange"]>
@@ -240,22 +160,6 @@ const DatePicker = ({
240
160
  [formatDateTimeToUtcIsoDateString, internalTimeZone, onCalendarDateChange],
241
161
  );
242
162
 
243
- const onInputChange = useCallback<(value: string) => void>(
244
- (value) => {
245
- onInputChangeProp?.(value);
246
- },
247
- [onInputChangeProp],
248
- );
249
-
250
- const toggleCalendarVisibility = useCallback(
251
- () => setIsOpen(!isOpen),
252
- [isOpen],
253
- );
254
-
255
- const resetIsOpen = useCallback(() => {
256
- setIsOpen(false);
257
- }, []);
258
-
259
163
  const renderDateField = useCallback(
260
164
  ({ defaultValue, inputRef, value }: RenderDateFieldProps) => {
261
165
  return (
@@ -267,7 +171,7 @@ const DatePicker = ({
267
171
  label=""
268
172
  onClick={toggleCalendarVisibility}
269
173
  size="small"
270
- startIcon={<CalendarIcon />}
174
+ startIcon={<commonIcons.CalendarIcon />}
271
175
  variant="floating"
272
176
  />
273
177
  }
@@ -289,6 +193,7 @@ const DatePicker = ({
289
193
  );
290
194
  },
291
195
  [
196
+ commonIcons,
292
197
  errorMessage,
293
198
  hint,
294
199
  HintLinkComponent,
@@ -308,13 +213,13 @@ const DatePicker = ({
308
213
 
309
214
  const slots = useMemo<DatePickerSlots<DateTime>>(
310
215
  () => ({
311
- actionBar: MemoizedActionBar,
216
+ actionBar: DateFieldActionBar,
312
217
  field: (muiProps) => renderDateField(muiProps),
313
- leftArrowIcon: () => <ArrowLeftIcon />,
314
- rightArrowIcon: () => <ArrowRightIcon />,
315
- switchViewIcon: () => <ChevronDownIcon />,
218
+ leftArrowIcon: () => <commonIcons.ArrowLeftIcon />,
219
+ rightArrowIcon: () => <commonIcons.ArrowRightIcon />,
220
+ switchViewIcon: () => <commonIcons.ChevronDownIcon />,
316
221
  }),
317
- [renderDateField],
222
+ [commonIcons, renderDateField],
318
223
  );
319
224
 
320
225
  const slotProps = useMemo<DatePickerSlotProps<DateTime, false>>(
@@ -337,20 +242,10 @@ const DatePicker = ({
337
242
  [popperElement],
338
243
  );
339
244
 
340
- const onTimeZoneChange = useCallback(
341
- (timeZone: string | undefined) => {
342
- if (timeZone && isValidTimeZone(timeZone)) {
343
- setInternalTimeZone(timeZone);
344
- }
345
- },
346
- [isValidTimeZone, setInternalTimeZone],
347
- );
348
-
349
245
  return (
350
246
  <OdysseyThemeProvider themeOverride={datePickerTheme}>
351
- <LocalizationProvider
352
- dateAdapter={AdapterLuxon}
353
- adapterLocale={defaultedLanguageCode}
247
+ <DateFieldLocalizationProvider
248
+ defaultedLanguageCode={defaultedLanguageCode}
354
249
  localeText={localeText}
355
250
  >
356
251
  <DatePickerContainer>
@@ -369,7 +264,7 @@ const DatePicker = ({
369
264
  minDate={minDate}
370
265
  maxDate={maxDate}
371
266
  onChange={formatDateTimeToJsDateStringOnCalendarSelection}
372
- onClose={resetIsOpen}
267
+ onClose={closeCalendar}
373
268
  open={isOpen}
374
269
  readOnly={isReadOnly}
375
270
  shouldDisableDate={shouldDisableDate}
@@ -393,7 +288,7 @@ const DatePicker = ({
393
288
  />
394
289
  </TimeZonePickerContainer>
395
290
  )}
396
- </LocalizationProvider>
291
+ </DateFieldLocalizationProvider>
397
292
  </OdysseyThemeProvider>
398
293
  );
399
294
  };
@@ -0,0 +1,271 @@
1
+ /*!
2
+ * Copyright (c) 2022-present, Okta, Inc. and/or its affiliates. All rights reserved.
3
+ * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
4
+ *
5
+ * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
6
+ * Unless required by applicable law or agreed to in writing, software
7
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
8
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9
+ *
10
+ * See the License for the specific language governing permissions and limitations under the License.
11
+ */
12
+
13
+ import {
14
+ FocusEventHandler,
15
+ memo,
16
+ useCallback,
17
+ useEffect,
18
+ useImperativeHandle,
19
+ useRef,
20
+ useState,
21
+ } from "react";
22
+ import { InputAdornment } from "@mui/material";
23
+ import {
24
+ DateTimeField as MuiDateTimeField,
25
+ DateTimeFieldProps as MuiDateTimeFieldProps,
26
+ DateTimeValidationError,
27
+ } from "@mui/x-date-pickers";
28
+ import { DateTime } from "luxon";
29
+ import { useTranslation } from "react-i18next";
30
+
31
+ import { Field, RenderFieldComponentProps } from "../../Field";
32
+ import { TextFieldProps } from "../../TextField";
33
+
34
+ export type DateTimeFieldProps = {
35
+ onChange?: (value: string) => void;
36
+ } & Pick<
37
+ MuiDateTimeFieldProps<DateTime>,
38
+ "defaultValue" | "inputRef" | "minDate" | "maxDate" | "timezone" | "value"
39
+ > &
40
+ Pick<
41
+ TextFieldProps,
42
+ | "endAdornment"
43
+ | "errorMessage"
44
+ | "hasInitialFocus"
45
+ | "hint"
46
+ | "HintLinkComponent"
47
+ | "id"
48
+ | "isDisabled"
49
+ | "isOptional"
50
+ | "isReadOnly"
51
+ | "label"
52
+ | "onBlur"
53
+ | "onFocus"
54
+ >;
55
+
56
+ const useOdysseyDateError = () => {
57
+ const { t } = useTranslation();
58
+
59
+ return new Map<DateTimeValidationError, string>([
60
+ ["invalidDate", t("picker.error.invalid")],
61
+ ["maxDate", t("picker.error.maxdate")],
62
+ ["minDate", t("picker.error.mindate")],
63
+ ]);
64
+ };
65
+
66
+ const formatDateTimeToUtcIsoDateString = (value: DateTime) =>
67
+ value.toUTC().toISO();
68
+
69
+ const DateTimeField = ({
70
+ defaultValue,
71
+ endAdornment,
72
+ errorMessage,
73
+ hasInitialFocus,
74
+ hint,
75
+ HintLinkComponent,
76
+ id: idOverride,
77
+ inputRef,
78
+ isDisabled = false,
79
+ isOptional = false,
80
+ isReadOnly,
81
+ label,
82
+ minDate,
83
+ maxDate,
84
+ onBlur,
85
+ onChange,
86
+ onFocus,
87
+ timezone,
88
+ value,
89
+ }: DateTimeFieldProps) => {
90
+ const errorMap = useOdysseyDateError();
91
+ const [displayedErrorMessage, setDisplayedErrorMessage] =
92
+ useState(errorMessage);
93
+
94
+ const internalValidationError = useRef<string | undefined>();
95
+ const localInputRef = useRef<HTMLInputElement>(null);
96
+
97
+ useImperativeHandle(
98
+ inputRef,
99
+ () => {
100
+ return {
101
+ focus: () => {
102
+ localInputRef.current?.focus();
103
+ },
104
+ };
105
+ },
106
+ [],
107
+ );
108
+
109
+ const checkMinMaxValidity = useCallback(
110
+ (value: DateTime) => {
111
+ const hasMinError = minDate && value.toUTC() < minDate.toUTC();
112
+ const hasMaxError = maxDate && value.toUTC() > maxDate.toUTC();
113
+
114
+ if (hasMinError || hasMaxError) {
115
+ if (hasMinError) {
116
+ setDisplayedErrorMessage(errorMap.get("minDate"));
117
+ }
118
+
119
+ if (hasMaxError) {
120
+ setDisplayedErrorMessage(errorMap.get("maxDate"));
121
+ }
122
+
123
+ return false;
124
+ }
125
+
126
+ return true;
127
+ },
128
+ [errorMap, minDate, maxDate],
129
+ );
130
+
131
+ useEffect(() => {
132
+ if (value) {
133
+ checkMinMaxValidity(value);
134
+ }
135
+
136
+ if (defaultValue) {
137
+ checkMinMaxValidity(defaultValue);
138
+ }
139
+ }, [checkMinMaxValidity, defaultValue, minDate, maxDate, value]);
140
+
141
+ const clearErrorMessages = useCallback(() => {
142
+ setDisplayedErrorMessage(undefined);
143
+ internalValidationError.current = undefined;
144
+ }, [internalValidationError, setDisplayedErrorMessage]);
145
+
146
+ const validateAndCallOnChange = useCallback<
147
+ NonNullable<MuiDateTimeFieldProps<DateTime>["onChange"]>
148
+ >(
149
+ (value, validationContext) => {
150
+ clearErrorMessages();
151
+ const { validationError } = validationContext;
152
+ const hasEnteredFullYear = value?.year.toString().length === 4;
153
+
154
+ if (validationError) {
155
+ const odysseyValidationError = errorMap.get(validationError);
156
+
157
+ if (odysseyValidationError) {
158
+ internalValidationError.current = odysseyValidationError;
159
+
160
+ if (value?.isValid && hasEnteredFullYear) {
161
+ setDisplayedErrorMessage(odysseyValidationError);
162
+ }
163
+ }
164
+ }
165
+
166
+ if (value?.isValid && !validationError) {
167
+ const dateStringFromDateTime = formatDateTimeToUtcIsoDateString(value);
168
+
169
+ if (dateStringFromDateTime && checkMinMaxValidity(value)) {
170
+ onChange?.(dateStringFromDateTime);
171
+ }
172
+ }
173
+ },
174
+ [checkMinMaxValidity, clearErrorMessages, errorMap, onChange],
175
+ );
176
+
177
+ const checkFieldValidityAndSetError = useCallback<
178
+ FocusEventHandler<HTMLInputElement>
179
+ >(
180
+ (event) => {
181
+ if (internalValidationError?.current && !displayedErrorMessage) {
182
+ setDisplayedErrorMessage(internalValidationError.current);
183
+ }
184
+ onBlur?.(event);
185
+ },
186
+ [displayedErrorMessage, internalValidationError, onBlur],
187
+ );
188
+
189
+ const hasVisibleAdornment = !isReadOnly && !isDisabled;
190
+
191
+ const renderFieldComponent = useCallback(
192
+ ({
193
+ ariaDescribedBy,
194
+ errorMessageElementId,
195
+ id,
196
+ labelElementId,
197
+ }: RenderFieldComponentProps) => (
198
+ <MuiDateTimeField
199
+ /* eslint-disable-next-line jsx-a11y/no-autofocus */
200
+ autoFocus={hasInitialFocus}
201
+ defaultValue={defaultValue}
202
+ disabled={isDisabled}
203
+ id={id}
204
+ inputProps={{
205
+ "aria-describedby": ariaDescribedBy,
206
+ "aria-errormessage": errorMessageElementId,
207
+ "aria-labelledby": labelElementId,
208
+ }}
209
+ InputProps={{
210
+ error: Boolean(displayedErrorMessage || errorMessage),
211
+ endAdornment: (
212
+ <>
213
+ {hasVisibleAdornment && (
214
+ <InputAdornment position="end">{endAdornment}</InputAdornment>
215
+ )}
216
+ </>
217
+ ),
218
+ }}
219
+ inputRef={localInputRef}
220
+ minDate={minDate}
221
+ maxDate={maxDate}
222
+ name={id}
223
+ onBlur={checkFieldValidityAndSetError}
224
+ onChange={validateAndCallOnChange}
225
+ onFocus={onFocus}
226
+ readOnly={isReadOnly}
227
+ timezone={timezone}
228
+ value={value}
229
+ variant="standard"
230
+ />
231
+ ),
232
+ [
233
+ checkFieldValidityAndSetError,
234
+ defaultValue,
235
+ displayedErrorMessage,
236
+ endAdornment,
237
+ errorMessage,
238
+ hasInitialFocus,
239
+ hasVisibleAdornment,
240
+ isDisabled,
241
+ localInputRef,
242
+ minDate,
243
+ maxDate,
244
+ onFocus,
245
+ isReadOnly,
246
+ timezone,
247
+ validateAndCallOnChange,
248
+ value,
249
+ ],
250
+ );
251
+
252
+ return (
253
+ <Field
254
+ errorMessage={displayedErrorMessage || errorMessage}
255
+ fieldType="single"
256
+ hasVisibleLabel
257
+ hint={hint}
258
+ HintLinkComponent={HintLinkComponent}
259
+ id={idOverride}
260
+ isDisabled={isDisabled}
261
+ isOptional={isOptional}
262
+ label={label}
263
+ renderFieldComponent={renderFieldComponent}
264
+ />
265
+ );
266
+ };
267
+
268
+ const MemoizedDateTimeField = memo(DateTimeField);
269
+ MemoizedDateTimeField.displayName = "DateTimeField";
270
+
271
+ export { MemoizedDateTimeField as DateTimeField };
@@ -0,0 +1,66 @@
1
+ /*!
2
+ * Copyright (c) 2024-present, Okta, Inc. and/or its affiliates. All rights reserved.
3
+ * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
4
+ *
5
+ * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
6
+ * Unless required by applicable law or agreed to in writing, software
7
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
8
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9
+ *
10
+ * See the License for the specific language governing permissions and limitations under the License.
11
+ */
12
+
13
+ import { render, screen } from "@testing-library/react";
14
+ import { DateTimePicker } from "./DateTimePicker";
15
+
16
+ jest.mock("react-i18next", () => ({
17
+ // this mock makes sure any components using the translate hook can use it without a warning being shown
18
+ useTranslation: () => {
19
+ return {
20
+ t: jest.fn((str) => str),
21
+ i18n: {
22
+ language: "en",
23
+ },
24
+ };
25
+ },
26
+ initReactI18next: {
27
+ type: "3rdParty",
28
+ init: () => {},
29
+ },
30
+ }));
31
+
32
+ describe("DateTimePicker", () => {
33
+ it("displays the DateTimePicker", async () => {
34
+ render(<DateTimePicker label="date time picker label" />);
35
+
36
+ const input = await screen.getByLabelText("date time picker label");
37
+ expect(input).toBeInTheDocument();
38
+ });
39
+
40
+ it("displays the correct date and time when a value is passed in ", async () => {
41
+ render(
42
+ <DateTimePicker
43
+ label="date time picker label"
44
+ value="2024-07-11T03:00:00.000Z"
45
+ timeZone="America/New_York"
46
+ />,
47
+ );
48
+
49
+ const input = await screen.getByLabelText("date time picker label");
50
+ expect(input).toBeInTheDocument();
51
+ expect(input).toHaveDisplayValue("07/10/2024 11:00 PM");
52
+ });
53
+
54
+ it("displays the correct date and time when timezone is changed", async () => {
55
+ render(
56
+ <DateTimePicker
57
+ label="date time picker label"
58
+ value="2024-07-11T03:00:00.000Z"
59
+ timeZone="America/Los_Angeles"
60
+ />,
61
+ );
62
+
63
+ const input = screen.getByLabelText("date time picker label");
64
+ expect(input).toHaveDisplayValue("07/10/2024 08:00 PM");
65
+ });
66
+ });