unleash-server 8.0.2 → 8.0.3
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/lib/addons/feature-event-formatter-md.d.ts.map +1 -1
- package/dist/lib/addons/feature-event-formatter-md.js +5 -3
- package/dist/lib/addons/feature-event-formatter-md.js.map +1 -1
- package/dist/lib/addons/feature-event-formatter-md.test.js +3 -1
- package/dist/lib/addons/feature-event-formatter-md.test.js.map +1 -1
- package/dist/lib/addons/webhook.d.ts.map +1 -1
- package/dist/lib/addons/webhook.js +28 -2
- package/dist/lib/addons/webhook.js.map +1 -1
- package/dist/lib/addons/webhook.test.js +72 -0
- package/dist/lib/addons/webhook.test.js.map +1 -1
- package/dist/lib/app.d.ts.map +1 -1
- package/dist/lib/app.js +2 -0
- package/dist/lib/app.js.map +1 -1
- package/dist/lib/create-config.d.ts.map +1 -1
- package/dist/lib/create-config.js +1 -0
- package/dist/lib/create-config.js.map +1 -1
- package/dist/lib/features/context/context-field-store.d.ts +1 -1
- package/dist/lib/features/context/context-field-store.d.ts.map +1 -1
- package/dist/lib/features/context/context-field-store.js +1 -5
- package/dist/lib/features/context/context-field-store.js.map +1 -1
- package/dist/lib/features/context/context-service.d.ts +5 -4
- package/dist/lib/features/context/context-service.d.ts.map +1 -1
- package/dist/lib/features/context/context-service.js +20 -27
- package/dist/lib/features/context/context-service.js.map +1 -1
- package/dist/lib/features/context/context-service.test.d.ts +2 -0
- package/dist/lib/features/context/context-service.test.d.ts.map +1 -0
- package/dist/lib/features/context/context-service.test.js +24 -0
- package/dist/lib/features/context/context-service.test.js.map +1 -0
- package/dist/lib/features/context/context.d.ts +1 -0
- package/dist/lib/features/context/context.d.ts.map +1 -1
- package/dist/lib/features/context/context.js +22 -10
- package/dist/lib/features/context/context.js.map +1 -1
- package/dist/lib/features/context/context.test.js +15 -1
- package/dist/lib/features/context/context.test.js.map +1 -1
- package/dist/lib/features/context/createContextService.d.ts +4 -1
- package/dist/lib/features/context/createContextService.d.ts.map +1 -1
- package/dist/lib/features/context/createContextService.js +2 -1
- package/dist/lib/features/context/createContextService.js.map +1 -1
- package/dist/lib/features/context/fake-context-field-store.d.ts +1 -1
- package/dist/lib/features/context/fake-context-field-store.d.ts.map +1 -1
- package/dist/lib/features/context/fake-context-field-store.js +1 -6
- package/dist/lib/features/context/fake-context-field-store.js.map +1 -1
- package/dist/lib/features/export-import-toggles/createExportImportService.js +1 -1
- package/dist/lib/features/export-import-toggles/createExportImportService.js.map +1 -1
- package/dist/lib/features/feature-toggle/converters/feature-toggle-row-converter.d.ts +1 -1
- package/dist/lib/features/feature-toggle/fakes/fake-feature-strategies-store.d.ts +2 -1
- package/dist/lib/features/feature-toggle/fakes/fake-feature-strategies-store.d.ts.map +1 -1
- package/dist/lib/features/feature-toggle/fakes/fake-feature-strategies-store.js +5 -0
- package/dist/lib/features/feature-toggle/fakes/fake-feature-strategies-store.js.map +1 -1
- package/dist/lib/features/feature-toggle/feature-toggle-controller.d.ts +1 -1
- package/dist/lib/features/feature-toggle/feature-toggle-controller.d.ts.map +1 -1
- package/dist/lib/features/feature-toggle/feature-toggle-controller.js +22 -2
- package/dist/lib/features/feature-toggle/feature-toggle-controller.js.map +1 -1
- package/dist/lib/features/feature-toggle/feature-toggle-service.d.ts +3 -2
- package/dist/lib/features/feature-toggle/feature-toggle-service.d.ts.map +1 -1
- package/dist/lib/features/feature-toggle/feature-toggle-service.js +11 -4
- package/dist/lib/features/feature-toggle/feature-toggle-service.js.map +1 -1
- package/dist/lib/features/feature-toggle/feature-toggle-strategies-store.d.ts +2 -0
- package/dist/lib/features/feature-toggle/feature-toggle-strategies-store.d.ts.map +1 -1
- package/dist/lib/features/feature-toggle/feature-toggle-strategies-store.js +7 -0
- package/dist/lib/features/feature-toggle/feature-toggle-strategies-store.js.map +1 -1
- package/dist/lib/features/feature-toggle/tests/feature-toggles.e2e.test.js +4 -0
- package/dist/lib/features/feature-toggle/tests/feature-toggles.e2e.test.js.map +1 -1
- package/dist/lib/features/feature-toggle/types/feature-toggle-strategies-store-type.d.ts +6 -0
- package/dist/lib/features/feature-toggle/types/feature-toggle-strategies-store-type.d.ts.map +1 -1
- package/dist/lib/features/playground/feature-evaluator/constraint.d.ts +2 -0
- package/dist/lib/features/playground/feature-evaluator/constraint.d.ts.map +1 -1
- package/dist/lib/features/playground/feature-evaluator/constraint.js +11 -1
- package/dist/lib/features/playground/feature-evaluator/constraint.js.map +1 -1
- package/dist/lib/features/playground/playground.test.js +2 -3
- package/dist/lib/features/playground/playground.test.js.map +1 -1
- package/dist/lib/features/release-plans/release-plan-template-store.d.ts +4 -0
- package/dist/lib/features/release-plans/release-plan-template-store.d.ts.map +1 -1
- package/dist/lib/features/release-plans/release-plan-template-store.js +25 -2
- package/dist/lib/features/release-plans/release-plan-template-store.js.map +1 -1
- package/dist/lib/features/release-plans/release-plan-template-store.test.js +75 -16
- package/dist/lib/features/release-plans/release-plan-template-store.test.js.map +1 -1
- package/dist/lib/features/release-plans/release-plan-template.d.ts +1 -0
- package/dist/lib/features/release-plans/release-plan-template.d.ts.map +1 -1
- package/dist/lib/features/scheduler/scheduler-service.test.js +1 -0
- package/dist/lib/features/scheduler/scheduler-service.test.js.map +1 -1
- package/dist/lib/features/unique-connection/unique-connection-store.e2e.test.js +3 -0
- package/dist/lib/features/unique-connection/unique-connection-store.e2e.test.js.map +1 -1
- package/dist/lib/middleware/rbac-middleware.d.ts.map +1 -1
- package/dist/lib/middleware/rbac-middleware.js +3 -4
- package/dist/lib/middleware/rbac-middleware.js.map +1 -1
- package/dist/lib/middleware/rbac-middleware.test.js +62 -24
- package/dist/lib/middleware/rbac-middleware.test.js.map +1 -1
- package/dist/lib/middleware/session-context.d.ts +20 -0
- package/dist/lib/middleware/session-context.d.ts.map +1 -0
- package/dist/lib/middleware/session-context.js +38 -0
- package/dist/lib/middleware/session-context.js.map +1 -0
- package/dist/lib/openapi/spec/admin-segment-schema.d.ts +1 -1
- package/dist/lib/openapi/spec/advanced-playground-environment-feature-schema.d.ts +4 -4
- package/dist/lib/openapi/spec/advanced-playground-feature-schema.d.ts +8 -8
- package/dist/lib/openapi/spec/advanced-playground-response-schema.d.ts +17 -17
- package/dist/lib/openapi/spec/client-feature-schema.d.ts +2 -2
- package/dist/lib/openapi/spec/client-features-delta-schema.d.ts +5 -5
- package/dist/lib/openapi/spec/client-features-schema.d.ts +5 -5
- package/dist/lib/openapi/spec/client-segment-schema.d.ts +1 -1
- package/dist/lib/openapi/spec/constraint-schema.d.ts +2 -2
- package/dist/lib/openapi/spec/create-feature-strategy-schema.d.ts +1 -1
- package/dist/lib/openapi/spec/environment-project-schema.d.ts +2 -2
- package/dist/lib/openapi/spec/environments-project-schema.d.ts +4 -4
- package/dist/lib/openapi/spec/export-result-schema.d.ts +68 -68
- package/dist/lib/openapi/spec/feature-environment-schema.d.ts +17 -17
- package/dist/lib/openapi/spec/feature-schema.d.ts +34 -34
- package/dist/lib/openapi/spec/feature-search-environment-schema.d.ts +34 -34
- package/dist/lib/openapi/spec/feature-search-response-schema.d.ts +68 -68
- package/dist/lib/openapi/spec/feature-strategy-schema.d.ts +1 -1
- package/dist/lib/openapi/spec/health-overview-schema.d.ts +69 -69
- package/dist/lib/openapi/spec/health-report-schema.d.ts +69 -69
- package/dist/lib/openapi/spec/playground-constraint-schema.d.ts +1 -1
- package/dist/lib/openapi/spec/playground-feature-schema.arbitraries.d.ts +4 -0
- package/dist/lib/openapi/spec/playground-feature-schema.arbitraries.d.ts.map +1 -0
- package/dist/lib/openapi/spec/playground-feature-schema.arbitraries.js +91 -0
- package/dist/lib/openapi/spec/playground-feature-schema.arbitraries.js.map +1 -0
- package/dist/lib/openapi/spec/playground-feature-schema.d.ts +4 -4
- package/dist/lib/openapi/spec/playground-feature-schema.test.d.ts +1 -3
- package/dist/lib/openapi/spec/playground-feature-schema.test.d.ts.map +1 -1
- package/dist/lib/openapi/spec/playground-feature-schema.test.js +1 -89
- package/dist/lib/openapi/spec/playground-feature-schema.test.js.map +1 -1
- package/dist/lib/openapi/spec/playground-request-schema.arbitraries.d.ts +4 -0
- package/dist/lib/openapi/spec/playground-request-schema.arbitraries.d.ts.map +1 -0
- package/dist/lib/openapi/spec/playground-request-schema.arbitraries.js +9 -0
- package/dist/lib/openapi/spec/playground-request-schema.arbitraries.js.map +1 -0
- package/dist/lib/openapi/spec/playground-request-schema.test.d.ts +1 -3
- package/dist/lib/openapi/spec/playground-request-schema.test.d.ts.map +1 -1
- package/dist/lib/openapi/spec/playground-request-schema.test.js +1 -8
- package/dist/lib/openapi/spec/playground-request-schema.test.js.map +1 -1
- package/dist/lib/openapi/spec/playground-response-schema.d.ts +9 -9
- package/dist/lib/openapi/spec/playground-response-schema.test.js +2 -3
- package/dist/lib/openapi/spec/playground-response-schema.test.js.map +1 -1
- package/dist/lib/openapi/spec/playground-segment-schema.d.ts +1 -1
- package/dist/lib/openapi/spec/playground-strategy-schema.d.ts +2 -2
- package/dist/lib/openapi/spec/profile-schema.d.ts +34 -34
- package/dist/lib/openapi/spec/project-environment-schema.d.ts +1 -1
- package/dist/lib/openapi/spec/project-overview-schema.d.ts +69 -69
- package/dist/lib/openapi/spec/release-plan-milestone-schema.d.ts +4 -4
- package/dist/lib/openapi/spec/release-plan-milestone-strategy-schema.d.ts +2 -2
- package/dist/lib/openapi/spec/release-plan-schema.d.ts +8 -8
- package/dist/lib/openapi/spec/release-plan-template-schema.d.ts +14 -8
- package/dist/lib/openapi/spec/release-plan-template-schema.d.ts.map +1 -1
- package/dist/lib/openapi/spec/release-plan-template-schema.js +6 -0
- package/dist/lib/openapi/spec/release-plan-template-schema.js.map +1 -1
- package/dist/lib/openapi/spec/release-plan-templates-schema.d.ts +22 -16
- package/dist/lib/openapi/spec/release-plan-templates-schema.d.ts.map +1 -1
- package/dist/lib/openapi/spec/release-plans-schema.d.ts +16 -16
- package/dist/lib/openapi/spec/sdk-context-schema.arbitraries.d.ts +4 -0
- package/dist/lib/openapi/spec/sdk-context-schema.arbitraries.d.ts.map +1 -0
- package/dist/lib/openapi/spec/sdk-context-schema.arbitraries.js +12 -0
- package/dist/lib/openapi/spec/sdk-context-schema.arbitraries.js.map +1 -0
- package/dist/lib/openapi/spec/sdk-context-schema.test.d.ts +1 -3
- package/dist/lib/openapi/spec/sdk-context-schema.test.d.ts.map +1 -1
- package/dist/lib/openapi/spec/sdk-context-schema.test.js +1 -11
- package/dist/lib/openapi/spec/sdk-context-schema.test.js.map +1 -1
- package/dist/lib/openapi/spec/search-features-schema.d.ts +104 -104
- package/dist/lib/openapi/spec/segment-schema.d.ts +1 -1
- package/dist/lib/openapi/spec/segments-schema.d.ts +2 -2
- package/dist/lib/openapi/spec/ui-config-schema.d.ts +5 -0
- package/dist/lib/openapi/spec/ui-config-schema.d.ts.map +1 -1
- package/dist/lib/openapi/spec/ui-config-schema.js +5 -0
- package/dist/lib/openapi/spec/ui-config-schema.js.map +1 -1
- package/dist/lib/openapi/spec/update-feature-schema.d.ts +1 -1
- package/dist/lib/openapi/spec/update-feature-strategy-schema.d.ts +1 -1
- package/dist/lib/openapi/spec/upsert-segment-schema.d.ts +1 -1
- package/dist/lib/schema/feature-schema.test.js +1 -1
- package/dist/lib/schema/feature-schema.test.js.map +1 -1
- package/dist/lib/schema/html-input.d.ts +1 -1
- package/dist/lib/schema/html-input.d.ts.map +1 -1
- package/dist/lib/schema/html-input.js +5 -2
- package/dist/lib/schema/html-input.js.map +1 -1
- package/dist/lib/schema/html-input.test.js +1 -1
- package/dist/lib/schema/html-input.test.js.map +1 -1
- package/dist/lib/services/feature-tag-service.d.ts +1 -1
- package/dist/lib/services/feature-tag-service.d.ts.map +1 -1
- package/dist/lib/services/feature-tag-service.js +5 -1
- package/dist/lib/services/feature-tag-service.js.map +1 -1
- package/dist/lib/services/index.d.ts.map +1 -1
- package/dist/lib/services/index.js +1 -1
- package/dist/lib/services/index.js.map +1 -1
- package/dist/lib/services/project-schema.js +1 -1
- package/dist/lib/services/project-schema.js.map +1 -1
- package/dist/lib/types/events.d.ts +8 -0
- package/dist/lib/types/events.d.ts.map +1 -1
- package/dist/lib/types/events.js +4 -0
- package/dist/lib/types/events.js.map +1 -1
- package/dist/lib/types/experimental.d.ts +1 -1
- package/dist/lib/types/experimental.d.ts.map +1 -1
- package/dist/lib/types/experimental.js +6 -1
- package/dist/lib/types/experimental.js.map +1 -1
- package/dist/lib/types/option.d.ts +1 -0
- package/dist/lib/types/option.d.ts.map +1 -1
- package/dist/lib/types/permissions.d.ts +1 -0
- package/dist/lib/types/permissions.d.ts.map +1 -1
- package/dist/lib/types/permissions.js +2 -0
- package/dist/lib/types/permissions.js.map +1 -1
- package/dist/lib/types/stores.d.ts +1 -0
- package/dist/lib/types/stores.d.ts.map +1 -1
- package/dist/lib/types/stores.js.map +1 -1
- package/dist/lib/ui-config/ui-config-controller.d.ts +1 -2
- package/dist/lib/ui-config/ui-config-controller.d.ts.map +1 -1
- package/dist/lib/ui-config/ui-config-controller.js +3 -1
- package/dist/lib/ui-config/ui-config-controller.js.map +1 -1
- package/dist/lib/ui-config/ui-config-service.d.ts +3 -2
- package/dist/lib/ui-config/ui-config-service.d.ts.map +1 -1
- package/dist/lib/ui-config/ui-config-service.js +7 -1
- package/dist/lib/ui-config/ui-config-service.js.map +1 -1
- package/dist/lib/ui-config/ui-config.test.js +4 -0
- package/dist/lib/ui-config/ui-config.test.js.map +1 -1
- package/dist/lib/util/constants.d.ts +3 -1
- package/dist/lib/util/constants.d.ts.map +1 -1
- package/dist/lib/util/constants.js +11 -1
- package/dist/lib/util/constants.js.map +1 -1
- package/dist/mailtemplates/requested-cr-approval/requested-cr-approval.html.mustache +1 -1
- package/dist/migrations/20260706100000-add-project-column-to-release-plan-definitions.d.ts +3 -0
- package/dist/migrations/20260706100000-add-project-column-to-release-plan-definitions.d.ts.map +1 -0
- package/dist/migrations/20260706100000-add-project-column-to-release-plan-definitions.js +8 -0
- package/dist/migrations/20260706100000-add-project-column-to-release-plan-definitions.js.map +1 -0
- package/dist/migrations/20260708100000-add-project-release-template-permission.d.ts +3 -0
- package/dist/migrations/20260708100000-add-project-release-template-permission.d.ts.map +1 -0
- package/dist/migrations/20260708100000-add-project-release-template-permission.js +15 -0
- package/dist/migrations/20260708100000-add-project-release-template-permission.js.map +1 -0
- package/dist/server-dev.js +5 -1
- package/dist/server-dev.js.map +1 -1
- package/dist/test/arbitraries.d.ts +25 -0
- package/dist/test/arbitraries.d.ts.map +1 -0
- package/dist/test/arbitraries.js +143 -0
- package/dist/test/arbitraries.js.map +1 -0
- package/dist/test/arbitraries.test.d.ts +1 -24
- package/dist/test/arbitraries.test.d.ts.map +1 -1
- package/dist/test/arbitraries.test.js +1 -142
- package/dist/test/arbitraries.test.js.map +1 -1
- package/dist/test/e2e/api/admin/playground.e2e.test.js +2 -2
- package/dist/test/e2e/api/admin/playground.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/playground-service.test.js +2 -2
- package/dist/test/e2e/services/playground-service.test.js.map +1 -1
- package/dist/test/fixtures/fake-segment-store.d.ts +1 -1
- package/dist/test/fixtures/fake-segment-store.d.ts.map +1 -1
- package/dist/test/fixtures/fake-segment-store.js +2 -2
- package/dist/test/fixtures/fake-segment-store.js.map +1 -1
- package/dist/test/prom-last-wins.d.ts +2 -0
- package/dist/test/prom-last-wins.d.ts.map +1 -0
- package/dist/test/prom-last-wins.js +25 -0
- package/dist/test/prom-last-wins.js.map +1 -0
- package/dist/test/reset-cross-file-state.d.ts +2 -0
- package/dist/test/reset-cross-file-state.d.ts.map +1 -0
- package/dist/test/reset-cross-file-state.js +57 -0
- package/dist/test/reset-cross-file-state.js.map +1 -0
- package/dist/test-setup.d.ts.map +1 -1
- package/dist/test-setup.js +4 -0
- package/dist/test-setup.js.map +1 -1
- package/frontend/build/index.html +1 -1
- package/frontend/build/static/AccordionSummary-KVRcLxLK.js +1 -0
- package/frontend/build/static/AdvancedPlayground-Cls80com.js +3 -0
- package/frontend/build/static/Alert-DQgOzmJF.js +1 -0
- package/frontend/build/static/Avatar-xU_puYmY.js +1 -0
- package/frontend/build/static/BackendConnections-CkI8tLcv.js +1 -0
- package/frontend/build/static/Box-rSzdGLLJ.js +1 -0
- package/frontend/build/static/Button-yGjgMTJI.js +1 -0
- package/frontend/build/static/Button.story-CBE27I2T.js +1 -0
- package/frontend/build/static/CircularProgress-CmGBJn6I.js +124 -0
- package/frontend/build/static/Close-DKD1r3T7.js +1 -0
- package/frontend/build/static/Close-nISwbNAY.js +1 -0
- package/frontend/build/static/CodeRenderer-RNHlNPBl.js +1094 -0
- package/frontend/build/static/CodeRenderer.story-Vw214z1Z.js +2 -0
- package/frontend/build/static/Collapse-COunT4rQ.js +1 -0
- package/frontend/build/static/ConditionallyRender-CEffh9Z-.js +1 -0
- package/frontend/build/static/ConnectSdkStep-DnH4iwnu.js +1 -0
- package/frontend/build/static/ConnectSdkStep.story-DeWPTOZK.js +1 -0
- package/frontend/build/static/CreateProject-eo1TZ1so.js +1 -0
- package/frontend/build/static/Dialog-DLpX4v6X.js +1 -0
- package/frontend/build/static/DialogWithAside-BxVspeMV.js +1 -0
- package/frontend/build/static/DialogWithAside.story-Dqmr9MnM.js +1 -0
- package/frontend/build/static/Divider-BYq1CcT0.js +1 -0
- package/frontend/build/static/EnterpriseEdge-D-g3JGCd.js +6 -0
- package/frontend/build/static/FeatureCard.story-B2Q-SD_-.js +1 -0
- package/frontend/build/static/FeatureMetricsChart-ETalRWKx.js +2 -0
- package/frontend/build/static/FeatureStaleDialog-CvD9ojNj.js +8 -0
- package/frontend/build/static/{FeatureViewLazyExport-8eQKTvdS.js → FeatureViewLazyExport-10Z3_Wda.js} +3 -3
- package/frontend/build/static/FileCopy-D1ZqmNek.js +1 -0
- package/frontend/build/static/FlagMetricsChart-dLfSDZ_x.js +2 -0
- package/frontend/build/static/FlagUsageSnippet-DOGwaqPZ.js +2 -0
- package/frontend/build/static/FlagUsageSnippet.story-tfMvt3kG.js +1 -0
- package/frontend/build/static/FormControlLabel-BrOlsUbv.js +1 -0
- package/frontend/build/static/FormField-CRXe4g4R.js +1 -0
- package/frontend/build/static/FrontendNetworkTrafficUsage-DGEwK1Qg.js +1 -0
- package/frontend/build/static/GenerateApiKey-C1aJtPh-.js +1 -0
- package/frontend/build/static/GenerateApiKey.story-DNMZG0qg.js +1 -0
- package/frontend/build/static/GenerateApiKeySummary-DkPI02tH.js +1 -0
- package/frontend/build/static/GenerateApiKeySummary.story-CruMFwTQ.js +1 -0
- package/frontend/build/static/{GridLayoutWrapper-B_YyjZ7l.js → GridLayoutWrapper-B3BIpxoE.js} +3 -3
- package/frontend/build/static/Grow-CuQu7Z-P.js +1 -0
- package/frontend/build/static/HelpOutlineOutlined-HDH1hus2.js +1 -0
- package/frontend/build/static/HelpResources.story-warJFqf6.js +1 -0
- package/frontend/build/static/Highlighter-BS0Ow0vZ.js +1 -0
- package/frontend/build/static/HtmlTooltip-3YsoM_F5.js +1 -0
- package/frontend/build/static/IconButton-BveFD3PF.js +1 -0
- package/frontend/build/static/ImpactMetricsPage-C57istn7.js +1 -0
- package/frontend/build/static/ImpactViewsPage-MKEHnt2w.js +1 -0
- package/frontend/build/static/LazyAdminExport-DfIYVWQD.js +38 -0
- package/frontend/build/static/LazyProjectExport-30GlUH0L.js +46 -0
- package/frontend/build/static/LifecycleChartComponent-Tj1pN5Tj.js +2 -0
- package/frontend/build/static/LineChartComponent-_RiDjL2-.js +1 -0
- package/frontend/build/static/Link-wv6er_Jy.js +1 -0
- package/frontend/build/static/Loader-CnLypnQx.js +1 -0
- package/frontend/build/static/{LogRocketRunner-Duzg1Kzh.js → LogRocketRunner-BS6AEpSK.js} +1 -1
- package/frontend/build/static/MarkCompletedDialogue-BeIA6eMj.js +1 -0
- package/frontend/build/static/Menu-DUeb4XP8.js +1 -0
- package/frontend/build/static/MenuBook-DZFyn--3.js +1 -0
- package/frontend/build/static/MenuItem-DNlBQQYG.js +1 -0
- package/frontend/build/static/Modal-DdH902AP.js +1 -0
- package/frontend/build/static/NetworkOverview-DF8c0k1P.js +1 -0
- package/frontend/build/static/{NetworkPrometheusAPIWarning-Bq62ygkV.js → NetworkPrometheusAPIWarning-B0v-FihJ.js} +1 -1
- package/frontend/build/static/NetworkTraffic-C1I4wwcb.js +1 -0
- package/frontend/build/static/NetworkTrafficUsage-DkdQx64o.js +1 -0
- package/frontend/build/static/NotificationStack.story-CdeU4r0p.js +1 -0
- package/frontend/build/static/OnboardingProgress-BuWQ2rjB.js +1 -0
- package/frontend/build/static/OnboardingProgress.story-CmQztiFV.js +1 -0
- package/frontend/build/static/OpenInNew-CHcHAi4B.js +1 -0
- package/frontend/build/static/PageContent-lT51j8jO.js +1 -0
- package/frontend/build/static/Paper-BvPQ0Zq6.js +1 -0
- package/frontend/build/static/PercentageDonut-CZVWd5fE.js +1 -0
- package/frontend/build/static/PermissionButton-Tj54K9Kc.js +1 -0
- package/frontend/build/static/Popover-FHiFav9d.js +1 -0
- package/frontend/build/static/Popper-Cut-_j4A.js +1 -0
- package/frontend/build/static/Portal-kwmlgXGI.js +1 -0
- package/frontend/build/static/Radio-Cj82h8o5.js +1 -0
- package/frontend/build/static/RadioGroup-BWTZb8iE.js +1 -0
- package/frontend/build/static/ReactJSONEditor-D65iiPmM.js +4 -0
- package/frontend/build/static/ReactJSONEditor.story-Bt3pxUGO.js +1 -0
- package/frontend/build/static/RoleCell-tqHUOlI7.js +1 -0
- package/frontend/build/static/RtlProvider-D1AlROju.js +1 -0
- package/frontend/build/static/Safeguard-DFEQulxy.js +1 -0
- package/frontend/build/static/SdkEvaluationStatus-B1rMywp-.js +17 -0
- package/frontend/build/static/SdkEvaluationStatus.story-BxgqLICz.js +1 -0
- package/frontend/build/static/Select-DdG1oq6O.js +3 -0
- package/frontend/build/static/SelectSdk-Boj2Ug-2.js +1 -0
- package/frontend/build/static/SelectSdk-CzRoKDb5.js +1 -0
- package/frontend/build/static/SelectSdk.story-BT9ke5Eb.js +1 -0
- package/frontend/build/static/SelectSdk.story-CdzotYoq.js +1 -0
- package/frontend/build/static/Spacing.story-CB6GkN5Z.js +1 -0
- package/frontend/build/static/StoriesPage-luLnHVc2.js +1 -0
- package/frontend/build/static/SwitchBase-cxExIOp0.js +1 -0
- package/frontend/build/static/TextField-Cf03Ror7.js +1 -0
- package/frontend/build/static/ThemeColors.story-Cx9bv5pL.js +1 -0
- package/frontend/build/static/TokenExplanation-CJjBSQ07.js +1 -0
- package/frontend/build/static/TokenExplanation.story-BoOaHRrQ.js +1 -0
- package/frontend/build/static/Tooltip-DPzrXyNS.js +1 -0
- package/frontend/build/static/TooltipResolver-CIBfA4vm.js +1 -0
- package/frontend/build/static/Truncator-CF0-SVks.js +1 -0
- package/frontend/build/static/Typography-nCkGT67u.js +1 -0
- package/frontend/build/static/Typography.story-CofmlvJB.js +1 -0
- package/frontend/build/static/UIContext-Dsr0TY8K.js +1 -0
- package/frontend/build/static/WhatsNewLayout.story-p4Cm8bgx.js +1 -0
- package/frontend/build/static/aggregateFeatureMetrics-D7AXsd2U.js +1 -0
- package/frontend/build/static/capitalize-DfXJDj8P.js +1 -0
- package/frontend/build/static/chartjs-plugin-annotation.esm-tsR8Pv5a.js +1 -0
- package/frontend/build/static/chunk-KS7C4IRE-PUpsdS_b.js +3 -0
- package/frontend/build/static/code-block-BZePA-4e.js +1 -0
- package/frontend/build/static/copy-to-clipboard-BCU4eeSw.js +1 -0
- package/frontend/build/static/createBox-DaDvp7MB.js +1 -0
- package/frontend/build/static/createSimplePaletteValueFilter-Bt9IjErz.js +1 -0
- package/frontend/build/static/createSvgIcon-D-6jHYkf.js +1 -0
- package/frontend/build/static/dividerClasses-DcI5JVLQ.js +1 -0
- package/frontend/build/static/{enterpriseEdgeCloud-C5u35XAw.js → enterpriseEdgeCloud-qnOcFE1S.js} +1 -1
- package/frontend/build/static/esm-DViSjNxt.js +12 -0
- package/frontend/build/static/formatAccessText-BhC1wtCg.js +1 -0
- package/frontend/build/static/httpErrorResponseHandler-BzpwldnE.js +1 -0
- package/frontend/build/static/impact-metrics-DrmGy_gn.png +0 -0
- package/frontend/build/static/{impact-metrics-icon-6dt-ye-h.js → impact-metrics-icon-Cg_ki-2e.js} +1 -1
- package/frontend/build/static/index-C2zVj2FI.js +287 -0
- package/frontend/build/static/{jsx-runtime-BnvnyDTF.js → jsx-runtime-DYfQNk55.js} +1 -1
- package/frontend/build/static/mcp-ADx0Sju7.png +0 -0
- package/frontend/build/static/{metricsFormatters-DhX-aU17.js → metricsFormatters-BmjW0KTj.js} +1 -1
- package/frontend/build/static/milestone-CciNgBhP.png +0 -0
- package/frontend/build/static/{mui-CoU2c-id.js → mui-C_omlwxE.js} +1 -1
- package/frontend/build/static/networkTrafficUsageHighlightPlugin-DPi6id5j.js +1 -0
- package/frontend/build/static/react-Ca03aNmg.js +1 -0
- package/frontend/build/static/resolveProps-CAVsjga5.js +1 -0
- package/frontend/build/static/servicenow-BmgZtZjb.svg +13 -0
- package/frontend/build/static/sharedTypes-CXnpeg4U.js +1 -0
- package/frontend/build/static/styled-CY_-vLWk.js +1 -0
- package/frontend/build/static/theme-DDCs0xPV.js +1 -0
- package/frontend/build/static/{themeStyles-DGVpwkcv.js → themeStyles-B99HStK1.js} +1 -1
- package/frontend/build/static/useApi-B7ZLy5tN.js +1 -0
- package/frontend/build/static/useApiGetter-C41iZzl2.js +1 -0
- package/frontend/build/static/useApiTokens-BQWPDfv2.js +1 -0
- package/frontend/build/static/useConditionalSWR-QWHOvx6V.js +1 -0
- package/frontend/build/static/useConditionallyHiddenColumns-DbQbB4u7.js +5 -0
- package/frontend/build/static/useCustomEvent-BnWpZ2E1.js +1 -0
- package/frontend/build/static/useEnhancedEffect-BBMUaXin.js +1 -0
- package/frontend/build/static/useEnvironments-Gu7r2cpc.js +2 -0
- package/frontend/build/static/useEventTracker-B0ILyjZB.js +1 -0
- package/frontend/build/static/useGroupedImpactMetricsData-jQ7IYFK3.js +1 -0
- package/frontend/build/static/useId-Bg4oXGUa.js +1 -0
- package/frontend/build/static/{useImpactMetrics-9qDSEpTn.js → useImpactMetrics-DXxTQl6p.js} +2 -2
- package/frontend/build/static/{useImpactMetricsEnabled-wRNO6-Oh.js → useImpactMetricsEnabled-B3om8V0b.js} +1 -1
- package/frontend/build/static/{useInstanceTrafficMetrics-CRCDB4TX.js → useInstanceTrafficMetrics-DkgcWjVM.js} +1 -1
- package/frontend/build/static/useLocationSettings-vlEPA_j3.js +1 -0
- package/frontend/build/static/useMediaQuery-BFm2lR-0.js +2 -0
- package/frontend/build/static/useOptionalPathParam-Cmh3Ejbi.js +1 -0
- package/frontend/build/static/{usePageTitle-CHzzFshF.js → usePageTitle-DD1IHvCw.js} +1 -1
- package/frontend/build/static/useSlot-Ce59-xJL.js +1 -0
- package/frontend/build/static/useSlotProps-v77xI-e5.js +1 -0
- package/frontend/build/static/useTheme-CTychWp2.js +10 -0
- package/frontend/build/static/useTimeout-B2sc1jSE.js +1 -0
- package/frontend/build/static/useToast-BUHn_9TC.js +1 -0
- package/frontend/build/static/{useUiConfig-DbVjTDpE.js → useUiConfig-BcfEDPWc.js} +1 -1
- package/frontend/build/static/useUiFlag-PbKW1iMa.js +1 -0
- package/frontend/package.json +13 -14
- package/package.json +6 -5
- package/frontend/build/static/AccordionSummary-wye3oOm6.js +0 -1
- package/frontend/build/static/AdvancedPlayground-DdeMb-6I.js +0 -3
- package/frontend/build/static/Alert-_bLyWbvx.js +0 -1
- package/frontend/build/static/BackendConnections-kgR0xyIH.js +0 -1
- package/frontend/build/static/Box-BQsxfFmC.js +0 -1
- package/frontend/build/static/Button-CebB8EPB.js +0 -1
- package/frontend/build/static/CircularProgress-C_LUU3DK.js +0 -101
- package/frontend/build/static/Close-DyTASMSq.js +0 -1
- package/frontend/build/static/Collapse-DPPTUMpf.js +0 -1
- package/frontend/build/static/ConditionallyRender---uTpMBn.js +0 -1
- package/frontend/build/static/CreateProject-BSlg0WYM.js +0 -1
- package/frontend/build/static/Dialog-C-xQxqWX.js +0 -1
- package/frontend/build/static/DialogWithAside-DzCSDyWo.js +0 -1110
- package/frontend/build/static/Divider-CsdWvu5F.js +0 -1
- package/frontend/build/static/EnterpriseEdge-CjslqYDM.js +0 -6
- package/frontend/build/static/FeatureMetricsChart-B4WryxcW.js +0 -2
- package/frontend/build/static/FeatureStaleDialog-EzReRTI5.js +0 -8
- package/frontend/build/static/FileCopy-B8HZEA83.js +0 -1
- package/frontend/build/static/FlagMetricsChart-hNQuwOxW.js +0 -2
- package/frontend/build/static/FormControlLabel-F5gDLixN.js +0 -1
- package/frontend/build/static/FrontendNetworkTrafficUsage-pcr83PWo.js +0 -1
- package/frontend/build/static/Grow-BIbmvKVy.js +0 -1
- package/frontend/build/static/HelpOutlineOutlined-CpMsVJZu.js +0 -1
- package/frontend/build/static/Highlighter-MomUaQww.js +0 -1
- package/frontend/build/static/HtmlTooltip-B9jv1G1R.js +0 -1
- package/frontend/build/static/ImpactMetricsPage-DGH_S9oz.js +0 -1
- package/frontend/build/static/ImpactViewsPage-DZqKPFvE.js +0 -1
- package/frontend/build/static/LazyAdminExport-B1ReAViz.js +0 -38
- package/frontend/build/static/LazyProjectExport-BMVcGpNI.js +0 -46
- package/frontend/build/static/LifecycleChartComponent-BeoRUO9q.js +0 -2
- package/frontend/build/static/LineChartComponent-BbCMbJ-m.js +0 -1
- package/frontend/build/static/Link-CfIScd2f.js +0 -1
- package/frontend/build/static/Loader-DdgXftPc.js +0 -1
- package/frontend/build/static/MarkCompletedDialogue-CcXyp8UE.js +0 -1
- package/frontend/build/static/NetworkOverview-0mBnFAZX.js +0 -1
- package/frontend/build/static/NetworkTraffic-DmG5Iv25.js +0 -1
- package/frontend/build/static/NetworkTrafficUsage-DccaVLYs.js +0 -1
- package/frontend/build/static/OnboardingProgress-Bp9sZ-ZM.js +0 -1
- package/frontend/build/static/PageContent-c0NDm5oD.js +0 -1
- package/frontend/build/static/PercentageDonut-DBDGNJlh.js +0 -1
- package/frontend/build/static/PermissionButton-B-IfzChn.js +0 -1
- package/frontend/build/static/Popover-CUTnSn2h.js +0 -1
- package/frontend/build/static/Radio-DL8ja0ll.js +0 -1
- package/frontend/build/static/RadioGroup-Ci3WHaOy.js +0 -1
- package/frontend/build/static/ReactJSONEditor-DeBI7JPg.js +0 -4
- package/frontend/build/static/RoleCell-DhYvu4YH.js +0 -1
- package/frontend/build/static/Safeguard-DErU6fSK.js +0 -1
- package/frontend/build/static/SelectSdk-Dr_pzQgX.js +0 -2
- package/frontend/build/static/StoriesPage-frGP1Bfr.js +0 -2
- package/frontend/build/static/SwitchBase-DWPIxZnN.js +0 -1
- package/frontend/build/static/TextField-oipjeg6n.js +0 -3
- package/frontend/build/static/Tooltip-BaILXXti.js +0 -1
- package/frontend/build/static/TooltipResolver-4A1YhwBy.js +0 -1
- package/frontend/build/static/Truncator-D2bO9ub6.js +0 -1
- package/frontend/build/static/Typography-BTdLWIUX.js +0 -1
- package/frontend/build/static/aggregateFeatureMetrics-B-67HaIZ.js +0 -1
- package/frontend/build/static/chartjs-plugin-annotation.esm-DP4wCpdA.js +0 -1
- package/frontend/build/static/chunk-QUQL4437-Dr42NpoL.js +0 -3
- package/frontend/build/static/createBox-Cf2UJsmc.js +0 -1
- package/frontend/build/static/createSimplePaletteValueFilter-BRAMrHWJ.js +0 -1
- package/frontend/build/static/dividerClasses-Cc45lyWo.js +0 -1
- package/frontend/build/static/esm-DdgY1Q5s.js +0 -12
- package/frontend/build/static/httpErrorResponseHandler-FMtt7Zqh.js +0 -1
- package/frontend/build/static/index-C04TEs4k.js +0 -290
- package/frontend/build/static/networkTrafficUsageHighlightPlugin-DlOtHZg3.js +0 -1
- package/frontend/build/static/react-GZhdek4G.js +0 -1
- package/frontend/build/static/useApiGetter-7FP8Avm4.js +0 -1
- package/frontend/build/static/useApiTokens-C8Dqw_X1.js +0 -1
- package/frontend/build/static/useConditionalSWR-DGgzun6i.js +0 -1
- package/frontend/build/static/useConditionallyHiddenColumns-C5q9zdfJ.js +0 -5
- package/frontend/build/static/useCustomEvent-Dj2V5RVb.js +0 -1
- package/frontend/build/static/useEnvironments-CTguhgy0.js +0 -2
- package/frontend/build/static/useGroupedImpactMetricsData-CW9qnV2y.js +0 -1
- package/frontend/build/static/useMediaQuery-DGx8zAkf.js +0 -2
- package/frontend/build/static/useOptionalPathParam-Cx3ru9yC.js +0 -1
- package/frontend/build/static/useTheme-CQqAmDLr.js +0 -9
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e,t}from"./react-GZhdek4G.js";import{t as n}from"./jsx-runtime-BnvnyDTF.js";import{h as r,k as i,m as a,v as o,x as s}from"./createSimplePaletteValueFilter-BRAMrHWJ.js";import{n as c}from"./dividerClasses-Cc45lyWo.js";var l=e(t(),1),u=n(),d=e=>{let{absolute:t,children:n,classes:r,flexItem:i,orientation:a,textAlign:o,variant:l}=e;return s({root:[`root`,t&&`absolute`,l,a===`vertical`&&`vertical`,i&&`flexItem`,n&&`withChildren`,o===`right`&&a!==`vertical`&&`textAlignRight`,o===`left`&&a!==`vertical`&&`textAlignLeft`],wrapper:[`wrapper`,a===`vertical`&&`wrapperVertical`]},c,r)},f=o(`div`,{name:`MuiDivider`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.root,n.absolute&&t.absolute,t[n.variant],n.orientation===`vertical`&&t.vertical,n.flexItem&&t.flexItem,n.children&&t.withChildren,n.textAlign===`right`&&n.orientation!==`vertical`&&t.textAlignRight,n.textAlign===`left`&&n.orientation!==`vertical`&&t.textAlignLeft]}})(r(({theme:e})=>({margin:0,flexShrink:0,borderWidth:0,borderStyle:`solid`,borderColor:(e.vars||e).palette.divider,borderBottomWidth:`thin`,variants:[{props:{absolute:!0},style:{position:`absolute`,bottom:0,left:0,width:`100%`}},{props:{variant:`inset`},style:{marginLeft:72}},{props:{variant:`middle`,orientation:`horizontal`},style:{marginLeft:e.spacing(2),marginRight:e.spacing(2)}},{props:{variant:`middle`,orientation:`vertical`},style:{marginTop:e.spacing(1),marginBottom:e.spacing(1)}},{props:{orientation:`vertical`},style:{height:`100%`,borderBottomWidth:0,borderRightWidth:`thin`}},{props:{flexItem:!0},style:{alignSelf:`stretch`,height:`auto`}},{props:({ownerState:e})=>!!e.children,style:{display:`flex`,textAlign:`center`,border:0,borderTopStyle:`solid`,borderLeftStyle:`solid`,"&::before, &::after":{content:`""`,alignSelf:`center`}}},{props:({ownerState:e})=>e.children&&e.orientation!==`vertical`,style:{"&::before, &::after":{width:`100%`,borderTop:`thin solid ${(e.vars||e).palette.divider}`,borderTopStyle:`inherit`}}},{props:({ownerState:e})=>e.orientation===`vertical`&&e.children,style:{flexDirection:`column`,"&::before, &::after":{height:`100%`,borderLeft:`thin solid ${(e.vars||e).palette.divider}`,borderLeftStyle:`inherit`}}},{props:({ownerState:e})=>e.textAlign===`right`&&e.orientation!==`vertical`,style:{"&::before":{width:`90%`},"&::after":{width:`10%`}}},{props:({ownerState:e})=>e.textAlign===`left`&&e.orientation!==`vertical`,style:{"&::before":{width:`10%`},"&::after":{width:`90%`}}}]}))),p=o(`span`,{name:`MuiDivider`,slot:`Wrapper`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.wrapper,n.orientation===`vertical`&&t.wrapperVertical]}})(r(({theme:e})=>({display:`inline-block`,paddingLeft:`calc(${e.spacing(1)} * 1.2)`,paddingRight:`calc(${e.spacing(1)} * 1.2)`,whiteSpace:`nowrap`,variants:[{props:{orientation:`vertical`},style:{paddingTop:`calc(${e.spacing(1)} * 1.2)`,paddingBottom:`calc(${e.spacing(1)} * 1.2)`}}]}))),m=l.forwardRef(function(e,t){let n=a({props:e,name:`MuiDivider`}),{absolute:r=!1,children:o,className:s,orientation:c=`horizontal`,component:l=o||c===`vertical`?`div`:`hr`,flexItem:m=!1,role:h=l===`hr`?void 0:`separator`,textAlign:g=`center`,variant:_=`fullWidth`,...v}=n,y={...n,absolute:r,component:l,flexItem:m,orientation:c,role:h,textAlign:g,variant:_},b=d(y);return(0,u.jsx)(f,{as:l,className:i(b.root,s),role:h,ref:t,ownerState:y,"aria-orientation":h===`separator`&&(l!==`hr`||c===`vertical`)?c:void 0,...v,children:o?(0,u.jsx)(p,{className:b.wrapper,ownerState:y,children:o}):null})});export{m as t};
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import{o as e,t}from"./react-GZhdek4G.js";import{r as n}from"./chunk-QUQL4437-Dr42NpoL.js";import{s as r,t as i}from"./useTheme-CQqAmDLr.js";import{t as a}from"./jsx-runtime-BnvnyDTF.js";import{v as o}from"./createSimplePaletteValueFilter-BRAMrHWJ.js";import{t as s}from"./Tooltip-BaILXXti.js";import{i as c}from"./CircularProgress-C_LUU3DK.js";import{n as l,r as u,t as d}from"./AccordionSummary-wye3oOm6.js";import{t as f}from"./Typography-BTdLWIUX.js";import{t as ee}from"./Button-CebB8EPB.js";import{t as te,u as p}from"./httpErrorResponseHandler-FMtt7Zqh.js";import{n as m}from"./formatPath-j72gcKwy.js";import{t as h}from"./Truncator-D2bO9ub6.js";import{a as g}from"./formatDate-cFuM4JYl.js";import{t as _}from"./usePageTitle-CHzzFshF.js";import{t as v}from"./PageContent-c0NDm5oD.js";import{Ms as ne,Ns as re,Ss as ie,Ts as ae,bs as oe,jt as se,ns as y,po as b,qa as x,ws as S}from"./index-C04TEs4k.js";import{t as C}from"./enterpriseEdgeCloud-C5u35XAw.js";import{t as w}from"./unknownify-CCAQc7w1.js";var T=e(t(),1),E={connectedEdges:[],revisionIds:[]},D=e=>{let{data:t,error:n,mutate:r}=p(m(`api/admin/metrics/edges`),O,e);return(0,T.useMemo)(()=>{let e=!n&&!t;return t?.connectedEdges===void 0?Array.isArray(t)?{edgeObservability:{connectedEdges:t,revisionIds:[]},loading:e,refetch:()=>r(),error:n}:{edgeObservability:E,loading:e,refetch:()=>r(),error:n}:{edgeObservability:t,loading:e,refetch:()=>r(),error:n}},[t,n,r])},O=e=>fetch(e).then(te(`Connected Edges`)).then(e=>e.json()),k=se(),A=a(),j=c((0,A.jsx)(`path`,{d:`M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2`}),`Circle`),M=o(`table`)(({theme:e})=>({width:`100%`,borderCollapse:`collapse`,fontSize:e.fontSizes.smallerBody,"& > thead":{borderBottom:`1px solid ${e.palette.text.primary}`},"& tr":{textAlign:`right`,"& > th:first-of-type, td:first-of-type":{textAlign:`left`}}})),N=o(`tr`)(({theme:e})=>({fontWeight:e.fontWeight.bold,"&&& > td":{paddingTop:e.spacing(1),"& > div":{display:`flex`,alignItems:`center`}}})),P=({instance:e})=>(0,A.jsxs)(M,{children:[(0,A.jsx)(`thead`,{children:(0,A.jsxs)(`tr`,{children:[(0,A.jsx)(`th`,{children:`Latency (ms)`}),(0,A.jsx)(`th`,{children:`Avg`}),(0,A.jsx)(`th`,{children:`p99`})]})}),(0,A.jsxs)(`tbody`,{children:[(0,A.jsx)(N,{children:(0,A.jsx)(`td`,{colSpan:3,children:(0,A.jsxs)(`div`,{children:[`Upstream`,` `,(0,A.jsx)(x,{tooltip:`Latency measured for requests sent from this Edge instance to the configured upstream, i.e. Unleash or another Edge instance.`,size:`16px`})]})})}),(0,A.jsxs)(`tr`,{children:[(0,A.jsx)(`td`,{children:`Client Features`}),(0,A.jsx)(`td`,{children:e.upstreamFeaturesAverageLatencyMs}),(0,A.jsx)(`td`,{children:e.upstreamFeaturesP99LatencyMs})]}),(0,A.jsxs)(`tr`,{children:[(0,A.jsx)(`td`,{children:`Metrics`}),(0,A.jsx)(`td`,{children:e.upstreamMetricsAverageLatencyMs}),(0,A.jsx)(`td`,{children:e.upstreamMetricsP99LatencyMs})]}),(0,A.jsxs)(`tr`,{children:[(0,A.jsx)(`td`,{children:`Edge`}),(0,A.jsx)(`td`,{children:e.upstreamEdgeAverageLatencyMs}),(0,A.jsx)(`td`,{children:e.upstreamEdgeP99LatencyMs})]}),(0,A.jsx)(N,{children:(0,A.jsx)(`td`,{colSpan:3,children:(0,A.jsxs)(`div`,{children:[`Downstream`,` `,(0,A.jsx)(x,{tooltip:`Latency measured when serving requests from clients, i.e. SDKs or other Edge instances.`,size:`16px`})]})})}),(0,A.jsxs)(`tr`,{children:[(0,A.jsx)(`td`,{children:`Client Features`}),(0,A.jsx)(`td`,{children:e.clientFeaturesAverageLatencyMs}),(0,A.jsx)(`td`,{children:e.clientFeaturesP99LatencyMs})]}),(0,A.jsxs)(`tr`,{children:[(0,A.jsx)(`td`,{children:`Frontend`}),(0,A.jsx)(`td`,{children:e.frontendApiAverageLatencyMs}),(0,A.jsx)(`td`,{children:e.frontendApiP99LatencyMs})]})]})]}),F=o(`table`)(({theme:e})=>({width:`100%`,borderCollapse:`collapse`,fontSize:e.fontSizes.smallerBody,"& > thead":{borderBottom:`1px solid ${e.palette.text.primary}`},"& tr":{textAlign:`right`,"& > th:first-of-type, td:first-of-type":{textAlign:`left`},paddingTop:e.spacing(1)}})),I=o(`td`)(({theme:e})=>({paddingTop:e.spacing(1),maxWidth:`80px`,"& > div":{display:`flex`,alignItems:`center`,justifyContent:`end`}})),L=o(b)(({theme:e})=>({padding:e.spacing(0,1)})),R=e=>e.length===1?e[0]:`[]`,z=e=>`${R(e.projects)}:${e.environment}.***`,B=e=>e.length<=1||e.includes(`*`)?``:`
|
|
2
|
-
Projects: ${e.join(`, `)}
|
|
3
|
-
`,V=e=>`[${e.projects.join(`,`)}]:${e.environment}`,H=(e,t)=>{let n=new Set(e||[]),r=new Set(t);if(n.size!==r.size)return!1;for(let e of n)if(!r.has(e))return!1;return!0},U=(e,t)=>(e||[]).every(e=>t.has(e)),W=e=>e.find(e=>!e.projects||e.projects.length===0)?.revisionId??0,G=(e,t)=>{if(e.length===0)return;if(t.projects.includes(`*`))return Math.max(...e.map(e=>e.revisionId));let n=e.find(e=>H(e.projects,t.projects));if(n)return n.revisionId;let r=new Set(t.projects),i=e.filter(e=>U(e.projects,r));if(i.length!==0)return Math.max(...i.map(e=>e.revisionId))},K=(e,t)=>{let n=e.filter(e=>e.environment===t.environment),r=W(n),i=G(n.filter(e=>!!(e.projects&&e.projects.length>0)),t);return Math.max(i??0,r)},ce=e=>e<=0?`success`:e<5?`warning`:`error`,le=({edgeRevisionId:e,upstreamRevisionId:t})=>{let n=t-e;return(0,A.jsx)(s,{title:n<=0?`Edge feature configuration is up to date`:`Edge is ${n} revisions behind expected upstream revision for this token`,children:(0,A.jsx)(L,{color:ce(n),children:e})})},ue=({apiKeys:e,revisionIds:t})=>{let{locationSettings:n}=y();return!e||e.length===0?null:(0,A.jsxs)(F,{children:[(0,A.jsx)(`thead`,{children:(0,A.jsxs)(`tr`,{children:[(0,A.jsx)(`th`,{children:`Token`}),(0,A.jsx)(`th`,{children:`Revision`})]})}),(0,A.jsx)(`tbody`,{children:e?.map(e=>{let r=z(e);return(0,A.jsxs)(`tr`,{children:[(0,A.jsx)(I,{children:(0,A.jsx)(h,{title:r,children:r})}),(0,A.jsx)(I,{children:(0,A.jsxs)(`div`,{children:[(0,A.jsx)(le,{edgeRevisionId:e.revisionId,upstreamRevisionId:K(t,e)}),(0,A.jsx)(x,{tooltip:`
|
|
4
|
-
Edge last updated this token: ${g(e.lastUpdated,n.locale)}
|
|
5
|
-
${B(e.projects)}
|
|
6
|
-
`,size:`14px`})]})})]},V(e))})})]})},de=o(`div`)(({theme:e})=>({width:`100%`,borderRadius:e.shape.borderRadiusMedium,border:`1px solid`,borderColor:e.palette.secondary.border,backgroundColor:e.palette.secondary.light,display:`flex`,flexDirection:`column`,alignItems:`center`,padding:0,zIndex:1,marginTop:e.spacing(1)})),fe=o(u)({width:`100%`,background:`transparent`,boxShadow:`none`}),pe=o(d,{shouldForwardProp:e=>e!==`connectionStatus`})(({theme:e,connectionStatus:t})=>({fontSize:e.fontSizes.smallBody,padding:e.spacing(1),minHeight:e.spacing(3),"& .MuiAccordionSummary-content":{alignItems:`center`,gap:e.spacing(1),margin:0,"&.Mui-expanded":{margin:0},"& svg":{fontSize:e.fontSizes.mainHeader,color:t===`Stale`?e.palette.warning.main:t===`Disconnected`?e.palette.error.main:e.palette.success.main}}})),me=o(l)(({theme:e})=>({display:`flex`,flexDirection:`column`,fontSize:e.fontSizes.smallerBody,gap:e.spacing(2)})),q=o(`div`)(({theme:e})=>({display:`flex`,justifyContent:`space-between`,gap:e.spacing(2),"& > span":{display:`flex`,alignItems:`center`}})),he=o(b)(({theme:e})=>({padding:e.spacing(0,1)})),ge=({hosting:e})=>{switch(e){case`hosted`:return`Cloud`;case`enterprise-self-hosted`:return`Self-hosted`;default:return e?`Unknown: ${e}`:`Unknown`}},_e=({reportedAt:e})=>{let t=new Date(e).getTime(),n=(Date.now()-t)/1e3;return n>360?`Disconnected`:n>180?`Stale`:`Connected`},ve=({started:e,reportedAt:t,cpuUsage:n})=>{let r=Number(n);if(!r)return`No usage`;let i=new Date(e).getTime(),a=(new Date(t).getTime()-i)/1e3;return a===0?`No usage`:`${(r/a*100).toFixed(2)} %`},ye=({memoryUsage:e})=>{if(!e)return`No usage`;let t=[`B`,`KB`,`MB`,`GB`],n=e,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r++;return`${n.toFixed(2)} ${t[r]}`},be=({instance:e,revisionIds:t})=>{let{locationSettings:n}=y(),r=S(`enterpriseEdgeTokensList`),i=_e(e),a=g(e.started,n?.locale),o=g(e.reportedAt,n?.locale),c=ve(e),l=ye(e),u=c===`No usage`&&l===`No usage`&&(0,A.jsx)(`p`,{children:`Resource metrics are only available when running on Linux.`});return(0,A.jsx)(de,{children:(0,A.jsxs)(fe,{children:[(0,A.jsxs)(pe,{expandIcon:(0,A.jsx)(oe,{}),connectionStatus:i,children:[(0,A.jsx)(s,{arrow:!0,title:`${i}. Last reported: ${o}`,children:(0,A.jsx)(j,{})}),e.id||e.instanceId]}),(0,A.jsxs)(me,{children:[(0,A.jsxs)(q,{children:[(0,A.jsx)(`strong`,{children:`ID`}),(0,A.jsx)(`span`,{children:e.instanceId})]}),(0,A.jsxs)(q,{children:[(0,A.jsx)(`strong`,{children:`Upstream server`}),(0,A.jsx)(`span`,{children:e.connectedVia||`Unleash`})]}),(0,A.jsxs)(q,{children:[(0,A.jsx)(`strong`,{children:`Region`}),(0,A.jsx)(`span`,{children:e.region||`Unknown`})]}),(0,A.jsxs)(q,{children:[(0,A.jsx)(`strong`,{children:`Hosting`}),(0,A.jsx)(`span`,{children:ge(e)})]}),(0,A.jsxs)(q,{children:[(0,A.jsx)(`strong`,{children:`Version`}),(0,A.jsx)(`span`,{children:e.edgeVersion})]}),(0,A.jsxs)(q,{children:[(0,A.jsx)(`strong`,{children:`Status`}),(0,A.jsx)(he,{color:i===`Disconnected`?`error`:i===`Stale`?`warning`:`success`,children:i})]}),(0,A.jsxs)(q,{children:[(0,A.jsx)(`strong`,{children:`Start`}),(0,A.jsx)(`span`,{children:a})]}),(0,A.jsxs)(q,{children:[(0,A.jsx)(`strong`,{children:`Last report`}),(0,A.jsx)(`span`,{children:o})]}),(0,A.jsxs)(q,{children:[(0,A.jsx)(`strong`,{children:`CPU`}),(0,A.jsxs)(`span`,{children:[c,` `,(0,A.jsx)(x,{tooltip:(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(`p`,{children:`CPU average usage since instance started.`}),u]}),size:`16px`})]})]}),(0,A.jsxs)(q,{children:[(0,A.jsx)(`strong`,{children:`Memory`}),(0,A.jsxs)(`span`,{children:[l,` `,(0,A.jsx)(x,{tooltip:(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(`p`,{children:`Current memory usage.`}),u]}),size:`16px`})]})]}),(0,A.jsxs)(q,{children:[(0,A.jsx)(`strong`,{children:`Stream clients`}),(0,A.jsx)(`span`,{children:e.connectedStreamingClients})]}),(0,A.jsx)(q,{children:(0,A.jsx)(P,{instance:e})}),r&&(0,A.jsx)(q,{children:(0,A.jsx)(ue,{apiKeys:e.apiKeyRevisionIds,revisionIds:t})})]})]})})},J=`Unleash`,xe=o(`div`)(({theme:e})=>({marginBottom:e.spacing(18),display:`flex`,justifyContent:`center`})),Se=o(`div`)(({theme:e})=>({display:`flex`,justifyContent:`center`,gap:e.spacing(4),flexWrap:`wrap`,marginTop:e.spacing(2)})),Y=o(`div`)(({theme:e})=>({borderRadius:e.shape.borderRadiusMedium,border:`1px solid ${e.palette.secondary.border}`,backgroundColor:e.palette.secondary.light,display:`flex`,flexDirection:`column`,alignItems:`center`,padding:e.spacing(1.5),zIndex:1,marginTop:e.spacing(1),"& > svg":{width:e.spacing(9),height:e.spacing(9)}})),Ce=o(Y)(({theme:e})=>({backgroundColor:r(e.palette.background.paper,.75),position:`relative`})),we=o(b)({position:`absolute`,top:-13}),Te=o(f)(({theme:e})=>({marginTop:e.spacing(.5),fontWeight:e.fontWeight.bold})),Ee=o(f)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,color:e.palette.text.secondary})),De=e=>e.reduce((e,t)=>(e.has(t.appName)||e.set(t.appName,{appName:t.appName,instances:[],groupTargets:new Set,level:0}),e.get(t.appName).instances.push(t),e),new Map),Oe=e=>{let t=new Map,n=r=>{if(t.has(r.appName))return t.get(r.appName);let i=0;return r.groupTargets.forEach(t=>{if(t!==J){let r=e.get(t);r&&(i=Math.max(i,n(r)+1))}}),t.set(r.appName,i),i};e.forEach(e=>{e.level=n(e)});let r=new Map;return e.forEach(e=>{let t=r.get(e.level)||[];t.push(e),r.set(e.level,t)}),r},ke=e=>{let t=De(e),n=new Map,r=new Map;return t.forEach(e=>{e.instances=e.instances.sort((e,t)=>e.instanceId.localeCompare(t.instanceId)).map((t,i)=>{let a=`${e.appName}-${i+1}`;return n.set(t.instanceId,a),r.set(a,e.appName),{...t,id:a}})}),t.forEach(e=>{e.instances=e.instances.map(e=>({...e,connectedVia:e.connectedVia?n.get(e.connectedVia)||e.connectedVia:J}));let t=new Set;e.instances.forEach(n=>{if(!n.connectedVia||n.connectedVia===J)t.add(J);else{let i=r.get(n.connectedVia);i&&i!==e.appName&&t.add(i)}}),e.groupTargets=t}),Oe(t)},Ae=e=>e.every(e=>e.hosting===`hosted`)?{hostingLabel:`Cloud`,hostingColor:`secondary`}:e.every(e=>e.hosting===`enterprise-self-hosted`)?{hostingLabel:`Self-hosted`,hostingColor:`info`}:e.every(e=>e.hosting===`hosted`||e.hosting===`enterprise-self-hosted`)?{hostingLabel:`Hybrid`,hostingColor:`warning`}:{hostingLabel:`Unknown`,hostingColor:`neutral`},je=({connectedEdges:e,revisionIds:t})=>{let n=i(),r=(0,T.useMemo)(()=>ke(e),[e]),a=Array.from(r.keys()).sort((e,t)=>e-t);return(0,A.jsxs)(k.ArcherContainer,{strokeColor:n.palette.text.primary,endShape:{arrow:{arrowLength:4,arrowThickness:4}},children:[(0,A.jsx)(xe,{children:(0,A.jsx)(k.ArcherElement,{id:J,children:(0,A.jsxs)(Y,{children:[(0,A.jsx)(ae,{darkmode:(0,A.jsx)(ne,{}),lightmode:(0,A.jsx)(re,{})}),(0,A.jsx)(f,{sx:{mt:1},children:J})]})})}),a.map(e=>(0,A.jsx)(Se,{children:r.get(e)?.map(({appName:e,groupTargets:r,instances:i})=>{let{hostingLabel:a,hostingColor:o}=Ae(i);return(0,A.jsx)(k.ArcherElement,{id:e,relations:Array.from(r).map(e=>({targetId:e,targetAnchor:`bottom`,sourceAnchor:`top`,style:{strokeColor:n.palette.secondary.border}})),children:(0,A.jsxs)(Ce,{children:[(0,A.jsx)(we,{color:o,children:a}),(0,A.jsx)(Te,{children:w(e)}),(0,A.jsxs)(Ee,{children:[i.length,` instance`,i.length!==1&&`s`]}),i.map(e=>(0,A.jsx)(be,{instance:e,revisionIds:t},e.instanceId))]})},e)})},e))]})},Me=e=>(0,A.jsxs)(`svg`,{width:312,height:144,viewBox:`0 0 312 144`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,...e,children:[(0,A.jsx)(`rect`,{width:312,height:144,rx:8,fill:`#F1F0FC`}),(0,A.jsxs)(`g`,{opacity:.2,children:[(0,A.jsx)(`circle`,{cx:155.933,cy:72.1494,r:59.9326,stroke:`#657A80`,strokeWidth:1.35669,strokeLinecap:`square`}),(0,A.jsx)(`ellipse`,{cx:155.933,cy:72.2595,rx:43.5873,ry:60.2595,stroke:`#657A80`,strokeWidth:1.35669,strokeLinecap:`square`}),(0,A.jsx)(`ellipse`,{cx:156.368,cy:72.1494,rx:27.2421,ry:59.9326,stroke:`#657A80`,strokeWidth:1.35669,strokeLinecap:`square`}),(0,A.jsx)(`ellipse`,{cx:156.369,cy:72.1494,rx:10.8968,ry:59.9326,stroke:`#657A80`,strokeWidth:1.35669,strokeLinecap:`square`})]}),(0,A.jsxs)(`g`,{opacity:.2,children:[(0,A.jsx)(`mask`,{id:`mask0_35832_1410`,style:{maskType:`alpha`},maskUnits:`userSpaceOnUse`,x:96,y:12,width:120,height:121,children:(0,A.jsx)(`circle`,{cx:155.933,cy:72.1494,r:59.2542,fill:`#92A1A5`,stroke:`#657A80`,strokeWidth:1.35669})}),(0,A.jsxs)(`g`,{mask:`url(#mask0_35832_1410)`,children:[(0,A.jsx)(`path`,{d:`M96 48.1777C96 48.1777 109.076 59.2925 155.933 59.2925C202.789 59.2925 215.865 48.1777 215.865 48.1777`,stroke:`#657A80`,strokeWidth:1.35669}),(0,A.jsx)(`path`,{d:`M96 28.3438C96 28.3438 109.076 45.7787 155.933 45.7787C202.789 45.7787 215.865 28.3438 215.865 28.3438`,stroke:`#657A80`,strokeWidth:1.35669}),(0,A.jsx)(`path`,{d:`M96 2.19141C96 2.19141 109.076 33.1384 155.933 33.1384C202.789 33.1384 215.865 2.19141 215.865 2.19141`,stroke:`#657A80`,strokeWidth:1.35669}),(0,A.jsx)(`path`,{d:`M96 -39.4336C96 -39.4336 109.076 21.3707 155.933 21.3707C202.789 21.3707 215.865 -39.4336 215.865 -39.4336`,stroke:`#657A80`,strokeWidth:1.35669}),(0,A.jsx)(`line`,{x1:96,y1:71.472,x2:215.865,y2:71.472,stroke:`#657A80`,strokeWidth:1.35669}),(0,A.jsx)(`path`,{d:`M215.867 95.6855C215.867 95.6855 202.79 84.5708 155.934 84.5708C109.078 84.5708 96.0016 95.6855 96.0016 95.6855`,stroke:`#657A80`,strokeWidth:1.35669}),(0,A.jsx)(`path`,{d:`M215.867 115.518C215.867 115.518 202.79 98.0826 155.934 98.0826C109.078 98.0826 96.0016 115.518 96.0016 115.518`,stroke:`#657A80`,strokeWidth:1.35669}),(0,A.jsx)(`path`,{d:`M215.867 141.672C215.867 141.672 202.79 110.725 155.934 110.725C109.078 110.725 96.0016 141.672 96.0016 141.672`,stroke:`#657A80`,strokeWidth:1.35669}),(0,A.jsx)(`path`,{d:`M215.866 183.297C215.866 183.297 202.79 122.493 155.934 122.493C109.078 122.493 96.0013 183.297 96.0013 183.297`,stroke:`#657A80`,strokeWidth:1.35669})]})]}),(0,A.jsx)(`rect`,{x:116.749,y:86.5273,width:58.1081,height:29.0541,rx:14.527,transform:`rotate(-180 116.749 86.5273)`,fill:`url(#paint0_linear_35832_1410)`}),(0,A.jsx)(`ellipse`,{cx:102.184,cy:71.9997,rx:14.565,ry:14.527,fill:`#817AFE`}),(0,A.jsx)(`path`,{d:`M106.258 67.9648H98.187V76.0354H106.258V67.9648Z`,fill:`white`}),(0,A.jsx)(`path`,{d:`M140.556 78.3887L140.232 70.291L133.381 74.6202L140.556 78.3887ZM121.749 69.1189L129.108 72.5139L128.369 64.4436L121.749 69.1189ZM137.182 73.0493L137.645 72.5217C136.53 71.5447 135.079 70.5495 133.191 69.6186L132.88 70.2481L132.57 70.8776C134.358 71.7589 135.705 72.6876 136.719 73.577L137.182 73.0493ZM132.88 70.2481L133.191 69.6186C131.302 68.6877 129.629 68.143 128.176 67.8544L128.039 68.5428L127.902 69.2312C129.225 69.4939 130.782 69.9964 132.57 70.8776L132.88 70.2481Z`,fill:`#6C65E5`}),(0,A.jsx)(`rect`,{x:147.284,y:55.7305,width:17.4324,height:32.5405,rx:3.48649,fill:`#1A4049`}),(0,A.jsx)(`path`,{d:`M171.444 78.3887L171.768 70.291L178.619 74.6202L171.444 78.3887ZM190.251 69.1189L182.892 72.5139L183.631 64.4436L190.251 69.1189ZM174.818 73.0493L174.355 72.5217C175.47 71.5447 176.921 70.5495 178.809 69.6186L179.12 70.2481L179.43 70.8776C177.642 71.7589 176.295 72.6876 175.281 73.577L174.818 73.0493ZM179.12 70.2481L178.809 69.6186C180.698 68.6877 182.371 68.143 183.824 67.8544L183.961 68.5428L184.098 69.2312C182.775 69.4939 181.218 69.9964 179.43 70.8776L179.12 70.2481Z`,fill:`#6C65E5`}),(0,A.jsx)(`rect`,{x:253.359,y:86.5273,width:58.1081,height:29.0541,rx:14.527,transform:`rotate(-180 253.359 86.5273)`,fill:`url(#paint1_linear_35832_1410)`}),(0,A.jsx)(`ellipse`,{cx:238.794,cy:71.9997,rx:14.565,ry:14.527,fill:`#1A4049`}),(0,A.jsx)(`path`,{d:`M242.867 67.9648H234.797V76.0354H242.867V67.9648Z`,fill:`#EDF0F1`}),(0,A.jsxs)(`defs`,{children:[(0,A.jsxs)(`linearGradient`,{id:`paint0_linear_35832_1410`,x1:116.737,y1:100.985,x2:174.889,y2:100.985,gradientUnits:`userSpaceOnUse`,children:[(0,A.jsx)(`stop`,{stopColor:`#1A4049`,stopOpacity:0}),(0,A.jsx)(`stop`,{offset:1,stopColor:`#0E1A1D`})]}),(0,A.jsxs)(`linearGradient`,{id:`paint1_linear_35832_1410`,x1:253.347,y1:100.985,x2:311.499,y2:100.985,gradientUnits:`userSpaceOnUse`,children:[(0,A.jsx)(`stop`,{stopColor:`#657A80`,stopOpacity:0}),(0,A.jsx)(`stop`,{offset:1,stopColor:`#1A4049`,stopOpacity:.75})]})]})]}),Ne=o(`div`)(({theme:e})=>({display:`flex`,flexDirection:`column`,gap:e.spacing(1),maxWidth:e.spacing(80),margin:`auto`})),Pe=o(`div`)(({theme:e})=>({display:`flex`,flexDirection:`row`,gap:e.spacing(2.5),marginTop:e.spacing(2.5)})),Fe=o(`div`)(({theme:e})=>({border:`1px solid ${e.palette.divider}`,borderRadius:e.shape.borderRadiusLarge,padding:e.spacing(3),flex:1,display:`flex`,flexDirection:`column`,gap:e.spacing(1.5)})),Ie=o(`div`)({"& > svg":{width:`auto`,maxWidth:`100%`,height:`auto`,display:`block`}}),Le=o(`ul`)(({theme:e})=>({listStyle:`none`,marginTop:e.spacing(1),marginBottom:e.spacing(1),paddingLeft:e.spacing(0),display:`flex`,flexDirection:`column`,gap:e.spacing(1)})),X=o(`li`)(({theme:e})=>({display:`flex`,alignItems:`center`,gap:e.spacing(1)})),Re=o(ie)(({theme:e})=>({color:e.palette.primary.main,fontSize:`18px`})),ze=o(`div`)(({theme:e})=>({display:`flex`,justifyContent:`flex-start`,margin:e.spacing(-.75)})),Be=()=>(0,A.jsxs)(Ne,{children:[(0,A.jsx)(f,{variant:`h3`,children:`Which version is right for you?`}),(0,A.jsxs)(f,{variant:`body2`,sx:{color:`text.secondary`},children:[`Unleash Enterprise Edge is a high-performance proxy engineered for scalability, resilience, and privacy. It acts as a shield between your SDKs and the Unleash API, allowing you to handle thousands of concurrent connections with zero impact on your primary instance. Contact`,` `,(0,A.jsx)(`a`,{href:`mailto:license@getunleash.io`,children:`license@getunleash.io`}),` `,`today to provision your private Enterprise Edge environment.`]}),(0,A.jsxs)(Pe,{children:[(0,A.jsx)(Z,{image:(0,A.jsx)(C,{}),title:`Cloud hosted`,description:`When you need to connect to Unleash from geographically distributed locations.`,bullets:[`Global infrastructure`,`No operational burden`,`Instant flag updates worldwide`],docsUrl:`https://docs.getunleash.io/deploy/hosting-options#cloud-hosted`}),(0,A.jsx)(Z,{image:(0,A.jsx)(Me,{}),title:`Self hosted`,description:`Ensure low latency and data sovereignty by running Enterprise Edge inside your private network.`,bullets:[`Ideal for PII heavy data`,`Optimized for minimal latency`,`Improved security`],docsUrl:`https://docs.getunleash.io/deploy/hosting-options#self-hosted`})]})]}),Z=({image:e,title:t,description:r,bullets:i,docsUrl:a})=>(0,A.jsxs)(Fe,{children:[(0,A.jsx)(Ie,{children:e}),(0,A.jsx)(f,{variant:`h3`,children:t}),(0,A.jsx)(f,{variant:`body2`,sx:{color:`text.secondary`},children:r}),(0,A.jsx)(Le,{children:i.map(e=>(0,A.jsxs)(X,{children:[(0,A.jsx)(Re,{}),` `,(0,A.jsx)(f,{variant:`body2`,sx:{color:`text.secondary`},children:e})]},e))}),(0,A.jsxs)(f,{variant:`body2`,sx:{color:`text.secondary`},children:[`Contact`,` `,(0,A.jsx)(`a`,{href:`mailto:license@getunleash.io`,children:`license@getunleash.io`}),` to get started.`]}),(0,A.jsx)(ze,{children:(0,A.jsx)(ee,{component:n,nativeButton:!1,to:a,size:`medium`,sx:{fontSize:`14px`},rel:`noopener noreferrer`,target:`_blank`,children:`Read docs`})})]}),Ve=o(v)(({theme:e})=>({".body":{padding:e.spacing(0)}})),Q=o(`div`)(({theme:e})=>({padding:e.spacing(4)})),He=o(`hr`)(({theme:e})=>({border:`none`,height:`1px`,background:e.palette.divider,width:`100%`,margin:e.spacing(2,0)})),$=()=>{_(`Enterprise Edge`);let{edgeObservability:e}=D({refreshInterval:3e4}),t=e.connectedEdges.length>0;return(0,A.jsxs)(Ve,{header:`Enterprise Edge`,children:[t&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(Q,{children:(0,A.jsx)(je,{connectedEdges:e.connectedEdges,revisionIds:e.revisionIds})}),(0,A.jsx)(He,{})]}),(0,A.jsx)(Q,{sx:{pb:t?6:4},children:(0,A.jsx)(Be,{})})]})};export{$ as EnterpriseEdge,$ as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{o as e,t}from"./react-GZhdek4G.js";import{t as n}from"./useTheme-CQqAmDLr.js";import{t as r}from"./jsx-runtime-BnvnyDTF.js";import{i,r as a,t as o}from"./formatDate-cFuM4JYl.js";import{Ft as s,Jt as c,Kt as l,Qt as u,en as d,in as f,mn as p,nn as m,ns as h,qt as g,rn as _}from"./index-C04TEs4k.js";import{t as v}from"./daysOrHours-owFAL-4S.js";var y=e(t(),1),b=(e,t,n)=>({datasets:[{label:`Enabled`,borderColor:e.palette.charts.flagMetrics.enabled,backgroundColor:e.palette.charts.flagMetrics.enabled,data:x(t,n,e=>e.yes)},{label:`Not enabled`,borderColor:e.palette.charts.flagMetrics.notEnabled,backgroundColor:e.palette.charts.flagMetrics.notEnabled,data:x(t,n,e=>e.no)}]}),x=(e,t,n)=>e.map(e=>({x:e.timestamp,y:n(e),variants:e.variants||{}})),S=(e,t)=>{if(t===0)return``;let[n,r]=e;return`${r} (${Math.floor(Number(r)/t*100)}%) - ${n}`},C=(e,t,n,r)=>({locale:r.locale,responsive:!0,maintainAspectRatio:!1,interaction:{mode:`index`,intersect:!1},color:e.palette.text.secondary,plugins:{tooltip:{backgroundColor:e.palette.background.paper,bodyColor:e.palette.text.primary,titleColor:e.palette.text.secondary,borderColor:e.palette.primary.main,borderWidth:1,padding:10,boxPadding:5,usePointStyle:!0,position:`nearest`,itemSort:(e,t)=>{let n=[`Enabled`,`Not enabled`];return n.indexOf(e.dataset.label)-n.indexOf(t.dataset.label)},callbacks:{beforeBody:e=>`${e.reduce((e,t)=>e+(t.parsed.y??0),0).toLocaleString(r.locale)} - Total evaluations`,label:e=>`${e.formattedValue} - ${e.dataset.label}`,afterLabel:e=>{let t=e.dataset.data[e.dataIndex];if(e.dataset.label!==`Enabled`||t.variants===void 0)return``;let{disabled:n,...r}=t.variants;return Object.entries(r).map(e=>S(e,t.y)).join(`
|
|
2
|
-
`)},title:e=>`Time: ${n>48?i(e[0].parsed.x??0,r.locale,`UTC`):o(e[0].parsed.x??0,r.locale)}`}},legend:{position:`top`,align:`end`,labels:{boxWidth:10,boxHeight:10,usePointStyle:!0}},title:{text:w(n),position:`top`,align:`start`,display:!0,font:{size:16,weight:400},color:e.palette.text.primary}},scales:{y:{type:`linear`,stacked:!0,title:{display:!0,text:`Number of requests`,color:e.palette.text.secondary},suggestedMin:0,ticks:{precision:0,color:e.palette.text.secondary},grid:{color:e.palette.divider},border:{color:e.palette.divider}},x:{type:`time`,stacked:!0,time:{unit:n>48?`day`:`hour`},grid:{display:!1},ticks:{callback:(e,t,i)=>n>48?a(i[t].value,r.locale,`UTC`):o(i[t].value,r.locale),color:e.palette.text.secondary}}}}),w=e=>e===1?`Requests in the last hour`:`Requests in the last ${v(e)}`;p.font={...p.font,family:`Sen`,size:13,weight:400};var T=r(),E=({metrics:e,hoursBack:t,statsSectionId:r})=>{let i=n(),{locationSettings:a}=h(),o=(0,y.useMemo)(()=>[...e].sort((e,t)=>e.timestamp.localeCompare(t.timestamp)),[e]),c=(0,y.useMemo)(()=>C(i,o,t,a),[i,o,t,a]);return(0,T.jsx)(`div`,{style:{height:400},children:(0,T.jsx)(s,{data:(0,y.useMemo)(()=>b(i,o,a),[i,o,a]),options:c,"aria-label":`A stacked bar chart showing feature flag exposure metrics: exposed and not exposed requests.`,"aria-describedby":r})})};c.register(g,u,l,d,m,f,_);export{E as FeatureMetricsChart,E as default};
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import{o as e,t}from"./react-GZhdek4G.js";import{u as n}from"./chunk-QUQL4437-Dr42NpoL.js";import{t as r}from"./useTheme-CQqAmDLr.js";import{t as i}from"./jsx-runtime-BnvnyDTF.js";import{v as a}from"./createSimplePaletteValueFilter-BRAMrHWJ.js";import{D as o,b as s,t as c}from"./TextField-oipjeg6n.js";import{i as l}from"./CircularProgress-C_LUU3DK.js";import{t as u}from"./ConditionallyRender---uTpMBn.js";import{n as d,r as f,t as p}from"./AccordionSummary-wye3oOm6.js";import{t as m}from"./Typography-BTdLWIUX.js";import{t as h}from"./Box-BQsxfFmC.js";import{t as g}from"./Button-CebB8EPB.js";import{t as _}from"./Link-CfIScd2f.js";import{a as v,i as y,n as b,o as x}from"./TooltipResolver-4A1YhwBy.js";import{u as S}from"./themeStyles-DGVpwkcv.js";import{i as C}from"./parse-Chj4PyAg.js";import{t as w,u as ee,y as te}from"./httpErrorResponseHandler-FMtt7Zqh.js";import{n as T,r as ne}from"./formatPath-j72gcKwy.js";import{B as re,Et as E,S as ie,l as D,t as O,wt as k}from"./PermissionButton-B-IfzChn.js";import{n as ae}from"./useCustomEvent-Dj2V5RVb.js";import{t as A}from"./useUiConfig-DbVjTDpE.js";import{it as oe}from"./testIds-B_Ev-uQn.js";import{r as se}from"./FileCopy-B8HZEA83.js";import{t as ce}from"./useConditionalSWR-DGgzun6i.js";import{Ai as j,Bi as M,Da as N,Di as P,Ei as F,Ii as I,Ir as L,Jo as R,Li as z,Lr as B,Mi as V,Oi as H,R as U,Ri as W,Ss as G,Xs as le,Ya as ue,bs as de,co as fe,fo as pe,ki as K,ks as me,ms as he,po as q,ro as ge,rs as _e,ti as ve,to as J}from"./index-C04TEs4k.js";import{a as ye,d as be,f as xe,h as Se,i as Ce,n as we,o as Te,p as Ee,s as De,t as Oe}from"./DialogWithAside-DzCSDyWo.js";var Y=i(),ke=l((0,Y.jsx)(`path`,{d:`M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2m-2 10H7v-2h10z`}),`IndeterminateCheckBox`),Ae=o(),je=({options:e,selectedOptions:t,indeterminateOptions:n,tagType:r,existingTags:i,disabled:a=!1,onChange:o})=>{let l=(0,Y.jsx)(B,{fontSize:`small`});return(0,Y.jsx)(s,{multiple:!0,id:`checkboxes-tag`,sx:{marginTop:e=>e.spacing(2),width:500},disableCloseOnSelect:!0,options:e,value:t,isOptionEqualToValue:(e,t)=>t.inputValue&&t.inputValue!==``?e.title===t.inputValue:e.title===t.title,getOptionLabel:e=>e.inputValue?e.inputValue:e.title,renderOption:({key:e,...t},r,{selected:i})=>{let a=n?.some(e=>e.title===r.title)??!1;return(0,Y.jsxs)(`li`,{...t,children:[(0,Y.jsx)(u,{condition:!!r.inputValue,show:(0,Y.jsx)(ge,{sx:{mr:e=>e.spacing(.5)}}),elseShow:(0,Y.jsx)(le,{icon:l,checkedIcon:(0,Y.jsx)(L,{fontSize:`small`}),indeterminateIcon:(0,Y.jsx)(ke,{fontSize:`small`}),sx:{mr:e=>e.spacing(.5)},checked:i&&!a,indeterminate:a})}),r.title]},e)},filterOptions:(e,t)=>{let n=t.inputValue.trim(),r=Ae(e,{...t,inputValue:n}),i=e.some(e=>n===e.title);return n.length>=2&&!i&&r.push({inputValue:n,title:`Create new value "${n}"`}),r},onChange:o,renderInput:e=>(0,Y.jsx)(c,{...e,label:`Select values`,placeholder:`Select values`}),disabled:a,slotProps:{listbox:{style:{maxHeight:200,overflow:`auto`}}}})},Me=a(`li`)({flexDirection:`column`}),Ne=({options:e,value:t,disabled:n=!1,onChange:i})=>{let a=r();return(0,Y.jsx)(s,{disablePortal:!0,disabled:n,id:`tag-type-select`,sx:{marginTop:e=>e.spacing(2),width:500},options:e,disableClearable:!0,value:t,getOptionLabel:e=>e.name,renderOption:({key:e,...t},n)=>(0,Y.jsxs)(Me,{...t,style:{alignItems:`flex-start`,gap:a.spacing(.5)},children:[(0,Y.jsx)(m,{variant:`body1`,children:n.name}),(0,Y.jsx)(m,{variant:`caption`,children:n.description})]},e),renderInput:e=>(0,Y.jsx)(c,{...e,label:`Tag type`,value:t}),onChange:i,slotProps:{listbox:{style:{maxHeight:200,overflow:`auto`}}}})},Pe=()=>{let{makeRequest:e,createRequest:t,errors:n,loading:r}=b({propagateErrors:!0});return{createTag:async n=>{let r=t(`api/admin/tags`,{method:`POST`,body:JSON.stringify(n)});return e(r.caller,r.id)},bulkUpdateTags:async(n,r)=>{let i=t(`api/admin/projects/${r}/tags`,{method:`PUT`,body:JSON.stringify(n)});return e(i.caller,i.id)},errors:n,loading:r}},X=e(t(),1),Fe=(e,t={})=>{let n=async()=>{let t=T(`api/admin/tags/${e}`);return(await fetch(t,{method:`GET`}).then(w(`Tags`))).json()},r=`api/admin/tags/${e}`,{data:i,error:a}=ce(!!e,{tags:[]},r,n,t),[o,s]=(0,X.useState)(!a&&!i);return(0,X.useEffect)(()=>{s(!a&&!i)},[i,a]),{tags:i?.tags||[],error:a,loading:o,refetch:()=>{te(r)}}},Z=(e,t)=>{let{project:n,refetch:r}=D(e);return{defaultStrategyFallback:{name:`flexibleRollout`,constraints:[],parameters:{rollout:`100`,stickiness:n.defaultStickiness||`default`,groupId:``}},strategy:n.environments?.find(e=>e.environment===t)?.defaultStrategy,refetch:r}},Ie=()=>{let e=J(`projectId`),t=M(`environmentId`),{refetch:r}=D(e),{defaultStrategyFallback:i,strategy:a,refetch:o}=Z(e,t),[s,c]=(0,X.useState)(a||i),{updateDefaultStrategy:l,loading:u}=fe(),{strategyDefinition:d}=z(s.name),{setToastData:f,setToastApiError:p}=v(),m=W(),{uiConfig:h}=A(),{unleashUrl:_}=h,b=n(),{trackEvent:S}=x(),C=H(s.constraints);if(!d)return null;let w=Le(s);return(0,Y.jsx)(ae,{modal:!0,disablePadding:!0,description:ze,documentationLink:Be,documentationLinkLabel:Ve,formatApiCode:()=>Re(e,t,w,d,_),children:(0,Y.jsxs)(ve,{strategy:s,setStrategy:c,strategyDefinition:d,errors:m,groupIdTooltip:`Defaults to the feature flag name if not set.`,onSubmit:async()=>{let n=`/projects/${e}/settings/default-strategy`;try{await l(e,t,w),S(`default_strategy`,{props:{action:`edit`,hasTitle:!!w.title}}),r(),f({text:`Default Strategy updated`,type:`success`}),await o(),b(n)}catch(e){p(y(e))}},children:[(0,Y.jsx)(O,{permission:[ie,re],projectId:e,environmentId:t,variant:`contained`,color:`primary`,type:`submit`,disabled:u||!C||m.hasFormErrors(),"data-testid":oe,children:`Save strategy`}),(0,Y.jsx)(g,{type:`button`,onClick:()=>b(`/projects/${e}/settings/default-strategy`),children:`Cancel`})]})})},Le=e=>({name:e.name,title:e.title,constraints:e.constraints??[],parameters:Object.fromEntries(Object.entries(e.parameters??{}).filter(([,e])=>e!==void 0).map(([e,t])=>[e,String(t)])),variants:e.variants??[],segments:e.segments??[],disabled:e.disabled??!1}),Re=(e,t,n,r,i)=>{if(!i)return``;let a={...n,parameters:I(n.parameters??{},r)};return`curl --location --request POST '${`${i}/api/admin/projects/${e}/environments/${t}/default-strategy`}' \\
|
|
2
|
-
--header 'Authorization: INSERT_API_KEY' \\
|
|
3
|
-
--header 'Content-Type: application/json' \\
|
|
4
|
-
--data-raw '${JSON.stringify(a,void 0,2)}'`},ze=`
|
|
5
|
-
An activation strategy will only run when a feature flag is enabled and provides a way to control who will get access to the feature.
|
|
6
|
-
If any of a feature flag's activation strategies returns true, the user will get access.
|
|
7
|
-
`,Be=`https://docs.getunleash.io/concepts/projects#project-default-strategy`,Ve=`Default strategy documentation`,He=e=>{let{data:t,error:n,mutate:r}=ee(T(`api/admin/environments/project/${e}`),Ue);return{environments:(0,X.useMemo)(()=>t||[],[t]),refetchEnvironments:(0,X.useCallback)(async()=>{await r()},[r]),loading:!n&&!t,error:n}},Ue=async e=>(await fetch(e).then(w(`Environments`)).then(e=>e.json())).environments.sort((e,t)=>e.sortOrder-t.sortOrder),We=e=>{let{setToastData:t,setToastApiError:n}=v(),{addChange:r}=V(),{refetch:i}=j(e),[a,o]=(0,X.useState)(!1),[s,c]=(0,X.useState)({isOpen:!1});return{pending:a,onChangeRequestToggle:(0,X.useCallback)((e,t,n,r)=>{c({featureName:e,environment:t,enabled:n,shouldActivateDisabledStrategies:r,isOpen:!0})},[]),onChangeRequestToggleClose:(0,X.useCallback)(()=>{c(e=>({...e,isOpen:!1}))},[]),onChangeRequestToggleConfirm:(0,X.useCallback)(async()=>{try{o(!0),await r(e,s.environment,{feature:s.featureName,action:`updateEnabled`,payload:{enabled:!!s.enabled,shouldActivateDisabledStrategies:!!s.shouldActivateDisabledStrategies}}),i(),c(e=>({...e,isOpen:!1})),t({type:`success`,text:`Changes added to draft`})}catch(e){n(y(e)),c(e=>({...e,isOpen:!1}))}finally{o(!1)}},[r]),changeRequestDialogDetails:s}},Ge=({enabled:e,featureName:t,environment:n})=>(0,Y.jsxs)(m,{"data-testid":`update-enabled-message`,children:[(0,Y.jsx)(`strong`,{children:e?`Enable`:`Disable`}),` feature flag`,` `,(0,Y.jsx)(`strong`,{children:t}),` in `,(0,Y.jsx)(`strong`,{children:n})]}),Ke=a(`ul`)(({theme:e})=>({margin:e.spacing(1),paddingLeft:e.spacing(2)})),qe=({isOpen:e,onAddDefaultStrategy:t,onActivateDisabledStrategies:n,onClose:r,environment:i,featureId:a})=>{let o=J(`projectId`),{feature:s}=pe(o,a),c=s.environments?.find(({name:e})=>e===i)?.strategies?.filter(({disabled:e})=>e).length,l=c?c===1?`1 disabled strategy`:`${c} disabled strategies`:`disabled strategies`;return(0,Y.jsxs)(R,{open:e,secondaryButtonText:`Cancel`,permissionButton:(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(O,{type:`button`,variant:`outlined`,permission:k,projectId:o,environmentId:i,onClick:t,children:`Add default strategy`}),(0,Y.jsx)(O,{type:`button`,variant:`outlined`,permission:k,projectId:o,environmentId:i,onClick:n,children:`Enable all strategies`})]}),onClose:r,title:`Enable feature flag in ${i}`,fullWidth:!0,children:[(0,Y.jsx)(m,{sx:{mb:e=>e.spacing(3)},children:`A feature flag cannot be enabled without an enabled strategy.`}),(0,Y.jsx)(m,{children:`To enable this feature flag you can choose to:`}),(0,Y.jsxs)(Ke,{children:[(0,Y.jsx)(`li`,{children:(0,Y.jsx)(m,{children:(0,Y.jsx)(`strong`,{children:`Add the default strategy`})})}),(0,Y.jsx)(`li`,{children:(0,Y.jsxs)(m,{children:[(0,Y.jsx)(`strong`,{children:`Enable all the disabled strategies`}),` `,`(this feature flag has `,l,`)`]})})]})]})},Je=e=>{let t=n=>{n<e.length&&e[n](()=>t(n+1))};t(0)},Ye=e=>{let{toggleFeatureEnvironmentOn:t,toggleFeatureEnvironmentOff:n}=K(),{setToastData:r,setToastApiError:i}=v(),[a,o]=(0,X.useState)({open:!1,label:``,loading:!1,onClose:()=>{},onClick:()=>{}}),[s,c]=(0,X.useState)({isOpen:!1,environment:``,featureId:``,onClose:()=>{},onActivateDisabledStrategies:()=>{},onAddDefaultStrategy:()=>{}}),{pending:l,onChangeRequestToggle:d,onChangeRequestToggleClose:f,onChangeRequestToggleConfirm:p,changeRequestDialogDetails:m}=We(e),[h,g]=(0,X.useState)(),_=(0,X.useCallback)(async(e,a)=>{let s=!1;return Je([t=>{if(a.isChangeRequestEnabled||!P(a.environmentType||``))return t();o({open:!0,label:`${e?`Enable`:`Disable`} Environment`,loading:!1,onClose:()=>{o(e=>({...e,open:!1})),a.onRollback?.()},onClick:()=>{o(e=>({...e,open:!1,loading:!0})),t()}})},t=>{if(e===!1||!a.hasStrategies||a.hasEnabledStrategies||a.hasReleasePlans)return t();c({isOpen:!0,environment:a.environmentName,featureId:a.featureId,onClose:()=>{c(e=>({...e,isOpen:!1})),a.onRollback?.()},onActivateDisabledStrategies:()=>{c(e=>({...e,isOpen:!1})),s=!0,t()},onAddDefaultStrategy:()=>{c(e=>({...e,isOpen:!1})),t()}})},t=>{if(!a.isChangeRequestEnabled)return t();g(()=>{g(void 0),a.onRollback?.()}),d(a.featureId,a.environmentName,e,s)},async t=>{if(e!==!1)return t();try{await n(a.projectId,a.featureId,a.environmentName),r({type:`success`,text:`Disabled in ${a.environmentName}`}),a.onSuccess?.()}catch(e){i(y(e)),a.onRollback?.()}},async n=>{if(e!==!0)return n();try{await t(a.projectId,a.featureId,a.environmentName,s),r({type:`success`,text:`Enabled in ${a.environmentName}`}),a.onSuccess?.()}catch(e){i(y(e)),a.onRollback?.()}}])},[o]),b=s.featureId.length!==0;return{onToggle:_,modals:(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(F,{...a}),(0,Y.jsx)(u,{condition:b,show:(0,Y.jsx)(qe,{...s})}),(0,Y.jsx)(U,{isOpen:m.isOpen,onClose:()=>{h?.(),f()},environment:m?.environment,disabled:l,onConfirm:()=>{h?.(),p()},messageComponent:(0,Y.jsx)(Ge,{enabled:m?.enabled,featureName:m?.featureName,environment:m.environment})})]})}},Xe=e=>{let[t,n]=(0,X.useState)(e),r=(0,X.useCallback)(()=>n(e),[e]);return(0,X.useEffect)(()=>{n(e)},[e]),[t,n,r]},Ze=a(h)(()=>({mx:`auto`,...S})),Qe=({projectId:e,featureId:t,environmentName:n,value:r,onToggle:i})=>{let[a,o,s]=Xe(r),c=()=>{o(!a),requestAnimationFrame(()=>{i(!a,s)})},l=`${t}-${n}`;return(0,Y.jsx)(Y.Fragment,{children:(0,Y.jsx)(Ze,{"data-testid":`TOGGLE-${l}`,children:(0,Y.jsx)(ue,{tooltip:a?`Disable flag in ${n}`:`Enable flag in ${n}`,checked:r,environmentId:n,projectId:e,permission:E,slotProps:{input:{"aria-label":n}},onClick:c,"data-testid":`permission-switch`,disabled:r!==a})},l)})},$e=l((0,Y.jsx)(`path`,{d:`M16 11h-1V3c0-1.1-.9-2-2-2h-2c-1.1 0-2 .9-2 2v8H8c-2.76 0-5 2.24-5 5v7h18v-7c0-2.76-2.24-5-5-5m3 10h-2v-3c0-.55-.45-1-1-1s-1 .45-1 1v3h-2v-3c0-.55-.45-1-1-1s-1 .45-1 1v3H9v-3c0-.55-.45-1-1-1s-1 .45-1 1v3H5v-5c0-1.65 1.35-3 3-3h8c1.65 0 3 1.35 3 3z`}),`CleaningServices`),et=`flag-reminders:v1`,tt=50,nt=7,rt=({days:e=nt,maxReminders:t=tt}={})=>{let[n,r]=_e(et,{});return{shouldShowReminder:e=>{let t=n[e];return!t||me(new Date,new Date(t))},snoozeReminder:(n,i=e)=>{let a=C(new Date,i).getTime();r(e=>{let r={...e,[n]:a},i=Object.entries(r);if(i.length>t){i.sort((e,t)=>e[1]-t[1]);let e=i.slice(i.length-t);return Object.fromEntries(e)}return r})}}},it=a(m)(({theme:e})=>({fontSize:e.typography.body2.fontSize,fontWeight:e.typography.fontWeightBold,marginBottom:e.spacing(1.25)})),at=a(m)(({theme:e})=>({fontWeight:e.typography.fontWeightBold,marginTop:e.spacing(2.75),marginBottom:e.spacing(1.75)})),ot=a(`ul`)(({theme:e})=>({padding:0,margin:0,listStyle:`none`,display:`flex`,flexDirection:`column`,gap:e.spacing(1.5)})),Q=a(_)(({theme:e})=>({display:`flex`,alignItems:`center`,gap:e.spacing(1),color:`inherit`,fontSize:e.typography.body2.fontSize,fontWeight:e.typography.fontWeightBold,paddingLeft:e.spacing(1),textDecoration:`none`,"&:hover, &:focus":{textDecoration:`underline`}})),st=()=>(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(it,{children:`Why do I need an SDK?`}),(0,Y.jsx)(m,{variant:`body2`,children:`SDKs serve to bind your application to Unleash. The SDK can connect to Unleash via HTTP and retrieve feature flag configuration that is then cached in your application. Making sure none of your application data ever leaves your servers.`}),(0,Y.jsx)(at,{children:`Other resources`}),(0,Y.jsxs)(ot,{children:[(0,Y.jsx)(`li`,{children:(0,Y.jsxs)(Q,{href:`https://docs.getunleash.io/sdks`,target:`_blank`,rel:`noreferrer`,children:[(0,Y.jsx)(se,{fontSize:`small`}),`SDK overview`]})}),(0,Y.jsx)(`li`,{children:(0,Y.jsxs)(Q,{href:`https://github.com/Unleash/unleash-sdk-examples`,target:`_blank`,rel:`noreferrer`,children:[(0,Y.jsx)(he,{fontSize:`small`}),`SDK code examples repo`]})})]})]}),ct=a(f)(({theme:e})=>({boxShadow:`none`,border:`1px solid ${e.palette.divider}`,borderRadius:`${e.shape.borderRadiusLarge}px !important`,"&:before":{display:`none`},"&.Mui-disabled":{backgroundColor:e.palette.background.paper}})),lt=a(p)(({theme:e})=>({gap:e.spacing(1.5),fontWeight:e.typography.fontWeightBold,"& .MuiAccordionSummary-content":{alignItems:`center`,gap:e.spacing(1.5)},"&.Mui-disabled":{opacity:1,"& .MuiAccordionSummary-expandIconWrapper":{opacity:.5}}})),ut=a(q)(({theme:e})=>({display:`flex`,alignItems:`center`,justifyContent:`center`,backgroundColor:e.palette.success.main,color:`white`,border:`1px solid ${e.palette.success.main}`,"& svg":{width:e.spacing(2.5),height:e.spacing(2.5)}})),dt=a(h)({marginLeft:`auto`}),ft=a(d)(({theme:e})=>({borderTop:`1px solid ${e.palette.divider}`,padding:e.spacing(2),paddingLeft:e.spacing(6.5)})),$=({stepNumber:e,title:t,isExpanded:n,isCompleted:r,isDisabled:i,onExpand:a,summary:o,children:s})=>(0,Y.jsxs)(ct,{expanded:n,disabled:i,onChange:a,children:[(0,Y.jsxs)(lt,{expandIcon:(0,Y.jsx)(de,{}),children:[r?(0,Y.jsx)(ut,{round:!0,children:(0,Y.jsx)(G,{})}):(0,Y.jsx)(q,{color:n?`primary`:`neutral`,round:!0,children:e}),t,o&&(0,Y.jsx)(dt,{children:o})]}),(0,Y.jsx)(ft,{children:s})]}),pt=a(h)(({theme:e})=>({display:`flex`,alignItems:`center`,gap:e.spacing(1)})),mt=({sdk:e})=>{if(!e)return null;let t=xe.find(t=>t.name===e.name)?.icon;return(0,Y.jsxs)(pt,{children:[t&&(0,Y.jsx)(Se,{src:ne(t),alt:``}),e.name]})},ht=(e,t)=>`${e}/api${Ee.some(e=>e.name===t)?`/frontend`:``}/`,gt=a(`div`)(({theme:e})=>({display:`flex`,flexDirection:`column`,gap:e.spacing(3)})),_t=({projectId:e,sdk:t,apiKey:n,feature:r,isActive:i,onSdkConnected:a})=>{let{uiConfig:o}=A(),[s,c]=(0,X.useState)(r),[l,u]=(0,X.useState)(!1);(0,X.useEffect)(()=>{r&&c(r)},[r]);let{project:d}=D(e,{refreshInterval:1e3}),f=d.onboardingStatus.status===`sdk-connected`;if((0,X.useEffect)(()=>{f&&a()},[f,a]),(0,X.useEffect)(()=>{if(f||!i)return;let e=setTimeout(()=>u(!0),3e4);return()=>clearTimeout(e)},[f,i]),!t||!n)return null;let p=ht(o.unleashUrl,t.name),[m]=(ye[t.name]||``).replace(`<YOUR_API_TOKEN>`,n).replace(`<YOUR_API_URL>`,p).replaceAll(`<YOUR_FLAG>`,s||`<YOUR_FLAG>`).split(`---
|
|
8
|
-
`);return(0,Y.jsxs)(gt,{children:[(0,Y.jsx)(`div`,{children:(0,Y.jsx)(N,{components:{code:Ce},children:m})}),(0,Y.jsx)(we,{sdkConnected:f,connectedTitle:`We received metrics from your application`,connectedBody:`Your SDK is connected and evaluating flags.`,waitingTitle:`Waiting for SDK data...`,waitingBody:`Run your app and evaluate your flag. This step completes on its own.`,showTroubleshooting:l,troubleshootingText:`Not seeing evaluations after ~30s? Make sure your app has started and that the client was initialized with the API key from step 2.`})]})},vt=a(h)({display:`flex`,justifyContent:`flex-end`}),yt=a(`div`)(({theme:e})=>({flex:1,padding:e.spacing(3),display:`flex`,flexDirection:`column`,gap:e.spacing(2)})),bt=a(`div`)(({theme:e})=>({padding:e.spacing(3),display:`flex`,flexDirection:`column`})),xt=({open:e,onClose:t,projectId:n,environments:r,feature:i})=>{let{trackEvent:a}=x(),[o,s]=(0,X.useState)(0),[c,l]=(0,X.useState)(0),[u,d]=(0,X.useState)(),[f,p]=(0,X.useState)(),m=[{title:`Select SDK`,content:(0,Y.jsx)(be,{sdk:u,onSelect:e=>{d(e),s(1),l(1)}}),summary:(0,Y.jsx)(mt,{sdk:u})},{title:`Generate API key`,content:(0,Y.jsx)(De,{projectId:n,sdk:u,environments:r,onApiKeyChange:e=>{!e&&u&&s(1),p(e)},onNext:()=>{s(2),l(2)}}),summary:(0,Y.jsx)(Te,{apiKey:f})},{title:`Configure the SDK`,content:(0,Y.jsx)(_t,{projectId:n,sdk:u,apiKey:f,feature:i,isActive:o>=2,onSdkConnected:()=>s(3)})}],h=o>=m.length&&u,_=e=>{let t=e+1;c===e&&t<m.length&&t<=o?l(t):c!==e&&l(e)};return e?(0,Y.jsx)(Oe,{open:!0,onClose:t,title:`Connect SDK`,fullHeight:!0,aside:(0,Y.jsx)(bt,{children:(0,Y.jsx)(st,{})}),children:(0,Y.jsxs)(yt,{children:[m.map(({title:e,content:t,summary:n},r)=>{let i=r<o,a=r>o;return(0,Y.jsx)($,{stepNumber:r+1,title:e,isExpanded:c===r,isCompleted:i,isDisabled:a,onExpand:()=>_(r),summary:i&&n,children:t},e)}),(0,Y.jsx)(vt,{children:(0,Y.jsx)(g,{variant:`contained`,disabled:!h,onClick:()=>{h&&(a(`onboarding`,{props:{eventType:`onboarding-finished`,onboardedSdk:u.name}}),t())},children:`Finish setup`})})]})}):null},St=({isStale:e,isOpen:t,projectId:n,featureId:r,onClose:i})=>{let{setToastData:a,setToastApiError:o}=v(),{patchFeatureToggle:s}=K(),c=(0,Y.jsx)(m,{children:`Setting a flag to stale marks it for cleanup`}),l=(0,Y.jsx)(m,{children:`Setting a flag to active marks it as in active use`}),d=e?`active`:`stale`;return(0,Y.jsx)(R,{open:t,secondaryButtonText:`Cancel`,primaryButtonText:`Flip to ${d}`,title:`Set feature state to ${d}`,onClick:async t=>{t.stopPropagation();try{await s(n,r,[{op:`replace`,path:`/stale`,value:!e}]),i()}catch(e){o(y(e))}a(e?{type:`success`,text:`The flag is no longer marked as stale`}:{type:`success`,text:`The flag has been marked as stale`})},onClose:i,children:(0,Y.jsx)(u,{condition:e,show:l,elseShow:c})})};export{Qe as a,Ie as c,Pe as d,Ne as f,$e as i,Z as l,xt as n,Ye as o,je as p,rt as r,He as s,St as t,Fe as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./react-GZhdek4G.js";import{t}from"./jsx-runtime-BnvnyDTF.js";import{i as n}from"./CircularProgress-C_LUU3DK.js";var r=t(),i=n([(0,r.jsx)(`path`,{d:`M21 5c-1.11-.35-2.33-.5-3.5-.5-1.95 0-4.05.4-5.5 1.5-1.45-1.1-3.55-1.5-5.5-1.5S2.45 4.9 1 6v14.65c0 .25.25.5.5.5.1 0 .15-.05.25-.05C3.1 20.45 5.05 20 6.5 20c1.95 0 4.05.4 5.5 1.5 1.35-.85 3.8-1.5 5.5-1.5 1.65 0 3.35.3 4.75 1.05.1.05.15.05.25.05.25 0 .5-.25.5-.5V6c-.6-.45-1.25-.75-2-1m0 13.5c-1.1-.35-2.3-.5-3.5-.5-1.7 0-4.15.65-5.5 1.5V8c1.35-.85 3.8-1.5 5.5-1.5 1.2 0 2.4.15 3.5.5z`},`0`),(0,r.jsx)(`path`,{d:`M17.5 10.5c.88 0 1.73.09 2.5.26V9.24c-.79-.15-1.64-.24-2.5-.24-1.7 0-3.24.29-4.5.83v1.66c1.13-.64 2.7-.99 4.5-.99M13 12.49v1.66c1.13-.64 2.7-.99 4.5-.99.88 0 1.73.09 2.5.26V11.9c-.79-.15-1.64-.24-2.5-.24-1.7 0-3.24.3-4.5.83m4.5 1.84c-1.7 0-3.24.29-4.5.83v1.66c1.13-.64 2.7-.99 4.5-.99.88 0 1.73.09 2.5.26v-1.52c-.79-.16-1.64-.24-2.5-.24`},`1`)],`MenuBook`),a=e(((e,t)=>{t.exports=function(){var e=document.getSelection();if(!e.rangeCount)return function(){};for(var t=document.activeElement,n=[],r=0;r<e.rangeCount;r++)n.push(e.getRangeAt(r));switch(t.tagName.toUpperCase()){case`INPUT`:case`TEXTAREA`:t.blur();break;default:t=null;break}return e.removeAllRanges(),function(){e.type===`Caret`&&e.removeAllRanges(),e.rangeCount||n.forEach(function(t){e.addRange(t)}),t&&t.focus()}}})),o=e(((e,t)=>{var n=a(),r={"text/plain":`Text`,"text/html":`Url`,default:`Text`},i=`Copy to clipboard: #{key}, Enter`;function o(e){var t=(/mac os x/i.test(navigator.userAgent)?`⌘`:`Ctrl`)+`+C`;return e.replace(/#{\s*key\s*}/g,t)}function s(e,t){var a,s,c,l,u,d,f=!1;t||={},a=t.debug||!1;try{if(c=n(),l=document.createRange(),u=document.getSelection(),d=document.createElement(`span`),d.textContent=e,d.ariaHidden=`true`,d.style.all=`unset`,d.style.position=`fixed`,d.style.top=0,d.style.clip=`rect(0, 0, 0, 0)`,d.style.whiteSpace=`pre`,d.style.webkitUserSelect=`text`,d.style.MozUserSelect=`text`,d.style.msUserSelect=`text`,d.style.userSelect=`text`,d.addEventListener(`copy`,function(n){if(n.stopPropagation(),t.format)if(n.preventDefault(),n.clipboardData===void 0){a&&console.warn(`unable to use e.clipboardData`),a&&console.warn(`trying IE specific stuff`),window.clipboardData.clearData();var i=r[t.format]||r.default;window.clipboardData.setData(i,e)}else n.clipboardData.clearData(),n.clipboardData.setData(t.format,e);t.onCopy&&(n.preventDefault(),t.onCopy(n.clipboardData))}),document.body.appendChild(d),l.selectNodeContents(d),u.addRange(l),!document.execCommand(`copy`))throw Error(`copy command was unsuccessful`);f=!0}catch(n){a&&console.error(`unable to copy using execCommand: `,n),a&&console.warn(`trying IE specific stuff`);try{window.clipboardData.setData(t.format||`text`,e),t.onCopy&&t.onCopy(window.clipboardData),f=!0}catch(n){a&&console.error(`unable to copy using clipboardData: `,n),a&&console.error(`falling back to prompt`),s=o(`message`in t?t.message:i),window.prompt(s,e)}}finally{u&&(typeof u.removeRange==`function`?u.removeRange(l):u.removeAllRanges()),d&&document.body.removeChild(d),c()}return f}t.exports=s})),s=n((0,r.jsx)(`path`,{d:`M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12zm-1 4 6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2zm-1 7h5.5L14 6.5z`}),`FileCopy`);export{o as n,i as r,s as t};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{o as e,t}from"./react-GZhdek4G.js";import{t as n}from"./useTheme-CQqAmDLr.js";import{t as r}from"./jsx-runtime-BnvnyDTF.js";import{v as i}from"./createSimplePaletteValueFilter-BRAMrHWJ.js";import{t as a}from"./Typography-BTdLWIUX.js";import{t as o}from"./Box-BQsxfFmC.js";import{i as s,r as c,t as l}from"./formatDate-cFuM4JYl.js";import{Ft as u,Ho as d,Jt as f,Ko as p,Kt as m,Po as h,Qt as g,fo as _,in as v,nn as y,ns as b,qt as x,rn as S}from"./index-C04TEs4k.js";import{t as C}from"./chartjs-plugin-annotation.esm-DP4wCpdA.js";import{t as w}from"./formatTickValue-DWHZUXee.js";import{i as T,t as E}from"./MarkCompletedDialogue-CcXyp8UE.js";import{i as D,n as O,r as k,t as A}from"./aggregateFeatureMetrics-B-67HaIZ.js";var j=e(t(),1),M=(e,t)=>({datasets:[{label:`Enabled`,hoverBackgroundColor:e.palette.charts.flagMetrics.enabled,backgroundColor:e.palette.charts.flagMetrics.enabled,data:N(t,e=>e.yes)},{label:`Not enabled`,hoverBackgroundColor:e.palette.charts.flagMetrics.notEnabled,backgroundColor:e.palette.charts.flagMetrics.notEnabled,data:N(t,e=>e.no)}]}),N=(e,t)=>e.map(e=>({x:e.timestamp,y:t(e),variants:e.variants||{}})),P=(e,t)=>{if(t===0)return``;let[n,r]=e;return`${r} (${Math.floor(Number(r)/t*100)}%) - ${n}`},F=e=>({plugins:{legend:{position:`top`,labels:{color:e.palette.text.primary,usePointStyle:!0,pointStyle:`none`,boxHeight:0,padding:15}},tooltip:{enabled:!1}},responsive:!0,maintainAspectRatio:!1,scales:{x:{stacked:!0,ticks:{display:!1},grid:{display:!1}},y:{stacked:!0,ticks:{maxTicksLimit:5,display:!1},grid:{color:e.palette.divider},border:{display:!1}}},elements:{bar:{borderRadius:5}},interaction:{mode:`index`,intersect:!1}}),I=(e,t,n)=>{let{responsive:r,elements:i,interaction:a,scales:o,maintainAspectRatio:u}=F(e);return{plugins:{legend:{position:`bottom`,labels:{color:e.palette.text.primary,pointStyle:`circle`,usePointStyle:!0,boxHeight:6,padding:15}},annotation:{clip:!1,annotations:{}},tooltip:{backgroundColor:e.palette.background.paper,titleColor:e.palette.text.primary,bodyColor:e.palette.text.primary,bodySpacing:6,padding:{top:20,bottom:20,left:30,right:30},borderColor:`rgba(0, 0, 0, 0.05)`,borderWidth:3,usePointStyle:!0,caretSize:0,boxPadding:10,callbacks:{label:e=>`${e.formattedValue} - ${e.dataset.label}`,afterLabel:e=>{let t=e.dataset.data[e.dataIndex];if(e.dataset.label!==`Enabled`||t.variants===void 0)return``;let{disabled:n,...r}=t.variants;return Object.entries(r).map(e=>P(e,t.y)).join(`
|
|
2
|
-
`)},title:e=>`Time: ${t>48?s(e[0].label,n.locale,`UTC`):l(e[0].label,n.locale)}`}}},responsive:r,maintainAspectRatio:u,scales:{x:{...o?o.x:{},ticks:{color:e.palette.text.secondary,callback(e){let r=this.getLabelForValue(Number(e));return t>48?c(r,n.locale,`UTC`):l(r,n.locale)}}},y:{...o?.y??{},ticks:{...o?.y?.ticks??{},color:e.palette.text.secondary,callback:w,display:!0}}},elements:i,interaction:a}},L=r(),R=({project:e,flagName:t,onArchive:n,className:r})=>{let{feature:i,refetchFeature:a}=_(e,t),s=i.environments?.map(e=>({name:e.name,lastSeenAt:e.lastSeenAt,enabled:e.enabled,yes:e.yes,no:e.no})),[c,l]=(0,j.useState)(!1),[u,f]=(0,j.useState)(!1);return(0,L.jsxs)(o,{sx:{display:`flex`},className:r,children:[(0,L.jsx)(d,{sx:{pt:0,pb:0},featureLastSeen:i.lastSeenAt,environments:s}),(0,L.jsx)(h,{feature:i,onArchive:()=>l(!0),onComplete:()=>f(!0),onUncomplete:a}),i.children.length>0?(0,L.jsx)(D,{features:i.children,project:e,isOpen:c,onClose:()=>l(!1)}):(0,L.jsx)(T,{isOpen:c,onConfirm:n,onClose:()=>l(!1),projectId:e,featureIds:[t]}),i.project?(0,L.jsx)(E,{isOpen:u,setIsOpen:f,projectId:i.project,featureId:i.name,onComplete:a}):null]})},z=[0,14,28,21,33,31,31,22,26,37,31,14,21,14,0],B=e=>({labels:Array.from({length:15},(e,t)=>t+1),datasets:[{data:z,backgroundColor:e.palette.divider,hoverBackgroundColor:e.palette.divider,label:``}]}),V=i(`div`)({width:`100%`,flexGrow:1}),H=({label:e})=>{let t=n(),r=(0,j.useMemo)(()=>F(t),[t]),i=(0,j.useMemo)(()=>B(t),[t]),o=`placeholder-chart-label`;return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(a,{id:o,children:e}),(0,L.jsx)(V,{children:(0,L.jsx)(u,{data:i,options:r,"aria-describedby":o})})]})},U=()=>{let e=n(),t=(0,j.useMemo)(()=>F(e),[e]);return(0,L.jsx)(V,{children:(0,L.jsx)(u,{data:(0,j.useMemo)(()=>({labels:[],datasets:[]}),[e]),options:t,"aria-label":`A placeholder bar chart with a single feature flag exposure metrics`})})},W=(e,t)=>{let[n,r]=(0,j.useState)(null),{feature:i}=_(e,t),a=(i?.environments??[]).map(e=>({name:e.name,type:e.type})),o=a.find(e=>e.type===`production`);return(0,j.useEffect)(()=>{o?r(o.name):a.length>0&&r(a[0].name)},[t,JSON.stringify(a)]),{environment:n,setEnvironment:r,activeEnvironments:a}},G=(e,t,r)=>{let i=n(),{featureMetrics:a=[],loading:o,error:s}=k(e,r),c=(0,j.useMemo)(()=>[...a].sort((e,t)=>e.timestamp.localeCompare(t.timestamp)),[a]),l=(0,j.useMemo)(()=>A(c?.filter(e=>t===e.environment)).map(e=>({...e,appName:`all selected`})),[c,t]),u=(0,j.useMemo)(()=>M(i,l),[i,l]),{locationSettings:d}=b();return{data:u,options:(0,j.useMemo)(()=>I(i,r,d),[i,r,d]),loading:o,error:s}},K=({activeEnvironments:e,environment:t,setEnvironment:n})=>(0,L.jsx)(p,{name:`feature-environments`,label:`Environment`,id:`feature-environments`,options:e.map(e=>({key:e.name,label:e.name})),value:String(t),onChange:n}),q=i(o)(({theme:e})=>({display:`flex`,justifyContent:`flex-start`,flexFlow:`row wrap`,gap:e.spacing(2)})),J=i(`div`)(({theme:e})=>({display:`flex`,flexDirection:`column`,gap:e.spacing(3),alignItems:`center`,height:`100%`,justifyContent:`space-between`})),Y=i(R)({alignItems:`center`,justifySelf:`start`}),X=i(`div`)(({theme:e})=>({display:`flex`,justifyContent:`space-between`,flexFlow:`row wrap`,width:`100%`,gap:e.spacing(4)})),Z=e=>(0,L.jsx)(J,{children:(0,L.jsx)(H,{...e})}),Q=({flag:e,onArchive:t})=>{let[n,r]=(0,j.useState)(48),{environment:i,setEnvironment:a,activeEnvironments:o}=W(e.project,e.name),{data:s,options:c,loading:l,error:d}=G(e.name,i,n);if(d)return(0,L.jsx)(J,{children:(0,L.jsx)(H,{label:`Couldn't fetch metrics for the current flag right now. Please try again. Report this if it doesn't resolve itself.`})});let f=s.datasets[0].data.length===0;return(0,L.jsxs)(J,{children:[(0,L.jsxs)(X,{children:[(0,L.jsx)(Y,{project:e.project,flagName:e.name,onArchive:t}),(0,L.jsxs)(q,{children:[i?(0,L.jsx)(K,{environment:i,setEnvironment:a,activeEnvironments:o}):null,(0,L.jsx)(O,{hoursBack:n,setHoursBack:r})]})]}),l?(0,L.jsx)(U,{}):f?(0,L.jsx)(H,{label:`No metrics for this feature flag in the selected environment and time period`}):(0,L.jsx)(V,{children:(0,L.jsx)(u,{data:s,options:c,"aria-label":`A bar chart with a single feature flag exposure metrics`})})]})},$=e=>[`.`,`..`].includes(e.flag.name)?(0,L.jsx)(J,{children:(0,L.jsx)(H,{label:`The current flag name ('${e.flag.name}') is known to cause issues due how it affects URLs. We cannot show you a chart for it.`})}):(0,L.jsx)(Q,{...e});f.register(C,x,g,m,S,v,y);export{$ as FlagMetricsChart,Z as PlaceholderFlagMetricsChartWithWrapper};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e,t}from"./react-GZhdek4G.js";import{t as n}from"./jsx-runtime-BnvnyDTF.js";import{D as r,O as i,_ as a,h as o,k as s,m as c,v as l,x as u}from"./createSimplePaletteValueFilter-BRAMrHWJ.js";import{C as d}from"./TextField-oipjeg6n.js";import{r as f}from"./ConditionallyRender---uTpMBn.js";import{t as p}from"./Typography-BTdLWIUX.js";var m=e(t(),1);function h(e){return i(`MuiFormControlLabel`,e)}var g=r(`MuiFormControlLabel`,[`root`,`labelPlacementStart`,`labelPlacementTop`,`labelPlacementBottom`,`disabled`,`label`,`error`,`required`,`asterisk`]),_=n(),v=e=>{let{classes:t,disabled:n,labelPlacement:r,error:i,required:o}=e;return u({root:[`root`,n&&`disabled`,`labelPlacement${a(r)}`,i&&`error`,o&&`required`],label:[`label`,n&&`disabled`],asterisk:[`asterisk`,i&&`error`]},h,t)},y=l(`label`,{name:`MuiFormControlLabel`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[{[`& .${g.label}`]:t.label},t.root,t[`labelPlacement${a(n.labelPlacement)}`]]}})(o(({theme:e})=>({display:`inline-flex`,alignItems:`center`,cursor:`pointer`,verticalAlign:`middle`,WebkitTapHighlightColor:`transparent`,marginLeft:-11,marginRight:16,[`&.${g.disabled}`]:{cursor:`default`},[`& .${g.label}`]:{[`&.${g.disabled}`]:{color:(e.vars||e).palette.text.disabled}},variants:[{props:{labelPlacement:`start`},style:{flexDirection:`row-reverse`,marginRight:-11}},{props:{labelPlacement:`top`},style:{flexDirection:`column-reverse`}},{props:{labelPlacement:`bottom`},style:{flexDirection:`column`}},{props:({labelPlacement:e})=>e===`start`||e===`top`||e===`bottom`,style:{marginLeft:16}}]}))),b=l(`span`,{name:`MuiFormControlLabel`,slot:`Asterisk`})(o(({theme:e})=>({[`&.${g.error}`]:{color:(e.vars||e).palette.error.main}}))),x=m.forwardRef(function(e,t){let n=c({props:e,name:`MuiFormControlLabel`}),{checked:r,className:i,control:a,disabled:o,disableTypography:l,inputRef:u,label:h,labelPlacement:g=`end`,name:x,onChange:S,required:C,slots:w={},slotProps:T={},value:E,...D}=n,[O,k]=d({props:n,states:[`error`]}),A=o??a.props.disabled??k?.disabled,j=C??a.props.required,M={disabled:A,required:j};[`checked`,`name`,`onChange`,`value`,`inputRef`].forEach(e=>{a.props[e]===void 0&&n[e]!==void 0&&(M[e]=n[e])});let N={...n,disabled:A,labelPlacement:g,required:j,error:O.error},P=v(N),[F,I]=f(`typography`,{elementType:p,externalForwardedProps:{slots:w,slotProps:T},ownerState:N}),L=h;return L!=null&&L.type!==p&&!l&&(L=(0,_.jsx)(F,{component:`span`,...I,className:s(P.label,I?.className),children:L})),(0,_.jsxs)(y,{className:s(P.root,i),ownerState:N,ref:t,...D,children:[m.cloneElement(a,M),j?(0,_.jsxs)(`div`,{children:[L,(0,_.jsxs)(b,{ownerState:N,"aria-hidden":!0,className:P.asterisk,children:[` `,`*`]})]}):L]})});export{x as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./jsx-runtime-BnvnyDTF.js";import{t}from"./ConditionallyRender---uTpMBn.js";import{t as n}from"./Alert-_bLyWbvx.js";import{t as r}from"./Box-BQsxfFmC.js";import{t as i}from"./useUiConfig-DbVjTDpE.js";import{t as a}from"./usePageTitle-CHzzFshF.js";import{Ft as o,Jt as s,Kt as c,Qt as l,in as u,nn as d,qt as f,rn as p}from"./index-C04TEs4k.js";import{a as m,i as h,l as g,n as _,s as v,t as y,u as b}from"./networkTrafficUsageHighlightPlugin-DlOtHZg3.js";import{t as x}from"./chartjs-plugin-annotation.esm-DP4wCpdA.js";var S=e(),C=()=>{a(`Network - Frontend Traffic Usage`);let{isOss:e}=i(),{chartDataSelection:s,setChartDataSelection:c,options:l}=_(),{chartData:u}=v(s);return(0,S.jsx)(t,{condition:e(),show:(0,S.jsx)(n,{severity:`warning`,children:`Not enabled.`}),elseShow:(0,S.jsx)(S.Fragment,{children:(0,S.jsxs)(h,{children:[(0,S.jsxs)(m,{children:[(0,S.jsx)(r,{children:(0,S.jsx)(n,{severity:`info`,icon:!1,children:`Frontend traffic is determined by the total SDK requests to the Frontend API`})}),(0,S.jsx)(b,{selectedPeriod:s,setPeriod:c})]}),(0,S.jsx)(o,{data:u,plugins:[y],options:l,"aria-label":g(s)})]})})})};s.register(x,f,l,c,p,u,d);export{C as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,o as t,t as n}from"./react-GZhdek4G.js";import{t as r}from"./useTheme-CQqAmDLr.js";import{t as i}from"./jsx-runtime-BnvnyDTF.js";import{c as a,i as o,l as s,o as c,s as l,u,w as d}from"./createSimplePaletteValueFilter-BRAMrHWJ.js";var f=e((e=>{var t=n();function r(e){var t=`https://react.dev/errors/`+e;if(1<arguments.length){t+=`?args[]=`+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+=`&args[]=`+encodeURIComponent(arguments[n])}return`Minified React error #`+e+`; visit `+t+` for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`}function i(){}var a={d:{f:i,r:function(){throw Error(r(522))},D:i,C:i,L:i,m:i,X:i,S:i,M:i},p:0,findDOMNode:null},o=Symbol.for(`react.portal`);function s(e,t,n){var r=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:o,key:r==null?null:``+r,children:e,containerInfo:t,implementation:n}}var c=t.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function l(e,t){if(e===`font`)return``;if(typeof t==`string`)return t===`use-credentials`?t:``}e.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=a,e.createPortal=function(e,t){var n=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!t||t.nodeType!==1&&t.nodeType!==9&&t.nodeType!==11)throw Error(r(299));return s(e,t,null,n)},e.flushSync=function(e){var t=c.T,n=a.p;try{if(c.T=null,a.p=2,e)return e()}finally{c.T=t,a.p=n,a.d.f()}},e.preconnect=function(e,t){typeof e==`string`&&(t?(t=t.crossOrigin,t=typeof t==`string`?t===`use-credentials`?t:``:void 0):t=null,a.d.C(e,t))},e.prefetchDNS=function(e){typeof e==`string`&&a.d.D(e)},e.preinit=function(e,t){if(typeof e==`string`&&t&&typeof t.as==`string`){var n=t.as,r=l(n,t.crossOrigin),i=typeof t.integrity==`string`?t.integrity:void 0,o=typeof t.fetchPriority==`string`?t.fetchPriority:void 0;n===`style`?a.d.S(e,typeof t.precedence==`string`?t.precedence:void 0,{crossOrigin:r,integrity:i,fetchPriority:o}):n===`script`&&a.d.X(e,{crossOrigin:r,integrity:i,fetchPriority:o,nonce:typeof t.nonce==`string`?t.nonce:void 0})}},e.preinitModule=function(e,t){if(typeof e==`string`)if(typeof t==`object`&&t){if(t.as==null||t.as===`script`){var n=l(t.as,t.crossOrigin);a.d.M(e,{crossOrigin:n,integrity:typeof t.integrity==`string`?t.integrity:void 0,nonce:typeof t.nonce==`string`?t.nonce:void 0})}}else t??a.d.M(e)},e.preload=function(e,t){if(typeof e==`string`&&typeof t==`object`&&t&&typeof t.as==`string`){var n=t.as,r=l(n,t.crossOrigin);a.d.L(e,n,{crossOrigin:r,integrity:typeof t.integrity==`string`?t.integrity:void 0,nonce:typeof t.nonce==`string`?t.nonce:void 0,type:typeof t.type==`string`?t.type:void 0,fetchPriority:typeof t.fetchPriority==`string`?t.fetchPriority:void 0,referrerPolicy:typeof t.referrerPolicy==`string`?t.referrerPolicy:void 0,imageSrcSet:typeof t.imageSrcSet==`string`?t.imageSrcSet:void 0,imageSizes:typeof t.imageSizes==`string`?t.imageSizes:void 0,media:typeof t.media==`string`?t.media:void 0})}},e.preloadModule=function(e,t){if(typeof e==`string`)if(t){var n=l(t.as,t.crossOrigin);a.d.m(e,{as:typeof t.as==`string`&&t.as!==`script`?t.as:void 0,crossOrigin:n,integrity:typeof t.integrity==`string`?t.integrity:void 0})}else a.d.m(e)},e.requestFormReset=function(e){a.d.r(e)},e.unstable_batchedUpdates=function(e,t){return e(t)},e.useFormState=function(e,t,n){return c.H.useFormState(e,t,n)},e.useFormStatus=function(){return c.H.useHostTransitionStatus()},e.version=`19.2.7`})),p=e(((e,t)=>{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=f()}));function m(e){return e&&e.ownerDocument||document}function h(e,t){typeof e==`function`?e(t):e&&(e.current=t)}var g=t(n()),_=t(p()),v={disabled:!1},y=function(e){return e.scrollTop},b=`unmounted`,x=`exited`,S=`entering`,C=`entered`,w=`exiting`,T=function(e){l(t,e);function t(t,n){var r=e.call(this,t,n)||this,i=n,a=i&&!i.isMounting?t.enter:t.appear,o;return r.appearStatus=null,t.in?a?(o=x,r.appearStatus=S):o=C:o=t.unmountOnExit||t.mountOnEnter?b:x,r.state={status:o},r.nextCallback=null,r}t.getDerivedStateFromProps=function(e,t){return e.in&&t.status===`unmounted`?{status:x}:null};var n=t.prototype;return n.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},n.componentDidUpdate=function(e){var t=null;if(e!==this.props){var n=this.state.status;this.props.in?n!==`entering`&&n!==`entered`&&(t=S):(n===`entering`||n===`entered`)&&(t=w)}this.updateStatus(!1,t)},n.componentWillUnmount=function(){this.cancelNextCallback()},n.getTimeouts=function(){var e=this.props.timeout,t=n=r=e,n,r;return e!=null&&typeof e!=`number`&&(t=e.exit,n=e.enter,r=e.appear===void 0?n:e.appear),{exit:t,enter:n,appear:r}},n.updateStatus=function(e,t){if(e===void 0&&(e=!1),t!==null)if(this.cancelNextCallback(),t===`entering`){if(this.props.unmountOnExit||this.props.mountOnEnter){var n=this.props.nodeRef?this.props.nodeRef.current:_.default.findDOMNode(this);n&&y(n)}this.performEnter(e)}else this.performExit();else this.props.unmountOnExit&&this.state.status===`exited`&&this.setState({status:b})},n.performEnter=function(e){var t=this,n=this.props.enter,r=this.context?this.context.isMounting:e,i=this.props.nodeRef?[r]:[_.default.findDOMNode(this),r],a=i[0],o=i[1],s=this.getTimeouts(),c=r?s.appear:s.enter;if(!e&&!n||v.disabled){this.safeSetState({status:C},function(){t.props.onEntered(a)});return}this.props.onEnter(a,o),this.safeSetState({status:S},function(){t.props.onEntering(a,o),t.onTransitionEnd(c,function(){t.safeSetState({status:C},function(){t.props.onEntered(a,o)})})})},n.performExit=function(){var e=this,t=this.props.exit,n=this.getTimeouts(),r=this.props.nodeRef?void 0:_.default.findDOMNode(this);if(!t||v.disabled){this.safeSetState({status:x},function(){e.props.onExited(r)});return}this.props.onExit(r),this.safeSetState({status:w},function(){e.props.onExiting(r),e.onTransitionEnd(n.exit,function(){e.safeSetState({status:x},function(){e.props.onExited(r)})})})},n.cancelNextCallback=function(){this.nextCallback!==null&&(this.nextCallback.cancel(),this.nextCallback=null)},n.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},n.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(r){n&&(n=!1,t.nextCallback=null,e(r))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},n.onTransitionEnd=function(e,t){this.setNextCallback(t);var n=this.props.nodeRef?this.props.nodeRef.current:_.default.findDOMNode(this),r=e==null&&!this.props.addEndListener;if(!n||r){setTimeout(this.nextCallback,0);return}if(this.props.addEndListener){var i=this.props.nodeRef?[this.nextCallback]:[n,this.nextCallback],a=i[0],o=i[1];this.props.addEndListener(a,o)}e!=null&&setTimeout(this.nextCallback,e)},n.render=function(){var e=this.state.status;if(e===`unmounted`)return null;var t=this.props,n=t.children;t.in,t.mountOnEnter,t.unmountOnExit,t.appear,t.enter,t.exit,t.timeout,t.addEndListener,t.onEnter,t.onEntering,t.onEntered,t.onExit,t.onExiting,t.onExited,t.nodeRef;var r=a(t,[`children`,`in`,`mountOnEnter`,`unmountOnExit`,`appear`,`enter`,`exit`,`timeout`,`addEndListener`,`onEnter`,`onEntering`,`onEntered`,`onExit`,`onExiting`,`onExited`,`nodeRef`]);return g.createElement(c.Provider,{value:null},typeof n==`function`?n(e,r):g.cloneElement(g.Children.only(n),r))},t}(g.Component);T.contextType=c,T.propTypes={};function E(){}T.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:E,onEntering:E,onEntered:E,onExit:E,onExiting:E,onExited:E},T.UNMOUNTED=b,T.EXITED=x,T.ENTERING=S,T.ENTERED=C,T.EXITING=w;var D=e=>e.scrollTop,O={offsetX:0,offsetY:0},k={matrix:[4,5],matrix3d:[12,13],translate:[0,1],translate3d:[0,1],translateX:[0,null],translateY:[null,0]};function A(e){let t=parseFloat(e??``);return Number.isNaN(t)?0:t}function j(e){let t=e.match(/^(matrix|matrix3d|translate|translate3d|translateX|translateY)\((.+)\)$/);return t?{type:t[1],values:t[2].split(`,`).map(A)}:null}function M(e,t){return t===null?0:e[t]||0}function N(e){if(!e||e===`none`)return O;let t=j(e);if(!t)return O;let{type:n,values:r}=t,i=k[n];return i?{offsetX:M(r,i[0]),offsetY:M(r,i[1])}:O}function P(e,t){return n=>{if(t){let r=e.current;n===void 0?t(r):t(r,n)}}}function F(e,t,n,r,i,a){let o=e===`exited`&&!t?r:n[e]||n.exited;return i||a?{...o,...i,...a}:o}function I(e,t){let{timeout:n,easing:r,style:i={}}=e;return{duration:i.transitionDuration??(typeof n==`number`?n:n[t.mode]||0),easing:i.transitionTimingFunction??(typeof r==`object`?r[t.mode]:r),delay:i.transitionDelay}}function L(e){return e?.props?.ref||null}function R(e){return typeof e==`function`?e():e}var z=g.forwardRef(function(e,t){let{children:n,container:r,disablePortal:i=!1}=e,[a,o]=g.useState(null),s=u(g.isValidElement(n)?L(n):null,t);if(d(()=>{i||o(R(r)||document.body)},[r,i]),d(()=>{if(a&&!i)return h(t,a),()=>{h(t,null)}},[t,a,i]),i){if(g.isValidElement(n)){let e={ref:s};return g.cloneElement(n,e)}return n}return a&&_.createPortal(n,a)}),B=i();function V(e){return`scale(${e}, ${e**2})`}var H={entering:{opacity:1,transform:V(1)},entered:{opacity:1,transform:`none`},exiting:{opacity:0,transform:V(.75)},exited:{opacity:0,transform:V(.75)}},U={opacity:0,transform:V(.75),visibility:`hidden`},W=g.forwardRef(function(e,t){let{addEndListener:n,appear:i=!0,children:a,easing:c,in:l,onEnter:u,onEntered:d,onEntering:f,onExit:p,onExited:m,onExiting:h,style:_,timeout:v=`auto`,...y}=e,b=o(),x=g.useRef(),S=r(),C=g.useRef(null),w=s(C,L(a),t),E=P(C,f),O=P(C,(e,t)=>{D(e);let{duration:n,delay:r,easing:i}=I({style:_,timeout:v,easing:c},{mode:`enter`}),a;v===`auto`?(a=S.transitions.getAutoHeightDuration(e.clientHeight),x.current=a):a=n,e.style.transition=[S.transitions.create(`opacity`,{duration:a,delay:r}),S.transitions.create(`transform`,{duration:a*.666,delay:r,easing:i})].join(`,`),u&&u(e,t)}),k=P(C,d),A=P(C,h),j=P(C,e=>{let{duration:t,delay:n,easing:r}=I({style:_,timeout:v,easing:c},{mode:`exit`}),i;v===`auto`?(i=S.transitions.getAutoHeightDuration(e.clientHeight),x.current=i):i=t,e.style.transition=[S.transitions.create(`opacity`,{duration:i,delay:n}),S.transitions.create(`transform`,{duration:i*.666,delay:n||i*.333,easing:r})].join(`,`),e.style.opacity=0,e.style.transform=V(.75),p&&p(e)}),M=P(C,e=>{e.style.transition=``,m&&m(e)});return(0,B.jsx)(T,{appear:i,in:l,nodeRef:C,onEnter:O,onEntered:k,onEntering:E,onExit:j,onExited:M,onExiting:A,addEndListener:e=>{v===`auto`&&b.start(x.current||0,e),n&&n(C.current,e)},timeout:v===`auto`?null:v,...y,children:(e,{ownerState:t,...n})=>{let r=F(e,l,H,U,_,a.props.style);return g.cloneElement(a,{style:r,ref:w,...n})}})});W&&(W.muiSupportAuto=!0);export{I as a,D as c,h as d,m as f,F as i,T as l,z as n,N as o,p,L as r,P as s,W as t,y as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./jsx-runtime-BnvnyDTF.js";import{i as t}from"./CircularProgress-C_LUU3DK.js";var n=t((0,e().jsx)(`path`,{d:`M11 18h2v-2h-2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4`}),`HelpOutlineOutlined`);export{n as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./jsx-runtime-BnvnyDTF.js";import{v as t}from"./createSimplePaletteValueFilter-BRAMrHWJ.js";function n(e,t){return new RegExp(e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),t)}var r=e(),i=t(`span`)(({theme:e})=>({"&>mark":{backgroundColor:e.palette.highlight}})),a=({search:e,children:t,caseSensitive:a})=>{if(!t)return null;if(!e)return(0,r.jsx)(r.Fragment,{children:t});let o=e.split(`,`).map(e=>e.trim()).map(e=>n(e,``).source).join(`|`),s=new RegExp(o,a?`g`:`gi`),c=t.split(s),l=Array.from(t.matchAll(s)).map(e=>e[0]);return(0,r.jsx)(i,{children:c.flatMap((e,t)=>t<l.length?[e,(0,r.jsx)(`mark`,{children:l[t]},t)]:[e])})};export{n,a as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./jsx-runtime-BnvnyDTF.js";import{v as t}from"./createSimplePaletteValueFilter-BRAMrHWJ.js";import{n,t as r}from"./Tooltip-BaILXXti.js";var i=e(),a=t(`div`)(({theme:e})=>({overflow:`auto`,padding:e.spacing(1,1.5)})),o=t(({className:e,maxWidth:t,maxHeight:n,fontSize:o,...s})=>(0,i.jsx)(r,{...s,title:(0,i.jsx)(a,{children:s.title}),classes:{popper:e}}),{shouldForwardProp:e=>e!==`maxWidth`&&e!==`maxHeight`&&e!==`fontSize`})(({theme:e,maxWidth:t=e.spacing(37.5),maxHeight:r=e.spacing(37.5),fontSize:i=e.fontSizes.smallerBody})=>({maxWidth:t,[`& .${n.tooltip}`]:{display:`flex`,flexDirection:`column`,backgroundColor:e.palette.background.paper,padding:0,borderRadius:e.shape.borderRadiusMedium,boxShadow:e.shadows[2],color:e.palette.text.primary,fontWeight:e.fontWeight.medium,maxWidth:`inherit`,border:`1px solid ${e.palette.divider}`,maxHeight:r,fontSize:i},[`& .${n.arrow}`]:{"&:before":{border:`1px solid ${e.palette.divider}`},color:e.palette.background.paper}})),s=e=>e.title?(0,i.jsx)(o,{...e,children:e.children}):e.children;export{s as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e,t}from"./react-GZhdek4G.js";import{t as n}from"./jsx-runtime-BnvnyDTF.js";import{v as r}from"./createSimplePaletteValueFilter-BRAMrHWJ.js";import{n as i}from"./ConditionallyRender---uTpMBn.js";import{t as a}from"./Alert-_bLyWbvx.js";import{t as o}from"./Typography-BTdLWIUX.js";import{t as s}from"./Box-BQsxfFmC.js";import{t as c}from"./Button-CebB8EPB.js";import{a as l,i as u,o as d}from"./TooltipResolver-4A1YhwBy.js";import{n as f}from"./formatPath-j72gcKwy.js";import{G as p,t as m}from"./PermissionButton-B-IfzChn.js";import{n as h,t as g}from"./useApiGetter-7FP8Avm4.js";import{r as _,t as v}from"./PageContent-c0NDm5oD.js";import{c as y,s as b,t as x}from"./metricsFormatters-DhX-aU17.js";import{M as S,Ut as C,ws as w,ya as T,zn as E}from"./index-C04TEs4k.js";import{n as D}from"./useImpactMetricsEnabled-wRNO6-Oh.js";import{i as O,n as k,r as A,t as j}from"./GridLayoutWrapper-B_YyjZ7l.js";import{t as M}from"./impact-metrics-icon-6dt-ye-h.js";var N=e(t(),1),P=()=>{let e=`api/admin/impact-metrics/plausible`,{data:t,refetch:n,loading:r,error:i}=h(f(e),()=>g(f(e),`Plausible metrics`),{refreshInterval:30*1e3,revalidateOnFocus:!0});return{data:t||{data:[]},refetch:n,loading:r,error:i}},F=n(),I=({aspectRatio:e,overrideOptions:t={},errorTitle:n=`Failed to load Plausible metrics.`,emptyDataDescription:r=`No Plausible analytics data available.`,noSeriesPlaceholder:i,isPreview:o})=>{let{data:c,loading:l,error:u}=P(),d=C({fill:!0,type:`constant`}),f=(0,N.useMemo)(()=>{if(!c?.data||c.data.length===0)return{labels:[],datasets:[]};let e=[...c.data].sort((e,t)=>new Date(e.date).getTime()-new Date(t.date).getTime());return{labels:e.map(e=>e.date),datasets:[{label:`Events`,data:e.map(e=>e.count),borderColor:`rgb(129, 122, 254)`,backgroundColor:`rgba(129, 122, 254, 0.1)`,fill:!0,tension:.1}]}},[c]),p=!!u,m=l,h=(0,N.useMemo)(()=>!m&&(!c?.data||c.data.length===0||!f.datasets.some(e=>e.data.length>1)),[f,m,c]),g=h?i||(0,F.jsx)(y,{title:`No Plausible data available`,description:r}):m,_={...t,scales:{x:{type:`time`,time:{unit:`hour`,displayFormats:{hour:`MMM dd, HH:mm`},tooltipFormat:`PPpp`},ticks:{maxRotation:45,minRotation:45,maxTicksLimit:8}},y:{beginAtZero:!0,title:{display:!0,text:`Events`},ticks:{precision:0,callback:e=>typeof e==`number`?x(e):e}}},plugins:{legend:{display:!0,position:`bottom`,labels:{usePointStyle:!0,boxWidth:8,padding:12}}},animations:{x:{duration:0},y:{duration:0}}};return(0,F.jsx)(F.Fragment,{children:(0,F.jsx)(s,{sx:o?{}:{height:`100%`,width:`100%`,"& > div":{height:`100% !important`,width:`100% !important`}},children:(0,F.jsx)(b,{data:h||m?d:f,aspectRatio:e,overrideOptions:_,cover:p?(0,F.jsx)(a,{severity:`error`,children:n}):g})})})},L=r(i)(({theme:e})=>({borderRadius:`${e.shape.borderRadiusMedium}px`,boxShadow:`none`,display:`flex`,flexDirection:`column`,height:`100%`})),R=r(s)({flex:1,display:`flex`,flexDirection:`column`,minHeight:0}),z=r(s)(({theme:e})=>({position:`relative`,minWidth:0,flexGrow:1,height:`100%`,display:`flex`,flexDirection:`column`,margin:`auto 0`,padding:e.spacing(3)})),B=r(s)(({theme:e})=>({display:`flex`,gap:e.spacing(2),alignItems:`center`,padding:e.spacing(1.5,2),borderBottom:`1px solid ${e.palette.divider}`})),V=r(s)(({theme:e})=>({display:`flex`,flexDirection:`column`,justifyContent:`flex-end`,flexGrow:1,overflow:`hidden`,textOverflow:`ellipsis`})),H=()=>(0,F.jsxs)(L,{children:[(0,F.jsx)(B,{children:(0,F.jsxs)(V,{children:[(0,F.jsx)(o,{variant:`h3`,children:`Plausible Analytics`}),(0,F.jsx)(o,{variant:`body2`,sx:{color:`text.secondary`},children:`Favorite events from Plausible analytics`})]})}),(0,F.jsx)(R,{children:(0,F.jsx)(z,{children:(0,F.jsx)(I,{aspectRatio:1.5,overrideOptions:{maintainAspectRatio:!1},emptyDataDescription:`No Plausible analytics data available for favorite events.`})})})]}),U=`https://docs.getunleash.io/concepts/impact-metrics`,W=r(s)(({theme:e})=>({display:`flex`,flexDirection:`column`,alignItems:`center`,padding:e.spacing(6,4)})),G=r(s)(({theme:e})=>({marginBottom:e.spacing(3)})),K=r(s)(({theme:e})=>({textAlign:`center`,maxWidth:480,marginBottom:e.spacing(3)})),q=r(s)(({theme:e})=>({display:`flex`,gap:e.spacing(2),alignItems:`center`,marginBottom:e.spacing(4)})),J=r(a)(({theme:e})=>({maxWidth:480,backgroundColor:e.palette.info.light,marginTop:e.spacing(4),color:e.palette.info.dark,"& .MuiAlert-icon":{color:e.palette.info.main}})),Y=({onAddChart:e})=>(0,F.jsx)(v,{header:(0,F.jsx)(_,{title:`Impact metrics`,actions:(0,F.jsx)(m,{variant:`contained`,onClick:e,permission:p,children:`New chart`})}),children:(0,F.jsxs)(W,{children:[(0,F.jsx)(G,{children:(0,F.jsx)(M,{})}),(0,F.jsxs)(K,{children:[(0,F.jsx)(o,{variant:`h3`,component:`h2`,sx:{mb:1.5},children:`No impact metrics yet`}),(0,F.jsx)(o,{sx:{color:`text.secondary`},children:`Impact metrics help you measure how feature flags affect your application's performance. Get started by sending your first metrics from your code.`})]}),(0,F.jsxs)(q,{children:[(0,F.jsx)(c,{variant:`text`,href:U,target:`_blank`,rel:`noopener noreferrer`,children:`Read the docs`}),(0,F.jsx)(m,{variant:`contained`,onClick:e,permission:p,children:`Create your first chart`})]}),(0,F.jsxs)(J,{severity:`info`,icon:(0,F.jsx)(T,{}),children:[(0,F.jsx)(`strong`,{children:`Tip:`}),` Once you've set up metrics, you'll be able to create charts, set up safeguards, and monitor your application's health in real-time.`]})]})});r(s)(({theme:e})=>({display:`flex`,alignItems:`center`,cursor:`move`,padding:e.spacing(.5),borderRadius:e.shape.borderRadius,color:e.palette.text.secondary,"&:hover":{backgroundColor:e.palette.action.hover,color:e.palette.text.primary}}));var X=()=>{let[e,t]=(0,N.useState)(!1),[n,r]=(0,N.useState)(),{setToastApiError:i}=l(),a=w(`plausibleMetrics`),{trackEvent:s}=d(),{charts:c,layout:f,loading:h,error:g,addChart:v,updateChart:y,deleteChart:b}=O(),{metricOptions:x,loading:C,error:T}=S(),E=()=>{r(void 0),t(!0),s(`impact-metrics`,{props:{eventType:`global chart modal open`}})},D=e=>{r(e),t(!0)},M=async e=>{try{n?await y(n.id,e):await v(e),t(!1)}catch(e){i(u(e))}},P=(0,N.useCallback)(async e=>{try{await b(e)}catch(e){i(u(e))}},[b]),I=(0,N.useMemo)(()=>{let e=[];if(a){let t={id:`plausible-analytics`,component:(0,F.jsx)(H,{}),w:6,h:2};e.push(t)}let t=c.map((e,t)=>{let n=f?.find(t=>t.i===e.id);return{id:e.id,component:(0,F.jsx)(k,{config:e,onEdit:D,onDelete:P}),w:n?.w??6,h:n?.h??4,x:n?.x,y:n?.y,minW:4,minH:2,maxW:12,maxH:8}});return[...e,...t]},[c,f,D,P,a]),L=T||g,R=C||h,z=c.length>=20,B=R||!!L||z;return(0,F.jsxs)(F.Fragment,{children:[c.length===0&&!R?(0,F.jsx)(Y,{onAddChart:E}):(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)(_,{title:`Impact metrics`,titleElement:(0,F.jsx)(o,{variant:`h1`,component:`span`,children:`Impact metrics`}),actions:(0,F.jsx)(m,{variant:`contained`,onClick:E,disabled:B,permission:p,tooltipProps:z?{title:`Maximum of 20 impact metrics charts allowed`,arrow:!0}:void 0,children:`New chart`})}),I.length>0&&(0,F.jsx)(j,{items:I})]}),(0,F.jsx)(A,{open:e,onClose:()=>t(!1),onSave:M,initialConfig:n,metrics:x,loading:C||h})]})},Z=r(`div`)(({theme:e})=>({paddingTop:e.spacing(2)})),Q=r(`div`)(({theme:e})=>({display:`flex`,flexDirection:`column`,gap:e.spacing(4),paddingBottom:e.spacing(4)})),$=()=>D()?(0,F.jsx)(Z,{children:(0,F.jsx)(Q,{children:(0,F.jsx)(X,{})})}):(0,F.jsx)(E,{});export{$ as ImpactMetricsPage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e,t}from"./react-GZhdek4G.js";import{r as n}from"./chunk-QUQL4437-Dr42NpoL.js";import{t as r}from"./useTheme-CQqAmDLr.js";import{t as i}from"./jsx-runtime-BnvnyDTF.js";import{v as a}from"./createSimplePaletteValueFilter-BRAMrHWJ.js";import{t as o}from"./Tooltip-BaILXXti.js";import{b as s,i as c,r as l,t as u}from"./TextField-oipjeg6n.js";import{g as d}from"./Popover-CUTnSn2h.js";import{t as f}from"./Radio-DL8ja0ll.js";import{i as p}from"./CircularProgress-C_LUU3DK.js";import{n as m}from"./ConditionallyRender---uTpMBn.js";import{r as h,t as g}from"./Alert-_bLyWbvx.js";import{t as _}from"./Typography-BTdLWIUX.js";import{t as v}from"./Box-BQsxfFmC.js";import{t as y}from"./Button-CebB8EPB.js";import{t as ee}from"./Dialog-C-xQxqWX.js";import{t as te}from"./Divider-CsdWvu5F.js";import{t as b}from"./FormControlLabel-F5gDLixN.js";import{t as ne}from"./Link-CfIScd2f.js";import{a as re,i as x,n as S,o as ie,r as ae,t as oe}from"./useEnvironments-CTguhgy0.js";import{t as se}from"./Close-DyTASMSq.js";import{t as ce}from"./format-C8UVjLNw.js";import{t as le}from"./formatDistanceToNow-CyouiCIY.js";import{r as ue,t as de}from"./PageContent-c0NDm5oD.js";import{i as C,l as fe,n as pe,s as me,t as w}from"./metricsFormatters-DhX-aU17.js";import{Ba as he,Bs as T,Eo as E,Ja as ge,Jo as _e,Ko as D,Ls as ve,M as ye,Nr as be,Ro as xe,Rs as Se,U as Ce,Vi as O,Vo as we,Vs as k,Xs as Te,bs as Ee,fs as De,go as Oe,ho as A,po as ke,ro as j,rs as M,ya as Ae,za as je,zs as Me}from"./index-C04TEs4k.js";import{a as Ne,c as N,i as Pe,l as P,n as Fe,o as F,r as Ie,s as Le,t as Re}from"./useGroupedImpactMetricsData-CW9qnV2y.js";import{t as ze}from"./impact-metrics-icon-6dt-ye-h.js";var I=e(t(),1),L=e=>{let t=e>0?`+`:e<0?`−`:``,n=Math.abs(e);return`${t}${n>=10||Number.isInteger(n)?`${Math.round(n)}`:n.toFixed(1)}%`},R=2,z=(e,t,n,r,i)=>n===t?(r+i)/2:r+(e-t)/(n-t)*(i-r),Be=e=>{let t=e.data.filter(([,e])=>Number.isFinite(e));if(t.length<2)return null;let n=t.map(([e])=>e),r=t.map(([,e])=>e),i=n[0],a=n[n.length-1],o=Math.min(...r),s=Math.max(...r),c=R,l=64-R,u=e=>z(e,i,a,0,320),d=e=>z(e,o,s,l,c),f=t.map(([e,t],n)=>`${n===0?`M`:`L`} ${u(e).toFixed(1)} ${d(t).toFixed(1)}`).join(` `),p=u(i).toFixed(1);return{line:f,area:`${f} L ${u(a).toFixed(1)} 64 L ${p} 64 Z`}},B=i(),Ve=a(v)(({theme:e})=>({position:`relative`,display:`flex`,flexDirection:`column`,flex:1,justifyContent:`center`,gap:e.spacing(.5),margin:e.spacing(-3,-3,-3,-3),padding:e.spacing(4,3,4,3),borderTopRightRadius:e.shape.borderRadiusMedium,background:e.mode===`dark`?`linear-gradient(135deg, ${e.palette.background.alternative} 0%, ${e.palette.action.alternative} 100%)`:`linear-gradient(135deg, ${e.palette.primary.main} 0%, ${e.palette.primary.dark} 100%)`,color:e.palette.common.white,overflow:`hidden`,[e.breakpoints.down(`lg`)]:{margin:e.spacing(-2.5,-2,-2.5,-2),padding:e.spacing(3.5,2,3.5,2),borderTopRightRadius:0}})),He=a(v)(({theme:e})=>({display:`grid`,gridTemplateColumns:`minmax(0, 1fr) minmax(140px, 0.6fr)`,gap:e.spacing(2.5),alignItems:`stretch`,[e.breakpoints.down(`md`)]:{gridTemplateColumns:`1fr`,gap:e.spacing(1.5),alignItems:`center`}})),Ue=a(v)(({theme:e})=>({display:`flex`,flexDirection:`column`,gap:e.spacing(.5),minWidth:0})),We=a(v)(({theme:e})=>({width:`100%`,minHeight:64,display:`flex`,alignItems:`stretch`,[e.breakpoints.down(`md`)]:{height:64*.7,minHeight:`unset`}})),Ge=a(v)(({theme:e})=>({display:`inline-flex`,alignItems:`center`,gap:e.spacing(.75),color:e.palette.common.white})),Ke=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,fontWeight:e.typography.fontWeightBold,color:e.palette.common.white,textTransform:`uppercase`,letterSpacing:`0.08em`})),qe=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallBody,fontWeight:e.typography.fontWeightBold,color:e.palette.common.white,lineHeight:1.3,display:`-webkit-box`,WebkitLineClamp:2,WebkitBoxOrient:`vertical`,overflow:`hidden`,overflowWrap:`anywhere`})),Je=a(v)(({theme:e})=>({display:`flex`,alignItems:`baseline`,gap:e.spacing(1),marginTop:e.spacing(1.5)})),Ye=a(_)(({theme:e})=>({fontSize:e.typography.h2.fontSize,fontWeight:700,color:e.palette.common.white,lineHeight:1})),Xe=a(v)(({theme:e})=>({display:`inline-flex`,alignItems:`center`,gap:e.spacing(.5),fontSize:e.fontSizes.smallBody})),Ze=a(_)(()=>({color:`rgba(255, 255, 255, 0.75)`,fontSize:`0.75rem`})),Qe=a(`svg`)({width:`100%`,height:`100%`,display:`block`}),$e=e=>e===null||e===0?`flat`:e>0?`up`:`down`,V=e=>`${e>0?`+`:e<0?`−`:``}${w(Math.abs(e))}`,et=({goalMetricLabel:e,summary:t,series:n,timeLabel:i})=>{let a=r(),o=(0,I.useId)(),s=$e(t.deltaAbs),c=n?Be(n):null,l=t.mode===`latest`&&t.deltaAbs!==null&&t.deltaAbs!==0,u=a.palette.common.white,d=a.palette.common.white,f=s===`up`?P:s===`down`?A:N,p=t.mode===`cumulative`?`Total over ${i.toLowerCase()}`:`vs. start of ${i.toLowerCase()}`;return(0,B.jsxs)(Ve,{children:[(0,B.jsxs)(Ge,{children:[(0,B.jsx)(De,{sx:{fontSize:16}}),(0,B.jsx)(Ke,{children:`Goal`})]}),(0,B.jsxs)(He,{children:[(0,B.jsxs)(Ue,{children:[(0,B.jsx)(qe,{title:e,children:e}),(0,B.jsxs)(Je,{children:[(0,B.jsx)(Ye,{children:w(t.current)}),l&&t.deltaAbs!==null?(0,B.jsxs)(Xe,{sx:{color:u},children:[(0,B.jsx)(f,{sx:{fontSize:16}}),(0,B.jsx)(_,{component:`span`,sx:{fontSize:`inherit`,fontWeight:600,color:`inherit`},children:t.deltaPct===null?V(t.deltaAbs):`${L(t.deltaPct)} (${V(t.deltaAbs)})`})]}):null]}),(0,B.jsx)(Ze,{variant:`caption`,children:p})]}),c?(0,B.jsx)(We,{children:(0,B.jsxs)(Qe,{viewBox:`0 0 320 64`,preserveAspectRatio:`none`,role:`img`,"aria-label":`${e} trend sparkline`,children:[(0,B.jsx)(`defs`,{children:(0,B.jsxs)(`linearGradient`,{id:o,x1:`0`,y1:`0`,x2:`0`,y2:`1`,children:[(0,B.jsx)(`stop`,{offset:`0%`,stopColor:d,stopOpacity:.35}),(0,B.jsx)(`stop`,{offset:`100%`,stopColor:d,stopOpacity:0})]})}),(0,B.jsx)(`path`,{d:c.area,fill:`url(#${o})`,stroke:`none`}),(0,B.jsx)(`path`,{d:c.line,fill:`none`,stroke:d,strokeWidth:1.5,strokeLinejoin:`round`,strokeLinecap:`round`,vectorEffect:`non-scaling-stroke`})]})}):null]})]})},tt=a(v)(({theme:e})=>({borderRadius:e.shape.borderRadiusMedium,border:`1px solid ${e.palette.divider}`,backgroundColor:e.palette.background.paper,color:`inherit`})),nt=a(v)(({theme:e})=>({display:`flex`,flexDirection:`row`,[e.breakpoints.down(`lg`)]:{flexDirection:`column`}})),rt=a(v)({flex:2,minWidth:0,display:`flex`,flexDirection:`column`}),it=a(v)(({theme:e})=>({flex:1,display:`flex`,flexDirection:`column`,backgroundColor:e.palette.background.elevation1,borderTopRightRadius:e.shape.borderRadiusMedium,borderBottomRightRadius:e.shape.borderRadiusMedium,[e.breakpoints.down(`lg`)]:{borderTopRightRadius:0,borderBottomLeftRadius:e.shape.borderRadiusMedium}})),at=a(v)(({theme:e})=>({display:`flex`,flexDirection:`column`,padding:e.spacing(1.5,3,0,3),minWidth:0,[e.breakpoints.down(`lg`)]:{padding:e.spacing(1.5,2,0,2)}})),ot=a(v)(({theme:e})=>({display:`flex`,alignItems:`flex-end`,padding:e.spacing(3,3,0,3),minWidth:0,[e.breakpoints.down(`lg`)]:{padding:e.spacing(2.5,2,0,2)}})),st=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallBody,fontWeight:e.typography.fontWeightBold,color:e.palette.text.primary})),ct=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,color:e.palette.text.secondary})),lt=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,fontWeight:e.typography.fontWeightBold,color:e.palette.text.secondary,textTransform:`uppercase`,letterSpacing:`0.06em`})),ut=a(v,{shouldForwardProp:e=>e!==`heightSpacing`})(({theme:e,heightSpacing:t})=>({display:`flex`,minWidth:0,flex:1,minHeight:e.spacing(t.base),padding:e.spacing(1.5,3),"& > *":{minWidth:0,flex:1},[e.breakpoints.down(`lg`)]:{minHeight:e.spacing(t.lg),padding:e.spacing(1.5,2)},[e.breakpoints.down(`sm`)]:{minHeight:e.spacing(t.sm)}})),dt=a(v)(({theme:e})=>({flex:1,minWidth:0,display:`flex`,flexDirection:`column`,justifyContent:`center`,padding:e.spacing(1.5,3,3,3),[e.breakpoints.down(`lg`)]:{padding:e.spacing(1.5,2,2.5,2)}})),ft=a(v)(({theme:e})=>({flex:1,display:`flex`,flexDirection:`column`,padding:e.spacing(3,3,3,3),borderBottom:`1px solid ${e.palette.divider}`,[e.breakpoints.down(`lg`)]:{padding:e.spacing(2.5,2,2.5,2)}})),pt=a(v)(({theme:e})=>({flex:1,display:`flex`,flexDirection:`column`,padding:e.spacing(2,2.5,1.25,2.5),borderBottom:`1px solid ${e.palette.divider}`,[e.breakpoints.down(`lg`)]:{padding:e.spacing(1.5,2,1,2)}})),mt=new Set([`count`,`sum`]),ht=({title:e,subtitle:t,timeRange:n,aggregationMode:r,stepSeries:i,stepTotals:a,featureEvents:o,start:s,end:c,loading:l,chartHeightSpacing:u,totalsHeaderSlot:d,totalsMiddleSlot:f,totalsLabel:p})=>{let m=r&&!mt.has(r)?`Last recorded value`:`Totals`;return(0,B.jsx)(tt,{children:(0,B.jsxs)(nt,{children:[(0,B.jsxs)(rt,{children:[(0,B.jsxs)(at,{children:[(0,B.jsx)(st,{children:e}),(0,B.jsx)(ct,{children:t})]}),(0,B.jsx)(ut,{heightSpacing:u,children:(0,B.jsx)(Fe,{stepSeries:i,timeRange:n,start:s,end:c,loading:l,featureEvents:o})})]}),(0,B.jsxs)(it,{children:[(0,B.jsx)(ft,{children:d}),f?(0,B.jsx)(pt,{children:f}):null,(0,B.jsx)(ot,{children:(0,B.jsx)(lt,{children:p??m})}),(0,B.jsx)(dt,{children:(0,B.jsx)(Le,{steps:a})})]})]})})},gt=[`initial`,`pre-live`,`live`,`completed`,`archived`,`unknown`],_t=e=>e.lifecycleStage??`unknown`,vt=a(`div`)(({theme:e})=>({display:`flex`,alignItems:`baseline`,gap:e.spacing(1),marginBottom:e.spacing(1.5)})),yt=a(_)(({theme:e})=>({fontSize:e.fontSizes.bodySize,fontWeight:e.typography.fontWeightBold,color:e.palette.text.primary})),bt=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,color:e.palette.text.secondary})),xt=a(ae)({"& th:first-of-type":{borderBottomLeftRadius:0},"& th:last-of-type":{borderBottomRightRadius:0}}),St=a(m)(({theme:e})=>({borderRadius:e.shape.borderRadiusLarge,boxShadow:`none`,border:`1px solid ${e.palette.divider}`,overflow:`hidden`})),Ct=a(S)(({theme:e})=>({backgroundColor:e.palette.background.elevation1})),wt=a(x)(({theme:e})=>({padding:e.spacing(.75,2),color:e.palette.text.secondary,fontSize:e.fontSizes.smallerBody,fontWeight:e.typography.fontWeightBold,letterSpacing:`0.04em`,textTransform:`uppercase`})),Tt=a(`button`)(({theme:e})=>({all:`unset`,display:`flex`,alignItems:`center`,gap:e.spacing(.75),cursor:`pointer`,"&:focus-visible":{outline:`2px solid ${e.palette.primary.main}`,outlineOffset:2,borderRadius:e.shape.borderRadius}})),Et=a(v)(({theme:e})=>({display:`inline-flex`,alignItems:`center`,color:e.palette.text.disabled,"& svg":{fontSize:16}})),H=a(v)({display:`inline-flex`,alignItems:`center`,"& svg":{height:18,width:`auto`,display:`block`}}),Dt=a(`span`)(({theme:e})=>({color:e.palette.text.disabled,fontWeight:e.typography.fontWeightRegular,textTransform:`none`,letterSpacing:0,marginLeft:e.spacing(.25)})),Ot=a(v)(({theme:e})=>({display:`inline-flex`,alignItems:`center`,gap:e.spacing(1),color:e.palette.text.primary,fontWeight:e.typography.fontWeightMedium})),kt=a(ne)(({theme:e})=>({fontWeight:e.typography.fontWeightBold})),At=a(v)(({theme:e})=>({display:`inline-flex`,alignItems:`center`,gap:e.spacing(.75)})),jt=a(`span`)(({theme:e})=>({color:e.palette.text.disabled})),Mt=({stage:e})=>(0,B.jsxs)(At,{children:[(0,B.jsx)(H,{children:(0,B.jsx)(we,{stage:{name:e}})}),(0,B.jsx)(`span`,{children:xe(e)})]}),Nt=({groupKey:e,count:t,collapsed:n,onToggle:r})=>(0,B.jsx)(Ct,{children:(0,B.jsx)(wt,{colSpan:4,children:(0,B.jsxs)(Tt,{type:`button`,"aria-expanded":!n,onClick:r,children:[(0,B.jsx)(Et,{children:n?(0,B.jsx)(he,{}):(0,B.jsx)(Ee,{})}),e===`unknown`?(0,B.jsx)(`span`,{children:`Not found`}):(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(H,{children:(0,B.jsx)(we,{stage:{name:e}})}),(0,B.jsx)(`span`,{children:xe(e)})]}),(0,B.jsx)(Dt,{children:t})]})})}),Pt=({feature:e})=>(0,B.jsxs)(S,{children:[(0,B.jsx)(x,{children:(0,B.jsx)(Ot,{children:e.project?(0,B.jsx)(kt,{component:n,to:`/projects/${e.project}/features/${e.name}`,underline:`hover`,children:e.name}):(0,B.jsx)(`span`,{children:e.name})})}),(0,B.jsx)(x,{children:e.project}),(0,B.jsx)(x,{sx:{textTransform:`capitalize`},children:e.type}),(0,B.jsx)(x,{children:e.lifecycleStage?(0,B.jsx)(Mt,{stage:e.lifecycleStage}):(0,B.jsx)(jt,{children:`—`})})]}),Ft=({features:e})=>{let[t,n]=(0,I.useState)({}),r=(0,I.useMemo)(()=>gt.map(t=>({key:t,entries:e.filter(e=>_t(e)===t)})).filter(e=>e.entries.length>0),[e]);if(e.length===0)return null;let i=e=>n(t=>({...t,[e]:!t[e]}));return(0,B.jsxs)(v,{children:[(0,B.jsxs)(vt,{children:[(0,B.jsx)(yt,{children:`Followed features`}),(0,B.jsx)(bt,{children:`${e.length} total`})]}),(0,B.jsx)(St,{children:(0,B.jsxs)(ie,{children:[(0,B.jsx)(xt,{children:(0,B.jsxs)(S,{children:[(0,B.jsx)(x,{children:`Name`}),(0,B.jsx)(x,{children:`Project`}),(0,B.jsx)(x,{children:`Type`}),(0,B.jsx)(x,{children:`Lifecycle stage`})]})}),(0,B.jsx)(re,{children:r.map(({key:e,entries:n})=>(0,B.jsxs)(I.Fragment,{children:[(0,B.jsx)(Nt,{groupKey:e,count:n.length,collapsed:!!t[e],onToggle:()=>i(e)}),t[e]?null:n.map(e=>(0,B.jsx)(Pt,{feature:e},e.name))]},e))})]})})]})},It=1,U={hour:5*6e4,day:60*6e4,week:360*6e4,month:180*6e4,threeMonths:10080*6e4,sixMonths:10080*6e4},Lt=({events:e,goalSeries:t,aggregationMode:n,visibleWindow:r,timeRange:i})=>{if(!Rt(t)||!zt(r))return[];let a=Bt(e);return Kt(Gt(a.map((e,o)=>Vt(e,{previousFlip:a[o-1],nextFlip:a[o+1],goalSeries:t,aggregationMode:n,visibleWindow:r,timeRange:i})).filter(Wt)))},Rt=e=>!!(e&&e.data.length>0),zt=e=>e!==null&&Number.isFinite(e.minMs)&&Number.isFinite(e.maxMs),Bt=e=>e.filter(e=>!!e.featureName).sort((e,t)=>e.timestamp-t.timestamp).map(e=>({featureName:e.featureName,atSec:e.timestamp/1e3,event:e})),Vt=(e,t)=>{let n=Ht(e,t);if(n<=0)return{featureName:e.featureName,deltaPct:null};let r=W(e.atSec-n,e.atSec,t),i=W(e.atSec,e.atSec+n,t),a=G(r,t),o=G(i,t);return a===null||o===null||a===0?{featureName:e.featureName,deltaPct:null}:{featureName:e.featureName,deltaPct:(o-a)/a*100,detail:{event:e.event,halfWindowMs:n*1e3,before:a,after:o,deltaAbs:o-a,preSeries:r,postSeries:i}}},Ht=(e,{previousFlip:t,nextFlip:n,visibleWindow:r,timeRange:i})=>{let a=U[i]/1e3,o=t?(e.atSec-t.atSec)/2:1/0,s=n?(n.atSec-e.atSec)/2:1/0,c=e.atSec-r.minMs/1e3,l=r.maxMs/1e3-e.atSec;return Math.min(a,o,s,c,l)},Ut=new Set([`count`,`sum`]),W=(e,t,{goalSeries:n})=>n.data.filter(([n,r])=>n>=e&&n<t&&Number.isFinite(r)),G=(e,{aggregationMode:t})=>{if(e.length===0)return null;let n=e.reduce((e,[,t])=>e+t,0);return Ut.has(t)?n:n/e.length},Wt=e=>e.deltaPct!==null,Gt=e=>{let t=new Map;for(let n of e){let e=t.get(n.featureName);(e===void 0||Math.abs(n.deltaPct)>=Math.abs(e.deltaPct))&&t.set(n.featureName,n)}return[...t.values()]},Kt=e=>e.map(({featureName:e,deltaPct:t,detail:n})=>({featureName:e,deltaPct:t,tone:qt(t),detail:n})).sort((e,t)=>Math.abs(t.deltaPct)-Math.abs(e.deltaPct)||e.featureName.localeCompare(t.featureName)),qt=e=>Math.abs(e)<It?`flat`:e>0?`up`:`down`,K=e=>{let t=Math.round(e/(60*1e3));if(t<60)return`${t}m`;let n=Math.round(e/(3600*1e3));return n<24?`${n}h`:`${Math.round(e/(1440*60*1e3))}d`},Jt=new Set([`count`,`sum`]),q=a(ee)(({theme:e})=>({"& .MuiDialog-paper":{borderRadius:e.shape.borderRadiusLarge,overflow:`hidden`}})),Yt=a(v)(({theme:e})=>({display:`flex`,alignItems:`flex-start`,justifyContent:`space-between`,gap:e.spacing(1.5),padding:e.spacing(2.5,3,1.5,3)})),Xt=a(v)(({theme:e})=>({display:`flex`,flexDirection:`column`,gap:e.spacing(.5),minWidth:0})),Zt=a(v)(({theme:e})=>({display:`flex`,alignItems:`center`,gap:e.spacing(1),minWidth:0})),Qt=a(_)(({theme:e})=>({fontSize:e.typography.h2.fontSize,fontWeight:700,color:e.palette.text.primary,lineHeight:1.2,whiteSpace:`nowrap`,overflow:`hidden`,textOverflow:`ellipsis`})),$t=a(v)(({theme:e})=>({display:`inline-flex`,alignItems:`center`,gap:e.spacing(.5),padding:e.spacing(.25,1),borderRadius:999,fontSize:e.fontSizes.smallerBody,fontWeight:600,flexShrink:0})),en=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,color:e.palette.text.secondary})),tn=a(v)(({theme:e})=>({padding:e.spacing(1.5,3,3,3),display:`flex`,flexDirection:`column`,gap:e.spacing(2)})),nn=a(v)(({theme:e})=>({display:`flex`,flexDirection:`column`,alignItems:`center`,gap:e.spacing(1.5),padding:e.spacing(2.5,3),borderRadius:e.shape.borderRadiusMedium,backgroundColor:e.palette.background.elevation1})),rn=a(v)(({theme:e})=>({display:`flex`,alignItems:`baseline`,gap:e.spacing(2.5),color:e.palette.text.secondary})),J=a(v)({display:`flex`,flexDirection:`column`,alignItems:`center`}),Y=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,fontWeight:600,color:e.palette.text.secondary,textTransform:`uppercase`,letterSpacing:`0.06em`})),an=a(_)(({theme:e})=>({fontSize:e.typography.h3.fontSize,fontWeight:600,color:e.palette.text.primary,lineHeight:1.2})),on=a(v)(({theme:e})=>({color:e.palette.text.disabled,fontSize:e.typography.h3.fontSize,fontWeight:300,alignSelf:`center`,paddingBottom:e.spacing(.5)})),sn=a(v,{shouldForwardProp:e=>e!==`tone`})(({theme:e,tone:t})=>({display:`flex`,flexDirection:`column`,alignItems:`center`,gap:e.spacing(.25),color:t===`up`?e.palette.success.main:t===`down`?e.palette.error.main:e.palette.text.secondary})),cn=a(_)(({theme:e})=>({fontSize:e.typography.h1.fontSize,fontWeight:700,lineHeight:1.1,color:`inherit`,display:`inline-flex`,alignItems:`center`,gap:e.spacing(.5)})),ln=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,color:e.palette.text.secondary})),un=a(v)({position:`relative`,width:`100%`}),dn=e=>`${e>0?`+`:e<0?`−`:``}${w(Math.abs(e))}`,fn=(e,t,n,r)=>{let i=[...e.preSeries,...e.postSeries].sort(([e],[t])=>e-t);return{labels:i.map(([e])=>new Date(e*1e3)),datasets:[{label:`Goal`,data:i.map(([,e])=>e),borderColor:t,backgroundColor:fe(r,n),fill:!0,borderWidth:2,pointRadius:0,pointHoverRadius:4,tension:.2,spanGaps:!0}]}},pn=(e,t,n)=>{let r=e.event.timestamp,i=e.halfWindowMs;return{responsive:!0,interaction:{mode:`index`,intersect:!1},layout:{padding:{top:12,right:8,left:8,bottom:4}},scales:{x:{type:`time`,min:r-i,max:r+i,ticks:{maxRotation:0,maxTicksLimit:5,font:{size:10}},grid:{display:!1}},y:{beginAtZero:!1,ticks:{maxTicksLimit:4,font:{size:10},callback:e=>typeof e==`number`?w(e):e}}},plugins:{legend:{display:!1},annotation:{annotations:{"pre-tint":{type:`box`,xMin:r-i,xMax:r,backgroundColor:n,borderWidth:0,drawTime:`beforeDatasetsDraw`},"event-line":{type:`line`,xMin:r,xMax:r,borderColor:t,borderWidth:2,borderDash:[4,3]}}}},animations:{x:{duration:0},y:{duration:0}}}},mn=({impact:e,aggregationMode:t,onClose:n})=>{let i=r(),a=e!==null,o=Jt.has(t),s=e?Pe(i,e.detail.event.type):i.palette.text.secondary,c=(0,I.useMemo)(()=>e?fn(e.detail,i.palette.primary.main,F(i.palette.primary.main,0),F(i.palette.primary.main,.18)):null,[e,i.palette.primary.main]),l=(0,I.useMemo)(()=>e?pn(e.detail,i.palette.primary.main,F(i.palette.text.primary,.04)):null,[e,i.palette.primary.main,i.palette.text.primary]);if(!e)return(0,B.jsx)(q,{open:a,onClose:n,maxWidth:`sm`,fullWidth:!0});let{detail:u,tone:d,deltaPct:f}=e,{event:p}=u,m=d===`up`?P:d===`down`?A:N,g=le(new Date(p.timestamp),{addSuffix:!0}),_=ce(new Date(p.timestamp),`MMM d 'at' HH:mm`),v=`±${K(u.halfWindowMs)} around the flip`,y=o?`Sum of the goal · ${v}`:`Average of the goal · ${v}`;return(0,B.jsxs)(q,{open:a,onClose:n,maxWidth:`sm`,fullWidth:!0,children:[(0,B.jsxs)(Yt,{children:[(0,B.jsxs)(Xt,{children:[(0,B.jsxs)(Zt,{children:[(0,B.jsx)(Qt,{title:p.featureName,children:p.featureName}),(0,B.jsxs)($t,{sx:{backgroundColor:F(s,.14),color:s,border:`1px solid ${s}`},children:[(0,B.jsx)(Oe,{sx:{fontSize:12,color:`inherit`}}),Ie[p.type]]})]}),(0,B.jsxs)(en,{title:_,children:[`Flipped `,g,p.createdBy?` by ${p.createdBy}`:``]})]}),(0,B.jsx)(h,{"aria-label":`Close`,size:`small`,onClick:n,children:(0,B.jsx)(se,{fontSize:`small`})})]}),(0,B.jsxs)(tn,{children:[(0,B.jsxs)(nn,{children:[(0,B.jsxs)(rn,{children:[(0,B.jsxs)(J,{children:[(0,B.jsx)(Y,{children:`Before`}),(0,B.jsx)(an,{children:w(u.before)})]}),(0,B.jsx)(on,{children:`→`}),(0,B.jsxs)(J,{children:[(0,B.jsx)(Y,{children:`After`}),(0,B.jsx)(an,{children:w(u.after)})]})]}),(0,B.jsxs)(sn,{tone:d,children:[(0,B.jsxs)(cn,{children:[(0,B.jsx)(m,{sx:{fontSize:28}}),L(f)]}),(0,B.jsx)(ln,{children:`${dn(u.deltaAbs)} · ${y}`})]})]}),(0,B.jsx)(un,{children:c&&l?(0,B.jsx)(I.Suspense,{fallback:null,children:(0,B.jsx)(me,{data:c,overrideOptions:l,aspectRatio:3})}):null})]})]})},hn=4,gn={up:P,down:A,flat:N},_n=a(v)(({theme:e})=>({display:`flex`,flexDirection:`column`,gap:e.spacing(.75),flex:1})),vn=a(v)(({theme:e})=>({display:`flex`,alignItems:`center`,justifyContent:`space-between`,gap:e.spacing(1)})),yn=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,fontWeight:e.typography.fontWeightBold,color:e.palette.text.secondary,textTransform:`uppercase`,letterSpacing:`0.06em`})),bn=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,fontWeight:600,color:e.palette.text.secondary,cursor:`default`})),xn=a(v)(({theme:e})=>({display:`flex`,flexDirection:`column`,gap:e.spacing(.25)})),Sn=a(`button`)(({theme:e})=>({border:`none`,background:`none`,font:`inherit`,color:`inherit`,width:`100%`,textAlign:`left`,cursor:`pointer`,display:`grid`,gridTemplateColumns:`1fr auto`,alignItems:`center`,gap:e.spacing(1),padding:e.spacing(.5,0),borderRadius:e.shape.borderRadius,"&:hover":{backgroundColor:e.palette.action.hover},"&:focus-visible":{outline:`2px solid ${e.palette.primary.main}`,outlineOffset:-2}})),Cn=a(v)(({theme:e})=>({fontSize:e.typography.body2.fontSize,fontWeight:500,color:e.palette.text.primary,whiteSpace:`nowrap`,overflow:`hidden`,textOverflow:`ellipsis`,minWidth:0})),wn=a(`span`,{shouldForwardProp:e=>e!==`tone`})(({theme:e,tone:t})=>({display:`inline-flex`,alignItems:`center`,gap:2,fontSize:e.typography.body2.fontSize,fontWeight:700,fontVariantNumeric:`tabular-nums`,whiteSpace:`nowrap`,color:t===`up`?e.palette.success.main:t===`down`?e.palette.error.main:e.palette.text.secondary})),Tn=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,color:e.palette.text.secondary,textAlign:`right`,paddingRight:e.spacing(.75)})),En=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,color:e.palette.text.secondary,fontStyle:`italic`,flex:1,display:`flex`,alignItems:`center`,justifyContent:`center`,textAlign:`center`,minHeight:e.spacing(8)})),Dn=({impacts:e,timeRange:t,aggregationMode:n})=>{let[r,i]=(0,I.useState)(null),a=e.slice(0,hn),s=e.length-a.length,c=`±${K(U[t])}`;return(0,B.jsxs)(_n,{children:[(0,B.jsxs)(vn,{children:[(0,B.jsx)(yn,{children:`Top movers`}),(0,B.jsx)(o,{arrow:!0,placement:`top`,title:`Goal change in the ${c} window before vs. after each flag's most significant change`,children:(0,B.jsx)(bn,{children:c})})]}),a.length===0?(0,B.jsx)(En,{children:`No measurable flag changes in this window.`}):(0,B.jsxs)(xn,{children:[a.map(e=>{let t=gn[e.tone];return(0,B.jsxs)(Sn,{type:`button`,onClick:()=>i(e),"aria-label":`${e.featureName} ${L(e.deltaPct)}, view impact details`,children:[(0,B.jsx)(Cn,{title:e.featureName,children:e.featureName}),(0,B.jsxs)(wn,{tone:e.tone,children:[(0,B.jsx)(t,{sx:{fontSize:14}}),L(e.deltaPct)]})]},e.featureName)}),s>0?(0,B.jsxs)(Tn,{children:[`+`,s,` more`]}):null]}),(0,B.jsx)(mn,{impact:r,aggregationMode:n,onClose:()=>i(null)})]})},On=p((0,B.jsx)(`path`,{d:`m14.06 9.02.92.92L5.92 19H5v-.92zM17.66 3c-.25 0-.51.1-.7.29l-1.83 1.83 3.75 3.75 1.83-1.83c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.2-.2-.45-.29-.71-.29m-3.6 3.19L3 17.25V21h3.75L17.81 9.94z`}),`EditOutlined`),kn=p((0,B.jsx)(`path`,{d:`M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2m0 16H8V7h11z`}),`ContentCopyOutlined`),An=a(`div`)(({theme:e})=>({display:`flex`,alignItems:`center`,gap:e.spacing(2),borderBottom:`1px solid ${e.palette.divider}`})),jn=a(ve)({flex:1,minWidth:0,"& .MuiTabs-flexContainer":{gap:4}}),Mn=a(Se)(({theme:e})=>({textTransform:`none`,fontSize:e.fontSizes.smallBody,fontWeight:e.typography.fontWeightMedium,minHeight:e.spacing(5.5),padding:e.spacing(.5,1,.5,2),"& .tab-actions":{opacity:.4,marginLeft:e.spacing(.5)},"&:hover .tab-actions, &.Mui-selected .tab-actions":{opacity:1}})),Nn=a(v)({display:`flex`,alignItems:`center`,gap:4}),Pn=a(y)(({theme:e})=>({textTransform:`none`,whiteSpace:`nowrap`,flexShrink:0,marginLeft:e.spacing(1),marginBottom:e.spacing(.5)})),Fn=({views:e,activeViewId:t,onSelect:n,onCreate:r,onEdit:i,onDuplicate:a,onDelete:o})=>{let[s,u]=(0,I.useState)(null),[d,f]=(0,I.useState)(null),p=(e,t)=>{e.stopPropagation(),u(e.currentTarget),f(t)},m=()=>{u(null),f(null)},g=e.find(e=>e.id===d)??null;return(0,B.jsxs)(An,{children:[(0,B.jsx)(jn,{value:t??!1,onChange:(e,t)=>n(t),variant:`scrollable`,scrollButtons:`auto`,children:e.map(e=>(0,B.jsx)(Mn,{value:e.id,label:(0,B.jsxs)(Nn,{children:[(0,B.jsx)(`span`,{children:e.title}),(0,B.jsx)(h,{component:`span`,className:`tab-actions`,size:`medium`,"aria-label":`${e.title} actions`,onClick:t=>p(t,e.id),children:(0,B.jsx)(je,{})})]})},e.id))}),(0,B.jsx)(Pn,{variant:`outlined`,startIcon:(0,B.jsx)(j,{}),onClick:r,children:`New view`}),(0,B.jsxs)(c,{anchorEl:s,open:!!s,onClose:m,children:[(0,B.jsxs)(l,{onClick:()=>{g&&i(g),m()},children:[(0,B.jsx)(k,{children:(0,B.jsx)(On,{fontSize:`small`})}),(0,B.jsx)(T,{children:`Edit`})]}),(0,B.jsxs)(l,{onClick:()=>{g&&a(g),m()},children:[(0,B.jsx)(k,{children:(0,B.jsx)(kn,{fontSize:`small`})}),(0,B.jsx)(T,{children:`Duplicate`})]}),(0,B.jsxs)(l,{onClick:()=>{g&&o(g),m()},children:[(0,B.jsx)(k,{children:(0,B.jsx)(Ce,{fontSize:`small`})}),(0,B.jsx)(T,{children:`Delete`})]})]})]})},In=`50`,Ln=({option:e})=>(0,B.jsxs)(v,{sx:{display:`flex`,flexDirection:`column`},children:[(0,B.jsx)(_,{variant:`body2`,children:e.name}),e.project?(0,B.jsx)(_,{variant:`caption`,sx:{color:`text.secondary`},children:e.project}):null]}),Rn=({value:e,onChange:t,disabled:n})=>{let[r,i]=(0,I.useState)(``),[a,o]=(0,I.useState)(``),[c,l]=(0,I.useState)(!1),f=(0,I.useMemo)(()=>d(e=>{o(e)},250),[]),p=(0,I.useCallback)(({children:e,...t})=>(0,B.jsxs)(m,{...t,children:[(0,B.jsx)(b,{sx:{px:2,py:1},onMouseDown:e=>e.preventDefault(),control:(0,B.jsx)(Te,{size:`small`,checked:c,onChange:(e,t)=>l(t)}),label:(0,B.jsx)(_,{variant:`body2`,children:`Search archived features`})}),(0,B.jsx)(te,{}),e]}),[c]),{features:h,loading:g}=E({query:a||void 0,limit:In,archived:c?`IS:true`:void 0}),y=h.map(({name:e,project:t})=>({name:e,project:t}));return(0,B.jsx)(s,{multiple:!0,disableCloseOnSelect:!0,disabled:n,loading:g,options:y,value:e.map(e=>y.find(t=>t.name===e)??{name:e,project:``}),inputValue:r,slots:{paper:p},onInputChange:(e,t,n)=>{n===`input`&&(i(t),f(t))},onChange:(e,n)=>{t(n.map(e=>e.name))},isOptionEqualToValue:(e,t)=>e.name===t.name,getOptionLabel:e=>e.name,renderOption:(e,t)=>(0,I.createElement)(v,{component:`li`,...e,key:t.name},(0,B.jsx)(Ln,{option:t})),renderInput:t=>(0,B.jsx)(u,{...t,label:`Features to follow`,placeholder:e.length===0?`Search for features…`:`Add another feature…`,size:`small`,variant:`outlined`,helperText:`Toggle events for these features will be drawn over the chart.`})})},zn={hour:`Last hour`,day:`Last 24 hours`,week:`Last 7 days`,month:`Last 30 days`,threeMonths:`Last 3 months`,sixMonths:`Last 6 months`},Bn=Object.entries(zn).map(([e,t])=>({key:e,label:t})),X=`production`,Vn=`month`,Hn=`count`,Z=a(`div`)(({theme:e})=>({display:`flex`,flexDirection:`column`,gap:e.spacing(.5),flex:1,minWidth:220})),Un=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallBody,fontWeight:e.typography.fontWeightBold,color:e.palette.text.primary})),Q=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,color:e.palette.text.secondary})),Wn=a(`div`)(({theme:e})=>({display:`flex`,alignItems:`center`,gap:e.spacing(2),padding:e.spacing(2,2.5),borderRadius:e.shape.borderRadius,border:`1px solid ${e.palette.divider}`,backgroundColor:e.palette.background.elevation1})),Gn=a(`div`)(({theme:e})=>({flex:1,minWidth:0,display:`flex`,flexDirection:`column`,gap:e.spacing(.5)})),Kn=a(u)(({theme:e})=>({maxWidth:e.spacing(30)})),qn=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,color:e.palette.text.secondary,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`})),Jn=[{key:`count`,label:`Count`},{key:`rps`,label:`Rate per second`},{key:`sum`,label:`Sum`},{key:`avg`,label:`Average`},{key:`p50`,label:`50th percentile`},{key:`p95`,label:`95th percentile`},{key:`p99`,label:`99th percentile`}],Yn=(e,t)=>{let n=C(e.name);return{id:O(),metricName:e.name,displayName:e.displayName||e.name,aggregationMode:pe(n),labelSelectors:{},source:e.source,title:void 0,yAxisMin:`auto`,timeRange:t}},Xn=e=>({name:e.metricName,displayName:e.displayName,help:``,source:e.source===`external`?`external`:`internal`}),Zn=e=>{let t=C(e);return t===`unknown`?`Metric type could not be inferred.`:`${t.charAt(0).toUpperCase()}${t.slice(1)} metric`},Qn=({option:e})=>(0,B.jsxs)(v,{sx:{display:`flex`,flexDirection:`column`},children:[(0,B.jsx)(_,{variant:`body2`,children:e.displayName||e.name}),e.help?(0,B.jsx)(_,{variant:`caption`,sx:{color:`text.secondary`},children:e.help}):null]}),$n=({metric:e,onSelectGoal:t,onRename:n,onRemove:r})=>{let i=e.displayName||e.metricName;return(0,B.jsxs)(Wn,{children:[(0,B.jsx)(b,{sx:{mr:0},"aria-label":`Mark ${i} as the goal`,control:(0,B.jsx)(f,{size:`small`,checked:!!e.goal,onChange:()=>t(e.id)}),label:(0,B.jsx)(_,{variant:`caption`,sx:{color:`text.secondary`},children:`Goal`}),labelPlacement:`bottom`}),(0,B.jsxs)(Gn,{children:[(0,B.jsx)(Kn,{label:`Display name`,value:e.displayName??``,onChange:t=>n(e.id,t.target.value),placeholder:e.metricName,size:`small`,variant:`outlined`,fullWidth:!0}),(0,B.jsxs)(qn,{title:e.metricName,children:[e.metricName,` · `,Zn(e.metricName)]})]}),(0,B.jsx)(o,{title:`Remove metric`,arrow:!0,children:(0,B.jsx)(h,{size:`medium`,"aria-label":`Remove ${i}`,onClick:()=>r(e.id),children:(0,B.jsx)(ge,{})})})]})},er=e=>(e.find(e=>e.goal)??e[0])?.aggregationMode??Hn,tr=e=>e?{title:e.title,featureNames:e.featureNames,metrics:e.metrics,timeRange:e.timeRange,aggregationMode:er(e.metrics),environment:e.environment,showTopMovers:e.showTopMovers??!1}:{title:``,featureNames:[],metrics:[],timeRange:Vn,aggregationMode:Hn,environment:X,showTopMovers:!1},$=(e,t)=>e.map(e=>({...e,...t})),nr=(e,t)=>e.metrics.length===0&&t.length>0?pe(C(t[0].name)):e.aggregationMode,rr=(e,t)=>{let n=new Map(e.metrics.map(e=>[e.metricName,e]));return t.map(t=>n.get(t.name)??Yn(t,e.timeRange))},ir=(e,t)=>{switch(t.type){case`reset`:return t.form;case`setTitle`:return{...e,title:t.title};case`setFeatureNames`:return{...e,featureNames:t.featureNames};case`setEnvironment`:return{...e,environment:t.environment};case`setShowTopMovers`:return{...e,showTopMovers:t.showTopMovers};case`setTimeRange`:return{...e,timeRange:t.timeRange,metrics:$(e.metrics,{timeRange:t.timeRange})};case`setAggregation`:return{...e,aggregationMode:t.aggregationMode,metrics:$(e.metrics,{aggregationMode:t.aggregationMode})};case`setMetrics`:{let n=nr(e,t.options),r=rr(e,t.options);return{...e,aggregationMode:n,metrics:$(r,{aggregationMode:n})}}case`setGoal`:return{...e,metrics:e.metrics.map(e=>({...e,goal:e.id===t.id}))};case`renameMetric`:return{...e,metrics:e.metrics.map(e=>e.id===t.id?{...e,displayName:t.displayName}:e)};case`removeMetric`:return{...e,metrics:e.metrics.filter(e=>e.id!==t.id)}}},ar=({open:e,initialView:t,onClose:n,onSave:r})=>{let{metricOptions:i,loading:a}=ye(),{environments:o,loading:c}=oe(),[l,d]=(0,I.useReducer)(ir,t,tr);(0,I.useEffect)(()=>{e&&d({type:`reset`,form:tr(t)})},[e,t]);let f=l.metrics.map(e=>i.find(t=>t.name===e.metricName)??Xn(e)),p=o.length>0?o.map(e=>({key:e.name,label:e.name})):[{key:X,label:X}],m=l.title.trim().length>0&&l.metrics.length>0;return(0,B.jsx)(_e,{open:e,onClose:n,onClick:()=>{m&&r({title:l.title.trim(),featureNames:l.featureNames,metrics:l.metrics,timeRange:l.timeRange,environment:l.environment,showTopMovers:l.showTopMovers})},title:t?`Edit view`:`Create a new view`,primaryButtonText:t?`Save changes`:`Create view`,secondaryButtonText:`Cancel`,disabledPrimaryButton:!m,maxWidth:`md`,fullWidth:!0,children:(0,B.jsxs)(v,{sx:{display:`flex`,flexDirection:`column`,gap:3,pt:1},children:[(0,B.jsx)(u,{label:`View title`,value:l.title,onChange:e=>d({type:`setTitle`,title:e.target.value}),placeholder:`e.g. Checkout funnel`,size:`small`,autoFocus:!0,required:!0}),(0,B.jsxs)(Z,{children:[(0,B.jsx)(Un,{children:`Metrics`}),(0,B.jsx)(s,{multiple:!0,disableCloseOnSelect:!0,loading:a,options:i,value:f,onChange:(e,t)=>d({type:`setMetrics`,options:t}),isOptionEqualToValue:(e,t)=>e.name===t.name,getOptionLabel:e=>e.displayName||e.name,groupBy:e=>e.source===`external`?`External metrics`:`Internal metrics`,renderOption:(e,t)=>(0,I.createElement)(v,{component:`li`,...e,key:`${t.source}__${t.name}`},(0,B.jsx)(Qn,{option:t})),renderInput:e=>(0,B.jsx)(u,{...e,placeholder:l.metrics.length===0?`Pick one or more metrics…`:`Add another metric…`,size:`small`,variant:`outlined`})}),(0,B.jsx)(Q,{children:`All selected metrics are drawn together on a single chart.`}),l.metrics.length>0?(0,B.jsx)(v,{sx:{display:`flex`,flexDirection:`column`,gap:1,mt:.5},children:l.metrics.map(e=>(0,B.jsx)($n,{metric:e,onSelectGoal:e=>d({type:`setGoal`,id:e}),onRename:(e,t)=>d({type:`renameMetric`,id:e,displayName:t}),onRemove:e=>d({type:`removeMetric`,id:e})},e.id))}):null]}),(0,B.jsx)(Rn,{value:l.featureNames,onChange:e=>d({type:`setFeatureNames`,featureNames:e})}),(0,B.jsxs)(v,{sx:{display:`flex`,gap:2,flexWrap:`wrap`},children:[(0,B.jsxs)(Z,{children:[(0,B.jsx)(D,{id:`view-aggregation`,labelId:`view-aggregation-label`,label:`Aggregation`,value:l.aggregationMode,options:Jn,onChange:e=>d({type:`setAggregation`,aggregationMode:e})}),(0,B.jsx)(Q,{children:`Applied to all metrics in this view.`})]}),(0,B.jsx)(Z,{children:(0,B.jsx)(D,{id:`view-time-range`,labelId:`view-time-range-label`,label:`Time range`,value:l.timeRange,options:Bn,onChange:e=>d({type:`setTimeRange`,timeRange:e})})}),(0,B.jsxs)(Z,{children:[(0,B.jsx)(D,{id:`view-environment`,labelId:`view-environment-label`,label:`Environment`,value:l.environment,options:p,disabled:c,onChange:e=>d({type:`setEnvironment`,environment:e})}),(0,B.jsx)(Q,{children:`Toggle events from this environment are drawn over the chart.`})]})]}),(0,B.jsxs)(Z,{children:[(0,B.jsx)(b,{control:(0,B.jsx)(Me,{checked:l.showTopMovers,onChange:e=>d({type:`setShowTopMovers`,showTopMovers:e.target.checked})}),label:`Show top movers`}),(0,B.jsx)(Q,{children:`Ranks the flags whose toggle had the biggest effect on the goal metric, shown beside the chart.`})]})]})})},or=`https://docs.getunleash.io/reference/impact-metrics`,sr=a(v)(({theme:e})=>({display:`flex`,flexDirection:`column`,alignItems:`center`,padding:e.spacing(6,4)})),cr=a(v)(({theme:e})=>({marginBottom:e.spacing(3)})),lr=a(v)(({theme:e})=>({textAlign:`center`,maxWidth:520,marginBottom:e.spacing(3)})),ur=a(v)(({theme:e})=>({display:`flex`,gap:e.spacing(2),alignItems:`center`,marginBottom:e.spacing(4)})),dr=a(g)(({theme:e})=>({maxWidth:520,backgroundColor:e.palette.info.light,marginTop:e.spacing(4),color:e.palette.info.dark,"& .MuiAlert-icon":{color:e.palette.info.main}})),fr=({onCreate:e})=>(0,B.jsx)(de,{header:(0,B.jsx)(ue,{title:`Impact views`}),children:(0,B.jsxs)(sr,{children:[(0,B.jsx)(cr,{children:(0,B.jsx)(ze,{})}),(0,B.jsxs)(lr,{children:[(0,B.jsx)(_,{variant:`h3`,component:`h2`,sx:{mb:1.5},children:`Start telling a story with your metrics`}),(0,B.jsx)(_,{sx:{color:`text.secondary`},children:`A view combines the features you want to follow with the impact metrics that matter to you. Toggle events for each feature are drawn over the chart so you can see exactly when a rollout moved the needle.`})]}),(0,B.jsxs)(ur,{children:[(0,B.jsx)(y,{variant:`text`,href:or,target:`_blank`,rel:`noopener noreferrer`,children:`Read the docs`}),(0,B.jsx)(y,{variant:`contained`,startIcon:(0,B.jsx)(j,{}),onClick:e,children:`Create your first view`})]}),(0,B.jsxs)(dr,{severity:`info`,icon:(0,B.jsx)(Ae,{}),children:[(0,B.jsx)(`strong`,{children:`Tip:`}),` Views are stored locally in your browser — only you can see them in this iteration.`]})]})}),pr=new Set([`count`,`sum`]),mr=e=>{for(let[,t]of e)if(Number.isFinite(t))return t;return 0},hr=e=>{for(let t=e.length-1;t>=0;--t){let n=e[t][1];if(Number.isFinite(n))return n}return 0},gr=(e,t,n)=>{if(pr.has(t))return{current:n,mode:`cumulative`,deltaAbs:null,deltaPct:null};if(!e||e.data.length===0)return{current:0,mode:`latest`,deltaAbs:0,deltaPct:null};let r=hr(e.data),i=mr(e.data),a=r-i;return{current:r,mode:`latest`,deltaAbs:a,deltaPct:i===0?null:a/i*100}},_r=e=>{let t=e.join(`,`),{features:n,loading:r}=E({query:t,limit:`100`}),{features:i,loading:a}=E({query:t,limit:`100`,archived:`IS:true`});return{features:(0,I.useMemo)(()=>{let t=new Set(e),r=(e,n)=>e.filter(e=>t.has(e.name)).map(e=>({name:e.name,project:e.project,type:e.type,lifecycleStage:e.lifecycle?.stage??n}));return[...r(n,null),...r(i,`archived`)]},[n,i,e]),loading:r||a}},vr=`IS_ANY_OF:feature-environment-enabled,feature-environment-disabled`,yr=(e,t)=>{let{events:n,loading:r}=be({feature:`IS_ANY_OF:${e.join(`,`)}`,type:vr,environment:`IS:${t}`,limit:`1000`},{refreshInterval:3e4});return{featureEvents:(0,I.useMemo)(()=>n.map(e=>({id:e.id,timestamp:new Date(e.createdAt).getTime(),type:e.type,label:e.label??e.type,createdBy:e.createdBy,featureName:e.featureName??``,environment:t})),[n,t]),loading:r}},br=e=>{let{stepSeries:t,stepTotals:n,start:r,end:i,loading:a}=Re(e.metrics),{features:o,loading:s}=_r(e.featureNames),{featureEvents:c,loading:l}=yr(e.featureNames,e.environment),u=e.metrics.findIndex(e=>e.goal),d=u>=0?e.metrics[u]:void 0,f=u>=0?t[u]:void 0,p=d?gr(f,d.aggregationMode,n[u]?.value??0):void 0,m=d?Lt({events:c,goalSeries:f,aggregationMode:d.aggregationMode,visibleWindow:Ne(r,i),timeRange:e.timeRange}):[];return{goalSummary:p,goalSeries:f,goalLabel:d?.title||d?.displayName||e.title,flagImpacts:m,stepSeries:t,stepTotals:n,start:r,end:i,featureEvents:c,resolvedFeatures:o,loading:a||s||l}},xr=`impact-metric-views:list`,Sr=`impact-metric-views:active-id`,Cr=[],wr=()=>{let[e,t]=M(xr,Cr),[n,r]=M(Sr,``),i=e.some(e=>e.id===n),a=n&&i?n:e[0]?.id??null;return{views:e,activeView:e.find(e=>e.id===a)??null,activeViewId:a,setActiveViewId:(0,I.useCallback)(e=>{r(e??``)},[r]),addView:(0,I.useCallback)(e=>{let n=Date.now(),i={...e,id:O(),createdAt:n,updatedAt:n};return t(e=>[...e,i]),r(i.id),i},[t,r]),updateView:(0,I.useCallback)((e,n)=>{t(t=>t.map(t=>t.id===e?{...t,...n,updatedAt:Date.now()}:t))},[t]),deleteView:(0,I.useCallback)(e=>{t(t=>t.filter(t=>t.id!==e)),n===e&&r(``)},[t,n,r]),duplicateView:(0,I.useCallback)(n=>{let i=e.find(e=>e.id===n);if(!i)return null;let a=Date.now(),o={...i,id:O(),title:`${i.title} (copy)`,createdAt:a,updatedAt:a};return t(e=>[...e,o]),r(o.id),o},[e,t,r])}},Tr=({view:e})=>{let t=br(e),n=zn[e.timeRange],r=e.metrics.find(e=>e.goal)?.aggregationMode??`avg`;return(0,B.jsxs)(v,{sx:{display:`flex`,flexDirection:`column`,gap:3},children:[(0,B.jsx)(ht,{title:t.goalLabel,subtitle:`Goal · ${n}`,timeRange:e.timeRange,aggregationMode:e.metrics[0]?.aggregationMode,stepSeries:t.stepSeries,stepTotals:t.stepTotals,featureEvents:t.featureEvents,start:t.start,end:t.end,loading:t.loading,chartHeightSpacing:{base:48,lg:40,sm:32},totalsLabel:`Signals`,totalsHeaderSlot:t.goalSummary?(0,B.jsx)(et,{goalMetricLabel:t.goalLabel,summary:t.goalSummary,series:t.goalSeries,timeLabel:n}):null,totalsMiddleSlot:e.showTopMovers?(0,B.jsx)(Dn,{impacts:t.flagImpacts,timeRange:e.timeRange,aggregationMode:r}):void 0}),(0,B.jsx)(Ft,{features:t.resolvedFeatures})]})},Er=()=>{let{views:e,activeView:t,activeViewId:n,setActiveViewId:r,addView:i,updateView:a,deleteView:o,duplicateView:s}=wr(),[c,l]=(0,I.useState)({type:`closed`}),[u,d]=(0,I.useState)(null),f=()=>l({type:`create`}),p=e=>l({type:`edit`,view:e}),m=()=>l({type:`closed`});return(0,B.jsxs)(v,{sx:{pt:3,mt:-4},children:[e.length===0?(0,B.jsx)(fr,{onCreate:f}):(0,B.jsxs)(v,{sx:{display:`flex`,flexDirection:`column`,gap:3},children:[(0,B.jsx)(ue,{title:`Impact views`,actions:(0,B.jsx)(ke,{color:`info`,children:`Internal beta`})}),(0,B.jsx)(Fn,{views:e,activeViewId:n,onSelect:r,onCreate:f,onEdit:p,onDuplicate:e=>s(e.id),onDelete:d}),t?(0,B.jsx)(Tr,{view:t}):null]}),(0,B.jsx)(ar,{open:c.type!==`closed`,initialView:c.type===`edit`?c.view:null,onClose:m,onSave:e=>{c.type===`edit`?a(c.view.id,e):i(e),m()}}),(0,B.jsx)(_e,{open:u!==null,title:u?`Delete "${u.title}"?`:`Delete view?`,primaryButtonText:`Delete`,secondaryButtonText:`Cancel`,onClick:()=>{u&&o(u.id),d(null)},onClose:()=>d(null)})]})};export{Er as ImpactViewsPage};
|