@plumile/backoffice-react 0.1.205 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/README.md +12 -2
  2. package/lib/esm/auth/authRefreshNotice.css.js +1 -1
  3. package/lib/esm/auth/authStoryFixtures.js +29 -0
  4. package/lib/esm/auth/authStoryFixtures.js.map +1 -0
  5. package/lib/esm/auth/login/loginPage.css.js +1 -1
  6. package/lib/esm/components/backoffice/actions/BackofficeEntityActionFormDialog.js +1 -1
  7. package/lib/esm/components/backoffice/actions/backofficeEntityActionFormDialog.css.js +1 -1
  8. package/lib/esm/components/backoffice/billing/BackofficeBillingUsageChart.js +1 -1
  9. package/lib/esm/components/backoffice/billing/backofficeBillingUsageChart.css.js +1 -1
  10. package/lib/esm/components/backoffice/detail/BackofficeEntitySummaryHeader.js +6 -6
  11. package/lib/esm/components/backoffice/detail/BackofficeRelationsSummaryGrid.js +1 -1
  12. package/lib/esm/components/backoffice/detail/BackofficeUsageCostBreakdown.js +13 -13
  13. package/lib/esm/components/backoffice/detail/BackofficeUsageCostBreakdown.js.map +1 -1
  14. package/lib/esm/components/backoffice/detail/backofficeDetailBadgeRow.css.js +1 -1
  15. package/lib/esm/components/backoffice/detail/backofficeDetailErrorList.css.js +1 -1
  16. package/lib/esm/components/backoffice/detail/backofficeDetailLayout.css.js +1 -1
  17. package/lib/esm/components/backoffice/detail/backofficeDetailRelationList.css.js +1 -1
  18. package/lib/esm/components/backoffice/detail/backofficeEntitySummaryHeader.css.js +1 -1
  19. package/lib/esm/components/backoffice/detail/backofficeRelationsSummaryGrid.css.js +1 -1
  20. package/lib/esm/components/backoffice/detail/backofficeUsageCostBreakdown.css.js +1 -1
  21. package/lib/esm/components/backoffice/errors/BackofficeErrorBoundary.js +2 -16
  22. package/lib/esm/components/backoffice/errors/BackofficeErrorBoundary.js.map +1 -1
  23. package/lib/esm/components/backoffice/filters/EntityIdFilterField.js +1 -1
  24. package/lib/esm/components/backoffice/filters/backofficeFilterAction.css.js +1 -1
  25. package/lib/esm/components/backoffice/filters/deferredFilterSearchInput.css.js +1 -1
  26. package/lib/esm/components/backoffice/filters/entityIdFilterField.css.js +1 -1
  27. package/lib/esm/components/backoffice/hub/BackofficeHubTemplate.js +5 -5
  28. package/lib/esm/components/backoffice/hub/backofficeHubTemplate.css.js +1 -1
  29. package/lib/esm/components/backoffice/layout/backofficeSidebarActions.css.js +1 -1
  30. package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.js +2 -2
  31. package/lib/esm/components/backoffice/layout/breadcrumb/backofficeTopbarBreadcrumb.css.js +1 -1
  32. package/lib/esm/components/backoffice/links/BackofficeLinkContent.js +1 -1
  33. package/lib/esm/components/backoffice/links/backofficeLink.css.js +1 -1
  34. package/lib/esm/components/backoffice/list/RowFlagsCell.css.js +1 -1
  35. package/lib/esm/components/backoffice/overview/backofficeOverviewLayout.css.js +1 -1
  36. package/lib/esm/components/backoffice/pickers/EntityIdPickerDialog.js +123 -70
  37. package/lib/esm/components/backoffice/pickers/EntityIdPickerDialog.js.map +1 -1
  38. package/lib/esm/components/backoffice/pickers/entityIdPickerDialog.css.js +1 -1
  39. package/lib/esm/components/backoffice/refs/backofficeRelatedCountLink.css.js +1 -1
  40. package/lib/esm/components/backoffice/routing/backofficeContentBoundary.css.js +1 -1
  41. package/lib/esm/components/backoffice/routing/backofficeContentError.css.js +1 -1
  42. package/lib/esm/components/backoffice/routing/backofficeContentFallback.css.js +1 -1
  43. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityDetailScaffold.js.map +1 -1
  44. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js +291 -329
  45. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js.map +1 -1
  46. package/lib/esm/components/backoffice/scaffolds/BackofficeTabbedDetailShell.js +6 -11
  47. package/lib/esm/components/backoffice/scaffolds/BackofficeTabbedDetailShell.js.map +1 -1
  48. package/lib/esm/components/backoffice/scaffolds/backofficeEntityListScaffold.css.js +1 -1
  49. package/lib/esm/components/backoffice/scaffolds/backofficeTabbedDetailShell.css.js +1 -1
  50. package/lib/esm/components/backoffice/shared/backofficeFilterableCell.css.js +5 -5
  51. package/lib/esm/components/backoffice/shared/backofficeInlineFilterRow.css.js +1 -1
  52. package/lib/esm/components/backoffice/technical/TechnicalIdentifierValue.js +2 -26
  53. package/lib/esm/components/backoffice/tools/BackofficeToolsDocPanel.js +1 -1
  54. package/lib/esm/components/backoffice/tools/backofficeToolsDocPanel.css.js +1 -1
  55. package/lib/esm/components/backoffice/tools/backofficeToolsForm.css.js +1 -1
  56. package/lib/esm/components/backoffice/tools/backofficeToolsJsonForm.css.js +1 -1
  57. package/lib/esm/hooks/useInfiniteConnection.js +40 -38
  58. package/lib/esm/hooks/useInfiniteConnection.js.map +1 -1
  59. package/lib/esm/i18n/locales/en/backofficeReact.js +2 -5
  60. package/lib/esm/i18n/locales/en/backofficeReact.js.map +1 -1
  61. package/lib/esm/i18n/locales/fr/backofficeReact.js +2 -6
  62. package/lib/esm/i18n/locales/fr/backofficeReact.js.map +1 -1
  63. package/lib/esm/index.js +42 -42
  64. package/lib/esm/pages/BackofficeEntityDetailLayoutPage.js +1 -1
  65. package/lib/esm/pages/BackofficeEntityDetailLayoutPage.js.map +1 -1
  66. package/lib/esm/pages/BackofficeEntityDetailPage.js +158 -158
  67. package/lib/esm/pages/BackofficeEntityDetailPage.js.map +1 -1
  68. package/lib/esm/pages/BackofficeEntityListDataPage.js +77 -71
  69. package/lib/esm/pages/BackofficeEntityListDataPage.js.map +1 -1
  70. package/lib/esm/pages/BackofficeEntityListPage.js +89 -91
  71. package/lib/esm/pages/BackofficeEntityListPage.js.map +1 -1
  72. package/lib/esm/pages/BackofficeEntityListRouteContext.js.map +1 -1
  73. package/lib/esm/pages/backofficeDashboardPage.css.js +1 -1
  74. package/lib/esm/pages/backofficeEntityDetailPage.css.js +1 -1
  75. package/lib/esm/pages/backofficeEntityListPage.css.js +1 -1
  76. package/lib/esm/pages/detail/BackofficeEntityDetailLayoutContext.js.map +1 -1
  77. package/lib/esm/pages/detail/BackofficeEntityDetailManifestFallback.js +1 -1
  78. package/lib/esm/pages/detail/BackofficeEntityDetailManifestFallback.js.map +1 -1
  79. package/lib/esm/pages/detail/buildTabsItems.js.map +1 -1
  80. package/lib/esm/provider/BackofficeProvider.js +79 -80
  81. package/lib/esm/provider/BackofficeProvider.js.map +1 -1
  82. package/lib/esm/relay/typedRelayHooks.js.map +1 -1
  83. package/lib/esm/storybook/relay/RelayStory.css.js +1 -1
  84. package/lib/esm/style.css +1 -1
  85. package/lib/types/auth/authStoryFixtures.d.ts +3 -0
  86. package/lib/types/auth/authStoryFixtures.d.ts.map +1 -0
  87. package/lib/types/components/backoffice/errors/BackofficeErrorBoundary.d.ts +3 -17
  88. package/lib/types/components/backoffice/errors/BackofficeErrorBoundary.d.ts.map +1 -1
  89. package/lib/types/components/backoffice/pickers/EntityIdPickerDialog.d.ts.map +1 -1
  90. package/lib/types/components/backoffice/scaffolds/BackofficeEntityDetailScaffold.d.ts +2 -6
  91. package/lib/types/components/backoffice/scaffolds/BackofficeEntityDetailScaffold.d.ts.map +1 -1
  92. package/lib/types/components/backoffice/scaffolds/BackofficeEntityListScaffold.d.ts +2 -2
  93. package/lib/types/components/backoffice/scaffolds/BackofficeEntityListScaffold.d.ts.map +1 -1
  94. package/lib/types/components/backoffice/scaffolds/BackofficeTabbedDetailShell.d.ts +2 -2
  95. package/lib/types/components/backoffice/scaffolds/BackofficeTabbedDetailShell.d.ts.map +1 -1
  96. package/lib/types/components/backoffice/technical/TechnicalIdentifierValue.d.ts +1 -11
  97. package/lib/types/components/backoffice/technical/TechnicalIdentifierValue.d.ts.map +1 -1
  98. package/lib/types/hooks/useInfiniteConnection.d.ts +3 -2
  99. package/lib/types/hooks/useInfiniteConnection.d.ts.map +1 -1
  100. package/lib/types/i18n/resources.d.ts +2 -13
  101. package/lib/types/i18n/resources.d.ts.map +1 -1
  102. package/lib/types/pages/BackofficeEntityDetailLayoutPage.d.ts.map +1 -1
  103. package/lib/types/pages/BackofficeEntityDetailPage.d.ts.map +1 -1
  104. package/lib/types/pages/BackofficeEntityListDataPage.d.ts.map +1 -1
  105. package/lib/types/pages/BackofficeEntityListPage.d.ts.map +1 -1
  106. package/lib/types/pages/BackofficeEntityListRouteContext.d.ts +0 -2
  107. package/lib/types/pages/BackofficeEntityListRouteContext.d.ts.map +1 -1
  108. package/lib/types/pages/detail/BackofficeEntityDetailLayoutContext.d.ts +2 -2
  109. package/lib/types/pages/detail/BackofficeEntityDetailLayoutContext.d.ts.map +1 -1
  110. package/lib/types/pages/detail/buildTabsItems.d.ts +2 -2
  111. package/lib/types/pages/detail/buildTabsItems.d.ts.map +1 -1
  112. package/lib/types/provider/BackofficeProvider.d.ts.map +1 -1
  113. package/lib/types/relay/typedRelayHooks.d.ts +3 -5
  114. package/lib/types/relay/typedRelayHooks.d.ts.map +1 -1
  115. package/package.json +17 -17
  116. package/lib/esm/components/backoffice/technical/TechnicalIdentifierValue.js.map +0 -1
  117. package/lib/esm/hooks/useBackofficeLoadMore.js +0 -18
  118. package/lib/esm/hooks/useBackofficeLoadMore.js.map +0 -1
  119. package/lib/esm/provider/BackofficeListUiStateContext.js +0 -88
  120. package/lib/esm/provider/BackofficeListUiStateContext.js.map +0 -1
  121. package/lib/types/hooks/useBackofficeLoadMore.d.ts +0 -9
  122. package/lib/types/hooks/useBackofficeLoadMore.d.ts.map +0 -1
  123. package/lib/types/provider/BackofficeListUiStateContext.d.ts +0 -21
  124. package/lib/types/provider/BackofficeListUiStateContext.d.ts.map +0 -1
@@ -282,7 +282,6 @@ var e = {
282
282
  no: "No",
283
283
  yes: "Yes"
284
284
  },
285
- drawer: { emptySearchResults: "No filters match this search." },
286
285
  placeholders: {
287
286
  anyEntity: "All",
288
287
  search: "Search {{label}}",
@@ -290,10 +289,7 @@ var e = {
290
289
  },
291
290
  sections: { default: "Filters" },
292
291
  selectedEntities_one: "{{count}} selected",
293
- selectedEntities_other: "{{count}} selected",
294
- trigger: "Filters",
295
- triggerWithCount_one: "Filters ({{count}})",
296
- triggerWithCount_other: "Filters ({{count}})"
292
+ selectedEntities_other: "{{count}} selected"
297
293
  }, s = {
298
294
  agentManaged: {
299
295
  agentManaged: "Agent managed",
@@ -359,6 +355,7 @@ var e = {
359
355
  loaded_one: "{{count, number}} item loaded",
360
356
  loaded_other: "{{count, number}} items loaded",
361
357
  loadMore: {
358
+ action: "Load more",
362
359
  end: "End of results",
363
360
  loading: "Loading more…"
364
361
  },
@@ -1 +1 @@
1
- {"version":3,"file":"backofficeReact.js","names":[],"sources":["../../../../../src/i18n/locales/en/backofficeReact.json"],"sourcesContent":["{\n \"actions\": {\n \"form\": {\n \"cancel\": \"Cancel\",\n \"errors\": {\n \"invalidJson\": \"{{label}} must be valid JSON.\",\n \"invalidJsonArray\": \"{{label}} must be a valid JSON array.\",\n \"invalidJsonObject\": \"{{label}} must be a valid JSON object.\",\n \"invalidNumber\": \"{{label}} must be a valid number.\",\n \"invalidPayload\": \"The submitted payload is invalid.\",\n \"required\": \"{{label}} is required.\",\n \"submitFailed\": \"Unable to complete this action. Please try again.\"\n },\n \"submitting\": \"Submitting...\"\n },\n \"view\": \"View\"\n },\n \"auth\": {\n \"acceptInvitation\": {\n \"actions\": {\n \"backToLogin\": \"Back to login\"\n },\n \"errors\": {\n \"alreadyAccepted\": \"This invitation has already been accepted.\",\n \"default\": \"Unable to accept invitation.\",\n \"emailMismatch\": \"This invitation was sent to a different email address.\",\n \"expired\": \"Invitation link has expired.\",\n \"invalidToken\": \"Invitation link is invalid.\",\n \"missingToken\": \"Invitation link is missing or invalid.\",\n \"passwordMismatch\": \"Password and confirmation do not match.\",\n \"passwordPolicyViolation\": \"Your password does not meet policy requirements.\",\n \"rateLimited\": \"Too many attempts. Please try again later.\",\n \"unavailable\": \"Invitation acceptance is not available.\"\n },\n \"form\": {\n \"confirmLabel\": \"Confirm password\",\n \"confirmPlaceholder\": \"Confirm your password\",\n \"passwordLabel\": \"Password\",\n \"passwordPlaceholder\": \"Create a password\",\n \"submit\": \"Accept invitation\"\n },\n \"mfaSubtitle\": \"Enter the verification code to continue.\",\n \"mfaTitle\": \"Verify your identity\",\n \"status\": {\n \"success\": \"Invitation accepted.\",\n \"workingButton\": \"Working...\"\n },\n \"subtitle\": \"Create your account to join.\",\n \"title\": \"Accept invitation\"\n },\n \"emailCapture\": {\n \"continue\": \"Continue\",\n \"description\": \"Enter your work email to continue.\",\n \"emailLabel\": \"Work email\",\n \"emailPlaceholder\": \"you@company.com\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"loginFlow\": {\n \"errors\": {\n \"accountLocked\": \"Too many attempts. Try again later.\",\n \"emailRequired\": \"Enter an email address to continue.\",\n \"invalidCredentials\": \"Email or password is incorrect.\",\n \"invalidEmail\": \"Enter a valid email address.\",\n \"passkeyUnavailable\": \"Passkeys are not available.\",\n \"rateLimited\": \"Too many attempts. Please try again later.\",\n \"tryAgain\": \"Something went wrong. Please try again.\"\n },\n \"methods\": {\n \"title\": \"Choose a sign-in method\"\n },\n \"passkey\": {\n \"description\": \"Use the passkey associated with {{email}}.\",\n \"title\": \"Use a passkey\"\n },\n \"subtitle\": {\n \"default\": \"Choose a sign-in method to continue.\",\n \"mfa\": \"Enter the verification code to continue.\"\n },\n \"title\": {\n \"default\": \"Sign in\",\n \"mfa\": \"Two-factor authentication\"\n }\n },\n \"logout\": {\n \"errors\": {\n \"default\": \"Logout failed.\"\n }\n },\n \"methodChooser\": {\n \"actions\": {\n \"back\": \"Back\"\n },\n \"locked\": \"Too many attempts. Try again later.\",\n \"lockedWithTime\": \"Too many attempts. Try again at {{time}}.\",\n \"methods\": {\n \"other\": \"{{method}}\",\n \"passkey\": \"Passkey\",\n \"password\": \"Password\"\n },\n \"prompt\": \"Choose how to sign in for <strong>{{email}}</strong>.\"\n },\n \"mfa\": {\n \"actions\": {\n \"back\": \"Back\",\n \"submit\": \"Verify\"\n },\n \"errors\": {\n \"expired\": \"Verification session expired. Please try again.\",\n \"invalidChallenge\": \"Verification session is invalid. Restart the login.\",\n \"invalidCode\": \"Invalid code. Try again.\",\n \"shortCode\": \"Enter the 6-digit code.\",\n \"tooManyAttempts\": \"Too many attempts. Try again later.\",\n \"verificationFailed\": \"Verification failed. Try again.\"\n },\n \"form\": {\n \"label\": \"Verification code\",\n \"placeholder\": \"123456\"\n },\n \"helper\": {\n \"default\": \"Enter the 6-digit code from your authenticator.\",\n \"withEmail\": \"Enter the 6-digit code sent to {{email}}.\"\n }\n },\n \"oidc\": {\n \"buttons\": {\n \"apple\": \"Continue with Apple\",\n \"generic\": \"Continue with single sign-on\",\n \"google\": \"Continue with Google\"\n }\n },\n \"passkey\": {\n \"actions\": {\n \"showMethods\": \"Use another method\",\n \"submit\": \"Continue with passkey\",\n \"submitting\": \"Waiting for passkey...\"\n },\n \"errors\": {\n \"cancelled\": \"Passkey sign-in was cancelled.\",\n \"challengeExpired\": \"Passkey request expired. Try again.\",\n \"emailRequired\": \"Enter your email to continue.\",\n \"failed\": \"Passkey sign-in failed.\",\n \"invalidAssertion\": \"Passkey response is invalid. Try again.\",\n \"invalidChallenge\": \"Passkey request is invalid. Try again.\",\n \"invalidEmail\": \"Enter a valid email address.\",\n \"locked\": \"Too many attempts. Try again later.\",\n \"lockedWithTime\": \"Too many attempts. Try again at {{time}}.\",\n \"noCredential\": \"No credential was returned by the authenticator.\",\n \"notAvailable\": \"Passkeys are not available on this device.\",\n \"notFound\": \"No passkey found for this account.\"\n },\n \"form\": {\n \"emailLabel\": \"Email\",\n \"emailPlaceholder\": \"you@company.com\"\n },\n \"helper\": \"Use a passkey instead of your password.\"\n },\n \"passwordLogin\": {\n \"forgotPassword\": \"Forgot your password?\",\n \"title\": \"Sign in\"\n },\n \"passwordResetComplete\": {\n \"errors\": {\n \"expired\": \"This reset link has expired.\",\n \"invalid\": \"Reset link is invalid or expired.\",\n \"minLength\": \"Password must be at least {{minLength}} characters.\",\n \"mismatch\": \"Passwords do not match.\",\n \"missingToken\": \"Reset link is missing or invalid.\",\n \"policyViolation\": \"Your new password does not meet policy requirements.\"\n },\n \"form\": {\n \"confirmLabel\": \"Confirm password\",\n \"confirmPlaceholder\": \"Re-enter your password\",\n \"description\": \"Enter a new password for your account.\",\n \"passwordLabel\": \"Password\",\n \"passwordPlaceholder\": \"Enter a new password\",\n \"submit\": \"Update password\",\n \"title\": \"New password\"\n },\n \"subtitle\": \"Choose a strong password to secure your account.\",\n \"success\": {\n \"action\": \"Back to login\",\n \"description\": \"Your password has been changed.\",\n \"helper\": \"You can now sign in with your new password.\",\n \"title\": \"Password updated\"\n },\n \"title\": \"Set a new password\"\n },\n \"passwordResetRequest\": {\n \"errors\": {\n \"emailRequired\": \"Enter an email address.\",\n \"invalidEmail\": \"Please enter a valid email address.\",\n \"rateLimited\": \"Too many requests. Please wait and try again.\",\n \"startFailed\": \"Unable to start password reset.\"\n },\n \"form\": {\n \"description\": \"Enter the email for your account.\",\n \"emailLabel\": \"Email\",\n \"emailPlaceholder\": \"you@company.com\",\n \"submit\": \"Send reset link\"\n },\n \"sent\": {\n \"action\": \"Send another email\",\n \"description\": \"We sent a reset link to {{email}}.\",\n \"helper\": \"If you don't see it, check spam or try again.\",\n \"title\": \"Check your email\"\n },\n \"title\": \"Reset your password\"\n },\n \"verifyEmail\": {\n \"actions\": {\n \"continue\": \"Continue\",\n \"return\": \"Back to login\"\n },\n \"errors\": {\n \"alreadyVerified\": \"This email address is already verified.\",\n \"expired\": \"This verification link has expired.\",\n \"invalid\": \"Verification link is invalid or expired.\",\n \"missingToken\": \"Verification link is missing or invalid.\"\n },\n \"status\": {\n \"success\": \"Email verified. You can continue.\",\n \"verifying\": \"Verifying...\",\n \"verifyingButton\": \"Verifying\"\n },\n \"subtitle\": \"Confirm your email address to continue.\",\n \"title\": \"Verify your email\"\n }\n },\n \"common\": {\n \"actions\": {\n \"close\": \"Close\",\n \"copied\": \"Copied\",\n \"copy\": \"Copy\",\n \"pick\": \"Pick\",\n \"retry\": \"Retry\"\n },\n \"boolean\": {\n \"no\": \"No\",\n \"yes\": \"Yes\"\n },\n \"breadcrumb\": \"Breadcrumb\",\n \"errors\": {\n \"unexpected\": \"An unexpected error occurred.\"\n },\n \"loading\": \"Loading...\",\n \"notAvailable\": \"N/A\",\n \"time\": {\n \"lastDay\": \"24 h\",\n \"lastHour\": \"1 h\",\n \"lastSevenDays\": \"7 j\",\n \"lastThirtyDays\": \"30 j\"\n }\n },\n \"dashboard\": {\n \"actions\": {\n \"openList\": \"Open list\",\n \"openTool\": \"Open tool\"\n },\n \"subtitle\": \"Overview of the Work context.\",\n \"title\": \"Dashboard\"\n },\n \"detail\": {\n \"actionResult\": {\n \"message\": \"Message\",\n \"status\": \"Status\"\n },\n \"actions\": {\n \"backToList\": \"Back to list\",\n \"viewDetails\": \"View details\"\n },\n \"columns\": {\n \"charged\": \"Charged\",\n \"events\": \"Events\",\n \"markup\": \"Markup\",\n \"name\": \"Name\",\n \"rawCost\": \"Raw cost\"\n },\n \"loadingTitle\": \"Detail\",\n \"notFound\": \"Not found\",\n \"notFoundDescription\": \"This item does not exist or is no longer available.\"\n },\n \"emptyState\": {\n \"listEmpty\": {\n \"description\": \"There are no records to display.\",\n \"title\": \"No results\"\n },\n \"listEmptyFiltered\": {\n \"actions\": {\n \"reset\": \"Reset filters\"\n },\n \"description\": \"No results match the current filters.\"\n }\n },\n \"filters\": {\n \"actions\": {\n \"applyFilter\": \"Apply {{label}} filter\",\n \"changeFilterValue\": \"Change {{label}}\",\n \"clearFilter\": \"Clear {{label}} filter\",\n \"filterBy\": \"Filter by {{label}}\",\n \"removeFilterValue\": \"Remove {{label}} value\"\n },\n \"all\": \"All {{label}}\",\n \"boolean\": {\n \"no\": \"No\",\n \"yes\": \"Yes\"\n },\n \"drawer\": {\n \"emptySearchResults\": \"No filters match this search.\"\n },\n \"placeholders\": {\n \"anyEntity\": \"All\",\n \"search\": \"Search {{label}}\",\n \"unresolved\": \"Unresolved ID\"\n },\n \"sections\": {\n \"default\": \"Filters\"\n },\n \"selectedEntities_one\": \"{{count}} selected\",\n \"selectedEntities_other\": \"{{count}} selected\",\n \"trigger\": \"Filters\",\n \"triggerWithCount_one\": \"Filters ({{count}})\",\n \"triggerWithCount_other\": \"Filters ({{count}})\"\n },\n \"flags\": {\n \"agentManaged\": {\n \"agentManaged\": \"Agent managed\",\n \"userManaged\": \"User managed\"\n },\n \"capability\": {\n \"allowed\": \"Allowed\",\n \"denied\": \"Denied\"\n },\n \"default\": {\n \"default\": \"Default\",\n \"notDefault\": \"Not default\"\n },\n \"deployedProduction\": {\n \"deployed\": \"Deployed\",\n \"notDeployed\": \"Not deployed\"\n },\n \"enabled\": {\n \"disabled\": \"Disabled\",\n \"enabled\": \"Enabled\"\n },\n \"encrypted\": {\n \"encrypted\": \"Encrypted\",\n \"notEncrypted\": \"Not encrypted\"\n },\n \"failure\": {\n \"failed\": \"Failed\",\n \"ok\": \"OK\"\n },\n \"forced\": {\n \"forced\": \"Forced\",\n \"normal\": \"Normal\"\n },\n \"locked\": {\n \"locked\": \"Locked\",\n \"unlocked\": \"Unlocked\"\n }\n },\n \"format\": {\n \"currency\": \"{{value, currency}}\",\n \"number\": \"{{value, number}}\",\n \"percent\": \"{{value, percent}}\"\n },\n \"history\": \"\",\n \"hub\": {\n \"empty\": {\n \"description\": \"No available item matches the current filters.\",\n \"title\": \"No items\"\n },\n \"itemKinds\": {\n \"entity\": \"List\",\n \"tool\": \"Tool\"\n },\n \"search\": {\n \"placeholder\": \"Search\"\n },\n \"subtitle\": \"Choose an item to continue.\"\n },\n \"list\": {\n \"actions\": {\n \"refresh\": \"Refresh\",\n \"refreshing\": \"Refreshing…\",\n \"retry\": \"Retry\"\n },\n \"errors\": {\n \"tableFailed\": \"The table failed to load.\",\n \"title\": \"Table error\"\n },\n \"loaded_one\": \"{{count, number}} item loaded\",\n \"loaded_other\": \"{{count, number}} items loaded\",\n \"loadMore\": {\n \"end\": \"End of results\",\n \"loading\": \"Loading more…\"\n },\n \"refreshingRows\": \"Filtering…\",\n \"showing\": \"Showing {{shown, number}} of {{total, number}}\",\n \"sort\": {\n \"label\": \"Sort order\"\n },\n \"title\": \"\"\n },\n \"overview\": \"\",\n \"picker\": {\n \"errors\": {\n \"loadFailed\": \"Failed to load.\"\n },\n \"searchRequired\": \"Enter an ID to search.\",\n \"title\": \"Select an ID\",\n \"unavailable\": \"Picker not available for {{entity}}.\"\n },\n \"relations\": {\n \"menu\": {\n \"label\": \"Relations\"\n },\n \"openFilteredList\": \"Open filtered list: {{label}}\"\n },\n \"review\": {\n \"status\": {\n \"approved\": \"Approved\",\n \"changesRequested\": \"Changes requested\",\n \"pending\": \"Pending\",\n \"unknown\": \"Unknown\"\n }\n },\n \"sidebar\": {\n \"actions\": {\n \"collapseSidebar\": \"Close\",\n \"expandSidebar\": \"Open\",\n \"pin\": \"Pin\",\n \"reorder\": \"Reorder\",\n \"unpin\": \"Unpin\"\n },\n \"items\": {\n \"dashboard\": \"Dashboard\"\n },\n \"navigationAriaLabel\": \"Backoffice navigation\",\n \"profile\": {\n \"actions\": {\n \"signOut\": \"Sign out\"\n },\n \"menuAriaLabel\": \"Open profile menu\",\n \"title\": \"Profile\",\n \"unknownUser\": \"Unknown user\"\n },\n \"search\": {\n \"placeholder\": \"Search…\"\n },\n \"sections\": {\n \"pinned\": \"Pinned\",\n \"recent\": \"Recent\"\n }\n },\n \"tools\": {\n \"errors\": {\n \"description\": \"We couldn't run this tool.\",\n \"details\": \"Error details\",\n \"label\": \"Error\",\n \"title\": \"Tool error\",\n \"unknown\": \"Unknown error\"\n },\n \"forms\": {\n \"actions\": {\n \"insertExample\": \"Insert example\",\n \"run\": \"Run\"\n },\n \"inputJsonLabel\": \"Input JSON\"\n },\n \"loading\": {\n \"description\": \"Running tool...\"\n },\n \"output\": \"Output\"\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"backofficeReact.js","names":[],"sources":["../../../../../src/i18n/locales/en/backofficeReact.json"],"sourcesContent":["{\n \"actions\": {\n \"form\": {\n \"cancel\": \"Cancel\",\n \"errors\": {\n \"invalidJson\": \"{{label}} must be valid JSON.\",\n \"invalidJsonArray\": \"{{label}} must be a valid JSON array.\",\n \"invalidJsonObject\": \"{{label}} must be a valid JSON object.\",\n \"invalidNumber\": \"{{label}} must be a valid number.\",\n \"invalidPayload\": \"The submitted payload is invalid.\",\n \"required\": \"{{label}} is required.\",\n \"submitFailed\": \"Unable to complete this action. Please try again.\"\n },\n \"submitting\": \"Submitting...\"\n },\n \"view\": \"View\"\n },\n \"auth\": {\n \"acceptInvitation\": {\n \"actions\": {\n \"backToLogin\": \"Back to login\"\n },\n \"errors\": {\n \"alreadyAccepted\": \"This invitation has already been accepted.\",\n \"default\": \"Unable to accept invitation.\",\n \"emailMismatch\": \"This invitation was sent to a different email address.\",\n \"expired\": \"Invitation link has expired.\",\n \"invalidToken\": \"Invitation link is invalid.\",\n \"missingToken\": \"Invitation link is missing or invalid.\",\n \"passwordMismatch\": \"Password and confirmation do not match.\",\n \"passwordPolicyViolation\": \"Your password does not meet policy requirements.\",\n \"rateLimited\": \"Too many attempts. Please try again later.\",\n \"unavailable\": \"Invitation acceptance is not available.\"\n },\n \"form\": {\n \"confirmLabel\": \"Confirm password\",\n \"confirmPlaceholder\": \"Confirm your password\",\n \"passwordLabel\": \"Password\",\n \"passwordPlaceholder\": \"Create a password\",\n \"submit\": \"Accept invitation\"\n },\n \"mfaSubtitle\": \"Enter the verification code to continue.\",\n \"mfaTitle\": \"Verify your identity\",\n \"status\": {\n \"success\": \"Invitation accepted.\",\n \"workingButton\": \"Working...\"\n },\n \"subtitle\": \"Create your account to join.\",\n \"title\": \"Accept invitation\"\n },\n \"emailCapture\": {\n \"continue\": \"Continue\",\n \"description\": \"Enter your work email to continue.\",\n \"emailLabel\": \"Work email\",\n \"emailPlaceholder\": \"you@company.com\",\n \"forgotPassword\": \"Forgot your password?\"\n },\n \"loginFlow\": {\n \"errors\": {\n \"accountLocked\": \"Too many attempts. Try again later.\",\n \"emailRequired\": \"Enter an email address to continue.\",\n \"invalidCredentials\": \"Email or password is incorrect.\",\n \"invalidEmail\": \"Enter a valid email address.\",\n \"passkeyUnavailable\": \"Passkeys are not available.\",\n \"rateLimited\": \"Too many attempts. Please try again later.\",\n \"tryAgain\": \"Something went wrong. Please try again.\"\n },\n \"methods\": {\n \"title\": \"Choose a sign-in method\"\n },\n \"passkey\": {\n \"description\": \"Use the passkey associated with {{email}}.\",\n \"title\": \"Use a passkey\"\n },\n \"subtitle\": {\n \"default\": \"Choose a sign-in method to continue.\",\n \"mfa\": \"Enter the verification code to continue.\"\n },\n \"title\": {\n \"default\": \"Sign in\",\n \"mfa\": \"Two-factor authentication\"\n }\n },\n \"logout\": {\n \"errors\": {\n \"default\": \"Logout failed.\"\n }\n },\n \"methodChooser\": {\n \"actions\": {\n \"back\": \"Back\"\n },\n \"locked\": \"Too many attempts. Try again later.\",\n \"lockedWithTime\": \"Too many attempts. Try again at {{time}}.\",\n \"methods\": {\n \"other\": \"{{method}}\",\n \"passkey\": \"Passkey\",\n \"password\": \"Password\"\n },\n \"prompt\": \"Choose how to sign in for <strong>{{email}}</strong>.\"\n },\n \"mfa\": {\n \"actions\": {\n \"back\": \"Back\",\n \"submit\": \"Verify\"\n },\n \"errors\": {\n \"expired\": \"Verification session expired. Please try again.\",\n \"invalidChallenge\": \"Verification session is invalid. Restart the login.\",\n \"invalidCode\": \"Invalid code. Try again.\",\n \"shortCode\": \"Enter the 6-digit code.\",\n \"tooManyAttempts\": \"Too many attempts. Try again later.\",\n \"verificationFailed\": \"Verification failed. Try again.\"\n },\n \"form\": {\n \"label\": \"Verification code\",\n \"placeholder\": \"123456\"\n },\n \"helper\": {\n \"default\": \"Enter the 6-digit code from your authenticator.\",\n \"withEmail\": \"Enter the 6-digit code sent to {{email}}.\"\n }\n },\n \"oidc\": {\n \"buttons\": {\n \"apple\": \"Continue with Apple\",\n \"generic\": \"Continue with single sign-on\",\n \"google\": \"Continue with Google\"\n }\n },\n \"passkey\": {\n \"actions\": {\n \"showMethods\": \"Use another method\",\n \"submit\": \"Continue with passkey\",\n \"submitting\": \"Waiting for passkey...\"\n },\n \"errors\": {\n \"cancelled\": \"Passkey sign-in was cancelled.\",\n \"challengeExpired\": \"Passkey request expired. Try again.\",\n \"emailRequired\": \"Enter your email to continue.\",\n \"failed\": \"Passkey sign-in failed.\",\n \"invalidAssertion\": \"Passkey response is invalid. Try again.\",\n \"invalidChallenge\": \"Passkey request is invalid. Try again.\",\n \"invalidEmail\": \"Enter a valid email address.\",\n \"locked\": \"Too many attempts. Try again later.\",\n \"lockedWithTime\": \"Too many attempts. Try again at {{time}}.\",\n \"noCredential\": \"No credential was returned by the authenticator.\",\n \"notAvailable\": \"Passkeys are not available on this device.\",\n \"notFound\": \"No passkey found for this account.\"\n },\n \"form\": {\n \"emailLabel\": \"Email\",\n \"emailPlaceholder\": \"you@company.com\"\n },\n \"helper\": \"Use a passkey instead of your password.\"\n },\n \"passwordLogin\": {\n \"forgotPassword\": \"Forgot your password?\",\n \"title\": \"Sign in\"\n },\n \"passwordResetComplete\": {\n \"errors\": {\n \"expired\": \"This reset link has expired.\",\n \"invalid\": \"Reset link is invalid or expired.\",\n \"minLength\": \"Password must be at least {{minLength}} characters.\",\n \"mismatch\": \"Passwords do not match.\",\n \"missingToken\": \"Reset link is missing or invalid.\",\n \"policyViolation\": \"Your new password does not meet policy requirements.\"\n },\n \"form\": {\n \"confirmLabel\": \"Confirm password\",\n \"confirmPlaceholder\": \"Re-enter your password\",\n \"description\": \"Enter a new password for your account.\",\n \"passwordLabel\": \"Password\",\n \"passwordPlaceholder\": \"Enter a new password\",\n \"submit\": \"Update password\",\n \"title\": \"New password\"\n },\n \"subtitle\": \"Choose a strong password to secure your account.\",\n \"success\": {\n \"action\": \"Back to login\",\n \"description\": \"Your password has been changed.\",\n \"helper\": \"You can now sign in with your new password.\",\n \"title\": \"Password updated\"\n },\n \"title\": \"Set a new password\"\n },\n \"passwordResetRequest\": {\n \"errors\": {\n \"emailRequired\": \"Enter an email address.\",\n \"invalidEmail\": \"Please enter a valid email address.\",\n \"rateLimited\": \"Too many requests. Please wait and try again.\",\n \"startFailed\": \"Unable to start password reset.\"\n },\n \"form\": {\n \"description\": \"Enter the email for your account.\",\n \"emailLabel\": \"Email\",\n \"emailPlaceholder\": \"you@company.com\",\n \"submit\": \"Send reset link\"\n },\n \"sent\": {\n \"action\": \"Send another email\",\n \"description\": \"We sent a reset link to {{email}}.\",\n \"helper\": \"If you don't see it, check spam or try again.\",\n \"title\": \"Check your email\"\n },\n \"title\": \"Reset your password\"\n },\n \"verifyEmail\": {\n \"actions\": {\n \"continue\": \"Continue\",\n \"return\": \"Back to login\"\n },\n \"errors\": {\n \"alreadyVerified\": \"This email address is already verified.\",\n \"expired\": \"This verification link has expired.\",\n \"invalid\": \"Verification link is invalid or expired.\",\n \"missingToken\": \"Verification link is missing or invalid.\"\n },\n \"status\": {\n \"success\": \"Email verified. You can continue.\",\n \"verifying\": \"Verifying...\",\n \"verifyingButton\": \"Verifying\"\n },\n \"subtitle\": \"Confirm your email address to continue.\",\n \"title\": \"Verify your email\"\n }\n },\n \"common\": {\n \"actions\": {\n \"close\": \"Close\",\n \"copied\": \"Copied\",\n \"copy\": \"Copy\",\n \"pick\": \"Pick\",\n \"retry\": \"Retry\"\n },\n \"boolean\": {\n \"no\": \"No\",\n \"yes\": \"Yes\"\n },\n \"breadcrumb\": \"Breadcrumb\",\n \"errors\": {\n \"unexpected\": \"An unexpected error occurred.\"\n },\n \"loading\": \"Loading...\",\n \"notAvailable\": \"N/A\",\n \"time\": {\n \"lastDay\": \"24 h\",\n \"lastHour\": \"1 h\",\n \"lastSevenDays\": \"7 j\",\n \"lastThirtyDays\": \"30 j\"\n }\n },\n \"dashboard\": {\n \"actions\": {\n \"openList\": \"Open list\",\n \"openTool\": \"Open tool\"\n },\n \"subtitle\": \"Overview of the Work context.\",\n \"title\": \"Dashboard\"\n },\n \"detail\": {\n \"actionResult\": {\n \"message\": \"Message\",\n \"status\": \"Status\"\n },\n \"actions\": {\n \"backToList\": \"Back to list\",\n \"viewDetails\": \"View details\"\n },\n \"columns\": {\n \"charged\": \"Charged\",\n \"events\": \"Events\",\n \"markup\": \"Markup\",\n \"name\": \"Name\",\n \"rawCost\": \"Raw cost\"\n },\n \"loadingTitle\": \"Detail\",\n \"notFound\": \"Not found\",\n \"notFoundDescription\": \"This item does not exist or is no longer available.\"\n },\n \"emptyState\": {\n \"listEmpty\": {\n \"description\": \"There are no records to display.\",\n \"title\": \"No results\"\n },\n \"listEmptyFiltered\": {\n \"actions\": {\n \"reset\": \"Reset filters\"\n },\n \"description\": \"No results match the current filters.\"\n }\n },\n \"filters\": {\n \"actions\": {\n \"applyFilter\": \"Apply {{label}} filter\",\n \"changeFilterValue\": \"Change {{label}}\",\n \"clearFilter\": \"Clear {{label}} filter\",\n \"filterBy\": \"Filter by {{label}}\",\n \"removeFilterValue\": \"Remove {{label}} value\"\n },\n \"all\": \"All {{label}}\",\n \"boolean\": {\n \"no\": \"No\",\n \"yes\": \"Yes\"\n },\n \"placeholders\": {\n \"anyEntity\": \"All\",\n \"search\": \"Search {{label}}\",\n \"unresolved\": \"Unresolved ID\"\n },\n \"sections\": {\n \"default\": \"Filters\"\n },\n \"selectedEntities_one\": \"{{count}} selected\",\n \"selectedEntities_other\": \"{{count}} selected\"\n },\n \"flags\": {\n \"agentManaged\": {\n \"agentManaged\": \"Agent managed\",\n \"userManaged\": \"User managed\"\n },\n \"capability\": {\n \"allowed\": \"Allowed\",\n \"denied\": \"Denied\"\n },\n \"default\": {\n \"default\": \"Default\",\n \"notDefault\": \"Not default\"\n },\n \"deployedProduction\": {\n \"deployed\": \"Deployed\",\n \"notDeployed\": \"Not deployed\"\n },\n \"enabled\": {\n \"disabled\": \"Disabled\",\n \"enabled\": \"Enabled\"\n },\n \"encrypted\": {\n \"encrypted\": \"Encrypted\",\n \"notEncrypted\": \"Not encrypted\"\n },\n \"failure\": {\n \"failed\": \"Failed\",\n \"ok\": \"OK\"\n },\n \"forced\": {\n \"forced\": \"Forced\",\n \"normal\": \"Normal\"\n },\n \"locked\": {\n \"locked\": \"Locked\",\n \"unlocked\": \"Unlocked\"\n }\n },\n \"format\": {\n \"currency\": \"{{value, currency}}\",\n \"number\": \"{{value, number}}\",\n \"percent\": \"{{value, percent}}\"\n },\n \"history\": \"\",\n \"hub\": {\n \"empty\": {\n \"description\": \"No available item matches the current filters.\",\n \"title\": \"No items\"\n },\n \"itemKinds\": {\n \"entity\": \"List\",\n \"tool\": \"Tool\"\n },\n \"search\": {\n \"placeholder\": \"Search\"\n },\n \"subtitle\": \"Choose an item to continue.\"\n },\n \"list\": {\n \"actions\": {\n \"refresh\": \"Refresh\",\n \"refreshing\": \"Refreshing…\",\n \"retry\": \"Retry\"\n },\n \"errors\": {\n \"tableFailed\": \"The table failed to load.\",\n \"title\": \"Table error\"\n },\n \"loaded_one\": \"{{count, number}} item loaded\",\n \"loaded_other\": \"{{count, number}} items loaded\",\n \"loadMore\": {\n \"action\": \"Load more\",\n \"end\": \"End of results\",\n \"loading\": \"Loading more…\"\n },\n \"refreshingRows\": \"Filtering…\",\n \"showing\": \"Showing {{shown, number}} of {{total, number}}\",\n \"sort\": {\n \"label\": \"Sort order\"\n },\n \"title\": \"\"\n },\n \"overview\": \"\",\n \"picker\": {\n \"errors\": {\n \"loadFailed\": \"Failed to load.\"\n },\n \"searchRequired\": \"Enter an ID to search.\",\n \"title\": \"Select an ID\",\n \"unavailable\": \"Picker not available for {{entity}}.\"\n },\n \"relations\": {\n \"menu\": {\n \"label\": \"Relations\"\n },\n \"openFilteredList\": \"Open filtered list: {{label}}\"\n },\n \"review\": {\n \"status\": {\n \"approved\": \"Approved\",\n \"changesRequested\": \"Changes requested\",\n \"pending\": \"Pending\",\n \"unknown\": \"Unknown\"\n }\n },\n \"sidebar\": {\n \"actions\": {\n \"collapseSidebar\": \"Close\",\n \"expandSidebar\": \"Open\",\n \"pin\": \"Pin\",\n \"reorder\": \"Reorder\",\n \"unpin\": \"Unpin\"\n },\n \"items\": {\n \"dashboard\": \"Dashboard\"\n },\n \"navigationAriaLabel\": \"Backoffice navigation\",\n \"profile\": {\n \"actions\": {\n \"signOut\": \"Sign out\"\n },\n \"menuAriaLabel\": \"Open profile menu\",\n \"title\": \"Profile\",\n \"unknownUser\": \"Unknown user\"\n },\n \"search\": {\n \"placeholder\": \"Search…\"\n },\n \"sections\": {\n \"pinned\": \"Pinned\",\n \"recent\": \"Recent\"\n }\n },\n \"tools\": {\n \"errors\": {\n \"description\": \"We couldn't run this tool.\",\n \"details\": \"Error details\",\n \"label\": \"Error\",\n \"title\": \"Tool error\",\n \"unknown\": \"Unknown error\"\n },\n \"forms\": {\n \"actions\": {\n \"insertExample\": \"Insert example\",\n \"run\": \"Run\"\n },\n \"inputJsonLabel\": \"Input JSON\"\n },\n \"loading\": {\n \"description\": \"Running tool...\"\n },\n \"output\": \"Output\"\n }\n}\n"],"mappings":""}
@@ -282,7 +282,6 @@ var e = {
282
282
  no: "Non",
283
283
  yes: "Oui"
284
284
  },
285
- drawer: { emptySearchResults: "Aucun filtre ne correspond à cette recherche." },
286
285
  placeholders: {
287
286
  anyEntity: "Tous",
288
287
  search: "Rechercher {{label}}",
@@ -291,11 +290,7 @@ var e = {
291
290
  sections: { default: "Filtres" },
292
291
  selectedEntities_one: "{{count}} sélection",
293
292
  selectedEntities_many: "{{count}} sélections",
294
- selectedEntities_other: "{{count}} sélections",
295
- trigger: "Filtres",
296
- triggerWithCount_one: "Filtres ({{count}})",
297
- triggerWithCount_many: "Filtres ({{count}})",
298
- triggerWithCount_other: "Filtres ({{count}})"
293
+ selectedEntities_other: "{{count}} sélections"
299
294
  }, s = {
300
295
  agentManaged: {
301
296
  agentManaged: "Géré par un agent",
@@ -362,6 +357,7 @@ var e = {
362
357
  loaded_many: "{{count, number}} éléments chargés",
363
358
  loaded_other: "{{count, number}} éléments chargés",
364
359
  loadMore: {
360
+ action: "Charger plus",
365
361
  end: "Fin des résultats",
366
362
  loading: "Chargement…"
367
363
  },
@@ -1 +1 @@
1
- {"version":3,"file":"backofficeReact.js","names":[],"sources":["../../../../../src/i18n/locales/fr/backofficeReact.json"],"sourcesContent":["{\n \"actions\": {\n \"form\": {\n \"cancel\": \"Annuler\",\n \"errors\": {\n \"invalidJson\": \"{{label}} doit être un JSON valide.\",\n \"invalidJsonArray\": \"{{label}} doit être un tableau JSON valide.\",\n \"invalidJsonObject\": \"{{label}} doit être un objet JSON valide.\",\n \"invalidNumber\": \"{{label}} doit être un nombre valide.\",\n \"invalidPayload\": \"La charge utile soumise est invalide.\",\n \"required\": \"{{label}} est requis.\",\n \"submitFailed\": \"Impossible de terminer cette action. Veuillez réessayer.\"\n },\n \"submitting\": \"Envoi...\"\n },\n \"view\": \"Voir\"\n },\n \"auth\": {\n \"acceptInvitation\": {\n \"actions\": {\n \"backToLogin\": \"Retour à la connexion\"\n },\n \"errors\": {\n \"alreadyAccepted\": \"Cette invitation a déjà été acceptée.\",\n \"default\": \"Impossible d'accepter l'invitation.\",\n \"emailMismatch\": \"Cette invitation a été envoyée à une autre adresse email.\",\n \"expired\": \"Le lien d'invitation a expiré.\",\n \"invalidToken\": \"Le lien d'invitation est invalide.\",\n \"missingToken\": \"Le lien d'invitation est manquant ou invalide.\",\n \"passwordMismatch\": \"Le mot de passe et sa confirmation ne correspondent pas.\",\n \"passwordPolicyViolation\": \"Votre mot de passe ne respecte pas la politique de sécurité.\",\n \"rateLimited\": \"Trop de tentatives. Veuillez réessayer plus tard.\",\n \"unavailable\": \"L'acceptation d'invitation n'est pas disponible.\"\n },\n \"form\": {\n \"confirmLabel\": \"Confirmer le mot de passe\",\n \"confirmPlaceholder\": \"Confirmez votre mot de passe\",\n \"passwordLabel\": \"Mot de passe\",\n \"passwordPlaceholder\": \"Créez un mot de passe\",\n \"submit\": \"Accepter l'invitation\"\n },\n \"mfaSubtitle\": \"Entrez le code de vérification pour continuer.\",\n \"mfaTitle\": \"Vérifiez votre identité\",\n \"status\": {\n \"success\": \"Invitation acceptée.\",\n \"workingButton\": \"Traitement...\"\n },\n \"subtitle\": \"Créez votre compte pour rejoindre.\",\n \"title\": \"Accepter l'invitation\"\n },\n \"emailCapture\": {\n \"continue\": \"Continuer\",\n \"description\": \"Entrez votre email professionnel pour continuer.\",\n \"emailLabel\": \"Email professionnel\",\n \"emailPlaceholder\": \"vous@entreprise.com\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"loginFlow\": {\n \"errors\": {\n \"accountLocked\": \"Trop de tentatives. Veuillez réessayer plus tard.\",\n \"emailRequired\": \"Entrez une adresse email pour continuer.\",\n \"invalidCredentials\": \"Email ou mot de passe incorrect.\",\n \"invalidEmail\": \"Entrez une adresse email valide.\",\n \"passkeyUnavailable\": \"Les passkeys ne sont pas disponibles.\",\n \"rateLimited\": \"Trop de tentatives. Veuillez réessayer plus tard.\",\n \"tryAgain\": \"Une erreur est survenue. Veuillez réessayer.\"\n },\n \"methods\": {\n \"title\": \"Choisissez une méthode de connexion\"\n },\n \"passkey\": {\n \"description\": \"Utilisez la passkey associée à {{email}}.\",\n \"title\": \"Utiliser une passkey\"\n },\n \"subtitle\": {\n \"default\": \"Choisissez une méthode de connexion pour continuer.\",\n \"mfa\": \"Entrez le code de vérification pour continuer.\"\n },\n \"title\": {\n \"default\": \"Se connecter\",\n \"mfa\": \"Authentification à deux facteurs\"\n }\n },\n \"logout\": {\n \"errors\": {\n \"default\": \"Échec de la déconnexion.\"\n }\n },\n \"methodChooser\": {\n \"actions\": {\n \"back\": \"Retour\"\n },\n \"locked\": \"Trop de tentatives. Veuillez réessayer plus tard.\",\n \"lockedWithTime\": \"Trop de tentatives. Veuillez réessayer à {{time}}.\",\n \"methods\": {\n \"other\": \"{{method}}\",\n \"passkey\": \"Passkey\",\n \"password\": \"Mot de passe\"\n },\n \"prompt\": \"Choisissez comment vous connecter pour <strong>{{email}}</strong>.\"\n },\n \"mfa\": {\n \"actions\": {\n \"back\": \"Retour\",\n \"submit\": \"Vérifier\"\n },\n \"errors\": {\n \"expired\": \"La session de vérification a expiré. Réessayez.\",\n \"invalidChallenge\": \"La session de vérification est invalide. Reprenez la connexion.\",\n \"invalidCode\": \"Code invalide. Réessayez.\",\n \"shortCode\": \"Entrez le code à 6 chiffres.\",\n \"tooManyAttempts\": \"Trop de tentatives. Veuillez réessayer plus tard.\",\n \"verificationFailed\": \"La vérification a échoué. Réessayez.\"\n },\n \"form\": {\n \"label\": \"Code de vérification\",\n \"placeholder\": \"123456\"\n },\n \"helper\": {\n \"default\": \"Entrez le code à 6 chiffres de votre authentificateur.\",\n \"withEmail\": \"Entrez le code à 6 chiffres envoyé à {{email}}.\"\n }\n },\n \"oidc\": {\n \"buttons\": {\n \"apple\": \"Continuer avec Apple\",\n \"generic\": \"Continuer avec un SSO\",\n \"google\": \"Continuer avec Google\"\n }\n },\n \"passkey\": {\n \"actions\": {\n \"showMethods\": \"Utiliser une autre méthode\",\n \"submit\": \"Continuer avec la passkey\",\n \"submitting\": \"En attente de la passkey...\"\n },\n \"errors\": {\n \"cancelled\": \"La connexion par passkey a été annulée.\",\n \"challengeExpired\": \"La demande de passkey a expiré. Réessayez.\",\n \"emailRequired\": \"Entrez votre email pour continuer.\",\n \"failed\": \"Échec de la connexion par passkey.\",\n \"invalidAssertion\": \"La réponse de passkey est invalide. Réessayez.\",\n \"invalidChallenge\": \"La demande de passkey est invalide. Réessayez.\",\n \"invalidEmail\": \"Entrez une adresse email valide.\",\n \"locked\": \"Trop de tentatives. Veuillez réessayer plus tard.\",\n \"lockedWithTime\": \"Trop de tentatives. Veuillez réessayer à {{time}}.\",\n \"noCredential\": \"L'authentificateur n'a retourné aucun identifiant.\",\n \"notAvailable\": \"Les passkeys ne sont pas disponibles sur cet appareil.\",\n \"notFound\": \"Aucune passkey n'est associée à ce compte.\"\n },\n \"form\": {\n \"emailLabel\": \"Email\",\n \"emailPlaceholder\": \"vous@entreprise.com\"\n },\n \"helper\": \"Utilisez une passkey à la place de votre mot de passe.\"\n },\n \"passwordLogin\": {\n \"forgotPassword\": \"Mot de passe oublié ?\",\n \"title\": \"Se connecter\"\n },\n \"passwordResetComplete\": {\n \"errors\": {\n \"expired\": \"Ce lien de réinitialisation a expiré.\",\n \"invalid\": \"Le lien de réinitialisation est invalide ou expiré.\",\n \"minLength\": \"Le mot de passe doit contenir au moins {{minLength}} caractères.\",\n \"mismatch\": \"Les mots de passe ne correspondent pas.\",\n \"missingToken\": \"Le lien de réinitialisation est manquant ou invalide.\",\n \"policyViolation\": \"Votre nouveau mot de passe ne respecte pas la politique de sécurité.\"\n },\n \"form\": {\n \"confirmLabel\": \"Confirmer le mot de passe\",\n \"confirmPlaceholder\": \"Saisissez à nouveau votre mot de passe\",\n \"description\": \"Entrez un nouveau mot de passe pour votre compte.\",\n \"passwordLabel\": \"Mot de passe\",\n \"passwordPlaceholder\": \"Entrez un nouveau mot de passe\",\n \"submit\": \"Mettre à jour le mot de passe\",\n \"title\": \"Nouveau mot de passe\"\n },\n \"subtitle\": \"Choisissez un mot de passe robuste pour sécuriser votre compte.\",\n \"success\": {\n \"action\": \"Retour à la connexion\",\n \"description\": \"Votre mot de passe a été modifié.\",\n \"helper\": \"Vous pouvez maintenant vous connecter avec votre nouveau mot de passe.\",\n \"title\": \"Mot de passe mis à jour\"\n },\n \"title\": \"Définir un nouveau mot de passe\"\n },\n \"passwordResetRequest\": {\n \"errors\": {\n \"emailRequired\": \"Entrez une adresse email.\",\n \"invalidEmail\": \"Veuillez saisir une adresse email valide.\",\n \"rateLimited\": \"Trop de demandes. Veuillez patienter puis réessayer.\",\n \"startFailed\": \"Impossible de démarrer la réinitialisation.\"\n },\n \"form\": {\n \"description\": \"Entrez l'email de votre compte.\",\n \"emailLabel\": \"Email\",\n \"emailPlaceholder\": \"vous@entreprise.com\",\n \"submit\": \"Envoyer le lien de réinitialisation\"\n },\n \"sent\": {\n \"action\": \"Envoyer un autre email\",\n \"description\": \"Nous avons envoyé un lien de réinitialisation à {{email}}.\",\n \"helper\": \"Si vous ne le voyez pas, vérifiez les spams ou réessayez.\",\n \"title\": \"Vérifiez votre email\"\n },\n \"title\": \"Réinitialiser votre mot de passe\"\n },\n \"verifyEmail\": {\n \"actions\": {\n \"continue\": \"Continuer\",\n \"return\": \"Retour à la connexion\"\n },\n \"errors\": {\n \"alreadyVerified\": \"Cette adresse email est déjà vérifiée.\",\n \"expired\": \"Ce lien de vérification a expiré.\",\n \"invalid\": \"Le lien de vérification est invalide ou expiré.\",\n \"missingToken\": \"Le lien de vérification est manquant ou invalide.\"\n },\n \"status\": {\n \"success\": \"Email vérifié. Vous pouvez continuer.\",\n \"verifying\": \"Vérification...\",\n \"verifyingButton\": \"Vérification\"\n },\n \"subtitle\": \"Confirmez votre adresse email pour continuer.\",\n \"title\": \"Vérifier votre email\"\n }\n },\n \"common\": {\n \"actions\": {\n \"close\": \"Fermer\",\n \"copied\": \"Copié\",\n \"copy\": \"Copier\",\n \"pick\": \"Choisir\",\n \"retry\": \"Réessayer\"\n },\n \"boolean\": {\n \"no\": \"Non\",\n \"yes\": \"Oui\"\n },\n \"breadcrumb\": \"Fil d'Ariane\",\n \"errors\": {\n \"unexpected\": \"Une erreur inattendue est survenue.\"\n },\n \"loading\": \"Chargement...\",\n \"notAvailable\": \"N/D\",\n \"time\": {\n \"lastDay\": \"24 h\",\n \"lastHour\": \"1 h\",\n \"lastSevenDays\": \"7 j\",\n \"lastThirtyDays\": \"30 j\"\n }\n },\n \"dashboard\": {\n \"actions\": {\n \"openList\": \"Ouvrir la liste\",\n \"openTool\": \"Ouvrir l'outil\"\n },\n \"subtitle\": \"Vue d'ensemble du contexte Work.\",\n \"title\": \"Tableau de bord\"\n },\n \"detail\": {\n \"actionResult\": {\n \"message\": \"Message\",\n \"status\": \"Statut\"\n },\n \"actions\": {\n \"backToList\": \"Retour à la liste\",\n \"viewDetails\": \"Voir le détail\"\n },\n \"columns\": {\n \"charged\": \"Facturé\",\n \"events\": \"Événements\",\n \"markup\": \"Marge\",\n \"name\": \"Nom\",\n \"rawCost\": \"Coût réel\"\n },\n \"loadingTitle\": \"Détail\",\n \"notFound\": \"Introuvable\",\n \"notFoundDescription\": \"Cet élément n'existe pas ou n'est plus disponible.\"\n },\n \"emptyState\": {\n \"listEmpty\": {\n \"description\": \"Aucun enregistrement à afficher.\",\n \"title\": \"Aucun résultat\"\n },\n \"listEmptyFiltered\": {\n \"actions\": {\n \"reset\": \"Réinitialiser les filtres\"\n },\n \"description\": \"Aucun résultat ne correspond aux filtres actuels.\"\n }\n },\n \"filters\": {\n \"actions\": {\n \"applyFilter\": \"Appliquer le filtre {{label}}\",\n \"changeFilterValue\": \"Modifier {{label}}\",\n \"clearFilter\": \"Effacer le filtre {{label}}\",\n \"filterBy\": \"Filtrer par {{label}}\",\n \"removeFilterValue\": \"Retirer une valeur du filtre {{label}}\"\n },\n \"all\": \"Tous {{label}}\",\n \"boolean\": {\n \"no\": \"Non\",\n \"yes\": \"Oui\"\n },\n \"drawer\": {\n \"emptySearchResults\": \"Aucun filtre ne correspond à cette recherche.\"\n },\n \"placeholders\": {\n \"anyEntity\": \"Tous\",\n \"search\": \"Rechercher {{label}}\",\n \"unresolved\": \"ID introuvable\"\n },\n \"sections\": {\n \"default\": \"Filtres\"\n },\n \"selectedEntities_one\": \"{{count}} sélection\",\n \"selectedEntities_many\": \"{{count}} sélections\",\n \"selectedEntities_other\": \"{{count}} sélections\",\n \"trigger\": \"Filtres\",\n \"triggerWithCount_one\": \"Filtres ({{count}})\",\n \"triggerWithCount_many\": \"Filtres ({{count}})\",\n \"triggerWithCount_other\": \"Filtres ({{count}})\"\n },\n \"flags\": {\n \"agentManaged\": {\n \"agentManaged\": \"Géré par un agent\",\n \"userManaged\": \"Géré par un utilisateur\"\n },\n \"capability\": {\n \"allowed\": \"Autorisé\",\n \"denied\": \"Refusé\"\n },\n \"default\": {\n \"default\": \"Par défaut\",\n \"notDefault\": \"Non par défaut\"\n },\n \"deployedProduction\": {\n \"deployed\": \"Déployé\",\n \"notDeployed\": \"Non déployé\"\n },\n \"enabled\": {\n \"disabled\": \"Désactivé\",\n \"enabled\": \"Activé\"\n },\n \"encrypted\": {\n \"encrypted\": \"Chiffré\",\n \"notEncrypted\": \"Non chiffré\"\n },\n \"failure\": {\n \"failed\": \"Échoué\",\n \"ok\": \"OK\"\n },\n \"forced\": {\n \"forced\": \"Forcé\",\n \"normal\": \"Normal\"\n },\n \"locked\": {\n \"locked\": \"Verrouillé\",\n \"unlocked\": \"Déverrouillé\"\n }\n },\n \"format\": {\n \"currency\": \"{{value, currency}}\",\n \"number\": \"{{value, number}}\",\n \"percent\": \"{{value, percent}}\"\n },\n \"history\": \"\",\n \"hub\": {\n \"empty\": {\n \"description\": \"Aucun élément disponible ne correspond aux filtres actuels.\",\n \"title\": \"Aucun élément\"\n },\n \"itemKinds\": {\n \"entity\": \"Liste\",\n \"tool\": \"Outil\"\n },\n \"search\": {\n \"placeholder\": \"Rechercher\"\n },\n \"subtitle\": \"Choisissez un élément pour continuer.\"\n },\n \"list\": {\n \"actions\": {\n \"refresh\": \"Actualiser\",\n \"refreshing\": \"Actualisation…\",\n \"retry\": \"Réessayer\"\n },\n \"errors\": {\n \"tableFailed\": \"Le tableau n'a pas pu se charger.\",\n \"title\": \"Erreur du tableau\"\n },\n \"loaded_one\": \"{{count, number}} élément chargé\",\n \"loaded_many\": \"{{count, number}} éléments chargés\",\n \"loaded_other\": \"{{count, number}} éléments chargés\",\n \"loadMore\": {\n \"end\": \"Fin des résultats\",\n \"loading\": \"Chargement…\"\n },\n \"refreshingRows\": \"Filtrage en cours…\",\n \"showing\": \"Affichage de {{shown, number}} sur {{total, number}}\",\n \"sort\": {\n \"label\": \"Ordre de tri\"\n },\n \"title\": \"\"\n },\n \"overview\": \"\",\n \"picker\": {\n \"errors\": {\n \"loadFailed\": \"Échec du chargement.\"\n },\n \"searchRequired\": \"Saisissez un ID pour rechercher.\",\n \"title\": \"Sélectionner un ID\",\n \"unavailable\": \"Sélecteur indisponible pour {{entity}}.\"\n },\n \"relations\": {\n \"menu\": {\n \"label\": \"Relations\"\n },\n \"openFilteredList\": \"Ouvrir la liste filtrée : {{label}}\"\n },\n \"review\": {\n \"status\": {\n \"approved\": \"Approuvé\",\n \"changesRequested\": \"Modifications demandées\",\n \"pending\": \"En attente\",\n \"unknown\": \"Inconnu\"\n }\n },\n \"sidebar\": {\n \"actions\": {\n \"collapseSidebar\": \"Fermer\",\n \"expandSidebar\": \"Ouvrir\",\n \"pin\": \"Épingler\",\n \"reorder\": \"Réordonner\",\n \"unpin\": \"Désépingler\"\n },\n \"items\": {\n \"dashboard\": \"Tableau de bord\"\n },\n \"navigationAriaLabel\": \"Navigation backoffice\",\n \"profile\": {\n \"actions\": {\n \"signOut\": \"Se déconnecter\"\n },\n \"menuAriaLabel\": \"Ouvrir le menu profil\",\n \"title\": \"Profil\",\n \"unknownUser\": \"Utilisateur inconnu\"\n },\n \"search\": {\n \"placeholder\": \"Rechercher...\"\n },\n \"sections\": {\n \"pinned\": \"Épinglés\",\n \"recent\": \"Récents\"\n }\n },\n \"tools\": {\n \"errors\": {\n \"description\": \"Impossible d'exécuter cet outil.\",\n \"details\": \"Détails de l'erreur\",\n \"label\": \"Erreur\",\n \"title\": \"Erreur d'outil\",\n \"unknown\": \"Erreur inconnue\"\n },\n \"forms\": {\n \"actions\": {\n \"insertExample\": \"Insérer l'exemple\",\n \"run\": \"Exécuter\"\n },\n \"inputJsonLabel\": \"JSON d'entrée\"\n },\n \"loading\": {\n \"description\": \"Exécution de l'outil...\"\n },\n \"output\": \"Résultat\"\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"backofficeReact.js","names":[],"sources":["../../../../../src/i18n/locales/fr/backofficeReact.json"],"sourcesContent":["{\n \"actions\": {\n \"form\": {\n \"cancel\": \"Annuler\",\n \"errors\": {\n \"invalidJson\": \"{{label}} doit être un JSON valide.\",\n \"invalidJsonArray\": \"{{label}} doit être un tableau JSON valide.\",\n \"invalidJsonObject\": \"{{label}} doit être un objet JSON valide.\",\n \"invalidNumber\": \"{{label}} doit être un nombre valide.\",\n \"invalidPayload\": \"La charge utile soumise est invalide.\",\n \"required\": \"{{label}} est requis.\",\n \"submitFailed\": \"Impossible de terminer cette action. Veuillez réessayer.\"\n },\n \"submitting\": \"Envoi...\"\n },\n \"view\": \"Voir\"\n },\n \"auth\": {\n \"acceptInvitation\": {\n \"actions\": {\n \"backToLogin\": \"Retour à la connexion\"\n },\n \"errors\": {\n \"alreadyAccepted\": \"Cette invitation a déjà été acceptée.\",\n \"default\": \"Impossible d'accepter l'invitation.\",\n \"emailMismatch\": \"Cette invitation a été envoyée à une autre adresse email.\",\n \"expired\": \"Le lien d'invitation a expiré.\",\n \"invalidToken\": \"Le lien d'invitation est invalide.\",\n \"missingToken\": \"Le lien d'invitation est manquant ou invalide.\",\n \"passwordMismatch\": \"Le mot de passe et sa confirmation ne correspondent pas.\",\n \"passwordPolicyViolation\": \"Votre mot de passe ne respecte pas la politique de sécurité.\",\n \"rateLimited\": \"Trop de tentatives. Veuillez réessayer plus tard.\",\n \"unavailable\": \"L'acceptation d'invitation n'est pas disponible.\"\n },\n \"form\": {\n \"confirmLabel\": \"Confirmer le mot de passe\",\n \"confirmPlaceholder\": \"Confirmez votre mot de passe\",\n \"passwordLabel\": \"Mot de passe\",\n \"passwordPlaceholder\": \"Créez un mot de passe\",\n \"submit\": \"Accepter l'invitation\"\n },\n \"mfaSubtitle\": \"Entrez le code de vérification pour continuer.\",\n \"mfaTitle\": \"Vérifiez votre identité\",\n \"status\": {\n \"success\": \"Invitation acceptée.\",\n \"workingButton\": \"Traitement...\"\n },\n \"subtitle\": \"Créez votre compte pour rejoindre.\",\n \"title\": \"Accepter l'invitation\"\n },\n \"emailCapture\": {\n \"continue\": \"Continuer\",\n \"description\": \"Entrez votre email professionnel pour continuer.\",\n \"emailLabel\": \"Email professionnel\",\n \"emailPlaceholder\": \"vous@entreprise.com\",\n \"forgotPassword\": \"Mot de passe oublié ?\"\n },\n \"loginFlow\": {\n \"errors\": {\n \"accountLocked\": \"Trop de tentatives. Veuillez réessayer plus tard.\",\n \"emailRequired\": \"Entrez une adresse email pour continuer.\",\n \"invalidCredentials\": \"Email ou mot de passe incorrect.\",\n \"invalidEmail\": \"Entrez une adresse email valide.\",\n \"passkeyUnavailable\": \"Les passkeys ne sont pas disponibles.\",\n \"rateLimited\": \"Trop de tentatives. Veuillez réessayer plus tard.\",\n \"tryAgain\": \"Une erreur est survenue. Veuillez réessayer.\"\n },\n \"methods\": {\n \"title\": \"Choisissez une méthode de connexion\"\n },\n \"passkey\": {\n \"description\": \"Utilisez la passkey associée à {{email}}.\",\n \"title\": \"Utiliser une passkey\"\n },\n \"subtitle\": {\n \"default\": \"Choisissez une méthode de connexion pour continuer.\",\n \"mfa\": \"Entrez le code de vérification pour continuer.\"\n },\n \"title\": {\n \"default\": \"Se connecter\",\n \"mfa\": \"Authentification à deux facteurs\"\n }\n },\n \"logout\": {\n \"errors\": {\n \"default\": \"Échec de la déconnexion.\"\n }\n },\n \"methodChooser\": {\n \"actions\": {\n \"back\": \"Retour\"\n },\n \"locked\": \"Trop de tentatives. Veuillez réessayer plus tard.\",\n \"lockedWithTime\": \"Trop de tentatives. Veuillez réessayer à {{time}}.\",\n \"methods\": {\n \"other\": \"{{method}}\",\n \"passkey\": \"Passkey\",\n \"password\": \"Mot de passe\"\n },\n \"prompt\": \"Choisissez comment vous connecter pour <strong>{{email}}</strong>.\"\n },\n \"mfa\": {\n \"actions\": {\n \"back\": \"Retour\",\n \"submit\": \"Vérifier\"\n },\n \"errors\": {\n \"expired\": \"La session de vérification a expiré. Réessayez.\",\n \"invalidChallenge\": \"La session de vérification est invalide. Reprenez la connexion.\",\n \"invalidCode\": \"Code invalide. Réessayez.\",\n \"shortCode\": \"Entrez le code à 6 chiffres.\",\n \"tooManyAttempts\": \"Trop de tentatives. Veuillez réessayer plus tard.\",\n \"verificationFailed\": \"La vérification a échoué. Réessayez.\"\n },\n \"form\": {\n \"label\": \"Code de vérification\",\n \"placeholder\": \"123456\"\n },\n \"helper\": {\n \"default\": \"Entrez le code à 6 chiffres de votre authentificateur.\",\n \"withEmail\": \"Entrez le code à 6 chiffres envoyé à {{email}}.\"\n }\n },\n \"oidc\": {\n \"buttons\": {\n \"apple\": \"Continuer avec Apple\",\n \"generic\": \"Continuer avec un SSO\",\n \"google\": \"Continuer avec Google\"\n }\n },\n \"passkey\": {\n \"actions\": {\n \"showMethods\": \"Utiliser une autre méthode\",\n \"submit\": \"Continuer avec la passkey\",\n \"submitting\": \"En attente de la passkey...\"\n },\n \"errors\": {\n \"cancelled\": \"La connexion par passkey a été annulée.\",\n \"challengeExpired\": \"La demande de passkey a expiré. Réessayez.\",\n \"emailRequired\": \"Entrez votre email pour continuer.\",\n \"failed\": \"Échec de la connexion par passkey.\",\n \"invalidAssertion\": \"La réponse de passkey est invalide. Réessayez.\",\n \"invalidChallenge\": \"La demande de passkey est invalide. Réessayez.\",\n \"invalidEmail\": \"Entrez une adresse email valide.\",\n \"locked\": \"Trop de tentatives. Veuillez réessayer plus tard.\",\n \"lockedWithTime\": \"Trop de tentatives. Veuillez réessayer à {{time}}.\",\n \"noCredential\": \"L'authentificateur n'a retourné aucun identifiant.\",\n \"notAvailable\": \"Les passkeys ne sont pas disponibles sur cet appareil.\",\n \"notFound\": \"Aucune passkey n'est associée à ce compte.\"\n },\n \"form\": {\n \"emailLabel\": \"Email\",\n \"emailPlaceholder\": \"vous@entreprise.com\"\n },\n \"helper\": \"Utilisez une passkey à la place de votre mot de passe.\"\n },\n \"passwordLogin\": {\n \"forgotPassword\": \"Mot de passe oublié ?\",\n \"title\": \"Se connecter\"\n },\n \"passwordResetComplete\": {\n \"errors\": {\n \"expired\": \"Ce lien de réinitialisation a expiré.\",\n \"invalid\": \"Le lien de réinitialisation est invalide ou expiré.\",\n \"minLength\": \"Le mot de passe doit contenir au moins {{minLength}} caractères.\",\n \"mismatch\": \"Les mots de passe ne correspondent pas.\",\n \"missingToken\": \"Le lien de réinitialisation est manquant ou invalide.\",\n \"policyViolation\": \"Votre nouveau mot de passe ne respecte pas la politique de sécurité.\"\n },\n \"form\": {\n \"confirmLabel\": \"Confirmer le mot de passe\",\n \"confirmPlaceholder\": \"Saisissez à nouveau votre mot de passe\",\n \"description\": \"Entrez un nouveau mot de passe pour votre compte.\",\n \"passwordLabel\": \"Mot de passe\",\n \"passwordPlaceholder\": \"Entrez un nouveau mot de passe\",\n \"submit\": \"Mettre à jour le mot de passe\",\n \"title\": \"Nouveau mot de passe\"\n },\n \"subtitle\": \"Choisissez un mot de passe robuste pour sécuriser votre compte.\",\n \"success\": {\n \"action\": \"Retour à la connexion\",\n \"description\": \"Votre mot de passe a été modifié.\",\n \"helper\": \"Vous pouvez maintenant vous connecter avec votre nouveau mot de passe.\",\n \"title\": \"Mot de passe mis à jour\"\n },\n \"title\": \"Définir un nouveau mot de passe\"\n },\n \"passwordResetRequest\": {\n \"errors\": {\n \"emailRequired\": \"Entrez une adresse email.\",\n \"invalidEmail\": \"Veuillez saisir une adresse email valide.\",\n \"rateLimited\": \"Trop de demandes. Veuillez patienter puis réessayer.\",\n \"startFailed\": \"Impossible de démarrer la réinitialisation.\"\n },\n \"form\": {\n \"description\": \"Entrez l'email de votre compte.\",\n \"emailLabel\": \"Email\",\n \"emailPlaceholder\": \"vous@entreprise.com\",\n \"submit\": \"Envoyer le lien de réinitialisation\"\n },\n \"sent\": {\n \"action\": \"Envoyer un autre email\",\n \"description\": \"Nous avons envoyé un lien de réinitialisation à {{email}}.\",\n \"helper\": \"Si vous ne le voyez pas, vérifiez les spams ou réessayez.\",\n \"title\": \"Vérifiez votre email\"\n },\n \"title\": \"Réinitialiser votre mot de passe\"\n },\n \"verifyEmail\": {\n \"actions\": {\n \"continue\": \"Continuer\",\n \"return\": \"Retour à la connexion\"\n },\n \"errors\": {\n \"alreadyVerified\": \"Cette adresse email est déjà vérifiée.\",\n \"expired\": \"Ce lien de vérification a expiré.\",\n \"invalid\": \"Le lien de vérification est invalide ou expiré.\",\n \"missingToken\": \"Le lien de vérification est manquant ou invalide.\"\n },\n \"status\": {\n \"success\": \"Email vérifié. Vous pouvez continuer.\",\n \"verifying\": \"Vérification...\",\n \"verifyingButton\": \"Vérification\"\n },\n \"subtitle\": \"Confirmez votre adresse email pour continuer.\",\n \"title\": \"Vérifier votre email\"\n }\n },\n \"common\": {\n \"actions\": {\n \"close\": \"Fermer\",\n \"copied\": \"Copié\",\n \"copy\": \"Copier\",\n \"pick\": \"Choisir\",\n \"retry\": \"Réessayer\"\n },\n \"boolean\": {\n \"no\": \"Non\",\n \"yes\": \"Oui\"\n },\n \"breadcrumb\": \"Fil d'Ariane\",\n \"errors\": {\n \"unexpected\": \"Une erreur inattendue est survenue.\"\n },\n \"loading\": \"Chargement...\",\n \"notAvailable\": \"N/D\",\n \"time\": {\n \"lastDay\": \"24 h\",\n \"lastHour\": \"1 h\",\n \"lastSevenDays\": \"7 j\",\n \"lastThirtyDays\": \"30 j\"\n }\n },\n \"dashboard\": {\n \"actions\": {\n \"openList\": \"Ouvrir la liste\",\n \"openTool\": \"Ouvrir l'outil\"\n },\n \"subtitle\": \"Vue d'ensemble du contexte Work.\",\n \"title\": \"Tableau de bord\"\n },\n \"detail\": {\n \"actionResult\": {\n \"message\": \"Message\",\n \"status\": \"Statut\"\n },\n \"actions\": {\n \"backToList\": \"Retour à la liste\",\n \"viewDetails\": \"Voir le détail\"\n },\n \"columns\": {\n \"charged\": \"Facturé\",\n \"events\": \"Événements\",\n \"markup\": \"Marge\",\n \"name\": \"Nom\",\n \"rawCost\": \"Coût réel\"\n },\n \"loadingTitle\": \"Détail\",\n \"notFound\": \"Introuvable\",\n \"notFoundDescription\": \"Cet élément n'existe pas ou n'est plus disponible.\"\n },\n \"emptyState\": {\n \"listEmpty\": {\n \"description\": \"Aucun enregistrement à afficher.\",\n \"title\": \"Aucun résultat\"\n },\n \"listEmptyFiltered\": {\n \"actions\": {\n \"reset\": \"Réinitialiser les filtres\"\n },\n \"description\": \"Aucun résultat ne correspond aux filtres actuels.\"\n }\n },\n \"filters\": {\n \"actions\": {\n \"applyFilter\": \"Appliquer le filtre {{label}}\",\n \"changeFilterValue\": \"Modifier {{label}}\",\n \"clearFilter\": \"Effacer le filtre {{label}}\",\n \"filterBy\": \"Filtrer par {{label}}\",\n \"removeFilterValue\": \"Retirer une valeur du filtre {{label}}\"\n },\n \"all\": \"Tous {{label}}\",\n \"boolean\": {\n \"no\": \"Non\",\n \"yes\": \"Oui\"\n },\n \"placeholders\": {\n \"anyEntity\": \"Tous\",\n \"search\": \"Rechercher {{label}}\",\n \"unresolved\": \"ID introuvable\"\n },\n \"sections\": {\n \"default\": \"Filtres\"\n },\n \"selectedEntities_one\": \"{{count}} sélection\",\n \"selectedEntities_many\": \"{{count}} sélections\",\n \"selectedEntities_other\": \"{{count}} sélections\"\n },\n \"flags\": {\n \"agentManaged\": {\n \"agentManaged\": \"Géré par un agent\",\n \"userManaged\": \"Géré par un utilisateur\"\n },\n \"capability\": {\n \"allowed\": \"Autorisé\",\n \"denied\": \"Refusé\"\n },\n \"default\": {\n \"default\": \"Par défaut\",\n \"notDefault\": \"Non par défaut\"\n },\n \"deployedProduction\": {\n \"deployed\": \"Déployé\",\n \"notDeployed\": \"Non déployé\"\n },\n \"enabled\": {\n \"disabled\": \"Désactivé\",\n \"enabled\": \"Activé\"\n },\n \"encrypted\": {\n \"encrypted\": \"Chiffré\",\n \"notEncrypted\": \"Non chiffré\"\n },\n \"failure\": {\n \"failed\": \"Échoué\",\n \"ok\": \"OK\"\n },\n \"forced\": {\n \"forced\": \"Forcé\",\n \"normal\": \"Normal\"\n },\n \"locked\": {\n \"locked\": \"Verrouillé\",\n \"unlocked\": \"Déverrouillé\"\n }\n },\n \"format\": {\n \"currency\": \"{{value, currency}}\",\n \"number\": \"{{value, number}}\",\n \"percent\": \"{{value, percent}}\"\n },\n \"history\": \"\",\n \"hub\": {\n \"empty\": {\n \"description\": \"Aucun élément disponible ne correspond aux filtres actuels.\",\n \"title\": \"Aucun élément\"\n },\n \"itemKinds\": {\n \"entity\": \"Liste\",\n \"tool\": \"Outil\"\n },\n \"search\": {\n \"placeholder\": \"Rechercher\"\n },\n \"subtitle\": \"Choisissez un élément pour continuer.\"\n },\n \"list\": {\n \"actions\": {\n \"refresh\": \"Actualiser\",\n \"refreshing\": \"Actualisation…\",\n \"retry\": \"Réessayer\"\n },\n \"errors\": {\n \"tableFailed\": \"Le tableau n'a pas pu se charger.\",\n \"title\": \"Erreur du tableau\"\n },\n \"loaded_one\": \"{{count, number}} élément chargé\",\n \"loaded_many\": \"{{count, number}} éléments chargés\",\n \"loaded_other\": \"{{count, number}} éléments chargés\",\n \"loadMore\": {\n \"action\": \"Charger plus\",\n \"end\": \"Fin des résultats\",\n \"loading\": \"Chargement…\"\n },\n \"refreshingRows\": \"Filtrage en cours…\",\n \"showing\": \"Affichage de {{shown, number}} sur {{total, number}}\",\n \"sort\": {\n \"label\": \"Ordre de tri\"\n },\n \"title\": \"\"\n },\n \"overview\": \"\",\n \"picker\": {\n \"errors\": {\n \"loadFailed\": \"Échec du chargement.\"\n },\n \"searchRequired\": \"Saisissez un ID pour rechercher.\",\n \"title\": \"Sélectionner un ID\",\n \"unavailable\": \"Sélecteur indisponible pour {{entity}}.\"\n },\n \"relations\": {\n \"menu\": {\n \"label\": \"Relations\"\n },\n \"openFilteredList\": \"Ouvrir la liste filtrée : {{label}}\"\n },\n \"review\": {\n \"status\": {\n \"approved\": \"Approuvé\",\n \"changesRequested\": \"Modifications demandées\",\n \"pending\": \"En attente\",\n \"unknown\": \"Inconnu\"\n }\n },\n \"sidebar\": {\n \"actions\": {\n \"collapseSidebar\": \"Fermer\",\n \"expandSidebar\": \"Ouvrir\",\n \"pin\": \"Épingler\",\n \"reorder\": \"Réordonner\",\n \"unpin\": \"Désépingler\"\n },\n \"items\": {\n \"dashboard\": \"Tableau de bord\"\n },\n \"navigationAriaLabel\": \"Navigation backoffice\",\n \"profile\": {\n \"actions\": {\n \"signOut\": \"Se déconnecter\"\n },\n \"menuAriaLabel\": \"Ouvrir le menu profil\",\n \"title\": \"Profil\",\n \"unknownUser\": \"Utilisateur inconnu\"\n },\n \"search\": {\n \"placeholder\": \"Rechercher...\"\n },\n \"sections\": {\n \"pinned\": \"Épinglés\",\n \"recent\": \"Récents\"\n }\n },\n \"tools\": {\n \"errors\": {\n \"description\": \"Impossible d'exécuter cet outil.\",\n \"details\": \"Détails de l'erreur\",\n \"label\": \"Erreur\",\n \"title\": \"Erreur d'outil\",\n \"unknown\": \"Erreur inconnue\"\n },\n \"forms\": {\n \"actions\": {\n \"insertExample\": \"Insérer l'exemple\",\n \"run\": \"Exécuter\"\n },\n \"inputJsonLabel\": \"JSON d'entrée\"\n },\n \"loading\": {\n \"description\": \"Exécution de l'outil...\"\n },\n \"output\": \"Résultat\"\n }\n}\n"],"mappings":""}
package/lib/esm/index.js CHANGED
@@ -11,47 +11,47 @@ import { requireField as d, requireLinkedRecordId as f, resolveAgentStartOutcome
11
11
  import { useBackofficeConfig as h } from "./provider/BackofficeConfigContext.js";
12
12
  import { EntityIdFilterField as g } from "./components/backoffice/filters/EntityIdFilterField.js";
13
13
  import { BackofficeErrorBoundary as _ } from "./components/backoffice/errors/BackofficeErrorBoundary.js";
14
- import { EntityIdPickerDialog as v } from "./components/backoffice/pickers/EntityIdPickerDialog.js";
15
- import { BackofficeBillingUsageChart as y } from "./components/backoffice/billing/BackofficeBillingUsageChart.js";
16
- import { resolveBackofficeTargetIcon as b } from "./components/backoffice/links/resolveBackofficeTargetIcon.js";
17
- import { resolveBackofficeLink as x } from "./components/backoffice/links/resolveBackofficeLink.js";
18
- import { useBackofficeLink as S } from "./components/backoffice/links/useBackofficeLink.js";
19
- import { BackofficeInlineLink as C } from "./components/backoffice/links/BackofficeInlineLink.js";
20
- import { buildDataTableColumns as w } from "./components/backoffice/columns/buildDataTableColumns.js";
21
- import { BackofficeDetailBadgeRow as T } from "./components/backoffice/detail/BackofficeDetailBadgeRow.js";
22
- import { BackofficeEntitySummaryHeader as E } from "./components/backoffice/detail/BackofficeEntitySummaryHeader.js";
23
- import { BackofficeLifecycleTimelineSection as D } from "./components/backoffice/detail/BackofficeLifecycleTimelineSection.js";
24
- import { BackofficeRelationsSummaryGrid as O } from "./components/backoffice/detail/BackofficeRelationsSummaryGrid.js";
25
- import { BackofficeTokenUsageBreakdown as k } from "./components/backoffice/detail/BackofficeTokenUsageBreakdown.js";
26
- import { BackofficeUsageCostBreakdown as A } from "./components/backoffice/detail/BackofficeUsageCostBreakdown.js";
27
- import { createBackofficeEntityLinkProps as j } from "./components/backoffice/detail/createBackofficeEntityLinkProps.js";
28
- import { formatListAsMarkdown as M } from "./components/backoffice/detail/detailPayloadUtils.js";
29
- import { BackofficeFilterAction as N } from "./components/backoffice/filters/BackofficeFilterAction.js";
30
- import { EntityFilterValue as P, EntityFilterValueText as F } from "./components/backoffice/filters/EntityFilterValue.js";
31
- import { BackofficeHubTemplate as I } from "./components/backoffice/hub/BackofficeHubTemplate.js";
32
- import { BackofficeLink as L } from "./components/backoffice/links/BackofficeLink.js";
33
- import { BackofficeLinkLabel as R } from "./components/backoffice/links/BackofficeLinkLabel.js";
34
- import { BackofficeRightPageLayout as z } from "./components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js";
35
- import { BackofficeOverviewLayout as B } from "./components/backoffice/overview/BackofficeOverviewLayout.js";
36
- import { BackofficeFilterableCell as V } from "./components/backoffice/shared/BackofficeFilterableCell.js";
37
- import { BackofficeEntityLink as ee } from "./components/backoffice/refs/BackofficeEntityLink.js";
38
- import { BackofficeLazyEntityCount as H } from "./components/backoffice/refs/BackofficeLazyEntityCount.js";
39
- import { BackofficeRelatedCountLink as U } from "./components/backoffice/refs/BackofficeRelatedCountLink.js";
40
- import { BackofficeTabbedDetailShell as W } from "./components/backoffice/scaffolds/BackofficeTabbedDetailShell.js";
41
- import { BackofficeFormattedCurrency as G } from "./components/backoffice/shared/BackofficeFormattedCurrency.js";
42
- import { BackofficeFormattedNumber as K } from "./components/backoffice/shared/BackofficeFormattedNumber.js";
43
- import { BackofficeInlineFilterRow as q } from "./components/backoffice/shared/BackofficeInlineFilterRow.js";
44
- import { BackofficeToolsDocPanel as J } from "./components/backoffice/tools/BackofficeToolsDocPanel.js";
45
- import { BackofficeToolsErrorFallback as Y } from "./components/backoffice/tools/BackofficeToolsErrorFallback.js";
46
- import { BackofficeToolsJsonForm as X } from "./components/backoffice/tools/BackofficeToolsJsonForm.js";
47
- import { BackofficeToolsQueryBoundary as Z } from "./components/backoffice/tools/BackofficeToolsQueryBoundary.js";
48
- import { parseToolJson as Q } from "./components/backoffice/tools/parseToolJson.js";
49
- import { base64UrlToBuffer as $, bufferToBase64Url as te, mapWebAuthnRegistrationError as ne, parseSignCount as re } from "./modules/webauthn.js";
50
- import { createUseAuth as ie } from "./hooks/useAuth.js";
51
- import { useBackofficeListUrlState as ae } from "./hooks/useBackofficeListUrlState.js";
52
- import { useConditionalSubscription as oe } from "./hooks/useConditionalSubscription.js";
53
- import se from "./hooks/useCopyToClipboard.js";
54
- import ce from "./hooks/useInfiniteConnection.js";
14
+ import v from "./hooks/useInfiniteConnection.js";
15
+ import { EntityIdPickerDialog as y } from "./components/backoffice/pickers/EntityIdPickerDialog.js";
16
+ import { BackofficeBillingUsageChart as b } from "./components/backoffice/billing/BackofficeBillingUsageChart.js";
17
+ import { resolveBackofficeTargetIcon as x } from "./components/backoffice/links/resolveBackofficeTargetIcon.js";
18
+ import { resolveBackofficeLink as S } from "./components/backoffice/links/resolveBackofficeLink.js";
19
+ import { useBackofficeLink as C } from "./components/backoffice/links/useBackofficeLink.js";
20
+ import { BackofficeInlineLink as w } from "./components/backoffice/links/BackofficeInlineLink.js";
21
+ import { buildDataTableColumns as T } from "./components/backoffice/columns/buildDataTableColumns.js";
22
+ import { BackofficeDetailBadgeRow as E } from "./components/backoffice/detail/BackofficeDetailBadgeRow.js";
23
+ import { BackofficeEntitySummaryHeader as D } from "./components/backoffice/detail/BackofficeEntitySummaryHeader.js";
24
+ import { BackofficeLifecycleTimelineSection as O } from "./components/backoffice/detail/BackofficeLifecycleTimelineSection.js";
25
+ import { BackofficeRelationsSummaryGrid as k } from "./components/backoffice/detail/BackofficeRelationsSummaryGrid.js";
26
+ import { BackofficeTokenUsageBreakdown as A } from "./components/backoffice/detail/BackofficeTokenUsageBreakdown.js";
27
+ import { BackofficeUsageCostBreakdown as j } from "./components/backoffice/detail/BackofficeUsageCostBreakdown.js";
28
+ import { createBackofficeEntityLinkProps as M } from "./components/backoffice/detail/createBackofficeEntityLinkProps.js";
29
+ import { formatListAsMarkdown as N } from "./components/backoffice/detail/detailPayloadUtils.js";
30
+ import { BackofficeFilterAction as P } from "./components/backoffice/filters/BackofficeFilterAction.js";
31
+ import { EntityFilterValue as F, EntityFilterValueText as I } from "./components/backoffice/filters/EntityFilterValue.js";
32
+ import { BackofficeHubTemplate as L } from "./components/backoffice/hub/BackofficeHubTemplate.js";
33
+ import { BackofficeLink as R } from "./components/backoffice/links/BackofficeLink.js";
34
+ import { BackofficeLinkLabel as z } from "./components/backoffice/links/BackofficeLinkLabel.js";
35
+ import { BackofficeRightPageLayout as B } from "./components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js";
36
+ import { BackofficeOverviewLayout as V } from "./components/backoffice/overview/BackofficeOverviewLayout.js";
37
+ import { BackofficeFilterableCell as ee } from "./components/backoffice/shared/BackofficeFilterableCell.js";
38
+ import { BackofficeEntityLink as H } from "./components/backoffice/refs/BackofficeEntityLink.js";
39
+ import { BackofficeLazyEntityCount as U } from "./components/backoffice/refs/BackofficeLazyEntityCount.js";
40
+ import { BackofficeRelatedCountLink as W } from "./components/backoffice/refs/BackofficeRelatedCountLink.js";
41
+ import { BackofficeTabbedDetailShell as G } from "./components/backoffice/scaffolds/BackofficeTabbedDetailShell.js";
42
+ import { BackofficeFormattedCurrency as K } from "./components/backoffice/shared/BackofficeFormattedCurrency.js";
43
+ import { BackofficeFormattedNumber as q } from "./components/backoffice/shared/BackofficeFormattedNumber.js";
44
+ import { BackofficeInlineFilterRow as J } from "./components/backoffice/shared/BackofficeInlineFilterRow.js";
45
+ import { BackofficeToolsDocPanel as Y } from "./components/backoffice/tools/BackofficeToolsDocPanel.js";
46
+ import { BackofficeToolsErrorFallback as X } from "./components/backoffice/tools/BackofficeToolsErrorFallback.js";
47
+ import { BackofficeToolsJsonForm as Z } from "./components/backoffice/tools/BackofficeToolsJsonForm.js";
48
+ import { BackofficeToolsQueryBoundary as Q } from "./components/backoffice/tools/BackofficeToolsQueryBoundary.js";
49
+ import { parseToolJson as $ } from "./components/backoffice/tools/parseToolJson.js";
50
+ import { base64UrlToBuffer as te, bufferToBase64Url as ne, mapWebAuthnRegistrationError as re, parseSignCount as ie } from "./modules/webauthn.js";
51
+ import { createUseAuth as ae } from "./hooks/useAuth.js";
52
+ import { useBackofficeListUrlState as oe } from "./hooks/useBackofficeListUrlState.js";
53
+ import { useConditionalSubscription as se } from "./hooks/useConditionalSubscription.js";
54
+ import ce from "./hooks/useCopyToClipboard.js";
55
55
  import { useRefetchNeededReload as le } from "./hooks/useRefetchNeededReload.js";
56
56
  import { createI18nInstance as ue } from "./i18n/createI18nInstance.js";
57
57
  import { backofficeReactI18nResources as de, withBackofficeReactI18nResources as fe } from "./i18n/resources.js";
@@ -67,4 +67,4 @@ import { useMutationAction as xe } from "./relay/useMutationAction.js";
67
67
  import { identityView as Se } from "./relay/identityView.js";
68
68
  import { useCursorResumableSubscription as Ce } from "./subscriptions/useCursorResumableSubscription.js";
69
69
  import { decodeBase64ToUtf8 as we, encodeUtf8ToBase64 as Te } from "@plumile/backoffice-core/base64.js";
70
- export { s as AcceptInvitationScreen, e as AuthRefreshNotice, y as BackofficeBillingUsageChart, T as BackofficeDetailBadgeRow, ee as BackofficeEntityLink, E as BackofficeEntitySummaryHeader, _ as BackofficeErrorBoundary, N as BackofficeFilterAction, V as BackofficeFilterableCell, G as BackofficeFormattedCurrency, K as BackofficeFormattedNumber, I as BackofficeHubTemplate, q as BackofficeInlineFilterRow, C as BackofficeInlineLink, H as BackofficeLazyEntityCount, D as BackofficeLifecycleTimelineSection, L as BackofficeLink, R as BackofficeLinkLabel, B as BackofficeOverviewLayout, me as BackofficeProvider, U as BackofficeRelatedCountLink, O as BackofficeRelationGrid, O as BackofficeRelationsSummaryGrid, z as BackofficeRightPageLayout, W as BackofficeTabbedDetailShell, k as BackofficeTokenUsageBreakdown, J as BackofficeToolsDocPanel, Y as BackofficeToolsErrorFallback, X as BackofficeToolsJsonForm, Z as BackofficeToolsQueryBoundary, A as BackofficeUsageCostBreakdown, P as EntityFilterValue, F as EntityFilterValueText, g as EntityIdFilterField, v as EntityIdPickerDialog, a as LoginFlow, c as PasswordResetCompleteScreen, l as PasswordResetRequestScreen, n as TotpQrCode, u as VerifyEmailScreen, be as appendNodeToConnections, de as backofficeReactI18nResources, $ as base64UrlToBuffer, te as bufferToBase64Url, w as buildDataTableColumns, r as buildTotpOtpAuthUri, i as createBackofficeAuthHeaders, j as createBackofficeEntityLinkProps, he as createBackofficeLazyValue, ue as createI18nInstance, ye as createInlineDataReader, ie as createUseAuth, we as decodeBase64ToUtf8, Te as encodeUtf8ToBase64, ge as formatFileSize, M as formatListAsMarkdown, Se as identityView, ne as mapWebAuthnRegistrationError, re as parseSignCount, Q as parseToolJson, d as requireField, f as requireLinkedRecordId, p as resolveAgentStartOutcome, x as resolveBackofficeLink, b as resolveBackofficeTargetIcon, m as resolveMutationOutcome, ve as resolveVisibleDetailPages, o as synchronizeAuthStatusQuery, _e as uploadFilesSequentially, t as useAuthRefreshStateSnapshot, h as useBackofficeConfig, S as useBackofficeLink, ae as useBackofficeListUrlState, oe as useConditionalSubscription, se as useCopyToClipboard, Ce as useCursorResumableSubscription, ce as useInfiniteConnection, xe as useMutationAction, le as useRefetchNeededReload, pe as useReviewStatusLabel, fe as withBackofficeReactI18nResources };
70
+ export { s as AcceptInvitationScreen, e as AuthRefreshNotice, b as BackofficeBillingUsageChart, E as BackofficeDetailBadgeRow, H as BackofficeEntityLink, D as BackofficeEntitySummaryHeader, _ as BackofficeErrorBoundary, P as BackofficeFilterAction, ee as BackofficeFilterableCell, K as BackofficeFormattedCurrency, q as BackofficeFormattedNumber, L as BackofficeHubTemplate, J as BackofficeInlineFilterRow, w as BackofficeInlineLink, U as BackofficeLazyEntityCount, O as BackofficeLifecycleTimelineSection, R as BackofficeLink, z as BackofficeLinkLabel, V as BackofficeOverviewLayout, me as BackofficeProvider, W as BackofficeRelatedCountLink, k as BackofficeRelationGrid, k as BackofficeRelationsSummaryGrid, B as BackofficeRightPageLayout, G as BackofficeTabbedDetailShell, A as BackofficeTokenUsageBreakdown, Y as BackofficeToolsDocPanel, X as BackofficeToolsErrorFallback, Z as BackofficeToolsJsonForm, Q as BackofficeToolsQueryBoundary, j as BackofficeUsageCostBreakdown, F as EntityFilterValue, I as EntityFilterValueText, g as EntityIdFilterField, y as EntityIdPickerDialog, a as LoginFlow, c as PasswordResetCompleteScreen, l as PasswordResetRequestScreen, n as TotpQrCode, u as VerifyEmailScreen, be as appendNodeToConnections, de as backofficeReactI18nResources, te as base64UrlToBuffer, ne as bufferToBase64Url, T as buildDataTableColumns, r as buildTotpOtpAuthUri, i as createBackofficeAuthHeaders, M as createBackofficeEntityLinkProps, he as createBackofficeLazyValue, ue as createI18nInstance, ye as createInlineDataReader, ae as createUseAuth, we as decodeBase64ToUtf8, Te as encodeUtf8ToBase64, ge as formatFileSize, N as formatListAsMarkdown, Se as identityView, re as mapWebAuthnRegistrationError, ie as parseSignCount, $ as parseToolJson, d as requireField, f as requireLinkedRecordId, p as resolveAgentStartOutcome, S as resolveBackofficeLink, x as resolveBackofficeTargetIcon, m as resolveMutationOutcome, ve as resolveVisibleDetailPages, o as synchronizeAuthStatusQuery, _e as uploadFilesSequentially, t as useAuthRefreshStateSnapshot, h as useBackofficeConfig, C as useBackofficeLink, oe as useBackofficeListUrlState, se as useConditionalSubscription, ce as useCopyToClipboard, Ce as useCursorResumableSubscription, v as useInfiniteConnection, xe as useMutationAction, le as useRefetchNeededReload, pe as useReviewStatusLabel, fe as withBackofficeReactI18nResources };
@@ -25,7 +25,7 @@ import { Tag as k } from "@plumile/ui/backoffice/atoms/tag/Tag.js";
25
25
  import { setWhereValue as ee } from "@plumile/backoffice-core/filters/where.js";
26
26
  import te from "@plumile/router/routing/useLocation.js";
27
27
  import { BackofficePageHeader as ne } from "@plumile/ui/backoffice/molecules/backoffice_page_header/BackofficePageHeader.js";
28
- import { Tabs as re } from "@plumile/ui/atomic/molecules/tabs/Tabs.js";
28
+ import { NavigationTabs as re } from "@plumile/ui/atomic/molecules/tabs/NavigationTabs.js";
29
29
  import { DetailPageTemplate as A } from "@plumile/ui/backoffice/templates/detail_page_template/DetailPageTemplate.js";
30
30
  import { BackofficeKeyValueList as j } from "@plumile/ui/backoffice/molecules/backoffice_key_value_list/BackofficeKeyValueList.js";
31
31
  import { BackofficeRelationsMenu as M } from "@plumile/ui/backoffice/molecules/backoffice_relations_menu/BackofficeRelationsMenu.js";
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeEntityDetailLayoutPage.js","names":[],"sources":["../../../src/pages/BackofficeEntityDetailLayoutPage.tsx"],"sourcesContent":["import { Suspense, type JSX, type ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport * as ReactRelay from 'react-relay';\nimport Link from '@plumile/router/routing/Link.js';\nimport useLocation from '@plumile/router/routing/useLocation.js';\n\nimport { BACKOFFICE_DATE_TIME_OPTIONS } from '@plumile/backoffice-core/constants.js';\nimport { setWhereValue } from '@plumile/backoffice-core/filters/where.js';\nimport type {\n BackofficeEntityManifestItem,\n BackofficePreparedDetailLayoutDataRoute,\n BackofficeResolvedDetailLayoutFacetConfig,\n} from '@plumile/backoffice-core/types.js';\nimport { FormattedDate } from '@plumile/ui/atomic/atoms/formatted-date/FormattedDate.js';\nimport { Tabs } from '@plumile/ui/atomic/molecules/tabs/Tabs.js';\nimport { Tag } from '@plumile/ui/backoffice/atoms/tag/Tag.js';\nimport { BackofficeKeyValueList } from '@plumile/ui/backoffice/molecules/backoffice_key_value_list/BackofficeKeyValueList.js';\nimport { BackofficePageHeader } from '@plumile/ui/backoffice/molecules/backoffice_page_header/BackofficePageHeader.js';\nimport {\n BackofficeRelationsMenu,\n type BackofficeRelationsMenuItem,\n} from '@plumile/ui/backoffice/molecules/backoffice_relations_menu/BackofficeRelationsMenu.js';\nimport { Spinner } from '@plumile/ui/backoffice/atoms/spinner/Spinner.js';\nimport { DetailPageTemplate } from '@plumile/ui/backoffice/templates/detail_page_template/DetailPageTemplate.js';\n\nimport { BackofficeDetailBadgeRow } from '../components/backoffice/detail/BackofficeDetailBadgeRow.js';\nimport { BackofficeLazyEntityCount } from '../components/backoffice/refs/BackofficeLazyEntityCount.js';\nimport { BackofficeEntityDetailNotFound } from '../components/backoffice/scaffolds/BackofficeEntityDetailNotFound.js';\nimport { BackofficeRightPageLayout } from '../components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js';\nimport { buildEntityDetailBreadcrumb } from '../components/backoffice/layout/breadcrumb/buildBreadcrumbs.js';\nimport { useBackofficeReactTranslation } from '../i18n/useBackofficeReactTranslation.js';\nimport { useBackofficeConfig } from '../provider/BackofficeConfigContext.js';\nimport { useBackofficeRuntimeFragment } from '../relay/typedRelayHooks.js';\nimport * as pageStyles from './backofficeEntityDetailPage.css.js';\nimport {\n resolveLabel,\n resolveRelationValue,\n} from './BackofficeEntityDetailPage.helpers.js';\nimport { resolveHeaderItems } from './BackofficeEntityDetailPage.view-helpers.js';\nimport { BackofficeEntityDetailLayoutContextProvider } from './detail/BackofficeEntityDetailLayoutContext.js';\nimport { buildTabsItems } from './detail/buildTabsItems.js';\nimport { resolveVisibleDetailPages } from './detail/pageResolution.js';\nimport { BackofficeRedirect } from './BackofficeRedirect.js';\n\nconst { usePreloadedQuery } = ReactRelay;\n\nconst normalizePath = (value: string): string => {\n return value.trim().replace(/^\\/+|\\/+$/g, '');\n};\n\nconst resolveActivePagePath = (\n pathname: string,\n id: string,\n config: BackofficeResolvedDetailLayoutFacetConfig,\n): string => {\n const pages = [config.pages.mainPage, ...(config.pages.subPages ?? [])];\n const activePage = pages.find((page) => {\n return pathname === config.routes.detailPage(id, page.id);\n });\n return activePage?.path ?? '';\n};\n\nconst RelationCountLoading = (): JSX.Element => {\n return (\n <span className={pageStyles.relationCountLoading}>\n <Spinner size={12} />\n </span>\n );\n};\n\nconst DetailPageContentLoading = (): JSX.Element => {\n const { t } = useBackofficeReactTranslation();\n return (\n <div role=\"status\" aria-live=\"polite\" aria-busy=\"true\">\n <Spinner size={20} ariaLabel={t('common.loading')} />\n </div>\n );\n};\n\nexport type BackofficeEntityDetailLayoutPageProps = {\n entityManifest: BackofficeEntityManifestItem;\n config: BackofficeResolvedDetailLayoutFacetConfig;\n prepared: BackofficePreparedDetailLayoutDataRoute;\n children?: ReactNode;\n};\n\ntype BackofficeEntityDetailLayoutPageContentProps = {\n config: BackofficeResolvedDetailLayoutFacetConfig;\n prepared: BackofficePreparedDetailLayoutDataRoute;\n layoutNodeRef: unknown;\n children?: ReactNode;\n};\n\nconst BackofficeEntityDetailLayoutPageContent = ({\n config,\n prepared,\n layoutNodeRef,\n children,\n}: BackofficeEntityDetailLayoutPageContentProps): JSX.Element => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const { entities } = useBackofficeConfig();\n const { pathname } = useLocation();\n const layoutNode = useBackofficeRuntimeFragment(\n config.layoutPage.fragment,\n layoutNodeRef,\n );\n\n const layoutView = config.layoutPage.toView(layoutNode);\n const activePagePath = resolveActivePagePath(pathname, prepared.id, config);\n const resolvedPages = resolveVisibleDetailPages({\n mainPage: config.pages.mainPage,\n subPages: config.pages.subPages,\n activePagePath,\n node: layoutView,\n });\n\n if (!resolvedPages.hasVisiblePages || resolvedPages.activePage == null) {\n return <BackofficeRedirect to={config.routes.list} />;\n }\n\n const { activePage } = resolvedPages;\n if (\n activePagePath !== '' &&\n normalizePath(activePage.path) !== normalizePath(activePagePath)\n ) {\n return (\n <BackofficeRedirect\n to={config.routes.detailPage(prepared.id, activePage.id)}\n />\n );\n }\n\n const tabsItems = buildTabsItems({\n pages: resolvedPages.pages,\n id: prepared.id,\n tApp,\n detailPageHref: config.routes.detailPage,\n });\n const resolveEntityHref = (entityId: string, refId: string) => {\n const entityConfig = entities[entityId];\n if (entityConfig == null) {\n return null;\n }\n return entityConfig.routes.detail(refId);\n };\n const header = resolveHeaderItems(config.header, layoutView, {\n tApp,\n t,\n resolveEntityHref,\n renderLink: (href, label) => {\n return (\n <Link to={href} preloadOnHover=\"code-and-data\">\n {label}\n </Link>\n );\n },\n renderDate: (value, fallback) => {\n return (\n <FormattedDate\n value={value}\n options={BACKOFFICE_DATE_TIME_OPTIONS}\n fallback={fallback}\n />\n );\n },\n renderTag: (tone, label) => {\n return <Tag tone={tone}>{label}</Tag>;\n },\n renderBadgeRow: (items) => {\n return <BackofficeDetailBadgeRow items={items} />;\n },\n });\n const relationMenuItems: BackofficeRelationsMenuItem[] = (\n config.relations ?? []\n ).flatMap((relation) => {\n const { path, target, whereKey } = relation;\n const value = resolveRelationValue(relation.value(layoutView));\n if (value == null) {\n return [];\n }\n\n const entityManifest = entities[target];\n if (entityManifest?.hasList !== true) {\n return [];\n }\n\n const where = setWhereValue(null, whereKey, value, path);\n if (where == null) {\n return [];\n }\n\n const encoded = entityManifest.listNavigation.encode({ where });\n\n return [\n {\n id: relation.id,\n label: resolveLabel(relation.label, tApp),\n count: (\n <BackofficeLazyEntityCount\n entity={target}\n loadingFallback={<RelationCountLoading />}\n where={where}\n />\n ),\n destination: {\n pathname: entityManifest.routes.list,\n filters: encoded.filters,\n query: encoded.query,\n },\n },\n ];\n });\n const breadcrumb = buildEntityDetailBreadcrumb({\n config,\n tApp,\n entityId: prepared.id,\n layoutView,\n pageLabel: activePage.label(tApp),\n pageId: activePage.id,\n });\n let headerMetaNode: JSX.Element | undefined;\n if (header.status != null || header.badges != null) {\n headerMetaNode = (\n <div className={pageStyles.headerMeta}>\n {header.status}\n {header.badges}\n </div>\n );\n }\n let headerItemsNode: JSX.Element | null = null;\n if (header.items != null && header.items.length > 0) {\n headerItemsNode = (\n <div className={pageStyles.headerMetaList}>\n <BackofficeKeyValueList items={header.items} />\n </div>\n );\n }\n let headerActionsNode: JSX.Element | undefined;\n if (relationMenuItems.length > 0) {\n headerActionsNode = (\n <div className={pageStyles.headerRelationGroup}>\n <BackofficeRelationsMenu\n label={t('relations.menu.label')}\n items={relationMenuItems}\n />\n </div>\n );\n }\n\n const headerNode = (\n <div className={pageStyles.headerBlock}>\n <BackofficePageHeader\n title={header.title}\n subtitle={header.subtitle}\n meta={headerMetaNode}\n actions={headerActionsNode}\n />\n {headerItemsNode}\n </div>\n );\n let tabsNode: JSX.Element | null = null;\n if (resolvedPages.pages.length > 1) {\n tabsNode = (\n <Tabs items={tabsItems} activeId={activePage.id} variant=\"underline\" />\n );\n }\n\n return (\n <BackofficeEntityDetailLayoutContextProvider\n value={{\n activePage,\n config,\n entityId: prepared.id,\n layoutView,\n tabsItems,\n visiblePages: resolvedPages.pages,\n }}\n >\n <BackofficeRightPageLayout breadcrumb={breadcrumb}>\n <DetailPageTemplate\n headerNode={headerNode}\n tabsNode={tabsNode}\n headerDensity=\"compact\"\n >\n <Suspense fallback={<DetailPageContentLoading />}>\n {children}\n </Suspense>\n </DetailPageTemplate>\n </BackofficeRightPageLayout>\n </BackofficeEntityDetailLayoutContextProvider>\n );\n};\n\nexport const BackofficeEntityDetailLayoutPage = ({\n config,\n prepared,\n children,\n}: BackofficeEntityDetailLayoutPageProps): JSX.Element => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\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\n if (layoutNodeRef == null) {\n return (\n <BackofficeRightPageLayout\n breadcrumb={[\n {\n kind: 'link',\n target: {\n kind: 'entity-list',\n entityId: config.id,\n },\n label: config.label(tApp),\n },\n {\n kind: 'current',\n target: {\n kind: 'entity-detail',\n entityId: config.id,\n id: prepared.id,\n },\n label: t('detail.notFound'),\n },\n ]}\n >\n <BackofficeEntityDetailNotFound listHref={config.routes.list} />\n </BackofficeRightPageLayout>\n );\n }\n\n return (\n <BackofficeEntityDetailLayoutPageContent\n config={config}\n prepared={prepared}\n layoutNodeRef={layoutNodeRef}\n >\n {children}\n </BackofficeEntityDetailLayoutPageContent>\n );\n};\n\nexport default BackofficeEntityDetailLayoutPage;\n"],"mappings":"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"}
1
+ {"version":3,"file":"BackofficeEntityDetailLayoutPage.js","names":[],"sources":["../../../src/pages/BackofficeEntityDetailLayoutPage.tsx"],"sourcesContent":["import { Suspense, type JSX, type ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport * as ReactRelay from 'react-relay';\nimport Link from '@plumile/router/routing/Link.js';\nimport useLocation from '@plumile/router/routing/useLocation.js';\n\nimport { BACKOFFICE_DATE_TIME_OPTIONS } from '@plumile/backoffice-core/constants.js';\nimport { setWhereValue } from '@plumile/backoffice-core/filters/where.js';\nimport type {\n BackofficeEntityManifestItem,\n BackofficePreparedDetailLayoutDataRoute,\n BackofficeResolvedDetailLayoutFacetConfig,\n} from '@plumile/backoffice-core/types.js';\nimport { FormattedDate } from '@plumile/ui/atomic/atoms/formatted-date/FormattedDate.js';\nimport { NavigationTabs } from '@plumile/ui/atomic/molecules/tabs/NavigationTabs.js';\nimport { Tag } from '@plumile/ui/backoffice/atoms/tag/Tag.js';\nimport { BackofficeKeyValueList } from '@plumile/ui/backoffice/molecules/backoffice_key_value_list/BackofficeKeyValueList.js';\nimport { BackofficePageHeader } from '@plumile/ui/backoffice/molecules/backoffice_page_header/BackofficePageHeader.js';\nimport {\n BackofficeRelationsMenu,\n type BackofficeRelationsMenuItem,\n} from '@plumile/ui/backoffice/molecules/backoffice_relations_menu/BackofficeRelationsMenu.js';\nimport { Spinner } from '@plumile/ui/backoffice/atoms/spinner/Spinner.js';\nimport { DetailPageTemplate } from '@plumile/ui/backoffice/templates/detail_page_template/DetailPageTemplate.js';\n\nimport { BackofficeDetailBadgeRow } from '../components/backoffice/detail/BackofficeDetailBadgeRow.js';\nimport { BackofficeLazyEntityCount } from '../components/backoffice/refs/BackofficeLazyEntityCount.js';\nimport { BackofficeEntityDetailNotFound } from '../components/backoffice/scaffolds/BackofficeEntityDetailNotFound.js';\nimport { BackofficeRightPageLayout } from '../components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js';\nimport { buildEntityDetailBreadcrumb } from '../components/backoffice/layout/breadcrumb/buildBreadcrumbs.js';\nimport { useBackofficeReactTranslation } from '../i18n/useBackofficeReactTranslation.js';\nimport { useBackofficeConfig } from '../provider/BackofficeConfigContext.js';\nimport { useBackofficeRuntimeFragment } from '../relay/typedRelayHooks.js';\nimport * as pageStyles from './backofficeEntityDetailPage.css.js';\nimport {\n resolveLabel,\n resolveRelationValue,\n} from './BackofficeEntityDetailPage.helpers.js';\nimport { resolveHeaderItems } from './BackofficeEntityDetailPage.view-helpers.js';\nimport { BackofficeEntityDetailLayoutContextProvider } from './detail/BackofficeEntityDetailLayoutContext.js';\nimport { buildTabsItems } from './detail/buildTabsItems.js';\nimport { resolveVisibleDetailPages } from './detail/pageResolution.js';\nimport { BackofficeRedirect } from './BackofficeRedirect.js';\n\nconst { usePreloadedQuery } = ReactRelay;\n\nconst normalizePath = (value: string): string => {\n return value.trim().replace(/^\\/+|\\/+$/g, '');\n};\n\nconst resolveActivePagePath = (\n pathname: string,\n id: string,\n config: BackofficeResolvedDetailLayoutFacetConfig,\n): string => {\n const pages = [config.pages.mainPage, ...(config.pages.subPages ?? [])];\n const activePage = pages.find((page) => {\n return pathname === config.routes.detailPage(id, page.id);\n });\n return activePage?.path ?? '';\n};\n\nconst RelationCountLoading = (): JSX.Element => {\n return (\n <span className={pageStyles.relationCountLoading}>\n <Spinner size={12} />\n </span>\n );\n};\n\nconst DetailPageContentLoading = (): JSX.Element => {\n const { t } = useBackofficeReactTranslation();\n return (\n <div role=\"status\" aria-live=\"polite\" aria-busy=\"true\">\n <Spinner size={20} ariaLabel={t('common.loading')} />\n </div>\n );\n};\n\nexport type BackofficeEntityDetailLayoutPageProps = {\n entityManifest: BackofficeEntityManifestItem;\n config: BackofficeResolvedDetailLayoutFacetConfig;\n prepared: BackofficePreparedDetailLayoutDataRoute;\n children?: ReactNode;\n};\n\ntype BackofficeEntityDetailLayoutPageContentProps = {\n config: BackofficeResolvedDetailLayoutFacetConfig;\n prepared: BackofficePreparedDetailLayoutDataRoute;\n layoutNodeRef: unknown;\n children?: ReactNode;\n};\n\nconst BackofficeEntityDetailLayoutPageContent = ({\n config,\n prepared,\n layoutNodeRef,\n children,\n}: BackofficeEntityDetailLayoutPageContentProps): JSX.Element => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const { entities } = useBackofficeConfig();\n const { pathname } = useLocation();\n const layoutNode = useBackofficeRuntimeFragment(\n config.layoutPage.fragment,\n layoutNodeRef,\n );\n\n const layoutView = config.layoutPage.toView(layoutNode);\n const activePagePath = resolveActivePagePath(pathname, prepared.id, config);\n const resolvedPages = resolveVisibleDetailPages({\n mainPage: config.pages.mainPage,\n subPages: config.pages.subPages,\n activePagePath,\n node: layoutView,\n });\n\n if (!resolvedPages.hasVisiblePages || resolvedPages.activePage == null) {\n return <BackofficeRedirect to={config.routes.list} />;\n }\n\n const { activePage } = resolvedPages;\n if (\n activePagePath !== '' &&\n normalizePath(activePage.path) !== normalizePath(activePagePath)\n ) {\n return (\n <BackofficeRedirect\n to={config.routes.detailPage(prepared.id, activePage.id)}\n />\n );\n }\n\n const tabsItems = buildTabsItems({\n pages: resolvedPages.pages,\n id: prepared.id,\n tApp,\n detailPageHref: config.routes.detailPage,\n });\n const resolveEntityHref = (entityId: string, refId: string) => {\n const entityConfig = entities[entityId];\n if (entityConfig == null) {\n return null;\n }\n return entityConfig.routes.detail(refId);\n };\n const header = resolveHeaderItems(config.header, layoutView, {\n tApp,\n t,\n resolveEntityHref,\n renderLink: (href, label) => {\n return (\n <Link to={href} preloadOnHover=\"code-and-data\">\n {label}\n </Link>\n );\n },\n renderDate: (value, fallback) => {\n return (\n <FormattedDate\n value={value}\n options={BACKOFFICE_DATE_TIME_OPTIONS}\n fallback={fallback}\n />\n );\n },\n renderTag: (tone, label) => {\n return <Tag tone={tone}>{label}</Tag>;\n },\n renderBadgeRow: (items) => {\n return <BackofficeDetailBadgeRow items={items} />;\n },\n });\n const relationMenuItems: BackofficeRelationsMenuItem[] = (\n config.relations ?? []\n ).flatMap((relation) => {\n const { path, target, whereKey } = relation;\n const value = resolveRelationValue(relation.value(layoutView));\n if (value == null) {\n return [];\n }\n\n const entityManifest = entities[target];\n if (entityManifest?.hasList !== true) {\n return [];\n }\n\n const where = setWhereValue(null, whereKey, value, path);\n if (where == null) {\n return [];\n }\n\n const encoded = entityManifest.listNavigation.encode({ where });\n\n return [\n {\n id: relation.id,\n label: resolveLabel(relation.label, tApp),\n count: (\n <BackofficeLazyEntityCount\n entity={target}\n loadingFallback={<RelationCountLoading />}\n where={where}\n />\n ),\n destination: {\n pathname: entityManifest.routes.list,\n filters: encoded.filters,\n query: encoded.query,\n },\n },\n ];\n });\n const breadcrumb = buildEntityDetailBreadcrumb({\n config,\n tApp,\n entityId: prepared.id,\n layoutView,\n pageLabel: activePage.label(tApp),\n pageId: activePage.id,\n });\n let headerMetaNode: JSX.Element | undefined;\n if (header.status != null || header.badges != null) {\n headerMetaNode = (\n <div className={pageStyles.headerMeta}>\n {header.status}\n {header.badges}\n </div>\n );\n }\n let headerItemsNode: JSX.Element | null = null;\n if (header.items != null && header.items.length > 0) {\n headerItemsNode = (\n <div className={pageStyles.headerMetaList}>\n <BackofficeKeyValueList items={header.items} />\n </div>\n );\n }\n let headerActionsNode: JSX.Element | undefined;\n if (relationMenuItems.length > 0) {\n headerActionsNode = (\n <div className={pageStyles.headerRelationGroup}>\n <BackofficeRelationsMenu\n label={t('relations.menu.label')}\n items={relationMenuItems}\n />\n </div>\n );\n }\n\n const headerNode = (\n <div className={pageStyles.headerBlock}>\n <BackofficePageHeader\n title={header.title}\n subtitle={header.subtitle}\n meta={headerMetaNode}\n actions={headerActionsNode}\n />\n {headerItemsNode}\n </div>\n );\n let tabsNode: JSX.Element | null = null;\n if (resolvedPages.pages.length > 1) {\n tabsNode = (\n <NavigationTabs\n items={tabsItems}\n activeId={activePage.id}\n variant=\"underline\"\n />\n );\n }\n\n return (\n <BackofficeEntityDetailLayoutContextProvider\n value={{\n activePage,\n config,\n entityId: prepared.id,\n layoutView,\n tabsItems,\n visiblePages: resolvedPages.pages,\n }}\n >\n <BackofficeRightPageLayout breadcrumb={breadcrumb}>\n <DetailPageTemplate\n headerNode={headerNode}\n tabsNode={tabsNode}\n headerDensity=\"compact\"\n >\n <Suspense fallback={<DetailPageContentLoading />}>\n {children}\n </Suspense>\n </DetailPageTemplate>\n </BackofficeRightPageLayout>\n </BackofficeEntityDetailLayoutContextProvider>\n );\n};\n\nexport const BackofficeEntityDetailLayoutPage = ({\n config,\n prepared,\n children,\n}: BackofficeEntityDetailLayoutPageProps): JSX.Element => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\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\n if (layoutNodeRef == null) {\n return (\n <BackofficeRightPageLayout\n breadcrumb={[\n {\n kind: 'link',\n target: {\n kind: 'entity-list',\n entityId: config.id,\n },\n label: config.label(tApp),\n },\n {\n kind: 'current',\n target: {\n kind: 'entity-detail',\n entityId: config.id,\n id: prepared.id,\n },\n label: t('detail.notFound'),\n },\n ]}\n >\n <BackofficeEntityDetailNotFound listHref={config.routes.list} />\n </BackofficeRightPageLayout>\n );\n }\n\n return (\n <BackofficeEntityDetailLayoutPageContent\n config={config}\n prepared={prepared}\n layoutNodeRef={layoutNodeRef}\n >\n {children}\n </BackofficeEntityDetailLayoutPageContent>\n );\n};\n\nexport default BackofficeEntityDetailLayoutPage;\n"],"mappings":"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"}