@plumile/backoffice-react 0.1.72 → 0.1.74

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 (390) 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/index.d.ts +5 -0
  104. package/lib/types/index.d.ts.map +1 -1
  105. package/lib/types/pages/BackofficeEntityDetailPage.d.ts.map +1 -1
  106. package/lib/types/provider/BackofficeConfigContext.d.ts +1 -0
  107. package/lib/types/provider/BackofficeConfigContext.d.ts.map +1 -1
  108. package/lib/types/provider/BackofficeProvider.d.ts.map +1 -1
  109. package/lib/types/provider/types.d.ts +2 -0
  110. package/lib/types/provider/types.d.ts.map +1 -1
  111. package/lib/types/relay/environment.d.ts +1 -0
  112. package/lib/types/relay/environment.d.ts.map +1 -1
  113. package/lib/types/router/createBackofficeRoutes.d.ts.map +1 -1
  114. package/package.json +9 -9
  115. package/lib/esm/auth/login/AuthPanel.js.map +0 -1
  116. package/lib/esm/auth/login/EmailCapturePanel.js +0 -52
  117. package/lib/esm/auth/login/EmailCapturePanel.js.map +0 -1
  118. package/lib/esm/auth/login/LoginFlow.js +0 -130
  119. package/lib/esm/auth/login/LoginFlow.js.map +0 -1
  120. package/lib/esm/auth/login/MethodChooser.js +0 -51
  121. package/lib/esm/auth/login/MethodChooser.js.map +0 -1
  122. package/lib/esm/auth/login/MfaChallengeForm.js +0 -83
  123. package/lib/esm/auth/login/MfaChallengeForm.js.map +0 -1
  124. package/lib/esm/auth/login/OidcButtons.js +0 -29
  125. package/lib/esm/auth/login/OidcButtons.js.map +0 -1
  126. package/lib/esm/auth/login/PasskeyLoginForm.js +0 -84
  127. package/lib/esm/auth/login/PasskeyLoginForm.js.map +0 -1
  128. package/lib/esm/auth/login/PasswordLoginPanel.js +0 -37
  129. package/lib/esm/auth/login/PasswordLoginPanel.js.map +0 -1
  130. package/lib/esm/auth/login/loginPage.css.js +0 -8
  131. package/lib/esm/auth/login/loginPage.css.js.map +0 -1
  132. package/lib/esm/auth/login/synchronizeAuthStatusQuery.js +0 -10
  133. package/lib/esm/auth/login/synchronizeAuthStatusQuery.js.map +0 -1
  134. package/lib/esm/auth/pages/AcceptInvitationScreen.js.map +0 -1
  135. package/lib/esm/auth/pages/PasswordResetCompleteScreen.js.map +0 -1
  136. package/lib/esm/auth/pages/PasswordResetRequestScreen.js.map +0 -1
  137. package/lib/esm/auth/pages/VerifyEmailScreen.js +0 -65
  138. package/lib/esm/auth/pages/VerifyEmailScreen.js.map +0 -1
  139. package/lib/esm/components/backoffice/actions/BackofficeEntityActionFormDialog.js.map +0 -1
  140. package/lib/esm/components/backoffice/actions/LazyBackofficeEntityActionFormDialog.js +0 -11
  141. package/lib/esm/components/backoffice/actions/LazyBackofficeEntityActionFormDialog.js.map +0 -1
  142. package/lib/esm/components/backoffice/actions/backofficeEntityActionFormDialog.css.js +0 -8
  143. package/lib/esm/components/backoffice/actions/backofficeEntityActionFormDialog.css.js.map +0 -1
  144. package/lib/esm/components/backoffice/columns/buildDataTableColumns.js +0 -59
  145. package/lib/esm/components/backoffice/columns/buildDataTableColumns.js.map +0 -1
  146. package/lib/esm/components/backoffice/detail/BackofficeDetailBadgeRow.js +0 -22
  147. package/lib/esm/components/backoffice/detail/BackofficeDetailBadgeRow.js.map +0 -1
  148. package/lib/esm/components/backoffice/detail/BackofficeDetailErrorList.js +0 -41
  149. package/lib/esm/components/backoffice/detail/BackofficeDetailErrorList.js.map +0 -1
  150. package/lib/esm/components/backoffice/detail/BackofficeDetailField.js +0 -31
  151. package/lib/esm/components/backoffice/detail/BackofficeDetailField.js.map +0 -1
  152. package/lib/esm/components/backoffice/detail/BackofficeDetailFlagTag.css.js +0 -8
  153. package/lib/esm/components/backoffice/detail/BackofficeDetailFlagTag.css.js.map +0 -1
  154. package/lib/esm/components/backoffice/detail/BackofficeDetailFlagTag.js +0 -24
  155. package/lib/esm/components/backoffice/detail/BackofficeDetailFlagTag.js.map +0 -1
  156. package/lib/esm/components/backoffice/detail/BackofficeDetailLayout.js +0 -20
  157. package/lib/esm/components/backoffice/detail/BackofficeDetailLayout.js.map +0 -1
  158. package/lib/esm/components/backoffice/detail/BackofficeDetailPayload.js +0 -18
  159. package/lib/esm/components/backoffice/detail/BackofficeDetailPayload.js.map +0 -1
  160. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationLink.js +0 -49
  161. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationLink.js.map +0 -1
  162. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationList.js +0 -11
  163. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationList.js.map +0 -1
  164. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationListBlock.js +0 -115
  165. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationListBlock.js.map +0 -1
  166. package/lib/esm/components/backoffice/detail/BackofficeDetailSection.js +0 -33
  167. package/lib/esm/components/backoffice/detail/BackofficeDetailSection.js.map +0 -1
  168. package/lib/esm/components/backoffice/detail/BackofficeDetailTaggedValue.js +0 -18
  169. package/lib/esm/components/backoffice/detail/BackofficeDetailTaggedValue.js.map +0 -1
  170. package/lib/esm/components/backoffice/detail/backofficeDetailBadgeRow.css.js +0 -8
  171. package/lib/esm/components/backoffice/detail/backofficeDetailBadgeRow.css.js.map +0 -1
  172. package/lib/esm/components/backoffice/detail/backofficeDetailErrorList.css.js +0 -8
  173. package/lib/esm/components/backoffice/detail/backofficeDetailErrorList.css.js.map +0 -1
  174. package/lib/esm/components/backoffice/detail/backofficeDetailField.css.js +0 -15
  175. package/lib/esm/components/backoffice/detail/backofficeDetailField.css.js.map +0 -1
  176. package/lib/esm/components/backoffice/detail/backofficeDetailLayout.css.js +0 -8
  177. package/lib/esm/components/backoffice/detail/backofficeDetailLayout.css.js.map +0 -1
  178. package/lib/esm/components/backoffice/detail/backofficeDetailRelationLink.css.js +0 -8
  179. package/lib/esm/components/backoffice/detail/backofficeDetailRelationLink.css.js.map +0 -1
  180. package/lib/esm/components/backoffice/detail/backofficeDetailRelationList.css.js +0 -8
  181. package/lib/esm/components/backoffice/detail/backofficeDetailRelationList.css.js.map +0 -1
  182. package/lib/esm/components/backoffice/detail/backofficeDetailSection.css.js +0 -8
  183. package/lib/esm/components/backoffice/detail/backofficeDetailSection.css.js.map +0 -1
  184. package/lib/esm/components/backoffice/detail/backofficeDetailTaggedValue.css.js +0 -8
  185. package/lib/esm/components/backoffice/detail/backofficeDetailTaggedValue.css.js.map +0 -1
  186. package/lib/esm/components/backoffice/detail/detailPayloadUtils.js +0 -17
  187. package/lib/esm/components/backoffice/detail/detailPayloadUtils.js.map +0 -1
  188. package/lib/esm/components/backoffice/errors/BackofficeErrorBoundary.js.map +0 -1
  189. package/lib/esm/components/backoffice/filters/BackofficeFilterAction.js +0 -43
  190. package/lib/esm/components/backoffice/filters/BackofficeFilterAction.js.map +0 -1
  191. package/lib/esm/components/backoffice/filters/EntityFilterValue.js +0 -46
  192. package/lib/esm/components/backoffice/filters/EntityFilterValue.js.map +0 -1
  193. package/lib/esm/components/backoffice/filters/EntityIdFilterField.js +0 -51
  194. package/lib/esm/components/backoffice/filters/EntityIdFilterField.js.map +0 -1
  195. package/lib/esm/components/backoffice/filters/backofficeFilterAction.css.js +0 -8
  196. package/lib/esm/components/backoffice/filters/backofficeFilterAction.css.js.map +0 -1
  197. package/lib/esm/components/backoffice/filters/entityIdFilterField.css.js +0 -8
  198. package/lib/esm/components/backoffice/filters/entityIdFilterField.css.js.map +0 -1
  199. package/lib/esm/components/backoffice/layout/backofficeSidebarActions.css.js +0 -8
  200. package/lib/esm/components/backoffice/layout/backofficeSidebarActions.css.js.map +0 -1
  201. package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js +0 -10
  202. package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js.map +0 -1
  203. package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.js +0 -38
  204. package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.js.map +0 -1
  205. package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarPortal.js +0 -12
  206. package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarPortal.js.map +0 -1
  207. package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarPortalContext.js.map +0 -1
  208. package/lib/esm/components/backoffice/layout/breadcrumb/assertValidBreadcrumb.js +0 -16
  209. package/lib/esm/components/backoffice/layout/breadcrumb/assertValidBreadcrumb.js.map +0 -1
  210. package/lib/esm/components/backoffice/layout/breadcrumb/backofficeTopbarBreadcrumb.css.js +0 -8
  211. package/lib/esm/components/backoffice/layout/breadcrumb/backofficeTopbarBreadcrumb.css.js.map +0 -1
  212. package/lib/esm/components/backoffice/layout/breadcrumb/buildBreadcrumbs.js.map +0 -1
  213. package/lib/esm/components/backoffice/layout/breadcrumb/types.js +0 -0
  214. package/lib/esm/components/backoffice/layout/buildSidebarSections.js +0 -183
  215. package/lib/esm/components/backoffice/layout/buildSidebarSections.js.map +0 -1
  216. package/lib/esm/components/backoffice/layout/mapViewerToSidebarProfileView.js +0 -18
  217. package/lib/esm/components/backoffice/layout/mapViewerToSidebarProfileView.js.map +0 -1
  218. package/lib/esm/components/backoffice/list/RowFlagsCell.css.js +0 -7
  219. package/lib/esm/components/backoffice/list/RowFlagsCell.css.js.map +0 -1
  220. package/lib/esm/components/backoffice/list/RowFlagsCell.js +0 -37
  221. package/lib/esm/components/backoffice/list/RowFlagsCell.js.map +0 -1
  222. package/lib/esm/components/backoffice/overview/BackofficeOverviewLayout.js +0 -31
  223. package/lib/esm/components/backoffice/overview/BackofficeOverviewLayout.js.map +0 -1
  224. package/lib/esm/components/backoffice/overview/backofficeOverviewLayout.css.js +0 -8
  225. package/lib/esm/components/backoffice/overview/backofficeOverviewLayout.css.js.map +0 -1
  226. package/lib/esm/components/backoffice/pickers/EntityIdPickerDialog.js +0 -106
  227. package/lib/esm/components/backoffice/pickers/EntityIdPickerDialog.js.map +0 -1
  228. package/lib/esm/components/backoffice/pickers/entityIdPickerDialog.css.js +0 -8
  229. package/lib/esm/components/backoffice/pickers/entityIdPickerDialog.css.js.map +0 -1
  230. package/lib/esm/components/backoffice/pickers/shared/EntityPickerList.js +0 -23
  231. package/lib/esm/components/backoffice/pickers/shared/EntityPickerList.js.map +0 -1
  232. package/lib/esm/components/backoffice/pickers/shared/EntityPickerRowBase.js +0 -23
  233. package/lib/esm/components/backoffice/pickers/shared/EntityPickerRowBase.js.map +0 -1
  234. package/lib/esm/components/backoffice/pickers/shared/EntityPickerShell.js +0 -24
  235. package/lib/esm/components/backoffice/pickers/shared/EntityPickerShell.js.map +0 -1
  236. package/lib/esm/components/backoffice/pickers/types.js +0 -0
  237. package/lib/esm/components/backoffice/refs/BackofficeEntityIdRef.js +0 -35
  238. package/lib/esm/components/backoffice/refs/BackofficeEntityIdRef.js.map +0 -1
  239. package/lib/esm/components/backoffice/refs/BackofficeRelatedCountLink.js +0 -54
  240. package/lib/esm/components/backoffice/refs/BackofficeRelatedCountLink.js.map +0 -1
  241. package/lib/esm/components/backoffice/refs/backofficeEntityIdRef.css.js +0 -8
  242. package/lib/esm/components/backoffice/refs/backofficeEntityIdRef.css.js.map +0 -1
  243. package/lib/esm/components/backoffice/refs/backofficeRelatedCountLink.css.js +0 -8
  244. package/lib/esm/components/backoffice/refs/backofficeRelatedCountLink.css.js.map +0 -1
  245. package/lib/esm/components/backoffice/routing/BackofficeContentBoundary.js +0 -24
  246. package/lib/esm/components/backoffice/routing/BackofficeContentBoundary.js.map +0 -1
  247. package/lib/esm/components/backoffice/routing/BackofficeContentError.js +0 -38
  248. package/lib/esm/components/backoffice/routing/BackofficeContentError.js.map +0 -1
  249. package/lib/esm/components/backoffice/routing/BackofficeContentFallback.js +0 -47
  250. package/lib/esm/components/backoffice/routing/BackofficeContentFallback.js.map +0 -1
  251. package/lib/esm/components/backoffice/routing/BackofficeRouteFallback.js +0 -22
  252. package/lib/esm/components/backoffice/routing/BackofficeRouteFallback.js.map +0 -1
  253. package/lib/esm/components/backoffice/routing/BackofficeRoutePendingBar.js +0 -12
  254. package/lib/esm/components/backoffice/routing/BackofficeRoutePendingBar.js.map +0 -1
  255. package/lib/esm/components/backoffice/routing/backofficeContentBoundary.css.js +0 -8
  256. package/lib/esm/components/backoffice/routing/backofficeContentBoundary.css.js.map +0 -1
  257. package/lib/esm/components/backoffice/routing/backofficeContentError.css.js +0 -8
  258. package/lib/esm/components/backoffice/routing/backofficeContentError.css.js.map +0 -1
  259. package/lib/esm/components/backoffice/routing/backofficeContentFallback.css.js +0 -8
  260. package/lib/esm/components/backoffice/routing/backofficeContentFallback.css.js.map +0 -1
  261. package/lib/esm/components/backoffice/routing/backofficeRouteFallback.css.js +0 -8
  262. package/lib/esm/components/backoffice/routing/backofficeRouteFallback.css.js.map +0 -1
  263. package/lib/esm/components/backoffice/routing/backofficeRoutePendingBar.css.js +0 -8
  264. package/lib/esm/components/backoffice/routing/backofficeRoutePendingBar.css.js.map +0 -1
  265. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityDetailScaffold.js +0 -11
  266. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityDetailScaffold.js.map +0 -1
  267. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js +0 -438
  268. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js.map +0 -1
  269. package/lib/esm/components/backoffice/scaffolds/BackofficeListFilterContext.js +0 -40
  270. package/lib/esm/components/backoffice/scaffolds/BackofficeListFilterContext.js.map +0 -1
  271. package/lib/esm/components/backoffice/scaffolds/BackofficeTabbedDetailShell.js +0 -24
  272. package/lib/esm/components/backoffice/scaffolds/BackofficeTabbedDetailShell.js.map +0 -1
  273. package/lib/esm/components/backoffice/scaffolds/backofficeEntityListScaffold.css.js +0 -8
  274. package/lib/esm/components/backoffice/scaffolds/backofficeEntityListScaffold.css.js.map +0 -1
  275. package/lib/esm/components/backoffice/scaffolds/backofficeTabbedDetailShell.css.js +0 -8
  276. package/lib/esm/components/backoffice/scaffolds/backofficeTabbedDetailShell.css.js.map +0 -1
  277. package/lib/esm/components/backoffice/shared/BackofficeInlineFilterRow.js +0 -12
  278. package/lib/esm/components/backoffice/shared/BackofficeInlineFilterRow.js.map +0 -1
  279. package/lib/esm/components/backoffice/shared/backofficeInlineFilterRow.css.js +0 -8
  280. package/lib/esm/components/backoffice/shared/backofficeInlineFilterRow.css.js.map +0 -1
  281. package/lib/esm/filters/filterHelpers.js +0 -36
  282. package/lib/esm/filters/filterHelpers.js.map +0 -1
  283. package/lib/esm/hooks/useAuth.js +0 -439
  284. package/lib/esm/hooks/useAuth.js.map +0 -1
  285. package/lib/esm/hooks/useBackofficeAuth.js +0 -89
  286. package/lib/esm/hooks/useBackofficeAuth.js.map +0 -1
  287. package/lib/esm/hooks/useBackofficeListRefetch.js +0 -40
  288. package/lib/esm/hooks/useBackofficeListRefetch.js.map +0 -1
  289. package/lib/esm/hooks/useBackofficeListUrlState.js.map +0 -1
  290. package/lib/esm/hooks/useBackofficeLoadMore.js +0 -18
  291. package/lib/esm/hooks/useBackofficeLoadMore.js.map +0 -1
  292. package/lib/esm/hooks/useBackofficeSessionAuth.js +0 -28
  293. package/lib/esm/hooks/useBackofficeSessionAuth.js.map +0 -1
  294. package/lib/esm/hooks/useBackofficeSidebarPins.js +0 -70
  295. package/lib/esm/hooks/useBackofficeSidebarPins.js.map +0 -1
  296. package/lib/esm/hooks/useConditionalSubscription.js +0 -57
  297. package/lib/esm/hooks/useConditionalSubscription.js.map +0 -1
  298. package/lib/esm/hooks/useCopyToClipboard.js +0 -31
  299. package/lib/esm/hooks/useCopyToClipboard.js.map +0 -1
  300. package/lib/esm/hooks/useRefetchNeededReload.js +0 -23
  301. package/lib/esm/hooks/useRefetchNeededReload.js.map +0 -1
  302. package/lib/esm/hooks/useSidebarGroupCollapse.js +0 -35
  303. package/lib/esm/hooks/useSidebarGroupCollapse.js.map +0 -1
  304. package/lib/esm/i18n/createI18nInstance.js +0 -62
  305. package/lib/esm/i18n/createI18nInstance.js.map +0 -1
  306. package/lib/esm/i18n/locales/en/backofficeReact.js +0 -249
  307. package/lib/esm/i18n/locales/en/backofficeReact.js.map +0 -1
  308. package/lib/esm/i18n/locales/en/shared.js +0 -201
  309. package/lib/esm/i18n/locales/en/shared.js.map +0 -1
  310. package/lib/esm/i18n/locales/fr/backofficeReact.js +0 -251
  311. package/lib/esm/i18n/locales/fr/backofficeReact.js.map +0 -1
  312. package/lib/esm/i18n/locales/fr/shared.js +0 -201
  313. package/lib/esm/i18n/locales/fr/shared.js.map +0 -1
  314. package/lib/esm/i18n/mergeResourceLanguages.js +0 -19
  315. package/lib/esm/i18n/mergeResourceLanguages.js.map +0 -1
  316. package/lib/esm/i18n/resources.js +0 -19
  317. package/lib/esm/i18n/resources.js.map +0 -1
  318. package/lib/esm/i18n/useBackofficeFormats.js +0 -23
  319. package/lib/esm/i18n/useBackofficeFormats.js.map +0 -1
  320. package/lib/esm/i18n/useBackofficeReactTranslation.js +0 -9
  321. package/lib/esm/i18n/useBackofficeReactTranslation.js.map +0 -1
  322. package/lib/esm/i18n/useReviewStatusLabel.js +0 -19
  323. package/lib/esm/i18n/useReviewStatusLabel.js.map +0 -1
  324. package/lib/esm/i18n/useSharedTranslation.js +0 -9
  325. package/lib/esm/i18n/useSharedTranslation.js.map +0 -1
  326. package/lib/esm/index.js +0 -37
  327. package/lib/esm/modules/base64.js +0 -23
  328. package/lib/esm/modules/base64.js.map +0 -1
  329. package/lib/esm/modules/formatFileSize.js +0 -28
  330. package/lib/esm/modules/formatFileSize.js.map +0 -1
  331. package/lib/esm/modules/sharedSchemaTypes.js +0 -0
  332. package/lib/esm/modules/webauthn.js +0 -33
  333. package/lib/esm/modules/webauthn.js.map +0 -1
  334. package/lib/esm/pages/BackofficeAcceptInvitationPage.js +0 -24
  335. package/lib/esm/pages/BackofficeAcceptInvitationPage.js.map +0 -1
  336. package/lib/esm/pages/BackofficeDashboardPage.js +0 -197
  337. package/lib/esm/pages/BackofficeDashboardPage.js.map +0 -1
  338. package/lib/esm/pages/BackofficeEntityDetailLayoutPage.js +0 -18
  339. package/lib/esm/pages/BackofficeEntityDetailLayoutPage.js.map +0 -1
  340. package/lib/esm/pages/BackofficeEntityDetailPage.js +0 -837
  341. package/lib/esm/pages/BackofficeEntityDetailPage.js.map +0 -1
  342. package/lib/esm/pages/BackofficeEntityDetailUnknownPageRedirect.js.map +0 -1
  343. package/lib/esm/pages/BackofficeEntityListPage.js +0 -363
  344. package/lib/esm/pages/BackofficeEntityListPage.js.map +0 -1
  345. package/lib/esm/pages/BackofficeLayoutPage.js +0 -137
  346. package/lib/esm/pages/BackofficeLayoutPage.js.map +0 -1
  347. package/lib/esm/pages/BackofficeLoginPage.js +0 -46
  348. package/lib/esm/pages/BackofficeLoginPage.js.map +0 -1
  349. package/lib/esm/pages/BackofficePasswordResetCompletePage.js +0 -59
  350. package/lib/esm/pages/BackofficePasswordResetCompletePage.js.map +0 -1
  351. package/lib/esm/pages/BackofficePasswordResetRequestPage.js.map +0 -1
  352. package/lib/esm/pages/BackofficeVerifyEmailPage.js +0 -59
  353. package/lib/esm/pages/BackofficeVerifyEmailPage.js.map +0 -1
  354. package/lib/esm/pages/backofficeDashboardPage.css.js +0 -8
  355. package/lib/esm/pages/backofficeDashboardPage.css.js.map +0 -1
  356. package/lib/esm/pages/backofficeEntityDetailPage.css.js +0 -8
  357. package/lib/esm/pages/backofficeEntityDetailPage.css.js.map +0 -1
  358. package/lib/esm/pages/backofficeEntityListPage.css.js +0 -8
  359. package/lib/esm/pages/backofficeEntityListPage.css.js.map +0 -1
  360. package/lib/esm/pages/detail/BackofficeEntityDetailLayoutContext.js.map +0 -1
  361. package/lib/esm/pages/detail/buildTabsItems.js +0 -10
  362. package/lib/esm/pages/detail/buildTabsItems.js.map +0 -1
  363. package/lib/esm/pages/detail/pageResolution.js.map +0 -1
  364. package/lib/esm/provider/BackofficeConfigContext.js.map +0 -1
  365. package/lib/esm/provider/BackofficeProvider.js +0 -152
  366. package/lib/esm/provider/BackofficeProvider.js.map +0 -1
  367. package/lib/esm/provider/entityRegistry.js +0 -91
  368. package/lib/esm/provider/entityRegistry.js.map +0 -1
  369. package/lib/esm/provider/lazyValue.js +0 -14
  370. package/lib/esm/provider/lazyValue.js.map +0 -1
  371. package/lib/esm/provider/types.js +0 -0
  372. package/lib/esm/provider/useBackofficeEntityLoader.js +0 -137
  373. package/lib/esm/provider/useBackofficeEntityLoader.js.map +0 -1
  374. package/lib/esm/provider/useBackofficeLazyValue.js.map +0 -1
  375. package/lib/esm/relay/RelayProvider.js +0 -12
  376. package/lib/esm/relay/RelayProvider.js.map +0 -1
  377. package/lib/esm/relay/createInlineDataReader.js +0 -2
  378. package/lib/esm/relay/createInlineReader.js +0 -7
  379. package/lib/esm/relay/createInlineReader.js.map +0 -1
  380. package/lib/esm/relay/envHelpers.js +0 -46
  381. package/lib/esm/relay/envHelpers.js.map +0 -1
  382. package/lib/esm/relay/environment.js.map +0 -1
  383. package/lib/esm/relay/identityView.js +0 -6
  384. package/lib/esm/relay/identityView.js.map +0 -1
  385. package/lib/esm/relay/mutationResult.js.map +0 -1
  386. package/lib/esm/relay/useRelayEnvironment.js.map +0 -1
  387. package/lib/esm/router/backofficeAuthPaths.js.map +0 -1
  388. package/lib/esm/router/createBackofficeRoutes.js +0 -273
  389. package/lib/esm/router/createBackofficeRoutes.js.map +0 -1
  390. package/lib/esm/style.js +0 -1
@@ -1,33 +1,53 @@
1
- import { isDevEnv as e } from "./envHelpers.js";
2
- import { Environment as t, Network as n, Observable as r, RecordSource as i, Store as a } from "relay-runtime";
3
- import { createClient as o } from "graphql-ws";
1
+ import { Environment as e, Network as t, Observable as n, RecordSource as r, Store as i } from "relay-runtime";
2
+ import { createClient as a } from "graphql-ws";
3
+ //#region src/relay/envHelpers.ts
4
+ var o = (() => {
5
+ try {
6
+ let e = import.meta;
7
+ return e.env == null ? {} : e.env;
8
+ } catch {
9
+ return {};
10
+ }
11
+ })();
12
+ function s(e) {
13
+ let t = o[e];
14
+ if (t === !0 || t === !1) return t;
15
+ if (typeof t == "string") {
16
+ if (t === "true") return !0;
17
+ if (t === "false") return !1;
18
+ }
19
+ }
20
+ function c() {
21
+ return !!s("DEV");
22
+ }
23
+ //#endregion
4
24
  //#region src/relay/environment.ts
5
- var s = "/api/graphql", c = "/api/ws", l, u, d;
6
- function f() {}
7
- var p = f;
8
- e() && (p = (e) => {
25
+ var l = "/api/graphql", u = "/api/ws", d, f, p, m;
26
+ function h() {}
27
+ var g = h;
28
+ c() && (g = (e) => {
9
29
  console.log("relayFieldLogger: ", e);
10
30
  });
11
- var m = "BillingOrganizationRefV2", h = (e, t) => {
31
+ var _ = (e) => {
12
32
  if (typeof e != "object" || !e) return null;
13
- let { id: n } = e;
14
- return typeof n != "string" || n.trim() === "" ? null : t === m ? `${m}:${n}` : n;
15
- };
16
- function g(e = {}) {
17
- let { httpUrl: t, wsUrl: n, logEvents: r, getAuthHeaders: i } = e;
18
- if (typeof t == "string" && t !== "" && (s = t), typeof n == "string" && n !== "" && (c = n), r != null && (p = r ? (e) => {
33
+ let { id: t } = e;
34
+ return typeof t != "string" || t.trim() === "" ? null : t;
35
+ }, v = (e, t) => m?.(e, t) ?? _(e, t);
36
+ function y(e = {}) {
37
+ let { httpUrl: t, wsUrl: n, logEvents: r, getDataId: i, getAuthHeaders: a } = e;
38
+ if (typeof t == "string" && t !== "" && (l = t), typeof n == "string" && n !== "" && (u = n), r != null && (g = r ? (e) => {
19
39
  console.log("relayFieldLogger: ", e);
20
- } : f), d = i, u != null) {
40
+ } : h), m = i, p = a, f != null) {
21
41
  try {
22
- let e = u.dispose();
42
+ let e = f.dispose();
23
43
  e instanceof Promise && e.catch(() => {});
24
44
  } catch {}
25
- u = void 0;
45
+ f = void 0;
26
46
  }
27
- l = void 0;
47
+ d = void 0;
28
48
  }
29
- function _() {
30
- let e = c;
49
+ function b() {
50
+ let e = u;
31
51
  if (e.startsWith("ws")) return e;
32
52
  if (e.startsWith("http")) return e.replace(/^http/, "ws");
33
53
  if (e.startsWith("/")) {
@@ -37,11 +57,11 @@ function _() {
37
57
  }
38
58
  return e;
39
59
  }
40
- function v() {
41
- if (u != null) return u;
60
+ function x() {
61
+ if (f != null) return f;
42
62
  if (typeof window > "u") throw Error("GraphQL subscriptions unavailable in non-browser environment");
43
- return u = o({
44
- url: _(),
63
+ return f = a({
64
+ url: b(),
45
65
  keepAlive: 1e4,
46
66
  lazy: !0,
47
67
  retryAttempts: 10,
@@ -57,33 +77,33 @@ function v() {
57
77
  });
58
78
  },
59
79
  connectionParams: async () => {
60
- if (d == null) return {};
80
+ if (p == null) return {};
61
81
  try {
62
- return await d();
82
+ return await p();
63
83
  } catch {
64
84
  return {};
65
85
  }
66
86
  }
67
- }), u;
87
+ }), f;
68
88
  }
69
- function y(e) {
89
+ function S(e) {
70
90
  return typeof File < "u" && e instanceof File || typeof Blob < "u" && e instanceof Blob;
71
91
  }
72
- function b(e, t, n) {
73
- if (y(e)) return n.push({
92
+ function C(e, t, n) {
93
+ if (S(e)) return n.push({
74
94
  path: t,
75
95
  file: e
76
96
  }), null;
77
- if (Array.isArray(e)) return e.map((e, r) => b(e, `${t}.${r}`, n));
97
+ if (Array.isArray(e)) return e.map((e, r) => C(e, `${t}.${r}`, n));
78
98
  if (typeof e == "object" && e) {
79
99
  let r = {};
80
- for (let [i, a] of Object.entries(e)) r[i] = b(a, `${t}.${i}`, n);
100
+ for (let [i, a] of Object.entries(e)) r[i] = C(a, `${t}.${i}`, n);
81
101
  return r;
82
102
  }
83
103
  return e;
84
104
  }
85
- function x(e, t) {
86
- let n = [], r = b(t, "variables", n), i = new FormData(), a = {
105
+ function w(e, t) {
106
+ let n = [], r = C(t, "variables", n), i = new FormData(), a = {
87
107
  query: e,
88
108
  variables: r
89
109
  };
@@ -95,60 +115,60 @@ function x(e, t) {
95
115
  i.append(String(t), e.file);
96
116
  }), i;
97
117
  }
98
- var S = {
118
+ var T = {
99
119
  maxAttempts: 3,
100
120
  baseDelayMs: 300,
101
121
  maxDelayMs: 4e3,
102
122
  fetchTimeoutMs: 6e5
103
123
  };
104
- async function C(e) {
124
+ async function E(e) {
105
125
  await new Promise((t) => {
106
126
  setTimeout(() => {
107
127
  t();
108
128
  }, e);
109
129
  });
110
130
  }
111
- function w(e, t) {
131
+ function D(e, t) {
112
132
  let n = Math.min(t.maxDelayMs, t.baseDelayMs * 2 ** e);
113
133
  return n + Math.random() * .2 * n;
114
134
  }
115
- function T(e) {
135
+ function O(e) {
116
136
  return e === 408 || e === 429 || e >= 500 && e < 600;
117
137
  }
118
- function E(e) {
138
+ function k(e) {
119
139
  return e instanceof TypeError || e instanceof Error && e.name === "AbortError";
120
140
  }
121
- function D(...t) {
122
- e() && console.log("[RelayNetwork]", ...t);
141
+ function A(...e) {
142
+ c() && console.log("[RelayNetwork]", ...e);
123
143
  }
124
- async function O(e, t, n, r) {
144
+ async function j(e, t, n, r) {
125
145
  let i = e.text;
126
146
  if (i == null) throw Error("Missing GraphQL query text");
127
147
  let a = i;
128
148
  async function o(e) {
129
149
  let n = new AbortController(), r = setTimeout(() => {
130
150
  n.abort();
131
- }, S.fetchTimeoutMs);
151
+ }, T.fetchTimeoutMs);
132
152
  try {
133
153
  let r, i = {};
134
- if (d != null) try {
135
- Object.assign(i, await d());
154
+ if (p != null) try {
155
+ Object.assign(i, await p());
136
156
  } catch {}
137
157
  (() => {
138
158
  try {
139
159
  let e = [t];
140
160
  for (; e.length > 0;) {
141
161
  let t = e.pop();
142
- if (y(t)) return !0;
162
+ if (S(t)) return !0;
143
163
  Array.isArray(t) ? e.push(...t) : typeof t == "object" && t && e.push(...Object.values(t));
144
164
  }
145
165
  } catch {}
146
166
  return !1;
147
- })() ? r = x(a, t) : (i["Content-Type"] = "application/json", r = JSON.stringify({
167
+ })() ? r = w(a, t) : (i["Content-Type"] = "application/json", r = JSON.stringify({
148
168
  query: a,
149
169
  variables: t
150
170
  }));
151
- let o = await fetch(s, {
171
+ let o = await fetch(l, {
152
172
  method: "POST",
153
173
  body: r,
154
174
  headers: i,
@@ -156,30 +176,30 @@ async function O(e, t, n, r) {
156
176
  signal: n.signal
157
177
  });
158
178
  if (!o.ok) {
159
- if (e < S.maxAttempts - 1 && T(o.status)) throw Error(`Retryable HTTP status ${o.status}`);
179
+ if (e < T.maxAttempts - 1 && O(o.status)) throw Error(`Retryable HTTP status ${o.status}`);
160
180
  let t = await o.text().catch(() => "");
161
181
  throw Error(`GraphQL HTTP error ${o.status}: ${t}`);
162
182
  }
163
- let c = await o.json();
164
- return Array.isArray(c.errors) && c.errors.length > 0 && D("GraphQL errors", c.errors), c;
183
+ let s = await o.json();
184
+ return Array.isArray(s.errors) && s.errors.length > 0 && A("GraphQL errors", s.errors), s;
165
185
  } finally {
166
186
  clearTimeout(r);
167
187
  }
168
188
  }
169
- for (let e = 0; e < S.maxAttempts; e += 1) try {
189
+ for (let e = 0; e < T.maxAttempts; e += 1) try {
170
190
  return await o(e);
171
191
  } catch (t) {
172
- let n = e === S.maxAttempts - 1;
173
- if (!(E(t) || t instanceof Error && t.message.includes("Retryable HTTP status")) || n) throw D("GraphQL fetch error", t), t;
174
- await C(w(e, S));
192
+ let n = e === T.maxAttempts - 1;
193
+ if (!(k(t) || t instanceof Error && t.message.includes("Retryable HTTP status")) || n) throw A("GraphQL fetch error", t), t;
194
+ await E(D(e, T));
175
195
  }
176
196
  throw Error("Exhausted retries without returning a result");
177
197
  }
178
- function k(e, t) {
179
- return D("subscription:start", e.name, t), r.create((n) => {
198
+ function M(e, t) {
199
+ return A("subscription:start", e.name, t), n.create((n) => {
180
200
  let r = e.text;
181
201
  if (r == null || r === "") return n.error(/* @__PURE__ */ Error("Subscription operation text is empty")), () => {};
182
- let i = v().subscribe({
202
+ let i = x().subscribe({
183
203
  query: r,
184
204
  variables: t,
185
205
  operationName: e.name
@@ -200,22 +220,22 @@ function k(e, t) {
200
220
  };
201
221
  });
202
222
  }
203
- function A() {
204
- return n.create(O, k);
223
+ function N() {
224
+ return t.create(j, M);
205
225
  }
206
- function j() {
207
- return l ??= new t({
208
- getDataID: h,
209
- relayFieldLogger: p,
210
- network: A(),
211
- store: new a(new i())
212
- }), l;
226
+ function P() {
227
+ return d ??= new e({
228
+ getDataID: v,
229
+ relayFieldLogger: g,
230
+ network: N(),
231
+ store: new i(new r())
232
+ }), d;
213
233
  }
214
- function M() {
215
- let e = j(), t = new i();
234
+ function F() {
235
+ let e = P(), t = new r();
216
236
  e.getStore().publish(t), e.getStore().notify();
217
237
  }
218
238
  //#endregion
219
- export { g as configureRelayEnvironment, j as getEnvironment, A as getNetwork, M as resetRelayStore };
239
+ export { F as i, P as n, N as r, y as t };
220
240
 
221
- //# sourceMappingURL=environment.js.map
241
+ //# sourceMappingURL=environment-BJeJTbIN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment-BJeJTbIN.js","names":[],"sources":["../../src/relay/envHelpers.ts","../../src/relay/environment.ts"],"sourcesContent":["type EnvRecord = Record<string, string | boolean | undefined>;\n\nconst viteEnv: EnvRecord = (() => {\n try {\n const meta = import.meta as unknown as { env?: EnvRecord };\n if (meta.env != null) {\n return meta.env;\n }\n return {};\n } catch {\n // `import.meta` is not defined outside of ESM environments; fall back to an empty record.\n return {};\n }\n})();\n\nexport type ReadEnvFn = (key: string) => string | undefined;\n\n/**\n * Read a string environment variable from Vite's `import.meta.env` (if available).\n * Returns `undefined` when the value is missing or empty.\n */\nexport function readEnv(key: string): string | undefined {\n const value = viteEnv[key];\n if (typeof value !== 'string') {\n return undefined;\n }\n\n const trimmed = value.trim();\n if (trimmed === '') {\n return undefined;\n }\n\n return trimmed;\n}\n\n/**\n * Reads an environment variable and coerces common string values to booleans.\n */\nexport function readBooleanEnv(key: string): boolean | undefined {\n const value = viteEnv[key];\n if (value === true || value === false) {\n return value;\n }\n if (typeof value === 'string') {\n if (value === 'true') {\n return true;\n }\n if (value === 'false') {\n return false;\n }\n }\n return undefined;\n}\n\n/**\n * Indicates whether the current build is running in development mode.\n */\nexport function isDevEnv(): boolean {\n return Boolean(readBooleanEnv('DEV'));\n}\n\ninterface ResolveEndpointOptions {\n envKeys: readonly string[];\n fallback: string;\n read?: ReadEnvFn;\n}\n\n/**\n * Resolve HTTP endpoint from environment variables.\n */\nexport function resolveHttpEndpoint(options: ResolveEndpointOptions): string {\n const { envKeys, fallback, read = readEnv } = options;\n for (const key of envKeys) {\n const value = read(key);\n if (value != null) {\n return value;\n }\n }\n return fallback;\n}\n\ninterface ResolveWebsocketEndpointOptions extends ResolveEndpointOptions {\n httpEndpoint: string;\n}\n\n/**\n * Resolve websocket endpoint from environment variables or derive it from the HTTP endpoint.\n */\nexport function resolveWebsocketEndpoint(\n options: ResolveWebsocketEndpointOptions,\n): string {\n const { envKeys, fallback, httpEndpoint, read = readEnv } = options;\n\n for (const key of envKeys) {\n const value = read(key);\n if (value != null) {\n return value;\n }\n }\n\n if (httpEndpoint.startsWith('http')) {\n return httpEndpoint.replace(/^http/, 'ws');\n }\n\n if (httpEndpoint.startsWith('/')) {\n return httpEndpoint.replace(/\\/graphql$/, '/ws');\n }\n\n return fallback;\n}\n","import {\n Environment,\n Network,\n Observable,\n RecordSource,\n Store,\n type FetchFunction,\n type SubscribeFunction,\n type RelayFieldLogger,\n} from 'relay-runtime';\nimport { createClient, type Client } from 'graphql-ws';\nimport { isDevEnv } from './envHelpers.js';\n\nlet graphqlHttpEndpoint = '/api/graphql';\nlet graphqlWsEndpoint = '/api/ws';\n\n// (anonymousEnvironment reserved if needed later for public access / logout scenarios)\n// Removed until actually required to avoid lint errors.\n// let anonymousEnvironment: Environment | undefined;\nlet environment: Environment | undefined;\nlet wsClient: Client | undefined;\nlet getAuthHeaders:\n | (() => Record<string, string> | Promise<Record<string, string>>)\n | undefined;\nlet customDataIdResolver:\n | ((fieldValue: unknown, typeName: string) => string | null)\n | undefined;\n\n/**\n * No-op Relay field logger used to satisfy @required(action: LOG).\n */\nfunction noopRelayFieldLogger(): void {}\n\nlet relayFieldLogger: RelayFieldLogger = noopRelayFieldLogger;\n\nif (isDevEnv()) {\n relayFieldLogger = (event) => {\n // eslint-disable-next-line no-console\n console.log('relayFieldLogger: ', event);\n };\n}\n\nconst defaultGetDataId: (\n fieldValue: unknown,\n typeName: string,\n) => string | null = (fieldValue) => {\n if (fieldValue == null || typeof fieldValue !== 'object') {\n return null;\n }\n const { id } = fieldValue as { id?: unknown };\n if (typeof id !== 'string' || id.trim() === '') {\n return null;\n }\n return id;\n};\n\nconst getDataId = (fieldValue: unknown, typeName: string): string | null => {\n const customId = customDataIdResolver?.(fieldValue, typeName);\n if (customId != null) {\n return customId;\n }\n return defaultGetDataId(fieldValue, typeName);\n};\n\nexport interface RelayEnvironmentConfiguration {\n httpUrl?: string;\n wsUrl?: string;\n logEvents?: boolean;\n getDataId?: (fieldValue: unknown, typeName: string) => string | null;\n getAuthHeaders?: () =>\n | Record<string, string>\n | Promise<Record<string, string>>;\n}\n\n/**\n * Configure the endpoints and logging behavior used by the shared Relay environment.\n */\nexport function configureRelayEnvironment(\n options: RelayEnvironmentConfiguration = {},\n): void {\n const {\n httpUrl,\n wsUrl,\n logEvents,\n getDataId: nextGetDataId,\n getAuthHeaders: nextGetAuthHeaders,\n } = options;\n\n if (typeof httpUrl === 'string' && httpUrl !== '') {\n graphqlHttpEndpoint = httpUrl;\n }\n\n if (typeof wsUrl === 'string' && wsUrl !== '') {\n graphqlWsEndpoint = wsUrl;\n }\n\n if (logEvents != null) {\n if (logEvents) {\n relayFieldLogger = (event) => {\n // eslint-disable-next-line no-console\n console.log('relayFieldLogger: ', event);\n };\n } else {\n relayFieldLogger = noopRelayFieldLogger;\n }\n }\n\n customDataIdResolver = nextGetDataId;\n getAuthHeaders = nextGetAuthHeaders;\n\n if (wsClient != null) {\n try {\n const result = wsClient.dispose();\n if (result instanceof Promise) {\n result.catch(() => {\n // ignore dispose rejections\n });\n }\n } catch {\n // ignore errors during dispose\n }\n wsClient = undefined;\n }\n\n environment = undefined;\n}\n\n/**\n * Resolve the websocket endpoint into an absolute URL suitable for graphql-ws.\n */\nfunction resolveWebsocketUrl(): string {\n const endpoint = graphqlWsEndpoint;\n\n if (endpoint.startsWith('ws')) {\n return endpoint;\n }\n\n if (endpoint.startsWith('http')) {\n return endpoint.replace(/^http/, 'ws');\n }\n\n if (endpoint.startsWith('/')) {\n if (typeof window === 'undefined') {\n return endpoint;\n }\n let protocol = 'ws:';\n if (window.location.protocol === 'https:') {\n protocol = 'wss:';\n }\n return `${protocol}//${window.location.host}${endpoint}`;\n }\n\n return endpoint;\n}\n\n/**\n * Build or get a singleton graphql-ws client with basic auto-reconnect.\n * The graphql-ws library already supports lazy connections and we add retry logic.\n */\nfunction getWsClient(): Client {\n if (wsClient != null) {\n return wsClient;\n }\n if (typeof window === 'undefined') {\n throw new Error(\n 'GraphQL subscriptions unavailable in non-browser environment',\n );\n }\n\n const url = resolveWebsocketUrl();\n\n // Exponential backoff parameters\n const maxAttempts = 10;\n const baseDelayMs = 500;\n\n wsClient = createClient({\n url,\n keepAlive: 10_000,\n lazy: true,\n retryAttempts: maxAttempts,\n shouldRetry() {\n return true;\n },\n async retryWait(retries) {\n // retries starts at 0\n const delay =\n Math.min(8000, baseDelayMs * 2 ** retries) + Math.random() * 200;\n await new Promise<void>((resolve) => {\n setTimeout(() => {\n resolve();\n }, delay);\n });\n },\n connectionParams: async () => {\n if (getAuthHeaders == null) {\n return {};\n }\n try {\n return await getAuthHeaders();\n } catch {\n return {};\n }\n },\n });\n\n return wsClient;\n}\n\n/**\n * Get organization slug from current window location\n */\n// export function getOrganizationSlug(): string | null {\n// const { pathname } = window.location;\n// const slug = pathname.split('/')[1];\n// if (slug == null) {\n// return null;\n// }\n\n// return slug;\n// }\n\n// -------------------------\n// Upload detection helpers\n// -------------------------\n/** Test if a value is an uploadable (File/Blob) */\nfunction isUploadable(value: unknown): value is File | Blob {\n return (\n (typeof File !== 'undefined' && value instanceof File) ||\n (typeof Blob !== 'undefined' && value instanceof Blob)\n );\n}\n\ninterface FileRef {\n path: string; // JSON pointer-like (e.g. variables.input.file)\n file: File | Blob;\n}\n\n/** Recursively clone a structure replacing files with null and collecting them */\nfunction collectFiles(value: unknown, path: string, acc: FileRef[]): unknown {\n if (isUploadable(value)) {\n acc.push({ path, file: value });\n return null; // placeholder per multipart spec\n }\n if (Array.isArray(value)) {\n return value.map((v, i) => {\n return collectFiles(v, `${path}.${i}`, acc);\n });\n }\n if (value != null && typeof value === 'object') {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n out[k] = collectFiles(v, `${path}.${k}`, acc);\n }\n return out;\n }\n return value; // primitives unchanged\n}\n\n/** Build GraphQL multipart form-data payload */\nfunction buildFormData(query: string, variables: Record<string, unknown>) {\n const files: FileRef[] = [];\n // Deep clone variables while replacing files with null\n const clonedVars = collectFiles(variables, 'variables', files) as Record<\n string,\n unknown\n >;\n\n const form = new FormData();\n const operations = { query, variables: clonedVars };\n form.append('operations', JSON.stringify(operations));\n\n const map: Record<string, string[]> = {};\n files.forEach((ref, idx) => {\n map[idx] = [ref.path];\n });\n form.append('map', JSON.stringify(map));\n files.forEach((ref, idx) => {\n form.append(String(idx), ref.file);\n });\n return form;\n}\n\n// -------------------------\n// Retry / timeout helpers\n// -------------------------\ninterface RetryOptions {\n maxAttempts: number; // total attempts including initial\n baseDelayMs: number;\n maxDelayMs: number;\n fetchTimeoutMs: number;\n}\n\nconst RETRY_OPTIONS: RetryOptions = {\n maxAttempts: 3,\n baseDelayMs: 300,\n maxDelayMs: 4000,\n fetchTimeoutMs: 600_000, // 10 minutes (parité avec ancien middleware)\n};\n\n/** Sleep helper with Promise */\nasync function sleep(ms: number): Promise<void> {\n await new Promise<void>((res) => {\n setTimeout(() => {\n res();\n }, ms);\n });\n}\n\n/** Exponential backoff with jitter */\nfunction calcBackoff(attempt: number, opts: RetryOptions): number {\n const exp = Math.min(opts.maxDelayMs, opts.baseDelayMs * 2 ** attempt);\n return exp + Math.random() * 0.2 * exp; // jitter 0-20%\n}\n\n/** Determine if an HTTP status is retryable */\nfunction isRetryableStatus(status: number): boolean {\n return status === 408 || status === 429 || (status >= 500 && status < 600);\n}\n\n/** Determine if an error should be treated as transient network issue */\nfunction isNetworkError(err: unknown): boolean {\n return (\n err instanceof TypeError ||\n (err instanceof Error && err.name === 'AbortError')\n );\n}\n\n// -------------------------\n// fetchFn implementation\n// -------------------------\ninterface GraphQLResponseErrorItem {\n [key: string]: unknown;\n message: string;\n}\n\ninterface GraphQLResponseShape<T = unknown> {\n data?: T;\n errors?: GraphQLResponseErrorItem[];\n extensions?: Record<string, unknown>;\n}\n\n/** Debug log helper (no-op en production) */\nfunction debugLog(...args: unknown[]): void {\n if (isDevEnv()) {\n // eslint-disable-next-line no-console\n console.log('[RelayNetwork]', ...args);\n }\n}\n\n/** Fetch GraphQL (with retry + upload) */\nasync function fetchFn(\n request: { text: string | null | undefined },\n variables: Record<string, unknown>,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _cacheConfig: unknown,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _uploadables: unknown,\n): Promise<GraphQLResponseShape> {\n const queryText: string | null | undefined = request.text; // no persisted queries here (yet)\n if (queryText == null) {\n throw new Error('Missing GraphQL query text');\n }\n const safeQueryText: string = queryText; // narrowed non-null\n\n /** Execute one network attempt */\n async function execOnce(attempt: number): Promise<GraphQLResponseShape> {\n const controller = new AbortController();\n const timeout = setTimeout(() => {\n controller.abort();\n }, RETRY_OPTIONS.fetchTimeoutMs);\n try {\n let body: BodyInit;\n const headers: Record<string, string> = {};\n if (getAuthHeaders != null) {\n try {\n Object.assign(headers, await getAuthHeaders());\n } catch {\n // ignore auth header failures\n }\n }\n const hasFiles = ((): boolean => {\n try {\n const stack: unknown[] = [variables];\n while (stack.length > 0) {\n const v = stack.pop();\n if (isUploadable(v)) {\n return true;\n }\n if (Array.isArray(v)) {\n stack.push(...v);\n } else if (v != null && typeof v === 'object') {\n stack.push(...Object.values(v as Record<string, unknown>));\n }\n }\n } catch {\n // ignore traversal errors\n }\n return false;\n })();\n\n if (hasFiles) {\n body = buildFormData(safeQueryText, variables);\n } else {\n headers['Content-Type'] = 'application/json';\n body = JSON.stringify({ query: safeQueryText, variables });\n }\n\n const response = await fetch(graphqlHttpEndpoint, {\n method: 'POST',\n body,\n headers,\n credentials: 'include',\n signal: controller.signal,\n });\n\n if (!response.ok) {\n if (\n attempt < RETRY_OPTIONS.maxAttempts - 1 &&\n isRetryableStatus(response.status)\n ) {\n throw new Error(`Retryable HTTP status ${response.status}`);\n }\n const text = await response.text().catch(() => {\n return '';\n });\n throw new Error(`GraphQL HTTP error ${response.status}: ${text}`);\n }\n\n const json: GraphQLResponseShape = await response.json();\n if (Array.isArray(json.errors) && json.errors.length > 0) {\n debugLog('GraphQL errors', json.errors);\n }\n return json;\n } finally {\n clearTimeout(timeout);\n }\n }\n\n for (let attempt = 0; attempt < RETRY_OPTIONS.maxAttempts; attempt += 1) {\n try {\n return await execOnce(attempt);\n } catch (err) {\n const last = attempt === RETRY_OPTIONS.maxAttempts - 1;\n const retryable =\n isNetworkError(err) ||\n (err instanceof Error && err.message.includes('Retryable HTTP status'));\n if (!retryable || last) {\n debugLog('GraphQL fetch error', err);\n throw err;\n }\n const delay = calcBackoff(attempt, RETRY_OPTIONS);\n await sleep(delay);\n }\n }\n throw new Error('Exhausted retries without returning a result');\n}\n\n// -------------------------\n// subscribeFn implementation (wrap existing logic in Relay Observable)\n// -------------------------\n/** Subscription function bridging graphql-ws client to Relay */\nfunction subscribeFn(\n operation: { text: string | null | undefined; name: string },\n variables: Record<string, unknown>,\n): Observable<unknown> {\n debugLog('subscription:start', operation.name, variables);\n return Observable.create<unknown>((sink) => {\n const query = operation.text;\n if (query == null || query === '') {\n sink.error(new Error('Subscription operation text is empty'));\n return () => {\n // noop\n };\n }\n const client = getWsClient();\n const dispose = client.subscribe(\n { query, variables, operationName: operation.name },\n {\n next: (data) => {\n sink.next(data);\n },\n error: (err) => {\n let errorObj: Error;\n if (err instanceof Error) {\n errorObj = err;\n } else {\n errorObj = new Error('Subscription error');\n }\n sink.error(errorObj);\n },\n complete: () => {\n sink.complete();\n },\n },\n );\n return () => {\n dispose();\n };\n });\n}\n\n/**\n * Create native Relay network layer (fetch + subscribe)\n */\nexport function getNetwork(): ReturnType<typeof Network.create> {\n return Network.create(\n fetchFn as FetchFunction,\n subscribeFn as SubscribeFunction,\n );\n}\n\n/**\n * Get anonymous relay environment\n */\nexport function getEnvironment(): Environment {\n environment ??= new Environment({\n getDataID: getDataId,\n relayFieldLogger,\n network: getNetwork(),\n store: new Store(new RecordSource()),\n });\n\n return environment;\n}\n\n/**\n * Reset the Relay store by creating a new empty source\n */\nexport function resetRelayStore(): void {\n const environment = getEnvironment();\n\n // Create a new store with an empty source\n const source = new RecordSource();\n\n // Replace the data in the store with our empty source\n environment.getStore().publish(source);\n\n // Notify subscribers that the data has changed\n environment.getStore().notify();\n}\n"],"mappings":";;;AAEA,IAAM,WAA4B;AAChC,KAAI;EACF,IAAM,IAAO,OAAO;AAIpB,SAHI,EAAK,OAAO,OAGT,EAAE,GAFA,EAAK;SAGR;AAEN,SAAO,EAAE;;IAET;AAyBJ,SAAgB,EAAe,GAAkC;CAC/D,IAAM,IAAQ,EAAQ;AACtB,KAAI,MAAU,MAAQ,MAAU,GAC9B,QAAO;AAET,KAAI,OAAO,KAAU,UAAU;AAC7B,MAAI,MAAU,OACZ,QAAO;AAET,MAAI,MAAU,QACZ,QAAO;;;AASb,SAAgB,IAAoB;AAClC,QAAO,EAAQ,EAAe,MAAM;;;;AC7CtC,IAAI,IAAsB,gBACtB,IAAoB,WAKpB,GACA,GACA,GAGA;AAOJ,SAAS,IAA6B;AAEtC,IAAI,IAAqC;AAErC,GAAU,KACZ,KAAoB,MAAU;AAE5B,SAAQ,IAAI,sBAAsB,EAAM;;AAI5C,IAAM,KAGgB,MAAe;AACnC,KAA0B,OAAO,KAAe,aAA5C,EACF,QAAO;CAET,IAAM,EAAE,UAAO;AAIf,QAHI,OAAO,KAAO,YAAY,EAAG,MAAM,KAAK,KACnC,OAEF;GAGH,KAAa,GAAqB,MACrB,IAAuB,GAAY,EAAS,IAItD,EAAiB,GAAY,EAAS;AAgB/C,SAAgB,EACd,IAAyC,EAAE,EACrC;CACN,IAAM,EACJ,YACA,UACA,cACA,WAAW,GACX,gBAAgB,MACd;AAwBJ,KAtBI,OAAO,KAAY,YAAY,MAAY,OAC7C,IAAsB,IAGpB,OAAO,KAAU,YAAY,MAAU,OACzC,IAAoB,IAGlB,KAAa,SACf,AAME,IANE,KACkB,MAAU;AAE5B,UAAQ,IAAI,sBAAsB,EAAM;KAGvB,IAIvB,IAAuB,GACvB,IAAiB,GAEb,KAAY,MAAM;AACpB,MAAI;GACF,IAAM,IAAS,EAAS,SAAS;AACjC,GAAI,aAAkB,WACpB,EAAO,YAAY,GAEjB;UAEE;AAGR,MAAW,KAAA;;AAGb,KAAc,KAAA;;AAMhB,SAAS,IAA8B;CACrC,IAAM,IAAW;AAEjB,KAAI,EAAS,WAAW,KAAK,CAC3B,QAAO;AAGT,KAAI,EAAS,WAAW,OAAO,CAC7B,QAAO,EAAS,QAAQ,SAAS,KAAK;AAGxC,KAAI,EAAS,WAAW,IAAI,EAAE;AAC5B,MAAI,OAAO,SAAW,IACpB,QAAO;EAET,IAAI,IAAW;AAIf,SAHI,OAAO,SAAS,aAAa,aAC/B,IAAW,SAEN,GAAG,EAAS,IAAI,OAAO,SAAS,OAAO;;AAGhD,QAAO;;AAOT,SAAS,IAAsB;AAC7B,KAAI,KAAY,KACd,QAAO;AAET,KAAI,OAAO,SAAW,IACpB,OAAU,MACR,+DACD;AAuCH,QA9BA,IAAW,EAAa;EACtB,KAPU,GAAqB;EAQ/B,WAAW;EACX,MAAM;EACN,eAAe;EACf,cAAc;AACZ,UAAO;;EAET,MAAM,UAAU,GAAS;GAEvB,IAAM,IACJ,KAAK,IAAI,KAAM,MAAc,KAAK,EAAQ,GAAG,KAAK,QAAQ,GAAG;AAC/D,SAAM,IAAI,SAAe,MAAY;AACnC,qBAAiB;AACf,QAAS;OACR,EAAM;KACT;;EAEJ,kBAAkB,YAAY;AAC5B,OAAI,KAAkB,KACpB,QAAO,EAAE;AAEX,OAAI;AACF,WAAO,MAAM,GAAgB;WACvB;AACN,WAAO,EAAE;;;EAGd,CAAC,EAEK;;AAoBT,SAAS,EAAa,GAAsC;AAC1D,QACG,OAAO,OAAS,OAAe,aAAiB,QAChD,OAAO,OAAS,OAAe,aAAiB;;AAUrD,SAAS,EAAa,GAAgB,GAAc,GAAyB;AAC3E,KAAI,EAAa,EAAM,CAErB,QADA,EAAI,KAAK;EAAE;EAAM,MAAM;EAAO,CAAC,EACxB;AAET,KAAI,MAAM,QAAQ,EAAM,CACtB,QAAO,EAAM,KAAK,GAAG,MACZ,EAAa,GAAG,GAAG,EAAK,GAAG,KAAK,EAAI,CAC3C;AAEJ,KAAqB,OAAO,KAAU,YAAlC,GAA4C;EAC9C,IAAM,IAA+B,EAAE;AACvC,OAAK,IAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,EAAiC,CACnE,GAAI,KAAK,EAAa,GAAG,GAAG,EAAK,GAAG,KAAK,EAAI;AAE/C,SAAO;;AAET,QAAO;;AAIT,SAAS,EAAc,GAAe,GAAoC;CACxE,IAAM,IAAmB,EAAE,EAErB,IAAa,EAAa,GAAW,aAAa,EAAM,EAKxD,IAAO,IAAI,UAAU,EACrB,IAAa;EAAE;EAAO,WAAW;EAAY;AACnD,GAAK,OAAO,cAAc,KAAK,UAAU,EAAW,CAAC;CAErD,IAAM,IAAgC,EAAE;AAQxC,QAPA,EAAM,SAAS,GAAK,MAAQ;AAC1B,IAAI,KAAO,CAAC,EAAI,KAAK;GACrB,EACF,EAAK,OAAO,OAAO,KAAK,UAAU,EAAI,CAAC,EACvC,EAAM,SAAS,GAAK,MAAQ;AAC1B,IAAK,OAAO,OAAO,EAAI,EAAE,EAAI,KAAK;GAClC,EACK;;AAaT,IAAM,IAA8B;CAClC,aAAa;CACb,aAAa;CACb,YAAY;CACZ,gBAAgB;CACjB;AAGD,eAAe,EAAM,GAA2B;AAC9C,OAAM,IAAI,SAAe,MAAQ;AAC/B,mBAAiB;AACf,MAAK;KACJ,EAAG;GACN;;AAIJ,SAAS,EAAY,GAAiB,GAA4B;CAChE,IAAM,IAAM,KAAK,IAAI,EAAK,YAAY,EAAK,cAAc,KAAK,EAAQ;AACtE,QAAO,IAAM,KAAK,QAAQ,GAAG,KAAM;;AAIrC,SAAS,EAAkB,GAAyB;AAClD,QAAO,MAAW,OAAO,MAAW,OAAQ,KAAU,OAAO,IAAS;;AAIxE,SAAS,EAAe,GAAuB;AAC7C,QACE,aAAe,aACd,aAAe,SAAS,EAAI,SAAS;;AAmB1C,SAAS,EAAS,GAAG,GAAuB;AAC1C,CAAI,GAAU,IAEZ,QAAQ,IAAI,kBAAkB,GAAG,EAAK;;AAK1C,eAAe,EACb,GACA,GAEA,GAEA,GAC+B;CAC/B,IAAM,IAAuC,EAAQ;AACrD,KAAI,KAAa,KACf,OAAU,MAAM,6BAA6B;CAE/C,IAAM,IAAwB;CAG9B,eAAe,EAAS,GAAgD;EACtE,IAAM,IAAa,IAAI,iBAAiB,EAClC,IAAU,iBAAiB;AAC/B,KAAW,OAAO;KACjB,EAAc,eAAe;AAChC,MAAI;GACF,IAAI,GACE,IAAkC,EAAE;AAC1C,OAAI,KAAkB,KACpB,KAAI;AACF,WAAO,OAAO,GAAS,MAAM,GAAgB,CAAC;WACxC;AAwBV,UApBiC;AAC/B,QAAI;KACF,IAAM,IAAmB,CAAC,EAAU;AACpC,YAAO,EAAM,SAAS,IAAG;MACvB,IAAM,IAAI,EAAM,KAAK;AACrB,UAAI,EAAa,EAAE,CACjB,QAAO;AAET,MAAI,MAAM,QAAQ,EAAE,GAClB,EAAM,KAAK,GAAG,EAAE,GACM,OAAO,KAAM,YAA1B,KACT,EAAM,KAAK,GAAG,OAAO,OAAO,EAA6B,CAAC;;YAGxD;AAGR,WAAO;OACL,GAGF,IAAO,EAAc,GAAe,EAAU,IAE9C,EAAQ,kBAAkB,oBAC1B,IAAO,KAAK,UAAU;IAAE,OAAO;IAAe;IAAW,CAAC;GAG5D,IAAM,IAAW,MAAM,MAAM,GAAqB;IAChD,QAAQ;IACR;IACA;IACA,aAAa;IACb,QAAQ,EAAW;IACpB,CAAC;AAEF,OAAI,CAAC,EAAS,IAAI;AAChB,QACE,IAAU,EAAc,cAAc,KACtC,EAAkB,EAAS,OAAO,CAElC,OAAU,MAAM,yBAAyB,EAAS,SAAS;IAE7D,IAAM,IAAO,MAAM,EAAS,MAAM,CAAC,YAC1B,GACP;AACF,UAAU,MAAM,sBAAsB,EAAS,OAAO,IAAI,IAAO;;GAGnE,IAAM,IAA6B,MAAM,EAAS,MAAM;AAIxD,UAHI,MAAM,QAAQ,EAAK,OAAO,IAAI,EAAK,OAAO,SAAS,KACrD,EAAS,kBAAkB,EAAK,OAAO,EAElC;YACC;AACR,gBAAa,EAAQ;;;AAIzB,MAAK,IAAI,IAAU,GAAG,IAAU,EAAc,aAAa,KAAW,EACpE,KAAI;AACF,SAAO,MAAM,EAAS,EAAQ;UACvB,GAAK;EACZ,IAAM,IAAO,MAAY,EAAc,cAAc;AAIrD,MAAI,EAFF,EAAe,EAAI,IAClB,aAAe,SAAS,EAAI,QAAQ,SAAS,wBAAwB,KACtD,EAEhB,OADA,EAAS,uBAAuB,EAAI,EAC9B;AAGR,QAAM,EADQ,EAAY,GAAS,EAAc,CAC/B;;AAGtB,OAAU,MAAM,+CAA+C;;AAOjE,SAAS,EACP,GACA,GACqB;AAErB,QADA,EAAS,sBAAsB,EAAU,MAAM,EAAU,EAClD,EAAW,QAAiB,MAAS;EAC1C,IAAM,IAAQ,EAAU;AACxB,MAAI,KAAS,QAAQ,MAAU,GAE7B,QADA,EAAK,MAAM,gBAAI,MAAM,uCAAuC,CAAC,QAChD;EAKf,IAAM,IADS,GAAa,CACL,UACrB;GAAE;GAAO;GAAW,eAAe,EAAU;GAAM,EACnD;GACE,OAAO,MAAS;AACd,MAAK,KAAK,EAAK;;GAEjB,QAAQ,MAAQ;IACd,IAAI;AAMJ,IALA,AAGE,IAHE,aAAe,QACN,IAEA,gBAAI,MAAM,qBAAqB,EAE5C,EAAK,MAAM,EAAS;;GAEtB,gBAAgB;AACd,MAAK,UAAU;;GAElB,CACF;AACD,eAAa;AACX,MAAS;;GAEX;;AAMJ,SAAgB,IAAgD;AAC9D,QAAO,EAAQ,OACb,GACA,EACD;;AAMH,SAAgB,IAA8B;AAQ5C,QAPA,MAAgB,IAAI,EAAY;EAC9B,WAAW;EACX;EACA,SAAS,GAAY;EACrB,OAAO,IAAI,EAAM,IAAI,GAAc,CAAC;EACrC,CAAC,EAEK;;AAMT,SAAgB,IAAwB;CACtC,IAAM,IAAc,GAAgB,EAG9B,IAAS,IAAI,GAAc;AAMjC,CAHA,EAAY,UAAU,CAAC,QAAQ,EAAO,EAGtC,EAAY,UAAU,CAAC,QAAQ"}
@@ -0,0 +1,12 @@
1
+ import { useTranslation as e } from "react-i18next";
2
+ //#region src/i18n/useSharedTranslation.ts
3
+ function t() {
4
+ return e("shared");
5
+ }
6
+ //#endregion
7
+ //#region src/auth/login/loginPage.css.ts
8
+ var n = "w8yhmy0 vncd899io vncd89ai6 vncd89aoo", r = "w8yhmy1 vncd899io vncd89ai6 vncd89u6f", i = "w8yhmy2 vncd89va3 vncd898x vncd89fbo vncd89f4x", 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";
9
+ //#endregion
10
+ export { r as a, o as c, n as d, t as f, d as i, s as l, c as n, l as o, f as r, i as s, a as t, u };
11
+
12
+ //# sourceMappingURL=loginPage.css-BDQJNcSr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loginPage.css-BDQJNcSr.js","names":[],"sources":["../../src/i18n/useSharedTranslation.ts","../../src/auth/login/loginPage.css.ts"],"sourcesContent":["import { useTranslation } from 'react-i18next';\n\n/** Returns i18n helpers bound to the shared namespace. */\nexport function useSharedTranslation(): ReturnType<typeof useTranslation> {\n return useTranslation('shared');\n}\n","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":";;AAGA,SAAgB,IAA0D;AACxE,QAAO,EAAe,SAAS"}
@@ -42,6 +42,6 @@ var e = (e) => e?.status ?? e?.result ?? null, t = (t, n) => {
42
42
  };
43
43
  };
44
44
  //#endregion
45
- export { e as getStatus, n as requireField, r as requireLinkedRecordId, i as resolveAgentStartOutcome, t as resolveMutationOutcome };
45
+ export { t as i, r as n, i as r, n as t };
46
46
 
47
- //# sourceMappingURL=mutationResult.js.map
47
+ //# sourceMappingURL=mutationResult-CcQMY13J.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutationResult-CcQMY13J.js","names":[],"sources":["../../src/relay/mutationResult.ts"],"sourcesContent":["export type MutationResult = 'SUCCESS' | 'ERROR';\n\nexport type MutationPayloadBase<Reason extends string = string> = {\n status?: MutationResult | null;\n result?: MutationResult | null;\n errorReason?: Reason | null;\n};\n\nexport type MutationOutcome<Payload, Reason extends string = string> =\n | { ok: true; payload: Payload }\n | { ok: false; reason?: Reason | null; message: string };\n\nexport type ResolveOptions<Reason extends string> = {\n defaultErrorMessage: string;\n mapReason?: (reason: Reason) => string | null;\n missingPayloadMessage?: string;\n};\n\nexport const getStatus = (\n payload: MutationPayloadBase | null | undefined,\n): MutationResult | null => {\n return payload?.status ?? payload?.result ?? null;\n};\n\nexport const resolveMutationOutcome = <\n Payload extends MutationPayloadBase<Reason>,\n Reason extends string,\n>(\n payload: Payload | null | undefined,\n options: ResolveOptions<Reason>,\n): MutationOutcome<Payload, Reason> => {\n const { defaultErrorMessage, mapReason, missingPayloadMessage } = options;\n\n if (payload == null) {\n return {\n ok: false,\n message: missingPayloadMessage ?? defaultErrorMessage,\n };\n }\n\n const status = getStatus(payload);\n if (status !== 'SUCCESS') {\n const reason = payload.errorReason ?? null;\n let mapped: string | null = null;\n if (reason != null && mapReason != null) {\n mapped = mapReason(reason);\n }\n return {\n ok: false,\n reason,\n message: mapped ?? defaultErrorMessage,\n };\n }\n\n return { ok: true, payload };\n};\n\nexport const requireField = <T>(\n value: T | null | undefined,\n message: string,\n): { ok: true; value: T } | { ok: false; message: string } => {\n if (value == null) {\n return { ok: false, message };\n }\n\n return { ok: true, value };\n};\n\ntype RecordWithId = {\n id?: string | null;\n};\n\nexport const requireLinkedRecordId = (\n record: RecordWithId | null | undefined,\n message: string,\n): { ok: true; id: string } | { ok: false; message: string } => {\n const result = requireField(record?.id ?? null, message);\n if (!result.ok) {\n return result;\n }\n\n return { ok: true, id: result.value };\n};\n\nexport type AgentStartPayload<\n Reason extends string,\n Status extends string,\n> = MutationPayloadBase<Reason> & {\n agentStatus?: Status | null;\n};\n\nexport const resolveAgentStartOutcome = <\n Reason extends string,\n Status extends string,\n>(\n payload: AgentStartPayload<Reason, Status> | null | undefined,\n options: ResolveOptions<Reason>,\n):\n | { ok: true; agentStatus: Status }\n | { ok: false; message: string; reason?: Reason | null } => {\n const base = resolveMutationOutcome(payload, options);\n if (!base.ok) {\n return base;\n }\n\n const agentStatusResult = requireField(\n base.payload.agentStatus ?? null,\n options.defaultErrorMessage,\n );\n\n if (!agentStatusResult.ok) {\n return { ok: false, message: agentStatusResult.message };\n }\n\n return { ok: true, agentStatus: agentStatusResult.value };\n};\n"],"mappings":";AAkBA,IAAa,KACX,MAEO,GAAS,UAAU,GAAS,UAAU,MAGlC,KAIX,GACA,MACqC;CACrC,IAAM,EAAE,wBAAqB,cAAW,6BAA0B;AAElE,KAAI,KAAW,KACb,QAAO;EACL,IAAI;EACJ,SAAS,KAAyB;EACnC;AAIH,KADe,EAAU,EAAQ,KAClB,WAAW;EACxB,IAAM,IAAS,EAAQ,eAAe,MAClC,IAAwB;AAI5B,SAHI,KAAU,QAAQ,KAAa,SACjC,IAAS,EAAU,EAAO,GAErB;GACL,IAAI;GACJ;GACA,SAAS,KAAU;GACpB;;AAGH,QAAO;EAAE,IAAI;EAAM;EAAS;GAGjB,KACX,GACA,MAEI,KAAS,OACJ;CAAE,IAAI;CAAO;CAAS,GAGxB;CAAE,IAAI;CAAM;CAAO,EAOf,KACX,GACA,MAC8D;CAC9D,IAAM,IAAS,EAAa,GAAQ,MAAM,MAAM,EAAQ;AAKxD,QAJK,EAAO,KAIL;EAAE,IAAI;EAAM,IAAI,EAAO;EAAO,GAH5B;GAaE,KAIX,GACA,MAG4D;CAC5D,IAAM,IAAO,EAAuB,GAAS,EAAQ;AACrD,KAAI,CAAC,EAAK,GACR,QAAO;CAGT,IAAM,IAAoB,EACxB,EAAK,QAAQ,eAAe,MAC5B,EAAQ,oBACT;AAMD,QAJK,EAAkB,KAIhB;EAAE,IAAI;EAAM,aAAa,EAAkB;EAAO,GAHhD;EAAE,IAAI;EAAO,SAAS,EAAkB;EAAS"}
@@ -23,6 +23,6 @@ var e = (e) => e.trim().replace(/^\/+|\/+$/g, ""), t = (t) => {
23
23
  };
24
24
  };
25
25
  //#endregion
26
- export { t as resolveVisibleDetailPages };
26
+ export { t };
27
27
 
28
- //# sourceMappingURL=pageResolution.js.map
28
+ //# sourceMappingURL=pageResolution-hAQA5C6S.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pageResolution-hAQA5C6S.js","names":[],"sources":["../../src/pages/detail/pageResolution.ts"],"sourcesContent":["type DetailPageBase<ShellView> = {\n id: string;\n path: string;\n isVisible?: (layout: ShellView) => boolean;\n};\n\ntype PageResolutionInput<\n ShellView,\n MainPage extends DetailPageBase<ShellView>,\n SubPage extends DetailPageBase<ShellView> = MainPage,\n> = {\n mainPage: MainPage;\n subPages?: readonly SubPage[];\n activePagePath?: string;\n node: ShellView;\n};\n\nexport type ResolvedDetailPages<Page> = {\n pages: readonly Page[];\n activePage: Page | null;\n hasVisiblePages: boolean;\n hasMultiplePages: boolean;\n};\n\nconst normalizePath = (value: string): string => {\n return value.trim().replace(/^\\/+|\\/+$/g, '');\n};\n\nexport const resolveVisibleDetailPages = <\n ShellView,\n MainPage extends DetailPageBase<ShellView>,\n SubPage extends DetailPageBase<ShellView> = MainPage,\n>(\n input: PageResolutionInput<ShellView, MainPage, SubPage>,\n): ResolvedDetailPages<MainPage | SubPage> => {\n const allPages = [input.mainPage, ...(input.subPages ?? [])] as readonly (\n | MainPage\n | SubPage\n )[];\n const visiblePages = allPages.filter((page) => {\n if (page.isVisible == null) {\n return true;\n }\n return page.isVisible(input.node);\n });\n\n if (visiblePages.length === 0) {\n return {\n pages: [],\n activePage: null,\n hasVisiblePages: false,\n hasMultiplePages: false,\n };\n }\n\n const activePath = normalizePath(input.activePagePath ?? '');\n let activeByPath: MainPage | SubPage | null = null;\n if (activePath !== '') {\n activeByPath =\n visiblePages.find((page) => {\n return normalizePath(page.path) === activePath;\n }) ?? null;\n }\n\n const defaultPage =\n visiblePages.find((page) => {\n return page.id === input.mainPage.id;\n }) ?? visiblePages[0];\n if (defaultPage == null) {\n return {\n pages: [],\n activePage: null,\n hasVisiblePages: false,\n hasMultiplePages: false,\n };\n }\n\n const activePage = activeByPath ?? defaultPage;\n\n return {\n pages: visiblePages,\n activePage,\n hasVisiblePages: true,\n hasMultiplePages: visiblePages.length > 1,\n };\n};\n"],"mappings":";AAwBA,IAAM,KAAiB,MACd,EAAM,MAAM,CAAC,QAAQ,cAAc,GAAG,EAGlC,KAKX,MAC4C;CAK5C,IAAM,IAJW,CAAC,EAAM,UAAU,GAAI,EAAM,YAAY,EAAE,CAAE,CAI9B,QAAQ,MAChC,EAAK,aAAa,OACb,KAEF,EAAK,UAAU,EAAM,KAAK,CACjC;AAEF,KAAI,EAAa,WAAW,EAC1B,QAAO;EACL,OAAO,EAAE;EACT,YAAY;EACZ,iBAAiB;EACjB,kBAAkB;EACnB;CAGH,IAAM,IAAa,EAAc,EAAM,kBAAkB,GAAG,EACxD,IAA0C;AAC9C,CAAI,MAAe,OACjB,IACE,EAAa,MAAM,MACV,EAAc,EAAK,KAAK,KAAK,EACpC,IAAI;CAGV,IAAM,IACJ,EAAa,MAAM,MACV,EAAK,OAAO,EAAM,SAAS,GAClC,IAAI,EAAa;AAYrB,QAXI,KAAe,OACV;EACL,OAAO,EAAE;EACT,YAAY;EACZ,iBAAiB;EACjB,kBAAkB;EACnB,GAKI;EACL,OAAO;EACP,YAJiB,KAAgB;EAKjC,iBAAiB;EACjB,kBAAkB,EAAa,SAAS;EACzC"}
@@ -27,18 +27,8 @@ var e = (e, t) => e(t), t = (e, t) => !!(e === t || t !== "/" && e.startsWith(`$
27
27
  o.has(e) || a(e, t, n, r) && (o.add(e), i.push(e));
28
28
  });
29
29
  }), i;
30
- }, s = (e, n) => {
31
- let r = Object.entries(n);
32
- for (let [n, i] of r) if (i.kind === "tool") {
33
- if (t(e, i.routes.list)) return n;
34
- } else if (i.hasList && t(e, i.routes.list)) return n;
35
- return null;
36
- }, c = (e, t, n, r, i) => {
37
- if (t == null || !a(t, n, r, i)) return null;
38
- for (let [n, r] of Object.entries(e)) if ((r.isVisible == null || r.isVisible(i)) && r.entities?.includes(t) === !0) return n;
39
- return null;
40
30
  };
41
31
  //#endregion
42
- export { n as buildDefaultGroups, i as buildEntityGroupLookup, t as isActivePath, s as resolveActiveEntityId, c as resolveActiveGroupId, e as resolveLabel, r as resolveSidebarGroups, o as resolveVisibleEntityIds };
32
+ export { o as a, r as i, t as n, e as r, i as t };
43
33
 
44
- //# sourceMappingURL=sidebarUtils.js.map
34
+ //# sourceMappingURL=sidebarUtils-CuwJ_3mD.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sidebarUtils.js","names":[],"sources":["../../../../../src/components/backoffice/layout/sidebarUtils.ts"],"sourcesContent":["import type { TFunction } from 'i18next';\n\nimport type {\n BackofficeEntityManifestMap,\n I18nLabel,\n} from '@plumile/backoffice-core/types.js';\nimport type {\n BackofficeSidebarConfig,\n BackofficeIconComponent,\n BackofficeSidebarGroupConfig,\n BackofficeSidebarItemDescriptor,\n} from '../../../provider/types.js';\n\nexport const resolveLabel = (label: I18nLabel, tApp: TFunction): string => {\n return label(tApp);\n};\n\nexport const isActivePath = (pathname: string, href: string): boolean => {\n if (pathname === href) {\n return true;\n }\n if (href !== '/' && pathname.startsWith(`${href}/`)) {\n return true;\n }\n return false;\n};\n\nexport const buildDefaultGroups = (\n entities: BackofficeEntityManifestMap,\n): Record<string, BackofficeSidebarGroupConfig> => {\n const entityIds = Object.keys(entities);\n\n return {\n main: {\n entities: entityIds,\n },\n };\n};\n\nexport const resolveSidebarGroups = (\n entities: BackofficeEntityManifestMap,\n sidebar: BackofficeSidebarConfig | undefined,\n): Record<string, BackofficeSidebarGroupConfig> => {\n return sidebar?.groups ?? buildDefaultGroups(entities);\n};\n\nexport type EntityGroupLookup = Map<\n string,\n { groupId: string; icon?: BackofficeIconComponent }\n>;\n\nexport const buildEntityGroupLookup = (\n groups: Record<string, BackofficeSidebarGroupConfig>,\n): EntityGroupLookup => {\n const lookup: EntityGroupLookup = new Map();\n\n Object.entries(groups).forEach(([groupId, group]) => {\n if (group.entities == null) {\n return;\n }\n group.entities.forEach((entityId) => {\n if (!lookup.has(entityId)) {\n lookup.set(entityId, { groupId, icon: group.icon });\n }\n });\n });\n\n return lookup;\n};\n\nconst isEntityVisible = (\n entityId: string,\n entities: BackofficeEntityManifestMap,\n sidebar: BackofficeSidebarConfig | undefined,\n permissions: unknown,\n): boolean => {\n const config = entities[entityId];\n if (config == null) {\n return false;\n }\n\n let descriptor: BackofficeSidebarItemDescriptor = {\n kind: 'entity',\n id: entityId,\n };\n if (config.kind === 'tool') {\n descriptor = { kind: 'tool', id: entityId };\n }\n\n if (sidebar?.isItemVisible != null) {\n return sidebar.isItemVisible(descriptor, permissions);\n }\n\n if (config.kind === 'tool') {\n return true;\n }\n return config.hasList;\n};\n\nexport const resolveVisibleEntityIds = (\n groups: Record<string, BackofficeSidebarGroupConfig>,\n entities: BackofficeEntityManifestMap,\n sidebar: BackofficeSidebarConfig | undefined,\n permissions: unknown,\n): string[] => {\n const output: string[] = [];\n const seen = new Set<string>();\n\n Object.entries(groups).forEach(([, group]) => {\n if (group.isVisible != null && !group.isVisible(permissions)) {\n return;\n }\n if (group.entities == null) {\n return;\n }\n group.entities.forEach((entityId) => {\n if (seen.has(entityId)) {\n return;\n }\n if (!isEntityVisible(entityId, entities, sidebar, permissions)) {\n return;\n }\n seen.add(entityId);\n output.push(entityId);\n });\n });\n\n return output;\n};\n\nexport const resolveActiveEntityId = (\n pathname: string,\n entities: BackofficeEntityManifestMap,\n): string | null => {\n const entries = Object.entries(entities);\n for (const [entityId, config] of entries) {\n if (config.kind === 'tool') {\n if (isActivePath(pathname, config.routes.list)) {\n return entityId;\n }\n } else if (config.hasList && isActivePath(pathname, config.routes.list)) {\n return entityId;\n }\n }\n return null;\n};\n\nexport const resolveActiveGroupId = (\n groups: Record<string, BackofficeSidebarGroupConfig>,\n activeEntityId: string | null,\n entities: BackofficeEntityManifestMap,\n sidebar: BackofficeSidebarConfig | undefined,\n permissions: unknown,\n): string | null => {\n if (activeEntityId == null) {\n return null;\n }\n\n if (!isEntityVisible(activeEntityId, entities, sidebar, permissions)) {\n return null;\n }\n\n for (const [groupId, group] of Object.entries(groups)) {\n const isVisible = group.isVisible == null || group.isVisible(permissions);\n if (isVisible && group.entities?.includes(activeEntityId) === true) {\n return groupId;\n }\n }\n\n return null;\n};\n"],"mappings":";AAaA,IAAa,KAAgB,GAAkB,MACtC,EAAM,EAAK,EAGP,KAAgB,GAAkB,MAI7C,GAHI,MAAa,KAGb,MAAS,OAAO,EAAS,WAAW,GAAG,EAAK,GAAG,GAMxC,KACX,OAIO,EACL,MAAM,EACJ,UAJc,OAAO,KAAK,EAAS,EAKpC,EACF,GAGU,KACX,GACA,MAEO,GAAS,UAAU,EAAmB,EAAS,EAQ3C,KACX,MACsB;CACtB,IAAM,oBAA4B,IAAI,KAAK;AAa3C,QAXA,OAAO,QAAQ,EAAO,CAAC,SAAS,CAAC,GAAS,OAAW;AAC/C,IAAM,YAAY,QAGtB,EAAM,SAAS,SAAS,MAAa;AACnC,GAAK,EAAO,IAAI,EAAS,IACvB,EAAO,IAAI,GAAU;IAAE;IAAS,MAAM,EAAM;IAAM,CAAC;IAErD;GACF,EAEK;GAGH,KACJ,GACA,GACA,GACA,MACY;CACZ,IAAM,IAAS,EAAS;AACxB,KAAI,KAAU,KACZ,QAAO;CAGT,IAAI,IAA8C;EAChD,MAAM;EACN,IAAI;EACL;AAYD,QAXI,EAAO,SAAS,WAClB,IAAa;EAAE,MAAM;EAAQ,IAAI;EAAU,GAGzC,GAAS,iBAAiB,OAI1B,EAAO,SAAS,SACX,KAEF,EAAO,UANL,EAAQ,cAAc,GAAY,EAAY;GAS5C,KACX,GACA,GACA,GACA,MACa;CACb,IAAM,IAAmB,EAAE,EACrB,oBAAO,IAAI,KAAa;AAqB9B,QAnBA,OAAO,QAAQ,EAAO,CAAC,SAAS,GAAG,OAAW;AACxC,IAAM,aAAa,QAAQ,CAAC,EAAM,UAAU,EAAY,IAGxD,EAAM,YAAY,QAGtB,EAAM,SAAS,SAAS,MAAa;AAC/B,KAAK,IAAI,EAAS,IAGjB,EAAgB,GAAU,GAAU,GAAS,EAAY,KAG9D,EAAK,IAAI,EAAS,EAClB,EAAO,KAAK,EAAS;IACrB;GACF,EAEK;GAGI,KACX,GACA,MACkB;CAClB,IAAM,IAAU,OAAO,QAAQ,EAAS;AACxC,MAAK,IAAM,CAAC,GAAU,MAAW,EAC/B,KAAI,EAAO,SAAS;MACd,EAAa,GAAU,EAAO,OAAO,KAAK,CAC5C,QAAO;YAEA,EAAO,WAAW,EAAa,GAAU,EAAO,OAAO,KAAK,CACrE,QAAO;AAGX,QAAO;GAGI,KACX,GACA,GACA,GACA,GACA,MACkB;AAKlB,KAJI,KAAkB,QAIlB,CAAC,EAAgB,GAAgB,GAAU,GAAS,EAAY,CAClE,QAAO;AAGT,MAAK,IAAM,CAAC,GAAS,MAAU,OAAO,QAAQ,EAAO,CAEnD,MADkB,EAAM,aAAa,QAAQ,EAAM,UAAU,EAAY,KACxD,EAAM,UAAU,SAAS,EAAe,KAAK,GAC5D,QAAO;AAIX,QAAO"}
1
+ {"version":3,"file":"sidebarUtils-CuwJ_3mD.js","names":[],"sources":["../../src/components/backoffice/layout/sidebarUtils.ts"],"sourcesContent":["import type { TFunction } from 'i18next';\n\nimport type {\n BackofficeEntityManifestMap,\n I18nLabel,\n} from '@plumile/backoffice-core/types.js';\nimport type {\n BackofficeSidebarConfig,\n BackofficeIconComponent,\n BackofficeSidebarGroupConfig,\n BackofficeSidebarItemDescriptor,\n} from '../../../provider/types.js';\n\nexport const resolveLabel = (label: I18nLabel, tApp: TFunction): string => {\n return label(tApp);\n};\n\nexport const isActivePath = (pathname: string, href: string): boolean => {\n if (pathname === href) {\n return true;\n }\n if (href !== '/' && pathname.startsWith(`${href}/`)) {\n return true;\n }\n return false;\n};\n\nexport const buildDefaultGroups = (\n entities: BackofficeEntityManifestMap,\n): Record<string, BackofficeSidebarGroupConfig> => {\n const entityIds = Object.keys(entities);\n\n return {\n main: {\n entities: entityIds,\n },\n };\n};\n\nexport const resolveSidebarGroups = (\n entities: BackofficeEntityManifestMap,\n sidebar: BackofficeSidebarConfig | undefined,\n): Record<string, BackofficeSidebarGroupConfig> => {\n return sidebar?.groups ?? buildDefaultGroups(entities);\n};\n\nexport type EntityGroupLookup = Map<\n string,\n { groupId: string; icon?: BackofficeIconComponent }\n>;\n\nexport const buildEntityGroupLookup = (\n groups: Record<string, BackofficeSidebarGroupConfig>,\n): EntityGroupLookup => {\n const lookup: EntityGroupLookup = new Map();\n\n Object.entries(groups).forEach(([groupId, group]) => {\n if (group.entities == null) {\n return;\n }\n group.entities.forEach((entityId) => {\n if (!lookup.has(entityId)) {\n lookup.set(entityId, { groupId, icon: group.icon });\n }\n });\n });\n\n return lookup;\n};\n\nconst isEntityVisible = (\n entityId: string,\n entities: BackofficeEntityManifestMap,\n sidebar: BackofficeSidebarConfig | undefined,\n permissions: unknown,\n): boolean => {\n const config = entities[entityId];\n if (config == null) {\n return false;\n }\n\n let descriptor: BackofficeSidebarItemDescriptor = {\n kind: 'entity',\n id: entityId,\n };\n if (config.kind === 'tool') {\n descriptor = { kind: 'tool', id: entityId };\n }\n\n if (sidebar?.isItemVisible != null) {\n return sidebar.isItemVisible(descriptor, permissions);\n }\n\n if (config.kind === 'tool') {\n return true;\n }\n return config.hasList;\n};\n\nexport const resolveVisibleEntityIds = (\n groups: Record<string, BackofficeSidebarGroupConfig>,\n entities: BackofficeEntityManifestMap,\n sidebar: BackofficeSidebarConfig | undefined,\n permissions: unknown,\n): string[] => {\n const output: string[] = [];\n const seen = new Set<string>();\n\n Object.entries(groups).forEach(([, group]) => {\n if (group.isVisible != null && !group.isVisible(permissions)) {\n return;\n }\n if (group.entities == null) {\n return;\n }\n group.entities.forEach((entityId) => {\n if (seen.has(entityId)) {\n return;\n }\n if (!isEntityVisible(entityId, entities, sidebar, permissions)) {\n return;\n }\n seen.add(entityId);\n output.push(entityId);\n });\n });\n\n return output;\n};\n\nexport const resolveActiveEntityId = (\n pathname: string,\n entities: BackofficeEntityManifestMap,\n): string | null => {\n const entries = Object.entries(entities);\n for (const [entityId, config] of entries) {\n if (config.kind === 'tool') {\n if (isActivePath(pathname, config.routes.list)) {\n return entityId;\n }\n } else if (config.hasList && isActivePath(pathname, config.routes.list)) {\n return entityId;\n }\n }\n return null;\n};\n\nexport const resolveActiveGroupId = (\n groups: Record<string, BackofficeSidebarGroupConfig>,\n activeEntityId: string | null,\n entities: BackofficeEntityManifestMap,\n sidebar: BackofficeSidebarConfig | undefined,\n permissions: unknown,\n): string | null => {\n if (activeEntityId == null) {\n return null;\n }\n\n if (!isEntityVisible(activeEntityId, entities, sidebar, permissions)) {\n return null;\n }\n\n for (const [groupId, group] of Object.entries(groups)) {\n const isVisible = group.isVisible == null || group.isVisible(permissions);\n if (isVisible && group.entities?.includes(activeEntityId) === true) {\n return groupId;\n }\n }\n\n return null;\n};\n"],"mappings":";AAaA,IAAa,KAAgB,GAAkB,MACtC,EAAM,EAAK,EAGP,KAAgB,GAAkB,MAI7C,GAHI,MAAa,KAGb,MAAS,OAAO,EAAS,WAAW,GAAG,EAAK,GAAG,GAMxC,KACX,OAIO,EACL,MAAM,EACJ,UAJc,OAAO,KAAK,EAAS,EAKpC,EACF,GAGU,KACX,GACA,MAEO,GAAS,UAAU,EAAmB,EAAS,EAQ3C,KACX,MACsB;CACtB,IAAM,oBAA4B,IAAI,KAAK;AAa3C,QAXA,OAAO,QAAQ,EAAO,CAAC,SAAS,CAAC,GAAS,OAAW;AAC/C,IAAM,YAAY,QAGtB,EAAM,SAAS,SAAS,MAAa;AACnC,GAAK,EAAO,IAAI,EAAS,IACvB,EAAO,IAAI,GAAU;IAAE;IAAS,MAAM,EAAM;IAAM,CAAC;IAErD;GACF,EAEK;GAGH,KACJ,GACA,GACA,GACA,MACY;CACZ,IAAM,IAAS,EAAS;AACxB,KAAI,KAAU,KACZ,QAAO;CAGT,IAAI,IAA8C;EAChD,MAAM;EACN,IAAI;EACL;AAYD,QAXI,EAAO,SAAS,WAClB,IAAa;EAAE,MAAM;EAAQ,IAAI;EAAU,GAGzC,GAAS,iBAAiB,OAI1B,EAAO,SAAS,SACX,KAEF,EAAO,UANL,EAAQ,cAAc,GAAY,EAAY;GAS5C,KACX,GACA,GACA,GACA,MACa;CACb,IAAM,IAAmB,EAAE,EACrB,oBAAO,IAAI,KAAa;AAqB9B,QAnBA,OAAO,QAAQ,EAAO,CAAC,SAAS,GAAG,OAAW;AACxC,IAAM,aAAa,QAAQ,CAAC,EAAM,UAAU,EAAY,IAGxD,EAAM,YAAY,QAGtB,EAAM,SAAS,SAAS,MAAa;AAC/B,KAAK,IAAI,EAAS,IAGjB,EAAgB,GAAU,GAAU,GAAS,EAAY,KAG9D,EAAK,IAAI,EAAS,EAClB,EAAO,KAAK,EAAS;IACrB;GACF,EAEK"}
@@ -7,6 +7,6 @@ function i() {
7
7
  return e;
8
8
  }
9
9
  //#endregion
10
- export { r as BackofficeConfigProvider, n as default, i as useBackofficeConfig };
10
+ export { i as n, r as t };
11
11
 
12
- //# sourceMappingURL=BackofficeConfigContext.js.map
12
+ //# sourceMappingURL=sprinkles.css.ts.vanilla-n-NK_DwW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sprinkles.css.ts.vanilla-n-NK_DwW.js","names":[],"sources":["../../src/provider/BackofficeConfigContext.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\n\nimport type { BackofficeEntityManifestMap } from '@plumile/backoffice-core/types.js';\n\nimport type {\n BackofficeAuthConfig,\n BackofficeDashboardModule,\n BackofficeGraphQLConfig,\n BackofficeSidebarConfig,\n} from './types.js';\nimport type { BackofficeEntityRegistry } from './entityRegistry.js';\n\nexport type BackofficeConfigContextValue = {\n basePath: string;\n entities: BackofficeEntityManifestMap;\n entityManifest: BackofficeEntityManifestMap;\n entityRegistry: BackofficeEntityRegistry;\n filterColumnAliases?: Record<string, string>;\n sidebar?: BackofficeSidebarConfig;\n dashboard?: BackofficeDashboardModule;\n auth: BackofficeAuthConfig;\n graphql: BackofficeGraphQLConfig;\n};\n\nconst BackofficeConfigContext =\n createContext<BackofficeConfigContextValue | null>(null);\n\nexport const BackofficeConfigProvider = BackofficeConfigContext.Provider;\n\n/**\n * Hook to access the Backoffice configuration context\n */\nexport function useBackofficeConfig(): BackofficeConfigContextValue {\n const context = useContext(BackofficeConfigContext);\n if (context == null) {\n throw new Error('BackofficeProvider is missing in the component tree.');\n }\n return context;\n}\n\nexport default BackofficeConfigContext;\n"],"mappings":";;AAwBA,IAAM,IACJ,EAAmD,KAAK,EAE7C,IAA2B,EAAwB;AAKhE,SAAgB,IAAoD;CAClE,IAAM,IAAU,EAAW,EAAwB;AACnD,KAAI,KAAW,KACb,OAAU,MAAM,uDAAuD;AAEzE,QAAO"}