@burdenoff/microfe-devportal 2026.1108.1 → 2026.1108.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/utils/renderWithProviders.d.ts +0 -2
- package/dist/_virtual/_rolldown/runtime.js +4 -5
- package/dist/dev/main.d.ts +0 -1
- package/dist/devportal/AdminDevportalRoot.d.ts +0 -2
- package/dist/devportal/AdminDevportalRoot.js +9 -6
- package/dist/devportal/AdminDevportalRoot.js.map +1 -1
- package/dist/devportal/AdminDevportalRoutes.d.ts +1 -2
- package/dist/devportal/AdminDevportalRoutes.js +1 -2
- package/dist/devportal/AdminDevportalRoutes.js.map +1 -1
- package/dist/devportal/DevportalRoot.d.ts +0 -2
- package/dist/devportal/DevportalRoot.js +13 -10
- package/dist/devportal/DevportalRoot.js.map +1 -1
- package/dist/devportal/DevportalRoutes.d.ts +1 -2
- package/dist/devportal/DevportalRoutes.js +19 -17
- package/dist/devportal/DevportalRoutes.js.map +1 -1
- package/dist/devportal/components/AppCard.d.ts +0 -2
- package/dist/devportal/components/AppCard.js +21 -22
- package/dist/devportal/components/AppCard.js.map +1 -1
- package/dist/devportal/components/ConfirmDialog.d.ts +0 -2
- package/dist/devportal/components/ConfirmDialog.js +9 -10
- package/dist/devportal/components/ConfirmDialog.js.map +1 -1
- package/dist/devportal/components/DataTable.d.ts +1 -3
- package/dist/devportal/components/DataTable.js +20 -21
- package/dist/devportal/components/DataTable.js.map +1 -1
- package/dist/devportal/components/EmptyState.d.ts +0 -2
- package/dist/devportal/components/EmptyState.js +1 -2
- package/dist/devportal/components/EmptyState.js.map +1 -1
- package/dist/devportal/components/FeatureFlaggedRoute.d.ts +0 -2
- package/dist/devportal/components/FeatureFlaggedRoute.js +1 -2
- package/dist/devportal/components/FeatureFlaggedRoute.js.map +1 -1
- package/dist/devportal/components/FormField.d.ts +0 -2
- package/dist/devportal/components/FormField.js +23 -24
- package/dist/devportal/components/FormField.js.map +1 -1
- package/dist/devportal/components/GrantDelegationModal.d.ts +0 -2
- package/dist/devportal/components/GrantDelegationModal.js +1 -2
- package/dist/devportal/components/GrantDelegationModal.js.map +1 -1
- package/dist/devportal/components/ImageUploadField.d.ts +0 -2
- package/dist/devportal/components/ImageUploadField.js +1 -2
- package/dist/devportal/components/ImageUploadField.js.map +1 -1
- package/dist/devportal/components/LoadingState.d.ts +0 -2
- package/dist/devportal/components/LoadingState.js +6 -7
- package/dist/devportal/components/LoadingState.js.map +1 -1
- package/dist/devportal/components/ManifestViewer.d.ts +0 -2
- package/dist/devportal/components/ManifestViewer.js +1 -2
- package/dist/devportal/components/ManifestViewer.js.map +1 -1
- package/dist/devportal/components/MarkdownEditor.d.ts +0 -2
- package/dist/devportal/components/MarkdownEditor.js +1 -2
- package/dist/devportal/components/MarkdownEditor.js.map +1 -1
- package/dist/devportal/components/MultiSelectCombobox.d.ts +1 -2
- package/dist/devportal/components/MultiSelectCombobox.js +1 -2
- package/dist/devportal/components/MultiSelectCombobox.js.map +1 -1
- package/dist/devportal/components/NodeSmokePanel.d.ts +0 -2
- package/dist/devportal/components/NodeSmokePanel.js +17 -18
- package/dist/devportal/components/NodeSmokePanel.js.map +1 -1
- package/dist/devportal/components/OnboardingChecklist.d.ts +0 -2
- package/dist/devportal/components/OnboardingChecklist.js +15 -16
- package/dist/devportal/components/OnboardingChecklist.js.map +1 -1
- package/dist/devportal/components/PackageValidationPanel.d.ts +0 -2
- package/dist/devportal/components/PackageValidationPanel.js +12 -13
- package/dist/devportal/components/PackageValidationPanel.js.map +1 -1
- package/dist/devportal/components/PageLayout.d.ts +0 -2
- package/dist/devportal/components/PageLayout.js +16 -17
- package/dist/devportal/components/PageLayout.js.map +1 -1
- package/dist/devportal/components/PermissionGuard.d.ts +0 -2
- package/dist/devportal/components/PermissionGuard.js +5 -6
- package/dist/devportal/components/PermissionGuard.js.map +1 -1
- package/dist/devportal/components/RegisterPickupLocationModal.d.ts +0 -2
- package/dist/devportal/components/RegisterPickupLocationModal.js +13 -14
- package/dist/devportal/components/RegisterPickupLocationModal.js.map +1 -1
- package/dist/devportal/components/ReportOrderIssueModal.d.ts +0 -2
- package/dist/devportal/components/ReportOrderIssueModal.js +1 -2
- package/dist/devportal/components/ReportOrderIssueModal.js.map +1 -1
- package/dist/devportal/components/SecretDisplay.d.ts +0 -2
- package/dist/devportal/components/SecretDisplay.js +8 -9
- package/dist/devportal/components/SecretDisplay.js.map +1 -1
- package/dist/devportal/components/SectionNav.d.ts +0 -2
- package/dist/devportal/components/SectionNav.js +11 -12
- package/dist/devportal/components/SectionNav.js.map +1 -1
- package/dist/devportal/components/SelectionCheckbox.d.ts +1 -2
- package/dist/devportal/components/SelectionCheckbox.js +1 -2
- package/dist/devportal/components/SelectionCheckbox.js.map +1 -1
- package/dist/devportal/components/StatCard.d.ts +0 -2
- package/dist/devportal/components/StatCard.js +1 -2
- package/dist/devportal/components/StatCard.js.map +1 -1
- package/dist/devportal/components/StatusBadge.d.ts +0 -2
- package/dist/devportal/components/StatusBadge.js +18 -19
- package/dist/devportal/components/StatusBadge.js.map +1 -1
- package/dist/devportal/components/TelemetryErrorBoundary.d.ts +0 -2
- package/dist/devportal/components/TelemetryErrorBoundary.js +1 -2
- package/dist/devportal/components/TelemetryErrorBoundary.js.map +1 -1
- package/dist/devportal/components/index.d.ts +0 -1
- package/dist/devportal/components/index.js +22 -21
- package/dist/devportal/constants/appCategories.d.ts +0 -1
- package/dist/devportal/constants/appCategories.js +1 -2
- package/dist/devportal/constants/appCategories.js.map +1 -1
- package/dist/devportal/constants/developerLinks.d.ts +0 -1
- package/dist/devportal/constants/developerLinks.js +23 -23
- package/dist/devportal/constants/developerLinks.js.map +1 -1
- package/dist/devportal/constants/permissions.d.ts +0 -1
- package/dist/devportal/constants/permissions.js +1 -2
- package/dist/devportal/constants/permissions.js.map +1 -1
- package/dist/devportal/events/index.d.ts +0 -1
- package/dist/devportal/events/index.js +1 -2
- package/dist/devportal/events/index.js.map +1 -1
- package/dist/devportal/hooks/DevPortalProvider.d.ts +1 -3
- package/dist/devportal/hooks/DevPortalProvider.js +2 -3
- package/dist/devportal/hooks/DevPortalProvider.js.map +1 -1
- package/dist/devportal/hooks/index.d.ts +0 -1
- package/dist/devportal/hooks/index.js +6 -5
- package/dist/devportal/hooks/useCarrierPickupLocations.d.ts +0 -1
- package/dist/devportal/hooks/useCarrierPickupLocations.js +1 -2
- package/dist/devportal/hooks/useCarrierPickupLocations.js.map +1 -1
- package/dist/devportal/hooks/useGraphQL.d.ts +0 -2
- package/dist/devportal/hooks/useGraphQL.js +42 -53
- package/dist/devportal/hooks/useGraphQL.js.map +1 -1
- package/dist/devportal/hooks/useIsSellerSection.d.ts +0 -1
- package/dist/devportal/hooks/useIsSellerSection.js +1 -2
- package/dist/devportal/hooks/useIsSellerSection.js.map +1 -1
- package/dist/devportal/hooks/useOrganizationPickupAddresses.d.ts +0 -1
- package/dist/devportal/hooks/useOrganizationPickupAddresses.js +3 -8
- package/dist/devportal/hooks/useOrganizationPickupAddresses.js.map +1 -1
- package/dist/devportal/hooks/usePackageUpload.d.ts +0 -1
- package/dist/devportal/hooks/usePackageUpload.js +4 -4
- package/dist/devportal/hooks/usePackageUpload.js.map +1 -1
- package/dist/devportal/hooks/usePermission.d.ts +0 -2
- package/dist/devportal/hooks/usePermission.js +2 -3
- package/dist/devportal/hooks/usePermission.js.map +1 -1
- package/dist/devportal/hooks/useProducts.d.ts +0 -1
- package/dist/devportal/hooks/useProducts.js +1 -2
- package/dist/devportal/hooks/useProducts.js.map +1 -1
- package/dist/devportal/hooks/useSellerOrganization.d.ts +0 -1
- package/dist/devportal/hooks/useSellerOrganization.js +1 -2
- package/dist/devportal/hooks/useSellerOrganization.js.map +1 -1
- package/dist/devportal/index.d.ts +0 -1
- package/dist/devportal/index.js +13 -12
- package/dist/devportal/pages/AdminOrganizationVerificationPage.d.ts +0 -2
- package/dist/devportal/pages/AdminOrganizationVerificationPage.js +13 -13
- package/dist/devportal/pages/AdminOrganizationVerificationPage.js.map +1 -1
- package/dist/devportal/pages/AdminReviewPage.d.ts +0 -2
- package/dist/devportal/pages/AdminReviewPage.js +134 -135
- package/dist/devportal/pages/AdminReviewPage.js.map +1 -1
- package/dist/devportal/pages/AnalyticsDashboardPage.d.ts +0 -2
- package/dist/devportal/pages/AnalyticsDashboardPage.js +66 -67
- package/dist/devportal/pages/AnalyticsDashboardPage.js.map +1 -1
- package/dist/devportal/pages/ApiKeysPage.d.ts +0 -2
- package/dist/devportal/pages/ApiKeysPage.js +127 -128
- package/dist/devportal/pages/ApiKeysPage.js.map +1 -1
- package/dist/devportal/pages/AppLogsPage.d.ts +0 -2
- package/dist/devportal/pages/AppLogsPage.js +18 -19
- package/dist/devportal/pages/AppLogsPage.js.map +1 -1
- package/dist/devportal/pages/ApplicationDetailPage.d.ts +0 -2
- package/dist/devportal/pages/ApplicationDetailPage.js +779 -778
- package/dist/devportal/pages/ApplicationDetailPage.js.map +1 -1
- package/dist/devportal/pages/ApplicationVersionsPage.d.ts +0 -2
- package/dist/devportal/pages/ApplicationVersionsPage.js +482 -483
- package/dist/devportal/pages/ApplicationVersionsPage.js.map +1 -1
- package/dist/devportal/pages/ApplicationsPage.d.ts +0 -2
- package/dist/devportal/pages/ApplicationsPage.js +35 -36
- package/dist/devportal/pages/ApplicationsPage.js.map +1 -1
- package/dist/devportal/pages/CreateApiKeyPage.d.ts +0 -2
- package/dist/devportal/pages/CreateApiKeyPage.js +39 -39
- package/dist/devportal/pages/CreateApiKeyPage.js.map +1 -1
- package/dist/devportal/pages/CreateApplicationPage.d.ts +0 -2
- package/dist/devportal/pages/CreateApplicationPage.js +136 -137
- package/dist/devportal/pages/CreateApplicationPage.js.map +1 -1
- package/dist/devportal/pages/CreateOAuthClientPage.d.ts +0 -2
- package/dist/devportal/pages/CreateOAuthClientPage.js +25 -24
- package/dist/devportal/pages/CreateOAuthClientPage.js.map +1 -1
- package/dist/devportal/pages/CreateOrganizationPage.d.ts +0 -2
- package/dist/devportal/pages/CreateOrganizationPage.js +32 -39
- package/dist/devportal/pages/CreateOrganizationPage.js.map +1 -1
- package/dist/devportal/pages/CreatePhysicalItemPage.d.ts +0 -2
- package/dist/devportal/pages/CreatePhysicalItemPage.js +102 -103
- package/dist/devportal/pages/CreatePhysicalItemPage.js.map +1 -1
- package/dist/devportal/pages/CreateWebhookPage.d.ts +0 -2
- package/dist/devportal/pages/CreateWebhookPage.js +31 -32
- package/dist/devportal/pages/CreateWebhookPage.js.map +1 -1
- package/dist/devportal/pages/DashboardPage.d.ts +0 -2
- package/dist/devportal/pages/DashboardPage.js +21 -22
- package/dist/devportal/pages/DashboardPage.js.map +1 -1
- package/dist/devportal/pages/DelegationsPage.d.ts +0 -2
- package/dist/devportal/pages/DelegationsPage.js +83 -84
- package/dist/devportal/pages/DelegationsPage.js.map +1 -1
- package/dist/devportal/pages/DocumentationPage.d.ts +0 -2
- package/dist/devportal/pages/DocumentationPage.js +1 -2
- package/dist/devportal/pages/DocumentationPage.js.map +1 -1
- package/dist/devportal/pages/EditApplicationPage.d.ts +0 -2
- package/dist/devportal/pages/EditApplicationPage.js +69 -70
- package/dist/devportal/pages/EditApplicationPage.js.map +1 -1
- package/dist/devportal/pages/EditPhysicalItemPage.d.ts +0 -2
- package/dist/devportal/pages/EditPhysicalItemPage.js +334 -335
- package/dist/devportal/pages/EditPhysicalItemPage.js.map +1 -1
- package/dist/devportal/pages/InvitationDecisionPage.d.ts +0 -2
- package/dist/devportal/pages/InvitationDecisionPage.js +16 -17
- package/dist/devportal/pages/InvitationDecisionPage.js.map +1 -1
- package/dist/devportal/pages/ListingPreviewPage.d.ts +0 -2
- package/dist/devportal/pages/ListingPreviewPage.js +14 -15
- package/dist/devportal/pages/ListingPreviewPage.js.map +1 -1
- package/dist/devportal/pages/NodeLifecyclePage.d.ts +0 -2
- package/dist/devportal/pages/NodeLifecyclePage.js +216 -221
- package/dist/devportal/pages/NodeLifecyclePage.js.map +1 -1
- package/dist/devportal/pages/OAuthCallbackPage.d.ts +0 -2
- package/dist/devportal/pages/OAuthCallbackPage.js +4 -5
- package/dist/devportal/pages/OAuthCallbackPage.js.map +1 -1
- package/dist/devportal/pages/OAuthClientDetailPage.d.ts +0 -2
- package/dist/devportal/pages/OAuthClientDetailPage.js +17 -16
- package/dist/devportal/pages/OAuthClientDetailPage.js.map +1 -1
- package/dist/devportal/pages/OAuthClientsPage.d.ts +0 -2
- package/dist/devportal/pages/OAuthClientsPage.js +18 -19
- package/dist/devportal/pages/OAuthClientsPage.js.map +1 -1
- package/dist/devportal/pages/OrganizationDetailPage.d.ts +0 -2
- package/dist/devportal/pages/OrganizationDetailPage.js +444 -450
- package/dist/devportal/pages/OrganizationDetailPage.js.map +1 -1
- package/dist/devportal/pages/OrganizationMembersPage.d.ts +0 -2
- package/dist/devportal/pages/OrganizationMembersPage.js +240 -241
- package/dist/devportal/pages/OrganizationMembersPage.js.map +1 -1
- package/dist/devportal/pages/OrganizationsPage.d.ts +0 -2
- package/dist/devportal/pages/OrganizationsPage.js +34 -35
- package/dist/devportal/pages/OrganizationsPage.js.map +1 -1
- package/dist/devportal/pages/PublishPage.d.ts +0 -2
- package/dist/devportal/pages/PublishPage.js +90 -91
- package/dist/devportal/pages/PublishPage.js.map +1 -1
- package/dist/devportal/pages/PublisherPayoutsPage.d.ts +0 -2
- package/dist/devportal/pages/PublisherPayoutsPage.js +251 -258
- package/dist/devportal/pages/PublisherPayoutsPage.js.map +1 -1
- package/dist/devportal/pages/PublisherProfilePage.d.ts +0 -2
- package/dist/devportal/pages/PublisherProfilePage.js +26 -27
- package/dist/devportal/pages/PublisherProfilePage.js.map +1 -1
- package/dist/devportal/pages/ResourcesPage.d.ts +0 -2
- package/dist/devportal/pages/ResourcesPage.js +17 -18
- package/dist/devportal/pages/ResourcesPage.js.map +1 -1
- package/dist/devportal/pages/RevenueDashboardPage.d.ts +0 -2
- package/dist/devportal/pages/RevenueDashboardPage.js +308 -308
- package/dist/devportal/pages/RevenueDashboardPage.js.map +1 -1
- package/dist/devportal/pages/RevenueRedirectPage.d.ts +0 -2
- package/dist/devportal/pages/SellerDashboardPage.d.ts +0 -2
- package/dist/devportal/pages/SellerDashboardPage.js +14 -15
- package/dist/devportal/pages/SellerDashboardPage.js.map +1 -1
- package/dist/devportal/pages/SellerItemsPage.d.ts +0 -2
- package/dist/devportal/pages/SellerItemsPage.js +8 -9
- package/dist/devportal/pages/SellerItemsPage.js.map +1 -1
- package/dist/devportal/pages/SellerOrdersPage.d.ts +0 -2
- package/dist/devportal/pages/SellerOrdersPage.js +10 -14
- package/dist/devportal/pages/SellerOrdersPage.js.map +1 -1
- package/dist/devportal/pages/SettingsPage.d.ts +0 -2
- package/dist/devportal/pages/SettingsPage.js +20 -21
- package/dist/devportal/pages/SettingsPage.js.map +1 -1
- package/dist/devportal/pages/SetupPage.d.ts +0 -2
- package/dist/devportal/pages/SetupPage.js +276 -277
- package/dist/devportal/pages/SetupPage.js.map +1 -1
- package/dist/devportal/pages/StoreSubmissionPage.d.ts +0 -2
- package/dist/devportal/pages/StoreSubmissionPage.js +4 -5
- package/dist/devportal/pages/StoreSubmissionPage.js.map +1 -1
- package/dist/devportal/pages/WebhookDetailPage.d.ts +0 -2
- package/dist/devportal/pages/WebhookDetailPage.js +62 -67
- package/dist/devportal/pages/WebhookDetailPage.js.map +1 -1
- package/dist/devportal/pages/WebhooksPage.d.ts +0 -2
- package/dist/devportal/pages/WebhooksPage.js +130 -131
- package/dist/devportal/pages/WebhooksPage.js.map +1 -1
- package/dist/devportal/providers/DevportalProvider.d.ts +0 -2
- package/dist/devportal/providers/DevportalProvider.js +2 -3
- package/dist/devportal/providers/DevportalProvider.js.map +1 -1
- package/dist/devportal/store/devportalStore.d.ts +0 -2
- package/dist/devportal/store/devportalStore.js +1 -2
- package/dist/devportal/store/devportalStore.js.map +1 -1
- package/dist/devportal/types/index.d.ts +0 -2
- package/dist/devportal/types/index.js +1 -2
- package/dist/devportal/types/index.js.map +1 -1
- package/dist/devportal/utils/cn.d.ts +0 -2
- package/dist/devportal/utils/cn.js +2 -3
- package/dist/devportal/utils/cn.js.map +1 -1
- package/dist/devportal/utils/constants.d.ts +0 -1
- package/dist/devportal/utils/constants.js +1 -2
- package/dist/devportal/utils/constants.js.map +1 -1
- package/dist/devportal/utils/currency.d.ts +0 -1
- package/dist/devportal/utils/currency.js +1 -2
- package/dist/devportal/utils/currency.js.map +1 -1
- package/dist/devportal/utils/developerOnboarding.d.ts +0 -1
- package/dist/devportal/utils/developerOnboarding.js +4 -5
- package/dist/devportal/utils/developerOnboarding.js.map +1 -1
- package/dist/devportal/utils/graphqlEndpoint.d.ts +0 -1
- package/dist/devportal/utils/graphqlEndpoint.js +1 -2
- package/dist/devportal/utils/graphqlEndpoint.js.map +1 -1
- package/dist/devportal/utils/i18n.d.ts +0 -1
- package/dist/devportal/utils/i18n.js +1 -2
- package/dist/devportal/utils/i18n.js.map +1 -1
- package/dist/devportal/utils/nodeLifecycle.d.ts +0 -2
- package/dist/devportal/utils/nodeLifecycle.js +6 -7
- package/dist/devportal/utils/nodeLifecycle.js.map +1 -1
- package/dist/devportal/utils/publisherPayouts.d.ts +0 -1
- package/dist/devportal/utils/publisherPayouts.js +14 -15
- package/dist/devportal/utils/publisherPayouts.js.map +1 -1
- package/dist/devportal/utils/recaptcha.d.ts +0 -1
- package/dist/devportal/utils/recaptcha.js +1 -2
- package/dist/devportal/utils/recaptcha.js.map +1 -1
- package/dist/devportal/utils/submitForReview.d.ts +0 -1
- package/dist/devportal/utils/submitForReview.js +15 -14
- package/dist/devportal/utils/submitForReview.js.map +1 -1
- package/dist/devportal/utils/uploadErrors.d.ts +0 -1
- package/dist/devportal/utils/uploadErrors.js +30 -30
- package/dist/devportal/utils/uploadErrors.js.map +1 -1
- package/dist/generated/global-operations.d.ts +2379 -2423
- package/dist/generated/global-operations.js +6 -5
- package/dist/generated/global-operations.js.map +1 -1
- package/dist/generated/global-types.d.ts +2 -22
- package/dist/generated/global-types.js +1 -2
- package/dist/generated/global-types.js.map +1 -1
- package/dist/generated/wspace-operations.d.ts +31 -8
- package/dist/generated/wspace-operations.js +2 -3
- package/dist/generated/wspace-operations.js.map +1 -1
- package/dist/generated/wspace-types.d.ts +4 -24
- package/dist/index.d.ts +0 -1
- package/dist/index.js +1 -1
- package/dist/node_modules/@apollo/client/errors/CombinedGraphQLErrors.js +1 -2
- package/dist/node_modules/@apollo/client/errors/CombinedGraphQLErrors.js.map +1 -1
- package/dist/node_modules/@apollo/client/errors/ServerError.js +1 -2
- package/dist/node_modules/@apollo/client/errors/ServerError.js.map +1 -1
- package/dist/node_modules/@apollo/client/errors/utils.js +1 -2
- package/dist/node_modules/@apollo/client/errors/utils.js.map +1 -1
- package/dist/node_modules/@apollo/client/link/core/ApolloLink.js +7 -8
- package/dist/node_modules/@apollo/client/link/core/ApolloLink.js.map +1 -1
- package/dist/node_modules/@apollo/client/link/subscriptions/index.js +16 -17
- package/dist/node_modules/@apollo/client/link/subscriptions/index.js.map +1 -1
- package/dist/node_modules/@apollo/client/link/utils/createOperation.js +5 -6
- package/dist/node_modules/@apollo/client/link/utils/createOperation.js.map +1 -1
- package/dist/node_modules/@apollo/client/utilities/caching/sizes.js +0 -1
- package/dist/node_modules/@apollo/client/utilities/caching/sizes.js.map +1 -1
- package/dist/node_modules/@apollo/client/utilities/graphql/print.js +4 -5
- package/dist/node_modules/@apollo/client/utilities/graphql/print.js.map +1 -1
- package/dist/node_modules/@apollo/client/utilities/internal/caches.js +1 -2
- package/dist/node_modules/@apollo/client/utilities/internal/caches.js.map +1 -1
- package/dist/node_modules/@apollo/client/utilities/internal/checkDocument.js +1 -2
- package/dist/node_modules/@apollo/client/utilities/internal/checkDocument.js.map +1 -1
- package/dist/node_modules/@apollo/client/utilities/internal/getMainDefinition.js +2 -3
- package/dist/node_modules/@apollo/client/utilities/internal/getMainDefinition.js.map +1 -1
- package/dist/node_modules/@apollo/client/utilities/internal/getMemoryInternals.js +1 -2
- package/dist/node_modules/@apollo/client/utilities/internal/getMemoryInternals.js.map +1 -1
- package/dist/node_modules/@apollo/client/utilities/internal/getOperationDefinition.js +1 -2
- package/dist/node_modules/@apollo/client/utilities/internal/getOperationDefinition.js.map +1 -1
- package/dist/node_modules/@apollo/client/utilities/internal/getOperationName.js +1 -2
- package/dist/node_modules/@apollo/client/utilities/internal/getOperationName.js.map +1 -1
- package/dist/node_modules/@apollo/client/utilities/internal/globals/global.js +1 -2
- package/dist/node_modules/@apollo/client/utilities/internal/globals/global.js.map +1 -1
- package/dist/node_modules/@apollo/client/utilities/internal/globals/maybe.js +1 -2
- package/dist/node_modules/@apollo/client/utilities/internal/globals/maybe.js.map +1 -1
- package/dist/node_modules/@apollo/client/utilities/internal/isNonNullObject.js +1 -2
- package/dist/node_modules/@apollo/client/utilities/internal/isNonNullObject.js.map +1 -1
- package/dist/node_modules/@apollo/client/utilities/internal/makeUniqueId.js +1 -2
- package/dist/node_modules/@apollo/client/utilities/internal/makeUniqueId.js.map +1 -1
- package/dist/node_modules/@apollo/client/utilities/internal/memoize.js +1 -2
- package/dist/node_modules/@apollo/client/utilities/internal/memoize.js.map +1 -1
- package/dist/node_modules/@apollo/client/utilities/internal/stringifyForDisplay.js +1 -2
- package/dist/node_modules/@apollo/client/utilities/internal/stringifyForDisplay.js.map +1 -1
- package/dist/node_modules/@apollo/client/utilities/invariant/index.js +2 -3
- package/dist/node_modules/@apollo/client/utilities/invariant/index.js.map +1 -1
- package/dist/node_modules/@apollo/client/version.js +2 -3
- package/dist/node_modules/@apollo/client/version.js.map +1 -1
- package/dist/node_modules/@wry/caches/lib/weak.js +1 -2
- package/dist/node_modules/@wry/caches/lib/weak.js.map +1 -1
- package/dist/node_modules/@wry/trie/lib/index.js +2 -3
- package/dist/node_modules/@wry/trie/lib/index.js.map +1 -1
- package/dist/node_modules/clsx/dist/clsx.js +8 -7
- package/dist/node_modules/clsx/dist/clsx.js.map +1 -1
- package/dist/node_modules/d3-array/dist/d3-array.js +204 -0
- package/dist/node_modules/d3-array/dist/d3-array.js.map +1 -0
- package/dist/node_modules/d3-color/dist/d3-color.js +388 -0
- package/dist/node_modules/d3-color/dist/d3-color.js.map +1 -0
- package/dist/node_modules/d3-format/dist/d3-format.js +186 -0
- package/dist/node_modules/d3-format/dist/d3-format.js.map +1 -0
- package/dist/node_modules/d3-interpolate/dist/d3-interpolate.js +185 -0
- package/dist/node_modules/d3-interpolate/dist/d3-interpolate.js.map +1 -0
- package/dist/node_modules/d3-path/{src/path.js → dist/d3-path.js} +39 -14
- package/dist/node_modules/d3-path/dist/d3-path.js.map +1 -0
- package/dist/node_modules/d3-scale/dist/d3-scale.js +622 -0
- package/dist/node_modules/d3-scale/dist/d3-scale.js.map +1 -0
- package/dist/node_modules/d3-shape/dist/d3-shape.js +901 -0
- package/dist/node_modules/d3-shape/dist/d3-shape.js.map +1 -0
- package/dist/node_modules/d3-time/dist/d3-time.js +241 -0
- package/dist/node_modules/d3-time/dist/d3-time.js.map +1 -0
- package/dist/node_modules/d3-time-format/{src/locale.js → dist/d3-time-format.js} +229 -174
- package/dist/node_modules/d3-time-format/dist/d3-time-format.js.map +1 -0
- package/dist/node_modules/date-fns/_lib/addLeadingZeros.js +1 -2
- package/dist/node_modules/date-fns/_lib/addLeadingZeros.js.map +1 -1
- package/dist/node_modules/date-fns/_lib/defaultOptions.js +1 -2
- package/dist/node_modules/date-fns/_lib/defaultOptions.js.map +1 -1
- package/dist/node_modules/date-fns/_lib/format/formatters.js +29 -22
- package/dist/node_modules/date-fns/_lib/format/formatters.js.map +1 -1
- package/dist/node_modules/date-fns/_lib/format/lightFormatters.js +3 -4
- package/dist/node_modules/date-fns/_lib/format/lightFormatters.js.map +1 -1
- package/dist/node_modules/date-fns/_lib/format/longFormatters.js +2 -5
- package/dist/node_modules/date-fns/_lib/format/longFormatters.js.map +1 -1
- package/dist/node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js +2 -3
- package/dist/node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js.map +1 -1
- package/dist/node_modules/date-fns/_lib/protectedTokens.js +1 -2
- package/dist/node_modules/date-fns/_lib/protectedTokens.js.map +1 -1
- package/dist/node_modules/date-fns/constants.js +5 -5
- package/dist/node_modules/date-fns/constants.js.map +1 -1
- package/dist/node_modules/date-fns/constructFrom.js +2 -3
- package/dist/node_modules/date-fns/constructFrom.js.map +1 -1
- package/dist/node_modules/date-fns/differenceInCalendarDays.js +2 -3
- package/dist/node_modules/date-fns/differenceInCalendarDays.js.map +1 -1
- package/dist/node_modules/date-fns/format.js +15 -16
- package/dist/node_modules/date-fns/format.js.map +1 -1
- package/dist/node_modules/date-fns/getDayOfYear.js +7 -8
- package/dist/node_modules/date-fns/getDayOfYear.js.map +1 -1
- package/dist/node_modules/date-fns/getISOWeek.js +8 -9
- package/dist/node_modules/date-fns/getISOWeek.js.map +1 -1
- package/dist/node_modules/date-fns/getISOWeekYear.js +8 -9
- package/dist/node_modules/date-fns/getISOWeekYear.js.map +1 -1
- package/dist/node_modules/date-fns/getWeek.js +8 -9
- package/dist/node_modules/date-fns/getWeek.js.map +1 -1
- package/dist/node_modules/date-fns/getWeekYear.js +9 -10
- package/dist/node_modules/date-fns/getWeekYear.js.map +1 -1
- package/dist/node_modules/date-fns/isDate.js +2 -3
- package/dist/node_modules/date-fns/isDate.js.map +1 -1
- package/dist/node_modules/date-fns/isValid.js +6 -7
- package/dist/node_modules/date-fns/isValid.js.map +1 -1
- package/dist/node_modules/date-fns/locale/_lib/buildFormatLongFn.js +1 -2
- package/dist/node_modules/date-fns/locale/_lib/buildFormatLongFn.js.map +1 -1
- package/dist/node_modules/date-fns/locale/_lib/buildLocalizeFn.js +1 -2
- package/dist/node_modules/date-fns/locale/_lib/buildLocalizeFn.js.map +1 -1
- package/dist/node_modules/date-fns/locale/_lib/buildMatchFn.js +1 -2
- package/dist/node_modules/date-fns/locale/_lib/buildMatchFn.js.map +1 -1
- package/dist/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js +1 -2
- package/dist/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js.map +1 -1
- package/dist/node_modules/date-fns/locale/en-US/_lib/formatDistance.js +1 -2
- package/dist/node_modules/date-fns/locale/en-US/_lib/formatDistance.js.map +1 -1
- package/dist/node_modules/date-fns/locale/en-US/_lib/formatLong.js +0 -1
- package/dist/node_modules/date-fns/locale/en-US/_lib/formatLong.js.map +1 -1
- package/dist/node_modules/date-fns/locale/en-US/_lib/formatRelative.js +1 -2
- package/dist/node_modules/date-fns/locale/en-US/_lib/formatRelative.js.map +1 -1
- package/dist/node_modules/date-fns/locale/en-US/_lib/localize.js +0 -1
- package/dist/node_modules/date-fns/locale/en-US/_lib/localize.js.map +1 -1
- package/dist/node_modules/date-fns/locale/en-US/_lib/match.js +0 -1
- package/dist/node_modules/date-fns/locale/en-US/_lib/match.js.map +1 -1
- package/dist/node_modules/date-fns/locale/en-US.js +2 -3
- package/dist/node_modules/date-fns/locale/en-US.js.map +1 -1
- package/dist/node_modules/date-fns/startOfDay.js +2 -3
- package/dist/node_modules/date-fns/startOfDay.js.map +1 -1
- package/dist/node_modules/date-fns/startOfISOWeek.js +2 -3
- package/dist/node_modules/date-fns/startOfISOWeek.js.map +1 -1
- package/dist/node_modules/date-fns/startOfISOWeekYear.js +5 -6
- package/dist/node_modules/date-fns/startOfISOWeekYear.js.map +1 -1
- package/dist/node_modules/date-fns/startOfWeek.js +2 -3
- package/dist/node_modules/date-fns/startOfWeek.js.map +1 -1
- package/dist/node_modules/date-fns/startOfWeekYear.js +6 -7
- package/dist/node_modules/date-fns/startOfWeekYear.js.map +1 -1
- package/dist/node_modules/date-fns/startOfYear.js +3 -4
- package/dist/node_modules/date-fns/startOfYear.js.map +1 -1
- package/dist/node_modules/date-fns/toDate.js +2 -3
- package/dist/node_modules/date-fns/toDate.js.map +1 -1
- package/dist/node_modules/decimal.js-light/decimal.js +33 -30
- package/dist/node_modules/decimal.js-light/decimal.js.map +1 -1
- package/dist/node_modules/eventemitter3/index.js +2 -3
- package/dist/node_modules/eventemitter3/index.js.map +1 -1
- package/dist/node_modules/fast-equals/dist/es/index.js +109 -79
- package/dist/node_modules/fast-equals/dist/es/index.js.map +1 -1
- package/dist/node_modules/graphql-ws/dist/client.js +76 -69
- package/dist/node_modules/graphql-ws/dist/client.js.map +1 -1
- package/dist/node_modules/graphql-ws/dist/common-CGW11Fyb.js +2 -3
- package/dist/node_modules/graphql-ws/dist/common-CGW11Fyb.js.map +1 -1
- package/dist/node_modules/lodash/_DataView.js +4 -5
- package/dist/node_modules/lodash/_DataView.js.map +1 -1
- package/dist/node_modules/lodash/_Hash.js +1 -2
- package/dist/node_modules/lodash/_Hash.js.map +1 -1
- package/dist/node_modules/lodash/_ListCache.js +1 -2
- package/dist/node_modules/lodash/_ListCache.js.map +1 -1
- package/dist/node_modules/lodash/_Map.js +4 -5
- package/dist/node_modules/lodash/_Map.js.map +1 -1
- package/dist/node_modules/lodash/_MapCache.js +1 -2
- package/dist/node_modules/lodash/_MapCache.js.map +1 -1
- package/dist/node_modules/lodash/_Promise.js +4 -5
- package/dist/node_modules/lodash/_Promise.js.map +1 -1
- package/dist/node_modules/lodash/_Set.js +4 -5
- package/dist/node_modules/lodash/_Set.js.map +1 -1
- package/dist/node_modules/lodash/_SetCache.js +1 -2
- package/dist/node_modules/lodash/_SetCache.js.map +1 -1
- package/dist/node_modules/lodash/_Stack.js +3 -3
- package/dist/node_modules/lodash/_Stack.js.map +1 -1
- package/dist/node_modules/lodash/_Symbol.js +1 -2
- package/dist/node_modules/lodash/_Symbol.js.map +1 -1
- package/dist/node_modules/lodash/_Uint8Array.js +1 -2
- package/dist/node_modules/lodash/_Uint8Array.js.map +1 -1
- package/dist/node_modules/lodash/_WeakMap.js +4 -5
- package/dist/node_modules/lodash/_WeakMap.js.map +1 -1
- package/dist/node_modules/lodash/_apply.js +1 -2
- package/dist/node_modules/lodash/_apply.js.map +1 -1
- package/dist/node_modules/lodash/_arrayEvery.js +1 -2
- package/dist/node_modules/lodash/_arrayEvery.js.map +1 -1
- package/dist/node_modules/lodash/_arrayFilter.js +1 -2
- package/dist/node_modules/lodash/_arrayFilter.js.map +1 -1
- package/dist/node_modules/lodash/_arrayIncludes.js +1 -2
- package/dist/node_modules/lodash/_arrayIncludes.js.map +1 -1
- package/dist/node_modules/lodash/_arrayIncludesWith.js +1 -2
- package/dist/node_modules/lodash/_arrayIncludesWith.js.map +1 -1
- package/dist/node_modules/lodash/_arrayLikeKeys.js +5 -6
- package/dist/node_modules/lodash/_arrayLikeKeys.js.map +1 -1
- package/dist/node_modules/lodash/_arrayMap.js +1 -2
- package/dist/node_modules/lodash/_arrayMap.js.map +1 -1
- package/dist/node_modules/lodash/_arrayPush.js +1 -2
- package/dist/node_modules/lodash/_arrayPush.js.map +1 -1
- package/dist/node_modules/lodash/_arraySome.js +1 -2
- package/dist/node_modules/lodash/_arraySome.js.map +1 -1
- package/dist/node_modules/lodash/_asciiToArray.js +1 -2
- package/dist/node_modules/lodash/_asciiToArray.js.map +1 -1
- package/dist/node_modules/lodash/_assocIndexOf.js +1 -2
- package/dist/node_modules/lodash/_assocIndexOf.js.map +1 -1
- package/dist/node_modules/lodash/_baseAssignValue.js +1 -2
- package/dist/node_modules/lodash/_baseAssignValue.js.map +1 -1
- package/dist/node_modules/lodash/_baseEach.js +1 -2
- package/dist/node_modules/lodash/_baseEach.js.map +1 -1
- package/dist/node_modules/lodash/_baseEvery.js +1 -2
- package/dist/node_modules/lodash/_baseEvery.js.map +1 -1
- package/dist/node_modules/lodash/_baseExtremum.js +1 -2
- package/dist/node_modules/lodash/_baseExtremum.js.map +1 -1
- package/dist/node_modules/lodash/_baseFindIndex.js +1 -2
- package/dist/node_modules/lodash/_baseFindIndex.js.map +1 -1
- package/dist/node_modules/lodash/_baseFlatten.js +1 -2
- package/dist/node_modules/lodash/_baseFlatten.js.map +1 -1
- package/dist/node_modules/lodash/_baseFor.js +1 -2
- package/dist/node_modules/lodash/_baseFor.js.map +1 -1
- package/dist/node_modules/lodash/_baseForOwn.js +4 -5
- package/dist/node_modules/lodash/_baseForOwn.js.map +1 -1
- package/dist/node_modules/lodash/_baseGet.js +1 -2
- package/dist/node_modules/lodash/_baseGet.js.map +1 -1
- package/dist/node_modules/lodash/_baseGetAllKeys.js +4 -5
- package/dist/node_modules/lodash/_baseGetAllKeys.js.map +1 -1
- package/dist/node_modules/lodash/_baseGetTag.js +1 -2
- package/dist/node_modules/lodash/_baseGetTag.js.map +1 -1
- package/dist/node_modules/lodash/_baseGt.js +1 -2
- package/dist/node_modules/lodash/_baseGt.js.map +1 -1
- package/dist/node_modules/lodash/_baseHasIn.js +1 -2
- package/dist/node_modules/lodash/_baseHasIn.js.map +1 -1
- package/dist/node_modules/lodash/_baseIndexOf.js +1 -2
- package/dist/node_modules/lodash/_baseIndexOf.js.map +1 -1
- package/dist/node_modules/lodash/_baseIsArguments.js +1 -2
- package/dist/node_modules/lodash/_baseIsArguments.js.map +1 -1
- package/dist/node_modules/lodash/_baseIsEqual.js +4 -5
- package/dist/node_modules/lodash/_baseIsEqual.js.map +1 -1
- package/dist/node_modules/lodash/_baseIsEqualDeep.js +10 -11
- package/dist/node_modules/lodash/_baseIsEqualDeep.js.map +1 -1
- package/dist/node_modules/lodash/_baseIsMatch.js +1 -2
- package/dist/node_modules/lodash/_baseIsMatch.js.map +1 -1
- package/dist/node_modules/lodash/_baseIsNaN.js +1 -2
- package/dist/node_modules/lodash/_baseIsNaN.js.map +1 -1
- package/dist/node_modules/lodash/_baseIsNative.js +5 -6
- package/dist/node_modules/lodash/_baseIsNative.js.map +1 -1
- package/dist/node_modules/lodash/_baseIsTypedArray.js +4 -5
- package/dist/node_modules/lodash/_baseIsTypedArray.js.map +1 -1
- package/dist/node_modules/lodash/_baseIteratee.js +6 -7
- package/dist/node_modules/lodash/_baseIteratee.js.map +1 -1
- package/dist/node_modules/lodash/_baseKeys.js +1 -2
- package/dist/node_modules/lodash/_baseKeys.js.map +1 -1
- package/dist/node_modules/lodash/_baseLt.js +1 -2
- package/dist/node_modules/lodash/_baseLt.js.map +1 -1
- package/dist/node_modules/lodash/_baseMap.js +4 -5
- package/dist/node_modules/lodash/_baseMap.js.map +1 -1
- package/dist/node_modules/lodash/_baseMatches.js +1 -2
- package/dist/node_modules/lodash/_baseMatches.js.map +1 -1
- package/dist/node_modules/lodash/_baseMatchesProperty.js +7 -8
- package/dist/node_modules/lodash/_baseMatchesProperty.js.map +1 -1
- package/dist/node_modules/lodash/_baseOrderBy.js +11 -12
- package/dist/node_modules/lodash/_baseOrderBy.js.map +1 -1
- package/dist/node_modules/lodash/_baseProperty.js +1 -2
- package/dist/node_modules/lodash/_baseProperty.js.map +1 -1
- package/dist/node_modules/lodash/_basePropertyDeep.js +1 -2
- package/dist/node_modules/lodash/_basePropertyDeep.js.map +1 -1
- package/dist/node_modules/lodash/_baseRange.js +1 -2
- package/dist/node_modules/lodash/_baseRange.js.map +1 -1
- package/dist/node_modules/lodash/_baseRest.js +1 -2
- package/dist/node_modules/lodash/_baseRest.js.map +1 -1
- package/dist/node_modules/lodash/_baseSetToString.js +5 -6
- package/dist/node_modules/lodash/_baseSetToString.js.map +1 -1
- package/dist/node_modules/lodash/_baseSlice.js +1 -2
- package/dist/node_modules/lodash/_baseSlice.js.map +1 -1
- package/dist/node_modules/lodash/_baseSome.js +1 -2
- package/dist/node_modules/lodash/_baseSome.js.map +1 -1
- package/dist/node_modules/lodash/_baseSortBy.js +1 -2
- package/dist/node_modules/lodash/_baseSortBy.js.map +1 -1
- package/dist/node_modules/lodash/_baseTimes.js +1 -2
- package/dist/node_modules/lodash/_baseTimes.js.map +1 -1
- package/dist/node_modules/lodash/_baseToString.js +6 -7
- package/dist/node_modules/lodash/_baseToString.js.map +1 -1
- package/dist/node_modules/lodash/_baseTrim.js +1 -2
- package/dist/node_modules/lodash/_baseTrim.js.map +1 -1
- package/dist/node_modules/lodash/_baseUnary.js +1 -2
- package/dist/node_modules/lodash/_baseUnary.js.map +1 -1
- package/dist/node_modules/lodash/_baseUniq.js +7 -8
- package/dist/node_modules/lodash/_baseUniq.js.map +1 -1
- package/dist/node_modules/lodash/_cacheHas.js +1 -2
- package/dist/node_modules/lodash/_cacheHas.js.map +1 -1
- package/dist/node_modules/lodash/_castPath.js +1 -2
- package/dist/node_modules/lodash/_castPath.js.map +1 -1
- package/dist/node_modules/lodash/_castSlice.js +1 -2
- package/dist/node_modules/lodash/_castSlice.js.map +1 -1
- package/dist/node_modules/lodash/_compareAscending.js +1 -2
- package/dist/node_modules/lodash/_compareAscending.js.map +1 -1
- package/dist/node_modules/lodash/_compareMultiple.js +1 -2
- package/dist/node_modules/lodash/_compareMultiple.js.map +1 -1
- package/dist/node_modules/lodash/_coreJsData.js +1 -2
- package/dist/node_modules/lodash/_coreJsData.js.map +1 -1
- package/dist/node_modules/lodash/_createBaseEach.js +1 -2
- package/dist/node_modules/lodash/_createBaseEach.js.map +1 -1
- package/dist/node_modules/lodash/_createBaseFor.js +1 -2
- package/dist/node_modules/lodash/_createBaseFor.js.map +1 -1
- package/dist/node_modules/lodash/_createCaseFirst.js +6 -7
- package/dist/node_modules/lodash/_createCaseFirst.js.map +1 -1
- package/dist/node_modules/lodash/_createFind.js +5 -6
- package/dist/node_modules/lodash/_createFind.js.map +1 -1
- package/dist/node_modules/lodash/_createRange.js +4 -5
- package/dist/node_modules/lodash/_createRange.js.map +1 -1
- package/dist/node_modules/lodash/_createSet.js +6 -7
- package/dist/node_modules/lodash/_createSet.js.map +1 -1
- package/dist/node_modules/lodash/_defineProperty.js +1 -2
- package/dist/node_modules/lodash/_defineProperty.js.map +1 -1
- package/dist/node_modules/lodash/_equalArrays.js +1 -2
- package/dist/node_modules/lodash/_equalArrays.js.map +1 -1
- package/dist/node_modules/lodash/_equalByTag.js +5 -6
- package/dist/node_modules/lodash/_equalByTag.js.map +1 -1
- package/dist/node_modules/lodash/_equalObjects.js +1 -2
- package/dist/node_modules/lodash/_equalObjects.js.map +1 -1
- package/dist/node_modules/lodash/_freeGlobal.js +1 -2
- package/dist/node_modules/lodash/_freeGlobal.js.map +1 -1
- package/dist/node_modules/lodash/_getAllKeys.js +1 -2
- package/dist/node_modules/lodash/_getAllKeys.js.map +1 -1
- package/dist/node_modules/lodash/_getMapData.js +1 -2
- package/dist/node_modules/lodash/_getMapData.js.map +1 -1
- package/dist/node_modules/lodash/_getMatchData.js +4 -5
- package/dist/node_modules/lodash/_getMatchData.js.map +1 -1
- package/dist/node_modules/lodash/_getNative.js +1 -2
- package/dist/node_modules/lodash/_getNative.js.map +1 -1
- package/dist/node_modules/lodash/_getPrototype.js +1 -2
- package/dist/node_modules/lodash/_getPrototype.js.map +1 -1
- package/dist/node_modules/lodash/_getRawTag.js +1 -2
- package/dist/node_modules/lodash/_getRawTag.js.map +1 -1
- package/dist/node_modules/lodash/_getSymbols.js +1 -2
- package/dist/node_modules/lodash/_getSymbols.js.map +1 -1
- package/dist/node_modules/lodash/_getTag.js +9 -10
- package/dist/node_modules/lodash/_getTag.js.map +1 -1
- package/dist/node_modules/lodash/_getValue.js +1 -2
- package/dist/node_modules/lodash/_getValue.js.map +1 -1
- package/dist/node_modules/lodash/_hasPath.js +8 -9
- package/dist/node_modules/lodash/_hasPath.js.map +1 -1
- package/dist/node_modules/lodash/_hasUnicode.js +1 -2
- package/dist/node_modules/lodash/_hasUnicode.js.map +1 -1
- package/dist/node_modules/lodash/_hashClear.js +1 -2
- package/dist/node_modules/lodash/_hashClear.js.map +1 -1
- package/dist/node_modules/lodash/_hashDelete.js +1 -2
- package/dist/node_modules/lodash/_hashDelete.js.map +1 -1
- package/dist/node_modules/lodash/_hashGet.js +1 -2
- package/dist/node_modules/lodash/_hashGet.js.map +1 -1
- package/dist/node_modules/lodash/_hashHas.js +1 -2
- package/dist/node_modules/lodash/_hashHas.js.map +1 -1
- package/dist/node_modules/lodash/_hashSet.js +1 -2
- package/dist/node_modules/lodash/_hashSet.js.map +1 -1
- package/dist/node_modules/lodash/_isFlattenable.js +5 -6
- package/dist/node_modules/lodash/_isFlattenable.js.map +1 -1
- package/dist/node_modules/lodash/_isIndex.js +6 -7
- package/dist/node_modules/lodash/_isIndex.js.map +1 -1
- package/dist/node_modules/lodash/_isIterateeCall.js +5 -6
- package/dist/node_modules/lodash/_isIterateeCall.js.map +1 -1
- package/dist/node_modules/lodash/_isKey.js +1 -2
- package/dist/node_modules/lodash/_isKey.js.map +1 -1
- package/dist/node_modules/lodash/_isKeyable.js +1 -2
- package/dist/node_modules/lodash/_isKeyable.js.map +1 -1
- package/dist/node_modules/lodash/_isMasked.js +1 -2
- package/dist/node_modules/lodash/_isMasked.js.map +1 -1
- package/dist/node_modules/lodash/_isPrototype.js +1 -2
- package/dist/node_modules/lodash/_isPrototype.js.map +1 -1
- package/dist/node_modules/lodash/_isStrictComparable.js +1 -2
- package/dist/node_modules/lodash/_isStrictComparable.js.map +1 -1
- package/dist/node_modules/lodash/_listCacheClear.js +1 -2
- package/dist/node_modules/lodash/_listCacheClear.js.map +1 -1
- package/dist/node_modules/lodash/_listCacheDelete.js +1 -2
- package/dist/node_modules/lodash/_listCacheDelete.js.map +1 -1
- package/dist/node_modules/lodash/_listCacheGet.js +1 -2
- package/dist/node_modules/lodash/_listCacheGet.js.map +1 -1
- package/dist/node_modules/lodash/_listCacheHas.js +1 -2
- package/dist/node_modules/lodash/_listCacheHas.js.map +1 -1
- package/dist/node_modules/lodash/_listCacheSet.js +1 -2
- package/dist/node_modules/lodash/_listCacheSet.js.map +1 -1
- package/dist/node_modules/lodash/_mapCacheClear.js +1 -2
- package/dist/node_modules/lodash/_mapCacheClear.js.map +1 -1
- package/dist/node_modules/lodash/_mapCacheDelete.js +1 -2
- package/dist/node_modules/lodash/_mapCacheDelete.js.map +1 -1
- package/dist/node_modules/lodash/_mapCacheGet.js +1 -2
- package/dist/node_modules/lodash/_mapCacheGet.js.map +1 -1
- package/dist/node_modules/lodash/_mapCacheHas.js +1 -2
- package/dist/node_modules/lodash/_mapCacheHas.js.map +1 -1
- package/dist/node_modules/lodash/_mapCacheSet.js +1 -2
- package/dist/node_modules/lodash/_mapCacheSet.js.map +1 -1
- package/dist/node_modules/lodash/_mapToArray.js +1 -2
- package/dist/node_modules/lodash/_mapToArray.js.map +1 -1
- package/dist/node_modules/lodash/_matchesStrictComparable.js +2 -3
- package/dist/node_modules/lodash/_matchesStrictComparable.js.map +1 -1
- package/dist/node_modules/lodash/_memoizeCapped.js +1 -2
- package/dist/node_modules/lodash/_memoizeCapped.js.map +1 -1
- package/dist/node_modules/lodash/_nativeCreate.js +1 -2
- package/dist/node_modules/lodash/_nativeCreate.js.map +1 -1
- package/dist/node_modules/lodash/_nativeKeys.js +1 -2
- package/dist/node_modules/lodash/_nativeKeys.js.map +1 -1
- package/dist/node_modules/lodash/_nodeUtil.js +1 -2
- package/dist/node_modules/lodash/_nodeUtil.js.map +1 -1
- package/dist/node_modules/lodash/_objectToString.js +1 -2
- package/dist/node_modules/lodash/_objectToString.js.map +1 -1
- package/dist/node_modules/lodash/_overArg.js +1 -2
- package/dist/node_modules/lodash/_overArg.js.map +1 -1
- package/dist/node_modules/lodash/_overRest.js +1 -2
- package/dist/node_modules/lodash/_overRest.js.map +1 -1
- package/dist/node_modules/lodash/_root.js +1 -2
- package/dist/node_modules/lodash/_root.js.map +1 -1
- package/dist/node_modules/lodash/_setCacheAdd.js +4 -6
- package/dist/node_modules/lodash/_setCacheAdd.js.map +1 -1
- package/dist/node_modules/lodash/_setCacheHas.js +1 -2
- package/dist/node_modules/lodash/_setCacheHas.js.map +1 -1
- package/dist/node_modules/lodash/_setToArray.js +1 -2
- package/dist/node_modules/lodash/_setToArray.js.map +1 -1
- package/dist/node_modules/lodash/_setToString.js +1 -2
- package/dist/node_modules/lodash/_setToString.js.map +1 -1
- package/dist/node_modules/lodash/_shortOut.js +8 -9
- package/dist/node_modules/lodash/_shortOut.js.map +1 -1
- package/dist/node_modules/lodash/_stackClear.js +1 -2
- package/dist/node_modules/lodash/_stackClear.js.map +1 -1
- package/dist/node_modules/lodash/_stackDelete.js +1 -2
- package/dist/node_modules/lodash/_stackDelete.js.map +1 -1
- package/dist/node_modules/lodash/_stackGet.js +1 -2
- package/dist/node_modules/lodash/_stackGet.js.map +1 -1
- package/dist/node_modules/lodash/_stackHas.js +1 -2
- package/dist/node_modules/lodash/_stackHas.js.map +1 -1
- package/dist/node_modules/lodash/_stackSet.js +1 -2
- package/dist/node_modules/lodash/_stackSet.js.map +1 -1
- package/dist/node_modules/lodash/_strictIndexOf.js +1 -2
- package/dist/node_modules/lodash/_strictIndexOf.js.map +1 -1
- package/dist/node_modules/lodash/_stringToArray.js +4 -5
- package/dist/node_modules/lodash/_stringToArray.js.map +1 -1
- package/dist/node_modules/lodash/_stringToPath.js +1 -2
- package/dist/node_modules/lodash/_stringToPath.js.map +1 -1
- package/dist/node_modules/lodash/_toKey.js +2 -3
- package/dist/node_modules/lodash/_toKey.js.map +1 -1
- package/dist/node_modules/lodash/_toSource.js +1 -2
- package/dist/node_modules/lodash/_toSource.js.map +1 -1
- package/dist/node_modules/lodash/_trimmedEndIndex.js +1 -2
- package/dist/node_modules/lodash/_trimmedEndIndex.js.map +1 -1
- package/dist/node_modules/lodash/_unicodeToArray.js +1 -2
- package/dist/node_modules/lodash/_unicodeToArray.js.map +1 -1
- package/dist/node_modules/lodash/constant.js +1 -2
- package/dist/node_modules/lodash/constant.js.map +1 -1
- package/dist/node_modules/lodash/debounce.js +1 -2
- package/dist/node_modules/lodash/debounce.js.map +1 -1
- package/dist/node_modules/lodash/eq.js +1 -2
- package/dist/node_modules/lodash/eq.js.map +1 -1
- package/dist/node_modules/lodash/every.js +7 -8
- package/dist/node_modules/lodash/every.js.map +1 -1
- package/dist/node_modules/lodash/find.js +1 -2
- package/dist/node_modules/lodash/find.js.map +1 -1
- package/dist/node_modules/lodash/findIndex.js +4 -5
- package/dist/node_modules/lodash/findIndex.js.map +1 -1
- package/dist/node_modules/lodash/flatMap.js +1 -2
- package/dist/node_modules/lodash/flatMap.js.map +1 -1
- package/dist/node_modules/lodash/get.js +1 -2
- package/dist/node_modules/lodash/get.js.map +1 -1
- package/dist/node_modules/lodash/hasIn.js +1 -2
- package/dist/node_modules/lodash/hasIn.js.map +1 -1
- package/dist/node_modules/lodash/identity.js +1 -2
- package/dist/node_modules/lodash/identity.js.map +1 -1
- package/dist/node_modules/lodash/isArguments.js +4 -5
- package/dist/node_modules/lodash/isArguments.js.map +1 -1
- package/dist/node_modules/lodash/isArray.js +1 -2
- package/dist/node_modules/lodash/isArray.js.map +1 -1
- package/dist/node_modules/lodash/isArrayLike.js +1 -2
- package/dist/node_modules/lodash/isArrayLike.js.map +1 -1
- package/dist/node_modules/lodash/isBoolean.js +1 -2
- package/dist/node_modules/lodash/isBoolean.js.map +1 -1
- package/dist/node_modules/lodash/isBuffer.js +1 -2
- package/dist/node_modules/lodash/isBuffer.js.map +1 -1
- package/dist/node_modules/lodash/isEqual.js +1 -2
- package/dist/node_modules/lodash/isEqual.js.map +1 -1
- package/dist/node_modules/lodash/isFunction.js +1 -2
- package/dist/node_modules/lodash/isFunction.js.map +1 -1
- package/dist/node_modules/lodash/isLength.js +4 -6
- package/dist/node_modules/lodash/isLength.js.map +1 -1
- package/dist/node_modules/lodash/isNaN.js +1 -2
- package/dist/node_modules/lodash/isNaN.js.map +1 -1
- package/dist/node_modules/lodash/isNil.js +1 -2
- package/dist/node_modules/lodash/isNil.js.map +1 -1
- package/dist/node_modules/lodash/isNumber.js +1 -2
- package/dist/node_modules/lodash/isNumber.js.map +1 -1
- package/dist/node_modules/lodash/isObject.js +1 -2
- package/dist/node_modules/lodash/isObject.js.map +1 -1
- package/dist/node_modules/lodash/isObjectLike.js +1 -2
- package/dist/node_modules/lodash/isObjectLike.js.map +1 -1
- package/dist/node_modules/lodash/isPlainObject.js +4 -5
- package/dist/node_modules/lodash/isPlainObject.js.map +1 -1
- package/dist/node_modules/lodash/isString.js +4 -5
- package/dist/node_modules/lodash/isString.js.map +1 -1
- package/dist/node_modules/lodash/isSymbol.js +1 -2
- package/dist/node_modules/lodash/isSymbol.js.map +1 -1
- package/dist/node_modules/lodash/isTypedArray.js +1 -2
- package/dist/node_modules/lodash/isTypedArray.js.map +1 -1
- package/dist/node_modules/lodash/keys.js +1 -2
- package/dist/node_modules/lodash/keys.js.map +1 -1
- package/dist/node_modules/lodash/last.js +1 -2
- package/dist/node_modules/lodash/last.js.map +1 -1
- package/dist/node_modules/lodash/map.js +6 -7
- package/dist/node_modules/lodash/map.js.map +1 -1
- package/dist/node_modules/lodash/mapValues.js +4 -5
- package/dist/node_modules/lodash/mapValues.js.map +1 -1
- package/dist/node_modules/lodash/max.js +5 -6
- package/dist/node_modules/lodash/max.js.map +1 -1
- package/dist/node_modules/lodash/memoize.js +1 -2
- package/dist/node_modules/lodash/memoize.js.map +1 -1
- package/dist/node_modules/lodash/min.js +5 -6
- package/dist/node_modules/lodash/min.js.map +1 -1
- package/dist/node_modules/lodash/noop.js +1 -2
- package/dist/node_modules/lodash/noop.js.map +1 -1
- package/dist/node_modules/lodash/now.js +1 -2
- package/dist/node_modules/lodash/now.js.map +1 -1
- package/dist/node_modules/lodash/property.js +6 -7
- package/dist/node_modules/lodash/property.js.map +1 -1
- package/dist/node_modules/lodash/range.js +1 -2
- package/dist/node_modules/lodash/range.js.map +1 -1
- package/dist/node_modules/lodash/some.js +7 -8
- package/dist/node_modules/lodash/some.js.map +1 -1
- package/dist/node_modules/lodash/sortBy.js +1 -2
- package/dist/node_modules/lodash/sortBy.js.map +1 -1
- package/dist/node_modules/lodash/stubArray.js +1 -2
- package/dist/node_modules/lodash/stubArray.js.map +1 -1
- package/dist/node_modules/lodash/stubFalse.js +1 -2
- package/dist/node_modules/lodash/stubFalse.js.map +1 -1
- package/dist/node_modules/lodash/throttle.js +4 -5
- package/dist/node_modules/lodash/throttle.js.map +1 -1
- package/dist/node_modules/lodash/toFinite.js +2 -3
- package/dist/node_modules/lodash/toFinite.js.map +1 -1
- package/dist/node_modules/lodash/toInteger.js +1 -2
- package/dist/node_modules/lodash/toInteger.js.map +1 -1
- package/dist/node_modules/lodash/toNumber.js +4 -5
- package/dist/node_modules/lodash/toNumber.js.map +1 -1
- package/dist/node_modules/lodash/toString.js +1 -2
- package/dist/node_modules/lodash/toString.js.map +1 -1
- package/dist/node_modules/lodash/uniqBy.js +1 -2
- package/dist/node_modules/lodash/uniqBy.js.map +1 -1
- package/dist/node_modules/lodash/upperFirst.js +1 -2
- package/dist/node_modules/lodash/upperFirst.js.map +1 -1
- package/dist/node_modules/object-assign/index.js +1 -2
- package/dist/node_modules/object-assign/index.js.map +1 -1
- package/dist/node_modules/prop-types/checkPropTypes.js +1 -2
- package/dist/node_modules/prop-types/checkPropTypes.js.map +1 -1
- package/dist/node_modules/prop-types/factoryWithThrowingShims.js +1 -2
- package/dist/node_modules/prop-types/factoryWithThrowingShims.js.map +1 -1
- package/dist/node_modules/prop-types/factoryWithTypeCheckers.js +3 -3
- package/dist/node_modules/prop-types/factoryWithTypeCheckers.js.map +1 -1
- package/dist/node_modules/prop-types/index.js +1 -2
- package/dist/node_modules/prop-types/index.js.map +1 -1
- package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js +1 -2
- package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js.map +1 -1
- package/dist/node_modules/prop-types/lib/has.js +1 -2
- package/dist/node_modules/prop-types/lib/has.js.map +1 -1
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js +1 -2
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js.map +1 -1
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js +1 -2
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js.map +1 -1
- package/dist/node_modules/prop-types/node_modules/react-is/index.js +2 -3
- package/dist/node_modules/prop-types/node_modules/react-is/index.js.map +1 -1
- package/dist/node_modules/react-is/cjs/react-is.development.js +31 -32
- package/dist/node_modules/react-is/cjs/react-is.development.js.map +1 -1
- package/dist/node_modules/react-is/cjs/react-is.production.min.js +1 -2
- package/dist/node_modules/react-is/cjs/react-is.production.min.js.map +1 -1
- package/dist/node_modules/react-is/index.js +2 -3
- package/dist/node_modules/react-is/index.js.map +1 -1
- package/dist/node_modules/react-smooth/es6/Animate.js +33 -41
- package/dist/node_modules/react-smooth/es6/Animate.js.map +1 -1
- package/dist/node_modules/react-smooth/es6/AnimateManager.js +2 -5
- package/dist/node_modules/react-smooth/es6/AnimateManager.js.map +1 -1
- package/dist/node_modules/react-smooth/es6/configUpdate.js +1 -2
- package/dist/node_modules/react-smooth/es6/configUpdate.js.map +1 -1
- package/dist/node_modules/react-smooth/es6/easing.js +1 -2
- package/dist/node_modules/react-smooth/es6/easing.js.map +1 -1
- package/dist/node_modules/react-smooth/es6/index.js +1 -2
- package/dist/node_modules/react-smooth/es6/index.js.map +1 -1
- package/dist/node_modules/react-smooth/es6/setRafTimeout.js +1 -2
- package/dist/node_modules/react-smooth/es6/setRafTimeout.js.map +1 -1
- package/dist/node_modules/react-smooth/es6/util.js +17 -16
- package/dist/node_modules/react-smooth/es6/util.js.map +1 -1
- package/dist/node_modules/recharts/es6/cartesian/Bar.js +103 -104
- package/dist/node_modules/recharts/es6/cartesian/Bar.js.map +1 -1
- package/dist/node_modules/recharts/es6/cartesian/Brush.js +35 -36
- package/dist/node_modules/recharts/es6/cartesian/Brush.js.map +1 -1
- package/dist/node_modules/recharts/es6/cartesian/CartesianAxis.js +60 -67
- package/dist/node_modules/recharts/es6/cartesian/CartesianAxis.js.map +1 -1
- package/dist/node_modules/recharts/es6/cartesian/CartesianGrid.js +45 -46
- package/dist/node_modules/recharts/es6/cartesian/CartesianGrid.js.map +1 -1
- package/dist/node_modules/recharts/es6/cartesian/ErrorBar.js +20 -21
- package/dist/node_modules/recharts/es6/cartesian/ErrorBar.js.map +1 -1
- package/dist/node_modules/recharts/es6/cartesian/Line.js +79 -80
- package/dist/node_modules/recharts/es6/cartesian/Line.js.map +1 -1
- package/dist/node_modules/recharts/es6/cartesian/ReferenceArea.js +29 -30
- package/dist/node_modules/recharts/es6/cartesian/ReferenceArea.js.map +1 -1
- package/dist/node_modules/recharts/es6/cartesian/ReferenceDot.js +23 -24
- package/dist/node_modules/recharts/es6/cartesian/ReferenceDot.js.map +1 -1
- package/dist/node_modules/recharts/es6/cartesian/ReferenceLine.js +31 -32
- package/dist/node_modules/recharts/es6/cartesian/ReferenceLine.js.map +1 -1
- package/dist/node_modules/recharts/es6/cartesian/XAxis.js +10 -11
- package/dist/node_modules/recharts/es6/cartesian/XAxis.js.map +1 -1
- package/dist/node_modules/recharts/es6/cartesian/YAxis.js +10 -11
- package/dist/node_modules/recharts/es6/cartesian/YAxis.js.map +1 -1
- package/dist/node_modules/recharts/es6/cartesian/getEquidistantTicks.js +5 -6
- package/dist/node_modules/recharts/es6/cartesian/getEquidistantTicks.js.map +1 -1
- package/dist/node_modules/recharts/es6/cartesian/getTicks.js +7 -8
- package/dist/node_modules/recharts/es6/cartesian/getTicks.js.map +1 -1
- package/dist/node_modules/recharts/es6/chart/AccessibilityManager.js +2 -5
- package/dist/node_modules/recharts/es6/chart/AccessibilityManager.js.map +1 -1
- package/dist/node_modules/recharts/es6/chart/BarChart.js +7 -8
- package/dist/node_modules/recharts/es6/chart/BarChart.js.map +1 -1
- package/dist/node_modules/recharts/es6/chart/LineChart.js +5 -6
- package/dist/node_modules/recharts/es6/chart/LineChart.js.map +1 -1
- package/dist/node_modules/recharts/es6/chart/generateCategoricalChart.js +534 -533
- package/dist/node_modules/recharts/es6/chart/generateCategoricalChart.js.map +1 -1
- package/dist/node_modules/recharts/es6/component/Cell.js +1 -2
- package/dist/node_modules/recharts/es6/component/Cell.js.map +1 -1
- package/dist/node_modules/recharts/es6/component/Cursor.js +17 -18
- package/dist/node_modules/recharts/es6/component/Cursor.js.map +1 -1
- package/dist/node_modules/recharts/es6/component/DefaultLegendContent.js +35 -36
- package/dist/node_modules/recharts/es6/component/DefaultLegendContent.js.map +1 -1
- package/dist/node_modules/recharts/es6/component/DefaultTooltipContent.js +16 -17
- package/dist/node_modules/recharts/es6/component/DefaultTooltipContent.js.map +1 -1
- package/dist/node_modules/recharts/es6/component/Label.js +85 -86
- package/dist/node_modules/recharts/es6/component/Label.js.map +1 -1
- package/dist/node_modules/recharts/es6/component/LabelList.js +20 -21
- package/dist/node_modules/recharts/es6/component/LabelList.js.map +1 -1
- package/dist/node_modules/recharts/es6/component/Legend.js +26 -23
- package/dist/node_modules/recharts/es6/component/Legend.js.map +1 -1
- package/dist/node_modules/recharts/es6/component/ResponsiveContainer.js +16 -17
- package/dist/node_modules/recharts/es6/component/ResponsiveContainer.js.map +1 -1
- package/dist/node_modules/recharts/es6/component/Text.js +18 -21
- package/dist/node_modules/recharts/es6/component/Text.js.map +1 -1
- package/dist/node_modules/recharts/es6/component/Tooltip.js +16 -17
- package/dist/node_modules/recharts/es6/component/Tooltip.js.map +1 -1
- package/dist/node_modules/recharts/es6/component/TooltipBoundingBox.js +3 -4
- package/dist/node_modules/recharts/es6/component/TooltipBoundingBox.js.map +1 -1
- package/dist/node_modules/recharts/es6/container/Layer.js +5 -6
- package/dist/node_modules/recharts/es6/container/Layer.js.map +1 -1
- package/dist/node_modules/recharts/es6/container/Surface.js +5 -6
- package/dist/node_modules/recharts/es6/container/Surface.js.map +1 -1
- package/dist/node_modules/recharts/es6/context/chartLayoutContext.js +21 -21
- package/dist/node_modules/recharts/es6/context/chartLayoutContext.js.map +1 -1
- package/dist/node_modules/recharts/es6/shape/Cross.js +4 -5
- package/dist/node_modules/recharts/es6/shape/Cross.js.map +1 -1
- package/dist/node_modules/recharts/es6/shape/Curve.js +38 -49
- package/dist/node_modules/recharts/es6/shape/Curve.js.map +1 -1
- package/dist/node_modules/recharts/es6/shape/Dot.js +3 -4
- package/dist/node_modules/recharts/es6/shape/Dot.js.map +1 -1
- package/dist/node_modules/recharts/es6/shape/Rectangle.js +8 -9
- package/dist/node_modules/recharts/es6/shape/Rectangle.js.map +1 -1
- package/dist/node_modules/recharts/es6/shape/Sector.js +33 -34
- package/dist/node_modules/recharts/es6/shape/Sector.js.map +1 -1
- package/dist/node_modules/recharts/es6/shape/Symbols.js +26 -34
- package/dist/node_modules/recharts/es6/shape/Symbols.js.map +1 -1
- package/dist/node_modules/recharts/es6/shape/Trapezoid.js +8 -9
- package/dist/node_modules/recharts/es6/shape/Trapezoid.js.map +1 -1
- package/dist/node_modules/recharts/es6/util/ActiveShapeUtils.js +24 -25
- package/dist/node_modules/recharts/es6/util/ActiveShapeUtils.js.map +1 -1
- package/dist/node_modules/recharts/es6/util/BarUtils.js +10 -11
- package/dist/node_modules/recharts/es6/util/BarUtils.js.map +1 -1
- package/dist/node_modules/recharts/es6/util/CartesianUtils.js +33 -34
- package/dist/node_modules/recharts/es6/util/CartesianUtils.js.map +1 -1
- package/dist/node_modules/recharts/es6/util/ChartUtils.js +231 -236
- package/dist/node_modules/recharts/es6/util/ChartUtils.js.map +1 -1
- package/dist/node_modules/recharts/es6/util/CssPrefixUtils.js +1 -2
- package/dist/node_modules/recharts/es6/util/CssPrefixUtils.js.map +1 -1
- package/dist/node_modules/recharts/es6/util/DOMUtils.js +1 -2
- package/dist/node_modules/recharts/es6/util/DOMUtils.js.map +1 -1
- package/dist/node_modules/recharts/es6/util/DataUtils.js +7 -8
- package/dist/node_modules/recharts/es6/util/DataUtils.js.map +1 -1
- package/dist/node_modules/recharts/es6/util/DetectReferenceElementsDomain.js +20 -21
- package/dist/node_modules/recharts/es6/util/DetectReferenceElementsDomain.js.map +1 -1
- package/dist/node_modules/recharts/es6/util/Events.js +0 -1
- package/dist/node_modules/recharts/es6/util/Events.js.map +1 -1
- package/dist/node_modules/recharts/es6/util/Global.js +0 -1
- package/dist/node_modules/recharts/es6/util/Global.js.map +1 -1
- package/dist/node_modules/recharts/es6/util/IfOverflowMatches.js +1 -2
- package/dist/node_modules/recharts/es6/util/IfOverflowMatches.js.map +1 -1
- package/dist/node_modules/recharts/es6/util/LogUtils.js +9 -8
- package/dist/node_modules/recharts/es6/util/LogUtils.js.map +1 -1
- package/dist/node_modules/recharts/es6/util/PolarUtils.js +4 -5
- package/dist/node_modules/recharts/es6/util/PolarUtils.js.map +1 -1
- package/dist/node_modules/recharts/es6/util/ReactUtils.js +11 -12
- package/dist/node_modules/recharts/es6/util/ReactUtils.js.map +1 -1
- package/dist/node_modules/recharts/es6/util/ReduceCSSCalc.js +5 -6
- package/dist/node_modules/recharts/es6/util/ReduceCSSCalc.js.map +1 -1
- package/dist/node_modules/recharts/es6/util/ShallowEqual.js +1 -2
- package/dist/node_modules/recharts/es6/util/ShallowEqual.js.map +1 -1
- package/dist/node_modules/recharts/es6/util/TickUtils.js +4 -4
- package/dist/node_modules/recharts/es6/util/TickUtils.js.map +1 -1
- package/dist/node_modules/recharts/es6/util/calculateViewBox.js +0 -1
- package/dist/node_modules/recharts/es6/util/calculateViewBox.js.map +1 -1
- package/dist/node_modules/recharts/es6/util/cursor/getCursorPoints.js +7 -6
- package/dist/node_modules/recharts/es6/util/cursor/getCursorPoints.js.map +1 -1
- package/dist/node_modules/recharts/es6/util/cursor/getCursorRectangle.js +1 -2
- package/dist/node_modules/recharts/es6/util/cursor/getCursorRectangle.js.map +1 -1
- package/dist/node_modules/recharts/es6/util/cursor/getRadialCursorPoints.js +1 -2
- package/dist/node_modules/recharts/es6/util/cursor/getRadialCursorPoints.js.map +1 -1
- package/dist/node_modules/recharts/es6/util/getEveryNthWithCondition.js +1 -2
- package/dist/node_modules/recharts/es6/util/getEveryNthWithCondition.js.map +1 -1
- package/dist/node_modules/recharts/es6/util/getLegendProps.js +9 -10
- package/dist/node_modules/recharts/es6/util/getLegendProps.js.map +1 -1
- package/dist/node_modules/recharts/es6/util/isDomainSpecifiedByUser.js +1 -2
- package/dist/node_modules/recharts/es6/util/isDomainSpecifiedByUser.js.map +1 -1
- package/dist/node_modules/recharts/es6/util/payload/getUniqPayload.js +4 -5
- package/dist/node_modules/recharts/es6/util/payload/getUniqPayload.js.map +1 -1
- package/dist/node_modules/recharts/es6/util/tooltip/translate.js +3 -4
- package/dist/node_modules/recharts/es6/util/tooltip/translate.js.map +1 -1
- package/dist/node_modules/recharts/es6/util/types.js +2 -3
- package/dist/node_modules/recharts/es6/util/types.js.map +1 -1
- package/dist/node_modules/recharts-scale/es6/getNiceTickValues.js +2 -3
- package/dist/node_modules/recharts-scale/es6/getNiceTickValues.js.map +1 -1
- package/dist/node_modules/recharts-scale/es6/index.js +1 -1
- package/dist/node_modules/recharts-scale/es6/util/arithmetic.js +1 -2
- package/dist/node_modules/recharts-scale/es6/util/arithmetic.js.map +1 -1
- package/dist/node_modules/recharts-scale/es6/util/utils.js +3 -4
- package/dist/node_modules/recharts-scale/es6/util/utils.js.map +1 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/NotificationFactories.js +2 -3
- package/dist/node_modules/rxjs/dist/esm5/internal/NotificationFactories.js.map +1 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/Observable.js +41 -42
- package/dist/node_modules/rxjs/dist/esm5/internal/Observable.js.map +1 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/Subscriber.js +14 -15
- package/dist/node_modules/rxjs/dist/esm5/internal/Subscriber.js.map +1 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/Subscription.js +21 -18
- package/dist/node_modules/rxjs/dist/esm5/internal/Subscription.js.map +1 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/config.js +1 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/config.js.map +1 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/observable/empty.js +1 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/observable/empty.js.map +1 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js +2 -3
- package/dist/node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js.map +1 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/symbol/observable.js +1 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/symbol/observable.js.map +1 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js +1 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js.map +1 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js +1 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js.map +1 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js +1 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js.map +1 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/errorContext.js +1 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/util/errorContext.js.map +1 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/identity.js +1 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/util/identity.js.map +1 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/isFunction.js +1 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/util/isFunction.js.map +1 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/noop.js +1 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/util/noop.js.map +1 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/pipe.js +1 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/util/pipe.js.map +1 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js +1 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js.map +1 -1
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +229 -167
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -1
- package/dist/node_modules/tiny-invariant/dist/esm/tiny-invariant.js +2 -3
- package/dist/node_modules/tiny-invariant/dist/esm/tiny-invariant.js.map +1 -1
- package/dist/node_modules/{rxjs/node_modules/tslib → tslib}/tslib.es6.js +1 -2
- package/dist/node_modules/tslib/tslib.es6.js.map +1 -0
- package/dist/node_modules/victory-vendor/es/d3-scale.js +28 -45
- package/dist/node_modules/victory-vendor/es/d3-scale.js.map +1 -1
- package/dist/test/happydom.d.ts +1 -0
- package/dist/translations/en.d.ts +0 -1
- package/dist/translations/en.js +1 -2
- package/dist/translations/en.js.map +1 -1
- package/dist/utils/nativeBridge.d.ts +0 -1
- package/dist/utils/nativeBridge.js +1 -2
- package/package.json +76 -60
- package/dist/__tests__/setup.d.ts +0 -2
- package/dist/__tests__/setup.d.ts.map +0 -1
- package/dist/__tests__/utils/renderWithProviders.d.ts.map +0 -1
- package/dist/dev/main.d.ts.map +0 -1
- package/dist/devportal/AdminDevportalRoot.d.ts.map +0 -1
- package/dist/devportal/AdminDevportalRoutes.d.ts.map +0 -1
- package/dist/devportal/DevportalRoot.d.ts.map +0 -1
- package/dist/devportal/DevportalRoutes.d.ts.map +0 -1
- package/dist/devportal/components/AppCard.d.ts.map +0 -1
- package/dist/devportal/components/ConfirmDialog.d.ts.map +0 -1
- package/dist/devportal/components/DataTable.d.ts.map +0 -1
- package/dist/devportal/components/EmptyState.d.ts.map +0 -1
- package/dist/devportal/components/FeatureFlaggedRoute.d.ts.map +0 -1
- package/dist/devportal/components/FormField.d.ts.map +0 -1
- package/dist/devportal/components/GrantDelegationModal.d.ts.map +0 -1
- package/dist/devportal/components/ImageUploadField.d.ts.map +0 -1
- package/dist/devportal/components/LoadingState.d.ts.map +0 -1
- package/dist/devportal/components/ManifestViewer.d.ts.map +0 -1
- package/dist/devportal/components/MarkdownEditor.d.ts.map +0 -1
- package/dist/devportal/components/MultiSelectCombobox.d.ts.map +0 -1
- package/dist/devportal/components/NodeSmokePanel.d.ts.map +0 -1
- package/dist/devportal/components/OnboardingChecklist.d.ts.map +0 -1
- package/dist/devportal/components/PackageValidationPanel.d.ts.map +0 -1
- package/dist/devportal/components/PageLayout.d.ts.map +0 -1
- package/dist/devportal/components/PermissionGuard.d.ts.map +0 -1
- package/dist/devportal/components/RegisterPickupLocationModal.d.ts.map +0 -1
- package/dist/devportal/components/ReportOrderIssueModal.d.ts.map +0 -1
- package/dist/devportal/components/SecretDisplay.d.ts.map +0 -1
- package/dist/devportal/components/SectionNav.d.ts.map +0 -1
- package/dist/devportal/components/SelectionCheckbox.d.ts.map +0 -1
- package/dist/devportal/components/StatCard.d.ts.map +0 -1
- package/dist/devportal/components/StatusBadge.d.ts.map +0 -1
- package/dist/devportal/components/TelemetryErrorBoundary.d.ts.map +0 -1
- package/dist/devportal/components/index.d.ts.map +0 -1
- package/dist/devportal/constants/appCategories.d.ts.map +0 -1
- package/dist/devportal/constants/developerLinks.d.ts.map +0 -1
- package/dist/devportal/constants/permissions.d.ts.map +0 -1
- package/dist/devportal/events/index.d.ts.map +0 -1
- package/dist/devportal/hooks/DevPortalProvider.d.ts.map +0 -1
- package/dist/devportal/hooks/index.d.ts.map +0 -1
- package/dist/devportal/hooks/useCarrierPickupLocations.d.ts.map +0 -1
- package/dist/devportal/hooks/useGraphQL.d.ts.map +0 -1
- package/dist/devportal/hooks/useIsSellerSection.d.ts.map +0 -1
- package/dist/devportal/hooks/useOrganizationPickupAddresses.d.ts.map +0 -1
- package/dist/devportal/hooks/usePackageUpload.d.ts.map +0 -1
- package/dist/devportal/hooks/usePermission.d.ts.map +0 -1
- package/dist/devportal/hooks/useProducts.d.ts.map +0 -1
- package/dist/devportal/hooks/useSellerOrganization.d.ts.map +0 -1
- package/dist/devportal/index.d.ts.map +0 -1
- package/dist/devportal/pages/AdminOrganizationVerificationPage.d.ts.map +0 -1
- package/dist/devportal/pages/AdminReviewPage.d.ts.map +0 -1
- package/dist/devportal/pages/AnalyticsDashboardPage.d.ts.map +0 -1
- package/dist/devportal/pages/ApiKeysPage.d.ts.map +0 -1
- package/dist/devportal/pages/AppLogsPage.d.ts.map +0 -1
- package/dist/devportal/pages/ApplicationDetailPage.d.ts.map +0 -1
- package/dist/devportal/pages/ApplicationVersionsPage.d.ts.map +0 -1
- package/dist/devportal/pages/ApplicationsPage.d.ts.map +0 -1
- package/dist/devportal/pages/CreateApiKeyPage.d.ts.map +0 -1
- package/dist/devportal/pages/CreateApplicationPage.d.ts.map +0 -1
- package/dist/devportal/pages/CreateOAuthClientPage.d.ts.map +0 -1
- package/dist/devportal/pages/CreateOrganizationPage.d.ts.map +0 -1
- package/dist/devportal/pages/CreatePhysicalItemPage.d.ts.map +0 -1
- package/dist/devportal/pages/CreateWebhookPage.d.ts.map +0 -1
- package/dist/devportal/pages/DashboardPage.d.ts.map +0 -1
- package/dist/devportal/pages/DelegationsPage.d.ts.map +0 -1
- package/dist/devportal/pages/DocumentationPage.d.ts.map +0 -1
- package/dist/devportal/pages/EditApplicationPage.d.ts.map +0 -1
- package/dist/devportal/pages/EditPhysicalItemPage.d.ts.map +0 -1
- package/dist/devportal/pages/InvitationDecisionPage.d.ts.map +0 -1
- package/dist/devportal/pages/ListingPreviewPage.d.ts.map +0 -1
- package/dist/devportal/pages/NodeLifecyclePage.d.ts.map +0 -1
- package/dist/devportal/pages/OAuthCallbackPage.d.ts.map +0 -1
- package/dist/devportal/pages/OAuthClientDetailPage.d.ts.map +0 -1
- package/dist/devportal/pages/OAuthClientsPage.d.ts.map +0 -1
- package/dist/devportal/pages/OrganizationDetailPage.d.ts.map +0 -1
- package/dist/devportal/pages/OrganizationMembersPage.d.ts.map +0 -1
- package/dist/devportal/pages/OrganizationsPage.d.ts.map +0 -1
- package/dist/devportal/pages/PublishPage.d.ts.map +0 -1
- package/dist/devportal/pages/PublisherPayoutsPage.d.ts.map +0 -1
- package/dist/devportal/pages/PublisherProfilePage.d.ts.map +0 -1
- package/dist/devportal/pages/ResourcesPage.d.ts.map +0 -1
- package/dist/devportal/pages/RevenueDashboardPage.d.ts.map +0 -1
- package/dist/devportal/pages/RevenueRedirectPage.d.ts.map +0 -1
- package/dist/devportal/pages/SellerDashboardPage.d.ts.map +0 -1
- package/dist/devportal/pages/SellerItemsPage.d.ts.map +0 -1
- package/dist/devportal/pages/SellerOrdersPage.d.ts.map +0 -1
- package/dist/devportal/pages/SettingsPage.d.ts.map +0 -1
- package/dist/devportal/pages/SetupPage.d.ts.map +0 -1
- package/dist/devportal/pages/StoreSubmissionPage.d.ts.map +0 -1
- package/dist/devportal/pages/WebhookDetailPage.d.ts.map +0 -1
- package/dist/devportal/pages/WebhooksPage.d.ts.map +0 -1
- package/dist/devportal/providers/DevportalProvider.d.ts.map +0 -1
- package/dist/devportal/store/devportalStore.d.ts.map +0 -1
- package/dist/devportal/types/index.d.ts.map +0 -1
- package/dist/devportal/utils/cn.d.ts.map +0 -1
- package/dist/devportal/utils/constants.d.ts.map +0 -1
- package/dist/devportal/utils/currency.d.ts.map +0 -1
- package/dist/devportal/utils/developerOnboarding.d.ts.map +0 -1
- package/dist/devportal/utils/graphqlEndpoint.d.ts.map +0 -1
- package/dist/devportal/utils/i18n.d.ts.map +0 -1
- package/dist/devportal/utils/nodeLifecycle.d.ts.map +0 -1
- package/dist/devportal/utils/publisherPayouts.d.ts.map +0 -1
- package/dist/devportal/utils/recaptcha.d.ts.map +0 -1
- package/dist/devportal/utils/submitForReview.d.ts.map +0 -1
- package/dist/devportal/utils/uploadErrors.d.ts.map +0 -1
- package/dist/generated/global-operations.d.ts.map +0 -1
- package/dist/generated/global-types.d.ts.map +0 -1
- package/dist/generated/wspace-operations.d.ts.map +0 -1
- package/dist/generated/wspace-types.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/node_modules/d3-array/src/ascending.js +0 -8
- package/dist/node_modules/d3-array/src/ascending.js.map +0 -1
- package/dist/node_modules/d3-array/src/bisect.js +0 -10
- package/dist/node_modules/d3-array/src/bisect.js.map +0 -1
- package/dist/node_modules/d3-array/src/bisector.js +0 -43
- package/dist/node_modules/d3-array/src/bisector.js.map +0 -1
- package/dist/node_modules/d3-array/src/descending.js +0 -8
- package/dist/node_modules/d3-array/src/descending.js.map +0 -1
- package/dist/node_modules/d3-array/src/max.js +0 -14
- package/dist/node_modules/d3-array/src/max.js.map +0 -1
- package/dist/node_modules/d3-array/src/min.js +0 -14
- package/dist/node_modules/d3-array/src/min.js.map +0 -1
- package/dist/node_modules/d3-array/src/number.js +0 -15
- package/dist/node_modules/d3-array/src/number.js.map +0 -1
- package/dist/node_modules/d3-array/src/quantile.js +0 -25
- package/dist/node_modules/d3-array/src/quantile.js.map +0 -1
- package/dist/node_modules/d3-array/src/quickselect.js +0 -26
- package/dist/node_modules/d3-array/src/quickselect.js.map +0 -1
- package/dist/node_modules/d3-array/src/range.js +0 -10
- package/dist/node_modules/d3-array/src/range.js.map +0 -1
- package/dist/node_modules/d3-array/src/sort.js +0 -17
- package/dist/node_modules/d3-array/src/sort.js.map +0 -1
- package/dist/node_modules/d3-array/src/ticks.js +0 -34
- package/dist/node_modules/d3-array/src/ticks.js.map +0 -1
- package/dist/node_modules/d3-color/src/color.js +0 -291
- package/dist/node_modules/d3-color/src/color.js.map +0 -1
- package/dist/node_modules/d3-color/src/define.js +0 -13
- package/dist/node_modules/d3-color/src/define.js.map +0 -1
- package/dist/node_modules/d3-format/src/defaultLocale.js +0 -15
- package/dist/node_modules/d3-format/src/defaultLocale.js.map +0 -1
- package/dist/node_modules/d3-format/src/exponent.js +0 -9
- package/dist/node_modules/d3-format/src/exponent.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatDecimal.js +0 -13
- package/dist/node_modules/d3-format/src/formatDecimal.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatGroup.js +0 -11
- package/dist/node_modules/d3-format/src/formatGroup.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatNumerals.js +0 -12
- package/dist/node_modules/d3-format/src/formatNumerals.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatPrefixAuto.js +0 -13
- package/dist/node_modules/d3-format/src/formatPrefixAuto.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatRounded.js +0 -12
- package/dist/node_modules/d3-format/src/formatRounded.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatSpecifier.js +0 -29
- package/dist/node_modules/d3-format/src/formatSpecifier.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatTrim.js +0 -20
- package/dist/node_modules/d3-format/src/formatTrim.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatTypes.js +0 -23
- package/dist/node_modules/d3-format/src/formatTypes.js.map +0 -1
- package/dist/node_modules/d3-format/src/identity.js +0 -8
- package/dist/node_modules/d3-format/src/identity.js.map +0 -1
- package/dist/node_modules/d3-format/src/locale.js +0 -86
- package/dist/node_modules/d3-format/src/locale.js.map +0 -1
- package/dist/node_modules/d3-format/src/precisionFixed.js +0 -9
- package/dist/node_modules/d3-format/src/precisionFixed.js.map +0 -1
- package/dist/node_modules/d3-format/src/precisionPrefix.js +0 -9
- package/dist/node_modules/d3-format/src/precisionPrefix.js.map +0 -1
- package/dist/node_modules/d3-format/src/precisionRound.js +0 -9
- package/dist/node_modules/d3-format/src/precisionRound.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/array.js +0 -15
- package/dist/node_modules/d3-interpolate/src/array.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/basis.js +0 -16
- package/dist/node_modules/d3-interpolate/src/basis.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/basisClosed.js +0 -13
- package/dist/node_modules/d3-interpolate/src/basisClosed.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/color.js +0 -25
- package/dist/node_modules/d3-interpolate/src/color.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/constant.js +0 -6
- package/dist/node_modules/d3-interpolate/src/constant.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/date.js +0 -11
- package/dist/node_modules/d3-interpolate/src/date.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/number.js +0 -10
- package/dist/node_modules/d3-interpolate/src/number.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/numberArray.js +0 -16
- package/dist/node_modules/d3-interpolate/src/numberArray.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/object.js +0 -14
- package/dist/node_modules/d3-interpolate/src/object.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/piecewise.js +0 -14
- package/dist/node_modules/d3-interpolate/src/piecewise.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/rgb.js +0 -19
- package/dist/node_modules/d3-interpolate/src/rgb.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/round.js +0 -10
- package/dist/node_modules/d3-interpolate/src/round.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/string.js +0 -28
- package/dist/node_modules/d3-interpolate/src/string.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/value.js +0 -18
- package/dist/node_modules/d3-interpolate/src/value.js.map +0 -1
- package/dist/node_modules/d3-path/src/path.js.map +0 -1
- package/dist/node_modules/d3-scale/src/band.js +0 -52
- package/dist/node_modules/d3-scale/src/band.js.map +0 -1
- package/dist/node_modules/d3-scale/src/constant.js +0 -10
- package/dist/node_modules/d3-scale/src/constant.js.map +0 -1
- package/dist/node_modules/d3-scale/src/continuous.js +0 -73
- package/dist/node_modules/d3-scale/src/continuous.js.map +0 -1
- package/dist/node_modules/d3-scale/src/diverging.js +0 -82
- package/dist/node_modules/d3-scale/src/diverging.js.map +0 -1
- package/dist/node_modules/d3-scale/src/identity.js +0 -20
- package/dist/node_modules/d3-scale/src/identity.js.map +0 -1
- package/dist/node_modules/d3-scale/src/init.js +0 -29
- package/dist/node_modules/d3-scale/src/init.js.map +0 -1
- package/dist/node_modules/d3-scale/src/linear.js +0 -36
- package/dist/node_modules/d3-scale/src/linear.js.map +0 -1
- package/dist/node_modules/d3-scale/src/log.js +0 -77
- package/dist/node_modules/d3-scale/src/log.js.map +0 -1
- package/dist/node_modules/d3-scale/src/nice.js +0 -10
- package/dist/node_modules/d3-scale/src/nice.js.map +0 -1
- package/dist/node_modules/d3-scale/src/number.js +0 -8
- package/dist/node_modules/d3-scale/src/number.js.map +0 -1
- package/dist/node_modules/d3-scale/src/ordinal.js +0 -31
- package/dist/node_modules/d3-scale/src/ordinal.js.map +0 -1
- package/dist/node_modules/d3-scale/src/pow.js +0 -37
- package/dist/node_modules/d3-scale/src/pow.js.map +0 -1
- package/dist/node_modules/d3-scale/src/quantile.js +0 -37
- package/dist/node_modules/d3-scale/src/quantile.js.map +0 -1
- package/dist/node_modules/d3-scale/src/quantize.js +0 -33
- package/dist/node_modules/d3-scale/src/quantize.js.map +0 -1
- package/dist/node_modules/d3-scale/src/radial.js +0 -39
- package/dist/node_modules/d3-scale/src/radial.js.map +0 -1
- package/dist/node_modules/d3-scale/src/sequential.js +0 -67
- package/dist/node_modules/d3-scale/src/sequential.js.map +0 -1
- package/dist/node_modules/d3-scale/src/sequentialQuantile.js +0 -30
- package/dist/node_modules/d3-scale/src/sequentialQuantile.js.map +0 -1
- package/dist/node_modules/d3-scale/src/symlog.js +0 -30
- package/dist/node_modules/d3-scale/src/symlog.js.map +0 -1
- package/dist/node_modules/d3-scale/src/threshold.js +0 -25
- package/dist/node_modules/d3-scale/src/threshold.js.map +0 -1
- package/dist/node_modules/d3-scale/src/tickFormat.js +0 -31
- package/dist/node_modules/d3-scale/src/tickFormat.js.map +0 -1
- package/dist/node_modules/d3-scale/src/time.js +0 -47
- package/dist/node_modules/d3-scale/src/time.js.map +0 -1
- package/dist/node_modules/d3-scale/src/utcTime.js +0 -19
- package/dist/node_modules/d3-scale/src/utcTime.js.map +0 -1
- package/dist/node_modules/d3-shape/src/area.js +0 -55
- package/dist/node_modules/d3-shape/src/area.js.map +0 -1
- package/dist/node_modules/d3-shape/src/array.js +0 -8
- package/dist/node_modules/d3-shape/src/array.js.map +0 -1
- package/dist/node_modules/d3-shape/src/constant.js +0 -10
- package/dist/node_modules/d3-shape/src/constant.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/basis.js +0 -49
- package/dist/node_modules/d3-shape/src/curve/basis.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/basisClosed.js +0 -50
- package/dist/node_modules/d3-shape/src/curve/basisClosed.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/basisOpen.js +0 -46
- package/dist/node_modules/d3-shape/src/curve/basisOpen.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/bump.js +0 -40
- package/dist/node_modules/d3-shape/src/curve/bump.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/linear.js +0 -36
- package/dist/node_modules/d3-shape/src/curve/linear.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/linearClosed.js +0 -25
- package/dist/node_modules/d3-shape/src/curve/linearClosed.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/monotone.js +0 -94
- package/dist/node_modules/d3-shape/src/curve/monotone.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/natural.js +0 -39
- package/dist/node_modules/d3-shape/src/curve/natural.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/step.js +0 -47
- package/dist/node_modules/d3-shape/src/curve/step.js.map +0 -1
- package/dist/node_modules/d3-shape/src/line.js +0 -30
- package/dist/node_modules/d3-shape/src/line.js.map +0 -1
- package/dist/node_modules/d3-shape/src/math.js +0 -8
- package/dist/node_modules/d3-shape/src/math.js.map +0 -1
- package/dist/node_modules/d3-shape/src/noop.js +0 -6
- package/dist/node_modules/d3-shape/src/noop.js.map +0 -1
- package/dist/node_modules/d3-shape/src/offset/expand.js +0 -15
- package/dist/node_modules/d3-shape/src/offset/expand.js.map +0 -1
- package/dist/node_modules/d3-shape/src/offset/none.js +0 -8
- package/dist/node_modules/d3-shape/src/offset/none.js.map +0 -1
- package/dist/node_modules/d3-shape/src/offset/silhouette.js +0 -15
- package/dist/node_modules/d3-shape/src/offset/silhouette.js.map +0 -1
- package/dist/node_modules/d3-shape/src/offset/wiggle.js +0 -21
- package/dist/node_modules/d3-shape/src/offset/wiggle.js.map +0 -1
- package/dist/node_modules/d3-shape/src/order/none.js +0 -9
- package/dist/node_modules/d3-shape/src/order/none.js.map +0 -1
- package/dist/node_modules/d3-shape/src/path.js +0 -19
- package/dist/node_modules/d3-shape/src/path.js.map +0 -1
- package/dist/node_modules/d3-shape/src/point.js +0 -11
- package/dist/node_modules/d3-shape/src/point.js.map +0 -1
- package/dist/node_modules/d3-shape/src/stack.js +0 -34
- package/dist/node_modules/d3-shape/src/stack.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol/circle.js +0 -10
- package/dist/node_modules/d3-shape/src/symbol/circle.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol/cross.js +0 -10
- package/dist/node_modules/d3-shape/src/symbol/cross.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol/diamond.js +0 -10
- package/dist/node_modules/d3-shape/src/symbol/diamond.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol/square.js +0 -10
- package/dist/node_modules/d3-shape/src/symbol/square.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol/star.js +0 -15
- package/dist/node_modules/d3-shape/src/symbol/star.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol/triangle.js +0 -10
- package/dist/node_modules/d3-shape/src/symbol/triangle.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol/wye.js +0 -10
- package/dist/node_modules/d3-shape/src/symbol/wye.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol.js +0 -23
- package/dist/node_modules/d3-shape/src/symbol.js.map +0 -1
- package/dist/node_modules/d3-time/src/day.js +0 -21
- package/dist/node_modules/d3-time/src/day.js.map +0 -1
- package/dist/node_modules/d3-time/src/duration.js +0 -6
- package/dist/node_modules/d3-time/src/duration.js.map +0 -1
- package/dist/node_modules/d3-time/src/hour.js +0 -19
- package/dist/node_modules/d3-time/src/hour.js.map +0 -1
- package/dist/node_modules/d3-time/src/interval.js +0 -28
- package/dist/node_modules/d3-time/src/interval.js.map +0 -1
- package/dist/node_modules/d3-time/src/millisecond.js +0 -14
- package/dist/node_modules/d3-time/src/millisecond.js.map +0 -1
- package/dist/node_modules/d3-time/src/minute.js +0 -19
- package/dist/node_modules/d3-time/src/minute.js.map +0 -1
- package/dist/node_modules/d3-time/src/month.js +0 -18
- package/dist/node_modules/d3-time/src/month.js.map +0 -1
- package/dist/node_modules/d3-time/src/second.js +0 -13
- package/dist/node_modules/d3-time/src/second.js.map +0 -1
- package/dist/node_modules/d3-time/src/ticks.js +0 -125
- package/dist/node_modules/d3-time/src/ticks.js.map +0 -1
- package/dist/node_modules/d3-time/src/week.js +0 -25
- package/dist/node_modules/d3-time/src/week.js.map +0 -1
- package/dist/node_modules/d3-time/src/year.js +0 -26
- package/dist/node_modules/d3-time/src/year.js.map +0 -1
- package/dist/node_modules/d3-time-format/src/defaultLocale.js +0 -62
- package/dist/node_modules/d3-time-format/src/defaultLocale.js.map +0 -1
- package/dist/node_modules/d3-time-format/src/locale.js.map +0 -1
- package/dist/node_modules/internmap/src/index.js +0 -40
- package/dist/node_modules/internmap/src/index.js.map +0 -1
- package/dist/node_modules/rxjs/node_modules/tslib/tslib.es6.js.map +0 -1
- package/dist/translations/en.d.ts.map +0 -1
- package/dist/utils/nativeBridge.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SetupPage.js","names":[],"sources":["../../../src/devportal/pages/SetupPage.tsx"],"sourcesContent":["import type { FC } from \"react\";\nimport { useState } from \"react\";\nimport {\n ArrowRight,\n Building2,\n AppWindow,\n Rocket,\n Check,\n Key,\n BookOpen,\n ChevronRight,\n Box,\n Puzzle,\n GitFork,\n ListChecks,\n ShieldCheck,\n} from \"lucide-react\";\nimport { useI18n } from \"@burdenoff/fe-libs/shared/providers/shell/I18nProvider\";\nimport { Illustration, PagePurpose } from \"@burdenoff/fe-libs/ui\";\nimport { APP_CATEGORY_OPTIONS } from \"../constants/appCategories\";\nimport {\n InputField,\n TextareaField,\n SelectField,\n} from \"../components/FormField\";\nimport { useDevportal } from \"../providers/DevportalProvider\";\nimport { useDevportalEventBus } from \"../events\";\nimport { cn } from \"../utils/cn\";\nimport {\n useCreateOrganizationMutation,\n useCreateApplicationMutation,\n useCreateDeveloperProfileMutation,\n} from \"../../generated/global-operations\";\nimport { useCreateBillingAccountMutation } from \"../hooks\";\nimport {\n DEVELOPER_AGREEMENT_VERSION,\n DEVELOPER_LINKS,\n} from \"../constants/developerLinks\";\nimport {\n ELIGIBILITY_RULES,\n reviewRequirementsFor,\n} from \"../utils/developerOnboarding\";\n\ntype SetupStep = \"org\" | \"app\" | \"submit\" | \"done\";\ntype BuilderType = \"app\" | \"node\" | \"workflow\";\n\nfunction generateSlug(name: string): string {\n return name\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-|-$/g, \"\");\n}\n\n/** Readable message from a failed mutation, falling back to a generic one. */\nfunction errorMessage(err: unknown, fallback: string): string {\n if (err instanceof Error && err.message) return err.message;\n return fallback;\n}\n\n/** Mark that the user has interacted with setup so the dashboard gate won't redirect again. */\nfunction markSetupSeen() {\n try {\n localStorage.setItem(\"devportal_setup_dismissed\", \"1\");\n } catch {\n // localStorage unavailable — not critical\n }\n}\n\n// ─── Step indicator ────────────────────────────────────────────────────────\n\nconst STEPS: { key: SetupStep; label: string }[] = [\n { key: \"org\", label: \"Organization\" },\n { key: \"app\", label: \"First app\" },\n { key: \"submit\", label: \"Submit\" },\n { key: \"done\", label: \"Done\" },\n];\n\nconst StepIndicator: FC<{ current: SetupStep }> = ({ current }) => {\n const currentIdx = STEPS.findIndex((s) => s.key === current);\n return (\n <div className=\"flex items-center gap-0\">\n {STEPS.map((step, idx) => {\n const isCompleted = idx < currentIdx;\n const isActive = idx === currentIdx;\n return (\n <div key={step.key} className=\"flex items-center\">\n <div className=\"flex flex-col items-center gap-1.5\">\n <div\n className={[\n \"flex h-8 w-8 items-center justify-center rounded-full text-sm font-semibold transition-colors\",\n isCompleted\n ? \"bg-action-primary-bg text-action-primary-text\"\n : isActive\n ? \"bg-action-primary-bg text-action-primary-text ring-4 ring-primary/20\"\n : \"bg-bg-sunken text-text-secondary\",\n ].join(\" \")}\n >\n {isCompleted ? <Check size={14} /> : idx + 1}\n </div>\n <span\n className={[\n \"text-xs font-medium whitespace-nowrap\",\n isActive ? \"text-text-primary\" : \"text-text-secondary\",\n ].join(\" \")}\n >\n {step.label}\n </span>\n </div>\n {idx < STEPS.length - 1 && (\n <div\n className={[\n \"mx-3 mb-5 h-px w-16 flex-shrink-0 transition-colors\",\n idx < currentIdx ? \"bg-action-primary-bg\" : \"bg-border\",\n ].join(\" \")}\n />\n )}\n </div>\n );\n })}\n </div>\n );\n};\n\n// ─── Main component ────────────────────────────────────────────────────────\n\nexport const SetupPage: FC = () => {\n const { navigate, basePath, currentUser } = useDevportal();\n const { t } = useI18n();\n const bus = useDevportalEventBus();\n const tr = (key: string, fallback: string): string => {\n const v = t(key);\n return v === key ? fallback : v;\n };\n\n const handleNavigate = (path: string) => navigate?.(`${basePath}${path}`);\n\n const [step, setStep] = useState<SetupStep>(\"org\");\n\n // IDs created during wizard — carried forward for success CTAs\n const [createdOrgId, setCreatedOrgId] = useState<string | null>(null);\n const [createdAppId, setCreatedAppId] = useState<string | null>(null);\n const [createdAppType, setCreatedAppType] = useState<string | null>(null);\n\n // ── Step 1: org ──────────────────────────────────────────────\n const [orgName, setOrgName] = useState(\"\");\n const [orgSlug, setOrgSlug] = useState(\"\");\n const [orgDescription, setOrgDescription] = useState(\"\");\n const [orgErrors, setOrgErrors] = useState<{\n name?: string;\n slug?: string;\n agreement?: string;\n }>({});\n const [agreementAccepted, setAgreementAccepted] = useState(false);\n const [orgSubmitError, setOrgSubmitError] = useState<string | null>(null);\n\n const [createOrg, { loading: creatingOrgOnly }] =\n useCreateOrganizationMutation();\n const [createProfile, { loading: creatingProfile }] =\n useCreateDeveloperProfileMutation();\n const creatingOrg = creatingOrgOnly || creatingProfile;\n const [createBillingAccountMutation] = useCreateBillingAccountMutation();\n\n const validateOrg = () => {\n const errs: { name?: string; slug?: string; agreement?: string } = {};\n if (!orgName.trim())\n errs.name = tr(\n \"devportal.orgNameRequired\",\n \"Organization name is required\",\n );\n else if (orgName.length < 2)\n errs.name = tr(\n \"devportal.orgNameTooShort\",\n \"Name must be at least 2 characters\",\n );\n if (!orgSlug.trim())\n errs.slug = tr(\"devportal.slugRequired\", \"Slug is required\");\n else if (!/^[a-z0-9-]+$/.test(orgSlug))\n errs.slug = tr(\n \"devportal.slugInvalid\",\n \"Lowercase letters, numbers, and hyphens only\",\n );\n if (!agreementAccepted)\n errs.agreement = tr(\n \"devportal.onboarding.agreementRequired\",\n \"Accept the Developer Agreement to continue\",\n );\n setOrgErrors(errs);\n return Object.keys(errs).length === 0;\n };\n\n const handleOrgSubmit = async () => {\n if (!validateOrg()) return;\n setOrgSubmitError(null);\n try {\n // The developer profile is the personal half of the registration: the\n // backend returns the existing one when it is already there, so this is\n // safe to repeat on a retry.\n await createProfile({\n variables: { input: { companyName: orgName } },\n });\n const result = await createOrg({\n variables: {\n input: {\n name: orgName,\n slug: orgSlug || undefined,\n description: orgDescription || undefined,\n contactEmail: currentUser?.email || undefined,\n metadata: {\n developerAgreement: {\n version: DEVELOPER_AGREEMENT_VERSION,\n url: DEVELOPER_LINKS.developerAgreement,\n acceptedAt: new Date().toISOString(),\n acceptedBy: currentUser?.id ?? null,\n },\n registrationSource: \"devportal-setup\",\n },\n },\n },\n });\n const id = result.data?.createDeveloperOrganization?.id;\n if (id) {\n bus.emit(\"devportal.org.created\", {\n organizationId: id,\n name: orgName,\n });\n setCreatedOrgId(id);\n // Fire-and-forget: create a billing account for the new org\n try {\n createBillingAccountMutation({\n variables: {\n input: {\n name: orgName,\n email: currentUser?.email ?? \"\",\n },\n },\n }).catch(() => {});\n } catch {\n // silent failure — billing account creation is non-blocking\n }\n setStep(\"app\");\n }\n } catch (err) {\n setOrgSubmitError(\n errorMessage(\n err,\n tr(\n \"devportal.onboarding.orgCreateFailed\",\n \"We could not create your organization. Please try again.\",\n ),\n ),\n );\n }\n };\n\n // ── Step 2: app ──────────────────────────────────────────────\n const [appName, setAppName] = useState(\"\");\n const [appSlug, setAppSlug] = useState(\"\");\n const [builderType, setBuilderType] = useState<BuilderType | null>(null);\n const [appCategory, setAppCategory] = useState(\"\");\n const [appShortDesc, setAppShortDesc] = useState(\"\");\n const [appErrors, setAppErrors] = useState<{\n name?: string;\n builderType?: string;\n category?: string;\n shortDescription?: string;\n }>({});\n\n const [appSubmitError, setAppSubmitError] = useState<string | null>(null);\n const [createApp, { loading: creatingApp }] = useCreateApplicationMutation();\n\n const appTypeForBuilder = () => {\n if (builderType === \"node\") return \"NODE\" as const;\n if (builderType === \"workflow\") return \"WORKFLOW\" as const;\n return \"API_INTEGRATION\" as const;\n };\n\n const validateApp = () => {\n const errs: typeof appErrors = {};\n if (!appName.trim())\n errs.name = tr(\n \"devportal.appNameRequired\",\n \"Application name is required\",\n );\n else if (appName.length < 3)\n errs.name = tr(\n \"devportal.nameTooShort\",\n \"Name must be at least 3 characters\",\n );\n if (!builderType)\n errs.builderType = tr(\n \"devportal.appTypeRequired\",\n \"Application type is required\",\n );\n if (!appCategory)\n errs.category = tr(\"devportal.categoryRequired\", \"Category is required\");\n if (!appShortDesc.trim())\n errs.shortDescription = tr(\n \"devportal.shortDescriptionRequired\",\n \"Short description is required\",\n );\n setAppErrors(errs);\n return Object.keys(errs).length === 0;\n };\n\n const handleAppSubmit = async () => {\n if (!validateApp()) return;\n const resolvedType = appTypeForBuilder();\n setAppSubmitError(null);\n try {\n const result = await createApp({\n variables: {\n input: {\n name: appName,\n slug: appSlug || undefined,\n appType: resolvedType,\n category: appCategory || undefined,\n shortDescription: appShortDesc || undefined,\n visibility: \"PRIVATE\",\n developerOrganizationId: createdOrgId || undefined,\n },\n },\n });\n const id = result.data?.createApplication?.id;\n if (id) {\n bus.emit(\"devportal.app.created\", {\n appId: id,\n name: appName,\n appType: resolvedType,\n organizationId: createdOrgId,\n });\n setCreatedAppId(id);\n setCreatedAppType(resolvedType);\n markSetupSeen();\n setStep(\"submit\");\n }\n } catch (err) {\n setAppSubmitError(\n errorMessage(\n err,\n tr(\n \"devportal.onboarding.appCreateFailed\",\n \"We could not create your app. Please try again.\",\n ),\n ),\n );\n }\n };\n\n // ── Step 3: get it ready for review ──────────────────────────\n // Submission itself happens on the app page, which checks the listing\n // requirements reviewers need (ApplicationDetailPage's readiness rules);\n // this step tells the developer what that page will ask for.\n const reviewRequirements = reviewRequirementsFor(createdAppType);\n\n const handleSkip = () => {\n markSetupSeen();\n handleNavigate(\"/\");\n };\n\n // ─── Render ─────────────────────────────────────────────────\n\n return (\n <main className=\"min-h-screen bg-surface-default\">\n {/* Header */}\n <div className=\"border-b border-border-default bg-surface-raised\">\n <div className=\"mx-auto max-w-2xl px-6 py-5\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-9 w-9 items-center justify-center rounded-lg bg-action-primary-bg/10 text-primary\">\n <Rocket size={20} />\n </div>\n <div>\n <p className=\"text-xs font-medium text-text-secondary\">\n {tr(\"devportal.developerPortal\", \"Developer Portal\")}\n </p>\n <h1 className=\"text-base font-semibold text-text-primary\">\n {tr(\"devportal.setup.title\", \"Get set up\")}\n </h1>\n </div>\n </div>\n {step !== \"done\" && (\n <button\n type=\"button\"\n onClick={handleSkip}\n className=\"text-sm text-text-secondary hover:text-text-primary transition-colors\"\n >\n {tr(\"devportal.setup.skipForNow\", \"Skip for now\")}\n </button>\n )}\n </div>\n </div>\n </div>\n\n {/* Content */}\n <div className=\"mx-auto max-w-2xl px-6 py-10\">\n {/* Step indicator */}\n <div className=\"mb-10 flex justify-center\">\n <StepIndicator current={step} />\n </div>\n\n {/* Welcome / purpose — what this wizard sets up and why */}\n {step === \"org\" && (\n <div className=\"mb-8 flex flex-col items-center gap-3 text-center\">\n <Illustration\n name=\"onboarding\"\n alt={tr(\n \"devportal.setup.illustrationAlt\",\n \"Getting started with the developer portal\",\n )}\n size=\"md\"\n />\n <PagePurpose className=\"justify-center\">\n {tr(\n \"devportal.setup.purposeWithReview\",\n \"Three quick steps to start building: create the organization that owns your apps, register your first app, then submit it for review. Your developer profile is created with your organization. You can change everything later.\",\n )}\n </PagePurpose>\n </div>\n )}\n\n {/* ── Step 1: Organization ─────────────────────── */}\n {step === \"org\" && (\n <div className=\"rounded-xl border border-border-default bg-surface-raised p-8 shadow-sm\">\n <div className=\"mb-6 flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-action-primary-bg/10 text-primary\">\n <Building2 size={20} />\n </div>\n <div>\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {tr(\"devportal.setup.orgTitle\", \"Set up your organization\")}\n </h2>\n <p className=\"text-sm text-text-secondary\">\n {tr(\n \"devportal.setup.orgSubtitle\",\n \"This groups your apps and teams under one publisher identity.\",\n )}\n </p>\n </div>\n </div>\n\n <div className=\"space-y-5\">\n <InputField\n label={tr(\"devportal.organizationName\", \"Organization Name\")}\n value={orgName}\n onChange={(e) => {\n setOrgName(e.target.value);\n if (!orgSlug || orgSlug === generateSlug(orgName)) {\n setOrgSlug(generateSlug(e.target.value));\n }\n setOrgErrors((p) => ({ ...p, name: undefined }));\n }}\n placeholder={tr(\n \"devportal.organizationNamePlaceholder\",\n \"Acme Development\",\n )}\n required\n error={orgErrors.name}\n />\n\n <InputField\n label={tr(\"devportal.slug\", \"Slug\")}\n value={orgSlug}\n onChange={(e) => {\n setOrgSlug(e.target.value.toLowerCase());\n setOrgErrors((p) => ({ ...p, slug: undefined }));\n }}\n placeholder=\"acme-dev\"\n required\n error={orgErrors.slug}\n hint={tr(\n \"devportal.slugHint\",\n \"URL-friendly identifier — auto-generated from name\",\n )}\n />\n\n <TextareaField\n label={tr(\"devportal.description\", \"Description\")}\n value={orgDescription}\n onChange={(e) => setOrgDescription(e.target.value)}\n placeholder={tr(\n \"devportal.orgDescriptionPlaceholder\",\n \"Tell us about your organization…\",\n )}\n rows={2}\n />\n\n <EligibilityPanel tr={tr} />\n\n <div>\n <label className=\"flex items-start gap-3 text-sm text-text-primary\">\n <input\n type=\"checkbox\"\n data-testid=\"devportal-setup-accept-agreement\"\n checked={agreementAccepted}\n onChange={(e) => {\n setAgreementAccepted(e.target.checked);\n setOrgErrors((p) => ({ ...p, agreement: undefined }));\n }}\n className=\"mt-0.5 h-4 w-4 shrink-0 rounded border-border-default accent-primary\"\n />\n <span>\n {tr(\n \"devportal.onboarding.agreementLabelPrefix\",\n \"I meet these requirements and accept the\",\n )}{\" \"}\n <a\n href={DEVELOPER_LINKS.developerAgreement}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"font-medium text-primary hover:underline\"\n >\n {tr(\n \"devportal.onboarding.developerAgreement\",\n \"Marketplace & Developer Agreement\",\n )}\n </a>{\" \"}\n {tr(\"devportal.onboarding.and\", \"and the\")}{\" \"}\n <a\n href={DEVELOPER_LINKS.acceptableUsePolicy}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"font-medium text-primary hover:underline\"\n >\n {tr(\n \"devportal.onboarding.acceptableUsePolicy\",\n \"Acceptable Use Policy\",\n )}\n </a>\n .\n </span>\n </label>\n {orgErrors.agreement && (\n <p className=\"mt-1.5 text-xs text-status-error-text\">\n {orgErrors.agreement}\n </p>\n )}\n </div>\n\n {orgSubmitError && (\n <p\n role=\"alert\"\n className=\"rounded-md bg-status-error-bg px-3 py-2 text-sm text-status-error-text\"\n >\n {orgSubmitError}\n </p>\n )}\n </div>\n\n <div className=\"mt-8 flex items-center justify-between border-t border-border-default pt-6\">\n <button\n type=\"button\"\n onClick={handleSkip}\n className=\"text-sm text-text-secondary hover:text-text-primary transition-colors\"\n >\n {tr(\"devportal.setup.skipForNow\", \"Skip for now\")}\n </button>\n <button\n type=\"button\"\n onClick={() => void handleOrgSubmit()}\n disabled={creatingOrg}\n className=\"inline-flex items-center gap-2 rounded-lg bg-action-primary-bg px-5 py-2.5 text-sm font-semibold text-action-primary-text hover:bg-action-primary-bg/90 disabled:opacity-60 transition-colors\"\n >\n {creatingOrg ? (\n <span className=\"h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent\" />\n ) : null}\n {tr(\"devportal.setup.createAndContinue\", \"Create & Continue\")}\n {!creatingOrg && <ChevronRight size={16} />}\n </button>\n </div>\n </div>\n )}\n\n {/* ── Step 2: First app ─────────────────────── */}\n {step === \"app\" && (\n <div className=\"rounded-xl border border-border-default bg-surface-raised p-8 shadow-sm\">\n <div className=\"mb-6 flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-action-primary-bg/10 text-primary\">\n <AppWindow size={20} />\n </div>\n <div>\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {tr(\"devportal.setup.appTitle\", \"Create your first app\")}\n </h2>\n <p className=\"text-sm text-text-secondary\">\n {tr(\n \"devportal.setup.appSubtitle\",\n \"Register the app you want to publish or integrate.\",\n )}\n </p>\n </div>\n </div>\n\n <div className=\"space-y-5\">\n <InputField\n label={tr(\"devportal.applicationName\", \"Application Name\")}\n value={appName}\n onChange={(e) => {\n setAppName(e.target.value);\n if (!appSlug || appSlug === generateSlug(appName)) {\n setAppSlug(generateSlug(e.target.value));\n }\n setAppErrors((p) => ({ ...p, name: undefined }));\n }}\n placeholder={tr(\n \"devportal.applicationNamePlaceholder\",\n \"My Awesome App\",\n )}\n required\n error={appErrors.name}\n />\n\n {/* Builder type picker */}\n <div>\n <p className=\"mb-2 text-sm font-medium text-text-primary\">\n {tr(\"devportal.applicationType\", \"Application Type\")}{\" \"}\n <span className=\"text-status-error-text\">*</span>\n </p>\n <div className=\"grid grid-cols-3 gap-3\">\n <SetupTypeCard\n icon={Box}\n title=\"App\"\n description=\"OAuth integration for the platform\"\n selected={builderType === \"app\"}\n onClick={() => {\n setBuilderType(\"app\");\n setAppErrors((p) => ({ ...p, builderType: undefined }));\n }}\n />\n <SetupTypeCard\n icon={Puzzle}\n title=\"Node\"\n description=\"Custom FluidGrids workflow node\"\n selected={builderType === \"node\"}\n onClick={() => {\n setBuilderType(\"node\");\n setAppErrors((p) => ({ ...p, builderType: undefined }));\n }}\n />\n <SetupTypeCard\n icon={GitFork}\n title=\"Workflow\"\n description=\"Reusable automation template\"\n selected={builderType === \"workflow\"}\n onClick={() => {\n setBuilderType(\"workflow\");\n setAppErrors((p) => ({ ...p, builderType: undefined }));\n }}\n />\n </div>\n {appErrors.builderType && (\n <p className=\"mt-1.5 text-xs text-status-error-text\">\n {appErrors.builderType}\n </p>\n )}\n </div>\n\n <SelectField\n label={tr(\"devportal.category\", \"Category\")}\n value={appCategory}\n onChange={(e) => {\n setAppCategory(e.target.value);\n setAppErrors((p) => ({ ...p, category: undefined }));\n }}\n options={[...APP_CATEGORY_OPTIONS]}\n placeholder={tr(\"devportal.selectCategory\", \"Select category…\")}\n required\n error={appErrors.category}\n />\n\n <TextareaField\n label={tr(\"devportal.shortDescription\", \"Short Description\")}\n value={appShortDesc}\n onChange={(e) => {\n setAppShortDesc(e.target.value);\n setAppErrors((p) => ({ ...p, shortDescription: undefined }));\n }}\n placeholder={tr(\n \"devportal.shortDescriptionPlaceholder\",\n \"A brief description of what your app does\",\n )}\n required\n error={appErrors.shortDescription}\n rows={2}\n hint={`${appShortDesc.length}/200`}\n />\n\n {appSubmitError && (\n <p\n role=\"alert\"\n className=\"rounded-md bg-status-error-bg px-3 py-2 text-sm text-status-error-text\"\n >\n {appSubmitError}\n </p>\n )}\n </div>\n\n <div className=\"mt-8 flex items-center justify-between border-t border-border-default pt-6\">\n <button\n type=\"button\"\n onClick={handleSkip}\n className=\"text-sm text-text-secondary hover:text-text-primary transition-colors\"\n >\n {tr(\"devportal.setup.skipForNow\", \"Skip for now\")}\n </button>\n <button\n type=\"button\"\n onClick={() => void handleAppSubmit()}\n disabled={creatingApp}\n className=\"inline-flex items-center gap-2 rounded-lg bg-action-primary-bg px-5 py-2.5 text-sm font-semibold text-action-primary-text hover:bg-action-primary-bg/90 disabled:opacity-60 transition-colors\"\n >\n {creatingApp ? (\n <span className=\"h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent\" />\n ) : null}\n {tr(\"devportal.setup.createApp\", \"Create App\")}\n {!creatingApp && <ChevronRight size={16} />}\n </button>\n </div>\n </div>\n )}\n\n {/* ── Step 3: Get ready for review ─────────── */}\n {step === \"submit\" && (\n <div className=\"rounded-xl border border-border-default bg-surface-raised p-8 shadow-sm\">\n <div className=\"mb-6 flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-action-primary-bg/10 text-primary\">\n <ListChecks size={20} />\n </div>\n <div>\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {tr(\n \"devportal.onboarding.readyTitle\",\n \"Get it ready for review\",\n )}\n </h2>\n <p className=\"text-sm text-text-secondary\">\n {tr(\n \"devportal.onboarding.readySubtitle\",\n \"Reviewers check every app before it is listed. Your app page walks you through what they need, then you submit it from there. It stays private until it is approved and you publish it.\",\n )}\n </p>\n </div>\n </div>\n\n <ul\n data-testid=\"devportal-setup-review-requirements\"\n className=\"space-y-2\"\n >\n {reviewRequirements.map((item) => (\n <li\n key={item.id}\n className=\"flex items-start gap-3 rounded-md bg-bg-sunken px-4 py-3 text-sm text-text-primary\"\n >\n <Check\n size={16}\n className=\"mt-0.5 shrink-0 text-text-secondary\"\n aria-hidden=\"true\"\n />\n {tr(item.key, item.text)}\n </li>\n ))}\n </ul>\n\n <div className=\"mt-8 flex items-center justify-between border-t border-border-default pt-6\">\n <button\n type=\"button\"\n onClick={() => setStep(\"done\")}\n className=\"text-sm text-text-secondary hover:text-text-primary transition-colors\"\n >\n {tr(\"devportal.onboarding.submitLater\", \"Do this later\")}\n </button>\n <button\n type=\"button\"\n data-testid=\"devportal-setup-finish-app\"\n onClick={() =>\n createdAppId && handleNavigate(`/apps/${createdAppId}`)\n }\n className=\"inline-flex items-center gap-2 rounded-lg bg-action-primary-bg px-5 py-2.5 text-sm font-semibold text-action-primary-text hover:bg-action-primary-bg/90 transition-colors\"\n >\n {tr(\"devportal.onboarding.finishApp\", \"Finish and submit\")}\n <ChevronRight size={16} />\n </button>\n </div>\n </div>\n )}\n\n {/* ── Step 4: Done ─────────────────────────── */}\n {step === \"done\" && (\n <div className=\"text-center\">\n <div className=\"mx-auto mb-6 flex h-16 w-16 items-center justify-center rounded-full bg-action-primary-bg/10 text-primary\">\n <Rocket size={32} />\n </div>\n <h2 className=\"text-2xl font-bold text-text-primary\">\n {tr(\"devportal.setup.doneTitle\", \"You're all set!\")}\n </h2>\n <p className=\"mt-2 text-text-secondary\">\n {tr(\n \"devportal.setup.doneSubtitle\",\n \"Your organization and first app are ready. Here's what to do next.\",\n )}\n </p>\n\n <div className=\"mt-8 grid gap-3 sm:grid-cols-2\">\n {createdAppId && (\n <NextStepCard\n icon={<AppWindow size={20} />}\n title={tr(\"devportal.setup.viewApp\", \"View your app\")}\n description={tr(\n \"devportal.setup.viewAppDesc\",\n \"Configure OAuth, webhooks, and versioning\",\n )}\n onClick={() => handleNavigate(`/apps/${createdAppId}`)}\n primary\n />\n )}\n <NextStepCard\n icon={<Key size={20} />}\n title={tr(\"devportal.setup.generateApiKey\", \"Generate API key\")}\n description={tr(\n \"devportal.setup.generateApiKeyDesc\",\n \"Create credentials to start calling APIs\",\n )}\n onClick={() => handleNavigate(\"/api-keys/new\")}\n />\n <NextStepCard\n icon={<BookOpen size={20} />}\n title={tr(\"devportal.setup.browseDocs\", \"Browse docs\")}\n description={tr(\n \"devportal.setup.browseDocsDesc\",\n \"Learn about publishing, SDKs, and webhooks\",\n )}\n onClick={() => handleNavigate(\"/docs\")}\n />\n <NextStepCard\n icon={<Puzzle size={20} />}\n title={tr(\n \"devportal.onboarding.publishConnector\",\n \"Publish a connector\",\n )}\n description={tr(\n \"devportal.onboarding.publishConnectorDesc\",\n \"List an API-key integration in the Workspaces integrations catalog\",\n )}\n onClick={() =>\n window.open(\n DEVELOPER_LINKS.publishConnector,\n \"_blank\",\n \"noopener,noreferrer\",\n )\n }\n />\n {createdOrgId && (\n <NextStepCard\n icon={<Building2 size={20} />}\n title={tr(\"devportal.setup.inviteTeam\", \"Invite your team\")}\n description={tr(\n \"devportal.setup.inviteTeamDesc\",\n \"Add members to collaborate on your apps\",\n )}\n onClick={() =>\n handleNavigate(`/organizations/${createdOrgId}/members`)\n }\n />\n )}\n </div>\n\n <button\n type=\"button\"\n onClick={() => handleNavigate(\"/\")}\n className=\"mt-8 inline-flex items-center gap-2 text-sm text-text-secondary hover:text-text-primary transition-colors\"\n >\n {tr(\"devportal.setup.goToDashboard\", \"Go to dashboard\")}\n <ArrowRight size={14} />\n </button>\n </div>\n )}\n </div>\n </main>\n );\n};\n\n// ─── Eligibility panel ─────────────────────────────────────────────────────\n\nconst EligibilityPanel: FC<{\n tr: (key: string, fallback: string) => string;\n}> = ({ tr }) => (\n <section\n aria-labelledby=\"devportal-setup-eligibility-title\"\n data-testid=\"devportal-setup-eligibility\"\n className=\"rounded-lg border border-border-subtle bg-bg-sunken p-4\"\n >\n <h3\n id=\"devportal-setup-eligibility-title\"\n className=\"flex items-center gap-2 text-sm font-semibold text-text-primary\"\n >\n <ShieldCheck size={16} className=\"text-primary\" aria-hidden=\"true\" />\n {tr(\"devportal.onboarding.eligibilityTitle\", \"Who can register\")}\n </h3>\n <ul className=\"mt-2 list-disc space-y-1 pl-5 text-sm text-text-secondary\">\n {ELIGIBILITY_RULES.map((rule) => (\n <li key={rule.id}>{tr(rule.key, rule.text)}</li>\n ))}\n </ul>\n </section>\n);\n\n// ─── Setup type card ───────────────────────────────────────────────────────\n\nconst SetupTypeCard: FC<{\n icon: FC<{ size?: number; className?: string }>;\n title: string;\n description: string;\n selected: boolean;\n onClick: () => void;\n}> = ({ icon: Icon, title, description, selected, onClick }) => (\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n \"relative flex flex-col gap-2 rounded-xl border-2 p-4 text-left transition-all hover:border-primary/50 hover:shadow-sm\",\n selected\n ? \"border-primary bg-action-primary-bg/5 shadow-sm\"\n : \"border-border-subtle bg-bg-surface\",\n )}\n >\n {selected && (\n <span className=\"absolute top-3 right-3 flex h-4 w-4 items-center justify-center rounded-full bg-action-primary-bg text-action-primary-text\">\n <Check size={10} />\n </span>\n )}\n <div className=\"flex h-8 w-8 items-center justify-center rounded-lg bg-bg-sunken\">\n <Icon size={18} className=\"text-text-primary\" />\n </div>\n <div>\n <p className=\"text-sm font-semibold text-text-primary\">{title}</p>\n <p className=\"mt-0.5 text-xs text-text-secondary\">{description}</p>\n </div>\n </button>\n);\n\n// ─── Next-step card ────────────────────────────────────────────────────────\n\nconst NextStepCard: FC<{\n icon: React.ReactNode;\n title: string;\n description: string;\n onClick: () => void;\n primary?: boolean;\n}> = ({ icon, title, description, onClick, primary }) => (\n <button\n type=\"button\"\n onClick={onClick}\n className={[\n \"flex items-start gap-4 rounded-xl border p-5 text-left transition-colors\",\n primary\n ? \"border-primary bg-action-primary-bg/5 hover:bg-action-primary-bg/10\"\n : \"border-border-default bg-surface-raised hover:bg-surface-hover\",\n ].join(\" \")}\n >\n <div\n className={[\n \"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg\",\n primary\n ? \"bg-action-primary-bg/20 text-primary\"\n : \"bg-bg-sunken text-text-secondary\",\n ].join(\" \")}\n >\n {icon}\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"font-semibold text-text-primary\">{title}</p>\n <p className=\"mt-0.5 text-sm text-text-secondary\">{description}</p>\n </div>\n <ChevronRight\n size={16}\n className=\"mt-0.5 flex-shrink-0 text-text-secondary\"\n />\n </button>\n);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SetupPage.js","names":["generateSlug","name","errorMessage","err","fallback","markSetupSeen","STEPS","StepIndicator","currentIdx","s","current","isCompleted","idx","isActive","Check","step","SetupPage","useDevportal","useI18n","bus","useDevportalEventBus","tr","v","t","key","handleNavigate","navigate","basePath","path","setStep","useState","createdOrgId","setCreatedOrgId","createdAppId","setCreatedAppId","createdAppType","setCreatedAppType","orgName","setOrgName","orgSlug","setOrgSlug","orgDescription","setOrgDescription","orgErrors","setOrgErrors","agreementAccepted","setAgreementAccepted","orgSubmitError","setOrgSubmitError","createOrg","creatingOrgOnly","useCreateOrganizationMutation","createProfile","creatingProfile","useCreateDeveloperProfileMutation","creatingOrg","createBillingAccountMutation","useCreateBillingAccountMutation","validateOrg","errs","handleOrgSubmit","id","currentUser","DEVELOPER_AGREEMENT_VERSION","DEVELOPER_LINKS","appName","setAppName","appSlug","setAppSlug","builderType","setBuilderType","appCategory","setAppCategory","appShortDesc","setAppShortDesc","appErrors","setAppErrors","appSubmitError","setAppSubmitError","createApp","creatingApp","useCreateApplicationMutation","appTypeForBuilder","validateApp","handleAppSubmit","resolvedType","reviewRequirements","reviewRequirementsFor","handleSkip","Rocket","Illustration","PagePurpose","Building2","InputField","p","TextareaField","EligibilityPanel","ChevronRight","AppWindow","SetupTypeCard","Box","Puzzle","GitFork","SelectField","APP_CATEGORY_OPTIONS","ListChecks","item","NextStepCard","Key","BookOpen","ArrowRight","ShieldCheck","ELIGIBILITY_RULES","rule","Icon","cn","selected","title","description","primary","icon"],"sources":["../../../src/devportal/pages/SetupPage.tsx"],"sourcesContent":["import type { FC } from \"react\";\nimport { useState } from \"react\";\nimport {\n ArrowRight,\n Building2,\n AppWindow,\n Rocket,\n Check,\n Key,\n BookOpen,\n ChevronRight,\n Box,\n Puzzle,\n GitFork,\n ListChecks,\n ShieldCheck,\n} from \"lucide-react\";\nimport { useI18n } from \"@burdenoff/fe-libs/shared/providers/shell/I18nProvider\";\nimport { Illustration, PagePurpose } from \"@burdenoff/fe-libs/ui\";\nimport { APP_CATEGORY_OPTIONS } from \"../constants/appCategories\";\nimport {\n InputField,\n TextareaField,\n SelectField,\n} from \"../components/FormField\";\nimport { useDevportal } from \"../providers/DevportalProvider\";\nimport { useDevportalEventBus } from \"../events\";\nimport { cn } from \"../utils/cn\";\nimport {\n useCreateOrganizationMutation,\n useCreateApplicationMutation,\n useCreateDeveloperProfileMutation,\n} from \"../../generated/global-operations\";\nimport { useCreateBillingAccountMutation } from \"../hooks\";\nimport {\n DEVELOPER_AGREEMENT_VERSION,\n DEVELOPER_LINKS,\n} from \"../constants/developerLinks\";\nimport {\n ELIGIBILITY_RULES,\n reviewRequirementsFor,\n} from \"../utils/developerOnboarding\";\n\ntype SetupStep = \"org\" | \"app\" | \"submit\" | \"done\";\ntype BuilderType = \"app\" | \"node\" | \"workflow\";\n\nfunction generateSlug(name: string): string {\n return name\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-|-$/g, \"\");\n}\n\n/** Readable message from a failed mutation, falling back to a generic one. */\nfunction errorMessage(err: unknown, fallback: string): string {\n if (err instanceof Error && err.message) return err.message;\n return fallback;\n}\n\n/** Mark that the user has interacted with setup so the dashboard gate won't redirect again. */\nfunction markSetupSeen() {\n try {\n localStorage.setItem(\"devportal_setup_dismissed\", \"1\");\n } catch {\n // localStorage unavailable — not critical\n }\n}\n\n// ─── Step indicator ────────────────────────────────────────────────────────\n\nconst STEPS: { key: SetupStep; label: string }[] = [\n { key: \"org\", label: \"Organization\" },\n { key: \"app\", label: \"First app\" },\n { key: \"submit\", label: \"Submit\" },\n { key: \"done\", label: \"Done\" },\n];\n\nconst StepIndicator: FC<{ current: SetupStep }> = ({ current }) => {\n const currentIdx = STEPS.findIndex((s) => s.key === current);\n return (\n <div className=\"flex items-center gap-0\">\n {STEPS.map((step, idx) => {\n const isCompleted = idx < currentIdx;\n const isActive = idx === currentIdx;\n return (\n <div key={step.key} className=\"flex items-center\">\n <div className=\"flex flex-col items-center gap-1.5\">\n <div\n className={[\n \"flex h-8 w-8 items-center justify-center rounded-full text-sm font-semibold transition-colors\",\n isCompleted\n ? \"bg-action-primary-bg text-action-primary-text\"\n : isActive\n ? \"bg-action-primary-bg text-action-primary-text ring-4 ring-primary/20\"\n : \"bg-bg-sunken text-text-secondary\",\n ].join(\" \")}\n >\n {isCompleted ? <Check size={14} /> : idx + 1}\n </div>\n <span\n className={[\n \"text-xs font-medium whitespace-nowrap\",\n isActive ? \"text-text-primary\" : \"text-text-secondary\",\n ].join(\" \")}\n >\n {step.label}\n </span>\n </div>\n {idx < STEPS.length - 1 && (\n <div\n className={[\n \"mx-3 mb-5 h-px w-16 flex-shrink-0 transition-colors\",\n idx < currentIdx ? \"bg-action-primary-bg\" : \"bg-border\",\n ].join(\" \")}\n />\n )}\n </div>\n );\n })}\n </div>\n );\n};\n\n// ─── Main component ────────────────────────────────────────────────────────\n\nexport const SetupPage: FC = () => {\n const { navigate, basePath, currentUser } = useDevportal();\n const { t } = useI18n();\n const bus = useDevportalEventBus();\n const tr = (key: string, fallback: string): string => {\n const v = t(key);\n return v === key ? fallback : v;\n };\n\n const handleNavigate = (path: string) => navigate?.(`${basePath}${path}`);\n\n const [step, setStep] = useState<SetupStep>(\"org\");\n\n // IDs created during wizard — carried forward for success CTAs\n const [createdOrgId, setCreatedOrgId] = useState<string | null>(null);\n const [createdAppId, setCreatedAppId] = useState<string | null>(null);\n const [createdAppType, setCreatedAppType] = useState<string | null>(null);\n\n // ── Step 1: org ──────────────────────────────────────────────\n const [orgName, setOrgName] = useState(\"\");\n const [orgSlug, setOrgSlug] = useState(\"\");\n const [orgDescription, setOrgDescription] = useState(\"\");\n const [orgErrors, setOrgErrors] = useState<{\n name?: string;\n slug?: string;\n agreement?: string;\n }>({});\n const [agreementAccepted, setAgreementAccepted] = useState(false);\n const [orgSubmitError, setOrgSubmitError] = useState<string | null>(null);\n\n const [createOrg, { loading: creatingOrgOnly }] =\n useCreateOrganizationMutation();\n const [createProfile, { loading: creatingProfile }] =\n useCreateDeveloperProfileMutation();\n const creatingOrg = creatingOrgOnly || creatingProfile;\n const [createBillingAccountMutation] = useCreateBillingAccountMutation();\n\n const validateOrg = () => {\n const errs: { name?: string; slug?: string; agreement?: string } = {};\n if (!orgName.trim())\n errs.name = tr(\n \"devportal.orgNameRequired\",\n \"Organization name is required\",\n );\n else if (orgName.length < 2)\n errs.name = tr(\n \"devportal.orgNameTooShort\",\n \"Name must be at least 2 characters\",\n );\n if (!orgSlug.trim())\n errs.slug = tr(\"devportal.slugRequired\", \"Slug is required\");\n else if (!/^[a-z0-9-]+$/.test(orgSlug))\n errs.slug = tr(\n \"devportal.slugInvalid\",\n \"Lowercase letters, numbers, and hyphens only\",\n );\n if (!agreementAccepted)\n errs.agreement = tr(\n \"devportal.onboarding.agreementRequired\",\n \"Accept the Developer Agreement to continue\",\n );\n setOrgErrors(errs);\n return Object.keys(errs).length === 0;\n };\n\n const handleOrgSubmit = async () => {\n if (!validateOrg()) return;\n setOrgSubmitError(null);\n try {\n // The developer profile is the personal half of the registration: the\n // backend returns the existing one when it is already there, so this is\n // safe to repeat on a retry.\n await createProfile({\n variables: { input: { companyName: orgName } },\n });\n const result = await createOrg({\n variables: {\n input: {\n name: orgName,\n slug: orgSlug || undefined,\n description: orgDescription || undefined,\n contactEmail: currentUser?.email || undefined,\n metadata: {\n developerAgreement: {\n version: DEVELOPER_AGREEMENT_VERSION,\n url: DEVELOPER_LINKS.developerAgreement,\n acceptedAt: new Date().toISOString(),\n acceptedBy: currentUser?.id ?? null,\n },\n registrationSource: \"devportal-setup\",\n },\n },\n },\n });\n const id = result.data?.createDeveloperOrganization?.id;\n if (id) {\n bus.emit(\"devportal.org.created\", {\n organizationId: id,\n name: orgName,\n });\n setCreatedOrgId(id);\n // Fire-and-forget: create a billing account for the new org\n try {\n createBillingAccountMutation({\n variables: {\n input: {\n name: orgName,\n email: currentUser?.email ?? \"\",\n },\n },\n }).catch(() => {});\n } catch {\n // silent failure — billing account creation is non-blocking\n }\n setStep(\"app\");\n }\n } catch (err) {\n setOrgSubmitError(\n errorMessage(\n err,\n tr(\n \"devportal.onboarding.orgCreateFailed\",\n \"We could not create your organization. Please try again.\",\n ),\n ),\n );\n }\n };\n\n // ── Step 2: app ──────────────────────────────────────────────\n const [appName, setAppName] = useState(\"\");\n const [appSlug, setAppSlug] = useState(\"\");\n const [builderType, setBuilderType] = useState<BuilderType | null>(null);\n const [appCategory, setAppCategory] = useState(\"\");\n const [appShortDesc, setAppShortDesc] = useState(\"\");\n const [appErrors, setAppErrors] = useState<{\n name?: string;\n builderType?: string;\n category?: string;\n shortDescription?: string;\n }>({});\n\n const [appSubmitError, setAppSubmitError] = useState<string | null>(null);\n const [createApp, { loading: creatingApp }] = useCreateApplicationMutation();\n\n const appTypeForBuilder = () => {\n if (builderType === \"node\") return \"NODE\" as const;\n if (builderType === \"workflow\") return \"WORKFLOW\" as const;\n return \"API_INTEGRATION\" as const;\n };\n\n const validateApp = () => {\n const errs: typeof appErrors = {};\n if (!appName.trim())\n errs.name = tr(\n \"devportal.appNameRequired\",\n \"Application name is required\",\n );\n else if (appName.length < 3)\n errs.name = tr(\n \"devportal.nameTooShort\",\n \"Name must be at least 3 characters\",\n );\n if (!builderType)\n errs.builderType = tr(\n \"devportal.appTypeRequired\",\n \"Application type is required\",\n );\n if (!appCategory)\n errs.category = tr(\"devportal.categoryRequired\", \"Category is required\");\n if (!appShortDesc.trim())\n errs.shortDescription = tr(\n \"devportal.shortDescriptionRequired\",\n \"Short description is required\",\n );\n setAppErrors(errs);\n return Object.keys(errs).length === 0;\n };\n\n const handleAppSubmit = async () => {\n if (!validateApp()) return;\n const resolvedType = appTypeForBuilder();\n setAppSubmitError(null);\n try {\n const result = await createApp({\n variables: {\n input: {\n name: appName,\n slug: appSlug || undefined,\n appType: resolvedType,\n category: appCategory || undefined,\n shortDescription: appShortDesc || undefined,\n visibility: \"PRIVATE\",\n developerOrganizationId: createdOrgId || undefined,\n },\n },\n });\n const id = result.data?.createApplication?.id;\n if (id) {\n bus.emit(\"devportal.app.created\", {\n appId: id,\n name: appName,\n appType: resolvedType,\n organizationId: createdOrgId,\n });\n setCreatedAppId(id);\n setCreatedAppType(resolvedType);\n markSetupSeen();\n setStep(\"submit\");\n }\n } catch (err) {\n setAppSubmitError(\n errorMessage(\n err,\n tr(\n \"devportal.onboarding.appCreateFailed\",\n \"We could not create your app. Please try again.\",\n ),\n ),\n );\n }\n };\n\n // ── Step 3: get it ready for review ──────────────────────────\n // Submission itself happens on the app page, which checks the listing\n // requirements reviewers need (ApplicationDetailPage's readiness rules);\n // this step tells the developer what that page will ask for.\n const reviewRequirements = reviewRequirementsFor(createdAppType);\n\n const handleSkip = () => {\n markSetupSeen();\n handleNavigate(\"/\");\n };\n\n // ─── Render ─────────────────────────────────────────────────\n\n return (\n <main className=\"min-h-screen bg-surface-default\">\n {/* Header */}\n <div className=\"border-b border-border-default bg-surface-raised\">\n <div className=\"mx-auto max-w-2xl px-6 py-5\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-9 w-9 items-center justify-center rounded-lg bg-action-primary-bg/10 text-primary\">\n <Rocket size={20} />\n </div>\n <div>\n <p className=\"text-xs font-medium text-text-secondary\">\n {tr(\"devportal.developerPortal\", \"Developer Portal\")}\n </p>\n <h1 className=\"text-base font-semibold text-text-primary\">\n {tr(\"devportal.setup.title\", \"Get set up\")}\n </h1>\n </div>\n </div>\n {step !== \"done\" && (\n <button\n type=\"button\"\n onClick={handleSkip}\n className=\"text-sm text-text-secondary hover:text-text-primary transition-colors\"\n >\n {tr(\"devportal.setup.skipForNow\", \"Skip for now\")}\n </button>\n )}\n </div>\n </div>\n </div>\n\n {/* Content */}\n <div className=\"mx-auto max-w-2xl px-6 py-10\">\n {/* Step indicator */}\n <div className=\"mb-10 flex justify-center\">\n <StepIndicator current={step} />\n </div>\n\n {/* Welcome / purpose — what this wizard sets up and why */}\n {step === \"org\" && (\n <div className=\"mb-8 flex flex-col items-center gap-3 text-center\">\n <Illustration\n name=\"onboarding\"\n alt={tr(\n \"devportal.setup.illustrationAlt\",\n \"Getting started with the developer portal\",\n )}\n size=\"md\"\n />\n <PagePurpose className=\"justify-center\">\n {tr(\n \"devportal.setup.purposeWithReview\",\n \"Three quick steps to start building: create the organization that owns your apps, register your first app, then submit it for review. Your developer profile is created with your organization. You can change everything later.\",\n )}\n </PagePurpose>\n </div>\n )}\n\n {/* ── Step 1: Organization ─────────────────────── */}\n {step === \"org\" && (\n <div className=\"rounded-xl border border-border-default bg-surface-raised p-8 shadow-sm\">\n <div className=\"mb-6 flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-action-primary-bg/10 text-primary\">\n <Building2 size={20} />\n </div>\n <div>\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {tr(\"devportal.setup.orgTitle\", \"Set up your organization\")}\n </h2>\n <p className=\"text-sm text-text-secondary\">\n {tr(\n \"devportal.setup.orgSubtitle\",\n \"This groups your apps and teams under one publisher identity.\",\n )}\n </p>\n </div>\n </div>\n\n <div className=\"space-y-5\">\n <InputField\n label={tr(\"devportal.organizationName\", \"Organization Name\")}\n value={orgName}\n onChange={(e) => {\n setOrgName(e.target.value);\n if (!orgSlug || orgSlug === generateSlug(orgName)) {\n setOrgSlug(generateSlug(e.target.value));\n }\n setOrgErrors((p) => ({ ...p, name: undefined }));\n }}\n placeholder={tr(\n \"devportal.organizationNamePlaceholder\",\n \"Acme Development\",\n )}\n required\n error={orgErrors.name}\n />\n\n <InputField\n label={tr(\"devportal.slug\", \"Slug\")}\n value={orgSlug}\n onChange={(e) => {\n setOrgSlug(e.target.value.toLowerCase());\n setOrgErrors((p) => ({ ...p, slug: undefined }));\n }}\n placeholder=\"acme-dev\"\n required\n error={orgErrors.slug}\n hint={tr(\n \"devportal.slugHint\",\n \"URL-friendly identifier — auto-generated from name\",\n )}\n />\n\n <TextareaField\n label={tr(\"devportal.description\", \"Description\")}\n value={orgDescription}\n onChange={(e) => setOrgDescription(e.target.value)}\n placeholder={tr(\n \"devportal.orgDescriptionPlaceholder\",\n \"Tell us about your organization…\",\n )}\n rows={2}\n />\n\n <EligibilityPanel tr={tr} />\n\n <div>\n <label className=\"flex items-start gap-3 text-sm text-text-primary\">\n <input\n type=\"checkbox\"\n data-testid=\"devportal-setup-accept-agreement\"\n checked={agreementAccepted}\n onChange={(e) => {\n setAgreementAccepted(e.target.checked);\n setOrgErrors((p) => ({ ...p, agreement: undefined }));\n }}\n className=\"mt-0.5 h-4 w-4 shrink-0 rounded border-border-default accent-primary\"\n />\n <span>\n {tr(\n \"devportal.onboarding.agreementLabelPrefix\",\n \"I meet these requirements and accept the\",\n )}{\" \"}\n <a\n href={DEVELOPER_LINKS.developerAgreement}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"font-medium text-primary hover:underline\"\n >\n {tr(\n \"devportal.onboarding.developerAgreement\",\n \"Marketplace & Developer Agreement\",\n )}\n </a>{\" \"}\n {tr(\"devportal.onboarding.and\", \"and the\")}{\" \"}\n <a\n href={DEVELOPER_LINKS.acceptableUsePolicy}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"font-medium text-primary hover:underline\"\n >\n {tr(\n \"devportal.onboarding.acceptableUsePolicy\",\n \"Acceptable Use Policy\",\n )}\n </a>\n .\n </span>\n </label>\n {orgErrors.agreement && (\n <p className=\"mt-1.5 text-xs text-status-error-text\">\n {orgErrors.agreement}\n </p>\n )}\n </div>\n\n {orgSubmitError && (\n <p\n role=\"alert\"\n className=\"rounded-md bg-status-error-bg px-3 py-2 text-sm text-status-error-text\"\n >\n {orgSubmitError}\n </p>\n )}\n </div>\n\n <div className=\"mt-8 flex items-center justify-between border-t border-border-default pt-6\">\n <button\n type=\"button\"\n onClick={handleSkip}\n className=\"text-sm text-text-secondary hover:text-text-primary transition-colors\"\n >\n {tr(\"devportal.setup.skipForNow\", \"Skip for now\")}\n </button>\n <button\n type=\"button\"\n onClick={() => void handleOrgSubmit()}\n disabled={creatingOrg}\n className=\"inline-flex items-center gap-2 rounded-lg bg-action-primary-bg px-5 py-2.5 text-sm font-semibold text-action-primary-text hover:bg-action-primary-bg/90 disabled:opacity-60 transition-colors\"\n >\n {creatingOrg ? (\n <span className=\"h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent\" />\n ) : null}\n {tr(\"devportal.setup.createAndContinue\", \"Create & Continue\")}\n {!creatingOrg && <ChevronRight size={16} />}\n </button>\n </div>\n </div>\n )}\n\n {/* ── Step 2: First app ─────────────────────── */}\n {step === \"app\" && (\n <div className=\"rounded-xl border border-border-default bg-surface-raised p-8 shadow-sm\">\n <div className=\"mb-6 flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-action-primary-bg/10 text-primary\">\n <AppWindow size={20} />\n </div>\n <div>\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {tr(\"devportal.setup.appTitle\", \"Create your first app\")}\n </h2>\n <p className=\"text-sm text-text-secondary\">\n {tr(\n \"devportal.setup.appSubtitle\",\n \"Register the app you want to publish or integrate.\",\n )}\n </p>\n </div>\n </div>\n\n <div className=\"space-y-5\">\n <InputField\n label={tr(\"devportal.applicationName\", \"Application Name\")}\n value={appName}\n onChange={(e) => {\n setAppName(e.target.value);\n if (!appSlug || appSlug === generateSlug(appName)) {\n setAppSlug(generateSlug(e.target.value));\n }\n setAppErrors((p) => ({ ...p, name: undefined }));\n }}\n placeholder={tr(\n \"devportal.applicationNamePlaceholder\",\n \"My Awesome App\",\n )}\n required\n error={appErrors.name}\n />\n\n {/* Builder type picker */}\n <div>\n <p className=\"mb-2 text-sm font-medium text-text-primary\">\n {tr(\"devportal.applicationType\", \"Application Type\")}{\" \"}\n <span className=\"text-status-error-text\">*</span>\n </p>\n <div className=\"grid grid-cols-3 gap-3\">\n <SetupTypeCard\n icon={Box}\n title=\"App\"\n description=\"OAuth integration for the platform\"\n selected={builderType === \"app\"}\n onClick={() => {\n setBuilderType(\"app\");\n setAppErrors((p) => ({ ...p, builderType: undefined }));\n }}\n />\n <SetupTypeCard\n icon={Puzzle}\n title=\"Node\"\n description=\"Custom FluidGrids workflow node\"\n selected={builderType === \"node\"}\n onClick={() => {\n setBuilderType(\"node\");\n setAppErrors((p) => ({ ...p, builderType: undefined }));\n }}\n />\n <SetupTypeCard\n icon={GitFork}\n title=\"Workflow\"\n description=\"Reusable automation template\"\n selected={builderType === \"workflow\"}\n onClick={() => {\n setBuilderType(\"workflow\");\n setAppErrors((p) => ({ ...p, builderType: undefined }));\n }}\n />\n </div>\n {appErrors.builderType && (\n <p className=\"mt-1.5 text-xs text-status-error-text\">\n {appErrors.builderType}\n </p>\n )}\n </div>\n\n <SelectField\n label={tr(\"devportal.category\", \"Category\")}\n value={appCategory}\n onChange={(e) => {\n setAppCategory(e.target.value);\n setAppErrors((p) => ({ ...p, category: undefined }));\n }}\n options={[...APP_CATEGORY_OPTIONS]}\n placeholder={tr(\"devportal.selectCategory\", \"Select category…\")}\n required\n error={appErrors.category}\n />\n\n <TextareaField\n label={tr(\"devportal.shortDescription\", \"Short Description\")}\n value={appShortDesc}\n onChange={(e) => {\n setAppShortDesc(e.target.value);\n setAppErrors((p) => ({ ...p, shortDescription: undefined }));\n }}\n placeholder={tr(\n \"devportal.shortDescriptionPlaceholder\",\n \"A brief description of what your app does\",\n )}\n required\n error={appErrors.shortDescription}\n rows={2}\n hint={`${appShortDesc.length}/200`}\n />\n\n {appSubmitError && (\n <p\n role=\"alert\"\n className=\"rounded-md bg-status-error-bg px-3 py-2 text-sm text-status-error-text\"\n >\n {appSubmitError}\n </p>\n )}\n </div>\n\n <div className=\"mt-8 flex items-center justify-between border-t border-border-default pt-6\">\n <button\n type=\"button\"\n onClick={handleSkip}\n className=\"text-sm text-text-secondary hover:text-text-primary transition-colors\"\n >\n {tr(\"devportal.setup.skipForNow\", \"Skip for now\")}\n </button>\n <button\n type=\"button\"\n onClick={() => void handleAppSubmit()}\n disabled={creatingApp}\n className=\"inline-flex items-center gap-2 rounded-lg bg-action-primary-bg px-5 py-2.5 text-sm font-semibold text-action-primary-text hover:bg-action-primary-bg/90 disabled:opacity-60 transition-colors\"\n >\n {creatingApp ? (\n <span className=\"h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent\" />\n ) : null}\n {tr(\"devportal.setup.createApp\", \"Create App\")}\n {!creatingApp && <ChevronRight size={16} />}\n </button>\n </div>\n </div>\n )}\n\n {/* ── Step 3: Get ready for review ─────────── */}\n {step === \"submit\" && (\n <div className=\"rounded-xl border border-border-default bg-surface-raised p-8 shadow-sm\">\n <div className=\"mb-6 flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-action-primary-bg/10 text-primary\">\n <ListChecks size={20} />\n </div>\n <div>\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {tr(\n \"devportal.onboarding.readyTitle\",\n \"Get it ready for review\",\n )}\n </h2>\n <p className=\"text-sm text-text-secondary\">\n {tr(\n \"devportal.onboarding.readySubtitle\",\n \"Reviewers check every app before it is listed. Your app page walks you through what they need, then you submit it from there. It stays private until it is approved and you publish it.\",\n )}\n </p>\n </div>\n </div>\n\n <ul\n data-testid=\"devportal-setup-review-requirements\"\n className=\"space-y-2\"\n >\n {reviewRequirements.map((item) => (\n <li\n key={item.id}\n className=\"flex items-start gap-3 rounded-md bg-bg-sunken px-4 py-3 text-sm text-text-primary\"\n >\n <Check\n size={16}\n className=\"mt-0.5 shrink-0 text-text-secondary\"\n aria-hidden=\"true\"\n />\n {tr(item.key, item.text)}\n </li>\n ))}\n </ul>\n\n <div className=\"mt-8 flex items-center justify-between border-t border-border-default pt-6\">\n <button\n type=\"button\"\n onClick={() => setStep(\"done\")}\n className=\"text-sm text-text-secondary hover:text-text-primary transition-colors\"\n >\n {tr(\"devportal.onboarding.submitLater\", \"Do this later\")}\n </button>\n <button\n type=\"button\"\n data-testid=\"devportal-setup-finish-app\"\n onClick={() =>\n createdAppId && handleNavigate(`/apps/${createdAppId}`)\n }\n className=\"inline-flex items-center gap-2 rounded-lg bg-action-primary-bg px-5 py-2.5 text-sm font-semibold text-action-primary-text hover:bg-action-primary-bg/90 transition-colors\"\n >\n {tr(\"devportal.onboarding.finishApp\", \"Finish and submit\")}\n <ChevronRight size={16} />\n </button>\n </div>\n </div>\n )}\n\n {/* ── Step 4: Done ─────────────────────────── */}\n {step === \"done\" && (\n <div className=\"text-center\">\n <div className=\"mx-auto mb-6 flex h-16 w-16 items-center justify-center rounded-full bg-action-primary-bg/10 text-primary\">\n <Rocket size={32} />\n </div>\n <h2 className=\"text-2xl font-bold text-text-primary\">\n {tr(\"devportal.setup.doneTitle\", \"You're all set!\")}\n </h2>\n <p className=\"mt-2 text-text-secondary\">\n {tr(\n \"devportal.setup.doneSubtitle\",\n \"Your organization and first app are ready. Here's what to do next.\",\n )}\n </p>\n\n <div className=\"mt-8 grid gap-3 sm:grid-cols-2\">\n {createdAppId && (\n <NextStepCard\n icon={<AppWindow size={20} />}\n title={tr(\"devportal.setup.viewApp\", \"View your app\")}\n description={tr(\n \"devportal.setup.viewAppDesc\",\n \"Configure OAuth, webhooks, and versioning\",\n )}\n onClick={() => handleNavigate(`/apps/${createdAppId}`)}\n primary\n />\n )}\n <NextStepCard\n icon={<Key size={20} />}\n title={tr(\"devportal.setup.generateApiKey\", \"Generate API key\")}\n description={tr(\n \"devportal.setup.generateApiKeyDesc\",\n \"Create credentials to start calling APIs\",\n )}\n onClick={() => handleNavigate(\"/api-keys/new\")}\n />\n <NextStepCard\n icon={<BookOpen size={20} />}\n title={tr(\"devportal.setup.browseDocs\", \"Browse docs\")}\n description={tr(\n \"devportal.setup.browseDocsDesc\",\n \"Learn about publishing, SDKs, and webhooks\",\n )}\n onClick={() => handleNavigate(\"/docs\")}\n />\n <NextStepCard\n icon={<Puzzle size={20} />}\n title={tr(\n \"devportal.onboarding.publishConnector\",\n \"Publish a connector\",\n )}\n description={tr(\n \"devportal.onboarding.publishConnectorDesc\",\n \"List an API-key integration in the Workspaces integrations catalog\",\n )}\n onClick={() =>\n window.open(\n DEVELOPER_LINKS.publishConnector,\n \"_blank\",\n \"noopener,noreferrer\",\n )\n }\n />\n {createdOrgId && (\n <NextStepCard\n icon={<Building2 size={20} />}\n title={tr(\"devportal.setup.inviteTeam\", \"Invite your team\")}\n description={tr(\n \"devportal.setup.inviteTeamDesc\",\n \"Add members to collaborate on your apps\",\n )}\n onClick={() =>\n handleNavigate(`/organizations/${createdOrgId}/members`)\n }\n />\n )}\n </div>\n\n <button\n type=\"button\"\n onClick={() => handleNavigate(\"/\")}\n className=\"mt-8 inline-flex items-center gap-2 text-sm text-text-secondary hover:text-text-primary transition-colors\"\n >\n {tr(\"devportal.setup.goToDashboard\", \"Go to dashboard\")}\n <ArrowRight size={14} />\n </button>\n </div>\n )}\n </div>\n </main>\n );\n};\n\n// ─── Eligibility panel ─────────────────────────────────────────────────────\n\nconst EligibilityPanel: FC<{\n tr: (key: string, fallback: string) => string;\n}> = ({ tr }) => (\n <section\n aria-labelledby=\"devportal-setup-eligibility-title\"\n data-testid=\"devportal-setup-eligibility\"\n className=\"rounded-lg border border-border-subtle bg-bg-sunken p-4\"\n >\n <h3\n id=\"devportal-setup-eligibility-title\"\n className=\"flex items-center gap-2 text-sm font-semibold text-text-primary\"\n >\n <ShieldCheck size={16} className=\"text-primary\" aria-hidden=\"true\" />\n {tr(\"devportal.onboarding.eligibilityTitle\", \"Who can register\")}\n </h3>\n <ul className=\"mt-2 list-disc space-y-1 pl-5 text-sm text-text-secondary\">\n {ELIGIBILITY_RULES.map((rule) => (\n <li key={rule.id}>{tr(rule.key, rule.text)}</li>\n ))}\n </ul>\n </section>\n);\n\n// ─── Setup type card ───────────────────────────────────────────────────────\n\nconst SetupTypeCard: FC<{\n icon: FC<{ size?: number; className?: string }>;\n title: string;\n description: string;\n selected: boolean;\n onClick: () => void;\n}> = ({ icon: Icon, title, description, selected, onClick }) => (\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n \"relative flex flex-col gap-2 rounded-xl border-2 p-4 text-left transition-all hover:border-primary/50 hover:shadow-sm\",\n selected\n ? \"border-primary bg-action-primary-bg/5 shadow-sm\"\n : \"border-border-subtle bg-bg-surface\",\n )}\n >\n {selected && (\n <span className=\"absolute top-3 right-3 flex h-4 w-4 items-center justify-center rounded-full bg-action-primary-bg text-action-primary-text\">\n <Check size={10} />\n </span>\n )}\n <div className=\"flex h-8 w-8 items-center justify-center rounded-lg bg-bg-sunken\">\n <Icon size={18} className=\"text-text-primary\" />\n </div>\n <div>\n <p className=\"text-sm font-semibold text-text-primary\">{title}</p>\n <p className=\"mt-0.5 text-xs text-text-secondary\">{description}</p>\n </div>\n </button>\n);\n\n// ─── Next-step card ────────────────────────────────────────────────────────\n\nconst NextStepCard: FC<{\n icon: React.ReactNode;\n title: string;\n description: string;\n onClick: () => void;\n primary?: boolean;\n}> = ({ icon, title, description, onClick, primary }) => (\n <button\n type=\"button\"\n onClick={onClick}\n className={[\n \"flex items-start gap-4 rounded-xl border p-5 text-left transition-colors\",\n primary\n ? \"border-primary bg-action-primary-bg/5 hover:bg-action-primary-bg/10\"\n : \"border-border-default bg-surface-raised hover:bg-surface-hover\",\n ].join(\" \")}\n >\n <div\n className={[\n \"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg\",\n primary\n ? \"bg-action-primary-bg/20 text-primary\"\n : \"bg-bg-sunken text-text-secondary\",\n ].join(\" \")}\n >\n {icon}\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"font-semibold text-text-primary\">{title}</p>\n <p className=\"mt-0.5 text-sm text-text-secondary\">{description}</p>\n </div>\n <ChevronRight\n size={16}\n className=\"mt-0.5 flex-shrink-0 text-text-secondary\"\n />\n </button>\n);\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { useDevportalEventBus as e } from "../events/index.js";
|
|
2
|
+
import { useTr as t } from "../utils/i18n.js";
|
|
3
3
|
import { useDevportalPermission as n } from "../hooks/usePermission.js";
|
|
4
4
|
import "../hooks/index.js";
|
|
5
5
|
import { DEVPORTAL_PERMISSIONS as r } from "../constants/permissions.js";
|
|
@@ -9,7 +9,7 @@ import { useNavigate as p, useParams as m } from "react-router";
|
|
|
9
9
|
import { jsx as h, jsxs as g } from "react/jsx-runtime";
|
|
10
10
|
import { IllustratedEmptyState as re, PagePurpose as ie } from "@burdenoff/fe-libs/ui";
|
|
11
11
|
import { graphqlFetch as _ } from "@burdenoff/fe-libs/shared/graphql";
|
|
12
|
-
|
|
12
|
+
// src/devportal/pages/StoreSubmissionPage.tsx
|
|
13
13
|
var v = "\n query DevportalAppForSubmission($id: ID!) {\n application(id: $id) {\n id\n name\n slug\n status\n appType\n reviewStatus\n reviewNotes\n iconUrl\n submittedAt\n metadata\n versions {\n edges {\n node {\n id\n version\n status\n releaseNotes\n packageUrl\n }\n }\n }\n }\n }\n", y = "\n mutation DevportalSubmitForReview($id: ID!, $notes: String) {\n submitApplicationForReview(id: $id, notes: $notes) {\n id\n status\n submittedAt\n metadata\n }\n }\n", b = "\n mutation DevportalUnlistProduct($id: ID!) {\n unlistProduct(id: $id) {\n id\n status\n }\n }\n", x = "\n mutation DevportalPublishVersion($id: ID!) {\n publishApplicationVersion(id: $id) {\n id\n status\n }\n }\n";
|
|
14
14
|
function S(e) {
|
|
15
15
|
if (!e) return null;
|
|
@@ -64,7 +64,7 @@ var C = {
|
|
|
64
64
|
tone: "text-text-tertiary"
|
|
65
65
|
}
|
|
66
66
|
}, w = () => {
|
|
67
|
-
let { appId: w } = m(), T = p(), E =
|
|
67
|
+
let { appId: w } = m(), T = p(), E = e(), D = t(), O = n(r.APP_SUBMIT), [k, ae] = a(null), [A, j] = a(!0), [M, N] = a(null), [P, F] = a(!1), [I, L] = a(!1), [R, z] = a(!1), [B, V] = a(null), [H, U] = a(""), W = async () => {
|
|
68
68
|
if (w) {
|
|
69
69
|
j(!0), N(null);
|
|
70
70
|
try {
|
|
@@ -507,7 +507,6 @@ var C = {
|
|
|
507
507
|
]
|
|
508
508
|
});
|
|
509
509
|
};
|
|
510
|
-
//#endregion
|
|
511
510
|
export { w as StoreSubmissionPage };
|
|
512
511
|
|
|
513
512
|
//# sourceMappingURL=StoreSubmissionPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StoreSubmissionPage.js","names":[],"sources":["../../../src/devportal/pages/StoreSubmissionPage.tsx"],"sourcesContent":["import type { FC } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport { useNavigate, useParams } from \"react-router\";\nimport {\n ArrowLeft,\n CheckCircle2,\n Clock,\n RefreshCw,\n XCircle,\n AlertTriangle,\n Store as StoreIcon,\n EyeOff,\n Package,\n GitBranch,\n} from \"lucide-react\";\nimport { graphqlFetch } from \"@burdenoff/fe-libs/shared/graphql\";\nimport { IllustratedEmptyState, PagePurpose } from \"@burdenoff/fe-libs/ui\";\nimport { useDevportalEventBus } from \"../events\";\nimport { useTr } from \"../utils/i18n\";\nimport { useDevportalPermission } from \"../hooks\";\nimport { DEVPORTAL_PERMISSIONS } from \"../constants/permissions\";\n\ntype SubmissionStatus =\n | \"DRAFT\"\n | \"PENDING_REVIEW\"\n | \"PUBLISHED\"\n | \"UNLISTED\"\n | \"REJECTED\"\n | \"UNKNOWN\";\n\ntype StoreSubmission = {\n productId: string;\n status: SubmissionStatus;\n submittedAt: string | null;\n reviewedAt: string | null;\n publishedAt: string | null;\n reviewNotes: string | null;\n rejectedReason: string | null;\n};\n\ntype ApplicationVersion = {\n id: string;\n version: string;\n status: string;\n releaseNotes: string | null;\n packageUrl: string | null;\n};\n\ntype Application = {\n id: string;\n name: string;\n slug: string;\n status: string;\n appType: string;\n reviewStatus: string;\n reviewNotes: string | null;\n iconUrl: string | null;\n submittedAt: string | null;\n metadata: Record<string, unknown> | null;\n versions: { edges: { node: ApplicationVersion }[] };\n};\n\nconst APP_QUERY = /* GraphQL */ `\n query DevportalAppForSubmission($id: ID!) {\n application(id: $id) {\n id\n name\n slug\n status\n appType\n reviewStatus\n reviewNotes\n iconUrl\n submittedAt\n metadata\n versions {\n edges {\n node {\n id\n version\n status\n releaseNotes\n packageUrl\n }\n }\n }\n }\n }\n`;\n\nconst SUBMIT_MUTATION = /* GraphQL */ `\n mutation DevportalSubmitForReview($id: ID!, $notes: String) {\n submitApplicationForReview(id: $id, notes: $notes) {\n id\n status\n submittedAt\n metadata\n }\n }\n`;\n\nconst UNLIST_MUTATION = /* GraphQL */ `\n mutation DevportalUnlistProduct($id: ID!) {\n unlistProduct(id: $id) {\n id\n status\n }\n }\n`;\n\nconst PUBLISH_VERSION_MUTATION = /* GraphQL */ `\n mutation DevportalPublishVersion($id: ID!) {\n publishApplicationVersion(id: $id) {\n id\n status\n }\n }\n`;\n\nfunction inferSubmission(app: Application | null): StoreSubmission | null {\n if (!app) return null;\n const metadata = (app.metadata ?? {}) as Record<string, unknown>;\n const productId =\n typeof metadata.storeProductId === \"string\" ? metadata.storeProductId : \"\";\n\n // Prefer metadata status (most accurate), but fall back to app.status so the\n // page reflects reality even when the metadata write failed after submission.\n const rawMetaStatus =\n typeof metadata.storeSubmissionStatus === \"string\"\n ? metadata.storeSubmissionStatus\n : null;\n\n let status: SubmissionStatus;\n if (\n rawMetaStatus === \"PENDING_REVIEW\" ||\n rawMetaStatus === \"PUBLISHED\" ||\n rawMetaStatus === \"REJECTED\" ||\n rawMetaStatus === \"DRAFT\"\n ) {\n status = rawMetaStatus;\n } else if (app.status === \"SUBMITTED\") {\n status = \"PENDING_REVIEW\";\n } else if (app.status === \"PUBLISHED\") {\n status = \"PUBLISHED\";\n } else if (app.status === \"REJECTED\") {\n status = \"REJECTED\";\n } else {\n status = \"UNKNOWN\";\n }\n\n const metaSubmittedAt =\n typeof metadata.storeSubmissionAt === \"string\"\n ? metadata.storeSubmissionAt\n : null;\n\n return {\n productId,\n status,\n submittedAt: metaSubmittedAt ?? app.submittedAt,\n reviewedAt: null,\n publishedAt: null,\n reviewNotes: null,\n rejectedReason: null,\n };\n}\n\ntype StatusMeta = {\n i18nKey: string;\n fallback: string;\n icon: typeof CheckCircle2;\n tone: string;\n};\n\nconst statusLabels: Record<SubmissionStatus, StatusMeta> = {\n DRAFT: {\n i18nKey: \"devportal.storeSubmission.status.draft\",\n fallback: \"Draft\",\n icon: Clock,\n tone: \"text-text-secondary\",\n },\n PENDING_REVIEW: {\n i18nKey: \"devportal.storeSubmission.status.pending\",\n fallback: \"Pending review\",\n icon: Clock,\n tone: \"text-status-warning-text\",\n },\n PUBLISHED: {\n i18nKey: \"devportal.storeSubmission.status.published\",\n fallback: \"Published\",\n icon: CheckCircle2,\n tone: \"text-status-success-text\",\n },\n UNLISTED: {\n i18nKey: \"devportal.storeSubmission.status.unlisted\",\n fallback: \"Unlisted\",\n icon: EyeOff,\n tone: \"text-text-secondary\",\n },\n REJECTED: {\n i18nKey: \"devportal.storeSubmission.status.rejected\",\n fallback: \"Rejected\",\n icon: XCircle,\n tone: \"text-status-danger-text\",\n },\n UNKNOWN: {\n i18nKey: \"devportal.storeSubmission.status.unknown\",\n fallback: \"Not yet submitted\",\n icon: AlertTriangle,\n tone: \"text-text-tertiary\",\n },\n};\n\nexport const StoreSubmissionPage: FC = () => {\n const { appId } = useParams<{ appId: string }>();\n const navigate = useNavigate();\n const bus = useDevportalEventBus();\n const tr = useTr();\n const submitPerm = useDevportalPermission(DEVPORTAL_PERMISSIONS.APP_SUBMIT);\n const [app, setApp] = useState<Application | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [submitting, setSubmitting] = useState(false);\n const [unlisting, setUnlisting] = useState(false);\n const [showUnlistConfirm, setShowUnlistConfirm] = useState(false);\n const [overrideStatus, setOverrideStatus] = useState<SubmissionStatus | null>(\n null,\n );\n const [notes, setNotes] = useState(\"\");\n const load = async () => {\n if (!appId) return;\n setLoading(true);\n setError(null);\n try {\n const result = await graphqlFetch<{ application: Application | null }>({\n gateway: \"global\",\n query: APP_QUERY,\n variables: { id: appId },\n });\n if (result.errors?.length) {\n throw new Error(\n result.errors[0]?.message ??\n tr(\n \"devportal.storeSubmission.errors.loadFailed\",\n \"Failed to load application\",\n ),\n );\n }\n setApp(result.data?.application ?? null);\n } catch (err) {\n setError(\n err instanceof Error\n ? err.message\n : tr(\n \"devportal.storeSubmission.errors.loadFailed\",\n \"Failed to load application\",\n ),\n );\n } finally {\n setLoading(false);\n }\n };\n\n useEffect(() => {\n void load();\n }, [appId]); // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n const name = app?.name;\n if (!appId || !name) return;\n const reg = (\n window as unknown as {\n __breadcrumbRegistry?: {\n register: (id: string, name: string) => void;\n unregister: (id: string) => void;\n };\n }\n ).__breadcrumbRegistry;\n reg?.register(appId, name);\n return () => reg?.unregister(appId);\n }, [appId, app?.name]);\n\n const submit = async () => {\n if (!appId) return;\n setSubmitting(true);\n setError(null);\n try {\n // Auto-publish all draft versions alongside the app submission\n const draftVersions = (app?.versions.edges ?? [])\n .map((e) => e.node)\n .filter((v) => v.status === \"draft\");\n for (const v of draftVersions) {\n const vResult = await graphqlFetch({\n gateway: \"global\",\n query: PUBLISH_VERSION_MUTATION,\n variables: { id: v.id },\n });\n if (vResult.errors?.length) {\n throw new Error(\n vResult.errors[0]?.message ??\n `Failed to submit version ${v.version}`,\n );\n }\n }\n\n const result = await graphqlFetch({\n gateway: \"global\",\n query: SUBMIT_MUTATION,\n variables: { id: appId, notes: notes || null },\n });\n if (result.errors?.length) {\n throw new Error(\n result.errors[0]?.message ??\n tr(\n \"devportal.storeSubmission.errors.submitFailed\",\n \"Submission failed\",\n ),\n );\n }\n bus.emit(\"devportal.app.submitted\", { appId });\n await load();\n } catch (err) {\n setError(\n err instanceof Error\n ? err.message\n : tr(\n \"devportal.storeSubmission.errors.submitFailed\",\n \"Submission failed\",\n ),\n );\n } finally {\n setSubmitting(false);\n }\n };\n\n const unlist = async () => {\n const productId = inferSubmission(app)?.productId;\n if (!productId) return;\n setUnlisting(true);\n setError(null);\n try {\n const result = await graphqlFetch({\n gateway: \"global\",\n query: UNLIST_MUTATION,\n variables: { id: productId },\n });\n if (result.errors?.length) {\n throw new Error(\n result.errors[0]?.message ??\n tr(\n \"devportal.storeSubmission.errors.unlistFailed\",\n \"Failed to unlist\",\n ),\n );\n }\n setOverrideStatus(\"UNLISTED\");\n } catch (err) {\n setError(\n err instanceof Error\n ? err.message\n : tr(\n \"devportal.storeSubmission.errors.unlistFailed\",\n \"Failed to unlist\",\n ),\n );\n } finally {\n setUnlisting(false);\n setShowUnlistConfirm(false);\n }\n };\n\n const submission = inferSubmission(app);\n const effectiveStatus = overrideStatus ?? submission?.status ?? \"UNKNOWN\";\n const statusMeta = statusLabels[effectiveStatus];\n const StatusIcon = statusMeta.icon;\n\n const allVersions = (app?.versions.edges ?? []).map((e) => e.node);\n const draftVersions = allVersions.filter((v) => v.status === \"draft\");\n const isPackageApp = app?.appType === \"NODE\" || app?.appType === \"WORKFLOW\";\n const noVersionsBlock = isPackageApp && allVersions.length === 0;\n\n return (\n <main\n className=\"min-h-screen bg-surface-default\"\n aria-labelledby=\"store-submission-heading\"\n >\n <div className=\"border-b border-border-default bg-surface-raised\">\n <div className=\"mx-auto max-w-3xl px-6 py-4\">\n <div className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={() => navigate(-1)}\n className=\"inline-flex items-center gap-2 rounded-md px-3 py-1.5 text-sm text-text-secondary hover:bg-surface-hover hover:text-text-primary focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary\"\n >\n <ArrowLeft className=\"h-4 w-4\" aria-hidden=\"true\" />\n {tr(\"devportal.common.back\", \"Back\")}\n </button>\n <div className=\"flex items-center gap-2\">\n <StoreIcon\n className=\"h-5 w-5 text-text-primary\"\n aria-hidden=\"true\"\n />\n <h1\n id=\"store-submission-heading\"\n className=\"text-xl font-semibold text-text-primary\"\n >\n {tr(\"devportal.storeSubmission.title\", \"Store submission\")}\n </h1>\n </div>\n </div>\n </div>\n </div>\n\n {/* Unlist confirm dialog */}\n {showUnlistConfirm && (\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"unlist-dialog-title\"\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4\"\n >\n <div className=\"w-full max-w-md rounded-lg border border-border-default bg-surface-raised p-6 shadow-xl\">\n <div className=\"mb-4 flex items-start gap-3\">\n <EyeOff\n className=\"mt-0.5 h-5 w-5 shrink-0 text-text-secondary\"\n aria-hidden=\"true\"\n />\n <div>\n <h2\n id=\"unlist-dialog-title\"\n className=\"text-base font-semibold text-text-primary\"\n >\n {tr(\n \"devportal.storeSubmission.unlistTitle\",\n \"Unlist from marketplace?\",\n )}\n </h2>\n <p className=\"mt-1 text-sm text-text-secondary\">\n {tr(\n \"devportal.storeSubmission.unlistDescription\",\n \"Your app will no longer appear in the marketplace for new users. Existing installations are not affected — users who already have it installed can continue using it.\",\n )}\n </p>\n </div>\n </div>\n <div className=\"flex justify-end gap-3\">\n <button\n type=\"button\"\n onClick={() => setShowUnlistConfirm(false)}\n className=\"rounded-md border border-border-default px-4 py-2 text-sm font-medium text-text-secondary hover:bg-surface-hover\"\n >\n {tr(\"devportal.common.cancel\", \"Cancel\")}\n </button>\n <button\n type=\"button\"\n onClick={() => void unlist()}\n disabled={unlisting}\n className=\"inline-flex items-center gap-2 rounded-md bg-surface-danger px-4 py-2 text-sm font-semibold text-text-on-danger hover:opacity-90 disabled:opacity-60\"\n >\n {unlisting && (\n <RefreshCw\n className=\"h-4 w-4 animate-spin\"\n aria-hidden=\"true\"\n />\n )}\n {tr(\"devportal.storeSubmission.confirmUnlist\", \"Unlist app\")}\n </button>\n </div>\n </div>\n </div>\n )}\n\n <div className=\"mx-auto max-w-3xl px-6 py-6\">\n {(loading ||\n !submission ||\n effectiveStatus === \"UNKNOWN\" ||\n effectiveStatus === \"DRAFT\" ||\n effectiveStatus === \"REJECTED\") && (\n <PagePurpose className=\"mb-5\">\n {tr(\n \"devportal.storeSubmission.purpose\",\n \"Finalize the details the marketplace needs before your app can be reviewed — pricing, categories, and required assets. Completing this is what makes the app eligible to submit for publication.\",\n )}\n </PagePurpose>\n )}\n\n {error && (\n <div\n role=\"alert\"\n className=\"mb-4 rounded-md border border-border-danger bg-surface-danger-muted px-4 py-3 text-sm text-text-danger\"\n >\n {error}\n </div>\n )}\n\n {loading && !app ? (\n <div\n className=\"py-16 text-center text-text-secondary\"\n role=\"status\"\n aria-live=\"polite\"\n >\n {tr(\"devportal.storeSubmission.loading\", \"Loading application…\")}\n </div>\n ) : !app ? (\n <IllustratedEmptyState\n illustration=\"empty-generic\"\n title={tr(\n \"devportal.storeSubmission.notFoundTitle\",\n \"Application not found\",\n )}\n description={tr(\n \"devportal.storeSubmission.notFound\",\n \"Application not found.\",\n )}\n />\n ) : (\n <div className=\"space-y-4\">\n {/* App header card */}\n <div className=\"rounded-lg border border-border-default bg-surface-raised p-4\">\n <div className=\"flex items-center gap-3\">\n {app.iconUrl ? (\n <img\n src={app.iconUrl}\n alt=\"\"\n className=\"h-14 w-14 flex-shrink-0 rounded-md object-cover\"\n />\n ) : (\n <div className=\"flex h-14 w-14 flex-shrink-0 items-center justify-center rounded-md bg-surface-muted text-text-secondary text-sm font-medium\">\n {app.name.slice(0, 2).toUpperCase()}\n </div>\n )}\n <div className=\"min-w-0 flex-1\">\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {app.name}\n </h2>\n <p className=\"font-mono text-xs text-text-tertiary\">\n {app.slug}\n </p>\n </div>\n <div\n className={`flex items-center gap-1.5 ${statusMeta.tone}`}\n role=\"status\"\n >\n <StatusIcon className=\"h-5 w-5\" aria-hidden=\"true\" />\n <span className=\"text-sm font-medium\">\n {tr(statusMeta.i18nKey, statusMeta.fallback)}\n </span>\n </div>\n </div>\n </div>\n\n {/* Pending review — what happens next */}\n {effectiveStatus === \"PENDING_REVIEW\" && (\n <div className=\"rounded-lg border border-primary/20 bg-action-primary-bg/5 p-5 space-y-4\">\n <div className=\"flex items-start gap-3\">\n <Clock\n className=\"h-5 w-5 mt-0.5 shrink-0 text-primary\"\n aria-hidden=\"true\"\n />\n <div>\n <p className=\"text-sm font-semibold text-text-primary\">\n {tr(\n \"devportal.storeSubmission.underReview\",\n \"Your app is under review\",\n )}\n </p>\n {app.submittedAt && (\n <p className=\"mt-0.5 text-xs text-text-secondary\">\n {tr(\n \"devportal.storeSubmission.submittedOn\",\n \"Submitted on\",\n )}{\" \"}\n {new Date(app.submittedAt).toLocaleString()}\n </p>\n )}\n </div>\n </div>\n\n <div className=\"border-t border-border-default pt-4\">\n <p className=\"text-xs font-medium text-text-secondary mb-3\">\n {tr(\n \"devportal.storeSubmission.whatNext\",\n \"What happens next\",\n )}\n </p>\n <ol className=\"space-y-2.5 text-sm text-text-secondary\">\n <li className=\"flex items-start gap-2\">\n <span className=\"flex h-5 w-5 shrink-0 items-center justify-center rounded-full bg-surface-muted text-xs font-medium text-text-tertiary\">\n 1\n </span>\n Our team reviews your app's listing, assets, and\n compliance.\n </li>\n <li className=\"flex items-start gap-2\">\n <span className=\"flex h-5 w-5 shrink-0 items-center justify-center rounded-full bg-surface-muted text-xs font-medium text-text-tertiary\">\n 2\n </span>\n You'll receive a notification when a decision is made.\n </li>\n <li className=\"flex items-start gap-2\">\n <span className=\"flex h-5 w-5 shrink-0 items-center justify-center rounded-full bg-surface-muted text-xs font-medium text-text-tertiary\">\n 3\n </span>\n If approved, your app goes live in the marketplace\n automatically.\n </li>\n </ol>\n </div>\n\n {app.reviewNotes && (\n <div className=\"border-t border-border-default pt-4\">\n <p className=\"text-xs font-medium text-text-secondary mb-1\">\n {tr(\n \"devportal.storeSubmission.reviewerNotes\",\n \"Reviewer notes\",\n )}\n </p>\n <p className=\"text-sm text-text-primary\">\n {app.reviewNotes}\n </p>\n </div>\n )}\n </div>\n )}\n\n {/* Published */}\n {effectiveStatus === \"PUBLISHED\" && (\n <div className=\"rounded-lg border border-status-success-bg bg-status-success-bg-subtle p-5 space-y-4\">\n <div className=\"flex items-start gap-3\">\n <CheckCircle2\n className=\"h-5 w-5 mt-0.5 shrink-0 text-status-success-text\"\n aria-hidden=\"true\"\n />\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-semibold text-status-success-text\">\n {tr(\n \"devportal.storeSubmission.publishedTitle\",\n \"Your app is live in the marketplace\",\n )}\n </p>\n {submission?.publishedAt && (\n <p className=\"mt-0.5 text-xs text-text-secondary\">\n {tr(\n \"devportal.storeSubmission.publishedOn\",\n \"Published on\",\n )}{\" \"}\n {new Date(submission.publishedAt).toLocaleString()}\n </p>\n )}\n </div>\n </div>\n {submission?.productId && (\n <div className=\"border-t border-status-success-bg pt-4\">\n <p className=\"mb-2 text-xs text-text-secondary\">\n {tr(\n \"devportal.storeSubmission.unlistHint\",\n \"Need to remove this app from the marketplace? Unlisting hides it from new users while keeping existing installations active.\",\n )}\n </p>\n <button\n type=\"button\"\n onClick={() => setShowUnlistConfirm(true)}\n className=\"inline-flex items-center gap-2 rounded-md border border-border-default bg-surface-raised px-3 py-1.5 text-sm font-medium text-text-secondary hover:bg-surface-hover hover:text-text-primary\"\n >\n <EyeOff className=\"h-4 w-4\" aria-hidden=\"true\" />\n {tr(\n \"devportal.storeSubmission.unlistButton\",\n \"Unlist from marketplace\",\n )}\n </button>\n </div>\n )}\n </div>\n )}\n\n {/* Unlisted */}\n {effectiveStatus === \"UNLISTED\" && (\n <div className=\"rounded-lg border border-border-default bg-surface-muted p-5 flex items-start gap-3\">\n <EyeOff\n className=\"h-5 w-5 mt-0.5 shrink-0 text-text-secondary\"\n aria-hidden=\"true\"\n />\n <div>\n <p className=\"text-sm font-semibold text-text-primary\">\n {tr(\n \"devportal.storeSubmission.unlistedTitle\",\n \"Your app has been unlisted\",\n )}\n </p>\n <p className=\"mt-0.5 text-xs text-text-secondary\">\n {tr(\n \"devportal.storeSubmission.unlistedDescription\",\n \"It no longer appears in the marketplace for new users. Existing installations remain active and unaffected.\",\n )}\n </p>\n </div>\n </div>\n )}\n\n {/* Rejected */}\n {effectiveStatus === \"REJECTED\" && (\n <div className=\"rounded-lg border border-status-error-bg bg-status-error-bg-subtle p-5 space-y-3\">\n <div className=\"flex items-start gap-3\">\n <XCircle\n className=\"h-5 w-5 mt-0.5 shrink-0 text-status-error-text\"\n aria-hidden=\"true\"\n />\n <div>\n <p className=\"text-sm font-semibold text-status-error-text\">\n {tr(\n \"devportal.storeSubmission.rejectedTitle\",\n \"Submission was not approved\",\n )}\n </p>\n <p className=\"mt-0.5 text-xs text-text-secondary\">\n {tr(\n \"devportal.storeSubmission.rejectedHint\",\n \"Address the feedback below and resubmit.\",\n )}\n </p>\n </div>\n </div>\n {app.reviewNotes && (\n <div className=\"rounded-md bg-surface-muted p-3\">\n <p className=\"text-xs font-medium text-text-secondary mb-1\">\n {tr(\n \"devportal.storeSubmission.reviewerFeedback\",\n \"Reviewer feedback\",\n )}\n </p>\n <p className=\"text-sm text-text-primary\">\n {app.reviewNotes}\n </p>\n </div>\n )}\n </div>\n )}\n\n {/* Submit / resubmit form */}\n {(effectiveStatus === \"UNKNOWN\" ||\n effectiveStatus === \"DRAFT\" ||\n effectiveStatus === \"REJECTED\") && (\n <div className=\"rounded-lg border border-border-default bg-surface-raised p-4 space-y-4\">\n <div>\n <h3 className=\"mb-1 text-sm font-semibold text-text-primary\">\n {effectiveStatus === \"REJECTED\"\n ? tr(\n \"devportal.storeSubmission.resubmitForReview\",\n \"Resubmit for review\",\n )\n : tr(\n \"devportal.storeSubmission.submitForReview\",\n \"Submit for review\",\n )}\n </h3>\n <p className=\"text-sm text-text-secondary\">\n {tr(\n \"devportal.storeSubmission.help\",\n \"Your application will be sent to the store's review queue. Whether it's auto-published or requires admin approval depends on the target store's configuration.\",\n )}\n </p>\n </div>\n\n {/* Versions included in this submission */}\n {isPackageApp && (\n <div className=\"rounded-md border border-border-default bg-surface-muted p-3 space-y-2\">\n <div className=\"flex items-center gap-2 text-xs font-medium text-text-secondary\">\n <GitBranch className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n {tr(\n \"devportal.storeSubmission.versionsIncluded\",\n \"Versions included in this submission\",\n )}\n </div>\n\n {noVersionsBlock ? (\n <div className=\"flex items-start gap-2 text-sm text-status-danger-text\">\n <AlertTriangle\n className=\"h-4 w-4 mt-0.5 shrink-0\"\n aria-hidden=\"true\"\n />\n <span>\n {tr(\n \"devportal.storeSubmission.noVersionsError\",\n \"You must create at least one version before submitting. Go to the Versions tab to create one.\",\n )}\n </span>\n </div>\n ) : draftVersions.length === 0 ? (\n <p className=\"text-xs text-text-secondary\">\n {tr(\n \"devportal.storeSubmission.noDraftVersions\",\n \"No draft versions — all versions are already submitted or published.\",\n )}\n </p>\n ) : (\n <ul className=\"space-y-1\">\n {draftVersions.map((v) => (\n <li\n key={v.id}\n className=\"flex items-center gap-2 text-sm\"\n >\n <Package\n className=\"h-3.5 w-3.5 text-text-secondary shrink-0\"\n aria-hidden=\"true\"\n />\n <span className=\"font-mono font-medium\">\n {v.version}\n </span>\n {v.releaseNotes && (\n <span className=\"text-xs text-text-secondary truncate\">\n — {v.releaseNotes}\n </span>\n )}\n </li>\n ))}\n </ul>\n )}\n </div>\n )}\n\n <div>\n <label className=\"block\" htmlFor=\"store-submission-notes\">\n <span className=\"sr-only\">\n {tr(\n \"devportal.storeSubmission.notesLabel\",\n \"Notes for the reviewer (optional)\",\n )}\n </span>\n </label>\n <textarea\n id=\"store-submission-notes\"\n value={notes}\n onChange={(e) => setNotes(e.target.value)}\n rows={3}\n placeholder={tr(\n \"devportal.storeSubmission.notesLabel\",\n \"Notes for the reviewer (optional)\",\n )}\n className=\"mb-3 w-full rounded-md border border-border-default bg-surface-default px-3 py-2 text-sm text-text-primary focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary\"\n />\n <button\n type=\"button\"\n onClick={() => void submit()}\n disabled={\n submitting || !submitPerm.allowed || noVersionsBlock\n }\n aria-disabled={\n submitting || !submitPerm.allowed || noVersionsBlock\n }\n title={\n noVersionsBlock\n ? tr(\n \"devportal.storeSubmission.noVersionsError\",\n \"Create a version first\",\n )\n : !submitPerm.allowed\n ? tr(\n \"devportal.common.noPermission\",\n \"You do not have permission to perform this action\",\n )\n : undefined\n }\n className=\"inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-semibold text-action-primary-text hover:opacity-90 disabled:opacity-60 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary\"\n >\n {submitting && (\n <RefreshCw\n className=\"h-4 w-4 animate-spin\"\n aria-hidden=\"true\"\n />\n )}\n {effectiveStatus === \"REJECTED\"\n ? tr(\"devportal.storeSubmission.resubmit\", \"Resubmit\")\n : tr(\n \"devportal.storeSubmission.submitForReview\",\n \"Submit for review\",\n )}\n </button>\n </div>\n </div>\n )}\n\n {submission?.productId && (\n <div className=\"rounded-lg border border-border-default bg-surface-raised p-4\">\n <p className=\"text-xs font-medium text-text-secondary\">\n {tr(\n \"devportal.storeSubmission.storeProductId\",\n \"Store product ID\",\n )}\n </p>\n <code className=\"mt-1 block break-all font-mono text-xs text-text-primary\">\n {submission.productId}\n </code>\n </div>\n )}\n </div>\n )}\n </div>\n </main>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"StoreSubmissionPage.js","names":["StoreIcon","APP_QUERY","SUBMIT_MUTATION","UNLIST_MUTATION","PUBLISH_VERSION_MUTATION","inferSubmission","app","metadata","productId","rawMetaStatus","status","metaSubmittedAt","statusLabels","Clock","CheckCircle2","EyeOff","XCircle","AlertTriangle","StoreSubmissionPage","useParams","navigate","useNavigate","bus","useDevportalEventBus","tr","useTr","submitPerm","useDevportalPermission","DEVPORTAL_PERMISSIONS","setApp","useState","loading","setLoading","error","setError","submitting","setSubmitting","unlisting","setUnlisting","showUnlistConfirm","setShowUnlistConfirm","overrideStatus","setOverrideStatus","notes","setNotes","load","appId","result","graphqlFetch","err","useEffect","name","reg","submit","draftVersions","v","vResult","unlist","submission","effectiveStatus","statusMeta","StatusIcon","allVersions","isPackageApp","noVersionsBlock","ArrowLeft","Store","RefreshCw","PagePurpose","GitBranch","Package","IllustratedEmptyState"],"sources":["../../../src/devportal/pages/StoreSubmissionPage.tsx"],"sourcesContent":["import type { FC } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport { useNavigate, useParams } from \"react-router\";\nimport {\n ArrowLeft,\n CheckCircle2,\n Clock,\n RefreshCw,\n XCircle,\n AlertTriangle,\n Store as StoreIcon,\n EyeOff,\n Package,\n GitBranch,\n} from \"lucide-react\";\nimport { graphqlFetch } from \"@burdenoff/fe-libs/shared/graphql\";\nimport { IllustratedEmptyState, PagePurpose } from \"@burdenoff/fe-libs/ui\";\nimport { useDevportalEventBus } from \"../events\";\nimport { useTr } from \"../utils/i18n\";\nimport { useDevportalPermission } from \"../hooks\";\nimport { DEVPORTAL_PERMISSIONS } from \"../constants/permissions\";\n\ntype SubmissionStatus =\n | \"DRAFT\"\n | \"PENDING_REVIEW\"\n | \"PUBLISHED\"\n | \"UNLISTED\"\n | \"REJECTED\"\n | \"UNKNOWN\";\n\ntype StoreSubmission = {\n productId: string;\n status: SubmissionStatus;\n submittedAt: string | null;\n reviewedAt: string | null;\n publishedAt: string | null;\n reviewNotes: string | null;\n rejectedReason: string | null;\n};\n\ntype ApplicationVersion = {\n id: string;\n version: string;\n status: string;\n releaseNotes: string | null;\n packageUrl: string | null;\n};\n\ntype Application = {\n id: string;\n name: string;\n slug: string;\n status: string;\n appType: string;\n reviewStatus: string;\n reviewNotes: string | null;\n iconUrl: string | null;\n submittedAt: string | null;\n metadata: Record<string, unknown> | null;\n versions: { edges: { node: ApplicationVersion }[] };\n};\n\nconst APP_QUERY = /* GraphQL */ `\n query DevportalAppForSubmission($id: ID!) {\n application(id: $id) {\n id\n name\n slug\n status\n appType\n reviewStatus\n reviewNotes\n iconUrl\n submittedAt\n metadata\n versions {\n edges {\n node {\n id\n version\n status\n releaseNotes\n packageUrl\n }\n }\n }\n }\n }\n`;\n\nconst SUBMIT_MUTATION = /* GraphQL */ `\n mutation DevportalSubmitForReview($id: ID!, $notes: String) {\n submitApplicationForReview(id: $id, notes: $notes) {\n id\n status\n submittedAt\n metadata\n }\n }\n`;\n\nconst UNLIST_MUTATION = /* GraphQL */ `\n mutation DevportalUnlistProduct($id: ID!) {\n unlistProduct(id: $id) {\n id\n status\n }\n }\n`;\n\nconst PUBLISH_VERSION_MUTATION = /* GraphQL */ `\n mutation DevportalPublishVersion($id: ID!) {\n publishApplicationVersion(id: $id) {\n id\n status\n }\n }\n`;\n\nfunction inferSubmission(app: Application | null): StoreSubmission | null {\n if (!app) return null;\n const metadata = (app.metadata ?? {}) as Record<string, unknown>;\n const productId =\n typeof metadata.storeProductId === \"string\" ? metadata.storeProductId : \"\";\n\n // Prefer metadata status (most accurate), but fall back to app.status so the\n // page reflects reality even when the metadata write failed after submission.\n const rawMetaStatus =\n typeof metadata.storeSubmissionStatus === \"string\"\n ? metadata.storeSubmissionStatus\n : null;\n\n let status: SubmissionStatus;\n if (\n rawMetaStatus === \"PENDING_REVIEW\" ||\n rawMetaStatus === \"PUBLISHED\" ||\n rawMetaStatus === \"REJECTED\" ||\n rawMetaStatus === \"DRAFT\"\n ) {\n status = rawMetaStatus;\n } else if (app.status === \"SUBMITTED\") {\n status = \"PENDING_REVIEW\";\n } else if (app.status === \"PUBLISHED\") {\n status = \"PUBLISHED\";\n } else if (app.status === \"REJECTED\") {\n status = \"REJECTED\";\n } else {\n status = \"UNKNOWN\";\n }\n\n const metaSubmittedAt =\n typeof metadata.storeSubmissionAt === \"string\"\n ? metadata.storeSubmissionAt\n : null;\n\n return {\n productId,\n status,\n submittedAt: metaSubmittedAt ?? app.submittedAt,\n reviewedAt: null,\n publishedAt: null,\n reviewNotes: null,\n rejectedReason: null,\n };\n}\n\ntype StatusMeta = {\n i18nKey: string;\n fallback: string;\n icon: typeof CheckCircle2;\n tone: string;\n};\n\nconst statusLabels: Record<SubmissionStatus, StatusMeta> = {\n DRAFT: {\n i18nKey: \"devportal.storeSubmission.status.draft\",\n fallback: \"Draft\",\n icon: Clock,\n tone: \"text-text-secondary\",\n },\n PENDING_REVIEW: {\n i18nKey: \"devportal.storeSubmission.status.pending\",\n fallback: \"Pending review\",\n icon: Clock,\n tone: \"text-status-warning-text\",\n },\n PUBLISHED: {\n i18nKey: \"devportal.storeSubmission.status.published\",\n fallback: \"Published\",\n icon: CheckCircle2,\n tone: \"text-status-success-text\",\n },\n UNLISTED: {\n i18nKey: \"devportal.storeSubmission.status.unlisted\",\n fallback: \"Unlisted\",\n icon: EyeOff,\n tone: \"text-text-secondary\",\n },\n REJECTED: {\n i18nKey: \"devportal.storeSubmission.status.rejected\",\n fallback: \"Rejected\",\n icon: XCircle,\n tone: \"text-status-danger-text\",\n },\n UNKNOWN: {\n i18nKey: \"devportal.storeSubmission.status.unknown\",\n fallback: \"Not yet submitted\",\n icon: AlertTriangle,\n tone: \"text-text-tertiary\",\n },\n};\n\nexport const StoreSubmissionPage: FC = () => {\n const { appId } = useParams<{ appId: string }>();\n const navigate = useNavigate();\n const bus = useDevportalEventBus();\n const tr = useTr();\n const submitPerm = useDevportalPermission(DEVPORTAL_PERMISSIONS.APP_SUBMIT);\n const [app, setApp] = useState<Application | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [submitting, setSubmitting] = useState(false);\n const [unlisting, setUnlisting] = useState(false);\n const [showUnlistConfirm, setShowUnlistConfirm] = useState(false);\n const [overrideStatus, setOverrideStatus] = useState<SubmissionStatus | null>(\n null,\n );\n const [notes, setNotes] = useState(\"\");\n const load = async () => {\n if (!appId) return;\n setLoading(true);\n setError(null);\n try {\n const result = await graphqlFetch<{ application: Application | null }>({\n gateway: \"global\",\n query: APP_QUERY,\n variables: { id: appId },\n });\n if (result.errors?.length) {\n throw new Error(\n result.errors[0]?.message ??\n tr(\n \"devportal.storeSubmission.errors.loadFailed\",\n \"Failed to load application\",\n ),\n );\n }\n setApp(result.data?.application ?? null);\n } catch (err) {\n setError(\n err instanceof Error\n ? err.message\n : tr(\n \"devportal.storeSubmission.errors.loadFailed\",\n \"Failed to load application\",\n ),\n );\n } finally {\n setLoading(false);\n }\n };\n\n useEffect(() => {\n void load();\n }, [appId]); // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n const name = app?.name;\n if (!appId || !name) return;\n const reg = (\n window as unknown as {\n __breadcrumbRegistry?: {\n register: (id: string, name: string) => void;\n unregister: (id: string) => void;\n };\n }\n ).__breadcrumbRegistry;\n reg?.register(appId, name);\n return () => reg?.unregister(appId);\n }, [appId, app?.name]);\n\n const submit = async () => {\n if (!appId) return;\n setSubmitting(true);\n setError(null);\n try {\n // Auto-publish all draft versions alongside the app submission\n const draftVersions = (app?.versions.edges ?? [])\n .map((e) => e.node)\n .filter((v) => v.status === \"draft\");\n for (const v of draftVersions) {\n const vResult = await graphqlFetch({\n gateway: \"global\",\n query: PUBLISH_VERSION_MUTATION,\n variables: { id: v.id },\n });\n if (vResult.errors?.length) {\n throw new Error(\n vResult.errors[0]?.message ??\n `Failed to submit version ${v.version}`,\n );\n }\n }\n\n const result = await graphqlFetch({\n gateway: \"global\",\n query: SUBMIT_MUTATION,\n variables: { id: appId, notes: notes || null },\n });\n if (result.errors?.length) {\n throw new Error(\n result.errors[0]?.message ??\n tr(\n \"devportal.storeSubmission.errors.submitFailed\",\n \"Submission failed\",\n ),\n );\n }\n bus.emit(\"devportal.app.submitted\", { appId });\n await load();\n } catch (err) {\n setError(\n err instanceof Error\n ? err.message\n : tr(\n \"devportal.storeSubmission.errors.submitFailed\",\n \"Submission failed\",\n ),\n );\n } finally {\n setSubmitting(false);\n }\n };\n\n const unlist = async () => {\n const productId = inferSubmission(app)?.productId;\n if (!productId) return;\n setUnlisting(true);\n setError(null);\n try {\n const result = await graphqlFetch({\n gateway: \"global\",\n query: UNLIST_MUTATION,\n variables: { id: productId },\n });\n if (result.errors?.length) {\n throw new Error(\n result.errors[0]?.message ??\n tr(\n \"devportal.storeSubmission.errors.unlistFailed\",\n \"Failed to unlist\",\n ),\n );\n }\n setOverrideStatus(\"UNLISTED\");\n } catch (err) {\n setError(\n err instanceof Error\n ? err.message\n : tr(\n \"devportal.storeSubmission.errors.unlistFailed\",\n \"Failed to unlist\",\n ),\n );\n } finally {\n setUnlisting(false);\n setShowUnlistConfirm(false);\n }\n };\n\n const submission = inferSubmission(app);\n const effectiveStatus = overrideStatus ?? submission?.status ?? \"UNKNOWN\";\n const statusMeta = statusLabels[effectiveStatus];\n const StatusIcon = statusMeta.icon;\n\n const allVersions = (app?.versions.edges ?? []).map((e) => e.node);\n const draftVersions = allVersions.filter((v) => v.status === \"draft\");\n const isPackageApp = app?.appType === \"NODE\" || app?.appType === \"WORKFLOW\";\n const noVersionsBlock = isPackageApp && allVersions.length === 0;\n\n return (\n <main\n className=\"min-h-screen bg-surface-default\"\n aria-labelledby=\"store-submission-heading\"\n >\n <div className=\"border-b border-border-default bg-surface-raised\">\n <div className=\"mx-auto max-w-3xl px-6 py-4\">\n <div className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={() => navigate(-1)}\n className=\"inline-flex items-center gap-2 rounded-md px-3 py-1.5 text-sm text-text-secondary hover:bg-surface-hover hover:text-text-primary focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary\"\n >\n <ArrowLeft className=\"h-4 w-4\" aria-hidden=\"true\" />\n {tr(\"devportal.common.back\", \"Back\")}\n </button>\n <div className=\"flex items-center gap-2\">\n <StoreIcon\n className=\"h-5 w-5 text-text-primary\"\n aria-hidden=\"true\"\n />\n <h1\n id=\"store-submission-heading\"\n className=\"text-xl font-semibold text-text-primary\"\n >\n {tr(\"devportal.storeSubmission.title\", \"Store submission\")}\n </h1>\n </div>\n </div>\n </div>\n </div>\n\n {/* Unlist confirm dialog */}\n {showUnlistConfirm && (\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"unlist-dialog-title\"\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4\"\n >\n <div className=\"w-full max-w-md rounded-lg border border-border-default bg-surface-raised p-6 shadow-xl\">\n <div className=\"mb-4 flex items-start gap-3\">\n <EyeOff\n className=\"mt-0.5 h-5 w-5 shrink-0 text-text-secondary\"\n aria-hidden=\"true\"\n />\n <div>\n <h2\n id=\"unlist-dialog-title\"\n className=\"text-base font-semibold text-text-primary\"\n >\n {tr(\n \"devportal.storeSubmission.unlistTitle\",\n \"Unlist from marketplace?\",\n )}\n </h2>\n <p className=\"mt-1 text-sm text-text-secondary\">\n {tr(\n \"devportal.storeSubmission.unlistDescription\",\n \"Your app will no longer appear in the marketplace for new users. Existing installations are not affected — users who already have it installed can continue using it.\",\n )}\n </p>\n </div>\n </div>\n <div className=\"flex justify-end gap-3\">\n <button\n type=\"button\"\n onClick={() => setShowUnlistConfirm(false)}\n className=\"rounded-md border border-border-default px-4 py-2 text-sm font-medium text-text-secondary hover:bg-surface-hover\"\n >\n {tr(\"devportal.common.cancel\", \"Cancel\")}\n </button>\n <button\n type=\"button\"\n onClick={() => void unlist()}\n disabled={unlisting}\n className=\"inline-flex items-center gap-2 rounded-md bg-surface-danger px-4 py-2 text-sm font-semibold text-text-on-danger hover:opacity-90 disabled:opacity-60\"\n >\n {unlisting && (\n <RefreshCw\n className=\"h-4 w-4 animate-spin\"\n aria-hidden=\"true\"\n />\n )}\n {tr(\"devportal.storeSubmission.confirmUnlist\", \"Unlist app\")}\n </button>\n </div>\n </div>\n </div>\n )}\n\n <div className=\"mx-auto max-w-3xl px-6 py-6\">\n {(loading ||\n !submission ||\n effectiveStatus === \"UNKNOWN\" ||\n effectiveStatus === \"DRAFT\" ||\n effectiveStatus === \"REJECTED\") && (\n <PagePurpose className=\"mb-5\">\n {tr(\n \"devportal.storeSubmission.purpose\",\n \"Finalize the details the marketplace needs before your app can be reviewed — pricing, categories, and required assets. Completing this is what makes the app eligible to submit for publication.\",\n )}\n </PagePurpose>\n )}\n\n {error && (\n <div\n role=\"alert\"\n className=\"mb-4 rounded-md border border-border-danger bg-surface-danger-muted px-4 py-3 text-sm text-text-danger\"\n >\n {error}\n </div>\n )}\n\n {loading && !app ? (\n <div\n className=\"py-16 text-center text-text-secondary\"\n role=\"status\"\n aria-live=\"polite\"\n >\n {tr(\"devportal.storeSubmission.loading\", \"Loading application…\")}\n </div>\n ) : !app ? (\n <IllustratedEmptyState\n illustration=\"empty-generic\"\n title={tr(\n \"devportal.storeSubmission.notFoundTitle\",\n \"Application not found\",\n )}\n description={tr(\n \"devportal.storeSubmission.notFound\",\n \"Application not found.\",\n )}\n />\n ) : (\n <div className=\"space-y-4\">\n {/* App header card */}\n <div className=\"rounded-lg border border-border-default bg-surface-raised p-4\">\n <div className=\"flex items-center gap-3\">\n {app.iconUrl ? (\n <img\n src={app.iconUrl}\n alt=\"\"\n className=\"h-14 w-14 flex-shrink-0 rounded-md object-cover\"\n />\n ) : (\n <div className=\"flex h-14 w-14 flex-shrink-0 items-center justify-center rounded-md bg-surface-muted text-text-secondary text-sm font-medium\">\n {app.name.slice(0, 2).toUpperCase()}\n </div>\n )}\n <div className=\"min-w-0 flex-1\">\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {app.name}\n </h2>\n <p className=\"font-mono text-xs text-text-tertiary\">\n {app.slug}\n </p>\n </div>\n <div\n className={`flex items-center gap-1.5 ${statusMeta.tone}`}\n role=\"status\"\n >\n <StatusIcon className=\"h-5 w-5\" aria-hidden=\"true\" />\n <span className=\"text-sm font-medium\">\n {tr(statusMeta.i18nKey, statusMeta.fallback)}\n </span>\n </div>\n </div>\n </div>\n\n {/* Pending review — what happens next */}\n {effectiveStatus === \"PENDING_REVIEW\" && (\n <div className=\"rounded-lg border border-primary/20 bg-action-primary-bg/5 p-5 space-y-4\">\n <div className=\"flex items-start gap-3\">\n <Clock\n className=\"h-5 w-5 mt-0.5 shrink-0 text-primary\"\n aria-hidden=\"true\"\n />\n <div>\n <p className=\"text-sm font-semibold text-text-primary\">\n {tr(\n \"devportal.storeSubmission.underReview\",\n \"Your app is under review\",\n )}\n </p>\n {app.submittedAt && (\n <p className=\"mt-0.5 text-xs text-text-secondary\">\n {tr(\n \"devportal.storeSubmission.submittedOn\",\n \"Submitted on\",\n )}{\" \"}\n {new Date(app.submittedAt).toLocaleString()}\n </p>\n )}\n </div>\n </div>\n\n <div className=\"border-t border-border-default pt-4\">\n <p className=\"text-xs font-medium text-text-secondary mb-3\">\n {tr(\n \"devportal.storeSubmission.whatNext\",\n \"What happens next\",\n )}\n </p>\n <ol className=\"space-y-2.5 text-sm text-text-secondary\">\n <li className=\"flex items-start gap-2\">\n <span className=\"flex h-5 w-5 shrink-0 items-center justify-center rounded-full bg-surface-muted text-xs font-medium text-text-tertiary\">\n 1\n </span>\n Our team reviews your app's listing, assets, and\n compliance.\n </li>\n <li className=\"flex items-start gap-2\">\n <span className=\"flex h-5 w-5 shrink-0 items-center justify-center rounded-full bg-surface-muted text-xs font-medium text-text-tertiary\">\n 2\n </span>\n You'll receive a notification when a decision is made.\n </li>\n <li className=\"flex items-start gap-2\">\n <span className=\"flex h-5 w-5 shrink-0 items-center justify-center rounded-full bg-surface-muted text-xs font-medium text-text-tertiary\">\n 3\n </span>\n If approved, your app goes live in the marketplace\n automatically.\n </li>\n </ol>\n </div>\n\n {app.reviewNotes && (\n <div className=\"border-t border-border-default pt-4\">\n <p className=\"text-xs font-medium text-text-secondary mb-1\">\n {tr(\n \"devportal.storeSubmission.reviewerNotes\",\n \"Reviewer notes\",\n )}\n </p>\n <p className=\"text-sm text-text-primary\">\n {app.reviewNotes}\n </p>\n </div>\n )}\n </div>\n )}\n\n {/* Published */}\n {effectiveStatus === \"PUBLISHED\" && (\n <div className=\"rounded-lg border border-status-success-bg bg-status-success-bg-subtle p-5 space-y-4\">\n <div className=\"flex items-start gap-3\">\n <CheckCircle2\n className=\"h-5 w-5 mt-0.5 shrink-0 text-status-success-text\"\n aria-hidden=\"true\"\n />\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-semibold text-status-success-text\">\n {tr(\n \"devportal.storeSubmission.publishedTitle\",\n \"Your app is live in the marketplace\",\n )}\n </p>\n {submission?.publishedAt && (\n <p className=\"mt-0.5 text-xs text-text-secondary\">\n {tr(\n \"devportal.storeSubmission.publishedOn\",\n \"Published on\",\n )}{\" \"}\n {new Date(submission.publishedAt).toLocaleString()}\n </p>\n )}\n </div>\n </div>\n {submission?.productId && (\n <div className=\"border-t border-status-success-bg pt-4\">\n <p className=\"mb-2 text-xs text-text-secondary\">\n {tr(\n \"devportal.storeSubmission.unlistHint\",\n \"Need to remove this app from the marketplace? Unlisting hides it from new users while keeping existing installations active.\",\n )}\n </p>\n <button\n type=\"button\"\n onClick={() => setShowUnlistConfirm(true)}\n className=\"inline-flex items-center gap-2 rounded-md border border-border-default bg-surface-raised px-3 py-1.5 text-sm font-medium text-text-secondary hover:bg-surface-hover hover:text-text-primary\"\n >\n <EyeOff className=\"h-4 w-4\" aria-hidden=\"true\" />\n {tr(\n \"devportal.storeSubmission.unlistButton\",\n \"Unlist from marketplace\",\n )}\n </button>\n </div>\n )}\n </div>\n )}\n\n {/* Unlisted */}\n {effectiveStatus === \"UNLISTED\" && (\n <div className=\"rounded-lg border border-border-default bg-surface-muted p-5 flex items-start gap-3\">\n <EyeOff\n className=\"h-5 w-5 mt-0.5 shrink-0 text-text-secondary\"\n aria-hidden=\"true\"\n />\n <div>\n <p className=\"text-sm font-semibold text-text-primary\">\n {tr(\n \"devportal.storeSubmission.unlistedTitle\",\n \"Your app has been unlisted\",\n )}\n </p>\n <p className=\"mt-0.5 text-xs text-text-secondary\">\n {tr(\n \"devportal.storeSubmission.unlistedDescription\",\n \"It no longer appears in the marketplace for new users. Existing installations remain active and unaffected.\",\n )}\n </p>\n </div>\n </div>\n )}\n\n {/* Rejected */}\n {effectiveStatus === \"REJECTED\" && (\n <div className=\"rounded-lg border border-status-error-bg bg-status-error-bg-subtle p-5 space-y-3\">\n <div className=\"flex items-start gap-3\">\n <XCircle\n className=\"h-5 w-5 mt-0.5 shrink-0 text-status-error-text\"\n aria-hidden=\"true\"\n />\n <div>\n <p className=\"text-sm font-semibold text-status-error-text\">\n {tr(\n \"devportal.storeSubmission.rejectedTitle\",\n \"Submission was not approved\",\n )}\n </p>\n <p className=\"mt-0.5 text-xs text-text-secondary\">\n {tr(\n \"devportal.storeSubmission.rejectedHint\",\n \"Address the feedback below and resubmit.\",\n )}\n </p>\n </div>\n </div>\n {app.reviewNotes && (\n <div className=\"rounded-md bg-surface-muted p-3\">\n <p className=\"text-xs font-medium text-text-secondary mb-1\">\n {tr(\n \"devportal.storeSubmission.reviewerFeedback\",\n \"Reviewer feedback\",\n )}\n </p>\n <p className=\"text-sm text-text-primary\">\n {app.reviewNotes}\n </p>\n </div>\n )}\n </div>\n )}\n\n {/* Submit / resubmit form */}\n {(effectiveStatus === \"UNKNOWN\" ||\n effectiveStatus === \"DRAFT\" ||\n effectiveStatus === \"REJECTED\") && (\n <div className=\"rounded-lg border border-border-default bg-surface-raised p-4 space-y-4\">\n <div>\n <h3 className=\"mb-1 text-sm font-semibold text-text-primary\">\n {effectiveStatus === \"REJECTED\"\n ? tr(\n \"devportal.storeSubmission.resubmitForReview\",\n \"Resubmit for review\",\n )\n : tr(\n \"devportal.storeSubmission.submitForReview\",\n \"Submit for review\",\n )}\n </h3>\n <p className=\"text-sm text-text-secondary\">\n {tr(\n \"devportal.storeSubmission.help\",\n \"Your application will be sent to the store's review queue. Whether it's auto-published or requires admin approval depends on the target store's configuration.\",\n )}\n </p>\n </div>\n\n {/* Versions included in this submission */}\n {isPackageApp && (\n <div className=\"rounded-md border border-border-default bg-surface-muted p-3 space-y-2\">\n <div className=\"flex items-center gap-2 text-xs font-medium text-text-secondary\">\n <GitBranch className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n {tr(\n \"devportal.storeSubmission.versionsIncluded\",\n \"Versions included in this submission\",\n )}\n </div>\n\n {noVersionsBlock ? (\n <div className=\"flex items-start gap-2 text-sm text-status-danger-text\">\n <AlertTriangle\n className=\"h-4 w-4 mt-0.5 shrink-0\"\n aria-hidden=\"true\"\n />\n <span>\n {tr(\n \"devportal.storeSubmission.noVersionsError\",\n \"You must create at least one version before submitting. Go to the Versions tab to create one.\",\n )}\n </span>\n </div>\n ) : draftVersions.length === 0 ? (\n <p className=\"text-xs text-text-secondary\">\n {tr(\n \"devportal.storeSubmission.noDraftVersions\",\n \"No draft versions — all versions are already submitted or published.\",\n )}\n </p>\n ) : (\n <ul className=\"space-y-1\">\n {draftVersions.map((v) => (\n <li\n key={v.id}\n className=\"flex items-center gap-2 text-sm\"\n >\n <Package\n className=\"h-3.5 w-3.5 text-text-secondary shrink-0\"\n aria-hidden=\"true\"\n />\n <span className=\"font-mono font-medium\">\n {v.version}\n </span>\n {v.releaseNotes && (\n <span className=\"text-xs text-text-secondary truncate\">\n — {v.releaseNotes}\n </span>\n )}\n </li>\n ))}\n </ul>\n )}\n </div>\n )}\n\n <div>\n <label className=\"block\" htmlFor=\"store-submission-notes\">\n <span className=\"sr-only\">\n {tr(\n \"devportal.storeSubmission.notesLabel\",\n \"Notes for the reviewer (optional)\",\n )}\n </span>\n </label>\n <textarea\n id=\"store-submission-notes\"\n value={notes}\n onChange={(e) => setNotes(e.target.value)}\n rows={3}\n placeholder={tr(\n \"devportal.storeSubmission.notesLabel\",\n \"Notes for the reviewer (optional)\",\n )}\n className=\"mb-3 w-full rounded-md border border-border-default bg-surface-default px-3 py-2 text-sm text-text-primary focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary\"\n />\n <button\n type=\"button\"\n onClick={() => void submit()}\n disabled={\n submitting || !submitPerm.allowed || noVersionsBlock\n }\n aria-disabled={\n submitting || !submitPerm.allowed || noVersionsBlock\n }\n title={\n noVersionsBlock\n ? tr(\n \"devportal.storeSubmission.noVersionsError\",\n \"Create a version first\",\n )\n : !submitPerm.allowed\n ? tr(\n \"devportal.common.noPermission\",\n \"You do not have permission to perform this action\",\n )\n : undefined\n }\n className=\"inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-semibold text-action-primary-text hover:opacity-90 disabled:opacity-60 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary\"\n >\n {submitting && (\n <RefreshCw\n className=\"h-4 w-4 animate-spin\"\n aria-hidden=\"true\"\n />\n )}\n {effectiveStatus === \"REJECTED\"\n ? tr(\"devportal.storeSubmission.resubmit\", \"Resubmit\")\n : tr(\n \"devportal.storeSubmission.submitForReview\",\n \"Submit for review\",\n )}\n </button>\n </div>\n </div>\n )}\n\n {submission?.productId && (\n <div className=\"rounded-lg border border-border-default bg-surface-raised p-4\">\n <p className=\"text-xs font-medium text-text-secondary\">\n {tr(\n \"devportal.storeSubmission.storeProductId\",\n \"Store product ID\",\n )}\n </p>\n <code className=\"mt-1 block break-all font-mono text-xs text-text-primary\">\n {submission.productId}\n </code>\n </div>\n )}\n </div>\n )}\n </div>\n </main>\n );\n};\n"],"mappings":"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"}
|