@okta/odyssey-react-mui 1.32.0 → 1.33.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 (759) hide show
  1. package/dist/cjs/Autocomplete.cjs +1 -1
  2. package/dist/cjs/Autocomplete.cjs.map +1 -1
  3. package/dist/cjs/Breadcrumbs.cjs +23 -7
  4. package/dist/cjs/Breadcrumbs.cjs.map +1 -1
  5. package/dist/cjs/DatePickers/datePickerTheme.cjs +1 -1
  6. package/dist/cjs/DatePickers/datePickerTheme.cjs.map +1 -1
  7. package/dist/cjs/OdysseyProvider.cjs +2 -2
  8. package/dist/cjs/OdysseyProvider.cjs.map +1 -1
  9. package/dist/cjs/OdysseyThemeProvider.cjs +2 -2
  10. package/dist/cjs/OdysseyThemeProvider.cjs.map +1 -1
  11. package/dist/cjs/hexToRgb.cjs.map +1 -1
  12. package/dist/cjs/properties/ts/odyssey-react-mui.cjs +1 -0
  13. package/dist/cjs/properties/ts/odyssey-react-mui.cjs.map +1 -1
  14. package/dist/cjs/properties/ts/odyssey-react-mui_cs.cjs +1 -0
  15. package/dist/cjs/properties/ts/odyssey-react-mui_cs.cjs.map +1 -1
  16. package/dist/cjs/properties/ts/odyssey-react-mui_da.cjs +1 -0
  17. package/dist/cjs/properties/ts/odyssey-react-mui_da.cjs.map +1 -1
  18. package/dist/cjs/properties/ts/odyssey-react-mui_de.cjs +1 -0
  19. package/dist/cjs/properties/ts/odyssey-react-mui_de.cjs.map +1 -1
  20. package/dist/cjs/properties/ts/odyssey-react-mui_el.cjs +1 -0
  21. package/dist/cjs/properties/ts/odyssey-react-mui_el.cjs.map +1 -1
  22. package/dist/cjs/properties/ts/odyssey-react-mui_es.cjs +1 -0
  23. package/dist/cjs/properties/ts/odyssey-react-mui_es.cjs.map +1 -1
  24. package/dist/cjs/properties/ts/odyssey-react-mui_fi.cjs +1 -0
  25. package/dist/cjs/properties/ts/odyssey-react-mui_fi.cjs.map +1 -1
  26. package/dist/cjs/properties/ts/odyssey-react-mui_fr.cjs +1 -0
  27. package/dist/cjs/properties/ts/odyssey-react-mui_fr.cjs.map +1 -1
  28. package/dist/cjs/properties/ts/odyssey-react-mui_ht.cjs +1 -0
  29. package/dist/cjs/properties/ts/odyssey-react-mui_ht.cjs.map +1 -1
  30. package/dist/cjs/properties/ts/odyssey-react-mui_hu.cjs +1 -0
  31. package/dist/cjs/properties/ts/odyssey-react-mui_hu.cjs.map +1 -1
  32. package/dist/cjs/properties/ts/odyssey-react-mui_id.cjs +1 -0
  33. package/dist/cjs/properties/ts/odyssey-react-mui_id.cjs.map +1 -1
  34. package/dist/cjs/properties/ts/odyssey-react-mui_it.cjs +1 -0
  35. package/dist/cjs/properties/ts/odyssey-react-mui_it.cjs.map +1 -1
  36. package/dist/cjs/properties/ts/odyssey-react-mui_ja.cjs +1 -0
  37. package/dist/cjs/properties/ts/odyssey-react-mui_ja.cjs.map +1 -1
  38. package/dist/cjs/properties/ts/odyssey-react-mui_ko.cjs +1 -0
  39. package/dist/cjs/properties/ts/odyssey-react-mui_ko.cjs.map +1 -1
  40. package/dist/cjs/properties/ts/odyssey-react-mui_ms.cjs +1 -0
  41. package/dist/cjs/properties/ts/odyssey-react-mui_ms.cjs.map +1 -1
  42. package/dist/cjs/properties/ts/odyssey-react-mui_nb.cjs +1 -0
  43. package/dist/cjs/properties/ts/odyssey-react-mui_nb.cjs.map +1 -1
  44. package/dist/cjs/properties/ts/odyssey-react-mui_nl_NL.cjs +1 -0
  45. package/dist/cjs/properties/ts/odyssey-react-mui_nl_NL.cjs.map +1 -1
  46. package/dist/cjs/properties/ts/odyssey-react-mui_pl.cjs +1 -0
  47. package/dist/cjs/properties/ts/odyssey-react-mui_pl.cjs.map +1 -1
  48. package/dist/cjs/properties/ts/odyssey-react-mui_pt_BR.cjs +1 -0
  49. package/dist/cjs/properties/ts/odyssey-react-mui_pt_BR.cjs.map +1 -1
  50. package/dist/cjs/properties/ts/odyssey-react-mui_ro.cjs +1 -0
  51. package/dist/cjs/properties/ts/odyssey-react-mui_ro.cjs.map +1 -1
  52. package/dist/cjs/properties/ts/odyssey-react-mui_ru.cjs +1 -0
  53. package/dist/cjs/properties/ts/odyssey-react-mui_ru.cjs.map +1 -1
  54. package/dist/cjs/properties/ts/odyssey-react-mui_sv.cjs +1 -0
  55. package/dist/cjs/properties/ts/odyssey-react-mui_sv.cjs.map +1 -1
  56. package/dist/cjs/properties/ts/odyssey-react-mui_th.cjs +1 -0
  57. package/dist/cjs/properties/ts/odyssey-react-mui_th.cjs.map +1 -1
  58. package/dist/cjs/properties/ts/odyssey-react-mui_tr.cjs +1 -0
  59. package/dist/cjs/properties/ts/odyssey-react-mui_tr.cjs.map +1 -1
  60. package/dist/cjs/properties/ts/odyssey-react-mui_uk.cjs +1 -0
  61. package/dist/cjs/properties/ts/odyssey-react-mui_uk.cjs.map +1 -1
  62. package/dist/cjs/properties/ts/odyssey-react-mui_vi.cjs +1 -0
  63. package/dist/cjs/properties/ts/odyssey-react-mui_vi.cjs.map +1 -1
  64. package/dist/cjs/properties/ts/odyssey-react-mui_zh_CN.cjs +1 -0
  65. package/dist/cjs/properties/ts/odyssey-react-mui_zh_CN.cjs.map +1 -1
  66. package/dist/cjs/properties/ts/odyssey-react-mui_zh_TW.cjs +1 -0
  67. package/dist/cjs/properties/ts/odyssey-react-mui_zh_TW.cjs.map +1 -1
  68. package/dist/cjs/theme/components.cjs +6 -0
  69. package/dist/cjs/theme/components.cjs.map +1 -1
  70. package/{src/theme/palette.types.ts → dist/cjs/theme/pxToRem.cjs} +10 -13
  71. package/dist/cjs/theme/pxToRem.cjs.map +1 -0
  72. package/dist/cjs/theme/theme.cjs +22 -0
  73. package/dist/cjs/theme/theme.cjs.map +1 -1
  74. package/dist/cjs/theme/useMediaQuery.cjs +34 -0
  75. package/dist/cjs/theme/useMediaQuery.cjs.map +1 -0
  76. package/dist/cjs/ui-shell/AppSwitcher/AppSwitcher.cjs +3 -3
  77. package/dist/cjs/ui-shell/AppSwitcher/AppSwitcher.cjs.map +1 -1
  78. package/dist/cjs/ui-shell/NarrowUiShellContent.cjs +340 -0
  79. package/dist/cjs/ui-shell/NarrowUiShellContent.cjs.map +1 -0
  80. package/dist/cjs/ui-shell/SideNav/SideNav.cjs +64 -45
  81. package/dist/cjs/ui-shell/SideNav/SideNav.cjs.map +1 -1
  82. package/dist/cjs/ui-shell/SideNav/SideNavHeader.cjs +8 -5
  83. package/dist/cjs/ui-shell/SideNav/SideNavHeader.cjs.map +1 -1
  84. package/dist/cjs/ui-shell/SideNav/SideNavItemContent.cjs +39 -11
  85. package/dist/cjs/ui-shell/SideNav/SideNavItemContent.cjs.map +1 -1
  86. package/dist/cjs/ui-shell/SideNav/SideNavItemLinkContent.cjs +3 -1
  87. package/dist/cjs/ui-shell/SideNav/SideNavItemLinkContent.cjs.map +1 -1
  88. package/dist/cjs/ui-shell/SideNav/SideNavLogo.cjs +14 -2
  89. package/dist/cjs/ui-shell/SideNav/SideNavLogo.cjs.map +1 -1
  90. package/dist/cjs/ui-shell/SideNav/SideNavToggleButton.cjs +2 -1
  91. package/dist/cjs/ui-shell/SideNav/SideNavToggleButton.cjs.map +1 -1
  92. package/dist/cjs/ui-shell/SideNav/types.cjs.map +1 -1
  93. package/dist/cjs/ui-shell/TopNav/HamburgerMenuIcon.cjs +37 -0
  94. package/dist/cjs/ui-shell/TopNav/HamburgerMenuIcon.cjs.map +1 -0
  95. package/dist/cjs/ui-shell/TopNav/TopNav.cjs +5 -5
  96. package/dist/cjs/ui-shell/TopNav/TopNav.cjs.map +1 -1
  97. package/dist/cjs/ui-shell/UiShell.cjs +37 -18
  98. package/dist/cjs/ui-shell/UiShell.cjs.map +1 -1
  99. package/dist/cjs/ui-shell/UiShellProvider.cjs +10 -3
  100. package/dist/cjs/ui-shell/UiShellProvider.cjs.map +1 -1
  101. package/dist/cjs/ui-shell/WideUiShellContent.cjs +171 -0
  102. package/dist/cjs/ui-shell/WideUiShellContent.cjs.map +1 -0
  103. package/dist/cjs/ui-shell/index.cjs +36 -0
  104. package/dist/cjs/ui-shell/index.cjs.map +1 -1
  105. package/dist/cjs/ui-shell/renderUiShell.cjs +19 -20
  106. package/dist/cjs/ui-shell/renderUiShell.cjs.map +1 -1
  107. package/{src/TagListContext.tsx → dist/cjs/ui-shell/uiShellContentTypes.cjs} +9 -12
  108. package/dist/cjs/ui-shell/uiShellContentTypes.cjs.map +1 -0
  109. package/dist/cjs/ui-shell/uiShellSharedConstants.cjs +22 -0
  110. package/dist/cjs/ui-shell/uiShellSharedConstants.cjs.map +1 -0
  111. package/dist/cjs/ui-shell/useMatchAppElementToUiShellAppArea.cjs +108 -0
  112. package/dist/cjs/ui-shell/useMatchAppElementToUiShellAppArea.cjs.map +1 -0
  113. package/dist/cjs/ui-shell/useScrollState.cjs +2 -4
  114. package/dist/cjs/ui-shell/useScrollState.cjs.map +1 -1
  115. package/dist/cjs/ui-shell/useUiShellBreakpoints.cjs +41 -0
  116. package/dist/cjs/ui-shell/useUiShellBreakpoints.cjs.map +1 -0
  117. package/dist/cjs/useContrastMode.cjs +1 -1
  118. package/dist/cjs/useContrastMode.cjs.map +1 -1
  119. package/dist/cjs/web-component/createReactRootElements.cjs.map +1 -1
  120. package/dist/cjs/web-component/renderReactInWebComponent.cjs +6 -1
  121. package/dist/cjs/web-component/renderReactInWebComponent.cjs.map +1 -1
  122. package/dist/esm/Autocomplete.js +1 -1
  123. package/dist/esm/Autocomplete.js.map +1 -1
  124. package/dist/esm/Breadcrumbs.js +23 -7
  125. package/dist/esm/Breadcrumbs.js.map +1 -1
  126. package/dist/esm/DatePickers/datePickerTheme.js +1 -1
  127. package/dist/esm/DatePickers/datePickerTheme.js.map +1 -1
  128. package/dist/esm/OdysseyProvider.js +2 -2
  129. package/dist/esm/OdysseyProvider.js.map +1 -1
  130. package/dist/esm/OdysseyThemeProvider.js +2 -2
  131. package/dist/esm/OdysseyThemeProvider.js.map +1 -1
  132. package/dist/esm/hexToRgb.js.map +1 -1
  133. package/dist/esm/properties/ts/odyssey-react-mui.js +1 -0
  134. package/dist/esm/properties/ts/odyssey-react-mui.js.map +1 -1
  135. package/dist/esm/properties/ts/odyssey-react-mui_cs.js +1 -0
  136. package/dist/esm/properties/ts/odyssey-react-mui_cs.js.map +1 -1
  137. package/dist/esm/properties/ts/odyssey-react-mui_da.js +1 -0
  138. package/dist/esm/properties/ts/odyssey-react-mui_da.js.map +1 -1
  139. package/dist/esm/properties/ts/odyssey-react-mui_de.js +1 -0
  140. package/dist/esm/properties/ts/odyssey-react-mui_de.js.map +1 -1
  141. package/dist/esm/properties/ts/odyssey-react-mui_el.js +1 -0
  142. package/dist/esm/properties/ts/odyssey-react-mui_el.js.map +1 -1
  143. package/dist/esm/properties/ts/odyssey-react-mui_es.js +1 -0
  144. package/dist/esm/properties/ts/odyssey-react-mui_es.js.map +1 -1
  145. package/dist/esm/properties/ts/odyssey-react-mui_fi.js +1 -0
  146. package/dist/esm/properties/ts/odyssey-react-mui_fi.js.map +1 -1
  147. package/dist/esm/properties/ts/odyssey-react-mui_fr.js +1 -0
  148. package/dist/esm/properties/ts/odyssey-react-mui_fr.js.map +1 -1
  149. package/dist/esm/properties/ts/odyssey-react-mui_ht.js +1 -0
  150. package/dist/esm/properties/ts/odyssey-react-mui_ht.js.map +1 -1
  151. package/dist/esm/properties/ts/odyssey-react-mui_hu.js +1 -0
  152. package/dist/esm/properties/ts/odyssey-react-mui_hu.js.map +1 -1
  153. package/dist/esm/properties/ts/odyssey-react-mui_id.js +1 -0
  154. package/dist/esm/properties/ts/odyssey-react-mui_id.js.map +1 -1
  155. package/dist/esm/properties/ts/odyssey-react-mui_it.js +1 -0
  156. package/dist/esm/properties/ts/odyssey-react-mui_it.js.map +1 -1
  157. package/dist/esm/properties/ts/odyssey-react-mui_ja.js +1 -0
  158. package/dist/esm/properties/ts/odyssey-react-mui_ja.js.map +1 -1
  159. package/dist/esm/properties/ts/odyssey-react-mui_ko.js +1 -0
  160. package/dist/esm/properties/ts/odyssey-react-mui_ko.js.map +1 -1
  161. package/dist/esm/properties/ts/odyssey-react-mui_ms.js +1 -0
  162. package/dist/esm/properties/ts/odyssey-react-mui_ms.js.map +1 -1
  163. package/dist/esm/properties/ts/odyssey-react-mui_nb.js +1 -0
  164. package/dist/esm/properties/ts/odyssey-react-mui_nb.js.map +1 -1
  165. package/dist/esm/properties/ts/odyssey-react-mui_nl_NL.js +1 -0
  166. package/dist/esm/properties/ts/odyssey-react-mui_nl_NL.js.map +1 -1
  167. package/dist/esm/properties/ts/odyssey-react-mui_pl.js +1 -0
  168. package/dist/esm/properties/ts/odyssey-react-mui_pl.js.map +1 -1
  169. package/dist/esm/properties/ts/odyssey-react-mui_pt_BR.js +1 -0
  170. package/dist/esm/properties/ts/odyssey-react-mui_pt_BR.js.map +1 -1
  171. package/dist/esm/properties/ts/odyssey-react-mui_ro.js +1 -0
  172. package/dist/esm/properties/ts/odyssey-react-mui_ro.js.map +1 -1
  173. package/dist/esm/properties/ts/odyssey-react-mui_ru.js +1 -0
  174. package/dist/esm/properties/ts/odyssey-react-mui_ru.js.map +1 -1
  175. package/dist/esm/properties/ts/odyssey-react-mui_sv.js +1 -0
  176. package/dist/esm/properties/ts/odyssey-react-mui_sv.js.map +1 -1
  177. package/dist/esm/properties/ts/odyssey-react-mui_th.js +1 -0
  178. package/dist/esm/properties/ts/odyssey-react-mui_th.js.map +1 -1
  179. package/dist/esm/properties/ts/odyssey-react-mui_tr.js +1 -0
  180. package/dist/esm/properties/ts/odyssey-react-mui_tr.js.map +1 -1
  181. package/dist/esm/properties/ts/odyssey-react-mui_uk.js +1 -0
  182. package/dist/esm/properties/ts/odyssey-react-mui_uk.js.map +1 -1
  183. package/dist/esm/properties/ts/odyssey-react-mui_vi.js +1 -0
  184. package/dist/esm/properties/ts/odyssey-react-mui_vi.js.map +1 -1
  185. package/dist/esm/properties/ts/odyssey-react-mui_zh_CN.js +1 -0
  186. package/dist/esm/properties/ts/odyssey-react-mui_zh_CN.js.map +1 -1
  187. package/dist/esm/properties/ts/odyssey-react-mui_zh_TW.js +1 -0
  188. package/dist/esm/properties/ts/odyssey-react-mui_zh_TW.js.map +1 -1
  189. package/dist/esm/theme/components.js +6 -0
  190. package/dist/esm/theme/components.js.map +1 -1
  191. package/{src/shadow-dom/index.ts → dist/esm/theme/pxToRem.js} +2 -1
  192. package/dist/esm/theme/pxToRem.js.map +1 -0
  193. package/dist/esm/theme/theme.js +2 -0
  194. package/dist/esm/theme/theme.js.map +1 -1
  195. package/{src/ui-shell/useHasUiShell.ts → dist/esm/theme/useMediaQuery.js} +13 -11
  196. package/dist/esm/theme/useMediaQuery.js.map +1 -0
  197. package/dist/esm/ui-shell/AppSwitcher/AppSwitcher.js +2 -2
  198. package/dist/esm/ui-shell/AppSwitcher/AppSwitcher.js.map +1 -1
  199. package/dist/esm/ui-shell/NarrowUiShellContent.js +334 -0
  200. package/dist/esm/ui-shell/NarrowUiShellContent.js.map +1 -0
  201. package/dist/esm/ui-shell/SideNav/SideNav.js +63 -44
  202. package/dist/esm/ui-shell/SideNav/SideNav.js.map +1 -1
  203. package/dist/esm/ui-shell/SideNav/SideNavHeader.js +7 -4
  204. package/dist/esm/ui-shell/SideNav/SideNavHeader.js.map +1 -1
  205. package/dist/esm/ui-shell/SideNav/SideNavItemContent.js +40 -12
  206. package/dist/esm/ui-shell/SideNav/SideNavItemContent.js.map +1 -1
  207. package/dist/esm/ui-shell/SideNav/SideNavItemLinkContent.js +3 -1
  208. package/dist/esm/ui-shell/SideNav/SideNavItemLinkContent.js.map +1 -1
  209. package/dist/esm/ui-shell/SideNav/SideNavLogo.js +14 -2
  210. package/dist/esm/ui-shell/SideNav/SideNavLogo.js.map +1 -1
  211. package/dist/esm/ui-shell/SideNav/SideNavToggleButton.js +2 -1
  212. package/dist/esm/ui-shell/SideNav/SideNavToggleButton.js.map +1 -1
  213. package/dist/esm/ui-shell/SideNav/types.js.map +1 -1
  214. package/dist/esm/ui-shell/TopNav/HamburgerMenuIcon.js +32 -0
  215. package/dist/esm/ui-shell/TopNav/HamburgerMenuIcon.js.map +1 -0
  216. package/dist/esm/ui-shell/TopNav/TopNav.js +2 -2
  217. package/dist/esm/ui-shell/TopNav/TopNav.js.map +1 -1
  218. package/dist/esm/ui-shell/UiShell.js +37 -18
  219. package/dist/esm/ui-shell/UiShell.js.map +1 -1
  220. package/dist/esm/ui-shell/UiShellProvider.js +10 -3
  221. package/dist/esm/ui-shell/UiShellProvider.js.map +1 -1
  222. package/dist/esm/ui-shell/WideUiShellContent.js +165 -0
  223. package/dist/esm/ui-shell/WideUiShellContent.js.map +1 -0
  224. package/dist/esm/ui-shell/index.js +3 -0
  225. package/dist/esm/ui-shell/index.js.map +1 -1
  226. package/dist/esm/ui-shell/renderUiShell.js +19 -20
  227. package/dist/esm/ui-shell/renderUiShell.js.map +1 -1
  228. package/{src/DataTable/constants.ts → dist/esm/ui-shell/uiShellContentTypes.js} +3 -2
  229. package/dist/esm/ui-shell/uiShellContentTypes.js.map +1 -0
  230. package/{src/CssBaseline.tsx → dist/esm/ui-shell/uiShellSharedConstants.js} +7 -11
  231. package/dist/esm/ui-shell/uiShellSharedConstants.js.map +1 -0
  232. package/dist/esm/ui-shell/useMatchAppElementToUiShellAppArea.js +99 -0
  233. package/dist/esm/ui-shell/useMatchAppElementToUiShellAppArea.js.map +1 -0
  234. package/dist/esm/ui-shell/useScrollState.js +3 -5
  235. package/dist/esm/ui-shell/useScrollState.js.map +1 -1
  236. package/dist/esm/ui-shell/useUiShellBreakpoints.js +34 -0
  237. package/dist/esm/ui-shell/useUiShellBreakpoints.js.map +1 -0
  238. package/dist/esm/useContrastMode.js +2 -2
  239. package/dist/esm/useContrastMode.js.map +1 -1
  240. package/dist/esm/web-component/createReactRootElements.js.map +1 -1
  241. package/dist/esm/web-component/renderReactInWebComponent.js +6 -1
  242. package/dist/esm/web-component/renderReactInWebComponent.js.map +1 -1
  243. package/dist/index.cjs +1 -1
  244. package/dist/index.mjs +1 -1
  245. package/dist/index.scss +1 -1
  246. package/dist/tsconfig.production.tsbuildinfo +1 -1
  247. package/dist/types/Autocomplete.d.ts +1 -1
  248. package/dist/types/Breadcrumbs.d.ts +4 -3
  249. package/dist/types/Breadcrumbs.d.ts.map +1 -1
  250. package/dist/types/OdysseyProvider.d.ts +1 -1
  251. package/dist/types/OdysseyProvider.d.ts.map +1 -1
  252. package/dist/types/OdysseyThemeProvider.d.ts.map +1 -1
  253. package/dist/types/OdysseyTranslationProvider.d.ts +1 -1
  254. package/dist/types/OdysseyTranslationProvider.d.ts.map +1 -1
  255. package/dist/types/hexToRgb.d.ts.map +1 -1
  256. package/dist/types/i18n.d.ts +28 -0
  257. package/dist/types/i18n.d.ts.map +1 -1
  258. package/dist/types/properties/ts/odyssey-react-mui.d.ts +1 -0
  259. package/dist/types/properties/ts/odyssey-react-mui.d.ts.map +1 -1
  260. package/dist/types/properties/ts/odyssey-react-mui_cs.d.ts +1 -0
  261. package/dist/types/properties/ts/odyssey-react-mui_cs.d.ts.map +1 -1
  262. package/dist/types/properties/ts/odyssey-react-mui_da.d.ts +1 -0
  263. package/dist/types/properties/ts/odyssey-react-mui_da.d.ts.map +1 -1
  264. package/dist/types/properties/ts/odyssey-react-mui_de.d.ts +1 -0
  265. package/dist/types/properties/ts/odyssey-react-mui_de.d.ts.map +1 -1
  266. package/dist/types/properties/ts/odyssey-react-mui_el.d.ts +1 -0
  267. package/dist/types/properties/ts/odyssey-react-mui_el.d.ts.map +1 -1
  268. package/dist/types/properties/ts/odyssey-react-mui_es.d.ts +1 -0
  269. package/dist/types/properties/ts/odyssey-react-mui_es.d.ts.map +1 -1
  270. package/dist/types/properties/ts/odyssey-react-mui_fi.d.ts +1 -0
  271. package/dist/types/properties/ts/odyssey-react-mui_fi.d.ts.map +1 -1
  272. package/dist/types/properties/ts/odyssey-react-mui_fr.d.ts +1 -0
  273. package/dist/types/properties/ts/odyssey-react-mui_fr.d.ts.map +1 -1
  274. package/dist/types/properties/ts/odyssey-react-mui_ht.d.ts +1 -0
  275. package/dist/types/properties/ts/odyssey-react-mui_ht.d.ts.map +1 -1
  276. package/dist/types/properties/ts/odyssey-react-mui_hu.d.ts +1 -0
  277. package/dist/types/properties/ts/odyssey-react-mui_hu.d.ts.map +1 -1
  278. package/dist/types/properties/ts/odyssey-react-mui_id.d.ts +1 -0
  279. package/dist/types/properties/ts/odyssey-react-mui_id.d.ts.map +1 -1
  280. package/dist/types/properties/ts/odyssey-react-mui_it.d.ts +1 -0
  281. package/dist/types/properties/ts/odyssey-react-mui_it.d.ts.map +1 -1
  282. package/dist/types/properties/ts/odyssey-react-mui_ja.d.ts +1 -0
  283. package/dist/types/properties/ts/odyssey-react-mui_ja.d.ts.map +1 -1
  284. package/dist/types/properties/ts/odyssey-react-mui_ko.d.ts +1 -0
  285. package/dist/types/properties/ts/odyssey-react-mui_ko.d.ts.map +1 -1
  286. package/dist/types/properties/ts/odyssey-react-mui_ms.d.ts +1 -0
  287. package/dist/types/properties/ts/odyssey-react-mui_ms.d.ts.map +1 -1
  288. package/dist/types/properties/ts/odyssey-react-mui_nb.d.ts +1 -0
  289. package/dist/types/properties/ts/odyssey-react-mui_nb.d.ts.map +1 -1
  290. package/dist/types/properties/ts/odyssey-react-mui_nl_NL.d.ts +1 -0
  291. package/dist/types/properties/ts/odyssey-react-mui_nl_NL.d.ts.map +1 -1
  292. package/dist/types/properties/ts/odyssey-react-mui_pl.d.ts +1 -0
  293. package/dist/types/properties/ts/odyssey-react-mui_pl.d.ts.map +1 -1
  294. package/dist/types/properties/ts/odyssey-react-mui_pt_BR.d.ts +1 -0
  295. package/dist/types/properties/ts/odyssey-react-mui_pt_BR.d.ts.map +1 -1
  296. package/dist/types/properties/ts/odyssey-react-mui_ro.d.ts +1 -0
  297. package/dist/types/properties/ts/odyssey-react-mui_ro.d.ts.map +1 -1
  298. package/dist/types/properties/ts/odyssey-react-mui_ru.d.ts +1 -0
  299. package/dist/types/properties/ts/odyssey-react-mui_ru.d.ts.map +1 -1
  300. package/dist/types/properties/ts/odyssey-react-mui_sv.d.ts +1 -0
  301. package/dist/types/properties/ts/odyssey-react-mui_sv.d.ts.map +1 -1
  302. package/dist/types/properties/ts/odyssey-react-mui_th.d.ts +1 -0
  303. package/dist/types/properties/ts/odyssey-react-mui_th.d.ts.map +1 -1
  304. package/dist/types/properties/ts/odyssey-react-mui_tr.d.ts +1 -0
  305. package/dist/types/properties/ts/odyssey-react-mui_tr.d.ts.map +1 -1
  306. package/dist/types/properties/ts/odyssey-react-mui_uk.d.ts +1 -0
  307. package/dist/types/properties/ts/odyssey-react-mui_uk.d.ts.map +1 -1
  308. package/dist/types/properties/ts/odyssey-react-mui_vi.d.ts +1 -0
  309. package/dist/types/properties/ts/odyssey-react-mui_vi.d.ts.map +1 -1
  310. package/dist/types/properties/ts/odyssey-react-mui_zh_CN.d.ts +1 -0
  311. package/dist/types/properties/ts/odyssey-react-mui_zh_CN.d.ts.map +1 -1
  312. package/dist/types/properties/ts/odyssey-react-mui_zh_TW.d.ts +1 -0
  313. package/dist/types/properties/ts/odyssey-react-mui_zh_TW.d.ts.map +1 -1
  314. package/dist/types/theme/components.d.ts.map +1 -1
  315. package/{src/DatePickers/index.ts → dist/types/theme/pxToRem.d.ts} +3 -5
  316. package/dist/types/theme/pxToRem.d.ts.map +1 -0
  317. package/dist/types/theme/theme.d.ts +2 -0
  318. package/dist/types/theme/theme.d.ts.map +1 -1
  319. package/{src/web-component/index.ts → dist/types/theme/useMediaQuery.d.ts} +2 -2
  320. package/dist/types/theme/useMediaQuery.d.ts.map +1 -0
  321. package/dist/types/ui-shell/AppSwitcher/AppSwitcher.d.ts.map +1 -1
  322. package/dist/types/ui-shell/NarrowUiShellContent.d.ts +17 -0
  323. package/dist/types/ui-shell/NarrowUiShellContent.d.ts.map +1 -0
  324. package/dist/types/ui-shell/SideNav/SideNav.d.ts +1 -3
  325. package/dist/types/ui-shell/SideNav/SideNav.d.ts.map +1 -1
  326. package/dist/types/ui-shell/SideNav/SideNavHeader.d.ts.map +1 -1
  327. package/dist/types/ui-shell/SideNav/SideNavItemContent.d.ts +9 -7
  328. package/dist/types/ui-shell/SideNav/SideNavItemContent.d.ts.map +1 -1
  329. package/dist/types/ui-shell/SideNav/SideNavItemLinkContent.d.ts +1 -1
  330. package/dist/types/ui-shell/SideNav/SideNavItemLinkContent.d.ts.map +1 -1
  331. package/dist/types/ui-shell/SideNav/SideNavLogo.d.ts.map +1 -1
  332. package/dist/types/ui-shell/SideNav/SideNavToggleButton.d.ts.map +1 -1
  333. package/dist/types/ui-shell/SideNav/types.d.ts +12 -2
  334. package/dist/types/ui-shell/SideNav/types.d.ts.map +1 -1
  335. package/{src/Buttons/ButtonContext.tsx → dist/types/ui-shell/TopNav/HamburgerMenuIcon.d.ts} +5 -12
  336. package/dist/types/ui-shell/TopNav/HamburgerMenuIcon.d.ts.map +1 -0
  337. package/dist/types/ui-shell/TopNav/TopNav.d.ts +0 -1
  338. package/dist/types/ui-shell/TopNav/TopNav.d.ts.map +1 -1
  339. package/dist/types/ui-shell/UiShell.d.ts +20 -7
  340. package/dist/types/ui-shell/UiShell.d.ts.map +1 -1
  341. package/dist/types/ui-shell/UiShellProvider.d.ts +8 -6
  342. package/dist/types/ui-shell/UiShellProvider.d.ts.map +1 -1
  343. package/{src/Buttons/index.ts → dist/types/ui-shell/WideUiShellContent.d.ts} +5 -14
  344. package/dist/types/ui-shell/WideUiShellContent.d.ts.map +1 -0
  345. package/dist/types/ui-shell/index.d.ts +3 -1
  346. package/dist/types/ui-shell/index.d.ts.map +1 -1
  347. package/dist/types/ui-shell/renderUiShell.d.ts +7 -11
  348. package/dist/types/ui-shell/renderUiShell.d.ts.map +1 -1
  349. package/dist/types/ui-shell/uiShellContentTypes.d.ts +96 -0
  350. package/dist/types/ui-shell/uiShellContentTypes.d.ts.map +1 -0
  351. package/{src/@types/i18next.d.ts → dist/types/ui-shell/uiShellSharedConstants.d.ts} +7 -14
  352. package/dist/types/ui-shell/uiShellSharedConstants.d.ts.map +1 -0
  353. package/dist/types/ui-shell/useMatchAppElementToUiShellAppArea.d.ts +38 -0
  354. package/dist/types/ui-shell/useMatchAppElementToUiShellAppArea.d.ts.map +1 -0
  355. package/dist/types/ui-shell/useScrollState.d.ts +0 -1
  356. package/dist/types/ui-shell/useScrollState.d.ts.map +1 -1
  357. package/{src/FieldsetContext.tsx → dist/types/ui-shell/useUiShellBreakpoints.d.ts} +7 -12
  358. package/dist/types/ui-shell/useUiShellBreakpoints.d.ts.map +1 -0
  359. package/dist/types/web-component/createReactRootElements.d.ts +6 -4
  360. package/dist/types/web-component/createReactRootElements.d.ts.map +1 -1
  361. package/dist/types/web-component/renderReactInWebComponent.d.ts +12 -5
  362. package/dist/types/web-component/renderReactInWebComponent.d.ts.map +1 -1
  363. package/package.json +4 -4
  364. package/.browserslistrc +0 -1
  365. package/.svgrrc.cjs +0 -13
  366. package/CHANGELOG.md +0 -1490
  367. package/babel.config.cjs +0 -112
  368. package/dist/cjs/ui-shell/UiShellContent.cjs +0 -226
  369. package/dist/cjs/ui-shell/UiShellContent.cjs.map +0 -1
  370. package/dist/esm/ui-shell/UiShellContent.js +0 -220
  371. package/dist/esm/ui-shell/UiShellContent.js.map +0 -1
  372. package/dist/types/ui-shell/UiShellContent.d.ts +0 -76
  373. package/dist/types/ui-shell/UiShellContent.d.ts.map +0 -1
  374. package/i18n.config.json +0 -10
  375. package/scripts/generateIconsIndex.ts +0 -49
  376. package/scripts/generateTestSelectorsJson.ts +0 -33
  377. package/scripts/properties-to-ts.ts +0 -111
  378. package/src/@types/properties.d.ts +0 -292
  379. package/src/@types/react-augment.d.ts +0 -22
  380. package/src/Accordion.tsx +0 -117
  381. package/src/Autocomplete.tsx +0 -321
  382. package/src/Badge.tsx +0 -112
  383. package/src/Banner.tsx +0 -112
  384. package/src/Box.tsx +0 -44
  385. package/src/Breadcrumbs.tsx +0 -221
  386. package/src/Buttons/BaseButton.tsx +0 -250
  387. package/src/Buttons/BaseMenuButton.tsx +0 -342
  388. package/src/Buttons/Button.tsx +0 -30
  389. package/src/Buttons/MenuButton.tsx +0 -33
  390. package/src/Buttons/MenuContext.ts +0 -25
  391. package/src/Buttons/MenuItem.tsx +0 -103
  392. package/src/Callout.tsx +0 -176
  393. package/src/Card.tsx +0 -186
  394. package/src/Checkbox.tsx +0 -261
  395. package/src/CheckboxGroup.tsx +0 -127
  396. package/src/CircularProgress.tsx +0 -42
  397. package/src/DataTable/DataTable.tsx +0 -968
  398. package/src/DataTable/DataTableRowActions.tsx +0 -132
  399. package/src/DataTable/DataTableSettings.tsx +0 -136
  400. package/src/DataTable/index.tsx +0 -28
  401. package/src/DataTable/reorderDataRowsLocally.tsx +0 -48
  402. package/src/DataTable/useRowReordering.tsx +0 -232
  403. package/src/DataTable/useScrollIndication.tsx +0 -125
  404. package/src/DatePickers/DateField.tsx +0 -267
  405. package/src/DatePickers/DateFieldActionBar.tsx +0 -65
  406. package/src/DatePickers/DateFieldLocalizationProvider.tsx +0 -46
  407. package/src/DatePickers/DatePicker.test.tsx +0 -66
  408. package/src/DatePickers/DatePicker.tsx +0 -299
  409. package/src/DatePickers/DatePicker.types.d.ts +0 -14
  410. package/src/DatePickers/TimeZonePicker.tsx +0 -59
  411. package/src/DatePickers/datePickerTheme.tsx +0 -377
  412. package/src/DatePickers/useDateFieldsTranslations.ts +0 -94
  413. package/src/DatePickers/useOdysseyDateFields.ts +0 -303
  414. package/src/Dialog.tsx +0 -178
  415. package/src/Drawer.tsx +0 -255
  416. package/src/EmptyState.tsx +0 -79
  417. package/src/ErrorMessageList.tsx +0 -56
  418. package/src/Field.tsx +0 -189
  419. package/src/FieldComponentProps.ts +0 -66
  420. package/src/FieldError.tsx +0 -59
  421. package/src/FieldHint.tsx +0 -72
  422. package/src/FieldLabel.tsx +0 -67
  423. package/src/Fieldset.tsx +0 -116
  424. package/src/FileUploader/FileUploadIllustration.tsx +0 -66
  425. package/src/FileUploader/FileUploadPreview.tsx +0 -151
  426. package/src/FileUploader/FileUploader.tsx +0 -311
  427. package/src/FileUploader/index.ts +0 -13
  428. package/src/Form.tsx +0 -185
  429. package/src/FormCheckedProps.ts +0 -59
  430. package/src/HintLink.tsx +0 -28
  431. package/src/HtmlProps.ts +0 -112
  432. package/src/IconWithTooltip.tsx +0 -90
  433. package/src/Link.tsx +0 -115
  434. package/src/MuiPropsChild.tsx +0 -42
  435. package/src/MuiPropsContext.ts +0 -18
  436. package/src/NativeSelect.tsx +0 -249
  437. package/src/NullElement.tsx +0 -13
  438. package/src/OdysseyCacheProvider.test.tsx +0 -39
  439. package/src/OdysseyCacheProvider.tsx +0 -86
  440. package/src/OdysseyDesignTokensContext.tsx +0 -23
  441. package/src/OdysseyProvider.tsx +0 -92
  442. package/src/OdysseyThemeProvider.test.tsx +0 -211
  443. package/src/OdysseyThemeProvider.tsx +0 -109
  444. package/src/OdysseyTranslationProvider.test.tsx +0 -95
  445. package/src/OdysseyTranslationProvider.tsx +0 -77
  446. package/src/OdysseyTranslationProvider.types.ts +0 -47
  447. package/src/Pagination/Pagination.test.tsx +0 -327
  448. package/src/Pagination/Pagination.tsx +0 -417
  449. package/src/Pagination/constants.ts +0 -13
  450. package/src/Pagination/index.ts +0 -15
  451. package/src/Pagination/usePagination.ts +0 -45
  452. package/src/PasswordField.tsx +0 -253
  453. package/src/Radio.tsx +0 -199
  454. package/src/RadioGroup.tsx +0 -164
  455. package/src/ScreenReaderText.tsx +0 -53
  456. package/src/SearchField.tsx +0 -240
  457. package/src/Select.tsx +0 -576
  458. package/src/Stack.tsx +0 -56
  459. package/src/Status.tsx +0 -67
  460. package/src/Surface.tsx +0 -61
  461. package/src/SvgIcon.ts +0 -22
  462. package/src/Switch.tsx +0 -425
  463. package/src/Tabs.tsx +0 -259
  464. package/src/Tag.tsx +0 -317
  465. package/src/TagList.tsx +0 -55
  466. package/src/TextField.tsx +0 -298
  467. package/src/Toast.tsx +0 -151
  468. package/src/ToastStack.tsx +0 -43
  469. package/src/Tooltip.tsx +0 -61
  470. package/src/Typography.test.tsx +0 -26
  471. package/src/Typography.tsx +0 -474
  472. package/src/createContrastColors.ts +0 -112
  473. package/src/createUniqueAlphabeticalId.test.ts +0 -22
  474. package/src/createUniqueAlphabeticalId.ts +0 -17
  475. package/src/createUniqueId.test.ts +0 -22
  476. package/src/createUniqueId.ts +0 -17
  477. package/src/getTypedObjectKeys.ts +0 -15
  478. package/src/hexToRgb.ts +0 -40
  479. package/src/i18n.ts +0 -110
  480. package/src/icons.generated/Add.tsx +0 -44
  481. package/src/icons.generated/AddCircle.tsx +0 -46
  482. package/src/icons.generated/Apps.tsx +0 -44
  483. package/src/icons.generated/ArrowBottom.tsx +0 -46
  484. package/src/icons.generated/ArrowDown.tsx +0 -46
  485. package/src/icons.generated/ArrowLeft.tsx +0 -46
  486. package/src/icons.generated/ArrowLowerLeft.tsx +0 -46
  487. package/src/icons.generated/ArrowLowerRight.tsx +0 -46
  488. package/src/icons.generated/ArrowRight.tsx +0 -46
  489. package/src/icons.generated/ArrowTop.tsx +0 -46
  490. package/src/icons.generated/ArrowUnsorted.tsx +0 -46
  491. package/src/icons.generated/ArrowUp.tsx +0 -46
  492. package/src/icons.generated/ArrowUpperLeft.tsx +0 -46
  493. package/src/icons.generated/ArrowUpperRight.tsx +0 -46
  494. package/src/icons.generated/Bug.tsx +0 -44
  495. package/src/icons.generated/Calendar.tsx +0 -46
  496. package/src/icons.generated/Call.tsx +0 -44
  497. package/src/icons.generated/Chat.tsx +0 -44
  498. package/src/icons.generated/Check.tsx +0 -44
  499. package/src/icons.generated/CheckCircleFilled.tsx +0 -47
  500. package/src/icons.generated/ChevronDown.tsx +0 -46
  501. package/src/icons.generated/ChevronLeft.tsx +0 -46
  502. package/src/icons.generated/ChevronRight.tsx +0 -46
  503. package/src/icons.generated/ChevronUp.tsx +0 -46
  504. package/src/icons.generated/Clock.tsx +0 -44
  505. package/src/icons.generated/Close.tsx +0 -44
  506. package/src/icons.generated/CloseCircleFilled.tsx +0 -47
  507. package/src/icons.generated/CollapseLeft.tsx +0 -46
  508. package/src/icons.generated/CollapseRight.tsx +0 -46
  509. package/src/icons.generated/Copy.tsx +0 -44
  510. package/src/icons.generated/Custom.tsx +0 -50
  511. package/src/icons.generated/DangerDiamond.tsx +0 -46
  512. package/src/icons.generated/DangerDiamondFilled.tsx +0 -47
  513. package/src/icons.generated/Delete.tsx +0 -44
  514. package/src/icons.generated/Deny.tsx +0 -44
  515. package/src/icons.generated/Devices.tsx +0 -46
  516. package/src/icons.generated/Directory.tsx +0 -46
  517. package/src/icons.generated/Documentation.tsx +0 -46
  518. package/src/icons.generated/Download.tsx +0 -46
  519. package/src/icons.generated/DragIndicator.tsx +0 -46
  520. package/src/icons.generated/Duo.tsx +0 -62
  521. package/src/icons.generated/Edit.tsx +0 -44
  522. package/src/icons.generated/Email.tsx +0 -49
  523. package/src/icons.generated/ExpandLeft.tsx +0 -46
  524. package/src/icons.generated/ExpandRight.tsx +0 -46
  525. package/src/icons.generated/ExternalLink.tsx +0 -44
  526. package/src/icons.generated/Fido2.tsx +0 -72
  527. package/src/icons.generated/Filter.tsx +0 -44
  528. package/src/icons.generated/Folder.tsx +0 -44
  529. package/src/icons.generated/Globe.tsx +0 -44
  530. package/src/icons.generated/GoogleAuth.tsx +0 -70
  531. package/src/icons.generated/Grid.tsx +0 -47
  532. package/src/icons.generated/Group.tsx +0 -44
  533. package/src/icons.generated/Hide.tsx +0 -44
  534. package/src/icons.generated/Home.tsx +0 -44
  535. package/src/icons.generated/Idp.tsx +0 -54
  536. package/src/icons.generated/InformationCircle.tsx +0 -47
  537. package/src/icons.generated/InformationCircleFilled.tsx +0 -47
  538. package/src/icons.generated/Link.tsx +0 -44
  539. package/src/icons.generated/List.tsx +0 -44
  540. package/src/icons.generated/Lock.tsx +0 -44
  541. package/src/icons.generated/More.tsx +0 -44
  542. package/src/icons.generated/Notification.tsx +0 -46
  543. package/src/icons.generated/OktaVerify.tsx +0 -46
  544. package/src/icons.generated/OnPremMfa.tsx +0 -52
  545. package/src/icons.generated/OneTimePassword.tsx +0 -65
  546. package/src/icons.generated/Password.tsx +0 -80
  547. package/src/icons.generated/Pause.tsx +0 -44
  548. package/src/icons.generated/QuestionCircle.tsx +0 -46
  549. package/src/icons.generated/QuestionCircleFilled.tsx +0 -47
  550. package/src/icons.generated/Refresh.tsx +0 -46
  551. package/src/icons.generated/Reset.tsx +0 -44
  552. package/src/icons.generated/Resume.tsx +0 -44
  553. package/src/icons.generated/Search.tsx +0 -44
  554. package/src/icons.generated/SecurityQuestion.tsx +0 -51
  555. package/src/icons.generated/Server.tsx +0 -44
  556. package/src/icons.generated/Settings.tsx +0 -46
  557. package/src/icons.generated/Show.tsx +0 -44
  558. package/src/icons.generated/SmartCard.tsx +0 -65
  559. package/src/icons.generated/Sms.tsx +0 -55
  560. package/src/icons.generated/Subtract.tsx +0 -46
  561. package/src/icons.generated/SymantecVip.tsx +0 -52
  562. package/src/icons.generated/Sync.tsx +0 -44
  563. package/src/icons.generated/ThumbsDown.tsx +0 -46
  564. package/src/icons.generated/ThumbsUp.tsx +0 -46
  565. package/src/icons.generated/Unlock.tsx +0 -44
  566. package/src/icons.generated/Upload.tsx +0 -44
  567. package/src/icons.generated/User.tsx +0 -44
  568. package/src/icons.generated/Video.tsx +0 -44
  569. package/src/icons.generated/VoiceCall.tsx +0 -62
  570. package/src/icons.generated/Warning.tsx +0 -46
  571. package/src/icons.generated/WarningFilled.tsx +0 -46
  572. package/src/icons.generated/Yubikey.tsx +0 -44
  573. package/src/icons.generated/index.ts +0 -107
  574. package/src/index.ts +0 -118
  575. package/src/inputUtils.ts +0 -80
  576. package/src/labs/AppTile.tsx +0 -421
  577. package/src/labs/DataFilters.tsx +0 -871
  578. package/src/labs/DataTable.tsx +0 -877
  579. package/src/labs/DataTablePagination.tsx +0 -88
  580. package/src/labs/DataView/BulkActionsMenu.tsx +0 -98
  581. package/src/labs/DataView/CardLayoutContent.tsx +0 -272
  582. package/src/labs/DataView/DataCard.tsx +0 -357
  583. package/src/labs/DataView/DataTable.tsx +0 -128
  584. package/src/labs/DataView/DataView.test.tsx +0 -1168
  585. package/src/labs/DataView/DataView.tsx +0 -504
  586. package/src/labs/DataView/DetailPanel.tsx +0 -31
  587. package/src/labs/DataView/LayoutSwitcher.tsx +0 -72
  588. package/src/labs/DataView/RowActions.tsx +0 -125
  589. package/src/labs/DataView/TableLayoutContent.tsx +0 -500
  590. package/src/labs/DataView/TableSettings.tsx +0 -144
  591. package/src/labs/DataView/componentTypes.ts +0 -129
  592. package/src/labs/DataView/constants.tsx +0 -28
  593. package/src/labs/DataView/dataTypes.ts +0 -83
  594. package/src/labs/DataView/fetchData.ts +0 -49
  595. package/src/labs/DataView/index.ts +0 -19
  596. package/src/labs/DataView/tableConstants.tsx +0 -137
  597. package/src/labs/DataView/testSupportData.tsx +0 -301
  598. package/src/labs/DataView/useFilterConversion.ts +0 -88
  599. package/src/labs/DatePickers/DateTimeField.tsx +0 -267
  600. package/src/labs/DatePickers/DateTimePicker.test.tsx +0 -70
  601. package/src/labs/DatePickers/DateTimePicker.tsx +0 -303
  602. package/src/labs/DatePickers/dateTimePickerTheme.ts +0 -216
  603. package/src/labs/DatePickers/index.ts +0 -13
  604. package/src/labs/GroupPicker.tsx +0 -261
  605. package/src/labs/OdysseyPickers/ComposablePicker.test.tsx +0 -32
  606. package/src/labs/OdysseyPickers/ComposablePicker.tsx +0 -188
  607. package/src/labs/OdysseyPickers/Picker.tsx +0 -381
  608. package/src/labs/OdysseyPickers/PickerVirtualizationListBox.tsx +0 -192
  609. package/src/labs/OdysseyPickers/PickerWithOptionAdornment.tsx +0 -429
  610. package/src/labs/OdysseyPickers/index.ts +0 -15
  611. package/src/labs/PageTemplate/Layout.tsx +0 -85
  612. package/src/labs/PageTemplate/PageTemplate.tsx +0 -234
  613. package/src/labs/PageTemplate/index.ts +0 -14
  614. package/src/labs/PaginatedTable.tsx +0 -290
  615. package/src/labs/README.md +0 -46
  616. package/src/labs/StaticTable.tsx +0 -131
  617. package/src/labs/UserProfile.tsx +0 -104
  618. package/src/labs/UserProfileMenuButton.tsx +0 -86
  619. package/src/labs/index.ts +0 -47
  620. package/src/labs/materialReactTableTypes.tsx +0 -19
  621. package/src/properties/odyssey-react-mui.properties +0 -140
  622. package/src/properties/translations/odyssey-react-mui_cs.properties +0 -140
  623. package/src/properties/translations/odyssey-react-mui_da.properties +0 -140
  624. package/src/properties/translations/odyssey-react-mui_de.properties +0 -140
  625. package/src/properties/translations/odyssey-react-mui_el.properties +0 -140
  626. package/src/properties/translations/odyssey-react-mui_es.properties +0 -140
  627. package/src/properties/translations/odyssey-react-mui_fi.properties +0 -140
  628. package/src/properties/translations/odyssey-react-mui_fr.properties +0 -140
  629. package/src/properties/translations/odyssey-react-mui_ht.properties +0 -140
  630. package/src/properties/translations/odyssey-react-mui_hu.properties +0 -140
  631. package/src/properties/translations/odyssey-react-mui_id.properties +0 -140
  632. package/src/properties/translations/odyssey-react-mui_it.properties +0 -140
  633. package/src/properties/translations/odyssey-react-mui_ja.properties +0 -140
  634. package/src/properties/translations/odyssey-react-mui_ko.properties +0 -140
  635. package/src/properties/translations/odyssey-react-mui_ms.properties +0 -140
  636. package/src/properties/translations/odyssey-react-mui_nb.properties +0 -140
  637. package/src/properties/translations/odyssey-react-mui_nl_NL.properties +0 -140
  638. package/src/properties/translations/odyssey-react-mui_ok_PL.properties +0 -126
  639. package/src/properties/translations/odyssey-react-mui_ok_SK.properties +0 -126
  640. package/src/properties/translations/odyssey-react-mui_pl.properties +0 -140
  641. package/src/properties/translations/odyssey-react-mui_pt_BR.properties +0 -140
  642. package/src/properties/translations/odyssey-react-mui_ro.properties +0 -140
  643. package/src/properties/translations/odyssey-react-mui_ru.properties +0 -140
  644. package/src/properties/translations/odyssey-react-mui_sv.properties +0 -140
  645. package/src/properties/translations/odyssey-react-mui_th.properties +0 -140
  646. package/src/properties/translations/odyssey-react-mui_tr.properties +0 -140
  647. package/src/properties/translations/odyssey-react-mui_uk.properties +0 -140
  648. package/src/properties/translations/odyssey-react-mui_vi.properties +0 -140
  649. package/src/properties/translations/odyssey-react-mui_zh_CN.properties +0 -140
  650. package/src/properties/translations/odyssey-react-mui_zh_TW.properties +0 -140
  651. package/src/properties/ts/odyssey-react-mui.ts +0 -1
  652. package/src/properties/ts/odyssey-react-mui_cs.ts +0 -1
  653. package/src/properties/ts/odyssey-react-mui_da.ts +0 -1
  654. package/src/properties/ts/odyssey-react-mui_de.ts +0 -1
  655. package/src/properties/ts/odyssey-react-mui_el.ts +0 -1
  656. package/src/properties/ts/odyssey-react-mui_es.ts +0 -1
  657. package/src/properties/ts/odyssey-react-mui_fi.ts +0 -1
  658. package/src/properties/ts/odyssey-react-mui_fr.ts +0 -1
  659. package/src/properties/ts/odyssey-react-mui_ht.ts +0 -1
  660. package/src/properties/ts/odyssey-react-mui_hu.ts +0 -1
  661. package/src/properties/ts/odyssey-react-mui_id.ts +0 -1
  662. package/src/properties/ts/odyssey-react-mui_it.ts +0 -1
  663. package/src/properties/ts/odyssey-react-mui_ja.ts +0 -1
  664. package/src/properties/ts/odyssey-react-mui_ko.ts +0 -1
  665. package/src/properties/ts/odyssey-react-mui_ms.ts +0 -1
  666. package/src/properties/ts/odyssey-react-mui_nb.ts +0 -1
  667. package/src/properties/ts/odyssey-react-mui_nl_NL.ts +0 -1
  668. package/src/properties/ts/odyssey-react-mui_ok_PL.ts +0 -1
  669. package/src/properties/ts/odyssey-react-mui_ok_SK.ts +0 -1
  670. package/src/properties/ts/odyssey-react-mui_pl.ts +0 -1
  671. package/src/properties/ts/odyssey-react-mui_pt_BR.ts +0 -1
  672. package/src/properties/ts/odyssey-react-mui_ro.ts +0 -1
  673. package/src/properties/ts/odyssey-react-mui_ru.ts +0 -1
  674. package/src/properties/ts/odyssey-react-mui_sv.ts +0 -1
  675. package/src/properties/ts/odyssey-react-mui_th.ts +0 -1
  676. package/src/properties/ts/odyssey-react-mui_tr.ts +0 -1
  677. package/src/properties/ts/odyssey-react-mui_uk.ts +0 -1
  678. package/src/properties/ts/odyssey-react-mui_vi.ts +0 -1
  679. package/src/properties/ts/odyssey-react-mui_zh_CN.ts +0 -1
  680. package/src/properties/ts/odyssey-react-mui_zh_TW.ts +0 -1
  681. package/src/remUtils.ts +0 -27
  682. package/src/shadow-dom/shadow-dom.test.ts +0 -24
  683. package/src/shadow-dom/shadow-dom.ts +0 -54
  684. package/src/test-selectors/getByQuerySelector.ts +0 -176
  685. package/src/test-selectors/getComputedAccessibleErrorMessageText.ts +0 -52
  686. package/src/test-selectors/getComputedAccessibleText.ts +0 -36
  687. package/src/test-selectors/index.ts +0 -15
  688. package/src/test-selectors/interpolateString.ts +0 -41
  689. package/src/test-selectors/linkedHtmlSelectors.ts +0 -73
  690. package/src/test-selectors/queryOdysseySelector.ts +0 -36
  691. package/src/test-selectors/querySelector.ts +0 -249
  692. package/src/test-selectors/sanityChecks.ts +0 -53
  693. package/src/test-selectors/testSelector.ts +0 -143
  694. package/src/theme/components.tsx +0 -3275
  695. package/src/theme/components.types.ts +0 -111
  696. package/src/theme/createOdysseyMuiTheme.ts +0 -54
  697. package/src/theme/index.ts +0 -13
  698. package/src/theme/mixins.ts +0 -29
  699. package/src/theme/mixins.types.ts +0 -31
  700. package/src/theme/palette.ts +0 -112
  701. package/src/theme/shape.ts +0 -31
  702. package/src/theme/spacing.ts +0 -34
  703. package/src/theme/theme.ts +0 -13
  704. package/src/theme/typography.ts +0 -137
  705. package/src/theme/typography.types.ts +0 -41
  706. package/src/theme/useContrastMode.test.tsx +0 -504
  707. package/src/ui-shell/AppSwitcher/AppSwitcher.tsx +0 -94
  708. package/src/ui-shell/AppSwitcher/AppSwitcherApp.tsx +0 -146
  709. package/src/ui-shell/AppSwitcher/OktaAura.tsx +0 -50
  710. package/src/ui-shell/AppSwitcher/index.ts +0 -13
  711. package/src/ui-shell/SideNav/CollapseIcon.tsx +0 -34
  712. package/src/ui-shell/SideNav/HandleIcon.tsx +0 -35
  713. package/src/ui-shell/SideNav/NavAccordion.tsx +0 -243
  714. package/src/ui-shell/SideNav/OktaLogo.tsx +0 -34
  715. package/src/ui-shell/SideNav/SideNav.test.tsx +0 -326
  716. package/src/ui-shell/SideNav/SideNav.tsx +0 -810
  717. package/src/ui-shell/SideNav/SideNavFooterContent.tsx +0 -85
  718. package/src/ui-shell/SideNav/SideNavHeader.tsx +0 -134
  719. package/src/ui-shell/SideNav/SideNavItemContent.tsx +0 -402
  720. package/src/ui-shell/SideNav/SideNavItemContentContext.tsx +0 -29
  721. package/src/ui-shell/SideNav/SideNavItemLinkContent.tsx +0 -90
  722. package/src/ui-shell/SideNav/SideNavLogo.tsx +0 -65
  723. package/src/ui-shell/SideNav/SideNavToggleButton.tsx +0 -272
  724. package/src/ui-shell/SideNav/SortableList/SortableItem.tsx +0 -237
  725. package/src/ui-shell/SideNav/SortableList/SortableList.tsx +0 -132
  726. package/src/ui-shell/SideNav/SortableList/SortableOverlay.tsx +0 -34
  727. package/src/ui-shell/SideNav/index.ts +0 -16
  728. package/src/ui-shell/SideNav/types.ts +0 -224
  729. package/src/ui-shell/TopNav/TopNav.tsx +0 -109
  730. package/src/ui-shell/TopNav/TopNavLinksList.tsx +0 -68
  731. package/src/ui-shell/TopNav/TopNavListItem.tsx +0 -209
  732. package/src/ui-shell/TopNav/index.ts +0 -13
  733. package/src/ui-shell/UiShell.test.tsx +0 -366
  734. package/src/ui-shell/UiShell.tsx +0 -153
  735. package/src/ui-shell/UiShellContent.tsx +0 -350
  736. package/src/ui-shell/UiShellProvider.tsx +0 -103
  737. package/src/ui-shell/bufferLatest.test.ts +0 -79
  738. package/src/ui-shell/bufferLatest.ts +0 -64
  739. package/src/ui-shell/createMessageBus.test.ts +0 -115
  740. package/src/ui-shell/createMessageBus.ts +0 -53
  741. package/src/ui-shell/createStore.test.ts +0 -103
  742. package/src/ui-shell/createStore.ts +0 -37
  743. package/src/ui-shell/index.ts +0 -21
  744. package/src/ui-shell/renderUiShell.test.tsx +0 -203
  745. package/src/ui-shell/renderUiShell.tsx +0 -158
  746. package/src/ui-shell/useScrollState.ts +0 -59
  747. package/src/useAutocomplete.tsx +0 -184
  748. package/src/useContrastMode.tsx +0 -143
  749. package/src/useNormalizedKey.ts +0 -17
  750. package/src/useUniqueAlphabeticalId.ts +0 -21
  751. package/src/useUniqueId.ts +0 -21
  752. package/src/web-component/createReactRootElements.test.ts +0 -40
  753. package/src/web-component/createReactRootElements.ts +0 -39
  754. package/src/web-component/renderReactInWebComponent.test.tsx +0 -128
  755. package/src/web-component/renderReactInWebComponent.ts +0 -135
  756. package/tsconfig.json +0 -16
  757. package/tsconfig.production.json +0 -13
  758. package/vitest.config.ts +0 -36
  759. package/vitest.setup.ts +0 -32
@@ -1 +1 @@
1
- {"version":3,"file":"renderUiShell.js","names":["ErrorBoundary","bufferLatest","createMessageBus","UiShell","renderReactInWebComponent","uiShellDataAttribute","jsx","_jsx","optionalComponentSlotNames","banners","sideNavFooter","topNavLeftSide","topNavRightSide","renderUiShell","appBackgroundColor","appBackgroundContrastMode","appContainerScrollingMode","appRootElement","explicitAppRootElement","hasStandardAppContentPadding","initialVisibleSections","onError","console","error","sideNavBackgroundColor","topNavBackgroundColor","uiShellRootElement","document","createElement","setAttribute","publish","publishPropChanges","subscribe","subscribeToPropChanges","publishSubscriptionCreated","subscribeToReactAppSubscribed","publishAfterReactAppReadyForProps","slottedElements","Object","fromEntries","entries","map","optionalComponentKey","slotName","element","appContainerElement","appendChild","webComponentChildren","values","appComponent","uiShellElement","getReactComponent","reactRootElements","fallback","children","onSubscriptionCreated","optionalComponents","name","stylesRootElement","webComponentRootElement","setComponentProps"],"sources":["../../../src/ui-shell/renderUiShell.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2024-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { type SetStateAction } from \"react\";\nimport { ErrorBoundary } from \"react-error-boundary\";\n\nimport { bufferLatest } from \"./bufferLatest.js\";\nimport { createMessageBus } from \"./createMessageBus.js\";\nimport { UiShell, UiShellProps } from \"./UiShell.js\";\nimport { renderReactInWebComponent } from \"../web-component/renderReactInWebComponent.js\";\nimport { type UiShellNavComponentProps } from \"./UiShellContent.js\";\nimport { uiShellDataAttribute } from \"./useHasUiShell.js\";\n\nexport const optionalComponentSlotNames: Record<\n keyof Required<UiShellProps>[\"optionalComponents\"],\n string\n> = {\n banners: \"banners\",\n sideNavFooter: \"side-nav-footer\",\n topNavLeftSide: \"top-nav-left-side\",\n topNavRightSide: \"top-nav-right-side\",\n};\n\n/**\n * This function renders UI Shell in a web component.\n * This function is agnostic to the UI framework for your app is using. Your application can be another web component, a React app, or even vanilla HTML.\n *\n * **All styles are self-contained.** Even though your application visually renders as children of the web component, its within the global `document` scope, not the web component's `ShadowRoot`. That means any global styles will not affect UI Shell but will affect your application.\n *\n * It places your app's root element in a web component <slot> and ensures it remains rendered in the event of a UI Shell error.\n * It also provides you with other elements fitted to slots in the web component. **In React, you can portal to these components.**\n */\nexport const renderUiShell = ({\n appBackgroundColor,\n appBackgroundContrastMode,\n appContainerScrollingMode,\n appRootElement: explicitAppRootElement,\n hasStandardAppContentPadding,\n initialVisibleSections,\n onError = console.error,\n sideNavBackgroundColor,\n topNavBackgroundColor,\n uiShellRootElement,\n}: {\n /**\n * HTML element used as the root for a React app.\n */\n appRootElement?: HTMLDivElement;\n /**\n * Notifies when a React rendering error occurs. This could be useful for logging, reporting priority 0 issues, and recovering UI Shell when errors occur.\n */\n onError?: () => void;\n /**\n * HTML element used as the root for UI Shell.\n */\n uiShellRootElement: HTMLElement;\n} & Pick<\n UiShellProps,\n | \"appBackgroundColor\"\n | \"appBackgroundContrastMode\"\n | \"appContainerScrollingMode\"\n | \"hasStandardAppContentPadding\"\n | \"initialVisibleSections\"\n | \"sideNavBackgroundColor\"\n | \"topNavBackgroundColor\"\n>) => {\n const appRootElement =\n explicitAppRootElement || document.createElement(\"div\");\n\n // Add this attribute so `PageTemplate` and potentially other components will know if they're in UI Shell with special padding already available.\n uiShellRootElement.setAttribute(uiShellDataAttribute, \"\");\n\n const { publish: publishPropChanges, subscribe: subscribeToPropChanges } =\n createMessageBus<SetStateAction<UiShellNavComponentProps>>();\n\n const {\n publish: publishSubscriptionCreated,\n subscribe: subscribeToReactAppSubscribed,\n } = createMessageBus();\n\n const publishAfterReactAppReadyForProps = bufferLatest({\n publish: publishPropChanges,\n subscribe: subscribeToReactAppSubscribed,\n });\n\n const slottedElements = Object.fromEntries(\n Object.entries(optionalComponentSlotNames).map(\n ([optionalComponentKey, slotName]) => {\n const element = document.createElement(\"div\");\n\n element.setAttribute(\"slot\", slotName);\n\n return [optionalComponentKey, element];\n },\n ),\n ) as Record<\n keyof Required<UiShellProps>[\"optionalComponents\"],\n HTMLDivElement\n >;\n\n const appContainerElement = document.createElement(\"div\");\n appContainerElement.appendChild(appRootElement);\n\n const webComponentChildren = Object.values(slottedElements);\n\n const appComponent = <slot />;\n\n const uiShellElement = renderReactInWebComponent({\n getReactComponent: (reactRootElements) => (\n <ErrorBoundary fallback={appComponent} onError={onError}>\n <UiShell\n appBackgroundColor={appBackgroundColor}\n appBackgroundContrastMode={appBackgroundContrastMode}\n appComponent={appComponent}\n appContainerElement={appContainerElement}\n appContainerScrollingMode={appContainerScrollingMode}\n appRootElement={reactRootElements.appRootElement}\n hasStandardAppContentPadding={hasStandardAppContentPadding}\n initialVisibleSections={initialVisibleSections}\n onError={onError}\n onSubscriptionCreated={publishSubscriptionCreated}\n // `optionalComponents` doesn't need to be memoized because gets passed in once.\n optionalComponents={Object.fromEntries(\n Object.entries(optionalComponentSlotNames).map(\n ([optionalComponentKey, slotName]) => [\n optionalComponentKey,\n <slot name={slotName} />,\n ],\n ),\n )}\n sideNavBackgroundColor={sideNavBackgroundColor}\n stylesRootElement={reactRootElements.stylesRootElement}\n subscribeToPropChanges={subscribeToPropChanges}\n topNavBackgroundColor={topNavBackgroundColor}\n />\n </ErrorBoundary>\n ),\n webComponentRootElement: uiShellRootElement,\n webComponentChildren,\n });\n uiShellRootElement.appendChild(appContainerElement);\n\n return {\n appRootElement,\n setComponentProps: publishAfterReactAppReadyForProps,\n slottedElements,\n uiShellElement,\n };\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"renderUiShell.js","names":["ErrorBoundary","bufferLatest","createMessageBus","UiShell","uiShellDataAttribute","renderReactInWebComponent","jsx","_jsx","optionalComponentSlotNames","banners","rightSideMenu","sideNavFooter","topNavLeftSide","topNavRightSide","renderUiShell","appBackgroundColor","appBackgroundContrastMode","appElement","providedAppElement","appElementScrollingMode","hasStandardAppContentPadding","initialVisibleSections","onError","console","error","parentElement","sideNavBackgroundColor","topNavBackgroundColor","document","createElement","setAttribute","publish","publishPropChanges","subscribe","subscribeToPropChanges","publishSubscriptionCreated","subscribeToReactAppSubscribed","publishAfterReactAppReadyForProps","slottedElements","Object","fromEntries","entries","map","optionalComponentKey","slotName","element","webComponentChildren","values","uiShellElement","getReactComponent","reactRootElements","fallback","children","onSubscriptionCreated","optionalComponents","name","uiShellAppElement","appRootElement","uiShellStylesElement","stylesRootElement","webComponentParentElement","appendChild","setComponentProps"],"sources":["../../../src/ui-shell/renderUiShell.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2024-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { type SetStateAction } from \"react\";\nimport { ErrorBoundary } from \"react-error-boundary\";\n\nimport { bufferLatest } from \"./bufferLatest.js\";\nimport { createMessageBus } from \"./createMessageBus.js\";\nimport { UiShell, UiShellProps } from \"./UiShell.js\";\nimport { UiShellNavComponentProps } from \"./uiShellContentTypes.js\";\nimport { uiShellDataAttribute } from \"./useHasUiShell.js\";\nimport { renderReactInWebComponent } from \"../web-component/renderReactInWebComponent.js\";\n\nexport const optionalComponentSlotNames: Record<\n keyof Required<UiShellProps>[\"optionalComponents\"],\n string\n> = {\n banners: \"banners\",\n rightSideMenu: \"right-side-menu\",\n sideNavFooter: \"side-nav-footer\",\n topNavLeftSide: \"top-nav-left-side\",\n topNavRightSide: \"top-nav-right-side\",\n};\n\n/**\n * This function renders UI Shell in a web component.\n * This function is agnostic to the UI framework for your app is using. Your application can be another web component, a React app, or even vanilla HTML.\n *\n * **All styles are self-contained.** Even though your application visually renders as children of the web component, its within the global `document` scope, not the web component's `ShadowRoot`. That means any global styles will not affect UI Shell but will affect your application.\n *\n * It places your app's root element in a web component <slot> and ensures it remains rendered in the event of a UI Shell error.\n * It also provides you with other elements fitted to slots in the web component. **In React, you can portal to these components.**\n */\nexport const renderUiShell = ({\n appBackgroundColor,\n appBackgroundContrastMode,\n appElement: providedAppElement,\n appElementScrollingMode,\n hasStandardAppContentPadding,\n initialVisibleSections,\n onError = console.error,\n parentElement,\n sideNavBackgroundColor,\n topNavBackgroundColor,\n}: {\n /**\n * Notifies when a React rendering error occurs. This could be useful for logging, reporting priority 0 issues, and recovering UI Shell when errors occur.\n */\n onError?: () => void;\n /**\n * HTML element used as the container for UI Shell and the App. They're siblings inside this element.\n */\n parentElement: HTMLElement;\n} & Pick<\n UiShellProps,\n | \"appBackgroundColor\"\n | \"appBackgroundContrastMode\"\n | \"appElementScrollingMode\"\n | \"hasStandardAppContentPadding\"\n | \"initialVisibleSections\"\n | \"sideNavBackgroundColor\"\n | \"topNavBackgroundColor\"\n> &\n Partial<Pick<UiShellProps, \"appElement\">>) => {\n const appElement = providedAppElement || document.createElement(\"div\");\n\n // Add this attribute so `PageTemplate` and potentially other components will know if they're in UI Shell with special padding already available.\n parentElement.setAttribute(uiShellDataAttribute, \"\");\n\n const { publish: publishPropChanges, subscribe: subscribeToPropChanges } =\n createMessageBus<SetStateAction<UiShellNavComponentProps>>();\n\n const {\n publish: publishSubscriptionCreated,\n subscribe: subscribeToReactAppSubscribed,\n } = createMessageBus();\n\n const publishAfterReactAppReadyForProps = bufferLatest({\n publish: publishPropChanges,\n subscribe: subscribeToReactAppSubscribed,\n });\n\n const slottedElements = Object.fromEntries(\n Object.entries(optionalComponentSlotNames).map(\n ([optionalComponentKey, slotName]) => {\n const element = document.createElement(\"div\");\n\n element.setAttribute(\"slot\", slotName);\n\n return [optionalComponentKey, element];\n },\n ),\n ) as Record<\n keyof Required<UiShellProps>[\"optionalComponents\"],\n HTMLDivElement\n >;\n\n const webComponentChildren = Object.values(slottedElements);\n\n const uiShellElement = renderReactInWebComponent({\n getReactComponent: (reactRootElements) => (\n <ErrorBoundary fallback={<div data-error />} onError={onError}>\n <UiShell\n appBackgroundColor={appBackgroundColor}\n appBackgroundContrastMode={appBackgroundContrastMode}\n appElement={appElement}\n appElementScrollingMode={appElementScrollingMode}\n hasStandardAppContentPadding={hasStandardAppContentPadding}\n initialVisibleSections={initialVisibleSections}\n onError={onError}\n onSubscriptionCreated={publishSubscriptionCreated}\n // `optionalComponents` doesn't need to be memoized because gets passed in once, and this isn't a React component.\n optionalComponents={Object.fromEntries(\n Object.entries(optionalComponentSlotNames).map(\n ([optionalComponentKey, slotName]) => [\n optionalComponentKey,\n <slot name={slotName} />,\n ],\n ),\n )}\n sideNavBackgroundColor={sideNavBackgroundColor}\n subscribeToPropChanges={subscribeToPropChanges}\n topNavBackgroundColor={topNavBackgroundColor}\n uiShellAppElement={reactRootElements.appRootElement}\n uiShellStylesElement={reactRootElements.stylesRootElement}\n />\n </ErrorBoundary>\n ),\n webComponentParentElement: parentElement,\n webComponentChildren,\n });\n\n parentElement.appendChild(appElement);\n\n return {\n appElement,\n setComponentProps: publishAfterReactAppReadyForProps,\n slottedElements,\n uiShellElement,\n };\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Copyright (c) 2023-present, Okta, Inc. and/or its affiliates. All rights reserved.
2
+ * Copyright (c) 2025-present, Okta, Inc. and/or its affiliates. All rights reserved.
3
3
  * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
4
4
  *
5
5
  * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
@@ -10,4 +10,5 @@
10
10
  * See the License for the specific language governing permissions and limitations under the License.
11
11
  */
12
12
 
13
- export const densityValues = ["comfortable", "spacious", "compact"] as const;
13
+ export const subComponentNames = ["TopNav", "SideNav", "AppSwitcher"];
14
+ //# sourceMappingURL=uiShellContentTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uiShellContentTypes.js","names":["subComponentNames"],"sources":["../../../src/ui-shell/uiShellContentTypes.ts"],"sourcesContent":["/*!\n * Copyright (c) 2025-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { ReactElement } from \"react\";\nimport { ErrorBoundaryProps } from \"react-error-boundary\";\n\nimport { AppSwitcherProps } from \"./AppSwitcher/AppSwitcher.js\";\nimport { SideNavProps } from \"./SideNav/types.js\";\nimport { TopNavProps } from \"./TopNav/TopNav.js\";\n\nexport const subComponentNames = [\"TopNav\", \"SideNav\", \"AppSwitcher\"] as const;\nexport type SubComponentName = (typeof subComponentNames)[number];\n\nexport type UiShellNavComponentProps = {\n /**\n * Object that gets pass directly to the app switcher component.\n */\n appSwitcherProps?: AppSwitcherProps;\n /**\n * Object that gets pass directly to the side nav component. If `undefined` and in `initialVisibleSections`, SideNav will be initially rendered. Pass `null` to hide a previously-visible SideNav.\n */\n sideNavProps?: Omit<SideNavProps, \"footerComponent\"> | null;\n /**\n * Object that gets pass directly to the top nav component. If `undefined` and in `initialVisibleSections`, TopNav will be initially rendered. Pass `null` to hide a previously-visible TopNav.\n */\n topNavProps?: Omit<\n TopNavProps,\n \"leftSideComponent\" | \"rightSideComponent\"\n > | null;\n};\n\nexport type UiShellContentProps = {\n /**\n * **WARNING:** UI Shell will modify the styling of this element.\n * HTML element where the app gets rendered. This typically called the React root element for your app.\n *\n * When passed, the app is expected to render into this element, not the Shadow DOM.\n *\n * UI Shell will position this element appropriately to match the content area inside the Shadow DOM.\n *\n * A major benefit to having this element separate from UI Shell is related to encapsulation. UI Shell has the capability of rendering inside a web component, but in doing so, the app would be subject to the styles in the web component and not the page itself.\n * The app should either be in its own web component or use the global styles, and having this separate element allows us to accomplish that goal.\n */\n appElement: HTMLDivElement;\n /**\n * Controls the scrolling behavior of the app element area.\n *\n * In the case of an app wanting to control their own scrolling, use `\"none\"`.\n *\n * Most apps will want to use `\"vertical\"` and let UI Shell manage scrolling behavior.\n */\n appElementScrollingMode: \"none\" | \"horizontal\" | \"vertical\" | \"both\";\n /**\n * Defaults to `true`.\n *\n * If `false`, the content area will have no padding provided. This is for the case where an app wants to manage this separate from UI Shell.\n */\n hasStandardAppContentPadding?: boolean;\n /**\n * Parts of UI Shell that are visible when rendered.\n *\n * For example, if `sideNavProps` is `undefined`, should there be a space left for side nav or should that space not exist?\n */\n initialVisibleSections?: SubComponentName[];\n /**\n * Notifies when a React rendering error occurs. This could be useful for logging, flagging \"p0\"s, and recovering UI Shell when errors occur.\n */\n onError?: ErrorBoundaryProps[\"onError\"];\n /**\n * Components that will render as children of various other components such as the top nav or side nav.\n */\n optionalComponents?: {\n /**\n * Spot for banners to go at the top of the page.\n */\n banners?: ReactElement;\n /**\n * In narrow view, this is the right-side menu area.\n */\n rightSideMenu?: ReactElement;\n /**\n * Footer in the side nav.\n */\n sideNavFooter?: SideNavProps[\"footerComponent\"];\n /**\n * Top nav is divided into 2 parts. This is the left-aligned half.\n */\n topNavLeftSide?: TopNavProps[\"leftSideComponent\"];\n /**\n * Top nav is divided into 2 parts. This is the right-aligned half.\n */\n topNavRightSide?: TopNavProps[\"rightSideComponent\"];\n };\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AASA,OAAO,MAAMA,iBAAiB,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAU","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Copyright (c) 2022-present, Okta, Inc. and/or its affiliates. All rights reserved.
2
+ * Copyright (c) 2025-present, Okta, Inc. and/or its affiliates. All rights reserved.
3
3
  * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
4
4
  *
5
5
  * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
@@ -8,13 +8,9 @@
8
8
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9
9
  *
10
10
  * See the License for the specific language governing permissions and limitations under the License.
11
- */
12
-
13
- import {
14
- CssBaseline as MuiCssBaseline,
15
- CssBaselineProps as MuiCssBaselineProps,
16
- } from "@mui/material";
17
-
18
- export const CssBaseline = (props: MuiCssBaselineProps) => (
19
- <MuiCssBaseline {...props} />
20
- );
11
+ */export const SIDE_NAV_VISIBILITY_TOGGLE_ICON_POSITION = "77px";
12
+ export const SIDE_NAV_WIDTH = "300px";
13
+ export const TOP_NAV_HEIGHT = `${64 / 14}rem`;
14
+ export const UI_SHELL_BASE_Z_INDEX = 100;
15
+ export const UI_SHELL_OVERLAY_Z_INDEX = 200;
16
+ //# sourceMappingURL=uiShellSharedConstants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uiShellSharedConstants.js","names":["SIDE_NAV_VISIBILITY_TOGGLE_ICON_POSITION","SIDE_NAV_WIDTH","TOP_NAV_HEIGHT","UI_SHELL_BASE_Z_INDEX","UI_SHELL_OVERLAY_Z_INDEX"],"sources":["../../../src/ui-shell/uiShellSharedConstants.ts"],"sourcesContent":["/*!\n * Copyright (c) 2025-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n// It's important to bring all our constant values together, so we can change them in one location and ensure the values are all correct relative to each other.\n// This also lends us the capability of swapping these out for a more robust solution in the future.\n\n/* The side nav collapse icon is placed absolutely from the top (Logo container + nav header height) to align it in the middle of the nav header text */\nexport const SIDE_NAV_VISIBILITY_TOGGLE_ICON_POSITION = \"77px\";\n\nexport const SIDE_NAV_WIDTH = \"300px\";\n\nexport const TOP_NAV_HEIGHT = `${64 / 14}rem`;\n\nexport const UI_SHELL_BASE_Z_INDEX = 100;\n\nexport const UI_SHELL_OVERLAY_Z_INDEX = 200;\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAMA,OAAO,MAAMA,wCAAwC,GAAG,MAAM;AAE9D,OAAO,MAAMC,cAAc,GAAG,OAAO;AAErC,OAAO,MAAMC,cAAc,GAAG,GAAG,EAAE,GAAG,EAAE,KAAK;AAE7C,OAAO,MAAMC,qBAAqB,GAAG,GAAG;AAExC,OAAO,MAAMC,wBAAwB,GAAG,GAAG","ignoreList":[]}
@@ -0,0 +1,99 @@
1
+ /*!
2
+ * Copyright (c) 2025-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 { useEffect, useMemo, useRef } from "react";
14
+ import { useOdysseyDesignTokens } from "../OdysseyDesignTokensContext.js";
15
+ export const convertCamelCaseToKebabCase = string => string.replace(/([A-Z])/g, "-$1").toLowerCase();
16
+ export const setStylesToMatchElement = ({
17
+ additionalStyles,
18
+ appContainerElement,
19
+ appContentReferenceElement,
20
+ parentElement
21
+ }) => {
22
+ const appContentReferenceRectangle = appContentReferenceElement.getBoundingClientRect();
23
+ const parentElementRectangle = parentElement.getBoundingClientRect();
24
+ appContainerElement.style.setProperty("position", "absolute");
25
+ appContainerElement.style.setProperty("top", `${appContentReferenceRectangle.top - parentElementRectangle.top}px`);
26
+ appContainerElement.style.setProperty("left", `${appContentReferenceRectangle.left - parentElementRectangle.left}px`);
27
+ appContainerElement.style.setProperty("width", `${appContentReferenceRectangle.width}px`);
28
+ appContainerElement.style.setProperty("height", `${appContentReferenceRectangle.height}px`);
29
+ appContainerElement.style.setProperty("z-index", "1");
30
+ Object.entries(additionalStyles).forEach(([cssPropertyName, cssPropertyValue]) => {
31
+ appContainerElement.style.setProperty(convertCamelCaseToKebabCase(cssPropertyName), String(cssPropertyValue));
32
+ });
33
+ };
34
+ export const useMatchAppElementToUiShellAppArea = ({
35
+ appElement,
36
+ appElementScrollingMode,
37
+ paddingMode,
38
+ uiShellAppAreaRef,
39
+ uiShellResizableRefs
40
+ }) => {
41
+ const odysseyDesignTokens = useOdysseyDesignTokens();
42
+ const parentContainerRef = useRef(null);
43
+ const appContainerElementStyles = useMemo(() => ({
44
+ ...(paddingMode === "comfortable" ? {
45
+ paddingBlock: odysseyDesignTokens.Spacing5,
46
+ paddingInline: odysseyDesignTokens.Spacing8
47
+ } : {}),
48
+ ...(paddingMode === "compact" ? {
49
+ paddingBlock: odysseyDesignTokens.Spacing5,
50
+ paddingInline: odysseyDesignTokens.Spacing5
51
+ } : {}),
52
+ ...(appElementScrollingMode === "horizontal" || appElementScrollingMode === "both" ? {
53
+ overflowX: "auto"
54
+ } : {
55
+ overflowX: "hidden"
56
+ }),
57
+ ...(appElementScrollingMode === "vertical" || appElementScrollingMode === "both" ? {
58
+ overflowY: "auto"
59
+ } : {
60
+ overflowY: "hidden"
61
+ })
62
+ }), [appElementScrollingMode, paddingMode, odysseyDesignTokens]);
63
+ useEffect(() => {
64
+ if (uiShellAppAreaRef.current && appElement && parentContainerRef.current) {
65
+ let animationFrameId;
66
+ const updateStyles = () => {
67
+ cancelAnimationFrame(animationFrameId);
68
+ animationFrameId = requestAnimationFrame(() => {
69
+ if (uiShellAppAreaRef.current && parentContainerRef.current) {
70
+ setStylesToMatchElement({
71
+ additionalStyles: appContainerElementStyles,
72
+ appContentReferenceElement: uiShellAppAreaRef.current,
73
+ appContainerElement: appElement,
74
+ parentElement: parentContainerRef.current
75
+ });
76
+ }
77
+ });
78
+ };
79
+ const resizingElements = uiShellResizableRefs.map(resizingRef => resizingRef.current).filter(element => Boolean(element));
80
+ const observer = new ResizeObserver(updateStyles);
81
+ resizingElements.forEach(resizingElement => {
82
+ resizingElement.addEventListener("transitionend", updateStyles);
83
+ observer.observe(resizingElement);
84
+ });
85
+ updateStyles();
86
+ return () => {
87
+ observer.disconnect();
88
+ resizingElements.forEach(resizingElement => {
89
+ resizingElement.removeEventListener("transitionend", updateStyles);
90
+ });
91
+ };
92
+ }
93
+ return () => {};
94
+ }, [appElement, appContainerElementStyles, uiShellAppAreaRef]);
95
+ return {
96
+ parentContainerRef
97
+ };
98
+ };
99
+ //# sourceMappingURL=useMatchAppElementToUiShellAppArea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMatchAppElementToUiShellAppArea.js","names":["useEffect","useMemo","useRef","useOdysseyDesignTokens","convertCamelCaseToKebabCase","string","replace","toLowerCase","setStylesToMatchElement","additionalStyles","appContainerElement","appContentReferenceElement","parentElement","appContentReferenceRectangle","getBoundingClientRect","parentElementRectangle","style","setProperty","top","left","width","height","Object","entries","forEach","cssPropertyName","cssPropertyValue","String","useMatchAppElementToUiShellAppArea","appElement","appElementScrollingMode","paddingMode","uiShellAppAreaRef","uiShellResizableRefs","odysseyDesignTokens","parentContainerRef","appContainerElementStyles","paddingBlock","Spacing5","paddingInline","Spacing8","overflowX","overflowY","current","animationFrameId","updateStyles","cancelAnimationFrame","requestAnimationFrame","resizingElements","map","resizingRef","filter","element","Boolean","observer","ResizeObserver","resizingElement","addEventListener","observe","disconnect","removeEventListener"],"sources":["../../../src/ui-shell/useMatchAppElementToUiShellAppArea.ts"],"sourcesContent":["/*!\n * Copyright (c) 2025-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { CSSProperties, RefObject, useEffect, useMemo, useRef } from \"react\";\n\nimport { useOdysseyDesignTokens } from \"../OdysseyDesignTokensContext.js\";\nimport { UiShellContentProps } from \"./uiShellContentTypes.js\";\n\nexport const convertCamelCaseToKebabCase = (string: string) =>\n string.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n\nexport const setStylesToMatchElement = ({\n additionalStyles,\n appContainerElement,\n appContentReferenceElement,\n parentElement,\n}: {\n additionalStyles: CSSProperties;\n appContainerElement: HTMLElement;\n appContentReferenceElement: HTMLElement;\n parentElement: HTMLElement;\n}) => {\n const appContentReferenceRectangle =\n appContentReferenceElement.getBoundingClientRect();\n const parentElementRectangle = parentElement.getBoundingClientRect();\n\n appContainerElement.style.setProperty(\"position\", \"absolute\");\n appContainerElement.style.setProperty(\n \"top\",\n `${appContentReferenceRectangle.top - parentElementRectangle.top}px`,\n );\n appContainerElement.style.setProperty(\n \"left\",\n `${appContentReferenceRectangle.left - parentElementRectangle.left}px`,\n );\n appContainerElement.style.setProperty(\n \"width\",\n `${appContentReferenceRectangle.width}px`,\n );\n appContainerElement.style.setProperty(\n \"height\",\n `${appContentReferenceRectangle.height}px`,\n );\n appContainerElement.style.setProperty(\"z-index\", \"1\");\n\n (\n Object.entries(additionalStyles) as Array<\n [\n keyof typeof additionalStyles,\n (typeof additionalStyles)[keyof typeof additionalStyles],\n ]\n >\n ).forEach(([cssPropertyName, cssPropertyValue]) => {\n appContainerElement.style.setProperty(\n convertCamelCaseToKebabCase(cssPropertyName),\n String(cssPropertyValue),\n );\n });\n};\n\nexport type UseMatchAppElementToUiShellAppAreaProps = {\n /**\n * Padding around the app area. \"comfortable\" is designed for wider views whereas \"compact\" is designed for narrower views.\n */\n paddingMode: \"comfortable\" | \"compact\" | \"none\";\n /**\n * Ref for the App Container in UI Shell. This should be the one inside the Shell, **not** the element we're going to align.\n */\n uiShellAppAreaRef: RefObject<HTMLDivElement>;\n /**\n * Array of refs of items that indirectly resize the app content area such as \"side nav\" and \"top nav\".\n */\n uiShellResizableRefs: Array<RefObject<HTMLDivElement>>;\n} & Pick<UiShellContentProps, \"appElement\" | \"appElementScrollingMode\">;\n\nexport const useMatchAppElementToUiShellAppArea = ({\n appElement,\n appElementScrollingMode,\n paddingMode,\n uiShellAppAreaRef,\n uiShellResizableRefs,\n}: UseMatchAppElementToUiShellAppAreaProps) => {\n const odysseyDesignTokens = useOdysseyDesignTokens();\n\n const parentContainerRef = useRef<HTMLDivElement>(null);\n\n const appContainerElementStyles = useMemo<CSSProperties>(\n () => ({\n ...(paddingMode === \"comfortable\"\n ? {\n paddingBlock: odysseyDesignTokens.Spacing5,\n paddingInline: odysseyDesignTokens.Spacing8,\n }\n : {}),\n ...(paddingMode === \"compact\"\n ? {\n paddingBlock: odysseyDesignTokens.Spacing5,\n paddingInline: odysseyDesignTokens.Spacing5,\n }\n : {}),\n ...(appElementScrollingMode === \"horizontal\" ||\n appElementScrollingMode === \"both\"\n ? {\n overflowX: \"auto\",\n }\n : {\n overflowX: \"hidden\",\n }),\n ...(appElementScrollingMode === \"vertical\" ||\n appElementScrollingMode === \"both\"\n ? {\n overflowY: \"auto\",\n }\n : {\n overflowY: \"hidden\",\n }),\n }),\n [appElementScrollingMode, paddingMode, odysseyDesignTokens],\n );\n\n useEffect(() => {\n // Once `appContainerRef` is rendered, we can position `appContainerElement` on top to match.\n if (uiShellAppAreaRef.current && appElement && parentContainerRef.current) {\n let animationFrameId: number;\n\n const updateStyles = () => {\n cancelAnimationFrame(animationFrameId);\n\n animationFrameId = requestAnimationFrame(() => {\n if (uiShellAppAreaRef.current && parentContainerRef.current) {\n setStylesToMatchElement({\n additionalStyles: appContainerElementStyles,\n appContentReferenceElement: uiShellAppAreaRef.current,\n appContainerElement: appElement,\n parentElement: parentContainerRef.current,\n });\n }\n });\n };\n\n // These refs might change by the time we unsubscribe, so we need to keep references to the original elements.\n const resizingElements = uiShellResizableRefs\n .map((resizingRef) => resizingRef.current)\n .filter((element): element is NonNullable<typeof element> =>\n Boolean(element),\n );\n\n // Set up a mutation observer to sync later updates\n const observer = new ResizeObserver(updateStyles);\n\n // document.addEventListener(\"ready\", updateStyles);\n\n resizingElements.forEach((resizingElement) => {\n resizingElement.addEventListener(\"transitionend\", updateStyles);\n\n observer.observe(resizingElement);\n });\n\n // Set the initial styles\n updateStyles();\n\n return () => {\n observer.disconnect();\n\n resizingElements.forEach((resizingElement) => {\n resizingElement.removeEventListener(\"transitionend\", updateStyles);\n });\n };\n }\n return () => {};\n }, [appElement, appContainerElementStyles, uiShellAppAreaRef]);\n\n return {\n parentContainerRef,\n };\n};\n"],"mappings":"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","ignoreList":[]}
@@ -10,11 +10,10 @@
10
10
  * See the License for the specific language governing permissions and limitations under the License.
11
11
  */
12
12
 
13
- import { useEffect, useMemo, useRef, useState } from "react";
13
+ import { useEffect, useMemo, useState } from "react";
14
14
  export const useScrollState = scrollableContentElement => {
15
15
  const [isContentScrolled, setIsContentScrolled] = useState(false);
16
- const scrollableContentRef = useRef(null);
17
- const scrollableElement = useMemo(() => scrollableContentElement ?? scrollableContentRef.current, [scrollableContentElement, scrollableContentRef.current]);
16
+ const scrollableElement = useMemo(() => scrollableContentElement, [scrollableContentElement]);
18
17
  useEffect(() => {
19
18
  if (scrollableElement) {
20
19
  let requestedAnimationFrameId;
@@ -34,8 +33,7 @@ export const useScrollState = scrollableContentElement => {
34
33
  return () => {};
35
34
  }, [scrollableElement]);
36
35
  return {
37
- isContentScrolled,
38
- scrollableContentRef
36
+ isContentScrolled
39
37
  };
40
38
  };
41
39
  //# sourceMappingURL=useScrollState.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useScrollState.js","names":["useEffect","useMemo","useRef","useState","useScrollState","scrollableContentElement","isContentScrolled","setIsContentScrolled","scrollableContentRef","scrollableElement","current","requestedAnimationFrameId","updateScrollState","cancelAnimationFrame","requestAnimationFrame","scrollTop","addEventListener","removeEventListener"],"sources":["../../../src/ui-shell/useScrollState.ts"],"sourcesContent":["/*!\n * Copyright (c) 2024-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { useEffect, useMemo, useRef, useState } from \"react\";\n\nexport const useScrollState = <\n ScrollableContentElement extends HTMLElement = HTMLDivElement,\n>(\n scrollableContentElement?: ScrollableContentElement,\n) => {\n const [isContentScrolled, setIsContentScrolled] = useState(false);\n\n const scrollableContentRef = useRef<ScrollableContentElement>(null);\n\n const scrollableElement = useMemo(\n () => scrollableContentElement ?? scrollableContentRef.current,\n [scrollableContentElement, scrollableContentRef.current],\n );\n\n useEffect(() => {\n if (scrollableElement) {\n let requestedAnimationFrameId: number;\n\n const updateScrollState = () => {\n cancelAnimationFrame(requestedAnimationFrameId);\n\n requestedAnimationFrameId = requestAnimationFrame(() => {\n setIsContentScrolled(scrollableElement.scrollTop > 0);\n });\n };\n\n scrollableElement.addEventListener(\"scroll\", updateScrollState);\n\n updateScrollState();\n\n return () => {\n scrollableElement.removeEventListener(\"scroll\", updateScrollState);\n\n cancelAnimationFrame(requestedAnimationFrameId);\n };\n }\n\n return () => {};\n }, [scrollableElement]);\n\n return {\n isContentScrolled,\n scrollableContentRef,\n };\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAE5D,OAAO,MAAMC,cAAc,GAGzBC,wBAAmD,IAChD;EACH,MAAM,CAACC,iBAAiB,EAAEC,oBAAoB,CAAC,GAAGJ,QAAQ,CAAC,KAAK,CAAC;EAEjE,MAAMK,oBAAoB,GAAGN,MAAM,CAA2B,IAAI,CAAC;EAEnE,MAAMO,iBAAiB,GAAGR,OAAO,CAC/B,MAAMI,wBAAwB,IAAIG,oBAAoB,CAACE,OAAO,EAC9D,CAACL,wBAAwB,EAAEG,oBAAoB,CAACE,OAAO,CACzD,CAAC;EAEDV,SAAS,CAAC,MAAM;IACd,IAAIS,iBAAiB,EAAE;MACrB,IAAIE,yBAAiC;MAErC,MAAMC,iBAAiB,GAAGA,CAAA,KAAM;QAC9BC,oBAAoB,CAACF,yBAAyB,CAAC;QAE/CA,yBAAyB,GAAGG,qBAAqB,CAAC,MAAM;UACtDP,oBAAoB,CAACE,iBAAiB,CAACM,SAAS,GAAG,CAAC,CAAC;QACvD,CAAC,CAAC;MACJ,CAAC;MAEDN,iBAAiB,CAACO,gBAAgB,CAAC,QAAQ,EAAEJ,iBAAiB,CAAC;MAE/DA,iBAAiB,CAAC,CAAC;MAEnB,OAAO,MAAM;QACXH,iBAAiB,CAACQ,mBAAmB,CAAC,QAAQ,EAAEL,iBAAiB,CAAC;QAElEC,oBAAoB,CAACF,yBAAyB,CAAC;MACjD,CAAC;IACH;IAEA,OAAO,MAAM,CAAC,CAAC;EACjB,CAAC,EAAE,CAACF,iBAAiB,CAAC,CAAC;EAEvB,OAAO;IACLH,iBAAiB;IACjBE;EACF,CAAC;AACH,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"useScrollState.js","names":["useEffect","useMemo","useState","useScrollState","scrollableContentElement","isContentScrolled","setIsContentScrolled","scrollableElement","requestedAnimationFrameId","updateScrollState","cancelAnimationFrame","requestAnimationFrame","scrollTop","addEventListener","removeEventListener"],"sources":["../../../src/ui-shell/useScrollState.ts"],"sourcesContent":["/*!\n * Copyright (c) 2024-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { useEffect, useMemo, useState } from \"react\";\n\nexport const useScrollState = <\n ScrollableContentElement extends HTMLElement = HTMLDivElement,\n>(\n scrollableContentElement?: ScrollableContentElement,\n) => {\n const [isContentScrolled, setIsContentScrolled] = useState(false);\n\n const scrollableElement = useMemo(\n () => scrollableContentElement,\n [scrollableContentElement],\n );\n\n useEffect(() => {\n if (scrollableElement) {\n let requestedAnimationFrameId: number;\n\n const updateScrollState = () => {\n cancelAnimationFrame(requestedAnimationFrameId);\n\n requestedAnimationFrameId = requestAnimationFrame(() => {\n setIsContentScrolled(scrollableElement.scrollTop > 0);\n });\n };\n\n scrollableElement.addEventListener(\"scroll\", updateScrollState);\n\n updateScrollState();\n\n return () => {\n scrollableElement.removeEventListener(\"scroll\", updateScrollState);\n\n cancelAnimationFrame(requestedAnimationFrameId);\n };\n }\n\n return () => {};\n }, [scrollableElement]);\n\n return {\n isContentScrolled,\n };\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,OAAO;AAEpD,OAAO,MAAMC,cAAc,GAGzBC,wBAAmD,IAChD;EACH,MAAM,CAACC,iBAAiB,EAAEC,oBAAoB,CAAC,GAAGJ,QAAQ,CAAC,KAAK,CAAC;EAEjE,MAAMK,iBAAiB,GAAGN,OAAO,CAC/B,MAAMG,wBAAwB,EAC9B,CAACA,wBAAwB,CAC3B,CAAC;EAEDJ,SAAS,CAAC,MAAM;IACd,IAAIO,iBAAiB,EAAE;MACrB,IAAIC,yBAAiC;MAErC,MAAMC,iBAAiB,GAAGA,CAAA,KAAM;QAC9BC,oBAAoB,CAACF,yBAAyB,CAAC;QAE/CA,yBAAyB,GAAGG,qBAAqB,CAAC,MAAM;UACtDL,oBAAoB,CAACC,iBAAiB,CAACK,SAAS,GAAG,CAAC,CAAC;QACvD,CAAC,CAAC;MACJ,CAAC;MAEDL,iBAAiB,CAACM,gBAAgB,CAAC,QAAQ,EAAEJ,iBAAiB,CAAC;MAE/DA,iBAAiB,CAAC,CAAC;MAEnB,OAAO,MAAM;QACXF,iBAAiB,CAACO,mBAAmB,CAAC,QAAQ,EAAEL,iBAAiB,CAAC;QAElEC,oBAAoB,CAACF,yBAAyB,CAAC;MACjD,CAAC;IACH;IAEA,OAAO,MAAM,CAAC,CAAC;EACjB,CAAC,EAAE,CAACD,iBAAiB,CAAC,CAAC;EAEvB,OAAO;IACLF;EACF,CAAC;AACH,CAAC","ignoreList":[]}
@@ -0,0 +1,34 @@
1
+ /*!
2
+ * Copyright (c) 2025-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 { useMediaQuery } from "../theme/useMediaQuery.js";
14
+ export const uiShellBreakpoint = {
15
+ comfortable: 800,
16
+ compact: 600,
17
+ constrained: 0
18
+ };
19
+ export const useUiShellBreakpoints = () => {
20
+ const isConstrainedView = useMediaQuery(`(min-width: ${uiShellBreakpoint.constrained}px)`);
21
+ const isCompactView = useMediaQuery(`(min-width: ${uiShellBreakpoint.compact}px)`);
22
+ const isComfortableView = useMediaQuery(`(min-width: ${uiShellBreakpoint.comfortable}px)`);
23
+ if (isComfortableView) {
24
+ return "comfortable";
25
+ }
26
+ if (isCompactView) {
27
+ return "compact";
28
+ }
29
+ if (isConstrainedView) {
30
+ return "constrained";
31
+ }
32
+ return "none";
33
+ };
34
+ //# sourceMappingURL=useUiShellBreakpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUiShellBreakpoints.js","names":["useMediaQuery","uiShellBreakpoint","comfortable","compact","constrained","useUiShellBreakpoints","isConstrainedView","isCompactView","isComfortableView"],"sources":["../../../src/ui-shell/useUiShellBreakpoints.ts"],"sourcesContent":["/*!\n * Copyright (c) 2025-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { useMediaQuery } from \"../theme/useMediaQuery.js\";\n\nexport const uiShellBreakpoint = {\n comfortable: 800,\n compact: 600,\n constrained: 0,\n} as const;\n\nexport const useUiShellBreakpoints = ():\n | keyof typeof uiShellBreakpoint\n | \"none\" => {\n const isConstrainedView = useMediaQuery(\n `(min-width: ${uiShellBreakpoint.constrained}px)`,\n );\n\n const isCompactView = useMediaQuery(\n `(min-width: ${uiShellBreakpoint.compact}px)`,\n );\n\n const isComfortableView = useMediaQuery(\n `(min-width: ${uiShellBreakpoint.comfortable}px)`,\n );\n\n if (isComfortableView) {\n return \"comfortable\";\n }\n\n if (isCompactView) {\n return \"compact\";\n }\n\n if (isConstrainedView) {\n return \"constrained\";\n }\n\n // For the initial page load as we don't have media queries until the page loads.\n return \"none\";\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,aAAa,QAAQ,2BAA2B;AAEzD,OAAO,MAAMC,iBAAiB,GAAG;EAC/BC,WAAW,EAAE,GAAG;EAChBC,OAAO,EAAE,GAAG;EACZC,WAAW,EAAE;AACf,CAAU;AAEV,OAAO,MAAMC,qBAAqB,GAAGA,CAAA,KAEvB;EACZ,MAAMC,iBAAiB,GAAGN,aAAa,CACrC,eAAeC,iBAAiB,CAACG,WAAW,KAC9C,CAAC;EAED,MAAMG,aAAa,GAAGP,aAAa,CACjC,eAAeC,iBAAiB,CAACE,OAAO,KAC1C,CAAC;EAED,MAAMK,iBAAiB,GAAGR,aAAa,CACrC,eAAeC,iBAAiB,CAACC,WAAW,KAC9C,CAAC;EAED,IAAIM,iBAAiB,EAAE;IACrB,OAAO,aAAa;EACtB;EAEA,IAAID,aAAa,EAAE;IACjB,OAAO,SAAS;EAClB;EAEA,IAAID,iBAAiB,EAAE;IACrB,OAAO,aAAa;EACtB;EAGA,OAAO,MAAM;AACf,CAAC","ignoreList":[]}
@@ -10,7 +10,7 @@
10
10
  * See the License for the specific language governing permissions and limitations under the License.
11
11
  */
12
12
 
13
- import { createContext, useContext, useRef, useLayoutEffect, useState, useCallback } from "react";
13
+ import { createContext, useCallback, useContext, useEffect, useRef, useState } from "react";
14
14
  import * as Tokens from "@okta/odyssey-design-tokens";
15
15
  import { hexToRgb } from "./hexToRgb.js";
16
16
  export const ContrastModeContext = createContext({
@@ -56,7 +56,7 @@ export const useContrastMode = ({
56
56
  setContrastMode(newBgColor === Tokens.HueNeutral50 ? "highContrast" : "lowContrast");
57
57
  }
58
58
  }, [explicitContrastMode]);
59
- useLayoutEffect(() => {
59
+ useEffect(() => {
60
60
  const observer = new MutationObserver(updateBackgroundColor);
61
61
  observer.observe(document.querySelector("html"), {
62
62
  attributes: true,
@@ -1 +1 @@
1
- {"version":3,"file":"useContrastMode.js","names":["createContext","useContext","useRef","useLayoutEffect","useState","useCallback","Tokens","hexToRgb","ContrastModeContext","contrastMode","defaultContrast","useContrastModeContext","hueNeutral50Rgb","HueNeutral50","asFormattedString","isTransparentColor","color","normalizeRgbaToRgb","rgba","replace","getElementComputedBackgroundColor","element","window","getComputedStyle","backgroundColor","normalizeBackgroundColor","bgColor","test","normalizedColor","defaultParentBackgroundColor","getBackgroundColor","parentElement","useContrastMode","explicitContrastMode","contrastContainerRef","existingContrastMode","parentBackgroundColor","setParentBackgroundColor","setContrastMode","updateBackgroundColor","newBgColor","current","observer","MutationObserver","observe","document","querySelector","attributes","attributeFilter","head","childList","subtree","onTransitionEnd","event","propertyName","addEventListener","removeEventListener","disconnect"],"sources":["../../src/useContrastMode.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2023-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport {\n createContext,\n useContext,\n useRef,\n useLayoutEffect,\n useState,\n useCallback,\n} from \"react\";\nimport * as Tokens from \"@okta/odyssey-design-tokens\";\n\nimport { hexToRgb } from \"./hexToRgb.js\";\n\nexport type ContrastMode = \"lowContrast\" | \"highContrast\";\nexport type ContrastModeContextType = {\n contrastMode: ContrastMode;\n};\n\nexport const ContrastModeContext = createContext<ContrastModeContextType>({\n contrastMode: \"lowContrast\",\n});\n\nexport const defaultContrast = \"lowContrast\";\n\nexport const useContrastModeContext = () => useContext(ContrastModeContext);\n\nexport const hueNeutral50Rgb = hexToRgb(Tokens.HueNeutral50).asFormattedString;\n\nexport const isTransparentColor = (color: string) =>\n color === \"rgba(0, 0, 0, 0)\" || color === \"transparent\";\n\nexport const normalizeRgbaToRgb = (rgba: string) =>\n rgba.replace(/rgba\\((\\d+),\\s*(\\d+),\\s*(\\d+),\\s*[\\d.]+\\)/, \"rgb($1, $2, $3)\");\n\nexport const getElementComputedBackgroundColor = (\n element: HTMLElement,\n): string => window.getComputedStyle(element).backgroundColor;\n\nexport const normalizeBackgroundColor = (bgColor: string): string => {\n if (/rgba\\((\\d+),\\s*(\\d+),\\s*(\\d+),\\s*[\\d.]+\\)/.test(bgColor)) {\n const normalizedColor = normalizeRgbaToRgb(bgColor);\n return normalizedColor === hueNeutral50Rgb\n ? Tokens.HueNeutral50\n : normalizedColor;\n }\n\n return bgColor === hueNeutral50Rgb ? Tokens.HueNeutral50 : bgColor;\n};\n\nexport const defaultParentBackgroundColor = \"#ffffff\";\n\n/**\n * Determines the effective background color of an element.\n *\n * @param element - The HTML element to check.\n * @returns The effective background color. Returns defaultParentBackgroundColor if no non-transparent background is found.\n *\n * Note:\n * - Low contrast mode is used for white background (defaultParentBackgroundColor or HueNeutralWhite).\n * - High contrast mode is used for gray background (#f4f4f4 or HueNeutral50).\n */\nexport const getBackgroundColor = (element: HTMLElement | null): string => {\n while (element) {\n const bgColor = getElementComputedBackgroundColor(element);\n if (!isTransparentColor(bgColor)) {\n return normalizeBackgroundColor(bgColor);\n }\n element = element.parentElement;\n }\n return defaultParentBackgroundColor; // Default to white/low contrast if no background color is found\n};\n\ntype UseContrastModeProps = {\n contrastMode?: ContrastMode;\n};\n\nexport const useContrastMode = ({\n contrastMode: explicitContrastMode,\n}: UseContrastModeProps) => {\n const contrastContainerRef = useRef<HTMLDivElement>(null);\n const { contrastMode: existingContrastMode } = useContrastModeContext();\n\n const [parentBackgroundColor, setParentBackgroundColor] = useState(\n defaultParentBackgroundColor,\n );\n const [contrastMode, setContrastMode] = useState<ContrastMode>(\n () => explicitContrastMode || existingContrastMode,\n );\n\n const updateBackgroundColor = useCallback(() => {\n const newBgColor = getBackgroundColor(contrastContainerRef.current);\n setParentBackgroundColor(newBgColor);\n\n if (!explicitContrastMode) {\n setContrastMode(\n newBgColor === Tokens.HueNeutral50 ? \"highContrast\" : \"lowContrast\",\n );\n }\n }, [explicitContrastMode]);\n\n useLayoutEffect(() => {\n const observer = new MutationObserver(updateBackgroundColor);\n observer.observe(document.querySelector(\"html\") as HTMLHtmlElement, {\n attributes: true,\n attributeFilter: [\"class\", \"style\"],\n });\n observer.observe(document.head, {\n childList: true,\n subtree: true,\n });\n\n const onTransitionEnd = (event: TransitionEvent) => {\n if (event.propertyName === \"background-color\") {\n updateBackgroundColor();\n }\n };\n\n document.addEventListener(\"transitionend\", onTransitionEnd);\n updateBackgroundColor();\n\n return () => {\n document.removeEventListener(\"transitionend\", onTransitionEnd);\n observer.disconnect();\n };\n }, [updateBackgroundColor]);\n\n return {\n contrastContainerRef,\n contrastMode,\n parentBackgroundColor,\n };\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"useContrastMode.js","names":["createContext","useCallback","useContext","useEffect","useRef","useState","Tokens","hexToRgb","ContrastModeContext","contrastMode","defaultContrast","useContrastModeContext","hueNeutral50Rgb","HueNeutral50","asFormattedString","isTransparentColor","color","normalizeRgbaToRgb","rgba","replace","getElementComputedBackgroundColor","element","window","getComputedStyle","backgroundColor","normalizeBackgroundColor","bgColor","test","normalizedColor","defaultParentBackgroundColor","getBackgroundColor","parentElement","useContrastMode","explicitContrastMode","contrastContainerRef","existingContrastMode","parentBackgroundColor","setParentBackgroundColor","setContrastMode","updateBackgroundColor","newBgColor","current","observer","MutationObserver","observe","document","querySelector","attributes","attributeFilter","head","childList","subtree","onTransitionEnd","event","propertyName","addEventListener","removeEventListener","disconnect"],"sources":["../../src/useContrastMode.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2023-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport * as Tokens from \"@okta/odyssey-design-tokens\";\n\nimport { hexToRgb } from \"./hexToRgb.js\";\n\nexport type ContrastMode = \"lowContrast\" | \"highContrast\";\nexport type ContrastModeContextType = {\n contrastMode: ContrastMode;\n};\n\nexport const ContrastModeContext = createContext<ContrastModeContextType>({\n contrastMode: \"lowContrast\",\n});\n\nexport const defaultContrast = \"lowContrast\";\n\nexport const useContrastModeContext = () => useContext(ContrastModeContext);\n\nexport const hueNeutral50Rgb = hexToRgb(Tokens.HueNeutral50).asFormattedString;\n\nexport const isTransparentColor = (color: string) =>\n color === \"rgba(0, 0, 0, 0)\" || color === \"transparent\";\n\nexport const normalizeRgbaToRgb = (rgba: string) =>\n rgba.replace(/rgba\\((\\d+),\\s*(\\d+),\\s*(\\d+),\\s*[\\d.]+\\)/, \"rgb($1, $2, $3)\");\n\nexport const getElementComputedBackgroundColor = (\n element: HTMLElement,\n): string => window.getComputedStyle(element).backgroundColor;\n\nexport const normalizeBackgroundColor = (bgColor: string): string => {\n if (/rgba\\((\\d+),\\s*(\\d+),\\s*(\\d+),\\s*[\\d.]+\\)/.test(bgColor)) {\n const normalizedColor = normalizeRgbaToRgb(bgColor);\n return normalizedColor === hueNeutral50Rgb\n ? Tokens.HueNeutral50\n : normalizedColor;\n }\n\n return bgColor === hueNeutral50Rgb ? Tokens.HueNeutral50 : bgColor;\n};\n\nexport const defaultParentBackgroundColor = \"#ffffff\";\n\n/**\n * Determines the effective background color of an element.\n *\n * @param element - The HTML element to check.\n * @returns The effective background color. Returns defaultParentBackgroundColor if no non-transparent background is found.\n *\n * Note:\n * - Low contrast mode is used for white background (defaultParentBackgroundColor or HueNeutralWhite).\n * - High contrast mode is used for gray background (#f4f4f4 or HueNeutral50).\n */\nexport const getBackgroundColor = (element: HTMLElement | null): string => {\n while (element) {\n const bgColor = getElementComputedBackgroundColor(element);\n if (!isTransparentColor(bgColor)) {\n return normalizeBackgroundColor(bgColor);\n }\n element = element.parentElement;\n }\n return defaultParentBackgroundColor; // Default to white/low contrast if no background color is found\n};\n\ntype UseContrastModeProps = {\n contrastMode?: ContrastMode;\n};\n\nexport const useContrastMode = ({\n contrastMode: explicitContrastMode,\n}: UseContrastModeProps) => {\n const contrastContainerRef = useRef<HTMLDivElement>(null);\n const { contrastMode: existingContrastMode } = useContrastModeContext();\n\n const [parentBackgroundColor, setParentBackgroundColor] = useState(\n defaultParentBackgroundColor,\n );\n const [contrastMode, setContrastMode] = useState<ContrastMode>(\n () => explicitContrastMode || existingContrastMode,\n );\n\n const updateBackgroundColor = useCallback(() => {\n const newBgColor = getBackgroundColor(contrastContainerRef.current);\n setParentBackgroundColor(newBgColor);\n\n if (!explicitContrastMode) {\n setContrastMode(\n newBgColor === Tokens.HueNeutral50 ? \"highContrast\" : \"lowContrast\",\n );\n }\n }, [explicitContrastMode]);\n\n useEffect(() => {\n const observer = new MutationObserver(updateBackgroundColor);\n observer.observe(document.querySelector(\"html\") as HTMLHtmlElement, {\n attributes: true,\n attributeFilter: [\"class\", \"style\"],\n });\n observer.observe(document.head, {\n childList: true,\n subtree: true,\n });\n\n const onTransitionEnd = (event: TransitionEvent) => {\n if (event.propertyName === \"background-color\") {\n updateBackgroundColor();\n }\n };\n\n document.addEventListener(\"transitionend\", onTransitionEnd);\n updateBackgroundColor();\n\n return () => {\n document.removeEventListener(\"transitionend\", onTransitionEnd);\n observer.disconnect();\n };\n }, [updateBackgroundColor]);\n\n return {\n contrastContainerRef,\n contrastMode,\n parentBackgroundColor,\n };\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"createReactRootElements.js","names":["createReactRootElements","appRootElement","document","createElement","stylesRootElement","style","setProperty","setAttribute","window","cspNonce"],"sources":["../../../src/web-component/createReactRootElements.ts"],"sourcesContent":["/*!\n * Copyright (c) 2025-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nexport const createReactRootElements = () => {\n const appRootElement = document.createElement(\"div\");\n const stylesRootElement = document.createElement(\"div\");\n\n // This `div` may cause layout issues unless it inherits the parent's height.\n appRootElement.style.setProperty(\"height\", \"inherit\");\n\n appRootElement.setAttribute(\"id\", \"app-root\");\n stylesRootElement.setAttribute(\"id\", \"style-root\");\n stylesRootElement.setAttribute(\"nonce\", window.cspNonce);\n\n return {\n /**\n * The element your React root component renders into.\n * React has to render or portal somewhere, and this element can be used for that root element.\n *\n * In the case of a web component, there is no defined root element, so you have to define it yourself.\n */\n appRootElement,\n /**\n * In React apps, your styles typically go in `document.head`, but you may want to render them somewhere else.\n *\n * Specifically when rendering in a web component, there is no `<head>`, so you have to create a spot for styles to render.\n */\n stylesRootElement,\n };\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,MAAMA,uBAAuB,GAAGA,CAAA,KAAM;EAC3C,MAAMC,cAAc,GAAGC,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;EACpD,MAAMC,iBAAiB,GAAGF,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;EAGvDF,cAAc,CAACI,KAAK,CAACC,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC;EAErDL,cAAc,CAACM,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC;EAC7CH,iBAAiB,CAACG,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC;EAClDH,iBAAiB,CAACG,YAAY,CAAC,OAAO,EAAEC,MAAM,CAACC,QAAQ,CAAC;EAExD,OAAO;IAOLR,cAAc;IAMdG;EACF,CAAC;AACH,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"createReactRootElements.js","names":["createReactRootElements","appRootElement","document","createElement","stylesRootElement","style","setProperty","setAttribute","window","cspNonce"],"sources":["../../../src/web-component/createReactRootElements.ts"],"sourcesContent":["/*!\n * Copyright (c) 2025-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nexport type ReactRootElements = {\n /**\n * The element your root React component renders into.\n * React has to render or portal somewhere, and this element can be used for that root element.\n */\n appRootElement: HTMLDivElement;\n /**\n * In React apps, your styles typically go in `document.head`, but you may want to render them somewhere else.\n *\n * Specifically when rendering in a web component, there is no `<head>`, so you have to create a spot for styles to render.\n */\n stylesRootElement: HTMLDivElement | HTMLHeadElement;\n};\n\nexport const createReactRootElements = () => {\n const appRootElement = document.createElement(\"div\");\n const stylesRootElement = document.createElement(\"div\");\n\n // This `div` may cause layout issues unless it inherits the parent's height.\n appRootElement.style.setProperty(\"height\", \"inherit\");\n\n appRootElement.setAttribute(\"id\", \"app-root\");\n stylesRootElement.setAttribute(\"id\", \"style-root\");\n stylesRootElement.setAttribute(\"nonce\", window.cspNonce);\n\n return {\n appRootElement,\n stylesRootElement,\n } satisfies ReactRootElements;\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAgBA,OAAO,MAAMA,uBAAuB,GAAGA,CAAA,KAAM;EAC3C,MAAMC,cAAc,GAAGC,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;EACpD,MAAMC,iBAAiB,GAAGF,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;EAGvDF,cAAc,CAACI,KAAK,CAACC,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC;EAErDL,cAAc,CAACM,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC;EAC7CH,iBAAiB,CAACG,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC;EAClDH,iBAAiB,CAACG,YAAY,CAAC,OAAO,EAAEC,MAAM,CAACC,QAAQ,CAAC;EAExD,OAAO;IACLR,cAAc;IACdG;EACF,CAAC;AACH,CAAC","ignoreList":[]}
@@ -49,6 +49,7 @@ if ("customElements" in globalThis && !customElements.get(reactWebComponentEleme
49
49
  export const renderReactInWebComponent = ({
50
50
  getReactComponent,
51
51
  webComponentChildren,
52
+ webComponentParentElement,
52
53
  webComponentRootElement
53
54
  }) => {
54
55
  const reactElement = new ReactInWebComponentElement(getReactComponent);
@@ -57,7 +58,11 @@ export const renderReactInWebComponent = ({
57
58
  reactElement.appendChild(webComponentChild);
58
59
  });
59
60
  }
60
- webComponentRootElement.appendChild(reactElement);
61
+ if (webComponentParentElement) {
62
+ webComponentParentElement.appendChild(reactElement);
63
+ } else if (webComponentRootElement) {
64
+ webComponentRootElement.appendChild(reactElement);
65
+ }
61
66
  return reactElement;
62
67
  };
63
68
  //# sourceMappingURL=renderReactInWebComponent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderReactInWebComponent.js","names":["createReactRootElements","reactWebComponentElementName","SsrFriendlyHtmlElementClass","globalThis","HTMLElement","ReactInWebComponentElement","constructor","getReactComponent","reactRootElements","styleElement","document","createElement","shadowRoot","attachShadow","mode","innerHTML","setAttribute","window","cspNonce","stylesRootElement","appendChild","appRootElement","reactRootPromise","then","createRoot","connectedCallback","reactRoot","render","disconnectedCallback","unmount","customElements","get","define","renderReactInWebComponent","webComponentChildren","webComponentRootElement","reactElement","Array","isArray","forEach","webComponentChild"],"sources":["../../../src/web-component/renderReactInWebComponent.ts"],"sourcesContent":["/*!\n * Copyright (c) 2024-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { type ReactNode } from \"react\";\nimport type { Root } from \"react-dom/client\";\n\nimport { createReactRootElements } from \"./createReactRootElements.js\";\n\nexport type ReactRootElements = ReturnType<typeof createReactRootElements>;\n\nexport const reactWebComponentElementName = \"odyssey-react-web-component\";\n\nexport type GetReactComponentInWebComponent = (\n reactRootElements: ReactRootElements,\n) => ReactNode;\n\nconst SsrFriendlyHtmlElementClass =\n \"HTMLElement\" in globalThis\n ? HTMLElement\n : (class {} as unknown as typeof globalThis.HTMLElement);\n\nexport class ReactInWebComponentElement extends SsrFriendlyHtmlElementClass {\n getReactComponent: GetReactComponentInWebComponent;\n reactRootElements: ReactRootElements;\n reactRootPromise: Promise<Root>;\n\n constructor(getReactComponent: GetReactComponentInWebComponent) {\n super();\n\n this.getReactComponent = getReactComponent;\n this.reactRootElements = createReactRootElements();\n\n const styleElement = document.createElement(\"style\");\n const shadowRoot = this.attachShadow({ mode: \"open\" });\n\n styleElement.innerHTML = `\n :host {\n all: initial;\n contain: content;\n }\n `;\n\n styleElement.setAttribute(\"nonce\", window.cspNonce);\n\n this.reactRootElements.stylesRootElement.appendChild(styleElement);\n shadowRoot.appendChild(this.reactRootElements.stylesRootElement);\n shadowRoot.appendChild(this.reactRootElements.appRootElement);\n\n // If we want to support React v17 in the future, we can use a try-catch on the import to grab the old `ReactDOM.render` function if `react-dom/client` errors. --Kevin Ghadyani\n this.reactRootPromise = import(\"react-dom/client\").then(({ createRoot }) =>\n createRoot(this.reactRootElements.appRootElement),\n );\n }\n\n connectedCallback() {\n this.reactRootPromise.then((reactRoot) =>\n reactRoot.render(this.getReactComponent(this.reactRootElements)),\n );\n }\n\n disconnectedCallback() {\n this.reactRootPromise.then((reactRoot) => reactRoot.unmount());\n }\n}\n\nif (\n \"customElements\" in globalThis &&\n !customElements.get(reactWebComponentElementName)\n) {\n customElements.define(\n reactWebComponentElementName,\n ReactInWebComponentElement,\n );\n}\n\nexport type RenderReactInWebComponentProps = {\n /**\n * This is a callback function for rendering your React component or app in the Web Component.\n * It gives you access to the Shadow DOM elements if you need them for Odyssey, Emotion, or MUI.\n *\n * You will need to add `<slot>` elements if you want to pass child elements or components or React apps.\n * You can have multiple slots in your app if you add a `name` attribute to your `<slot>` elements.\n */\n getReactComponent: GetReactComponentInWebComponent;\n /**\n * One or more HTML elements that are going to render as `children` of the web component.\n * If your React component doesn't take children, this is unnecessary.\n *\n * Typically, a React app root element is passed, but it can include an array of other elements if there are multiple slots for children.\n *\n * You will need to have rendered `<slot>` elements in your React component or `children` won't show up.\n */\n webComponentChildren?: HTMLElement | HTMLElement[];\n /**\n * You React app renders in the web component, but the web component needs to be rendered in the document.\n *\n * This is the element the web component is rendered into.\n */\n webComponentRootElement: HTMLElement;\n};\n\n/**\n * Lets you render React apps or components in a Web Component.\n *\n * This is useful when global styles are causing conflicts with your React components.\n */\nexport const renderReactInWebComponent = ({\n getReactComponent,\n webComponentChildren,\n webComponentRootElement,\n}: RenderReactInWebComponentProps) => {\n const reactElement = new ReactInWebComponentElement(getReactComponent);\n\n if (webComponentChildren) {\n (Array.isArray(webComponentChildren)\n ? webComponentChildren\n : [webComponentChildren]\n ).forEach((webComponentChild) => {\n reactElement.appendChild(webComponentChild);\n });\n }\n\n webComponentRootElement.appendChild(reactElement);\n\n return reactElement;\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA,SAASA,uBAAuB,QAAQ,8BAA8B;AAItE,OAAO,MAAMC,4BAA4B,GAAG,6BAA6B;AAMzE,MAAMC,2BAA2B,GAC/B,aAAa,IAAIC,UAAU,GACvBC,WAAW,GACV,MAAM,EAA+C;AAE5D,OAAO,MAAMC,0BAA0B,SAASH,2BAA2B,CAAC;EAK1EI,WAAWA,CAACC,iBAAkD,EAAE;IAC9D,KAAK,CAAC,CAAC;IAEP,IAAI,CAACA,iBAAiB,GAAGA,iBAAiB;IAC1C,IAAI,CAACC,iBAAiB,GAAGR,uBAAuB,CAAC,CAAC;IAElD,MAAMS,YAAY,GAAGC,QAAQ,CAACC,aAAa,CAAC,OAAO,CAAC;IACpD,MAAMC,UAAU,GAAG,IAAI,CAACC,YAAY,CAAC;MAAEC,IAAI,EAAE;IAAO,CAAC,CAAC;IAEtDL,YAAY,CAACM,SAAS,GAAG;AAC7B;AACA;AACA;AACA;AACA,KAAK;IAEDN,YAAY,CAACO,YAAY,CAAC,OAAO,EAAEC,MAAM,CAACC,QAAQ,CAAC;IAEnD,IAAI,CAACV,iBAAiB,CAACW,iBAAiB,CAACC,WAAW,CAACX,YAAY,CAAC;IAClEG,UAAU,CAACQ,WAAW,CAAC,IAAI,CAACZ,iBAAiB,CAACW,iBAAiB,CAAC;IAChEP,UAAU,CAACQ,WAAW,CAAC,IAAI,CAACZ,iBAAiB,CAACa,cAAc,CAAC;IAG7D,IAAI,CAACC,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAACC,IAAI,CAAC,CAAC;MAAEC;IAAW,CAAC,KACrEA,UAAU,CAAC,IAAI,CAAChB,iBAAiB,CAACa,cAAc,CAClD,CAAC;EACH;EAEAI,iBAAiBA,CAAA,EAAG;IAClB,IAAI,CAACH,gBAAgB,CAACC,IAAI,CAAEG,SAAS,IACnCA,SAAS,CAACC,MAAM,CAAC,IAAI,CAACpB,iBAAiB,CAAC,IAAI,CAACC,iBAAiB,CAAC,CACjE,CAAC;EACH;EAEAoB,oBAAoBA,CAAA,EAAG;IACrB,IAAI,CAACN,gBAAgB,CAACC,IAAI,CAAEG,SAAS,IAAKA,SAAS,CAACG,OAAO,CAAC,CAAC,CAAC;EAChE;AACF;AAEA,IACE,gBAAgB,IAAI1B,UAAU,IAC9B,CAAC2B,cAAc,CAACC,GAAG,CAAC9B,4BAA4B,CAAC,EACjD;EACA6B,cAAc,CAACE,MAAM,CACnB/B,4BAA4B,EAC5BI,0BACF,CAAC;AACH;AAiCA,OAAO,MAAM4B,yBAAyB,GAAGA,CAAC;EACxC1B,iBAAiB;EACjB2B,oBAAoB;EACpBC;AAC8B,CAAC,KAAK;EACpC,MAAMC,YAAY,GAAG,IAAI/B,0BAA0B,CAACE,iBAAiB,CAAC;EAEtE,IAAI2B,oBAAoB,EAAE;IACxB,CAACG,KAAK,CAACC,OAAO,CAACJ,oBAAoB,CAAC,GAChCA,oBAAoB,GACpB,CAACA,oBAAoB,CAAC,EACxBK,OAAO,CAAEC,iBAAiB,IAAK;MAC/BJ,YAAY,CAAChB,WAAW,CAACoB,iBAAiB,CAAC;IAC7C,CAAC,CAAC;EACJ;EAEAL,uBAAuB,CAACf,WAAW,CAACgB,YAAY,CAAC;EAEjD,OAAOA,YAAY;AACrB,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"renderReactInWebComponent.js","names":["createReactRootElements","reactWebComponentElementName","SsrFriendlyHtmlElementClass","globalThis","HTMLElement","ReactInWebComponentElement","constructor","getReactComponent","reactRootElements","styleElement","document","createElement","shadowRoot","attachShadow","mode","innerHTML","setAttribute","window","cspNonce","stylesRootElement","appendChild","appRootElement","reactRootPromise","then","createRoot","connectedCallback","reactRoot","render","disconnectedCallback","unmount","customElements","get","define","renderReactInWebComponent","webComponentChildren","webComponentParentElement","webComponentRootElement","reactElement","Array","isArray","forEach","webComponentChild"],"sources":["../../../src/web-component/renderReactInWebComponent.ts"],"sourcesContent":["/*!\n * Copyright (c) 2024-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { type ReactNode } from \"react\";\nimport type { Root } from \"react-dom/client\";\n\nimport {\n createReactRootElements,\n type ReactRootElements,\n} from \"./createReactRootElements.js\";\n\nexport const reactWebComponentElementName = \"odyssey-react-web-component\";\n\nexport type GetReactComponentInWebComponent = (\n reactRootElements: ReactRootElements,\n) => ReactNode;\n\nconst SsrFriendlyHtmlElementClass =\n \"HTMLElement\" in globalThis\n ? HTMLElement\n : (class {} as unknown as typeof globalThis.HTMLElement);\n\nexport class ReactInWebComponentElement extends SsrFriendlyHtmlElementClass {\n getReactComponent: GetReactComponentInWebComponent;\n reactRootElements: ReactRootElements;\n reactRootPromise: Promise<Root>;\n\n constructor(getReactComponent: GetReactComponentInWebComponent) {\n super();\n\n this.getReactComponent = getReactComponent;\n this.reactRootElements = createReactRootElements();\n\n const styleElement = document.createElement(\"style\");\n const shadowRoot = this.attachShadow({ mode: \"open\" });\n\n styleElement.innerHTML = `\n :host {\n all: initial;\n contain: content;\n }\n `;\n\n styleElement.setAttribute(\"nonce\", window.cspNonce);\n\n this.reactRootElements.stylesRootElement.appendChild(styleElement);\n shadowRoot.appendChild(this.reactRootElements.stylesRootElement);\n shadowRoot.appendChild(this.reactRootElements.appRootElement);\n\n // If we want to support React v17 in the future, we can use a try-catch on the import to grab the old `ReactDOM.render` function if `react-dom/client` errors. --Kevin Ghadyani\n this.reactRootPromise = import(\"react-dom/client\").then(({ createRoot }) =>\n createRoot(this.reactRootElements.appRootElement),\n );\n }\n\n connectedCallback() {\n this.reactRootPromise.then((reactRoot) =>\n reactRoot.render(this.getReactComponent(this.reactRootElements)),\n );\n }\n\n disconnectedCallback() {\n this.reactRootPromise.then((reactRoot) => reactRoot.unmount());\n }\n}\n\nif (\n \"customElements\" in globalThis &&\n !customElements.get(reactWebComponentElementName)\n) {\n customElements.define(\n reactWebComponentElementName,\n ReactInWebComponentElement,\n );\n}\n\nexport type RenderReactInWebComponentProps = {\n /**\n * This is a callback function for rendering your React component or app in the Web Component.\n * It gives you access to the Shadow DOM elements if you need them for Odyssey, Emotion, or MUI.\n *\n * You will need to add `<slot>` elements if you want to pass child elements or components or React apps.\n * You can have multiple slots in your app if you add a `name` attribute to your `<slot>` elements.\n */\n getReactComponent: GetReactComponentInWebComponent;\n /**\n * One or more HTML elements that are going to render as `children` of the web component.\n * If your React component doesn't take children, this is unnecessary.\n *\n * Typically, a React app root element is passed, but it can include an array of other elements if there are multiple slots for children.\n *\n * You will need to have rendered `<slot>` elements in your React component or `children` won't show up.\n */\n webComponentChildren?: HTMLElement | HTMLElement[];\n} & (\n | {\n /**\n * The React app renders in the web component, but the web component needs to be rendered in the document.\n *\n * This is the element the web component is rendered into.\n */\n webComponentParentElement: HTMLElement;\n webComponentRootElement?: never;\n }\n | {\n webComponentParentElement?: HTMLElement;\n /**\n * @deprecated Use `webComponentParentElement` instead.\n */\n webComponentRootElement: HTMLElement;\n }\n);\n\n/**\n * Lets you render React apps or components in a Web Component.\n *\n * This is useful when global styles are causing conflicts with your React components.\n */\nexport const renderReactInWebComponent = ({\n getReactComponent,\n webComponentChildren,\n webComponentParentElement,\n webComponentRootElement,\n}: RenderReactInWebComponentProps) => {\n const reactElement = new ReactInWebComponentElement(getReactComponent);\n\n if (webComponentChildren) {\n (Array.isArray(webComponentChildren)\n ? webComponentChildren\n : [webComponentChildren]\n ).forEach((webComponentChild) => {\n reactElement.appendChild(webComponentChild);\n });\n }\n\n if (webComponentParentElement) {\n webComponentParentElement.appendChild(reactElement);\n }\n // Remove this condition when `webComponentRootElement` is no longer a prop.\n else if (webComponentRootElement) {\n webComponentRootElement.appendChild(reactElement);\n }\n\n return reactElement;\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA,SACEA,uBAAuB,QAElB,8BAA8B;AAErC,OAAO,MAAMC,4BAA4B,GAAG,6BAA6B;AAMzE,MAAMC,2BAA2B,GAC/B,aAAa,IAAIC,UAAU,GACvBC,WAAW,GACV,MAAM,EAA+C;AAE5D,OAAO,MAAMC,0BAA0B,SAASH,2BAA2B,CAAC;EAK1EI,WAAWA,CAACC,iBAAkD,EAAE;IAC9D,KAAK,CAAC,CAAC;IAEP,IAAI,CAACA,iBAAiB,GAAGA,iBAAiB;IAC1C,IAAI,CAACC,iBAAiB,GAAGR,uBAAuB,CAAC,CAAC;IAElD,MAAMS,YAAY,GAAGC,QAAQ,CAACC,aAAa,CAAC,OAAO,CAAC;IACpD,MAAMC,UAAU,GAAG,IAAI,CAACC,YAAY,CAAC;MAAEC,IAAI,EAAE;IAAO,CAAC,CAAC;IAEtDL,YAAY,CAACM,SAAS,GAAG;AAC7B;AACA;AACA;AACA;AACA,KAAK;IAEDN,YAAY,CAACO,YAAY,CAAC,OAAO,EAAEC,MAAM,CAACC,QAAQ,CAAC;IAEnD,IAAI,CAACV,iBAAiB,CAACW,iBAAiB,CAACC,WAAW,CAACX,YAAY,CAAC;IAClEG,UAAU,CAACQ,WAAW,CAAC,IAAI,CAACZ,iBAAiB,CAACW,iBAAiB,CAAC;IAChEP,UAAU,CAACQ,WAAW,CAAC,IAAI,CAACZ,iBAAiB,CAACa,cAAc,CAAC;IAG7D,IAAI,CAACC,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAACC,IAAI,CAAC,CAAC;MAAEC;IAAW,CAAC,KACrEA,UAAU,CAAC,IAAI,CAAChB,iBAAiB,CAACa,cAAc,CAClD,CAAC;EACH;EAEAI,iBAAiBA,CAAA,EAAG;IAClB,IAAI,CAACH,gBAAgB,CAACC,IAAI,CAAEG,SAAS,IACnCA,SAAS,CAACC,MAAM,CAAC,IAAI,CAACpB,iBAAiB,CAAC,IAAI,CAACC,iBAAiB,CAAC,CACjE,CAAC;EACH;EAEAoB,oBAAoBA,CAAA,EAAG;IACrB,IAAI,CAACN,gBAAgB,CAACC,IAAI,CAAEG,SAAS,IAAKA,SAAS,CAACG,OAAO,CAAC,CAAC,CAAC;EAChE;AACF;AAEA,IACE,gBAAgB,IAAI1B,UAAU,IAC9B,CAAC2B,cAAc,CAACC,GAAG,CAAC9B,4BAA4B,CAAC,EACjD;EACA6B,cAAc,CAACE,MAAM,CACnB/B,4BAA4B,EAC5BI,0BACF,CAAC;AACH;AA4CA,OAAO,MAAM4B,yBAAyB,GAAGA,CAAC;EACxC1B,iBAAiB;EACjB2B,oBAAoB;EACpBC,yBAAyB;EACzBC;AAC8B,CAAC,KAAK;EACpC,MAAMC,YAAY,GAAG,IAAIhC,0BAA0B,CAACE,iBAAiB,CAAC;EAEtE,IAAI2B,oBAAoB,EAAE;IACxB,CAACI,KAAK,CAACC,OAAO,CAACL,oBAAoB,CAAC,GAChCA,oBAAoB,GACpB,CAACA,oBAAoB,CAAC,EACxBM,OAAO,CAAEC,iBAAiB,IAAK;MAC/BJ,YAAY,CAACjB,WAAW,CAACqB,iBAAiB,CAAC;IAC7C,CAAC,CAAC;EACJ;EAEA,IAAIN,yBAAyB,EAAE;IAC7BA,yBAAyB,CAACf,WAAW,CAACiB,YAAY,CAAC;EACrD,CAAC,MAEI,IAAID,uBAAuB,EAAE;IAChCA,uBAAuB,CAAChB,WAAW,CAACiB,YAAY,CAAC;EACnD;EAEA,OAAOA,YAAY;AACrB,CAAC","ignoreList":[]}
package/dist/index.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Do not edit directly
3
- * Generated on Wed, 05 Feb 2025 20:20:12 GMT
3
+ * Generated on Thu, 27 Feb 2025 23:10:14 GMT
4
4
  */
5
5
 
6
6
  module.exports = {
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Do not edit directly
3
- * Generated on Wed, 05 Feb 2025 20:20:12 GMT
3
+ * Generated on Thu, 27 Feb 2025 23:10:14 GMT
4
4
  */
5
5
 
6
6
  export const BorderColorControl = "#8d8d8d";
package/dist/index.scss CHANGED
@@ -1,7 +1,7 @@
1
1
 
2
2
  /**
3
3
  * Do not edit directly
4
- * Generated on Wed, 05 Feb 2025 20:20:12 GMT
4
+ * Generated on Thu, 27 Feb 2025 23:10:14 GMT
5
5
  */
6
6
 
7
7
  $border-color-control: #8d8d8d !default;