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.
Files changed (488) hide show
  1. package/dist/lib/addons/feature-event-formatter-md.d.ts.map +1 -1
  2. package/dist/lib/addons/feature-event-formatter-md.js +5 -3
  3. package/dist/lib/addons/feature-event-formatter-md.js.map +1 -1
  4. package/dist/lib/addons/feature-event-formatter-md.test.js +3 -1
  5. package/dist/lib/addons/feature-event-formatter-md.test.js.map +1 -1
  6. package/dist/lib/addons/webhook.d.ts.map +1 -1
  7. package/dist/lib/addons/webhook.js +28 -2
  8. package/dist/lib/addons/webhook.js.map +1 -1
  9. package/dist/lib/addons/webhook.test.js +72 -0
  10. package/dist/lib/addons/webhook.test.js.map +1 -1
  11. package/dist/lib/app.d.ts.map +1 -1
  12. package/dist/lib/app.js +2 -0
  13. package/dist/lib/app.js.map +1 -1
  14. package/dist/lib/create-config.d.ts.map +1 -1
  15. package/dist/lib/create-config.js +1 -0
  16. package/dist/lib/create-config.js.map +1 -1
  17. package/dist/lib/features/context/context-field-store.d.ts +1 -1
  18. package/dist/lib/features/context/context-field-store.d.ts.map +1 -1
  19. package/dist/lib/features/context/context-field-store.js +1 -5
  20. package/dist/lib/features/context/context-field-store.js.map +1 -1
  21. package/dist/lib/features/context/context-service.d.ts +5 -4
  22. package/dist/lib/features/context/context-service.d.ts.map +1 -1
  23. package/dist/lib/features/context/context-service.js +20 -27
  24. package/dist/lib/features/context/context-service.js.map +1 -1
  25. package/dist/lib/features/context/context-service.test.d.ts +2 -0
  26. package/dist/lib/features/context/context-service.test.d.ts.map +1 -0
  27. package/dist/lib/features/context/context-service.test.js +24 -0
  28. package/dist/lib/features/context/context-service.test.js.map +1 -0
  29. package/dist/lib/features/context/context.d.ts +1 -0
  30. package/dist/lib/features/context/context.d.ts.map +1 -1
  31. package/dist/lib/features/context/context.js +22 -10
  32. package/dist/lib/features/context/context.js.map +1 -1
  33. package/dist/lib/features/context/context.test.js +15 -1
  34. package/dist/lib/features/context/context.test.js.map +1 -1
  35. package/dist/lib/features/context/createContextService.d.ts +4 -1
  36. package/dist/lib/features/context/createContextService.d.ts.map +1 -1
  37. package/dist/lib/features/context/createContextService.js +2 -1
  38. package/dist/lib/features/context/createContextService.js.map +1 -1
  39. package/dist/lib/features/context/fake-context-field-store.d.ts +1 -1
  40. package/dist/lib/features/context/fake-context-field-store.d.ts.map +1 -1
  41. package/dist/lib/features/context/fake-context-field-store.js +1 -6
  42. package/dist/lib/features/context/fake-context-field-store.js.map +1 -1
  43. package/dist/lib/features/export-import-toggles/createExportImportService.js +1 -1
  44. package/dist/lib/features/export-import-toggles/createExportImportService.js.map +1 -1
  45. package/dist/lib/features/feature-toggle/converters/feature-toggle-row-converter.d.ts +1 -1
  46. package/dist/lib/features/feature-toggle/fakes/fake-feature-strategies-store.d.ts +2 -1
  47. package/dist/lib/features/feature-toggle/fakes/fake-feature-strategies-store.d.ts.map +1 -1
  48. package/dist/lib/features/feature-toggle/fakes/fake-feature-strategies-store.js +5 -0
  49. package/dist/lib/features/feature-toggle/fakes/fake-feature-strategies-store.js.map +1 -1
  50. package/dist/lib/features/feature-toggle/feature-toggle-controller.d.ts +1 -1
  51. package/dist/lib/features/feature-toggle/feature-toggle-controller.d.ts.map +1 -1
  52. package/dist/lib/features/feature-toggle/feature-toggle-controller.js +22 -2
  53. package/dist/lib/features/feature-toggle/feature-toggle-controller.js.map +1 -1
  54. package/dist/lib/features/feature-toggle/feature-toggle-service.d.ts +3 -2
  55. package/dist/lib/features/feature-toggle/feature-toggle-service.d.ts.map +1 -1
  56. package/dist/lib/features/feature-toggle/feature-toggle-service.js +11 -4
  57. package/dist/lib/features/feature-toggle/feature-toggle-service.js.map +1 -1
  58. package/dist/lib/features/feature-toggle/feature-toggle-strategies-store.d.ts +2 -0
  59. package/dist/lib/features/feature-toggle/feature-toggle-strategies-store.d.ts.map +1 -1
  60. package/dist/lib/features/feature-toggle/feature-toggle-strategies-store.js +7 -0
  61. package/dist/lib/features/feature-toggle/feature-toggle-strategies-store.js.map +1 -1
  62. package/dist/lib/features/feature-toggle/tests/feature-toggles.e2e.test.js +4 -0
  63. package/dist/lib/features/feature-toggle/tests/feature-toggles.e2e.test.js.map +1 -1
  64. package/dist/lib/features/feature-toggle/types/feature-toggle-strategies-store-type.d.ts +6 -0
  65. package/dist/lib/features/feature-toggle/types/feature-toggle-strategies-store-type.d.ts.map +1 -1
  66. package/dist/lib/features/playground/feature-evaluator/constraint.d.ts +2 -0
  67. package/dist/lib/features/playground/feature-evaluator/constraint.d.ts.map +1 -1
  68. package/dist/lib/features/playground/feature-evaluator/constraint.js +11 -1
  69. package/dist/lib/features/playground/feature-evaluator/constraint.js.map +1 -1
  70. package/dist/lib/features/playground/playground.test.js +2 -3
  71. package/dist/lib/features/playground/playground.test.js.map +1 -1
  72. package/dist/lib/features/release-plans/release-plan-template-store.d.ts +4 -0
  73. package/dist/lib/features/release-plans/release-plan-template-store.d.ts.map +1 -1
  74. package/dist/lib/features/release-plans/release-plan-template-store.js +25 -2
  75. package/dist/lib/features/release-plans/release-plan-template-store.js.map +1 -1
  76. package/dist/lib/features/release-plans/release-plan-template-store.test.js +75 -16
  77. package/dist/lib/features/release-plans/release-plan-template-store.test.js.map +1 -1
  78. package/dist/lib/features/release-plans/release-plan-template.d.ts +1 -0
  79. package/dist/lib/features/release-plans/release-plan-template.d.ts.map +1 -1
  80. package/dist/lib/features/scheduler/scheduler-service.test.js +1 -0
  81. package/dist/lib/features/scheduler/scheduler-service.test.js.map +1 -1
  82. package/dist/lib/features/unique-connection/unique-connection-store.e2e.test.js +3 -0
  83. package/dist/lib/features/unique-connection/unique-connection-store.e2e.test.js.map +1 -1
  84. package/dist/lib/middleware/rbac-middleware.d.ts.map +1 -1
  85. package/dist/lib/middleware/rbac-middleware.js +3 -4
  86. package/dist/lib/middleware/rbac-middleware.js.map +1 -1
  87. package/dist/lib/middleware/rbac-middleware.test.js +62 -24
  88. package/dist/lib/middleware/rbac-middleware.test.js.map +1 -1
  89. package/dist/lib/middleware/session-context.d.ts +20 -0
  90. package/dist/lib/middleware/session-context.d.ts.map +1 -0
  91. package/dist/lib/middleware/session-context.js +38 -0
  92. package/dist/lib/middleware/session-context.js.map +1 -0
  93. package/dist/lib/openapi/spec/admin-segment-schema.d.ts +1 -1
  94. package/dist/lib/openapi/spec/advanced-playground-environment-feature-schema.d.ts +4 -4
  95. package/dist/lib/openapi/spec/advanced-playground-feature-schema.d.ts +8 -8
  96. package/dist/lib/openapi/spec/advanced-playground-response-schema.d.ts +17 -17
  97. package/dist/lib/openapi/spec/client-feature-schema.d.ts +2 -2
  98. package/dist/lib/openapi/spec/client-features-delta-schema.d.ts +5 -5
  99. package/dist/lib/openapi/spec/client-features-schema.d.ts +5 -5
  100. package/dist/lib/openapi/spec/client-segment-schema.d.ts +1 -1
  101. package/dist/lib/openapi/spec/constraint-schema.d.ts +2 -2
  102. package/dist/lib/openapi/spec/create-feature-strategy-schema.d.ts +1 -1
  103. package/dist/lib/openapi/spec/environment-project-schema.d.ts +2 -2
  104. package/dist/lib/openapi/spec/environments-project-schema.d.ts +4 -4
  105. package/dist/lib/openapi/spec/export-result-schema.d.ts +68 -68
  106. package/dist/lib/openapi/spec/feature-environment-schema.d.ts +17 -17
  107. package/dist/lib/openapi/spec/feature-schema.d.ts +34 -34
  108. package/dist/lib/openapi/spec/feature-search-environment-schema.d.ts +34 -34
  109. package/dist/lib/openapi/spec/feature-search-response-schema.d.ts +68 -68
  110. package/dist/lib/openapi/spec/feature-strategy-schema.d.ts +1 -1
  111. package/dist/lib/openapi/spec/health-overview-schema.d.ts +69 -69
  112. package/dist/lib/openapi/spec/health-report-schema.d.ts +69 -69
  113. package/dist/lib/openapi/spec/playground-constraint-schema.d.ts +1 -1
  114. package/dist/lib/openapi/spec/playground-feature-schema.arbitraries.d.ts +4 -0
  115. package/dist/lib/openapi/spec/playground-feature-schema.arbitraries.d.ts.map +1 -0
  116. package/dist/lib/openapi/spec/playground-feature-schema.arbitraries.js +91 -0
  117. package/dist/lib/openapi/spec/playground-feature-schema.arbitraries.js.map +1 -0
  118. package/dist/lib/openapi/spec/playground-feature-schema.d.ts +4 -4
  119. package/dist/lib/openapi/spec/playground-feature-schema.test.d.ts +1 -3
  120. package/dist/lib/openapi/spec/playground-feature-schema.test.d.ts.map +1 -1
  121. package/dist/lib/openapi/spec/playground-feature-schema.test.js +1 -89
  122. package/dist/lib/openapi/spec/playground-feature-schema.test.js.map +1 -1
  123. package/dist/lib/openapi/spec/playground-request-schema.arbitraries.d.ts +4 -0
  124. package/dist/lib/openapi/spec/playground-request-schema.arbitraries.d.ts.map +1 -0
  125. package/dist/lib/openapi/spec/playground-request-schema.arbitraries.js +9 -0
  126. package/dist/lib/openapi/spec/playground-request-schema.arbitraries.js.map +1 -0
  127. package/dist/lib/openapi/spec/playground-request-schema.test.d.ts +1 -3
  128. package/dist/lib/openapi/spec/playground-request-schema.test.d.ts.map +1 -1
  129. package/dist/lib/openapi/spec/playground-request-schema.test.js +1 -8
  130. package/dist/lib/openapi/spec/playground-request-schema.test.js.map +1 -1
  131. package/dist/lib/openapi/spec/playground-response-schema.d.ts +9 -9
  132. package/dist/lib/openapi/spec/playground-response-schema.test.js +2 -3
  133. package/dist/lib/openapi/spec/playground-response-schema.test.js.map +1 -1
  134. package/dist/lib/openapi/spec/playground-segment-schema.d.ts +1 -1
  135. package/dist/lib/openapi/spec/playground-strategy-schema.d.ts +2 -2
  136. package/dist/lib/openapi/spec/profile-schema.d.ts +34 -34
  137. package/dist/lib/openapi/spec/project-environment-schema.d.ts +1 -1
  138. package/dist/lib/openapi/spec/project-overview-schema.d.ts +69 -69
  139. package/dist/lib/openapi/spec/release-plan-milestone-schema.d.ts +4 -4
  140. package/dist/lib/openapi/spec/release-plan-milestone-strategy-schema.d.ts +2 -2
  141. package/dist/lib/openapi/spec/release-plan-schema.d.ts +8 -8
  142. package/dist/lib/openapi/spec/release-plan-template-schema.d.ts +14 -8
  143. package/dist/lib/openapi/spec/release-plan-template-schema.d.ts.map +1 -1
  144. package/dist/lib/openapi/spec/release-plan-template-schema.js +6 -0
  145. package/dist/lib/openapi/spec/release-plan-template-schema.js.map +1 -1
  146. package/dist/lib/openapi/spec/release-plan-templates-schema.d.ts +22 -16
  147. package/dist/lib/openapi/spec/release-plan-templates-schema.d.ts.map +1 -1
  148. package/dist/lib/openapi/spec/release-plans-schema.d.ts +16 -16
  149. package/dist/lib/openapi/spec/sdk-context-schema.arbitraries.d.ts +4 -0
  150. package/dist/lib/openapi/spec/sdk-context-schema.arbitraries.d.ts.map +1 -0
  151. package/dist/lib/openapi/spec/sdk-context-schema.arbitraries.js +12 -0
  152. package/dist/lib/openapi/spec/sdk-context-schema.arbitraries.js.map +1 -0
  153. package/dist/lib/openapi/spec/sdk-context-schema.test.d.ts +1 -3
  154. package/dist/lib/openapi/spec/sdk-context-schema.test.d.ts.map +1 -1
  155. package/dist/lib/openapi/spec/sdk-context-schema.test.js +1 -11
  156. package/dist/lib/openapi/spec/sdk-context-schema.test.js.map +1 -1
  157. package/dist/lib/openapi/spec/search-features-schema.d.ts +104 -104
  158. package/dist/lib/openapi/spec/segment-schema.d.ts +1 -1
  159. package/dist/lib/openapi/spec/segments-schema.d.ts +2 -2
  160. package/dist/lib/openapi/spec/ui-config-schema.d.ts +5 -0
  161. package/dist/lib/openapi/spec/ui-config-schema.d.ts.map +1 -1
  162. package/dist/lib/openapi/spec/ui-config-schema.js +5 -0
  163. package/dist/lib/openapi/spec/ui-config-schema.js.map +1 -1
  164. package/dist/lib/openapi/spec/update-feature-schema.d.ts +1 -1
  165. package/dist/lib/openapi/spec/update-feature-strategy-schema.d.ts +1 -1
  166. package/dist/lib/openapi/spec/upsert-segment-schema.d.ts +1 -1
  167. package/dist/lib/schema/feature-schema.test.js +1 -1
  168. package/dist/lib/schema/feature-schema.test.js.map +1 -1
  169. package/dist/lib/schema/html-input.d.ts +1 -1
  170. package/dist/lib/schema/html-input.d.ts.map +1 -1
  171. package/dist/lib/schema/html-input.js +5 -2
  172. package/dist/lib/schema/html-input.js.map +1 -1
  173. package/dist/lib/schema/html-input.test.js +1 -1
  174. package/dist/lib/schema/html-input.test.js.map +1 -1
  175. package/dist/lib/services/feature-tag-service.d.ts +1 -1
  176. package/dist/lib/services/feature-tag-service.d.ts.map +1 -1
  177. package/dist/lib/services/feature-tag-service.js +5 -1
  178. package/dist/lib/services/feature-tag-service.js.map +1 -1
  179. package/dist/lib/services/index.d.ts.map +1 -1
  180. package/dist/lib/services/index.js +1 -1
  181. package/dist/lib/services/index.js.map +1 -1
  182. package/dist/lib/services/project-schema.js +1 -1
  183. package/dist/lib/services/project-schema.js.map +1 -1
  184. package/dist/lib/types/events.d.ts +8 -0
  185. package/dist/lib/types/events.d.ts.map +1 -1
  186. package/dist/lib/types/events.js +4 -0
  187. package/dist/lib/types/events.js.map +1 -1
  188. package/dist/lib/types/experimental.d.ts +1 -1
  189. package/dist/lib/types/experimental.d.ts.map +1 -1
  190. package/dist/lib/types/experimental.js +6 -1
  191. package/dist/lib/types/experimental.js.map +1 -1
  192. package/dist/lib/types/option.d.ts +1 -0
  193. package/dist/lib/types/option.d.ts.map +1 -1
  194. package/dist/lib/types/permissions.d.ts +1 -0
  195. package/dist/lib/types/permissions.d.ts.map +1 -1
  196. package/dist/lib/types/permissions.js +2 -0
  197. package/dist/lib/types/permissions.js.map +1 -1
  198. package/dist/lib/types/stores.d.ts +1 -0
  199. package/dist/lib/types/stores.d.ts.map +1 -1
  200. package/dist/lib/types/stores.js.map +1 -1
  201. package/dist/lib/ui-config/ui-config-controller.d.ts +1 -2
  202. package/dist/lib/ui-config/ui-config-controller.d.ts.map +1 -1
  203. package/dist/lib/ui-config/ui-config-controller.js +3 -1
  204. package/dist/lib/ui-config/ui-config-controller.js.map +1 -1
  205. package/dist/lib/ui-config/ui-config-service.d.ts +3 -2
  206. package/dist/lib/ui-config/ui-config-service.d.ts.map +1 -1
  207. package/dist/lib/ui-config/ui-config-service.js +7 -1
  208. package/dist/lib/ui-config/ui-config-service.js.map +1 -1
  209. package/dist/lib/ui-config/ui-config.test.js +4 -0
  210. package/dist/lib/ui-config/ui-config.test.js.map +1 -1
  211. package/dist/lib/util/constants.d.ts +3 -1
  212. package/dist/lib/util/constants.d.ts.map +1 -1
  213. package/dist/lib/util/constants.js +11 -1
  214. package/dist/lib/util/constants.js.map +1 -1
  215. package/dist/mailtemplates/requested-cr-approval/requested-cr-approval.html.mustache +1 -1
  216. package/dist/migrations/20260706100000-add-project-column-to-release-plan-definitions.d.ts +3 -0
  217. package/dist/migrations/20260706100000-add-project-column-to-release-plan-definitions.d.ts.map +1 -0
  218. package/dist/migrations/20260706100000-add-project-column-to-release-plan-definitions.js +8 -0
  219. package/dist/migrations/20260706100000-add-project-column-to-release-plan-definitions.js.map +1 -0
  220. package/dist/migrations/20260708100000-add-project-release-template-permission.d.ts +3 -0
  221. package/dist/migrations/20260708100000-add-project-release-template-permission.d.ts.map +1 -0
  222. package/dist/migrations/20260708100000-add-project-release-template-permission.js +15 -0
  223. package/dist/migrations/20260708100000-add-project-release-template-permission.js.map +1 -0
  224. package/dist/server-dev.js +5 -1
  225. package/dist/server-dev.js.map +1 -1
  226. package/dist/test/arbitraries.d.ts +25 -0
  227. package/dist/test/arbitraries.d.ts.map +1 -0
  228. package/dist/test/arbitraries.js +143 -0
  229. package/dist/test/arbitraries.js.map +1 -0
  230. package/dist/test/arbitraries.test.d.ts +1 -24
  231. package/dist/test/arbitraries.test.d.ts.map +1 -1
  232. package/dist/test/arbitraries.test.js +1 -142
  233. package/dist/test/arbitraries.test.js.map +1 -1
  234. package/dist/test/e2e/api/admin/playground.e2e.test.js +2 -2
  235. package/dist/test/e2e/api/admin/playground.e2e.test.js.map +1 -1
  236. package/dist/test/e2e/services/playground-service.test.js +2 -2
  237. package/dist/test/e2e/services/playground-service.test.js.map +1 -1
  238. package/dist/test/fixtures/fake-segment-store.d.ts +1 -1
  239. package/dist/test/fixtures/fake-segment-store.d.ts.map +1 -1
  240. package/dist/test/fixtures/fake-segment-store.js +2 -2
  241. package/dist/test/fixtures/fake-segment-store.js.map +1 -1
  242. package/dist/test/prom-last-wins.d.ts +2 -0
  243. package/dist/test/prom-last-wins.d.ts.map +1 -0
  244. package/dist/test/prom-last-wins.js +25 -0
  245. package/dist/test/prom-last-wins.js.map +1 -0
  246. package/dist/test/reset-cross-file-state.d.ts +2 -0
  247. package/dist/test/reset-cross-file-state.d.ts.map +1 -0
  248. package/dist/test/reset-cross-file-state.js +57 -0
  249. package/dist/test/reset-cross-file-state.js.map +1 -0
  250. package/dist/test-setup.d.ts.map +1 -1
  251. package/dist/test-setup.js +4 -0
  252. package/dist/test-setup.js.map +1 -1
  253. package/frontend/build/index.html +1 -1
  254. package/frontend/build/static/AccordionSummary-KVRcLxLK.js +1 -0
  255. package/frontend/build/static/AdvancedPlayground-Cls80com.js +3 -0
  256. package/frontend/build/static/Alert-DQgOzmJF.js +1 -0
  257. package/frontend/build/static/Avatar-xU_puYmY.js +1 -0
  258. package/frontend/build/static/BackendConnections-CkI8tLcv.js +1 -0
  259. package/frontend/build/static/Box-rSzdGLLJ.js +1 -0
  260. package/frontend/build/static/Button-yGjgMTJI.js +1 -0
  261. package/frontend/build/static/Button.story-CBE27I2T.js +1 -0
  262. package/frontend/build/static/CircularProgress-CmGBJn6I.js +124 -0
  263. package/frontend/build/static/Close-DKD1r3T7.js +1 -0
  264. package/frontend/build/static/Close-nISwbNAY.js +1 -0
  265. package/frontend/build/static/CodeRenderer-RNHlNPBl.js +1094 -0
  266. package/frontend/build/static/CodeRenderer.story-Vw214z1Z.js +2 -0
  267. package/frontend/build/static/Collapse-COunT4rQ.js +1 -0
  268. package/frontend/build/static/ConditionallyRender-CEffh9Z-.js +1 -0
  269. package/frontend/build/static/ConnectSdkStep-DnH4iwnu.js +1 -0
  270. package/frontend/build/static/ConnectSdkStep.story-DeWPTOZK.js +1 -0
  271. package/frontend/build/static/CreateProject-eo1TZ1so.js +1 -0
  272. package/frontend/build/static/Dialog-DLpX4v6X.js +1 -0
  273. package/frontend/build/static/DialogWithAside-BxVspeMV.js +1 -0
  274. package/frontend/build/static/DialogWithAside.story-Dqmr9MnM.js +1 -0
  275. package/frontend/build/static/Divider-BYq1CcT0.js +1 -0
  276. package/frontend/build/static/EnterpriseEdge-D-g3JGCd.js +6 -0
  277. package/frontend/build/static/FeatureCard.story-B2Q-SD_-.js +1 -0
  278. package/frontend/build/static/FeatureMetricsChart-ETalRWKx.js +2 -0
  279. package/frontend/build/static/FeatureStaleDialog-CvD9ojNj.js +8 -0
  280. package/frontend/build/static/{FeatureViewLazyExport-8eQKTvdS.js → FeatureViewLazyExport-10Z3_Wda.js} +3 -3
  281. package/frontend/build/static/FileCopy-D1ZqmNek.js +1 -0
  282. package/frontend/build/static/FlagMetricsChart-dLfSDZ_x.js +2 -0
  283. package/frontend/build/static/FlagUsageSnippet-DOGwaqPZ.js +2 -0
  284. package/frontend/build/static/FlagUsageSnippet.story-tfMvt3kG.js +1 -0
  285. package/frontend/build/static/FormControlLabel-BrOlsUbv.js +1 -0
  286. package/frontend/build/static/FormField-CRXe4g4R.js +1 -0
  287. package/frontend/build/static/FrontendNetworkTrafficUsage-DGEwK1Qg.js +1 -0
  288. package/frontend/build/static/GenerateApiKey-C1aJtPh-.js +1 -0
  289. package/frontend/build/static/GenerateApiKey.story-DNMZG0qg.js +1 -0
  290. package/frontend/build/static/GenerateApiKeySummary-DkPI02tH.js +1 -0
  291. package/frontend/build/static/GenerateApiKeySummary.story-CruMFwTQ.js +1 -0
  292. package/frontend/build/static/{GridLayoutWrapper-B_YyjZ7l.js → GridLayoutWrapper-B3BIpxoE.js} +3 -3
  293. package/frontend/build/static/Grow-CuQu7Z-P.js +1 -0
  294. package/frontend/build/static/HelpOutlineOutlined-HDH1hus2.js +1 -0
  295. package/frontend/build/static/HelpResources.story-warJFqf6.js +1 -0
  296. package/frontend/build/static/Highlighter-BS0Ow0vZ.js +1 -0
  297. package/frontend/build/static/HtmlTooltip-3YsoM_F5.js +1 -0
  298. package/frontend/build/static/IconButton-BveFD3PF.js +1 -0
  299. package/frontend/build/static/ImpactMetricsPage-C57istn7.js +1 -0
  300. package/frontend/build/static/ImpactViewsPage-MKEHnt2w.js +1 -0
  301. package/frontend/build/static/LazyAdminExport-DfIYVWQD.js +38 -0
  302. package/frontend/build/static/LazyProjectExport-30GlUH0L.js +46 -0
  303. package/frontend/build/static/LifecycleChartComponent-Tj1pN5Tj.js +2 -0
  304. package/frontend/build/static/LineChartComponent-_RiDjL2-.js +1 -0
  305. package/frontend/build/static/Link-wv6er_Jy.js +1 -0
  306. package/frontend/build/static/Loader-CnLypnQx.js +1 -0
  307. package/frontend/build/static/{LogRocketRunner-Duzg1Kzh.js → LogRocketRunner-BS6AEpSK.js} +1 -1
  308. package/frontend/build/static/MarkCompletedDialogue-BeIA6eMj.js +1 -0
  309. package/frontend/build/static/Menu-DUeb4XP8.js +1 -0
  310. package/frontend/build/static/MenuBook-DZFyn--3.js +1 -0
  311. package/frontend/build/static/MenuItem-DNlBQQYG.js +1 -0
  312. package/frontend/build/static/Modal-DdH902AP.js +1 -0
  313. package/frontend/build/static/NetworkOverview-DF8c0k1P.js +1 -0
  314. package/frontend/build/static/{NetworkPrometheusAPIWarning-Bq62ygkV.js → NetworkPrometheusAPIWarning-B0v-FihJ.js} +1 -1
  315. package/frontend/build/static/NetworkTraffic-C1I4wwcb.js +1 -0
  316. package/frontend/build/static/NetworkTrafficUsage-DkdQx64o.js +1 -0
  317. package/frontend/build/static/NotificationStack.story-CdeU4r0p.js +1 -0
  318. package/frontend/build/static/OnboardingProgress-BuWQ2rjB.js +1 -0
  319. package/frontend/build/static/OnboardingProgress.story-CmQztiFV.js +1 -0
  320. package/frontend/build/static/OpenInNew-CHcHAi4B.js +1 -0
  321. package/frontend/build/static/PageContent-lT51j8jO.js +1 -0
  322. package/frontend/build/static/Paper-BvPQ0Zq6.js +1 -0
  323. package/frontend/build/static/PercentageDonut-CZVWd5fE.js +1 -0
  324. package/frontend/build/static/PermissionButton-Tj54K9Kc.js +1 -0
  325. package/frontend/build/static/Popover-FHiFav9d.js +1 -0
  326. package/frontend/build/static/Popper-Cut-_j4A.js +1 -0
  327. package/frontend/build/static/Portal-kwmlgXGI.js +1 -0
  328. package/frontend/build/static/Radio-Cj82h8o5.js +1 -0
  329. package/frontend/build/static/RadioGroup-BWTZb8iE.js +1 -0
  330. package/frontend/build/static/ReactJSONEditor-D65iiPmM.js +4 -0
  331. package/frontend/build/static/ReactJSONEditor.story-Bt3pxUGO.js +1 -0
  332. package/frontend/build/static/RoleCell-tqHUOlI7.js +1 -0
  333. package/frontend/build/static/RtlProvider-D1AlROju.js +1 -0
  334. package/frontend/build/static/Safeguard-DFEQulxy.js +1 -0
  335. package/frontend/build/static/SdkEvaluationStatus-B1rMywp-.js +17 -0
  336. package/frontend/build/static/SdkEvaluationStatus.story-BxgqLICz.js +1 -0
  337. package/frontend/build/static/Select-DdG1oq6O.js +3 -0
  338. package/frontend/build/static/SelectSdk-Boj2Ug-2.js +1 -0
  339. package/frontend/build/static/SelectSdk-CzRoKDb5.js +1 -0
  340. package/frontend/build/static/SelectSdk.story-BT9ke5Eb.js +1 -0
  341. package/frontend/build/static/SelectSdk.story-CdzotYoq.js +1 -0
  342. package/frontend/build/static/Spacing.story-CB6GkN5Z.js +1 -0
  343. package/frontend/build/static/StoriesPage-luLnHVc2.js +1 -0
  344. package/frontend/build/static/SwitchBase-cxExIOp0.js +1 -0
  345. package/frontend/build/static/TextField-Cf03Ror7.js +1 -0
  346. package/frontend/build/static/ThemeColors.story-Cx9bv5pL.js +1 -0
  347. package/frontend/build/static/TokenExplanation-CJjBSQ07.js +1 -0
  348. package/frontend/build/static/TokenExplanation.story-BoOaHRrQ.js +1 -0
  349. package/frontend/build/static/Tooltip-DPzrXyNS.js +1 -0
  350. package/frontend/build/static/TooltipResolver-CIBfA4vm.js +1 -0
  351. package/frontend/build/static/Truncator-CF0-SVks.js +1 -0
  352. package/frontend/build/static/Typography-nCkGT67u.js +1 -0
  353. package/frontend/build/static/Typography.story-CofmlvJB.js +1 -0
  354. package/frontend/build/static/UIContext-Dsr0TY8K.js +1 -0
  355. package/frontend/build/static/WhatsNewLayout.story-p4Cm8bgx.js +1 -0
  356. package/frontend/build/static/aggregateFeatureMetrics-D7AXsd2U.js +1 -0
  357. package/frontend/build/static/capitalize-DfXJDj8P.js +1 -0
  358. package/frontend/build/static/chartjs-plugin-annotation.esm-tsR8Pv5a.js +1 -0
  359. package/frontend/build/static/chunk-KS7C4IRE-PUpsdS_b.js +3 -0
  360. package/frontend/build/static/code-block-BZePA-4e.js +1 -0
  361. package/frontend/build/static/copy-to-clipboard-BCU4eeSw.js +1 -0
  362. package/frontend/build/static/createBox-DaDvp7MB.js +1 -0
  363. package/frontend/build/static/createSimplePaletteValueFilter-Bt9IjErz.js +1 -0
  364. package/frontend/build/static/createSvgIcon-D-6jHYkf.js +1 -0
  365. package/frontend/build/static/dividerClasses-DcI5JVLQ.js +1 -0
  366. package/frontend/build/static/{enterpriseEdgeCloud-C5u35XAw.js → enterpriseEdgeCloud-qnOcFE1S.js} +1 -1
  367. package/frontend/build/static/esm-DViSjNxt.js +12 -0
  368. package/frontend/build/static/formatAccessText-BhC1wtCg.js +1 -0
  369. package/frontend/build/static/httpErrorResponseHandler-BzpwldnE.js +1 -0
  370. package/frontend/build/static/impact-metrics-DrmGy_gn.png +0 -0
  371. package/frontend/build/static/{impact-metrics-icon-6dt-ye-h.js → impact-metrics-icon-Cg_ki-2e.js} +1 -1
  372. package/frontend/build/static/index-C2zVj2FI.js +287 -0
  373. package/frontend/build/static/{jsx-runtime-BnvnyDTF.js → jsx-runtime-DYfQNk55.js} +1 -1
  374. package/frontend/build/static/mcp-ADx0Sju7.png +0 -0
  375. package/frontend/build/static/{metricsFormatters-DhX-aU17.js → metricsFormatters-BmjW0KTj.js} +1 -1
  376. package/frontend/build/static/milestone-CciNgBhP.png +0 -0
  377. package/frontend/build/static/{mui-CoU2c-id.js → mui-C_omlwxE.js} +1 -1
  378. package/frontend/build/static/networkTrafficUsageHighlightPlugin-DPi6id5j.js +1 -0
  379. package/frontend/build/static/react-Ca03aNmg.js +1 -0
  380. package/frontend/build/static/resolveProps-CAVsjga5.js +1 -0
  381. package/frontend/build/static/servicenow-BmgZtZjb.svg +13 -0
  382. package/frontend/build/static/sharedTypes-CXnpeg4U.js +1 -0
  383. package/frontend/build/static/styled-CY_-vLWk.js +1 -0
  384. package/frontend/build/static/theme-DDCs0xPV.js +1 -0
  385. package/frontend/build/static/{themeStyles-DGVpwkcv.js → themeStyles-B99HStK1.js} +1 -1
  386. package/frontend/build/static/useApi-B7ZLy5tN.js +1 -0
  387. package/frontend/build/static/useApiGetter-C41iZzl2.js +1 -0
  388. package/frontend/build/static/useApiTokens-BQWPDfv2.js +1 -0
  389. package/frontend/build/static/useConditionalSWR-QWHOvx6V.js +1 -0
  390. package/frontend/build/static/useConditionallyHiddenColumns-DbQbB4u7.js +5 -0
  391. package/frontend/build/static/useCustomEvent-BnWpZ2E1.js +1 -0
  392. package/frontend/build/static/useEnhancedEffect-BBMUaXin.js +1 -0
  393. package/frontend/build/static/useEnvironments-Gu7r2cpc.js +2 -0
  394. package/frontend/build/static/useEventTracker-B0ILyjZB.js +1 -0
  395. package/frontend/build/static/useGroupedImpactMetricsData-jQ7IYFK3.js +1 -0
  396. package/frontend/build/static/useId-Bg4oXGUa.js +1 -0
  397. package/frontend/build/static/{useImpactMetrics-9qDSEpTn.js → useImpactMetrics-DXxTQl6p.js} +2 -2
  398. package/frontend/build/static/{useImpactMetricsEnabled-wRNO6-Oh.js → useImpactMetricsEnabled-B3om8V0b.js} +1 -1
  399. package/frontend/build/static/{useInstanceTrafficMetrics-CRCDB4TX.js → useInstanceTrafficMetrics-DkgcWjVM.js} +1 -1
  400. package/frontend/build/static/useLocationSettings-vlEPA_j3.js +1 -0
  401. package/frontend/build/static/useMediaQuery-BFm2lR-0.js +2 -0
  402. package/frontend/build/static/useOptionalPathParam-Cmh3Ejbi.js +1 -0
  403. package/frontend/build/static/{usePageTitle-CHzzFshF.js → usePageTitle-DD1IHvCw.js} +1 -1
  404. package/frontend/build/static/useSlot-Ce59-xJL.js +1 -0
  405. package/frontend/build/static/useSlotProps-v77xI-e5.js +1 -0
  406. package/frontend/build/static/useTheme-CTychWp2.js +10 -0
  407. package/frontend/build/static/useTimeout-B2sc1jSE.js +1 -0
  408. package/frontend/build/static/useToast-BUHn_9TC.js +1 -0
  409. package/frontend/build/static/{useUiConfig-DbVjTDpE.js → useUiConfig-BcfEDPWc.js} +1 -1
  410. package/frontend/build/static/useUiFlag-PbKW1iMa.js +1 -0
  411. package/frontend/package.json +13 -14
  412. package/package.json +6 -5
  413. package/frontend/build/static/AccordionSummary-wye3oOm6.js +0 -1
  414. package/frontend/build/static/AdvancedPlayground-DdeMb-6I.js +0 -3
  415. package/frontend/build/static/Alert-_bLyWbvx.js +0 -1
  416. package/frontend/build/static/BackendConnections-kgR0xyIH.js +0 -1
  417. package/frontend/build/static/Box-BQsxfFmC.js +0 -1
  418. package/frontend/build/static/Button-CebB8EPB.js +0 -1
  419. package/frontend/build/static/CircularProgress-C_LUU3DK.js +0 -101
  420. package/frontend/build/static/Close-DyTASMSq.js +0 -1
  421. package/frontend/build/static/Collapse-DPPTUMpf.js +0 -1
  422. package/frontend/build/static/ConditionallyRender---uTpMBn.js +0 -1
  423. package/frontend/build/static/CreateProject-BSlg0WYM.js +0 -1
  424. package/frontend/build/static/Dialog-C-xQxqWX.js +0 -1
  425. package/frontend/build/static/DialogWithAside-DzCSDyWo.js +0 -1110
  426. package/frontend/build/static/Divider-CsdWvu5F.js +0 -1
  427. package/frontend/build/static/EnterpriseEdge-CjslqYDM.js +0 -6
  428. package/frontend/build/static/FeatureMetricsChart-B4WryxcW.js +0 -2
  429. package/frontend/build/static/FeatureStaleDialog-EzReRTI5.js +0 -8
  430. package/frontend/build/static/FileCopy-B8HZEA83.js +0 -1
  431. package/frontend/build/static/FlagMetricsChart-hNQuwOxW.js +0 -2
  432. package/frontend/build/static/FormControlLabel-F5gDLixN.js +0 -1
  433. package/frontend/build/static/FrontendNetworkTrafficUsage-pcr83PWo.js +0 -1
  434. package/frontend/build/static/Grow-BIbmvKVy.js +0 -1
  435. package/frontend/build/static/HelpOutlineOutlined-CpMsVJZu.js +0 -1
  436. package/frontend/build/static/Highlighter-MomUaQww.js +0 -1
  437. package/frontend/build/static/HtmlTooltip-B9jv1G1R.js +0 -1
  438. package/frontend/build/static/ImpactMetricsPage-DGH_S9oz.js +0 -1
  439. package/frontend/build/static/ImpactViewsPage-DZqKPFvE.js +0 -1
  440. package/frontend/build/static/LazyAdminExport-B1ReAViz.js +0 -38
  441. package/frontend/build/static/LazyProjectExport-BMVcGpNI.js +0 -46
  442. package/frontend/build/static/LifecycleChartComponent-BeoRUO9q.js +0 -2
  443. package/frontend/build/static/LineChartComponent-BbCMbJ-m.js +0 -1
  444. package/frontend/build/static/Link-CfIScd2f.js +0 -1
  445. package/frontend/build/static/Loader-DdgXftPc.js +0 -1
  446. package/frontend/build/static/MarkCompletedDialogue-CcXyp8UE.js +0 -1
  447. package/frontend/build/static/NetworkOverview-0mBnFAZX.js +0 -1
  448. package/frontend/build/static/NetworkTraffic-DmG5Iv25.js +0 -1
  449. package/frontend/build/static/NetworkTrafficUsage-DccaVLYs.js +0 -1
  450. package/frontend/build/static/OnboardingProgress-Bp9sZ-ZM.js +0 -1
  451. package/frontend/build/static/PageContent-c0NDm5oD.js +0 -1
  452. package/frontend/build/static/PercentageDonut-DBDGNJlh.js +0 -1
  453. package/frontend/build/static/PermissionButton-B-IfzChn.js +0 -1
  454. package/frontend/build/static/Popover-CUTnSn2h.js +0 -1
  455. package/frontend/build/static/Radio-DL8ja0ll.js +0 -1
  456. package/frontend/build/static/RadioGroup-Ci3WHaOy.js +0 -1
  457. package/frontend/build/static/ReactJSONEditor-DeBI7JPg.js +0 -4
  458. package/frontend/build/static/RoleCell-DhYvu4YH.js +0 -1
  459. package/frontend/build/static/Safeguard-DErU6fSK.js +0 -1
  460. package/frontend/build/static/SelectSdk-Dr_pzQgX.js +0 -2
  461. package/frontend/build/static/StoriesPage-frGP1Bfr.js +0 -2
  462. package/frontend/build/static/SwitchBase-DWPIxZnN.js +0 -1
  463. package/frontend/build/static/TextField-oipjeg6n.js +0 -3
  464. package/frontend/build/static/Tooltip-BaILXXti.js +0 -1
  465. package/frontend/build/static/TooltipResolver-4A1YhwBy.js +0 -1
  466. package/frontend/build/static/Truncator-D2bO9ub6.js +0 -1
  467. package/frontend/build/static/Typography-BTdLWIUX.js +0 -1
  468. package/frontend/build/static/aggregateFeatureMetrics-B-67HaIZ.js +0 -1
  469. package/frontend/build/static/chartjs-plugin-annotation.esm-DP4wCpdA.js +0 -1
  470. package/frontend/build/static/chunk-QUQL4437-Dr42NpoL.js +0 -3
  471. package/frontend/build/static/createBox-Cf2UJsmc.js +0 -1
  472. package/frontend/build/static/createSimplePaletteValueFilter-BRAMrHWJ.js +0 -1
  473. package/frontend/build/static/dividerClasses-Cc45lyWo.js +0 -1
  474. package/frontend/build/static/esm-DdgY1Q5s.js +0 -12
  475. package/frontend/build/static/httpErrorResponseHandler-FMtt7Zqh.js +0 -1
  476. package/frontend/build/static/index-C04TEs4k.js +0 -290
  477. package/frontend/build/static/networkTrafficUsageHighlightPlugin-DlOtHZg3.js +0 -1
  478. package/frontend/build/static/react-GZhdek4G.js +0 -1
  479. package/frontend/build/static/useApiGetter-7FP8Avm4.js +0 -1
  480. package/frontend/build/static/useApiTokens-C8Dqw_X1.js +0 -1
  481. package/frontend/build/static/useConditionalSWR-DGgzun6i.js +0 -1
  482. package/frontend/build/static/useConditionallyHiddenColumns-C5q9zdfJ.js +0 -5
  483. package/frontend/build/static/useCustomEvent-Dj2V5RVb.js +0 -1
  484. package/frontend/build/static/useEnvironments-CTguhgy0.js +0 -2
  485. package/frontend/build/static/useGroupedImpactMetricsData-CW9qnV2y.js +0 -1
  486. package/frontend/build/static/useMediaQuery-DGx8zAkf.js +0 -2
  487. package/frontend/build/static/useOptionalPathParam-Cx3ru9yC.js +0 -1
  488. package/frontend/build/static/useTheme-CQqAmDLr.js +0 -9
@@ -0,0 +1 @@
1
+ import{o as e,t}from"./react-Ca03aNmg.js";import{t as n}from"./jsx-runtime-DYfQNk55.js";import{t as r}from"./styled-CY_-vLWk.js";import{t as i}from"./Paper-BvPQ0Zq6.js";import{t as a}from"./Alert-DQgOzmJF.js";import{t as o}from"./Typography-nCkGT67u.js";import{t as s}from"./Box-rSzdGLLJ.js";import{t as c}from"./Button-yGjgMTJI.js";import{n as l}from"./formatPath-j72gcKwy.js";import{K as u,t as d}from"./PermissionButton-Tj54K9Kc.js";import{n as f}from"./useUiFlag-PbKW1iMa.js";import{n as p,t as m}from"./useApiGetter-C41iZzl2.js";import{r as h,t as g}from"./PageContent-lT51j8jO.js";import{t as _}from"./useEventTracker-B0ILyjZB.js";import{t as v}from"./useToast-BUHn_9TC.js";import{n as y}from"./useApi-B7ZLy5tN.js";import{c as b,s as x,t as S}from"./metricsFormatters-BmjW0KTj.js";import{$t as C,M as w,Yn as T,ja as E}from"./index-C2zVj2FI.js";import{n as D}from"./useImpactMetricsEnabled-B3om8V0b.js";import{i as O,n as k,r as A,t as j}from"./GridLayoutWrapper-B3BIpxoE.js";import{t as M}from"./impact-metrics-icon-Cg_ki-2e.js";var N=e(t(),1),P=()=>{let e=`api/admin/impact-metrics/plausible`,{data:t,refetch:n,loading:r,error:i}=p(l(e),()=>m(l(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)(b,{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`?S(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)(x,{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)(g,{header:(0,F.jsx)(h,{title:`Impact metrics`,actions:(0,F.jsx)(d,{variant:`contained`,onClick:e,permission:u,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)(d,{variant:`contained`,onClick:e,permission:u,children:`Create your first chart`})]}),(0,F.jsxs)(J,{severity:`info`,icon:(0,F.jsx)(E,{}),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}=v(),a=f(`plausibleMetrics`),{trackEvent:s}=_(),{charts:c,layout:l,loading:p,error:m,addChart:g,updateChart:b,deleteChart:x}=O(),{metricOptions:S,loading:C,error:T}=w(),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 b(n.id,e):await g(e),t(!1)}catch(e){i(y(e))}},P=(0,N.useCallback)(async e=>{try{await x(e)}catch(e){i(y(e))}},[x]),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=l?.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,l,D,P,a]),L=T||m,R=C||p,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)(h,{title:`Impact metrics`,titleElement:(0,F.jsx)(o,{variant:`h1`,component:`span`,children:`Impact metrics`}),actions:(0,F.jsx)(d,{variant:`contained`,onClick:E,disabled:B,permission:u,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:S,loading:C||p})]})},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)(T,{});export{$ as ImpactMetricsPage};
@@ -0,0 +1 @@
1
+ import{o as e,t}from"./react-Ca03aNmg.js";import{r as n}from"./chunk-KS7C4IRE-PUpsdS_b.js";import{t as r}from"./useTheme-CTychWp2.js";import{t as i}from"./jsx-runtime-DYfQNk55.js";import{t as a}from"./styled-CY_-vLWk.js";import{o,t as s}from"./TextField-Cf03Ror7.js";import{a as c}from"./Popover-FHiFav9d.js";import{t as l}from"./Menu-DUeb4XP8.js";import{t as u}from"./FormControlLabel-BrOlsUbv.js";import{t as d}from"./MenuItem-DNlBQQYG.js";import{t as f}from"./Radio-Cj82h8o5.js";import{t as p}from"./createSvgIcon-D-6jHYkf.js";import{t as m}from"./Paper-BvPQ0Zq6.js";import{t as h}from"./Alert-DQgOzmJF.js";import{t as g}from"./IconButton-BveFD3PF.js";import{t as _}from"./Typography-nCkGT67u.js";import{t as v}from"./Box-rSzdGLLJ.js";import{t as y}from"./Button-yGjgMTJI.js";import{t as b}from"./Dialog-DLpX4v6X.js";import{t as ee}from"./Divider-BYq1CcT0.js";import{t as te}from"./Link-wv6er_Jy.js";import{t as x}from"./Tooltip-DPzrXyNS.js";import{a as ne,i as S,n as C,o as re,r as ie,t as ae}from"./useEnvironments-Gu7r2cpc.js";import{t as oe}from"./Close-nISwbNAY.js";import{t as se}from"./format-C8UVjLNw.js";import{t as ce}from"./formatDistanceToNow-CyouiCIY.js";import{r as le,t as ue}from"./PageContent-lT51j8jO.js";import{i as w,l as de,n as fe,s as pe,t as T}from"./metricsFormatters-BmjW0KTj.js";import{$i as E,$o as D,Eo as me,Es as he,Js as ge,M as _e,Mt as ve,Oo as O,Ps as ye,Qa as be,Qs as k,U as xe,Ur as Se,Xs as Ce,Ys as we,Za as Te,Zs as A,_s as j,go as Ee,ja as De,ko as Oe,ls as ke,ns as Ae,oo as je,sc as Me,ss as M,zo as N}from"./index-C2zVj2FI.js";import{a as Ne,c as P,i as Pe,l as F,n as Fe,o as I,r as Ie,s as Le,t as Re}from"./useGroupedImpactMetricsData-jQ7IYFK3.js";import{t as ze}from"./impact-metrics-icon-Cg_ki-2e.js";var L=e(t(),1),R=e=>{let t=e>0?`+`:e<0?`−`:``,n=Math.abs(e);return`${t}${n>=10||Number.isInteger(n)?`${Math.round(n)}`:n.toFixed(1)}%`},z=2,B=(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=z,l=64-z,u=e=>B(e,i,a,0,320),d=e=>B(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`}},V=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`,H=e=>`${e>0?`+`:e<0?`−`:``}${T(Math.abs(e))}`,et=({goalMetricLabel:e,summary:t,series:n,timeLabel:i})=>{let a=r(),o=(0,L.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`?F:s===`down`?O:P,p=t.mode===`cumulative`?`Total over ${i.toLowerCase()}`:`vs. start of ${i.toLowerCase()}`;return(0,V.jsxs)(Ve,{children:[(0,V.jsxs)(Ge,{children:[(0,V.jsx)(he,{sx:{fontSize:16}}),(0,V.jsx)(Ke,{children:`Goal`})]}),(0,V.jsxs)(He,{children:[(0,V.jsxs)(Ue,{children:[(0,V.jsx)(qe,{title:e,children:e}),(0,V.jsxs)(Je,{children:[(0,V.jsx)(Ye,{children:T(t.current)}),l&&t.deltaAbs!==null?(0,V.jsxs)(Xe,{sx:{color:u},children:[(0,V.jsx)(f,{sx:{fontSize:16}}),(0,V.jsx)(_,{component:`span`,sx:{fontSize:`inherit`,fontWeight:600,color:`inherit`},children:t.deltaPct===null?H(t.deltaAbs):`${R(t.deltaPct)} (${H(t.deltaAbs)})`})]}):null]}),(0,V.jsx)(Ze,{variant:`caption`,children:p})]}),c?(0,V.jsx)(We,{children:(0,V.jsxs)(Qe,{viewBox:`0 0 320 64`,preserveAspectRatio:`none`,role:`img`,"aria-label":`${e} trend sparkline`,children:[(0,V.jsx)(`defs`,{children:(0,V.jsxs)(`linearGradient`,{id:o,x1:`0`,y1:`0`,x2:`0`,y2:`1`,children:[(0,V.jsx)(`stop`,{offset:`0%`,stopColor:d,stopOpacity:.35}),(0,V.jsx)(`stop`,{offset:`100%`,stopColor:d,stopOpacity:0})]})}),(0,V.jsx)(`path`,{d:c.area,fill:`url(#${o})`,stroke:`none`}),(0,V.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,V.jsx)(tt,{children:(0,V.jsxs)(nt,{children:[(0,V.jsxs)(rt,{children:[(0,V.jsxs)(at,{children:[(0,V.jsx)(st,{children:e}),(0,V.jsx)(ct,{children:t})]}),(0,V.jsx)(ut,{heightSpacing:u,children:(0,V.jsx)(Fe,{stepSeries:i,timeRange:n,start:s,end:c,loading:l,featureEvents:o})})]}),(0,V.jsxs)(it,{children:[(0,V.jsx)(ft,{children:d}),f?(0,V.jsx)(pt,{children:f}):null,(0,V.jsx)(ot,{children:(0,V.jsx)(lt,{children:p??m})}),(0,V.jsx)(dt,{children:(0,V.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(ie)({"& 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(C)(({theme:e})=>({backgroundColor:e.palette.background.elevation1})),wt=a(S)(({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}})),U=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(te)(({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,V.jsxs)(At,{children:[(0,V.jsx)(U,{children:(0,V.jsx)(Ae,{stage:{name:e}})}),(0,V.jsx)(`span`,{children:D(e)})]}),Nt=({groupKey:e,count:t,collapsed:n,onToggle:r})=>(0,V.jsx)(Ct,{children:(0,V.jsx)(wt,{colSpan:4,children:(0,V.jsxs)(Tt,{type:`button`,"aria-expanded":!n,onClick:r,children:[(0,V.jsx)(Et,{children:n?(0,V.jsx)(be,{}):(0,V.jsx)(ye,{})}),e===`unknown`?(0,V.jsx)(`span`,{children:`Not found`}):(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(U,{children:(0,V.jsx)(Ae,{stage:{name:e}})}),(0,V.jsx)(`span`,{children:D(e)})]}),(0,V.jsx)(Dt,{children:t})]})})}),Pt=({feature:e})=>(0,V.jsxs)(C,{children:[(0,V.jsx)(S,{children:(0,V.jsx)(Ot,{children:e.project?(0,V.jsx)(kt,{component:n,to:`/projects/${e.project}/features/${e.name}`,underline:`hover`,children:e.name}):(0,V.jsx)(`span`,{children:e.name})})}),(0,V.jsx)(S,{children:e.project}),(0,V.jsx)(S,{sx:{textTransform:`capitalize`},children:e.type}),(0,V.jsx)(S,{children:e.lifecycleStage?(0,V.jsx)(Mt,{stage:e.lifecycleStage}):(0,V.jsx)(jt,{children:`—`})})]}),Ft=({features:e})=>{let[t,n]=(0,L.useState)({}),r=(0,L.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,V.jsxs)(v,{children:[(0,V.jsxs)(vt,{children:[(0,V.jsx)(yt,{children:`Followed features`}),(0,V.jsx)(bt,{children:`${e.length} total`})]}),(0,V.jsx)(St,{children:(0,V.jsxs)(re,{children:[(0,V.jsx)(xt,{children:(0,V.jsxs)(C,{children:[(0,V.jsx)(S,{children:`Name`}),(0,V.jsx)(S,{children:`Project`}),(0,V.jsx)(S,{children:`Type`}),(0,V.jsx)(S,{children:`Lifecycle stage`})]})}),(0,V.jsx)(ne,{children:r.map(({key:e,entries:n})=>(0,V.jsxs)(L.Fragment,{children:[(0,V.jsx)(Nt,{groupKey:e,count:n.length,collapsed:!!t[e],onToggle:()=>i(e)}),t[e]?null:n.map(e=>(0,V.jsx)(Pt,{feature:e},e.name))]},e))})]})})]})},It=1,W={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=G(e.atSec-n,e.atSec,t),i=G(e.atSec,e.atSec+n,t),a=K(r,t),o=K(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=W[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`]),G=(e,t,{goalSeries:n})=>n.data.filter(([n,r])=>n>=e&&n<t&&Number.isFinite(r)),K=(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`,q=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`]),J=a(b)(({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})),Y=a(v)({display:`flex`,flexDirection:`column`,alignItems:`center`}),an=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,fontWeight:600,color:e.palette.text.secondary,textTransform:`uppercase`,letterSpacing:`0.06em`})),on=a(_)(({theme:e})=>({fontSize:e.typography.h3.fontSize,fontWeight:600,color:e.palette.text.primary,lineHeight:1.2})),sn=a(v)(({theme:e})=>({color:e.palette.text.disabled,fontSize:e.typography.h3.fontSize,fontWeight:300,alignSelf:`center`,paddingBottom:e.spacing(.5)})),cn=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})),ln=a(_)(({theme:e})=>({fontSize:e.typography.h1.fontSize,fontWeight:700,lineHeight:1.1,color:`inherit`,display:`inline-flex`,alignItems:`center`,gap:e.spacing(.5)})),un=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,color:e.palette.text.secondary})),dn=a(v)({position:`relative`,width:`100%`}),fn=e=>`${e>0?`+`:e<0?`−`:``}${T(Math.abs(e))}`,pn=(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:de(r,n),fill:!0,borderWidth:2,pointRadius:0,pointHoverRadius:4,tension:.2,spanGaps:!0}]}},mn=(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`?T(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}}}},hn=({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,L.useMemo)(()=>e?pn(e.detail,i.palette.primary.main,I(i.palette.primary.main,0),I(i.palette.primary.main,.18)):null,[e,i.palette.primary.main]),l=(0,L.useMemo)(()=>e?mn(e.detail,i.palette.primary.main,I(i.palette.text.primary,.04)):null,[e,i.palette.primary.main,i.palette.text.primary]);if(!e)return(0,V.jsx)(J,{open:a,onClose:n,maxWidth:`sm`,fullWidth:!0});let{detail:u,tone:d,deltaPct:f}=e,{event:p}=u,m=d===`up`?F:d===`down`?O:P,h=ce(new Date(p.timestamp),{addSuffix:!0}),_=se(new Date(p.timestamp),`MMM d 'at' HH:mm`),v=`±${q(u.halfWindowMs)} around the flip`,y=o?`Sum of the goal · ${v}`:`Average of the goal · ${v}`;return(0,V.jsxs)(J,{open:a,onClose:n,maxWidth:`sm`,fullWidth:!0,children:[(0,V.jsxs)(Yt,{children:[(0,V.jsxs)(Xt,{children:[(0,V.jsxs)(Zt,{children:[(0,V.jsx)(Qt,{title:p.featureName,children:p.featureName}),(0,V.jsxs)($t,{sx:{backgroundColor:I(s,.14),color:s,border:`1px solid ${s}`},children:[(0,V.jsx)(Oe,{sx:{fontSize:12,color:`inherit`}}),Ie[p.type]]})]}),(0,V.jsxs)(en,{title:_,children:[`Flipped `,h,p.createdBy?` by ${p.createdBy}`:``]})]}),(0,V.jsx)(g,{"aria-label":`Close`,size:`small`,onClick:n,children:(0,V.jsx)(oe,{fontSize:`small`})})]}),(0,V.jsxs)(tn,{children:[(0,V.jsxs)(nn,{children:[(0,V.jsxs)(rn,{children:[(0,V.jsxs)(Y,{children:[(0,V.jsx)(an,{children:`Before`}),(0,V.jsx)(on,{children:T(u.before)})]}),(0,V.jsx)(sn,{children:`→`}),(0,V.jsxs)(Y,{children:[(0,V.jsx)(an,{children:`After`}),(0,V.jsx)(on,{children:T(u.after)})]})]}),(0,V.jsxs)(cn,{tone:d,children:[(0,V.jsxs)(ln,{children:[(0,V.jsx)(m,{sx:{fontSize:28}}),R(f)]}),(0,V.jsx)(un,{children:`${fn(u.deltaAbs)} · ${y}`})]})]}),(0,V.jsx)(dn,{children:c&&l?(0,V.jsx)(L.Suspense,{fallback:null,children:(0,V.jsx)(pe,{data:c,overrideOptions:l,aspectRatio:3})}):null})]})]})},gn=4,_n={up:F,down:O,flat:P},vn=a(v)(({theme:e})=>({display:`flex`,flexDirection:`column`,gap:e.spacing(.75),flex:1})),yn=a(v)(({theme:e})=>({display:`flex`,alignItems:`center`,justifyContent:`space-between`,gap:e.spacing(1)})),bn=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,fontWeight:e.typography.fontWeightBold,color:e.palette.text.secondary,textTransform:`uppercase`,letterSpacing:`0.06em`})),xn=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,fontWeight:600,color:e.palette.text.secondary,cursor:`default`})),Sn=a(v)(({theme:e})=>({display:`flex`,flexDirection:`column`,gap:e.spacing(.25)})),Cn=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}})),wn=a(v)(({theme:e})=>({fontSize:e.typography.body2.fontSize,fontWeight:500,color:e.palette.text.primary,whiteSpace:`nowrap`,overflow:`hidden`,textOverflow:`ellipsis`,minWidth:0})),Tn=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})),En=a(_)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,color:e.palette.text.secondary,textAlign:`right`,paddingRight:e.spacing(.75)})),Dn=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)})),On=({impacts:e,timeRange:t,aggregationMode:n})=>{let[r,i]=(0,L.useState)(null),a=e.slice(0,gn),o=e.length-a.length,s=`±${q(W[t])}`;return(0,V.jsxs)(vn,{children:[(0,V.jsxs)(yn,{children:[(0,V.jsx)(bn,{children:`Top movers`}),(0,V.jsx)(x,{arrow:!0,placement:`top`,title:`Goal change in the ${s} window before vs. after each flag's most significant change`,children:(0,V.jsx)(xn,{children:s})})]}),a.length===0?(0,V.jsx)(Dn,{children:`No measurable flag changes in this window.`}):(0,V.jsxs)(Sn,{children:[a.map(e=>{let t=_n[e.tone];return(0,V.jsxs)(Cn,{type:`button`,onClick:()=>i(e),"aria-label":`${e.featureName} ${R(e.deltaPct)}, view impact details`,children:[(0,V.jsx)(wn,{title:e.featureName,children:e.featureName}),(0,V.jsxs)(Tn,{tone:e.tone,children:[(0,V.jsx)(t,{sx:{fontSize:14}}),R(e.deltaPct)]})]},e.featureName)}),o>0?(0,V.jsxs)(En,{children:[`+`,o,` more`]}):null]}),(0,V.jsx)(hn,{impact:r,aggregationMode:n,onClose:()=>i(null)})]})},kn=p((0,V.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`),An=a(`div`)(({theme:e})=>({display:`flex`,alignItems:`center`,gap:e.spacing(2),borderBottom:`1px solid ${e.palette.divider}`})),jn=a(ge)({flex:1,minWidth:0,"& .MuiTabs-flexContainer":{gap:4}}),Mn=a(we)(({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,c]=(0,L.useState)(null),[u,f]=(0,L.useState)(null),p=(e,t)=>{e.stopPropagation(),c(e.currentTarget),f(t)},m=()=>{c(null),f(null)},h=e.find(e=>e.id===u)??null;return(0,V.jsxs)(An,{children:[(0,V.jsx)(jn,{value:t??!1,onChange:(e,t)=>n(t),variant:`scrollable`,scrollButtons:`auto`,children:e.map(e=>(0,V.jsx)(Mn,{value:e.id,label:(0,V.jsxs)(Nn,{children:[(0,V.jsx)(`span`,{children:e.title}),(0,V.jsx)(g,{component:`span`,className:`tab-actions`,size:`medium`,"aria-label":`${e.title} actions`,onClick:t=>p(t,e.id),children:(0,V.jsx)(Te,{})})]})},e.id))}),(0,V.jsx)(Pn,{variant:`outlined`,startIcon:(0,V.jsx)(Ee,{}),onClick:r,children:`New view`}),(0,V.jsxs)(l,{anchorEl:s,open:!!s,onClose:m,children:[(0,V.jsxs)(d,{onClick:()=>{h&&i(h),m()},children:[(0,V.jsx)(k,{children:(0,V.jsx)(kn,{fontSize:`small`})}),(0,V.jsx)(A,{children:`Edit`})]}),(0,V.jsxs)(d,{onClick:()=>{h&&a(h),m()},children:[(0,V.jsx)(k,{children:(0,V.jsx)(ve,{fontSize:`small`})}),(0,V.jsx)(A,{children:`Duplicate`})]}),(0,V.jsxs)(d,{onClick:()=>{h&&o(h),m()},children:[(0,V.jsx)(k,{children:(0,V.jsx)(xe,{fontSize:`small`})}),(0,V.jsx)(A,{children:`Delete`})]})]})]})},In=`50`,Ln=({option:e})=>(0,V.jsxs)(v,{sx:{display:`flex`,flexDirection:`column`},children:[(0,V.jsx)(_,{variant:`body2`,children:e.name}),e.project?(0,V.jsx)(_,{variant:`caption`,sx:{color:`text.secondary`},children:e.project}):null]}),Rn=({value:e,onChange:t,disabled:n})=>{let[r,i]=(0,L.useState)(``),[a,l]=(0,L.useState)(``),[d,f]=(0,L.useState)(!1),p=(0,L.useMemo)(()=>c(e=>{l(e)},250),[]),h=(0,L.useCallback)(({children:e,...t})=>(0,V.jsxs)(m,{...t,children:[(0,V.jsx)(u,{sx:{px:2,py:1},onMouseDown:e=>e.preventDefault(),control:(0,V.jsx)(Me,{size:`small`,checked:d,onChange:(e,t)=>f(t)}),label:(0,V.jsx)(_,{variant:`body2`,children:`Search archived features`})}),(0,V.jsx)(ee,{}),e]}),[d]),{features:g,loading:y}=N({query:a||void 0,limit:In,archived:d?`IS:true`:void 0}),b=g.map(({name:e,project:t})=>({name:e,project:t}));return(0,V.jsx)(o,{multiple:!0,disableCloseOnSelect:!0,disabled:n,loading:y,options:b,value:e.map(e=>b.find(t=>t.name===e)??{name:e,project:``}),inputValue:r,slots:{paper:h},onInputChange:(e,t,n)=>{n===`input`&&(i(t),p(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,L.createElement)(v,{component:`li`,...e,key:t.name},(0,V.jsx)(Ln,{option:t})),renderInput:t=>(0,V.jsx)(s,{...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(s)(({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=w(e.name);return{id:E(),metricName:e.name,displayName:e.displayName||e.name,aggregationMode:fe(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=w(e);return t===`unknown`?`Metric type could not be inferred.`:`${t.charAt(0).toUpperCase()}${t.slice(1)} metric`},Qn=({option:e})=>(0,V.jsxs)(v,{sx:{display:`flex`,flexDirection:`column`},children:[(0,V.jsx)(_,{variant:`body2`,children:e.displayName||e.name}),e.help?(0,V.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,V.jsxs)(Wn,{children:[(0,V.jsx)(u,{sx:{mr:0},"aria-label":`Mark ${i} as the goal`,control:(0,V.jsx)(f,{size:`small`,checked:!!e.goal,onChange:()=>t(e.id)}),label:(0,V.jsx)(_,{variant:`caption`,sx:{color:`text.secondary`},children:`Goal`}),labelPlacement:`bottom`}),(0,V.jsxs)(Gn,{children:[(0,V.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,V.jsxs)(qn,{title:e.metricName,children:[e.metricName,` · `,Zn(e.metricName)]})]}),(0,V.jsx)(x,{title:`Remove metric`,arrow:!0,children:(0,V.jsx)(g,{size:`medium`,"aria-label":`Remove ${i}`,onClick:()=>r(e.id),children:(0,V.jsx)(je,{})})})]})},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?fe(w(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}=_e(),{environments:c,loading:l}=ae(),[d,f]=(0,L.useReducer)(ir,t,tr);(0,L.useEffect)(()=>{e&&f({type:`reset`,form:tr(t)})},[e,t]);let p=d.metrics.map(e=>i.find(t=>t.name===e.metricName)??Xn(e)),m=c.length>0?c.map(e=>({key:e.name,label:e.name})):[{key:X,label:X}],h=d.title.trim().length>0&&d.metrics.length>0;return(0,V.jsx)(ke,{open:e,onClose:n,onClick:()=>{h&&r({title:d.title.trim(),featureNames:d.featureNames,metrics:d.metrics,timeRange:d.timeRange,environment:d.environment,showTopMovers:d.showTopMovers})},title:t?`Edit view`:`Create a new view`,primaryButtonText:t?`Save changes`:`Create view`,secondaryButtonText:`Cancel`,disabledPrimaryButton:!h,maxWidth:`md`,fullWidth:!0,children:(0,V.jsxs)(v,{sx:{display:`flex`,flexDirection:`column`,gap:3,pt:1},children:[(0,V.jsx)(s,{label:`View title`,value:d.title,onChange:e=>f({type:`setTitle`,title:e.target.value}),placeholder:`e.g. Checkout funnel`,size:`small`,autoFocus:!0,required:!0}),(0,V.jsxs)(Z,{children:[(0,V.jsx)(Un,{children:`Metrics`}),(0,V.jsx)(o,{multiple:!0,disableCloseOnSelect:!0,loading:a,options:i,value:p,onChange:(e,t)=>f({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,L.createElement)(v,{component:`li`,...e,key:`${t.source}__${t.name}`},(0,V.jsx)(Qn,{option:t})),renderInput:e=>(0,V.jsx)(s,{...e,placeholder:d.metrics.length===0?`Pick one or more metrics…`:`Add another metric…`,size:`small`,variant:`outlined`})}),(0,V.jsx)(Q,{children:`All selected metrics are drawn together on a single chart.`}),d.metrics.length>0?(0,V.jsx)(v,{sx:{display:`flex`,flexDirection:`column`,gap:1,mt:.5},children:d.metrics.map(e=>(0,V.jsx)($n,{metric:e,onSelectGoal:e=>f({type:`setGoal`,id:e}),onRename:(e,t)=>f({type:`renameMetric`,id:e,displayName:t}),onRemove:e=>f({type:`removeMetric`,id:e})},e.id))}):null]}),(0,V.jsx)(Rn,{value:d.featureNames,onChange:e=>f({type:`setFeatureNames`,featureNames:e})}),(0,V.jsxs)(v,{sx:{display:`flex`,gap:2,flexWrap:`wrap`},children:[(0,V.jsxs)(Z,{children:[(0,V.jsx)(M,{id:`view-aggregation`,labelId:`view-aggregation-label`,label:`Aggregation`,value:d.aggregationMode,options:Jn,onChange:e=>f({type:`setAggregation`,aggregationMode:e})}),(0,V.jsx)(Q,{children:`Applied to all metrics in this view.`})]}),(0,V.jsx)(Z,{children:(0,V.jsx)(M,{id:`view-time-range`,labelId:`view-time-range-label`,label:`Time range`,value:d.timeRange,options:Bn,onChange:e=>f({type:`setTimeRange`,timeRange:e})})}),(0,V.jsxs)(Z,{children:[(0,V.jsx)(M,{id:`view-environment`,labelId:`view-environment-label`,label:`Environment`,value:d.environment,options:m,disabled:l,onChange:e=>f({type:`setEnvironment`,environment:e})}),(0,V.jsx)(Q,{children:`Toggle events from this environment are drawn over the chart.`})]})]}),(0,V.jsxs)(Z,{children:[(0,V.jsx)(u,{control:(0,V.jsx)(Ce,{checked:d.showTopMovers,onChange:e=>f({type:`setShowTopMovers`,showTopMovers:e.target.checked})}),label:`Show top movers`}),(0,V.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(h)(({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,V.jsx)(ue,{header:(0,V.jsx)(le,{title:`Impact views`}),children:(0,V.jsxs)(sr,{children:[(0,V.jsx)(cr,{children:(0,V.jsx)(ze,{})}),(0,V.jsxs)(lr,{children:[(0,V.jsx)(_,{variant:`h3`,component:`h2`,sx:{mb:1.5},children:`Start telling a story with your metrics`}),(0,V.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,V.jsxs)(ur,{children:[(0,V.jsx)(y,{variant:`text`,href:or,target:`_blank`,rel:`noopener noreferrer`,children:`Read the docs`}),(0,V.jsx)(y,{variant:`contained`,startIcon:(0,V.jsx)(Ee,{}),onClick:e,children:`Create your first view`})]}),(0,V.jsxs)(dr,{severity:`info`,icon:(0,V.jsx)(De,{}),children:[(0,V.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}=N({query:t,limit:`100`}),{features:i,loading:a}=N({query:t,limit:`100`,archived:`IS:true`});return{features:(0,L.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}=Se({feature:`IS_ANY_OF:${e.join(`,`)}`,type:vr,environment:`IS:${t}`,limit:`1000`},{refreshInterval:3e4});return{featureEvents:(0,L.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]=j(xr,Cr),[n,r]=j(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,L.useCallback)(e=>{r(e??``)},[r]),addView:(0,L.useCallback)(e=>{let n=Date.now(),i={...e,id:E(),createdAt:n,updatedAt:n};return t(e=>[...e,i]),r(i.id),i},[t,r]),updateView:(0,L.useCallback)((e,n)=>{t(t=>t.map(t=>t.id===e?{...t,...n,updatedAt:Date.now()}:t))},[t]),deleteView:(0,L.useCallback)(e=>{t(t=>t.filter(t=>t.id!==e)),n===e&&r(``)},[t,n,r]),duplicateView:(0,L.useCallback)(n=>{let i=e.find(e=>e.id===n);if(!i)return null;let a=Date.now(),o={...i,id:E(),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,V.jsxs)(v,{sx:{display:`flex`,flexDirection:`column`,gap:3},children:[(0,V.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,V.jsx)(et,{goalMetricLabel:t.goalLabel,summary:t.goalSummary,series:t.goalSeries,timeLabel:n}):null,totalsMiddleSlot:e.showTopMovers?(0,V.jsx)(On,{impacts:t.flagImpacts,timeRange:e.timeRange,aggregationMode:r}):void 0}),(0,V.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,L.useState)({type:`closed`}),[u,d]=(0,L.useState)(null),f=()=>l({type:`create`}),p=e=>l({type:`edit`,view:e}),m=()=>l({type:`closed`});return(0,V.jsxs)(v,{sx:{pt:3,mt:-4},children:[e.length===0?(0,V.jsx)(fr,{onCreate:f}):(0,V.jsxs)(v,{sx:{display:`flex`,flexDirection:`column`,gap:3},children:[(0,V.jsx)(le,{title:`Impact views`,actions:(0,V.jsx)(me,{color:`info`,children:`Internal beta`})}),(0,V.jsx)(Fn,{views:e,activeViewId:n,onSelect:r,onCreate:f,onEdit:p,onDuplicate:e=>s(e.id),onDelete:d}),t?(0,V.jsx)(Tr,{view:t}):null]}),(0,V.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,V.jsx)(ke,{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};