@plumile/backoffice-react 0.1.108 → 0.1.112

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 (319) hide show
  1. package/lib/esm/auth/AuthRefreshNotice.js +2 -2
  2. package/lib/esm/auth/AuthRefreshNotice.js.map +1 -1
  3. package/lib/esm/auth/authRefreshNotice.css.js +1 -0
  4. package/lib/esm/auth/authRefreshNotice.css.js.map +1 -1
  5. package/lib/esm/auth/login/EmailCapturePanel.js +12 -9
  6. package/lib/esm/auth/login/EmailCapturePanel.js.map +1 -1
  7. package/lib/esm/auth/login/LoginFlow.js +10 -10
  8. package/lib/esm/auth/login/LoginFlow.js.map +1 -1
  9. package/lib/esm/auth/login/MethodChooser.js +14 -12
  10. package/lib/esm/auth/login/MethodChooser.js.map +1 -1
  11. package/lib/esm/auth/login/MfaChallengeForm.js +13 -10
  12. package/lib/esm/auth/login/MfaChallengeForm.js.map +1 -1
  13. package/lib/esm/auth/login/OidcButtons.js +4 -4
  14. package/lib/esm/auth/login/OidcButtons.js.map +1 -1
  15. package/lib/esm/auth/login/PasskeyLoginForm.js +13 -10
  16. package/lib/esm/auth/login/PasskeyLoginForm.js.map +1 -1
  17. package/lib/esm/auth/login/PasswordLoginPanel.js +8 -8
  18. package/lib/esm/auth/login/PasswordLoginPanel.js.map +1 -1
  19. package/lib/esm/auth/login/loginPage.css.js.map +1 -1
  20. package/lib/esm/auth/pages/AcceptInvitationScreen.js +18 -14
  21. package/lib/esm/auth/pages/AcceptInvitationScreen.js.map +1 -1
  22. package/lib/esm/auth/pages/PasswordResetCompleteScreen.js +16 -12
  23. package/lib/esm/auth/pages/PasswordResetCompleteScreen.js.map +1 -1
  24. package/lib/esm/auth/pages/PasswordResetRequestScreen.js +15 -11
  25. package/lib/esm/auth/pages/PasswordResetRequestScreen.js.map +1 -1
  26. package/lib/esm/auth/pages/VerifyEmailScreen.js +13 -11
  27. package/lib/esm/auth/pages/VerifyEmailScreen.js.map +1 -1
  28. package/lib/esm/components/backoffice/actions/BackofficeEntityActionFormDialog.js +66 -54
  29. package/lib/esm/components/backoffice/actions/BackofficeEntityActionFormDialog.js.map +1 -1
  30. package/lib/esm/components/backoffice/actions/LazyBackofficeEntityActionFormDialog.js +8 -8
  31. package/lib/esm/components/backoffice/actions/LazyBackofficeEntityActionFormDialog.js.map +1 -1
  32. package/lib/esm/components/backoffice/actions/backofficeEntityActionFormDialog.css.js.map +1 -1
  33. package/lib/esm/components/backoffice/actions/toastViewAction.js.map +1 -1
  34. package/lib/esm/components/backoffice/columns/buildDataTableColumns.js +13 -12
  35. package/lib/esm/components/backoffice/columns/buildDataTableColumns.js.map +1 -1
  36. package/lib/esm/components/backoffice/detail/BackofficeCopyButton.js +3 -3
  37. package/lib/esm/components/backoffice/detail/BackofficeCopyButton.js.map +1 -1
  38. package/lib/esm/components/backoffice/detail/BackofficeDetailBadgeRow.js +8 -8
  39. package/lib/esm/components/backoffice/detail/BackofficeDetailBadgeRow.js.map +1 -1
  40. package/lib/esm/components/backoffice/detail/BackofficeDetailErrorList.js +12 -11
  41. package/lib/esm/components/backoffice/detail/BackofficeDetailErrorList.js.map +1 -1
  42. package/lib/esm/components/backoffice/detail/BackofficeDetailField.js +8 -7
  43. package/lib/esm/components/backoffice/detail/BackofficeDetailField.js.map +1 -1
  44. package/lib/esm/components/backoffice/detail/BackofficeDetailFlagTag.css.js.map +1 -1
  45. package/lib/esm/components/backoffice/detail/BackofficeDetailFlagTag.js +6 -6
  46. package/lib/esm/components/backoffice/detail/BackofficeDetailFlagTag.js.map +1 -1
  47. package/lib/esm/components/backoffice/detail/BackofficeDetailHeader.js +3 -3
  48. package/lib/esm/components/backoffice/detail/BackofficeDetailHeader.js.map +1 -1
  49. package/lib/esm/components/backoffice/detail/BackofficeDetailPage.js +3 -3
  50. package/lib/esm/components/backoffice/detail/BackofficeDetailPage.js.map +1 -1
  51. package/lib/esm/components/backoffice/detail/BackofficeDetailPayload.js +4 -4
  52. package/lib/esm/components/backoffice/detail/BackofficeDetailPayload.js.map +1 -1
  53. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationLink.js +1 -1
  54. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationLink.js.map +1 -1
  55. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationListBlock.js +30 -29
  56. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationListBlock.js.map +1 -1
  57. package/lib/esm/components/backoffice/detail/BackofficeDetailTable.js +3 -3
  58. package/lib/esm/components/backoffice/detail/BackofficeDetailTable.js.map +1 -1
  59. package/lib/esm/components/backoffice/detail/BackofficeDetailTaggedValue.js +5 -5
  60. package/lib/esm/components/backoffice/detail/BackofficeDetailTaggedValue.js.map +1 -1
  61. package/lib/esm/components/backoffice/detail/BackofficeEntitySummaryHeader.js +21 -19
  62. package/lib/esm/components/backoffice/detail/BackofficeEntitySummaryHeader.js.map +1 -1
  63. package/lib/esm/components/backoffice/detail/BackofficeKpiStrip.js +9 -6
  64. package/lib/esm/components/backoffice/detail/BackofficeKpiStrip.js.map +1 -1
  65. package/lib/esm/components/backoffice/detail/BackofficeLifecycleTimelineSection.js +7 -7
  66. package/lib/esm/components/backoffice/detail/BackofficeLifecycleTimelineSection.js.map +1 -1
  67. package/lib/esm/components/backoffice/detail/BackofficePayloadInspectorSection.js +8 -8
  68. package/lib/esm/components/backoffice/detail/BackofficePayloadInspectorSection.js.map +1 -1
  69. package/lib/esm/components/backoffice/detail/BackofficeReferenceValue.js +5 -5
  70. package/lib/esm/components/backoffice/detail/BackofficeReferenceValue.js.map +1 -1
  71. package/lib/esm/components/backoffice/detail/BackofficeRelationsSummaryGrid.js +1 -1
  72. package/lib/esm/components/backoffice/detail/BackofficeRelationsSummaryGrid.js.map +1 -1
  73. package/lib/esm/components/backoffice/detail/BackofficeStatusMetaBadge.js +4 -4
  74. package/lib/esm/components/backoffice/detail/BackofficeStatusMetaBadge.js.map +1 -1
  75. package/lib/esm/components/backoffice/detail/BackofficeUsageCostBreakdown.js +1 -1
  76. package/lib/esm/components/backoffice/detail/BackofficeUsageCostBreakdown.js.map +1 -1
  77. package/lib/esm/components/backoffice/detail/backofficeAuditMetadataPanel.css.js.map +1 -1
  78. package/lib/esm/components/backoffice/detail/backofficeDetailBadgeRow.css.js.map +1 -1
  79. package/lib/esm/components/backoffice/detail/backofficeDetailErrorList.css.js.map +1 -1
  80. package/lib/esm/components/backoffice/detail/backofficeDetailField.css.js.map +1 -1
  81. package/lib/esm/components/backoffice/detail/backofficeDetailLayout.css.js.map +1 -1
  82. package/lib/esm/components/backoffice/detail/backofficeDetailRelationLink.css.js.map +1 -1
  83. package/lib/esm/components/backoffice/detail/backofficeDetailRelationList.css.js.map +1 -1
  84. package/lib/esm/components/backoffice/detail/backofficeDetailSection.css.js.map +1 -1
  85. package/lib/esm/components/backoffice/detail/backofficeDetailTaggedValue.css.js.map +1 -1
  86. package/lib/esm/components/backoffice/detail/backofficeEntitySummaryHeader.css.js.map +1 -1
  87. package/lib/esm/components/backoffice/detail/backofficeKpiStrip.css.js.map +1 -1
  88. package/lib/esm/components/backoffice/detail/backofficeLifecycleTimelineSection.css.js.map +1 -1
  89. package/lib/esm/components/backoffice/detail/backofficePayloadInspectorSection.css.js.map +1 -1
  90. package/lib/esm/components/backoffice/detail/backofficeReferenceValue.css.js.map +1 -1
  91. package/lib/esm/components/backoffice/detail/backofficeRelationsSummaryGrid.css.js.map +1 -1
  92. package/lib/esm/components/backoffice/detail/backofficeScopeStack.css.js.map +1 -1
  93. package/lib/esm/components/backoffice/detail/backofficeStatusMetaBadge.css.js.map +1 -1
  94. package/lib/esm/components/backoffice/detail/backofficeUsageCostBreakdown.css.js.map +1 -1
  95. package/lib/esm/components/backoffice/filters/BackofficeFilterAction.js +12 -12
  96. package/lib/esm/components/backoffice/filters/BackofficeFilterAction.js.map +1 -1
  97. package/lib/esm/components/backoffice/filters/DeferredFilterSearchInput.js +11 -9
  98. package/lib/esm/components/backoffice/filters/DeferredFilterSearchInput.js.map +1 -1
  99. package/lib/esm/components/backoffice/filters/EntityFilterValue.js +16 -8
  100. package/lib/esm/components/backoffice/filters/EntityFilterValue.js.map +1 -1
  101. package/lib/esm/components/backoffice/filters/EntityIdFilterField.js +86 -53
  102. package/lib/esm/components/backoffice/filters/EntityIdFilterField.js.map +1 -1
  103. package/lib/esm/components/backoffice/filters/backofficeFilterAction.css.js.map +1 -1
  104. package/lib/esm/components/backoffice/filters/deferredFilterSearchInput.css.js.map +1 -1
  105. package/lib/esm/components/backoffice/filters/entityIdFilterField.css.js +2 -2
  106. package/lib/esm/components/backoffice/filters/entityIdFilterField.css.js.map +1 -1
  107. package/lib/esm/components/backoffice/hub/BackofficeHubTemplate.js +25 -23
  108. package/lib/esm/components/backoffice/hub/BackofficeHubTemplate.js.map +1 -1
  109. package/lib/esm/components/backoffice/hub/backofficeHubTemplate.css.js.map +1 -1
  110. package/lib/esm/components/backoffice/layout/backofficeSidebarActions.css.js.map +1 -1
  111. package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.js +14 -14
  112. package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.js.map +1 -1
  113. package/lib/esm/components/backoffice/layout/breadcrumb/backofficeTopbarBreadcrumb.css.js.map +1 -1
  114. package/lib/esm/components/backoffice/layout/buildSidebarSections.js +42 -37
  115. package/lib/esm/components/backoffice/layout/buildSidebarSections.js.map +1 -1
  116. package/lib/esm/components/backoffice/layout/mapViewerToSidebarProfileView.js.map +1 -1
  117. package/lib/esm/components/backoffice/links/BackofficeInlineLink.js +1 -1
  118. package/lib/esm/components/backoffice/links/BackofficeInlineLink.js.map +1 -1
  119. package/lib/esm/components/backoffice/links/BackofficeLink.js +1 -1
  120. package/lib/esm/components/backoffice/links/BackofficeLink.js.map +1 -1
  121. package/lib/esm/components/backoffice/links/backofficeLink.css.js.map +1 -1
  122. package/lib/esm/components/backoffice/lists/BackofficeListToolbar.js +1 -1
  123. package/lib/esm/components/backoffice/lists/BackofficeListToolbar.js.map +1 -1
  124. package/lib/esm/components/backoffice/lists/backofficeListToolbar.css.js.map +1 -1
  125. package/lib/esm/components/backoffice/overview/BackofficeOverviewLayout.js +1 -1
  126. package/lib/esm/components/backoffice/overview/BackofficeOverviewLayout.js.map +1 -1
  127. package/lib/esm/components/backoffice/overview/backofficeOverviewLayout.css.js.map +1 -1
  128. package/lib/esm/components/backoffice/pickers/EntityIdPickerDialog.js +31 -27
  129. package/lib/esm/components/backoffice/pickers/EntityIdPickerDialog.js.map +1 -1
  130. package/lib/esm/components/backoffice/pickers/entityIdPickerDialog.css.js +2 -2
  131. package/lib/esm/components/backoffice/pickers/entityIdPickerDialog.css.js.map +1 -1
  132. package/lib/esm/components/backoffice/pickers/shared/EntityPickerList.js +26 -20
  133. package/lib/esm/components/backoffice/pickers/shared/EntityPickerList.js.map +1 -1
  134. package/lib/esm/components/backoffice/pickers/shared/EntityPickerShell.js +4 -4
  135. package/lib/esm/components/backoffice/pickers/shared/EntityPickerShell.js.map +1 -1
  136. package/lib/esm/components/backoffice/refs/BackofficeRelatedCountLink.js +1 -1
  137. package/lib/esm/components/backoffice/refs/BackofficeRelatedCountLink.js.map +1 -1
  138. package/lib/esm/components/backoffice/refs/backofficeEntityIdRef.css.js.map +1 -1
  139. package/lib/esm/components/backoffice/refs/backofficeRelatedCountLink.css.js.map +1 -1
  140. package/lib/esm/components/backoffice/routing/BackofficeContentError.js +6 -5
  141. package/lib/esm/components/backoffice/routing/BackofficeContentError.js.map +1 -1
  142. package/lib/esm/components/backoffice/routing/BackofficeContentFallback.js +10 -10
  143. package/lib/esm/components/backoffice/routing/BackofficeContentFallback.js.map +1 -1
  144. package/lib/esm/components/backoffice/routing/BackofficeRouteFallback.js +10 -10
  145. package/lib/esm/components/backoffice/routing/BackofficeRouteFallback.js.map +1 -1
  146. package/lib/esm/components/backoffice/routing/backofficeContentBoundary.css.js.map +1 -1
  147. package/lib/esm/components/backoffice/routing/backofficeContentError.css.js.map +1 -1
  148. package/lib/esm/components/backoffice/routing/backofficeContentFallback.css.js.map +1 -1
  149. package/lib/esm/components/backoffice/routing/backofficeRouteFallback.css.js.map +1 -1
  150. package/lib/esm/components/backoffice/routing/backofficeRoutePendingBar.css.js.map +1 -1
  151. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityDetailScaffold.js +3 -3
  152. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityDetailScaffold.js.map +1 -1
  153. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js +198 -181
  154. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js.map +1 -1
  155. package/lib/esm/components/backoffice/scaffolds/BackofficeTabbedDetailShell.js +6 -5
  156. package/lib/esm/components/backoffice/scaffolds/BackofficeTabbedDetailShell.js.map +1 -1
  157. package/lib/esm/components/backoffice/scaffolds/backofficeEntityListScaffold.css.js.map +1 -1
  158. package/lib/esm/components/backoffice/scaffolds/backofficeTabbedDetailShell.css.js.map +1 -1
  159. package/lib/esm/components/backoffice/shared/BackofficeFilterableCell.js +10 -9
  160. package/lib/esm/components/backoffice/shared/BackofficeFilterableCell.js.map +1 -1
  161. package/lib/esm/components/backoffice/shared/BackofficeInlineFilterRow.js +1 -1
  162. package/lib/esm/components/backoffice/shared/BackofficeInlineFilterRow.js.map +1 -1
  163. package/lib/esm/components/backoffice/shared/backofficeFilterableCell.css.js.map +1 -1
  164. package/lib/esm/components/backoffice/shared/backofficeInlineFilterRow.css.js.map +1 -1
  165. package/lib/esm/components/backoffice/tools/BackofficeToolsDocPanel.js +11 -9
  166. package/lib/esm/components/backoffice/tools/BackofficeToolsDocPanel.js.map +1 -1
  167. package/lib/esm/components/backoffice/tools/BackofficeToolsErrorFallback.js +7 -7
  168. package/lib/esm/components/backoffice/tools/BackofficeToolsErrorFallback.js.map +1 -1
  169. package/lib/esm/components/backoffice/tools/BackofficeToolsJsonForm.js +17 -12
  170. package/lib/esm/components/backoffice/tools/BackofficeToolsJsonForm.js.map +1 -1
  171. package/lib/esm/components/backoffice/tools/BackofficeToolsQueryBoundary.js +10 -10
  172. package/lib/esm/components/backoffice/tools/BackofficeToolsQueryBoundary.js.map +1 -1
  173. package/lib/esm/components/backoffice/tools/backofficeToolsDocPanel.css.js.map +1 -1
  174. package/lib/esm/components/backoffice/tools/backofficeToolsForm.css.js.map +1 -1
  175. package/lib/esm/components/backoffice/tools/backofficeToolsJsonForm.css.js.map +1 -1
  176. package/lib/esm/hooks/useBackofficeListUrlState.js +2 -1
  177. package/lib/esm/hooks/useBackofficeListUrlState.js.map +1 -1
  178. package/lib/esm/pages/BackofficeAcceptInvitationPage.js +1 -1
  179. package/lib/esm/pages/BackofficeAcceptInvitationPage.js.map +1 -1
  180. package/lib/esm/pages/BackofficeDashboardPage.js +72 -68
  181. package/lib/esm/pages/BackofficeDashboardPage.js.map +1 -1
  182. package/lib/esm/pages/BackofficeEntityDetailLayoutPage.js +1 -1
  183. package/lib/esm/pages/BackofficeEntityDetailLayoutPage.js.map +1 -1
  184. package/lib/esm/pages/BackofficeEntityDetailPage.js +207 -184
  185. package/lib/esm/pages/BackofficeEntityDetailPage.js.map +1 -1
  186. package/lib/esm/pages/BackofficeEntityDetailUnknownPageRedirect.js +1 -1
  187. package/lib/esm/pages/BackofficeEntityDetailUnknownPageRedirect.js.map +1 -1
  188. package/lib/esm/pages/BackofficeEntityListPage.helpers.js.map +1 -1
  189. package/lib/esm/pages/BackofficeEntityListPage.js +143 -139
  190. package/lib/esm/pages/BackofficeEntityListPage.js.map +1 -1
  191. package/lib/esm/pages/BackofficeHubPage.js +10 -9
  192. package/lib/esm/pages/BackofficeHubPage.js.map +1 -1
  193. package/lib/esm/pages/BackofficeLayoutPage.js +44 -39
  194. package/lib/esm/pages/BackofficeLayoutPage.js.map +1 -1
  195. package/lib/esm/pages/BackofficeLoginPage.js +1 -1
  196. package/lib/esm/pages/BackofficeLoginPage.js.map +1 -1
  197. package/lib/esm/pages/BackofficePasswordResetCompletePage.js +1 -1
  198. package/lib/esm/pages/BackofficePasswordResetCompletePage.js.map +1 -1
  199. package/lib/esm/pages/BackofficeVerifyEmailPage.js +1 -1
  200. package/lib/esm/pages/BackofficeVerifyEmailPage.js.map +1 -1
  201. package/lib/esm/pages/backofficeDashboardPage.css.js.map +1 -1
  202. package/lib/esm/pages/backofficeEntityDetailPage.css.js.map +1 -1
  203. package/lib/esm/pages/backofficeEntityListPage.css.js.map +1 -1
  204. package/lib/esm/pages/dashboard/DashboardMetricGroup.js +10 -9
  205. package/lib/esm/pages/dashboard/DashboardMetricGroup.js.map +1 -1
  206. package/lib/esm/pages/dashboard/DashboardPanel.js +3 -3
  207. package/lib/esm/pages/dashboard/DashboardPanel.js.map +1 -1
  208. package/lib/esm/pages/dashboard/DashboardQuickActions.js +2 -2
  209. package/lib/esm/pages/dashboard/DashboardQuickActions.js.map +1 -1
  210. package/lib/esm/pages/dashboard/DashboardStatusList.js +1 -1
  211. package/lib/esm/pages/dashboard/DashboardStatusList.js.map +1 -1
  212. package/lib/esm/pages/dashboard/dashboardMetricGroup.css.js.map +1 -1
  213. package/lib/esm/pages/dashboard/dashboardPanel.css.js.map +1 -1
  214. package/lib/esm/pages/dashboard/dashboardQuickActions.css.js.map +1 -1
  215. package/lib/esm/pages/dashboard/dashboardStatusList.css.js.map +1 -1
  216. package/lib/esm/pages/detail/buildTabsItems.js.map +1 -1
  217. package/lib/esm/provider/BackofficeProvider.js +22 -20
  218. package/lib/esm/provider/BackofficeProvider.js.map +1 -1
  219. package/lib/esm/router/createBackofficeRoutes.js +33 -30
  220. package/lib/esm/router/createBackofficeRoutes.js.map +1 -1
  221. package/lib/esm/storybook/relay/RelayStory.css.js.map +1 -1
  222. package/lib/esm/style.css +1 -1
  223. package/lib/types/auth/AuthFlows.stories.d.ts +19 -0
  224. package/lib/types/auth/AuthFlows.stories.d.ts.map +1 -0
  225. package/lib/types/auth/AuthRefreshNotice.d.ts +1 -1
  226. package/lib/types/auth/AuthRefreshNotice.d.ts.map +1 -1
  227. package/lib/types/auth/authRefreshNotice.css.d.ts.map +1 -1
  228. package/lib/types/auth/login/EmailCapturePanel.d.ts.map +1 -1
  229. package/lib/types/auth/login/MethodChooser.d.ts.map +1 -1
  230. package/lib/types/auth/login/MfaChallengeForm.d.ts.map +1 -1
  231. package/lib/types/auth/login/PasskeyLoginForm.d.ts.map +1 -1
  232. package/lib/types/auth/login/PasswordLoginPanel.d.ts +1 -1
  233. package/lib/types/auth/login/PasswordLoginPanel.d.ts.map +1 -1
  234. package/lib/types/auth/login/loginPage.css.d.ts.map +1 -1
  235. package/lib/types/auth/pages/AcceptInvitationScreen.d.ts.map +1 -1
  236. package/lib/types/auth/pages/PasswordResetCompleteScreen.d.ts.map +1 -1
  237. package/lib/types/auth/pages/PasswordResetRequestScreen.d.ts.map +1 -1
  238. package/lib/types/auth/pages/VerifyEmailScreen.d.ts.map +1 -1
  239. package/lib/types/components/backoffice/actions/BackofficeEntityActionFormDialog.d.ts.map +1 -1
  240. package/lib/types/components/backoffice/actions/toastViewAction.d.ts +1 -1
  241. package/lib/types/components/backoffice/actions/toastViewAction.d.ts.map +1 -1
  242. package/lib/types/components/backoffice/columns/buildDataTableColumns.d.ts +1 -1
  243. package/lib/types/components/backoffice/columns/buildDataTableColumns.d.ts.map +1 -1
  244. package/lib/types/components/backoffice/detail/BackofficeCopyButton.d.ts +1 -1
  245. package/lib/types/components/backoffice/detail/BackofficeCopyButton.d.ts.map +1 -1
  246. package/lib/types/components/backoffice/detail/BackofficeDetailErrorList.d.ts.map +1 -1
  247. package/lib/types/components/backoffice/detail/BackofficeDetailField.d.ts.map +1 -1
  248. package/lib/types/components/backoffice/detail/BackofficeDetailFlagTag.d.ts +1 -1
  249. package/lib/types/components/backoffice/detail/BackofficeDetailFlagTag.d.ts.map +1 -1
  250. package/lib/types/components/backoffice/detail/BackofficeDetailPrimitives.stories.d.ts +17 -0
  251. package/lib/types/components/backoffice/detail/BackofficeDetailPrimitives.stories.d.ts.map +1 -0
  252. package/lib/types/components/backoffice/detail/BackofficeDetailRelationListBlock.d.ts.map +1 -1
  253. package/lib/types/components/backoffice/detail/BackofficeDetailTable.d.ts +1 -1
  254. package/lib/types/components/backoffice/detail/BackofficeDetailTable.d.ts.map +1 -1
  255. package/lib/types/components/backoffice/detail/BackofficeEntitySummaryHeader.d.ts.map +1 -1
  256. package/lib/types/components/backoffice/detail/BackofficeKpiStrip.d.ts.map +1 -1
  257. package/lib/types/components/backoffice/detail/backofficeDetailRelationLink.css.d.ts.map +1 -1
  258. package/lib/types/components/backoffice/filters/DeferredFilterSearchInput.d.ts.map +1 -1
  259. package/lib/types/components/backoffice/filters/EntityFilterValue.d.ts +5 -1
  260. package/lib/types/components/backoffice/filters/EntityFilterValue.d.ts.map +1 -1
  261. package/lib/types/components/backoffice/filters/EntityIdFilterField.d.ts +1 -0
  262. package/lib/types/components/backoffice/filters/EntityIdFilterField.d.ts.map +1 -1
  263. package/lib/types/components/backoffice/filters/backofficeFilterAction.css.d.ts.map +1 -1
  264. package/lib/types/components/backoffice/filters/entityIdFilterField.css.d.ts +5 -2
  265. package/lib/types/components/backoffice/filters/entityIdFilterField.css.d.ts.map +1 -1
  266. package/lib/types/components/backoffice/hub/BackofficeHubTemplate.d.ts.map +1 -1
  267. package/lib/types/components/backoffice/hub/BackofficeHubTemplate.stories.d.ts +48 -0
  268. package/lib/types/components/backoffice/hub/BackofficeHubTemplate.stories.d.ts.map +1 -0
  269. package/lib/types/components/backoffice/hub/backofficeHubTemplate.css.d.ts.map +1 -1
  270. package/lib/types/components/backoffice/layout/backofficeSidebarActions.css.d.ts.map +1 -1
  271. package/lib/types/components/backoffice/layout/breadcrumb/backofficeTopbarBreadcrumb.css.d.ts.map +1 -1
  272. package/lib/types/components/backoffice/layout/buildSidebarSections.d.ts +1 -1
  273. package/lib/types/components/backoffice/layout/buildSidebarSections.d.ts.map +1 -1
  274. package/lib/types/components/backoffice/layout/mapViewerToSidebarProfileView.d.ts +1 -1
  275. package/lib/types/components/backoffice/layout/mapViewerToSidebarProfileView.d.ts.map +1 -1
  276. package/lib/types/components/backoffice/lists/BackofficeListToolbar.stories.d.ts +13 -0
  277. package/lib/types/components/backoffice/lists/BackofficeListToolbar.stories.d.ts.map +1 -0
  278. package/lib/types/components/backoffice/overview/BackofficeOverviewLayout.stories.d.ts.map +1 -1
  279. package/lib/types/components/backoffice/pickers/EntityIdPickerDialog.d.ts.map +1 -1
  280. package/lib/types/components/backoffice/pickers/EntityIdPickerDialog.stories.d.ts +11 -0
  281. package/lib/types/components/backoffice/pickers/EntityIdPickerDialog.stories.d.ts.map +1 -0
  282. package/lib/types/components/backoffice/pickers/entityIdPickerDialog.css.d.ts +2 -0
  283. package/lib/types/components/backoffice/pickers/entityIdPickerDialog.css.d.ts.map +1 -1
  284. package/lib/types/components/backoffice/pickers/shared/EntityPickerList.d.ts.map +1 -1
  285. package/lib/types/components/backoffice/refs/backofficeRelatedCountLink.css.d.ts.map +1 -1
  286. package/lib/types/components/backoffice/routing/BackofficeContentError.d.ts.map +1 -1
  287. package/lib/types/components/backoffice/routing/backofficeRoutePendingBar.css.d.ts.map +1 -1
  288. package/lib/types/components/backoffice/scaffolds/BackofficeEntityListScaffold.d.ts +1 -1
  289. package/lib/types/components/backoffice/scaffolds/BackofficeEntityListScaffold.d.ts.map +1 -1
  290. package/lib/types/components/backoffice/scaffolds/BackofficeTabbedDetailShell.d.ts +1 -1
  291. package/lib/types/components/backoffice/scaffolds/BackofficeTabbedDetailShell.d.ts.map +1 -1
  292. package/lib/types/components/backoffice/scaffolds/BackofficeTabbedDetailShell.stories.d.ts.map +1 -1
  293. package/lib/types/components/backoffice/shared/BackofficeFilterableCell.d.ts.map +1 -1
  294. package/lib/types/components/backoffice/shared/backofficeFilterableCell.css.d.ts.map +1 -1
  295. package/lib/types/components/backoffice/tools/BackofficeTools.stories.d.ts +17 -0
  296. package/lib/types/components/backoffice/tools/BackofficeTools.stories.d.ts.map +1 -0
  297. package/lib/types/components/backoffice/tools/BackofficeToolsDocPanel.d.ts.map +1 -1
  298. package/lib/types/components/backoffice/tools/BackofficeToolsJsonForm.d.ts.map +1 -1
  299. package/lib/types/components/backoffice/tools/backofficeToolsDocPanel.css.d.ts.map +1 -1
  300. package/lib/types/hooks/useBackofficeListUrlState.d.ts.map +1 -1
  301. package/lib/types/pages/BackofficeEntityDetailPage.d.ts.map +1 -1
  302. package/lib/types/pages/BackofficeEntityListPage.helpers.d.ts +2 -1
  303. package/lib/types/pages/BackofficeEntityListPage.helpers.d.ts.map +1 -1
  304. package/lib/types/pages/BackofficeHubPage.d.ts.map +1 -1
  305. package/lib/types/pages/BackofficeLayoutPage.d.ts.map +1 -1
  306. package/lib/types/pages/backofficeEntityDetailPage.css.d.ts.map +1 -1
  307. package/lib/types/pages/dashboard/DashboardMetricGroup.d.ts.map +1 -1
  308. package/lib/types/pages/dashboard/dashboardMetricGroup.css.d.ts.map +1 -1
  309. package/lib/types/pages/dashboard/dashboardPanel.css.d.ts.map +1 -1
  310. package/lib/types/pages/dashboard/dashboardQuickActions.css.d.ts.map +1 -1
  311. package/lib/types/pages/dashboard/dashboardStatusList.css.d.ts.map +1 -1
  312. package/lib/types/pages/detail/buildTabsItems.d.ts +1 -1
  313. package/lib/types/pages/detail/buildTabsItems.d.ts.map +1 -1
  314. package/lib/types/provider/BackofficeProvider.d.ts.map +1 -1
  315. package/lib/types/provider/types.d.ts +2 -1
  316. package/lib/types/provider/types.d.ts.map +1 -1
  317. package/lib/types/router/createBackofficeRoutes.d.ts +2 -1
  318. package/lib/types/router/createBackofficeRoutes.d.ts.map +1 -1
  319. package/package.json +14 -10
@@ -3,26 +3,26 @@ import { BackofficeDetailSection as t } from "../detail/BackofficeDetailSection.
3
3
  import { BackofficeToolsErrorFallback as n } from "./BackofficeToolsErrorFallback.js";
4
4
  import { loadingState as r } from "./backofficeToolsForm.css.js";
5
5
  import { Suspense as i } from "react";
6
- import { Spinner as a } from "@plumile/ui";
7
- import { jsx as o } from "react/jsx-runtime";
8
- import { useTranslation as s } from "react-i18next";
6
+ import { jsx as a } from "react/jsx-runtime";
7
+ import { useTranslation as o } from "react-i18next";
8
+ import { Spinner as s } from "@plumile/ui/backoffice/atoms/spinner/Spinner.js";
9
9
  //#region src/components/backoffice/tools/BackofficeToolsQueryBoundary.tsx
10
10
  var c = ({ children: c }) => {
11
- let { t: l } = s("backofficeReact");
12
- return /* @__PURE__ */ o(e, {
13
- fallback: ({ error: e, reset: t }) => /* @__PURE__ */ o(n, {
11
+ let { t: l } = o("backofficeReact");
12
+ return /* @__PURE__ */ a(e, {
13
+ fallback: ({ error: e, reset: t }) => /* @__PURE__ */ a(n, {
14
14
  error: e,
15
15
  onRetry: t
16
16
  }),
17
- children: /* @__PURE__ */ o(i, {
18
- fallback: /* @__PURE__ */ o(t, {
17
+ children: /* @__PURE__ */ a(i, {
18
+ fallback: /* @__PURE__ */ a(t, {
19
19
  title: l("tools.output"),
20
20
  description: l("tools.loading.description"),
21
- children: /* @__PURE__ */ o("div", {
21
+ children: /* @__PURE__ */ a("div", {
22
22
  className: r,
23
23
  role: "status",
24
24
  "aria-live": "polite",
25
- children: /* @__PURE__ */ o(a, {})
25
+ children: /* @__PURE__ */ a(s, {})
26
26
  })
27
27
  }),
28
28
  children: c
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeToolsQueryBoundary.js","names":[],"sources":["../../../../../src/components/backoffice/tools/BackofficeToolsQueryBoundary.tsx"],"sourcesContent":["import { Suspense, type JSX, type ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Spinner } from '@plumile/ui';\n\nimport { BackofficeDetailSection } from '../detail/BackofficeDetailSection.js';\nimport { BackofficeErrorBoundary } from '../errors/BackofficeErrorBoundary.js';\n\nimport { BackofficeToolsErrorFallback } from './BackofficeToolsErrorFallback.js';\nimport * as styles from './backofficeToolsForm.css.js';\n\nexport type BackofficeToolsQueryBoundaryProps = {\n children: ReactNode;\n};\n\nexport const BackofficeToolsQueryBoundary = ({\n children,\n}: BackofficeToolsQueryBoundaryProps): JSX.Element => {\n const { t } = useTranslation('backofficeReact');\n\n const fallback = (\n <BackofficeDetailSection\n title={t('tools.output')}\n description={t('tools.loading.description')}\n >\n <div className={styles.loadingState} role=\"status\" aria-live=\"polite\">\n <Spinner />\n </div>\n </BackofficeDetailSection>\n );\n\n return (\n <BackofficeErrorBoundary\n fallback={({ error, reset }) => {\n return <BackofficeToolsErrorFallback error={error} onRetry={reset} />;\n }}\n >\n <Suspense fallback={fallback}>{children}</Suspense>\n </BackofficeErrorBoundary>\n );\n};\n\nexport default BackofficeToolsQueryBoundary;\n"],"mappings":";;;;;;;;;AAeA,IAAa,KAAgC,EAC3C,kBACoD;CACpD,IAAM,EAAE,SAAM,EAAe,kBAAkB;CAa/C,OACE,kBAAC,GAAD;EACE,WAAW,EAAE,UAAO,eACX,kBAAC,GAAD;GAAqC;GAAO,SAAS;GAAS,CAAA;YAGvE,kBAAC,GAAD;GAAoB,UAhBtB,kBAAC,GAAD;IACE,OAAO,EAAE,eAAe;IACxB,aAAa,EAAE,4BAA4B;cAE3C,kBAAC,OAAD;KAAK,WAAW;KAAqB,MAAK;KAAS,aAAU;eAC3D,kBAAC,GAAD,EAAW,CAAA;KACP,CAAA;IACkB,CASJ;GAAW;GAAoB,CAAA;EAC3B,CAAA"}
1
+ {"version":3,"file":"BackofficeToolsQueryBoundary.js","names":[],"sources":["../../../../../src/components/backoffice/tools/BackofficeToolsQueryBoundary.tsx"],"sourcesContent":["import { Suspense, type JSX, type ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Spinner } from '@plumile/ui/backoffice/atoms/spinner/Spinner.js';\n\nimport { BackofficeDetailSection } from '../detail/BackofficeDetailSection.js';\nimport { BackofficeErrorBoundary } from '../errors/BackofficeErrorBoundary.js';\n\nimport { BackofficeToolsErrorFallback } from './BackofficeToolsErrorFallback.js';\nimport * as styles from './backofficeToolsForm.css.js';\n\nexport type BackofficeToolsQueryBoundaryProps = {\n children: ReactNode;\n};\n\nexport const BackofficeToolsQueryBoundary = ({\n children,\n}: BackofficeToolsQueryBoundaryProps): JSX.Element => {\n const { t } = useTranslation('backofficeReact');\n\n const fallback = (\n <BackofficeDetailSection\n title={t('tools.output')}\n description={t('tools.loading.description')}\n >\n <div className={styles.loadingState} role=\"status\" aria-live=\"polite\">\n <Spinner />\n </div>\n </BackofficeDetailSection>\n );\n\n return (\n <BackofficeErrorBoundary\n fallback={({ error, reset }) => {\n return <BackofficeToolsErrorFallback error={error} onRetry={reset} />;\n }}\n >\n <Suspense fallback={fallback}>{children}</Suspense>\n </BackofficeErrorBoundary>\n );\n};\n\nexport default BackofficeToolsQueryBoundary;\n"],"mappings":";;;;;;;;;AAeA,IAAa,KAAgC,EAC3C,kBACoD;CACpD,IAAM,EAAE,SAAM,EAAe,kBAAkB;CAa/C,OACE,kBAAC,GAAD;EACE,WAAW,EAAE,UAAO,eACX,kBAAC,GAAD;GAAqC;GAAO,SAAS;GAAS,CAAA;YAGvE,kBAAC,GAAD;GAAoB,UAhBtB,kBAAC,GAAD;IACE,OAAO,EAAE,eAAe;IACxB,aAAa,EAAE,4BAA4B;cAE3C,kBAAC,OAAD;KAAK,WAAW;KAAqB,MAAK;KAAS,aAAU;eAC3D,kBAAC,GAAD,EAAW,CAAA;KACP,CAAA;IACkB,CASJ;GAAW;GAAoB,CAAA;EAC3B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"backofficeToolsDocPanel.css.js","names":[],"sources":["../../../../../src/components/backoffice/tools/backofficeToolsDocPanel.css.ts"],"sourcesContent":["import { style } from '@vanilla-extract/css';\nimport { sprinkles, vars } from '@plumile/ui';\n\nexport const panelGroup = sprinkles({\n display: 'flex',\n flexDirection: 'column',\n gap: 3,\n});\n\nexport const panel = sprinkles({\n borderWidth: 'default',\n borderStyle: 'solid',\n borderColor: 'border',\n borderRadius: 'lg',\n backgroundColor: 'surface',\n overflow: 'hidden',\n});\n\nexport const trigger = style([\n sprinkles({\n width: 'full',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 2,\n paddingY: 3,\n paddingX: 4,\n backgroundColor: 'transparent',\n borderWidth: 0,\n borderStyle: 'none',\n color: 'text',\n cursor: 'pointer',\n textAlign: 'left',\n }),\n {\n selectors: {\n '&:focus-visible': {\n outline: 'none',\n boxShadow: `inset 0 0 0 2px ${vars.colors.primary}`,\n },\n },\n },\n]);\n\nexport const triggerTitle = sprinkles({\n fontSize: 'base',\n fontWeight: 'semibold',\n});\n\nexport const triggerIcon = sprinkles({\n color: 'textSecondary',\n transitionProperty: 'transform',\n transitionDuration: 120,\n transitionTimingFunction: 'ease',\n});\n\nexport const triggerIconOpen = sprinkles({\n rotate: 180,\n});\n\nexport const content = sprinkles({\n borderTopWidth: 'px',\n borderStyle: 'solid',\n borderTopColor: 'borderLight',\n backgroundColor: 'surfaceSecondary',\n padding: 3,\n});\n"],"mappings":""}
1
+ {"version":3,"file":"backofficeToolsDocPanel.css.js","names":[],"sources":["../../../../../src/components/backoffice/tools/backofficeToolsDocPanel.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 panelGroup = sprinkles({\n display: 'flex',\n flexDirection: 'column',\n gap: 3,\n});\n\nexport const panel = sprinkles({\n borderWidth: 'default',\n borderStyle: 'solid',\n borderColor: 'border',\n borderRadius: 'lg',\n backgroundColor: 'surface',\n overflow: 'hidden',\n});\n\nexport const trigger = style([\n sprinkles({\n width: 'full',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 2,\n paddingY: 3,\n paddingX: 4,\n backgroundColor: 'transparent',\n borderWidth: 0,\n borderStyle: 'none',\n color: 'text',\n cursor: 'pointer',\n textAlign: 'left',\n }),\n {\n selectors: {\n '&:focus-visible': {\n outline: 'none',\n boxShadow: `inset 0 0 0 2px ${vars.colors.primary}`,\n },\n },\n },\n]);\n\nexport const triggerTitle = sprinkles({\n fontSize: 'base',\n fontWeight: 'semibold',\n});\n\nexport const triggerIcon = sprinkles({\n color: 'textSecondary',\n transitionProperty: 'transform',\n transitionDuration: 120,\n transitionTimingFunction: 'ease',\n});\n\nexport const triggerIconOpen = sprinkles({\n rotate: 180,\n});\n\nexport const content = sprinkles({\n borderTopWidth: 'px',\n borderStyle: 'solid',\n borderTopColor: 'borderLight',\n backgroundColor: 'surfaceSecondary',\n padding: 3,\n});\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"backofficeToolsForm.css.js","names":[],"sources":["../../../../../src/components/backoffice/tools/backofficeToolsForm.css.ts"],"sourcesContent":["import { sprinkles } from '@plumile/ui';\n\nexport const form = sprinkles({\n display: 'flex',\n flexDirection: 'column',\n gap: 3,\n});\n\nexport const actions = sprinkles({\n display: 'flex',\n justifyContent: {\n base: 'flex-end',\n sm: 'stretch',\n },\n});\n\nexport const inputHeader = sprinkles({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n flexWrap: 'wrap',\n gap: 2,\n});\n\nexport const outputStack = sprinkles({\n display: 'flex',\n flexDirection: 'column',\n gap: 3,\n});\n\nexport const keyValueGrid = sprinkles({\n display: 'grid',\n gap: 4,\n gridTemplateColumns: 'autoFitMinmax220',\n});\n\nexport const loadingState = sprinkles({\n display: 'flex',\n justifyContent: 'center',\n paddingY: 5,\n});\n"],"mappings":""}
1
+ {"version":3,"file":"backofficeToolsForm.css.js","names":[],"sources":["../../../../../src/components/backoffice/tools/backofficeToolsForm.css.ts"],"sourcesContent":["import { sprinkles } from '@plumile/ui/theme/sprinkles.css.js';\n\nexport const form = sprinkles({\n display: 'flex',\n flexDirection: 'column',\n gap: 3,\n});\n\nexport const actions = sprinkles({\n display: 'flex',\n justifyContent: {\n base: 'flex-end',\n sm: 'stretch',\n },\n});\n\nexport const inputHeader = sprinkles({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n flexWrap: 'wrap',\n gap: 2,\n});\n\nexport const outputStack = sprinkles({\n display: 'flex',\n flexDirection: 'column',\n gap: 3,\n});\n\nexport const keyValueGrid = sprinkles({\n display: 'grid',\n gap: 4,\n gridTemplateColumns: 'autoFitMinmax220',\n});\n\nexport const loadingState = sprinkles({\n display: 'flex',\n justifyContent: 'center',\n paddingY: 5,\n});\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"backofficeToolsJsonForm.css.js","names":[],"sources":["../../../../../src/components/backoffice/tools/backofficeToolsJsonForm.css.ts"],"sourcesContent":["import { sprinkles } from '@plumile/ui';\n\nexport const form = sprinkles({\n display: 'flex',\n flexDirection: 'column',\n gap: 4,\n});\n\nexport const actions = sprinkles({\n display: 'flex',\n justifyContent: {\n base: 'flex-end',\n sm: 'stretch',\n },\n});\n\nexport const inputHeader = sprinkles({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n flexWrap: 'wrap',\n gap: 2,\n});\n"],"mappings":""}
1
+ {"version":3,"file":"backofficeToolsJsonForm.css.js","names":[],"sources":["../../../../../src/components/backoffice/tools/backofficeToolsJsonForm.css.ts"],"sourcesContent":["import { sprinkles } from '@plumile/ui/theme/sprinkles.css.js';\n\nexport const form = sprinkles({\n display: 'flex',\n flexDirection: 'column',\n gap: 4,\n});\n\nexport const actions = sprinkles({\n display: 'flex',\n justifyContent: {\n base: 'flex-end',\n sm: 'stretch',\n },\n});\n\nexport const inputHeader = sprinkles({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n flexWrap: 'wrap',\n gap: 2,\n});\n"],"mappings":""}
@@ -1,5 +1,6 @@
1
1
  import { useCallback as e, useContext as t, useMemo as n } from "react";
2
- import { RoutingContext as r, useLocation as i } from "@plumile/router";
2
+ import r from "@plumile/router/routing/RoutingContext.js";
3
+ import i from "@plumile/router/routing/useLocation.js";
3
4
  //#region src/hooks/useBackofficeListUrlState.ts
4
5
  function a(e) {
5
6
  return e.trim() === "" ? new URLSearchParams() : new URLSearchParams(e);
@@ -1 +1 @@
1
- {"version":3,"file":"useBackofficeListUrlState.js","names":[],"sources":["../../../src/hooks/useBackofficeListUrlState.ts"],"sourcesContent":["import { useCallback, useContext, useMemo } from 'react';\nimport { RoutingContext, useLocation } from '@plumile/router';\n\nimport type {\n BackofficeListState,\n BackofficeRuntimeResolvedListFacetConfig,\n} from '@plumile/backoffice-core/types.js';\n\n/** Normalizes a router `location.search` string into URLSearchParams. */\nfunction normalizeSearch(value: string): URLSearchParams {\n if (value.trim() === '') {\n return new URLSearchParams();\n }\n return new URLSearchParams(value);\n}\n\ntype ReturnValue<Where extends Record<string, unknown>, Sort extends string> = {\n state: BackofficeListState<Where, Sort>;\n pushState: (next: BackofficeListState<Where, Sort>) => void;\n};\n\n/** Keeps list state in sync with the URL search params for backoffice pages. */\nexport function useBackofficeListUrlState<\n Where extends Record<string, unknown>,\n Sort extends string,\n>(config: BackofficeRuntimeResolvedListFacetConfig): ReturnValue<Where, Sort> {\n const routing = useContext(RoutingContext);\n const { hash, pathname, search } = useLocation();\n const fallbackState = useMemo(() => {\n return {\n where: null,\n sort: null,\n };\n }, []);\n\n const state = useMemo(() => {\n if (config.listUrlCodec == null) {\n return fallbackState;\n }\n return config.listUrlCodec.parse(\n normalizeSearch(search),\n ) as BackofficeListState<Where, Sort>;\n }, [config.listUrlCodec, fallbackState, search]);\n\n const pushState = useCallback(\n (next: BackofficeListState<Where, Sort>) => {\n if (routing == null) {\n return;\n }\n if (config.listUrlCodec == null) {\n return;\n }\n\n const params = config.listUrlCodec.serialize(next as never);\n const qs = params.toString();\n\n let nextSearch = '';\n if (qs !== '') {\n nextSearch = `?${qs}`;\n }\n\n routing.history.push({\n pathname,\n search: nextSearch,\n hash,\n });\n },\n [config.listUrlCodec, hash, pathname, routing],\n );\n\n return { state, pushState };\n}\n"],"mappings":";;;AASA,SAAS,EAAgB,GAAgC;CAIvD,OAHI,EAAM,MAAM,KAAK,KACZ,IAAI,iBAAiB,GAEvB,IAAI,gBAAgB,EAAM;;AASnC,SAAgB,EAGd,GAA4E;CAC5E,IAAM,IAAU,EAAW,EAAe,EACpC,EAAE,SAAM,aAAU,cAAW,GAAa,EAC1C,IAAgB,SACb;EACL,OAAO;EACP,MAAM;EACP,GACA,EAAE,CAAC;CAqCN,OAAO;EAAE,OAnCK,QACR,EAAO,gBAAgB,OAClB,IAEF,EAAO,aAAa,MACzB,EAAgB,EAAO,CACxB,EACA;GAAC,EAAO;GAAc;GAAe;GAAO,CA4BtC;EAAO,WA1BE,GACf,MAA2C;GAI1C,IAHI,KAAW,QAGX,EAAO,gBAAgB,MACzB;GAIF,IAAM,IADS,EAAO,aAAa,UAAU,EAClC,CAAO,UAAU,EAExB,IAAa;GAKjB,AAJI,MAAO,OACT,IAAa,IAAI,MAGnB,EAAQ,QAAQ,KAAK;IACnB;IACA,QAAQ;IACR;IACD,CAAC;KAEJ;GAAC,EAAO;GAAc;GAAM;GAAU;GAAQ,CAGhC;EAAW"}
1
+ {"version":3,"file":"useBackofficeListUrlState.js","names":[],"sources":["../../../src/hooks/useBackofficeListUrlState.ts"],"sourcesContent":["import { useCallback, useContext, useMemo } from 'react';\nimport RoutingContext from '@plumile/router/routing/RoutingContext.js';\nimport useLocation from '@plumile/router/routing/useLocation.js';\n\nimport type {\n BackofficeListState,\n BackofficeRuntimeResolvedListFacetConfig,\n} from '@plumile/backoffice-core/types.js';\n\n/** Normalizes a router `location.search` string into URLSearchParams. */\nfunction normalizeSearch(value: string): URLSearchParams {\n if (value.trim() === '') {\n return new URLSearchParams();\n }\n return new URLSearchParams(value);\n}\n\ntype ReturnValue<Where extends Record<string, unknown>, Sort extends string> = {\n state: BackofficeListState<Where, Sort>;\n pushState: (next: BackofficeListState<Where, Sort>) => void;\n};\n\n/** Keeps list state in sync with the URL search params for backoffice pages. */\nexport function useBackofficeListUrlState<\n Where extends Record<string, unknown>,\n Sort extends string,\n>(config: BackofficeRuntimeResolvedListFacetConfig): ReturnValue<Where, Sort> {\n const routing = useContext(RoutingContext);\n const { hash, pathname, search } = useLocation();\n const fallbackState = useMemo(() => {\n return {\n where: null,\n sort: null,\n };\n }, []);\n\n const state = useMemo(() => {\n if (config.listUrlCodec == null) {\n return fallbackState;\n }\n return config.listUrlCodec.parse(\n normalizeSearch(search),\n ) as BackofficeListState<Where, Sort>;\n }, [config.listUrlCodec, fallbackState, search]);\n\n const pushState = useCallback(\n (next: BackofficeListState<Where, Sort>) => {\n if (routing == null) {\n return;\n }\n if (config.listUrlCodec == null) {\n return;\n }\n\n const params = config.listUrlCodec.serialize(next as never);\n const qs = params.toString();\n\n let nextSearch = '';\n if (qs !== '') {\n nextSearch = `?${qs}`;\n }\n\n routing.history.push({\n pathname,\n search: nextSearch,\n hash,\n });\n },\n [config.listUrlCodec, hash, pathname, routing],\n );\n\n return { state, pushState };\n}\n"],"mappings":";;;;AAUA,SAAS,EAAgB,GAAgC;CAIvD,OAHI,EAAM,MAAM,KAAK,KACZ,IAAI,iBAAiB,GAEvB,IAAI,gBAAgB,EAAM;;AASnC,SAAgB,EAGd,GAA4E;CAC5E,IAAM,IAAU,EAAW,EAAe,EACpC,EAAE,SAAM,aAAU,cAAW,GAAa,EAC1C,IAAgB,SACb;EACL,OAAO;EACP,MAAM;EACP,GACA,EAAE,CAAC;CAqCN,OAAO;EAAE,OAnCK,QACR,EAAO,gBAAgB,OAClB,IAEF,EAAO,aAAa,MACzB,EAAgB,EAAO,CACxB,EACA;GAAC,EAAO;GAAc;GAAe;GAAO,CA4BtC;EAAO,WA1BE,GACf,MAA2C;GAI1C,IAHI,KAAW,QAGX,EAAO,gBAAgB,MACzB;GAIF,IAAM,IADS,EAAO,aAAa,UAAU,EAClC,CAAO,UAAU,EAExB,IAAa;GAKjB,AAJI,MAAO,OACT,IAAa,IAAI,MAGnB,EAAQ,QAAQ,KAAK;IACnB;IACA,QAAQ;IACR;IACD,CAAC;KAEJ;GAAC,EAAO;GAAc;GAAM;GAAU;GAAQ,CAGhC;EAAW"}
@@ -4,7 +4,7 @@ import { useBackofficeAuth as n } from "../hooks/useBackofficeAuth.js";
4
4
  import { getBackofficeLoginPath as r } from "../router/backofficeAuthPaths.js";
5
5
  import { useCallback as i, useContext as a } from "react";
6
6
  import { jsx as o } from "react/jsx-runtime";
7
- import { RoutingContext as s } from "@plumile/router";
7
+ import s from "@plumile/router/routing/RoutingContext.js";
8
8
  //#region src/pages/BackofficeAcceptInvitationPage.tsx
9
9
  var c = () => {
10
10
  let c = a(s), { basePath: l } = t();
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeAcceptInvitationPage.js","names":[],"sources":["../../../src/pages/BackofficeAcceptInvitationPage.tsx"],"sourcesContent":["import { useCallback, useContext, type JSX } from 'react';\nimport { RoutingContext } from '@plumile/router';\n\nimport { AcceptInvitationScreen } from '../auth/pages/AcceptInvitationScreen.js';\nimport { useBackofficeAuth } from '../hooks/useBackofficeAuth.js';\nimport { useBackofficeConfig } from '../provider/BackofficeConfigContext.js';\nimport { getBackofficeLoginPath } from '../router/backofficeAuthPaths.js';\n\nexport const BackofficeAcceptInvitationPage = (): JSX.Element => {\n const routerContext = useContext(RoutingContext);\n const { basePath } = useBackofficeConfig();\n const auth = useBackofficeAuth();\n\n const handleSuccessRedirect = useCallback(() => {\n routerContext?.history.push({ pathname: basePath });\n }, [basePath, routerContext?.history]);\n\n const handleBackToLogin = useCallback(() => {\n routerContext?.history.push({ pathname: getBackofficeLoginPath(basePath) });\n }, [basePath, routerContext?.history]);\n\n return (\n <AcceptInvitationScreen\n auth={auth}\n onSuccessRedirect={handleSuccessRedirect}\n onBackToLogin={handleBackToLogin}\n />\n );\n};\n\nexport default BackofficeAcceptInvitationPage;\n"],"mappings":";;;;;;;;AAQA,IAAa,UAAoD;CAC/D,IAAM,IAAgB,EAAW,EAAe,EAC1C,EAAE,gBAAa,GAAqB;CAW1C,OACE,kBAAC,GAAD;EACQ,MAZG,GAYH;EACN,mBAX0B,QAAkB;GAC9C,GAAe,QAAQ,KAAK,EAAE,UAAU,GAAU,CAAC;KAClD,CAAC,GAAU,GAAe,QAAQ,CASd;EACnB,eARsB,QAAkB;GAC1C,GAAe,QAAQ,KAAK,EAAE,UAAU,EAAuB,EAAS,EAAE,CAAC;KAC1E,CAAC,GAAU,GAAe,QAAQ,CAMlB;EACf,CAAA"}
1
+ {"version":3,"file":"BackofficeAcceptInvitationPage.js","names":[],"sources":["../../../src/pages/BackofficeAcceptInvitationPage.tsx"],"sourcesContent":["import { useCallback, useContext, type JSX } from 'react';\nimport RoutingContext from '@plumile/router/routing/RoutingContext.js';\n\nimport { AcceptInvitationScreen } from '../auth/pages/AcceptInvitationScreen.js';\nimport { useBackofficeAuth } from '../hooks/useBackofficeAuth.js';\nimport { useBackofficeConfig } from '../provider/BackofficeConfigContext.js';\nimport { getBackofficeLoginPath } from '../router/backofficeAuthPaths.js';\n\nexport const BackofficeAcceptInvitationPage = (): JSX.Element => {\n const routerContext = useContext(RoutingContext);\n const { basePath } = useBackofficeConfig();\n const auth = useBackofficeAuth();\n\n const handleSuccessRedirect = useCallback(() => {\n routerContext?.history.push({ pathname: basePath });\n }, [basePath, routerContext?.history]);\n\n const handleBackToLogin = useCallback(() => {\n routerContext?.history.push({ pathname: getBackofficeLoginPath(basePath) });\n }, [basePath, routerContext?.history]);\n\n return (\n <AcceptInvitationScreen\n auth={auth}\n onSuccessRedirect={handleSuccessRedirect}\n onBackToLogin={handleBackToLogin}\n />\n );\n};\n\nexport default BackofficeAcceptInvitationPage;\n"],"mappings":";;;;;;;;AAQA,IAAa,UAAoD;CAC/D,IAAM,IAAgB,EAAW,EAAe,EAC1C,EAAE,gBAAa,GAAqB;CAW1C,OACE,kBAAC,GAAD;EACQ,MAZG,GAYH;EACN,mBAX0B,QAAkB;GAC9C,GAAe,QAAQ,KAAK,EAAE,UAAU,GAAU,CAAC;KAClD,CAAC,GAAU,GAAe,QAAQ,CASd;EACnB,eARsB,QAAkB;GAC1C,GAAe,QAAQ,KAAK,EAAE,UAAU,EAAuB,EAAS,EAAE,CAAC;KAC1E,CAAC,GAAU,GAAe,QAAQ,CAMlB;EACf,CAAA"}
@@ -12,52 +12,56 @@ import { DashboardQuickActions as f } from "./dashboard/DashboardQuickActions.js
12
12
  import { DashboardStatusList as p } from "./dashboard/DashboardStatusList.js";
13
13
  import { loadingBody as m, tileBody as h, tileCount as g } from "./backofficeDashboardPage.css.js";
14
14
  import { Suspense as _ } from "react";
15
- import { BackofficeEmptyState as v, DashboardGrid as y, DashboardGridItem as b, DataTable as x, DetailPageTemplate as S, Spinner as C } from "@plumile/ui";
16
- import { jsx as w, jsxs as T } from "react/jsx-runtime";
17
- import { useTranslation as E } from "react-i18next";
18
- import * as D from "react-relay";
15
+ import { jsx as v, jsxs as y } from "react/jsx-runtime";
16
+ import { useTranslation as b } from "react-i18next";
17
+ import * as x from "react-relay";
18
+ import { Spinner as S } from "@plumile/ui/backoffice/atoms/spinner/Spinner.js";
19
+ import { BackofficeEmptyState as C } from "@plumile/ui/backoffice/molecules/backoffice_empty_state/BackofficeEmptyState.js";
20
+ import { DetailPageTemplate as w } from "@plumile/ui/backoffice/templates/detail_page_template/DetailPageTemplate.js";
21
+ import { DataTable as T } from "@plumile/ui/components/data-table/DataTable.js";
22
+ import { DashboardGrid as E, DashboardGridItem as D } from "@plumile/ui/components/dashboard/dashboard_grid/DashboardGrid.js";
19
23
  //#region src/pages/BackofficeDashboardPage.tsx
20
- var { useLazyLoadQuery: O } = D, k = () => {
24
+ var { useLazyLoadQuery: O } = x, k = () => {
21
25
  let { t } = e();
22
- return /* @__PURE__ */ w(v, { title: t("common.notAvailable") });
26
+ return /* @__PURE__ */ v(C, { title: t("common.notAvailable") });
23
27
  }, A = () => {
24
28
  let { t } = e();
25
- return /* @__PURE__ */ T("div", {
29
+ return /* @__PURE__ */ y("div", {
26
30
  className: m,
27
- children: [/* @__PURE__ */ w(C, { ariaLabel: t("common.loading") }), /* @__PURE__ */ w("span", { children: t("common.loading") })]
31
+ children: [/* @__PURE__ */ v(S, { ariaLabel: t("common.loading") }), /* @__PURE__ */ v("span", { children: t("common.loading") })]
28
32
  });
29
33
  }, j = (e) => e ?? "m", M = (e) => {
30
34
  if (e.layout?.span != null) return e.layout.span;
31
35
  let t = j(e.size);
32
36
  return t === "s" ? 3 : t === "m" ? 4 : t === "l" ? 6 : t === "xl" ? 8 : 12;
33
37
  }, N = (e) => e.layout?.tabletSpan, P = ({ widget: n, globalData: i }) => {
34
- let { t: a } = E(), { t: o } = e(), { entities: s } = t(), c = n.description == null ? void 0 : l(n.description, a), m = (e) => "resolve" in n && n.resolve != null ? n.resolve(e) : null;
35
- if (n.kind === "textBlock") return /* @__PURE__ */ w(d, {
38
+ let { t: a } = b(), { t: o } = e(), { entities: s } = t(), c = n.description == null ? void 0 : l(n.description, a), m = (e) => "resolve" in n && n.resolve != null ? n.resolve(e) : null;
39
+ if (n.kind === "textBlock") return /* @__PURE__ */ v(d, {
36
40
  title: l(n.title, a),
37
41
  subtitle: c,
38
- children: /* @__PURE__ */ w("div", {
42
+ children: /* @__PURE__ */ v("div", {
39
43
  className: h,
40
44
  children: l(n.body, a)
41
45
  })
42
46
  });
43
47
  if (n.kind === "shortcut") {
44
48
  let e = s[n.entityId], t = l(n.label, a);
45
- return e == null ? /* @__PURE__ */ w(d, {
49
+ return e == null ? /* @__PURE__ */ v(d, {
46
50
  title: t,
47
51
  subtitle: c,
48
- children: /* @__PURE__ */ w(k, {})
49
- }) : e.kind === "tool" ? /* @__PURE__ */ w(d, {
52
+ children: /* @__PURE__ */ v(k, {})
53
+ }) : e.kind === "tool" ? /* @__PURE__ */ v(d, {
50
54
  title: t,
51
55
  subtitle: c,
52
- children: /* @__PURE__ */ w(f, { actions: [{
56
+ children: /* @__PURE__ */ v(f, { actions: [{
53
57
  id: e.id,
54
58
  href: e.routes.list,
55
59
  label: o("dashboard.actions.openTool")
56
60
  }] })
57
- }) : /* @__PURE__ */ w(d, {
61
+ }) : /* @__PURE__ */ v(d, {
58
62
  title: t,
59
63
  subtitle: c,
60
- children: /* @__PURE__ */ w(f, { actions: [{
64
+ children: /* @__PURE__ */ v(f, { actions: [{
61
65
  id: e.id,
62
66
  href: e.routes.list,
63
67
  label: o("dashboard.actions.openList")
@@ -66,19 +70,19 @@ var { useLazyLoadQuery: O } = D, k = () => {
66
70
  }
67
71
  if (n.kind === "tablePreview") {
68
72
  let e = m(i);
69
- if (e == null) return /* @__PURE__ */ w(d, {
73
+ if (e == null) return /* @__PURE__ */ v(d, {
70
74
  title: l(n.title, a),
71
75
  subtitle: c,
72
- children: /* @__PURE__ */ w(k, {})
76
+ children: /* @__PURE__ */ v(k, {})
73
77
  });
74
78
  let t = r(e.columns, {
75
79
  tApp: a,
76
80
  t: o
77
81
  });
78
- return /* @__PURE__ */ w(d, {
82
+ return /* @__PURE__ */ v(d, {
79
83
  title: l(n.title, a),
80
84
  subtitle: c,
81
- children: /* @__PURE__ */ w(x, {
85
+ children: /* @__PURE__ */ v(T, {
82
86
  columns: t,
83
87
  rows: e.rows,
84
88
  getRowId: (e, t) => {
@@ -93,8 +97,8 @@ var { useLazyLoadQuery: O } = D, k = () => {
93
97
  }
94
98
  if (n.kind === "metricGroup") {
95
99
  let e = m(i);
96
- return e == null ? /* @__PURE__ */ w(k, {}) : /* @__PURE__ */ w(u, {
97
- emptyState: /* @__PURE__ */ w(k, {}),
100
+ return e == null ? /* @__PURE__ */ v(k, {}) : /* @__PURE__ */ v(u, {
101
+ emptyState: /* @__PURE__ */ v(k, {}),
98
102
  metrics: e.map((e) => ({
99
103
  id: e.id,
100
104
  href: e.href,
@@ -104,12 +108,12 @@ var { useLazyLoadQuery: O } = D, k = () => {
104
108
  }))
105
109
  });
106
110
  }
107
- if (n.kind === "quickActions") return /* @__PURE__ */ w(d, {
111
+ if (n.kind === "quickActions") return /* @__PURE__ */ v(d, {
108
112
  title: n.title == null ? o("dashboard.actions.openTool") : l(n.title, a),
109
113
  subtitle: c,
110
- children: /* @__PURE__ */ w(f, {
114
+ children: /* @__PURE__ */ v(f, {
111
115
  layout: n.layout?.zone === "aside" ? "stack" : "grid",
112
- emptyState: /* @__PURE__ */ w(k, {}),
116
+ emptyState: /* @__PURE__ */ v(k, {}),
113
117
  actions: n.actions.map((e) => ({
114
118
  id: e.id,
115
119
  href: e.href,
@@ -119,15 +123,15 @@ var { useLazyLoadQuery: O } = D, k = () => {
119
123
  });
120
124
  if (n.kind === "statusSummary") {
121
125
  let e = m(i);
122
- return e == null ? /* @__PURE__ */ w(d, {
126
+ return e == null ? /* @__PURE__ */ v(d, {
123
127
  title: n.title == null ? void 0 : l(n.title, a),
124
128
  subtitle: c,
125
- children: /* @__PURE__ */ w(k, {})
126
- }) : /* @__PURE__ */ w(d, {
129
+ children: /* @__PURE__ */ v(k, {})
130
+ }) : /* @__PURE__ */ v(d, {
127
131
  title: n.title == null ? void 0 : l(n.title, a),
128
132
  subtitle: c,
129
- children: /* @__PURE__ */ w(p, {
130
- emptyState: /* @__PURE__ */ w(k, {}),
133
+ children: /* @__PURE__ */ v(p, {
134
+ emptyState: /* @__PURE__ */ v(k, {}),
131
135
  items: e.map((e) => ({
132
136
  id: e.id,
133
137
  href: e.href,
@@ -137,28 +141,28 @@ var { useLazyLoadQuery: O } = D, k = () => {
137
141
  })
138
142
  });
139
143
  }
140
- if (n.kind === "recentItems") return /* @__PURE__ */ w(d, {
144
+ if (n.kind === "recentItems") return /* @__PURE__ */ v(d, {
141
145
  title: n.title == null ? o("dashboard.title") : l(n.title, a),
142
146
  subtitle: c,
143
- children: /* @__PURE__ */ w(k, {})
147
+ children: /* @__PURE__ */ v(k, {})
144
148
  });
145
149
  let _ = s[n.entityId];
146
- if (_?.kind !== "list-detail") return /* @__PURE__ */ w(d, {
150
+ if (_?.kind !== "list-detail") return /* @__PURE__ */ v(d, {
147
151
  title: l(n.label, a),
148
152
  subtitle: c,
149
- children: /* @__PURE__ */ w(k, {})
153
+ children: /* @__PURE__ */ v(k, {})
150
154
  });
151
- let v = m(i), y = o("common.notAvailable");
152
- return typeof v?.count == "number" && (y = v.count), /* @__PURE__ */ w(d, {
155
+ let x = m(i), S = o("common.notAvailable");
156
+ return typeof x?.count == "number" && (S = x.count), /* @__PURE__ */ v(d, {
153
157
  title: l(n.label, a),
154
158
  subtitle: c,
155
- children: /* @__PURE__ */ T("div", {
159
+ children: /* @__PURE__ */ y("div", {
156
160
  className: h,
157
- children: [/* @__PURE__ */ w("div", {
161
+ children: [/* @__PURE__ */ v("div", {
158
162
  className: g,
159
- children: y
160
- }), /* @__PURE__ */ w(f, {
161
- emptyState: /* @__PURE__ */ w(k, {}),
163
+ children: S
164
+ }), /* @__PURE__ */ v(f, {
165
+ emptyState: /* @__PURE__ */ v(k, {}),
162
166
  actions: [{
163
167
  id: _.id,
164
168
  href: _.routes.list,
@@ -167,36 +171,36 @@ var { useLazyLoadQuery: O } = D, k = () => {
167
171
  })]
168
172
  })
169
173
  });
170
- }, F = ({ widget: e }) => /* @__PURE__ */ w(P, {
174
+ }, F = ({ widget: e }) => /* @__PURE__ */ v(P, {
171
175
  widget: e,
172
176
  globalData: O(e.query, {}, { fetchPolicy: "store-or-network" })
173
177
  }), I = ({ config: t, globalData: r }) => {
174
- let { t: i } = E(), { t: a } = e();
175
- return /* @__PURE__ */ w(S, {
178
+ let { t: i } = b(), { t: a } = e();
179
+ return /* @__PURE__ */ v(w, {
176
180
  header: {
177
181
  title: l(t.title, i),
178
182
  subtitle: (t.subtitle == null ? void 0 : l(t.subtitle, i)) ?? a("dashboard.subtitle")
179
183
  },
180
- children: /* @__PURE__ */ w(y, {
184
+ children: /* @__PURE__ */ v(E, {
181
185
  columns: 12,
182
186
  children: t.widgets.map((e) => {
183
- let a = l(s(e, t), i), o = c(e) ? /* @__PURE__ */ w(F, { widget: e }) : /* @__PURE__ */ w(P, {
187
+ let a = l(s(e, t), i), o = c(e) ? /* @__PURE__ */ v(F, { widget: e }) : /* @__PURE__ */ v(P, {
184
188
  widget: e,
185
189
  globalData: r
186
190
  });
187
- return /* @__PURE__ */ w(b, {
191
+ return /* @__PURE__ */ v(D, {
188
192
  minHeight: e.minHeight ?? "auto",
189
193
  span: M(e),
190
194
  tabletSpan: N(e),
191
- children: /* @__PURE__ */ w(n, {
192
- fallback: () => /* @__PURE__ */ w(d, {
195
+ children: /* @__PURE__ */ v(n, {
196
+ fallback: () => /* @__PURE__ */ v(d, {
193
197
  title: a,
194
- children: /* @__PURE__ */ w(k, {})
198
+ children: /* @__PURE__ */ v(k, {})
195
199
  }),
196
- children: /* @__PURE__ */ w(_, {
197
- fallback: /* @__PURE__ */ w(d, {
200
+ children: /* @__PURE__ */ v(_, {
201
+ fallback: /* @__PURE__ */ v(d, {
198
202
  title: a,
199
- children: /* @__PURE__ */ w(A, {})
203
+ children: /* @__PURE__ */ v(A, {})
200
204
  }),
201
205
  children: o
202
206
  })
@@ -205,35 +209,35 @@ var { useLazyLoadQuery: O } = D, k = () => {
205
209
  })
206
210
  })
207
211
  });
208
- }, L = ({ config: e }) => /* @__PURE__ */ w(I, {
212
+ }, L = ({ config: e }) => /* @__PURE__ */ v(I, {
209
213
  config: e,
210
214
  globalData: O(e.query, {}, { fetchPolicy: "store-or-network" })
211
215
  }), R = () => {
212
- let { t: n } = E(), { t: r } = e(), { entities: s } = t(), c = o(), u = a(r);
216
+ let { t: n } = b(), { t: r } = e(), { entities: s } = t(), c = o(), u = a(r);
213
217
  if (c == null) {
214
218
  let e = Object.values(s).filter((e) => e.kind === "list-detail" && e.hasList).map((e) => ({
215
219
  config: e,
216
220
  label: l(e.label, n)
217
221
  })).sort((e, t) => e.label.localeCompare(t.label));
218
- return /* @__PURE__ */ w(i, {
222
+ return /* @__PURE__ */ v(i, {
219
223
  breadcrumb: u,
220
- children: /* @__PURE__ */ w(S, {
224
+ children: /* @__PURE__ */ v(w, {
221
225
  header: {
222
226
  title: r("dashboard.title"),
223
227
  subtitle: r("dashboard.subtitle")
224
228
  },
225
- children: /* @__PURE__ */ w(y, {
229
+ children: /* @__PURE__ */ v(E, {
226
230
  columns: 12,
227
- children: e.map(({ config: e, label: t }) => /* @__PURE__ */ w(b, {
231
+ children: e.map(({ config: e, label: t }) => /* @__PURE__ */ v(D, {
228
232
  span: 4,
229
- children: /* @__PURE__ */ w(d, {
233
+ children: /* @__PURE__ */ v(d, {
230
234
  title: t,
231
- children: /* @__PURE__ */ T("div", {
235
+ children: /* @__PURE__ */ y("div", {
232
236
  className: h,
233
- children: [/* @__PURE__ */ w("div", {
237
+ children: [/* @__PURE__ */ v("div", {
234
238
  className: g,
235
239
  children: r("common.notAvailable")
236
- }), /* @__PURE__ */ w(f, { actions: [{
240
+ }), /* @__PURE__ */ v(f, { actions: [{
237
241
  id: e.id,
238
242
  href: e.routes.list,
239
243
  label: r("dashboard.actions.openList")
@@ -245,15 +249,15 @@ var { useLazyLoadQuery: O } = D, k = () => {
245
249
  })
246
250
  });
247
251
  }
248
- return c.query == null ? /* @__PURE__ */ w(i, {
252
+ return c.query == null ? /* @__PURE__ */ v(i, {
249
253
  breadcrumb: u,
250
- children: /* @__PURE__ */ w(I, {
254
+ children: /* @__PURE__ */ v(I, {
251
255
  config: c,
252
256
  globalData: null
253
257
  })
254
- }) : /* @__PURE__ */ w(i, {
258
+ }) : /* @__PURE__ */ v(i, {
255
259
  breadcrumb: u,
256
- children: /* @__PURE__ */ w(L, { config: c })
260
+ children: /* @__PURE__ */ v(L, { config: c })
257
261
  });
258
262
  };
259
263
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeDashboardPage.js","names":[],"sources":["../../../src/pages/BackofficeDashboardPage.tsx"],"sourcesContent":["/* eslint-disable no-ternary */\nimport { type JSX, Suspense } from 'react';\nimport type {\n BackofficeDashboardConfig,\n BackofficeDashboardWidget,\n BackofficeDashboardWidgetSpan,\n BackofficeDashboardWidgetTabletSpan,\n BackofficeDashboardWidgetSize,\n I18nLabel,\n} from '@plumile/backoffice-core/types.js';\nimport {\n BackofficeEmptyState,\n DataTable,\n DashboardGrid,\n DashboardGridItem,\n DetailPageTemplate,\n Spinner,\n} from '@plumile/ui';\nimport { useTranslation } from 'react-i18next';\nimport * as ReactRelay from 'react-relay';\nimport type { GraphQLTaggedNode, OperationType } from 'relay-runtime';\n\nimport { BackofficeErrorBoundary } from '../components/backoffice/errors/BackofficeErrorBoundary.js';\nimport { useBackofficeReactTranslation } from '../i18n/useBackofficeReactTranslation.js';\nimport { useBackofficeConfig } from '../provider/BackofficeConfigContext.js';\nimport { useBackofficeDashboardConfig } from '../provider/useBackofficeLazyValue.js';\nimport { buildDataTableColumns } from '../components/backoffice/columns/buildDataTableColumns.js';\nimport { BackofficeRightPageLayout } from '../components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js';\nimport { buildDashboardBreadcrumb } from '../components/backoffice/layout/breadcrumb/buildBreadcrumbs.js';\nimport {\n getWidgetLabel,\n hasWidgetQuery,\n resolveLabel,\n} from './BackofficeDashboardPage.helpers.js';\nimport { DashboardMetricGroup } from './dashboard/DashboardMetricGroup.js';\nimport { DashboardPanel } from './dashboard/DashboardPanel.js';\nimport { DashboardQuickActions } from './dashboard/DashboardQuickActions.js';\nimport { DashboardStatusList } from './dashboard/DashboardStatusList.js';\n\nimport * as styles from './backofficeDashboardPage.css.js';\n\nconst { useLazyLoadQuery } = ReactRelay;\n\ntype WidgetContentProps = {\n widget: BackofficeDashboardWidget;\n globalData: unknown;\n};\n\nconst DashboardUnavailableState = (): JSX.Element => {\n const { t } = useBackofficeReactTranslation();\n\n return <BackofficeEmptyState title={t('common.notAvailable')} />;\n};\n\nconst DashboardLoadingState = (): JSX.Element => {\n const { t } = useBackofficeReactTranslation();\n\n return (\n <div className={styles.loadingBody}>\n <Spinner ariaLabel={t('common.loading')} />\n <span>{t('common.loading')}</span>\n </div>\n );\n};\n\nconst resolveWidgetSize = (\n size: BackofficeDashboardWidgetSize | undefined,\n): BackofficeDashboardWidgetSize => {\n return size ?? 'm';\n};\n\nconst resolveWidgetSpan = (\n widget: BackofficeDashboardWidget,\n): BackofficeDashboardWidgetSpan => {\n if (widget.layout?.span != null) {\n return widget.layout.span;\n }\n\n const size = resolveWidgetSize(widget.size);\n if (size === 's') {\n return 3;\n }\n if (size === 'm') {\n return 4;\n }\n if (size === 'l') {\n return 6;\n }\n if (size === 'xl') {\n return 8;\n }\n return 12;\n};\n\nconst resolveWidgetTabletSpan = (\n widget: BackofficeDashboardWidget,\n): BackofficeDashboardWidgetTabletSpan | undefined => {\n return widget.layout?.tabletSpan;\n};\n\nconst WidgetContent = ({\n widget,\n globalData,\n}: WidgetContentProps): JSX.Element | null => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const { entities } = useBackofficeConfig();\n const description =\n widget.description != null\n ? resolveLabel(widget.description, tApp)\n : undefined;\n\n const resolveData = (data: unknown): unknown => {\n if ('resolve' in widget && widget.resolve != null) {\n return widget.resolve(data);\n }\n return null;\n };\n\n if (widget.kind === 'textBlock') {\n const title = resolveLabel(widget.title, tApp);\n const body = resolveLabel(widget.body, tApp);\n return (\n <DashboardPanel title={title} subtitle={description}>\n <div className={styles.tileBody}>{body}</div>\n </DashboardPanel>\n );\n }\n\n if (widget.kind === 'shortcut') {\n const entity = entities[widget.entityId];\n const title = resolveLabel(widget.label, tApp);\n if (entity == null) {\n return (\n <DashboardPanel title={title} subtitle={description}>\n <DashboardUnavailableState />\n </DashboardPanel>\n );\n }\n if (entity.kind === 'tool') {\n return (\n <DashboardPanel title={title} subtitle={description}>\n <DashboardQuickActions\n actions={[\n {\n id: entity.id,\n href: entity.routes.list,\n label: t('dashboard.actions.openTool'),\n },\n ]}\n />\n </DashboardPanel>\n );\n }\n return (\n <DashboardPanel title={title} subtitle={description}>\n <DashboardQuickActions\n actions={[\n {\n id: entity.id,\n href: entity.routes.list,\n label: t('dashboard.actions.openList'),\n },\n ]}\n />\n </DashboardPanel>\n );\n }\n\n if (widget.kind === 'tablePreview') {\n const resolved = resolveData(globalData) as {\n columns: readonly unknown[];\n rows: readonly unknown[];\n } | null;\n if (resolved == null) {\n return (\n <DashboardPanel\n title={resolveLabel(widget.title, tApp)}\n subtitle={description}\n >\n <DashboardUnavailableState />\n </DashboardPanel>\n );\n }\n const columns = buildDataTableColumns(resolved.columns as never, {\n tApp,\n t,\n });\n const title = resolveLabel(widget.title, tApp);\n return (\n <DashboardPanel title={title} subtitle={description}>\n <DataTable\n columns={columns}\n rows={resolved.rows}\n getRowId={(row, index) => {\n if (row != null && typeof row === 'object') {\n const record = row as Record<string, unknown>;\n const { id } = record;\n if (typeof id === 'string' && id.trim() !== '') {\n return id;\n }\n }\n return String(index);\n }}\n />\n </DashboardPanel>\n );\n }\n\n if (widget.kind === 'metricGroup') {\n const resolved = resolveData(globalData) as\n | readonly {\n id: string;\n label: I18nLabel;\n value: string | number | null;\n meta?: I18nLabel;\n href?: string;\n }[]\n | null;\n if (resolved == null) {\n return <DashboardUnavailableState />;\n }\n return (\n <DashboardMetricGroup\n emptyState={<DashboardUnavailableState />}\n metrics={resolved.map((metric) => {\n return {\n id: metric.id,\n href: metric.href,\n label: resolveLabel(metric.label, tApp),\n value: metric.value ?? t('common.notAvailable'),\n hint:\n metric.meta != null ? resolveLabel(metric.meta, tApp) : undefined,\n };\n })}\n />\n );\n }\n\n if (widget.kind === 'quickActions') {\n const title =\n widget.title != null\n ? resolveLabel(widget.title, tApp)\n : t('dashboard.actions.openTool');\n return (\n <DashboardPanel title={title} subtitle={description}>\n <DashboardQuickActions\n layout={widget.layout?.zone === 'aside' ? 'stack' : 'grid'}\n emptyState={<DashboardUnavailableState />}\n actions={widget.actions.map((action) => {\n return {\n id: action.id,\n href: action.href,\n label: resolveLabel(action.label, tApp),\n };\n })}\n />\n </DashboardPanel>\n );\n }\n\n if (widget.kind === 'statusSummary') {\n const resolved = resolveData(globalData) as\n | readonly {\n id: string;\n label: I18nLabel;\n value: string | number | null;\n href?: string;\n }[]\n | null;\n if (resolved == null) {\n const title =\n widget.title != null ? resolveLabel(widget.title, tApp) : undefined;\n return (\n <DashboardPanel title={title} subtitle={description}>\n <DashboardUnavailableState />\n </DashboardPanel>\n );\n }\n const title =\n widget.title != null ? resolveLabel(widget.title, tApp) : undefined;\n return (\n <DashboardPanel title={title} subtitle={description}>\n <DashboardStatusList\n emptyState={<DashboardUnavailableState />}\n items={resolved.map((item) => {\n return {\n id: item.id,\n href: item.href,\n label: resolveLabel(item.label, tApp),\n value: item.value ?? t('common.notAvailable'),\n };\n })}\n />\n </DashboardPanel>\n );\n }\n\n if (widget.kind === 'recentItems') {\n const title =\n widget.title != null\n ? resolveLabel(widget.title, tApp)\n : t('dashboard.title');\n return (\n <DashboardPanel title={title} subtitle={description}>\n <DashboardUnavailableState />\n </DashboardPanel>\n );\n }\n\n const entityManifest = entities[widget.entityId];\n if (entityManifest?.kind !== 'list-detail') {\n return (\n <DashboardPanel\n title={resolveLabel(widget.label, tApp)}\n subtitle={description}\n >\n <DashboardUnavailableState />\n </DashboardPanel>\n );\n }\n const resolved = resolveData(globalData) as { count: number | null } | null;\n let countLabel: number | string = t('common.notAvailable');\n if (typeof resolved?.count === 'number') {\n countLabel = resolved.count;\n }\n const title = resolveLabel(widget.label, tApp);\n return (\n <DashboardPanel title={title} subtitle={description}>\n <div className={styles.tileBody}>\n <div className={styles.tileCount}>{countLabel}</div>\n <DashboardQuickActions\n emptyState={<DashboardUnavailableState />}\n actions={[\n {\n id: entityManifest.id,\n href: entityManifest.routes.list,\n label: t('dashboard.actions.openList'),\n },\n ]}\n />\n </div>\n </DashboardPanel>\n );\n};\n\ntype WidgetWithQueryProps = {\n widget: BackofficeDashboardWidget & { query: GraphQLTaggedNode };\n};\n\nconst WidgetWithQuery = ({ widget }: WidgetWithQueryProps): JSX.Element => {\n const data = useLazyLoadQuery<OperationType>(\n widget.query,\n {},\n {\n fetchPolicy: 'store-or-network',\n },\n );\n\n return <WidgetContent widget={widget} globalData={data} />;\n};\n\ntype DashboardContentProps = {\n config: BackofficeDashboardConfig;\n globalData: unknown;\n};\n\nconst DashboardContent = ({\n config,\n globalData,\n}: DashboardContentProps): JSX.Element => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n\n const title = resolveLabel(config.title, tApp);\n const subtitle =\n config.subtitle != null ? resolveLabel(config.subtitle, tApp) : undefined;\n\n return (\n <DetailPageTemplate\n header={{\n title,\n subtitle: subtitle ?? t('dashboard.subtitle'),\n }}\n >\n <DashboardGrid columns={12}>\n {config.widgets.map((widget) => {\n const widgetTitle = resolveLabel(\n getWidgetLabel(widget, config),\n tApp,\n );\n const content = hasWidgetQuery(widget) ? (\n <WidgetWithQuery widget={widget} />\n ) : (\n <WidgetContent widget={widget} globalData={globalData} />\n );\n\n return (\n <DashboardGridItem\n key={widget.id}\n minHeight={widget.minHeight ?? 'auto'}\n span={resolveWidgetSpan(widget)}\n tabletSpan={resolveWidgetTabletSpan(widget)}\n >\n <BackofficeErrorBoundary\n fallback={() => {\n return (\n <DashboardPanel title={widgetTitle}>\n <DashboardUnavailableState />\n </DashboardPanel>\n );\n }}\n >\n <Suspense\n fallback={\n <DashboardPanel title={widgetTitle}>\n <DashboardLoadingState />\n </DashboardPanel>\n }\n >\n {content}\n </Suspense>\n </BackofficeErrorBoundary>\n </DashboardGridItem>\n );\n })}\n </DashboardGrid>\n </DetailPageTemplate>\n );\n};\n\ntype DashboardWithQueryProps = {\n config: BackofficeDashboardConfig;\n};\n\nconst DashboardWithQuery = ({\n config,\n}: DashboardWithQueryProps): JSX.Element => {\n const data = useLazyLoadQuery<OperationType>(\n config.query as never,\n {},\n { fetchPolicy: 'store-or-network' },\n );\n\n return <DashboardContent config={config} globalData={data} />;\n};\n\nexport const BackofficeDashboardPage = (): JSX.Element => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const { entities } = useBackofficeConfig();\n const dashboard = useBackofficeDashboardConfig();\n const breadcrumb = buildDashboardBreadcrumb(t);\n\n if (dashboard == null) {\n const items = Object.values(entities)\n .filter((config) => {\n return config.kind === 'list-detail' && config.hasList;\n })\n .map((config) => {\n return {\n config,\n label: resolveLabel(config.label, tApp),\n };\n })\n .sort((left, right) => {\n return left.label.localeCompare(right.label);\n });\n\n return (\n <BackofficeRightPageLayout breadcrumb={breadcrumb}>\n <DetailPageTemplate\n header={{\n title: t('dashboard.title'),\n subtitle: t('dashboard.subtitle'),\n }}\n >\n <DashboardGrid columns={12}>\n {items.map(({ config, label }) => {\n return (\n <DashboardGridItem key={config.id} span={4}>\n <DashboardPanel title={label}>\n <div className={styles.tileBody}>\n <div className={styles.tileCount}>\n {t('common.notAvailable')}\n </div>\n <DashboardQuickActions\n actions={[\n {\n id: config.id,\n href: config.routes.list,\n label: t('dashboard.actions.openList'),\n },\n ]}\n />\n </div>\n </DashboardPanel>\n </DashboardGridItem>\n );\n })}\n </DashboardGrid>\n </DetailPageTemplate>\n </BackofficeRightPageLayout>\n );\n }\n\n if (dashboard.query != null) {\n return (\n <BackofficeRightPageLayout breadcrumb={breadcrumb}>\n <DashboardWithQuery config={dashboard} />\n </BackofficeRightPageLayout>\n );\n }\n\n return (\n <BackofficeRightPageLayout breadcrumb={breadcrumb}>\n <DashboardContent config={dashboard} globalData={null} />\n </BackofficeRightPageLayout>\n );\n};\n\nexport default BackofficeDashboardPage;\n"],"mappings":"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"}
1
+ {"version":3,"file":"BackofficeDashboardPage.js","names":[],"sources":["../../../src/pages/BackofficeDashboardPage.tsx"],"sourcesContent":["/* eslint-disable no-ternary */\nimport { type JSX, Suspense } from 'react';\nimport type {\n BackofficeDashboardConfig,\n BackofficeDashboardWidget,\n BackofficeDashboardWidgetSpan,\n BackofficeDashboardWidgetTabletSpan,\n BackofficeDashboardWidgetSize,\n I18nLabel,\n} from '@plumile/backoffice-core/types.js';\nimport { Spinner } from '@plumile/ui/backoffice/atoms/spinner/Spinner.js';\nimport { BackofficeEmptyState } from '@plumile/ui/backoffice/molecules/backoffice_empty_state/BackofficeEmptyState.js';\nimport { DetailPageTemplate } from '@plumile/ui/backoffice/templates/detail_page_template/DetailPageTemplate.js';\nimport {\n DashboardGrid,\n DashboardGridItem,\n} from '@plumile/ui/components/dashboard/dashboard_grid/DashboardGrid.js';\nimport { DataTable } from '@plumile/ui/components/data-table/DataTable.js';\nimport { useTranslation } from 'react-i18next';\nimport * as ReactRelay from 'react-relay';\nimport type { GraphQLTaggedNode, OperationType } from 'relay-runtime';\n\nimport { BackofficeErrorBoundary } from '../components/backoffice/errors/BackofficeErrorBoundary.js';\nimport { useBackofficeReactTranslation } from '../i18n/useBackofficeReactTranslation.js';\nimport { useBackofficeConfig } from '../provider/BackofficeConfigContext.js';\nimport { useBackofficeDashboardConfig } from '../provider/useBackofficeLazyValue.js';\nimport { buildDataTableColumns } from '../components/backoffice/columns/buildDataTableColumns.js';\nimport { BackofficeRightPageLayout } from '../components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js';\nimport { buildDashboardBreadcrumb } from '../components/backoffice/layout/breadcrumb/buildBreadcrumbs.js';\nimport {\n getWidgetLabel,\n hasWidgetQuery,\n resolveLabel,\n} from './BackofficeDashboardPage.helpers.js';\nimport { DashboardMetricGroup } from './dashboard/DashboardMetricGroup.js';\nimport { DashboardPanel } from './dashboard/DashboardPanel.js';\nimport { DashboardQuickActions } from './dashboard/DashboardQuickActions.js';\nimport { DashboardStatusList } from './dashboard/DashboardStatusList.js';\n\nimport * as styles from './backofficeDashboardPage.css.js';\n\nconst { useLazyLoadQuery } = ReactRelay;\n\ntype WidgetContentProps = {\n widget: BackofficeDashboardWidget;\n globalData: unknown;\n};\n\nconst DashboardUnavailableState = (): JSX.Element => {\n const { t } = useBackofficeReactTranslation();\n\n return <BackofficeEmptyState title={t('common.notAvailable')} />;\n};\n\nconst DashboardLoadingState = (): JSX.Element => {\n const { t } = useBackofficeReactTranslation();\n\n return (\n <div className={styles.loadingBody}>\n <Spinner ariaLabel={t('common.loading')} />\n <span>{t('common.loading')}</span>\n </div>\n );\n};\n\nconst resolveWidgetSize = (\n size: BackofficeDashboardWidgetSize | undefined,\n): BackofficeDashboardWidgetSize => {\n return size ?? 'm';\n};\n\nconst resolveWidgetSpan = (\n widget: BackofficeDashboardWidget,\n): BackofficeDashboardWidgetSpan => {\n if (widget.layout?.span != null) {\n return widget.layout.span;\n }\n\n const size = resolveWidgetSize(widget.size);\n if (size === 's') {\n return 3;\n }\n if (size === 'm') {\n return 4;\n }\n if (size === 'l') {\n return 6;\n }\n if (size === 'xl') {\n return 8;\n }\n return 12;\n};\n\nconst resolveWidgetTabletSpan = (\n widget: BackofficeDashboardWidget,\n): BackofficeDashboardWidgetTabletSpan | undefined => {\n return widget.layout?.tabletSpan;\n};\n\nconst WidgetContent = ({\n widget,\n globalData,\n}: WidgetContentProps): JSX.Element | null => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const { entities } = useBackofficeConfig();\n const description =\n widget.description != null\n ? resolveLabel(widget.description, tApp)\n : undefined;\n\n const resolveData = (data: unknown): unknown => {\n if ('resolve' in widget && widget.resolve != null) {\n return widget.resolve(data);\n }\n return null;\n };\n\n if (widget.kind === 'textBlock') {\n const title = resolveLabel(widget.title, tApp);\n const body = resolveLabel(widget.body, tApp);\n return (\n <DashboardPanel title={title} subtitle={description}>\n <div className={styles.tileBody}>{body}</div>\n </DashboardPanel>\n );\n }\n\n if (widget.kind === 'shortcut') {\n const entity = entities[widget.entityId];\n const title = resolveLabel(widget.label, tApp);\n if (entity == null) {\n return (\n <DashboardPanel title={title} subtitle={description}>\n <DashboardUnavailableState />\n </DashboardPanel>\n );\n }\n if (entity.kind === 'tool') {\n return (\n <DashboardPanel title={title} subtitle={description}>\n <DashboardQuickActions\n actions={[\n {\n id: entity.id,\n href: entity.routes.list,\n label: t('dashboard.actions.openTool'),\n },\n ]}\n />\n </DashboardPanel>\n );\n }\n return (\n <DashboardPanel title={title} subtitle={description}>\n <DashboardQuickActions\n actions={[\n {\n id: entity.id,\n href: entity.routes.list,\n label: t('dashboard.actions.openList'),\n },\n ]}\n />\n </DashboardPanel>\n );\n }\n\n if (widget.kind === 'tablePreview') {\n const resolved = resolveData(globalData) as {\n columns: readonly unknown[];\n rows: readonly unknown[];\n } | null;\n if (resolved == null) {\n return (\n <DashboardPanel\n title={resolveLabel(widget.title, tApp)}\n subtitle={description}\n >\n <DashboardUnavailableState />\n </DashboardPanel>\n );\n }\n const columns = buildDataTableColumns(resolved.columns as never, {\n tApp,\n t,\n });\n const title = resolveLabel(widget.title, tApp);\n return (\n <DashboardPanel title={title} subtitle={description}>\n <DataTable\n columns={columns}\n rows={resolved.rows}\n getRowId={(row, index) => {\n if (row != null && typeof row === 'object') {\n const record = row as Record<string, unknown>;\n const { id } = record;\n if (typeof id === 'string' && id.trim() !== '') {\n return id;\n }\n }\n return String(index);\n }}\n />\n </DashboardPanel>\n );\n }\n\n if (widget.kind === 'metricGroup') {\n const resolved = resolveData(globalData) as\n | readonly {\n id: string;\n label: I18nLabel;\n value: string | number | null;\n meta?: I18nLabel;\n href?: string;\n }[]\n | null;\n if (resolved == null) {\n return <DashboardUnavailableState />;\n }\n return (\n <DashboardMetricGroup\n emptyState={<DashboardUnavailableState />}\n metrics={resolved.map((metric) => {\n return {\n id: metric.id,\n href: metric.href,\n label: resolveLabel(metric.label, tApp),\n value: metric.value ?? t('common.notAvailable'),\n hint:\n metric.meta != null ? resolveLabel(metric.meta, tApp) : undefined,\n };\n })}\n />\n );\n }\n\n if (widget.kind === 'quickActions') {\n const title =\n widget.title != null\n ? resolveLabel(widget.title, tApp)\n : t('dashboard.actions.openTool');\n return (\n <DashboardPanel title={title} subtitle={description}>\n <DashboardQuickActions\n layout={widget.layout?.zone === 'aside' ? 'stack' : 'grid'}\n emptyState={<DashboardUnavailableState />}\n actions={widget.actions.map((action) => {\n return {\n id: action.id,\n href: action.href,\n label: resolveLabel(action.label, tApp),\n };\n })}\n />\n </DashboardPanel>\n );\n }\n\n if (widget.kind === 'statusSummary') {\n const resolved = resolveData(globalData) as\n | readonly {\n id: string;\n label: I18nLabel;\n value: string | number | null;\n href?: string;\n }[]\n | null;\n if (resolved == null) {\n const title =\n widget.title != null ? resolveLabel(widget.title, tApp) : undefined;\n return (\n <DashboardPanel title={title} subtitle={description}>\n <DashboardUnavailableState />\n </DashboardPanel>\n );\n }\n const title =\n widget.title != null ? resolveLabel(widget.title, tApp) : undefined;\n return (\n <DashboardPanel title={title} subtitle={description}>\n <DashboardStatusList\n emptyState={<DashboardUnavailableState />}\n items={resolved.map((item) => {\n return {\n id: item.id,\n href: item.href,\n label: resolveLabel(item.label, tApp),\n value: item.value ?? t('common.notAvailable'),\n };\n })}\n />\n </DashboardPanel>\n );\n }\n\n if (widget.kind === 'recentItems') {\n const title =\n widget.title != null\n ? resolveLabel(widget.title, tApp)\n : t('dashboard.title');\n return (\n <DashboardPanel title={title} subtitle={description}>\n <DashboardUnavailableState />\n </DashboardPanel>\n );\n }\n\n const entityManifest = entities[widget.entityId];\n if (entityManifest?.kind !== 'list-detail') {\n return (\n <DashboardPanel\n title={resolveLabel(widget.label, tApp)}\n subtitle={description}\n >\n <DashboardUnavailableState />\n </DashboardPanel>\n );\n }\n const resolved = resolveData(globalData) as { count: number | null } | null;\n let countLabel: number | string = t('common.notAvailable');\n if (typeof resolved?.count === 'number') {\n countLabel = resolved.count;\n }\n const title = resolveLabel(widget.label, tApp);\n return (\n <DashboardPanel title={title} subtitle={description}>\n <div className={styles.tileBody}>\n <div className={styles.tileCount}>{countLabel}</div>\n <DashboardQuickActions\n emptyState={<DashboardUnavailableState />}\n actions={[\n {\n id: entityManifest.id,\n href: entityManifest.routes.list,\n label: t('dashboard.actions.openList'),\n },\n ]}\n />\n </div>\n </DashboardPanel>\n );\n};\n\ntype WidgetWithQueryProps = {\n widget: BackofficeDashboardWidget & { query: GraphQLTaggedNode };\n};\n\nconst WidgetWithQuery = ({ widget }: WidgetWithQueryProps): JSX.Element => {\n const data = useLazyLoadQuery<OperationType>(\n widget.query,\n {},\n {\n fetchPolicy: 'store-or-network',\n },\n );\n\n return <WidgetContent widget={widget} globalData={data} />;\n};\n\ntype DashboardContentProps = {\n config: BackofficeDashboardConfig;\n globalData: unknown;\n};\n\nconst DashboardContent = ({\n config,\n globalData,\n}: DashboardContentProps): JSX.Element => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n\n const title = resolveLabel(config.title, tApp);\n const subtitle =\n config.subtitle != null ? resolveLabel(config.subtitle, tApp) : undefined;\n\n return (\n <DetailPageTemplate\n header={{\n title,\n subtitle: subtitle ?? t('dashboard.subtitle'),\n }}\n >\n <DashboardGrid columns={12}>\n {config.widgets.map((widget) => {\n const widgetTitle = resolveLabel(\n getWidgetLabel(widget, config),\n tApp,\n );\n const content = hasWidgetQuery(widget) ? (\n <WidgetWithQuery widget={widget} />\n ) : (\n <WidgetContent widget={widget} globalData={globalData} />\n );\n\n return (\n <DashboardGridItem\n key={widget.id}\n minHeight={widget.minHeight ?? 'auto'}\n span={resolveWidgetSpan(widget)}\n tabletSpan={resolveWidgetTabletSpan(widget)}\n >\n <BackofficeErrorBoundary\n fallback={() => {\n return (\n <DashboardPanel title={widgetTitle}>\n <DashboardUnavailableState />\n </DashboardPanel>\n );\n }}\n >\n <Suspense\n fallback={\n <DashboardPanel title={widgetTitle}>\n <DashboardLoadingState />\n </DashboardPanel>\n }\n >\n {content}\n </Suspense>\n </BackofficeErrorBoundary>\n </DashboardGridItem>\n );\n })}\n </DashboardGrid>\n </DetailPageTemplate>\n );\n};\n\ntype DashboardWithQueryProps = {\n config: BackofficeDashboardConfig;\n};\n\nconst DashboardWithQuery = ({\n config,\n}: DashboardWithQueryProps): JSX.Element => {\n const data = useLazyLoadQuery<OperationType>(\n config.query as never,\n {},\n { fetchPolicy: 'store-or-network' },\n );\n\n return <DashboardContent config={config} globalData={data} />;\n};\n\nexport const BackofficeDashboardPage = (): JSX.Element => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const { entities } = useBackofficeConfig();\n const dashboard = useBackofficeDashboardConfig();\n const breadcrumb = buildDashboardBreadcrumb(t);\n\n if (dashboard == null) {\n const items = Object.values(entities)\n .filter((config) => {\n return config.kind === 'list-detail' && config.hasList;\n })\n .map((config) => {\n return {\n config,\n label: resolveLabel(config.label, tApp),\n };\n })\n .sort((left, right) => {\n return left.label.localeCompare(right.label);\n });\n\n return (\n <BackofficeRightPageLayout breadcrumb={breadcrumb}>\n <DetailPageTemplate\n header={{\n title: t('dashboard.title'),\n subtitle: t('dashboard.subtitle'),\n }}\n >\n <DashboardGrid columns={12}>\n {items.map(({ config, label }) => {\n return (\n <DashboardGridItem key={config.id} span={4}>\n <DashboardPanel title={label}>\n <div className={styles.tileBody}>\n <div className={styles.tileCount}>\n {t('common.notAvailable')}\n </div>\n <DashboardQuickActions\n actions={[\n {\n id: config.id,\n href: config.routes.list,\n label: t('dashboard.actions.openList'),\n },\n ]}\n />\n </div>\n </DashboardPanel>\n </DashboardGridItem>\n );\n })}\n </DashboardGrid>\n </DetailPageTemplate>\n </BackofficeRightPageLayout>\n );\n }\n\n if (dashboard.query != null) {\n return (\n <BackofficeRightPageLayout breadcrumb={breadcrumb}>\n <DashboardWithQuery config={dashboard} />\n </BackofficeRightPageLayout>\n );\n }\n\n return (\n <BackofficeRightPageLayout breadcrumb={breadcrumb}>\n <DashboardContent config={dashboard} globalData={null} />\n </BackofficeRightPageLayout>\n );\n};\n\nexport default BackofficeDashboardPage;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAyCA,IAAM,EAAE,kBAAA,MAAqB,GAOvB,UAA+C;CACnD,IAAM,EAAE,MAAM,GAA+B;CAE7C,OAAO,kBAAC,GAAD,EAAsB,OAAO,EAAE,sBAAsB,EAAI,CAAA;GAG5D,UAA2C;CAC/C,IAAM,EAAE,MAAM,GAA+B;CAE7C,OACE,kBAAC,OAAD;EAAK,WAAW;YAAhB,CACE,kBAAC,GAAD,EAAS,WAAW,EAAE,iBAAiB,EAAI,CAAA,EAC3C,kBAAC,QAAD,EAAA,UAAO,EAAE,iBAAiB,EAAQ,CAAA,CAC9B;;GAIJ,KACJ,MAEO,KAAQ,KAGX,KACJ,MACkC;CAClC,IAAI,EAAO,QAAQ,QAAQ,MACzB,OAAO,EAAO,OAAO;CAGvB,IAAM,IAAO,EAAkB,EAAO,KAAK;CAa3C,OAZI,MAAS,MACJ,IAEL,MAAS,MACJ,IAEL,MAAS,MACJ,IAEL,MAAS,OACJ,IAEF;GAGH,KACJ,MAEO,EAAO,QAAQ,YAGlB,KAAiB,EACrB,WACA,oBAC4C;CAC5C,IAAM,EAAE,GAAG,MAAS,GAAgB,EAC9B,EAAE,SAAM,GAA+B,EACvC,EAAE,gBAAa,GAAqB,EACpC,IACJ,EAAO,eAAe,OAElB,KAAA,IADA,EAAa,EAAO,aAAa,EAAK,EAGtC,KAAe,MACf,aAAa,KAAU,EAAO,WAAW,OACpC,EAAO,QAAQ,EAAK,GAEtB;CAGT,IAAI,EAAO,SAAS,aAGlB,OACE,kBAAC,GAAD;EAAuB,OAHX,EAAa,EAAO,OAAO,EAGhB;EAAO,UAAU;YACtC,kBAAC,OAAD;GAAK,WAAW;aAHP,EAAa,EAAO,MAAM,EAGD;GAAW,CAAA;EAC9B,CAAA;CAIrB,IAAI,EAAO,SAAS,YAAY;EAC9B,IAAM,IAAS,EAAS,EAAO,WACzB,IAAQ,EAAa,EAAO,OAAO,EAAK;EAuB9C,OAtBI,KAAU,OAEV,kBAAC,GAAD;GAAuB;GAAO,UAAU;aACtC,kBAAC,GAAD,EAA6B,CAAA;GACd,CAAA,GAGjB,EAAO,SAAS,SAEhB,kBAAC,GAAD;GAAuB;GAAO,UAAU;aACtC,kBAAC,GAAD,EACE,SAAS,CACP;IACE,IAAI,EAAO;IACX,MAAM,EAAO,OAAO;IACpB,OAAO,EAAE,6BAA6B;IACvC,CACF,EACD,CAAA;GACa,CAAA,GAInB,kBAAC,GAAD;GAAuB;GAAO,UAAU;aACtC,kBAAC,GAAD,EACE,SAAS,CACP;IACE,IAAI,EAAO;IACX,MAAM,EAAO,OAAO;IACpB,OAAO,EAAE,6BAA6B;IACvC,CACF,EACD,CAAA;GACa,CAAA;;CAIrB,IAAI,EAAO,SAAS,gBAAgB;EAClC,IAAM,IAAW,EAAY,EAAW;EAIxC,IAAI,KAAY,MACd,OACE,kBAAC,GAAD;GACE,OAAO,EAAa,EAAO,OAAO,EAAK;GACvC,UAAU;aAEV,kBAAC,GAAD,EAA6B,CAAA;GACd,CAAA;EAGrB,IAAM,IAAU,EAAsB,EAAS,SAAkB;GAC/D;GACA;GACD,CAAC;EAEF,OACE,kBAAC,GAAD;GAAuB,OAFX,EAAa,EAAO,OAAO,EAEhB;GAAO,UAAU;aACtC,kBAAC,GAAD;IACW;IACT,MAAM,EAAS;IACf,WAAW,GAAK,MAAU;KACxB,IAAmB,OAAO,KAAQ,YAA9B,GAAwC;MAE1C,IAAM,EAAE,UAAO;MACf,IAAI,OAAO,KAAO,YAAY,EAAG,MAAM,KAAK,IAC1C,OAAO;;KAGX,OAAO,OAAO,EAAM;;IAEtB,CAAA;GACa,CAAA;;CAIrB,IAAI,EAAO,SAAS,eAAe;EACjC,IAAM,IAAW,EAAY,EAAW;EAYxC,OAHI,KAAY,OACP,kBAAC,GAAD,EAA6B,CAAA,GAGpC,kBAAC,GAAD;GACE,YAAY,kBAAC,GAAD,EAA6B,CAAA;GACzC,SAAS,EAAS,KAAK,OACd;IACL,IAAI,EAAO;IACX,MAAM,EAAO;IACb,OAAO,EAAa,EAAO,OAAO,EAAK;IACvC,OAAO,EAAO,SAAS,EAAE,sBAAsB;IAC/C,MACE,EAAO,QAAQ,OAAyC,KAAA,IAAlC,EAAa,EAAO,MAAM,EAAK;IACxD,EACD;GACF,CAAA;;CAIN,IAAI,EAAO,SAAS,gBAKlB,OACE,kBAAC,GAAD;EAAuB,OAJvB,EAAO,SAAS,OAEZ,EAAE,6BAA6B,GAD/B,EAAa,EAAO,OAAO,EAAK;EAGN,UAAU;YACtC,kBAAC,GAAD;GACE,QAAQ,EAAO,QAAQ,SAAS,UAAU,UAAU;GACpD,YAAY,kBAAC,GAAD,EAA6B,CAAA;GACzC,SAAS,EAAO,QAAQ,KAAK,OACpB;IACL,IAAI,EAAO;IACX,MAAM,EAAO;IACb,OAAO,EAAa,EAAO,OAAO,EAAK;IACxC,EACD;GACF,CAAA;EACa,CAAA;CAIrB,IAAI,EAAO,SAAS,iBAAiB;EACnC,IAAM,IAAW,EAAY,EAAW;EAmBxC,OAXI,KAAY,OAIZ,kBAAC,GAAD;GAAuB,OAFvB,EAAO,SAAS,OAA0C,KAAA,IAAnC,EAAa,EAAO,OAAO,EAAK;GAEzB,UAAU;aACtC,kBAAC,GAAD,EAA6B,CAAA;GACd,CAAA,GAMnB,kBAAC,GAAD;GAAuB,OAFvB,EAAO,SAAS,OAA0C,KAAA,IAAnC,EAAa,EAAO,OAAO,EAAK;GAEzB,UAAU;aACtC,kBAAC,GAAD;IACE,YAAY,kBAAC,GAAD,EAA6B,CAAA;IACzC,OAAO,EAAS,KAAK,OACZ;KACL,IAAI,EAAK;KACT,MAAM,EAAK;KACX,OAAO,EAAa,EAAK,OAAO,EAAK;KACrC,OAAO,EAAK,SAAS,EAAE,sBAAsB;KAC9C,EACD;IACF,CAAA;GACa,CAAA;;CAIrB,IAAI,EAAO,SAAS,eAKlB,OACE,kBAAC,GAAD;EAAuB,OAJvB,EAAO,SAAS,OAEZ,EAAE,kBAAkB,GADpB,EAAa,EAAO,OAAO,EAAK;EAGN,UAAU;YACtC,kBAAC,GAAD,EAA6B,CAAA;EACd,CAAA;CAIrB,IAAM,IAAiB,EAAS,EAAO;CACvC,IAAI,GAAgB,SAAS,eAC3B,OACE,kBAAC,GAAD;EACE,OAAO,EAAa,EAAO,OAAO,EAAK;EACvC,UAAU;YAEV,kBAAC,GAAD,EAA6B,CAAA;EACd,CAAA;CAGrB,IAAM,IAAW,EAAY,EAAW,EACpC,IAA8B,EAAE,sBAAsB;CAK1D,OAJI,OAAO,GAAU,SAAU,aAC7B,IAAa,EAAS,QAItB,kBAAC,GAAD;EAAuB,OAFX,EAAa,EAAO,OAAO,EAEhB;EAAO,UAAU;YACtC,kBAAC,OAAD;GAAK,WAAW;aAAhB,CACE,kBAAC,OAAD;IAAK,WAAW;cAAmB;IAAiB,CAAA,EACpD,kBAAC,GAAD;IACE,YAAY,kBAAC,GAAD,EAA6B,CAAA;IACzC,SAAS,CACP;KACE,IAAI,EAAe;KACnB,MAAM,EAAe,OAAO;KAC5B,OAAO,EAAE,6BAA6B;KACvC,CACF;IACD,CAAA,CACE;;EACS,CAAA;GAQf,KAAmB,EAAE,gBASlB,kBAAC,GAAD;CAAuB;CAAQ,YARzB,EACX,EAAO,OACP,EAAE,EACF,EACE,aAAa,oBACd,CAG+C;CAAQ,CAAA,EAQtD,KAAoB,EACxB,WACA,oBACwC;CACxC,IAAM,EAAE,GAAG,MAAS,GAAgB,EAC9B,EAAE,SAAM,GAA+B;CAM7C,OACE,kBAAC,GAAD;EACE,QAAQ;GACN,OAPQ,EAAa,EAAO,OAAO,EAOnC;GACA,WANJ,EAAO,YAAY,OAA6C,KAAA,IAAtC,EAAa,EAAO,UAAU,EAAK,KAMnC,EAAE,qBAAqB;GAC9C;YAED,kBAAC,GAAD;GAAe,SAAS;aACrB,EAAO,QAAQ,KAAK,MAAW;IAC9B,IAAM,IAAc,EAClB,EAAe,GAAQ,EAAO,EAC9B,EACD,EACK,IAAU,EAAe,EAAO,GACpC,kBAAC,GAAD,EAAyB,WAAU,CAAA,GAEnC,kBAAC,GAAD;KAAuB;KAAoB;KAAc,CAAA;IAG3D,OACE,kBAAC,GAAD;KAEE,WAAW,EAAO,aAAa;KAC/B,MAAM,EAAkB,EAAO;KAC/B,YAAY,EAAwB,EAAO;eAE3C,kBAAC,GAAD;MACE,gBAEI,kBAAC,GAAD;OAAgB,OAAO;iBACrB,kBAAC,GAAD,EAA6B,CAAA;OACd,CAAA;gBAIrB,kBAAC,GAAD;OACE,UACE,kBAAC,GAAD;QAAgB,OAAO;kBACrB,kBAAC,GAAD,EAAyB,CAAA;QACV,CAAA;iBAGlB;OACQ,CAAA;MACa,CAAA;KACR,EAxBb,EAAO,GAwBM;KAEtB;GACY,CAAA;EACG,CAAA;GAQnB,KAAsB,EAC1B,gBAQO,kBAAC,GAAD;CAA0B;CAAQ,YAN5B,EACX,EAAO,OACP,EAAE,EACF,EAAE,aAAa,oBAAoB,CAGgB;CAAQ,CAAA,EAGlD,UAA6C;CACxD,IAAM,EAAE,GAAG,MAAS,GAAgB,EAC9B,EAAE,SAAM,GAA+B,EACvC,EAAE,gBAAa,GAAqB,EACpC,IAAY,GAA8B,EAC1C,IAAa,EAAyB,EAAE;CAE9C,IAAI,KAAa,MAAM;EACrB,IAAM,IAAQ,OAAO,OAAO,EAAS,CAClC,QAAQ,MACA,EAAO,SAAS,iBAAiB,EAAO,QAC/C,CACD,KAAK,OACG;GACL;GACA,OAAO,EAAa,EAAO,OAAO,EAAK;GACxC,EACD,CACD,MAAM,GAAM,MACJ,EAAK,MAAM,cAAc,EAAM,MAAM,CAC5C;EAEJ,OACE,kBAAC,GAAD;GAAuC;aACrC,kBAAC,GAAD;IACE,QAAQ;KACN,OAAO,EAAE,kBAAkB;KAC3B,UAAU,EAAE,qBAAqB;KAClC;cAED,kBAAC,GAAD;KAAe,SAAS;eACrB,EAAM,KAAK,EAAE,WAAQ,eAElB,kBAAC,GAAD;MAAmC,MAAM;gBACvC,kBAAC,GAAD;OAAgB,OAAO;iBACrB,kBAAC,OAAD;QAAK,WAAW;kBAAhB,CACE,kBAAC,OAAD;SAAK,WAAW;mBACb,EAAE,sBAAsB;SACrB,CAAA,EACN,kBAAC,GAAD,EACE,SAAS,CACP;SACE,IAAI,EAAO;SACX,MAAM,EAAO,OAAO;SACpB,OAAO,EAAE,6BAA6B;SACvC,CACF,EACD,CAAA,CACE;;OACS,CAAA;MACC,EAjBI,EAAO,GAiBX,CAEtB;KACY,CAAA;IACG,CAAA;GACK,CAAA;;CAYhC,OARI,EAAU,SAAS,OASrB,kBAAC,GAAD;EAAuC;YACrC,kBAAC,GAAD;GAAkB,QAAQ;GAAW,YAAY;GAAQ,CAAA;EAC/B,CAAA,GAT1B,kBAAC,GAAD;EAAuC;YACrC,kBAAC,GAAD,EAAoB,QAAQ,GAAa,CAAA;EACf,CAAA"}
@@ -1,7 +1,7 @@
1
1
  import { BackofficeEntityDetailLayoutContextProvider as e } from "./detail/BackofficeEntityDetailLayoutContext.js";
2
2
  import { Fragment as t, jsx as n } from "react/jsx-runtime";
3
3
  import * as r from "react-relay";
4
- import { HttpRedirect as i } from "@plumile/router";
4
+ import i from "@plumile/router/errors/HttpRedirect.js";
5
5
  //#region src/pages/BackofficeEntityDetailLayoutPage.tsx
6
6
  var { useFragment: a, usePreloadedQuery: o } = r, s = ({ config: r, prepared: s, children: c }) => {
7
7
  let l = o(r.layoutPage.query, s.layoutQuery), u = r.layoutPage.resolveNode(l, { id: s.id });
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeEntityDetailLayoutPage.js","names":[],"sources":["../../../src/pages/BackofficeEntityDetailLayoutPage.tsx"],"sourcesContent":["import { type JSX, type ReactNode } from 'react';\nimport { HttpRedirect } from '@plumile/router';\nimport * as ReactRelay from 'react-relay';\n\nimport type {\n BackofficeEntityManifestItem,\n BackofficePreparedDetailLayoutRoute,\n BackofficeResolvedDetailLayoutFacetConfig,\n} from '@plumile/backoffice-core/types.js';\nimport { BackofficeEntityDetailLayoutContextProvider } from './detail/BackofficeEntityDetailLayoutContext.js';\n\nconst { useFragment, usePreloadedQuery } = ReactRelay;\n\nexport type BackofficeEntityDetailLayoutPageProps = {\n entityManifest: BackofficeEntityManifestItem;\n config: BackofficeResolvedDetailLayoutFacetConfig;\n prepared: BackofficePreparedDetailLayoutRoute;\n children?: ReactNode;\n};\n\nexport const BackofficeEntityDetailLayoutPage = ({\n config,\n prepared,\n children,\n}: BackofficeEntityDetailLayoutPageProps): JSX.Element => {\n const layoutQueryData = usePreloadedQuery(\n config.layoutPage.query,\n prepared.layoutQuery,\n );\n const layoutNodeRef = config.layoutPage.resolveNode(layoutQueryData, {\n id: prepared.id,\n });\n if (layoutNodeRef == null) {\n throw new HttpRedirect(config.routes.list);\n }\n\n const layoutNode = useFragment(\n config.layoutPage.fragment,\n layoutNodeRef as never,\n );\n\n const layoutView = config.layoutPage.toView(layoutNode);\n\n return (\n <BackofficeEntityDetailLayoutContextProvider\n value={{\n layoutView,\n }}\n >\n <>{children}</>\n </BackofficeEntityDetailLayoutContextProvider>\n );\n};\n\nexport default BackofficeEntityDetailLayoutPage;\n"],"mappings":";;;;;AAWA,IAAM,EAAE,aAAA,GAAa,mBAAA,MAAsB,GAS9B,KAAoC,EAC/C,WACA,aACA,kBACwD;CACxD,IAAM,IAAkB,EACtB,EAAO,WAAW,OAClB,EAAS,YACV,EACK,IAAgB,EAAO,WAAW,YAAY,GAAiB,EACnE,IAAI,EAAS,IACd,CAAC;CACF,IAAI,KAAiB,MACnB,MAAM,IAAI,EAAa,EAAO,OAAO,KAAK;CAG5C,IAAM,IAAa,EACjB,EAAO,WAAW,UAClB,EACD;CAID,OACE,kBAAC,GAAD;EACE,OAAO,EACL,YALa,EAAO,WAAW,OAAO,EAKtC,EACD;YAED,kBAAA,GAAA,EAAG,aAAY,CAAA;EAC6B,CAAA"}
1
+ {"version":3,"file":"BackofficeEntityDetailLayoutPage.js","names":[],"sources":["../../../src/pages/BackofficeEntityDetailLayoutPage.tsx"],"sourcesContent":["import { type JSX, type ReactNode } from 'react';\nimport HttpRedirect from '@plumile/router/errors/HttpRedirect.js';\nimport * as ReactRelay from 'react-relay';\n\nimport type {\n BackofficeEntityManifestItem,\n BackofficePreparedDetailLayoutRoute,\n BackofficeResolvedDetailLayoutFacetConfig,\n} from '@plumile/backoffice-core/types.js';\nimport { BackofficeEntityDetailLayoutContextProvider } from './detail/BackofficeEntityDetailLayoutContext.js';\n\nconst { useFragment, usePreloadedQuery } = ReactRelay;\n\nexport type BackofficeEntityDetailLayoutPageProps = {\n entityManifest: BackofficeEntityManifestItem;\n config: BackofficeResolvedDetailLayoutFacetConfig;\n prepared: BackofficePreparedDetailLayoutRoute;\n children?: ReactNode;\n};\n\nexport const BackofficeEntityDetailLayoutPage = ({\n config,\n prepared,\n children,\n}: BackofficeEntityDetailLayoutPageProps): JSX.Element => {\n const layoutQueryData = usePreloadedQuery(\n config.layoutPage.query,\n prepared.layoutQuery,\n );\n const layoutNodeRef = config.layoutPage.resolveNode(layoutQueryData, {\n id: prepared.id,\n });\n if (layoutNodeRef == null) {\n throw new HttpRedirect(config.routes.list);\n }\n\n const layoutNode = useFragment(\n config.layoutPage.fragment,\n layoutNodeRef as never,\n );\n\n const layoutView = config.layoutPage.toView(layoutNode);\n\n return (\n <BackofficeEntityDetailLayoutContextProvider\n value={{\n layoutView,\n }}\n >\n <>{children}</>\n </BackofficeEntityDetailLayoutContextProvider>\n );\n};\n\nexport default BackofficeEntityDetailLayoutPage;\n"],"mappings":";;;;;AAWA,IAAM,EAAE,aAAA,GAAa,mBAAA,MAAsB,GAS9B,KAAoC,EAC/C,WACA,aACA,kBACwD;CACxD,IAAM,IAAkB,EACtB,EAAO,WAAW,OAClB,EAAS,YACV,EACK,IAAgB,EAAO,WAAW,YAAY,GAAiB,EACnE,IAAI,EAAS,IACd,CAAC;CACF,IAAI,KAAiB,MACnB,MAAM,IAAI,EAAa,EAAO,OAAO,KAAK;CAG5C,IAAM,IAAa,EACjB,EAAO,WAAW,UAClB,EACD;CAID,OACE,kBAAC,GAAD;EACE,OAAO,EACL,YALa,EAAO,WAAW,OAAO,EAKtC,EACD;YAED,kBAAA,GAAA,EAAG,aAAY,CAAA;EAC6B,CAAA"}