@stytch/react 20.0.0-next.0 → 20.0.0-next.2

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 (695) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/{StytchSSRProxy-CUOvjF03.js → StytchSSRProxy-Bz6LNYdq.js} +186 -1
  3. package/dist/cjs/StytchSSRProxy-Bz6LNYdq.js.map +1 -0
  4. package/dist/cjs/adminPortal/index.cjs +102 -26
  5. package/dist/cjs/adminPortal/index.cjs.map +1 -1
  6. package/dist/cjs/b2b/index.cjs +176 -138
  7. package/dist/cjs/b2b/index.cjs.map +1 -1
  8. package/dist/cjs/b2b/index.headless.cjs +24 -24
  9. package/dist/cjs/b2b/index.headless.cjs.map +1 -1
  10. package/dist/cjs/compat.cjs +3645 -0
  11. package/dist/cjs/compat.cjs.map +1 -0
  12. package/dist/cjs/{idpHelpers-eUP8j58U.js → idpHelpers-Bj_7pbfW.js} +7 -191
  13. package/dist/cjs/idpHelpers-Bj_7pbfW.js.map +1 -0
  14. package/dist/cjs/{index-DfiRrtK8.js → index-Ni_dyEsz.js} +3 -3
  15. package/dist/cjs/{index-DfiRrtK8.js.map → index-Ni_dyEsz.js.map} +1 -1
  16. package/dist/cjs/index.cjs +220 -198
  17. package/dist/cjs/index.cjs.map +1 -1
  18. package/dist/cjs/index.headless.cjs +32 -32
  19. package/dist/cjs/index.headless.cjs.map +1 -1
  20. package/dist/cjs/{passwordManagerDisableAutofillProps-C0akDAKd.js → passwordManagerDisableAutofillProps-DV31RTL_.js} +2 -2
  21. package/dist/cjs/{passwordManagerDisableAutofillProps-C0akDAKd.js.map → passwordManagerDisableAutofillProps-DV31RTL_.js.map} +1 -1
  22. package/dist/cjs/{shadcn-Bbv2Hk3P.js → shadcn-B8TEzQMT.js} +99 -81
  23. package/dist/cjs/shadcn-B8TEzQMT.js.map +1 -0
  24. package/dist/cjs-dev/{StytchSSRProxy-D0B5PuT0.js → StytchSSRProxy-CxXsyme4.js} +186 -1
  25. package/dist/cjs-dev/StytchSSRProxy-CxXsyme4.js.map +1 -0
  26. package/dist/cjs-dev/adminPortal/index.cjs +102 -26
  27. package/dist/cjs-dev/adminPortal/index.cjs.map +1 -1
  28. package/dist/cjs-dev/b2b/index.cjs +180 -141
  29. package/dist/cjs-dev/b2b/index.cjs.map +1 -1
  30. package/dist/cjs-dev/b2b/index.headless.cjs +29 -28
  31. package/dist/cjs-dev/b2b/index.headless.cjs.map +1 -1
  32. package/dist/cjs-dev/compat.cjs +3693 -0
  33. package/dist/cjs-dev/compat.cjs.map +1 -0
  34. package/dist/cjs-dev/{idpHelpers-DOOVv6dT.js → idpHelpers-BVMUYvt1.js} +22 -230
  35. package/dist/cjs-dev/idpHelpers-BVMUYvt1.js.map +1 -0
  36. package/dist/cjs-dev/{index-paeFcHjf.js → index-DdK3Jt4u.js} +3 -3
  37. package/dist/cjs-dev/{index-paeFcHjf.js.map → index-DdK3Jt4u.js.map} +1 -1
  38. package/dist/cjs-dev/index.cjs +225 -202
  39. package/dist/cjs-dev/index.cjs.map +1 -1
  40. package/dist/cjs-dev/index.headless.cjs +38 -37
  41. package/dist/cjs-dev/index.headless.cjs.map +1 -1
  42. package/dist/cjs-dev/logger-CvOATP4R.js +28 -0
  43. package/dist/cjs-dev/logger-CvOATP4R.js.map +1 -0
  44. package/dist/cjs-dev/{passwordManagerDisableAutofillProps-CnLBAXyr.js → passwordManagerDisableAutofillProps-D70WyvIu.js} +2 -2
  45. package/dist/cjs-dev/{passwordManagerDisableAutofillProps-CnLBAXyr.js.map → passwordManagerDisableAutofillProps-D70WyvIu.js.map} +1 -1
  46. package/dist/cjs-dev/{shadcn-CdbmlhdF.js → shadcn-C9ClUju1.js} +103 -84
  47. package/dist/cjs-dev/shadcn-C9ClUju1.js.map +1 -0
  48. package/dist/esm/_virtual/index.mjs +4 -4
  49. package/dist/esm/_virtual/index3.mjs +3 -5
  50. package/dist/esm/_virtual/index3.mjs.map +1 -1
  51. package/dist/esm/_virtual/index4.mjs +5 -3
  52. package/dist/esm/_virtual/index4.mjs.map +1 -1
  53. package/dist/esm/_virtual/index6.mjs +2 -2
  54. package/dist/esm/_virtual/index7.mjs +2 -2
  55. package/dist/esm/adminPortal/index.mjs +4 -1
  56. package/dist/esm/adminPortal/index.mjs.map +1 -1
  57. package/dist/esm/b2b/index.mjs.map +1 -1
  58. package/dist/esm/compat.mjs +3 -0
  59. package/dist/esm/compat.mjs.map +1 -0
  60. package/dist/esm/node_modules/chroma-js/index.mjs +85 -0
  61. package/dist/esm/node_modules/chroma-js/index.mjs.map +1 -0
  62. package/dist/esm/node_modules/chroma-js/src/Color.mjs +53 -0
  63. package/dist/esm/node_modules/chroma-js/src/Color.mjs.map +1 -0
  64. package/dist/esm/node_modules/chroma-js/src/chroma.mjs +11 -0
  65. package/dist/esm/node_modules/chroma-js/src/chroma.mjs.map +1 -0
  66. package/dist/esm/node_modules/chroma-js/src/colors/colorbrewer.mjs +82 -0
  67. package/dist/esm/node_modules/chroma-js/src/colors/colorbrewer.mjs.map +1 -0
  68. package/dist/esm/node_modules/chroma-js/src/colors/w3cx11.mjs +165 -0
  69. package/dist/esm/node_modules/chroma-js/src/colors/w3cx11.mjs.map +1 -0
  70. package/dist/esm/node_modules/chroma-js/src/generator/average.mjs +92 -0
  71. package/dist/esm/node_modules/chroma-js/src/generator/average.mjs.map +1 -0
  72. package/dist/esm/node_modules/chroma-js/src/generator/bezier.mjs +89 -0
  73. package/dist/esm/node_modules/chroma-js/src/generator/bezier.mjs.map +1 -0
  74. package/dist/esm/node_modules/chroma-js/src/generator/blend.mjs +58 -0
  75. package/dist/esm/node_modules/chroma-js/src/generator/blend.mjs.map +1 -0
  76. package/dist/esm/node_modules/chroma-js/src/generator/cubehelix.mjs +93 -0
  77. package/dist/esm/node_modules/chroma-js/src/generator/cubehelix.mjs.map +1 -0
  78. package/dist/esm/node_modules/chroma-js/src/generator/mix.mjs +22 -0
  79. package/dist/esm/node_modules/chroma-js/src/generator/mix.mjs.map +1 -0
  80. package/dist/esm/node_modules/chroma-js/src/generator/random.mjs +16 -0
  81. package/dist/esm/node_modules/chroma-js/src/generator/random.mjs.map +1 -0
  82. package/dist/esm/node_modules/chroma-js/src/generator/scale.mjs +398 -0
  83. package/dist/esm/node_modules/chroma-js/src/generator/scale.mjs.map +1 -0
  84. package/dist/esm/node_modules/chroma-js/src/interpolator/_hsx.mjs +62 -0
  85. package/dist/esm/node_modules/chroma-js/src/interpolator/_hsx.mjs.map +1 -0
  86. package/dist/esm/node_modules/chroma-js/src/interpolator/hcg.mjs +13 -0
  87. package/dist/esm/node_modules/chroma-js/src/interpolator/hcg.mjs.map +1 -0
  88. package/dist/esm/node_modules/chroma-js/src/interpolator/hsi.mjs +13 -0
  89. package/dist/esm/node_modules/chroma-js/src/interpolator/hsi.mjs.map +1 -0
  90. package/dist/esm/node_modules/chroma-js/src/interpolator/hsl.mjs +13 -0
  91. package/dist/esm/node_modules/chroma-js/src/interpolator/hsl.mjs.map +1 -0
  92. package/dist/esm/node_modules/chroma-js/src/interpolator/hsv.mjs +13 -0
  93. package/dist/esm/node_modules/chroma-js/src/interpolator/hsv.mjs.map +1 -0
  94. package/dist/esm/node_modules/chroma-js/src/interpolator/index.mjs +4 -0
  95. package/dist/esm/node_modules/chroma-js/src/interpolator/index.mjs.map +1 -0
  96. package/dist/esm/node_modules/chroma-js/src/interpolator/lab.mjs +20 -0
  97. package/dist/esm/node_modules/chroma-js/src/interpolator/lab.mjs.map +1 -0
  98. package/dist/esm/node_modules/chroma-js/src/interpolator/lch.mjs +14 -0
  99. package/dist/esm/node_modules/chroma-js/src/interpolator/lch.mjs.map +1 -0
  100. package/dist/esm/node_modules/chroma-js/src/interpolator/lrgb.mjs +21 -0
  101. package/dist/esm/node_modules/chroma-js/src/interpolator/lrgb.mjs.map +1 -0
  102. package/dist/esm/node_modules/chroma-js/src/interpolator/num.mjs +15 -0
  103. package/dist/esm/node_modules/chroma-js/src/interpolator/num.mjs.map +1 -0
  104. package/dist/esm/node_modules/chroma-js/src/interpolator/oklab.mjs +20 -0
  105. package/dist/esm/node_modules/chroma-js/src/interpolator/oklab.mjs.map +1 -0
  106. package/dist/esm/node_modules/chroma-js/src/interpolator/oklch.mjs +13 -0
  107. package/dist/esm/node_modules/chroma-js/src/interpolator/oklch.mjs.map +1 -0
  108. package/dist/esm/node_modules/chroma-js/src/interpolator/rgb.mjs +19 -0
  109. package/dist/esm/node_modules/chroma-js/src/interpolator/rgb.mjs.map +1 -0
  110. package/dist/esm/node_modules/chroma-js/src/io/cmyk/cmyk2rgb.mjs +18 -0
  111. package/dist/esm/node_modules/chroma-js/src/io/cmyk/cmyk2rgb.mjs.map +1 -0
  112. package/dist/esm/node_modules/chroma-js/src/io/cmyk/index.mjs +29 -0
  113. package/dist/esm/node_modules/chroma-js/src/io/cmyk/index.mjs.map +1 -0
  114. package/dist/esm/node_modules/chroma-js/src/io/cmyk/rgb2cmyk.mjs +20 -0
  115. package/dist/esm/node_modules/chroma-js/src/io/cmyk/rgb2cmyk.mjs.map +1 -0
  116. package/dist/esm/node_modules/chroma-js/src/io/css/css2rgb.mjs +239 -0
  117. package/dist/esm/node_modules/chroma-js/src/io/css/css2rgb.mjs.map +1 -0
  118. package/dist/esm/node_modules/chroma-js/src/io/css/hsl2css.mjs +29 -0
  119. package/dist/esm/node_modules/chroma-js/src/io/css/hsl2css.mjs.map +1 -0
  120. package/dist/esm/node_modules/chroma-js/src/io/css/index.mjs +27 -0
  121. package/dist/esm/node_modules/chroma-js/src/io/css/index.mjs.map +1 -0
  122. package/dist/esm/node_modules/chroma-js/src/io/css/lab2css.mjs +27 -0
  123. package/dist/esm/node_modules/chroma-js/src/io/css/lab2css.mjs.map +1 -0
  124. package/dist/esm/node_modules/chroma-js/src/io/css/lch2css.mjs +27 -0
  125. package/dist/esm/node_modules/chroma-js/src/io/css/lch2css.mjs.map +1 -0
  126. package/dist/esm/node_modules/chroma-js/src/io/css/oklab2css.mjs +18 -0
  127. package/dist/esm/node_modules/chroma-js/src/io/css/oklab2css.mjs.map +1 -0
  128. package/dist/esm/node_modules/chroma-js/src/io/css/oklch2css.mjs +18 -0
  129. package/dist/esm/node_modules/chroma-js/src/io/css/oklch2css.mjs.map +1 -0
  130. package/dist/esm/node_modules/chroma-js/src/io/css/rgb2css.mjs +65 -0
  131. package/dist/esm/node_modules/chroma-js/src/io/css/rgb2css.mjs.map +1 -0
  132. package/dist/esm/node_modules/chroma-js/src/io/gl/index.mjs +24 -0
  133. package/dist/esm/node_modules/chroma-js/src/io/gl/index.mjs.map +1 -0
  134. package/dist/esm/node_modules/chroma-js/src/io/hcg/hcg2rgb.mjs +58 -0
  135. package/dist/esm/node_modules/chroma-js/src/io/hcg/hcg2rgb.mjs.map +1 -0
  136. package/dist/esm/node_modules/chroma-js/src/io/hcg/index.mjs +29 -0
  137. package/dist/esm/node_modules/chroma-js/src/io/hcg/index.mjs.map +1 -0
  138. package/dist/esm/node_modules/chroma-js/src/io/hcg/rgb2hcg.mjs +25 -0
  139. package/dist/esm/node_modules/chroma-js/src/io/hcg/rgb2hcg.mjs.map +1 -0
  140. package/dist/esm/node_modules/chroma-js/src/io/hex/hex2rgb.mjs +57 -0
  141. package/dist/esm/node_modules/chroma-js/src/io/hex/hex2rgb.mjs.map +1 -0
  142. package/dist/esm/node_modules/chroma-js/src/io/hex/index.mjs +30 -0
  143. package/dist/esm/node_modules/chroma-js/src/io/hex/index.mjs.map +1 -0
  144. package/dist/esm/node_modules/chroma-js/src/io/hex/rgb2hex.mjs +33 -0
  145. package/dist/esm/node_modules/chroma-js/src/io/hex/rgb2hex.mjs.map +1 -0
  146. package/dist/esm/node_modules/chroma-js/src/io/hsi/hsi2rgb.mjs +49 -0
  147. package/dist/esm/node_modules/chroma-js/src/io/hsi/hsi2rgb.mjs.map +1 -0
  148. package/dist/esm/node_modules/chroma-js/src/io/hsi/index.mjs +29 -0
  149. package/dist/esm/node_modules/chroma-js/src/io/hsi/index.mjs.map +1 -0
  150. package/dist/esm/node_modules/chroma-js/src/io/hsi/rgb2hsi.mjs +34 -0
  151. package/dist/esm/node_modules/chroma-js/src/io/hsi/rgb2hsi.mjs.map +1 -0
  152. package/dist/esm/node_modules/chroma-js/src/io/hsl/hsl2rgb.mjs +37 -0
  153. package/dist/esm/node_modules/chroma-js/src/io/hsl/hsl2rgb.mjs.map +1 -0
  154. package/dist/esm/node_modules/chroma-js/src/io/hsl/index.mjs +29 -0
  155. package/dist/esm/node_modules/chroma-js/src/io/hsl/index.mjs.map +1 -0
  156. package/dist/esm/node_modules/chroma-js/src/io/hsl/rgb2hsl.mjs +47 -0
  157. package/dist/esm/node_modules/chroma-js/src/io/hsl/rgb2hsl.mjs.map +1 -0
  158. package/dist/esm/node_modules/chroma-js/src/io/hsv/hsv2rgb.mjs +50 -0
  159. package/dist/esm/node_modules/chroma-js/src/io/hsv/hsv2rgb.mjs.map +1 -0
  160. package/dist/esm/node_modules/chroma-js/src/io/hsv/index.mjs +29 -0
  161. package/dist/esm/node_modules/chroma-js/src/io/hsv/index.mjs.map +1 -0
  162. package/dist/esm/node_modules/chroma-js/src/io/hsv/rgb2hsv.mjs +35 -0
  163. package/dist/esm/node_modules/chroma-js/src/io/hsv/rgb2hsv.mjs.map +1 -0
  164. package/dist/esm/node_modules/chroma-js/src/io/input.mjs +7 -0
  165. package/dist/esm/node_modules/chroma-js/src/io/input.mjs.map +1 -0
  166. package/dist/esm/node_modules/chroma-js/src/io/lab/index.mjs +30 -0
  167. package/dist/esm/node_modules/chroma-js/src/io/lab/index.mjs.map +1 -0
  168. package/dist/esm/node_modules/chroma-js/src/io/lab/lab-constants.mjs +116 -0
  169. package/dist/esm/node_modules/chroma-js/src/io/lab/lab-constants.mjs.map +1 -0
  170. package/dist/esm/node_modules/chroma-js/src/io/lab/lab2rgb.mjs +102 -0
  171. package/dist/esm/node_modules/chroma-js/src/io/lab/lab2rgb.mjs.map +1 -0
  172. package/dist/esm/node_modules/chroma-js/src/io/lab/rgb2lab.mjs +68 -0
  173. package/dist/esm/node_modules/chroma-js/src/io/lab/rgb2lab.mjs.map +1 -0
  174. package/dist/esm/node_modules/chroma-js/src/io/lch/hcl2rgb.mjs +11 -0
  175. package/dist/esm/node_modules/chroma-js/src/io/lch/hcl2rgb.mjs.map +1 -0
  176. package/dist/esm/node_modules/chroma-js/src/io/lch/index.mjs +38 -0
  177. package/dist/esm/node_modules/chroma-js/src/io/lch/index.mjs.map +1 -0
  178. package/dist/esm/node_modules/chroma-js/src/io/lch/lab2lch.mjs +15 -0
  179. package/dist/esm/node_modules/chroma-js/src/io/lch/lab2lch.mjs.map +1 -0
  180. package/dist/esm/node_modules/chroma-js/src/io/lch/lch2lab.mjs +21 -0
  181. package/dist/esm/node_modules/chroma-js/src/io/lch/lch2lab.mjs.map +1 -0
  182. package/dist/esm/node_modules/chroma-js/src/io/lch/lch2rgb.mjs +15 -0
  183. package/dist/esm/node_modules/chroma-js/src/io/lch/lch2rgb.mjs.map +1 -0
  184. package/dist/esm/node_modules/chroma-js/src/io/lch/rgb2lch.mjs +14 -0
  185. package/dist/esm/node_modules/chroma-js/src/io/lch/rgb2lch.mjs.map +1 -0
  186. package/dist/esm/node_modules/chroma-js/src/io/named/index.mjs +30 -0
  187. package/dist/esm/node_modules/chroma-js/src/io/named/index.mjs.map +1 -0
  188. package/dist/esm/node_modules/chroma-js/src/io/num/index.mjs +33 -0
  189. package/dist/esm/node_modules/chroma-js/src/io/num/index.mjs.map +1 -0
  190. package/dist/esm/node_modules/chroma-js/src/io/num/num2rgb.mjs +14 -0
  191. package/dist/esm/node_modules/chroma-js/src/io/num/num2rgb.mjs.map +1 -0
  192. package/dist/esm/node_modules/chroma-js/src/io/num/rgb2num.mjs +10 -0
  193. package/dist/esm/node_modules/chroma-js/src/io/num/rgb2num.mjs.map +1 -0
  194. package/dist/esm/node_modules/chroma-js/src/io/oklab/index.mjs +29 -0
  195. package/dist/esm/node_modules/chroma-js/src/io/oklab/index.mjs.map +1 -0
  196. package/dist/esm/node_modules/chroma-js/src/io/oklab/oklab2rgb.mjs +36 -0
  197. package/dist/esm/node_modules/chroma-js/src/io/oklab/oklab2rgb.mjs.map +1 -0
  198. package/dist/esm/node_modules/chroma-js/src/io/oklab/rgb2oklab.mjs +39 -0
  199. package/dist/esm/node_modules/chroma-js/src/io/oklab/rgb2oklab.mjs.map +1 -0
  200. package/dist/esm/node_modules/chroma-js/src/io/oklch/index.mjs +29 -0
  201. package/dist/esm/node_modules/chroma-js/src/io/oklch/index.mjs.map +1 -0
  202. package/dist/esm/node_modules/chroma-js/src/io/oklch/oklch2rgb.mjs +15 -0
  203. package/dist/esm/node_modules/chroma-js/src/io/oklch/oklch2rgb.mjs.map +1 -0
  204. package/dist/esm/node_modules/chroma-js/src/io/oklch/rgb2oklch.mjs +14 -0
  205. package/dist/esm/node_modules/chroma-js/src/io/oklch/rgb2oklch.mjs.map +1 -0
  206. package/dist/esm/node_modules/chroma-js/src/io/rgb/index.mjs +47 -0
  207. package/dist/esm/node_modules/chroma-js/src/io/rgb/index.mjs.map +1 -0
  208. package/dist/esm/node_modules/chroma-js/src/io/temp/index.mjs +23 -0
  209. package/dist/esm/node_modules/chroma-js/src/io/temp/index.mjs.map +1 -0
  210. package/dist/esm/node_modules/chroma-js/src/io/temp/rgb2temperature.mjs +33 -0
  211. package/dist/esm/node_modules/chroma-js/src/io/temp/rgb2temperature.mjs.map +1 -0
  212. package/dist/esm/node_modules/chroma-js/src/io/temp/temperature2rgb.mjs +40 -0
  213. package/dist/esm/node_modules/chroma-js/src/io/temp/temperature2rgb.mjs.map +1 -0
  214. package/dist/esm/node_modules/chroma-js/src/ops/alpha.mjs +14 -0
  215. package/dist/esm/node_modules/chroma-js/src/ops/alpha.mjs.map +1 -0
  216. package/dist/esm/node_modules/chroma-js/src/ops/clipped.mjs +6 -0
  217. package/dist/esm/node_modules/chroma-js/src/ops/clipped.mjs.map +1 -0
  218. package/dist/esm/node_modules/chroma-js/src/ops/darken.mjs +18 -0
  219. package/dist/esm/node_modules/chroma-js/src/ops/darken.mjs.map +1 -0
  220. package/dist/esm/node_modules/chroma-js/src/ops/get.mjs +14 -0
  221. package/dist/esm/node_modules/chroma-js/src/ops/get.mjs.map +1 -0
  222. package/dist/esm/node_modules/chroma-js/src/ops/luminance.mjs +56 -0
  223. package/dist/esm/node_modules/chroma-js/src/ops/luminance.mjs.map +1 -0
  224. package/dist/esm/node_modules/chroma-js/src/ops/mix.mjs +11 -0
  225. package/dist/esm/node_modules/chroma-js/src/ops/mix.mjs.map +1 -0
  226. package/dist/esm/node_modules/chroma-js/src/ops/premultiply.mjs +13 -0
  227. package/dist/esm/node_modules/chroma-js/src/ops/premultiply.mjs.map +1 -0
  228. package/dist/esm/node_modules/chroma-js/src/ops/saturate.mjs +16 -0
  229. package/dist/esm/node_modules/chroma-js/src/ops/saturate.mjs.map +1 -0
  230. package/dist/esm/node_modules/chroma-js/src/ops/set.mjs +44 -0
  231. package/dist/esm/node_modules/chroma-js/src/ops/set.mjs.map +1 -0
  232. package/dist/esm/node_modules/chroma-js/src/ops/shade.mjs +12 -0
  233. package/dist/esm/node_modules/chroma-js/src/ops/shade.mjs.map +1 -0
  234. package/dist/esm/node_modules/chroma-js/src/utils/analyze.mjs +194 -0
  235. package/dist/esm/node_modules/chroma-js/src/utils/analyze.mjs.map +1 -0
  236. package/dist/esm/node_modules/chroma-js/src/utils/clip_rgb.mjs +18 -0
  237. package/dist/esm/node_modules/chroma-js/src/utils/clip_rgb.mjs.map +1 -0
  238. package/dist/esm/node_modules/chroma-js/src/utils/contrast.mjs +15 -0
  239. package/dist/esm/node_modules/chroma-js/src/utils/contrast.mjs.map +1 -0
  240. package/dist/esm/node_modules/chroma-js/src/utils/contrastAPCA.mjs +71 -0
  241. package/dist/esm/node_modules/chroma-js/src/utils/contrastAPCA.mjs.map +1 -0
  242. package/dist/esm/node_modules/chroma-js/src/utils/delta-e.mjs +66 -0
  243. package/dist/esm/node_modules/chroma-js/src/utils/delta-e.mjs.map +1 -0
  244. package/dist/esm/node_modules/chroma-js/src/utils/distance.mjs +20 -0
  245. package/dist/esm/node_modules/chroma-js/src/utils/distance.mjs.map +1 -0
  246. package/dist/esm/node_modules/chroma-js/src/utils/index.mjs +24 -0
  247. package/dist/esm/node_modules/chroma-js/src/utils/index.mjs.map +1 -0
  248. package/dist/esm/node_modules/chroma-js/src/utils/last.mjs +11 -0
  249. package/dist/esm/node_modules/chroma-js/src/utils/last.mjs.map +1 -0
  250. package/dist/esm/node_modules/chroma-js/src/utils/limit.mjs +8 -0
  251. package/dist/esm/node_modules/chroma-js/src/utils/limit.mjs.map +1 -0
  252. package/dist/esm/node_modules/chroma-js/src/utils/multiply-matrices.mjs +39 -0
  253. package/dist/esm/node_modules/chroma-js/src/utils/multiply-matrices.mjs.map +1 -0
  254. package/dist/esm/node_modules/chroma-js/src/utils/scales.mjs +19 -0
  255. package/dist/esm/node_modules/chroma-js/src/utils/scales.mjs.map +1 -0
  256. package/dist/esm/node_modules/chroma-js/src/utils/type.mjs +21 -0
  257. package/dist/esm/node_modules/chroma-js/src/utils/type.mjs.map +1 -0
  258. package/dist/esm/node_modules/chroma-js/src/utils/unpack.mjs +20 -0
  259. package/dist/esm/node_modules/chroma-js/src/utils/unpack.mjs.map +1 -0
  260. package/dist/esm/node_modules/chroma-js/src/utils/valid.mjs +14 -0
  261. package/dist/esm/node_modules/chroma-js/src/utils/valid.mjs.map +1 -0
  262. package/dist/esm/node_modules/chroma-js/src/version.mjs +5 -0
  263. package/dist/esm/node_modules/chroma-js/src/version.mjs.map +1 -0
  264. package/dist/esm/node_modules/lodash.merge/index.mjs +1 -1
  265. package/dist/esm/node_modules/use-sync-external-store/shim/index.mjs +1 -1
  266. package/dist/esm/packages/core/src/rpc/FrameClient.mjs +1 -0
  267. package/dist/esm/packages/core/src/rpc/FrameClient.mjs.map +1 -1
  268. package/dist/esm/packages/web/messages/b2b/en.json.mjs +10 -3
  269. package/dist/esm/packages/web/messages/b2b/en.json.mjs.map +1 -1
  270. package/dist/esm/packages/web/messages/en.json.mjs +10 -3
  271. package/dist/esm/packages/web/messages/en.json.mjs.map +1 -1
  272. package/dist/esm/packages/web/src/adminPortal/memberManagement/AccessSection.mjs +6 -3
  273. package/dist/esm/packages/web/src/adminPortal/memberManagement/AccessSection.mjs.map +1 -1
  274. package/dist/esm/packages/web/src/adminPortal/memberManagement/InviteModal.mjs +4 -1
  275. package/dist/esm/packages/web/src/adminPortal/memberManagement/InviteModal.mjs.map +1 -1
  276. package/dist/esm/packages/web/src/adminPortal/memberManagement/MemberListScreen.mjs +3 -1
  277. package/dist/esm/packages/web/src/adminPortal/memberManagement/MemberListScreen.mjs.map +1 -1
  278. package/dist/esm/packages/web/src/adminPortal/scim/SCIMConnectionRoleAssignmentsSection.mjs +6 -2
  279. package/dist/esm/packages/web/src/adminPortal/scim/SCIMConnectionRoleAssignmentsSection.mjs.map +1 -1
  280. package/dist/esm/packages/web/src/adminPortal/settings/OrgSettingsRoleAssignmentsSection.mjs +7 -3
  281. package/dist/esm/packages/web/src/adminPortal/settings/OrgSettingsRoleAssignmentsSection.mjs.map +1 -1
  282. package/dist/esm/packages/web/src/adminPortal/sso/RoleAssignmentsSection.mjs +5 -1
  283. package/dist/esm/packages/web/src/adminPortal/sso/RoleAssignmentsSection.mjs.map +1 -1
  284. package/dist/esm/packages/web/src/adminPortal/utils/theme.mjs +1 -1
  285. package/dist/esm/packages/web/src/adminPortal/utils/useRbac.mjs.map +1 -1
  286. package/dist/esm/packages/web/src/adminPortal/utils/useRoleAutocomplete.mjs +3 -3
  287. package/dist/esm/packages/web/src/adminPortal/utils/useRoleAutocomplete.mjs.map +1 -1
  288. package/dist/esm/packages/web/src/adminPortal/utils/useRoleDisplayInfo.mjs +2 -2
  289. package/dist/esm/packages/web/src/adminPortal/utils/useRoleDisplayInfo.mjs.map +1 -1
  290. package/dist/esm/packages/web/src/adminPortal/utils/useRoles.mjs +7 -2
  291. package/dist/esm/packages/web/src/adminPortal/utils/useRoles.mjs.map +1 -1
  292. package/dist/esm/packages/web/src/ui/b2b/components/OrganizationRow.mjs +1 -1
  293. package/dist/esm/packages/web/src/ui/b2b/screens/EmailConfirmation.mjs +27 -3
  294. package/dist/esm/packages/web/src/ui/b2b/screens/EmailConfirmation.mjs.map +1 -1
  295. package/dist/esm/packages/web/src/ui/b2b/screens/RecoveryCodeEntryScreen.mjs +2 -0
  296. package/dist/esm/packages/web/src/ui/b2b/screens/RecoveryCodeEntryScreen.mjs.map +1 -1
  297. package/dist/esm/packages/web/src/ui/b2b/screens/SMSOTPEntryScreen.mjs +2 -0
  298. package/dist/esm/packages/web/src/ui/b2b/screens/SMSOTPEntryScreen.mjs.map +1 -1
  299. package/dist/esm/packages/web/src/ui/b2b/utils.mjs +8 -1
  300. package/dist/esm/packages/web/src/ui/b2b/utils.mjs.map +1 -1
  301. package/dist/esm/packages/web/src/ui/b2c/components/GoogleOneTap.mjs +1 -1
  302. package/dist/esm/packages/web/src/ui/b2c/screens/Main/LoginForm/index.mjs +1 -1
  303. package/dist/esm/packages/web/src/ui/b2c/screens/Passkey/EditableRow.mjs +1 -1
  304. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/EmailConfirmation.mjs +10 -4
  305. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/EmailConfirmation.mjs.map +1 -1
  306. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/PasswordCreateAuthenticate.mjs +2 -1
  307. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/PasswordCreateAuthenticate.mjs.map +1 -1
  308. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/PasswordlessAuthenticate.mjs +11 -70
  309. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/PasswordlessAuthenticate.mjs.map +1 -1
  310. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/usePasswordlessAuthenticate.mjs +81 -0
  311. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/usePasswordlessAuthenticate.mjs.map +1 -0
  312. package/dist/esm/packages/web/src/ui/compat/generateColorFallback.mjs +63 -0
  313. package/dist/esm/packages/web/src/ui/compat/generateColorFallback.mjs.map +1 -0
  314. package/dist/esm/packages/web/src/ui/compat/styleToTheme.mjs +117 -0
  315. package/dist/esm/packages/web/src/ui/compat/styleToTheme.mjs.map +1 -0
  316. package/dist/esm/packages/web/src/ui/components/atoms/AnimatedContainer.mjs +1 -1
  317. package/dist/esm/packages/web/src/ui/components/atoms/Button.mjs +1 -1
  318. package/dist/esm/packages/web/src/ui/components/atoms/CircularProgress.mjs +4 -5
  319. package/dist/esm/packages/web/src/ui/components/atoms/CircularProgress.mjs.map +1 -1
  320. package/dist/esm/packages/web/src/ui/components/atoms/CodeContainer.mjs +1 -1
  321. package/dist/esm/packages/web/src/ui/components/atoms/Column.mjs +1 -1
  322. package/dist/esm/packages/web/src/ui/components/atoms/Typography.mjs +1 -1
  323. package/dist/esm/packages/web/src/ui/components/atoms/VerticalTransition.mjs +1 -1
  324. package/dist/esm/packages/web/src/ui/components/atoms/VisuallyHidden.mjs +1 -1
  325. package/dist/esm/packages/web/src/ui/components/atoms/Watermark.mjs +14 -23
  326. package/dist/esm/packages/web/src/ui/components/atoms/Watermark.mjs.map +1 -1
  327. package/dist/esm/packages/web/src/ui/components/atoms/Watermark.module.css.mjs +2 -2
  328. package/dist/esm/packages/web/src/ui/components/molecules/Badge.mjs +1 -1
  329. package/dist/esm/packages/web/src/ui/components/molecules/EmailInput.mjs +1 -1
  330. package/dist/esm/packages/web/src/ui/components/molecules/EmailInput.mjs.map +1 -1
  331. package/dist/esm/packages/web/src/ui/components/molecules/ErrorText.mjs +12 -4
  332. package/dist/esm/packages/web/src/ui/components/molecules/ErrorText.mjs.map +1 -1
  333. package/dist/esm/packages/web/src/ui/components/molecules/Input.mjs +3 -2
  334. package/dist/esm/packages/web/src/ui/components/molecules/Input.mjs.map +1 -1
  335. package/dist/esm/packages/web/src/ui/components/molecules/MainContainer.mjs +6 -6
  336. package/dist/esm/packages/web/src/ui/components/molecules/MainContainer.mjs.map +1 -1
  337. package/dist/esm/packages/web/src/ui/components/molecules/MainContainer.module.css.mjs +2 -2
  338. package/dist/esm/packages/web/src/ui/components/molecules/OtpInput.mjs +1 -1
  339. package/dist/esm/packages/web/src/ui/components/molecules/PasswordStrengthCheck.mjs +1 -1
  340. package/dist/esm/packages/web/src/ui/components/molecules/PhoneInput.mjs +3 -4
  341. package/dist/esm/packages/web/src/ui/components/molecules/PhoneInput.mjs.map +1 -1
  342. package/dist/esm/packages/web/src/ui/components/organisms/EmailConfirmationView.mjs +26 -3
  343. package/dist/esm/packages/web/src/ui/components/organisms/EmailConfirmationView.mjs.map +1 -1
  344. package/dist/esm/packages/web/src/ui/components/organisms/IDPConsentManifest.mjs +1 -1
  345. package/dist/esm/packages/web/src/ui/components/organisms/OneTapError.mjs +1 -1
  346. package/dist/esm/packages/web/src/ui/components/organisms/ResendOTPButton.mjs +2 -2
  347. package/dist/esm/packages/web/src/ui/components/organisms/ResendOTPButton.mjs.map +1 -1
  348. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalMemberManagement.mjs +0 -42
  349. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalMemberManagement.mjs.map +1 -1
  350. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalOrgSettings.mjs +0 -40
  351. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalOrgSettings.mjs.map +1 -1
  352. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalSCIM.mjs +0 -43
  353. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalSCIM.mjs.map +1 -1
  354. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalSSO.mjs +0 -36
  355. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalSSO.mjs.map +1 -1
  356. package/dist/esm/packages/web/src/ui/react/b2b/Stytch.mjs.map +1 -1
  357. package/dist/esm/packages/web/src/ui/react/bindings/createB2BComponent.mjs.map +1 -1
  358. package/dist/esm/packages/web/src/utils/crypto.mjs +1 -1
  359. package/dist/esm-dev/_virtual/index.mjs +4 -4
  360. package/dist/esm-dev/_virtual/index3.mjs +4 -4
  361. package/dist/esm-dev/_virtual/index6.mjs +2 -2
  362. package/dist/esm-dev/_virtual/index7.mjs +2 -2
  363. package/dist/esm-dev/adminPortal/index.mjs +4 -1
  364. package/dist/esm-dev/adminPortal/index.mjs.map +1 -1
  365. package/dist/esm-dev/b2b/index.mjs.map +1 -1
  366. package/dist/esm-dev/compat.mjs +3 -0
  367. package/dist/esm-dev/compat.mjs.map +1 -0
  368. package/dist/esm-dev/node_modules/chroma-js/index.mjs +85 -0
  369. package/dist/esm-dev/node_modules/chroma-js/index.mjs.map +1 -0
  370. package/dist/esm-dev/node_modules/chroma-js/src/Color.mjs +53 -0
  371. package/dist/esm-dev/node_modules/chroma-js/src/Color.mjs.map +1 -0
  372. package/dist/esm-dev/node_modules/chroma-js/src/chroma.mjs +11 -0
  373. package/dist/esm-dev/node_modules/chroma-js/src/chroma.mjs.map +1 -0
  374. package/dist/esm-dev/node_modules/chroma-js/src/colors/colorbrewer.mjs +82 -0
  375. package/dist/esm-dev/node_modules/chroma-js/src/colors/colorbrewer.mjs.map +1 -0
  376. package/dist/esm-dev/node_modules/chroma-js/src/colors/w3cx11.mjs +165 -0
  377. package/dist/esm-dev/node_modules/chroma-js/src/colors/w3cx11.mjs.map +1 -0
  378. package/dist/esm-dev/node_modules/chroma-js/src/generator/average.mjs +92 -0
  379. package/dist/esm-dev/node_modules/chroma-js/src/generator/average.mjs.map +1 -0
  380. package/dist/esm-dev/node_modules/chroma-js/src/generator/bezier.mjs +89 -0
  381. package/dist/esm-dev/node_modules/chroma-js/src/generator/bezier.mjs.map +1 -0
  382. package/dist/esm-dev/node_modules/chroma-js/src/generator/blend.mjs +58 -0
  383. package/dist/esm-dev/node_modules/chroma-js/src/generator/blend.mjs.map +1 -0
  384. package/dist/esm-dev/node_modules/chroma-js/src/generator/cubehelix.mjs +93 -0
  385. package/dist/esm-dev/node_modules/chroma-js/src/generator/cubehelix.mjs.map +1 -0
  386. package/dist/esm-dev/node_modules/chroma-js/src/generator/mix.mjs +22 -0
  387. package/dist/esm-dev/node_modules/chroma-js/src/generator/mix.mjs.map +1 -0
  388. package/dist/esm-dev/node_modules/chroma-js/src/generator/random.mjs +16 -0
  389. package/dist/esm-dev/node_modules/chroma-js/src/generator/random.mjs.map +1 -0
  390. package/dist/esm-dev/node_modules/chroma-js/src/generator/scale.mjs +398 -0
  391. package/dist/esm-dev/node_modules/chroma-js/src/generator/scale.mjs.map +1 -0
  392. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/_hsx.mjs +62 -0
  393. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/_hsx.mjs.map +1 -0
  394. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/hcg.mjs +13 -0
  395. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/hcg.mjs.map +1 -0
  396. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/hsi.mjs +13 -0
  397. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/hsi.mjs.map +1 -0
  398. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/hsl.mjs +13 -0
  399. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/hsl.mjs.map +1 -0
  400. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/hsv.mjs +13 -0
  401. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/hsv.mjs.map +1 -0
  402. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/index.mjs +4 -0
  403. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/index.mjs.map +1 -0
  404. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/lab.mjs +20 -0
  405. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/lab.mjs.map +1 -0
  406. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/lch.mjs +14 -0
  407. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/lch.mjs.map +1 -0
  408. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/lrgb.mjs +21 -0
  409. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/lrgb.mjs.map +1 -0
  410. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/num.mjs +15 -0
  411. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/num.mjs.map +1 -0
  412. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/oklab.mjs +20 -0
  413. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/oklab.mjs.map +1 -0
  414. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/oklch.mjs +13 -0
  415. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/oklch.mjs.map +1 -0
  416. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/rgb.mjs +19 -0
  417. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/rgb.mjs.map +1 -0
  418. package/dist/esm-dev/node_modules/chroma-js/src/io/cmyk/cmyk2rgb.mjs +18 -0
  419. package/dist/esm-dev/node_modules/chroma-js/src/io/cmyk/cmyk2rgb.mjs.map +1 -0
  420. package/dist/esm-dev/node_modules/chroma-js/src/io/cmyk/index.mjs +29 -0
  421. package/dist/esm-dev/node_modules/chroma-js/src/io/cmyk/index.mjs.map +1 -0
  422. package/dist/esm-dev/node_modules/chroma-js/src/io/cmyk/rgb2cmyk.mjs +20 -0
  423. package/dist/esm-dev/node_modules/chroma-js/src/io/cmyk/rgb2cmyk.mjs.map +1 -0
  424. package/dist/esm-dev/node_modules/chroma-js/src/io/css/css2rgb.mjs +239 -0
  425. package/dist/esm-dev/node_modules/chroma-js/src/io/css/css2rgb.mjs.map +1 -0
  426. package/dist/esm-dev/node_modules/chroma-js/src/io/css/hsl2css.mjs +29 -0
  427. package/dist/esm-dev/node_modules/chroma-js/src/io/css/hsl2css.mjs.map +1 -0
  428. package/dist/esm-dev/node_modules/chroma-js/src/io/css/index.mjs +27 -0
  429. package/dist/esm-dev/node_modules/chroma-js/src/io/css/index.mjs.map +1 -0
  430. package/dist/esm-dev/node_modules/chroma-js/src/io/css/lab2css.mjs +27 -0
  431. package/dist/esm-dev/node_modules/chroma-js/src/io/css/lab2css.mjs.map +1 -0
  432. package/dist/esm-dev/node_modules/chroma-js/src/io/css/lch2css.mjs +27 -0
  433. package/dist/esm-dev/node_modules/chroma-js/src/io/css/lch2css.mjs.map +1 -0
  434. package/dist/esm-dev/node_modules/chroma-js/src/io/css/oklab2css.mjs +18 -0
  435. package/dist/esm-dev/node_modules/chroma-js/src/io/css/oklab2css.mjs.map +1 -0
  436. package/dist/esm-dev/node_modules/chroma-js/src/io/css/oklch2css.mjs +18 -0
  437. package/dist/esm-dev/node_modules/chroma-js/src/io/css/oklch2css.mjs.map +1 -0
  438. package/dist/esm-dev/node_modules/chroma-js/src/io/css/rgb2css.mjs +65 -0
  439. package/dist/esm-dev/node_modules/chroma-js/src/io/css/rgb2css.mjs.map +1 -0
  440. package/dist/esm-dev/node_modules/chroma-js/src/io/gl/index.mjs +24 -0
  441. package/dist/esm-dev/node_modules/chroma-js/src/io/gl/index.mjs.map +1 -0
  442. package/dist/esm-dev/node_modules/chroma-js/src/io/hcg/hcg2rgb.mjs +58 -0
  443. package/dist/esm-dev/node_modules/chroma-js/src/io/hcg/hcg2rgb.mjs.map +1 -0
  444. package/dist/esm-dev/node_modules/chroma-js/src/io/hcg/index.mjs +29 -0
  445. package/dist/esm-dev/node_modules/chroma-js/src/io/hcg/index.mjs.map +1 -0
  446. package/dist/esm-dev/node_modules/chroma-js/src/io/hcg/rgb2hcg.mjs +25 -0
  447. package/dist/esm-dev/node_modules/chroma-js/src/io/hcg/rgb2hcg.mjs.map +1 -0
  448. package/dist/esm-dev/node_modules/chroma-js/src/io/hex/hex2rgb.mjs +57 -0
  449. package/dist/esm-dev/node_modules/chroma-js/src/io/hex/hex2rgb.mjs.map +1 -0
  450. package/dist/esm-dev/node_modules/chroma-js/src/io/hex/index.mjs +30 -0
  451. package/dist/esm-dev/node_modules/chroma-js/src/io/hex/index.mjs.map +1 -0
  452. package/dist/esm-dev/node_modules/chroma-js/src/io/hex/rgb2hex.mjs +33 -0
  453. package/dist/esm-dev/node_modules/chroma-js/src/io/hex/rgb2hex.mjs.map +1 -0
  454. package/dist/esm-dev/node_modules/chroma-js/src/io/hsi/hsi2rgb.mjs +49 -0
  455. package/dist/esm-dev/node_modules/chroma-js/src/io/hsi/hsi2rgb.mjs.map +1 -0
  456. package/dist/esm-dev/node_modules/chroma-js/src/io/hsi/index.mjs +29 -0
  457. package/dist/esm-dev/node_modules/chroma-js/src/io/hsi/index.mjs.map +1 -0
  458. package/dist/esm-dev/node_modules/chroma-js/src/io/hsi/rgb2hsi.mjs +34 -0
  459. package/dist/esm-dev/node_modules/chroma-js/src/io/hsi/rgb2hsi.mjs.map +1 -0
  460. package/dist/esm-dev/node_modules/chroma-js/src/io/hsl/hsl2rgb.mjs +37 -0
  461. package/dist/esm-dev/node_modules/chroma-js/src/io/hsl/hsl2rgb.mjs.map +1 -0
  462. package/dist/esm-dev/node_modules/chroma-js/src/io/hsl/index.mjs +29 -0
  463. package/dist/esm-dev/node_modules/chroma-js/src/io/hsl/index.mjs.map +1 -0
  464. package/dist/esm-dev/node_modules/chroma-js/src/io/hsl/rgb2hsl.mjs +47 -0
  465. package/dist/esm-dev/node_modules/chroma-js/src/io/hsl/rgb2hsl.mjs.map +1 -0
  466. package/dist/esm-dev/node_modules/chroma-js/src/io/hsv/hsv2rgb.mjs +50 -0
  467. package/dist/esm-dev/node_modules/chroma-js/src/io/hsv/hsv2rgb.mjs.map +1 -0
  468. package/dist/esm-dev/node_modules/chroma-js/src/io/hsv/index.mjs +29 -0
  469. package/dist/esm-dev/node_modules/chroma-js/src/io/hsv/index.mjs.map +1 -0
  470. package/dist/esm-dev/node_modules/chroma-js/src/io/hsv/rgb2hsv.mjs +35 -0
  471. package/dist/esm-dev/node_modules/chroma-js/src/io/hsv/rgb2hsv.mjs.map +1 -0
  472. package/dist/esm-dev/node_modules/chroma-js/src/io/input.mjs +7 -0
  473. package/dist/esm-dev/node_modules/chroma-js/src/io/input.mjs.map +1 -0
  474. package/dist/esm-dev/node_modules/chroma-js/src/io/lab/index.mjs +30 -0
  475. package/dist/esm-dev/node_modules/chroma-js/src/io/lab/index.mjs.map +1 -0
  476. package/dist/esm-dev/node_modules/chroma-js/src/io/lab/lab-constants.mjs +116 -0
  477. package/dist/esm-dev/node_modules/chroma-js/src/io/lab/lab-constants.mjs.map +1 -0
  478. package/dist/esm-dev/node_modules/chroma-js/src/io/lab/lab2rgb.mjs +102 -0
  479. package/dist/esm-dev/node_modules/chroma-js/src/io/lab/lab2rgb.mjs.map +1 -0
  480. package/dist/esm-dev/node_modules/chroma-js/src/io/lab/rgb2lab.mjs +68 -0
  481. package/dist/esm-dev/node_modules/chroma-js/src/io/lab/rgb2lab.mjs.map +1 -0
  482. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/hcl2rgb.mjs +11 -0
  483. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/hcl2rgb.mjs.map +1 -0
  484. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/index.mjs +38 -0
  485. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/index.mjs.map +1 -0
  486. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/lab2lch.mjs +15 -0
  487. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/lab2lch.mjs.map +1 -0
  488. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/lch2lab.mjs +21 -0
  489. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/lch2lab.mjs.map +1 -0
  490. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/lch2rgb.mjs +15 -0
  491. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/lch2rgb.mjs.map +1 -0
  492. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/rgb2lch.mjs +14 -0
  493. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/rgb2lch.mjs.map +1 -0
  494. package/dist/esm-dev/node_modules/chroma-js/src/io/named/index.mjs +30 -0
  495. package/dist/esm-dev/node_modules/chroma-js/src/io/named/index.mjs.map +1 -0
  496. package/dist/esm-dev/node_modules/chroma-js/src/io/num/index.mjs +33 -0
  497. package/dist/esm-dev/node_modules/chroma-js/src/io/num/index.mjs.map +1 -0
  498. package/dist/esm-dev/node_modules/chroma-js/src/io/num/num2rgb.mjs +14 -0
  499. package/dist/esm-dev/node_modules/chroma-js/src/io/num/num2rgb.mjs.map +1 -0
  500. package/dist/esm-dev/node_modules/chroma-js/src/io/num/rgb2num.mjs +10 -0
  501. package/dist/esm-dev/node_modules/chroma-js/src/io/num/rgb2num.mjs.map +1 -0
  502. package/dist/esm-dev/node_modules/chroma-js/src/io/oklab/index.mjs +29 -0
  503. package/dist/esm-dev/node_modules/chroma-js/src/io/oklab/index.mjs.map +1 -0
  504. package/dist/esm-dev/node_modules/chroma-js/src/io/oklab/oklab2rgb.mjs +36 -0
  505. package/dist/esm-dev/node_modules/chroma-js/src/io/oklab/oklab2rgb.mjs.map +1 -0
  506. package/dist/esm-dev/node_modules/chroma-js/src/io/oklab/rgb2oklab.mjs +39 -0
  507. package/dist/esm-dev/node_modules/chroma-js/src/io/oklab/rgb2oklab.mjs.map +1 -0
  508. package/dist/esm-dev/node_modules/chroma-js/src/io/oklch/index.mjs +29 -0
  509. package/dist/esm-dev/node_modules/chroma-js/src/io/oklch/index.mjs.map +1 -0
  510. package/dist/esm-dev/node_modules/chroma-js/src/io/oklch/oklch2rgb.mjs +15 -0
  511. package/dist/esm-dev/node_modules/chroma-js/src/io/oklch/oklch2rgb.mjs.map +1 -0
  512. package/dist/esm-dev/node_modules/chroma-js/src/io/oklch/rgb2oklch.mjs +14 -0
  513. package/dist/esm-dev/node_modules/chroma-js/src/io/oklch/rgb2oklch.mjs.map +1 -0
  514. package/dist/esm-dev/node_modules/chroma-js/src/io/rgb/index.mjs +47 -0
  515. package/dist/esm-dev/node_modules/chroma-js/src/io/rgb/index.mjs.map +1 -0
  516. package/dist/esm-dev/node_modules/chroma-js/src/io/temp/index.mjs +23 -0
  517. package/dist/esm-dev/node_modules/chroma-js/src/io/temp/index.mjs.map +1 -0
  518. package/dist/esm-dev/node_modules/chroma-js/src/io/temp/rgb2temperature.mjs +33 -0
  519. package/dist/esm-dev/node_modules/chroma-js/src/io/temp/rgb2temperature.mjs.map +1 -0
  520. package/dist/esm-dev/node_modules/chroma-js/src/io/temp/temperature2rgb.mjs +40 -0
  521. package/dist/esm-dev/node_modules/chroma-js/src/io/temp/temperature2rgb.mjs.map +1 -0
  522. package/dist/esm-dev/node_modules/chroma-js/src/ops/alpha.mjs +14 -0
  523. package/dist/esm-dev/node_modules/chroma-js/src/ops/alpha.mjs.map +1 -0
  524. package/dist/esm-dev/node_modules/chroma-js/src/ops/clipped.mjs +6 -0
  525. package/dist/esm-dev/node_modules/chroma-js/src/ops/clipped.mjs.map +1 -0
  526. package/dist/esm-dev/node_modules/chroma-js/src/ops/darken.mjs +18 -0
  527. package/dist/esm-dev/node_modules/chroma-js/src/ops/darken.mjs.map +1 -0
  528. package/dist/esm-dev/node_modules/chroma-js/src/ops/get.mjs +14 -0
  529. package/dist/esm-dev/node_modules/chroma-js/src/ops/get.mjs.map +1 -0
  530. package/dist/esm-dev/node_modules/chroma-js/src/ops/luminance.mjs +56 -0
  531. package/dist/esm-dev/node_modules/chroma-js/src/ops/luminance.mjs.map +1 -0
  532. package/dist/esm-dev/node_modules/chroma-js/src/ops/mix.mjs +11 -0
  533. package/dist/esm-dev/node_modules/chroma-js/src/ops/mix.mjs.map +1 -0
  534. package/dist/esm-dev/node_modules/chroma-js/src/ops/premultiply.mjs +13 -0
  535. package/dist/esm-dev/node_modules/chroma-js/src/ops/premultiply.mjs.map +1 -0
  536. package/dist/esm-dev/node_modules/chroma-js/src/ops/saturate.mjs +16 -0
  537. package/dist/esm-dev/node_modules/chroma-js/src/ops/saturate.mjs.map +1 -0
  538. package/dist/esm-dev/node_modules/chroma-js/src/ops/set.mjs +44 -0
  539. package/dist/esm-dev/node_modules/chroma-js/src/ops/set.mjs.map +1 -0
  540. package/dist/esm-dev/node_modules/chroma-js/src/ops/shade.mjs +12 -0
  541. package/dist/esm-dev/node_modules/chroma-js/src/ops/shade.mjs.map +1 -0
  542. package/dist/esm-dev/node_modules/chroma-js/src/utils/analyze.mjs +194 -0
  543. package/dist/esm-dev/node_modules/chroma-js/src/utils/analyze.mjs.map +1 -0
  544. package/dist/esm-dev/node_modules/chroma-js/src/utils/clip_rgb.mjs +18 -0
  545. package/dist/esm-dev/node_modules/chroma-js/src/utils/clip_rgb.mjs.map +1 -0
  546. package/dist/esm-dev/node_modules/chroma-js/src/utils/contrast.mjs +15 -0
  547. package/dist/esm-dev/node_modules/chroma-js/src/utils/contrast.mjs.map +1 -0
  548. package/dist/esm-dev/node_modules/chroma-js/src/utils/contrastAPCA.mjs +71 -0
  549. package/dist/esm-dev/node_modules/chroma-js/src/utils/contrastAPCA.mjs.map +1 -0
  550. package/dist/esm-dev/node_modules/chroma-js/src/utils/delta-e.mjs +66 -0
  551. package/dist/esm-dev/node_modules/chroma-js/src/utils/delta-e.mjs.map +1 -0
  552. package/dist/esm-dev/node_modules/chroma-js/src/utils/distance.mjs +20 -0
  553. package/dist/esm-dev/node_modules/chroma-js/src/utils/distance.mjs.map +1 -0
  554. package/dist/esm-dev/node_modules/chroma-js/src/utils/index.mjs +24 -0
  555. package/dist/esm-dev/node_modules/chroma-js/src/utils/index.mjs.map +1 -0
  556. package/dist/esm-dev/node_modules/chroma-js/src/utils/last.mjs +11 -0
  557. package/dist/esm-dev/node_modules/chroma-js/src/utils/last.mjs.map +1 -0
  558. package/dist/esm-dev/node_modules/chroma-js/src/utils/limit.mjs +8 -0
  559. package/dist/esm-dev/node_modules/chroma-js/src/utils/limit.mjs.map +1 -0
  560. package/dist/esm-dev/node_modules/chroma-js/src/utils/multiply-matrices.mjs +39 -0
  561. package/dist/esm-dev/node_modules/chroma-js/src/utils/multiply-matrices.mjs.map +1 -0
  562. package/dist/esm-dev/node_modules/chroma-js/src/utils/scales.mjs +19 -0
  563. package/dist/esm-dev/node_modules/chroma-js/src/utils/scales.mjs.map +1 -0
  564. package/dist/esm-dev/node_modules/chroma-js/src/utils/type.mjs +21 -0
  565. package/dist/esm-dev/node_modules/chroma-js/src/utils/type.mjs.map +1 -0
  566. package/dist/esm-dev/node_modules/chroma-js/src/utils/unpack.mjs +20 -0
  567. package/dist/esm-dev/node_modules/chroma-js/src/utils/unpack.mjs.map +1 -0
  568. package/dist/esm-dev/node_modules/chroma-js/src/utils/valid.mjs +14 -0
  569. package/dist/esm-dev/node_modules/chroma-js/src/utils/valid.mjs.map +1 -0
  570. package/dist/esm-dev/node_modules/chroma-js/src/version.mjs +5 -0
  571. package/dist/esm-dev/node_modules/chroma-js/src/version.mjs.map +1 -0
  572. package/dist/esm-dev/node_modules/lodash.merge/index.mjs +1 -1
  573. package/dist/esm-dev/node_modules/use-sync-external-store/shim/index.mjs +1 -1
  574. package/dist/esm-dev/packages/core/src/rpc/FrameClient.mjs +1 -0
  575. package/dist/esm-dev/packages/core/src/rpc/FrameClient.mjs.map +1 -1
  576. package/dist/esm-dev/packages/web/messages/b2b/en.json.mjs +10 -3
  577. package/dist/esm-dev/packages/web/messages/b2b/en.json.mjs.map +1 -1
  578. package/dist/esm-dev/packages/web/messages/en.json.mjs +10 -3
  579. package/dist/esm-dev/packages/web/messages/en.json.mjs.map +1 -1
  580. package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/AccessSection.mjs +6 -3
  581. package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/AccessSection.mjs.map +1 -1
  582. package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/InviteModal.mjs +4 -1
  583. package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/InviteModal.mjs.map +1 -1
  584. package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/MemberListScreen.mjs +3 -1
  585. package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/MemberListScreen.mjs.map +1 -1
  586. package/dist/esm-dev/packages/web/src/adminPortal/scim/SCIMConnectionRoleAssignmentsSection.mjs +6 -2
  587. package/dist/esm-dev/packages/web/src/adminPortal/scim/SCIMConnectionRoleAssignmentsSection.mjs.map +1 -1
  588. package/dist/esm-dev/packages/web/src/adminPortal/settings/OrgSettingsRoleAssignmentsSection.mjs +7 -3
  589. package/dist/esm-dev/packages/web/src/adminPortal/settings/OrgSettingsRoleAssignmentsSection.mjs.map +1 -1
  590. package/dist/esm-dev/packages/web/src/adminPortal/sso/RoleAssignmentsSection.mjs +5 -1
  591. package/dist/esm-dev/packages/web/src/adminPortal/sso/RoleAssignmentsSection.mjs.map +1 -1
  592. package/dist/esm-dev/packages/web/src/adminPortal/utils/theme.mjs +1 -1
  593. package/dist/esm-dev/packages/web/src/adminPortal/utils/useRbac.mjs.map +1 -1
  594. package/dist/esm-dev/packages/web/src/adminPortal/utils/useRoleAutocomplete.mjs +3 -3
  595. package/dist/esm-dev/packages/web/src/adminPortal/utils/useRoleAutocomplete.mjs.map +1 -1
  596. package/dist/esm-dev/packages/web/src/adminPortal/utils/useRoleDisplayInfo.mjs +2 -2
  597. package/dist/esm-dev/packages/web/src/adminPortal/utils/useRoleDisplayInfo.mjs.map +1 -1
  598. package/dist/esm-dev/packages/web/src/adminPortal/utils/useRoles.mjs +7 -2
  599. package/dist/esm-dev/packages/web/src/adminPortal/utils/useRoles.mjs.map +1 -1
  600. package/dist/esm-dev/packages/web/src/ui/b2b/components/OrganizationRow.mjs +1 -1
  601. package/dist/esm-dev/packages/web/src/ui/b2b/screens/EmailConfirmation.mjs +27 -3
  602. package/dist/esm-dev/packages/web/src/ui/b2b/screens/EmailConfirmation.mjs.map +1 -1
  603. package/dist/esm-dev/packages/web/src/ui/b2b/screens/RecoveryCodeEntryScreen.mjs +2 -0
  604. package/dist/esm-dev/packages/web/src/ui/b2b/screens/RecoveryCodeEntryScreen.mjs.map +1 -1
  605. package/dist/esm-dev/packages/web/src/ui/b2b/screens/SMSOTPEntryScreen.mjs +2 -0
  606. package/dist/esm-dev/packages/web/src/ui/b2b/screens/SMSOTPEntryScreen.mjs.map +1 -1
  607. package/dist/esm-dev/packages/web/src/ui/b2b/utils.mjs +8 -1
  608. package/dist/esm-dev/packages/web/src/ui/b2b/utils.mjs.map +1 -1
  609. package/dist/esm-dev/packages/web/src/ui/b2c/components/GoogleOneTap.mjs +1 -1
  610. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Main/LoginForm/index.mjs +1 -1
  611. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Passkey/EditableRow.mjs +1 -1
  612. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/EmailConfirmation.mjs +10 -4
  613. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/EmailConfirmation.mjs.map +1 -1
  614. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/PasswordCreateAuthenticate.mjs +2 -1
  615. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/PasswordCreateAuthenticate.mjs.map +1 -1
  616. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/PasswordlessAuthenticate.mjs +11 -70
  617. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/PasswordlessAuthenticate.mjs.map +1 -1
  618. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/usePasswordlessAuthenticate.mjs +81 -0
  619. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/usePasswordlessAuthenticate.mjs.map +1 -0
  620. package/dist/esm-dev/packages/web/src/ui/compat/generateColorFallback.mjs +63 -0
  621. package/dist/esm-dev/packages/web/src/ui/compat/generateColorFallback.mjs.map +1 -0
  622. package/dist/esm-dev/packages/web/src/ui/compat/styleToTheme.mjs +165 -0
  623. package/dist/esm-dev/packages/web/src/ui/compat/styleToTheme.mjs.map +1 -0
  624. package/dist/esm-dev/packages/web/src/ui/components/atoms/AnimatedContainer.mjs +1 -1
  625. package/dist/esm-dev/packages/web/src/ui/components/atoms/Button.mjs +1 -1
  626. package/dist/esm-dev/packages/web/src/ui/components/atoms/CircularProgress.mjs +4 -5
  627. package/dist/esm-dev/packages/web/src/ui/components/atoms/CircularProgress.mjs.map +1 -1
  628. package/dist/esm-dev/packages/web/src/ui/components/atoms/CodeContainer.mjs +1 -1
  629. package/dist/esm-dev/packages/web/src/ui/components/atoms/Column.mjs +1 -1
  630. package/dist/esm-dev/packages/web/src/ui/components/atoms/Typography.mjs +1 -1
  631. package/dist/esm-dev/packages/web/src/ui/components/atoms/VerticalTransition.mjs +1 -1
  632. package/dist/esm-dev/packages/web/src/ui/components/atoms/VisuallyHidden.mjs +1 -1
  633. package/dist/esm-dev/packages/web/src/ui/components/atoms/Watermark.mjs +14 -23
  634. package/dist/esm-dev/packages/web/src/ui/components/atoms/Watermark.mjs.map +1 -1
  635. package/dist/esm-dev/packages/web/src/ui/components/atoms/Watermark.module.css.mjs +2 -2
  636. package/dist/esm-dev/packages/web/src/ui/components/molecules/Badge.mjs +1 -1
  637. package/dist/esm-dev/packages/web/src/ui/components/molecules/EmailInput.mjs +1 -1
  638. package/dist/esm-dev/packages/web/src/ui/components/molecules/EmailInput.mjs.map +1 -1
  639. package/dist/esm-dev/packages/web/src/ui/components/molecules/ErrorText.mjs +12 -4
  640. package/dist/esm-dev/packages/web/src/ui/components/molecules/ErrorText.mjs.map +1 -1
  641. package/dist/esm-dev/packages/web/src/ui/components/molecules/Input.mjs +3 -2
  642. package/dist/esm-dev/packages/web/src/ui/components/molecules/Input.mjs.map +1 -1
  643. package/dist/esm-dev/packages/web/src/ui/components/molecules/MainContainer.mjs +6 -6
  644. package/dist/esm-dev/packages/web/src/ui/components/molecules/MainContainer.mjs.map +1 -1
  645. package/dist/esm-dev/packages/web/src/ui/components/molecules/MainContainer.module.css.mjs +2 -2
  646. package/dist/esm-dev/packages/web/src/ui/components/molecules/OtpInput.mjs +1 -1
  647. package/dist/esm-dev/packages/web/src/ui/components/molecules/PasswordStrengthCheck.mjs +1 -1
  648. package/dist/esm-dev/packages/web/src/ui/components/molecules/PhoneInput.mjs +3 -4
  649. package/dist/esm-dev/packages/web/src/ui/components/molecules/PhoneInput.mjs.map +1 -1
  650. package/dist/esm-dev/packages/web/src/ui/components/organisms/EmailConfirmationView.mjs +26 -3
  651. package/dist/esm-dev/packages/web/src/ui/components/organisms/EmailConfirmationView.mjs.map +1 -1
  652. package/dist/esm-dev/packages/web/src/ui/components/organisms/IDPConsentManifest.mjs +1 -1
  653. package/dist/esm-dev/packages/web/src/ui/components/organisms/ResendOTPButton.mjs +2 -2
  654. package/dist/esm-dev/packages/web/src/ui/components/organisms/ResendOTPButton.mjs.map +1 -1
  655. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalMemberManagement.mjs +0 -42
  656. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalMemberManagement.mjs.map +1 -1
  657. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalOrgSettings.mjs +0 -40
  658. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalOrgSettings.mjs.map +1 -1
  659. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalSCIM.mjs +0 -43
  660. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalSCIM.mjs.map +1 -1
  661. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalSSO.mjs +0 -36
  662. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalSSO.mjs.map +1 -1
  663. package/dist/esm-dev/packages/web/src/ui/react/b2b/Stytch.mjs.map +1 -1
  664. package/dist/esm-dev/packages/web/src/ui/react/bindings/createB2BComponent.mjs.map +1 -1
  665. package/dist/types/PresentationConfig-Bqzf8zr3.d.ts +168 -0
  666. package/dist/types/{StytchB2BClient-Dq-ITB7Q.d.ts → StytchB2BClient-CsY7ZNKh.d.ts} +2 -1
  667. package/dist/types/{StytchClient-BV0sT3Ox.d.ts → StytchClient-DZRM_fM4.d.ts} +2 -2
  668. package/dist/types/adminPortal/index.d.ts +7 -4
  669. package/dist/types/b2b/index.d.ts +14 -11
  670. package/dist/types/b2b/index.headless.d.ts +5 -4
  671. package/dist/types/compat.d.ts +46 -0
  672. package/dist/types/createAuthUrlHandler-BZoD2LDF.d.ts +2406 -0
  673. package/dist/types/idpHelpers-CD5sSDzA.d.ts +36 -0
  674. package/dist/types/index.d.ts +11 -8
  675. package/dist/types/index.headless.d.ts +5 -4
  676. package/dist/types/{shadcn-CFz8Asq0.d.ts → shadcn-4-5byj93.d.ts} +9 -171
  677. package/dist/types/{createAuthUrlHandler-Ck5TyB9J.d.ts → ui-DXrQ-gA8.d.ts} +41 -1543
  678. package/messages/b2b/en.po +6 -3
  679. package/messages/en.po +6 -3
  680. package/package.json +1 -1
  681. package/dist/cjs/StytchSSRProxy-CUOvjF03.js.map +0 -1
  682. package/dist/cjs/idpHelpers-eUP8j58U.js.map +0 -1
  683. package/dist/cjs/shadcn-Bbv2Hk3P.js.map +0 -1
  684. package/dist/cjs-dev/StytchSSRProxy-D0B5PuT0.js.map +0 -1
  685. package/dist/cjs-dev/idpHelpers-DOOVv6dT.js.map +0 -1
  686. package/dist/cjs-dev/shadcn-CdbmlhdF.js.map +0 -1
  687. package/dist/esm/packages/web/src/adminPortal/MuiClassNameSetup.mjs +0 -5
  688. package/dist/esm/packages/web/src/adminPortal/MuiClassNameSetup.mjs.map +0 -1
  689. package/dist/esm/packages/web/src/adminPortal/classNameSeed.mjs +0 -5
  690. package/dist/esm/packages/web/src/adminPortal/classNameSeed.mjs.map +0 -1
  691. package/dist/esm-dev/packages/web/src/adminPortal/MuiClassNameSetup.mjs +0 -5
  692. package/dist/esm-dev/packages/web/src/adminPortal/MuiClassNameSetup.mjs.map +0 -1
  693. package/dist/esm-dev/packages/web/src/adminPortal/classNameSeed.mjs +0 -5
  694. package/dist/esm-dev/packages/web/src/adminPortal/classNameSeed.mjs.map +0 -1
  695. package/dist/types/idpHelpers-hBhPCtAC.d.ts +0 -936
@@ -1 +1 @@
1
- {"version":3,"file":"AccessSection.mjs","sources":["../../../../../../../../web/src/adminPortal/memberManagement/AccessSection.tsx"],"sourcesContent":["import { RBACPolicyRole } from '@stytch/core';\nimport { B2BOrganizationsMembersUpdateOptions, Member, MemberRole } from '@stytch/core/public';\nimport React, { SetStateAction, useCallback, useMemo, useRef, useState } from 'react';\nimport { Autocomplete } from '../components/Autocomplete';\nimport { FlexBox } from '../components/FlexBox';\nimport { ListEditor } from '../components/ListEditor';\nimport { Modal, useModalState } from '../components/Modal';\nimport { SettingsContainer, useSettingsContainer } from '../components/SettingsContainer';\nimport { SettingsSection } from '../components/SettingsSection';\nimport { Switch } from '../components/Switch';\nimport { Typography } from '../components/Typography';\nimport { TableItemRenderer } from '../shared/components/types';\nimport { arraysHaveSameContents } from '../utils/arraysHaveSameContents';\nimport { ROLE_ID_STYTCH_MEMBER } from '../utils/roles';\nimport { useFormState } from '../utils/useFormState';\nimport { useMutateMember } from '../utils/useMutateMember';\nimport { useRbac } from '../utils/useRbac';\nimport { useRoleAutocomplete } from '../utils/useRoleAutocomplete';\nimport { useRoleDisplayInfo } from '../utils/useRoleDisplayInfo';\nimport { useRoleSortFn } from '../utils/useRoleSortFn';\nimport { useRoles } from '../utils/useRoles';\nimport { useSelf } from '../utils/useSelf';\nimport { useStateSliceSetter } from '../utils/useStateSliceSetter';\nimport { useMemberManagementRouterController } from './MemberManagementRouter';\n\ntype RoleSourceType = MemberRole['sources'][number]['type'];\n\ninterface AccessFormState {\n isBreakglass: boolean;\n isMfaEnrolled: boolean;\n explicitRoleAssignments: string[];\n}\n\ninterface AccessSectionBodyProps {\n localState: AccessFormState;\n setLocalState: (state: SetStateAction<AccessFormState>) => void;\n remoteState: AccessFormState;\n implicitRoleAssignments: { role_id: string; sourceType: RoleSourceType }[];\n showRoleAssignment: boolean;\n isSelf: boolean;\n orgRequiresMfa: boolean;\n}\n\nconst getRoleSourceTypeDisplayName = (sourceType: RoleSourceType) => {\n switch (sourceType) {\n case 'direct_assignment':\n return 'Manual assignment';\n case 'email_assignment':\n return 'Email domain';\n case 'sso_connection':\n return 'SSO connection';\n case 'sso_connection_group':\n return 'SSO group';\n case 'scim_connection_group':\n return 'SCIM group';\n default:\n return sourceType;\n }\n};\n\nconst roleAssignmentsRowKeyExtractor = (item: { role_id: string; sourceType: RoleSourceType }): string =>\n `${item.role_id}-${item.sourceType}`;\n\nconst AccessSectionBody = ({\n localState,\n setLocalState,\n remoteState,\n implicitRoleAssignments,\n showRoleAssignment,\n isSelf,\n orgRequiresMfa,\n}: AccessSectionBodyProps) => {\n const { editing } = useSettingsContainer();\n\n const { isMfaEnrolled, explicitRoleAssignments, isBreakglass } = editing ? localState : remoteState;\n\n const handleIsMfaEnrolledChange = useStateSliceSetter(setLocalState, 'isMfaEnrolled');\n const setIsBreakglass = useStateSliceSetter(setLocalState, 'isBreakglass');\n\n const { open: openBreakGlassConfirmModal, ...breakGlassConfirmModalProps } = useModalState(() => {\n setIsBreakglass(true);\n });\n\n const handleIsBreakglassChange = useCallback(\n (value: boolean) => {\n if (value) {\n openBreakGlassConfirmModal();\n } else {\n setIsBreakglass(value);\n }\n },\n [openBreakGlassConfirmModal, setIsBreakglass],\n );\n\n const { data: canUpdateMemberRolesPerm } = useRbac('stytch.member', 'update.settings.roles');\n const { data: canUpdateMemberMfaEnrolledPerm } = useRbac('stytch.member', 'update.settings.mfa-enrolled');\n const { data: canUpdateMemberBreakglassPerm } = useRbac('stytch.member', 'update.settings.is-breakglass');\n\n const { data: canUpdateSelfMfaEnrolledPerm } = useRbac('stytch.self', 'update.settings.mfa-enrolled');\n\n const canUpdateMfaEnrolled = canUpdateMemberMfaEnrolledPerm || (canUpdateSelfMfaEnrolledPerm && isSelf);\n const canUpdateRoles = canUpdateMemberRolesPerm;\n const canUpdateBreakglass = canUpdateMemberBreakglassPerm;\n\n const sortRoles = useRoleSortFn();\n\n const { selectItems: roleSelectItems, ...roleAutocompleteProps } = useRoleAutocomplete({ excludeStytchMember: true });\n const availableRoleSelectItems = roleSelectItems.filter((roleId) => !explicitRoleAssignments.includes(roleId));\n\n const { getRoleIdDisplayName } = useRoleDisplayInfo();\n\n const stytchMemberRoleDisplayName = roleAutocompleteProps.getOptionLabel(ROLE_ID_STYTCH_MEMBER);\n\n const combinedRoleAssignments = useMemo(() => {\n return [\n ...sortRoles(implicitRoleAssignments),\n ...sortRoles(\n explicitRoleAssignments.map((roleId) => ({ role_id: roleId, sourceType: 'direct_assignment' as const })),\n ),\n ];\n }, [explicitRoleAssignments, implicitRoleAssignments, sortRoles]);\n\n const [pendingAssignments, setPendingAssignments] = useState<string[]>([]);\n const { open: openRoleAssignmentModal, ...roleAssignmentModalProps } = useModalState(() => {\n setLocalState((state) => {\n return {\n ...state,\n explicitRoleAssignments: Array.from(new Set([...state.explicitRoleAssignments, ...pendingAssignments])),\n };\n });\n });\n\n const roleAssignmentsItemRenderer: TableItemRenderer<(typeof combinedRoleAssignments)[number]>[] = useMemo(\n () => [\n {\n title: 'Role',\n getValue: (assignment) => <Typography variant=\"body2\">{getRoleIdDisplayName(assignment.role_id)}</Typography>,\n },\n {\n title: 'Source',\n getValue: (assignment) => (\n <Typography variant=\"body2\">{getRoleSourceTypeDisplayName(assignment.sourceType)}</Typography>\n ),\n },\n ],\n [getRoleIdDisplayName],\n );\n\n const handleAddRoleAssignment = useCallback(() => {\n setPendingAssignments([]);\n openRoleAssignmentModal();\n }, [openRoleAssignmentModal]);\n\n const roleAssignmentsItemActionProps = useMemo(\n () => (item: (typeof combinedRoleAssignments)[number]) =>\n item.sourceType === 'direct_assignment'\n ? {\n warningAction: {\n text: 'Revoke',\n onClick: () => {\n setLocalState((state) => {\n return {\n ...state,\n explicitRoleAssignments: state.explicitRoleAssignments.filter((roleId) => roleId !== item.role_id),\n };\n });\n },\n },\n }\n : {},\n [setLocalState],\n );\n\n return (\n <FlexBox flexDirection=\"column\" gap={2}>\n {editing && (\n <Modal\n {...breakGlassConfirmModalProps}\n title=\"Exempt Member from primary auth requirements?\"\n confirmButtonText=\"Allow\"\n warning\n >\n <Typography>\n Enabling this toggle will exempt the Member from your primary authentication policy if needed (e.g. to\n update SSO configuration in the case of a lockout).\n </Typography>\n </Modal>\n )}\n {showRoleAssignment && (\n <SettingsSection title=\"Role assignments\">\n <Modal {...roleAssignmentModalProps} title=\"Add Role assignment\" confirmButtonText=\"Add Role\">\n <FlexBox flexDirection=\"column\" gap={0.5}>\n <Typography color=\"secondary\" variant=\"caption\">\n Role\n </Typography>\n <Autocomplete\n {...roleAutocompleteProps}\n selectItems={availableRoleSelectItems}\n value={pendingAssignments}\n onChange={setPendingAssignments}\n placeholder={pendingAssignments.length > 0 ? undefined : 'Select Role'}\n />\n </FlexBox>\n </Modal>\n <Typography variant=\"body2\">\n All members are automatically assigned the {stytchMemberRoleDisplayName} Role.\n </Typography>\n <ListEditor\n items={combinedRoleAssignments}\n rowKeyExtractor={roleAssignmentsRowKeyExtractor}\n itemRenderer={roleAssignmentsItemRenderer}\n addButtonText=\"Add Role assignment\"\n hideAddButton={availableRoleSelectItems.length === 0}\n readOnly={!(editing && canUpdateRoles)}\n onAdd={handleAddRoleAssignment}\n getItemActionProps={roleAssignmentsItemActionProps}\n />\n </SettingsSection>\n )}\n <SettingsSection title=\"Require MFA\">\n {orgRequiresMfa ? (\n <Typography variant=\"body2\">MFA is required for all members.</Typography>\n ) : (\n <Switch\n readOnly={!editing || !canUpdateMfaEnrolled}\n checked={isMfaEnrolled}\n onChange={handleIsMfaEnrolledChange}\n label=\"Require MFA for this Member. When enabled, the Member will be required to set up and use MFA on each login.\"\n />\n )}\n </SettingsSection>\n <SettingsSection title=\"Exempt from primary auth requirements\">\n <Switch\n readOnly={!editing || !canUpdateBreakglass}\n checked={isBreakglass}\n onChange={handleIsBreakglassChange}\n label=\"Exempt Member from your primary authentication policy\"\n />\n </SettingsSection>\n </FlexBox>\n );\n};\n\nconst rolesCanUpdateMemberRoles = (roleIds: string[], roles: RBACPolicyRole[]) => {\n return Array.from(new Set(roleIds)).some((roleId) => {\n const role = roles.find((role) => role.role_id === roleId);\n return role?.permissions.some(\n (permission) =>\n permission.resource_id === 'stytch.member' &&\n (permission.actions.includes('update.settings.roles') || permission.actions.includes('*')),\n );\n });\n};\n\nexport const AccessSection = ({ member, orgRequiresMfa }: { member: Member; orgRequiresMfa: boolean }) => {\n const { isSelf } = useSelf();\n const isMemberSelf = isSelf(member.member_id);\n const { data: canUpdateMemberRolesPerm } = useRbac('stytch.member', 'update.settings.roles');\n const { data: canUpdateMemberBreakglassPerm } = useRbac('stytch.member', 'update.settings.is-breakglass');\n const { data: canUpdateMemberMfaEnrolledPerm } = useRbac('stytch.member', 'update.settings.mfa-enrolled');\n\n const { data: canUpdateSelfMfaEnrolledPerm } = useRbac('stytch.self', 'update.settings.mfa-enrolled');\n\n const canUpdateRoles = canUpdateMemberRolesPerm;\n const canUpdateBreakglass = canUpdateMemberBreakglassPerm;\n const canUpdateMfaEnrolled =\n !orgRequiresMfa && (canUpdateMemberMfaEnrolledPerm || (canUpdateSelfMfaEnrolledPerm && isMemberSelf));\n\n const isMemberDeleted = member.status === 'deleted';\n\n const canEditSection = !isMemberDeleted && (canUpdateRoles || canUpdateBreakglass || canUpdateMfaEnrolled);\n const showRoleAssignment = !isMemberDeleted;\n\n const { explicitRoleAssignments, implicitRoleAssignments } = useMemo(() => {\n return member.roles\n .filter((role) => role.role_id !== ROLE_ID_STYTCH_MEMBER)\n .reduce<{\n explicitRoleAssignments: string[];\n implicitRoleAssignments: { role_id: string; sourceType: RoleSourceType }[];\n }>(\n (acc, role) => {\n const implicitAssignments = new Set(\n role.sources.filter((source) => source.type !== 'direct_assignment').map((source) => source.type),\n );\n for (const sourceType of implicitAssignments) {\n acc.implicitRoleAssignments.push({ role_id: role.role_id, sourceType });\n }\n\n const isExplicitAssignment = role.sources.some((source) => source.type === 'direct_assignment');\n if (isExplicitAssignment) {\n acc.explicitRoleAssignments.push(role.role_id);\n }\n\n return acc;\n },\n {\n explicitRoleAssignments: [],\n implicitRoleAssignments: [],\n },\n );\n }, [member.roles]);\n\n const remoteState = useMemo<AccessFormState>(\n () => ({\n isMfaEnrolled: member.mfa_enrolled,\n explicitRoleAssignments,\n isBreakglass: member.is_breakglass,\n }),\n [explicitRoleAssignments, member.is_breakglass, member.mfa_enrolled],\n );\n\n const { localState, setLocalState, editing, handleSetEditing } = useFormState({ remoteState });\n\n const { mutate } = useMutateMember();\n\n const lockoutConfirmDeferred = useRef<{ resolve: () => void; reject: () => void }>();\n\n const {\n open: openLockoutWarningModal,\n close: closeLockoutWarningModal,\n ...lockoutWarningModalProps\n } = useModalState(() => {\n lockoutConfirmDeferred.current?.resolve();\n lockoutConfirmDeferred.current = undefined;\n });\n const handleLockoutWarningCancel = useCallback(() => {\n lockoutConfirmDeferred.current?.reject();\n lockoutConfirmDeferred.current = undefined;\n closeLockoutWarningModal();\n }, [closeLockoutWarningModal]);\n\n const roles = useRoles();\n\n const handleSave = useCallback(async () => {\n const memberOptions: B2BOrganizationsMembersUpdateOptions = {\n member_id: member.member_id,\n };\n\n let shouldUpdate = false;\n const setOption = <T extends keyof B2BOrganizationsMembersUpdateOptions>(\n key: T,\n value: B2BOrganizationsMembersUpdateOptions[T],\n ) => {\n memberOptions[key] = value;\n shouldUpdate = true;\n };\n\n if (localState.isMfaEnrolled !== remoteState.isMfaEnrolled) {\n setOption('mfa_enrolled', localState.isMfaEnrolled);\n }\n if (localState.isBreakglass !== remoteState.isBreakglass) {\n setOption('is_breakglass', localState.isBreakglass);\n }\n if (!arraysHaveSameContents(localState.explicitRoleAssignments, remoteState.explicitRoleAssignments)) {\n if (\n isSelf(member.member_id) &&\n roles &&\n !rolesCanUpdateMemberRoles(\n [...localState.explicitRoleAssignments, ...implicitRoleAssignments.map((role) => role.role_id)],\n roles,\n )\n ) {\n openLockoutWarningModal();\n await new Promise<void>((resolve, reject) => {\n lockoutConfirmDeferred.current = { resolve, reject };\n });\n }\n\n setOption('roles', localState.explicitRoleAssignments);\n }\n\n if (shouldUpdate) {\n await mutate(memberOptions);\n }\n }, [\n implicitRoleAssignments,\n isSelf,\n localState.explicitRoleAssignments,\n localState.isBreakglass,\n localState.isMfaEnrolled,\n member.member_id,\n mutate,\n openLockoutWarningModal,\n remoteState.explicitRoleAssignments,\n remoteState.isBreakglass,\n remoteState.isMfaEnrolled,\n roles,\n ]);\n\n const { useBlockNavigation } = useMemberManagementRouterController();\n\n return (\n <SettingsContainer\n title=\"Access requirements & permissions\"\n hasCTA={canEditSection}\n onSave={handleSave}\n useBlockNavigation={useBlockNavigation}\n editing={editing}\n setEditing={handleSetEditing}\n >\n <Modal\n {...lockoutWarningModalProps}\n close={handleLockoutWarningCancel}\n title=\"Revoke Role assignments?\"\n confirmButtonText=\"Revoke\"\n warning\n >\n <Typography>\n Changing your Role assignments will remove your permissions to manage members. You will not be able to edit\n your Role assignments to reassign permissions.\n </Typography>\n </Modal>\n <AccessSectionBody\n remoteState={remoteState}\n localState={localState}\n setLocalState={setLocalState}\n implicitRoleAssignments={implicitRoleAssignments}\n showRoleAssignment={showRoleAssignment}\n isSelf={isMemberSelf}\n orgRequiresMfa={orgRequiresMfa}\n />\n </SettingsContainer>\n );\n};\n"],"names":["getRoleSourceTypeDisplayName","sourceType","roleAssignmentsRowKeyExtractor","item","role_id","AccessSectionBody","localState","setLocalState","remoteState","implicitRoleAssignments","showRoleAssignment","isSelf","orgRequiresMfa","editing","useSettingsContainer","isMfaEnrolled","explicitRoleAssignments","isBreakglass","handleIsMfaEnrolledChange","useStateSliceSetter","setIsBreakglass","open","openBreakGlassConfirmModal","breakGlassConfirmModalProps","useModalState","handleIsBreakglassChange","useCallback","value","data","canUpdateMemberRolesPerm","useRbac","canUpdateMemberMfaEnrolledPerm","canUpdateMemberBreakglassPerm","canUpdateSelfMfaEnrolledPerm","canUpdateMfaEnrolled","canUpdateRoles","canUpdateBreakglass","sortRoles","useRoleSortFn","selectItems","roleSelectItems","roleAutocompleteProps","useRoleAutocomplete","excludeStytchMember","availableRoleSelectItems","filter","roleId","includes","getRoleIdDisplayName","useRoleDisplayInfo","stytchMemberRoleDisplayName","getOptionLabel","ROLE_ID_STYTCH_MEMBER","combinedRoleAssignments","useMemo","map","pendingAssignments","setPendingAssignments","useState","openRoleAssignmentModal","roleAssignmentModalProps","state","Array","from","Set","roleAssignmentsItemRenderer","title","getValue","assignment","React","Typography","variant","handleAddRoleAssignment","roleAssignmentsItemActionProps","warningAction","text","onClick","FlexBox","flexDirection","gap","Modal","confirmButtonText","warning","SettingsSection","color","Autocomplete","onChange","placeholder","length","undefined","ListEditor","items","rowKeyExtractor","itemRenderer","addButtonText","hideAddButton","readOnly","onAdd","getItemActionProps","Switch","checked","label","rolesCanUpdateMemberRoles","roleIds","roles","some","role","find","permissions","permission","resource_id","actions","AccessSection","member","useSelf","isMemberSelf","member_id","isMemberDeleted","status","canEditSection","reduce","acc","implicitAssignments","sources","source","type","push","isExplicitAssignment","mfa_enrolled","is_breakglass","handleSetEditing","useFormState","mutate","useMutateMember","lockoutConfirmDeferred","useRef","openLockoutWarningModal","close","closeLockoutWarningModal","lockoutWarningModalProps","current","resolve","handleLockoutWarningCancel","reject","useRoles","handleSave","memberOptions","shouldUpdate","setOption","key","arraysHaveSameContents","Promise","useBlockNavigation","useMemberManagementRouterController","SettingsContainer","hasCTA","onSave","setEditing"],"mappings":"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"}
1
+ {"version":3,"file":"AccessSection.mjs","sources":["../../../../../../../../web/src/adminPortal/memberManagement/AccessSection.tsx"],"sourcesContent":["import { RBACPolicyRole } from '@stytch/core';\nimport { B2BOrganizationsMembersUpdateOptions, Member, MemberRole } from '@stytch/core/public';\nimport React, { SetStateAction, useCallback, useMemo, useRef, useState } from 'react';\nimport { Autocomplete } from '../components/Autocomplete';\nimport { FlexBox } from '../components/FlexBox';\nimport { ListEditor } from '../components/ListEditor';\nimport { Modal, useModalState } from '../components/Modal';\nimport { SettingsContainer, useSettingsContainer } from '../components/SettingsContainer';\nimport { SettingsSection } from '../components/SettingsSection';\nimport { Switch } from '../components/Switch';\nimport { Typography } from '../components/Typography';\nimport { TableItemRenderer } from '../shared/components/types';\nimport { arraysHaveSameContents } from '../utils/arraysHaveSameContents';\nimport { ROLE_ID_STYTCH_MEMBER } from '../utils/roles';\nimport { useFormState } from '../utils/useFormState';\nimport { useMutateMember } from '../utils/useMutateMember';\nimport { useRbac } from '../utils/useRbac';\nimport { useRoleAutocomplete } from '../utils/useRoleAutocomplete';\nimport { useRoleDisplayInfo } from '../utils/useRoleDisplayInfo';\nimport { useRoleSortFn } from '../utils/useRoleSortFn';\nimport { useRoles } from '../utils/useRoles';\nimport { useSelf } from '../utils/useSelf';\nimport { useStateSliceSetter } from '../utils/useStateSliceSetter';\nimport { useMemberManagementRouterController } from './MemberManagementRouter';\n\ntype RoleSourceType = MemberRole['sources'][number]['type'];\n\ninterface AccessFormState {\n isBreakglass: boolean;\n isMfaEnrolled: boolean;\n explicitRoleAssignments: string[];\n}\n\ninterface AccessSectionBodyProps {\n localState: AccessFormState;\n setLocalState: (state: SetStateAction<AccessFormState>) => void;\n remoteState: AccessFormState;\n implicitRoleAssignments: { role_id: string; sourceType: RoleSourceType }[];\n showRoleAssignment: boolean;\n isSelf: boolean;\n orgRequiresMfa: boolean;\n}\n\nconst getRoleSourceTypeDisplayName = (sourceType: RoleSourceType) => {\n switch (sourceType) {\n case 'direct_assignment':\n return 'Manual assignment';\n case 'email_assignment':\n return 'Email domain';\n case 'sso_connection':\n return 'SSO connection';\n case 'sso_connection_group':\n return 'SSO group';\n case 'scim_connection_group':\n return 'SCIM group';\n default:\n return sourceType;\n }\n};\n\nconst roleAssignmentsRowKeyExtractor = (item: { role_id: string; sourceType: RoleSourceType }): string =>\n `${item.role_id}-${item.sourceType}`;\n\nconst AccessSectionBody = ({\n localState,\n setLocalState,\n remoteState,\n implicitRoleAssignments,\n showRoleAssignment,\n isSelf,\n orgRequiresMfa,\n}: AccessSectionBodyProps) => {\n const { editing } = useSettingsContainer();\n\n const { isMfaEnrolled, explicitRoleAssignments, isBreakglass } = editing ? localState : remoteState;\n\n const handleIsMfaEnrolledChange = useStateSliceSetter(setLocalState, 'isMfaEnrolled');\n const setIsBreakglass = useStateSliceSetter(setLocalState, 'isBreakglass');\n\n const { open: openBreakGlassConfirmModal, ...breakGlassConfirmModalProps } = useModalState(() => {\n setIsBreakglass(true);\n });\n\n const handleIsBreakglassChange = useCallback(\n (value: boolean) => {\n if (value) {\n openBreakGlassConfirmModal();\n } else {\n setIsBreakglass(value);\n }\n },\n [openBreakGlassConfirmModal, setIsBreakglass],\n );\n\n const { data: canUpdateMemberRolesPerm } = useRbac('stytch.member', 'update.settings.roles');\n const { data: canUpdateMemberMfaEnrolledPerm } = useRbac('stytch.member', 'update.settings.mfa-enrolled');\n const { data: canUpdateMemberBreakglassPerm } = useRbac('stytch.member', 'update.settings.is-breakglass');\n\n const { data: canUpdateSelfMfaEnrolledPerm } = useRbac('stytch.self', 'update.settings.mfa-enrolled');\n\n const { data: canGetOrgCustomRoles } = useRbac('stytch.custom-org-roles', 'get');\n\n const canUpdateMfaEnrolled = canUpdateMemberMfaEnrolledPerm || (canUpdateSelfMfaEnrolledPerm && isSelf);\n const canUpdateRoles = canUpdateMemberRolesPerm;\n const canUpdateBreakglass = canUpdateMemberBreakglassPerm;\n\n const sortRoles = useRoleSortFn();\n\n const { selectItems: roleSelectItems, ...roleAutocompleteProps } = useRoleAutocomplete({\n excludeStytchMember: true,\n includeOrgRoles: canGetOrgCustomRoles,\n });\n const availableRoleSelectItems = roleSelectItems.filter((roleId) => !explicitRoleAssignments.includes(roleId));\n\n const { getRoleIdDisplayName } = useRoleDisplayInfo(canGetOrgCustomRoles);\n\n const stytchMemberRoleDisplayName = roleAutocompleteProps.getOptionLabel(ROLE_ID_STYTCH_MEMBER);\n\n const combinedRoleAssignments = useMemo(() => {\n return [\n ...sortRoles(implicitRoleAssignments),\n ...sortRoles(\n explicitRoleAssignments.map((roleId) => ({ role_id: roleId, sourceType: 'direct_assignment' as const })),\n ),\n ];\n }, [explicitRoleAssignments, implicitRoleAssignments, sortRoles]);\n\n const [pendingAssignments, setPendingAssignments] = useState<string[]>([]);\n const { open: openRoleAssignmentModal, ...roleAssignmentModalProps } = useModalState(() => {\n setLocalState((state) => {\n return {\n ...state,\n explicitRoleAssignments: Array.from(new Set([...state.explicitRoleAssignments, ...pendingAssignments])),\n };\n });\n });\n\n const roleAssignmentsItemRenderer: TableItemRenderer<(typeof combinedRoleAssignments)[number]>[] = useMemo(\n () => [\n {\n title: 'Role',\n getValue: (assignment) => <Typography variant=\"body2\">{getRoleIdDisplayName(assignment.role_id)}</Typography>,\n },\n {\n title: 'Source',\n getValue: (assignment) => (\n <Typography variant=\"body2\">{getRoleSourceTypeDisplayName(assignment.sourceType)}</Typography>\n ),\n },\n ],\n [getRoleIdDisplayName],\n );\n\n const handleAddRoleAssignment = useCallback(() => {\n setPendingAssignments([]);\n openRoleAssignmentModal();\n }, [openRoleAssignmentModal]);\n\n const roleAssignmentsItemActionProps = useMemo(\n () => (item: (typeof combinedRoleAssignments)[number]) =>\n item.sourceType === 'direct_assignment'\n ? {\n warningAction: {\n text: 'Revoke',\n onClick: () => {\n setLocalState((state) => {\n return {\n ...state,\n explicitRoleAssignments: state.explicitRoleAssignments.filter((roleId) => roleId !== item.role_id),\n };\n });\n },\n },\n }\n : {},\n [setLocalState],\n );\n\n return (\n <FlexBox flexDirection=\"column\" gap={2}>\n {editing && (\n <Modal\n {...breakGlassConfirmModalProps}\n title=\"Exempt Member from primary auth requirements?\"\n confirmButtonText=\"Allow\"\n warning\n >\n <Typography>\n Enabling this toggle will exempt the Member from your primary authentication policy if needed (e.g. to\n update SSO configuration in the case of a lockout).\n </Typography>\n </Modal>\n )}\n {showRoleAssignment && (\n <SettingsSection title=\"Role assignments\">\n <Modal {...roleAssignmentModalProps} title=\"Add Role assignment\" confirmButtonText=\"Add Role\">\n <FlexBox flexDirection=\"column\" gap={0.5}>\n <Typography color=\"secondary\" variant=\"caption\">\n Role\n </Typography>\n <Autocomplete\n {...roleAutocompleteProps}\n selectItems={availableRoleSelectItems}\n value={pendingAssignments}\n onChange={setPendingAssignments}\n placeholder={pendingAssignments.length > 0 ? undefined : 'Select Role'}\n />\n </FlexBox>\n </Modal>\n <Typography variant=\"body2\">\n All members are automatically assigned the {stytchMemberRoleDisplayName} Role.\n </Typography>\n <ListEditor\n items={combinedRoleAssignments}\n rowKeyExtractor={roleAssignmentsRowKeyExtractor}\n itemRenderer={roleAssignmentsItemRenderer}\n addButtonText=\"Add Role assignment\"\n hideAddButton={availableRoleSelectItems.length === 0}\n readOnly={!(editing && canUpdateRoles)}\n onAdd={handleAddRoleAssignment}\n getItemActionProps={roleAssignmentsItemActionProps}\n />\n </SettingsSection>\n )}\n <SettingsSection title=\"Require MFA\">\n {orgRequiresMfa ? (\n <Typography variant=\"body2\">MFA is required for all members.</Typography>\n ) : (\n <Switch\n readOnly={!editing || !canUpdateMfaEnrolled}\n checked={isMfaEnrolled}\n onChange={handleIsMfaEnrolledChange}\n label=\"Require MFA for this Member. When enabled, the Member will be required to set up and use MFA on each login.\"\n />\n )}\n </SettingsSection>\n <SettingsSection title=\"Exempt from primary auth requirements\">\n <Switch\n readOnly={!editing || !canUpdateBreakglass}\n checked={isBreakglass}\n onChange={handleIsBreakglassChange}\n label=\"Exempt Member from your primary authentication policy\"\n />\n </SettingsSection>\n </FlexBox>\n );\n};\n\nconst rolesCanUpdateMemberRoles = (roleIds: string[], roles: RBACPolicyRole[]) => {\n return Array.from(new Set(roleIds)).some((roleId) => {\n const role = roles.find((role) => role.role_id === roleId);\n return role?.permissions.some(\n (permission) =>\n permission.resource_id === 'stytch.member' &&\n (permission.actions.includes('update.settings.roles') || permission.actions.includes('*')),\n );\n });\n};\n\nexport const AccessSection = ({ member, orgRequiresMfa }: { member: Member; orgRequiresMfa: boolean }) => {\n const { isSelf } = useSelf();\n const isMemberSelf = isSelf(member.member_id);\n const { data: canUpdateMemberRolesPerm } = useRbac('stytch.member', 'update.settings.roles');\n const { data: canUpdateMemberBreakglassPerm } = useRbac('stytch.member', 'update.settings.is-breakglass');\n const { data: canUpdateMemberMfaEnrolledPerm } = useRbac('stytch.member', 'update.settings.mfa-enrolled');\n\n const { data: canUpdateSelfMfaEnrolledPerm } = useRbac('stytch.self', 'update.settings.mfa-enrolled');\n\n const { data: canGetOrgCustomRoles } = useRbac('stytch.custom-org-roles', 'get');\n\n const canUpdateRoles = canUpdateMemberRolesPerm;\n const canUpdateBreakglass = canUpdateMemberBreakglassPerm;\n const canUpdateMfaEnrolled =\n !orgRequiresMfa && (canUpdateMemberMfaEnrolledPerm || (canUpdateSelfMfaEnrolledPerm && isMemberSelf));\n\n const isMemberDeleted = member.status === 'deleted';\n\n const canEditSection = !isMemberDeleted && (canUpdateRoles || canUpdateBreakglass || canUpdateMfaEnrolled);\n const showRoleAssignment = !isMemberDeleted;\n\n const { explicitRoleAssignments, implicitRoleAssignments } = useMemo(() => {\n return member.roles\n .filter((role) => role.role_id !== ROLE_ID_STYTCH_MEMBER)\n .reduce<{\n explicitRoleAssignments: string[];\n implicitRoleAssignments: { role_id: string; sourceType: RoleSourceType }[];\n }>(\n (acc, role) => {\n const implicitAssignments = new Set(\n role.sources.filter((source) => source.type !== 'direct_assignment').map((source) => source.type),\n );\n for (const sourceType of implicitAssignments) {\n acc.implicitRoleAssignments.push({ role_id: role.role_id, sourceType });\n }\n\n const isExplicitAssignment = role.sources.some((source) => source.type === 'direct_assignment');\n if (isExplicitAssignment) {\n acc.explicitRoleAssignments.push(role.role_id);\n }\n\n return acc;\n },\n {\n explicitRoleAssignments: [],\n implicitRoleAssignments: [],\n },\n );\n }, [member.roles]);\n\n const remoteState = useMemo<AccessFormState>(\n () => ({\n isMfaEnrolled: member.mfa_enrolled,\n explicitRoleAssignments,\n isBreakglass: member.is_breakglass,\n }),\n [explicitRoleAssignments, member.is_breakglass, member.mfa_enrolled],\n );\n\n const { localState, setLocalState, editing, handleSetEditing } = useFormState({ remoteState });\n\n const { mutate } = useMutateMember();\n\n const lockoutConfirmDeferred = useRef<{ resolve: () => void; reject: () => void }>();\n\n const {\n open: openLockoutWarningModal,\n close: closeLockoutWarningModal,\n ...lockoutWarningModalProps\n } = useModalState(() => {\n lockoutConfirmDeferred.current?.resolve();\n lockoutConfirmDeferred.current = undefined;\n });\n const handleLockoutWarningCancel = useCallback(() => {\n lockoutConfirmDeferred.current?.reject();\n lockoutConfirmDeferred.current = undefined;\n closeLockoutWarningModal();\n }, [closeLockoutWarningModal]);\n\n const roles = useRoles(canGetOrgCustomRoles);\n\n const handleSave = useCallback(async () => {\n const memberOptions: B2BOrganizationsMembersUpdateOptions = {\n member_id: member.member_id,\n };\n\n let shouldUpdate = false;\n const setOption = <T extends keyof B2BOrganizationsMembersUpdateOptions>(\n key: T,\n value: B2BOrganizationsMembersUpdateOptions[T],\n ) => {\n memberOptions[key] = value;\n shouldUpdate = true;\n };\n\n if (localState.isMfaEnrolled !== remoteState.isMfaEnrolled) {\n setOption('mfa_enrolled', localState.isMfaEnrolled);\n }\n if (localState.isBreakglass !== remoteState.isBreakglass) {\n setOption('is_breakglass', localState.isBreakglass);\n }\n if (!arraysHaveSameContents(localState.explicitRoleAssignments, remoteState.explicitRoleAssignments)) {\n if (\n isSelf(member.member_id) &&\n roles &&\n !rolesCanUpdateMemberRoles(\n [...localState.explicitRoleAssignments, ...implicitRoleAssignments.map((role) => role.role_id)],\n roles,\n )\n ) {\n openLockoutWarningModal();\n await new Promise<void>((resolve, reject) => {\n lockoutConfirmDeferred.current = { resolve, reject };\n });\n }\n\n setOption('roles', localState.explicitRoleAssignments);\n }\n\n if (shouldUpdate) {\n await mutate(memberOptions);\n }\n }, [\n implicitRoleAssignments,\n isSelf,\n localState.explicitRoleAssignments,\n localState.isBreakglass,\n localState.isMfaEnrolled,\n member.member_id,\n mutate,\n openLockoutWarningModal,\n remoteState.explicitRoleAssignments,\n remoteState.isBreakglass,\n remoteState.isMfaEnrolled,\n roles,\n ]);\n\n const { useBlockNavigation } = useMemberManagementRouterController();\n\n return (\n <SettingsContainer\n title=\"Access requirements & permissions\"\n hasCTA={canEditSection}\n onSave={handleSave}\n useBlockNavigation={useBlockNavigation}\n editing={editing}\n setEditing={handleSetEditing}\n >\n <Modal\n {...lockoutWarningModalProps}\n close={handleLockoutWarningCancel}\n title=\"Revoke Role assignments?\"\n confirmButtonText=\"Revoke\"\n warning\n >\n <Typography>\n Changing your Role assignments will remove your permissions to manage members. You will not be able to edit\n your Role assignments to reassign permissions.\n </Typography>\n </Modal>\n <AccessSectionBody\n remoteState={remoteState}\n localState={localState}\n setLocalState={setLocalState}\n implicitRoleAssignments={implicitRoleAssignments}\n showRoleAssignment={showRoleAssignment}\n isSelf={isMemberSelf}\n orgRequiresMfa={orgRequiresMfa}\n />\n </SettingsContainer>\n );\n};\n"],"names":["getRoleSourceTypeDisplayName","sourceType","roleAssignmentsRowKeyExtractor","item","role_id","AccessSectionBody","localState","setLocalState","remoteState","implicitRoleAssignments","showRoleAssignment","isSelf","orgRequiresMfa","editing","useSettingsContainer","isMfaEnrolled","explicitRoleAssignments","isBreakglass","handleIsMfaEnrolledChange","useStateSliceSetter","setIsBreakglass","open","openBreakGlassConfirmModal","breakGlassConfirmModalProps","useModalState","handleIsBreakglassChange","useCallback","value","data","canUpdateMemberRolesPerm","useRbac","canUpdateMemberMfaEnrolledPerm","canUpdateMemberBreakglassPerm","canUpdateSelfMfaEnrolledPerm","canGetOrgCustomRoles","canUpdateMfaEnrolled","canUpdateRoles","canUpdateBreakglass","sortRoles","useRoleSortFn","selectItems","roleSelectItems","roleAutocompleteProps","useRoleAutocomplete","excludeStytchMember","includeOrgRoles","availableRoleSelectItems","filter","roleId","includes","getRoleIdDisplayName","useRoleDisplayInfo","stytchMemberRoleDisplayName","getOptionLabel","ROLE_ID_STYTCH_MEMBER","combinedRoleAssignments","useMemo","map","pendingAssignments","setPendingAssignments","useState","openRoleAssignmentModal","roleAssignmentModalProps","state","Array","from","Set","roleAssignmentsItemRenderer","title","getValue","assignment","React","Typography","variant","handleAddRoleAssignment","roleAssignmentsItemActionProps","warningAction","text","onClick","FlexBox","flexDirection","gap","Modal","confirmButtonText","warning","SettingsSection","color","Autocomplete","onChange","placeholder","length","undefined","ListEditor","items","rowKeyExtractor","itemRenderer","addButtonText","hideAddButton","readOnly","onAdd","getItemActionProps","Switch","checked","label","rolesCanUpdateMemberRoles","roleIds","roles","some","role","find","permissions","permission","resource_id","actions","AccessSection","member","useSelf","isMemberSelf","member_id","isMemberDeleted","status","canEditSection","reduce","acc","implicitAssignments","sources","source","type","push","isExplicitAssignment","mfa_enrolled","is_breakglass","handleSetEditing","useFormState","mutate","useMutateMember","lockoutConfirmDeferred","useRef","openLockoutWarningModal","close","closeLockoutWarningModal","lockoutWarningModalProps","current","resolve","handleLockoutWarningCancel","reject","useRoles","handleSave","memberOptions","shouldUpdate","setOption","key","arraysHaveSameContents","Promise","useBlockNavigation","useMemberManagementRouterController","SettingsContainer","hasCTA","onSave","setEditing"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AA2CA,MAAMA,+BAA+B,CAACC,UAAAA,GAAAA;IACpC,OAAQA,UAAAA;QACN,KAAK,mBAAA;YACH,OAAO,mBAAA;QACT,KAAK,kBAAA;YACH,OAAO,cAAA;QACT,KAAK,gBAAA;YACH,OAAO,gBAAA;QACT,KAAK,sBAAA;YACH,OAAO,WAAA;QACT,KAAK,uBAAA;YACH,OAAO,YAAA;AACT,QAAA;YACE,OAAOA,UAAAA;AACX;AACF,CAAA;AAEA,MAAMC,8BAAAA,GAAiC,CAACC,IAAAA,GACtC,CAAA,EAAGA,IAAAA,CAAKC,OAAO,CAAC,CAAC,EAAED,IAAAA,CAAKF,UAAU,CAAA,CAAE;AAEtC,MAAMI,oBAAoB,CAAC,EACzBC,UAAU,EACVC,aAAa,EACbC,WAAW,EACXC,uBAAuB,EACvBC,kBAAkB,EAClBC,MAAM,EACNC,cAAc,EACS,GAAA;IACvB,MAAM,EAAEC,OAAO,EAAE,GAAGC,oBAAAA,EAAAA;IAEpB,MAAM,EAAEC,aAAa,EAAEC,uBAAuB,EAAEC,YAAY,EAAE,GAAGJ,OAAAA,GAAUP,UAAAA,GAAaE,WAAAA;IAExF,MAAMU,yBAAAA,GAA4BC,oBAAoBZ,aAAAA,EAAe,eAAA,CAAA;IACrE,MAAMa,eAAAA,GAAkBD,oBAAoBZ,aAAAA,EAAe,cAAA,CAAA;AAE3D,IAAA,MAAM,EAAEc,IAAAA,EAAMC,0BAA0B,EAAE,GAAGC,2BAAAA,EAA6B,GAAGC,aAAAA,CAAc,IAAA;QACzFJ,eAAAA,CAAgB,IAAA,CAAA;AAClB,IAAA,CAAA,CAAA;IAEA,MAAMK,wBAAAA,GAA2BC,YAC/B,CAACC,KAAAA,GAAAA;AACC,QAAA,IAAIA,KAAAA,EAAO;AACTL,YAAAA,0BAAAA,EAAAA;QACF,CAAA,MAAO;YACLF,eAAAA,CAAgBO,KAAAA,CAAAA;AAClB,QAAA;IACF,CAAA,EACA;AAACL,QAAAA,0BAAAA;AAA4BF,QAAAA;AAAgB,KAAA,CAAA;AAG/C,IAAA,MAAM,EAAEQ,IAAAA,EAAMC,wBAAwB,EAAE,GAAGC,QAAQ,eAAA,EAAiB,uBAAA,CAAA;AACpE,IAAA,MAAM,EAAEF,IAAAA,EAAMG,8BAA8B,EAAE,GAAGD,QAAQ,eAAA,EAAiB,8BAAA,CAAA;AAC1E,IAAA,MAAM,EAAEF,IAAAA,EAAMI,6BAA6B,EAAE,GAAGF,QAAQ,eAAA,EAAiB,+BAAA,CAAA;AAEzE,IAAA,MAAM,EAAEF,IAAAA,EAAMK,4BAA4B,EAAE,GAAGH,QAAQ,aAAA,EAAe,8BAAA,CAAA;AAEtE,IAAA,MAAM,EAAEF,IAAAA,EAAMM,oBAAoB,EAAE,GAAGJ,QAAQ,yBAAA,EAA2B,KAAA,CAAA;IAE1E,MAAMK,oBAAAA,GAAuBJ,kCAAmCE,4BAAAA,IAAgCtB,MAAAA;AAChG,IAAA,MAAMyB,cAAAA,GAAiBP,wBAAAA;AACvB,IAAA,MAAMQ,mBAAAA,GAAsBL,6BAAAA;AAE5B,IAAA,MAAMM,SAAAA,GAAYC,aAAAA,EAAAA;AAElB,IAAA,MAAM,EAAEC,WAAAA,EAAaC,eAAe,EAAE,GAAGC,qBAAAA,EAAuB,GAAGC,mBAAAA,CAAoB;QACrFC,mBAAAA,EAAqB,IAAA;QACrBC,eAAAA,EAAiBX;AACnB,KAAA,CAAA;IACA,MAAMY,wBAAAA,GAA2BL,gBAAgBM,MAAM,CAAC,CAACC,MAAAA,GAAW,CAAChC,uBAAAA,CAAwBiC,QAAQ,CAACD,MAAAA,CAAAA,CAAAA;AAEtG,IAAA,MAAM,EAAEE,oBAAoB,EAAE,GAAGC,kBAAAA,CAAmBjB,oBAAAA,CAAAA;IAEpD,MAAMkB,2BAAAA,GAA8BV,qBAAAA,CAAsBW,cAAc,CAACC,qBAAAA,CAAAA;AAEzE,IAAA,MAAMC,0BAA0BC,OAAAA,CAAQ,IAAA;QACtC,OAAO;eACFlB,SAAAA,CAAU7B,uBAAAA,CAAAA;AACV6B,YAAAA,GAAAA,SAAAA,CACDtB,uBAAAA,CAAwByC,GAAG,CAAC,CAACT,UAAY;oBAAE5C,OAAAA,EAAS4C,MAAAA;oBAAQ/C,UAAAA,EAAY;iBAA6B,CAAA,CAAA;AAExG,SAAA;IACH,CAAA,EAAG;AAACe,QAAAA,uBAAAA;AAAyBP,QAAAA,uBAAAA;AAAyB6B,QAAAA;AAAU,KAAA,CAAA;AAEhE,IAAA,MAAM,CAACoB,kBAAAA,EAAoBC,qBAAAA,CAAsB,GAAGC,SAAmB,EAAE,CAAA;AACzE,IAAA,MAAM,EAAEvC,IAAAA,EAAMwC,uBAAuB,EAAE,GAAGC,wBAAAA,EAA0B,GAAGtC,aAAAA,CAAc,IAAA;AACnFjB,QAAAA,aAAAA,CAAc,CAACwD,KAAAA,GAAAA;YACb,OAAO;AACL,gBAAA,GAAGA,KAAK;AACR/C,gBAAAA,uBAAAA,EAAyBgD,KAAAA,CAAMC,IAAI,CAAC,IAAIC,GAAAA,CAAI;AAAIH,oBAAAA,GAAAA,KAAAA,CAAM/C,uBAAuB;AAAK0C,oBAAAA,GAAAA;AAAmB,iBAAA,CAAA;AACvG,aAAA;AACF,QAAA,CAAA,CAAA;AACF,IAAA,CAAA,CAAA;IAEA,MAAMS,2BAAAA,GAA6FX,QACjG,IAAM;AACJ,YAAA;gBACEY,KAAAA,EAAO,MAAA;gBACPC,QAAAA,EAAU,CAACC,2BAAeC,cAAA,CAAA,aAAA,CAACC,UAAAA,EAAAA;wBAAWC,OAAAA,EAAQ;AAASvB,qBAAAA,EAAAA,oBAAAA,CAAqBoB,WAAWlE,OAAO,CAAA;AAChG,aAAA;AACA,YAAA;gBACEgE,KAAAA,EAAO,QAAA;gBACPC,QAAAA,EAAU,CAACC,2BACTC,cAAA,CAAA,aAAA,CAACC,UAAAA,EAAAA;wBAAWC,OAAAA,EAAQ;AAASzE,qBAAAA,EAAAA,4BAAAA,CAA6BsE,WAAWrE,UAAU,CAAA;AAEnF;SACD,EACD;AAACiD,QAAAA;AAAqB,KAAA,CAAA;AAGxB,IAAA,MAAMwB,0BAA0BhD,WAAAA,CAAY,IAAA;AAC1CiC,QAAAA,qBAAAA,CAAsB,EAAE,CAAA;AACxBE,QAAAA,uBAAAA,EAAAA;IACF,CAAA,EAAG;AAACA,QAAAA;AAAwB,KAAA,CAAA;IAE5B,MAAMc,8BAAAA,GAAiCnB,QACrC,IAAM,CAACrD,OACLA,IAAAA,CAAKF,UAAU,KAAK,mBAAA,GAChB;gBACE2E,aAAAA,EAAe;oBACbC,IAAAA,EAAM,QAAA;oBACNC,OAAAA,EAAS,IAAA;AACPvE,wBAAAA,aAAAA,CAAc,CAACwD,KAAAA,GAAAA;4BACb,OAAO;AACL,gCAAA,GAAGA,KAAK;gCACR/C,uBAAAA,EAAyB+C,KAAAA,CAAM/C,uBAAuB,CAAC+B,MAAM,CAAC,CAACC,MAAAA,GAAWA,MAAAA,KAAW7C,IAAAA,CAAKC,OAAO;AACnG,6BAAA;AACF,wBAAA,CAAA,CAAA;AACF,oBAAA;AACF;AACF,aAAA,GACA,EAAC,EACP;AAACG,QAAAA;AAAc,KAAA,CAAA;AAGjB,IAAA,qBACEgE,cAAA,CAAA,aAAA,CAACQ,OAAAA,EAAAA;QAAQC,aAAAA,EAAc,QAAA;QAASC,GAAAA,EAAK;AAClCpE,KAAAA,EAAAA,OAAAA,kBACC0D,cAAA,CAAA,aAAA,CAACW,KAAAA,EAAAA;AACE,QAAA,GAAG3D,2BAA2B;QAC/B6C,KAAAA,EAAM,+CAAA;QACNe,iBAAAA,EAAkB,OAAA;QAClBC,OAAAA,EAAAA;qBAEAb,cAAA,CAAA,aAAA,CAACC,UAAAA,EAAAA,IAAAA,EAAW,4JAAA,CAAA,CAAA,EAMf9D,kBAAAA,kBACC6D,cAAA,CAAA,aAAA,CAACc,eAAAA,EAAAA;QAAgBjB,KAAAA,EAAM;qBACrBG,cAAA,CAAA,aAAA,CAACW,KAAAA,EAAAA;AAAO,QAAA,GAAGpB,wBAAwB;QAAEM,KAAAA,EAAM,qBAAA;QAAsBe,iBAAAA,EAAkB;qBACjFZ,cAAA,CAAA,aAAA,CAACQ,OAAAA,EAAAA;QAAQC,aAAAA,EAAc,QAAA;QAASC,GAAAA,EAAK;qBACnCV,cAAA,CAAA,aAAA,CAACC,UAAAA,EAAAA;QAAWc,KAAAA,EAAM,WAAA;QAAYb,OAAAA,EAAQ;AAAU,KAAA,EAAA,MAAA,CAAA,gBAGhDF,cAAA,CAAA,aAAA,CAACgB,YAAAA,EAAAA;AACE,QAAA,GAAG7C,qBAAqB;QACzBF,WAAAA,EAAaM,wBAAAA;QACbnB,KAAAA,EAAO+B,kBAAAA;QACP8B,QAAAA,EAAU7B,qBAAAA;AACV8B,QAAAA,WAAAA,EAAa/B,kBAAAA,CAAmBgC,MAAM,GAAG,CAAA,GAAIC,SAAAA,GAAY;wBAI/DpB,cAAA,CAAA,aAAA,CAACC,UAAAA,EAAAA;QAAWC,OAAAA,EAAQ;OAAQ,6CAAA,EACkBrB,2BAAAA,EAA4B,yBAE1EmB,cAAA,CAAA,aAAA,CAACqB,UAAAA,EAAAA;QACCC,KAAAA,EAAOtC,uBAAAA;QACPuC,eAAAA,EAAiB5F,8BAAAA;QACjB6F,YAAAA,EAAc5B,2BAAAA;QACd6B,aAAAA,EAAc,qBAAA;QACdC,aAAAA,EAAenD,wBAAAA,CAAyB4C,MAAM,KAAK,CAAA;QACnDQ,QAAAA,EAAU,EAAErF,OAAAA,IAAWuB,cAAa,CAAA;QACpC+D,KAAAA,EAAOzB,uBAAAA;QACP0B,kBAAAA,EAAoBzB;uBAI1BJ,cAAA,CAAA,aAAA,CAACc,eAAAA,EAAAA;QAAgBjB,KAAAA,EAAM;AACpBxD,KAAAA,EAAAA,cAAAA,iBACC2D,cAAA,CAAA,aAAA,CAACC,UAAAA,EAAAA;QAAWC,OAAAA,EAAQ;AAAQ,KAAA,EAAA,kCAAA,CAAA,iBAE5BF,cAAA,CAAA,aAAA,CAAC8B,MAAAA,EAAAA;QACCH,QAAAA,EAAU,CAACrF,WAAW,CAACsB,oBAAAA;QACvBmE,OAAAA,EAASvF,aAAAA;QACTyE,QAAAA,EAAUtE,yBAAAA;QACVqF,KAAAA,EAAM;uBAIZhC,cAAA,CAAA,aAAA,CAACc,eAAAA,EAAAA;QAAgBjB,KAAAA,EAAM;qBACrBG,cAAA,CAAA,aAAA,CAAC8B,MAAAA,EAAAA;QACCH,QAAAA,EAAU,CAACrF,WAAW,CAACwB,mBAAAA;QACvBiE,OAAAA,EAASrF,YAAAA;QACTuE,QAAAA,EAAU/D,wBAAAA;QACV8E,KAAAA,EAAM;;AAKhB,CAAA;AAEA,MAAMC,yBAAAA,GAA4B,CAACC,OAAAA,EAAmBC,KAAAA,GAAAA;IACpD,OAAO1C,KAAAA,CAAMC,IAAI,CAAC,IAAIC,IAAIuC,OAAAA,CAAAA,CAAAA,CAAUE,IAAI,CAAC,CAAC3D,MAAAA,GAAAA;QACxC,MAAM4D,IAAAA,GAAOF,MAAMG,IAAI,CAAC,CAACD,IAAAA,GAASA,IAAAA,CAAKxG,OAAO,KAAK4C,MAAAA,CAAAA;QACnD,OAAO4D,IAAAA,EAAME,YAAYH,IAAAA,CACvB,CAACI,aACCA,UAAAA,CAAWC,WAAW,KAAK,eAAA,KAC1BD,WAAWE,OAAO,CAAChE,QAAQ,CAAC,uBAAA,CAAA,IAA4B8D,WAAWE,OAAO,CAAChE,QAAQ,CAAC,GAAA,CAAG,CAAA,CAAA;AAE9F,IAAA,CAAA,CAAA;AACF,CAAA;MAEaiE,aAAAA,GAAgB,CAAC,EAAEC,MAAM,EAAEvG,cAAc,EAA+C,GAAA;IACnG,MAAM,EAAED,MAAM,EAAE,GAAGyG,OAAAA,EAAAA;IACnB,MAAMC,YAAAA,GAAe1G,MAAAA,CAAOwG,MAAAA,CAAOG,SAAS,CAAA;AAC5C,IAAA,MAAM,EAAE1F,IAAAA,EAAMC,wBAAwB,EAAE,GAAGC,QAAQ,eAAA,EAAiB,uBAAA,CAAA;AACpE,IAAA,MAAM,EAAEF,IAAAA,EAAMI,6BAA6B,EAAE,GAAGF,QAAQ,eAAA,EAAiB,+BAAA,CAAA;AACzE,IAAA,MAAM,EAAEF,IAAAA,EAAMG,8BAA8B,EAAE,GAAGD,QAAQ,eAAA,EAAiB,8BAAA,CAAA;AAE1E,IAAA,MAAM,EAAEF,IAAAA,EAAMK,4BAA4B,EAAE,GAAGH,QAAQ,aAAA,EAAe,8BAAA,CAAA;AAEtE,IAAA,MAAM,EAAEF,IAAAA,EAAMM,oBAAoB,EAAE,GAAGJ,QAAQ,yBAAA,EAA2B,KAAA,CAAA;AAE1E,IAAA,MAAMM,cAAAA,GAAiBP,wBAAAA;AACvB,IAAA,MAAMQ,mBAAAA,GAAsBL,6BAAAA;AAC5B,IAAA,MAAMG,uBACJ,CAACvB,cAAAA,KAAmBmB,8BAAAA,IAAmCE,gCAAgCoF,YAAY,CAAA;IAErG,MAAME,eAAAA,GAAkBJ,MAAAA,CAAOK,MAAM,KAAK,SAAA;AAE1C,IAAA,MAAMC,iBAAiB,CAACF,eAAAA,KAAoBnF,cAAAA,IAAkBC,uBAAuBF,oBAAmB,CAAA;AACxG,IAAA,MAAMzB,qBAAqB,CAAC6G,eAAAA;AAE5B,IAAA,MAAM,EAAEvG,uBAAuB,EAAEP,uBAAuB,EAAE,GAAG+C,OAAAA,CAAQ,IAAA;AACnE,QAAA,OAAO2D,MAAAA,CAAOT,KAAK,CAChB3D,MAAM,CAAC,CAAC6D,IAAAA,GAASA,IAAAA,CAAKxG,OAAO,KAAKkD,qBAAAA,CAAAA,CAClCoE,MAAM,CAIL,CAACC,GAAAA,EAAKf,IAAAA,GAAAA;AACJ,YAAA,MAAMgB,sBAAsB,IAAI1D,GAAAA,CAC9B0C,KAAKiB,OAAO,CAAC9E,MAAM,CAAC,CAAC+E,SAAWA,MAAAA,CAAOC,IAAI,KAAK,mBAAA,CAAA,CAAqBtE,GAAG,CAAC,CAACqE,MAAAA,GAAWA,OAAOC,IAAI,CAAA,CAAA;YAElG,KAAK,MAAM9H,cAAc2H,mBAAAA,CAAqB;gBAC5CD,GAAAA,CAAIlH,uBAAuB,CAACuH,IAAI,CAAC;AAAE5H,oBAAAA,OAAAA,EAASwG,KAAKxG,OAAO;AAAEH,oBAAAA;AAAW,iBAAA,CAAA;AACvE,YAAA;YAEA,MAAMgI,oBAAAA,GAAuBrB,IAAAA,CAAKiB,OAAO,CAAClB,IAAI,CAAC,CAACmB,MAAAA,GAAWA,MAAAA,CAAOC,IAAI,KAAK,mBAAA,CAAA;AAC3E,YAAA,IAAIE,oBAAAA,EAAsB;AACxBN,gBAAAA,GAAAA,CAAI3G,uBAAuB,CAACgH,IAAI,CAACpB,KAAKxG,OAAO,CAAA;AAC/C,YAAA;YAEA,OAAOuH,GAAAA;QACT,CAAA,EACA;AACE3G,YAAAA,uBAAAA,EAAyB,EAAE;AAC3BP,YAAAA,uBAAAA,EAAyB;AAC3B,SAAA,CAAA;IAEN,CAAA,EAAG;AAAC0G,QAAAA,MAAAA,CAAOT;AAAM,KAAA,CAAA;IAEjB,MAAMlG,WAAAA,GAAcgD,OAAAA,CAClB,KAAO;AACLzC,YAAAA,aAAAA,EAAeoG,OAAOe,YAAY;AAClClH,YAAAA,uBAAAA;AACAC,YAAAA,YAAAA,EAAckG,OAAOgB;AACvB,SAAA,CAAA,EACA;AAACnH,QAAAA,uBAAAA;AAAyBmG,QAAAA,MAAAA,CAAOgB,aAAa;AAAEhB,QAAAA,MAAAA,CAAOe;AAAa,KAAA,CAAA;IAGtE,MAAM,EAAE5H,UAAU,EAAEC,aAAa,EAAEM,OAAO,EAAEuH,gBAAgB,EAAE,GAAGC,YAAAA,CAAa;AAAE7H,QAAAA;AAAY,KAAA,CAAA;IAE5F,MAAM,EAAE8H,MAAM,EAAE,GAAGC,eAAAA,EAAAA;AAEnB,IAAA,MAAMC,sBAAAA,GAAyBC,MAAAA,EAAAA;IAE/B,MAAM,EACJpH,IAAAA,EAAMqH,uBAAuB,EAC7BC,KAAAA,EAAOC,wBAAwB,EAC/B,GAAGC,wBAAAA,EACJ,GAAGrH,aAAAA,CAAc,IAAA;AAChBgH,QAAAA,sBAAAA,CAAuBM,OAAO,EAAEC,OAAAA,EAAAA;AAChCP,QAAAA,sBAAAA,CAAuBM,OAAO,GAAGnD,SAAAA;AACnC,IAAA,CAAA,CAAA;AACA,IAAA,MAAMqD,6BAA6BtH,WAAAA,CAAY,IAAA;AAC7C8G,QAAAA,sBAAAA,CAAuBM,OAAO,EAAEG,MAAAA,EAAAA;AAChCT,QAAAA,sBAAAA,CAAuBM,OAAO,GAAGnD,SAAAA;AACjCiD,QAAAA,wBAAAA,EAAAA;IACF,CAAA,EAAG;AAACA,QAAAA;AAAyB,KAAA,CAAA;AAE7B,IAAA,MAAMlC,QAAQwC,QAAAA,CAAShH,oBAAAA,CAAAA;AAEvB,IAAA,MAAMiH,aAAazH,WAAAA,CAAY,UAAA;AAC7B,QAAA,MAAM0H,aAAAA,GAAsD;AAC1D9B,YAAAA,SAAAA,EAAWH,OAAOG;AACpB,SAAA;AAEA,QAAA,IAAI+B,YAAAA,GAAe,KAAA;QACnB,MAAMC,SAAAA,GAAY,CAChBC,GAAAA,EACA5H,KAAAA,GAAAA;YAEAyH,aAAa,CAACG,IAAI,GAAG5H,KAAAA;YACrB0H,YAAAA,GAAe,IAAA;AACjB,QAAA,CAAA;AAEA,QAAA,IAAI/I,UAAAA,CAAWS,aAAa,KAAKP,WAAAA,CAAYO,aAAa,EAAE;YAC1DuI,SAAAA,CAAU,cAAA,EAAgBhJ,WAAWS,aAAa,CAAA;AACpD,QAAA;AACA,QAAA,IAAIT,UAAAA,CAAWW,YAAY,KAAKT,WAAAA,CAAYS,YAAY,EAAE;YACxDqI,SAAAA,CAAU,eAAA,EAAiBhJ,WAAWW,YAAY,CAAA;AACpD,QAAA;AACA,QAAA,IAAI,CAACuI,sBAAAA,CAAuBlJ,UAAAA,CAAWU,uBAAuB,EAAER,WAAAA,CAAYQ,uBAAuB,CAAA,EAAG;AACpG,YAAA,IACEL,OAAOwG,MAAAA,CAAOG,SAAS,CAAA,IACvBZ,KAAAA,IACA,CAACF,yBAAAA,CACC;AAAIlG,gBAAAA,GAAAA,UAAAA,CAAWU,uBAAuB;AAAKP,gBAAAA,GAAAA,uBAAAA,CAAwBgD,GAAG,CAAC,CAACmD,IAAAA,GAASA,KAAKxG,OAAO;AAAE,aAAA,EAC/FsG,KAAAA,CAAAA,EAEF;AACAgC,gBAAAA,uBAAAA,EAAAA;gBACA,MAAM,IAAIe,OAAAA,CAAc,CAACV,OAAAA,EAASE,MAAAA,GAAAA;AAChCT,oBAAAA,sBAAAA,CAAuBM,OAAO,GAAG;AAAEC,wBAAAA,OAAAA;AAASE,wBAAAA;AAAO,qBAAA;AACrD,gBAAA,CAAA,CAAA;AACF,YAAA;YAEAK,SAAAA,CAAU,OAAA,EAAShJ,WAAWU,uBAAuB,CAAA;AACvD,QAAA;AAEA,QAAA,IAAIqI,YAAAA,EAAc;AAChB,YAAA,MAAMf,MAAAA,CAAOc,aAAAA,CAAAA;AACf,QAAA;IACF,CAAA,EAAG;AACD3I,QAAAA,uBAAAA;AACAE,QAAAA,MAAAA;AACAL,QAAAA,UAAAA,CAAWU,uBAAuB;AAClCV,QAAAA,UAAAA,CAAWW,YAAY;AACvBX,QAAAA,UAAAA,CAAWS,aAAa;AACxBoG,QAAAA,MAAAA,CAAOG,SAAS;AAChBgB,QAAAA,MAAAA;AACAI,QAAAA,uBAAAA;AACAlI,QAAAA,WAAAA,CAAYQ,uBAAuB;AACnCR,QAAAA,WAAAA,CAAYS,YAAY;AACxBT,QAAAA,WAAAA,CAAYO,aAAa;AACzB2F,QAAAA;AACD,KAAA,CAAA;IAED,MAAM,EAAEgD,kBAAkB,EAAE,GAAGC,mCAAAA,EAAAA;AAE/B,IAAA,qBACEpF,cAAA,CAAA,aAAA,CAACqF,iBAAAA,EAAAA;QACCxF,KAAAA,EAAM,mCAAA;QACNyF,MAAAA,EAAQpC,cAAAA;QACRqC,MAAAA,EAAQX,UAAAA;QACRO,kBAAAA,EAAoBA,kBAAAA;QACpB7I,OAAAA,EAASA,OAAAA;QACTkJ,UAAAA,EAAY3B;qBAEZ7D,cAAA,CAAA,aAAA,CAACW,KAAAA,EAAAA;AACE,QAAA,GAAG2D,wBAAwB;QAC5BF,KAAAA,EAAOK,0BAAAA;QACP5E,KAAAA,EAAM,0BAAA;QACNe,iBAAAA,EAAkB,QAAA;QAClBC,OAAAA,EAAAA;qBAEAb,cAAA,CAAA,aAAA,CAACC,UAAAA,EAAAA,IAAAA,EAAW,8KAKdD,cAAA,CAAA,aAAA,CAAClE,iBAAAA,EAAAA;QACCG,WAAAA,EAAaA,WAAAA;QACbF,UAAAA,EAAYA,UAAAA;QACZC,aAAAA,EAAeA,aAAAA;QACfE,uBAAAA,EAAyBA,uBAAAA;QACzBC,kBAAAA,EAAoBA,kBAAAA;QACpBC,MAAAA,EAAQ0G,YAAAA;QACRzG,cAAAA,EAAgBA;;AAIxB;;;;"}
@@ -5,6 +5,7 @@ import { Input } from '../components/Input.mjs';
5
5
  import { Modal } from '../components/Modal.mjs';
6
6
  import { ROLE_ID_STYTCH_MEMBER } from '../utils/roles.mjs';
7
7
  import { useRoleAutocomplete } from '../utils/useRoleAutocomplete.mjs';
8
+ import { useRbac } from '../utils/useRbac.mjs';
8
9
  import { useModalState } from '../shared/components/Modal.mjs';
9
10
 
10
11
  const defaultInviteRoles = [];
@@ -41,8 +42,10 @@ const useInviteModal = (inviteUser)=>{
41
42
  };
42
43
  };
43
44
  const InviteModal = ({ modalState, inviteEmail, inviteName, inviteRoles, setInviteEmail, setInviteName, setInviteRoles })=>{
45
+ const { data: canGetOrgCustomRoles } = useRbac('stytch.custom-org-roles', 'get');
44
46
  const roleAutocompleteProps = useRoleAutocomplete({
45
- excludeStytchMember: true
47
+ excludeStytchMember: true,
48
+ includeOrgRoles: canGetOrgCustomRoles ?? false
46
49
  });
47
50
  const stytchMemberRoleDisplayName = roleAutocompleteProps.getOptionLabel(ROLE_ID_STYTCH_MEMBER);
48
51
  const formIsValid = inviteEmail.trim().length > 0;
@@ -1 +1 @@
1
- {"version":3,"file":"InviteModal.mjs","sources":["../../../../../../../../web/src/adminPortal/memberManagement/InviteModal.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport { passwordManagerDisableAutofillProps } from '../../utils/passwordManagerDisableAutofillProps';\nimport { Autocomplete } from '../components/Autocomplete';\nimport { Input } from '../components/Input';\nimport { Modal, ModalStateType, useModalState } from '../components/Modal';\nimport { ROLE_ID_STYTCH_MEMBER } from '../utils/roles';\nimport { useRoleAutocomplete } from '../utils/useRoleAutocomplete';\nimport type { SendInviteEmail } from './useSendInviteEmail';\n\nconst defaultInviteRoles: string[] = [];\n\ninterface InviteModalProps {\n modalState: Omit<ModalStateType, 'open'>;\n inviteName: string;\n setInviteName: (value: string) => void;\n inviteEmail: string;\n setInviteEmail: (value: string) => void;\n inviteRoles: string[];\n setInviteRoles: (value: string[]) => void;\n}\n\nexport const useInviteModal = (inviteUser: SendInviteEmail) => {\n const [inviteName, setInviteName] = useState('');\n const [inviteEmail, setInviteEmail] = useState('');\n const [inviteRoles, setInviteRoles] = useState(defaultInviteRoles);\n\n const { open: openInviteModal, ...modalState } = useModalState(async () => {\n await inviteUser(inviteEmail, { name: inviteName, roles: inviteRoles });\n modalState.close();\n });\n\n const handleInviteClick = useCallback(() => {\n setInviteName('');\n setInviteEmail('');\n setInviteRoles(defaultInviteRoles);\n\n openInviteModal();\n }, [openInviteModal]);\n\n return {\n handleInviteClick,\n inviteModalProps: {\n modalState,\n inviteName,\n setInviteName,\n inviteEmail,\n setInviteEmail,\n inviteRoles,\n setInviteRoles,\n } satisfies InviteModalProps,\n };\n};\n\nexport const InviteModal = ({\n modalState,\n inviteEmail,\n inviteName,\n inviteRoles,\n setInviteEmail,\n setInviteName,\n setInviteRoles,\n}: InviteModalProps) => {\n const roleAutocompleteProps = useRoleAutocomplete({ excludeStytchMember: true });\n\n const stytchMemberRoleDisplayName = roleAutocompleteProps.getOptionLabel(ROLE_ID_STYTCH_MEMBER);\n\n const formIsValid = inviteEmail.trim().length > 0;\n\n return (\n <Modal\n {...modalState}\n keepOpenOnConfirm\n title=\"Invite Member\"\n confirmButtonText=\"Invite\"\n disableConfirm={!formIsValid}\n >\n <Input label=\"Name (optional)\" placeholder=\"Enter name\" value={inviteName} onChange={setInviteName} />\n <Input\n label=\"Email address\"\n placeholder=\"Enter email address\"\n value={inviteEmail}\n onChange={setInviteEmail}\n inputProps={passwordManagerDisableAutofillProps}\n />\n <Autocomplete\n {...roleAutocompleteProps}\n placeholder={inviteRoles.length > 0 ? undefined : 'Select Role'}\n label=\"Role\"\n caption={`All members are automatically assigned the ${stytchMemberRoleDisplayName} Role. Select additional Roles to assign more permissions.`}\n value={inviteRoles}\n onChange={setInviteRoles}\n />\n </Modal>\n );\n};\n"],"names":["defaultInviteRoles","useInviteModal","inviteUser","inviteName","setInviteName","useState","inviteEmail","setInviteEmail","inviteRoles","setInviteRoles","open","openInviteModal","modalState","useModalState","name","roles","close","handleInviteClick","useCallback","inviteModalProps","InviteModal","roleAutocompleteProps","useRoleAutocomplete","excludeStytchMember","stytchMemberRoleDisplayName","getOptionLabel","ROLE_ID_STYTCH_MEMBER","formIsValid","trim","length","React","Modal","keepOpenOnConfirm","title","confirmButtonText","disableConfirm","Input","label","placeholder","value","onChange","inputProps","passwordManagerDisableAutofillProps","Autocomplete","undefined","caption"],"mappings":";;;;;;;;;AASA,MAAMA,qBAA+B,EAAE;AAYhC,MAAMC,iBAAiB,CAACC,UAAAA,GAAAA;AAC7B,IAAA,MAAM,CAACC,UAAAA,EAAYC,aAAAA,CAAc,GAAGC,QAAAA,CAAS,EAAA,CAAA;AAC7C,IAAA,MAAM,CAACC,WAAAA,EAAaC,cAAAA,CAAe,GAAGF,QAAAA,CAAS,EAAA,CAAA;AAC/C,IAAA,MAAM,CAACG,WAAAA,EAAaC,cAAAA,CAAe,GAAGJ,QAAAA,CAASL,kBAAAA,CAAAA;AAE/C,IAAA,MAAM,EAAEU,IAAAA,EAAMC,eAAe,EAAE,GAAGC,UAAAA,EAAY,GAAGC,aAAAA,CAAc,UAAA;AAC7D,QAAA,MAAMX,WAAWI,WAAAA,EAAa;YAAEQ,IAAAA,EAAMX,UAAAA;YAAYY,KAAAA,EAAOP;AAAY,SAAA,CAAA;AACrEI,QAAAA,UAAAA,CAAWI,KAAK,EAAA;AAClB,IAAA,CAAA,CAAA;AAEA,IAAA,MAAMC,oBAAoBC,WAAAA,CAAY,IAAA;QACpCd,aAAAA,CAAc,EAAA,CAAA;QACdG,cAAAA,CAAe,EAAA,CAAA;QACfE,cAAAA,CAAeT,kBAAAA,CAAAA;AAEfW,QAAAA,eAAAA,EAAAA;IACF,CAAA,EAAG;AAACA,QAAAA;AAAgB,KAAA,CAAA;IAEpB,OAAO;AACLM,QAAAA,iBAAAA;QACAE,gBAAAA,EAAkB;AAChBP,YAAAA,UAAAA;AACAT,YAAAA,UAAAA;AACAC,YAAAA,aAAAA;AACAE,YAAAA,WAAAA;AACAC,YAAAA,cAAAA;AACAC,YAAAA,WAAAA;AACAC,YAAAA;AACF;AACF,KAAA;AACF;MAEaW,WAAAA,GAAc,CAAC,EAC1BR,UAAU,EACVN,WAAW,EACXH,UAAU,EACVK,WAAW,EACXD,cAAc,EACdH,aAAa,EACbK,cAAc,EACG,GAAA;AACjB,IAAA,MAAMY,wBAAwBC,mBAAAA,CAAoB;QAAEC,mBAAAA,EAAqB;AAAK,KAAA,CAAA;IAE9E,MAAMC,2BAAAA,GAA8BH,qBAAAA,CAAsBI,cAAc,CAACC,qBAAAA,CAAAA;AAEzE,IAAA,MAAMC,WAAAA,GAAcrB,WAAAA,CAAYsB,IAAI,EAAA,CAAGC,MAAM,GAAG,CAAA;AAEhD,IAAA,qBACEC,cAAA,CAAA,aAAA,CAACC,KAAAA,EAAAA;AACE,QAAA,GAAGnB,UAAU;QACdoB,iBAAAA,EAAAA,IAAAA;QACAC,KAAAA,EAAM,eAAA;QACNC,iBAAAA,EAAkB,QAAA;AAClBC,QAAAA,cAAAA,EAAgB,CAACR;qBAEjBG,cAAA,CAAA,aAAA,CAACM,KAAAA,EAAAA;QAAMC,KAAAA,EAAM,iBAAA;QAAkBC,WAAAA,EAAY,YAAA;QAAaC,KAAAA,EAAOpC,UAAAA;QAAYqC,QAAAA,EAAUpC;sBACrF0B,cAAA,CAAA,aAAA,CAACM,KAAAA,EAAAA;QACCC,KAAAA,EAAM,eAAA;QACNC,WAAAA,EAAY,qBAAA;QACZC,KAAAA,EAAOjC,WAAAA;QACPkC,QAAAA,EAAUjC,cAAAA;QACVkC,UAAAA,EAAYC;sBAEdZ,cAAA,CAAA,aAAA,CAACa,YAAAA,EAAAA;AACE,QAAA,GAAGtB,qBAAqB;AACzBiB,QAAAA,WAAAA,EAAa9B,WAAAA,CAAYqB,MAAM,GAAG,CAAA,GAAIe,SAAAA,GAAY,aAAA;QAClDP,KAAAA,EAAM,MAAA;AACNQ,QAAAA,OAAAA,EAAS,CAAC,2CAA2C,EAAErB,2BAAAA,CAA4B,0DAA0D,CAAC;QAC9Ie,KAAAA,EAAO/B,WAAAA;QACPgC,QAAAA,EAAU/B;;AAIlB;;;;"}
1
+ {"version":3,"file":"InviteModal.mjs","sources":["../../../../../../../../web/src/adminPortal/memberManagement/InviteModal.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport { passwordManagerDisableAutofillProps } from '../../utils/passwordManagerDisableAutofillProps';\nimport { Autocomplete } from '../components/Autocomplete';\nimport { Input } from '../components/Input';\nimport { Modal, ModalStateType, useModalState } from '../components/Modal';\nimport { ROLE_ID_STYTCH_MEMBER } from '../utils/roles';\nimport { useRoleAutocomplete } from '../utils/useRoleAutocomplete';\nimport type { SendInviteEmail } from './useSendInviteEmail';\nimport { useRbac } from '../utils/useRbac';\n\nconst defaultInviteRoles: string[] = [];\n\ninterface InviteModalProps {\n modalState: Omit<ModalStateType, 'open'>;\n inviteName: string;\n setInviteName: (value: string) => void;\n inviteEmail: string;\n setInviteEmail: (value: string) => void;\n inviteRoles: string[];\n setInviteRoles: (value: string[]) => void;\n}\n\nexport const useInviteModal = (inviteUser: SendInviteEmail) => {\n const [inviteName, setInviteName] = useState('');\n const [inviteEmail, setInviteEmail] = useState('');\n const [inviteRoles, setInviteRoles] = useState(defaultInviteRoles);\n\n const { open: openInviteModal, ...modalState } = useModalState(async () => {\n await inviteUser(inviteEmail, { name: inviteName, roles: inviteRoles });\n modalState.close();\n });\n\n const handleInviteClick = useCallback(() => {\n setInviteName('');\n setInviteEmail('');\n setInviteRoles(defaultInviteRoles);\n\n openInviteModal();\n }, [openInviteModal]);\n\n return {\n handleInviteClick,\n inviteModalProps: {\n modalState,\n inviteName,\n setInviteName,\n inviteEmail,\n setInviteEmail,\n inviteRoles,\n setInviteRoles,\n } satisfies InviteModalProps,\n };\n};\n\nexport const InviteModal = ({\n modalState,\n inviteEmail,\n inviteName,\n inviteRoles,\n setInviteEmail,\n setInviteName,\n setInviteRoles,\n}: InviteModalProps) => {\n const { data: canGetOrgCustomRoles } = useRbac('stytch.custom-org-roles', 'get');\n\n const roleAutocompleteProps = useRoleAutocomplete({\n excludeStytchMember: true,\n includeOrgRoles: canGetOrgCustomRoles ?? false,\n });\n\n const stytchMemberRoleDisplayName = roleAutocompleteProps.getOptionLabel(ROLE_ID_STYTCH_MEMBER);\n\n const formIsValid = inviteEmail.trim().length > 0;\n\n return (\n <Modal\n {...modalState}\n keepOpenOnConfirm\n title=\"Invite Member\"\n confirmButtonText=\"Invite\"\n disableConfirm={!formIsValid}\n >\n <Input label=\"Name (optional)\" placeholder=\"Enter name\" value={inviteName} onChange={setInviteName} />\n <Input\n label=\"Email address\"\n placeholder=\"Enter email address\"\n value={inviteEmail}\n onChange={setInviteEmail}\n inputProps={passwordManagerDisableAutofillProps}\n />\n <Autocomplete\n {...roleAutocompleteProps}\n placeholder={inviteRoles.length > 0 ? undefined : 'Select Role'}\n label=\"Role\"\n caption={`All members are automatically assigned the ${stytchMemberRoleDisplayName} Role. Select additional Roles to assign more permissions.`}\n value={inviteRoles}\n onChange={setInviteRoles}\n />\n </Modal>\n );\n};\n"],"names":["defaultInviteRoles","useInviteModal","inviteUser","inviteName","setInviteName","useState","inviteEmail","setInviteEmail","inviteRoles","setInviteRoles","open","openInviteModal","modalState","useModalState","name","roles","close","handleInviteClick","useCallback","inviteModalProps","InviteModal","data","canGetOrgCustomRoles","useRbac","roleAutocompleteProps","useRoleAutocomplete","excludeStytchMember","includeOrgRoles","stytchMemberRoleDisplayName","getOptionLabel","ROLE_ID_STYTCH_MEMBER","formIsValid","trim","length","React","Modal","keepOpenOnConfirm","title","confirmButtonText","disableConfirm","Input","label","placeholder","value","onChange","inputProps","passwordManagerDisableAutofillProps","Autocomplete","undefined","caption"],"mappings":";;;;;;;;;;AAUA,MAAMA,qBAA+B,EAAE;AAYhC,MAAMC,iBAAiB,CAACC,UAAAA,GAAAA;AAC7B,IAAA,MAAM,CAACC,UAAAA,EAAYC,aAAAA,CAAc,GAAGC,QAAAA,CAAS,EAAA,CAAA;AAC7C,IAAA,MAAM,CAACC,WAAAA,EAAaC,cAAAA,CAAe,GAAGF,QAAAA,CAAS,EAAA,CAAA;AAC/C,IAAA,MAAM,CAACG,WAAAA,EAAaC,cAAAA,CAAe,GAAGJ,QAAAA,CAASL,kBAAAA,CAAAA;AAE/C,IAAA,MAAM,EAAEU,IAAAA,EAAMC,eAAe,EAAE,GAAGC,UAAAA,EAAY,GAAGC,aAAAA,CAAc,UAAA;AAC7D,QAAA,MAAMX,WAAWI,WAAAA,EAAa;YAAEQ,IAAAA,EAAMX,UAAAA;YAAYY,KAAAA,EAAOP;AAAY,SAAA,CAAA;AACrEI,QAAAA,UAAAA,CAAWI,KAAK,EAAA;AAClB,IAAA,CAAA,CAAA;AAEA,IAAA,MAAMC,oBAAoBC,WAAAA,CAAY,IAAA;QACpCd,aAAAA,CAAc,EAAA,CAAA;QACdG,cAAAA,CAAe,EAAA,CAAA;QACfE,cAAAA,CAAeT,kBAAAA,CAAAA;AAEfW,QAAAA,eAAAA,EAAAA;IACF,CAAA,EAAG;AAACA,QAAAA;AAAgB,KAAA,CAAA;IAEpB,OAAO;AACLM,QAAAA,iBAAAA;QACAE,gBAAAA,EAAkB;AAChBP,YAAAA,UAAAA;AACAT,YAAAA,UAAAA;AACAC,YAAAA,aAAAA;AACAE,YAAAA,WAAAA;AACAC,YAAAA,cAAAA;AACAC,YAAAA,WAAAA;AACAC,YAAAA;AACF;AACF,KAAA;AACF;MAEaW,WAAAA,GAAc,CAAC,EAC1BR,UAAU,EACVN,WAAW,EACXH,UAAU,EACVK,WAAW,EACXD,cAAc,EACdH,aAAa,EACbK,cAAc,EACG,GAAA;AACjB,IAAA,MAAM,EAAEY,IAAAA,EAAMC,oBAAoB,EAAE,GAAGC,QAAQ,yBAAA,EAA2B,KAAA,CAAA;AAE1E,IAAA,MAAMC,wBAAwBC,mBAAAA,CAAoB;QAChDC,mBAAAA,EAAqB,IAAA;AACrBC,QAAAA,eAAAA,EAAiBL,oBAAAA,IAAwB;AAC3C,KAAA,CAAA;IAEA,MAAMM,2BAAAA,GAA8BJ,qBAAAA,CAAsBK,cAAc,CAACC,qBAAAA,CAAAA;AAEzE,IAAA,MAAMC,WAAAA,GAAczB,WAAAA,CAAY0B,IAAI,EAAA,CAAGC,MAAM,GAAG,CAAA;AAEhD,IAAA,qBACEC,cAAA,CAAA,aAAA,CAACC,KAAAA,EAAAA;AACE,QAAA,GAAGvB,UAAU;QACdwB,iBAAAA,EAAAA,IAAAA;QACAC,KAAAA,EAAM,eAAA;QACNC,iBAAAA,EAAkB,QAAA;AAClBC,QAAAA,cAAAA,EAAgB,CAACR;qBAEjBG,cAAA,CAAA,aAAA,CAACM,KAAAA,EAAAA;QAAMC,KAAAA,EAAM,iBAAA;QAAkBC,WAAAA,EAAY,YAAA;QAAaC,KAAAA,EAAOxC,UAAAA;QAAYyC,QAAAA,EAAUxC;sBACrF8B,cAAA,CAAA,aAAA,CAACM,KAAAA,EAAAA;QACCC,KAAAA,EAAM,eAAA;QACNC,WAAAA,EAAY,qBAAA;QACZC,KAAAA,EAAOrC,WAAAA;QACPsC,QAAAA,EAAUrC,cAAAA;QACVsC,UAAAA,EAAYC;sBAEdZ,cAAA,CAAA,aAAA,CAACa,YAAAA,EAAAA;AACE,QAAA,GAAGvB,qBAAqB;AACzBkB,QAAAA,WAAAA,EAAalC,WAAAA,CAAYyB,MAAM,GAAG,CAAA,GAAIe,SAAAA,GAAY,aAAA;QAClDP,KAAAA,EAAM,MAAA;AACNQ,QAAAA,OAAAA,EAAS,CAAC,2CAA2C,EAAErB,2BAAAA,CAA4B,0DAA0D,CAAC;QAC9Ie,KAAAA,EAAOnC,WAAAA;QACPoC,QAAAA,EAAUnC;;AAIlB;;;;"}
@@ -113,6 +113,7 @@ const MemberListScreen = ()=>{
113
113
  const { data: canUpdateSelfDefaultMfaMethodPerm } = useRbac('stytch.self', 'update.settings.default-mfa-method');
114
114
  const { data: canDeleteSelfPerm } = useRbac('stytch.self', 'delete');
115
115
  const { data: canRevokeSelfSessionsPerm } = useRbac('stytch.self', 'revoke-sessions');
116
+ const { data: canGetOrgCustomRoles } = useRbac('stytch.custom-org-roles', 'get');
116
117
  const canUpdateMember = canDeleteMemberMfaPhonePerm || canDeleteMemberMfaTotpPerm || canDeleteMemberPasswordPerm || canUpdateMemberMfaPhonePerm || canUpdateMemberNamePerm || canUpdateMemberUntrustedMetadataPerm || canUpdateMemberIsBreakglassPerm || canUpdateMemberMfaEnrolledPerm || canUpdateMemberDefaultMfaMethodPerm || canUpdateMemberRolesPerm || canRevokeMemberSessionsPerm;
117
118
  const canUpdateSelf = canUpdateSelfNamePerm || canUpdateSelfUntrustedMetadataPerm || canUpdateSelfMfaPhonePerm || canDeleteSelfMfaPhonePerm || canDeleteSelfPasswordPerm || canUpdateSelfMfaEnrolledPerm || canUpdateSelfDefaultMfaMethodPerm || canDeleteSelfPerm || canDeleteSelfMfaTotpPerm || canRevokeSelfSessionsPerm;
118
119
  const canActivateOrDeactivate = canCreateMemberPerm || canDeleteMemberPerm;
@@ -122,7 +123,8 @@ const MemberListScreen = ()=>{
122
123
  const currentMemberId = self?.member_id;
123
124
  const canInviteMember = canCreateMemberPerm && orgAllowsEmailInvites;
124
125
  const roleAutocompleteProps = useRoleAutocomplete({
125
- excludeStytchMember: true
126
+ excludeStytchMember: true,
127
+ includeOrgRoles: canGetOrgCustomRoles
126
128
  });
127
129
  const allRolesSet = useMemo(()=>new Set(roleAutocompleteProps.selectItems), [
128
130
  roleAutocompleteProps.selectItems
@@ -1 +1 @@
1
- {"version":3,"file":"MemberListScreen.mjs","sources":["../../../../../../../../web/src/adminPortal/memberManagement/MemberListScreen.tsx"],"sourcesContent":["import Add from '@mui/icons-material/Add';\nimport CheckCircle from '@mui/icons-material/CheckCircle';\nimport DeleteOutlined from '@mui/icons-material/DeleteOutlined';\nimport EditOutlined from '@mui/icons-material/EditOutlined';\nimport VisibilityOutlined from '@mui/icons-material/VisibilityOutlined';\nimport EmailOutlined from '@mui/icons-material/EmailOutlined';\nimport { B2BOrganizationsMembersSearchResponse, Member } from '@stytch/core/public';\nimport React, { useCallback, useMemo, useState } from 'react';\nimport useSWRInfinite from 'swr/infinite';\nimport { extractErrorMessage } from '../../utils/extractErrorMessage';\nimport { Action, useActionMenu } from '../components/ActionMenu';\nimport { Alert } from '../components/Alert';\nimport { Button } from '../components/Button';\nimport { FilterMenu, FilterMenuProps } from '../components/FilterMenu';\nimport { FlexBox } from '../components/FlexBox';\nimport { PaginatedTable, PaginatedTableProps } from '../components/PaginatedTable';\nimport { RolesList } from '../components/RolesList';\nimport { SearchBar } from '../components/SearchBar';\nimport { Typography } from '../components/Typography';\nimport { TableItemRenderer } from '../shared/components/types';\nimport { decorateCurrentMemberName } from '../utils/decorateCurrentMemberName';\nimport { fetchMembers } from '../utils/fetchMembers';\nimport { useDebouncedState } from '../utils/useDebouncedState';\nimport { itemsPerPageOptions, useItemsPerPage } from '../utils/useItemsPerPage';\nimport { useOrgInfo } from '../utils/useOrgInfo';\nimport { usePagination } from '../utils/usePagination';\nimport { usePersistentFilter } from '../utils/usePersistentFilter';\nimport { useRbac } from '../utils/useRbac';\nimport { useRoleAutocomplete } from '../utils/useRoleAutocomplete';\nimport { useSelf } from '../utils/useSelf';\nimport { useStytchClient } from '../utils/useStytchClient';\nimport { InviteModal, useInviteModal } from './InviteModal';\nimport { useMemberManagementRouterController } from './MemberManagementRouter';\nimport { KnownMemberStatus, allMemberStatuses, allMemberStatusesSet } from './MemberStatus';\nimport { getMemberStatusDisplayName } from './getMemberStatusDisplayName';\nimport { useMemberActivation } from './useMemberActivation';\nimport { useSendInviteEmail } from './useSendInviteEmail';\nimport { useToast } from '../shared/components/Toast';\n\nconst MIN_EMAIL_FUZZY_SEARCH_LENGTH = 3;\n\nconst MEMBER_LIST_TABLE_VIEW_ID = 'adminPortalMemberList';\n\nconst DEFAULT_STATUSES_FILTER: ReadonlySet<KnownMemberStatus> = new Set(['active', 'invited', 'pending']);\n\nconst REINVITE_MEMBER_STATUS: ReadonlySet<string> = new Set<KnownMemberStatus>(['invited', 'pending']);\n\nconst allStatusesFilterItems = allMemberStatuses.map((status) => ({\n label: getMemberStatusDisplayName(status),\n value: status,\n}));\n\nexport const useMembers = ({\n limit,\n email: emailRaw,\n roles,\n statuses,\n}: {\n limit: number;\n email: string | undefined;\n roles: string[] | undefined;\n statuses: KnownMemberStatus[] | undefined;\n}) => {\n const client = useStytchClient();\n const orgInfo = useOrgInfo();\n\n const email = emailRaw && emailRaw.length >= MIN_EMAIL_FUZZY_SEARCH_LENGTH ? emailRaw : undefined;\n\n return useSWRInfinite(\n (index, prevData: B2BOrganizationsMembersSearchResponse | null) => {\n if (prevData && !prevData.results_metadata.next_cursor) {\n return null;\n }\n\n return {\n orgId: orgInfo.data?.organization_id,\n method: 'members.search',\n limit,\n email,\n // Stabilize the query key by sorting roles and statuses deterministically\n roles: roles?.slice().sort(),\n statuses: statuses?.slice().sort(),\n cursor: prevData?.results_metadata.next_cursor,\n };\n },\n fetchMembers(client),\n { revalidateFirstPage: false },\n );\n};\n\ninterface Column<T> extends TableItemRenderer<T> {\n id: string;\n}\n\nconst getMemberId = (item: Member) => item.member_id;\n\ninterface ColumnTitleWithFilterProps<T> extends Pick<FilterMenuProps<T>, 'items' | 'value' | 'onChange'> {\n title: string;\n}\n\nconst ColumnTitleWithFilter = <T extends string>({ items, onChange, value, title }: ColumnTitleWithFilterProps<T>) => {\n const [container, setContainer] = useState<HTMLElement | null>(null);\n\n return (\n <div ref={setContainer}>\n <FlexBox gap={1} alignItems=\"center\">\n {title}\n <FilterMenu anchorEl={container ?? undefined} items={items} value={value} onChange={onChange} />\n </FlexBox>\n </div>\n );\n};\n\nconst emptySet: ReadonlySet<string> = new Set();\n\nexport const MemberListScreen = () => {\n const { navigate } = useMemberManagementRouterController();\n\n const { data: canCreateMemberPerm } = useRbac('stytch.member', 'create');\n const { data: canUpdateMemberIsBreakglassPerm } = useRbac('stytch.member', 'update.settings.is-breakglass');\n const { data: canUpdateMemberRolesPerm } = useRbac('stytch.member', 'update.settings.roles');\n\n const { data: canUpdateMemberNamePerm } = useRbac('stytch.member', 'update.info.name');\n const { data: canUpdateMemberUntrustedMetadataPerm } = useRbac('stytch.member', 'update.info.untrusted-metadata');\n const { data: canUpdateMemberMfaPhonePerm } = useRbac('stytch.member', 'update.info.mfa-phone');\n const { data: canDeleteMemberMfaPhonePerm } = useRbac('stytch.member', 'update.info.delete.mfa-phone');\n const { data: canDeleteMemberMfaTotpPerm } = useRbac('stytch.member', 'update.info.delete.mfa-totp');\n const { data: canDeleteMemberPasswordPerm } = useRbac('stytch.member', 'update.info.delete.password');\n const { data: canUpdateMemberMfaEnrolledPerm } = useRbac('stytch.member', 'update.settings.mfa-enrolled');\n const { data: canUpdateMemberDefaultMfaMethodPerm } = useRbac('stytch.member', 'update.settings.default-mfa-method');\n const { data: canDeleteMemberPerm } = useRbac('stytch.member', 'delete');\n const { data: canRevokeMemberSessionsPerm } = useRbac('stytch.member', 'revoke-sessions');\n\n const { data: canUpdateSelfNamePerm } = useRbac('stytch.self', 'update.info.name');\n const { data: canUpdateSelfUntrustedMetadataPerm } = useRbac('stytch.self', 'update.info.untrusted-metadata');\n const { data: canUpdateSelfMfaPhonePerm } = useRbac('stytch.self', 'update.info.mfa-phone');\n const { data: canDeleteSelfMfaPhonePerm } = useRbac('stytch.self', 'update.info.delete.mfa-phone');\n const { data: canDeleteSelfMfaTotpPerm } = useRbac('stytch.self', 'update.info.delete.mfa-totp');\n const { data: canDeleteSelfPasswordPerm } = useRbac('stytch.self', 'update.info.delete.password');\n const { data: canUpdateSelfMfaEnrolledPerm } = useRbac('stytch.self', 'update.settings.mfa-enrolled');\n const { data: canUpdateSelfDefaultMfaMethodPerm } = useRbac('stytch.self', 'update.settings.default-mfa-method');\n const { data: canDeleteSelfPerm } = useRbac('stytch.self', 'delete');\n const { data: canRevokeSelfSessionsPerm } = useRbac('stytch.self', 'revoke-sessions');\n\n const canUpdateMember =\n canDeleteMemberMfaPhonePerm ||\n canDeleteMemberMfaTotpPerm ||\n canDeleteMemberPasswordPerm ||\n canUpdateMemberMfaPhonePerm ||\n canUpdateMemberNamePerm ||\n canUpdateMemberUntrustedMetadataPerm ||\n canUpdateMemberIsBreakglassPerm ||\n canUpdateMemberMfaEnrolledPerm ||\n canUpdateMemberDefaultMfaMethodPerm ||\n canUpdateMemberRolesPerm ||\n canRevokeMemberSessionsPerm;\n\n const canUpdateSelf =\n canUpdateSelfNamePerm ||\n canUpdateSelfUntrustedMetadataPerm ||\n canUpdateSelfMfaPhonePerm ||\n canDeleteSelfMfaPhonePerm ||\n canDeleteSelfPasswordPerm ||\n canUpdateSelfMfaEnrolledPerm ||\n canUpdateSelfDefaultMfaMethodPerm ||\n canDeleteSelfPerm ||\n canDeleteSelfMfaTotpPerm ||\n canRevokeSelfSessionsPerm;\n\n const canActivateOrDeactivate = canCreateMemberPerm || canDeleteMemberPerm;\n\n const orgInfo = useOrgInfo();\n const orgAllowsEmailInvites = orgInfo.data && orgInfo.data.email_invites !== 'NOT_ALLOWED';\n\n const { self } = useSelf();\n const currentMemberId = self?.member_id;\n\n const canInviteMember = canCreateMemberPerm && orgAllowsEmailInvites;\n\n const roleAutocompleteProps = useRoleAutocomplete({ excludeStytchMember: true });\n const allRolesSet = useMemo(() => new Set(roleAutocompleteProps.selectItems), [roleAutocompleteProps.selectItems]);\n const allRolesFilterItems = useMemo(() => {\n return roleAutocompleteProps.selectItems.map((roleId) => ({\n label: roleAutocompleteProps.getOptionLabel(roleId),\n value: roleId,\n }));\n }, [roleAutocompleteProps]);\n\n const [filterRoles, setFilterRoles] = usePersistentFilter({\n viewId: MEMBER_LIST_TABLE_VIEW_ID,\n fieldId: 'role',\n defaultValue: emptySet,\n permittedValues: allRolesSet,\n });\n const [filterStatuses, setFilterStatuses] = usePersistentFilter({\n viewId: MEMBER_LIST_TABLE_VIEW_ID,\n fieldId: 'status',\n defaultValue: DEFAULT_STATUSES_FILTER,\n permittedValues: allMemberStatusesSet,\n });\n\n const itemRenderer: Column<Member>[] = useMemo(\n () => [\n {\n id: 'name',\n title: 'Name',\n getValue: ({ name, member_id }) => {\n return member_id === currentMemberId ? decorateCurrentMemberName(name) : name;\n },\n width: 200,\n },\n {\n id: 'email',\n title: 'Email',\n getValue: ({ email_address }) => {\n return email_address;\n },\n width: 200,\n },\n {\n id: 'role',\n title: 'Role',\n getValue: ({ roles }) => {\n return <RolesList hideStytchMemberWithOtherRoles roles={roles} />;\n },\n renderTitle: () => (\n <ColumnTitleWithFilter\n title=\"Role\"\n items={allRolesFilterItems}\n value={filterRoles}\n onChange={setFilterRoles}\n />\n ),\n },\n {\n id: 'status',\n title: 'Status',\n getValue: ({ status }) => {\n return getMemberStatusDisplayName(status);\n },\n renderTitle: () => (\n <ColumnTitleWithFilter\n title=\"Status\"\n items={allStatusesFilterItems}\n value={filterStatuses}\n onChange={setFilterStatuses}\n />\n ),\n width: 150,\n },\n ],\n [allRolesFilterItems, currentMemberId, filterRoles, filterStatuses, setFilterRoles, setFilterStatuses],\n );\n\n const [filterText, setFilterText, pendingFilterText] = useDebouncedState('');\n\n const [itemsPerPage, handleItemsPerPageChange] = useItemsPerPage({\n viewId: MEMBER_LIST_TABLE_VIEW_ID,\n });\n\n const { data, error, isLoading, setSize, size, mutate } = useMembers({\n limit: itemsPerPage,\n email: filterText || undefined,\n roles: filterRoles.size > 0 ? Array.from(filterRoles) : undefined,\n statuses: filterStatuses.size > 0 ? Array.from(filterStatuses) : undefined,\n });\n\n const resultsMetadata = data?.at(-1)?.results_metadata;\n\n // `size` is already effectively a page count, so we can act as if we only\n // have one item per page\n const { currentPage, setCurrentPage } = usePagination({\n itemsCount: size,\n itemsPerPage: 1,\n });\n\n const tableProps = {\n currentPage,\n setCurrentPage,\n onRowClick: (id) => navigate({ screen: 'memberDetails', params: { memberId: id } }),\n rowsPerPage: itemsPerPage,\n rowsPerPageOptions: itemsPerPageOptions,\n onRowsPerPageChange: handleItemsPerPageChange,\n items: useMemo(() => data?.flatMap((page) => page.members) ?? [], [data]),\n loadNext: useCallback(() => setSize((size) => size + 1), [setSize]),\n metadata: useMemo(\n () => ({\n cursor: resultsMetadata?.next_cursor ?? '__none',\n total: resultsMetadata?.total ?? 0,\n }),\n [resultsMetadata?.next_cursor, resultsMetadata?.total],\n ),\n } satisfies Partial<PaginatedTableProps<Member>>;\n\n const { openToast } = useToast();\n const sendInviteEmail = useSendInviteEmail({ onSuccess: mutate });\n const { handleInviteClick, inviteModalProps } = useInviteModal(sendInviteEmail);\n\n const handleEdit = useCallback(\n (member: Member) => {\n navigate({ screen: 'memberDetails', params: { memberId: member.member_id } });\n },\n [navigate],\n );\n\n const { openModal, modal } = useMemberActivation(mutate);\n\n const handleActivateDeactivateMember = useCallback(\n (member: Member) => {\n openModal(member);\n },\n [openModal],\n );\n\n const actions = useMemo(() => {\n const getDeleteAction = (member: Member) => {\n const isSelf = currentMemberId === member.member_id;\n switch (member.status) {\n case 'invited':\n if (canDeleteMemberPerm || (canDeleteSelfPerm && isSelf)) {\n return 'revoke-invite';\n }\n break;\n case 'active':\n if (canDeleteMemberPerm || (canDeleteSelfPerm && isSelf)) {\n return 'deactivate';\n }\n break;\n case 'deleted':\n if (canCreateMemberPerm && member.email_address_verified) {\n return 'reactivate';\n }\n break;\n }\n };\n\n const canEdit = (member: Member) => {\n return (currentMemberId === member.member_id ? canUpdateSelf : canUpdateMember) ?? false;\n };\n return [\n {\n key: 'view',\n label: 'View member',\n icon: <VisibilityOutlined />,\n onClick: handleEdit,\n isVisible: (member) => !canEdit(member),\n },\n {\n key: 'edit',\n label: 'Edit member',\n icon: <EditOutlined />,\n onClick: handleEdit,\n isVisible: (member) => canEdit(member),\n },\n {\n key: 'resend-invite-email',\n label: 'Resend invite email',\n icon: <EmailOutlined />,\n onClick: (member) =>\n sendInviteEmail(member.email_address).catch((error: unknown) => {\n const message = extractErrorMessage(error);\n if (message) {\n openToast({ text: message, type: 'error' });\n }\n }),\n isVisible: (member) => Boolean(canInviteMember) && REINVITE_MEMBER_STATUS.has(member.status),\n },\n {\n key: 'revoke-invite',\n label: 'Revoke invite',\n icon: <DeleteOutlined />,\n onClick: handleActivateDeactivateMember,\n isDangerous: true,\n isVisible: (member) => getDeleteAction(member) === 'revoke-invite',\n },\n {\n key: 'deactivate',\n label: 'Deactivate',\n icon: <DeleteOutlined />,\n onClick: handleActivateDeactivateMember,\n isDangerous: true,\n isVisible: (member) => getDeleteAction(member) === 'deactivate',\n },\n {\n key: 'reactivate',\n label: 'Reactivate',\n icon: <CheckCircle />,\n onClick: handleActivateDeactivateMember,\n isVisible: (member) => getDeleteAction(member) === 'reactivate',\n },\n ] satisfies Action<Member>[];\n }, [\n canCreateMemberPerm,\n canDeleteMemberPerm,\n canDeleteSelfPerm,\n canInviteMember,\n canUpdateMember,\n canUpdateSelf,\n currentMemberId,\n handleActivateDeactivateMember,\n handleEdit,\n openToast,\n sendInviteEmail,\n ]);\n\n const { getItemActionProps } = useActionMenu<Member>({\n actions,\n idPrefix: 'member',\n getId: getMemberId,\n });\n\n return (\n <FlexBox flexDirection=\"column\" gap={3}>\n {canActivateOrDeactivate && modal}\n <FlexBox alignItems=\"center\" justifyContent=\"space-between\">\n <Typography variant=\"h1\">Members</Typography>\n {canInviteMember && (\n <>\n <InviteModal {...inviteModalProps} />\n <Button compact variant=\"primary\" startIcon={<Add />} onClick={handleInviteClick}>\n Invite\n </Button>\n </>\n )}\n </FlexBox>\n <SearchBar placeholder=\"Search by email\" value={pendingFilterText} onChange={setFilterText} />\n {error ? (\n <Alert>{extractErrorMessage(error) ?? 'There was an error loading the Members list.'}</Alert>\n ) : (\n <PaginatedTable\n {...tableProps}\n itemRenderer={itemRenderer}\n isLoading={isLoading}\n getItemActionProps={getItemActionProps}\n rowKeyExtractor={getMemberId}\n titleVariant=\"h4\"\n />\n )}\n </FlexBox>\n );\n};\n"],"names":["MIN_EMAIL_FUZZY_SEARCH_LENGTH","MEMBER_LIST_TABLE_VIEW_ID","DEFAULT_STATUSES_FILTER","Set","REINVITE_MEMBER_STATUS","allStatusesFilterItems","allMemberStatuses","map","status","label","getMemberStatusDisplayName","value","useMembers","limit","email","emailRaw","roles","statuses","client","useStytchClient","orgInfo","useOrgInfo","length","undefined","useSWRInfinite","index","prevData","results_metadata","next_cursor","orgId","data","organization_id","method","slice","sort","cursor","fetchMembers","revalidateFirstPage","getMemberId","item","member_id","ColumnTitleWithFilter","items","onChange","title","container","setContainer","useState","React","div","ref","FlexBox","gap","alignItems","FilterMenu","anchorEl","emptySet","MemberListScreen","navigate","useMemberManagementRouterController","canCreateMemberPerm","useRbac","canUpdateMemberIsBreakglassPerm","canUpdateMemberRolesPerm","canUpdateMemberNamePerm","canUpdateMemberUntrustedMetadataPerm","canUpdateMemberMfaPhonePerm","canDeleteMemberMfaPhonePerm","canDeleteMemberMfaTotpPerm","canDeleteMemberPasswordPerm","canUpdateMemberMfaEnrolledPerm","canUpdateMemberDefaultMfaMethodPerm","canDeleteMemberPerm","canRevokeMemberSessionsPerm","canUpdateSelfNamePerm","canUpdateSelfUntrustedMetadataPerm","canUpdateSelfMfaPhonePerm","canDeleteSelfMfaPhonePerm","canDeleteSelfMfaTotpPerm","canDeleteSelfPasswordPerm","canUpdateSelfMfaEnrolledPerm","canUpdateSelfDefaultMfaMethodPerm","canDeleteSelfPerm","canRevokeSelfSessionsPerm","canUpdateMember","canUpdateSelf","canActivateOrDeactivate","orgAllowsEmailInvites","email_invites","self","useSelf","currentMemberId","canInviteMember","roleAutocompleteProps","useRoleAutocomplete","excludeStytchMember","allRolesSet","useMemo","selectItems","allRolesFilterItems","roleId","getOptionLabel","filterRoles","setFilterRoles","usePersistentFilter","viewId","fieldId","defaultValue","permittedValues","filterStatuses","setFilterStatuses","allMemberStatusesSet","itemRenderer","id","getValue","name","decorateCurrentMemberName","width","email_address","RolesList","hideStytchMemberWithOtherRoles","renderTitle","filterText","setFilterText","pendingFilterText","useDebouncedState","itemsPerPage","handleItemsPerPageChange","useItemsPerPage","error","isLoading","setSize","size","mutate","Array","from","resultsMetadata","at","currentPage","setCurrentPage","usePagination","itemsCount","tableProps","onRowClick","screen","params","memberId","rowsPerPage","rowsPerPageOptions","itemsPerPageOptions","onRowsPerPageChange","flatMap","page","members","loadNext","useCallback","metadata","total","openToast","useToast","sendInviteEmail","useSendInviteEmail","onSuccess","handleInviteClick","inviteModalProps","useInviteModal","handleEdit","member","openModal","modal","useMemberActivation","handleActivateDeactivateMember","actions","getDeleteAction","isSelf","email_address_verified","canEdit","key","icon","VisibilityOutlined","onClick","isVisible","EditOutlined","EmailOutlined","catch","message","extractErrorMessage","text","type","Boolean","has","DeleteOutlined","isDangerous","CheckCircle","getItemActionProps","useActionMenu","idPrefix","getId","flexDirection","justifyContent","Typography","variant","InviteModal","Button","compact","startIcon","Add","SearchBar","placeholder","Alert","PaginatedTable","rowKeyExtractor","titleVariant"],"mappings":"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"}
1
+ {"version":3,"file":"MemberListScreen.mjs","sources":["../../../../../../../../web/src/adminPortal/memberManagement/MemberListScreen.tsx"],"sourcesContent":["import Add from '@mui/icons-material/Add';\nimport CheckCircle from '@mui/icons-material/CheckCircle';\nimport DeleteOutlined from '@mui/icons-material/DeleteOutlined';\nimport EditOutlined from '@mui/icons-material/EditOutlined';\nimport VisibilityOutlined from '@mui/icons-material/VisibilityOutlined';\nimport EmailOutlined from '@mui/icons-material/EmailOutlined';\nimport { B2BOrganizationsMembersSearchResponse, Member } from '@stytch/core/public';\nimport React, { useCallback, useMemo, useState } from 'react';\nimport useSWRInfinite from 'swr/infinite';\nimport { extractErrorMessage } from '../../utils/extractErrorMessage';\nimport { Action, useActionMenu } from '../components/ActionMenu';\nimport { Alert } from '../components/Alert';\nimport { Button } from '../components/Button';\nimport { FilterMenu, FilterMenuProps } from '../components/FilterMenu';\nimport { FlexBox } from '../components/FlexBox';\nimport { PaginatedTable, PaginatedTableProps } from '../components/PaginatedTable';\nimport { RolesList } from '../components/RolesList';\nimport { SearchBar } from '../components/SearchBar';\nimport { Typography } from '../components/Typography';\nimport { TableItemRenderer } from '../shared/components/types';\nimport { decorateCurrentMemberName } from '../utils/decorateCurrentMemberName';\nimport { fetchMembers } from '../utils/fetchMembers';\nimport { useDebouncedState } from '../utils/useDebouncedState';\nimport { itemsPerPageOptions, useItemsPerPage } from '../utils/useItemsPerPage';\nimport { useOrgInfo } from '../utils/useOrgInfo';\nimport { usePagination } from '../utils/usePagination';\nimport { usePersistentFilter } from '../utils/usePersistentFilter';\nimport { useRbac } from '../utils/useRbac';\nimport { useRoleAutocomplete } from '../utils/useRoleAutocomplete';\nimport { useSelf } from '../utils/useSelf';\nimport { useStytchClient } from '../utils/useStytchClient';\nimport { InviteModal, useInviteModal } from './InviteModal';\nimport { useMemberManagementRouterController } from './MemberManagementRouter';\nimport { KnownMemberStatus, allMemberStatuses, allMemberStatusesSet } from './MemberStatus';\nimport { getMemberStatusDisplayName } from './getMemberStatusDisplayName';\nimport { useMemberActivation } from './useMemberActivation';\nimport { useSendInviteEmail } from './useSendInviteEmail';\nimport { useToast } from '../shared/components/Toast';\n\nconst MIN_EMAIL_FUZZY_SEARCH_LENGTH = 3;\n\nconst MEMBER_LIST_TABLE_VIEW_ID = 'adminPortalMemberList';\n\nconst DEFAULT_STATUSES_FILTER: ReadonlySet<KnownMemberStatus> = new Set(['active', 'invited', 'pending']);\n\nconst REINVITE_MEMBER_STATUS: ReadonlySet<string> = new Set<KnownMemberStatus>(['invited', 'pending']);\n\nconst allStatusesFilterItems = allMemberStatuses.map((status) => ({\n label: getMemberStatusDisplayName(status),\n value: status,\n}));\n\nexport const useMembers = ({\n limit,\n email: emailRaw,\n roles,\n statuses,\n}: {\n limit: number;\n email: string | undefined;\n roles: string[] | undefined;\n statuses: KnownMemberStatus[] | undefined;\n}) => {\n const client = useStytchClient();\n const orgInfo = useOrgInfo();\n\n const email = emailRaw && emailRaw.length >= MIN_EMAIL_FUZZY_SEARCH_LENGTH ? emailRaw : undefined;\n\n return useSWRInfinite(\n (index, prevData: B2BOrganizationsMembersSearchResponse | null) => {\n if (prevData && !prevData.results_metadata.next_cursor) {\n return null;\n }\n\n return {\n orgId: orgInfo.data?.organization_id,\n method: 'members.search',\n limit,\n email,\n // Stabilize the query key by sorting roles and statuses deterministically\n roles: roles?.slice().sort(),\n statuses: statuses?.slice().sort(),\n cursor: prevData?.results_metadata.next_cursor,\n };\n },\n fetchMembers(client),\n { revalidateFirstPage: false },\n );\n};\n\ninterface Column<T> extends TableItemRenderer<T> {\n id: string;\n}\n\nconst getMemberId = (item: Member) => item.member_id;\n\ninterface ColumnTitleWithFilterProps<T> extends Pick<FilterMenuProps<T>, 'items' | 'value' | 'onChange'> {\n title: string;\n}\n\nconst ColumnTitleWithFilter = <T extends string>({ items, onChange, value, title }: ColumnTitleWithFilterProps<T>) => {\n const [container, setContainer] = useState<HTMLElement | null>(null);\n\n return (\n <div ref={setContainer}>\n <FlexBox gap={1} alignItems=\"center\">\n {title}\n <FilterMenu anchorEl={container ?? undefined} items={items} value={value} onChange={onChange} />\n </FlexBox>\n </div>\n );\n};\n\nconst emptySet: ReadonlySet<string> = new Set();\n\nexport const MemberListScreen = () => {\n const { navigate } = useMemberManagementRouterController();\n\n const { data: canCreateMemberPerm } = useRbac('stytch.member', 'create');\n const { data: canUpdateMemberIsBreakglassPerm } = useRbac('stytch.member', 'update.settings.is-breakglass');\n const { data: canUpdateMemberRolesPerm } = useRbac('stytch.member', 'update.settings.roles');\n\n const { data: canUpdateMemberNamePerm } = useRbac('stytch.member', 'update.info.name');\n const { data: canUpdateMemberUntrustedMetadataPerm } = useRbac('stytch.member', 'update.info.untrusted-metadata');\n const { data: canUpdateMemberMfaPhonePerm } = useRbac('stytch.member', 'update.info.mfa-phone');\n const { data: canDeleteMemberMfaPhonePerm } = useRbac('stytch.member', 'update.info.delete.mfa-phone');\n const { data: canDeleteMemberMfaTotpPerm } = useRbac('stytch.member', 'update.info.delete.mfa-totp');\n const { data: canDeleteMemberPasswordPerm } = useRbac('stytch.member', 'update.info.delete.password');\n const { data: canUpdateMemberMfaEnrolledPerm } = useRbac('stytch.member', 'update.settings.mfa-enrolled');\n const { data: canUpdateMemberDefaultMfaMethodPerm } = useRbac('stytch.member', 'update.settings.default-mfa-method');\n const { data: canDeleteMemberPerm } = useRbac('stytch.member', 'delete');\n const { data: canRevokeMemberSessionsPerm } = useRbac('stytch.member', 'revoke-sessions');\n\n const { data: canUpdateSelfNamePerm } = useRbac('stytch.self', 'update.info.name');\n const { data: canUpdateSelfUntrustedMetadataPerm } = useRbac('stytch.self', 'update.info.untrusted-metadata');\n const { data: canUpdateSelfMfaPhonePerm } = useRbac('stytch.self', 'update.info.mfa-phone');\n const { data: canDeleteSelfMfaPhonePerm } = useRbac('stytch.self', 'update.info.delete.mfa-phone');\n const { data: canDeleteSelfMfaTotpPerm } = useRbac('stytch.self', 'update.info.delete.mfa-totp');\n const { data: canDeleteSelfPasswordPerm } = useRbac('stytch.self', 'update.info.delete.password');\n const { data: canUpdateSelfMfaEnrolledPerm } = useRbac('stytch.self', 'update.settings.mfa-enrolled');\n const { data: canUpdateSelfDefaultMfaMethodPerm } = useRbac('stytch.self', 'update.settings.default-mfa-method');\n const { data: canDeleteSelfPerm } = useRbac('stytch.self', 'delete');\n const { data: canRevokeSelfSessionsPerm } = useRbac('stytch.self', 'revoke-sessions');\n\n const { data: canGetOrgCustomRoles } = useRbac('stytch.custom-org-roles', 'get');\n\n const canUpdateMember =\n canDeleteMemberMfaPhonePerm ||\n canDeleteMemberMfaTotpPerm ||\n canDeleteMemberPasswordPerm ||\n canUpdateMemberMfaPhonePerm ||\n canUpdateMemberNamePerm ||\n canUpdateMemberUntrustedMetadataPerm ||\n canUpdateMemberIsBreakglassPerm ||\n canUpdateMemberMfaEnrolledPerm ||\n canUpdateMemberDefaultMfaMethodPerm ||\n canUpdateMemberRolesPerm ||\n canRevokeMemberSessionsPerm;\n\n const canUpdateSelf =\n canUpdateSelfNamePerm ||\n canUpdateSelfUntrustedMetadataPerm ||\n canUpdateSelfMfaPhonePerm ||\n canDeleteSelfMfaPhonePerm ||\n canDeleteSelfPasswordPerm ||\n canUpdateSelfMfaEnrolledPerm ||\n canUpdateSelfDefaultMfaMethodPerm ||\n canDeleteSelfPerm ||\n canDeleteSelfMfaTotpPerm ||\n canRevokeSelfSessionsPerm;\n\n const canActivateOrDeactivate = canCreateMemberPerm || canDeleteMemberPerm;\n\n const orgInfo = useOrgInfo();\n const orgAllowsEmailInvites = orgInfo.data && orgInfo.data.email_invites !== 'NOT_ALLOWED';\n\n const { self } = useSelf();\n const currentMemberId = self?.member_id;\n\n const canInviteMember = canCreateMemberPerm && orgAllowsEmailInvites;\n\n const roleAutocompleteProps = useRoleAutocomplete({\n excludeStytchMember: true,\n includeOrgRoles: canGetOrgCustomRoles,\n });\n const allRolesSet = useMemo(() => new Set(roleAutocompleteProps.selectItems), [roleAutocompleteProps.selectItems]);\n const allRolesFilterItems = useMemo(() => {\n return roleAutocompleteProps.selectItems.map((roleId) => ({\n label: roleAutocompleteProps.getOptionLabel(roleId),\n value: roleId,\n }));\n }, [roleAutocompleteProps]);\n\n const [filterRoles, setFilterRoles] = usePersistentFilter({\n viewId: MEMBER_LIST_TABLE_VIEW_ID,\n fieldId: 'role',\n defaultValue: emptySet,\n permittedValues: allRolesSet,\n });\n const [filterStatuses, setFilterStatuses] = usePersistentFilter({\n viewId: MEMBER_LIST_TABLE_VIEW_ID,\n fieldId: 'status',\n defaultValue: DEFAULT_STATUSES_FILTER,\n permittedValues: allMemberStatusesSet,\n });\n\n const itemRenderer: Column<Member>[] = useMemo(\n () => [\n {\n id: 'name',\n title: 'Name',\n getValue: ({ name, member_id }) => {\n return member_id === currentMemberId ? decorateCurrentMemberName(name) : name;\n },\n width: 200,\n },\n {\n id: 'email',\n title: 'Email',\n getValue: ({ email_address }) => {\n return email_address;\n },\n width: 200,\n },\n {\n id: 'role',\n title: 'Role',\n getValue: ({ roles }) => {\n return <RolesList hideStytchMemberWithOtherRoles roles={roles} />;\n },\n renderTitle: () => (\n <ColumnTitleWithFilter\n title=\"Role\"\n items={allRolesFilterItems}\n value={filterRoles}\n onChange={setFilterRoles}\n />\n ),\n },\n {\n id: 'status',\n title: 'Status',\n getValue: ({ status }) => {\n return getMemberStatusDisplayName(status);\n },\n renderTitle: () => (\n <ColumnTitleWithFilter\n title=\"Status\"\n items={allStatusesFilterItems}\n value={filterStatuses}\n onChange={setFilterStatuses}\n />\n ),\n width: 150,\n },\n ],\n [allRolesFilterItems, currentMemberId, filterRoles, filterStatuses, setFilterRoles, setFilterStatuses],\n );\n\n const [filterText, setFilterText, pendingFilterText] = useDebouncedState('');\n\n const [itemsPerPage, handleItemsPerPageChange] = useItemsPerPage({\n viewId: MEMBER_LIST_TABLE_VIEW_ID,\n });\n\n const { data, error, isLoading, setSize, size, mutate } = useMembers({\n limit: itemsPerPage,\n email: filterText || undefined,\n roles: filterRoles.size > 0 ? Array.from(filterRoles) : undefined,\n statuses: filterStatuses.size > 0 ? Array.from(filterStatuses) : undefined,\n });\n\n const resultsMetadata = data?.at(-1)?.results_metadata;\n\n // `size` is already effectively a page count, so we can act as if we only\n // have one item per page\n const { currentPage, setCurrentPage } = usePagination({\n itemsCount: size,\n itemsPerPage: 1,\n });\n\n const tableProps = {\n currentPage,\n setCurrentPage,\n onRowClick: (id) => navigate({ screen: 'memberDetails', params: { memberId: id } }),\n rowsPerPage: itemsPerPage,\n rowsPerPageOptions: itemsPerPageOptions,\n onRowsPerPageChange: handleItemsPerPageChange,\n items: useMemo(() => data?.flatMap((page) => page.members) ?? [], [data]),\n loadNext: useCallback(() => setSize((size) => size + 1), [setSize]),\n metadata: useMemo(\n () => ({\n cursor: resultsMetadata?.next_cursor ?? '__none',\n total: resultsMetadata?.total ?? 0,\n }),\n [resultsMetadata?.next_cursor, resultsMetadata?.total],\n ),\n } satisfies Partial<PaginatedTableProps<Member>>;\n\n const { openToast } = useToast();\n const sendInviteEmail = useSendInviteEmail({ onSuccess: mutate });\n const { handleInviteClick, inviteModalProps } = useInviteModal(sendInviteEmail);\n\n const handleEdit = useCallback(\n (member: Member) => {\n navigate({ screen: 'memberDetails', params: { memberId: member.member_id } });\n },\n [navigate],\n );\n\n const { openModal, modal } = useMemberActivation(mutate);\n\n const handleActivateDeactivateMember = useCallback(\n (member: Member) => {\n openModal(member);\n },\n [openModal],\n );\n\n const actions = useMemo(() => {\n const getDeleteAction = (member: Member) => {\n const isSelf = currentMemberId === member.member_id;\n switch (member.status) {\n case 'invited':\n if (canDeleteMemberPerm || (canDeleteSelfPerm && isSelf)) {\n return 'revoke-invite';\n }\n break;\n case 'active':\n if (canDeleteMemberPerm || (canDeleteSelfPerm && isSelf)) {\n return 'deactivate';\n }\n break;\n case 'deleted':\n if (canCreateMemberPerm && member.email_address_verified) {\n return 'reactivate';\n }\n break;\n }\n };\n\n const canEdit = (member: Member) => {\n return (currentMemberId === member.member_id ? canUpdateSelf : canUpdateMember) ?? false;\n };\n return [\n {\n key: 'view',\n label: 'View member',\n icon: <VisibilityOutlined />,\n onClick: handleEdit,\n isVisible: (member) => !canEdit(member),\n },\n {\n key: 'edit',\n label: 'Edit member',\n icon: <EditOutlined />,\n onClick: handleEdit,\n isVisible: (member) => canEdit(member),\n },\n {\n key: 'resend-invite-email',\n label: 'Resend invite email',\n icon: <EmailOutlined />,\n onClick: (member) =>\n sendInviteEmail(member.email_address).catch((error: unknown) => {\n const message = extractErrorMessage(error);\n if (message) {\n openToast({ text: message, type: 'error' });\n }\n }),\n isVisible: (member) => Boolean(canInviteMember) && REINVITE_MEMBER_STATUS.has(member.status),\n },\n {\n key: 'revoke-invite',\n label: 'Revoke invite',\n icon: <DeleteOutlined />,\n onClick: handleActivateDeactivateMember,\n isDangerous: true,\n isVisible: (member) => getDeleteAction(member) === 'revoke-invite',\n },\n {\n key: 'deactivate',\n label: 'Deactivate',\n icon: <DeleteOutlined />,\n onClick: handleActivateDeactivateMember,\n isDangerous: true,\n isVisible: (member) => getDeleteAction(member) === 'deactivate',\n },\n {\n key: 'reactivate',\n label: 'Reactivate',\n icon: <CheckCircle />,\n onClick: handleActivateDeactivateMember,\n isVisible: (member) => getDeleteAction(member) === 'reactivate',\n },\n ] satisfies Action<Member>[];\n }, [\n canCreateMemberPerm,\n canDeleteMemberPerm,\n canDeleteSelfPerm,\n canInviteMember,\n canUpdateMember,\n canUpdateSelf,\n currentMemberId,\n handleActivateDeactivateMember,\n handleEdit,\n openToast,\n sendInviteEmail,\n ]);\n\n const { getItemActionProps } = useActionMenu<Member>({\n actions,\n idPrefix: 'member',\n getId: getMemberId,\n });\n\n return (\n <FlexBox flexDirection=\"column\" gap={3}>\n {canActivateOrDeactivate && modal}\n <FlexBox alignItems=\"center\" justifyContent=\"space-between\">\n <Typography variant=\"h1\">Members</Typography>\n {canInviteMember && (\n <>\n <InviteModal {...inviteModalProps} />\n <Button compact variant=\"primary\" startIcon={<Add />} onClick={handleInviteClick}>\n Invite\n </Button>\n </>\n )}\n </FlexBox>\n <SearchBar placeholder=\"Search by email\" value={pendingFilterText} onChange={setFilterText} />\n {error ? (\n <Alert>{extractErrorMessage(error) ?? 'There was an error loading the Members list.'}</Alert>\n ) : (\n <PaginatedTable\n {...tableProps}\n itemRenderer={itemRenderer}\n isLoading={isLoading}\n getItemActionProps={getItemActionProps}\n rowKeyExtractor={getMemberId}\n titleVariant=\"h4\"\n />\n )}\n </FlexBox>\n );\n};\n"],"names":["MIN_EMAIL_FUZZY_SEARCH_LENGTH","MEMBER_LIST_TABLE_VIEW_ID","DEFAULT_STATUSES_FILTER","Set","REINVITE_MEMBER_STATUS","allStatusesFilterItems","allMemberStatuses","map","status","label","getMemberStatusDisplayName","value","useMembers","limit","email","emailRaw","roles","statuses","client","useStytchClient","orgInfo","useOrgInfo","length","undefined","useSWRInfinite","index","prevData","results_metadata","next_cursor","orgId","data","organization_id","method","slice","sort","cursor","fetchMembers","revalidateFirstPage","getMemberId","item","member_id","ColumnTitleWithFilter","items","onChange","title","container","setContainer","useState","React","div","ref","FlexBox","gap","alignItems","FilterMenu","anchorEl","emptySet","MemberListScreen","navigate","useMemberManagementRouterController","canCreateMemberPerm","useRbac","canUpdateMemberIsBreakglassPerm","canUpdateMemberRolesPerm","canUpdateMemberNamePerm","canUpdateMemberUntrustedMetadataPerm","canUpdateMemberMfaPhonePerm","canDeleteMemberMfaPhonePerm","canDeleteMemberMfaTotpPerm","canDeleteMemberPasswordPerm","canUpdateMemberMfaEnrolledPerm","canUpdateMemberDefaultMfaMethodPerm","canDeleteMemberPerm","canRevokeMemberSessionsPerm","canUpdateSelfNamePerm","canUpdateSelfUntrustedMetadataPerm","canUpdateSelfMfaPhonePerm","canDeleteSelfMfaPhonePerm","canDeleteSelfMfaTotpPerm","canDeleteSelfPasswordPerm","canUpdateSelfMfaEnrolledPerm","canUpdateSelfDefaultMfaMethodPerm","canDeleteSelfPerm","canRevokeSelfSessionsPerm","canGetOrgCustomRoles","canUpdateMember","canUpdateSelf","canActivateOrDeactivate","orgAllowsEmailInvites","email_invites","self","useSelf","currentMemberId","canInviteMember","roleAutocompleteProps","useRoleAutocomplete","excludeStytchMember","includeOrgRoles","allRolesSet","useMemo","selectItems","allRolesFilterItems","roleId","getOptionLabel","filterRoles","setFilterRoles","usePersistentFilter","viewId","fieldId","defaultValue","permittedValues","filterStatuses","setFilterStatuses","allMemberStatusesSet","itemRenderer","id","getValue","name","decorateCurrentMemberName","width","email_address","RolesList","hideStytchMemberWithOtherRoles","renderTitle","filterText","setFilterText","pendingFilterText","useDebouncedState","itemsPerPage","handleItemsPerPageChange","useItemsPerPage","error","isLoading","setSize","size","mutate","Array","from","resultsMetadata","at","currentPage","setCurrentPage","usePagination","itemsCount","tableProps","onRowClick","screen","params","memberId","rowsPerPage","rowsPerPageOptions","itemsPerPageOptions","onRowsPerPageChange","flatMap","page","members","loadNext","useCallback","metadata","total","openToast","useToast","sendInviteEmail","useSendInviteEmail","onSuccess","handleInviteClick","inviteModalProps","useInviteModal","handleEdit","member","openModal","modal","useMemberActivation","handleActivateDeactivateMember","actions","getDeleteAction","isSelf","email_address_verified","canEdit","key","icon","VisibilityOutlined","onClick","isVisible","EditOutlined","EmailOutlined","catch","message","extractErrorMessage","text","type","Boolean","has","DeleteOutlined","isDangerous","CheckCircle","getItemActionProps","useActionMenu","idPrefix","getId","flexDirection","justifyContent","Typography","variant","InviteModal","Button","compact","startIcon","Add","SearchBar","placeholder","Alert","PaginatedTable","rowKeyExtractor","titleVariant"],"mappings":"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"}
@@ -16,13 +16,15 @@ import { arraysHaveSameContents } from '../utils/arraysHaveSameContents.mjs';
16
16
  import { useRoleAutocomplete } from '../utils/useRoleAutocomplete.mjs';
17
17
  import { useRoleDisplayInfo } from '../utils/useRoleDisplayInfo.mjs';
18
18
  import { isTruthy } from '../../utils/isTruthy.mjs';
19
+ import { useRbac } from '../utils/useRbac.mjs';
19
20
 
20
21
  const RoleAssignmentsSection = ({ connection, useBlockNavigation })=>{
21
22
  const { data: scimConnectionGroups, isLoading: isLoadingScimGroups } = useScimConnectionGroups({
22
23
  shouldFetch: true
23
24
  });
25
+ const { data: canGetOrgCustomRoles } = useRbac('stytch.custom-org-roles', 'get');
24
26
  const { mutate: mutateScimConnection } = useMutateScimConnectionRoleAssignments();
25
- const { getRoleIdDisplayName } = useRoleDisplayInfo();
27
+ const { getRoleIdDisplayName } = useRoleDisplayInfo(canGetOrgCustomRoles ?? false);
26
28
  const scimGroups = useMemo(()=>scimConnectionGroups?.scim_groups ?? [], [
27
29
  scimConnectionGroups
28
30
  ]);
@@ -82,7 +84,9 @@ const RoleAssignmentsSection = ({ connection, useBlockNavigation })=>{
82
84
  }
83
85
  }
84
86
  ];
85
- const roleAutocompleteProps = useRoleAutocomplete();
87
+ const roleAutocompleteProps = useRoleAutocomplete({
88
+ includeOrgRoles: canGetOrgCustomRoles ?? false
89
+ });
86
90
  const groupIdsWithRoleAssignments = new Set(groupRoles.map(({ groupId })=>groupId));
87
91
  const findAvailableGroupIds = (currentId)=>Object.keys(groupIdToName).filter((groupId)=>!groupIdsWithRoleAssignments.has(groupId) || groupId === currentId);
88
92
  // Find the groupIds that do not have any roles assigned to them.
@@ -1 +1 @@
1
- {"version":3,"file":"SCIMConnectionRoleAssignmentsSection.mjs","sources":["../../../../../../../../web/src/adminPortal/scim/SCIMConnectionRoleAssignmentsSection.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { FlexBox } from '../components/FlexBox';\nimport { SettingsContainer } from '../components/SettingsContainer';\nimport { SCIMConnection } from '@stytch/core/public';\nimport { Typography } from '../components/Typography';\nimport { Button } from '../components/Button';\nimport Add from '@mui/icons-material/Add';\nimport { Table } from '../components/Table';\nimport { useScimConnectionGroups } from '../utils/useScimConnectionGroups';\nimport { TagList } from '../components/TagList';\nimport { useFormState } from '../utils/useFormState';\nimport { Autocomplete } from '../components/Autocomplete';\nimport { PageLoadingIndicator } from '../components/PageLoadingIndicator';\nimport { Select } from '../components/Select';\nimport { useMutateScimConnectionRoleAssignments } from '../utils/useMutateScimConnection';\nimport { arraysHaveSameContents } from '../utils/arraysHaveSameContents';\nimport { UseBlockNavigation } from '../Router';\nimport { useRoleAutocomplete } from '../utils/useRoleAutocomplete';\nimport { useRoleDisplayInfo } from '../utils/useRoleDisplayInfo';\nimport { isTruthy } from '../../utils/isTruthy';\n\ntype ScimGroupRoleAssignment = { groupId: string | undefined; roles: string[] };\n\nexport const RoleAssignmentsSection = ({\n connection,\n useBlockNavigation,\n}: {\n connection: SCIMConnection;\n useBlockNavigation: UseBlockNavigation;\n}) => {\n const { data: scimConnectionGroups, isLoading: isLoadingScimGroups } = useScimConnectionGroups({\n shouldFetch: true,\n });\n const { mutate: mutateScimConnection } = useMutateScimConnectionRoleAssignments();\n const { getRoleIdDisplayName } = useRoleDisplayInfo();\n\n const scimGroups = useMemo(() => scimConnectionGroups?.scim_groups ?? [], [scimConnectionGroups]);\n const scimRoleAssignments = connection?.scim_group_implicit_role_assignments;\n\n const { groupIdToName, filteredGroupIdToRoles } = useMemo(() => {\n const groupIdToNameMap = scimGroups.reduce(\n (acc, val) => {\n acc[val.group_id] = val.group_name;\n return acc;\n },\n {} as Record<string, string>,\n );\n\n const groupIdToRolesMap = Object.keys(groupIdToNameMap).reduce(\n (acc, groupId) => {\n const scimRoleAssignment = scimRoleAssignments.find((roleAssignment) => roleAssignment.group_id === groupId);\n if (!scimRoleAssignment) return acc;\n\n if (!acc[groupId]) {\n acc[groupId] = [];\n }\n acc[groupId].push(scimRoleAssignment.role_id);\n return acc;\n },\n {} as Record<string, string[]>,\n );\n\n return {\n groupIdToName: groupIdToNameMap,\n // Filter out groups with no roles assigned\n filteredGroupIdToRoles: Object.fromEntries(\n Object.entries(groupIdToRolesMap).filter(([, roles]) => roles.length > 0),\n ),\n };\n }, [scimGroups, scimRoleAssignments]);\n\n const remoteState: { groupRoles: ScimGroupRoleAssignment[] } = useMemo(\n () => ({\n groupRoles: Object.entries(filteredGroupIdToRoles).map(([groupId, roles]) => ({\n groupId,\n roles,\n })),\n }),\n [filteredGroupIdToRoles],\n );\n const { localState, setLocalState, editing, handleSetEditing } = useFormState({ remoteState });\n const { groupRoles } = editing ? localState : remoteState;\n\n const itemRenderer = [\n {\n title: 'Group',\n getValue: ({ groupId }: ScimGroupRoleAssignment) => {\n return (\n <Typography variant=\"body2\" color=\"secondary\">\n {groupId ? groupIdToName[groupId] : ''}\n </Typography>\n );\n },\n width: 300,\n },\n {\n title: 'Role',\n getValue: ({ roles }: ScimGroupRoleAssignment) => {\n return <TagList tags={roles.map((role) => getRoleIdDisplayName(role))} />;\n },\n },\n ];\n\n const roleAutocompleteProps = useRoleAutocomplete();\n\n const groupIdsWithRoleAssignments = new Set(groupRoles.map(({ groupId }) => groupId));\n const findAvailableGroupIds = (currentId: string | undefined) =>\n Object.keys(groupIdToName).filter((groupId) => !groupIdsWithRoleAssignments.has(groupId) || groupId === currentId);\n // Find the groupIds that do not have any roles assigned to them.\n const availableGroupIds = findAvailableGroupIds(undefined);\n\n const handleOnChange = ({\n groupId: currentGroupId,\n updatedGroupId,\n updatedRoles,\n }: {\n groupId: string | undefined;\n updatedGroupId: string | undefined;\n updatedRoles: string[] | undefined;\n }) => {\n setLocalState((prevState) => ({\n groupRoles: prevState.groupRoles.map((value) => {\n if (value.groupId !== currentGroupId) {\n return value;\n }\n return {\n groupId: updatedGroupId ?? value.groupId,\n roles: updatedRoles ?? value.roles,\n };\n }),\n }));\n };\n\n const disableSave = arraysHaveSameContents(localState.groupRoles, remoteState.groupRoles);\n const disableAdd =\n (localState.groupRoles.length > 0\n ? localState.groupRoles[localState.groupRoles.length - 1].groupId === undefined\n : false) || !availableGroupIds.length;\n\n const handleSave = async () => {\n await mutateScimConnection({\n connection_id: connection.connection_id,\n scim_group_implicit_role_assignments: localState.groupRoles.flatMap(({ groupId, roles }) => {\n return roles\n .map((role) => {\n if (groupId) {\n return {\n group_id: groupId,\n role_id: role,\n };\n }\n })\n .filter(isTruthy);\n }),\n });\n };\n\n if (isLoadingScimGroups) {\n return <PageLoadingIndicator />;\n }\n\n return (\n <SettingsContainer\n title=\"Role Assignments\"\n hasCTA={Object.keys(groupIdToName).length > 0}\n onSave={handleSave}\n useBlockNavigation={useBlockNavigation}\n editing={editing}\n disableSave={disableSave}\n setEditing={handleSetEditing}\n >\n <Typography variant=\"h4\">Group Roles</Typography>\n {editing ? (\n <FlexBox flexDirection=\"column\" gap={2}>\n {localState.groupRoles.length > 0 ? (\n <div>\n {groupRoles.map(({ groupId, roles }, index) => {\n const groupNameSelectItems = findAvailableGroupIds(groupId).map((groupId) => {\n return {\n value: groupId,\n label: groupIdToName[groupId],\n };\n });\n return (\n <FlexBox flexDirection=\"row\" gap={2} key={index} alignItems=\"center\">\n <Select\n labelColor=\"secondary\"\n width={300}\n label=\"Group name\"\n selectItems={groupNameSelectItems}\n placeholder=\"Select Group Name\"\n value={groupId}\n onChange={(value) => handleOnChange({ groupId, updatedGroupId: value, updatedRoles: undefined })}\n />\n <Autocomplete\n {...roleAutocompleteProps}\n label=\"Group Role\"\n fullWidth\n value={roles}\n onChange={(value) => handleOnChange({ groupId, updatedGroupId: undefined, updatedRoles: value })}\n />\n </FlexBox>\n );\n })}\n </div>\n ) : (\n <Typography variant=\"body2\">No roles assigned.</Typography>\n )}\n <Button\n disabled={disableAdd}\n startIcon={<Add />}\n variant=\"text\"\n onClick={() => {\n setLocalState(() => ({\n groupRoles: [...groupRoles, { groupId: undefined, roles: [] }],\n }));\n }}\n >\n Add group roles\n </Button>\n </FlexBox>\n ) : groupRoles.length > 0 ? (\n <Table\n titleVariant=\"caption\"\n itemRenderer={itemRenderer}\n items={groupRoles}\n rowKeyExtractor={({ groupId }) => groupId ?? ''}\n disableBottomBorder\n />\n ) : (\n <Typography variant=\"body2\">No roles assigned.</Typography>\n )}\n </SettingsContainer>\n );\n};\n"],"names":["RoleAssignmentsSection","connection","useBlockNavigation","data","scimConnectionGroups","isLoading","isLoadingScimGroups","useScimConnectionGroups","shouldFetch","mutate","mutateScimConnection","useMutateScimConnectionRoleAssignments","getRoleIdDisplayName","useRoleDisplayInfo","scimGroups","useMemo","scim_groups","scimRoleAssignments","scim_group_implicit_role_assignments","groupIdToName","filteredGroupIdToRoles","groupIdToNameMap","reduce","acc","val","group_id","group_name","groupIdToRolesMap","Object","keys","groupId","scimRoleAssignment","find","roleAssignment","push","role_id","fromEntries","entries","filter","roles","length","remoteState","groupRoles","map","localState","setLocalState","editing","handleSetEditing","useFormState","itemRenderer","title","getValue","React","Typography","variant","color","width","TagList","tags","role","roleAutocompleteProps","useRoleAutocomplete","groupIdsWithRoleAssignments","Set","findAvailableGroupIds","currentId","has","availableGroupIds","undefined","handleOnChange","currentGroupId","updatedGroupId","updatedRoles","prevState","value","disableSave","arraysHaveSameContents","disableAdd","handleSave","connection_id","flatMap","isTruthy","PageLoadingIndicator","SettingsContainer","hasCTA","onSave","setEditing","FlexBox","flexDirection","gap","div","index","groupNameSelectItems","label","key","alignItems","Select","labelColor","selectItems","placeholder","onChange","Autocomplete","fullWidth","Button","disabled","startIcon","Add","onClick","Table","titleVariant","items","rowKeyExtractor","disableBottomBorder"],"mappings":"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"}
1
+ {"version":3,"file":"SCIMConnectionRoleAssignmentsSection.mjs","sources":["../../../../../../../../web/src/adminPortal/scim/SCIMConnectionRoleAssignmentsSection.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { FlexBox } from '../components/FlexBox';\nimport { SettingsContainer } from '../components/SettingsContainer';\nimport { SCIMConnection } from '@stytch/core/public';\nimport { Typography } from '../components/Typography';\nimport { Button } from '../components/Button';\nimport Add from '@mui/icons-material/Add';\nimport { Table } from '../components/Table';\nimport { useScimConnectionGroups } from '../utils/useScimConnectionGroups';\nimport { TagList } from '../components/TagList';\nimport { useFormState } from '../utils/useFormState';\nimport { Autocomplete } from '../components/Autocomplete';\nimport { PageLoadingIndicator } from '../components/PageLoadingIndicator';\nimport { Select } from '../components/Select';\nimport { useMutateScimConnectionRoleAssignments } from '../utils/useMutateScimConnection';\nimport { arraysHaveSameContents } from '../utils/arraysHaveSameContents';\nimport { UseBlockNavigation } from '../Router';\nimport { useRoleAutocomplete } from '../utils/useRoleAutocomplete';\nimport { useRoleDisplayInfo } from '../utils/useRoleDisplayInfo';\nimport { isTruthy } from '../../utils/isTruthy';\nimport { useRbac } from '../utils/useRbac';\n\ntype ScimGroupRoleAssignment = { groupId: string | undefined; roles: string[] };\n\nexport const RoleAssignmentsSection = ({\n connection,\n useBlockNavigation,\n}: {\n connection: SCIMConnection;\n useBlockNavigation: UseBlockNavigation;\n}) => {\n const { data: scimConnectionGroups, isLoading: isLoadingScimGroups } = useScimConnectionGroups({\n shouldFetch: true,\n });\n\n const { data: canGetOrgCustomRoles } = useRbac('stytch.custom-org-roles', 'get');\n\n const { mutate: mutateScimConnection } = useMutateScimConnectionRoleAssignments();\n const { getRoleIdDisplayName } = useRoleDisplayInfo(canGetOrgCustomRoles ?? false);\n\n const scimGroups = useMemo(() => scimConnectionGroups?.scim_groups ?? [], [scimConnectionGroups]);\n const scimRoleAssignments = connection?.scim_group_implicit_role_assignments;\n\n const { groupIdToName, filteredGroupIdToRoles } = useMemo(() => {\n const groupIdToNameMap = scimGroups.reduce(\n (acc, val) => {\n acc[val.group_id] = val.group_name;\n return acc;\n },\n {} as Record<string, string>,\n );\n\n const groupIdToRolesMap = Object.keys(groupIdToNameMap).reduce(\n (acc, groupId) => {\n const scimRoleAssignment = scimRoleAssignments.find((roleAssignment) => roleAssignment.group_id === groupId);\n if (!scimRoleAssignment) return acc;\n\n if (!acc[groupId]) {\n acc[groupId] = [];\n }\n acc[groupId].push(scimRoleAssignment.role_id);\n return acc;\n },\n {} as Record<string, string[]>,\n );\n\n return {\n groupIdToName: groupIdToNameMap,\n // Filter out groups with no roles assigned\n filteredGroupIdToRoles: Object.fromEntries(\n Object.entries(groupIdToRolesMap).filter(([, roles]) => roles.length > 0),\n ),\n };\n }, [scimGroups, scimRoleAssignments]);\n\n const remoteState: { groupRoles: ScimGroupRoleAssignment[] } = useMemo(\n () => ({\n groupRoles: Object.entries(filteredGroupIdToRoles).map(([groupId, roles]) => ({\n groupId,\n roles,\n })),\n }),\n [filteredGroupIdToRoles],\n );\n const { localState, setLocalState, editing, handleSetEditing } = useFormState({ remoteState });\n const { groupRoles } = editing ? localState : remoteState;\n\n const itemRenderer = [\n {\n title: 'Group',\n getValue: ({ groupId }: ScimGroupRoleAssignment) => {\n return (\n <Typography variant=\"body2\" color=\"secondary\">\n {groupId ? groupIdToName[groupId] : ''}\n </Typography>\n );\n },\n width: 300,\n },\n {\n title: 'Role',\n getValue: ({ roles }: ScimGroupRoleAssignment) => {\n return <TagList tags={roles.map((role) => getRoleIdDisplayName(role))} />;\n },\n },\n ];\n\n const roleAutocompleteProps = useRoleAutocomplete({ includeOrgRoles: canGetOrgCustomRoles ?? false });\n\n const groupIdsWithRoleAssignments = new Set(groupRoles.map(({ groupId }) => groupId));\n const findAvailableGroupIds = (currentId: string | undefined) =>\n Object.keys(groupIdToName).filter((groupId) => !groupIdsWithRoleAssignments.has(groupId) || groupId === currentId);\n // Find the groupIds that do not have any roles assigned to them.\n const availableGroupIds = findAvailableGroupIds(undefined);\n\n const handleOnChange = ({\n groupId: currentGroupId,\n updatedGroupId,\n updatedRoles,\n }: {\n groupId: string | undefined;\n updatedGroupId: string | undefined;\n updatedRoles: string[] | undefined;\n }) => {\n setLocalState((prevState) => ({\n groupRoles: prevState.groupRoles.map((value) => {\n if (value.groupId !== currentGroupId) {\n return value;\n }\n return {\n groupId: updatedGroupId ?? value.groupId,\n roles: updatedRoles ?? value.roles,\n };\n }),\n }));\n };\n\n const disableSave = arraysHaveSameContents(localState.groupRoles, remoteState.groupRoles);\n const disableAdd =\n (localState.groupRoles.length > 0\n ? localState.groupRoles[localState.groupRoles.length - 1].groupId === undefined\n : false) || !availableGroupIds.length;\n\n const handleSave = async () => {\n await mutateScimConnection({\n connection_id: connection.connection_id,\n scim_group_implicit_role_assignments: localState.groupRoles.flatMap(({ groupId, roles }) => {\n return roles\n .map((role) => {\n if (groupId) {\n return {\n group_id: groupId,\n role_id: role,\n };\n }\n })\n .filter(isTruthy);\n }),\n });\n };\n\n if (isLoadingScimGroups) {\n return <PageLoadingIndicator />;\n }\n\n return (\n <SettingsContainer\n title=\"Role Assignments\"\n hasCTA={Object.keys(groupIdToName).length > 0}\n onSave={handleSave}\n useBlockNavigation={useBlockNavigation}\n editing={editing}\n disableSave={disableSave}\n setEditing={handleSetEditing}\n >\n <Typography variant=\"h4\">Group Roles</Typography>\n {editing ? (\n <FlexBox flexDirection=\"column\" gap={2}>\n {localState.groupRoles.length > 0 ? (\n <div>\n {groupRoles.map(({ groupId, roles }, index) => {\n const groupNameSelectItems = findAvailableGroupIds(groupId).map((groupId) => {\n return {\n value: groupId,\n label: groupIdToName[groupId],\n };\n });\n return (\n <FlexBox flexDirection=\"row\" gap={2} key={index} alignItems=\"center\">\n <Select\n labelColor=\"secondary\"\n width={300}\n label=\"Group name\"\n selectItems={groupNameSelectItems}\n placeholder=\"Select Group Name\"\n value={groupId}\n onChange={(value) => handleOnChange({ groupId, updatedGroupId: value, updatedRoles: undefined })}\n />\n <Autocomplete\n {...roleAutocompleteProps}\n label=\"Group Role\"\n fullWidth\n value={roles}\n onChange={(value) => handleOnChange({ groupId, updatedGroupId: undefined, updatedRoles: value })}\n />\n </FlexBox>\n );\n })}\n </div>\n ) : (\n <Typography variant=\"body2\">No roles assigned.</Typography>\n )}\n <Button\n disabled={disableAdd}\n startIcon={<Add />}\n variant=\"text\"\n onClick={() => {\n setLocalState(() => ({\n groupRoles: [...groupRoles, { groupId: undefined, roles: [] }],\n }));\n }}\n >\n Add group roles\n </Button>\n </FlexBox>\n ) : groupRoles.length > 0 ? (\n <Table\n titleVariant=\"caption\"\n itemRenderer={itemRenderer}\n items={groupRoles}\n rowKeyExtractor={({ groupId }) => groupId ?? ''}\n disableBottomBorder\n />\n ) : (\n <Typography variant=\"body2\">No roles assigned.</Typography>\n )}\n </SettingsContainer>\n );\n};\n"],"names":["RoleAssignmentsSection","connection","useBlockNavigation","data","scimConnectionGroups","isLoading","isLoadingScimGroups","useScimConnectionGroups","shouldFetch","canGetOrgCustomRoles","useRbac","mutate","mutateScimConnection","useMutateScimConnectionRoleAssignments","getRoleIdDisplayName","useRoleDisplayInfo","scimGroups","useMemo","scim_groups","scimRoleAssignments","scim_group_implicit_role_assignments","groupIdToName","filteredGroupIdToRoles","groupIdToNameMap","reduce","acc","val","group_id","group_name","groupIdToRolesMap","Object","keys","groupId","scimRoleAssignment","find","roleAssignment","push","role_id","fromEntries","entries","filter","roles","length","remoteState","groupRoles","map","localState","setLocalState","editing","handleSetEditing","useFormState","itemRenderer","title","getValue","React","Typography","variant","color","width","TagList","tags","role","roleAutocompleteProps","useRoleAutocomplete","includeOrgRoles","groupIdsWithRoleAssignments","Set","findAvailableGroupIds","currentId","has","availableGroupIds","undefined","handleOnChange","currentGroupId","updatedGroupId","updatedRoles","prevState","value","disableSave","arraysHaveSameContents","disableAdd","handleSave","connection_id","flatMap","isTruthy","PageLoadingIndicator","SettingsContainer","hasCTA","onSave","setEditing","FlexBox","flexDirection","gap","div","index","groupNameSelectItems","label","key","alignItems","Select","labelColor","selectItems","placeholder","onChange","Autocomplete","fullWidth","Button","disabled","startIcon","Add","onClick","Table","titleVariant","items","rowKeyExtractor","disableBottomBorder"],"mappings":"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"}
@@ -121,7 +121,7 @@ const RoleTable = ({ localState, remoteState, editing, setLocalState, role, isSs
121
121
  const filterRoleAssignmentsBy = (arr, { source })=>{
122
122
  return arr.slice().filter((val)=>val.source === source);
123
123
  };
124
- const OrgSettingsRoleAssignmentsBody = ({ editing, ssoConnections, roles, localState, remoteState, setLocalState, isSsoEnabled, isScimEnabled, allScimGroupIdToGroupName, scimConnection })=>{
124
+ const OrgSettingsRoleAssignmentsBody = ({ editing, ssoConnections, roles, localState, remoteState, setLocalState, isSsoEnabled, isScimEnabled, canViewCustomOrgRoles, allScimGroupIdToGroupName, scimConnection })=>{
125
125
  const idMap = (editing ? localState : remoteState).idMap;
126
126
  const rolesWithAssignments = roles.filter((role)=>idMap[role.role_id].length > 0);
127
127
  const rolesById = useRolesById();
@@ -231,7 +231,9 @@ const OrgSettingsRoleAssignmentsBody = ({ editing, ssoConnections, roles, localS
231
231
  });
232
232
  const showInputContent = !!selectedRole && !!selectedSource;
233
233
  const disableConfirm = !showInputContent || selectedSource === 'Email' && emailDomain.length === 0 || selectedSource === 'SSO' && ssoRoleAssignments.every((connection)=>!connection.id);
234
- const roleAutocompleteProps = useRoleAutocomplete();
234
+ const roleAutocompleteProps = useRoleAutocomplete({
235
+ includeOrgRoles: canViewCustomOrgRoles
236
+ });
235
237
  const roleSelectItems = roleAutocompleteProps.selectItems.map((roleId)=>({
236
238
  label: roleAutocompleteProps.getOptionLabel(roleId),
237
239
  value: roleId,
@@ -440,6 +442,7 @@ const OrgSettingsRoleAssignmentsSection = ({ orgInfo })=>{
440
442
  const { data: canSetRoles } = useRbac('stytch.organization', 'update.settings.implicit-roles');
441
443
  const { data: canGetSsoPerm } = useRbac('stytch.sso', 'get');
442
444
  const { data: canGetScimPerm } = useRbac('stytch.scim', 'get');
445
+ const { data: canGetOrgCustomRoles } = useRbac('stytch.custom-org-roles', 'get');
443
446
  const isSsoEnabled = adminPortalConfig?.sso_config.sso_enabled ?? false;
444
447
  const isScimEnabled = adminPortalConfig?.scim_config.scim_enabled ?? false;
445
448
  const canGetSso = (isSsoEnabled && canGetSsoPerm) ?? false;
@@ -453,7 +456,7 @@ const OrgSettingsRoleAssignmentsSection = ({ orgInfo })=>{
453
456
  const { data: scimConnectionGroups, isLoading: isLoadingScimGroups } = useScimConnectionGroups({
454
457
  shouldFetch: canGetScim && !!canSetRoles
455
458
  });
456
- const roles = useRoles();
459
+ const roles = useRoles(canGetOrgCustomRoles);
457
460
  const sortRoles = useRoleSortFn();
458
461
  const sortedRoles = useMemo(()=>sortRoles(roles ?? []), [
459
462
  roles,
@@ -709,6 +712,7 @@ const OrgSettingsRoleAssignmentsSection = ({ orgInfo })=>{
709
712
  roles: sortedRoles,
710
713
  isSsoEnabled: isSsoEnabled,
711
714
  isScimEnabled: isScimEnabled,
715
+ canViewCustomOrgRoles: canGetOrgCustomRoles ?? false,
712
716
  allScimGroupIdToGroupName: allScimGroupIdToGroupName,
713
717
  scimConnection: scimConnection
714
718
  }));