@plumile/backoffice-react 0.2.3 → 0.2.5
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.
- package/README.md +14 -3
- package/lib/esm/auth/AuthRefreshNotice.js +21 -18
- package/lib/esm/auth/AuthRefreshNotice.js.map +1 -1
- package/lib/esm/auth/TotpQrCode.js +20 -12
- package/lib/esm/auth/TotpQrCode.js.map +1 -1
- package/lib/esm/auth/authRefreshNotice.css.js +2 -1
- package/lib/esm/auth/authRefreshNotice.css.js.map +1 -1
- package/lib/esm/auth/login/AuthPanel.js.map +1 -1
- package/lib/esm/auth/login/EmailCapturePanel.js +26 -28
- package/lib/esm/auth/login/EmailCapturePanel.js.map +1 -1
- package/lib/esm/auth/login/LoginFlow.js +11 -11
- package/lib/esm/auth/login/LoginFlow.js.map +1 -1
- package/lib/esm/auth/login/MethodChooser.js +18 -16
- package/lib/esm/auth/login/MethodChooser.js.map +1 -1
- package/lib/esm/auth/login/MfaChallengeForm.js +47 -52
- package/lib/esm/auth/login/MfaChallengeForm.js.map +1 -1
- package/lib/esm/auth/login/OidcButtons.js +3 -2
- package/lib/esm/auth/login/OidcButtons.js.map +1 -1
- package/lib/esm/auth/login/PasskeyLoginForm.js +13 -15
- package/lib/esm/auth/login/PasskeyLoginForm.js.map +1 -1
- package/lib/esm/auth/login/PasswordLoginPanel.js +8 -8
- package/lib/esm/auth/login/PasswordLoginPanel.js.map +1 -1
- package/lib/esm/auth/login/loginPage.css.js +1 -1
- package/lib/esm/auth/login/loginPage.css.js.map +1 -1
- package/lib/esm/auth/pages/AcceptInvitationScreen.js +80 -75
- package/lib/esm/auth/pages/AcceptInvitationScreen.js.map +1 -1
- package/lib/esm/auth/pages/PasswordResetCompleteScreen.js +31 -31
- package/lib/esm/auth/pages/PasswordResetCompleteScreen.js.map +1 -1
- package/lib/esm/auth/pages/PasswordResetRequestScreen.js +33 -29
- package/lib/esm/auth/pages/PasswordResetRequestScreen.js.map +1 -1
- package/lib/esm/auth/pages/VerifyEmailScreen.js +42 -40
- package/lib/esm/auth/pages/VerifyEmailScreen.js.map +1 -1
- package/lib/esm/components/backoffice/actions/BackofficeEntityActionFormDialog.js +202 -210
- package/lib/esm/components/backoffice/actions/BackofficeEntityActionFormDialog.js.map +1 -1
- package/lib/esm/components/backoffice/actions/backofficeEntityActionFormDialog.css.js +1 -1
- package/lib/esm/components/backoffice/actions/backofficeEntityActionFormDialog.css.js.map +1 -1
- package/lib/esm/components/backoffice/actions/toastViewAction.js.map +1 -1
- package/lib/esm/components/backoffice/billing/BackofficeBillingUsageChart.js +36 -30
- package/lib/esm/components/backoffice/billing/BackofficeBillingUsageChart.js.map +1 -1
- package/lib/esm/components/backoffice/billing/backofficeBillingUsageChart.css.js +1 -1
- package/lib/esm/components/backoffice/billing/backofficeBillingUsageChart.css.js.map +1 -1
- package/lib/esm/components/backoffice/columns/buildDataTableColumns.js +36 -33
- package/lib/esm/components/backoffice/columns/buildDataTableColumns.js.map +1 -1
- package/lib/esm/components/backoffice/detail/BackofficeDetailBadgeRow.js.map +1 -1
- package/lib/esm/components/backoffice/detail/BackofficeDetailErrorList.js +1 -1
- package/lib/esm/components/backoffice/detail/BackofficeDetailErrorList.js.map +1 -1
- package/lib/esm/components/backoffice/detail/BackofficeEntitySummaryHeader.js +24 -20
- package/lib/esm/components/backoffice/detail/BackofficeEntitySummaryHeader.js.map +1 -1
- package/lib/esm/components/backoffice/detail/BackofficeRelationsSummaryGrid.js +1 -1
- package/lib/esm/components/backoffice/detail/BackofficeRelationsSummaryGrid.js.map +1 -1
- package/lib/esm/components/backoffice/detail/BackofficeTokenUsageBreakdown.js +7 -8
- package/lib/esm/components/backoffice/detail/BackofficeTokenUsageBreakdown.js.map +1 -1
- package/lib/esm/components/backoffice/detail/BackofficeUsageCostBreakdown.js +49 -45
- package/lib/esm/components/backoffice/detail/BackofficeUsageCostBreakdown.js.map +1 -1
- package/lib/esm/components/backoffice/detail/backofficeDetailBadgeRow.css.js +1 -1
- package/lib/esm/components/backoffice/detail/backofficeDetailBadgeRow.css.js.map +1 -1
- package/lib/esm/components/backoffice/detail/backofficeDetailErrorList.css.js +1 -1
- package/lib/esm/components/backoffice/detail/backofficeDetailErrorList.css.js.map +1 -1
- package/lib/esm/components/backoffice/detail/backofficeDetailLayout.css.js +1 -1
- package/lib/esm/components/backoffice/detail/backofficeDetailLayout.css.js.map +1 -1
- package/lib/esm/components/backoffice/detail/backofficeDetailRelationList.css.js +1 -1
- package/lib/esm/components/backoffice/detail/backofficeDetailRelationList.css.js.map +1 -1
- package/lib/esm/components/backoffice/detail/backofficeEntitySummaryHeader.css.js +1 -1
- package/lib/esm/components/backoffice/detail/backofficeEntitySummaryHeader.css.js.map +1 -1
- package/lib/esm/components/backoffice/detail/backofficeRelationsSummaryGrid.css.js +1 -1
- package/lib/esm/components/backoffice/detail/backofficeRelationsSummaryGrid.css.js.map +1 -1
- package/lib/esm/components/backoffice/detail/backofficeUsageCostBreakdown.css.js +1 -1
- package/lib/esm/components/backoffice/detail/backofficeUsageCostBreakdown.css.js.map +1 -1
- package/lib/esm/components/backoffice/errors/BackofficeErrorBoundary.js +1 -1
- package/lib/esm/components/backoffice/errors/BackofficeErrorBoundary.js.map +1 -1
- package/lib/esm/components/backoffice/filters/BackofficeFilterAction.js +1 -1
- package/lib/esm/components/backoffice/filters/BackofficeFilterAction.js.map +1 -1
- package/lib/esm/components/backoffice/filters/DeferredFilterSearchInput.js +15 -15
- package/lib/esm/components/backoffice/filters/DeferredFilterSearchInput.js.map +1 -1
- package/lib/esm/components/backoffice/filters/EntityIdFilterField.js +53 -65
- package/lib/esm/components/backoffice/filters/EntityIdFilterField.js.map +1 -1
- package/lib/esm/components/backoffice/filters/backofficeFilterAction.css.js +1 -1
- package/lib/esm/components/backoffice/filters/backofficeFilterAction.css.js.map +1 -1
- package/lib/esm/components/backoffice/filters/deferredFilterSearchInput.css.js +1 -1
- package/lib/esm/components/backoffice/filters/deferredFilterSearchInput.css.js.map +1 -1
- package/lib/esm/components/backoffice/filters/entityIdFilterField.css.js +2 -2
- package/lib/esm/components/backoffice/filters/entityIdFilterField.css.js.map +1 -1
- package/lib/esm/components/backoffice/hub/BackofficeHubTemplate.js +6 -6
- package/lib/esm/components/backoffice/hub/BackofficeHubTemplate.js.map +1 -1
- package/lib/esm/components/backoffice/hub/backofficeHubTemplate.css.js +1 -1
- package/lib/esm/components/backoffice/hub/backofficeHubTemplate.css.js.map +1 -1
- package/lib/esm/components/backoffice/layout/backofficeSidebarActions.css.js +1 -1
- package/lib/esm/components/backoffice/layout/backofficeSidebarActions.css.js.map +1 -1
- package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.js +3 -3
- package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.js.map +1 -1
- package/lib/esm/components/backoffice/layout/breadcrumb/backofficeTopbarBreadcrumb.css.js +1 -1
- package/lib/esm/components/backoffice/layout/breadcrumb/backofficeTopbarBreadcrumb.css.js.map +1 -1
- package/lib/esm/components/backoffice/layout/buildSidebarSections.js +152 -172
- package/lib/esm/components/backoffice/layout/buildSidebarSections.js.map +1 -1
- package/lib/esm/components/backoffice/layout/mapViewerToSidebarProfileView.js +2 -5
- package/lib/esm/components/backoffice/layout/mapViewerToSidebarProfileView.js.map +1 -1
- package/lib/esm/components/backoffice/layout/sidebarUtils.js +1 -1
- package/lib/esm/components/backoffice/layout/sidebarUtils.js.map +1 -1
- package/lib/esm/components/backoffice/links/BackofficeLinkContent.js +1 -1
- package/lib/esm/components/backoffice/links/backofficeLink.css.js +1 -1
- package/lib/esm/components/backoffice/links/backofficeLink.css.js.map +1 -1
- package/lib/esm/components/backoffice/list/RowFlagsCell.css.js +1 -1
- package/lib/esm/components/backoffice/list/RowFlagsCell.css.js.map +1 -1
- package/lib/esm/components/backoffice/overview/BackofficeOverviewLayout.js +1 -1
- package/lib/esm/components/backoffice/overview/BackofficeOverviewLayout.js.map +1 -1
- package/lib/esm/components/backoffice/overview/backofficeOverviewLayout.css.js +1 -1
- package/lib/esm/components/backoffice/overview/backofficeOverviewLayout.css.js.map +1 -1
- package/lib/esm/components/backoffice/pickers/EntityIdPickerDialog.js +93 -82
- package/lib/esm/components/backoffice/pickers/EntityIdPickerDialog.js.map +1 -1
- package/lib/esm/components/backoffice/pickers/entityIdPickerDialog.css.js +1 -1
- package/lib/esm/components/backoffice/pickers/entityIdPickerDialog.css.js.map +1 -1
- package/lib/esm/components/backoffice/refs/backofficeRelatedCountLink.css.js +1 -1
- package/lib/esm/components/backoffice/refs/backofficeRelatedCountLink.css.js.map +1 -1
- package/lib/esm/components/backoffice/routing/BackofficeContentError.js +6 -3
- package/lib/esm/components/backoffice/routing/BackofficeContentError.js.map +1 -1
- package/lib/esm/components/backoffice/routing/BackofficeRouteFallback.js +7 -7
- package/lib/esm/components/backoffice/routing/BackofficeRouteFallback.js.map +1 -1
- package/lib/esm/components/backoffice/routing/backofficeContentBoundary.css.js +1 -1
- package/lib/esm/components/backoffice/routing/backofficeContentBoundary.css.js.map +1 -1
- package/lib/esm/components/backoffice/routing/backofficeContentError.css.js +1 -1
- package/lib/esm/components/backoffice/routing/backofficeContentError.css.js.map +1 -1
- package/lib/esm/components/backoffice/routing/backofficeContentFallback.css.js +1 -1
- package/lib/esm/components/backoffice/routing/backofficeContentFallback.css.js.map +1 -1
- package/lib/esm/components/backoffice/scaffolds/BackofficeEntityDetailNotFound.js +3 -2
- package/lib/esm/components/backoffice/scaffolds/BackofficeEntityDetailNotFound.js.map +1 -1
- package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js +314 -309
- package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js.map +1 -1
- package/lib/esm/components/backoffice/scaffolds/BackofficeTabbedDetailShell.js +1 -1
- package/lib/esm/components/backoffice/scaffolds/BackofficeTabbedDetailShell.js.map +1 -1
- package/lib/esm/components/backoffice/scaffolds/backofficeEntityListScaffold.css.js +1 -1
- package/lib/esm/components/backoffice/scaffolds/backofficeEntityListScaffold.css.js.map +1 -1
- package/lib/esm/components/backoffice/scaffolds/backofficeTabbedDetailShell.css.js +1 -1
- package/lib/esm/components/backoffice/scaffolds/backofficeTabbedDetailShell.css.js.map +1 -1
- package/lib/esm/components/backoffice/shared/BackofficeFilterableCell.js +2 -2
- package/lib/esm/components/backoffice/shared/BackofficeFilterableCell.js.map +1 -1
- package/lib/esm/components/backoffice/shared/BackofficeInlineFilterRow.js +1 -1
- package/lib/esm/components/backoffice/shared/BackofficeInlineFilterRow.js.map +1 -1
- package/lib/esm/components/backoffice/shared/backofficeFilterableCell.css.js +5 -5
- package/lib/esm/components/backoffice/shared/backofficeFilterableCell.css.js.map +1 -1
- package/lib/esm/components/backoffice/shared/backofficeInlineFilterRow.css.js +1 -1
- package/lib/esm/components/backoffice/shared/backofficeInlineFilterRow.css.js.map +1 -1
- package/lib/esm/components/backoffice/tools/BackofficeToolsDocPanel.js +12 -12
- package/lib/esm/components/backoffice/tools/BackofficeToolsDocPanel.js.map +1 -1
- package/lib/esm/components/backoffice/tools/BackofficeToolsErrorFallback.js +3 -2
- package/lib/esm/components/backoffice/tools/BackofficeToolsErrorFallback.js.map +1 -1
- package/lib/esm/components/backoffice/tools/BackofficeToolsJsonForm.js +15 -19
- package/lib/esm/components/backoffice/tools/BackofficeToolsJsonForm.js.map +1 -1
- package/lib/esm/components/backoffice/tools/backofficeToolsDocPanel.css.js +1 -1
- package/lib/esm/components/backoffice/tools/backofficeToolsDocPanel.css.js.map +1 -1
- package/lib/esm/components/backoffice/tools/backofficeToolsForm.css.js +1 -1
- package/lib/esm/components/backoffice/tools/backofficeToolsForm.css.js.map +1 -1
- package/lib/esm/components/backoffice/tools/backofficeToolsJsonForm.css.js +1 -1
- package/lib/esm/components/backoffice/tools/backofficeToolsJsonForm.css.js.map +1 -1
- package/lib/esm/hooks/useBackofficeInfiniteScrollSentinel.js +17 -9
- package/lib/esm/hooks/useBackofficeInfiniteScrollSentinel.js.map +1 -1
- package/lib/esm/hooks/useCopyToClipboard.js +1 -1
- package/lib/esm/hooks/useCopyToClipboard.js.map +1 -1
- package/lib/esm/i18n/locales/en/backofficeReact.js +21 -2
- package/lib/esm/i18n/locales/en/backofficeReact.js.map +1 -1
- package/lib/esm/i18n/locales/fr/backofficeReact.js +21 -2
- package/lib/esm/i18n/locales/fr/backofficeReact.js.map +1 -1
- package/lib/esm/pages/BackofficeDashboardPage.js +42 -41
- package/lib/esm/pages/BackofficeDashboardPage.js.map +1 -1
- package/lib/esm/pages/BackofficeDashboardWidgetContent.js +291 -255
- package/lib/esm/pages/BackofficeDashboardWidgetContent.js.map +1 -1
- package/lib/esm/pages/BackofficeEntityDetailLayoutPage.js +47 -49
- package/lib/esm/pages/BackofficeEntityDetailLayoutPage.js.map +1 -1
- package/lib/esm/pages/BackofficeEntityDetailPage.js +111 -105
- package/lib/esm/pages/BackofficeEntityDetailPage.js.map +1 -1
- package/lib/esm/pages/BackofficeEntityDetailPage.view-helpers.js +213 -213
- package/lib/esm/pages/BackofficeEntityDetailPage.view-helpers.js.map +1 -1
- package/lib/esm/pages/BackofficeEntityListDataPage.js +101 -83
- package/lib/esm/pages/BackofficeEntityListDataPage.js.map +1 -1
- package/lib/esm/pages/BackofficeEntityListPage.helpers.js +10 -4
- package/lib/esm/pages/BackofficeEntityListPage.helpers.js.map +1 -1
- package/lib/esm/pages/BackofficeEntityListPage.js +55 -54
- package/lib/esm/pages/BackofficeEntityListPage.js.map +1 -1
- package/lib/esm/pages/BackofficeEntityListRouteContext.js.map +1 -1
- package/lib/esm/pages/BackofficeHubPage.js +1 -1
- package/lib/esm/pages/BackofficeHubPage.js.map +1 -1
- package/lib/esm/pages/BackofficeLayoutPage.js +64 -56
- package/lib/esm/pages/BackofficeLayoutPage.js.map +1 -1
- package/lib/esm/pages/backofficeDashboardPage.css.js +1 -1
- package/lib/esm/pages/backofficeDashboardPage.css.js.map +1 -1
- package/lib/esm/pages/backofficeEntityDetailPage.css.js +1 -1
- package/lib/esm/pages/backofficeEntityDetailPage.css.js.map +1 -1
- package/lib/esm/pages/backofficeEntityListPage.css.js +1 -1
- package/lib/esm/pages/backofficeEntityListPage.css.js.map +1 -1
- package/lib/esm/pages/detail/BackofficeEntityDetailLayoutContext.js.map +1 -1
- package/lib/esm/pages/detail/BackofficeEntityDetailManifestFallback.js +11 -11
- package/lib/esm/pages/detail/BackofficeEntityDetailManifestFallback.js.map +1 -1
- package/lib/esm/pages/detail/buildTabsItems.js.map +1 -1
- package/lib/esm/provider/BackofficeProvider.js +41 -39
- package/lib/esm/provider/BackofficeProvider.js.map +1 -1
- package/lib/esm/router/createBackofficeRoutes.js +23 -23
- package/lib/esm/router/createBackofficeRoutes.js.map +1 -1
- package/lib/esm/storybook/backofficeDashboardPageStory.css.js +6 -0
- package/lib/esm/storybook/backofficeDashboardPageStory.css.js.map +1 -0
- package/lib/esm/storybook/relay/RelayStory.css.js +1 -1
- package/lib/esm/storybook/relay/RelayStory.css.js.map +1 -1
- package/lib/esm/style.css +1 -1
- package/lib/types/auth/AuthRefreshNotice.d.ts +5 -1
- package/lib/types/auth/AuthRefreshNotice.d.ts.map +1 -1
- package/lib/types/auth/TotpQrCode.d.ts +2 -1
- package/lib/types/auth/TotpQrCode.d.ts.map +1 -1
- package/lib/types/auth/authRefreshNotice.css.d.ts.map +1 -1
- package/lib/types/auth/login/AuthPanel.d.ts.map +1 -1
- package/lib/types/auth/login/EmailCapturePanel.d.ts.map +1 -1
- package/lib/types/auth/login/LoginFlow.d.ts.map +1 -1
- package/lib/types/auth/login/MethodChooser.d.ts.map +1 -1
- package/lib/types/auth/login/MfaChallengeForm.d.ts.map +1 -1
- package/lib/types/auth/login/OidcButtons.d.ts.map +1 -1
- package/lib/types/auth/login/PasskeyLoginForm.d.ts.map +1 -1
- package/lib/types/auth/login/PasswordLoginPanel.d.ts +1 -1
- package/lib/types/auth/login/PasswordLoginPanel.d.ts.map +1 -1
- package/lib/types/auth/login/loginPage.css.d.ts.map +1 -1
- package/lib/types/auth/pages/AcceptInvitationScreen.d.ts.map +1 -1
- package/lib/types/auth/pages/PasswordResetCompleteScreen.d.ts.map +1 -1
- package/lib/types/auth/pages/PasswordResetRequestScreen.d.ts.map +1 -1
- package/lib/types/auth/pages/VerifyEmailScreen.d.ts.map +1 -1
- package/lib/types/components/backoffice/actions/BackofficeEntityActionFormDialog.d.ts +3 -3
- package/lib/types/components/backoffice/actions/BackofficeEntityActionFormDialog.d.ts.map +1 -1
- package/lib/types/components/backoffice/actions/toastViewAction.d.ts +1 -1
- package/lib/types/components/backoffice/actions/toastViewAction.d.ts.map +1 -1
- package/lib/types/components/backoffice/billing/BackofficeBillingUsageChart.d.ts +2 -1
- package/lib/types/components/backoffice/billing/BackofficeBillingUsageChart.d.ts.map +1 -1
- package/lib/types/components/backoffice/columns/buildDataTableColumns.d.ts +2 -2
- package/lib/types/components/backoffice/columns/buildDataTableColumns.d.ts.map +1 -1
- package/lib/types/components/backoffice/detail/BackofficeDetailBadgeRow.d.ts.map +1 -1
- package/lib/types/components/backoffice/detail/BackofficeEntitySummaryHeader.d.ts.map +1 -1
- package/lib/types/components/backoffice/detail/BackofficeRelationsSummaryGrid.d.ts +1 -1
- package/lib/types/components/backoffice/detail/BackofficeRelationsSummaryGrid.d.ts.map +1 -1
- package/lib/types/components/backoffice/detail/BackofficeTokenUsageBreakdown.d.ts.map +1 -1
- package/lib/types/components/backoffice/detail/BackofficeUsageCostBreakdown.d.ts +1 -1
- package/lib/types/components/backoffice/detail/BackofficeUsageCostBreakdown.d.ts.map +1 -1
- package/lib/types/components/backoffice/errors/BackofficeErrorBoundary.d.ts +1 -1
- package/lib/types/components/backoffice/errors/BackofficeErrorBoundary.d.ts.map +1 -1
- package/lib/types/components/backoffice/filters/EntityIdFilterField.d.ts.map +1 -1
- package/lib/types/components/backoffice/filters/backofficeFilterAction.css.d.ts.map +1 -1
- package/lib/types/components/backoffice/filters/deferredFilterSearchInput.css.d.ts.map +1 -1
- package/lib/types/components/backoffice/filters/entityIdFilterField.css.d.ts +0 -1
- package/lib/types/components/backoffice/filters/entityIdFilterField.css.d.ts.map +1 -1
- package/lib/types/components/backoffice/hub/backofficeHubTemplate.css.d.ts.map +1 -1
- package/lib/types/components/backoffice/layout/backofficeSidebarActions.css.d.ts.map +1 -1
- package/lib/types/components/backoffice/layout/buildSidebarSections.d.ts +2 -2
- package/lib/types/components/backoffice/layout/buildSidebarSections.d.ts.map +1 -1
- package/lib/types/components/backoffice/layout/mapViewerToSidebarProfileView.d.ts +1 -1
- package/lib/types/components/backoffice/layout/mapViewerToSidebarProfileView.d.ts.map +1 -1
- package/lib/types/components/backoffice/list/RowFlagsCell.css.d.ts.map +1 -1
- package/lib/types/components/backoffice/overview/backofficeOverviewLayout.css.d.ts.map +1 -1
- package/lib/types/components/backoffice/pickers/EntityIdPickerDialog.d.ts +3 -3
- package/lib/types/components/backoffice/pickers/EntityIdPickerDialog.d.ts.map +1 -1
- package/lib/types/components/backoffice/refs/backofficeRelatedCountLink.css.d.ts.map +1 -1
- package/lib/types/components/backoffice/routing/BackofficeContentError.d.ts.map +1 -1
- package/lib/types/components/backoffice/scaffolds/BackofficeEntityDetailNotFound.d.ts.map +1 -1
- package/lib/types/components/backoffice/scaffolds/BackofficeEntityListScaffold.d.ts +2 -2
- package/lib/types/components/backoffice/scaffolds/BackofficeEntityListScaffold.d.ts.map +1 -1
- package/lib/types/components/backoffice/scaffolds/BackofficeTabbedDetailShell.d.ts +1 -1
- package/lib/types/components/backoffice/scaffolds/BackofficeTabbedDetailShell.d.ts.map +1 -1
- package/lib/types/components/backoffice/shared/backofficeFilterableCell.css.d.ts.map +1 -1
- package/lib/types/components/backoffice/tools/BackofficeToolsErrorFallback.d.ts.map +1 -1
- package/lib/types/components/backoffice/tools/BackofficeToolsJsonForm.d.ts.map +1 -1
- package/lib/types/components/backoffice/tools/backofficeToolsDocPanel.css.d.ts.map +1 -1
- package/lib/types/hooks/useBackofficeInfiniteScrollSentinel.d.ts +1 -2
- package/lib/types/hooks/useBackofficeInfiniteScrollSentinel.d.ts.map +1 -1
- package/lib/types/i18n/resources.d.ts +44 -2
- package/lib/types/i18n/resources.d.ts.map +1 -1
- package/lib/types/pages/BackofficeDashboardPage.d.ts.map +1 -1
- package/lib/types/pages/BackofficeDashboardWidgetContent.d.ts.map +1 -1
- package/lib/types/pages/BackofficeEntityDetailLayoutPage.d.ts.map +1 -1
- package/lib/types/pages/BackofficeEntityDetailPage.d.ts.map +1 -1
- package/lib/types/pages/BackofficeEntityDetailPage.view-helpers.d.ts +1 -1
- package/lib/types/pages/BackofficeEntityDetailPage.view-helpers.d.ts.map +1 -1
- package/lib/types/pages/BackofficeEntityListDataPage.d.ts.map +1 -1
- package/lib/types/pages/BackofficeEntityListPage.d.ts.map +1 -1
- package/lib/types/pages/BackofficeEntityListPage.helpers.d.ts +9 -9
- package/lib/types/pages/BackofficeEntityListPage.helpers.d.ts.map +1 -1
- package/lib/types/pages/BackofficeEntityListRouteContext.d.ts +2 -2
- package/lib/types/pages/BackofficeEntityListRouteContext.d.ts.map +1 -1
- package/lib/types/pages/BackofficeLayoutPage.d.ts.map +1 -1
- package/lib/types/pages/backofficeEntityListPage.css.d.ts.map +1 -1
- package/lib/types/pages/detail/BackofficeEntityDetailLayoutContext.d.ts +1 -1
- package/lib/types/pages/detail/BackofficeEntityDetailLayoutContext.d.ts.map +1 -1
- package/lib/types/pages/detail/buildTabsItems.d.ts +1 -1
- package/lib/types/pages/detail/buildTabsItems.d.ts.map +1 -1
- package/lib/types/provider/BackofficeProvider.d.ts.map +1 -1
- package/lib/types/provider/types.d.ts +2 -0
- package/lib/types/provider/types.d.ts.map +1 -1
- package/lib/types/router/createBackofficeRoutes.d.ts +0 -1
- package/lib/types/router/createBackofficeRoutes.d.ts.map +1 -1
- package/lib/types/storybook/backofficeDashboardPageStory.css.d.ts +2 -0
- package/lib/types/storybook/backofficeDashboardPageStory.css.d.ts.map +1 -0
- package/package.json +17 -17
- package/lib/esm/components/backoffice/technical/TechnicalIdentifierValue.js +0 -2
- package/lib/types/components/backoffice/technical/TechnicalIdentifierValue.d.ts +0 -2
- package/lib/types/components/backoffice/technical/TechnicalIdentifierValue.d.ts.map +0 -1
|
@@ -3,13 +3,10 @@ var e = (e) => e?.trim() ?? "", t = ({ viewer: t, unknownUserLabel: n }) => {
|
|
|
3
3
|
let r = [e(t?.firstName), e(t?.lastName)].filter((e) => e !== "").join(" ").trim();
|
|
4
4
|
r === "" && (r = n);
|
|
5
5
|
let i = e(t?.email), a = e(t?.initials);
|
|
6
|
-
a === "" && (a = "?")
|
|
7
|
-
let o = [r];
|
|
8
|
-
return i !== "" && o.push(i), {
|
|
6
|
+
return a === "" && (a = "?"), {
|
|
9
7
|
displayName: r,
|
|
10
8
|
email: i,
|
|
11
|
-
initials: a
|
|
12
|
-
ariaLabel: o.join(" - ")
|
|
9
|
+
initials: a
|
|
13
10
|
};
|
|
14
11
|
};
|
|
15
12
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapViewerToSidebarProfileView.js","names":[],"sources":["../../../../../src/components/backoffice/layout/mapViewerToSidebarProfileView.ts"],"sourcesContent":["import type { SidebarProfileViewer } from '@plumile/ui
|
|
1
|
+
{"version":3,"file":"mapViewerToSidebarProfileView.js","names":[],"sources":["../../../../../src/components/backoffice/layout/mapViewerToSidebarProfileView.ts"],"sourcesContent":["import type { SidebarProfileViewer } from '@plumile/ui';\n\nexport type BackofficeViewerIdentity = {\n id: string;\n firstName: string;\n lastName: string;\n email: string;\n initials: string;\n};\n\ntype MapViewerToSidebarProfileViewInput = {\n viewer: BackofficeViewerIdentity | null | undefined;\n unknownUserLabel: string;\n};\n\nconst sanitizeToken = (value: string | null | undefined): string => {\n return value?.trim() ?? '';\n};\n\nexport const mapViewerToSidebarProfileView = ({\n viewer,\n unknownUserLabel,\n}: MapViewerToSidebarProfileViewInput): SidebarProfileViewer => {\n const firstName = sanitizeToken(viewer?.firstName);\n const lastName = sanitizeToken(viewer?.lastName);\n const joinedDisplayName = [firstName, lastName]\n .filter((token) => {\n return token !== '';\n })\n .join(' ')\n .trim();\n let displayName = joinedDisplayName;\n if (displayName === '') {\n displayName = unknownUserLabel;\n }\n\n const email = sanitizeToken(viewer?.email);\n const initialsToken = sanitizeToken(viewer?.initials);\n let initials = initialsToken;\n if (initials === '') {\n initials = '?';\n }\n\n return {\n displayName,\n email,\n initials,\n };\n};\n\nexport default mapViewerToSidebarProfileView;\n"],"mappings":";AAeA,IAAM,KAAiB,MACd,GAAO,KAAK,KAAK,IAGb,KAAiC,EAC5C,WACA,0BAC8D;CAS9D,IAAI,IANsB,CAFR,EAAc,GAAQ,SAEb,GADV,EAAc,GAAQ,QACD,CAAQ,CAAC,CAC5C,QAAQ,MACA,MAAU,EAClB,CAAC,CACD,KAAK,GAAG,CAAC,CACT,KACe;CAClB,AAAI,MAAgB,OAClB,IAAc;CAGhB,IAAM,IAAQ,EAAc,GAAQ,KAAK,GAErC,IADkB,EAAc,GAAQ,QAC7B;CAKf,OAJI,MAAa,OACf,IAAW,MAGN;EACL;EACA;EACA;CACF;AACF"}
|
|
@@ -80,7 +80,7 @@ var e = (e, t) => e(t), t = (e, t) => !!(e === t || t !== "/" && e.startsWith(`$
|
|
|
80
80
|
}, m = (e, t, n, r) => {
|
|
81
81
|
let i = [], a = /* @__PURE__ */ new Set();
|
|
82
82
|
return Object.entries(e).forEach(([, e]) => {
|
|
83
|
-
e.isVisible
|
|
83
|
+
(e.isVisible == null || e.isVisible(r)) && d(e, n).forEach((e) => {
|
|
84
84
|
a.has(e) || p(e, t, n, r) && (a.add(e), i.push(e));
|
|
85
85
|
});
|
|
86
86
|
}), i;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebarUtils.js","names":[],"sources":["../../../../../src/components/backoffice/layout/sidebarUtils.ts"],"sourcesContent":["import type { TFunction } from 'i18next';\n\nimport type {\n BackofficeEntityManifestMap,\n I18nLabel,\n} from '@plumile/backoffice-core/types.js';\nimport type {\n BackofficeSidebarConfig,\n BackofficeIconComponent,\n BackofficeSidebarGroupConfig,\n BackofficeSidebarItemDescriptor,\n BackofficeSidebarItemConfig,\n BackofficeSidebarHubConfig,\n BackofficeSidebarHubGroupConfig,\n BackofficeResolvedSidebarHubConfig,\n} from '../../../provider/types.js';\n\nexport const resolveLabel = (label: I18nLabel, tApp: TFunction): string => {\n return label(tApp);\n};\n\nexport const isActivePath = (pathname: string, href: string): boolean => {\n if (pathname === href) {\n return true;\n }\n if (href !== '/' && pathname.startsWith(`${href}/`)) {\n return true;\n }\n return false;\n};\n\nexport const joinBackofficePath = (\n basePath: string,\n pathSegment: string,\n): string => {\n const normalizedBasePath = basePath.replace(/\\/+$/g, '');\n const normalizedPathSegment = pathSegment.replace(/^\\/+/g, '');\n if (normalizedBasePath === '') {\n return `/${normalizedPathSegment}`;\n }\n return `${normalizedBasePath}/${normalizedPathSegment}`;\n};\n\nexport const buildDefaultGroups = (\n entities: BackofficeEntityManifestMap,\n): Record<string, BackofficeSidebarGroupConfig> => {\n const entityIds = Object.keys(entities);\n\n return {\n main: {\n entities: entityIds,\n },\n };\n};\n\nexport const resolveSidebarGroups = (\n entities: BackofficeEntityManifestMap,\n sidebar: BackofficeSidebarConfig | undefined,\n): Record<string, BackofficeSidebarGroupConfig> => {\n return sidebar?.groups ?? buildDefaultGroups(entities);\n};\n\nexport type EntityGroupLookup = Map<\n string,\n {\n groupId: string;\n groupIcon?: BackofficeIconComponent;\n itemIcon?: BackofficeIconComponent;\n }\n>;\n\nexport const resolveItemDescriptor = (\n item: BackofficeSidebarItemConfig,\n): BackofficeSidebarItemDescriptor => {\n if (item.kind === 'dashboard') {\n return { kind: 'dashboard', id: item.id ?? 'dashboard' };\n }\n return { kind: item.kind, id: item.id };\n};\n\nexport const resolveGroupItems = <\n TManifest extends BackofficeEntityManifestMap = BackofficeEntityManifestMap,\n>(\n group: BackofficeSidebarGroupConfig<TManifest>,\n): readonly BackofficeSidebarItemConfig<TManifest>[] => {\n if (group.items != null) {\n return group.items;\n }\n return (\n group.entities?.map((entityId) => {\n return { kind: 'entity', id: entityId } as const;\n }) ?? []\n );\n};\n\nexport type BackofficeResolvedSidebarHubConfigFor<\n TManifest extends BackofficeEntityManifestMap = BackofficeEntityManifestMap,\n> = BackofficeSidebarHubConfig<TManifest> & {\n groups: readonly BackofficeSidebarHubGroupConfig<TManifest>[];\n};\n\nexport const resolveSidebarHubFor = <\n TManifest extends BackofficeEntityManifestMap = BackofficeEntityManifestMap,\n>(\n item: BackofficeSidebarHubConfig<TManifest>,\n sidebar: BackofficeSidebarConfig<TManifest> | undefined,\n): BackofficeResolvedSidebarHubConfigFor<TManifest> => {\n const registeredHub = sidebar?.hubs?.[item.id];\n return {\n ...registeredHub,\n ...item,\n groups: item.groups ?? registeredHub?.groups ?? [],\n };\n};\n\nexport const resolveSidebarHub = (\n item: BackofficeSidebarHubConfig,\n sidebar: BackofficeSidebarConfig | undefined,\n): BackofficeResolvedSidebarHubConfig => {\n return resolveSidebarHubFor(item, sidebar);\n};\n\nexport const resolveHubEntityIds = (\n hub: BackofficeResolvedSidebarHubConfig,\n): readonly string[] => {\n const output: string[] = [];\n const seen = new Set<string>();\n hub.groups.forEach((group) => {\n group.items.forEach((item) => {\n if (seen.has(item.id)) {\n return;\n }\n seen.add(item.id);\n output.push(item.id);\n });\n });\n return output;\n};\n\nexport type ResolvedSidebarHubEntry = {\n groupId: string | null;\n hub: BackofficeResolvedSidebarHubConfig;\n icon?: BackofficeIconComponent;\n};\n\nexport const resolveSidebarHubEntries = (\n groups: Record<string, BackofficeSidebarGroupConfig>,\n sidebar: BackofficeSidebarConfig | undefined,\n): readonly ResolvedSidebarHubEntry[] => {\n const output: ResolvedSidebarHubEntry[] = [];\n const seen = new Set<string>();\n\n Object.entries(groups).forEach(([groupId, group]) => {\n resolveGroupItems(group).forEach((item) => {\n if (item.kind !== 'hub' || seen.has(item.id)) {\n return;\n }\n seen.add(item.id);\n output.push({\n groupId,\n hub: resolveSidebarHub(item, sidebar),\n icon: item.icon ?? group.icon,\n });\n });\n });\n\n Object.values(sidebar?.hubs ?? {}).forEach((hub) => {\n if (seen.has(hub.id)) {\n return;\n }\n seen.add(hub.id);\n output.push({\n groupId: null,\n hub: resolveSidebarHub(hub, sidebar),\n icon: hub.icon,\n });\n });\n\n return output;\n};\n\nexport const resolveGroupEntityIds = (\n group: BackofficeSidebarGroupConfig,\n sidebar?: BackofficeSidebarConfig,\n): readonly string[] => {\n return resolveGroupItems(group).flatMap((item) => {\n if (item.kind === 'entity' || item.kind === 'tool') {\n return [item.id];\n }\n if (item.kind === 'hub') {\n return resolveHubEntityIds(resolveSidebarHub(item, sidebar));\n }\n return [];\n });\n};\n\nexport const buildEntityGroupLookup = (\n groups: Record<string, BackofficeSidebarGroupConfig>,\n sidebar?: BackofficeSidebarConfig,\n): EntityGroupLookup => {\n const lookup: EntityGroupLookup = new Map();\n\n Object.entries(groups).forEach(([groupId, group]) => {\n resolveGroupItems(group).forEach((item) => {\n if (item.kind === 'dashboard') {\n return;\n }\n\n if (item.kind === 'hub') {\n const hub = resolveSidebarHub(item, sidebar);\n resolveHubEntityIds(hub).forEach((entityId) => {\n if (!lookup.has(entityId)) {\n lookup.set(entityId, {\n groupId,\n groupIcon: group.icon,\n itemIcon: item.icon ?? hub.icon,\n });\n }\n });\n return;\n }\n\n if (!lookup.has(item.id)) {\n lookup.set(item.id, {\n groupId,\n groupIcon: group.icon,\n itemIcon: item.icon,\n });\n }\n });\n });\n\n return lookup;\n};\n\nconst isEntityVisible = (\n entityId: string,\n entities: BackofficeEntityManifestMap,\n sidebar: BackofficeSidebarConfig | undefined,\n permissions: unknown,\n): boolean => {\n const config = entities[entityId];\n if (config == null) {\n return false;\n }\n\n let descriptor: BackofficeSidebarItemDescriptor = {\n kind: 'entity',\n id: entityId,\n };\n if (config.kind === 'tool') {\n descriptor = { kind: 'tool', id: entityId };\n }\n\n if (sidebar?.isItemVisible != null) {\n return sidebar.isItemVisible(descriptor, permissions);\n }\n\n if (config.kind === 'tool') {\n return true;\n }\n return config.hasList;\n};\n\nexport const resolveVisibleEntityIds = (\n groups: Record<string, BackofficeSidebarGroupConfig>,\n entities: BackofficeEntityManifestMap,\n sidebar: BackofficeSidebarConfig | undefined,\n permissions: unknown,\n): string[] => {\n const output: string[] = [];\n const seen = new Set<string>();\n\n Object.entries(groups).forEach(([, group]) => {\n if (group.isVisible != null && !group.isVisible(permissions)) {\n return;\n }\n resolveGroupEntityIds(group, sidebar).forEach((entityId) => {\n if (seen.has(entityId)) {\n return;\n }\n if (!isEntityVisible(entityId, entities, sidebar, permissions)) {\n return;\n }\n seen.add(entityId);\n output.push(entityId);\n });\n });\n\n return output;\n};\n\nexport const resolveActiveEntityId = (\n pathname: string,\n entities: BackofficeEntityManifestMap,\n): string | null => {\n const entries = Object.entries(entities);\n for (const [entityId, config] of entries) {\n if (config.kind === 'tool') {\n if (isActivePath(pathname, config.routes.list)) {\n return entityId;\n }\n } else if (config.hasList && isActivePath(pathname, config.routes.list)) {\n return entityId;\n }\n }\n return null;\n};\n\nexport const resolveActiveGroupId = (\n groups: Record<string, BackofficeSidebarGroupConfig>,\n activeEntityId: string | null,\n entities: BackofficeEntityManifestMap,\n sidebar: BackofficeSidebarConfig | undefined,\n permissions: unknown,\n): string | null => {\n if (activeEntityId == null) {\n return null;\n }\n\n if (!isEntityVisible(activeEntityId, entities, sidebar, permissions)) {\n return null;\n }\n\n for (const [groupId, group] of Object.entries(groups)) {\n const isVisible = group.isVisible == null || group.isVisible(permissions);\n if (\n isVisible &&\n resolveGroupEntityIds(group, sidebar).includes(activeEntityId)\n ) {\n return groupId;\n }\n }\n\n return null;\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sidebarUtils.js","names":[],"sources":["../../../../../src/components/backoffice/layout/sidebarUtils.ts"],"sourcesContent":["import type { TFunction } from 'i18next';\n\nimport type {\n BackofficeEntityManifestMap,\n I18nLabel,\n} from '@plumile/backoffice-core/types.js';\nimport type {\n BackofficeSidebarConfig,\n BackofficeIconComponent,\n BackofficeSidebarGroupConfig,\n BackofficeSidebarItemDescriptor,\n BackofficeSidebarItemConfig,\n BackofficeSidebarHubConfig,\n BackofficeSidebarHubGroupConfig,\n BackofficeResolvedSidebarHubConfig,\n} from '../../../provider/types.js';\n\nexport const resolveLabel = (label: I18nLabel, tApp: TFunction): string => {\n return label(tApp);\n};\n\nexport const isActivePath = (pathname: string, href: string): boolean => {\n if (pathname === href) {\n return true;\n }\n if (href !== '/' && pathname.startsWith(`${href}/`)) {\n return true;\n }\n return false;\n};\n\nexport const joinBackofficePath = (\n basePath: string,\n pathSegment: string,\n): string => {\n const normalizedBasePath = basePath.replace(/\\/+$/g, '');\n const normalizedPathSegment = pathSegment.replace(/^\\/+/g, '');\n if (normalizedBasePath === '') {\n return `/${normalizedPathSegment}`;\n }\n return `${normalizedBasePath}/${normalizedPathSegment}`;\n};\n\nexport const buildDefaultGroups = (\n entities: BackofficeEntityManifestMap,\n): Record<string, BackofficeSidebarGroupConfig> => {\n const entityIds = Object.keys(entities);\n\n return {\n main: {\n entities: entityIds,\n },\n };\n};\n\nexport const resolveSidebarGroups = (\n entities: BackofficeEntityManifestMap,\n sidebar: BackofficeSidebarConfig | undefined,\n): Record<string, BackofficeSidebarGroupConfig> => {\n return sidebar?.groups ?? buildDefaultGroups(entities);\n};\n\nexport type EntityGroupLookup = Map<\n string,\n {\n groupId: string;\n groupIcon?: BackofficeIconComponent;\n itemIcon?: BackofficeIconComponent;\n }\n>;\n\nexport const resolveItemDescriptor = (\n item: BackofficeSidebarItemConfig,\n): BackofficeSidebarItemDescriptor => {\n if (item.kind === 'dashboard') {\n return { kind: 'dashboard', id: item.id ?? 'dashboard' };\n }\n return { kind: item.kind, id: item.id };\n};\n\nexport const resolveGroupItems = <\n TManifest extends BackofficeEntityManifestMap = BackofficeEntityManifestMap,\n>(\n group: BackofficeSidebarGroupConfig<TManifest>,\n): readonly BackofficeSidebarItemConfig<TManifest>[] => {\n if (group.items != null) {\n return group.items;\n }\n return (\n group.entities?.map((entityId) => {\n return { kind: 'entity', id: entityId } as const;\n }) ?? []\n );\n};\n\nexport type BackofficeResolvedSidebarHubConfigFor<\n TManifest extends BackofficeEntityManifestMap = BackofficeEntityManifestMap,\n> = BackofficeSidebarHubConfig<TManifest> & {\n groups: readonly BackofficeSidebarHubGroupConfig<TManifest>[];\n};\n\nexport const resolveSidebarHubFor = <\n TManifest extends BackofficeEntityManifestMap = BackofficeEntityManifestMap,\n>(\n item: BackofficeSidebarHubConfig<TManifest>,\n sidebar: BackofficeSidebarConfig<TManifest> | undefined,\n): BackofficeResolvedSidebarHubConfigFor<TManifest> => {\n const registeredHub = sidebar?.hubs?.[item.id];\n return {\n ...registeredHub,\n ...item,\n groups: item.groups ?? registeredHub?.groups ?? [],\n };\n};\n\nexport const resolveSidebarHub = (\n item: BackofficeSidebarHubConfig,\n sidebar: BackofficeSidebarConfig | undefined,\n): BackofficeResolvedSidebarHubConfig => {\n return resolveSidebarHubFor(item, sidebar);\n};\n\nexport const resolveHubEntityIds = (\n hub: BackofficeResolvedSidebarHubConfig,\n): readonly string[] => {\n const output: string[] = [];\n const seen = new Set<string>();\n hub.groups.forEach((group) => {\n group.items.forEach((item) => {\n if (seen.has(item.id)) {\n return;\n }\n seen.add(item.id);\n output.push(item.id);\n });\n });\n return output;\n};\n\nexport type ResolvedSidebarHubEntry = {\n groupId: string | null;\n hub: BackofficeResolvedSidebarHubConfig;\n icon?: BackofficeIconComponent;\n};\n\nexport const resolveSidebarHubEntries = (\n groups: Record<string, BackofficeSidebarGroupConfig>,\n sidebar: BackofficeSidebarConfig | undefined,\n): readonly ResolvedSidebarHubEntry[] => {\n const output: ResolvedSidebarHubEntry[] = [];\n const seen = new Set<string>();\n\n Object.entries(groups).forEach(([groupId, group]) => {\n resolveGroupItems(group).forEach((item) => {\n if (item.kind !== 'hub' || seen.has(item.id)) {\n return;\n }\n seen.add(item.id);\n output.push({\n groupId,\n hub: resolveSidebarHub(item, sidebar),\n icon: item.icon ?? group.icon,\n });\n });\n });\n\n Object.values(sidebar?.hubs ?? {}).forEach((hub) => {\n if (seen.has(hub.id)) {\n return;\n }\n seen.add(hub.id);\n output.push({\n groupId: null,\n hub: resolveSidebarHub(hub, sidebar),\n icon: hub.icon,\n });\n });\n\n return output;\n};\n\nexport const resolveGroupEntityIds = (\n group: BackofficeSidebarGroupConfig,\n sidebar?: BackofficeSidebarConfig,\n): readonly string[] => {\n return resolveGroupItems(group).flatMap((item) => {\n if (item.kind === 'entity' || item.kind === 'tool') {\n return [item.id];\n }\n if (item.kind === 'hub') {\n return resolveHubEntityIds(resolveSidebarHub(item, sidebar));\n }\n return [];\n });\n};\n\nexport const buildEntityGroupLookup = (\n groups: Record<string, BackofficeSidebarGroupConfig>,\n sidebar?: BackofficeSidebarConfig,\n): EntityGroupLookup => {\n const lookup: EntityGroupLookup = new Map();\n\n Object.entries(groups).forEach(([groupId, group]) => {\n resolveGroupItems(group).forEach((item) => {\n if (item.kind === 'dashboard') {\n return;\n }\n\n if (item.kind === 'hub') {\n const hub = resolveSidebarHub(item, sidebar);\n resolveHubEntityIds(hub).forEach((entityId) => {\n if (!lookup.has(entityId)) {\n lookup.set(entityId, {\n groupId,\n groupIcon: group.icon,\n itemIcon: item.icon ?? hub.icon,\n });\n }\n });\n return;\n }\n\n if (!lookup.has(item.id)) {\n lookup.set(item.id, {\n groupId,\n groupIcon: group.icon,\n itemIcon: item.icon,\n });\n }\n });\n });\n\n return lookup;\n};\n\nconst isEntityVisible = (\n entityId: string,\n entities: BackofficeEntityManifestMap,\n sidebar: BackofficeSidebarConfig | undefined,\n permissions: unknown,\n): boolean => {\n const config = entities[entityId];\n if (config == null) {\n return false;\n }\n\n let descriptor: BackofficeSidebarItemDescriptor = {\n kind: 'entity',\n id: entityId,\n };\n if (config.kind === 'tool') {\n descriptor = { kind: 'tool', id: entityId };\n }\n\n if (sidebar?.isItemVisible != null) {\n return sidebar.isItemVisible(descriptor, permissions);\n }\n\n if (config.kind === 'tool') {\n return true;\n }\n return config.hasList;\n};\n\nexport const resolveVisibleEntityIds = (\n groups: Record<string, BackofficeSidebarGroupConfig>,\n entities: BackofficeEntityManifestMap,\n sidebar: BackofficeSidebarConfig | undefined,\n permissions: unknown,\n): string[] => {\n const output: string[] = [];\n const seen = new Set<string>();\n\n Object.entries(groups).forEach(([, group]) => {\n if (group.isVisible != null && !group.isVisible(permissions)) {\n return;\n }\n resolveGroupEntityIds(group, sidebar).forEach((entityId) => {\n if (seen.has(entityId)) {\n return;\n }\n if (!isEntityVisible(entityId, entities, sidebar, permissions)) {\n return;\n }\n seen.add(entityId);\n output.push(entityId);\n });\n });\n\n return output;\n};\n\nexport const resolveActiveEntityId = (\n pathname: string,\n entities: BackofficeEntityManifestMap,\n): string | null => {\n const entries = Object.entries(entities);\n for (const [entityId, config] of entries) {\n if (config.kind === 'tool') {\n if (isActivePath(pathname, config.routes.list)) {\n return entityId;\n }\n } else if (config.hasList && isActivePath(pathname, config.routes.list)) {\n return entityId;\n }\n }\n return null;\n};\n\nexport const resolveActiveGroupId = (\n groups: Record<string, BackofficeSidebarGroupConfig>,\n activeEntityId: string | null,\n entities: BackofficeEntityManifestMap,\n sidebar: BackofficeSidebarConfig | undefined,\n permissions: unknown,\n): string | null => {\n if (activeEntityId == null) {\n return null;\n }\n\n if (!isEntityVisible(activeEntityId, entities, sidebar, permissions)) {\n return null;\n }\n\n for (const [groupId, group] of Object.entries(groups)) {\n const isVisible = group.isVisible == null || group.isVisible(permissions);\n if (\n isVisible &&\n resolveGroupEntityIds(group, sidebar).includes(activeEntityId)\n ) {\n return groupId;\n }\n }\n\n return null;\n};\n"],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ var i = ({ icon: i, label: a, showIcon: o = !0, endAdornment: s }) => /* @__PURE
|
|
|
5
5
|
className: e,
|
|
6
6
|
children: [
|
|
7
7
|
o && i != null && /* @__PURE__ */ n("span", {
|
|
8
|
-
className: "
|
|
8
|
+
className: "txvbqb5ml txvbqb2nn txvbqb8o1 txvbqbcb txvbqb1co txvbqblmz txvbqb8hn",
|
|
9
9
|
"aria-hidden": "true",
|
|
10
10
|
children: /* @__PURE__ */ n(i, {
|
|
11
11
|
width: 14,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
//#region src/components/backoffice/links/backofficeLink.css.ts
|
|
2
|
-
var e = "
|
|
2
|
+
var e = "txvbqb5ml txvbqb2nn txvbqb6rf", t = "txvbqb5ml txvbqb2nn txvbqb8o1 txvbqbcb txvbqb1co txvbqblmz txvbqb8hn", n = "txvbqbe1d";
|
|
3
3
|
//#endregion
|
|
4
4
|
export { e as content, t as icon, n as label };
|
|
5
5
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backofficeLink.css.js","names":[],"sources":["../../../../../src/components/backoffice/links/backofficeLink.css.ts"],"sourcesContent":["import { sprinkles } from '@plumile/ui/theme
|
|
1
|
+
{"version":3,"file":"backofficeLink.css.js","names":[],"sources":["../../../../../src/components/backoffice/links/backofficeLink.css.ts"],"sourcesContent":["import { sprinkles } from '@plumile/ui/theme';\n\nconst INLINE_FLEX = 'inline-flex' as const;\n\nexport const content = sprinkles({\n display: INLINE_FLEX,\n alignItems: 'center',\n gap: 1,\n});\n\nexport const icon = sprinkles({\n display: INLINE_FLEX,\n alignItems: 'center',\n justifyContent: 'center',\n color: 'current',\n flex: 'none',\n width: 3.5,\n height: 3.5,\n});\n\nexport const label = sprinkles({\n minWidth: 0,\n});\n"],"mappings":""}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
//#region src/components/backoffice/list/RowFlagsCell.css.ts
|
|
2
|
-
var e = "
|
|
2
|
+
var e = "txvbqb8o1 txvbqbiq9 txvbqbjft", t = "txvbqb5ml txvbqb2nn txvbqb8o1 txvbqb7fl txvbqbl9n", n = "qbwcue18 qbwcue12 txvbqb5ml txvbqb2nn txvbqb8o1 txvbqb1cr txvbqb1rk qbwcue1c qbwcue16 txvbqbkzd txvbqb7u1 txvbqbe3l txvbqbdc3";
|
|
3
3
|
//#endregion
|
|
4
4
|
export { t as container, n as flag, e as rowFlagsColumnCell };
|
|
5
5
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RowFlagsCell.css.js","names":[],"sources":["../../../../../src/components/backoffice/list/RowFlagsCell.css.ts"],"sourcesContent":["import { sprinkles
|
|
1
|
+
{"version":3,"file":"RowFlagsCell.css.js","names":[],"sources":["../../../../../src/components/backoffice/list/RowFlagsCell.css.ts"],"sourcesContent":["import { sprinkles, iconBox } from '@plumile/ui/theme';\n\nexport const rowFlagsColumnCell = sprinkles({\n justifyContent: 'center',\n paddingX: 1,\n paddingY: 0,\n});\n\nexport const container = sprinkles({\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 1.5,\n width: 'full',\n});\n\nexport const flag = iconBox({ size: 'lg' });\n"],"mappings":""}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { aside as e, container as t, content as n, primary as r, summary as i } from "./backofficeOverviewLayout.css.js";
|
|
2
|
-
import { cx as a } from "@plumile/ui/theme
|
|
2
|
+
import { cx as a } from "@plumile/ui/theme";
|
|
3
3
|
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
4
4
|
//#region src/components/backoffice/overview/BackofficeOverviewLayout.tsx
|
|
5
5
|
var c = ({ summary: c, aside: l, children: u, className: d }) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BackofficeOverviewLayout.js","names":[],"sources":["../../../../../src/components/backoffice/overview/BackofficeOverviewLayout.tsx"],"sourcesContent":["import { type JSX, type ReactNode } from 'react';\n\nimport { cx } from '@plumile/ui/theme
|
|
1
|
+
{"version":3,"file":"BackofficeOverviewLayout.js","names":[],"sources":["../../../../../src/components/backoffice/overview/BackofficeOverviewLayout.tsx"],"sourcesContent":["import { type JSX, type ReactNode } from 'react';\n\nimport { cx } from '@plumile/ui/theme';\n\nimport * as styles from './backofficeOverviewLayout.css.js';\n\nexport type BackofficeOverviewLayoutProps = {\n summary?: ReactNode;\n aside?: ReactNode;\n children?: ReactNode;\n className?: string;\n};\n\nexport const BackofficeOverviewLayout = ({\n summary,\n aside,\n children,\n className,\n}: BackofficeOverviewLayoutProps): JSX.Element => {\n let summaryNode: JSX.Element | null = null;\n if (summary != null) {\n summaryNode = <div className={styles.summary}>{summary}</div>;\n }\n\n let asideNode: JSX.Element | null = null;\n if (aside != null) {\n asideNode = <aside className={styles.aside}>{aside}</aside>;\n }\n\n let primaryNode: JSX.Element | null = null;\n if (children != null || asideNode != null) {\n primaryNode = <div className={styles.primary}>{children}</div>;\n }\n\n return (\n <div className={cx(styles.container, className)}>\n {summaryNode}\n <div className={styles.content}>\n {primaryNode}\n {asideNode}\n </div>\n </div>\n );\n};\n\nexport default BackofficeOverviewLayout;\n"],"mappings":";;;;AAaA,IAAa,KAA4B,EACvC,SAAA,GACA,OAAA,GACA,aACA,mBACgD;CAChD,IAAI,IAAkC;CACtC,AAAI,KAAW,SACb,IAAc,kBAAC,OAAD;EAAK,WAAW;EAAiB,UAAA;CAAa,CAAA;CAG9D,IAAI,IAAgC;CACpC,AAAI,KAAS,SACX,IAAY,kBAAC,SAAD;EAAO,WAAW;EAAe,UAAA;CAAa,CAAA;CAG5D,IAAI,IAAkC;CAKtC,QAJI,KAAY,QAAQ,KAAa,UACnC,IAAc,kBAAC,OAAD;EAAK,WAAW;EAAiB;CAAc,CAAA,IAI7D,kBAAC,OAAD;EAAK,WAAW,EAAG,GAAkB,CAAS;EAA9C,UAAA,CACG,GACD,kBAAC,OAAD;GAAK,WAAW;GAAhB,UAAA,CACG,GACA,CACE;EACF,CAAA,CAAA;;AAET"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* empty css */
|
|
2
2
|
//#region src/components/backoffice/overview/backofficeOverviewLayout.css.ts
|
|
3
|
-
var e = "
|
|
3
|
+
var e = "txvbqb5lr txvbqb6m5 txvbqb6st txvbqbl9n txvbqbe1d", t = "txvbqb5lr txvbqb6m5 txvbqb6s9", n = "_1f81p5z0 txvbqb5m1 txvbqb7gz txvbqb6st txvbqb2nd", r = "txvbqb5lr txvbqb6m5 txvbqb6st", i = "txvbqb5lr txvbqb6m5 txvbqb6st";
|
|
4
4
|
//#endregion
|
|
5
5
|
export { i as aside, e as container, n as content, r as primary, t as summary };
|
|
6
6
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backofficeOverviewLayout.css.js","names":[],"sources":["../../../../../src/components/backoffice/overview/backofficeOverviewLayout.css.ts"],"sourcesContent":["import { style } from '@vanilla-extract/css';\n\nimport { sprinkles } from '@plumile/ui/theme
|
|
1
|
+
{"version":3,"file":"backofficeOverviewLayout.css.js","names":[],"sources":["../../../../../src/components/backoffice/overview/backofficeOverviewLayout.css.ts"],"sourcesContent":["import { style } from '@vanilla-extract/css';\n\nimport { breakpoints, sprinkles } from '@plumile/ui/theme';\n\nconst LARGE_MEDIA_QUERY = `screen and (min-width: ${breakpoints.lg})`;\n\nexport const container = sprinkles({\n display: 'flex',\n flexDirection: 'column',\n gap: 6,\n width: 'full',\n minWidth: 0,\n});\n\nexport const summary = sprinkles({\n display: 'flex',\n flexDirection: 'column',\n gap: 4,\n});\n\nexport const content = style([\n sprinkles({\n display: 'grid',\n gridTemplateColumns: 1,\n gap: 6,\n alignItems: 'flex-start',\n }),\n {\n '@media': {\n [LARGE_MEDIA_QUERY]: {\n gridTemplateColumns: 'minmax(0, 2fr) minmax(0, 1fr)',\n },\n },\n },\n]);\n\nexport const primary = sprinkles({\n display: 'flex',\n flexDirection: 'column',\n gap: 6,\n});\n\nexport const aside = sprinkles({\n display: 'flex',\n flexDirection: 'column',\n gap: 6,\n});\n"],"mappings":""}
|
|
@@ -4,20 +4,18 @@ import { useBackofficePickerEntityLoader as n } from "../../../provider/useBacko
|
|
|
4
4
|
import r from "../../../hooks/useInfiniteConnection.js";
|
|
5
5
|
import { useBackofficeRuntimePaginationFragment as i } from "../../../relay/typedRelayHooks.js";
|
|
6
6
|
import { loadingLabel as a, loadingState as o } from "./entityIdPickerDialog.css.js";
|
|
7
|
-
import { Suspense as s, useCallback as c, useEffect as l,
|
|
8
|
-
import { InlineBanner as
|
|
9
|
-
import { Fragment as
|
|
10
|
-
import { useTranslation as
|
|
11
|
-
import { Button as
|
|
12
|
-
import * as
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import { BackofficePickerList as C, BackofficePickerShell as w } from "@plumile/ui/backoffice/molecules/backoffice_picker/BackofficePicker.js";
|
|
17
|
-
import { InfiniteScrollTrigger as T } from "@plumile/ui/components/infinite/InfiniteScrollTrigger.js";
|
|
7
|
+
import { Suspense as s, useCallback as c, useEffect as l, useId as u, useMemo as d, useRef as f, useState as p } from "react";
|
|
8
|
+
import { InfiniteScrollTrigger as m, InlineBanner as h, Modal as g } from "@plumile/ui";
|
|
9
|
+
import { Fragment as _, jsx as v, jsxs as y } from "react/jsx-runtime";
|
|
10
|
+
import { useTranslation as b } from "react-i18next";
|
|
11
|
+
import { Button as x } from "@plumile/ui/button";
|
|
12
|
+
import * as S from "react-relay";
|
|
13
|
+
import { Spinner as C } from "@plumile/ui/backoffice/atoms/spinner/Spinner.js";
|
|
14
|
+
import { BackofficeEmptyState as w } from "@plumile/ui/backoffice/molecules/backoffice_empty_state/BackofficeEmptyState.js";
|
|
15
|
+
import { BackofficePickerList as T, BackofficePickerShell as E } from "@plumile/ui/backoffice/molecules/backoffice_picker/BackofficePicker.js";
|
|
18
16
|
//#region src/components/backoffice/pickers/EntityIdPickerDialog.tsx
|
|
19
|
-
var { useLazyLoadQuery:
|
|
20
|
-
let
|
|
17
|
+
var { useLazyLoadQuery: D } = S, O = "store-and-network", k = (e, t) => e(t), A = ({ config: e, entity: t, search: n, scope: a, fetchKey: o, resetKey: s, scrollRootRef: l, labels: f, onSelectId: p }) => {
|
|
18
|
+
let g = u(), b = d(() => {
|
|
21
19
|
let t = n.trim();
|
|
22
20
|
return e.buildQueryVariables({
|
|
23
21
|
search: t,
|
|
@@ -27,146 +25,159 @@ var { useLazyLoadQuery: E } = y, D = "store-and-network", O = (e, t) => e(t), k
|
|
|
27
25
|
e,
|
|
28
26
|
a,
|
|
29
27
|
n
|
|
30
|
-
]),
|
|
31
|
-
fetchPolicy:
|
|
28
|
+
]), S = D(e.query, b, {
|
|
29
|
+
fetchPolicy: O,
|
|
32
30
|
fetchKey: o
|
|
33
|
-
}), { data:
|
|
31
|
+
}), { data: C, loadNext: w, hasNext: E, isLoadingNext: k } = i(e.fragment, S), A = e.getConnection(C), j = d(() => A.edges.map((t) => {
|
|
34
32
|
let n = e.toRow(t.node);
|
|
35
33
|
return {
|
|
36
34
|
id: e.getRowId(n),
|
|
37
35
|
title: n.title,
|
|
38
36
|
subtitle: n.subtitle
|
|
39
37
|
};
|
|
40
|
-
}), [e,
|
|
41
|
-
|
|
42
|
-
}, [
|
|
43
|
-
nodes:
|
|
44
|
-
hasNext:
|
|
45
|
-
isLoadingNext:
|
|
46
|
-
runLoadMore:
|
|
38
|
+
}), [e, A.edges]), M = c((e) => {
|
|
39
|
+
w(20, { onComplete: e });
|
|
40
|
+
}, [w]), N = r({
|
|
41
|
+
nodes: j,
|
|
42
|
+
hasNext: E,
|
|
43
|
+
isLoadingNext: k,
|
|
44
|
+
runLoadMore: M,
|
|
47
45
|
surface: `backoffice.entity-picker.${t}`,
|
|
48
46
|
resetKey: s
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
47
|
+
}), P = "complete";
|
|
48
|
+
N.incrementalError == null ? N.isLoadingNext ? P = "loading" : N.hasNext && (P = "idle") : P = "paused";
|
|
49
|
+
let F;
|
|
50
|
+
return N.incrementalError != null && (F = g), /* @__PURE__ */ y(_, { children: [
|
|
51
|
+
/* @__PURE__ */ v(T, {
|
|
52
|
+
items: N.nodes,
|
|
53
53
|
onSelectItem: (e) => {
|
|
54
|
-
|
|
54
|
+
p(e.id);
|
|
55
55
|
}
|
|
56
56
|
}),
|
|
57
|
-
/* @__PURE__ */
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
isLoading: j.isLoadingNext,
|
|
61
|
-
onLoadMore: j.loadMoreSafe,
|
|
57
|
+
/* @__PURE__ */ v(m, {
|
|
58
|
+
state: P,
|
|
59
|
+
onLoadMore: N.loadMoreSafe,
|
|
62
60
|
scrollRootRef: l,
|
|
61
|
+
slotProps: { loadMoreButton: { "aria-describedby": F } },
|
|
63
62
|
labels: {
|
|
64
|
-
loadMore:
|
|
65
|
-
loading:
|
|
66
|
-
end:
|
|
63
|
+
loadMore: f.loadMore,
|
|
64
|
+
loading: f.loading,
|
|
65
|
+
end: f.end
|
|
67
66
|
}
|
|
68
67
|
}),
|
|
69
|
-
|
|
68
|
+
N.incrementalError != null && /* @__PURE__ */ v(h, {
|
|
69
|
+
"aria-live": "assertive",
|
|
70
|
+
id: g,
|
|
71
|
+
role: "alert",
|
|
70
72
|
tone: "danger",
|
|
71
|
-
title:
|
|
72
|
-
actions: /* @__PURE__ */
|
|
73
|
+
title: N.incrementalError.message,
|
|
74
|
+
actions: /* @__PURE__ */ v(x, {
|
|
73
75
|
type: "button",
|
|
74
|
-
variant: "
|
|
75
|
-
onClick:
|
|
76
|
-
|
|
76
|
+
variant: "soft",
|
|
77
|
+
onClick: N.retryLoadMore,
|
|
78
|
+
tone: "neutral",
|
|
79
|
+
children: f.retry
|
|
77
80
|
}),
|
|
78
81
|
children: null
|
|
79
82
|
})
|
|
80
83
|
] });
|
|
81
|
-
},
|
|
84
|
+
}, j = (e, t) => /* @__PURE__ */ v(_, { children: /* @__PURE__ */ v(x, {
|
|
82
85
|
type: "button",
|
|
83
|
-
variant: "
|
|
84
|
-
onClick:
|
|
86
|
+
variant: "soft",
|
|
87
|
+
onClick: () => {
|
|
88
|
+
e(!1);
|
|
89
|
+
},
|
|
90
|
+
tone: "neutral",
|
|
85
91
|
children: t
|
|
86
|
-
}) }),
|
|
92
|
+
}) }), M = ({ message: e }) => /* @__PURE__ */ v(h, {
|
|
93
|
+
"aria-live": "polite",
|
|
94
|
+
role: "status",
|
|
87
95
|
tone: "warning",
|
|
88
96
|
title: e,
|
|
89
97
|
children: null
|
|
90
|
-
}),
|
|
98
|
+
}), N = ({ label: e }) => /* @__PURE__ */ y("div", {
|
|
91
99
|
className: o,
|
|
92
100
|
role: "status",
|
|
93
101
|
"aria-live": "polite",
|
|
94
|
-
children: [/* @__PURE__ */
|
|
102
|
+
children: [/* @__PURE__ */ v(C, {
|
|
95
103
|
size: 18,
|
|
96
104
|
ariaLabel: e
|
|
97
|
-
}), /* @__PURE__ */
|
|
105
|
+
}), /* @__PURE__ */ v("span", {
|
|
98
106
|
className: a,
|
|
99
107
|
children: e
|
|
100
108
|
})]
|
|
101
|
-
}),
|
|
102
|
-
let { t:
|
|
109
|
+
}), P = ({ open: r, entity: i, title: a, scope: o, onOpenChange: u, onSelectId: m }) => {
|
|
110
|
+
let { t: _ } = b(), { t: y } = e(), [S, C] = p(""), [T, D] = p(""), [O, P] = p(0), F = f(null), I = n(i, { enabled: r }), L;
|
|
103
111
|
I.status === "loaded" && (L = I.module.config.picker), l(() => {
|
|
104
|
-
r && (
|
|
112
|
+
r && (C(""), D(""), P((e) => e + 1));
|
|
105
113
|
}, [r]), l(() => {
|
|
106
114
|
let e = setTimeout(() => {
|
|
107
|
-
D(
|
|
115
|
+
D(S);
|
|
108
116
|
}, 250);
|
|
109
117
|
return () => {
|
|
110
118
|
clearTimeout(e);
|
|
111
119
|
};
|
|
112
|
-
}, [
|
|
113
|
-
let R =
|
|
114
|
-
|
|
120
|
+
}, [S]);
|
|
121
|
+
let R = d(() => j(u, y("common.actions.close")), [u, y]), z = c((e) => {
|
|
122
|
+
C(e);
|
|
115
123
|
}, []), B = c((e) => {
|
|
116
|
-
|
|
117
|
-
}, [
|
|
124
|
+
m(e), u(!1);
|
|
125
|
+
}, [u, m]);
|
|
118
126
|
if (!r) return null;
|
|
119
127
|
let V;
|
|
120
|
-
L?.searchPlaceholder != null && (V =
|
|
121
|
-
let H =
|
|
122
|
-
return W = I.status === "loading" ? /* @__PURE__ */
|
|
128
|
+
L?.searchPlaceholder != null && (V = k(L.searchPlaceholder, _));
|
|
129
|
+
let H = T.trim(), U = L?.searchRequired === !0, W;
|
|
130
|
+
return W = I.status === "loading" ? /* @__PURE__ */ v(N, { label: y("common.loading") }) : L == null ? /* @__PURE__ */ v(M, { message: y("picker.unavailable", { entity: i }) }) : U && H === "" ? /* @__PURE__ */ v(w, { title: y("picker.searchRequired") }) : /* @__PURE__ */ v(A, {
|
|
123
131
|
config: L,
|
|
124
132
|
entity: i,
|
|
125
|
-
search:
|
|
133
|
+
search: T,
|
|
126
134
|
scope: o,
|
|
127
|
-
fetchKey:
|
|
128
|
-
resetKey: `${i}:${H}:${JSON.stringify(o ?? {})}:${
|
|
135
|
+
fetchKey: O,
|
|
136
|
+
resetKey: `${i}:${H}:${JSON.stringify(o ?? {})}:${O}`,
|
|
129
137
|
scrollRootRef: F,
|
|
130
138
|
labels: {
|
|
131
|
-
loadMore:
|
|
132
|
-
loading:
|
|
133
|
-
end:
|
|
134
|
-
retry:
|
|
139
|
+
loadMore: y("list.loadMore.action"),
|
|
140
|
+
loading: y("list.loadMore.loading"),
|
|
141
|
+
end: y("list.loadMore.end"),
|
|
142
|
+
retry: y("common.actions.retry")
|
|
135
143
|
},
|
|
136
144
|
onSelectId: B
|
|
137
|
-
}), /* @__PURE__ */
|
|
138
|
-
|
|
139
|
-
|
|
145
|
+
}), /* @__PURE__ */ v(g, {
|
|
146
|
+
open: r,
|
|
147
|
+
onOpenChange: u,
|
|
140
148
|
title: a,
|
|
141
149
|
footer: R,
|
|
142
150
|
initialFocus: "first-form-control",
|
|
143
151
|
scrollRootRef: F,
|
|
144
|
-
children: /* @__PURE__ */
|
|
145
|
-
searchValue:
|
|
152
|
+
children: /* @__PURE__ */ v(E, {
|
|
153
|
+
searchValue: S,
|
|
146
154
|
onSearchChange: z,
|
|
147
155
|
searchPlaceholder: V,
|
|
148
156
|
searchAriaLabel: V,
|
|
149
157
|
searchName: "backoffice-entity-picker-search",
|
|
150
158
|
searchEnabled: L?.searchEnabled ?? !0,
|
|
151
|
-
children: /* @__PURE__ */
|
|
159
|
+
children: /* @__PURE__ */ v(t, {
|
|
152
160
|
fallback: (e) => {
|
|
153
161
|
let { reset: t } = e;
|
|
154
|
-
return /* @__PURE__ */ h
|
|
162
|
+
return /* @__PURE__ */ v(h, {
|
|
163
|
+
"aria-live": "assertive",
|
|
164
|
+
role: "alert",
|
|
155
165
|
tone: "danger",
|
|
156
|
-
title:
|
|
157
|
-
actions: /* @__PURE__ */
|
|
166
|
+
title: y("picker.errors.loadFailed"),
|
|
167
|
+
actions: /* @__PURE__ */ v(x, {
|
|
158
168
|
type: "button",
|
|
159
|
-
variant: "
|
|
169
|
+
variant: "soft",
|
|
160
170
|
onClick: () => {
|
|
161
171
|
t(), P((e) => e + 1);
|
|
162
172
|
},
|
|
163
|
-
|
|
173
|
+
tone: "neutral",
|
|
174
|
+
children: y("common.actions.retry")
|
|
164
175
|
}),
|
|
165
176
|
children: null
|
|
166
177
|
});
|
|
167
178
|
},
|
|
168
|
-
children: /* @__PURE__ */
|
|
169
|
-
fallback: /* @__PURE__ */
|
|
179
|
+
children: /* @__PURE__ */ v(s, {
|
|
180
|
+
fallback: /* @__PURE__ */ v(N, { label: y("common.loading") }),
|
|
170
181
|
children: W
|
|
171
182
|
})
|
|
172
183
|
})
|
|
@@ -174,6 +185,6 @@ var { useLazyLoadQuery: E } = y, D = "store-and-network", O = (e, t) => e(t), k
|
|
|
174
185
|
});
|
|
175
186
|
};
|
|
176
187
|
//#endregion
|
|
177
|
-
export {
|
|
188
|
+
export { P as EntityIdPickerDialog, P as default };
|
|
178
189
|
|
|
179
190
|
//# sourceMappingURL=EntityIdPickerDialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityIdPickerDialog.js","names":[],"sources":["../../../../../src/components/backoffice/pickers/EntityIdPickerDialog.tsx"],"sourcesContent":["import {\n Suspense,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type JSX,\n type RefObject,\n} from 'react';\nimport type { TFunction } from 'i18next';\nimport { useTranslation } from 'react-i18next';\nimport * as ReactRelay from 'react-relay';\n\nimport { Button } from '@plumile/ui/atomic/atoms/button/Button.js';\nimport { Modal } from '@plumile/ui/atomic/atoms/modal/Modal.js';\nimport { Spinner } from '@plumile/ui/backoffice/atoms/spinner/Spinner.js';\nimport { BackofficeEmptyState } from '@plumile/ui/backoffice/molecules/backoffice_empty_state/BackofficeEmptyState.js';\nimport {\n BackofficePickerList,\n BackofficePickerShell,\n type BackofficePickerItem,\n} from '@plumile/ui/backoffice/molecules/backoffice_picker/BackofficePicker.js';\nimport { InlineBanner } from '@plumile/ui/components/feedback/InlineBanner.js';\nimport { InfiniteScrollTrigger } from '@plumile/ui/components/infinite/InfiniteScrollTrigger.js';\nimport type {\n BackofficePickerScope,\n BackofficeRuntimeEntityPickerConfig,\n I18nLabel,\n} from '@plumile/backoffice-core/types.js';\n\nimport { BackofficeErrorBoundary } from '../errors/BackofficeErrorBoundary.js';\nimport { useBackofficeReactTranslation } from '../../../i18n/useBackofficeReactTranslation.js';\nimport { useBackofficePickerEntityLoader } from '../../../provider/useBackofficeEntityLoader.js';\nimport { useInfiniteConnection } from '../../../hooks/useInfiniteConnection.js';\nimport { useBackofficeRuntimePaginationFragment } from '../../../relay/typedRelayHooks.js';\n\nimport * as styles from './entityIdPickerDialog.css.js';\n\nconst { useLazyLoadQuery } = ReactRelay;\n\nexport type EntityIdPickerDialogProps = {\n isOpen: boolean;\n entity: string;\n title: string;\n scope?: BackofficePickerScope<Record<string, string>>;\n onClose: () => void;\n onSelectId: (id: string) => void;\n};\n\nconst PICKER_FETCH_POLICY = 'store-and-network' as const;\n\nconst resolveLabel = (label: I18nLabel, tApp: TFunction): string => {\n return label(tApp);\n};\n\ntype PickerBodyProps = {\n config: BackofficeRuntimeEntityPickerConfig;\n entity: string;\n search: string;\n scope?: BackofficePickerScope<Record<string, string>>;\n fetchKey: number;\n resetKey: string;\n scrollRootRef: RefObject<Element | null>;\n labels: {\n loadMore: string;\n loading: string;\n end: string;\n retry: string;\n };\n onSelectId: (id: string) => void;\n};\n\ntype RuntimePickerRow = {\n title: string;\n subtitle?: string | null | undefined;\n};\n\nconst PickerBody = ({\n config,\n entity,\n search,\n scope,\n fetchKey,\n resetKey,\n scrollRootRef,\n labels,\n onSelectId,\n}: PickerBodyProps): JSX.Element => {\n const variables = useMemo(() => {\n const trimmed = search.trim();\n return config.buildQueryVariables({ search: trimmed, scope });\n }, [config, scope, search]);\n\n const queryData = useLazyLoadQuery(config.query, variables, {\n fetchPolicy: PICKER_FETCH_POLICY,\n fetchKey,\n });\n\n const {\n data: fragmentData,\n loadNext,\n hasNext,\n isLoadingNext,\n } = useBackofficeRuntimePaginationFragment(config.fragment, queryData);\n\n const connection = config.getConnection(fragmentData);\n\n const items = useMemo<readonly BackofficePickerItem[]>(() => {\n return connection.edges.map((edge) => {\n const row = config.toRow(edge.node) as RuntimePickerRow;\n const id = config.getRowId(row);\n return {\n id,\n title: row.title,\n subtitle: row.subtitle,\n };\n });\n }, [config, connection.edges]);\n\n const runLoadMore = useCallback(\n (onComplete: (error: Error | null) => void) => {\n loadNext(20, { onComplete });\n },\n [loadNext],\n );\n const pagination = useInfiniteConnection({\n nodes: items,\n hasNext,\n isLoadingNext,\n runLoadMore,\n surface: `backoffice.entity-picker.${entity}`,\n resetKey,\n });\n\n return (\n <>\n <BackofficePickerList\n items={pagination.nodes}\n onSelectItem={(item) => {\n onSelectId(item.id);\n }}\n />\n <InfiniteScrollTrigger\n disabled={pagination.incrementalError != null}\n hasNext={pagination.hasNext}\n isLoading={pagination.isLoadingNext}\n onLoadMore={pagination.loadMoreSafe}\n scrollRootRef={scrollRootRef}\n labels={{\n loadMore: labels.loadMore,\n loading: labels.loading,\n end: labels.end,\n }}\n />\n {pagination.incrementalError != null && (\n <InlineBanner\n tone=\"danger\"\n title={pagination.incrementalError.message}\n actions={\n <Button\n type=\"button\"\n variant=\"secondary\"\n onClick={pagination.retryLoadMore}\n >\n {labels.retry}\n </Button>\n }\n >\n {null}\n </InlineBanner>\n )}\n </>\n );\n};\n\nconst buildFooter = (onClose: () => void, closeLabel: string): JSX.Element => {\n return (\n <>\n <Button type=\"button\" variant=\"secondary\" onClick={onClose}>\n {closeLabel}\n </Button>\n </>\n );\n};\n\nconst PickerUnavailable = ({ message }: { message: string }) => {\n return (\n <InlineBanner tone=\"warning\" title={message}>\n {null}\n </InlineBanner>\n );\n};\n\nconst PickerLoading = ({ label }: { label: string }): JSX.Element => {\n return (\n <div className={styles.loadingState} role=\"status\" aria-live=\"polite\">\n <Spinner size={18} ariaLabel={label} />\n <span className={styles.loadingLabel}>{label}</span>\n </div>\n );\n};\n\nexport const EntityIdPickerDialog = ({\n isOpen,\n entity,\n title,\n scope,\n onClose,\n onSelectId,\n}: EntityIdPickerDialogProps): JSX.Element | null => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const [search, setSearch] = useState('');\n const [executedSearch, setExecutedSearch] = useState('');\n const [fetchKey, setFetchKey] = useState(0);\n const scrollRootRef = useRef<HTMLDivElement | null>(null);\n const entityState = useBackofficePickerEntityLoader(entity, {\n enabled: isOpen,\n });\n\n let pickerConfig: BackofficeRuntimeEntityPickerConfig | undefined;\n if (entityState.status === 'loaded') {\n pickerConfig = entityState.module.config.picker as\n BackofficeRuntimeEntityPickerConfig | undefined;\n }\n\n useEffect(() => {\n if (isOpen) {\n setSearch('');\n setExecutedSearch('');\n setFetchKey((value) => {\n return value + 1;\n });\n }\n }, [isOpen]);\n\n useEffect(() => {\n const timeout = setTimeout(() => {\n setExecutedSearch(search);\n }, 250);\n return () => {\n clearTimeout(timeout);\n };\n }, [search]);\n\n const footer = useMemo(() => {\n return buildFooter(onClose, t('common.actions.close'));\n }, [onClose, t]);\n\n const handleSearchChange = useCallback((next: string) => {\n setSearch(next);\n }, []);\n\n const handleSelectId = useCallback(\n (id: string) => {\n onSelectId(id);\n onClose();\n },\n [onClose, onSelectId],\n );\n\n if (!isOpen) {\n return null;\n }\n\n let resolvedSearchPlaceholder: string | undefined;\n if (pickerConfig?.searchPlaceholder != null) {\n resolvedSearchPlaceholder = resolveLabel(\n pickerConfig.searchPlaceholder,\n tApp,\n );\n }\n\n const trimmedSearch = executedSearch.trim();\n const isSearchRequired = pickerConfig?.searchRequired === true;\n\n let pickerNode: JSX.Element;\n if (entityState.status === 'loading') {\n pickerNode = <PickerLoading label={t('common.loading')} />;\n } else if (pickerConfig != null) {\n if (isSearchRequired && trimmedSearch === '') {\n pickerNode = <BackofficeEmptyState title={t('picker.searchRequired')} />;\n } else {\n pickerNode = (\n <PickerBody\n config={pickerConfig}\n entity={entity}\n search={executedSearch}\n scope={scope}\n fetchKey={fetchKey}\n resetKey={`${entity}:${trimmedSearch}:${JSON.stringify(scope ?? {})}:${fetchKey}`}\n scrollRootRef={scrollRootRef}\n labels={{\n loadMore: t('list.loadMore.action'),\n loading: t('list.loadMore.loading'),\n end: t('list.loadMore.end'),\n retry: t('common.actions.retry'),\n }}\n onSelectId={handleSelectId}\n />\n );\n }\n } else {\n pickerNode = (\n <PickerUnavailable message={t('picker.unavailable', { entity })} />\n );\n }\n\n return (\n <Modal\n isOpen={isOpen}\n onClose={onClose}\n title={title}\n footer={footer}\n initialFocus=\"first-form-control\"\n scrollRootRef={scrollRootRef}\n >\n <BackofficePickerShell\n searchValue={search}\n onSearchChange={handleSearchChange}\n searchPlaceholder={resolvedSearchPlaceholder}\n searchAriaLabel={resolvedSearchPlaceholder}\n searchName=\"backoffice-entity-picker-search\"\n searchEnabled={pickerConfig?.searchEnabled ?? true}\n >\n <BackofficeErrorBoundary\n fallback={(args: { error: unknown; reset: () => void }) => {\n const { reset } = args;\n return (\n <InlineBanner\n tone=\"danger\"\n title={t('picker.errors.loadFailed')}\n actions={\n <Button\n type=\"button\"\n variant=\"secondary\"\n onClick={() => {\n reset();\n setFetchKey((value) => {\n return value + 1;\n });\n }}\n >\n {t('common.actions.retry')}\n </Button>\n }\n >\n {null}\n </InlineBanner>\n );\n }}\n >\n <Suspense fallback={<PickerLoading label={t('common.loading')} />}>\n {pickerNode}\n </Suspense>\n </BackofficeErrorBoundary>\n </BackofficePickerShell>\n </Modal>\n );\n};\n\nexport type { BackofficePickerScope } from '@plumile/backoffice-core/types.js';\n\nexport default EntityIdPickerDialog;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EntityIdPickerDialog.js","names":[],"sources":["../../../../../src/components/backoffice/pickers/EntityIdPickerDialog.tsx"],"sourcesContent":["import {\n Suspense,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type JSX,\n type RefObject,\n} from 'react';\nimport type { TFunction } from 'i18next';\nimport { useTranslation } from 'react-i18next';\nimport * as ReactRelay from 'react-relay';\n\nimport { Button } from '@plumile/ui/button';\nimport {\n Modal,\n InlineBanner,\n InfiniteScrollTrigger,\n type InfiniteScrollTriggerState,\n} from '@plumile/ui';\nimport { Spinner } from '@plumile/ui/backoffice/atoms/spinner/Spinner.js';\nimport { BackofficeEmptyState } from '@plumile/ui/backoffice/molecules/backoffice_empty_state/BackofficeEmptyState.js';\nimport {\n BackofficePickerList,\n BackofficePickerShell,\n type BackofficePickerItem,\n} from '@plumile/ui/backoffice/molecules/backoffice_picker/BackofficePicker.js';\n\nimport type {\n BackofficePickerScope,\n BackofficeRuntimeEntityPickerConfig,\n I18nLabel,\n} from '@plumile/backoffice-core/types.js';\n\nimport { BackofficeErrorBoundary } from '../errors/BackofficeErrorBoundary.js';\nimport { useBackofficeReactTranslation } from '../../../i18n/useBackofficeReactTranslation.js';\nimport { useBackofficePickerEntityLoader } from '../../../provider/useBackofficeEntityLoader.js';\nimport { useInfiniteConnection } from '../../../hooks/useInfiniteConnection.js';\nimport { useBackofficeRuntimePaginationFragment } from '../../../relay/typedRelayHooks.js';\n\nimport * as styles from './entityIdPickerDialog.css.js';\n\nconst { useLazyLoadQuery } = ReactRelay;\n\nexport type EntityIdPickerDialogProps = {\n open: boolean;\n entity: string;\n title: string;\n scope?: BackofficePickerScope<Record<string, string>>;\n onOpenChange: (open: boolean) => void;\n onSelectId: (id: string) => void;\n};\n\nconst PICKER_FETCH_POLICY = 'store-and-network' as const;\n\nconst resolveLabel = (label: I18nLabel, tApp: TFunction): string => {\n return label(tApp);\n};\n\ntype PickerBodyProps = {\n config: BackofficeRuntimeEntityPickerConfig;\n entity: string;\n search: string;\n scope?: BackofficePickerScope<Record<string, string>>;\n fetchKey: number;\n resetKey: string;\n scrollRootRef: RefObject<Element | null>;\n labels: {\n loadMore: string;\n loading: string;\n end: string;\n retry: string;\n };\n onSelectId: (id: string) => void;\n};\n\ntype RuntimePickerRow = {\n title: string;\n subtitle?: string | null | undefined;\n};\n\nconst PickerBody = ({\n config,\n entity,\n search,\n scope,\n fetchKey,\n resetKey,\n scrollRootRef,\n labels,\n onSelectId,\n}: PickerBodyProps): JSX.Element => {\n const incrementalErrorId = useId();\n const variables = useMemo(() => {\n const trimmed = search.trim();\n return config.buildQueryVariables({ search: trimmed, scope });\n }, [config, scope, search]);\n\n const queryData = useLazyLoadQuery(config.query, variables, {\n fetchPolicy: PICKER_FETCH_POLICY,\n fetchKey,\n });\n\n const {\n data: fragmentData,\n loadNext,\n hasNext,\n isLoadingNext,\n } = useBackofficeRuntimePaginationFragment(config.fragment, queryData);\n\n const connection = config.getConnection(fragmentData);\n\n const items = useMemo<readonly BackofficePickerItem[]>(() => {\n return connection.edges.map((edge) => {\n const row = config.toRow(edge.node) as RuntimePickerRow;\n const id = config.getRowId(row);\n return {\n id,\n title: row.title,\n subtitle: row.subtitle,\n };\n });\n }, [config, connection.edges]);\n\n const runLoadMore = useCallback(\n (onComplete: (error: Error | null) => void) => {\n loadNext(20, { onComplete });\n },\n [loadNext],\n );\n const pagination = useInfiniteConnection({\n nodes: items,\n hasNext,\n isLoadingNext,\n runLoadMore,\n surface: `backoffice.entity-picker.${entity}`,\n resetKey,\n });\n let infiniteState: InfiniteScrollTriggerState = 'complete';\n if (pagination.incrementalError != null) infiniteState = 'paused';\n else if (pagination.isLoadingNext) infiniteState = 'loading';\n else if (pagination.hasNext) infiniteState = 'idle';\n let loadMoreDescribedBy: string | undefined;\n if (pagination.incrementalError != null) {\n loadMoreDescribedBy = incrementalErrorId;\n }\n\n return (\n <>\n <BackofficePickerList\n items={pagination.nodes}\n onSelectItem={(item) => {\n onSelectId(item.id);\n }}\n />\n <InfiniteScrollTrigger\n state={infiniteState}\n onLoadMore={pagination.loadMoreSafe}\n scrollRootRef={scrollRootRef}\n slotProps={{\n loadMoreButton: {\n 'aria-describedby': loadMoreDescribedBy,\n },\n }}\n labels={{\n loadMore: labels.loadMore,\n loading: labels.loading,\n end: labels.end,\n }}\n />\n {pagination.incrementalError != null && (\n <InlineBanner\n aria-live=\"assertive\"\n id={incrementalErrorId}\n role=\"alert\"\n tone=\"danger\"\n title={pagination.incrementalError.message}\n actions={\n <Button\n type=\"button\"\n variant=\"soft\"\n onClick={pagination.retryLoadMore}\n tone=\"neutral\"\n >\n {labels.retry}\n </Button>\n }\n >\n {null}\n </InlineBanner>\n )}\n </>\n );\n};\n\nconst buildFooter = (\n onOpenChange: (open: boolean) => void,\n closeLabel: string,\n): JSX.Element => {\n return (\n <>\n <Button\n type=\"button\"\n variant=\"soft\"\n onClick={() => {\n onOpenChange(false);\n }}\n tone=\"neutral\"\n >\n {closeLabel}\n </Button>\n </>\n );\n};\n\nconst PickerUnavailable = ({ message }: { message: string }) => {\n return (\n <InlineBanner\n aria-live=\"polite\"\n role=\"status\"\n tone=\"warning\"\n title={message}\n >\n {null}\n </InlineBanner>\n );\n};\n\nconst PickerLoading = ({ label }: { label: string }): JSX.Element => {\n return (\n <div className={styles.loadingState} role=\"status\" aria-live=\"polite\">\n <Spinner size={18} ariaLabel={label} />\n <span className={styles.loadingLabel}>{label}</span>\n </div>\n );\n};\n\nexport const EntityIdPickerDialog = ({\n open,\n entity,\n title,\n scope,\n onOpenChange,\n onSelectId,\n}: EntityIdPickerDialogProps): JSX.Element | null => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const [search, setSearch] = useState('');\n const [executedSearch, setExecutedSearch] = useState('');\n const [fetchKey, setFetchKey] = useState(0);\n const scrollRootRef = useRef<HTMLDivElement | null>(null);\n const entityState = useBackofficePickerEntityLoader(entity, {\n enabled: open,\n });\n\n let pickerConfig: BackofficeRuntimeEntityPickerConfig | undefined;\n if (entityState.status === 'loaded') {\n pickerConfig = entityState.module.config.picker as\n BackofficeRuntimeEntityPickerConfig | undefined;\n }\n\n useEffect(() => {\n if (open) {\n setSearch('');\n setExecutedSearch('');\n setFetchKey((value) => {\n return value + 1;\n });\n }\n }, [open]);\n\n useEffect(() => {\n const timeout = setTimeout(() => {\n setExecutedSearch(search);\n }, 250);\n return () => {\n clearTimeout(timeout);\n };\n }, [search]);\n\n const footer = useMemo(() => {\n return buildFooter(onOpenChange, t('common.actions.close'));\n }, [onOpenChange, t]);\n\n const handleSearchChange = useCallback((next: string) => {\n setSearch(next);\n }, []);\n\n const handleSelectId = useCallback(\n (id: string) => {\n onSelectId(id);\n onOpenChange(false);\n },\n [onOpenChange, onSelectId],\n );\n\n if (!open) {\n return null;\n }\n\n let resolvedSearchPlaceholder: string | undefined;\n if (pickerConfig?.searchPlaceholder != null) {\n resolvedSearchPlaceholder = resolveLabel(\n pickerConfig.searchPlaceholder,\n tApp,\n );\n }\n\n const trimmedSearch = executedSearch.trim();\n const isSearchRequired = pickerConfig?.searchRequired === true;\n\n let pickerNode: JSX.Element;\n if (entityState.status === 'loading') {\n pickerNode = <PickerLoading label={t('common.loading')} />;\n } else if (pickerConfig != null) {\n if (isSearchRequired && trimmedSearch === '') {\n pickerNode = <BackofficeEmptyState title={t('picker.searchRequired')} />;\n } else {\n pickerNode = (\n <PickerBody\n config={pickerConfig}\n entity={entity}\n search={executedSearch}\n scope={scope}\n fetchKey={fetchKey}\n resetKey={`${entity}:${trimmedSearch}:${JSON.stringify(scope ?? {})}:${fetchKey}`}\n scrollRootRef={scrollRootRef}\n labels={{\n loadMore: t('list.loadMore.action'),\n loading: t('list.loadMore.loading'),\n end: t('list.loadMore.end'),\n retry: t('common.actions.retry'),\n }}\n onSelectId={handleSelectId}\n />\n );\n }\n } else {\n pickerNode = (\n <PickerUnavailable message={t('picker.unavailable', { entity })} />\n );\n }\n\n return (\n <Modal\n open={open}\n onOpenChange={onOpenChange}\n title={title}\n footer={footer}\n initialFocus=\"first-form-control\"\n scrollRootRef={scrollRootRef}\n >\n <BackofficePickerShell\n searchValue={search}\n onSearchChange={handleSearchChange}\n searchPlaceholder={resolvedSearchPlaceholder}\n searchAriaLabel={resolvedSearchPlaceholder}\n searchName=\"backoffice-entity-picker-search\"\n searchEnabled={pickerConfig?.searchEnabled ?? true}\n >\n <BackofficeErrorBoundary\n fallback={(args: { error: unknown; reset: () => void }) => {\n const { reset } = args;\n return (\n <InlineBanner\n aria-live=\"assertive\"\n role=\"alert\"\n tone=\"danger\"\n title={t('picker.errors.loadFailed')}\n actions={\n <Button\n type=\"button\"\n variant=\"soft\"\n onClick={() => {\n reset();\n setFetchKey((value) => {\n return value + 1;\n });\n }}\n tone=\"neutral\"\n >\n {t('common.actions.retry')}\n </Button>\n }\n >\n {null}\n </InlineBanner>\n );\n }}\n >\n <Suspense fallback={<PickerLoading label={t('common.loading')} />}>\n {pickerNode}\n </Suspense>\n </BackofficeErrorBoundary>\n </BackofficePickerShell>\n </Modal>\n );\n};\n\nexport type { BackofficePickerScope } from '@plumile/backoffice-core/types.js';\n\nexport default EntityIdPickerDialog;\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
//#region src/components/backoffice/pickers/entityIdPickerDialog.css.ts
|
|
2
|
-
var e = "
|
|
2
|
+
var e = "txvbqbe7 txvbqb6nj txvbqb2lu txvbqbjgn txvbqbipz", t = "txvbqb5lr txvbqb2nn txvbqb8o1 txvbqb6rp txvbqbjgx txvbqbiqt txvbqbe7", n = "txvbqb6nj txvbqbe7";
|
|
3
3
|
//#endregion
|
|
4
4
|
export { n as loadingLabel, t as loadingState, e as searchRequiredMessage };
|
|
5
5
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entityIdPickerDialog.css.js","names":[],"sources":["../../../../../src/components/backoffice/pickers/entityIdPickerDialog.css.ts"],"sourcesContent":["import { sprinkles } from '@plumile/ui/theme
|
|
1
|
+
{"version":3,"file":"entityIdPickerDialog.css.js","names":[],"sources":["../../../../../src/components/backoffice/pickers/entityIdPickerDialog.css.ts"],"sourcesContent":["import { sprinkles } from '@plumile/ui/theme';\n\nexport const searchRequiredMessage = sprinkles({\n color: 'textSecondary',\n fontSize: 'sm',\n textAlign: 'center',\n paddingY: 3,\n paddingX: 0,\n});\n\nexport const loadingState = sprinkles({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 2,\n paddingY: 4,\n paddingX: 3,\n color: 'textSecondary',\n});\n\nexport const loadingLabel = sprinkles({\n fontSize: 'sm',\n color: 'textSecondary',\n});\n"],"mappings":""}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* empty css */
|
|
2
2
|
//#region src/components/backoffice/refs/backofficeRelatedCountLink.css.ts
|
|
3
|
-
var e = "
|
|
3
|
+
var e = "qbwcuex qbwcuev txvbqb5ml txvbqb2nn txvbqb8o1 txvbqb6rf txvbqbe3v txvbqbiqj txvbqbjg3 txvbqbe6 txvbqbaa txvbqbiz txvbqbmx txvbqblh txvbqbn8 txvbqb1d5 txvbqb1rk txvbqb3f txvbqb7m txvbqb76 txvbqb7y qbwcuew txvbqbod5 txvbqbmc9 txvbqbncx txvbqbnm1 qbwcue5 qbwcue4 txvbqboz8 txvbqbptg qbwcue3", t = "txvbqbe1x txvbqb2lu txvbqb1cw", n = "txvbqb5ml txvbqb2nn txvbqb8o1 txvbqbky9 txvbqb7sx txvbqbe8", r = "kk18lv0 txvbqb1cr txvbqbe7 txvbqb6nj txvbqb1rk txvbqb7n txvbqb76 txvbqb7y";
|
|
4
4
|
//#endregion
|
|
5
5
|
export { t as count, n as countLoading, r as icon, e as link };
|
|
6
6
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backofficeRelatedCountLink.css.js","names":[],"sources":["../../../../../src/components/backoffice/refs/backofficeRelatedCountLink.css.ts"],"sourcesContent":["import { style } from '@vanilla-extract/css';\nimport { sprinkles
|
|
1
|
+
{"version":3,"file":"backofficeRelatedCountLink.css.js","names":[],"sources":["../../../../../src/components/backoffice/refs/backofficeRelatedCountLink.css.ts"],"sourcesContent":["import { style } from '@vanilla-extract/css';\nimport { sprinkles, pillLink, vars } from '@plumile/ui/theme';\n\nexport const link = pillLink;\n\nexport const count = sprinkles({\n minWidth: 2,\n textAlign: 'center',\n fontVariantNumeric: 'tabular-nums',\n});\n\nexport const countLoading = sprinkles({\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 4,\n height: 4,\n color: 'textMuted',\n});\n\nexport const icon = style([\n sprinkles({\n flexShrink: 0,\n color: 'textSecondary',\n fontSize: 'sm',\n lineHeight: 'none',\n transitionProperty: 'colors',\n transitionDuration: 120,\n transitionTimingFunction: 'ease',\n }),\n {\n selectors: {\n [`${link}:hover &`]: {\n color: vars.colors.brandPrimaryRed,\n },\n },\n },\n]);\n"],"mappings":""}
|
|
@@ -1,21 +1,24 @@
|
|
|
1
1
|
import { useBackofficeReactTranslation as e } from "../../../i18n/useBackofficeReactTranslation.js";
|
|
2
2
|
import { banner as t, root as n } from "./backofficeContentError.css.js";
|
|
3
|
-
import { InlineBanner as r } from "@plumile/ui
|
|
3
|
+
import { InlineBanner as r } from "@plumile/ui";
|
|
4
4
|
import { jsx as i } from "react/jsx-runtime";
|
|
5
|
-
import { Button as a } from "@plumile/ui/
|
|
5
|
+
import { Button as a } from "@plumile/ui/button";
|
|
6
6
|
//#region src/components/backoffice/routing/BackofficeContentError.tsx
|
|
7
7
|
var o = ({ onRetry: o }) => {
|
|
8
8
|
let { t: s } = e();
|
|
9
9
|
return /* @__PURE__ */ i("div", {
|
|
10
10
|
className: n,
|
|
11
11
|
children: /* @__PURE__ */ i(r, {
|
|
12
|
+
"aria-live": "assertive",
|
|
13
|
+
role: "alert",
|
|
12
14
|
tone: "danger",
|
|
13
15
|
className: t,
|
|
14
16
|
actions: /* @__PURE__ */ i(a, {
|
|
15
17
|
type: "button",
|
|
16
|
-
variant: "
|
|
18
|
+
variant: "soft",
|
|
17
19
|
size: "small",
|
|
18
20
|
onClick: o,
|
|
21
|
+
tone: "neutral",
|
|
19
22
|
children: s("common.actions.retry")
|
|
20
23
|
}),
|
|
21
24
|
children: s("common.errors.unexpected")
|