@okta/odyssey-react-mui 0.22.0 → 0.24.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 (584) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/README.md +43 -7
  3. package/dist/@types/i18next.d.js +14 -0
  4. package/dist/@types/i18next.d.js.map +1 -0
  5. package/dist/Autocomplete.js +18 -4
  6. package/dist/Autocomplete.js.map +1 -1
  7. package/dist/Banner.js +9 -6
  8. package/dist/Banner.js.map +1 -1
  9. package/dist/Button.js +20 -10
  10. package/dist/Button.js.map +1 -1
  11. package/dist/Checkbox.js +44 -10
  12. package/dist/Checkbox.js.map +1 -1
  13. package/dist/CheckboxGroup.js +25 -26
  14. package/dist/CheckboxGroup.js.map +1 -1
  15. package/dist/CircularProgress.js +11 -0
  16. package/dist/CircularProgress.js.map +1 -1
  17. package/dist/Dialog.js +72 -0
  18. package/dist/Dialog.js.map +1 -0
  19. package/dist/Field.js +28 -10
  20. package/dist/Field.js.map +1 -1
  21. package/dist/FieldError.js +6 -3
  22. package/dist/FieldError.js.map +1 -1
  23. package/dist/FieldHint.js +1 -2
  24. package/dist/FieldHint.js.map +1 -1
  25. package/dist/FieldLabel.js +19 -7
  26. package/dist/FieldLabel.js.map +1 -1
  27. package/dist/Fieldset.js +55 -0
  28. package/dist/Fieldset.js.map +1 -0
  29. package/dist/Form.js +69 -0
  30. package/dist/Form.js.map +1 -0
  31. package/dist/Icon.js +8 -8
  32. package/dist/Icon.js.map +1 -1
  33. package/dist/Infobox.js +7 -4
  34. package/dist/Infobox.js.map +1 -1
  35. package/dist/Link.js +10 -3
  36. package/dist/Link.js.map +1 -1
  37. package/dist/MenuButton.js +3 -7
  38. package/dist/MenuButton.js.map +1 -1
  39. package/dist/MenuItem.js +4 -2
  40. package/dist/MenuItem.js.map +1 -1
  41. package/dist/MuiPropsChild.js +32 -0
  42. package/dist/MuiPropsChild.js.map +1 -0
  43. package/dist/MuiPropsContext.js +15 -0
  44. package/dist/MuiPropsContext.js.map +1 -0
  45. package/dist/NativeSelect.js +61 -0
  46. package/dist/NativeSelect.js.map +1 -0
  47. package/dist/OdysseyCacheProvider.js +1 -2
  48. package/dist/OdysseyCacheProvider.js.map +1 -1
  49. package/dist/OdysseyI18n.js +93 -0
  50. package/dist/OdysseyI18n.js.map +1 -0
  51. package/dist/OdysseyProvider.js +42 -0
  52. package/dist/OdysseyProvider.js.map +1 -0
  53. package/dist/OdysseyThemeProvider.js +11 -5
  54. package/dist/OdysseyThemeProvider.js.map +1 -1
  55. package/dist/OdysseyTranslationProvider.js +47 -0
  56. package/dist/OdysseyTranslationProvider.js.map +1 -0
  57. package/dist/OdysseyTranslationProvider.types.js +14 -0
  58. package/dist/OdysseyTranslationProvider.types.js.map +1 -0
  59. package/dist/PasswordField.js +20 -3
  60. package/dist/PasswordField.js.map +1 -1
  61. package/dist/Radio.js +11 -2
  62. package/dist/Radio.js.map +1 -1
  63. package/dist/RadioGroup.js +36 -28
  64. package/dist/RadioGroup.js.map +1 -1
  65. package/dist/ScreenReaderText.js +3 -3
  66. package/dist/ScreenReaderText.js.map +1 -1
  67. package/dist/SearchField.js +17 -4
  68. package/dist/SearchField.js.map +1 -1
  69. package/dist/Select.js +131 -0
  70. package/dist/Select.js.map +1 -0
  71. package/dist/Status.js.map +1 -1
  72. package/dist/Tabs.js +46 -0
  73. package/dist/Tabs.js.map +1 -0
  74. package/dist/Tag.js +11 -2
  75. package/dist/Tag.js.map +1 -1
  76. package/dist/TagList.js +11 -2
  77. package/dist/TagList.js.map +1 -1
  78. package/dist/TagListContext.js +1 -0
  79. package/dist/TagListContext.js.map +1 -1
  80. package/dist/TextField.js +28 -9
  81. package/dist/TextField.js.map +1 -1
  82. package/dist/Toast.js +78 -0
  83. package/dist/Toast.js.map +1 -0
  84. package/dist/{ThemeProvider.js → ToastStack.js} +12 -10
  85. package/dist/ToastStack.js.map +1 -0
  86. package/dist/Tooltip.js +31 -0
  87. package/dist/Tooltip.js.map +1 -0
  88. package/dist/a11yCheck.js +1 -2
  89. package/dist/a11yCheck.js.map +1 -1
  90. package/dist/createUniqueAlphabeticalId.js +1 -2
  91. package/dist/createUniqueAlphabeticalId.js.map +1 -1
  92. package/dist/createUniqueId.js +1 -2
  93. package/dist/createUniqueId.js.map +1 -1
  94. package/dist/iconDictionary/Add.js +5 -6
  95. package/dist/iconDictionary/Add.js.map +1 -1
  96. package/dist/iconDictionary/AddCircle.js +5 -6
  97. package/dist/iconDictionary/AddCircle.js.map +1 -1
  98. package/dist/iconDictionary/AlertCircle.js +5 -6
  99. package/dist/iconDictionary/AlertCircle.js.map +1 -1
  100. package/dist/iconDictionary/AlertCircleFilled.js +5 -6
  101. package/dist/iconDictionary/AlertCircleFilled.js.map +1 -1
  102. package/dist/iconDictionary/AlertTriangleFilled.js +5 -6
  103. package/dist/iconDictionary/AlertTriangleFilled.js.map +1 -1
  104. package/dist/iconDictionary/Anchor.js +6 -7
  105. package/dist/iconDictionary/Anchor.js.map +1 -1
  106. package/dist/iconDictionary/ArrowDown.js +5 -6
  107. package/dist/iconDictionary/ArrowDown.js.map +1 -1
  108. package/dist/iconDictionary/ArrowLeft.js +5 -6
  109. package/dist/iconDictionary/ArrowLeft.js.map +1 -1
  110. package/dist/iconDictionary/ArrowRight.js +5 -6
  111. package/dist/iconDictionary/ArrowRight.js.map +1 -1
  112. package/dist/iconDictionary/ArrowUp.js +5 -6
  113. package/dist/iconDictionary/ArrowUp.js.map +1 -1
  114. package/dist/iconDictionary/ArrowUpDown.js +5 -6
  115. package/dist/iconDictionary/ArrowUpDown.js.map +1 -1
  116. package/dist/iconDictionary/Calendar.js +5 -6
  117. package/dist/iconDictionary/Calendar.js.map +1 -1
  118. package/dist/iconDictionary/Check.js +5 -6
  119. package/dist/iconDictionary/Check.js.map +1 -1
  120. package/dist/iconDictionary/CheckCircleFilled.js +5 -6
  121. package/dist/iconDictionary/CheckCircleFilled.js.map +1 -1
  122. package/dist/iconDictionary/ChevronDown.js +5 -6
  123. package/dist/iconDictionary/ChevronDown.js.map +1 -1
  124. package/dist/iconDictionary/ChevronUp.js +5 -6
  125. package/dist/iconDictionary/ChevronUp.js.map +1 -1
  126. package/dist/iconDictionary/Close.js +5 -6
  127. package/dist/iconDictionary/Close.js.map +1 -1
  128. package/dist/iconDictionary/CloseCircleFilled.js +5 -6
  129. package/dist/iconDictionary/CloseCircleFilled.js.map +1 -1
  130. package/dist/iconDictionary/Copy.js +5 -6
  131. package/dist/iconDictionary/Copy.js.map +1 -1
  132. package/dist/iconDictionary/Delete.js +5 -6
  133. package/dist/iconDictionary/Delete.js.map +1 -1
  134. package/dist/iconDictionary/Download.js +5 -6
  135. package/dist/iconDictionary/Download.js.map +1 -1
  136. package/dist/iconDictionary/DragHandle.js +5 -6
  137. package/dist/iconDictionary/DragHandle.js.map +1 -1
  138. package/dist/iconDictionary/Edit.js +5 -6
  139. package/dist/iconDictionary/Edit.js.map +1 -1
  140. package/dist/iconDictionary/ExternalLink.js +5 -6
  141. package/dist/iconDictionary/ExternalLink.js.map +1 -1
  142. package/dist/iconDictionary/Eye.js +5 -6
  143. package/dist/iconDictionary/Eye.js.map +1 -1
  144. package/dist/iconDictionary/EyeOff.js +5 -6
  145. package/dist/iconDictionary/EyeOff.js.map +1 -1
  146. package/dist/iconDictionary/Filter.js +5 -6
  147. package/dist/iconDictionary/Filter.js.map +1 -1
  148. package/dist/iconDictionary/Globe.js +5 -6
  149. package/dist/iconDictionary/Globe.js.map +1 -1
  150. package/dist/iconDictionary/Home.js +5 -6
  151. package/dist/iconDictionary/Home.js.map +1 -1
  152. package/dist/iconDictionary/InformationCircle.js +5 -6
  153. package/dist/iconDictionary/InformationCircle.js.map +1 -1
  154. package/dist/iconDictionary/InformationCircleFilled.js +5 -6
  155. package/dist/iconDictionary/InformationCircleFilled.js.map +1 -1
  156. package/dist/iconDictionary/Notification.js +5 -6
  157. package/dist/iconDictionary/Notification.js.map +1 -1
  158. package/dist/iconDictionary/OverflowVertical.js +5 -6
  159. package/dist/iconDictionary/OverflowVertical.js.map +1 -1
  160. package/dist/iconDictionary/QuestionCircle.js +5 -6
  161. package/dist/iconDictionary/QuestionCircle.js.map +1 -1
  162. package/dist/iconDictionary/QuestionCircleFilled.js +5 -6
  163. package/dist/iconDictionary/QuestionCircleFilled.js.map +1 -1
  164. package/dist/iconDictionary/Search.js +5 -6
  165. package/dist/iconDictionary/Search.js.map +1 -1
  166. package/dist/iconDictionary/Settings.js +4 -5
  167. package/dist/iconDictionary/Settings.js.map +1 -1
  168. package/dist/iconDictionary/Subtract.js +5 -6
  169. package/dist/iconDictionary/Subtract.js.map +1 -1
  170. package/dist/iconDictionary/SvgIcon.js +1 -0
  171. package/dist/iconDictionary/SvgIcon.js.map +1 -1
  172. package/dist/iconDictionary/User.js +5 -6
  173. package/dist/iconDictionary/User.js.map +1 -1
  174. package/dist/iconDictionary/UserGroup.js +5 -6
  175. package/dist/iconDictionary/UserGroup.js.map +1 -1
  176. package/dist/iconDictionary/index.js.map +1 -1
  177. package/dist/index.js +13 -6
  178. package/dist/index.js.map +1 -1
  179. package/dist/properties/ts/odyssey-react-mui.js +11 -0
  180. package/dist/properties/ts/odyssey-react-mui.js.map +1 -0
  181. package/dist/properties/ts/odyssey-react-mui_cs.js +2 -0
  182. package/dist/properties/ts/odyssey-react-mui_cs.js.map +1 -0
  183. package/dist/properties/ts/odyssey-react-mui_da.js +2 -0
  184. package/dist/properties/ts/odyssey-react-mui_da.js.map +1 -0
  185. package/dist/properties/ts/odyssey-react-mui_de.js +2 -0
  186. package/dist/properties/ts/odyssey-react-mui_de.js.map +1 -0
  187. package/dist/properties/ts/odyssey-react-mui_el.js +2 -0
  188. package/dist/properties/ts/odyssey-react-mui_el.js.map +1 -0
  189. package/dist/properties/ts/odyssey-react-mui_es.js +2 -0
  190. package/dist/properties/ts/odyssey-react-mui_es.js.map +1 -0
  191. package/dist/properties/ts/odyssey-react-mui_fi.js +2 -0
  192. package/dist/properties/ts/odyssey-react-mui_fi.js.map +1 -0
  193. package/dist/properties/ts/odyssey-react-mui_fr.js +2 -0
  194. package/dist/properties/ts/odyssey-react-mui_fr.js.map +1 -0
  195. package/dist/properties/ts/odyssey-react-mui_hu.js +2 -0
  196. package/dist/properties/ts/odyssey-react-mui_hu.js.map +1 -0
  197. package/dist/properties/ts/odyssey-react-mui_id.js +2 -0
  198. package/dist/properties/ts/odyssey-react-mui_id.js.map +1 -0
  199. package/dist/properties/ts/odyssey-react-mui_it.js +2 -0
  200. package/dist/properties/ts/odyssey-react-mui_it.js.map +1 -0
  201. package/dist/properties/ts/odyssey-react-mui_ja.js +2 -0
  202. package/dist/properties/ts/odyssey-react-mui_ja.js.map +1 -0
  203. package/dist/properties/ts/odyssey-react-mui_ko.js +2 -0
  204. package/dist/properties/ts/odyssey-react-mui_ko.js.map +1 -0
  205. package/dist/properties/ts/odyssey-react-mui_ms.js +2 -0
  206. package/dist/properties/ts/odyssey-react-mui_ms.js.map +1 -0
  207. package/dist/properties/ts/odyssey-react-mui_nb.js +2 -0
  208. package/dist/properties/ts/odyssey-react-mui_nb.js.map +1 -0
  209. package/dist/properties/ts/odyssey-react-mui_nl-NL.js +2 -0
  210. package/dist/properties/ts/odyssey-react-mui_nl-NL.js.map +1 -0
  211. package/dist/properties/ts/odyssey-react-mui_pl.js +2 -0
  212. package/dist/properties/ts/odyssey-react-mui_pl.js.map +1 -0
  213. package/dist/properties/ts/odyssey-react-mui_pt-BR.js +2 -0
  214. package/dist/properties/ts/odyssey-react-mui_pt-BR.js.map +1 -0
  215. package/dist/properties/ts/odyssey-react-mui_ro.js +2 -0
  216. package/dist/properties/ts/odyssey-react-mui_ro.js.map +1 -0
  217. package/dist/properties/ts/odyssey-react-mui_ru.js +2 -0
  218. package/dist/properties/ts/odyssey-react-mui_ru.js.map +1 -0
  219. package/dist/properties/ts/odyssey-react-mui_sv.js +2 -0
  220. package/dist/properties/ts/odyssey-react-mui_sv.js.map +1 -0
  221. package/dist/properties/ts/odyssey-react-mui_th.js +2 -0
  222. package/dist/properties/ts/odyssey-react-mui_th.js.map +1 -0
  223. package/dist/properties/ts/odyssey-react-mui_tr.js +2 -0
  224. package/dist/properties/ts/odyssey-react-mui_tr.js.map +1 -0
  225. package/dist/properties/ts/odyssey-react-mui_uk.js +2 -0
  226. package/dist/properties/ts/odyssey-react-mui_uk.js.map +1 -0
  227. package/dist/properties/ts/odyssey-react-mui_zh-CN.js +2 -0
  228. package/dist/properties/ts/odyssey-react-mui_zh-CN.js.map +1 -0
  229. package/dist/properties/ts/odyssey-react-mui_zh-TW.js +2 -0
  230. package/dist/properties/ts/odyssey-react-mui_zh-TW.js.map +1 -0
  231. package/dist/src/Autocomplete.d.ts +2 -1
  232. package/dist/src/Autocomplete.d.ts.map +1 -1
  233. package/dist/src/Banner.d.ts +19 -19
  234. package/dist/src/Banner.d.ts.map +1 -1
  235. package/dist/src/Button.d.ts +4 -3
  236. package/dist/src/Button.d.ts.map +1 -1
  237. package/dist/src/Checkbox.d.ts +4 -2
  238. package/dist/src/Checkbox.d.ts.map +1 -1
  239. package/dist/src/CheckboxGroup.d.ts +8 -4
  240. package/dist/src/CheckboxGroup.d.ts.map +1 -1
  241. package/dist/src/Dialog.d.ts +25 -0
  242. package/dist/src/Dialog.d.ts.map +1 -0
  243. package/dist/src/Field.d.ts +18 -7
  244. package/dist/src/Field.d.ts.map +1 -1
  245. package/dist/src/FieldError.d.ts.map +1 -1
  246. package/dist/src/FieldLabel.d.ts +2 -3
  247. package/dist/src/FieldLabel.d.ts.map +1 -1
  248. package/dist/src/Fieldset.d.ts +42 -0
  249. package/dist/src/Fieldset.d.ts.map +1 -0
  250. package/dist/src/Form.d.ts +73 -0
  251. package/dist/src/Form.d.ts.map +1 -0
  252. package/dist/src/Icon.d.ts +9 -8
  253. package/dist/src/Icon.d.ts.map +1 -1
  254. package/dist/src/Infobox.d.ts +7 -7
  255. package/dist/src/Infobox.d.ts.map +1 -1
  256. package/dist/src/Link.d.ts +9 -4
  257. package/dist/src/Link.d.ts.map +1 -1
  258. package/dist/src/MenuButton.d.ts +7 -3
  259. package/dist/src/MenuButton.d.ts.map +1 -1
  260. package/dist/src/MenuItem.d.ts +1 -1
  261. package/dist/src/MenuItem.d.ts.map +1 -1
  262. package/dist/src/MuiPropsChild.d.ts +18 -0
  263. package/dist/src/MuiPropsChild.d.ts.map +1 -0
  264. package/dist/src/MuiPropsContext.d.ts +15 -0
  265. package/dist/src/MuiPropsContext.d.ts.map +1 -0
  266. package/dist/src/NativeSelect.d.ts +36 -0
  267. package/dist/src/NativeSelect.d.ts.map +1 -0
  268. package/dist/src/OdysseyI18n.d.ts +54 -0
  269. package/dist/src/OdysseyI18n.d.ts.map +1 -0
  270. package/dist/src/OdysseyProvider.d.ts +27 -0
  271. package/dist/src/OdysseyProvider.d.ts.map +1 -0
  272. package/dist/src/OdysseyThemeProvider.d.ts +4 -2
  273. package/dist/src/OdysseyThemeProvider.d.ts.map +1 -1
  274. package/dist/src/OdysseyTranslationProvider.d.ts +25 -0
  275. package/dist/src/OdysseyTranslationProvider.d.ts.map +1 -0
  276. package/dist/src/OdysseyTranslationProvider.types.d.ts +14 -0
  277. package/dist/src/OdysseyTranslationProvider.types.d.ts.map +1 -0
  278. package/dist/src/PasswordField.d.ts +8 -8
  279. package/dist/src/PasswordField.d.ts.map +1 -1
  280. package/dist/src/RadioGroup.d.ts +8 -8
  281. package/dist/src/RadioGroup.d.ts.map +1 -1
  282. package/dist/src/SearchField.d.ts +4 -4
  283. package/dist/src/SearchField.d.ts.map +1 -1
  284. package/dist/src/Select.d.ts +35 -0
  285. package/dist/src/Select.d.ts.map +1 -0
  286. package/dist/src/Status.d.ts +2 -2
  287. package/dist/src/Status.d.ts.map +1 -1
  288. package/dist/src/Tabs.d.ts +27 -0
  289. package/dist/src/Tabs.d.ts.map +1 -0
  290. package/dist/src/TextField.d.ts +12 -15
  291. package/dist/src/TextField.d.ts.map +1 -1
  292. package/dist/src/Toast.d.ts +60 -0
  293. package/dist/src/Toast.d.ts.map +1 -0
  294. package/dist/src/ToastStack.d.ts +19 -0
  295. package/dist/src/ToastStack.d.ts.map +1 -0
  296. package/dist/src/{ThemeProvider.d.ts → Tooltip.d.ts} +8 -4
  297. package/dist/src/Tooltip.d.ts.map +1 -0
  298. package/dist/src/iconDictionary/Add.d.ts +2 -2
  299. package/dist/src/iconDictionary/AddCircle.d.ts +2 -2
  300. package/dist/src/iconDictionary/AlertCircle.d.ts +2 -2
  301. package/dist/src/iconDictionary/AlertCircleFilled.d.ts +2 -2
  302. package/dist/src/iconDictionary/AlertTriangleFilled.d.ts +2 -2
  303. package/dist/src/iconDictionary/Anchor.d.ts +2 -2
  304. package/dist/src/iconDictionary/ArrowDown.d.ts +2 -2
  305. package/dist/src/iconDictionary/ArrowLeft.d.ts +2 -2
  306. package/dist/src/iconDictionary/ArrowRight.d.ts +2 -2
  307. package/dist/src/iconDictionary/ArrowUp.d.ts +2 -2
  308. package/dist/src/iconDictionary/ArrowUpDown.d.ts +2 -2
  309. package/dist/src/iconDictionary/Calendar.d.ts +2 -2
  310. package/dist/src/iconDictionary/Check.d.ts +2 -2
  311. package/dist/src/iconDictionary/CheckCircleFilled.d.ts +2 -2
  312. package/dist/src/iconDictionary/ChevronDown.d.ts +2 -2
  313. package/dist/src/iconDictionary/ChevronUp.d.ts +2 -2
  314. package/dist/src/iconDictionary/Close.d.ts +2 -2
  315. package/dist/src/iconDictionary/CloseCircleFilled.d.ts +2 -2
  316. package/dist/src/iconDictionary/Copy.d.ts +2 -2
  317. package/dist/src/iconDictionary/Delete.d.ts +2 -2
  318. package/dist/src/iconDictionary/Download.d.ts +2 -2
  319. package/dist/src/iconDictionary/DragHandle.d.ts +2 -2
  320. package/dist/src/iconDictionary/Edit.d.ts +2 -2
  321. package/dist/src/iconDictionary/ExternalLink.d.ts +2 -2
  322. package/dist/src/iconDictionary/Eye.d.ts +2 -2
  323. package/dist/src/iconDictionary/EyeOff.d.ts +2 -2
  324. package/dist/src/iconDictionary/Filter.d.ts +2 -2
  325. package/dist/src/iconDictionary/Globe.d.ts +2 -2
  326. package/dist/src/iconDictionary/Home.d.ts +2 -2
  327. package/dist/src/iconDictionary/InformationCircle.d.ts +2 -2
  328. package/dist/src/iconDictionary/InformationCircleFilled.d.ts +2 -2
  329. package/dist/src/iconDictionary/Notification.d.ts +2 -2
  330. package/dist/src/iconDictionary/OverflowVertical.d.ts +2 -2
  331. package/dist/src/iconDictionary/QuestionCircle.d.ts +2 -2
  332. package/dist/src/iconDictionary/QuestionCircleFilled.d.ts +2 -2
  333. package/dist/src/iconDictionary/Search.d.ts +2 -2
  334. package/dist/src/iconDictionary/Settings.d.ts +2 -2
  335. package/dist/src/iconDictionary/Subtract.d.ts +2 -2
  336. package/dist/src/iconDictionary/User.d.ts +2 -2
  337. package/dist/src/iconDictionary/UserGroup.d.ts +2 -2
  338. package/dist/src/iconDictionary/index.d.ts +40 -40
  339. package/dist/src/index.d.ts +15 -10
  340. package/dist/src/index.d.ts.map +1 -1
  341. package/dist/src/properties/ts/odyssey-react-mui.d.ts +11 -0
  342. package/dist/src/properties/ts/odyssey-react-mui.d.ts.map +1 -0
  343. package/dist/src/properties/ts/odyssey-react-mui_cs.d.ts +2 -0
  344. package/dist/src/properties/ts/odyssey-react-mui_cs.d.ts.map +1 -0
  345. package/dist/src/properties/ts/odyssey-react-mui_da.d.ts +2 -0
  346. package/dist/src/properties/ts/odyssey-react-mui_da.d.ts.map +1 -0
  347. package/dist/src/properties/ts/odyssey-react-mui_de.d.ts +2 -0
  348. package/dist/src/properties/ts/odyssey-react-mui_de.d.ts.map +1 -0
  349. package/dist/src/properties/ts/odyssey-react-mui_el.d.ts +2 -0
  350. package/dist/src/properties/ts/odyssey-react-mui_el.d.ts.map +1 -0
  351. package/dist/src/properties/ts/odyssey-react-mui_es.d.ts +2 -0
  352. package/dist/src/properties/ts/odyssey-react-mui_es.d.ts.map +1 -0
  353. package/dist/src/properties/ts/odyssey-react-mui_fi.d.ts +2 -0
  354. package/dist/src/properties/ts/odyssey-react-mui_fi.d.ts.map +1 -0
  355. package/dist/src/properties/ts/odyssey-react-mui_fr.d.ts +2 -0
  356. package/dist/src/properties/ts/odyssey-react-mui_fr.d.ts.map +1 -0
  357. package/dist/src/properties/ts/odyssey-react-mui_hu.d.ts +2 -0
  358. package/dist/src/properties/ts/odyssey-react-mui_hu.d.ts.map +1 -0
  359. package/dist/src/properties/ts/odyssey-react-mui_id.d.ts +2 -0
  360. package/dist/src/properties/ts/odyssey-react-mui_id.d.ts.map +1 -0
  361. package/dist/src/properties/ts/odyssey-react-mui_it.d.ts +2 -0
  362. package/dist/src/properties/ts/odyssey-react-mui_it.d.ts.map +1 -0
  363. package/dist/src/properties/ts/odyssey-react-mui_ja.d.ts +2 -0
  364. package/dist/src/properties/ts/odyssey-react-mui_ja.d.ts.map +1 -0
  365. package/dist/src/properties/ts/odyssey-react-mui_ko.d.ts +2 -0
  366. package/dist/src/properties/ts/odyssey-react-mui_ko.d.ts.map +1 -0
  367. package/dist/src/properties/ts/odyssey-react-mui_ms.d.ts +2 -0
  368. package/dist/src/properties/ts/odyssey-react-mui_ms.d.ts.map +1 -0
  369. package/dist/src/properties/ts/odyssey-react-mui_nb.d.ts +2 -0
  370. package/dist/src/properties/ts/odyssey-react-mui_nb.d.ts.map +1 -0
  371. package/dist/src/properties/ts/odyssey-react-mui_nl-NL.d.ts +2 -0
  372. package/dist/src/properties/ts/odyssey-react-mui_nl-NL.d.ts.map +1 -0
  373. package/dist/src/properties/ts/odyssey-react-mui_pl.d.ts +2 -0
  374. package/dist/src/properties/ts/odyssey-react-mui_pl.d.ts.map +1 -0
  375. package/dist/src/properties/ts/odyssey-react-mui_pt-BR.d.ts +2 -0
  376. package/dist/src/properties/ts/odyssey-react-mui_pt-BR.d.ts.map +1 -0
  377. package/dist/src/properties/ts/odyssey-react-mui_ro.d.ts +2 -0
  378. package/dist/src/properties/ts/odyssey-react-mui_ro.d.ts.map +1 -0
  379. package/dist/src/properties/ts/odyssey-react-mui_ru.d.ts +2 -0
  380. package/dist/src/properties/ts/odyssey-react-mui_ru.d.ts.map +1 -0
  381. package/dist/src/properties/ts/odyssey-react-mui_sv.d.ts +2 -0
  382. package/dist/src/properties/ts/odyssey-react-mui_sv.d.ts.map +1 -0
  383. package/dist/src/properties/ts/odyssey-react-mui_th.d.ts +2 -0
  384. package/dist/src/properties/ts/odyssey-react-mui_th.d.ts.map +1 -0
  385. package/dist/src/properties/ts/odyssey-react-mui_tr.d.ts +2 -0
  386. package/dist/src/properties/ts/odyssey-react-mui_tr.d.ts.map +1 -0
  387. package/dist/src/properties/ts/odyssey-react-mui_uk.d.ts +2 -0
  388. package/dist/src/properties/ts/odyssey-react-mui_uk.d.ts.map +1 -0
  389. package/dist/src/properties/ts/odyssey-react-mui_zh-CN.d.ts +2 -0
  390. package/dist/src/properties/ts/odyssey-react-mui_zh-CN.d.ts.map +1 -0
  391. package/dist/src/properties/ts/odyssey-react-mui_zh-TW.d.ts +2 -0
  392. package/dist/src/properties/ts/odyssey-react-mui_zh-TW.d.ts.map +1 -0
  393. package/dist/src/theme/components.d.ts.map +1 -1
  394. package/dist/src/theme/index.d.ts +3 -1
  395. package/dist/src/theme/index.d.ts.map +1 -1
  396. package/dist/src/theme/mixins.d.ts +2 -1
  397. package/dist/src/theme/mixins.d.ts.map +1 -1
  398. package/dist/src/theme/palette.d.ts +2 -1
  399. package/dist/src/theme/palette.d.ts.map +1 -1
  400. package/dist/src/theme/shape.d.ts +2 -1
  401. package/dist/src/theme/shape.d.ts.map +1 -1
  402. package/dist/src/theme/spacing.d.ts +2 -1
  403. package/dist/src/theme/spacing.d.ts.map +1 -1
  404. package/dist/src/theme/theme.d.ts +3 -2
  405. package/dist/src/theme/theme.d.ts.map +1 -1
  406. package/dist/src/theme/typography.d.ts +2 -1
  407. package/dist/src/theme/typography.d.ts.map +1 -1
  408. package/dist/theme/components.js +123 -85
  409. package/dist/theme/components.js.map +1 -1
  410. package/dist/theme/components.types.js +1 -0
  411. package/dist/theme/components.types.js.map +1 -1
  412. package/dist/theme/index.js +1 -1
  413. package/dist/theme/index.js.map +1 -1
  414. package/dist/theme/mixins.js +8 -6
  415. package/dist/theme/mixins.js.map +1 -1
  416. package/dist/theme/mixins.types.js +1 -0
  417. package/dist/theme/mixins.types.js.map +1 -1
  418. package/dist/theme/palette.js +89 -86
  419. package/dist/theme/palette.js.map +1 -1
  420. package/dist/theme/palette.types.js +1 -0
  421. package/dist/theme/palette.types.js.map +1 -1
  422. package/dist/theme/shape.js +6 -4
  423. package/dist/theme/shape.js.map +1 -1
  424. package/dist/theme/spacing.js +4 -1
  425. package/dist/theme/spacing.js.map +1 -1
  426. package/dist/theme/temp.js +1 -0
  427. package/dist/theme/temp.js.map +1 -1
  428. package/dist/theme/theme.js +12 -9
  429. package/dist/theme/theme.js.map +1 -1
  430. package/dist/theme/typography.js +85 -83
  431. package/dist/theme/typography.js.map +1 -1
  432. package/dist/theme/typography.types.js +1 -0
  433. package/dist/theme/typography.types.js.map +1 -1
  434. package/dist/theme/useTheme.js +1 -0
  435. package/dist/theme/useTheme.js.map +1 -1
  436. package/dist/tsconfig.production.tsbuildinfo +1 -1
  437. package/dist/useUniqueAlphabeticalId.js +1 -0
  438. package/dist/useUniqueAlphabeticalId.js.map +1 -1
  439. package/dist/useUniqueId.js +1 -0
  440. package/dist/useUniqueId.js.map +1 -1
  441. package/i18n.config.json +8 -0
  442. package/package.json +9 -4
  443. package/scripts/properties-to-ts.js +103 -0
  444. package/src/@types/i18next.d.ts +22 -0
  445. package/src/Autocomplete.tsx +10 -1
  446. package/src/Banner.tsx +37 -32
  447. package/src/Button.tsx +38 -18
  448. package/src/Checkbox.tsx +47 -21
  449. package/src/CheckboxGroup.tsx +30 -34
  450. package/src/Dialog.tsx +110 -0
  451. package/src/Field.tsx +56 -24
  452. package/src/FieldError.tsx +6 -1
  453. package/src/FieldLabel.tsx +13 -10
  454. package/src/Fieldset.tsx +95 -0
  455. package/src/Form.tsx +142 -0
  456. package/src/Icon.test.tsx +1 -1
  457. package/src/Icon.tsx +27 -13
  458. package/src/Infobox.tsx +18 -13
  459. package/src/Link.tsx +14 -6
  460. package/src/MenuButton.tsx +8 -3
  461. package/src/MenuItem.tsx +1 -0
  462. package/src/MuiPropsChild.tsx +41 -0
  463. package/src/MuiPropsContext.ts +17 -0
  464. package/src/NativeSelect.tsx +107 -0
  465. package/src/OdysseyI18n.ts +101 -0
  466. package/src/OdysseyProvider.tsx +59 -0
  467. package/src/OdysseyThemeProvider.tsx +9 -3
  468. package/src/OdysseyTranslationProvider.test.tsx +63 -0
  469. package/src/OdysseyTranslationProvider.tsx +65 -0
  470. package/src/OdysseyTranslationProvider.types.ts +42 -0
  471. package/src/PasswordField.tsx +18 -11
  472. package/src/RadioGroup.tsx +31 -46
  473. package/src/SearchField.tsx +10 -8
  474. package/src/Select.tsx +226 -0
  475. package/src/Status.tsx +2 -2
  476. package/src/Tabs.tsx +70 -0
  477. package/src/TextField.tsx +31 -25
  478. package/src/Toast.tsx +140 -0
  479. package/src/{ThemeProvider.tsx → ToastStack.tsx} +16 -9
  480. package/src/Tooltip.tsx +39 -0
  481. package/src/iconDictionary/Add.tsx +3 -3
  482. package/src/iconDictionary/AddCircle.tsx +3 -3
  483. package/src/iconDictionary/AlertCircle.tsx +3 -3
  484. package/src/iconDictionary/AlertCircleFilled.tsx +3 -3
  485. package/src/iconDictionary/AlertTriangleFilled.tsx +3 -3
  486. package/src/iconDictionary/Anchor.tsx +3 -3
  487. package/src/iconDictionary/ArrowDown.tsx +3 -3
  488. package/src/iconDictionary/ArrowLeft.tsx +3 -3
  489. package/src/iconDictionary/ArrowRight.tsx +3 -3
  490. package/src/iconDictionary/ArrowUp.tsx +3 -3
  491. package/src/iconDictionary/ArrowUpDown.tsx +3 -3
  492. package/src/iconDictionary/Calendar.tsx +3 -3
  493. package/src/iconDictionary/Check.tsx +3 -3
  494. package/src/iconDictionary/CheckCircleFilled.tsx +3 -3
  495. package/src/iconDictionary/ChevronDown.tsx +3 -3
  496. package/src/iconDictionary/ChevronUp.tsx +3 -3
  497. package/src/iconDictionary/Close.tsx +3 -3
  498. package/src/iconDictionary/CloseCircleFilled.tsx +3 -3
  499. package/src/iconDictionary/Copy.tsx +3 -3
  500. package/src/iconDictionary/Delete.tsx +3 -3
  501. package/src/iconDictionary/Download.tsx +3 -3
  502. package/src/iconDictionary/DragHandle.tsx +3 -3
  503. package/src/iconDictionary/Edit.tsx +3 -3
  504. package/src/iconDictionary/ExternalLink.tsx +3 -3
  505. package/src/iconDictionary/Eye.tsx +3 -3
  506. package/src/iconDictionary/EyeOff.tsx +3 -3
  507. package/src/iconDictionary/Filter.tsx +3 -3
  508. package/src/iconDictionary/Globe.tsx +3 -3
  509. package/src/iconDictionary/Home.tsx +3 -3
  510. package/src/iconDictionary/InformationCircle.tsx +3 -3
  511. package/src/iconDictionary/InformationCircleFilled.tsx +3 -3
  512. package/src/iconDictionary/Notification.tsx +3 -3
  513. package/src/iconDictionary/OverflowVertical.tsx +3 -3
  514. package/src/iconDictionary/QuestionCircle.tsx +3 -3
  515. package/src/iconDictionary/QuestionCircleFilled.tsx +3 -3
  516. package/src/iconDictionary/Search.tsx +3 -3
  517. package/src/iconDictionary/Settings.tsx +2 -2
  518. package/src/iconDictionary/Subtract.tsx +3 -3
  519. package/src/iconDictionary/User.tsx +3 -3
  520. package/src/iconDictionary/UserGroup.tsx +3 -3
  521. package/src/iconDictionary/index.ts +1 -1
  522. package/src/index.ts +11 -23
  523. package/src/properties/odyssey-react-mui.properties +8 -0
  524. package/src/properties/translations/odyssey-react-mui_cs.properties +0 -0
  525. package/src/properties/translations/odyssey-react-mui_da.properties +0 -0
  526. package/src/properties/translations/odyssey-react-mui_de.properties +0 -0
  527. package/src/properties/translations/odyssey-react-mui_el.properties +0 -0
  528. package/src/properties/translations/odyssey-react-mui_es.properties +0 -0
  529. package/src/properties/translations/odyssey-react-mui_fi.properties +0 -0
  530. package/src/properties/translations/odyssey-react-mui_fr.properties +0 -0
  531. package/src/properties/translations/odyssey-react-mui_hu.properties +0 -0
  532. package/src/properties/translations/odyssey-react-mui_id.properties +0 -0
  533. package/src/properties/translations/odyssey-react-mui_it.properties +0 -0
  534. package/src/properties/translations/odyssey-react-mui_ja.properties +0 -0
  535. package/src/properties/translations/odyssey-react-mui_ko.properties +0 -0
  536. package/src/properties/translations/odyssey-react-mui_ms.properties +0 -0
  537. package/src/properties/translations/odyssey-react-mui_nb.properties +0 -0
  538. package/src/properties/translations/odyssey-react-mui_nl-NL.properties +0 -0
  539. package/src/properties/translations/odyssey-react-mui_pl.properties +0 -0
  540. package/src/properties/translations/odyssey-react-mui_pt-BR.properties +0 -0
  541. package/src/properties/translations/odyssey-react-mui_ro.properties +0 -0
  542. package/src/properties/translations/odyssey-react-mui_ru.properties +0 -0
  543. package/src/properties/translations/odyssey-react-mui_sv.properties +0 -0
  544. package/src/properties/translations/odyssey-react-mui_th.properties +0 -0
  545. package/src/properties/translations/odyssey-react-mui_tr.properties +0 -0
  546. package/src/properties/translations/odyssey-react-mui_uk.properties +0 -0
  547. package/src/properties/translations/odyssey-react-mui_zh-CN.properties +0 -0
  548. package/src/properties/translations/odyssey-react-mui_zh-TW.properties +0 -0
  549. package/src/properties/ts/odyssey-react-mui.ts +1 -0
  550. package/src/properties/ts/odyssey-react-mui_cs.ts +1 -0
  551. package/src/properties/ts/odyssey-react-mui_da.ts +1 -0
  552. package/src/properties/ts/odyssey-react-mui_de.ts +1 -0
  553. package/src/properties/ts/odyssey-react-mui_el.ts +1 -0
  554. package/src/properties/ts/odyssey-react-mui_es.ts +1 -0
  555. package/src/properties/ts/odyssey-react-mui_fi.ts +1 -0
  556. package/src/properties/ts/odyssey-react-mui_fr.ts +1 -0
  557. package/src/properties/ts/odyssey-react-mui_hu.ts +1 -0
  558. package/src/properties/ts/odyssey-react-mui_id.ts +1 -0
  559. package/src/properties/ts/odyssey-react-mui_it.ts +1 -0
  560. package/src/properties/ts/odyssey-react-mui_ja.ts +1 -0
  561. package/src/properties/ts/odyssey-react-mui_ko.ts +1 -0
  562. package/src/properties/ts/odyssey-react-mui_ms.ts +1 -0
  563. package/src/properties/ts/odyssey-react-mui_nb.ts +1 -0
  564. package/src/properties/ts/odyssey-react-mui_nl-NL.ts +1 -0
  565. package/src/properties/ts/odyssey-react-mui_pl.ts +1 -0
  566. package/src/properties/ts/odyssey-react-mui_pt-BR.ts +1 -0
  567. package/src/properties/ts/odyssey-react-mui_ro.ts +1 -0
  568. package/src/properties/ts/odyssey-react-mui_ru.ts +1 -0
  569. package/src/properties/ts/odyssey-react-mui_sv.ts +1 -0
  570. package/src/properties/ts/odyssey-react-mui_th.ts +1 -0
  571. package/src/properties/ts/odyssey-react-mui_tr.ts +1 -0
  572. package/src/properties/ts/odyssey-react-mui_uk.ts +1 -0
  573. package/src/properties/ts/odyssey-react-mui_zh-CN.ts +1 -0
  574. package/src/properties/ts/odyssey-react-mui_zh-TW.ts +1 -0
  575. package/src/theme/components.tsx +44 -13
  576. package/src/theme/index.ts +5 -1
  577. package/src/theme/mixins.ts +10 -6
  578. package/src/theme/palette.ts +95 -88
  579. package/src/theme/shape.ts +12 -8
  580. package/src/theme/spacing.ts +17 -12
  581. package/src/theme/theme.ts +14 -10
  582. package/src/theme/typography.ts +87 -83
  583. package/dist/ThemeProvider.js.map +0 -1
  584. package/dist/src/ThemeProvider.d.ts.map +0 -1
@@ -24,10 +24,6 @@ import { EyeIcon, EyeOffIcon, IconButton } from "./";
24
24
  import { Field } from "./Field";
25
25
 
26
26
  export type PasswordFieldProps = {
27
- /**
28
- * If `true`, the component will receive focus automatically.
29
- */
30
- autoFocus?: boolean;
31
27
  /**
32
28
  * This prop helps users to fill forms faster, especially on mobile devices.
33
29
  * The name can be confusing, as it's more like an autofill.
@@ -38,6 +34,10 @@ export type PasswordFieldProps = {
38
34
  * If `error` is not undefined, the `input` will indicate an error.
39
35
  */
40
36
  errorMessage?: string;
37
+ /**
38
+ * If `true`, the component will receive focus automatically.
39
+ */
40
+ hasInitialFocus?: boolean;
41
41
  /**
42
42
  * The helper text content.
43
43
  */
@@ -51,13 +51,13 @@ export type PasswordFieldProps = {
51
51
  */
52
52
  isDisabled?: boolean;
53
53
  /**
54
- * It prevents the user from changing the value of the field
54
+ * If `true`, the `input` element is not required.
55
55
  */
56
- isReadOnly?: boolean;
56
+ isOptional?: boolean;
57
57
  /**
58
- * If `true`, the `input` element is required.
58
+ * It prevents the user from changing the value of the field
59
59
  */
60
- isRequired?: boolean;
60
+ isReadOnly?: boolean;
61
61
  /**
62
62
  * The label for the `input` element.
63
63
  */
@@ -88,11 +88,12 @@ const PasswordField = forwardRef<HTMLInputElement, PasswordFieldProps>(
88
88
  (
89
89
  {
90
90
  autoCompleteType,
91
- autoFocus,
92
91
  errorMessage,
92
+ hasInitialFocus,
93
93
  hint,
94
94
  id: idOverride,
95
95
  isDisabled = false,
96
+ isOptional = false,
96
97
  isReadOnly,
97
98
  label,
98
99
  onChange,
@@ -117,7 +118,7 @@ const PasswordField = forwardRef<HTMLInputElement, PasswordFieldProps>(
117
118
  aria-describedby={ariaDescribedBy}
118
119
  autoComplete={autoCompleteType}
119
120
  /* eslint-disable-next-line jsx-a11y/no-autofocus */
120
- autoFocus={autoFocus}
121
+ autoFocus={hasInitialFocus}
121
122
  endAdornment={
122
123
  <InputAdornment position="end">
123
124
  <IconButton
@@ -130,25 +131,28 @@ const PasswordField = forwardRef<HTMLInputElement, PasswordFieldProps>(
130
131
  </InputAdornment>
131
132
  }
132
133
  id={id}
134
+ name={id}
133
135
  onChange={onChange}
134
136
  onFocus={onFocus}
135
137
  onBlur={onBlur}
136
138
  placeholder={placeholder}
137
139
  readOnly={isReadOnly}
138
140
  ref={ref}
141
+ required={!isOptional}
139
142
  type={inputType}
140
143
  value={value}
141
144
  />
142
145
  ),
143
146
  [
144
147
  autoCompleteType,
145
- autoFocus,
148
+ hasInitialFocus,
146
149
  togglePasswordVisibility,
147
150
  inputType,
148
151
  onChange,
149
152
  onFocus,
150
153
  onBlur,
151
154
  placeholder,
155
+ isOptional,
152
156
  isReadOnly,
153
157
  ref,
154
158
  value,
@@ -158,10 +162,12 @@ const PasswordField = forwardRef<HTMLInputElement, PasswordFieldProps>(
158
162
  return (
159
163
  <Field
160
164
  errorMessage={errorMessage}
165
+ fieldType="single"
161
166
  hasVisibleLabel
162
167
  hint={hint}
163
168
  id={idOverride}
164
169
  isDisabled={isDisabled}
170
+ isOptional={isOptional}
165
171
  label={label}
166
172
  renderFieldComponent={renderFieldComponent}
167
173
  />
@@ -170,5 +176,6 @@ const PasswordField = forwardRef<HTMLInputElement, PasswordFieldProps>(
170
176
  );
171
177
 
172
178
  const MemoizedPasswordField = memo(PasswordField);
179
+ MemoizedPasswordField.displayName = "PasswordField";
173
180
 
174
181
  export { MemoizedPasswordField as PasswordField };
@@ -11,19 +11,12 @@
11
11
  */
12
12
 
13
13
  import { RadioGroup as MuiRadioGroup } from "@mui/material";
14
- import { ChangeEventHandler, memo, ReactElement, useMemo } from "react";
14
+ import { ChangeEventHandler, memo, ReactElement, useCallback } from "react";
15
15
 
16
- import {
17
- FormControl,
18
- FormLabel,
19
- FormHelperText,
20
- Radio,
21
- ScreenReaderText,
22
- useUniqueId,
23
- RadioProps,
24
- } from ".";
16
+ import { Radio, RadioProps } from "./Radio";
17
+ import { Field } from "./Field";
25
18
 
26
- export interface RadioGroupProps {
19
+ export type RadioGroupProps = {
27
20
  /**
28
21
  * The <Radio> components within the group. Must include two or more.
29
22
  */
@@ -40,6 +33,10 @@ export interface RadioGroupProps {
40
33
  * Optional hint text
41
34
  */
42
35
  hint?: string;
36
+ /**
37
+ * The id of the `input` element. This will also be the input's `name` field.
38
+ */
39
+ id?: string;
43
40
  /**
44
41
  * Disables the whole radio group
45
42
  */
@@ -48,10 +45,6 @@ export interface RadioGroupProps {
48
45
  * The text label for the radio group
49
46
  */
50
47
  label: string;
51
- /**
52
- * The name of the radio group, which only needs to be changed if there are multiple radio groups on the same screen
53
- */
54
- name?: string;
55
48
  /**
56
49
  * Listen for changes in the browser that change `value`.
57
50
  */
@@ -60,54 +53,46 @@ export interface RadioGroupProps {
60
53
  * The `value` on the selected radio button.
61
54
  */
62
55
  value?: RadioProps["value"];
63
- }
56
+ };
64
57
 
65
58
  const RadioGroup = ({
66
59
  children,
67
60
  defaultValue,
68
61
  errorMessage,
69
62
  hint,
63
+ id: idOverride,
70
64
  isDisabled,
71
65
  label,
72
- name,
73
66
  onChange,
67
+ value,
74
68
  }: RadioGroupProps) => {
75
- const ariaDescribedBy = useMemo(
76
- () =>
77
- errorMessage || hint
78
- ? [hint && `${name}-hint`, errorMessage && `${name}-error`]
79
- .filter(Boolean)
80
- .join(" ")
81
- : undefined,
82
- [errorMessage, hint, name]
83
- );
84
-
85
- const uniqueName = useUniqueId(name);
86
-
87
- return (
88
- <FormControl
89
- component="fieldset"
90
- disabled={isDisabled}
91
- error={Boolean(errorMessage)}
92
- >
93
- <FormLabel component="legend">{label}</FormLabel>
94
- {hint && (
95
- <FormHelperText id={`${uniqueName}-hint`}>{hint}</FormHelperText>
96
- )}
69
+ const renderFieldComponent = useCallback(
70
+ ({ ariaDescribedBy, id }) => (
97
71
  <MuiRadioGroup
98
72
  aria-describedby={ariaDescribedBy}
99
73
  defaultValue={defaultValue}
100
- name={uniqueName}
74
+ id={id}
75
+ name={id}
101
76
  onChange={onChange}
77
+ value={value}
102
78
  >
103
79
  {children}
104
80
  </MuiRadioGroup>
105
- {errorMessage && (
106
- <FormHelperText id={`${uniqueName}-error`} error>
107
- <ScreenReaderText>Error:</ScreenReaderText> {errorMessage}
108
- </FormHelperText>
109
- )}
110
- </FormControl>
81
+ ),
82
+ [children, defaultValue, onChange, value]
83
+ );
84
+
85
+ return (
86
+ <Field
87
+ errorMessage={errorMessage}
88
+ fieldType="group"
89
+ hasVisibleLabel={false}
90
+ hint={hint}
91
+ id={idOverride}
92
+ isDisabled={isDisabled}
93
+ label={label}
94
+ renderFieldComponent={renderFieldComponent}
95
+ />
111
96
  );
112
97
  };
113
98
 
@@ -24,16 +24,16 @@ import { SearchIcon } from "./";
24
24
  import { Field } from "./Field";
25
25
 
26
26
  export type SearchFieldProps = {
27
- /**
28
- * If `true`, the component will receive focus automatically.
29
- */
30
- autoFocus?: boolean;
31
27
  /**
32
28
  * This prop helps users to fill forms faster, especially on mobile devices.
33
29
  * The name can be confusing, as it's more like an autofill.
34
30
  * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).
35
31
  */
36
32
  autoCompleteType?: InputHTMLAttributes<HTMLInputElement>["autoComplete"];
33
+ /**
34
+ * If `true`, the component will receive focus automatically.
35
+ */
36
+ hasInitialFocus?: boolean;
37
37
  /**
38
38
  * The id of the `input` element.
39
39
  */
@@ -72,7 +72,7 @@ const SearchField = forwardRef<HTMLInputElement, SearchFieldProps>(
72
72
  (
73
73
  {
74
74
  autoCompleteType,
75
- autoFocus,
75
+ hasInitialFocus,
76
76
  id: idOverride,
77
77
  isDisabled = false,
78
78
  label,
@@ -90,8 +90,9 @@ const SearchField = forwardRef<HTMLInputElement, SearchFieldProps>(
90
90
  aria-describedby={ariaDescribedBy}
91
91
  autoComplete={autoCompleteType}
92
92
  /* eslint-disable-next-line jsx-a11y/no-autofocus */
93
- autoFocus={autoFocus}
93
+ autoFocus={hasInitialFocus}
94
94
  id={id}
95
+ name={id}
95
96
  onChange={onChange}
96
97
  onFocus={onFocus}
97
98
  onBlur={onBlur}
@@ -108,7 +109,7 @@ const SearchField = forwardRef<HTMLInputElement, SearchFieldProps>(
108
109
  ),
109
110
  [
110
111
  autoCompleteType,
111
- autoFocus,
112
+ hasInitialFocus,
112
113
  onChange,
113
114
  onFocus,
114
115
  onBlur,
@@ -120,10 +121,11 @@ const SearchField = forwardRef<HTMLInputElement, SearchFieldProps>(
120
121
 
121
122
  return (
122
123
  <Field
124
+ fieldType="single"
123
125
  hasVisibleLabel={false}
124
126
  id={idOverride}
125
127
  isDisabled={isDisabled}
126
- isRequired={false}
128
+ isOptional={true}
127
129
  label={label}
128
130
  renderFieldComponent={renderFieldComponent}
129
131
  />
package/src/Select.tsx ADDED
@@ -0,0 +1,226 @@
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 { ReactNode, forwardRef, memo, useCallback, useState } from "react";
14
+ import {
15
+ Box,
16
+ Chip,
17
+ ListSubheader,
18
+ MenuItem,
19
+ Select as MuiSelect,
20
+ SelectChangeEvent,
21
+ } from "@mui/material";
22
+ import { SelectProps as MuiSelectProps } from "@mui/material";
23
+ import { Checkbox } from "./Checkbox";
24
+ import { Field } from "./Field";
25
+
26
+ export type SelectOption = {
27
+ text: string;
28
+ value?: string;
29
+ type?: "heading" | "option";
30
+ };
31
+
32
+ export type SelectProps = {
33
+ errorMessage?: string;
34
+ hint?: string;
35
+ id?: string;
36
+ isDisabled?: boolean;
37
+ isMultiSelect?: boolean;
38
+ isOptional?: boolean;
39
+ label: string;
40
+ onBlur?: MuiSelectProps["onBlur"];
41
+ onChange?: MuiSelectProps["onChange"];
42
+ onFocus?: MuiSelectProps["onFocus"];
43
+ options: (string | SelectOption)[];
44
+ value?: string | string[];
45
+ };
46
+
47
+ /**
48
+ * Options in Odyssey <Select> are passed as an array, which can contain any combination
49
+ * of the following:
50
+ * - string — A simple string. The string will be both the text and the value of the resulting option.
51
+ * <option value="string">string</option>
52
+ *
53
+ * - { text: string } — Same as above, but the string is contained within an object.
54
+ * <option value="text">text</option>
55
+ *
56
+ * - { text: string, value: string } — The option text will be text, and the option value will be value.
57
+ * <option value="value">text</option>
58
+ *
59
+ * - { text: string, type: "heading" } — Used to display a group heading with the text
60
+ */
61
+
62
+ const Select = forwardRef<HTMLSelectElement, SelectProps>(
63
+ (
64
+ {
65
+ errorMessage,
66
+ hint,
67
+ id: idOverride,
68
+ isDisabled = false,
69
+ isMultiSelect = false,
70
+ isOptional = false,
71
+ label,
72
+ onBlur,
73
+ onChange: onChangeProp,
74
+ onFocus,
75
+ value,
76
+ options,
77
+ },
78
+ ref
79
+ ) => {
80
+ // If there's no value set, we set it to a blank string (if it's a single-select)
81
+ // or an empty array (if it's a multi-select)
82
+ if (typeof value === "undefined") {
83
+ value = isMultiSelect ? [] : "";
84
+ }
85
+
86
+ const [selectedValue, setSelectedValue] = useState<string | string[]>(
87
+ value
88
+ );
89
+
90
+ const onChange = useCallback(
91
+ (event: SelectChangeEvent<string | string[]>, child: ReactNode) => {
92
+ const {
93
+ target: { value },
94
+ } = event;
95
+
96
+ // Set the field value, with some additional logic to handle array values
97
+ // for multi-selects
98
+ if (isMultiSelect) {
99
+ setSelectedValue(
100
+ typeof value === "string" ? value.split(",") : value
101
+ );
102
+ } else {
103
+ setSelectedValue(value);
104
+ }
105
+
106
+ // Trigger the onChange event, if one has been passed
107
+ if (onChangeProp) {
108
+ onChangeProp(event, child);
109
+ }
110
+ },
111
+ [isMultiSelect, onChangeProp, setSelectedValue]
112
+ );
113
+
114
+ // Normalize the options array to accommodate the various
115
+ // data types that might be passed
116
+ const normalizedOptions = options.map((option) => {
117
+ if (typeof option === "object") {
118
+ return {
119
+ text: option.text,
120
+ value: option.value || option.text,
121
+ type: option.type === "heading" ? "heading" : "option",
122
+ };
123
+ }
124
+
125
+ return { text: option, value: option, type: "option" };
126
+ });
127
+
128
+ const renderValue = useCallback(
129
+ (selected: string | string[]) => {
130
+ // If the selected value isn't an array, then we don't need to display
131
+ // chips and should fall back to the default render behavior
132
+ if (typeof selected === "string") {
133
+ return undefined;
134
+ }
135
+
136
+ // Convert the selected options array into <Chip>s
137
+ const renderedChips = selected
138
+ .map((item: string) => {
139
+ const selectedOption = normalizedOptions.find(
140
+ (option) => option.value === item
141
+ );
142
+
143
+ if (!selectedOption) {
144
+ return null;
145
+ }
146
+
147
+ return <Chip key={item} label={selectedOption.text} />;
148
+ })
149
+ .filter(Boolean);
150
+
151
+ if (renderedChips.length === 0) {
152
+ return null;
153
+ }
154
+
155
+ // We need the <Box> to surround the <Chip>s for
156
+ // proper styling
157
+ return <Box>{renderedChips}</Box>;
158
+ },
159
+ [normalizedOptions]
160
+ );
161
+
162
+ // Convert the options into the ReactNode children
163
+ // that will populate the <Select>
164
+ const children = normalizedOptions.map((option) => {
165
+ if (option.type === "heading") {
166
+ return <ListSubheader key={option.text}>{option.text}</ListSubheader>;
167
+ }
168
+
169
+ return (
170
+ <MenuItem key={option.value} value={option.value}>
171
+ {isMultiSelect && (
172
+ <Checkbox isChecked={selectedValue.includes(option.value)} />
173
+ )}
174
+ {option.text}
175
+ </MenuItem>
176
+ );
177
+ });
178
+
179
+ const renderFieldComponent = useCallback(
180
+ () => (
181
+ <MuiSelect
182
+ id={idOverride}
183
+ name={idOverride}
184
+ multiple={isMultiSelect}
185
+ onBlur={onBlur}
186
+ onChange={onChange}
187
+ onFocus={onFocus}
188
+ ref={ref}
189
+ children={children}
190
+ renderValue={isMultiSelect ? renderValue : undefined}
191
+ value={selectedValue}
192
+ />
193
+ ),
194
+ [
195
+ idOverride,
196
+ isMultiSelect,
197
+ onBlur,
198
+ onChange,
199
+ onFocus,
200
+ ref,
201
+ children,
202
+ renderValue,
203
+ selectedValue,
204
+ ]
205
+ );
206
+
207
+ return (
208
+ <Field
209
+ errorMessage={errorMessage}
210
+ fieldType="single"
211
+ hasVisibleLabel
212
+ hint={hint}
213
+ id={idOverride}
214
+ isDisabled={isDisabled}
215
+ isOptional={isOptional}
216
+ label={label}
217
+ renderFieldComponent={renderFieldComponent}
218
+ />
219
+ );
220
+ }
221
+ );
222
+
223
+ const MemoizedSelect = memo(Select);
224
+ MemoizedSelect.displayName = "Select";
225
+
226
+ export { MemoizedSelect as Select };
package/src/Status.tsx CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  import { Chip } from "./";
14
14
 
15
- export interface StatusProps {
15
+ export type StatusProps = {
16
16
  /**
17
17
  * Determine the color and icon of the alert
18
18
  */
@@ -22,7 +22,7 @@ export interface StatusProps {
22
22
  * The text content of the status
23
23
  */
24
24
  label: string;
25
- }
25
+ };
26
26
 
27
27
  export const Status = ({ severity, label }: StatusProps) => (
28
28
  <Chip label={label} color={severity} variant="status" />
package/src/Tabs.tsx ADDED
@@ -0,0 +1,70 @@
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 React, { ReactElement, ReactNode, useCallback, useState } from "react";
14
+ import { Tab as MuiTab } from "@mui/material";
15
+ import {
16
+ TabList as MuiTabList,
17
+ TabPanel as MuiTabPanel,
18
+ TabContext as MuiTabContext,
19
+ } from "@mui/lab";
20
+
21
+ export type TabItemProps = {
22
+ children: ReactNode;
23
+ startIcon?: ReactElement;
24
+ label: string;
25
+ isDisabled?: boolean;
26
+ value?: string;
27
+ };
28
+
29
+ export type TabsProps = {
30
+ tabs: TabItemProps[];
31
+ initialValue?: string;
32
+ ariaLabel?: string;
33
+ };
34
+
35
+ const Tabs = ({ ariaLabel, tabs, initialValue = "0" }: TabsProps) => {
36
+ const [tabState, setTabState] = useState(initialValue);
37
+
38
+ const onChange = useCallback(
39
+ (_event: React.SyntheticEvent, newState: string) => {
40
+ setTabState(newState);
41
+ },
42
+ []
43
+ );
44
+
45
+ return (
46
+ <MuiTabContext value={tabState}>
47
+ <MuiTabList onChange={onChange} aria-label={ariaLabel}>
48
+ {tabs.map((tab, index) => (
49
+ <MuiTab
50
+ disabled={tab.isDisabled}
51
+ icon={tab.startIcon}
52
+ label={tab.label}
53
+ value={tab.value ? tab.value : index.toString()}
54
+ key={tab.value ? tab.value : index.toString()}
55
+ />
56
+ ))}
57
+ </MuiTabList>
58
+ {tabs.map((tab, index) => (
59
+ <MuiTabPanel
60
+ value={tab.value ? tab.value : index.toString()}
61
+ key={tab.value ? tab.value : index.toString()}
62
+ >
63
+ {tab.children}
64
+ </MuiTabPanel>
65
+ ))}
66
+ </MuiTabContext>
67
+ );
68
+ };
69
+
70
+ export { Tabs };