@plumile/backoffice-react 0.1.70 → 0.1.73

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 (481) hide show
  1. package/lib/esm/{auth/pages/AcceptInvitationScreen.js → AcceptInvitationScreen-CNLlSbdx.js} +25 -29
  2. package/lib/esm/AcceptInvitationScreen-CNLlSbdx.js.map +1 -0
  3. package/lib/esm/{auth/login/AuthPanel.js → AuthPanel-ttoH9YxE.js} +7 -7
  4. package/lib/esm/AuthPanel-ttoH9YxE.js.map +1 -0
  5. package/lib/esm/BackofficeAcceptInvitationPage-DRxM1Z-U.js +30 -0
  6. package/lib/esm/BackofficeAcceptInvitationPage-DRxM1Z-U.js.map +1 -0
  7. package/lib/esm/BackofficeDashboardPage-GKyT60qb.js +195 -0
  8. package/lib/esm/BackofficeDashboardPage-GKyT60qb.js.map +1 -0
  9. package/lib/esm/BackofficeDetailPayload-B-qs8Fai.js +94 -0
  10. package/lib/esm/BackofficeDetailPayload-B-qs8Fai.js.map +1 -0
  11. package/lib/esm/{components/backoffice/actions/BackofficeEntityActionFormDialog.js → BackofficeEntityActionFormDialog-FHlW0vys.js} +120 -131
  12. package/lib/esm/BackofficeEntityActionFormDialog-FHlW0vys.js.map +1 -0
  13. package/lib/esm/{pages/detail/BackofficeEntityDetailLayoutContext.js → BackofficeEntityDetailLayoutContext-C_tBqkVq.js} +2 -2
  14. package/lib/esm/BackofficeEntityDetailLayoutContext-C_tBqkVq.js.map +1 -0
  15. package/lib/esm/BackofficeEntityDetailLayoutPage-DXjRqvcZ.js +18 -0
  16. package/lib/esm/BackofficeEntityDetailLayoutPage-DXjRqvcZ.js.map +1 -0
  17. package/lib/esm/BackofficeEntityDetailPage-CdrMXu5a.js +991 -0
  18. package/lib/esm/BackofficeEntityDetailPage-CdrMXu5a.js.map +1 -0
  19. package/lib/esm/{pages/BackofficeEntityDetailUnknownPageRedirect.js → BackofficeEntityDetailUnknownPageRedirect-DRWTeox-.js} +3 -3
  20. package/lib/esm/BackofficeEntityDetailUnknownPageRedirect-DRWTeox-.js.map +1 -0
  21. package/lib/esm/BackofficeEntityListPage-BxgqdFpL.js +385 -0
  22. package/lib/esm/BackofficeEntityListPage-BxgqdFpL.js.map +1 -0
  23. package/lib/esm/BackofficeLayoutPage-k9OkLfXb.js +485 -0
  24. package/lib/esm/BackofficeLayoutPage-k9OkLfXb.js.map +1 -0
  25. package/lib/esm/BackofficeLoginPage-C64BcxMw.js +50 -0
  26. package/lib/esm/BackofficeLoginPage-C64BcxMw.js.map +1 -0
  27. package/lib/esm/BackofficePasswordResetCompletePage-BA7kkUxN.js +60 -0
  28. package/lib/esm/BackofficePasswordResetCompletePage-BA7kkUxN.js.map +1 -0
  29. package/lib/esm/{pages/BackofficePasswordResetRequestPage.js → BackofficePasswordResetRequestPage-B9wSZcyn.js} +15 -13
  30. package/lib/esm/BackofficePasswordResetRequestPage-B9wSZcyn.js.map +1 -0
  31. package/lib/esm/BackofficeRightPageLayout-ktdlvTZJ.js +107 -0
  32. package/lib/esm/BackofficeRightPageLayout-ktdlvTZJ.js.map +1 -0
  33. package/lib/esm/{components/backoffice/layout/breadcrumb/BackofficeTopbarPortalContext.js → BackofficeTopbarPortalContext-iD7dm4_h.js} +2 -2
  34. package/lib/esm/BackofficeTopbarPortalContext-iD7dm4_h.js.map +1 -0
  35. package/lib/esm/BackofficeVerifyEmailPage-CAzMqo2K.js +59 -0
  36. package/lib/esm/BackofficeVerifyEmailPage-CAzMqo2K.js.map +1 -0
  37. package/lib/esm/EntityFilterValue-SC_jkj4O.js +77 -0
  38. package/lib/esm/EntityFilterValue-SC_jkj4O.js.map +1 -0
  39. package/lib/esm/EntityIdPickerDialog-FMC5Hx_I.js +308 -0
  40. package/lib/esm/EntityIdPickerDialog-FMC5Hx_I.js.map +1 -0
  41. package/lib/esm/LazyBackofficeEntityActionFormDialog-DOEgoIfT.js +486 -0
  42. package/lib/esm/LazyBackofficeEntityActionFormDialog-DOEgoIfT.js.map +1 -0
  43. package/lib/esm/{auth/pages/PasswordResetCompleteScreen.js → PasswordResetCompleteScreen-C4GQdavL.js} +21 -25
  44. package/lib/esm/PasswordResetCompleteScreen-C4GQdavL.js.map +1 -0
  45. package/lib/esm/{auth/pages/PasswordResetRequestScreen.js → PasswordResetRequestScreen-aUY_yDqM.js} +19 -23
  46. package/lib/esm/PasswordResetRequestScreen-aUY_yDqM.js.map +1 -0
  47. package/lib/esm/VerifyEmailScreen-2DuHJgdY.js +62 -0
  48. package/lib/esm/VerifyEmailScreen-2DuHJgdY.js.map +1 -0
  49. package/lib/esm/backoffice-react.js +1804 -0
  50. package/lib/esm/backoffice-react.js.map +1 -0
  51. package/lib/esm/{router/backofficeAuthPaths.js → backofficeAuthPaths-BiJvoI5Q.js} +2 -2
  52. package/lib/esm/backofficeAuthPaths-BiJvoI5Q.js.map +1 -0
  53. package/lib/esm/{components/backoffice/layout/breadcrumb/buildBreadcrumbs.js → buildBreadcrumbs-CqF9Nh6x.js} +3 -7
  54. package/lib/esm/buildBreadcrumbs-CqF9Nh6x.js.map +1 -0
  55. package/lib/esm/{relay/environment.js → environment-BJeJTbIN.js} +91 -71
  56. package/lib/esm/environment-BJeJTbIN.js.map +1 -0
  57. package/lib/esm/loginPage.css-BDQJNcSr.js +12 -0
  58. package/lib/esm/loginPage.css-BDQJNcSr.js.map +1 -0
  59. package/lib/esm/{relay/mutationResult.js → mutationResult-CcQMY13J.js} +2 -2
  60. package/lib/esm/mutationResult-CcQMY13J.js.map +1 -0
  61. package/lib/esm/{pages/detail/pageResolution.js → pageResolution-hAQA5C6S.js} +2 -2
  62. package/lib/esm/pageResolution-hAQA5C6S.js.map +1 -0
  63. package/lib/esm/{components/backoffice/layout/sidebarUtils.js → sidebarUtils-CuwJ_3mD.js} +2 -12
  64. package/lib/esm/{components/backoffice/layout/sidebarUtils.js.map → sidebarUtils-CuwJ_3mD.js.map} +1 -1
  65. package/lib/esm/{provider/BackofficeConfigContext.js → sprinkles.css.ts.vanilla-n-NK_DwW.js} +2 -2
  66. package/lib/esm/sprinkles.css.ts.vanilla-n-NK_DwW.js.map +1 -0
  67. package/lib/esm/style.css +1 -1
  68. package/lib/esm/synchronizeAuthStatusQuery-lLR0XFew.js +323 -0
  69. package/lib/esm/synchronizeAuthStatusQuery-lLR0XFew.js.map +1 -0
  70. package/lib/esm/{components/backoffice/actions/toastViewAction.js → toastViewAction-BGTS7vqm.js} +2 -2
  71. package/lib/esm/{components/backoffice/actions/toastViewAction.js.map → toastViewAction-BGTS7vqm.js.map} +1 -1
  72. package/lib/esm/useAuth-AczFS-oL.js +543 -0
  73. package/lib/esm/useAuth-AczFS-oL.js.map +1 -0
  74. package/lib/esm/useBackofficeAuth-BHteJQzA.js +89 -0
  75. package/lib/esm/useBackofficeAuth-BHteJQzA.js.map +1 -0
  76. package/lib/esm/{provider/useBackofficeLazyValue.js → useBackofficeLazyValue-B0-ckL6e.js} +7 -15
  77. package/lib/esm/useBackofficeLazyValue-B0-ckL6e.js.map +1 -0
  78. package/lib/esm/{hooks/useBackofficeListUrlState.js → useBackofficeListUrlState-D4fx5O7u.js} +2 -2
  79. package/lib/esm/useBackofficeListUrlState-D4fx5O7u.js.map +1 -0
  80. package/lib/esm/{components/backoffice/errors/BackofficeErrorBoundary.js → useBackofficeReactTranslation-WfXU8kCf.js} +9 -3
  81. package/lib/esm/useBackofficeReactTranslation-WfXU8kCf.js.map +1 -0
  82. package/lib/esm/{relay/useRelayEnvironment.js → useRelayEnvironment-vQ86aW-n.js} +2 -2
  83. package/lib/esm/useRelayEnvironment-vQ86aW-n.js.map +1 -0
  84. package/lib/types/auth/login/EmailCapturePanel.d.ts.map +1 -1
  85. package/lib/types/auth/login/MethodChooser.d.ts.map +1 -1
  86. package/lib/types/auth/login/MfaChallengeForm.d.ts.map +1 -1
  87. package/lib/types/auth/login/PasskeyLoginForm.d.ts.map +1 -1
  88. package/lib/types/auth/login/PasswordLoginPanel.d.ts +1 -1
  89. package/lib/types/auth/login/PasswordLoginPanel.d.ts.map +1 -1
  90. package/lib/types/auth/pages/AcceptInvitationScreen.d.ts.map +1 -1
  91. package/lib/types/auth/pages/PasswordResetCompleteScreen.d.ts.map +1 -1
  92. package/lib/types/auth/pages/PasswordResetRequestScreen.d.ts.map +1 -1
  93. package/lib/types/auth/pages/VerifyEmailScreen.d.ts.map +1 -1
  94. package/lib/types/components/backoffice/detail/BackofficeDetailErrorList.d.ts.map +1 -1
  95. package/lib/types/components/backoffice/detail/BackofficeDetailField.d.ts.map +1 -1
  96. package/lib/types/components/backoffice/filters/BackofficeFilterAction.d.ts.map +1 -1
  97. package/lib/types/components/backoffice/layout/buildSidebarSections.d.ts +1 -1
  98. package/lib/types/components/backoffice/layout/buildSidebarSections.d.ts.map +1 -1
  99. package/lib/types/components/backoffice/pickers/EntityIdPickerDialog.d.ts.map +1 -1
  100. package/lib/types/components/backoffice/scaffolds/BackofficeEntityListScaffold.d.ts.map +1 -1
  101. package/lib/types/filters/filterHelpers.d.ts +1 -1
  102. package/lib/types/filters/filterHelpers.d.ts.map +1 -1
  103. package/lib/types/i18n/resources.d.ts +0 -12
  104. package/lib/types/i18n/resources.d.ts.map +1 -1
  105. package/lib/types/index.d.ts +5 -6
  106. package/lib/types/index.d.ts.map +1 -1
  107. package/lib/types/pages/BackofficeEntityDetailPage.d.ts.map +1 -1
  108. package/lib/types/provider/BackofficeConfigContext.d.ts +1 -0
  109. package/lib/types/provider/BackofficeConfigContext.d.ts.map +1 -1
  110. package/lib/types/provider/BackofficeProvider.d.ts.map +1 -1
  111. package/lib/types/provider/types.d.ts +4 -1
  112. package/lib/types/provider/types.d.ts.map +1 -1
  113. package/lib/types/relay/environment.d.ts +1 -0
  114. package/lib/types/relay/environment.d.ts.map +1 -1
  115. package/lib/types/router/createBackofficeRoutes.d.ts +1 -1
  116. package/lib/types/router/createBackofficeRoutes.d.ts.map +1 -1
  117. package/package.json +9 -9
  118. package/lib/esm/auth/login/AuthPanel.js.map +0 -1
  119. package/lib/esm/auth/login/EmailCapturePanel.js +0 -52
  120. package/lib/esm/auth/login/EmailCapturePanel.js.map +0 -1
  121. package/lib/esm/auth/login/LoginFlow.js +0 -130
  122. package/lib/esm/auth/login/LoginFlow.js.map +0 -1
  123. package/lib/esm/auth/login/MethodChooser.js +0 -51
  124. package/lib/esm/auth/login/MethodChooser.js.map +0 -1
  125. package/lib/esm/auth/login/MfaChallengeForm.js +0 -83
  126. package/lib/esm/auth/login/MfaChallengeForm.js.map +0 -1
  127. package/lib/esm/auth/login/OidcButtons.js +0 -29
  128. package/lib/esm/auth/login/OidcButtons.js.map +0 -1
  129. package/lib/esm/auth/login/PasskeyLoginForm.js +0 -84
  130. package/lib/esm/auth/login/PasskeyLoginForm.js.map +0 -1
  131. package/lib/esm/auth/login/PasswordLoginPanel.js +0 -37
  132. package/lib/esm/auth/login/PasswordLoginPanel.js.map +0 -1
  133. package/lib/esm/auth/login/loginPage.css.js +0 -8
  134. package/lib/esm/auth/login/loginPage.css.js.map +0 -1
  135. package/lib/esm/auth/login/synchronizeAuthStatusQuery.js +0 -10
  136. package/lib/esm/auth/login/synchronizeAuthStatusQuery.js.map +0 -1
  137. package/lib/esm/auth/pages/AcceptInvitationScreen.js.map +0 -1
  138. package/lib/esm/auth/pages/PasswordResetCompleteScreen.js.map +0 -1
  139. package/lib/esm/auth/pages/PasswordResetRequestScreen.js.map +0 -1
  140. package/lib/esm/auth/pages/VerifyEmailScreen.js +0 -65
  141. package/lib/esm/auth/pages/VerifyEmailScreen.js.map +0 -1
  142. package/lib/esm/components/backoffice/actions/BackofficeEntityActionFormDialog.js.map +0 -1
  143. package/lib/esm/components/backoffice/actions/LazyBackofficeEntityActionFormDialog.js +0 -11
  144. package/lib/esm/components/backoffice/actions/LazyBackofficeEntityActionFormDialog.js.map +0 -1
  145. package/lib/esm/components/backoffice/actions/backofficeEntityActionFormDialog.css.js +0 -8
  146. package/lib/esm/components/backoffice/actions/backofficeEntityActionFormDialog.css.js.map +0 -1
  147. package/lib/esm/components/backoffice/columns/buildDataTableColumns.js +0 -59
  148. package/lib/esm/components/backoffice/columns/buildDataTableColumns.js.map +0 -1
  149. package/lib/esm/components/backoffice/detail/BackofficeDetailBadgeRow.js +0 -22
  150. package/lib/esm/components/backoffice/detail/BackofficeDetailBadgeRow.js.map +0 -1
  151. package/lib/esm/components/backoffice/detail/BackofficeDetailErrorList.js +0 -41
  152. package/lib/esm/components/backoffice/detail/BackofficeDetailErrorList.js.map +0 -1
  153. package/lib/esm/components/backoffice/detail/BackofficeDetailField.js +0 -31
  154. package/lib/esm/components/backoffice/detail/BackofficeDetailField.js.map +0 -1
  155. package/lib/esm/components/backoffice/detail/BackofficeDetailFlagTag.css.js +0 -8
  156. package/lib/esm/components/backoffice/detail/BackofficeDetailFlagTag.css.js.map +0 -1
  157. package/lib/esm/components/backoffice/detail/BackofficeDetailFlagTag.js +0 -24
  158. package/lib/esm/components/backoffice/detail/BackofficeDetailFlagTag.js.map +0 -1
  159. package/lib/esm/components/backoffice/detail/BackofficeDetailLayout.js +0 -20
  160. package/lib/esm/components/backoffice/detail/BackofficeDetailLayout.js.map +0 -1
  161. package/lib/esm/components/backoffice/detail/BackofficeDetailPayload.js +0 -18
  162. package/lib/esm/components/backoffice/detail/BackofficeDetailPayload.js.map +0 -1
  163. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationLink.js +0 -49
  164. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationLink.js.map +0 -1
  165. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationList.js +0 -11
  166. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationList.js.map +0 -1
  167. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationListBlock.js +0 -115
  168. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationListBlock.js.map +0 -1
  169. package/lib/esm/components/backoffice/detail/BackofficeDetailSection.js +0 -33
  170. package/lib/esm/components/backoffice/detail/BackofficeDetailSection.js.map +0 -1
  171. package/lib/esm/components/backoffice/detail/BackofficeDetailTaggedValue.js +0 -18
  172. package/lib/esm/components/backoffice/detail/BackofficeDetailTaggedValue.js.map +0 -1
  173. package/lib/esm/components/backoffice/detail/backofficeDetailBadgeRow.css.js +0 -8
  174. package/lib/esm/components/backoffice/detail/backofficeDetailBadgeRow.css.js.map +0 -1
  175. package/lib/esm/components/backoffice/detail/backofficeDetailErrorList.css.js +0 -8
  176. package/lib/esm/components/backoffice/detail/backofficeDetailErrorList.css.js.map +0 -1
  177. package/lib/esm/components/backoffice/detail/backofficeDetailField.css.js +0 -15
  178. package/lib/esm/components/backoffice/detail/backofficeDetailField.css.js.map +0 -1
  179. package/lib/esm/components/backoffice/detail/backofficeDetailLayout.css.js +0 -8
  180. package/lib/esm/components/backoffice/detail/backofficeDetailLayout.css.js.map +0 -1
  181. package/lib/esm/components/backoffice/detail/backofficeDetailRelationLink.css.js +0 -8
  182. package/lib/esm/components/backoffice/detail/backofficeDetailRelationLink.css.js.map +0 -1
  183. package/lib/esm/components/backoffice/detail/backofficeDetailRelationList.css.js +0 -8
  184. package/lib/esm/components/backoffice/detail/backofficeDetailRelationList.css.js.map +0 -1
  185. package/lib/esm/components/backoffice/detail/backofficeDetailSection.css.js +0 -8
  186. package/lib/esm/components/backoffice/detail/backofficeDetailSection.css.js.map +0 -1
  187. package/lib/esm/components/backoffice/detail/backofficeDetailTaggedValue.css.js +0 -8
  188. package/lib/esm/components/backoffice/detail/backofficeDetailTaggedValue.css.js.map +0 -1
  189. package/lib/esm/components/backoffice/detail/detailPayloadUtils.js +0 -17
  190. package/lib/esm/components/backoffice/detail/detailPayloadUtils.js.map +0 -1
  191. package/lib/esm/components/backoffice/errors/BackofficeErrorBoundary.js.map +0 -1
  192. package/lib/esm/components/backoffice/filters/BackofficeFilterAction.js +0 -43
  193. package/lib/esm/components/backoffice/filters/BackofficeFilterAction.js.map +0 -1
  194. package/lib/esm/components/backoffice/filters/EntityFilterValue.js +0 -46
  195. package/lib/esm/components/backoffice/filters/EntityFilterValue.js.map +0 -1
  196. package/lib/esm/components/backoffice/filters/EntityIdFilterField.js +0 -51
  197. package/lib/esm/components/backoffice/filters/EntityIdFilterField.js.map +0 -1
  198. package/lib/esm/components/backoffice/filters/backofficeFilterAction.css.js +0 -8
  199. package/lib/esm/components/backoffice/filters/backofficeFilterAction.css.js.map +0 -1
  200. package/lib/esm/components/backoffice/filters/entityIdFilterField.css.js +0 -8
  201. package/lib/esm/components/backoffice/filters/entityIdFilterField.css.js.map +0 -1
  202. package/lib/esm/components/backoffice/layout/backofficeSidebarActions.css.js +0 -8
  203. package/lib/esm/components/backoffice/layout/backofficeSidebarActions.css.js.map +0 -1
  204. package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js +0 -10
  205. package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js.map +0 -1
  206. package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.js +0 -38
  207. package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.js.map +0 -1
  208. package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarPortal.js +0 -12
  209. package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarPortal.js.map +0 -1
  210. package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarPortalContext.js.map +0 -1
  211. package/lib/esm/components/backoffice/layout/breadcrumb/assertValidBreadcrumb.js +0 -16
  212. package/lib/esm/components/backoffice/layout/breadcrumb/assertValidBreadcrumb.js.map +0 -1
  213. package/lib/esm/components/backoffice/layout/breadcrumb/backofficeTopbarBreadcrumb.css.js +0 -8
  214. package/lib/esm/components/backoffice/layout/breadcrumb/backofficeTopbarBreadcrumb.css.js.map +0 -1
  215. package/lib/esm/components/backoffice/layout/breadcrumb/buildBreadcrumbs.js.map +0 -1
  216. package/lib/esm/components/backoffice/layout/breadcrumb/types.js +0 -0
  217. package/lib/esm/components/backoffice/layout/buildSidebarSections.js +0 -183
  218. package/lib/esm/components/backoffice/layout/buildSidebarSections.js.map +0 -1
  219. package/lib/esm/components/backoffice/layout/mapViewerToSidebarProfileView.js +0 -18
  220. package/lib/esm/components/backoffice/layout/mapViewerToSidebarProfileView.js.map +0 -1
  221. package/lib/esm/components/backoffice/list/RowFlagsCell.css.js +0 -7
  222. package/lib/esm/components/backoffice/list/RowFlagsCell.css.js.map +0 -1
  223. package/lib/esm/components/backoffice/list/RowFlagsCell.js +0 -37
  224. package/lib/esm/components/backoffice/list/RowFlagsCell.js.map +0 -1
  225. package/lib/esm/components/backoffice/overview/BackofficeOverviewLayout.js +0 -31
  226. package/lib/esm/components/backoffice/overview/BackofficeOverviewLayout.js.map +0 -1
  227. package/lib/esm/components/backoffice/overview/backofficeOverviewLayout.css.js +0 -8
  228. package/lib/esm/components/backoffice/overview/backofficeOverviewLayout.css.js.map +0 -1
  229. package/lib/esm/components/backoffice/pickers/EntityIdPickerDialog.js +0 -106
  230. package/lib/esm/components/backoffice/pickers/EntityIdPickerDialog.js.map +0 -1
  231. package/lib/esm/components/backoffice/pickers/entityIdPickerDialog.css.js +0 -8
  232. package/lib/esm/components/backoffice/pickers/entityIdPickerDialog.css.js.map +0 -1
  233. package/lib/esm/components/backoffice/pickers/shared/EntityPickerList.js +0 -23
  234. package/lib/esm/components/backoffice/pickers/shared/EntityPickerList.js.map +0 -1
  235. package/lib/esm/components/backoffice/pickers/shared/EntityPickerRowBase.js +0 -23
  236. package/lib/esm/components/backoffice/pickers/shared/EntityPickerRowBase.js.map +0 -1
  237. package/lib/esm/components/backoffice/pickers/shared/EntityPickerShell.js +0 -24
  238. package/lib/esm/components/backoffice/pickers/shared/EntityPickerShell.js.map +0 -1
  239. package/lib/esm/components/backoffice/pickers/types.js +0 -0
  240. package/lib/esm/components/backoffice/refs/BackofficeEntityIdRef.js +0 -35
  241. package/lib/esm/components/backoffice/refs/BackofficeEntityIdRef.js.map +0 -1
  242. package/lib/esm/components/backoffice/refs/BackofficeRelatedCountLink.js +0 -54
  243. package/lib/esm/components/backoffice/refs/BackofficeRelatedCountLink.js.map +0 -1
  244. package/lib/esm/components/backoffice/refs/backofficeEntityIdRef.css.js +0 -8
  245. package/lib/esm/components/backoffice/refs/backofficeEntityIdRef.css.js.map +0 -1
  246. package/lib/esm/components/backoffice/refs/backofficeRelatedCountLink.css.js +0 -8
  247. package/lib/esm/components/backoffice/refs/backofficeRelatedCountLink.css.js.map +0 -1
  248. package/lib/esm/components/backoffice/routing/BackofficeContentBoundary.js +0 -24
  249. package/lib/esm/components/backoffice/routing/BackofficeContentBoundary.js.map +0 -1
  250. package/lib/esm/components/backoffice/routing/BackofficeContentError.js +0 -38
  251. package/lib/esm/components/backoffice/routing/BackofficeContentError.js.map +0 -1
  252. package/lib/esm/components/backoffice/routing/BackofficeContentFallback.js +0 -47
  253. package/lib/esm/components/backoffice/routing/BackofficeContentFallback.js.map +0 -1
  254. package/lib/esm/components/backoffice/routing/BackofficeRouteFallback.js +0 -22
  255. package/lib/esm/components/backoffice/routing/BackofficeRouteFallback.js.map +0 -1
  256. package/lib/esm/components/backoffice/routing/BackofficeRoutePendingBar.js +0 -12
  257. package/lib/esm/components/backoffice/routing/BackofficeRoutePendingBar.js.map +0 -1
  258. package/lib/esm/components/backoffice/routing/backofficeContentBoundary.css.js +0 -8
  259. package/lib/esm/components/backoffice/routing/backofficeContentBoundary.css.js.map +0 -1
  260. package/lib/esm/components/backoffice/routing/backofficeContentError.css.js +0 -8
  261. package/lib/esm/components/backoffice/routing/backofficeContentError.css.js.map +0 -1
  262. package/lib/esm/components/backoffice/routing/backofficeContentFallback.css.js +0 -8
  263. package/lib/esm/components/backoffice/routing/backofficeContentFallback.css.js.map +0 -1
  264. package/lib/esm/components/backoffice/routing/backofficeRouteFallback.css.js +0 -8
  265. package/lib/esm/components/backoffice/routing/backofficeRouteFallback.css.js.map +0 -1
  266. package/lib/esm/components/backoffice/routing/backofficeRoutePendingBar.css.js +0 -8
  267. package/lib/esm/components/backoffice/routing/backofficeRoutePendingBar.css.js.map +0 -1
  268. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityDetailScaffold.js +0 -11
  269. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityDetailScaffold.js.map +0 -1
  270. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js +0 -438
  271. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js.map +0 -1
  272. package/lib/esm/components/backoffice/scaffolds/BackofficeListFilterContext.js +0 -40
  273. package/lib/esm/components/backoffice/scaffolds/BackofficeListFilterContext.js.map +0 -1
  274. package/lib/esm/components/backoffice/scaffolds/BackofficeTabbedDetailShell.js +0 -24
  275. package/lib/esm/components/backoffice/scaffolds/BackofficeTabbedDetailShell.js.map +0 -1
  276. package/lib/esm/components/backoffice/scaffolds/backofficeEntityListScaffold.css.js +0 -8
  277. package/lib/esm/components/backoffice/scaffolds/backofficeEntityListScaffold.css.js.map +0 -1
  278. package/lib/esm/components/backoffice/scaffolds/backofficeTabbedDetailShell.css.js +0 -8
  279. package/lib/esm/components/backoffice/scaffolds/backofficeTabbedDetailShell.css.js.map +0 -1
  280. package/lib/esm/components/backoffice/shared/BackofficeInlineFilterRow.js +0 -12
  281. package/lib/esm/components/backoffice/shared/BackofficeInlineFilterRow.js.map +0 -1
  282. package/lib/esm/components/backoffice/shared/backofficeInlineFilterRow.css.js +0 -8
  283. package/lib/esm/components/backoffice/shared/backofficeInlineFilterRow.css.js.map +0 -1
  284. package/lib/esm/components/backoffice/tools/BackofficeToolsDocPanel.js +0 -40
  285. package/lib/esm/components/backoffice/tools/BackofficeToolsDocPanel.js.map +0 -1
  286. package/lib/esm/components/backoffice/tools/BackofficeToolsErrorFallback.js +0 -48
  287. package/lib/esm/components/backoffice/tools/BackofficeToolsErrorFallback.js.map +0 -1
  288. package/lib/esm/components/backoffice/tools/BackofficeToolsJsonForm.js +0 -58
  289. package/lib/esm/components/backoffice/tools/BackofficeToolsJsonForm.js.map +0 -1
  290. package/lib/esm/components/backoffice/tools/BackofficeToolsPageLayout.js +0 -81
  291. package/lib/esm/components/backoffice/tools/BackofficeToolsPageLayout.js.map +0 -1
  292. package/lib/esm/components/backoffice/tools/BackofficeToolsParamsContext.js +0 -16
  293. package/lib/esm/components/backoffice/tools/BackofficeToolsParamsContext.js.map +0 -1
  294. package/lib/esm/components/backoffice/tools/BackofficeToolsProjectPicker.js +0 -56
  295. package/lib/esm/components/backoffice/tools/BackofficeToolsProjectPicker.js.map +0 -1
  296. package/lib/esm/components/backoffice/tools/BackofficeToolsQueryBoundary.js +0 -20
  297. package/lib/esm/components/backoffice/tools/BackofficeToolsQueryBoundary.js.map +0 -1
  298. package/lib/esm/components/backoffice/tools/BackofficeToolsScopePicker.js +0 -56
  299. package/lib/esm/components/backoffice/tools/BackofficeToolsScopePicker.js.map +0 -1
  300. package/lib/esm/components/backoffice/tools/backofficeToolsDocPanel.css.js +0 -8
  301. package/lib/esm/components/backoffice/tools/backofficeToolsDocPanel.css.js.map +0 -1
  302. package/lib/esm/components/backoffice/tools/backofficeToolsForm.css.js +0 -8
  303. package/lib/esm/components/backoffice/tools/backofficeToolsForm.css.js.map +0 -1
  304. package/lib/esm/components/backoffice/tools/backofficeToolsJsonForm.css.js +0 -8
  305. package/lib/esm/components/backoffice/tools/backofficeToolsJsonForm.css.js.map +0 -1
  306. package/lib/esm/components/backoffice/tools/backofficeToolsPageLayout.css.js +0 -8
  307. package/lib/esm/components/backoffice/tools/backofficeToolsPageLayout.css.js.map +0 -1
  308. package/lib/esm/components/backoffice/tools/backofficeToolsProjectPicker.css.js +0 -8
  309. package/lib/esm/components/backoffice/tools/backofficeToolsProjectPicker.css.js.map +0 -1
  310. package/lib/esm/components/backoffice/tools/backofficeToolsScopePicker.css.js +0 -8
  311. package/lib/esm/components/backoffice/tools/backofficeToolsScopePicker.css.js.map +0 -1
  312. package/lib/esm/filters/filterHelpers.js +0 -36
  313. package/lib/esm/filters/filterHelpers.js.map +0 -1
  314. package/lib/esm/hooks/useAuth.js +0 -439
  315. package/lib/esm/hooks/useAuth.js.map +0 -1
  316. package/lib/esm/hooks/useBackofficeAuth.js +0 -89
  317. package/lib/esm/hooks/useBackofficeAuth.js.map +0 -1
  318. package/lib/esm/hooks/useBackofficeListRefetch.js +0 -40
  319. package/lib/esm/hooks/useBackofficeListRefetch.js.map +0 -1
  320. package/lib/esm/hooks/useBackofficeListUrlState.js.map +0 -1
  321. package/lib/esm/hooks/useBackofficeLoadMore.js +0 -18
  322. package/lib/esm/hooks/useBackofficeLoadMore.js.map +0 -1
  323. package/lib/esm/hooks/useBackofficeSessionAuth.js +0 -28
  324. package/lib/esm/hooks/useBackofficeSessionAuth.js.map +0 -1
  325. package/lib/esm/hooks/useBackofficeSidebarPins.js +0 -70
  326. package/lib/esm/hooks/useBackofficeSidebarPins.js.map +0 -1
  327. package/lib/esm/hooks/useBackofficeToolsUrlParams.js +0 -15
  328. package/lib/esm/hooks/useBackofficeToolsUrlParams.js.map +0 -1
  329. package/lib/esm/hooks/useConditionalSubscription.js +0 -57
  330. package/lib/esm/hooks/useConditionalSubscription.js.map +0 -1
  331. package/lib/esm/hooks/useCopyToClipboard.js +0 -31
  332. package/lib/esm/hooks/useCopyToClipboard.js.map +0 -1
  333. package/lib/esm/hooks/useRefetchNeededReload.js +0 -23
  334. package/lib/esm/hooks/useRefetchNeededReload.js.map +0 -1
  335. package/lib/esm/hooks/useSidebarGroupCollapse.js +0 -35
  336. package/lib/esm/hooks/useSidebarGroupCollapse.js.map +0 -1
  337. package/lib/esm/i18n/createI18nInstance.js +0 -62
  338. package/lib/esm/i18n/createI18nInstance.js.map +0 -1
  339. package/lib/esm/i18n/locales/en/backofficeReact.js +0 -249
  340. package/lib/esm/i18n/locales/en/backofficeReact.js.map +0 -1
  341. package/lib/esm/i18n/locales/en/shared.js +0 -207
  342. package/lib/esm/i18n/locales/en/shared.js.map +0 -1
  343. package/lib/esm/i18n/locales/fr/backofficeReact.js +0 -251
  344. package/lib/esm/i18n/locales/fr/backofficeReact.js.map +0 -1
  345. package/lib/esm/i18n/locales/fr/shared.js +0 -207
  346. package/lib/esm/i18n/locales/fr/shared.js.map +0 -1
  347. package/lib/esm/i18n/mergeResourceLanguages.js +0 -19
  348. package/lib/esm/i18n/mergeResourceLanguages.js.map +0 -1
  349. package/lib/esm/i18n/resources.js +0 -19
  350. package/lib/esm/i18n/resources.js.map +0 -1
  351. package/lib/esm/i18n/useBackofficeFormats.js +0 -23
  352. package/lib/esm/i18n/useBackofficeFormats.js.map +0 -1
  353. package/lib/esm/i18n/useBackofficeReactTranslation.js +0 -9
  354. package/lib/esm/i18n/useBackofficeReactTranslation.js.map +0 -1
  355. package/lib/esm/i18n/useReviewStatusLabel.js +0 -19
  356. package/lib/esm/i18n/useReviewStatusLabel.js.map +0 -1
  357. package/lib/esm/i18n/useSharedEnumLabels.js +0 -22
  358. package/lib/esm/i18n/useSharedEnumLabels.js.map +0 -1
  359. package/lib/esm/i18n/useSharedTranslation.js +0 -9
  360. package/lib/esm/i18n/useSharedTranslation.js.map +0 -1
  361. package/lib/esm/index.js +0 -43
  362. package/lib/esm/modules/access/viewerPermissionsPolicy.js +0 -17
  363. package/lib/esm/modules/access/viewerPermissionsPolicy.js.map +0 -1
  364. package/lib/esm/modules/base64.js +0 -23
  365. package/lib/esm/modules/base64.js.map +0 -1
  366. package/lib/esm/modules/billing/usageChartMappers.js +0 -49
  367. package/lib/esm/modules/billing/usageChartMappers.js.map +0 -1
  368. package/lib/esm/modules/formatFileSize.js +0 -28
  369. package/lib/esm/modules/formatFileSize.js.map +0 -1
  370. package/lib/esm/modules/merge/taskMergeRun.js +0 -67
  371. package/lib/esm/modules/merge/taskMergeRun.js.map +0 -1
  372. package/lib/esm/modules/projectIngestionStatus.js +0 -25
  373. package/lib/esm/modules/projectIngestionStatus.js.map +0 -1
  374. package/lib/esm/modules/sharedSchemaTypes.js +0 -0
  375. package/lib/esm/modules/webauthn.js +0 -33
  376. package/lib/esm/modules/webauthn.js.map +0 -1
  377. package/lib/esm/pages/BackofficeAcceptInvitationPage.js +0 -24
  378. package/lib/esm/pages/BackofficeAcceptInvitationPage.js.map +0 -1
  379. package/lib/esm/pages/BackofficeDashboardPage.js +0 -197
  380. package/lib/esm/pages/BackofficeDashboardPage.js.map +0 -1
  381. package/lib/esm/pages/BackofficeEntityDetailLayoutPage.js +0 -18
  382. package/lib/esm/pages/BackofficeEntityDetailLayoutPage.js.map +0 -1
  383. package/lib/esm/pages/BackofficeEntityDetailPage.js +0 -837
  384. package/lib/esm/pages/BackofficeEntityDetailPage.js.map +0 -1
  385. package/lib/esm/pages/BackofficeEntityDetailUnknownPageRedirect.js.map +0 -1
  386. package/lib/esm/pages/BackofficeEntityListPage.js +0 -363
  387. package/lib/esm/pages/BackofficeEntityListPage.js.map +0 -1
  388. package/lib/esm/pages/BackofficeLayoutPage.js +0 -137
  389. package/lib/esm/pages/BackofficeLayoutPage.js.map +0 -1
  390. package/lib/esm/pages/BackofficeLoginPage.js +0 -46
  391. package/lib/esm/pages/BackofficeLoginPage.js.map +0 -1
  392. package/lib/esm/pages/BackofficePasswordResetCompletePage.js +0 -59
  393. package/lib/esm/pages/BackofficePasswordResetCompletePage.js.map +0 -1
  394. package/lib/esm/pages/BackofficePasswordResetRequestPage.js.map +0 -1
  395. package/lib/esm/pages/BackofficeToolsOperationPage.js +0 -464
  396. package/lib/esm/pages/BackofficeToolsOperationPage.js.map +0 -1
  397. package/lib/esm/pages/BackofficeVerifyEmailPage.js +0 -59
  398. package/lib/esm/pages/BackofficeVerifyEmailPage.js.map +0 -1
  399. package/lib/esm/pages/backofficeDashboardPage.css.js +0 -8
  400. package/lib/esm/pages/backofficeDashboardPage.css.js.map +0 -1
  401. package/lib/esm/pages/backofficeEntityDetailPage.css.js +0 -8
  402. package/lib/esm/pages/backofficeEntityDetailPage.css.js.map +0 -1
  403. package/lib/esm/pages/backofficeEntityListPage.css.js +0 -8
  404. package/lib/esm/pages/backofficeEntityListPage.css.js.map +0 -1
  405. package/lib/esm/pages/detail/BackofficeEntityDetailLayoutContext.js.map +0 -1
  406. package/lib/esm/pages/detail/buildTabsItems.js +0 -10
  407. package/lib/esm/pages/detail/buildTabsItems.js.map +0 -1
  408. package/lib/esm/pages/detail/pageResolution.js.map +0 -1
  409. package/lib/esm/provider/BackofficeConfigContext.js.map +0 -1
  410. package/lib/esm/provider/BackofficeProvider.js +0 -150
  411. package/lib/esm/provider/BackofficeProvider.js.map +0 -1
  412. package/lib/esm/provider/entityRegistry.js +0 -91
  413. package/lib/esm/provider/entityRegistry.js.map +0 -1
  414. package/lib/esm/provider/lazyValue.js +0 -14
  415. package/lib/esm/provider/lazyValue.js.map +0 -1
  416. package/lib/esm/provider/types.js +0 -0
  417. package/lib/esm/provider/useBackofficeEntityLoader.js +0 -137
  418. package/lib/esm/provider/useBackofficeEntityLoader.js.map +0 -1
  419. package/lib/esm/provider/useBackofficeLazyValue.js.map +0 -1
  420. package/lib/esm/relay/RelayProvider.js +0 -12
  421. package/lib/esm/relay/RelayProvider.js.map +0 -1
  422. package/lib/esm/relay/createInlineDataReader.js +0 -2
  423. package/lib/esm/relay/createInlineReader.js +0 -7
  424. package/lib/esm/relay/createInlineReader.js.map +0 -1
  425. package/lib/esm/relay/envHelpers.js +0 -46
  426. package/lib/esm/relay/envHelpers.js.map +0 -1
  427. package/lib/esm/relay/environment.js.map +0 -1
  428. package/lib/esm/relay/identityView.js +0 -6
  429. package/lib/esm/relay/identityView.js.map +0 -1
  430. package/lib/esm/relay/mutationResult.js.map +0 -1
  431. package/lib/esm/relay/useRelayEnvironment.js.map +0 -1
  432. package/lib/esm/router/backofficeAuthPaths.js.map +0 -1
  433. package/lib/esm/router/createBackofficeRoutes.js +0 -273
  434. package/lib/esm/router/createBackofficeRoutes.js.map +0 -1
  435. package/lib/esm/style.js +0 -1
  436. package/lib/esm/subscriptions/conversationStream.js +0 -38
  437. package/lib/esm/subscriptions/conversationStream.js.map +0 -1
  438. package/lib/types/components/backoffice/tools/BackofficeToolsDocPanel.d.ts +0 -11
  439. package/lib/types/components/backoffice/tools/BackofficeToolsDocPanel.d.ts.map +0 -1
  440. package/lib/types/components/backoffice/tools/BackofficeToolsErrorFallback.d.ts +0 -8
  441. package/lib/types/components/backoffice/tools/BackofficeToolsErrorFallback.d.ts.map +0 -1
  442. package/lib/types/components/backoffice/tools/BackofficeToolsJsonForm.d.ts +0 -15
  443. package/lib/types/components/backoffice/tools/BackofficeToolsJsonForm.d.ts.map +0 -1
  444. package/lib/types/components/backoffice/tools/BackofficeToolsPageLayout.d.ts +0 -13
  445. package/lib/types/components/backoffice/tools/BackofficeToolsPageLayout.d.ts.map +0 -1
  446. package/lib/types/components/backoffice/tools/BackofficeToolsParamsContext.d.ts +0 -14
  447. package/lib/types/components/backoffice/tools/BackofficeToolsParamsContext.d.ts.map +0 -1
  448. package/lib/types/components/backoffice/tools/BackofficeToolsProjectPicker.d.ts +0 -8
  449. package/lib/types/components/backoffice/tools/BackofficeToolsProjectPicker.d.ts.map +0 -1
  450. package/lib/types/components/backoffice/tools/BackofficeToolsQueryBoundary.d.ts +0 -7
  451. package/lib/types/components/backoffice/tools/BackofficeToolsQueryBoundary.d.ts.map +0 -1
  452. package/lib/types/components/backoffice/tools/BackofficeToolsScopePicker.d.ts +0 -8
  453. package/lib/types/components/backoffice/tools/BackofficeToolsScopePicker.d.ts.map +0 -1
  454. package/lib/types/components/backoffice/tools/backofficeToolsDocPanel.css.d.ts +0 -8
  455. package/lib/types/components/backoffice/tools/backofficeToolsDocPanel.css.d.ts.map +0 -1
  456. package/lib/types/components/backoffice/tools/backofficeToolsForm.css.d.ts +0 -6
  457. package/lib/types/components/backoffice/tools/backofficeToolsForm.css.d.ts.map +0 -1
  458. package/lib/types/components/backoffice/tools/backofficeToolsJsonForm.css.d.ts +0 -4
  459. package/lib/types/components/backoffice/tools/backofficeToolsJsonForm.css.d.ts.map +0 -1
  460. package/lib/types/components/backoffice/tools/backofficeToolsPageLayout.css.d.ts +0 -13
  461. package/lib/types/components/backoffice/tools/backofficeToolsPageLayout.css.d.ts.map +0 -1
  462. package/lib/types/components/backoffice/tools/backofficeToolsProjectPicker.css.d.ts +0 -4
  463. package/lib/types/components/backoffice/tools/backofficeToolsProjectPicker.css.d.ts.map +0 -1
  464. package/lib/types/components/backoffice/tools/backofficeToolsScopePicker.css.d.ts +0 -4
  465. package/lib/types/components/backoffice/tools/backofficeToolsScopePicker.css.d.ts.map +0 -1
  466. package/lib/types/hooks/useBackofficeToolsUrlParams.d.ts +0 -8
  467. package/lib/types/hooks/useBackofficeToolsUrlParams.d.ts.map +0 -1
  468. package/lib/types/i18n/useSharedEnumLabels.d.ts +0 -6
  469. package/lib/types/i18n/useSharedEnumLabels.d.ts.map +0 -1
  470. package/lib/types/modules/access/viewerPermissionsPolicy.d.ts +0 -38
  471. package/lib/types/modules/access/viewerPermissionsPolicy.d.ts.map +0 -1
  472. package/lib/types/modules/billing/usageChartMappers.d.ts +0 -26
  473. package/lib/types/modules/billing/usageChartMappers.d.ts.map +0 -1
  474. package/lib/types/modules/merge/taskMergeRun.d.ts +0 -48
  475. package/lib/types/modules/merge/taskMergeRun.d.ts.map +0 -1
  476. package/lib/types/modules/projectIngestionStatus.d.ts +0 -9
  477. package/lib/types/modules/projectIngestionStatus.d.ts.map +0 -1
  478. package/lib/types/pages/BackofficeToolsOperationPage.d.ts +0 -9
  479. package/lib/types/pages/BackofficeToolsOperationPage.d.ts.map +0 -1
  480. package/lib/types/subscriptions/conversationStream.d.ts +0 -12
  481. package/lib/types/subscriptions/conversationStream.d.ts.map +0 -1
package/package.json CHANGED
@@ -1,18 +1,18 @@
1
1
  {
2
2
  "name": "@plumile/backoffice-react",
3
- "version": "0.1.70",
3
+ "version": "0.1.73",
4
4
  "description": "React provider and pages for Plumile backoffice",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
- "main": "lib/esm/index.js",
8
- "module": "lib/esm/index.js",
7
+ "main": "lib/esm/backoffice-react.js",
8
+ "module": "lib/esm/backoffice-react.js",
9
9
  "types": "lib/types/index.d.ts",
10
10
  "typings": "lib/types/index.d.ts",
11
11
  "exports": {
12
12
  ".": {
13
13
  "types": "./lib/types/index.d.ts",
14
- "import": "./lib/esm/index.js",
15
- "default": "./lib/esm/index.js"
14
+ "import": "./lib/esm/backoffice-react.js",
15
+ "default": "./lib/esm/backoffice-react.js"
16
16
  },
17
17
  "./style.css": "./lib/esm/style.css",
18
18
  "./auth/*.js": {
@@ -158,10 +158,10 @@
158
158
  "npm": ">=8.0.0"
159
159
  },
160
160
  "dependencies": {
161
- "@plumile/backoffice-core": "^0.1.70",
162
- "@plumile/filter-query": "^0.1.70",
163
- "@plumile/router": "^0.1.70",
164
- "@plumile/ui": "^0.1.70",
161
+ "@plumile/backoffice-core": "^0.1.73",
162
+ "@plumile/filter-query": "^0.1.73",
163
+ "@plumile/router": "^0.1.73",
164
+ "@plumile/ui": "^0.1.73",
165
165
  "graphql-ws": "6.0.7",
166
166
  "i18next": "^25.8.18",
167
167
  "i18next-browser-languagedetector": "8.2.1",
@@ -1 +0,0 @@
1
- {"version":3,"file":"AuthPanel.js","names":[],"sources":["../../../../src/auth/login/AuthPanel.tsx"],"sourcesContent":["/* eslint-disable no-ternary */\nimport { type JSX, type ReactNode } from 'react';\n\nimport * as styles from './loginPage.css.js';\n\ntype Props = {\n title?: string;\n description?: string;\n children: ReactNode;\n footer?: ReactNode;\n};\n\nexport const AuthPanel = ({\n title,\n description,\n children,\n footer,\n}: Props): JSX.Element => {\n return (\n <div className={styles.panel}>\n <div className={styles.block}>\n {title != null ? <h2 className={styles.panelTitle}>{title}</h2> : null}\n {description != null ? (\n <p className={styles.helper}>{description}</p>\n ) : null}\n {children}\n {footer != null ? <div className={styles.footer}>{footer}</div> : null}\n </div>\n </div>\n );\n};\n\nexport default AuthPanel;\n"],"mappings":";;;AAYA,IAAa,KAAa,EACxB,UACA,gBACA,aACA,QAAA,QAGE,kBAAC,OAAD;CAAK,WAAW;WACd,kBAAC,OAAD;EAAK,WAAW;YAAhB;GACG,KAAS,OAAwD,OAAjD,kBAAC,MAAD;IAAI,WAAW;cAAoB;IAAW,CAAA;GAC9D,KAAe,OAEZ,OADF,kBAAC,KAAD;IAAG,WAAW;cAAgB;IAAgB,CAAA;GAE/C;GACA,KAAU,OAAuD,OAAhD,kBAAC,OAAD;IAAK,WAAW;cAAgB;IAAa,CAAA;GAC3D;;CACF,CAAA"}
@@ -1,52 +0,0 @@
1
- import { actionsRow as e, formSurface as t, helper as n, inlineLink as r } from "./loginPage.css.js";
2
- import { AuthPanel as i } from "./AuthPanel.js";
3
- import { useSharedTranslation as a } from "../../i18n/useSharedTranslation.js";
4
- import { jsx as o, jsxs as s } from "react/jsx-runtime";
5
- import { Button as c } from "@plumile/ui";
6
- import { FormField as l } from "@plumile/ui/atomic/molecules/form_field/FormField.js";
7
- import { FormError as u } from "@plumile/ui/atomic/molecules/form_error/FormError.js";
8
- //#region src/auth/login/EmailCapturePanel.tsx
9
- var d = ({ email: d, errorMessage: f, isLoading: p, onEmailChange: m, onContinue: h, onForgotPassword: g }) => {
10
- let { t: _ } = a();
11
- return /* @__PURE__ */ o(i, { children: /* @__PURE__ */ s("div", {
12
- className: t,
13
- children: [
14
- /* @__PURE__ */ o("p", {
15
- className: n,
16
- children: _("auth.emailCapture.description")
17
- }),
18
- f != null && /* @__PURE__ */ o(u, { children: f }),
19
- /* @__PURE__ */ o(l, {
20
- label: _("auth.emailCapture.emailLabel"),
21
- name: "email",
22
- type: "email",
23
- value: d,
24
- onChange: (e) => {
25
- m(e.target.value);
26
- },
27
- placeholder: _("auth.emailCapture.emailPlaceholder"),
28
- autoComplete: "email",
29
- required: !0
30
- }),
31
- /* @__PURE__ */ s("div", {
32
- className: e,
33
- children: [/* @__PURE__ */ o(c, {
34
- type: "button",
35
- variant: "primary",
36
- onClick: h,
37
- isLoading: p,
38
- children: _("auth.emailCapture.continue")
39
- }), /* @__PURE__ */ o("button", {
40
- type: "button",
41
- className: r,
42
- onClick: g,
43
- children: _("auth.emailCapture.forgotPassword")
44
- })]
45
- })
46
- ]
47
- }) });
48
- };
49
- //#endregion
50
- export { d as EmailCapturePanel };
51
-
52
- //# sourceMappingURL=EmailCapturePanel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EmailCapturePanel.js","names":[],"sources":["../../../../src/auth/login/EmailCapturePanel.tsx"],"sourcesContent":["import { type JSX } from 'react';\nimport { useSharedTranslation } from '../../i18n/useSharedTranslation.js';\n\nimport { Button } from '@plumile/ui';\nimport { FormField } from '@plumile/ui/atomic/molecules/form_field/FormField.js';\nimport { FormError } from '@plumile/ui/atomic/molecules/form_error/FormError.js';\n\nimport { AuthPanel } from './AuthPanel.js';\nimport * as styles from './loginPage.css.js';\n\ntype Props = {\n email: string;\n errorMessage: string | null;\n isLoading: boolean;\n onEmailChange: (value: string) => void;\n onContinue: () => void;\n onForgotPassword: () => void;\n};\n\nexport const EmailCapturePanel = ({\n email,\n errorMessage,\n isLoading,\n onEmailChange,\n onContinue,\n onForgotPassword,\n}: Props): JSX.Element => {\n const { t } = useSharedTranslation();\n return (\n <AuthPanel>\n <div className={styles.formSurface}>\n <p className={styles.helper}>{t('auth.emailCapture.description')}</p>\n {errorMessage != null && <FormError>{errorMessage}</FormError>}\n <FormField\n label={t('auth.emailCapture.emailLabel')}\n name=\"email\"\n type=\"email\"\n value={email}\n onChange={(event) => {\n onEmailChange(event.target.value);\n }}\n placeholder={t('auth.emailCapture.emailPlaceholder')}\n autoComplete=\"email\"\n required\n />\n <div className={styles.actionsRow}>\n <Button\n type=\"button\"\n variant=\"primary\"\n onClick={onContinue}\n isLoading={isLoading}\n >\n {t('auth.emailCapture.continue')}\n </Button>\n <button\n type=\"button\"\n className={styles.inlineLink}\n onClick={onForgotPassword}\n >\n {t('auth.emailCapture.forgotPassword')}\n </button>\n </div>\n </div>\n </AuthPanel>\n );\n};\n"],"mappings":";;;;;;;;AAmBA,IAAa,KAAqB,EAChC,UACA,iBACA,cACA,kBACA,eACA,0BACwB;CACxB,IAAM,EAAE,SAAM,GAAsB;AACpC,QACE,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;EAAK,WAAW;YAAhB;GACE,kBAAC,KAAD;IAAG,WAAW;cAAgB,EAAE,gCAAgC;IAAK,CAAA;GACpE,KAAgB,QAAQ,kBAAC,GAAD,EAAA,UAAY,GAAyB,CAAA;GAC9D,kBAAC,GAAD;IACE,OAAO,EAAE,+BAA+B;IACxC,MAAK;IACL,MAAK;IACL,OAAO;IACP,WAAW,MAAU;AACnB,OAAc,EAAM,OAAO,MAAM;;IAEnC,aAAa,EAAE,qCAAqC;IACpD,cAAa;IACb,UAAA;IACA,CAAA;GACF,kBAAC,OAAD;IAAK,WAAW;cAAhB,CACE,kBAAC,GAAD;KACE,MAAK;KACL,SAAQ;KACR,SAAS;KACE;eAEV,EAAE,6BAA6B;KACzB,CAAA,EACT,kBAAC,UAAD;KACE,MAAK;KACL,WAAW;KACX,SAAS;eAER,EAAE,mCAAmC;KAC/B,CAAA,CACL;;GACF;KACI,CAAA"}
@@ -1,130 +0,0 @@
1
- import { AuthPanel as e } from "./AuthPanel.js";
2
- import { useSharedTranslation as t } from "../../i18n/useSharedTranslation.js";
3
- import { EmailCapturePanel as n } from "./EmailCapturePanel.js";
4
- import { MfaChallengeForm as r } from "./MfaChallengeForm.js";
5
- import { PasskeyLoginForm as i } from "./PasskeyLoginForm.js";
6
- import { MethodChooser as a } from "./MethodChooser.js";
7
- import { PasswordLoginPanel as o } from "./PasswordLoginPanel.js";
8
- import { jsx as s } from "react/jsx-runtime";
9
- import { useCallback as c, useEffect as l, useMemo as u, useRef as d, useState as f } from "react";
10
- import { AuthLayout as p } from "@plumile/ui/atomic/templates/auth_layout/AuthLayout.js";
11
- //#region src/auth/login/LoginFlow.tsx
12
- var m = ({ auth: m, oidcProviders: h, onLoginSuccess: g, onForgotPassword: _ }) => {
13
- let { t: v } = t(), [y, b] = f(""), [x, S] = f([]), [C, w] = f(null), [T, E] = f("email"), [D, O] = f(!1), [k, A] = f(null), j = d(!0), M = u(() => ({
14
- ...m,
15
- beginAuthentication: async (e) => {
16
- let t = await m.beginAuthentication(e);
17
- return b(e), S(t.methods), w(t.lockedUntil), t;
18
- }
19
- }), [m]), N = c(({ force: e } = { force: !1 }) => {
20
- !e && m.nextStep === "TOTP" || g();
21
- }, [m.nextStep, g]), P = m.nextStep === "TOTP" || T === "mfa", F = v(P ? "auth.loginFlow.title.mfa" : "auth.loginFlow.title.default"), I = v(P ? "auth.loginFlow.subtitle.mfa" : "auth.loginFlow.subtitle.default"), L = c(async (e) => {
22
- A(null);
23
- try {
24
- let t = e.trim(), n = await m.beginAuthentication(t);
25
- b(t), S(n.methods), w(n.lockedUntil), n.methods.some((e) => e === "PASSKEY") ? E("passkey") : n.methods.includes("PASSWORD") ? E("password") : E("methods");
26
- } catch (e) {
27
- A(e instanceof Error ? e.message : v("auth.loginFlow.errors.tryAgain"));
28
- }
29
- }, [m, v]);
30
- l(() => {
31
- j.current = !0;
32
- let e = y.trim();
33
- return T === "passkey" && !D && e !== "" && (O(!0), (async () => {
34
- try {
35
- let t = await M.loginWithPasskey({ email: e });
36
- if (!j.current) return;
37
- if (t === "success") {
38
- N();
39
- return;
40
- }
41
- if (t === "mfa-required") {
42
- E("mfa");
43
- return;
44
- }
45
- E("methods"), A(v("auth.loginFlow.errors.passkeyUnavailable"));
46
- } catch (e) {
47
- if (!j.current) return;
48
- A(e instanceof Error ? e.message : v("auth.loginFlow.errors.passkeyUnavailable")), E("methods");
49
- }
50
- })().catch(() => {})), () => {
51
- j.current = !1;
52
- };
53
- }, [
54
- y,
55
- N,
56
- D,
57
- M,
58
- v,
59
- T
60
- ]);
61
- let R;
62
- return R = P ? /* @__PURE__ */ s(e, { children: /* @__PURE__ */ s(r, {
63
- auth: m,
64
- onSuccess: () => {
65
- N({ force: !0 });
66
- },
67
- onBack: () => {
68
- m.reset(), E("email");
69
- }
70
- }) }) : T === "passkey" ? /* @__PURE__ */ s(e, {
71
- title: v("auth.loginFlow.passkey.title"),
72
- description: v("auth.loginFlow.passkey.description", { email: y }),
73
- children: /* @__PURE__ */ s(i, {
74
- auth: M,
75
- onSuccess: N,
76
- onShowMethods: () => {
77
- E("methods");
78
- },
79
- defaultEmail: y,
80
- isAttemptingPasskey: m.isLoading
81
- })
82
- }) : T === "methods" ? /* @__PURE__ */ s(e, {
83
- title: v("auth.loginFlow.methods.title"),
84
- children: /* @__PURE__ */ s(a, {
85
- email: y,
86
- methods: x,
87
- lockedUntil: C,
88
- onSelect: (e) => {
89
- if (e === "PASSKEY") {
90
- E("passkey");
91
- return;
92
- }
93
- e === "PASSWORD" && E("password");
94
- },
95
- onBack: () => {
96
- E("email");
97
- }
98
- })
99
- }) : T === "password" ? /* @__PURE__ */ s(o, {
100
- auth: M,
101
- defaultEmail: y,
102
- onForgotPassword: _,
103
- onSuccess: N,
104
- providers: h
105
- }) : /* @__PURE__ */ s(n, {
106
- email: y,
107
- errorMessage: k,
108
- isLoading: m.isLoading,
109
- onEmailChange: (e) => {
110
- b(e), A(null);
111
- },
112
- onContinue: () => {
113
- let e = y.trim();
114
- if (e === "") {
115
- A(v("auth.loginFlow.errors.emailRequired"));
116
- return;
117
- }
118
- L(e).catch(() => {});
119
- },
120
- onForgotPassword: _
121
- }), /* @__PURE__ */ s(p, {
122
- title: F,
123
- subtitle: I,
124
- children: R
125
- });
126
- };
127
- //#endregion
128
- export { m as LoginFlow };
129
-
130
- //# sourceMappingURL=LoginFlow.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LoginFlow.js","names":[],"sources":["../../../../src/auth/login/LoginFlow.tsx"],"sourcesContent":["/* eslint-disable no-ternary */\nimport {\n type JSX,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useSharedTranslation } from '../../i18n/useSharedTranslation.js';\n\nimport { AuthLayout } from '@plumile/ui/atomic/templates/auth_layout/AuthLayout.js';\n\nimport type {\n AuthMethod,\n OidcProviderKind,\n} from '../../modules/sharedSchemaTypes.js';\nimport type { UseAuthReturn } from '../../hooks/useAuth.js';\n\nimport { MfaChallengeForm } from './MfaChallengeForm.js';\nimport { PasskeyLoginForm } from './PasskeyLoginForm.js';\nimport { MethodChooser } from './MethodChooser.js';\nimport AuthPanel from './AuthPanel.js';\nimport { EmailCapturePanel } from './EmailCapturePanel.js';\nimport { PasswordLoginPanel } from './PasswordLoginPanel.js';\n\nexport type LoginFlowProps = {\n auth: UseAuthReturn;\n oidcProviders: readonly OidcProviderKind[];\n onLoginSuccess: () => void;\n onForgotPassword: () => void;\n};\n\ntype View = 'email' | 'passkey' | 'methods' | 'password' | 'mfa';\n\nexport const LoginFlow = ({\n auth,\n oidcProviders,\n onLoginSuccess,\n onForgotPassword,\n}: LoginFlowProps): JSX.Element => {\n const { t } = useSharedTranslation();\n const [email, setEmail] = useState('');\n const [methods, setMethods] = useState<readonly AuthMethod[]>([]);\n const [lockedUntil, setLockedUntil] = useState<string | null>(null);\n const [view, setView] = useState<View>('email');\n const [hasTriedPasskey, setHasTriedPasskey] = useState(false);\n const [localError, setLocalError] = useState<string | null>(null);\n const passkeyAttemptActive = useRef(true);\n\n const loginAdapter = useMemo(() => {\n return {\n ...auth,\n beginAuthentication: async (inputEmail: string) => {\n const result = await auth.beginAuthentication(inputEmail);\n setEmail(inputEmail);\n setMethods(result.methods);\n setLockedUntil(result.lockedUntil);\n return result;\n },\n };\n }, [auth]);\n\n const handleLoginSuccess = useCallback(\n ({ force } = { force: false }) => {\n if (!force && auth.nextStep === 'TOTP') {\n return;\n }\n onLoginSuccess();\n },\n [auth.nextStep, onLoginSuccess],\n );\n\n const isMfaStep = auth.nextStep === 'TOTP' || view === 'mfa';\n const title = isMfaStep\n ? t('auth.loginFlow.title.mfa')\n : t('auth.loginFlow.title.default');\n const subtitle = isMfaStep\n ? t('auth.loginFlow.subtitle.mfa')\n : t('auth.loginFlow.subtitle.default');\n\n const startFlowForEmail = useCallback(\n async (inputEmail: string) => {\n setLocalError(null);\n try {\n const trimmed = inputEmail.trim();\n const result = await auth.beginAuthentication(trimmed);\n setEmail(trimmed);\n setMethods(result.methods);\n setLockedUntil(result.lockedUntil);\n const hasPasskey = result.methods.some((method) => {\n return method === 'PASSKEY';\n });\n\n if (hasPasskey) {\n setView('passkey');\n } else if (result.methods.includes('PASSWORD')) {\n setView('password');\n } else {\n setView('methods');\n }\n } catch (beginError) {\n const message =\n beginError instanceof Error\n ? beginError.message\n : t('auth.loginFlow.errors.tryAgain');\n setLocalError(message);\n }\n },\n [auth, t],\n );\n\n useEffect(() => {\n passkeyAttemptActive.current = true;\n const trimmedEmail = email.trim();\n const shouldAttempt =\n view === 'passkey' && !hasTriedPasskey && trimmedEmail !== '';\n\n if (shouldAttempt) {\n setHasTriedPasskey(true);\n const runPasskeyLogin = async () => {\n try {\n const status = await loginAdapter.loginWithPasskey({\n email: trimmedEmail,\n });\n\n if (!passkeyAttemptActive.current) {\n return;\n }\n\n if (status === 'success') {\n handleLoginSuccess();\n return;\n }\n\n if (status === 'mfa-required') {\n setView('mfa');\n return;\n }\n\n setView('methods');\n setLocalError(t('auth.loginFlow.errors.passkeyUnavailable'));\n } catch (passkeyError) {\n if (!passkeyAttemptActive.current) {\n return;\n }\n\n const message =\n passkeyError instanceof Error\n ? passkeyError.message\n : t('auth.loginFlow.errors.passkeyUnavailable');\n setLocalError(message);\n setView('methods');\n }\n };\n runPasskeyLogin().catch(() => {\n // Errors are handled inside runPasskeyLogin; ignore any unexpected rethrow.\n });\n }\n\n return () => {\n passkeyAttemptActive.current = false;\n };\n }, [email, handleLoginSuccess, hasTriedPasskey, loginAdapter, t, view]);\n\n let content: JSX.Element;\n\n if (isMfaStep) {\n content = (\n <AuthPanel>\n <MfaChallengeForm\n auth={auth}\n onSuccess={() => {\n handleLoginSuccess({ force: true });\n }}\n onBack={() => {\n auth.reset();\n setView('email');\n }}\n />\n </AuthPanel>\n );\n } else if (view === 'passkey') {\n content = (\n <AuthPanel\n title={t('auth.loginFlow.passkey.title')}\n description={t('auth.loginFlow.passkey.description', { email })}\n >\n <PasskeyLoginForm\n auth={loginAdapter}\n onSuccess={handleLoginSuccess}\n onShowMethods={() => {\n setView('methods');\n }}\n defaultEmail={email}\n isAttemptingPasskey={auth.isLoading}\n />\n </AuthPanel>\n );\n } else if (view === 'methods') {\n content = (\n <AuthPanel title={t('auth.loginFlow.methods.title')}>\n <MethodChooser\n email={email}\n methods={methods}\n lockedUntil={lockedUntil}\n onSelect={(method) => {\n if (method === 'PASSKEY') {\n setView('passkey');\n return;\n }\n if (method === 'PASSWORD') {\n setView('password');\n }\n }}\n onBack={() => {\n setView('email');\n }}\n />\n </AuthPanel>\n );\n } else if (view === 'password') {\n content = (\n <PasswordLoginPanel\n auth={loginAdapter}\n defaultEmail={email}\n onForgotPassword={onForgotPassword}\n onSuccess={handleLoginSuccess}\n providers={oidcProviders}\n />\n );\n } else {\n // email capture only\n content = (\n <EmailCapturePanel\n email={email}\n errorMessage={localError}\n isLoading={auth.isLoading}\n onEmailChange={(value) => {\n setEmail(value);\n setLocalError(null);\n }}\n onContinue={() => {\n const trimmed = email.trim();\n if (trimmed === '') {\n setLocalError(t('auth.loginFlow.errors.emailRequired'));\n return;\n }\n startFlowForEmail(trimmed).catch(() => {\n // startFlowForEmail handles its own errors.\n });\n }}\n onForgotPassword={onForgotPassword}\n />\n );\n }\n\n return (\n <AuthLayout title={title} subtitle={subtitle}>\n {content}\n </AuthLayout>\n );\n};\n"],"mappings":";;;;;;;;;;;AAmCA,IAAa,KAAa,EACxB,SACA,kBACA,mBACA,0BACiC;CACjC,IAAM,EAAE,SAAM,GAAsB,EAC9B,CAAC,GAAO,KAAY,EAAS,GAAG,EAChC,CAAC,GAAS,KAAc,EAAgC,EAAE,CAAC,EAC3D,CAAC,GAAa,KAAkB,EAAwB,KAAK,EAC7D,CAAC,GAAM,KAAW,EAAe,QAAQ,EACzC,CAAC,GAAiB,KAAsB,EAAS,GAAM,EACvD,CAAC,GAAY,KAAiB,EAAwB,KAAK,EAC3D,IAAuB,EAAO,GAAK,EAEnC,IAAe,SACZ;EACL,GAAG;EACH,qBAAqB,OAAO,MAAuB;GACjD,IAAM,IAAS,MAAM,EAAK,oBAAoB,EAAW;AAIzD,UAHA,EAAS,EAAW,EACpB,EAAW,EAAO,QAAQ,EAC1B,EAAe,EAAO,YAAY,EAC3B;;EAEV,GACA,CAAC,EAAK,CAAC,EAEJ,IAAqB,GACxB,EAAE,aAAU,EAAE,OAAO,IAAO,KAAK;AAC5B,GAAC,KAAS,EAAK,aAAa,UAGhC,GAAgB;IAElB,CAAC,EAAK,UAAU,EAAe,CAChC,EAEK,IAAY,EAAK,aAAa,UAAU,MAAS,OACjD,IACF,EADU,IACR,6BACA,+BAA+B,EAC/B,IACF,EADa,IACX,gCACA,kCAAkC,EAElC,IAAoB,EACxB,OAAO,MAAuB;AAC5B,IAAc,KAAK;AACnB,MAAI;GACF,IAAM,IAAU,EAAW,MAAM,EAC3B,IAAS,MAAM,EAAK,oBAAoB,EAAQ;AAQtD,GAPA,EAAS,EAAQ,EACjB,EAAW,EAAO,QAAQ,EAC1B,EAAe,EAAO,YAAY,EACf,EAAO,QAAQ,MAAM,MAC/B,MAAW,UAClB,GAGA,EAAQ,UAAU,GACT,EAAO,QAAQ,SAAS,WAAW,GAC5C,EAAQ,WAAW,GAEnB,EAAQ,UAAU;WAEb,GAAY;AAKnB,KAHE,aAAsB,QAClB,EAAW,UACX,EAAE,iCAAiC,CACnB;;IAG1B,CAAC,GAAM,EAAE,CACV;AAED,SAAgB;AACd,IAAqB,UAAU;EAC/B,IAAM,IAAe,EAAM,MAAM;AA8CjC,SA5CE,MAAS,aAAa,CAAC,KAAmB,MAAiB,OAG3D,EAAmB,GAAK,GACA,YAAY;AAClC,OAAI;IACF,IAAM,IAAS,MAAM,EAAa,iBAAiB,EACjD,OAAO,GACR,CAAC;AAEF,QAAI,CAAC,EAAqB,QACxB;AAGF,QAAI,MAAW,WAAW;AACxB,QAAoB;AACpB;;AAGF,QAAI,MAAW,gBAAgB;AAC7B,OAAQ,MAAM;AACd;;AAIF,IADA,EAAQ,UAAU,EAClB,EAAc,EAAE,2CAA2C,CAAC;YACrD,GAAc;AACrB,QAAI,CAAC,EAAqB,QACxB;AAQF,IADA,EAHE,aAAwB,QACpB,EAAa,UACb,EAAE,2CAA2C,CAC7B,EACtB,EAAQ,UAAU;;MAGL,CAAC,YAAY,GAE5B,SAGS;AACX,KAAqB,UAAU;;IAEhC;EAAC;EAAO;EAAoB;EAAiB;EAAc;EAAG;EAAK,CAAC;CAEvE,IAAI;AA4FJ,QA1FA,AAkEE,IAlEE,IAEA,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;EACQ;EACN,iBAAiB;AACf,KAAmB,EAAE,OAAO,IAAM,CAAC;;EAErC,cAAc;AAEZ,GADA,EAAK,OAAO,EACZ,EAAQ,QAAQ;;EAElB,CAAA,EACQ,CAAA,GAEL,MAAS,YAEhB,kBAAC,GAAD;EACE,OAAO,EAAE,+BAA+B;EACxC,aAAa,EAAE,sCAAsC,EAAE,UAAO,CAAC;YAE/D,kBAAC,GAAD;GACE,MAAM;GACN,WAAW;GACX,qBAAqB;AACnB,MAAQ,UAAU;;GAEpB,cAAc;GACd,qBAAqB,EAAK;GAC1B,CAAA;EACQ,CAAA,GAEL,MAAS,YAEhB,kBAAC,GAAD;EAAW,OAAO,EAAE,+BAA+B;YACjD,kBAAC,GAAD;GACS;GACE;GACI;GACb,WAAW,MAAW;AACpB,QAAI,MAAW,WAAW;AACxB,OAAQ,UAAU;AAClB;;AAEF,IAAI,MAAW,cACb,EAAQ,WAAW;;GAGvB,cAAc;AACZ,MAAQ,QAAQ;;GAElB,CAAA;EACQ,CAAA,GAEL,MAAS,aAEhB,kBAAC,GAAD;EACE,MAAM;EACN,cAAc;EACI;EAClB,WAAW;EACX,WAAW;EACX,CAAA,GAKF,kBAAC,GAAD;EACS;EACP,cAAc;EACd,WAAW,EAAK;EAChB,gBAAgB,MAAU;AAExB,GADA,EAAS,EAAM,EACf,EAAc,KAAK;;EAErB,kBAAkB;GAChB,IAAM,IAAU,EAAM,MAAM;AAC5B,OAAI,MAAY,IAAI;AAClB,MAAc,EAAE,sCAAsC,CAAC;AACvD;;AAEF,KAAkB,EAAQ,CAAC,YAAY,GAErC;;EAEc;EAClB,CAAA,EAKJ,kBAAC,GAAD;EAAmB;EAAiB;YACjC;EACU,CAAA"}
@@ -1,51 +0,0 @@
1
- import { brandGhostButton as e, formSurface as t, fullWidth as n, helper as r, inlineLink as i, stack as a } from "./loginPage.css.js";
2
- import { useSharedTranslation as o } from "../../i18n/useSharedTranslation.js";
3
- import { jsx as s, jsxs as c } from "react/jsx-runtime";
4
- import { Trans as l } from "react-i18next";
5
- import { Button as u } from "@plumile/ui";
6
- import { FormError as d } from "@plumile/ui/atomic/molecules/form_error/FormError.js";
7
- import { cx as f } from "@plumile/ui/theme/tools.js";
8
- //#region src/auth/login/MethodChooser.tsx
9
- var p = ({ email: p, methods: m, lockedUntil: h, onSelect: g, onBack: _ }) => {
10
- let { t: v } = o(), y = m.length === 0, b = h == null ? v("auth.methodChooser.locked") : v("auth.methodChooser.lockedWithTime", { time: new Date(h).toLocaleString() }), x = m.map((t) => {
11
- let r = t === "PASSKEY" ? v("auth.methodChooser.methods.passkey") : t === "PASSWORD" ? v("auth.methodChooser.methods.password") : v("auth.methodChooser.methods.other", { method: t.toLowerCase() });
12
- return /* @__PURE__ */ s(u, {
13
- type: "button",
14
- variant: "secondary",
15
- onClick: () => {
16
- g(t);
17
- },
18
- className: f(n, e),
19
- children: r
20
- }, t);
21
- });
22
- return /* @__PURE__ */ s("div", {
23
- className: t,
24
- children: /* @__PURE__ */ c("div", {
25
- className: a,
26
- children: [
27
- /* @__PURE__ */ s("p", {
28
- className: r,
29
- children: /* @__PURE__ */ s(l, {
30
- i18nKey: "auth.methodChooser.prompt",
31
- values: { email: p },
32
- components: { strong: /* @__PURE__ */ s("strong", {}) }
33
- })
34
- }),
35
- y ? /* @__PURE__ */ s(d, { children: b }) : null,
36
- y ? null : x,
37
- /* @__PURE__ */ s(u, {
38
- type: "button",
39
- variant: "text",
40
- onClick: _,
41
- className: i,
42
- children: v("auth.methodChooser.actions.back")
43
- })
44
- ]
45
- })
46
- });
47
- };
48
- //#endregion
49
- export { p as MethodChooser };
50
-
51
- //# sourceMappingURL=MethodChooser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MethodChooser.js","names":[],"sources":["../../../../src/auth/login/MethodChooser.tsx"],"sourcesContent":["/* eslint-disable no-ternary */\nimport { type JSX } from 'react';\nimport { Trans } from 'react-i18next';\nimport { Button } from '@plumile/ui';\nimport { FormError } from '@plumile/ui/atomic/molecules/form_error/FormError.js';\nimport { cx } from '@plumile/ui/theme/tools.js';\n\nimport type { AuthMethod } from '../../modules/sharedSchemaTypes.js';\nimport { useSharedTranslation } from '../../i18n/useSharedTranslation.js';\n\nimport * as styles from './loginPage.css.js';\n\ntype Props = {\n email: string;\n methods: readonly AuthMethod[];\n lockedUntil: string | null;\n onSelect: (method: AuthMethod) => void;\n onBack: () => void;\n};\n\nexport const MethodChooser = ({\n email,\n methods,\n lockedUntil,\n onSelect,\n onBack,\n}: Props): JSX.Element => {\n const { t } = useSharedTranslation();\n const isLocked = methods.length === 0;\n const lockedMessage =\n lockedUntil != null\n ? t('auth.methodChooser.lockedWithTime', {\n time: new Date(lockedUntil).toLocaleString(),\n })\n : t('auth.methodChooser.locked');\n\n const methodButtons = methods.map((method) => {\n const label =\n method === 'PASSKEY'\n ? t('auth.methodChooser.methods.passkey')\n : method === 'PASSWORD'\n ? t('auth.methodChooser.methods.password')\n : t('auth.methodChooser.methods.other', {\n method: method.toLowerCase(),\n });\n return (\n <Button\n key={method}\n type=\"button\"\n variant=\"secondary\"\n onClick={() => {\n onSelect(method);\n }}\n className={cx(styles.fullWidth, styles.brandGhostButton)}\n >\n {label}\n </Button>\n );\n });\n\n return (\n <div className={styles.formSurface}>\n <div className={styles.stack}>\n <p className={styles.helper}>\n <Trans\n i18nKey=\"auth.methodChooser.prompt\"\n values={{ email }}\n components={{ strong: <strong /> }}\n />\n </p>\n {isLocked ? <FormError>{lockedMessage}</FormError> : null}\n {!isLocked ? methodButtons : null}\n <Button\n type=\"button\"\n variant=\"text\"\n onClick={onBack}\n className={styles.inlineLink}\n >\n {t('auth.methodChooser.actions.back')}\n </Button>\n </div>\n </div>\n );\n};\n"],"mappings":";;;;;;;;AAoBA,IAAa,KAAiB,EAC5B,UACA,YACA,gBACA,aACA,gBACwB;CACxB,IAAM,EAAE,SAAM,GAAsB,EAC9B,IAAW,EAAQ,WAAW,GAC9B,IACJ,KAAe,OAIX,EAAE,4BAA4B,GAH9B,EAAE,qCAAqC,EACrC,MAAM,IAAI,KAAK,EAAY,CAAC,gBAAgB,EAC7C,CAAC,EAGF,IAAgB,EAAQ,KAAK,MAAW;EAC5C,IAAM,IACJ,MAAW,YACP,EAAE,qCAAqC,GACvC,MAAW,aACT,EAAE,sCAAsC,GACxC,EAAE,oCAAoC,EACpC,QAAQ,EAAO,aAAa,EAC7B,CAAC;AACV,SACE,kBAAC,GAAD;GAEE,MAAK;GACL,SAAQ;GACR,eAAe;AACb,MAAS,EAAO;;GAElB,WAAW,EAAG,GAAkB,EAAwB;aAEvD;GACM,EATF,EASE;GAEX;AAEF,QACE,kBAAC,OAAD;EAAK,WAAW;YACd,kBAAC,OAAD;GAAK,WAAW;aAAhB;IACE,kBAAC,KAAD;KAAG,WAAW;eACZ,kBAAC,GAAD;MACE,SAAQ;MACR,QAAQ,EAAE,UAAO;MACjB,YAAY,EAAE,QAAQ,kBAAC,UAAD,EAAU,CAAA,EAAE;MAClC,CAAA;KACA,CAAA;IACH,IAAW,kBAAC,GAAD,EAAA,UAAY,GAA0B,CAAA,GAAG;IACnD,IAA2B,OAAhB;IACb,kBAAC,GAAD;KACE,MAAK;KACL,SAAQ;KACR,SAAS;KACT,WAAW;eAEV,EAAE,kCAAkC;KAC9B,CAAA;IACL;;EACF,CAAA"}
@@ -1,83 +0,0 @@
1
- import { actionsRow as e, formSurface as t, helper as n, inlineLink as r, stack as i } from "./loginPage.css.js";
2
- import { useSharedTranslation as a } from "../../i18n/useSharedTranslation.js";
3
- import { jsx as o, jsxs as s } from "react/jsx-runtime";
4
- import { Button as c } from "@plumile/ui";
5
- import { FormField as l } from "@plumile/ui/atomic/molecules/form_field/FormField.js";
6
- import { FormError as u } from "@plumile/ui/atomic/molecules/form_error/FormError.js";
7
- import { useCallback as d, useEffect as f, useState as p } from "react";
8
- //#region src/auth/login/MfaChallengeForm.tsx
9
- var m = ({ auth: m, onSuccess: h, onBack: g }) => {
10
- let { t: _ } = a(), [v, y] = p(""), [b, x] = p(null);
11
- f(() => {
12
- m.clearError(), x(null);
13
- }, [m]);
14
- let S = d(async (e) => {
15
- e.preventDefault(), x(null);
16
- let t = v.trim();
17
- if (t.length < 4) {
18
- x(_("auth.mfa.errors.shortCode"));
19
- return;
20
- }
21
- try {
22
- let e = { code: t };
23
- await m.completeMfa(e), h();
24
- } catch {
25
- let e = m.error?.message;
26
- x(e ?? _("auth.mfa.errors.verificationFailed"));
27
- }
28
- }, [
29
- m,
30
- v,
31
- h,
32
- _
33
- ]), C = m.emailHint == null ? _("auth.mfa.helper.default") : _("auth.mfa.helper.withEmail", { email: m.emailHint }), w = b ?? m.error?.message ?? null;
34
- return /* @__PURE__ */ s("form", {
35
- className: t,
36
- onSubmit: S,
37
- noValidate: !0,
38
- children: [/* @__PURE__ */ s("div", {
39
- className: i,
40
- children: [
41
- /* @__PURE__ */ o("p", {
42
- className: n,
43
- children: C
44
- }),
45
- w == null ? null : /* @__PURE__ */ o(u, { children: w }),
46
- /* @__PURE__ */ o(l, {
47
- label: _("auth.mfa.form.label"),
48
- name: "code",
49
- type: "text",
50
- value: v,
51
- onChange: (e) => {
52
- y(e.target.value), x(null);
53
- },
54
- placeholder: _("auth.mfa.form.placeholder"),
55
- autoComplete: "one-time-code",
56
- autoFocus: !0,
57
- required: !0
58
- })
59
- ]
60
- }), /* @__PURE__ */ s("div", {
61
- className: e,
62
- children: [/* @__PURE__ */ o(c, {
63
- type: "button",
64
- variant: "text",
65
- size: "small",
66
- className: r,
67
- onClick: () => {
68
- m.reset(), g();
69
- },
70
- children: _("auth.mfa.actions.back")
71
- }), /* @__PURE__ */ o(c, {
72
- type: "submit",
73
- size: "large",
74
- isLoading: m.isLoading,
75
- children: _("auth.mfa.actions.submit")
76
- })]
77
- })]
78
- });
79
- };
80
- //#endregion
81
- export { m as MfaChallengeForm };
82
-
83
- //# sourceMappingURL=MfaChallengeForm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MfaChallengeForm.js","names":[],"sources":["../../../../src/auth/login/MfaChallengeForm.tsx"],"sourcesContent":["/* eslint-disable no-ternary */\nimport {\n useCallback,\n useEffect,\n useState,\n type FormEvent,\n type JSX,\n} from 'react';\nimport { useSharedTranslation } from '../../i18n/useSharedTranslation.js';\n\nimport { Button } from '@plumile/ui';\nimport { FormError } from '@plumile/ui/atomic/molecules/form_error/FormError.js';\nimport { FormField } from '@plumile/ui/atomic/molecules/form_field/FormField.js';\n\nimport type { TotpCredentials, UseAuthReturn } from '../../hooks/useAuth.js';\n\nimport * as styles from './loginPage.css.js';\n\ntype Props = {\n auth: Pick<\n UseAuthReturn,\n 'completeMfa' | 'isLoading' | 'error' | 'emailHint' | 'reset' | 'clearError'\n >;\n onSuccess: () => void;\n onBack: () => void;\n};\n\nexport const MfaChallengeForm = ({\n auth,\n onSuccess,\n onBack,\n}: Props): JSX.Element => {\n const { t } = useSharedTranslation();\n const [code, setCode] = useState('');\n const [localError, setLocalError] = useState<string | null>(null);\n\n // Clear any stale errors when the MFA form is shown\n useEffect(() => {\n auth.clearError();\n setLocalError(null);\n }, [auth]);\n\n const handleSubmit = useCallback(\n async (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n setLocalError(null);\n\n const trimmed = code.trim();\n if (trimmed.length < 4) {\n setLocalError(t('auth.mfa.errors.shortCode'));\n return;\n }\n\n try {\n const credentials: TotpCredentials = {\n code: trimmed,\n };\n await auth.completeMfa(credentials);\n onSuccess();\n } catch {\n const authMessage = auth.error?.message;\n setLocalError(authMessage ?? t('auth.mfa.errors.verificationFailed'));\n }\n },\n [auth, code, onSuccess, t],\n );\n\n const helper =\n auth.emailHint != null\n ? t('auth.mfa.helper.withEmail', { email: auth.emailHint })\n : t('auth.mfa.helper.default');\n\n const formError = localError ?? auth.error?.message ?? null;\n\n return (\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n <form className={styles.formSurface} onSubmit={handleSubmit} noValidate>\n <div className={styles.stack}>\n <p className={styles.helper}>{helper}</p>\n {formError != null ? <FormError>{formError}</FormError> : null}\n <FormField\n label={t('auth.mfa.form.label')}\n name=\"code\"\n type=\"text\"\n value={code}\n onChange={(event) => {\n setCode(event.target.value);\n setLocalError(null);\n }}\n placeholder={t('auth.mfa.form.placeholder')}\n autoComplete=\"one-time-code\"\n autoFocus\n required\n />\n </div>\n <div className={styles.actionsRow}>\n <Button\n type=\"button\"\n variant=\"text\"\n size=\"small\"\n className={styles.inlineLink}\n onClick={() => {\n auth.reset();\n onBack();\n }}\n >\n {t('auth.mfa.actions.back')}\n </Button>\n <Button type=\"submit\" size=\"large\" isLoading={auth.isLoading}>\n {t('auth.mfa.actions.submit')}\n </Button>\n </div>\n </form>\n );\n};\n"],"mappings":";;;;;;;;AA2BA,IAAa,KAAoB,EAC/B,SACA,cACA,gBACwB;CACxB,IAAM,EAAE,SAAM,GAAsB,EAC9B,CAAC,GAAM,KAAW,EAAS,GAAG,EAC9B,CAAC,GAAY,KAAiB,EAAwB,KAAK;AAGjE,SAAgB;AAEd,EADA,EAAK,YAAY,EACjB,EAAc,KAAK;IAClB,CAAC,EAAK,CAAC;CAEV,IAAM,IAAe,EACnB,OAAO,MAAsC;AAE3C,EADA,EAAM,gBAAgB,EACtB,EAAc,KAAK;EAEnB,IAAM,IAAU,EAAK,MAAM;AAC3B,MAAI,EAAQ,SAAS,GAAG;AACtB,KAAc,EAAE,4BAA4B,CAAC;AAC7C;;AAGF,MAAI;GACF,IAAM,IAA+B,EACnC,MAAM,GACP;AAED,GADA,MAAM,EAAK,YAAY,EAAY,EACnC,GAAW;UACL;GACN,IAAM,IAAc,EAAK,OAAO;AAChC,KAAc,KAAe,EAAE,qCAAqC,CAAC;;IAGzE;EAAC;EAAM;EAAM;EAAW;EAAE,CAC3B,EAEK,IACJ,EAAK,aAAa,OAEd,EAAE,0BAA0B,GAD5B,EAAE,6BAA6B,EAAE,OAAO,EAAK,WAAW,CAAC,EAGzD,IAAY,KAAc,EAAK,OAAO,WAAW;AAEvD,QAEE,kBAAC,QAAD;EAAM,WAAW;EAAoB,UAAU;EAAc,YAAA;YAA7D,CACE,kBAAC,OAAD;GAAK,WAAW;aAAhB;IACE,kBAAC,KAAD;KAAG,WAAW;eAAgB;KAAW,CAAA;IACxC,KAAa,OAA4C,OAArC,kBAAC,GAAD,EAAA,UAAY,GAAsB,CAAA;IACvD,kBAAC,GAAD;KACE,OAAO,EAAE,sBAAsB;KAC/B,MAAK;KACL,MAAK;KACL,OAAO;KACP,WAAW,MAAU;AAEnB,MADA,EAAQ,EAAM,OAAO,MAAM,EAC3B,EAAc,KAAK;;KAErB,aAAa,EAAE,4BAA4B;KAC3C,cAAa;KACb,WAAA;KACA,UAAA;KACA,CAAA;IACE;MACN,kBAAC,OAAD;GAAK,WAAW;aAAhB,CACE,kBAAC,GAAD;IACE,MAAK;IACL,SAAQ;IACR,MAAK;IACL,WAAW;IACX,eAAe;AAEb,KADA,EAAK,OAAO,EACZ,GAAQ;;cAGT,EAAE,wBAAwB;IACpB,CAAA,EACT,kBAAC,GAAD;IAAQ,MAAK;IAAS,MAAK;IAAQ,WAAW,EAAK;cAChD,EAAE,0BAA0B;IACtB,CAAA,CACL;KACD"}
@@ -1,29 +0,0 @@
1
- import { brandGhostButton as e, stack as t } from "./loginPage.css.js";
2
- import { useSharedTranslation as n } from "../../i18n/useSharedTranslation.js";
3
- import { jsx as r } from "react/jsx-runtime";
4
- import { Button as i } from "@plumile/ui";
5
- //#region src/auth/login/OidcButtons.tsx
6
- var a = "/auth/oidc/start", o = ({ providers: o }) => {
7
- let { t: s } = n();
8
- return o.length === 0 ? null : /* @__PURE__ */ r("div", {
9
- className: t,
10
- children: o.map((t) => {
11
- let n = s("auth.oidc.buttons.generic");
12
- t === "GOOGLE" ? n = s("auth.oidc.buttons.google") : t === "APPLE" && (n = s("auth.oidc.buttons.apple"));
13
- let o = t.toLowerCase();
14
- return /* @__PURE__ */ r(i, {
15
- type: "button",
16
- variant: "secondary",
17
- className: e,
18
- onClick: () => {
19
- window.location.assign(`${a}?provider=${o}`);
20
- },
21
- children: n
22
- }, t);
23
- })
24
- });
25
- };
26
- //#endregion
27
- export { o as OidcButtons };
28
-
29
- //# sourceMappingURL=OidcButtons.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OidcButtons.js","names":[],"sources":["../../../../src/auth/login/OidcButtons.tsx"],"sourcesContent":["import { type JSX } from 'react';\n\nimport { Button } from '@plumile/ui';\n\nimport type { OidcProviderKind } from '../../modules/sharedSchemaTypes.js';\nimport { useSharedTranslation } from '../../i18n/useSharedTranslation.js';\n\nimport * as styles from './loginPage.css.js';\n\nconst OIDC_START_PATH = '/auth/oidc/start';\n\ntype Props = {\n providers: readonly OidcProviderKind[];\n};\n\nexport const OidcButtons = ({ providers }: Props): JSX.Element | null => {\n const { t } = useSharedTranslation();\n\n if (providers.length === 0) {\n return null;\n }\n\n return (\n <div className={styles.stack}>\n {providers.map((provider) => {\n let label = t('auth.oidc.buttons.generic');\n if (provider === 'GOOGLE') {\n label = t('auth.oidc.buttons.google');\n } else if (provider === 'APPLE') {\n label = t('auth.oidc.buttons.apple');\n }\n const providerName = provider.toLowerCase();\n return (\n <Button\n key={provider}\n type=\"button\"\n variant=\"secondary\"\n className={styles.brandGhostButton}\n onClick={() => {\n window.location.assign(\n `${OIDC_START_PATH}?provider=${providerName}`,\n );\n }}\n >\n {label}\n </Button>\n );\n })}\n </div>\n );\n};\n"],"mappings":";;;;;AASA,IAAM,IAAkB,oBAMX,KAAe,EAAE,mBAA2C;CACvE,IAAM,EAAE,SAAM,GAAsB;AAMpC,QAJI,EAAU,WAAW,IAChB,OAIP,kBAAC,OAAD;EAAK,WAAW;YACb,EAAU,KAAK,MAAa;GAC3B,IAAI,IAAQ,EAAE,4BAA4B;AAC1C,GAAI,MAAa,WACf,IAAQ,EAAE,2BAA2B,GAC5B,MAAa,YACtB,IAAQ,EAAE,0BAA0B;GAEtC,IAAM,IAAe,EAAS,aAAa;AAC3C,UACE,kBAAC,GAAD;IAEE,MAAK;IACL,SAAQ;IACR,WAAW;IACX,eAAe;AACb,YAAO,SAAS,OACd,GAAG,EAAgB,YAAY,IAChC;;cAGF;IACM,EAXF,EAWE;IAEX;EACE,CAAA"}
@@ -1,84 +0,0 @@
1
- import { actionsRow as e, formSurface as t, helper as n, inlineLink as r, stack as i } from "./loginPage.css.js";
2
- import { useSharedTranslation as a } from "../../i18n/useSharedTranslation.js";
3
- import { jsx as o, jsxs as s } from "react/jsx-runtime";
4
- import { Button as c } from "@plumile/ui";
5
- import { FormField as l } from "@plumile/ui/atomic/molecules/form_field/FormField.js";
6
- import { FormError as u } from "@plumile/ui/atomic/molecules/form_error/FormError.js";
7
- import { useCallback as d, useEffect as f, useState as p } from "react";
8
- //#region src/auth/login/PasskeyLoginForm.tsx
9
- var m = ({ auth: m, onSuccess: h, defaultEmail: g, isAttemptingPasskey: _ = !1, onShowMethods: v }) => {
10
- let { t: y } = a(), [b, x] = p(m.emailHint ?? ""), [S, C] = p(null);
11
- f(() => {
12
- m.emailHint != null && m.emailHint !== "" ? x(m.emailHint) : g != null && g !== "" && x(g);
13
- }, [m.emailHint, g]);
14
- let w = d(async (e) => {
15
- if (e.preventDefault(), C(null), b.trim() === "") {
16
- C(y("auth.passkey.errors.emailRequired"));
17
- return;
18
- }
19
- try {
20
- let e = await m.beginAuthentication(b.trim());
21
- if (Array.isArray(e.methods) && e.methods.length === 0) {
22
- C(e.lockedUntil == null ? y("auth.passkey.errors.locked") : y("auth.passkey.errors.lockedWithTime", { time: new Date(e.lockedUntil).toLocaleString() }));
23
- return;
24
- }
25
- if (Array.isArray(e.methods) && !e.methods.includes("PASSKEY")) {
26
- C(y("auth.passkey.errors.notAvailable"));
27
- return;
28
- }
29
- await m.loginWithPasskey({ email: b.trim() }) === "success" && h();
30
- } catch {
31
- let e = m.error?.message;
32
- C(e ?? y("auth.passkey.errors.failed"));
33
- }
34
- }, [
35
- m,
36
- b,
37
- h,
38
- y
39
- ]), T = S ?? m.error?.message ?? null;
40
- return /* @__PURE__ */ s("form", {
41
- className: t,
42
- onSubmit: w,
43
- noValidate: !0,
44
- children: [/* @__PURE__ */ s("div", {
45
- className: i,
46
- children: [
47
- /* @__PURE__ */ o("p", {
48
- className: n,
49
- children: y("auth.passkey.helper")
50
- }),
51
- T == null ? null : /* @__PURE__ */ o(u, { children: T }),
52
- /* @__PURE__ */ o(l, {
53
- label: y("auth.passkey.form.emailLabel"),
54
- name: "passkey-email",
55
- type: "email",
56
- value: b,
57
- onChange: (e) => {
58
- x(e.target.value), C(null);
59
- },
60
- placeholder: y("auth.passkey.form.emailPlaceholder"),
61
- autoComplete: "email",
62
- required: !0
63
- })
64
- ]
65
- }), /* @__PURE__ */ s("div", {
66
- className: e,
67
- children: [/* @__PURE__ */ o(c, {
68
- type: "submit",
69
- variant: "primary",
70
- isLoading: m.isLoading,
71
- children: y(_ ? "auth.passkey.actions.submitting" : "auth.passkey.actions.submit")
72
- }), v == null ? null : /* @__PURE__ */ o("button", {
73
- type: "button",
74
- className: r,
75
- onClick: v,
76
- children: y("auth.passkey.actions.showMethods")
77
- })]
78
- })]
79
- });
80
- };
81
- //#endregion
82
- export { m as PasskeyLoginForm };
83
-
84
- //# sourceMappingURL=PasskeyLoginForm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PasskeyLoginForm.js","names":[],"sources":["../../../../src/auth/login/PasskeyLoginForm.tsx"],"sourcesContent":["/* eslint-disable no-ternary */\nimport {\n useCallback,\n useEffect,\n useState,\n type FormEvent,\n type JSX,\n} from 'react';\nimport { useSharedTranslation } from '../../i18n/useSharedTranslation.js';\n\nimport { Button } from '@plumile/ui';\nimport { FormError } from '@plumile/ui/atomic/molecules/form_error/FormError.js';\nimport { FormField } from '@plumile/ui/atomic/molecules/form_field/FormField.js';\n\nimport type { UseAuthReturn } from '../../hooks/useAuth.js';\n\nimport * as styles from './loginPage.css.js';\n\ntype Props = {\n auth: Pick<\n UseAuthReturn,\n | 'loginWithPasskey'\n | 'isLoading'\n | 'error'\n | 'emailHint'\n | 'nextStep'\n | 'beginAuthentication'\n | 'lockedUntil'\n | 'availableMethods'\n >;\n onSuccess: () => void;\n defaultEmail?: string;\n isAttemptingPasskey?: boolean;\n onShowMethods?: () => void;\n};\n\nexport const PasskeyLoginForm = ({\n auth,\n onSuccess,\n defaultEmail,\n isAttemptingPasskey = false,\n onShowMethods,\n}: Props): JSX.Element => {\n const { t } = useSharedTranslation();\n const [email, setEmail] = useState(auth.emailHint ?? '');\n const [localError, setLocalError] = useState<string | null>(null);\n\n useEffect(() => {\n if (auth.emailHint != null && auth.emailHint !== '') {\n setEmail(auth.emailHint);\n } else if (defaultEmail != null && defaultEmail !== '') {\n setEmail(defaultEmail);\n }\n }, [auth.emailHint, defaultEmail]);\n\n const handleSubmit = useCallback(\n async (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n setLocalError(null);\n\n if (email.trim() === '') {\n setLocalError(t('auth.passkey.errors.emailRequired'));\n return;\n }\n\n try {\n const result = await auth.beginAuthentication(email.trim());\n if (Array.isArray(result.methods) && result.methods.length === 0) {\n const lockedUntilMessage =\n result.lockedUntil != null\n ? t('auth.passkey.errors.lockedWithTime', {\n time: new Date(result.lockedUntil).toLocaleString(),\n })\n : t('auth.passkey.errors.locked');\n setLocalError(lockedUntilMessage);\n return;\n }\n if (\n Array.isArray(result.methods) &&\n !result.methods.includes('PASSKEY')\n ) {\n setLocalError(t('auth.passkey.errors.notAvailable'));\n return;\n }\n\n const status = await auth.loginWithPasskey({ email: email.trim() });\n if (status === 'success') {\n onSuccess();\n }\n } catch {\n const authMessage = auth.error?.message;\n setLocalError(authMessage ?? t('auth.passkey.errors.failed'));\n }\n },\n [auth, email, onSuccess, t],\n );\n\n const formError = localError ?? auth.error?.message ?? null;\n\n return (\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n <form className={styles.formSurface} onSubmit={handleSubmit} noValidate>\n <div className={styles.stack}>\n <p className={styles.helper}>{t('auth.passkey.helper')}</p>\n {formError != null ? <FormError>{formError}</FormError> : null}\n <FormField\n label={t('auth.passkey.form.emailLabel')}\n name=\"passkey-email\"\n type=\"email\"\n value={email}\n onChange={(event) => {\n setEmail(event.target.value);\n setLocalError(null);\n }}\n placeholder={t('auth.passkey.form.emailPlaceholder')}\n autoComplete=\"email\"\n required\n />\n </div>\n <div className={styles.actionsRow}>\n <Button type=\"submit\" variant=\"primary\" isLoading={auth.isLoading}>\n {isAttemptingPasskey\n ? t('auth.passkey.actions.submitting')\n : t('auth.passkey.actions.submit')}\n </Button>\n {onShowMethods != null ? (\n <button\n type=\"button\"\n className={styles.inlineLink}\n onClick={onShowMethods}\n >\n {t('auth.passkey.actions.showMethods')}\n </button>\n ) : null}\n </div>\n </form>\n );\n};\n"],"mappings":";;;;;;;;AAoCA,IAAa,KAAoB,EAC/B,SACA,cACA,iBACA,yBAAsB,IACtB,uBACwB;CACxB,IAAM,EAAE,SAAM,GAAsB,EAC9B,CAAC,GAAO,KAAY,EAAS,EAAK,aAAa,GAAG,EAClD,CAAC,GAAY,KAAiB,EAAwB,KAAK;AAEjE,SAAgB;AACd,EAAI,EAAK,aAAa,QAAQ,EAAK,cAAc,KAC/C,EAAS,EAAK,UAAU,GACf,KAAgB,QAAQ,MAAiB,MAClD,EAAS,EAAa;IAEvB,CAAC,EAAK,WAAW,EAAa,CAAC;CAElC,IAAM,IAAe,EACnB,OAAO,MAAsC;AAI3C,MAHA,EAAM,gBAAgB,EACtB,EAAc,KAAK,EAEf,EAAM,MAAM,KAAK,IAAI;AACvB,KAAc,EAAE,oCAAoC,CAAC;AACrD;;AAGF,MAAI;GACF,IAAM,IAAS,MAAM,EAAK,oBAAoB,EAAM,MAAM,CAAC;AAC3D,OAAI,MAAM,QAAQ,EAAO,QAAQ,IAAI,EAAO,QAAQ,WAAW,GAAG;AAOhE,MALE,EAAO,eAAe,OAIlB,EAAE,6BAA6B,GAH/B,EAAE,sCAAsC,EACtC,MAAM,IAAI,KAAK,EAAO,YAAY,CAAC,gBAAgB,EACpD,CAAC,CAEyB;AACjC;;AAEF,OACE,MAAM,QAAQ,EAAO,QAAQ,IAC7B,CAAC,EAAO,QAAQ,SAAS,UAAU,EACnC;AACA,MAAc,EAAE,mCAAmC,CAAC;AACpD;;AAIF,GADe,MAAM,EAAK,iBAAiB,EAAE,OAAO,EAAM,MAAM,EAAE,CAAC,KACpD,aACb,GAAW;UAEP;GACN,IAAM,IAAc,EAAK,OAAO;AAChC,KAAc,KAAe,EAAE,6BAA6B,CAAC;;IAGjE;EAAC;EAAM;EAAO;EAAW;EAAE,CAC5B,EAEK,IAAY,KAAc,EAAK,OAAO,WAAW;AAEvD,QAEE,kBAAC,QAAD;EAAM,WAAW;EAAoB,UAAU;EAAc,YAAA;YAA7D,CACE,kBAAC,OAAD;GAAK,WAAW;aAAhB;IACE,kBAAC,KAAD;KAAG,WAAW;eAAgB,EAAE,sBAAsB;KAAK,CAAA;IAC1D,KAAa,OAA4C,OAArC,kBAAC,GAAD,EAAA,UAAY,GAAsB,CAAA;IACvD,kBAAC,GAAD;KACE,OAAO,EAAE,+BAA+B;KACxC,MAAK;KACL,MAAK;KACL,OAAO;KACP,WAAW,MAAU;AAEnB,MADA,EAAS,EAAM,OAAO,MAAM,EAC5B,EAAc,KAAK;;KAErB,aAAa,EAAE,qCAAqC;KACpD,cAAa;KACb,UAAA;KACA,CAAA;IACE;MACN,kBAAC,OAAD;GAAK,WAAW;aAAhB,CACE,kBAAC,GAAD;IAAQ,MAAK;IAAS,SAAQ;IAAU,WAAW,EAAK;cAElD,EADH,IACK,oCACA,8BAA8B;IAC7B,CAAA,EACR,KAAiB,OAQd,OAPF,kBAAC,UAAD;IACE,MAAK;IACL,WAAW;IACX,SAAS;cAER,EAAE,mCAAmC;IAC/B,CAAA,CAEP;KACD"}
@@ -1,37 +0,0 @@
1
- import { actionsRow as e, formSurface as t, inlineLink as n } from "./loginPage.css.js";
2
- import { AuthPanel as r } from "./AuthPanel.js";
3
- import { useSharedTranslation as i } from "../../i18n/useSharedTranslation.js";
4
- import { OidcButtons as a } from "./OidcButtons.js";
5
- import { jsx as o, jsxs as s } from "react/jsx-runtime";
6
- import { LoginForm as c } from "@plumile/ui/atomic/organisms/login_form/LoginForm.js";
7
- //#region src/auth/login/PasswordLoginPanel.tsx
8
- var l = ({ auth: l, defaultEmail: u, onForgotPassword: d, onSuccess: f, providers: p }) => {
9
- let { t: m } = i();
10
- return /* @__PURE__ */ o(r, {
11
- title: m("auth.passwordLogin.title"),
12
- children: /* @__PURE__ */ s("div", {
13
- className: t,
14
- children: [
15
- /* @__PURE__ */ o(c, {
16
- auth: l,
17
- onSuccess: f,
18
- defaultEmail: u
19
- }),
20
- /* @__PURE__ */ o("div", {
21
- className: e,
22
- children: /* @__PURE__ */ o("button", {
23
- type: "button",
24
- className: n,
25
- onClick: d,
26
- children: m("auth.passwordLogin.forgotPassword")
27
- })
28
- }),
29
- /* @__PURE__ */ o(a, { providers: p })
30
- ]
31
- })
32
- });
33
- };
34
- //#endregion
35
- export { l as PasswordLoginPanel };
36
-
37
- //# sourceMappingURL=PasswordLoginPanel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PasswordLoginPanel.js","names":[],"sources":["../../../../src/auth/login/PasswordLoginPanel.tsx"],"sourcesContent":["import { type JSX } from 'react';\nimport { useSharedTranslation } from '../../i18n/useSharedTranslation.js';\n\nimport { LoginForm } from '@plumile/ui/atomic/organisms/login_form/LoginForm.js';\nimport type { LoginFormAuthAdapter } from '@plumile/ui/atomic/organisms/login_form/useLoginForm.js';\n\nimport type { OidcProviderKind } from '../../modules/sharedSchemaTypes.js';\n\nimport { AuthPanel } from './AuthPanel.js';\nimport { OidcButtons } from './OidcButtons.js';\nimport * as styles from './loginPage.css.js';\n\ntype Props = {\n auth: LoginFormAuthAdapter;\n defaultEmail: string;\n onForgotPassword: () => void;\n onSuccess: () => void;\n providers: readonly OidcProviderKind[];\n};\n\nexport const PasswordLoginPanel = ({\n auth,\n defaultEmail,\n onForgotPassword,\n onSuccess,\n providers,\n}: Props): JSX.Element => {\n const { t } = useSharedTranslation();\n return (\n <AuthPanel title={t('auth.passwordLogin.title')}>\n <div className={styles.formSurface}>\n <LoginForm\n auth={auth}\n onSuccess={onSuccess}\n defaultEmail={defaultEmail}\n />\n <div className={styles.actionsRow}>\n <button\n type=\"button\"\n className={styles.inlineLink}\n onClick={onForgotPassword}\n >\n {t('auth.passwordLogin.forgotPassword')}\n </button>\n </div>\n <OidcButtons providers={providers} />\n </div>\n </AuthPanel>\n );\n};\n"],"mappings":";;;;;;;AAoBA,IAAa,KAAsB,EACjC,SACA,iBACA,qBACA,cACA,mBACwB;CACxB,IAAM,EAAE,SAAM,GAAsB;AACpC,QACE,kBAAC,GAAD;EAAW,OAAO,EAAE,2BAA2B;YAC7C,kBAAC,OAAD;GAAK,WAAW;aAAhB;IACE,kBAAC,GAAD;KACQ;KACK;KACG;KACd,CAAA;IACF,kBAAC,OAAD;KAAK,WAAW;eACd,kBAAC,UAAD;MACE,MAAK;MACL,WAAW;MACX,SAAS;gBAER,EAAE,oCAAoC;MAChC,CAAA;KACL,CAAA;IACN,kBAAC,GAAD,EAAwB,cAAa,CAAA;IACjC;;EACI,CAAA"}
@@ -1,8 +0,0 @@
1
- /* empty css */
2
- /* empty css */
3
- //#region src/auth/login/loginPage.css.ts
4
- var e = "w8yhmy0 vncd899io vncd89ai6 vncd89aoo", t = "w8yhmy1 vncd899io vncd89ai6 vncd89u6f", n = "w8yhmy2 vncd89va3 vncd898x vncd89fbo vncd89f4x", r = "w8yhmy3 vncd89co vncd89va3 vncd899io vncd89ao6 vncd89hxx vncd89fzo", i = "w8yhmy4 vncd89v47 vncd89cfo vncd899mx vncd891t6 vncd89van", a = "w8yhmy5 vncd89co vncd899io vncd89ajx vncd89aof vncd89doo vncd89hxf", o = "w8yhmy7 w8yhmy6 vncd89v9p vncd89amo vncd8978 vncd896x vncd897k", s = "w8yhmy8 vncd89nvx vncd89oj6 vncd89p6f vncd89ly6 vncd89766 vncd8973f vncd897d6 vncd897af", c = "w8yhmy9 vncd899io vncd89ai6 vncd89aoo", l = "w8yhmya vncd89u6f", u = "w8yhmyb vncd89fbo vncd899o vncd89amx vncd89v9p vncd89ed6", d = "w8yhmyc vncd89hxo", f = "w8yhmye w8yhmyd vncd89106 vncd891df vncd891qf vncd89v9p vncd89v4j vncd8978 vncd896w vncd897k";
5
- //#endregion
6
- export { a as actionsRow, c as block, f as brandGhostButton, r as divider, i as dividerLine, d as footer, t as formSurface, l as fullWidth, n as helper, o as inlineLink, s as panel, u as panelTitle, e as stack };
7
-
8
- //# sourceMappingURL=loginPage.css.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loginPage.css.js","names":[],"sources":["../../../../src/auth/login/loginPage.css.ts"],"sourcesContent":["import { style } from '@vanilla-extract/css';\nimport { sprinkles } from '@plumile/ui/theme/sprinkles.css.js';\nimport { vars } from '@plumile/ui/theme/themeContract.js';\n\nexport const stack = sprinkles({\n display: 'flex',\n flexDirection: 'column',\n gap: 4,\n});\n\nexport const formSurface = sprinkles({\n display: 'flex',\n flexDirection: 'column',\n width: 'full',\n});\n\nexport const helper = sprinkles({\n color: 'brandDarkGray',\n fontSize: 'sm',\n margin: 0,\n lineHeight: 1.6,\n});\n\nexport const divider = sprinkles({\n alignItems: 'center',\n color: 'brandDarkGray',\n display: 'flex',\n gap: 2,\n marginTop: 5,\n marginBottom: 3,\n});\n\nexport const dividerLine = sprinkles({\n backgroundColor: 'brandPrimaryRed',\n height: 'px',\n flex: 1,\n borderRadius: 'full',\n opacity: 35,\n});\n\nexport const actionsRow = sprinkles({\n alignItems: 'center',\n display: 'flex',\n flexWrap: 'wrap',\n gap: 3,\n justifyContent: 'space-between',\n marginTop: 3,\n});\n\nexport const inlineLink = style([\n sprinkles({\n color: 'brandPrimaryRed',\n fontWeight: 'semibold',\n transitionProperty: 'colors',\n transitionDuration: 150,\n transitionTimingFunction: 'ease',\n }),\n {\n background: 'transparent',\n borderWidth: 0,\n borderStyle: 'none',\n cursor: 'pointer',\n padding: 0,\n textDecoration: 'none',\n ':hover': {\n color: vars.colors.brandSecondaryOrange,\n textDecoration: 'underline',\n },\n },\n]);\n\nexport const panel = sprinkles({\n borderTopLeftRadius: 'none',\n borderTopRightRadius: 'none',\n borderBottomLeftRadius: '2xl',\n borderBottomRightRadius: '2xl',\n paddingX: 6,\n paddingY: 6,\n});\n\nexport const block = sprinkles({\n display: 'flex',\n flexDirection: 'column',\n gap: 4,\n});\n\nexport const fullWidth = sprinkles({\n width: 'full',\n});\n\nexport const panelTitle = sprinkles({\n margin: 0,\n fontSize: 'xl',\n fontWeight: 'bold',\n color: 'brandPrimaryRed',\n letterSpacing: 'tight',\n});\n\nexport const footer = sprinkles({\n marginTop: 4,\n});\n\nexport const brandGhostButton = style([\n sprinkles({\n borderColor: 'brandPrimaryRed',\n borderWidth: 'px',\n borderStyle: 'solid',\n color: 'brandPrimaryRed',\n backgroundColor: 'brandLightGray',\n transitionProperty: 'colors',\n transitionDuration: 120,\n transitionTimingFunction: 'ease',\n }),\n {\n selectors: {\n '&:hover:not(:disabled)': {\n backgroundColor: `color-mix(in srgb, ${vars.colors.brandPrimaryRed} 8%, transparent)`,\n color: vars.colors.brandSecondaryOrange,\n borderColor: vars.colors.brandSecondaryOrange,\n },\n },\n },\n]);\n"],"mappings":""}
@@ -1,10 +0,0 @@
1
- import e from "relay-runtime";
2
- //#region src/auth/login/synchronizeAuthStatusQuery.ts
3
- var { fetchQuery: t } = e;
4
- async function n(e, n) {
5
- return (await t(e, n, {}, { fetchPolicy: "network-only" }).toPromise())?.isLoggedIn === !0;
6
- }
7
- //#endregion
8
- export { n as synchronizeAuthStatusQuery };
9
-
10
- //# sourceMappingURL=synchronizeAuthStatusQuery.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"synchronizeAuthStatusQuery.js","names":[],"sources":["../../../../src/auth/login/synchronizeAuthStatusQuery.ts"],"sourcesContent":["import RelayRuntime, {\n type GraphQLTaggedNode,\n type IEnvironment,\n type OperationType,\n} from 'relay-runtime';\n\nconst { fetchQuery } = RelayRuntime;\n\ntype AuthStatusQueryResponse = {\n readonly isLoggedIn?: boolean | null;\n};\n\n/**\n * Forces a fresh auth-status read from network to avoid stale cache guards\n * right after login mutations complete.\n */\nexport async function synchronizeAuthStatusQuery<TQuery extends OperationType>(\n environment: IEnvironment,\n query: GraphQLTaggedNode,\n): Promise<boolean> {\n const response = await fetchQuery<TQuery>(\n environment,\n query,\n {},\n { fetchPolicy: 'network-only' },\n ).toPromise();\n\n const isLoggedIn = (response as AuthStatusQueryResponse | null | undefined)\n ?.isLoggedIn;\n return isLoggedIn === true;\n}\n"],"mappings":";;AAMA,IAAM,EAAE,YAAA,MAAe;AAUvB,eAAsB,EACpB,GACA,GACkB;AAUlB,SATiB,MAAM,EACrB,GACA,GACA,EAAE,EACF,EAAE,aAAa,gBAAgB,CAChC,CAAC,WAAW,GAGT,eACkB"}