@thunderid/react 0.3.3 → 0.3.5

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 (255) hide show
  1. package/dist/ThunderIDReactClient.d.ts +1 -5
  2. package/dist/ThunderIDReactClient.d.ts.map +1 -1
  3. package/dist/ThunderIDReactClient.js +1 -68
  4. package/dist/ThunderIDReactClient.js.map +1 -1
  5. package/dist/cjs/ThunderIDReactClient.cjs +0 -67
  6. package/dist/cjs/ThunderIDReactClient.cjs.map +1 -1
  7. package/dist/cjs/components/presentation/LanguageSwitcher/BaseLanguageSwitcher.cjs +1 -1
  8. package/dist/cjs/components/presentation/UserAvatar/BaseUserAvatar.cjs +57 -0
  9. package/dist/cjs/components/presentation/UserAvatar/BaseUserAvatar.cjs.map +1 -0
  10. package/dist/cjs/components/presentation/UserAvatar/UserAvatar.cjs +36 -0
  11. package/dist/cjs/components/presentation/UserAvatar/UserAvatar.cjs.map +1 -0
  12. package/dist/cjs/components/presentation/UserDropdown/BaseUserDropdown.cjs +6 -5
  13. package/dist/cjs/components/presentation/UserDropdown/BaseUserDropdown.cjs.map +1 -1
  14. package/dist/cjs/components/presentation/auth/AuthOptionFactory.cjs +3 -15
  15. package/dist/cjs/components/presentation/auth/AuthOptionFactory.cjs.map +1 -1
  16. package/dist/cjs/contexts/Theme/ThemeContext.cjs.map +1 -1
  17. package/dist/cjs/contexts/Theme/ThemeProvider.cjs +2 -5
  18. package/dist/cjs/contexts/Theme/ThemeProvider.cjs.map +1 -1
  19. package/dist/cjs/contexts/ThunderID/ThunderIDContext.cjs +0 -2
  20. package/dist/cjs/contexts/ThunderID/ThunderIDContext.cjs.map +1 -1
  21. package/dist/cjs/contexts/ThunderID/ThunderIDProvider.cjs +14 -90
  22. package/dist/cjs/contexts/ThunderID/ThunderIDProvider.cjs.map +1 -1
  23. package/dist/cjs/index.cjs +6 -51
  24. package/dist/components/presentation/LanguageSwitcher/BaseLanguageSwitcher.js +1 -1
  25. package/dist/components/presentation/UserAvatar/BaseUserAvatar.d.ts +50 -0
  26. package/dist/components/presentation/UserAvatar/BaseUserAvatar.d.ts.map +1 -0
  27. package/dist/components/presentation/UserAvatar/BaseUserAvatar.js +55 -0
  28. package/dist/components/presentation/UserAvatar/BaseUserAvatar.js.map +1 -0
  29. package/dist/components/presentation/UserAvatar/UserAvatar.d.ts +46 -0
  30. package/dist/components/presentation/UserAvatar/UserAvatar.d.ts.map +1 -0
  31. package/dist/components/presentation/UserAvatar/UserAvatar.js +34 -0
  32. package/dist/components/presentation/UserAvatar/UserAvatar.js.map +1 -0
  33. package/dist/components/presentation/UserDropdown/BaseUserDropdown.d.ts.map +1 -1
  34. package/dist/components/presentation/UserDropdown/BaseUserDropdown.js +6 -5
  35. package/dist/components/presentation/UserDropdown/BaseUserDropdown.js.map +1 -1
  36. package/dist/components/presentation/auth/AuthOptionFactory.d.ts +2 -2
  37. package/dist/components/presentation/auth/AuthOptionFactory.d.ts.map +1 -1
  38. package/dist/components/presentation/auth/AuthOptionFactory.js +3 -15
  39. package/dist/components/presentation/auth/AuthOptionFactory.js.map +1 -1
  40. package/dist/contexts/Theme/ThemeContext.d.ts +0 -12
  41. package/dist/contexts/Theme/ThemeContext.d.ts.map +1 -1
  42. package/dist/contexts/Theme/ThemeContext.js.map +1 -1
  43. package/dist/contexts/Theme/ThemeProvider.d.ts +0 -4
  44. package/dist/contexts/Theme/ThemeProvider.d.ts.map +1 -1
  45. package/dist/contexts/Theme/ThemeProvider.js +2 -5
  46. package/dist/contexts/Theme/ThemeProvider.js.map +1 -1
  47. package/dist/contexts/ThunderID/ThunderIDContext.d.ts +2 -3
  48. package/dist/contexts/ThunderID/ThunderIDContext.d.ts.map +1 -1
  49. package/dist/contexts/ThunderID/ThunderIDContext.js +0 -2
  50. package/dist/contexts/ThunderID/ThunderIDContext.js.map +1 -1
  51. package/dist/contexts/ThunderID/ThunderIDProvider.d.ts.map +1 -1
  52. package/dist/contexts/ThunderID/ThunderIDProvider.js +15 -91
  53. package/dist/contexts/ThunderID/ThunderIDProvider.js.map +1 -1
  54. package/dist/index.d.ts +4 -40
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +5 -27
  57. package/package.json +2 -2
  58. package/dist/api/createOrganization.d.ts +0 -86
  59. package/dist/api/createOrganization.d.ts.map +0 -1
  60. package/dist/api/createOrganization.js +0 -80
  61. package/dist/api/createOrganization.js.map +0 -1
  62. package/dist/api/getAllOrganizations.d.ts +0 -78
  63. package/dist/api/getAllOrganizations.d.ts.map +0 -1
  64. package/dist/api/getAllOrganizations.js +0 -71
  65. package/dist/api/getAllOrganizations.js.map +0 -1
  66. package/dist/api/getMeOrganizations.d.ts +0 -82
  67. package/dist/api/getMeOrganizations.d.ts.map +0 -1
  68. package/dist/api/getMeOrganizations.js +0 -75
  69. package/dist/api/getMeOrganizations.js.map +0 -1
  70. package/dist/api/getOrganization.d.ts +0 -74
  71. package/dist/api/getOrganization.d.ts.map +0 -1
  72. package/dist/api/getOrganization.js +0 -67
  73. package/dist/api/getOrganization.js.map +0 -1
  74. package/dist/api/getSchemas.d.ts +0 -72
  75. package/dist/api/getSchemas.d.ts.map +0 -1
  76. package/dist/api/getSchemas.js +0 -65
  77. package/dist/api/getSchemas.js.map +0 -1
  78. package/dist/api/updateOrganization.d.ts +0 -81
  79. package/dist/api/updateOrganization.d.ts.map +0 -1
  80. package/dist/api/updateOrganization.js +0 -74
  81. package/dist/api/updateOrganization.js.map +0 -1
  82. package/dist/cjs/api/createOrganization.cjs +0 -82
  83. package/dist/cjs/api/createOrganization.cjs.map +0 -1
  84. package/dist/cjs/api/getAllOrganizations.cjs +0 -73
  85. package/dist/cjs/api/getAllOrganizations.cjs.map +0 -1
  86. package/dist/cjs/api/getMeOrganizations.cjs +0 -77
  87. package/dist/cjs/api/getMeOrganizations.cjs.map +0 -1
  88. package/dist/cjs/api/getOrganization.cjs +0 -69
  89. package/dist/cjs/api/getOrganization.cjs.map +0 -1
  90. package/dist/cjs/api/getSchemas.cjs +0 -67
  91. package/dist/cjs/api/getSchemas.cjs.map +0 -1
  92. package/dist/cjs/api/updateOrganization.cjs +0 -76
  93. package/dist/cjs/api/updateOrganization.cjs.map +0 -1
  94. package/dist/cjs/components/control/OrganizationContext/OrganizationContext.cjs +0 -34
  95. package/dist/cjs/components/control/OrganizationContext/OrganizationContext.cjs.map +0 -1
  96. package/dist/cjs/components/control/OrganizationContext/OrganizationContextController.cjs +0 -58
  97. package/dist/cjs/components/control/OrganizationContext/OrganizationContextController.cjs.map +0 -1
  98. package/dist/cjs/components/presentation/CreateOrganization/BaseCreateOrganization.cjs +0 -183
  99. package/dist/cjs/components/presentation/CreateOrganization/BaseCreateOrganization.cjs.map +0 -1
  100. package/dist/cjs/components/presentation/CreateOrganization/BaseCreateOrganization.styles.cjs +0 -150
  101. package/dist/cjs/components/presentation/CreateOrganization/BaseCreateOrganization.styles.cjs.map +0 -1
  102. package/dist/cjs/components/presentation/CreateOrganization/CreateOrganization.cjs +0 -90
  103. package/dist/cjs/components/presentation/CreateOrganization/CreateOrganization.cjs.map +0 -1
  104. package/dist/cjs/components/presentation/Organization/BaseOrganization.cjs +0 -41
  105. package/dist/cjs/components/presentation/Organization/BaseOrganization.cjs.map +0 -1
  106. package/dist/cjs/components/presentation/Organization/Organization.cjs +0 -49
  107. package/dist/cjs/components/presentation/Organization/Organization.cjs.map +0 -1
  108. package/dist/cjs/components/presentation/OrganizationList/BaseOrganizationList.cjs +0 -257
  109. package/dist/cjs/components/presentation/OrganizationList/BaseOrganizationList.cjs.map +0 -1
  110. package/dist/cjs/components/presentation/OrganizationList/BaseOrganizationList.styles.cjs +0 -236
  111. package/dist/cjs/components/presentation/OrganizationList/BaseOrganizationList.styles.cjs.map +0 -1
  112. package/dist/cjs/components/presentation/OrganizationList/OrganizationList.cjs +0 -86
  113. package/dist/cjs/components/presentation/OrganizationList/OrganizationList.cjs.map +0 -1
  114. package/dist/cjs/components/presentation/OrganizationList/OrganizationList.styles.cjs +0 -75
  115. package/dist/cjs/components/presentation/OrganizationList/OrganizationList.styles.cjs.map +0 -1
  116. package/dist/cjs/components/presentation/OrganizationProfile/BaseOrganizationProfile.cjs +0 -328
  117. package/dist/cjs/components/presentation/OrganizationProfile/BaseOrganizationProfile.cjs.map +0 -1
  118. package/dist/cjs/components/presentation/OrganizationProfile/BaseOrganizationProfile.styles.cjs +0 -166
  119. package/dist/cjs/components/presentation/OrganizationProfile/BaseOrganizationProfile.styles.cjs.map +0 -1
  120. package/dist/cjs/components/presentation/OrganizationProfile/OrganizationProfile.cjs +0 -126
  121. package/dist/cjs/components/presentation/OrganizationProfile/OrganizationProfile.cjs.map +0 -1
  122. package/dist/cjs/components/presentation/OrganizationSwitcher/BaseOrganizationSwitcher.cjs +0 -288
  123. package/dist/cjs/components/presentation/OrganizationSwitcher/BaseOrganizationSwitcher.cjs.map +0 -1
  124. package/dist/cjs/components/presentation/OrganizationSwitcher/BaseOrganizationSwitcher.styles.cjs +0 -237
  125. package/dist/cjs/components/presentation/OrganizationSwitcher/BaseOrganizationSwitcher.styles.cjs.map +0 -1
  126. package/dist/cjs/components/presentation/OrganizationSwitcher/OrganizationSwitcher.cjs +0 -127
  127. package/dist/cjs/components/presentation/OrganizationSwitcher/OrganizationSwitcher.cjs.map +0 -1
  128. package/dist/cjs/components/presentation/auth/OrganizationUnitPicker/OrganizationUnitPicker.cjs +0 -183
  129. package/dist/cjs/components/presentation/auth/OrganizationUnitPicker/OrganizationUnitPicker.cjs.map +0 -1
  130. package/dist/cjs/components/presentation/auth/OrganizationUnitPicker/OrganizationUnitPicker.styles.cjs +0 -128
  131. package/dist/cjs/components/presentation/auth/OrganizationUnitPicker/OrganizationUnitPicker.styles.cjs.map +0 -1
  132. package/dist/cjs/components/primitives/Icons/Building.cjs +0 -75
  133. package/dist/cjs/components/primitives/Icons/Building.cjs.map +0 -1
  134. package/dist/cjs/contexts/Branding/BrandingContext.cjs +0 -12
  135. package/dist/cjs/contexts/Branding/BrandingContext.cjs.map +0 -1
  136. package/dist/cjs/contexts/Branding/BrandingProvider.cjs +0 -96
  137. package/dist/cjs/contexts/Branding/BrandingProvider.cjs.map +0 -1
  138. package/dist/cjs/contexts/Branding/useBrandingContext.cjs +0 -40
  139. package/dist/cjs/contexts/Branding/useBrandingContext.cjs.map +0 -1
  140. package/dist/cjs/contexts/Organization/OrganizationContext.cjs +0 -27
  141. package/dist/cjs/contexts/Organization/OrganizationContext.cjs.map +0 -1
  142. package/dist/cjs/contexts/Organization/OrganizationProvider.cjs +0 -97
  143. package/dist/cjs/contexts/Organization/OrganizationProvider.cjs.map +0 -1
  144. package/dist/cjs/contexts/Organization/useOrganization.cjs +0 -100
  145. package/dist/cjs/contexts/Organization/useOrganization.cjs.map +0 -1
  146. package/dist/cjs/hooks/useBranding.cjs +0 -71
  147. package/dist/cjs/hooks/useBranding.cjs.map +0 -1
  148. package/dist/components/control/OrganizationContext/OrganizationContext.d.ts +0 -40
  149. package/dist/components/control/OrganizationContext/OrganizationContext.d.ts.map +0 -1
  150. package/dist/components/control/OrganizationContext/OrganizationContext.js +0 -32
  151. package/dist/components/control/OrganizationContext/OrganizationContext.js.map +0 -1
  152. package/dist/components/control/OrganizationContext/OrganizationContextController.d.ts +0 -35
  153. package/dist/components/control/OrganizationContext/OrganizationContextController.d.ts.map +0 -1
  154. package/dist/components/control/OrganizationContext/OrganizationContextController.js +0 -55
  155. package/dist/components/control/OrganizationContext/OrganizationContextController.js.map +0 -1
  156. package/dist/components/presentation/CreateOrganization/BaseCreateOrganization.d.ts +0 -60
  157. package/dist/components/presentation/CreateOrganization/BaseCreateOrganization.d.ts.map +0 -1
  158. package/dist/components/presentation/CreateOrganization/BaseCreateOrganization.js +0 -178
  159. package/dist/components/presentation/CreateOrganization/BaseCreateOrganization.js.map +0 -1
  160. package/dist/components/presentation/CreateOrganization/BaseCreateOrganization.styles.d.ts +0 -27
  161. package/dist/components/presentation/CreateOrganization/BaseCreateOrganization.styles.d.ts.map +0 -1
  162. package/dist/components/presentation/CreateOrganization/BaseCreateOrganization.styles.js +0 -147
  163. package/dist/components/presentation/CreateOrganization/BaseCreateOrganization.styles.js.map +0 -1
  164. package/dist/components/presentation/CreateOrganization/CreateOrganization.d.ts +0 -68
  165. package/dist/components/presentation/CreateOrganization/CreateOrganization.d.ts.map +0 -1
  166. package/dist/components/presentation/CreateOrganization/CreateOrganization.js +0 -87
  167. package/dist/components/presentation/CreateOrganization/CreateOrganization.js.map +0 -1
  168. package/dist/components/presentation/Organization/BaseOrganization.d.ts +0 -67
  169. package/dist/components/presentation/Organization/BaseOrganization.d.ts.map +0 -1
  170. package/dist/components/presentation/Organization/BaseOrganization.js +0 -39
  171. package/dist/components/presentation/Organization/BaseOrganization.js.map +0 -1
  172. package/dist/components/presentation/Organization/Organization.d.ts +0 -67
  173. package/dist/components/presentation/Organization/Organization.d.ts.map +0 -1
  174. package/dist/components/presentation/Organization/Organization.js +0 -47
  175. package/dist/components/presentation/Organization/Organization.js.map +0 -1
  176. package/dist/components/presentation/OrganizationList/BaseOrganizationList.d.ts +0 -135
  177. package/dist/components/presentation/OrganizationList/BaseOrganizationList.d.ts.map +0 -1
  178. package/dist/components/presentation/OrganizationList/BaseOrganizationList.js +0 -252
  179. package/dist/components/presentation/OrganizationList/BaseOrganizationList.js.map +0 -1
  180. package/dist/components/presentation/OrganizationList/BaseOrganizationList.styles.d.ts +0 -27
  181. package/dist/components/presentation/OrganizationList/BaseOrganizationList.styles.d.ts.map +0 -1
  182. package/dist/components/presentation/OrganizationList/BaseOrganizationList.styles.js +0 -233
  183. package/dist/components/presentation/OrganizationList/BaseOrganizationList.styles.js.map +0 -1
  184. package/dist/components/presentation/OrganizationList/OrganizationList.d.ts +0 -93
  185. package/dist/components/presentation/OrganizationList/OrganizationList.d.ts.map +0 -1
  186. package/dist/components/presentation/OrganizationList/OrganizationList.js +0 -82
  187. package/dist/components/presentation/OrganizationList/OrganizationList.js.map +0 -1
  188. package/dist/components/presentation/OrganizationList/OrganizationList.styles.d.ts +0 -27
  189. package/dist/components/presentation/OrganizationList/OrganizationList.styles.d.ts.map +0 -1
  190. package/dist/components/presentation/OrganizationList/OrganizationList.styles.js +0 -72
  191. package/dist/components/presentation/OrganizationList/OrganizationList.styles.js.map +0 -1
  192. package/dist/components/presentation/OrganizationProfile/BaseOrganizationProfile.d.ts +0 -160
  193. package/dist/components/presentation/OrganizationProfile/BaseOrganizationProfile.d.ts.map +0 -1
  194. package/dist/components/presentation/OrganizationProfile/BaseOrganizationProfile.js +0 -323
  195. package/dist/components/presentation/OrganizationProfile/BaseOrganizationProfile.js.map +0 -1
  196. package/dist/components/presentation/OrganizationProfile/BaseOrganizationProfile.styles.d.ts +0 -27
  197. package/dist/components/presentation/OrganizationProfile/BaseOrganizationProfile.styles.d.ts.map +0 -1
  198. package/dist/components/presentation/OrganizationProfile/BaseOrganizationProfile.styles.js +0 -163
  199. package/dist/components/presentation/OrganizationProfile/BaseOrganizationProfile.styles.js.map +0 -1
  200. package/dist/components/presentation/OrganizationProfile/OrganizationProfile.d.ts +0 -120
  201. package/dist/components/presentation/OrganizationProfile/OrganizationProfile.d.ts.map +0 -1
  202. package/dist/components/presentation/OrganizationProfile/OrganizationProfile.js +0 -122
  203. package/dist/components/presentation/OrganizationProfile/OrganizationProfile.js.map +0 -1
  204. package/dist/components/presentation/OrganizationSwitcher/BaseOrganizationSwitcher.d.ts +0 -149
  205. package/dist/components/presentation/OrganizationSwitcher/BaseOrganizationSwitcher.d.ts.map +0 -1
  206. package/dist/components/presentation/OrganizationSwitcher/BaseOrganizationSwitcher.js +0 -282
  207. package/dist/components/presentation/OrganizationSwitcher/BaseOrganizationSwitcher.js.map +0 -1
  208. package/dist/components/presentation/OrganizationSwitcher/BaseOrganizationSwitcher.styles.d.ts +0 -27
  209. package/dist/components/presentation/OrganizationSwitcher/BaseOrganizationSwitcher.styles.d.ts.map +0 -1
  210. package/dist/components/presentation/OrganizationSwitcher/BaseOrganizationSwitcher.styles.js +0 -234
  211. package/dist/components/presentation/OrganizationSwitcher/BaseOrganizationSwitcher.styles.js.map +0 -1
  212. package/dist/components/presentation/OrganizationSwitcher/OrganizationSwitcher.d.ts +0 -71
  213. package/dist/components/presentation/OrganizationSwitcher/OrganizationSwitcher.d.ts.map +0 -1
  214. package/dist/components/presentation/OrganizationSwitcher/OrganizationSwitcher.js +0 -124
  215. package/dist/components/presentation/OrganizationSwitcher/OrganizationSwitcher.js.map +0 -1
  216. package/dist/components/presentation/auth/OrganizationUnitPicker/OrganizationUnitPicker.d.ts +0 -30
  217. package/dist/components/presentation/auth/OrganizationUnitPicker/OrganizationUnitPicker.d.ts.map +0 -1
  218. package/dist/components/presentation/auth/OrganizationUnitPicker/OrganizationUnitPicker.js +0 -179
  219. package/dist/components/presentation/auth/OrganizationUnitPicker/OrganizationUnitPicker.js.map +0 -1
  220. package/dist/components/presentation/auth/OrganizationUnitPicker/OrganizationUnitPicker.styles.d.ts +0 -21
  221. package/dist/components/presentation/auth/OrganizationUnitPicker/OrganizationUnitPicker.styles.d.ts.map +0 -1
  222. package/dist/components/presentation/auth/OrganizationUnitPicker/OrganizationUnitPicker.styles.js +0 -125
  223. package/dist/components/presentation/auth/OrganizationUnitPicker/OrganizationUnitPicker.styles.js.map +0 -1
  224. package/dist/components/presentation/auth/OrganizationUnitPicker/index.d.ts +0 -20
  225. package/dist/components/presentation/auth/OrganizationUnitPicker/index.d.ts.map +0 -1
  226. package/dist/components/primitives/Icons/Building.js +0 -73
  227. package/dist/components/primitives/Icons/Building.js.map +0 -1
  228. package/dist/contexts/Branding/BrandingContext.d.ts +0 -53
  229. package/dist/contexts/Branding/BrandingContext.d.ts.map +0 -1
  230. package/dist/contexts/Branding/BrandingContext.js +0 -10
  231. package/dist/contexts/Branding/BrandingContext.js.map +0 -1
  232. package/dist/contexts/Branding/BrandingProvider.d.ts +0 -89
  233. package/dist/contexts/Branding/BrandingProvider.d.ts.map +0 -1
  234. package/dist/contexts/Branding/BrandingProvider.js +0 -92
  235. package/dist/contexts/Branding/BrandingProvider.js.map +0 -1
  236. package/dist/contexts/Branding/useBrandingContext.d.ts +0 -45
  237. package/dist/contexts/Branding/useBrandingContext.d.ts.map +0 -1
  238. package/dist/contexts/Branding/useBrandingContext.js +0 -38
  239. package/dist/contexts/Branding/useBrandingContext.js.map +0 -1
  240. package/dist/contexts/Organization/OrganizationContext.d.ts +0 -41
  241. package/dist/contexts/Organization/OrganizationContext.d.ts.map +0 -1
  242. package/dist/contexts/Organization/OrganizationContext.js +0 -25
  243. package/dist/contexts/Organization/OrganizationContext.js.map +0 -1
  244. package/dist/contexts/Organization/OrganizationProvider.d.ts +0 -94
  245. package/dist/contexts/Organization/OrganizationProvider.d.ts.map +0 -1
  246. package/dist/contexts/Organization/OrganizationProvider.js +0 -93
  247. package/dist/contexts/Organization/OrganizationProvider.js.map +0 -1
  248. package/dist/contexts/Organization/useOrganization.d.ts +0 -105
  249. package/dist/contexts/Organization/useOrganization.d.ts.map +0 -1
  250. package/dist/contexts/Organization/useOrganization.js +0 -98
  251. package/dist/contexts/Organization/useOrganization.js.map +0 -1
  252. package/dist/hooks/useBranding.d.ts +0 -128
  253. package/dist/hooks/useBranding.d.ts.map +0 -1
  254. package/dist/hooks/useBranding.js +0 -69
  255. package/dist/hooks/useBranding.js.map +0 -1
@@ -1,237 +0,0 @@
1
- const require_rolldown_runtime = require('../../../_virtual/rolldown_runtime.cjs');
2
- let react = require("react");
3
- react = require_rolldown_runtime.__toESM(react);
4
- let __emotion_css = require("@emotion/css");
5
- __emotion_css = require_rolldown_runtime.__toESM(__emotion_css);
6
-
7
- //#region src/components/presentation/OrganizationSwitcher/BaseOrganizationSwitcher.styles.ts
8
- /**
9
- * Creates styles for the BaseOrganizationSwitcher component using BEM methodology
10
- * @param theme - The theme object containing design tokens
11
- * @param colorScheme - The current color scheme (used for memoization)
12
- * @returns Object containing CSS class names for component styling
13
- */
14
- const useStyles = (theme, colorScheme) => (0, react.useMemo)(() => {
15
- const root = __emotion_css.css`
16
- display: inline-block;
17
- position: relative;
18
- font-family: ${theme.vars.typography.fontFamily};
19
- `;
20
- const trigger = __emotion_css.css`
21
- display: inline-flex;
22
- align-items: center;
23
- gap: ${theme.vars.spacing.unit};
24
- padding: calc(${theme.vars.spacing.unit} * 0.75) ${theme.vars.spacing.unit};
25
- border: 1px solid ${theme.vars.colors.border};
26
- background: ${theme.vars.colors.background.surface};
27
- cursor: pointer;
28
- border-radius: ${theme.vars.borderRadius.medium};
29
- min-width: 160px;
30
-
31
- > span {
32
- width: 100%;
33
- gap: ${theme.vars.spacing.unit};
34
- }
35
-
36
- &:hover {
37
- background-color: ${theme.vars.colors.background.surface};
38
- }
39
- `;
40
- const triggerLabel = __emotion_css.css`
41
- color: ${theme.vars.colors.text.primary};
42
- font-weight: 500;
43
- overflow: hidden;
44
- text-overflow: ellipsis;
45
- white-space: nowrap;
46
- flex: 1;
47
- `;
48
- const content = __emotion_css.css`
49
- min-width: 280px;
50
- max-width: 400px;
51
- background-color: ${theme.vars.colors.background.surface};
52
- border-radius: ${theme.vars.borderRadius.medium};
53
- box-shadow: ${theme.vars.shadows.medium};
54
- border: 1px solid ${theme.vars.colors.border};
55
- outline: none;
56
- z-index: 1000;
57
- `;
58
- const header = __emotion_css.css`
59
- display: flex;
60
- align-items: center;
61
- gap: ${theme.vars.spacing.unit};
62
- padding: ${theme.vars.spacing.unit} calc(${theme.vars.spacing.unit} * 2);
63
- `;
64
- const headerInfo = __emotion_css.css`
65
- display: flex;
66
- flex-direction: column;
67
- gap: calc(${theme.vars.spacing.unit} / 4);
68
- flex: 1;
69
- min-width: 0;
70
- overflow: hidden;
71
- `;
72
- const headerName = __emotion_css.css`
73
- color: ${theme.vars.colors.text.primary};
74
- font-size: 0.875rem;
75
- font-weight: 500;
76
- margin: 0;
77
- overflow: hidden;
78
- text-overflow: ellipsis;
79
- white-space: nowrap;
80
- `;
81
- const headerMeta = __emotion_css.css`
82
- color: ${theme.vars.colors.text.secondary};
83
- font-size: 0.75rem;
84
- margin: 0;
85
- overflow: hidden;
86
- text-overflow: ellipsis;
87
- white-space: nowrap;
88
- `;
89
- const headerRole = __emotion_css.css`
90
- color: ${theme.vars.colors.text.secondary};
91
- font-size: 0.75rem;
92
- margin: 0;
93
- overflow: hidden;
94
- text-overflow: ellipsis;
95
- white-space: nowrap;
96
- text-transform: capitalize;
97
- `;
98
- const manageButton = __emotion_css.css`
99
- min-width: auto;
100
- margin-inline-start: auto;
101
- `;
102
- const menu = __emotion_css.css`
103
- display: flex;
104
- flex-direction: column;
105
- width: 100%;
106
- `;
107
- const menuItem = __emotion_css.css`
108
- display: flex;
109
- align-items: center;
110
- justify-content: flex-start;
111
- gap: ${theme.vars.spacing.unit};
112
- padding: calc(${theme.vars.spacing.unit} * 1.5) calc(${theme.vars.spacing.unit} * 2);
113
- width: 100%;
114
- color: ${theme.vars.colors.text.primary};
115
- text-decoration: none;
116
- border: none;
117
- background-color: transparent;
118
- cursor: pointer;
119
- font-size: 0.875rem;
120
- text-align: start;
121
- border-radius: ${theme.vars.borderRadius.medium};
122
- transition: background-color 0.15s ease-in-out;
123
-
124
- > span {
125
- gap: ${theme.vars.spacing.unit};
126
- }
127
-
128
- &:hover {
129
- background-color: ${theme.vars.colors.action?.hover || "rgba(0, 0, 0, 0.04)"};
130
- }
131
- `;
132
- const menuDivider = __emotion_css.css`
133
- margin: calc(${theme.vars.spacing.unit} * 0.5) 0;
134
- border-bottom: 1px solid ${theme.vars.colors.border};
135
- `;
136
- const organizationInfo = __emotion_css.css`
137
- display: flex;
138
- flex-direction: column;
139
- gap: calc(${theme.vars.spacing.unit} / 4);
140
- flex: 1;
141
- min-width: 0;
142
- overflow: hidden;
143
- `;
144
- const organizationName = __emotion_css.css`
145
- color: ${theme.vars.colors.text.primary};
146
- font-size: 0.875rem;
147
- font-weight: 500;
148
- margin: 0;
149
- overflow: hidden;
150
- text-overflow: ellipsis;
151
- white-space: nowrap;
152
- `;
153
- const organizationMeta = __emotion_css.css`
154
- color: ${theme.vars.colors.text.secondary};
155
- font-size: 0.75rem;
156
- margin: 0;
157
- overflow: hidden;
158
- text-overflow: ellipsis;
159
- white-space: nowrap;
160
- `;
161
- const loadingContainer = __emotion_css.css`
162
- display: flex;
163
- align-items: center;
164
- justify-content: center;
165
- min-height: 80px;
166
- gap: ${theme.vars.spacing.unit};
167
- `;
168
- const loadingText = __emotion_css.css`
169
- color: ${theme.vars.colors.text.secondary};
170
- font-size: 0.875rem;
171
- `;
172
- const errorContainer = __emotion_css.css`
173
- display: flex;
174
- align-items: center;
175
- justify-content: center;
176
- min-height: 80px;
177
- padding: calc(${theme.vars.spacing.unit} * 2);
178
- `;
179
- const errorText = __emotion_css.css`
180
- color: ${theme.vars.colors.text.secondary};
181
- font-size: 0.875rem;
182
- text-align: center;
183
- `;
184
- const sectionHeader = __emotion_css.css`
185
- text-transform: uppercase;
186
- letter-spacing: 0.05em;
187
- color: ${theme.vars.colors.text.secondary};
188
- `;
189
- const sectionHeaderContainer = __emotion_css.css`
190
- border-top: none;
191
- border-bottom: none;
192
- padding-bottom: calc(${theme.vars.spacing.unit} / 2);
193
- `;
194
- return {
195
- content,
196
- errorContainer,
197
- errorText,
198
- header,
199
- headerInfo,
200
- headerMeta,
201
- headerName,
202
- headerRole,
203
- loadingContainer,
204
- loadingText,
205
- manageButton,
206
- menu,
207
- menuDivider,
208
- menuItem,
209
- organizationInfo,
210
- organizationMeta,
211
- organizationName,
212
- roleCapitalized: __emotion_css.css`
213
- text-transform: capitalize;
214
- `,
215
- root,
216
- sectionHeader,
217
- sectionHeaderContainer,
218
- trigger,
219
- triggerLabel
220
- };
221
- }, [
222
- theme.vars.colors.background.surface,
223
- theme.vars.colors.text.primary,
224
- theme.vars.colors.text.secondary,
225
- theme.vars.colors.border,
226
- theme.vars.borderRadius.medium,
227
- theme.vars.shadows.medium,
228
- theme.vars.spacing.unit,
229
- theme.vars.colors.action?.hover,
230
- theme.vars.typography.fontFamily,
231
- colorScheme
232
- ]);
233
- var BaseOrganizationSwitcher_styles_default = useStyles;
234
-
235
- //#endregion
236
- exports.default = BaseOrganizationSwitcher_styles_default;
237
- //# sourceMappingURL=BaseOrganizationSwitcher.styles.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BaseOrganizationSwitcher.styles.cjs","names":["root: string","trigger: string","triggerLabel: string","content: string","header: string","headerInfo: string","headerName: string","headerMeta: string","headerRole: string","manageButton: string","menu: string","menuItem: string","menuDivider: string","organizationInfo: string","organizationName: string","organizationMeta: string","loadingContainer: string","loadingText: string","errorContainer: string","errorText: string","sectionHeader: string","sectionHeaderContainer: string"],"sources":["../../../../../src/components/presentation/OrganizationSwitcher/BaseOrganizationSwitcher.styles.ts"],"sourcesContent":["/**\n * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com).\n *\n * WSO2 LLC. licenses this file to you under the Apache License,\n * Version 2.0 (the \"License\"); you may not use this file except\n * in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport {css} from '@emotion/css';\nimport {Theme} from '@thunderid/browser';\nimport {useMemo} from 'react';\n\n/**\n * Creates styles for the BaseOrganizationSwitcher component using BEM methodology\n * @param theme - The theme object containing design tokens\n * @param colorScheme - The current color scheme (used for memoization)\n * @returns Object containing CSS class names for component styling\n */\n\nconst useStyles = (theme: Theme, colorScheme: string): Record<string, string> =>\n useMemo(() => {\n const root: string = css`\n display: inline-block;\n position: relative;\n font-family: ${theme.vars.typography.fontFamily};\n `;\n\n const trigger: string = css`\n display: inline-flex;\n align-items: center;\n gap: ${theme.vars.spacing.unit};\n padding: calc(${theme.vars.spacing.unit} * 0.75) ${theme.vars.spacing.unit};\n border: 1px solid ${theme.vars.colors.border};\n background: ${theme.vars.colors.background.surface};\n cursor: pointer;\n border-radius: ${theme.vars.borderRadius.medium};\n min-width: 160px;\n\n > span {\n width: 100%;\n gap: ${theme.vars.spacing.unit};\n }\n\n &:hover {\n background-color: ${theme.vars.colors.background.surface};\n }\n `;\n\n const triggerLabel: string = css`\n color: ${theme.vars.colors.text.primary};\n font-weight: 500;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex: 1;\n `;\n\n const content: string = css`\n min-width: 280px;\n max-width: 400px;\n background-color: ${theme.vars.colors.background.surface};\n border-radius: ${theme.vars.borderRadius.medium};\n box-shadow: ${theme.vars.shadows.medium};\n border: 1px solid ${theme.vars.colors.border};\n outline: none;\n z-index: 1000;\n `;\n\n const header: string = css`\n display: flex;\n align-items: center;\n gap: ${theme.vars.spacing.unit};\n padding: ${theme.vars.spacing.unit} calc(${theme.vars.spacing.unit} * 2);\n `;\n\n const headerInfo: string = css`\n display: flex;\n flex-direction: column;\n gap: calc(${theme.vars.spacing.unit} / 4);\n flex: 1;\n min-width: 0;\n overflow: hidden;\n `;\n\n const headerName: string = css`\n color: ${theme.vars.colors.text.primary};\n font-size: 0.875rem;\n font-weight: 500;\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `;\n\n const headerMeta: string = css`\n color: ${theme.vars.colors.text.secondary};\n font-size: 0.75rem;\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `;\n\n const headerRole: string = css`\n color: ${theme.vars.colors.text.secondary};\n font-size: 0.75rem;\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n text-transform: capitalize;\n `;\n\n const manageButton: string = css`\n min-width: auto;\n margin-inline-start: auto;\n `;\n\n const menu: string = css`\n display: flex;\n flex-direction: column;\n width: 100%;\n `;\n\n const menuItem: string = css`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: ${theme.vars.spacing.unit};\n padding: calc(${theme.vars.spacing.unit} * 1.5) calc(${theme.vars.spacing.unit} * 2);\n width: 100%;\n color: ${theme.vars.colors.text.primary};\n text-decoration: none;\n border: none;\n background-color: transparent;\n cursor: pointer;\n font-size: 0.875rem;\n text-align: start;\n border-radius: ${theme.vars.borderRadius.medium};\n transition: background-color 0.15s ease-in-out;\n\n > span {\n gap: ${theme.vars.spacing.unit};\n }\n\n &:hover {\n background-color: ${theme.vars.colors.action?.hover || 'rgba(0, 0, 0, 0.04)'};\n }\n `;\n\n const menuDivider: string = css`\n margin: calc(${theme.vars.spacing.unit} * 0.5) 0;\n border-bottom: 1px solid ${theme.vars.colors.border};\n `;\n\n const organizationInfo: string = css`\n display: flex;\n flex-direction: column;\n gap: calc(${theme.vars.spacing.unit} / 4);\n flex: 1;\n min-width: 0;\n overflow: hidden;\n `;\n\n const organizationName: string = css`\n color: ${theme.vars.colors.text.primary};\n font-size: 0.875rem;\n font-weight: 500;\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `;\n\n const organizationMeta: string = css`\n color: ${theme.vars.colors.text.secondary};\n font-size: 0.75rem;\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `;\n\n const loadingContainer: string = css`\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 80px;\n gap: ${theme.vars.spacing.unit};\n `;\n\n const loadingText: string = css`\n color: ${theme.vars.colors.text.secondary};\n font-size: 0.875rem;\n `;\n\n const errorContainer: string = css`\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 80px;\n padding: calc(${theme.vars.spacing.unit} * 2);\n `;\n\n const errorText: string = css`\n color: ${theme.vars.colors.text.secondary};\n font-size: 0.875rem;\n text-align: center;\n `;\n\n const sectionHeader: string = css`\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: ${theme.vars.colors.text.secondary};\n `;\n\n const sectionHeaderContainer: string = css`\n border-top: none;\n border-bottom: none;\n padding-bottom: calc(${theme.vars.spacing.unit} / 2);\n `;\n\n const roleCapitalized: string = css`\n text-transform: capitalize;\n `;\n\n return {\n content,\n errorContainer,\n errorText,\n header,\n headerInfo,\n headerMeta,\n headerName,\n headerRole,\n loadingContainer,\n loadingText,\n manageButton,\n menu,\n menuDivider,\n menuItem,\n organizationInfo,\n organizationMeta,\n organizationName,\n roleCapitalized,\n root,\n sectionHeader,\n sectionHeaderContainer,\n trigger,\n triggerLabel,\n };\n }, [\n theme.vars.colors.background.surface,\n theme.vars.colors.text.primary,\n theme.vars.colors.text.secondary,\n theme.vars.colors.border,\n theme.vars.borderRadius.medium,\n theme.vars.shadows.medium,\n theme.vars.spacing.unit,\n theme.vars.colors.action?.hover,\n theme.vars.typography.fontFamily,\n colorScheme,\n ]);\n\nexport default useStyles;\n"],"mappings":"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"}
@@ -1,127 +0,0 @@
1
- const require_rolldown_runtime = require('../../../_virtual/rolldown_runtime.cjs');
2
- const require_useThunderID = require('../../../contexts/ThunderID/useThunderID.cjs');
3
- const require_useOrganization = require('../../../contexts/Organization/useOrganization.cjs');
4
- const require_useTranslation = require('../../../hooks/useTranslation.cjs');
5
- const require_BaseOrganizationSwitcher = require('./BaseOrganizationSwitcher.cjs');
6
- const require_BuildingAlt = require('../../primitives/Icons/BuildingAlt.cjs');
7
- const require_CreateOrganization = require('../CreateOrganization/CreateOrganization.cjs');
8
- const require_OrganizationList = require('../OrganizationList/OrganizationList.cjs');
9
- const require_OrganizationProfile = require('../OrganizationProfile/OrganizationProfile.cjs');
10
- let react = require("react");
11
- react = require_rolldown_runtime.__toESM(react);
12
- let react_jsx_runtime = require("react/jsx-runtime");
13
- react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
14
-
15
- //#region src/components/presentation/OrganizationSwitcher/OrganizationSwitcher.tsx
16
- /**
17
- * OrganizationSwitcher component that provides organization switching functionality.
18
- * This component automatically retrieves organizations from the OrganizationContext.
19
- * You can also override the organizations, currentOrganization, and onOrganizationSwitch
20
- * by passing them as props.
21
- *
22
- * @example
23
- * ```tsx
24
- * import { OrganizationSwitcher } from '@thunderid/react';
25
- *
26
- * // Basic usage - uses OrganizationContext
27
- * <OrganizationSwitcher />
28
- *
29
- * // With custom organization switch handler
30
- * <OrganizationSwitcher
31
- * onOrganizationSwitch={(org) => {
32
- * console.log('Switching to:', org.name);
33
- * // Custom logic here
34
- * }}
35
- * />
36
- *
37
- * // With fallback for unauthenticated users
38
- * <OrganizationSwitcher
39
- * fallback={<div>Please sign in to view organizations</div>}
40
- * />
41
- * ```
42
- */
43
- const OrganizationSwitcher = ({ currentOrganization: propCurrentOrganization, fallback = null, onOrganizationSwitch: propOnOrganizationSwitch, organizations: propOrganizations, preferences,...props }) => {
44
- const { isSignedIn } = require_useThunderID.default();
45
- const { currentOrganization: contextCurrentOrganization, myOrganizations: contextOrganizations, switchOrganization, isLoading, error } = require_useOrganization.default();
46
- const [isCreateOrgOpen, setIsCreateOrgOpen] = (0, react.useState)(false);
47
- const [isProfileOpen, setIsProfileOpen] = (0, react.useState)(false);
48
- const [isOrganizationListOpen, setIsOrganizationListOpen] = (0, react.useState)(false);
49
- const { t } = require_useTranslation.default(preferences?.i18n);
50
- if (!isSignedIn && fallback) return fallback;
51
- if (!isSignedIn) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, {});
52
- const organizations = propOrganizations || contextOrganizations || [];
53
- const currentOrganization = propCurrentOrganization || contextCurrentOrganization || void 0;
54
- const onOrganizationSwitch = propOnOrganizationSwitch || switchOrganization;
55
- const handleManageOrganizations = () => {
56
- setIsOrganizationListOpen(true);
57
- };
58
- const handleManageOrganization = () => {
59
- setIsProfileOpen(true);
60
- };
61
- const defaultMenuItems = [];
62
- if (currentOrganization) defaultMenuItems.push({
63
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_BuildingAlt.default, {}),
64
- label: t("organization.switcher.manage.organizations"),
65
- onClick: handleManageOrganizations
66
- });
67
- defaultMenuItems.push({
68
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
69
- width: "16",
70
- height: "16",
71
- viewBox: "0 0 24 24",
72
- fill: "none",
73
- stroke: "currentColor",
74
- strokeWidth: "2",
75
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M12 5v14m-7-7h14" })
76
- }),
77
- label: t("organization.switcher.create.organization"),
78
- onClick: () => setIsCreateOrgOpen(true)
79
- });
80
- const menuItems = props.menuItems ? [...defaultMenuItems, ...props.menuItems] : defaultMenuItems;
81
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
82
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_BaseOrganizationSwitcher.BaseOrganizationSwitcher, {
83
- organizations,
84
- currentOrganization,
85
- onOrganizationSwitch,
86
- loading: isLoading,
87
- error: error ?? void 0,
88
- menuItems,
89
- onManageProfile: handleManageOrganization,
90
- preferences,
91
- ...props
92
- }),
93
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_CreateOrganization.CreateOrganization, {
94
- mode: "popup",
95
- open: isCreateOrgOpen,
96
- onOpenChange: setIsCreateOrgOpen,
97
- onSuccess: (org) => {
98
- if (org && onOrganizationSwitch) onOrganizationSwitch(org);
99
- setIsCreateOrgOpen(false);
100
- }
101
- }),
102
- currentOrganization && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_OrganizationProfile.default, {
103
- organizationId: currentOrganization.id,
104
- mode: "popup",
105
- open: isProfileOpen,
106
- onOpenChange: setIsProfileOpen,
107
- cardLayout: true,
108
- loadingFallback: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { children: t("organization.profile.loading") }),
109
- errorFallback: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { children: t("organization.profile.error") })
110
- }),
111
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_OrganizationList.default, {
112
- mode: "popup",
113
- open: isOrganizationListOpen,
114
- onOpenChange: setIsOrganizationListOpen,
115
- title: t("organization.switcher.manage.organizations"),
116
- onOrganizationSelect: (organization) => {
117
- if (onOrganizationSwitch) onOrganizationSwitch(organization);
118
- setIsOrganizationListOpen(false);
119
- }
120
- })
121
- ] });
122
- };
123
- var OrganizationSwitcher_default = OrganizationSwitcher;
124
-
125
- //#endregion
126
- exports.default = OrganizationSwitcher_default;
127
- //# sourceMappingURL=OrganizationSwitcher.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OrganizationSwitcher.cjs","names":["OrganizationSwitcher: FC<OrganizationSwitcherProps>","useThunderID","useOrganization","useTranslation","organizations: Organization[]","currentOrganization: Organization | undefined","onOrganizationSwitch: (organization: Organization) => Promise<void> | void","defaultMenuItems: {icon?: ReactElement; label: string; onClick: () => void}[]","BuildingAlt","menuItems: any[]","BaseOrganizationSwitcherComponent","CreateOrganization","OrganizationProfile","OrganizationListComponent"],"sources":["../../../../../src/components/presentation/OrganizationSwitcher/OrganizationSwitcher.tsx"],"sourcesContent":["/**\n * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com).\n *\n * WSO2 LLC. licenses this file to you under the Apache License,\n * Version 2.0 (the \"License\"); you may not use this file except\n * in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport {FC, ReactElement, useState} from 'react';\n\nimport {\n BaseOrganizationSwitcher as BaseOrganizationSwitcherComponent,\n BaseOrganizationSwitcherProps,\n Organization,\n} from './BaseOrganizationSwitcher';\nimport useOrganization from '../../../contexts/Organization/useOrganization';\nimport useThunderID from '../../../contexts/ThunderID/useThunderID';\nimport useTranslation from '../../../hooks/useTranslation';\nimport BuildingAlt from '../../primitives/Icons/BuildingAlt';\nimport {CreateOrganization} from '../CreateOrganization/CreateOrganization';\nimport OrganizationListComponent from '../OrganizationList/OrganizationList';\nimport OrganizationProfile from '../OrganizationProfile/OrganizationProfile';\n\n/**\n * Props interface for the OrganizationSwitcher component.\n * Makes organizations optional since they'll be retrieved from OrganizationContext.\n */\nexport interface OrganizationSwitcherProps\n extends Omit<BaseOrganizationSwitcherProps, 'organizations' | 'currentOrganization' | 'onOrganizationSwitch'> {\n /**\n * Optional override for current organization (will use context if not provided)\n */\n currentOrganization?: Organization;\n /**\n * Fallback element to render when the user is not signed in.\n */\n fallback?: ReactElement | null;\n /**\n * Optional callback for organization switch (will use context if not provided)\n */\n onOrganizationSwitch?: (organization: Organization) => Promise<void> | void;\n /**\n * Optional override for organizations list (will use context if not provided)\n */\n organizations?: Organization[];\n}\n\n/**\n * OrganizationSwitcher component that provides organization switching functionality.\n * This component automatically retrieves organizations from the OrganizationContext.\n * You can also override the organizations, currentOrganization, and onOrganizationSwitch\n * by passing them as props.\n *\n * @example\n * ```tsx\n * import { OrganizationSwitcher } from '@thunderid/react';\n *\n * // Basic usage - uses OrganizationContext\n * <OrganizationSwitcher />\n *\n * // With custom organization switch handler\n * <OrganizationSwitcher\n * onOrganizationSwitch={(org) => {\n * console.log('Switching to:', org.name);\n * // Custom logic here\n * }}\n * />\n *\n * // With fallback for unauthenticated users\n * <OrganizationSwitcher\n * fallback={<div>Please sign in to view organizations</div>}\n * />\n * ```\n */\nexport const OrganizationSwitcher: FC<OrganizationSwitcherProps> = ({\n currentOrganization: propCurrentOrganization,\n fallback = null,\n onOrganizationSwitch: propOnOrganizationSwitch,\n organizations: propOrganizations,\n preferences,\n ...props\n}: OrganizationSwitcherProps): ReactElement | null => {\n const {isSignedIn} = useThunderID();\n const {\n currentOrganization: contextCurrentOrganization,\n myOrganizations: contextOrganizations,\n switchOrganization,\n isLoading,\n error,\n } = useOrganization();\n const [isCreateOrgOpen, setIsCreateOrgOpen] = useState(false);\n const [isProfileOpen, setIsProfileOpen] = useState(false);\n const [isOrganizationListOpen, setIsOrganizationListOpen] = useState(false);\n const {t} = useTranslation(preferences?.i18n);\n\n if (!isSignedIn && fallback) {\n return fallback;\n }\n\n if (!isSignedIn) {\n return <></>;\n }\n\n const organizations: Organization[] = propOrganizations || contextOrganizations || [];\n const currentOrganization: Organization | undefined =\n propCurrentOrganization || contextCurrentOrganization || undefined;\n const onOrganizationSwitch: (organization: Organization) => Promise<void> | void =\n propOnOrganizationSwitch || switchOrganization;\n\n const handleManageOrganizations = (): void => {\n setIsOrganizationListOpen(true);\n };\n\n const handleManageOrganization = (): void => {\n setIsProfileOpen(true);\n };\n\n const defaultMenuItems: {icon?: ReactElement; label: string; onClick: () => void}[] = [];\n\n if (currentOrganization) {\n defaultMenuItems.push({\n icon: <BuildingAlt />,\n label: t('organization.switcher.manage.organizations'),\n onClick: handleManageOrganizations,\n });\n }\n\n defaultMenuItems.push({\n icon: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M12 5v14m-7-7h14\" />\n </svg>\n ),\n label: t('organization.switcher.create.organization'),\n onClick: (): void => setIsCreateOrgOpen(true),\n });\n\n const menuItems: any[] = props.menuItems ? [...defaultMenuItems, ...props.menuItems] : defaultMenuItems;\n\n return (\n <>\n <BaseOrganizationSwitcherComponent\n organizations={organizations}\n currentOrganization={currentOrganization}\n onOrganizationSwitch={onOrganizationSwitch}\n loading={isLoading}\n error={error ?? undefined}\n menuItems={menuItems}\n onManageProfile={handleManageOrganization}\n preferences={preferences}\n {...props}\n />\n <CreateOrganization\n mode=\"popup\"\n open={isCreateOrgOpen}\n onOpenChange={setIsCreateOrgOpen}\n onSuccess={(org: Organization): void => {\n if (org && onOrganizationSwitch) {\n onOrganizationSwitch(org);\n }\n setIsCreateOrgOpen(false);\n }}\n />\n {currentOrganization && (\n <OrganizationProfile\n organizationId={currentOrganization.id}\n mode=\"popup\"\n open={isProfileOpen}\n onOpenChange={setIsProfileOpen}\n cardLayout={true}\n loadingFallback={<div>{t('organization.profile.loading')}</div>}\n errorFallback={<div>{t('organization.profile.error')}</div>}\n />\n )}\n <OrganizationListComponent\n mode=\"popup\"\n open={isOrganizationListOpen}\n onOpenChange={setIsOrganizationListOpen}\n title={t('organization.switcher.manage.organizations')}\n onOrganizationSelect={(organization: Organization): void => {\n if (onOrganizationSwitch) {\n onOrganizationSwitch(organization);\n }\n setIsOrganizationListOpen(false);\n }}\n />\n </>\n );\n};\n\nexport default OrganizationSwitcher;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoFA,MAAaA,wBAAuD,EAClE,qBAAqB,yBACrB,WAAW,MACX,sBAAsB,0BACtB,eAAe,mBACf,YACA,GAAG,YACiD;CACpD,MAAM,EAAC,eAAcC,8BAAc;CACnC,MAAM,EACJ,qBAAqB,4BACrB,iBAAiB,sBACjB,oBACA,WACA,UACEC,iCAAiB;CACrB,MAAM,CAAC,iBAAiB,0CAA+B,MAAM;CAC7D,MAAM,CAAC,eAAe,wCAA6B,MAAM;CACzD,MAAM,CAAC,wBAAwB,iDAAsC,MAAM;CAC3E,MAAM,EAAC,MAAKC,+BAAe,aAAa,KAAK;AAE7C,KAAI,CAAC,cAAc,SACjB,QAAO;AAGT,KAAI,CAAC,WACH,QAAO,0EAAK;CAGd,MAAMC,gBAAgC,qBAAqB,wBAAwB,EAAE;CACrF,MAAMC,sBACJ,2BAA2B,8BAA8B;CAC3D,MAAMC,uBACJ,4BAA4B;CAE9B,MAAM,kCAAwC;AAC5C,4BAA0B,KAAK;;CAGjC,MAAM,iCAAuC;AAC3C,mBAAiB,KAAK;;CAGxB,MAAMC,mBAAgF,EAAE;AAExF,KAAI,oBACF,kBAAiB,KAAK;EACpB,MAAM,2CAACC,gCAAc;EACrB,OAAO,EAAE,6CAA6C;EACtD,SAAS;EACV,CAAC;AAGJ,kBAAiB,KAAK;EACpB,MACE,2CAAC;GAAI,OAAM;GAAK,QAAO;GAAK,SAAQ;GAAY,MAAK;GAAO,QAAO;GAAe,aAAY;aAC5F,2CAAC,UAAK,GAAE,qBAAqB;IACzB;EAER,OAAO,EAAE,4CAA4C;EACrD,eAAqB,mBAAmB,KAAK;EAC9C,CAAC;CAEF,MAAMC,YAAmB,MAAM,YAAY,CAAC,GAAG,kBAAkB,GAAG,MAAM,UAAU,GAAG;AAEvF,QACE;EACE,2CAACC;GACgB;GACM;GACC;GACtB,SAAS;GACT,OAAO,SAAS;GACL;GACX,iBAAiB;GACJ;GACb,GAAI;IACJ;EACF,2CAACC;GACC,MAAK;GACL,MAAM;GACN,cAAc;GACd,YAAY,QAA4B;AACtC,QAAI,OAAO,qBACT,sBAAqB,IAAI;AAE3B,uBAAmB,MAAM;;IAE3B;EACD,uBACC,2CAACC;GACC,gBAAgB,oBAAoB;GACpC,MAAK;GACL,MAAM;GACN,cAAc;GACd,YAAY;GACZ,iBAAiB,2CAAC,mBAAK,EAAE,+BAA+B,GAAO;GAC/D,eAAe,2CAAC,mBAAK,EAAE,6BAA6B,GAAO;IAC3D;EAEJ,2CAACC;GACC,MAAK;GACL,MAAM;GACN,cAAc;GACd,OAAO,EAAE,6CAA6C;GACtD,uBAAuB,iBAAqC;AAC1D,QAAI,qBACF,sBAAqB,aAAa;AAEpC,8BAA0B,MAAM;;IAElC;KACD;;AAIP,mCAAe"}
@@ -1,183 +0,0 @@
1
- const require_rolldown_runtime = require('../../../../_virtual/rolldown_runtime.cjs');
2
- const require_useTheme = require('../../../../contexts/Theme/useTheme.cjs');
3
- const require_OrganizationUnitPicker_styles = require('./OrganizationUnitPicker.styles.cjs');
4
- let react = require("react");
5
- react = require_rolldown_runtime.__toESM(react);
6
- let react_jsx_runtime = require("react/jsx-runtime");
7
- react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
8
- let __emotion_css = require("@emotion/css");
9
- __emotion_css = require_rolldown_runtime.__toESM(__emotion_css);
10
-
11
- //#region src/components/presentation/auth/OrganizationUnitPicker/OrganizationUnitPicker.tsx
12
- const OrganizationUnitPicker = ({ rootOuId, selectedOuId, onSelect, fetchChildren, pageSize = 10, className }) => {
13
- const { theme } = require_useTheme.default();
14
- const styles = require_OrganizationUnitPicker_styles.default(theme);
15
- const [nodeStates, setNodeStates] = (0, react.useState)({});
16
- const loadChildren = (0, react.useCallback)(async (parentId, offset = 0) => {
17
- setNodeStates((prev) => ({
18
- ...prev,
19
- [parentId]: {
20
- ...prev[parentId] || {
21
- children: [],
22
- expanded: true,
23
- hasMore: false,
24
- offset: 0,
25
- totalResults: 0
26
- },
27
- loading: true
28
- }
29
- }));
30
- try {
31
- const response = await fetchChildren(parentId, pageSize, offset);
32
- const newChildren = response.organizationUnits || [];
33
- setNodeStates((prev) => {
34
- const existing = prev[parentId] || {
35
- children: [],
36
- expanded: true,
37
- hasMore: false,
38
- loading: false,
39
- offset: 0,
40
- totalResults: 0
41
- };
42
- const mergedChildren = offset === 0 ? newChildren : [...existing.children, ...newChildren];
43
- const newOffset = offset + newChildren.length;
44
- return {
45
- ...prev,
46
- [parentId]: {
47
- children: mergedChildren,
48
- expanded: true,
49
- hasMore: newOffset < response.totalResults,
50
- loading: false,
51
- offset: newOffset,
52
- totalResults: response.totalResults
53
- }
54
- };
55
- });
56
- } catch {
57
- setNodeStates((prev) => ({
58
- ...prev,
59
- [parentId]: {
60
- ...prev[parentId] || {
61
- children: [],
62
- expanded: true,
63
- hasMore: false,
64
- offset: 0,
65
- totalResults: 0
66
- },
67
- loading: false
68
- }
69
- }));
70
- }
71
- }, [fetchChildren, pageSize]);
72
- (0, react.useEffect)(() => {
73
- if (rootOuId && !nodeStates[rootOuId]) loadChildren(rootOuId);
74
- }, [
75
- rootOuId,
76
- loadChildren,
77
- nodeStates
78
- ]);
79
- const handleToggle = (0, react.useCallback)((ouId) => {
80
- const state = nodeStates[ouId];
81
- if (state?.expanded) setNodeStates((prev) => ({
82
- ...prev,
83
- [ouId]: {
84
- ...prev[ouId],
85
- expanded: false
86
- }
87
- }));
88
- else if (state?.children.length) setNodeStates((prev) => ({
89
- ...prev,
90
- [ouId]: {
91
- ...prev[ouId],
92
- expanded: true
93
- }
94
- }));
95
- else loadChildren(ouId);
96
- }, [nodeStates, loadChildren]);
97
- const handleLoadMore = (0, react.useCallback)((parentId) => {
98
- const state = nodeStates[parentId];
99
- if (state) loadChildren(parentId, state.offset);
100
- }, [nodeStates, loadChildren]);
101
- const renderLoadingPlaceholders = (depth) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: [
102
- 0,
103
- 1,
104
- 2
105
- ].map((i) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
106
- className: styles["loadingPlaceholder"],
107
- style: { paddingLeft: `${(depth + 1) * 20}px` },
108
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
109
- className: styles["skeleton"],
110
- style: { width: `${100 - i * 20}px` }
111
- })
112
- }, `skeleton-${i}`)) });
113
- const renderNode = (ou, depth = 0) => {
114
- const state = nodeStates[ou.id];
115
- const isSelected = selectedOuId === ou.id;
116
- const isExpanded = state?.expanded || false;
117
- const isLoading = state?.loading || false;
118
- const hasChildren = !state || state.totalResults > 0 || state.children.length > 0;
119
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react.default.Fragment, { children: [
120
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
121
- className: (0, __emotion_css.cx)(styles["node"], isSelected && styles["nodeSelected"]),
122
- style: { paddingLeft: `${depth * 20 + 12}px` },
123
- role: "treeitem",
124
- "aria-selected": isSelected,
125
- "aria-expanded": hasChildren ? isExpanded : void 0,
126
- onClick: () => onSelect(ou.id),
127
- onKeyDown: (e) => {
128
- if (e.key === "Enter" || e.key === " ") {
129
- e.preventDefault();
130
- onSelect(ou.id);
131
- }
132
- },
133
- tabIndex: 0,
134
- children: [hasChildren ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
135
- className: styles["toggleButton"],
136
- onClick: (e) => {
137
- e.stopPropagation();
138
- handleToggle(ou.id);
139
- },
140
- "aria-label": isExpanded ? "Collapse" : "Expand",
141
- type: "button",
142
- children: isExpanded ? "▾" : "▸"
143
- }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: styles["togglePlaceholder"] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
144
- className: styles["nodeName"],
145
- children: ou.name
146
- })]
147
- }),
148
- isExpanded && isLoading && !state?.children.length && renderLoadingPlaceholders(depth),
149
- isExpanded && state?.children.map((child) => renderNode(child, depth + 1)),
150
- isExpanded && state?.hasMore && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
151
- className: styles["loadMoreButton"],
152
- style: { paddingLeft: `${(depth + 1) * 20 + 12}px` },
153
- onClick: () => handleLoadMore(ou.id),
154
- disabled: isLoading,
155
- type: "button",
156
- children: isLoading ? "Loading..." : "Load more"
157
- })
158
- ] }, ou.id);
159
- };
160
- const rootState = nodeStates[rootOuId];
161
- const isRootLoading = rootState?.loading && !rootState?.children.length;
162
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
163
- className: (0, __emotion_css.cx)(styles["container"], className),
164
- role: "tree",
165
- "aria-label": "Organization unit picker",
166
- children: [
167
- isRootLoading && renderLoadingPlaceholders(0),
168
- rootState?.children.map((ou) => renderNode(ou, 0)),
169
- rootState?.hasMore && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
170
- className: styles["loadMoreButton"],
171
- onClick: () => handleLoadMore(rootOuId),
172
- disabled: rootState?.loading,
173
- type: "button",
174
- children: rootState?.loading ? "Loading..." : "Load more"
175
- })
176
- ]
177
- });
178
- };
179
- var OrganizationUnitPicker_default = OrganizationUnitPicker;
180
-
181
- //#endregion
182
- exports.default = OrganizationUnitPicker_default;
183
- //# sourceMappingURL=OrganizationUnitPicker.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OrganizationUnitPicker.cjs","names":["useTheme","styles: Record<string, string>","useStyles","loadChildren: (parentId: string, offset?: number) => Promise<void>","response: OrganizationUnitListResponse","newChildren: OrganizationUnit[]","existing: NodeState","mergedChildren: OrganizationUnit[]","newOffset: number","handleToggle: (ouId: string) => void","state: NodeState | undefined","handleLoadMore: (parentId: string) => void","isSelected: boolean","isExpanded: boolean","isLoading: boolean","hasChildren: boolean","React","rootState: NodeState | undefined","isRootLoading: boolean"],"sources":["../../../../../../src/components/presentation/auth/OrganizationUnitPicker/OrganizationUnitPicker.tsx"],"sourcesContent":["/**\n * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com).\n *\n * WSO2 LLC. licenses this file to you under the Apache License,\n * Version 2.0 (the \"License\"); you may not use this file except\n * in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport {cx} from '@emotion/css';\nimport {OrganizationUnit, OrganizationUnitListResponse} from '@thunderid/browser';\nimport React, {useCallback, useEffect, useState} from 'react';\nimport useStyles from './OrganizationUnitPicker.styles';\nimport useTheme from '../../../../contexts/Theme/useTheme';\n\ninterface NodeState {\n children: OrganizationUnit[];\n expanded: boolean;\n hasMore: boolean;\n loading: boolean;\n offset: number;\n totalResults: number;\n}\n\nexport interface OrganizationUnitPickerProps {\n className?: string;\n fetchChildren: (parentId: string, limit: number, offset: number) => Promise<OrganizationUnitListResponse>;\n onSelect: (ouId: string) => void;\n pageSize?: number;\n rootOuId: string;\n selectedOuId?: string | null;\n}\n\nconst OrganizationUnitPicker = ({\n rootOuId,\n selectedOuId,\n onSelect,\n fetchChildren,\n pageSize = 10,\n className,\n}: OrganizationUnitPickerProps): React.ReactElement => {\n const {theme} = useTheme();\n const styles: Record<string, string> = useStyles(theme);\n\n const [nodeStates, setNodeStates] = useState<Record<string, NodeState>>({});\n\n const loadChildren: (parentId: string, offset?: number) => Promise<void> = useCallback(\n async (parentId: string, offset = 0) => {\n setNodeStates((prev: Record<string, NodeState>) => ({\n ...prev,\n [parentId]: {\n ...(prev[parentId] || {children: [], expanded: true, hasMore: false, offset: 0, totalResults: 0}),\n loading: true,\n },\n }));\n\n try {\n const response: OrganizationUnitListResponse = await fetchChildren(parentId, pageSize, offset);\n const newChildren: OrganizationUnit[] = response.organizationUnits || [];\n\n setNodeStates((prev: Record<string, NodeState>) => {\n const existing: NodeState = prev[parentId] || {\n children: [],\n expanded: true,\n hasMore: false,\n loading: false,\n offset: 0,\n totalResults: 0,\n };\n const mergedChildren: OrganizationUnit[] =\n offset === 0 ? newChildren : [...existing.children, ...newChildren];\n const newOffset: number = offset + newChildren.length;\n\n return {\n ...prev,\n [parentId]: {\n children: mergedChildren,\n expanded: true,\n hasMore: newOffset < response.totalResults,\n loading: false,\n offset: newOffset,\n totalResults: response.totalResults,\n },\n };\n });\n } catch {\n setNodeStates((prev: Record<string, NodeState>) => ({\n ...prev,\n [parentId]: {\n ...(prev[parentId] || {children: [], expanded: true, hasMore: false, offset: 0, totalResults: 0}),\n loading: false,\n },\n }));\n }\n },\n [fetchChildren, pageSize],\n );\n\n // Auto-load root children on mount\n useEffect(() => {\n if (rootOuId && !nodeStates[rootOuId]) {\n loadChildren(rootOuId);\n }\n }, [rootOuId, loadChildren, nodeStates]);\n\n const handleToggle: (ouId: string) => void = useCallback(\n (ouId: string) => {\n const state: NodeState | undefined = nodeStates[ouId];\n\n if (state?.expanded) {\n setNodeStates((prev: Record<string, NodeState>) => ({\n ...prev,\n [ouId]: {...prev[ouId], expanded: false},\n }));\n } else if (state?.children.length) {\n setNodeStates((prev: Record<string, NodeState>) => ({\n ...prev,\n [ouId]: {...prev[ouId], expanded: true},\n }));\n } else {\n loadChildren(ouId);\n }\n },\n [nodeStates, loadChildren],\n );\n\n const handleLoadMore: (parentId: string) => void = useCallback(\n (parentId: string) => {\n const state: NodeState | undefined = nodeStates[parentId];\n\n if (state) {\n loadChildren(parentId, state.offset);\n }\n },\n [nodeStates, loadChildren],\n );\n\n const renderLoadingPlaceholders = (depth: number): React.ReactElement => (\n <>\n {[0, 1, 2].map((i: number) => (\n <div\n key={`skeleton-${i}`}\n className={styles['loadingPlaceholder']}\n style={{paddingLeft: `${(depth + 1) * 20}px`}}\n >\n <div className={styles['skeleton']} style={{width: `${100 - i * 20}px`}} />\n </div>\n ))}\n </>\n );\n\n const renderNode = (ou: OrganizationUnit, depth = 0): React.ReactElement => {\n const state: NodeState | undefined = nodeStates[ou.id];\n const isSelected: boolean = selectedOuId === ou.id;\n const isExpanded: boolean = state?.expanded || false;\n const isLoading: boolean = state?.loading || false;\n const hasChildren: boolean = !state || state.totalResults > 0 || state.children.length > 0;\n\n return (\n <React.Fragment key={ou.id}>\n <div\n className={cx(styles['node'], isSelected && styles['nodeSelected'])}\n style={{paddingLeft: `${depth * 20 + 12}px`}}\n role=\"treeitem\"\n aria-selected={isSelected}\n aria-expanded={hasChildren ? isExpanded : undefined}\n onClick={() => onSelect(ou.id)}\n onKeyDown={(e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onSelect(ou.id);\n }\n }}\n tabIndex={0}\n >\n {hasChildren ? (\n <button\n className={styles['toggleButton']}\n onClick={(e: React.MouseEvent) => {\n e.stopPropagation();\n handleToggle(ou.id);\n }}\n aria-label={isExpanded ? 'Collapse' : 'Expand'}\n type=\"button\"\n >\n {isExpanded ? '▾' : '▸'}\n </button>\n ) : (\n <span className={styles['togglePlaceholder']} />\n )}\n <span className={styles['nodeName']}>{ou.name}</span>\n </div>\n\n {isExpanded && isLoading && !state?.children.length && renderLoadingPlaceholders(depth)}\n\n {isExpanded && state?.children.map((child: OrganizationUnit) => renderNode(child, depth + 1))}\n\n {isExpanded && state?.hasMore && (\n <button\n className={styles['loadMoreButton']}\n style={{paddingLeft: `${(depth + 1) * 20 + 12}px`}}\n onClick={() => handleLoadMore(ou.id)}\n disabled={isLoading}\n type=\"button\"\n >\n {isLoading ? 'Loading...' : 'Load more'}\n </button>\n )}\n </React.Fragment>\n );\n };\n\n const rootState: NodeState | undefined = nodeStates[rootOuId];\n const isRootLoading: boolean = rootState?.loading && !rootState?.children.length;\n\n return (\n <div className={cx(styles['container'], className)} role=\"tree\" aria-label=\"Organization unit picker\">\n {isRootLoading && renderLoadingPlaceholders(0)}\n\n {rootState?.children.map((ou: OrganizationUnit) => renderNode(ou, 0))}\n\n {rootState?.hasMore && (\n <button\n className={styles['loadMoreButton']}\n onClick={() => handleLoadMore(rootOuId)}\n disabled={rootState?.loading}\n type=\"button\"\n >\n {rootState?.loading ? 'Loading...' : 'Load more'}\n </button>\n )}\n </div>\n );\n};\n\nexport default OrganizationUnitPicker;\n"],"mappings":"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"}