@plumile/backoffice-react 0.1.178 → 0.1.181

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 (96) hide show
  1. package/lib/esm/components/backoffice/columns/buildDataTableColumns.js +1 -1
  2. package/lib/esm/components/backoffice/columns/buildDataTableColumns.js.map +1 -1
  3. package/lib/esm/components/backoffice/detail/BackofficeRelationsSummaryGrid.js +1 -1
  4. package/lib/esm/components/backoffice/detail/BackofficeRelationsSummaryGrid.js.map +1 -1
  5. package/lib/esm/components/backoffice/detail/backofficeDetailRelationLink.css.js +1 -0
  6. package/lib/esm/components/backoffice/filters/BackofficeFilterAction.js +1 -1
  7. package/lib/esm/components/backoffice/filters/BackofficeFilterAction.js.map +1 -1
  8. package/lib/esm/components/backoffice/hub/BackofficeHubTemplate.js +1 -1
  9. package/lib/esm/components/backoffice/hub/BackofficeHubTemplate.js.map +1 -1
  10. package/lib/esm/components/backoffice/hub/backofficeHubTemplate.css.js +2 -0
  11. package/lib/esm/components/backoffice/layout/backofficeSidebarActions.css.js +0 -2
  12. package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.js +1 -1
  13. package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.js.map +1 -1
  14. package/lib/esm/components/backoffice/layout/breadcrumb/backofficeTopbarBreadcrumb.css.js +0 -1
  15. package/lib/esm/components/backoffice/links/BackofficeInlineLink.js +2 -2
  16. package/lib/esm/components/backoffice/links/BackofficeInlineLink.js.map +1 -1
  17. package/lib/esm/components/backoffice/links/BackofficeLink.js +2 -2
  18. package/lib/esm/components/backoffice/links/BackofficeLink.js.map +1 -1
  19. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityDetailNotFound.js +1 -1
  20. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityDetailNotFound.js.map +1 -1
  21. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js +241 -228
  22. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js.map +1 -1
  23. package/lib/esm/components/backoffice/scaffolds/backofficeEntityListScaffold.css.js +2 -2
  24. package/lib/esm/components/backoffice/scaffolds/backofficeEntityListScaffold.css.js.map +1 -1
  25. package/lib/esm/hooks/useBackofficeListRefetch.js +18 -16
  26. package/lib/esm/hooks/useBackofficeListRefetch.js.map +1 -1
  27. package/lib/esm/hooks/useBackofficeListUrlState.js +23 -21
  28. package/lib/esm/hooks/useBackofficeListUrlState.js.map +1 -1
  29. package/lib/esm/i18n/locales/en/backofficeReact.js +1 -0
  30. package/lib/esm/i18n/locales/en/backofficeReact.js.map +1 -1
  31. package/lib/esm/i18n/locales/fr/backofficeReact.js +1 -0
  32. package/lib/esm/i18n/locales/fr/backofficeReact.js.map +1 -1
  33. package/lib/esm/index.js +26 -25
  34. package/lib/esm/pages/BackofficeEntityDetailFramePage.js +45 -0
  35. package/lib/esm/pages/BackofficeEntityDetailFramePage.js.map +1 -0
  36. package/lib/esm/pages/BackofficeEntityDetailLayoutPage.js +74 -60
  37. package/lib/esm/pages/BackofficeEntityDetailLayoutPage.js.map +1 -1
  38. package/lib/esm/pages/BackofficeEntityDetailPage.js +3 -3
  39. package/lib/esm/pages/BackofficeEntityDetailPage.js.map +1 -1
  40. package/lib/esm/pages/BackofficeEntityListDataPage.js +146 -0
  41. package/lib/esm/pages/BackofficeEntityListDataPage.js.map +1 -0
  42. package/lib/esm/pages/BackofficeEntityListPage.js +121 -132
  43. package/lib/esm/pages/BackofficeEntityListPage.js.map +1 -1
  44. package/lib/esm/pages/BackofficeEntityListRouteContext.js +15 -0
  45. package/lib/esm/pages/BackofficeEntityListRouteContext.js.map +1 -0
  46. package/lib/esm/pages/detail/buildTabsItems.js +1 -1
  47. package/lib/esm/pages/detail/buildTabsItems.js.map +1 -1
  48. package/lib/esm/provider/BackofficeProvider.js +63 -63
  49. package/lib/esm/provider/BackofficeProvider.js.map +1 -1
  50. package/lib/esm/relay/RelayProvider.js +2 -13
  51. package/lib/esm/relay/environment.js +2 -463
  52. package/lib/esm/relay/shortAccessTokenEnvironment.js +2 -15
  53. package/lib/esm/relay/useRelayOperationActivity.js +2 -0
  54. package/lib/esm/router/createBackofficeRoutes.js +169 -119
  55. package/lib/esm/router/createBackofficeRoutes.js.map +1 -1
  56. package/lib/types/components/backoffice/links/BackofficeInlineLink.d.ts +3 -2
  57. package/lib/types/components/backoffice/links/BackofficeInlineLink.d.ts.map +1 -1
  58. package/lib/types/components/backoffice/links/BackofficeLink.d.ts +3 -2
  59. package/lib/types/components/backoffice/links/BackofficeLink.d.ts.map +1 -1
  60. package/lib/types/components/backoffice/scaffolds/BackofficeEntityListScaffold.d.ts.map +1 -1
  61. package/lib/types/components/backoffice/scaffolds/backofficeEntityListScaffold.css.d.ts +1 -0
  62. package/lib/types/components/backoffice/scaffolds/backofficeEntityListScaffold.css.d.ts.map +1 -1
  63. package/lib/types/hooks/useBackofficeListRefetch.d.ts +5 -4
  64. package/lib/types/hooks/useBackofficeListRefetch.d.ts.map +1 -1
  65. package/lib/types/hooks/useBackofficeListUrlState.d.ts.map +1 -1
  66. package/lib/types/i18n/resources.d.ts +2 -0
  67. package/lib/types/i18n/resources.d.ts.map +1 -1
  68. package/lib/types/index.d.ts +3 -2
  69. package/lib/types/index.d.ts.map +1 -1
  70. package/lib/types/pages/BackofficeEntityDetailFramePage.d.ts +14 -0
  71. package/lib/types/pages/BackofficeEntityDetailFramePage.d.ts.map +1 -0
  72. package/lib/types/pages/BackofficeEntityDetailLayoutPage.d.ts +2 -2
  73. package/lib/types/pages/BackofficeEntityDetailLayoutPage.d.ts.map +1 -1
  74. package/lib/types/pages/BackofficeEntityDetailPage.d.ts +2 -11
  75. package/lib/types/pages/BackofficeEntityDetailPage.d.ts.map +1 -1
  76. package/lib/types/pages/BackofficeEntityListDataPage.d.ts +8 -0
  77. package/lib/types/pages/BackofficeEntityListDataPage.d.ts.map +1 -0
  78. package/lib/types/pages/BackofficeEntityListPage.d.ts +5 -4
  79. package/lib/types/pages/BackofficeEntityListPage.d.ts.map +1 -1
  80. package/lib/types/pages/BackofficeEntityListRouteContext.d.ts +22 -0
  81. package/lib/types/pages/BackofficeEntityListRouteContext.d.ts.map +1 -0
  82. package/lib/types/provider/BackofficeProvider.d.ts.map +1 -1
  83. package/lib/types/relay/RelayProvider.d.ts +1 -6
  84. package/lib/types/relay/RelayProvider.d.ts.map +1 -1
  85. package/lib/types/relay/environment.d.ts +1 -119
  86. package/lib/types/relay/environment.d.ts.map +1 -1
  87. package/lib/types/relay/shortAccessTokenEnvironment.d.ts +4 -3
  88. package/lib/types/relay/shortAccessTokenEnvironment.d.ts.map +1 -1
  89. package/lib/types/relay/useRelayOperationActivity.d.ts +2 -0
  90. package/lib/types/relay/useRelayOperationActivity.d.ts.map +1 -0
  91. package/lib/types/router/createBackofficeRoutes.d.ts +2 -0
  92. package/lib/types/router/createBackofficeRoutes.d.ts.map +1 -1
  93. package/package.json +14 -12
  94. package/lib/esm/relay/RelayProvider.js.map +0 -1
  95. package/lib/esm/relay/environment.js.map +0 -1
  96. package/lib/esm/relay/shortAccessTokenEnvironment.js.map +0 -1
@@ -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 \"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 },\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 \"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 \"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 \"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 },\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 \"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":""}
package/lib/esm/index.js CHANGED
@@ -49,28 +49,29 @@ import { BackofficeToolsErrorFallback as Q } from "./components/backoffice/tools
49
49
  import { BackofficeToolsJsonForm as $ } from "./components/backoffice/tools/BackofficeToolsJsonForm.js";
50
50
  import { BackofficeToolsQueryBoundary as te } from "./components/backoffice/tools/BackofficeToolsQueryBoundary.js";
51
51
  import { parseToolJson as ne } from "./components/backoffice/tools/parseToolJson.js";
52
- import { configureRelayEnvironment as re, getEnvironment as ie, getNetwork as ae, getRelayTransportSnapshot as oe, reconnectRelayWebSocket as se, refreshRelayWebSocketAuthentication as ce, resetRelayStore as le, subscribeRelayTransport as ue } from "./relay/environment.js";
53
- import { base64UrlToBuffer as de, bufferToBase64Url as fe, mapWebAuthnRegistrationError as pe, parseSignCount as me } from "./modules/webauthn.js";
54
- import { createUseAuth as he } from "./hooks/useAuth.js";
55
- import { useBackofficeListUrlState as ge } from "./hooks/useBackofficeListUrlState.js";
56
- import { useConditionalSubscription as _e } from "./hooks/useConditionalSubscription.js";
57
- import ve from "./hooks/useCopyToClipboard.js";
58
- import ye from "./hooks/useInfiniteConnection.js";
59
- import { useRefetchNeededReload as be } from "./hooks/useRefetchNeededReload.js";
60
- import { createI18nInstance as xe } from "./i18n/createI18nInstance.js";
61
- import { backofficeReactI18nResources as Se, withBackofficeReactI18nResources as Ce } from "./i18n/resources.js";
62
- import { useReviewStatusLabel as we } from "./i18n/useReviewStatusLabel.js";
63
- import { RelayProvider as Te } from "./relay/RelayProvider.js";
64
- import { BackofficeProvider as Ee } from "./provider/BackofficeProvider.js";
65
- import { createBackofficeLazyValue as De } from "./provider/lazyValue.js";
66
- import { decodeBase64ToUtf8 as Oe, encodeUtf8ToBase64 as ke } from "./modules/base64.js";
67
- import { formatFileSize as Ae } from "./modules/formatFileSize.js";
68
- import { uploadFilesSequentially as je } from "./modules/uploads.js";
69
- import { resolveVisibleDetailPages as Me } from "./pages/detail/pageResolution.js";
70
- import { createInlineDataReader as Ne } from "./relay/createInlineReader.js";
71
- import { appendNodeToConnections as Pe } from "./relay/connectionUtils.js";
72
- import { configureBackofficeShortAccessTokenRelayEnvironment as Fe } from "./relay/shortAccessTokenEnvironment.js";
73
- import { useMutationAction as Ie } from "./relay/useMutationAction.js";
74
- import { identityView as Le } from "./relay/identityView.js";
75
- import { useCursorResumableSubscription as Re } from "./subscriptions/useCursorResumableSubscription.js";
76
- export { o as AcceptInvitationScreen, e as AuthRefreshNotice, v as BackofficeBillingUsageChart, w as BackofficeDetailBadgeRow, G as BackofficeEntityLink, E as BackofficeEntitySummaryHeader, D as BackofficeEnumLabel, g as BackofficeErrorBoundary, I as BackofficeFilterAction, W as BackofficeFilterableCell, Y as BackofficeFormattedCurrency, ee as BackofficeFormattedNumber, z as BackofficeHubTemplate, X as BackofficeInlineFilterRow, S as BackofficeInlineLink, K as BackofficeLazyEntityCount, O as BackofficeLifecycleTimelineSection, B as BackofficeLink, V as BackofficeLinkLabel, U as BackofficeOverviewLayout, Ee as BackofficeProvider, k as BackofficeReferenceValue, q as BackofficeRelatedCountLink, A as BackofficeRelationGrid, A as BackofficeRelationsSummaryGrid, H as BackofficeRightPageLayout, j as BackofficeStatusGroup, T as BackofficeStatusMetaBadge, J as BackofficeTabbedDetailShell, M as BackofficeTokenUsageBreakdown, Z as BackofficeToolsDocPanel, Q as BackofficeToolsErrorFallback, $ as BackofficeToolsJsonForm, te as BackofficeToolsQueryBoundary, N as BackofficeUsageCostBreakdown, L as EntityFilterValue, R as EntityFilterValueText, h as EntityIdFilterField, _ as EntityIdPickerDialog, i as LoginFlow, s as PasswordResetCompleteScreen, c as PasswordResetRequestScreen, Te as RelayProvider, n as TotpQrCode, l as VerifyEmailScreen, Pe as appendNodeToConnections, Se as backofficeReactI18nResources, de as base64UrlToBuffer, fe as bufferToBase64Url, C as buildDataTableColumns, r as buildTotpOtpAuthUri, Fe as configureBackofficeShortAccessTokenRelayEnvironment, re as configureRelayEnvironment, P as createBackofficeEntityLinkProps, De as createBackofficeLazyValue, xe as createI18nInstance, Ne as createInlineDataReader, he as createUseAuth, Oe as decodeBase64ToUtf8, ke as encodeUtf8ToBase64, Ae as formatFileSize, F as formatListAsMarkdown, ie as getEnvironment, ae as getNetwork, oe as getRelayTransportSnapshot, Le as identityView, pe as mapWebAuthnRegistrationError, me as parseSignCount, ne as parseToolJson, se as reconnectRelayWebSocket, ce as refreshRelayWebSocketAuthentication, u as requireField, d as requireLinkedRecordId, le as resetRelayStore, f as resolveAgentStartOutcome, b as resolveBackofficeLink, y as resolveBackofficeTargetIcon, p as resolveMutationOutcome, Me as resolveVisibleDetailPages, ue as subscribeRelayTransport, a as synchronizeAuthStatusQuery, je as uploadFilesSequentially, t as useAuthRefreshStateSnapshot, m as useBackofficeConfig, x as useBackofficeLink, ge as useBackofficeListUrlState, _e as useConditionalSubscription, ve as useCopyToClipboard, Re as useCursorResumableSubscription, ye as useInfiniteConnection, Ie as useMutationAction, be as useRefetchNeededReload, we as useReviewStatusLabel, Ce as withBackofficeReactI18nResources };
52
+ import { configureRelayEnvironment as re, getEnvironment as ie, getNetwork as ae, getRelayOperationActivitySnapshot as oe, getRelayTransportSnapshot as se, reconnectRelayWebSocket as ce, refreshRelayWebSocketAuthentication as le, resetRelayStore as ue, subscribeRelayOperationActivity as de, subscribeRelayTransport as fe } from "./relay/environment.js";
53
+ import { base64UrlToBuffer as pe, bufferToBase64Url as me, mapWebAuthnRegistrationError as he, parseSignCount as ge } from "./modules/webauthn.js";
54
+ import { createUseAuth as _e } from "./hooks/useAuth.js";
55
+ import { useBackofficeListUrlState as ve } from "./hooks/useBackofficeListUrlState.js";
56
+ import { useConditionalSubscription as ye } from "./hooks/useConditionalSubscription.js";
57
+ import be from "./hooks/useCopyToClipboard.js";
58
+ import xe from "./hooks/useInfiniteConnection.js";
59
+ import { useRefetchNeededReload as Se } from "./hooks/useRefetchNeededReload.js";
60
+ import { createI18nInstance as Ce } from "./i18n/createI18nInstance.js";
61
+ import { backofficeReactI18nResources as we, withBackofficeReactI18nResources as Te } from "./i18n/resources.js";
62
+ import { useReviewStatusLabel as Ee } from "./i18n/useReviewStatusLabel.js";
63
+ import { BackofficeProvider as De } from "./provider/BackofficeProvider.js";
64
+ import { createBackofficeLazyValue as Oe } from "./provider/lazyValue.js";
65
+ import { decodeBase64ToUtf8 as ke, encodeUtf8ToBase64 as Ae } from "./modules/base64.js";
66
+ import { formatFileSize as je } from "./modules/formatFileSize.js";
67
+ import { uploadFilesSequentially as Me } from "./modules/uploads.js";
68
+ import { resolveVisibleDetailPages as Ne } from "./pages/detail/pageResolution.js";
69
+ import { createInlineDataReader as Pe } from "./relay/createInlineReader.js";
70
+ import { appendNodeToConnections as Fe } from "./relay/connectionUtils.js";
71
+ import { RelayProvider as Ie } from "./relay/RelayProvider.js";
72
+ import { useRelayOperationActivity as Le } from "./relay/useRelayOperationActivity.js";
73
+ import { configureBackofficeShortAccessTokenRelayEnvironment as Re, configureShortAccessTokenRelayEnvironment as ze } from "./relay/shortAccessTokenEnvironment.js";
74
+ import { useMutationAction as Be } from "./relay/useMutationAction.js";
75
+ import { identityView as Ve } from "./relay/identityView.js";
76
+ import { useCursorResumableSubscription as He } from "./subscriptions/useCursorResumableSubscription.js";
77
+ export { o as AcceptInvitationScreen, e as AuthRefreshNotice, v as BackofficeBillingUsageChart, w as BackofficeDetailBadgeRow, G as BackofficeEntityLink, E as BackofficeEntitySummaryHeader, D as BackofficeEnumLabel, g as BackofficeErrorBoundary, I as BackofficeFilterAction, W as BackofficeFilterableCell, Y as BackofficeFormattedCurrency, ee as BackofficeFormattedNumber, z as BackofficeHubTemplate, X as BackofficeInlineFilterRow, S as BackofficeInlineLink, K as BackofficeLazyEntityCount, O as BackofficeLifecycleTimelineSection, B as BackofficeLink, V as BackofficeLinkLabel, U as BackofficeOverviewLayout, De as BackofficeProvider, k as BackofficeReferenceValue, q as BackofficeRelatedCountLink, A as BackofficeRelationGrid, A as BackofficeRelationsSummaryGrid, H as BackofficeRightPageLayout, j as BackofficeStatusGroup, T as BackofficeStatusMetaBadge, J as BackofficeTabbedDetailShell, M as BackofficeTokenUsageBreakdown, Z as BackofficeToolsDocPanel, Q as BackofficeToolsErrorFallback, $ as BackofficeToolsJsonForm, te as BackofficeToolsQueryBoundary, N as BackofficeUsageCostBreakdown, L as EntityFilterValue, R as EntityFilterValueText, h as EntityIdFilterField, _ as EntityIdPickerDialog, i as LoginFlow, s as PasswordResetCompleteScreen, c as PasswordResetRequestScreen, Ie as RelayProvider, n as TotpQrCode, l as VerifyEmailScreen, Fe as appendNodeToConnections, we as backofficeReactI18nResources, pe as base64UrlToBuffer, me as bufferToBase64Url, C as buildDataTableColumns, r as buildTotpOtpAuthUri, Re as configureBackofficeShortAccessTokenRelayEnvironment, re as configureRelayEnvironment, ze as configureShortAccessTokenRelayEnvironment, P as createBackofficeEntityLinkProps, Oe as createBackofficeLazyValue, Ce as createI18nInstance, Pe as createInlineDataReader, _e as createUseAuth, ke as decodeBase64ToUtf8, Ae as encodeUtf8ToBase64, je as formatFileSize, F as formatListAsMarkdown, ie as getEnvironment, ae as getNetwork, oe as getRelayOperationActivitySnapshot, se as getRelayTransportSnapshot, Ve as identityView, he as mapWebAuthnRegistrationError, ge as parseSignCount, ne as parseToolJson, ce as reconnectRelayWebSocket, le as refreshRelayWebSocketAuthentication, u as requireField, d as requireLinkedRecordId, ue as resetRelayStore, f as resolveAgentStartOutcome, b as resolveBackofficeLink, y as resolveBackofficeTargetIcon, p as resolveMutationOutcome, Ne as resolveVisibleDetailPages, de as subscribeRelayOperationActivity, fe as subscribeRelayTransport, a as synchronizeAuthStatusQuery, Me as uploadFilesSequentially, t as useAuthRefreshStateSnapshot, m as useBackofficeConfig, x as useBackofficeLink, ve as useBackofficeListUrlState, ye as useConditionalSubscription, be as useCopyToClipboard, He as useCursorResumableSubscription, xe as useInfiniteConnection, Be as useMutationAction, Se as useRefetchNeededReload, Le as useRelayOperationActivity, Ee as useReviewStatusLabel, Te as withBackofficeReactI18nResources };
@@ -0,0 +1,45 @@
1
+ import { useBackofficeReactTranslation as e } from "../i18n/useBackofficeReactTranslation.js";
2
+ import { BackofficeRightPageLayout as t } from "../components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js";
3
+ import { BackofficeStaticRouteFallback as n } from "../components/backoffice/routing/BackofficeRouteFallback.js";
4
+ import { Suspense as r } from "react";
5
+ import { jsx as i } from "react/jsx-runtime";
6
+ import { useTranslation as a } from "react-i18next";
7
+ import { BackofficePageHeader as o } from "@plumile/ui/backoffice/molecules/backoffice_page_header/BackofficePageHeader.js";
8
+ import { DetailPageTemplate as s } from "@plumile/ui/backoffice/templates/detail_page_template/DetailPageTemplate.js";
9
+ //#region src/pages/BackofficeEntityDetailFramePage.tsx
10
+ var c = ({ entityManifest: r, id: c }) => {
11
+ let { t: l } = a(), { t: u } = e(), d = u("common.loading");
12
+ return /* @__PURE__ */ i(t, {
13
+ breadcrumb: [{
14
+ kind: "link",
15
+ target: {
16
+ kind: "entity-list",
17
+ entityId: r.id
18
+ },
19
+ label: r.label(l)
20
+ }, {
21
+ kind: "current",
22
+ target: {
23
+ kind: "entity-detail",
24
+ entityId: r.id,
25
+ id: c
26
+ },
27
+ label: d
28
+ }],
29
+ children: /* @__PURE__ */ i(s, {
30
+ headerNode: /* @__PURE__ */ i(o, { title: d }),
31
+ headerDensity: "compact",
32
+ children: /* @__PURE__ */ i(n, { label: d })
33
+ })
34
+ });
35
+ }, l = ({ children: e, entityManifest: t, prepared: n }) => /* @__PURE__ */ i(r, {
36
+ fallback: /* @__PURE__ */ i(c, {
37
+ entityManifest: t,
38
+ id: n.id
39
+ }),
40
+ children: e
41
+ });
42
+ //#endregion
43
+ export { c as BackofficeEntityDetailFrameFallback, l as BackofficeEntityDetailFramePage, l as default };
44
+
45
+ //# sourceMappingURL=BackofficeEntityDetailFramePage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BackofficeEntityDetailFramePage.js","names":[],"sources":["../../../src/pages/BackofficeEntityDetailFramePage.tsx"],"sourcesContent":["import { Suspense, type JSX, type ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport type {\n BackofficeEntityManifestItem,\n BackofficePreparedDetailFrameRoute,\n} from '@plumile/backoffice-core/types.js';\nimport { BackofficePageHeader } from '@plumile/ui/backoffice/molecules/backoffice_page_header/BackofficePageHeader.js';\nimport { DetailPageTemplate } from '@plumile/ui/backoffice/templates/detail_page_template/DetailPageTemplate.js';\n\nimport { BackofficeRightPageLayout } from '../components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js';\nimport { BackofficeStaticRouteFallback } from '../components/backoffice/routing/BackofficeRouteFallback.js';\nimport { useBackofficeReactTranslation } from '../i18n/useBackofficeReactTranslation.js';\n\nexport type BackofficeEntityDetailFramePageProps = {\n children?: ReactNode;\n entityManifest: BackofficeEntityManifestItem;\n prepared: BackofficePreparedDetailFrameRoute;\n};\n\nexport const BackofficeEntityDetailFrameFallback = ({\n entityManifest,\n id,\n}: {\n entityManifest: BackofficeEntityManifestItem;\n id: string;\n}): JSX.Element => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const loadingLabel = t('common.loading');\n\n return (\n <BackofficeRightPageLayout\n breadcrumb={[\n {\n kind: 'link',\n target: {\n kind: 'entity-list',\n entityId: entityManifest.id,\n },\n label: entityManifest.label(tApp),\n },\n {\n kind: 'current',\n target: {\n kind: 'entity-detail',\n entityId: entityManifest.id,\n id,\n },\n label: loadingLabel,\n },\n ]}\n >\n <DetailPageTemplate\n headerNode={<BackofficePageHeader title={loadingLabel} />}\n headerDensity=\"compact\"\n >\n <BackofficeStaticRouteFallback label={loadingLabel} />\n </DetailPageTemplate>\n </BackofficeRightPageLayout>\n );\n};\n\nexport const BackofficeEntityDetailFramePage = ({\n children,\n entityManifest,\n prepared,\n}: BackofficeEntityDetailFramePageProps): JSX.Element => {\n return (\n <Suspense\n fallback={\n <BackofficeEntityDetailFrameFallback\n entityManifest={entityManifest}\n id={prepared.id}\n />\n }\n >\n {children}\n </Suspense>\n );\n};\n\nexport default BackofficeEntityDetailFramePage;\n"],"mappings":";;;;;;;;;AAoBA,IAAa,KAAuC,EAClD,mBACA,YAIiB;CACjB,IAAM,EAAE,GAAG,MAAS,EAAe,GAC7B,EAAE,SAAM,EAA8B,GACtC,IAAe,EAAE,gBAAgB;CAEvC,OACE,kBAAC,GAAD;EACE,YAAY,CACV;GACE,MAAM;GACN,QAAQ;IACN,MAAM;IACN,UAAU,EAAe;GAC3B;GACA,OAAO,EAAe,MAAM,CAAI;EAClC,GACA;GACE,MAAM;GACN,QAAQ;IACN,MAAM;IACN,UAAU,EAAe;IACzB;GACF;GACA,OAAO;EACT,CACF;YAEA,kBAAC,GAAD;GACE,YAAY,kBAAC,GAAD,EAAsB,OAAO,EAAe,CAAA;GACxD,eAAc;aAEd,kBAAC,GAAD,EAA+B,OAAO,EAAe,CAAA;EACnC,CAAA;CACK,CAAA;AAE/B,GAEa,KAAmC,EAC9C,aACA,mBACA,kBAGE,kBAAC,GAAD;CACE,UACE,kBAAC,GAAD;EACkB;EAChB,IAAI,EAAS;CACd,CAAA;CAGF;AACO,CAAA"}
@@ -13,91 +13,102 @@ import { resolveHeaderItems as h } from "./BackofficeEntityDetailPage.view-helpe
13
13
  import { BackofficeEntityDetailLayoutContextProvider as g } from "./detail/BackofficeEntityDetailLayoutContext.js";
14
14
  import { buildTabsItems as te } from "./detail/buildTabsItems.js";
15
15
  import { BackofficeRedirect as _ } from "./BackofficeRedirect.js";
16
- import { useContext as ne } from "react";
17
- import { Fragment as v, jsx as y, jsxs as b } from "react/jsx-runtime";
18
- import { useTranslation as x } from "react-i18next";
19
- import * as S from "react-relay";
20
- import { Spinner as C } from "@plumile/ui/backoffice/atoms/spinner/Spinner.js";
21
- import w from "@plumile/router/routing/RoutingContext.js";
22
- import { FormattedDate as T } from "@plumile/ui/atomic/atoms/formatted-date/FormattedDate.js";
23
- import { BACKOFFICE_DATE_TIME_OPTIONS as E } from "@plumile/backoffice-core/constants.js";
24
- import D from "@plumile/router/routing/Link.js";
25
- import { Tag as re } from "@plumile/ui/backoffice/atoms/tag/Tag.js";
26
- import { buildBackofficeFallbackListHref as ie, buildBackofficeListHref as ae, buildBackofficeListLink as oe } from "@plumile/backoffice-core/state/buildListHref.js";
27
- import { setWhereValue as se } from "@plumile/backoffice-core/filters/where.js";
28
- import ce from "@plumile/router/routing/useLocation.js";
29
- import { BackofficePageHeader as O } from "@plumile/ui/backoffice/molecules/backoffice_page_header/BackofficePageHeader.js";
30
- import { Tabs as k } from "@plumile/ui/atomic/molecules/tabs/Tabs.js";
31
- import { DetailPageTemplate as A } from "@plumile/ui/backoffice/templates/detail_page_template/DetailPageTemplate.js";
32
- import { BackofficeKeyValueList as j } from "@plumile/ui/backoffice/molecules/backoffice_key_value_list/BackofficeKeyValueList.js";
33
- import { BackofficeRelationsMenu as M } from "@plumile/ui/backoffice/molecules/backoffice_relations_menu/BackofficeRelationsMenu.js";
16
+ import { Suspense as ne, useContext as re } from "react";
17
+ import { jsx as v, jsxs as y } from "react/jsx-runtime";
18
+ import { useTranslation as b } from "react-i18next";
19
+ import * as x from "react-relay";
20
+ import { Spinner as S } from "@plumile/ui/backoffice/atoms/spinner/Spinner.js";
21
+ import C from "@plumile/router/routing/RoutingContext.js";
22
+ import { FormattedDate as w } from "@plumile/ui/atomic/atoms/formatted-date/FormattedDate.js";
23
+ import { BACKOFFICE_DATE_TIME_OPTIONS as T } from "@plumile/backoffice-core/constants.js";
24
+ import ie from "@plumile/router/routing/Link.js";
25
+ import { Tag as ae } from "@plumile/ui/backoffice/atoms/tag/Tag.js";
26
+ import { buildBackofficeFallbackListHref as oe, buildBackofficeListHref as se, buildBackofficeListLink as ce } from "@plumile/backoffice-core/state/buildListHref.js";
27
+ import { setWhereValue as le } from "@plumile/backoffice-core/filters/where.js";
28
+ import E from "@plumile/router/routing/useLocation.js";
29
+ import { BackofficePageHeader as D } from "@plumile/ui/backoffice/molecules/backoffice_page_header/BackofficePageHeader.js";
30
+ import { Tabs as O } from "@plumile/ui/atomic/molecules/tabs/Tabs.js";
31
+ import { DetailPageTemplate as k } from "@plumile/ui/backoffice/templates/detail_page_template/DetailPageTemplate.js";
32
+ import { BackofficeKeyValueList as A } from "@plumile/ui/backoffice/molecules/backoffice_key_value_list/BackofficeKeyValueList.js";
33
+ import { BackofficeRelationsMenu as j } from "@plumile/ui/backoffice/molecules/backoffice_relations_menu/BackofficeRelationsMenu.js";
34
34
  //#region src/pages/BackofficeEntityDetailLayoutPage.tsx
35
- var { usePreloadedQuery: N } = S, P = (e) => e.trim().replace(/^\/+|\/+$/g, ""), F = (e, t, n) => [n.pages.mainPage, ...n.pages.subPages ?? []].find((r) => e === n.routes.detailPage(t, r.id))?.path ?? "", I = () => /* @__PURE__ */ y("span", {
35
+ var { usePreloadedQuery: M } = x, N = (e) => e.trim().replace(/^\/+|\/+$/g, ""), P = (e, t, n) => [n.pages.mainPage, ...n.pages.subPages ?? []].find((r) => e === n.routes.detailPage(t, r.id))?.path ?? "", F = () => /* @__PURE__ */ v("span", {
36
36
  className: f,
37
- children: /* @__PURE__ */ y(C, { size: 12 })
38
- }), L = ({ config: s, prepared: f, layoutNodeRef: S, children: C }) => {
39
- let { t: N } = x(), { t: L } = e(), { entities: R, entityRegistry: z } = t(), { pathname: B } = ce(), V = ne(w), H = n(s.layoutPage.fragment, S), U = s.layoutPage.toView(H), W = F(B, f.id, s), G = c({
37
+ children: /* @__PURE__ */ v(S, { size: 12 })
38
+ }), I = () => {
39
+ let { t } = e();
40
+ return /* @__PURE__ */ v("div", {
41
+ role: "status",
42
+ "aria-live": "polite",
43
+ "aria-busy": "true",
44
+ children: /* @__PURE__ */ v(S, {
45
+ size: 20,
46
+ ariaLabel: t("common.loading")
47
+ })
48
+ });
49
+ }, L = ({ config: s, prepared: f, layoutNodeRef: x, children: S }) => {
50
+ let { t: M } = b(), { t: L } = e(), { entities: R, entityRegistry: z } = t(), { pathname: B } = E(), V = re(C), H = n(s.layoutPage.fragment, x), U = s.layoutPage.toView(H), W = P(B, f.id, s), G = c({
40
51
  mainPage: s.pages.mainPage,
41
52
  subPages: s.pages.subPages,
42
53
  activePagePath: W,
43
54
  node: U
44
55
  });
45
- if (!G.hasVisiblePages || G.activePage == null) return /* @__PURE__ */ y(_, { to: s.routes.list });
56
+ if (!G.hasVisiblePages || G.activePage == null) return /* @__PURE__ */ v(_, { to: s.routes.list });
46
57
  let { activePage: K } = G;
47
- if (W !== "" && P(K.path) !== P(W)) return /* @__PURE__ */ y(_, { to: s.routes.detailPage(f.id, K.id) });
58
+ if (W !== "" && N(K.path) !== N(W)) return /* @__PURE__ */ v(_, { to: s.routes.detailPage(f.id, K.id) });
48
59
  let q = te({
49
60
  pages: G.pages,
50
61
  id: f.id,
51
- tApp: N,
62
+ tApp: M,
52
63
  detailPageHref: s.routes.detailPage
53
64
  }), J = h(s.header, U, {
54
- tApp: N,
65
+ tApp: M,
55
66
  t: L,
56
67
  resolveEntityHref: (e, t) => {
57
68
  let n = R[e];
58
69
  return n == null ? null : n.routes.detail(t);
59
70
  },
60
- renderLink: (e, t) => /* @__PURE__ */ y(D, {
71
+ renderLink: (e, t) => /* @__PURE__ */ v(ie, {
61
72
  to: e,
62
- preloadOnMouseEnter: !0,
73
+ preloadOnHover: "code-and-data",
63
74
  children: t
64
75
  }),
65
- renderDate: (e, t) => /* @__PURE__ */ y(T, {
76
+ renderDate: (e, t) => /* @__PURE__ */ v(w, {
66
77
  value: e,
67
- options: E,
78
+ options: T,
68
79
  fallback: t
69
80
  }),
70
- renderTag: (e, t) => /* @__PURE__ */ y(re, {
81
+ renderTag: (e, t) => /* @__PURE__ */ v(ae, {
71
82
  tone: e,
72
83
  children: t
73
84
  }),
74
- renderBadgeRow: (e) => /* @__PURE__ */ y(r, { items: e })
85
+ renderBadgeRow: (e) => /* @__PURE__ */ v(r, { items: e })
75
86
  }), Y = (s.relations ?? []).flatMap((e) => {
76
87
  let { filterId: t, path: n, target: r, whereKey: i } = e, a = m(e.value(U));
77
88
  if (a == null) return [];
78
89
  let s = R[r];
79
90
  if (s?.hasList !== !0) return [];
80
- let c = se(null, i, a, n);
91
+ let c = le(null, i, a, n);
81
92
  if (c == null) return [];
82
93
  let l = z.getLoadedListEntity(r), u = t;
83
94
  u ?? (u = i, n != null && (u = `${i}.${n.join(".")}`));
84
95
  let d;
85
- return d = l == null ? ie(s.routes.list, c, [{
96
+ return d = l == null ? oe(s.routes.list, c, [{
86
97
  id: u,
87
98
  value: a
88
- }]) : ae(l.config, { where: c }), [{
99
+ }]) : se(l.config, { where: c }), [{
89
100
  id: e.id,
90
- label: p(e.label, N),
91
- count: /* @__PURE__ */ y(o, {
101
+ label: p(e.label, M),
102
+ count: /* @__PURE__ */ v(o, {
92
103
  entity: r,
93
- loadingFallback: /* @__PURE__ */ y(I, {}),
104
+ loadingFallback: /* @__PURE__ */ v(F, {}),
94
105
  where: c
95
106
  }),
96
107
  href: d,
97
108
  onClick: async (e) => {
98
109
  if (V == null || e.defaultPrevented || e.button !== 0 || e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) return;
99
110
  e.preventDefault();
100
- let t = oe((await z.loadListEntity(r)).config, { where: c }), n = "";
111
+ let t = ce((await z.loadListEntity(r)).config, { where: c }), n = "";
101
112
  t.search !== "" && (n = `?${t.search}`), V.history.push({
102
113
  pathname: t.pathname,
103
114
  search: n,
@@ -105,45 +116,45 @@ var { usePreloadedQuery: N } = S, P = (e) => e.trim().replace(/^\/+|\/+$/g, ""),
105
116
  });
106
117
  }
107
118
  }];
108
- }), le = a({
119
+ }), ue = a({
109
120
  config: s,
110
- tApp: N,
121
+ tApp: M,
111
122
  entityId: f.id,
112
123
  layoutView: U,
113
- pageLabel: K.label(N),
124
+ pageLabel: K.label(M),
114
125
  pageId: K.id
115
126
  }), X;
116
- (J.status != null || J.badges != null) && (X = /* @__PURE__ */ b("div", {
127
+ (J.status != null || J.badges != null) && (X = /* @__PURE__ */ y("div", {
117
128
  className: u,
118
129
  children: [J.status, J.badges]
119
130
  }));
120
131
  let Z = null;
121
- J.items != null && J.items.length > 0 && (Z = /* @__PURE__ */ y("div", {
132
+ J.items != null && J.items.length > 0 && (Z = /* @__PURE__ */ v("div", {
122
133
  className: d,
123
- children: /* @__PURE__ */ y(j, { items: J.items })
134
+ children: /* @__PURE__ */ v(A, { items: J.items })
124
135
  }));
125
136
  let Q;
126
- Y.length > 0 && (Q = /* @__PURE__ */ y("div", {
137
+ Y.length > 0 && (Q = /* @__PURE__ */ v("div", {
127
138
  className: ee,
128
- children: /* @__PURE__ */ y(M, {
139
+ children: /* @__PURE__ */ v(j, {
129
140
  label: L("relations.menu.label"),
130
141
  items: Y
131
142
  })
132
143
  }));
133
- let ue = /* @__PURE__ */ b("div", {
144
+ let de = /* @__PURE__ */ y("div", {
134
145
  className: l,
135
- children: [/* @__PURE__ */ y(O, {
146
+ children: [/* @__PURE__ */ v(D, {
136
147
  title: J.title,
137
148
  subtitle: J.subtitle,
138
149
  meta: X,
139
150
  actions: Q
140
151
  }), Z]
141
152
  }), $ = null;
142
- return G.pages.length > 1 && ($ = /* @__PURE__ */ y(k, {
153
+ return G.pages.length > 1 && ($ = /* @__PURE__ */ v(O, {
143
154
  items: q,
144
155
  activeId: K.id,
145
156
  variant: "underline"
146
- })), /* @__PURE__ */ y(g, {
157
+ })), /* @__PURE__ */ v(g, {
147
158
  value: {
148
159
  activePage: K,
149
160
  config: s,
@@ -152,19 +163,22 @@ var { usePreloadedQuery: N } = S, P = (e) => e.trim().replace(/^\/+|\/+$/g, ""),
152
163
  tabsItems: q,
153
164
  visiblePages: G.pages
154
165
  },
155
- children: /* @__PURE__ */ y(i, {
156
- breadcrumb: le,
157
- children: /* @__PURE__ */ y(A, {
158
- headerNode: ue,
166
+ children: /* @__PURE__ */ v(i, {
167
+ breadcrumb: ue,
168
+ children: /* @__PURE__ */ v(k, {
169
+ headerNode: de,
159
170
  tabsNode: $,
160
171
  headerDensity: "compact",
161
- children: /* @__PURE__ */ y(v, { children: C })
172
+ children: /* @__PURE__ */ v(ne, {
173
+ fallback: /* @__PURE__ */ v(I, {}),
174
+ children: S
175
+ })
162
176
  })
163
177
  })
164
178
  });
165
179
  }, R = ({ config: t, prepared: n, children: r }) => {
166
- let { t: a } = x(), { t: o } = e(), c = N(t.layoutPage.query, n.layoutQuery), l = t.layoutPage.resolveNode(c, { id: n.id });
167
- return l == null ? /* @__PURE__ */ y(i, {
180
+ let { t: a } = b(), { t: o } = e(), c = M(t.layoutPage.query, n.layoutQuery), l = t.layoutPage.resolveNode(c, { id: n.id });
181
+ return l == null ? /* @__PURE__ */ v(i, {
168
182
  breadcrumb: [{
169
183
  kind: "link",
170
184
  target: {
@@ -181,8 +195,8 @@ var { usePreloadedQuery: N } = S, P = (e) => e.trim().replace(/^\/+|\/+$/g, ""),
181
195
  },
182
196
  label: o("detail.notFound")
183
197
  }],
184
- children: /* @__PURE__ */ y(s, { listHref: t.routes.list })
185
- }) : /* @__PURE__ */ y(L, {
198
+ children: /* @__PURE__ */ v(s, { listHref: t.routes.list })
199
+ }) : /* @__PURE__ */ v(L, {
186
200
  config: t,
187
201
  prepared: n,
188
202
  layoutNodeRef: l,
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeEntityDetailLayoutPage.js","names":[],"sources":["../../../src/pages/BackofficeEntityDetailLayoutPage.tsx"],"sourcesContent":["import { type JSX, type ReactNode, useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport * as ReactRelay from 'react-relay';\nimport Link from '@plumile/router/routing/Link.js';\nimport RoutingContext from '@plumile/router/routing/RoutingContext.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 {\n buildBackofficeFallbackListHref,\n buildBackofficeListHref,\n buildBackofficeListLink,\n} from '@plumile/backoffice-core/state/buildListHref.js';\nimport type {\n BackofficeEntityManifestItem,\n BackofficePreparedDetailLayoutRoute,\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 { useBackofficeFragment } 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\nexport type BackofficeEntityDetailLayoutPageProps = {\n entityManifest: BackofficeEntityManifestItem;\n config: BackofficeResolvedDetailLayoutFacetConfig;\n prepared: BackofficePreparedDetailLayoutRoute;\n children?: ReactNode;\n};\n\ntype BackofficeEntityDetailLayoutPageContentProps = {\n config: BackofficeResolvedDetailLayoutFacetConfig;\n prepared: BackofficePreparedDetailLayoutRoute;\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, entityRegistry } = useBackofficeConfig();\n const { pathname } = useLocation();\n const routing = useContext(RoutingContext);\n const layoutNode = useBackofficeFragment<unknown, unknown>(\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} preloadOnMouseEnter>\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 { filterId: configuredFilterId, 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 loadedEntity = entityRegistry.getLoadedListEntity(target);\n let filterId = configuredFilterId;\n if (filterId == null) {\n filterId = whereKey;\n if (path != null) {\n filterId = `${whereKey}.${path.join('.')}`;\n }\n }\n\n let href: string;\n if (loadedEntity == null) {\n href = buildBackofficeFallbackListHref(\n entityManifest.routes.list,\n where,\n [\n {\n id: filterId,\n value,\n },\n ],\n );\n } else {\n href = buildBackofficeListHref(loadedEntity.config, { where });\n }\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 href,\n onClick: async (event) => {\n if (\n routing == null ||\n event.defaultPrevented ||\n event.button !== 0 ||\n event.metaKey ||\n event.altKey ||\n event.ctrlKey ||\n event.shiftKey\n ) {\n return;\n }\n\n event.preventDefault();\n\n const listEntity = await entityRegistry.loadListEntity(target);\n const next = buildBackofficeListLink(listEntity.config, { where });\n\n let search = '';\n if (next.search !== '') {\n search = `?${next.search}`;\n }\n\n routing.history.push({\n pathname: next.pathname,\n search,\n hash: '',\n });\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 <>{children}</>\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, useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport * as ReactRelay from 'react-relay';\nimport Link from '@plumile/router/routing/Link.js';\nimport RoutingContext from '@plumile/router/routing/RoutingContext.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 {\n buildBackofficeFallbackListHref,\n buildBackofficeListHref,\n buildBackofficeListLink,\n} from '@plumile/backoffice-core/state/buildListHref.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 { useBackofficeFragment } 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, entityRegistry } = useBackofficeConfig();\n const { pathname } = useLocation();\n const routing = useContext(RoutingContext);\n const layoutNode = useBackofficeFragment<unknown, unknown>(\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 { filterId: configuredFilterId, 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 loadedEntity = entityRegistry.getLoadedListEntity(target);\n let filterId = configuredFilterId;\n if (filterId == null) {\n filterId = whereKey;\n if (path != null) {\n filterId = `${whereKey}.${path.join('.')}`;\n }\n }\n\n let href: string;\n if (loadedEntity == null) {\n href = buildBackofficeFallbackListHref(\n entityManifest.routes.list,\n where,\n [\n {\n id: filterId,\n value,\n },\n ],\n );\n } else {\n href = buildBackofficeListHref(loadedEntity.config, { where });\n }\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 href,\n onClick: async (event) => {\n if (\n routing == null ||\n event.defaultPrevented ||\n event.button !== 0 ||\n event.metaKey ||\n event.altKey ||\n event.ctrlKey ||\n event.shiftKey\n ) {\n return;\n }\n\n event.preventDefault();\n\n const listEntity = await entityRegistry.loadListEntity(target);\n const next = buildBackofficeListLink(listEntity.config, { where });\n\n let search = '';\n if (next.search !== '') {\n search = `?${next.search}`;\n }\n\n routing.history.push({\n pathname: next.pathname,\n search,\n hash: '',\n });\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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"}
@@ -162,7 +162,7 @@ var ye = (e) => {
162
162
  size: c,
163
163
  isDisabled: u,
164
164
  "aria-label": o,
165
- preloadOnMouseEnter: !0,
165
+ preloadOnHover: "code-and-data",
166
166
  children: r
167
167
  }, e.id) : _(e) ? /* @__PURE__ */ w(D, {
168
168
  type: "button",
@@ -274,7 +274,7 @@ var ye = (e) => {
274
274
  }),
275
275
  renderLink: (e, t) => /* @__PURE__ */ w(A, {
276
276
  to: e,
277
- preloadOnMouseEnter: !0,
277
+ preloadOnHover: "code-and-data",
278
278
  children: t
279
279
  }),
280
280
  renderTaggedValue: (e, t) => /* @__PURE__ */ w(u, {
@@ -299,7 +299,7 @@ var ye = (e) => {
299
299
  keyPrefix: String(t),
300
300
  renderLink: (e, t) => /* @__PURE__ */ w(A, {
301
301
  to: e,
302
- preloadOnMouseEnter: !0,
302
+ preloadOnHover: "code-and-data",
303
303
  children: t
304
304
  }),
305
305
  renderDate: (e, t) => /* @__PURE__ */ w(O, {