@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
package/src/Dialog.tsx ADDED
@@ -0,0 +1,110 @@
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 { Dialog as MuiDialog } from "@mui/material";
14
+ import {
15
+ DialogTitle,
16
+ DialogContent,
17
+ DialogContentText,
18
+ DialogActions,
19
+ } from "@mui/material";
20
+ import { Button, CloseIcon } from "./";
21
+ import {
22
+ memo,
23
+ ReactNode,
24
+ useState,
25
+ useEffect,
26
+ useRef,
27
+ ReactElement,
28
+ } from "react";
29
+
30
+ export type DialogProps = {
31
+ callToActionPrimaryComponent?: ReactElement<typeof Button>;
32
+ callToActionSecondaryComponent?: ReactElement<typeof Button>;
33
+ callToActionTertiaryComponent?: ReactElement<typeof Button>;
34
+ children: ReactNode | Array<ReactNode>;
35
+ onClose: () => void;
36
+ isOpen: boolean;
37
+ title: string;
38
+ };
39
+
40
+ const Dialog = ({
41
+ callToActionPrimaryComponent,
42
+ callToActionSecondaryComponent,
43
+ callToActionTertiaryComponent,
44
+ children,
45
+ isOpen,
46
+ onClose,
47
+ title,
48
+ }: DialogProps) => {
49
+ const [isContentScrollable, setIsContentScrollable] = useState(false);
50
+ const dialogContentRef = useRef<HTMLDivElement>(null);
51
+
52
+ useEffect(() => {
53
+ let frameId: number;
54
+
55
+ const handleContentScroll = () => {
56
+ const dialogContentElement = dialogContentRef.current;
57
+ if (dialogContentElement) {
58
+ setIsContentScrollable(
59
+ dialogContentElement.scrollHeight > dialogContentElement.clientHeight
60
+ );
61
+ }
62
+ frameId = requestAnimationFrame(handleContentScroll);
63
+ };
64
+
65
+ if (isOpen) {
66
+ frameId = requestAnimationFrame(handleContentScroll);
67
+ }
68
+
69
+ return () => {
70
+ cancelAnimationFrame(frameId);
71
+ };
72
+ }, [isOpen]);
73
+
74
+ const content =
75
+ typeof children === "string" ? (
76
+ <DialogContentText>{children}</DialogContentText>
77
+ ) : (
78
+ children
79
+ );
80
+
81
+ return (
82
+ <MuiDialog open={isOpen} onClose={onClose}>
83
+ <DialogTitle>
84
+ {title}
85
+ <Button
86
+ variant="floating"
87
+ onClick={onClose}
88
+ startIcon={<CloseIcon />}
89
+ />
90
+ </DialogTitle>
91
+ <DialogContent dividers={isContentScrollable} ref={dialogContentRef}>
92
+ {content}
93
+ </DialogContent>
94
+
95
+ {(callToActionPrimaryComponent ||
96
+ callToActionSecondaryComponent ||
97
+ callToActionTertiaryComponent) && (
98
+ <DialogActions>
99
+ {callToActionTertiaryComponent}
100
+ {callToActionSecondaryComponent}
101
+ {callToActionPrimaryComponent}
102
+ </DialogActions>
103
+ )}
104
+ </MuiDialog>
105
+ );
106
+ };
107
+
108
+ const MemoizedDialog = memo(Dialog);
109
+
110
+ export { MemoizedDialog as Dialog };
package/src/Field.tsx CHANGED
@@ -13,18 +13,25 @@
13
13
  import { memo, ReactElement, useMemo } from "react";
14
14
 
15
15
  import {
16
- FieldError,
17
- FieldHint,
18
- FieldLabel,
19
- FormControl,
20
- useUniqueId,
21
- } from "./";
16
+ FormControl as MuiFormControl,
17
+ FormLabel as MuiFormLabel,
18
+ Typography,
19
+ } from "@mui/material";
20
+ import { FieldError } from "./FieldError";
21
+ import { FieldHint } from "./FieldHint";
22
+ import { FieldLabel } from "./FieldLabel";
23
+ import { useUniqueId } from "./useUniqueId";
24
+ import { useTranslation } from "react-i18next";
22
25
 
23
26
  export type FieldProps = {
24
27
  /**
25
28
  * If `error` is not undefined, the `input` will indicate an error.
26
29
  */
27
30
  errorMessage?: string;
31
+ /**
32
+ * The field type determines how ARIA components are setup. It's important to use this to denote if you expect only one component (like a text field) or multiple (like a radio group).
33
+ */
34
+ fieldType: "single" | "group";
28
35
  hasVisibleLabel: boolean;
29
36
  /**
30
37
  * The helper text content.
@@ -34,26 +41,33 @@ export type FieldProps = {
34
41
  * The id of the `input` element.
35
42
  */
36
43
  id?: string;
44
+ /**
45
+ * Important for narrowing down the `fieldset` role to "radiogroup".
46
+ */
47
+ isRadioGroup?: boolean;
48
+ /**
49
+ * Important for determining if children inherit error state
50
+ */
51
+ isCheckboxGroup?: boolean;
37
52
  /**
38
53
  * If `true`, the component is disabled.
39
54
  */
40
55
  isDisabled?: boolean;
41
56
  /**
42
- * If `true`, the `input` element is required.
57
+ * If `true`, the `input` element is not required.
43
58
  */
44
- isRequired?: boolean;
59
+ isOptional?: boolean;
45
60
  /**
46
61
  * The label for the `input` element.
47
62
  */
48
63
  label: string;
49
- /**
50
- * The label for the `input` element if the it's not optional
51
- */
52
- optionalLabel?: string;
53
64
  /**
54
65
  * The short hint displayed in the `input` before the user enters a value.
55
66
  */
56
67
  placeholder?: string;
68
+ /**
69
+ * Render-props function that sends back ARIA props to your field component.
70
+ */
57
71
  renderFieldComponent: ({
58
72
  ariaDescribedBy,
59
73
  id,
@@ -65,15 +79,18 @@ export type FieldProps = {
65
79
 
66
80
  const Field = ({
67
81
  errorMessage,
82
+ fieldType,
68
83
  hasVisibleLabel,
69
84
  hint,
70
85
  id: idOverride,
71
86
  isDisabled = false,
72
- isRequired = true,
87
+ isRadioGroup = false,
88
+ isOptional = false,
73
89
  label,
74
- optionalLabel,
75
90
  renderFieldComponent,
76
91
  }: FieldProps) => {
92
+ const { t } = useTranslation();
93
+
77
94
  const id = useUniqueId(idOverride);
78
95
  const hintId = hint ? `${id}-hint` : undefined;
79
96
  const errorId = errorMessage ? `${id}-error` : undefined;
@@ -85,15 +102,30 @@ const Field = ({
85
102
  );
86
103
 
87
104
  return (
88
- <FormControl disabled={isDisabled} error={Boolean(errorMessage)}>
89
- <FieldLabel
90
- hasVisibleLabel={hasVisibleLabel}
91
- id={labelId}
92
- inputId={id}
93
- isRequired={isRequired}
94
- optionalText={optionalLabel}
95
- text={label}
96
- />
105
+ <MuiFormControl
106
+ component={fieldType === "group" ? "fieldset" : "div"}
107
+ disabled={isDisabled}
108
+ error={Boolean(errorMessage)}
109
+ role={isRadioGroup ? "radiogroup" : undefined}
110
+ >
111
+ {fieldType === "group" ? (
112
+ <MuiFormLabel component="legend">
113
+ {label}{" "}
114
+ {isOptional && label && (
115
+ <Typography component="span" color="textSecondary">
116
+ ({t("fieldlabel.optional.text")})
117
+ </Typography>
118
+ )}
119
+ </MuiFormLabel>
120
+ ) : (
121
+ <FieldLabel
122
+ hasVisibleLabel={hasVisibleLabel}
123
+ id={labelId}
124
+ inputId={id}
125
+ isOptional={isOptional}
126
+ text={label}
127
+ />
128
+ )}
97
129
 
98
130
  {hint && <FieldHint id={hintId} text={hint} />}
99
131
 
@@ -103,7 +135,7 @@ const Field = ({
103
135
  })}
104
136
 
105
137
  {errorMessage && <FieldError id={errorId} text={errorMessage} />}
106
- </FormControl>
138
+ </MuiFormControl>
107
139
  );
108
140
  };
109
141
 
@@ -14,6 +14,7 @@ import { memo } from "react";
14
14
 
15
15
  import { FormHelperText } from ".";
16
16
  import { ScreenReaderText } from "./ScreenReaderText";
17
+ import { useTranslation } from "react-i18next";
17
18
 
18
19
  export type FieldErrorProps = {
19
20
  id?: string;
@@ -21,9 +22,13 @@ export type FieldErrorProps = {
21
22
  };
22
23
 
23
24
  const FieldError = ({ id, text }: FieldErrorProps) => {
25
+ const { t } = useTranslation();
26
+
24
27
  return (
25
28
  <FormHelperText error id={id}>
26
- <ScreenReaderText>Error:</ScreenReaderText>
29
+ <ScreenReaderText>{`${t(
30
+ "fielderror.screenreader.text"
31
+ )}:`}</ScreenReaderText>
27
32
  {text}
28
33
  </FormHelperText>
29
34
  );
@@ -10,9 +10,10 @@
10
10
  * See the License for the specific language governing permissions and limitations under the License.
11
11
  */
12
12
 
13
- import { InputLabel } from "@mui/material";
13
+ import { InputLabel as MuiInputLabel } from "@mui/material";
14
14
  import { memo, useMemo } from "react";
15
15
 
16
+ import { useTranslation } from "react-i18next";
16
17
  import { ScreenReaderText } from "./ScreenReaderText";
17
18
  import { Typography } from ".";
18
19
 
@@ -20,8 +21,7 @@ export type FieldLabelProps = {
20
21
  hasVisibleLabel: boolean;
21
22
  id: string;
22
23
  inputId: string;
23
- isRequired: boolean;
24
- optionalText?: string;
24
+ isOptional: boolean;
25
25
  text: string;
26
26
  };
27
27
 
@@ -29,20 +29,23 @@ const FieldLabel = ({
29
29
  hasVisibleLabel,
30
30
  id,
31
31
  inputId,
32
- isRequired,
33
- optionalText,
32
+ isOptional,
34
33
  text,
35
34
  }: FieldLabelProps) => {
35
+ const { t } = useTranslation();
36
+
36
37
  const inputLabel = useMemo(
37
38
  () => (
38
- <InputLabel htmlFor={inputId} id={id}>
39
+ <MuiInputLabel htmlFor={inputId} id={id}>
39
40
  {text}
40
- {!isRequired && (
41
- <Typography variant="subtitle1">{optionalText}</Typography>
41
+ {isOptional && (
42
+ <Typography variant="subtitle1">
43
+ {t("fieldlabel.optional.text")}
44
+ </Typography>
42
45
  )}
43
- </InputLabel>
46
+ </MuiInputLabel>
44
47
  ),
45
- [id, inputId, isRequired, optionalText, text]
48
+ [id, inputId, isOptional, text, t]
46
49
  );
47
50
 
48
51
  return hasVisibleLabel ? (
@@ -0,0 +1,95 @@
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 { memo, ReactElement } from "react";
14
+
15
+ import { Box, Typography } from ".";
16
+ import { Infobox } from "./Infobox";
17
+ import { useUniqueId } from "./useUniqueId";
18
+
19
+ export type FieldsetProps = {
20
+ /**
21
+ * The title of the Fieldset
22
+ */
23
+ legend: string;
24
+ /**
25
+ * A supplementary description
26
+ */
27
+ description?: string;
28
+ /**
29
+ * The Field components within the Fieldset
30
+ */
31
+ children: ReactElement | Array<ReactElement>;
32
+ /**
33
+ * An Infobox indicating a Fieldset-wide error or status update.
34
+ */
35
+ alert?: ReactElement<typeof Infobox>;
36
+ /**
37
+ * The name associated with the group.
38
+ */
39
+ name?: string;
40
+ // /**
41
+ // * If this Boolean attribute is set, all form controls that are descendants of the <fieldset>, are disabled, meaning they are not editable and won't be submitted along with the <form>.
42
+ // * They won't receive any browsing events, like mouse clicks or focus-related events.
43
+ // * Note that form elements inside the <legend> element won't be disabled.
44
+ // */
45
+ // NOTE: Functionality is currently disabled. This will correctly disable child <input>s, but will not pass `isDisabled` to the child components.
46
+ // isDisabled?: boolean;
47
+ /**
48
+ * Defines a unique identifier (ID) which must be unique in the whole document.
49
+ */
50
+ id?: string;
51
+ };
52
+
53
+ const Fieldset = ({
54
+ alert,
55
+ children,
56
+ description,
57
+ legend,
58
+ name,
59
+ id: idOverride,
60
+ }: // isDisabled,
61
+ FieldsetProps) => {
62
+ const id = useUniqueId(idOverride);
63
+
64
+ return (
65
+ <Box
66
+ component="fieldset"
67
+ // disabled={isDisabled}
68
+ name={name}
69
+ id={id}
70
+ sx={{
71
+ maxWidth: (theme) => theme.mixins.maxWidth,
72
+ margin: (theme) => theme.spacing(0),
73
+ marginBlockEnd: (theme) => theme.spacing(4),
74
+ padding: (theme) => theme.spacing(0),
75
+ border: "0",
76
+
77
+ "&:last-child": {
78
+ marginBlockEnd: (theme) => theme.spacing(0),
79
+ },
80
+ }}
81
+ >
82
+ <Typography variant="legend" component="legend">
83
+ {legend}
84
+ </Typography>
85
+ {description && <Typography paragraph>{description}</Typography>}
86
+ {alert}
87
+ {children}
88
+ </Box>
89
+ );
90
+ };
91
+
92
+ const MemoizedFieldset = memo(Fieldset);
93
+ MemoizedFieldset.displayName = "Fieldset";
94
+
95
+ export { MemoizedFieldset as Fieldset };
package/src/Form.tsx ADDED
@@ -0,0 +1,142 @@
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 { memo, ReactElement } from "react";
14
+
15
+ import { Box, Typography } from "./";
16
+ import { Button } from "./Button";
17
+ import { Infobox } from "./Infobox";
18
+ import { useUniqueId } from "./useUniqueId";
19
+
20
+ export type FormProps = {
21
+ /**
22
+ * The title of the Form
23
+ */
24
+ title?: string;
25
+ /**
26
+ * A supplementary description
27
+ */
28
+ description?: string;
29
+ /**
30
+ * The Field or FieldSet components within the Form
31
+ */
32
+ children: ReactElement | Array<ReactElement>;
33
+ /**
34
+ * An Infobox indicating a Form-wide error or status update.
35
+ */
36
+ alert?: ReactElement<typeof Infobox>;
37
+ /**
38
+ * Indicates whether input elements can by default have their values automatically completed by the browser.
39
+ * `autocomplete` attributes on form elements override it on <form>
40
+ */
41
+ hasAutoComplete?: "on" | "off" | undefined;
42
+ /**
43
+ * The name of the form. The value must not be the empty string, and must be unique among the form elements in the forms collection that it is in, if any.
44
+ */
45
+ name: string;
46
+ /**
47
+ * This Boolean attribute indicates that the form shouldn't be validated when submitted.
48
+ * If this attribute is not set (and therefore the form is validated),
49
+ * it can be overridden by a formnovalidate attribute on a <button>, <input type="submit">, or <input type="image"> element belonging to the form.
50
+ */
51
+ noValidate?: boolean;
52
+ /**
53
+ * If the value of the method attribute is post, enctype is the MIME type of the form submission.
54
+ * This value can be overridden by formenctype attributes on <button>, <input type="submit">, or <input type="image"> elements.
55
+ */
56
+ encodingType?:
57
+ | "application/x-www-form-urlencoded"
58
+ | "multipart/form-data"
59
+ | "text/plain"
60
+ | undefined;
61
+ /**
62
+ * The HTTP method to submit the form with.
63
+ * This value is overridden by formmethod attributes on <button>, <input type="submit">, or <input type="image"> elements.
64
+ */
65
+ method?: "post" | "get" | "dialog" | undefined;
66
+ /**
67
+ * Indicates where to display the response after submitting the form. It is a name/keyword for a browsing context (for example, tab, window, or iframe).
68
+ * This value can be overridden by a formtarget attribute on a <button>, <input type="submit">, or <input type="image"> element.
69
+ */
70
+ target?: "post" | "get" | "dialog" | undefined;
71
+ /**
72
+ * The Field or FieldGroup components within the Form
73
+ */
74
+ formActions?:
75
+ | ReactElement<typeof Button>
76
+ | Array<ReactElement<typeof Button>>;
77
+ /**
78
+ * Defines a unique identifier (ID) which must be unique in the whole document.
79
+ */
80
+ id?: string;
81
+ };
82
+
83
+ const Form = ({
84
+ alert,
85
+ children,
86
+ description,
87
+ encodingType,
88
+ formActions,
89
+ hasAutoComplete,
90
+ id: idOverride,
91
+ method,
92
+ name,
93
+ noValidate = false,
94
+ target,
95
+ title,
96
+ }: FormProps) => {
97
+ const id = useUniqueId(idOverride);
98
+
99
+ return (
100
+ <Box
101
+ component="form"
102
+ autoComplete={hasAutoComplete}
103
+ name={name}
104
+ encType={encodingType}
105
+ method={method}
106
+ noValidate={noValidate}
107
+ target={target}
108
+ id={id}
109
+ sx={{
110
+ maxWidth: (theme) => theme.mixins.maxWidth,
111
+ margin: (theme) => theme.spacing(0),
112
+ padding: (theme) => theme.spacing(0),
113
+ }}
114
+ >
115
+ {title && (
116
+ <Typography variant="h4" component="h1">
117
+ {title}
118
+ </Typography>
119
+ )}
120
+ {description && <Typography paragraph>{description}</Typography>}
121
+ {alert}
122
+ {children}
123
+ {formActions && (
124
+ <Box
125
+ component="div"
126
+ sx={{
127
+ display: "flex",
128
+ justifyContent: "flex-start",
129
+ gap: (theme) => theme.spacing(1),
130
+ }}
131
+ >
132
+ {formActions}
133
+ </Box>
134
+ )}
135
+ </Box>
136
+ );
137
+ };
138
+
139
+ const MemoizedForm = memo(Form);
140
+ MemoizedForm.displayName = "Form";
141
+
142
+ export { MemoizedForm as Form };
package/src/Icon.test.tsx CHANGED
@@ -18,7 +18,7 @@ const name = "check";
18
18
 
19
19
  describe("Icon", () => {
20
20
  it("renders an icon based on name prop", () => {
21
- render(<Icon name={name} titleAccess={title} />);
21
+ render(<Icon name={name} label={title} size="medium" />);
22
22
 
23
23
  const svgElement = screen.getByRole("img");
24
24
  expect(svgElement).toBeVisible();
package/src/Icon.tsx CHANGED
@@ -10,16 +10,26 @@
10
10
  * See the License for the specific language governing permissions and limitations under the License.
11
11
  */
12
12
 
13
- import { forwardRef } from "react";
14
- import type { SvgIconNoChildrenProps } from "./iconDictionary/types";
15
13
  import { iconDictionary } from "./iconDictionary";
16
14
 
17
- export interface IconProps extends SvgIconNoChildrenProps {
18
- /**
19
- * Name of the icon to render
15
+ export type IconProps = {
16
+ /*
17
+ ** The element whose text describes the icon, if it exists
18
+ */
19
+ ariaLabelledby?: string;
20
+ /*
21
+ ** Text that describes the icon
22
+ */
23
+ label: string;
24
+ /*
25
+ ** Name of the icon to render
20
26
  */
21
27
  name: keyof typeof iconDictionary;
22
- }
28
+ /*
29
+ ** The size of the icon
30
+ */
31
+ size: "small" | "medium" | "large";
32
+ };
23
33
 
24
34
  /**
25
35
  * A system of icons which establishes a visual language
@@ -27,14 +37,18 @@ export interface IconProps extends SvgIconNoChildrenProps {
27
37
  * This component includes all icon data as static imports. Favor individual
28
38
  * icon component imports where possible to keep your bundle size smaller.
29
39
  */
30
- export const Icon = forwardRef<SVGSVGElement, IconProps>(
31
- ({ name, titleAccess, ...rest }, ref) => {
32
- if (!(name in iconDictionary)) return null;
40
+ export const Icon = ({ ariaLabelledby, label, name, size }: IconProps) => {
41
+ if (!(name in iconDictionary)) return null;
33
42
 
34
- const NamedIcon = iconDictionary[name];
43
+ const NamedIcon = iconDictionary[name];
35
44
 
36
- return <NamedIcon titleAccess={titleAccess} ref={ref} {...rest} />;
37
- }
38
- );
45
+ return (
46
+ <NamedIcon
47
+ aria-labelledby={ariaLabelledby}
48
+ fontSize={size}
49
+ titleAccess={label}
50
+ />
51
+ );
52
+ };
39
53
 
40
54
  Icon.displayName = "Icon";
package/src/Infobox.tsx CHANGED
@@ -13,35 +13,40 @@
13
13
  import { AlertColor } from "@mui/material";
14
14
  import { memo, ReactNode } from "react";
15
15
  import { Alert, AlertTitle, ScreenReaderText } from ".";
16
+ import { useTranslation } from "react-i18next";
16
17
 
17
- export interface InfoboxProps {
18
+ export type InfoboxProps = {
18
19
  /**
19
20
  * The contents of the alert
20
21
  */
21
22
  children: ReactNode;
22
- /**
23
- * Determine the color and icon of the alert
24
- */
25
- severity: AlertColor;
26
23
  /**
27
24
  * Sets the ARIA role of the alert
28
25
  * ("status" for something that dynamically updates, "alert" for errors, null for something
29
26
  * unchanging)
30
27
  */
31
28
  role?: "status" | "alert";
29
+ /**
30
+ * Determine the color and icon of the alert
31
+ */
32
+ severity: AlertColor;
32
33
  /**
33
34
  * The title of the alert
34
35
  */
35
36
  title?: string;
36
- }
37
+ };
38
+
39
+ const Infobox = ({ children, role, severity, title }: InfoboxProps) => {
40
+ const { t } = useTranslation();
37
41
 
38
- const Infobox = ({ children, severity, role, title }: InfoboxProps) => (
39
- <Alert role={role} severity={severity} variant="infobox">
40
- <ScreenReaderText>{severity}: </ScreenReaderText>
41
- {title && <AlertTitle>{title}</AlertTitle>}
42
- {children}
43
- </Alert>
44
- );
42
+ return (
43
+ <Alert role={role} severity={severity} variant="infobox">
44
+ <ScreenReaderText>{t(`severity.${severity}`)}: </ScreenReaderText>
45
+ {title && <AlertTitle>{title}</AlertTitle>}
46
+ {children}
47
+ </Alert>
48
+ );
49
+ };
45
50
 
46
51
  const MemoizedInfobox = memo(Infobox);
47
52