unleash-server 8.0.0 → 8.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (501) hide show
  1. package/dist/lib/addons/addon.d.ts +10 -2
  2. package/dist/lib/addons/addon.d.ts.map +1 -1
  3. package/dist/lib/addons/addon.js +104 -6
  4. package/dist/lib/addons/addon.js.map +1 -1
  5. package/dist/lib/addons/datadog-definition.js +1 -1
  6. package/dist/lib/addons/datadog-definition.js.map +1 -1
  7. package/dist/lib/addons/datadog.test.js +2 -0
  8. package/dist/lib/addons/datadog.test.js.map +1 -1
  9. package/dist/lib/addons/index.d.ts.map +1 -1
  10. package/dist/lib/addons/index.js +2 -0
  11. package/dist/lib/addons/index.js.map +1 -1
  12. package/dist/lib/addons/new-relic.d.ts.map +1 -1
  13. package/dist/lib/addons/new-relic.js +0 -1
  14. package/dist/lib/addons/new-relic.js.map +1 -1
  15. package/dist/lib/addons/new-relic.test.js +0 -1
  16. package/dist/lib/addons/new-relic.test.js.map +1 -1
  17. package/dist/lib/addons/slack.test.js +1 -2
  18. package/dist/lib/addons/slack.test.js.map +1 -1
  19. package/dist/lib/addons/teams-definition.d.ts.map +1 -1
  20. package/dist/lib/addons/teams-definition.js +1 -0
  21. package/dist/lib/addons/teams-definition.js.map +1 -1
  22. package/dist/lib/addons/teams-workflow-definition.d.ts +4 -0
  23. package/dist/lib/addons/teams-workflow-definition.d.ts.map +1 -0
  24. package/dist/lib/addons/teams-workflow-definition.js +66 -0
  25. package/dist/lib/addons/teams-workflow-definition.js.map +1 -0
  26. package/dist/lib/addons/teams-workflow.d.ts +15 -0
  27. package/dist/lib/addons/teams-workflow.d.ts.map +1 -0
  28. package/dist/lib/addons/teams-workflow.js +110 -0
  29. package/dist/lib/addons/teams-workflow.js.map +1 -0
  30. package/dist/lib/addons/teams-workflow.test.d.ts +2 -0
  31. package/dist/lib/addons/teams-workflow.test.d.ts.map +1 -0
  32. package/dist/lib/addons/teams-workflow.test.js +202 -0
  33. package/dist/lib/addons/teams-workflow.test.js.map +1 -0
  34. package/dist/lib/addons/teams.d.ts.map +1 -1
  35. package/dist/lib/addons/teams.js +0 -1
  36. package/dist/lib/addons/teams.js.map +1 -1
  37. package/dist/lib/addons/teams.test.js +0 -1
  38. package/dist/lib/addons/teams.test.js.map +1 -1
  39. package/dist/lib/addons/validate-url.d.ts +18 -0
  40. package/dist/lib/addons/validate-url.d.ts.map +1 -0
  41. package/dist/lib/addons/validate-url.js +93 -0
  42. package/dist/lib/addons/validate-url.js.map +1 -0
  43. package/dist/lib/addons/validate-url.test.d.ts +2 -0
  44. package/dist/lib/addons/validate-url.test.d.ts.map +1 -0
  45. package/dist/lib/addons/validate-url.test.js +199 -0
  46. package/dist/lib/addons/validate-url.test.js.map +1 -0
  47. package/dist/lib/create-config.d.ts.map +1 -1
  48. package/dist/lib/create-config.js +7 -0
  49. package/dist/lib/create-config.js.map +1 -1
  50. package/dist/lib/db/session-store.d.ts +1 -0
  51. package/dist/lib/db/session-store.d.ts.map +1 -1
  52. package/dist/lib/db/session-store.js +6 -0
  53. package/dist/lib/db/session-store.js.map +1 -1
  54. package/dist/lib/error/bad-data-error.d.ts.map +1 -1
  55. package/dist/lib/error/bad-data-error.js +10 -2
  56. package/dist/lib/error/bad-data-error.js.map +1 -1
  57. package/dist/lib/error/unleash-error.test.js +23 -0
  58. package/dist/lib/error/unleash-error.test.js.map +1 -1
  59. package/dist/lib/features/client-feature-toggles/client-feature-toggle.controller.d.ts.map +1 -1
  60. package/dist/lib/features/client-feature-toggles/client-feature-toggle.controller.js +2 -0
  61. package/dist/lib/features/client-feature-toggles/client-feature-toggle.controller.js.map +1 -1
  62. package/dist/lib/features/constraints/constraints-controller.d.ts.map +1 -1
  63. package/dist/lib/features/constraints/constraints-controller.js +1 -0
  64. package/dist/lib/features/constraints/constraints-controller.js.map +1 -1
  65. package/dist/lib/features/context/context.d.ts.map +1 -1
  66. package/dist/lib/features/context/context.js +3 -1
  67. package/dist/lib/features/context/context.js.map +1 -1
  68. package/dist/lib/features/dependent-features/dependent-features-controller.d.ts.map +1 -1
  69. package/dist/lib/features/dependent-features/dependent-features-controller.js +6 -0
  70. package/dist/lib/features/dependent-features/dependent-features-controller.js.map +1 -1
  71. package/dist/lib/features/environments/environments-controller.d.ts.map +1 -1
  72. package/dist/lib/features/environments/environments-controller.js +6 -0
  73. package/dist/lib/features/environments/environments-controller.js.map +1 -1
  74. package/dist/lib/features/events/event-search-controller.d.ts.map +1 -1
  75. package/dist/lib/features/events/event-search-controller.js +1 -0
  76. package/dist/lib/features/events/event-search-controller.js.map +1 -1
  77. package/dist/lib/features/export-import-toggles/export-import-controller.d.ts.map +1 -1
  78. package/dist/lib/features/export-import-toggles/export-import-controller.js +3 -0
  79. package/dist/lib/features/export-import-toggles/export-import-controller.js.map +1 -1
  80. package/dist/lib/features/feature-search/feature-search-controller.d.ts.map +1 -1
  81. package/dist/lib/features/feature-search/feature-search-controller.js +1 -0
  82. package/dist/lib/features/feature-search/feature-search-controller.js.map +1 -1
  83. package/dist/lib/features/feature-search/feature-search-service.d.ts.map +1 -1
  84. package/dist/lib/features/feature-search/feature-search-service.js +5 -0
  85. package/dist/lib/features/feature-search/feature-search-service.js.map +1 -1
  86. package/dist/lib/features/feature-search/feature-search-store.d.ts +1 -1
  87. package/dist/lib/features/feature-search/feature-search-store.d.ts.map +1 -1
  88. package/dist/lib/features/feature-search/feature-search-store.js +60 -10
  89. package/dist/lib/features/feature-search/feature-search-store.js.map +1 -1
  90. package/dist/lib/features/feature-search/feature.search.e2e.test.js +77 -0
  91. package/dist/lib/features/feature-search/feature.search.e2e.test.js.map +1 -1
  92. package/dist/lib/features/feature-toggle/archive-feature-toggle-controller.d.ts.map +1 -1
  93. package/dist/lib/features/feature-toggle/archive-feature-toggle-controller.js +2 -0
  94. package/dist/lib/features/feature-toggle/archive-feature-toggle-controller.js.map +1 -1
  95. package/dist/lib/features/feature-toggle/feature-toggle-controller.d.ts.map +1 -1
  96. package/dist/lib/features/feature-toggle/feature-toggle-controller.js +21 -0
  97. package/dist/lib/features/feature-toggle/feature-toggle-controller.js.map +1 -1
  98. package/dist/lib/features/feature-toggle/legacy/feature-toggle-legacy-controller.d.ts.map +1 -1
  99. package/dist/lib/features/feature-toggle/legacy/feature-toggle-legacy-controller.js +5 -0
  100. package/dist/lib/features/feature-toggle/legacy/feature-toggle-legacy-controller.js.map +1 -1
  101. package/dist/lib/features/frontend-api/frontend-api-controller.d.ts.map +1 -1
  102. package/dist/lib/features/frontend-api/frontend-api-controller.js +4 -0
  103. package/dist/lib/features/frontend-api/frontend-api-controller.js.map +1 -1
  104. package/dist/lib/features/frontend-api/frontend-api-service.d.ts.map +1 -1
  105. package/dist/lib/features/frontend-api/frontend-api-service.js +17 -20
  106. package/dist/lib/features/frontend-api/frontend-api-service.js.map +1 -1
  107. package/dist/lib/features/maintenance/maintenance-controller.d.ts.map +1 -1
  108. package/dist/lib/features/maintenance/maintenance-controller.js +2 -0
  109. package/dist/lib/features/maintenance/maintenance-controller.js.map +1 -1
  110. package/dist/lib/features/metrics/client-metrics/client-metrics.d.ts.map +1 -1
  111. package/dist/lib/features/metrics/client-metrics/client-metrics.js +2 -0
  112. package/dist/lib/features/metrics/client-metrics/client-metrics.js.map +1 -1
  113. package/dist/lib/features/metrics/custom/custom-metrics-controller.d.ts.map +1 -1
  114. package/dist/lib/features/metrics/custom/custom-metrics-controller.js +2 -0
  115. package/dist/lib/features/metrics/custom/custom-metrics-controller.js.map +1 -1
  116. package/dist/lib/features/metrics/instance/metrics.d.ts.map +1 -1
  117. package/dist/lib/features/metrics/instance/metrics.js +3 -0
  118. package/dist/lib/features/metrics/instance/metrics.js.map +1 -1
  119. package/dist/lib/features/metrics/instance/register.d.ts.map +1 -1
  120. package/dist/lib/features/metrics/instance/register.js +1 -0
  121. package/dist/lib/features/metrics/instance/register.js.map +1 -1
  122. package/dist/lib/features/metrics/integrations/integration-metrics.d.ts +1 -1
  123. package/dist/lib/features/metrics/integrations/integration-metrics.d.ts.map +1 -1
  124. package/dist/lib/features/metrics/integrations/integration-metrics.js +2 -0
  125. package/dist/lib/features/metrics/integrations/integration-metrics.js.map +1 -1
  126. package/dist/lib/features/metrics/unknown-flags/unknown-flags-controller.d.ts.map +1 -1
  127. package/dist/lib/features/metrics/unknown-flags/unknown-flags-controller.js +1 -0
  128. package/dist/lib/features/metrics/unknown-flags/unknown-flags-controller.js.map +1 -1
  129. package/dist/lib/features/playground/playground.d.ts.map +1 -1
  130. package/dist/lib/features/playground/playground.js +2 -0
  131. package/dist/lib/features/playground/playground.js.map +1 -1
  132. package/dist/lib/features/project/project-controller.d.ts.map +1 -1
  133. package/dist/lib/features/project/project-controller.js +6 -0
  134. package/dist/lib/features/project/project-controller.js.map +1 -1
  135. package/dist/lib/features/project-environments/project-environments-controller.d.ts.map +1 -1
  136. package/dist/lib/features/project-environments/project-environments-controller.js +3 -0
  137. package/dist/lib/features/project-environments/project-environments-controller.js.map +1 -1
  138. package/dist/lib/features/project-insights/project-insights-controller.d.ts.map +1 -1
  139. package/dist/lib/features/project-insights/project-insights-controller.js +1 -0
  140. package/dist/lib/features/project-insights/project-insights-controller.js.map +1 -1
  141. package/dist/lib/features/project-status/project-lifecycle-read-model/project-lifecycle-summary-read-model.d.ts.map +1 -1
  142. package/dist/lib/features/project-status/project-lifecycle-read-model/project-lifecycle-summary-read-model.js +5 -2
  143. package/dist/lib/features/project-status/project-lifecycle-read-model/project-lifecycle-summary-read-model.js.map +1 -1
  144. package/dist/lib/features/project-status/project-lifecycle-read-model/project-lifecycle-summary-read-model.test.js +34 -0
  145. package/dist/lib/features/project-status/project-lifecycle-read-model/project-lifecycle-summary-read-model.test.js.map +1 -1
  146. package/dist/lib/features/segment/segment-controller.d.ts.map +1 -1
  147. package/dist/lib/features/segment/segment-controller.js +9 -0
  148. package/dist/lib/features/segment/segment-controller.js.map +1 -1
  149. package/dist/lib/features/tag-type/tag-type.d.ts.map +1 -1
  150. package/dist/lib/features/tag-type/tag-type.js +6 -0
  151. package/dist/lib/features/tag-type/tag-type.js.map +1 -1
  152. package/dist/lib/features/ui-observability-controller/ui-observability-controller.d.ts.map +1 -1
  153. package/dist/lib/features/ui-observability-controller/ui-observability-controller.js +1 -0
  154. package/dist/lib/features/ui-observability-controller/ui-observability-controller.js.map +1 -1
  155. package/dist/lib/middleware/secure-headers.d.ts.map +1 -1
  156. package/dist/lib/middleware/secure-headers.js +20 -1
  157. package/dist/lib/middleware/secure-headers.js.map +1 -1
  158. package/dist/lib/openapi/spec/addon-create-update-schema.d.ts +1 -1
  159. package/dist/lib/openapi/spec/addon-create-update-schema.js +1 -1
  160. package/dist/lib/openapi/spec/addons-schema.d.ts +15 -0
  161. package/dist/lib/openapi/spec/addons-schema.d.ts.map +1 -1
  162. package/dist/lib/openapi/spec/addons-schema.js +51 -0
  163. package/dist/lib/openapi/spec/addons-schema.js.map +1 -1
  164. package/dist/lib/openapi/spec/feature-search-query-parameters.d.ts +3 -2
  165. package/dist/lib/openapi/spec/feature-search-query-parameters.d.ts.map +1 -1
  166. package/dist/lib/openapi/spec/feature-search-query-parameters.js +3 -2
  167. package/dist/lib/openapi/spec/feature-search-query-parameters.js.map +1 -1
  168. package/dist/lib/openapi/spec/profile-schema.d.ts +6 -1
  169. package/dist/lib/openapi/spec/profile-schema.d.ts.map +1 -1
  170. package/dist/lib/openapi/spec/profile-schema.js +13 -1
  171. package/dist/lib/openapi/spec/profile-schema.js.map +1 -1
  172. package/dist/lib/openapi/spec/profile-schema.test.js +1 -0
  173. package/dist/lib/openapi/spec/profile-schema.test.js.map +1 -1
  174. package/dist/lib/openapi/util/api-operation.d.ts +1 -1
  175. package/dist/lib/openapi/util/api-stability.js +1 -1
  176. package/dist/lib/openapi/util/api-stability.test.js +8 -5
  177. package/dist/lib/openapi/util/api-stability.test.js.map +1 -1
  178. package/dist/lib/routes/admin-api/addon.d.ts.map +1 -1
  179. package/dist/lib/routes/admin-api/addon.js +12 -2
  180. package/dist/lib/routes/admin-api/addon.js.map +1 -1
  181. package/dist/lib/routes/admin-api/api-token.d.ts.map +1 -1
  182. package/dist/lib/routes/admin-api/api-token.js +5 -0
  183. package/dist/lib/routes/admin-api/api-token.js.map +1 -1
  184. package/dist/lib/routes/admin-api/event.d.ts.map +1 -1
  185. package/dist/lib/routes/admin-api/event.js +3 -0
  186. package/dist/lib/routes/admin-api/event.js.map +1 -1
  187. package/dist/lib/routes/admin-api/favorites.d.ts.map +1 -1
  188. package/dist/lib/routes/admin-api/favorites.js +4 -0
  189. package/dist/lib/routes/admin-api/favorites.js.map +1 -1
  190. package/dist/lib/routes/admin-api/feature-type.d.ts.map +1 -1
  191. package/dist/lib/routes/admin-api/feature-type.js +2 -0
  192. package/dist/lib/routes/admin-api/feature-type.js.map +1 -1
  193. package/dist/lib/routes/admin-api/instance-admin.d.ts.map +1 -1
  194. package/dist/lib/routes/admin-api/instance-admin.js +2 -0
  195. package/dist/lib/routes/admin-api/instance-admin.js.map +1 -1
  196. package/dist/lib/routes/admin-api/metrics.d.ts.map +1 -1
  197. package/dist/lib/routes/admin-api/metrics.js +7 -0
  198. package/dist/lib/routes/admin-api/metrics.js.map +1 -1
  199. package/dist/lib/routes/admin-api/project/api-token.d.ts.map +1 -1
  200. package/dist/lib/routes/admin-api/project/api-token.js +3 -0
  201. package/dist/lib/routes/admin-api/project/api-token.js.map +1 -1
  202. package/dist/lib/routes/admin-api/project/health-report.d.ts.map +1 -1
  203. package/dist/lib/routes/admin-api/project/health-report.js +1 -0
  204. package/dist/lib/routes/admin-api/project/health-report.js.map +1 -1
  205. package/dist/lib/routes/admin-api/project/project-archive.d.ts.map +1 -1
  206. package/dist/lib/routes/admin-api/project/project-archive.js +4 -0
  207. package/dist/lib/routes/admin-api/project/project-archive.js.map +1 -1
  208. package/dist/lib/routes/admin-api/project/variants.d.ts.map +1 -1
  209. package/dist/lib/routes/admin-api/project/variants.js +4 -0
  210. package/dist/lib/routes/admin-api/project/variants.js.map +1 -1
  211. package/dist/lib/routes/admin-api/public-signup.d.ts.map +1 -1
  212. package/dist/lib/routes/admin-api/public-signup.js +4 -0
  213. package/dist/lib/routes/admin-api/public-signup.js.map +1 -1
  214. package/dist/lib/routes/admin-api/strategy.d.ts.map +1 -1
  215. package/dist/lib/routes/admin-api/strategy.js +7 -0
  216. package/dist/lib/routes/admin-api/strategy.js.map +1 -1
  217. package/dist/lib/routes/admin-api/tag.d.ts.map +1 -1
  218. package/dist/lib/routes/admin-api/tag.js +5 -0
  219. package/dist/lib/routes/admin-api/tag.js.map +1 -1
  220. package/dist/lib/routes/admin-api/telemetry.d.ts.map +1 -1
  221. package/dist/lib/routes/admin-api/telemetry.js +1 -0
  222. package/dist/lib/routes/admin-api/telemetry.js.map +1 -1
  223. package/dist/lib/routes/admin-api/user/pat.d.ts.map +1 -1
  224. package/dist/lib/routes/admin-api/user/pat.js +3 -0
  225. package/dist/lib/routes/admin-api/user/pat.js.map +1 -1
  226. package/dist/lib/routes/admin-api/user/user.d.ts.map +1 -1
  227. package/dist/lib/routes/admin-api/user/user.js +11 -2
  228. package/dist/lib/routes/admin-api/user/user.js.map +1 -1
  229. package/dist/lib/routes/admin-api/user/user.test.js +56 -6
  230. package/dist/lib/routes/admin-api/user/user.test.js.map +1 -1
  231. package/dist/lib/routes/admin-api/user-admin.d.ts.map +1 -1
  232. package/dist/lib/routes/admin-api/user-admin.js +12 -0
  233. package/dist/lib/routes/admin-api/user-admin.js.map +1 -1
  234. package/dist/lib/routes/admin-api/user-feedback.d.ts.map +1 -1
  235. package/dist/lib/routes/admin-api/user-feedback.js +2 -0
  236. package/dist/lib/routes/admin-api/user-feedback.js.map +1 -1
  237. package/dist/lib/routes/admin-api/user-splash.d.ts.map +1 -1
  238. package/dist/lib/routes/admin-api/user-splash.js +1 -0
  239. package/dist/lib/routes/admin-api/user-splash.js.map +1 -1
  240. package/dist/lib/routes/auth/reset-password-controller.d.ts.map +1 -1
  241. package/dist/lib/routes/auth/reset-password-controller.js +4 -0
  242. package/dist/lib/routes/auth/reset-password-controller.js.map +1 -1
  243. package/dist/lib/routes/auth/simple-password-provider.d.ts.map +1 -1
  244. package/dist/lib/routes/auth/simple-password-provider.js +1 -0
  245. package/dist/lib/routes/auth/simple-password-provider.js.map +1 -1
  246. package/dist/lib/routes/edge-api/index.d.ts.map +1 -1
  247. package/dist/lib/routes/edge-api/index.js +1 -0
  248. package/dist/lib/routes/edge-api/index.js.map +1 -1
  249. package/dist/lib/routes/health-check.d.ts.map +1 -1
  250. package/dist/lib/routes/health-check.js +1 -0
  251. package/dist/lib/routes/health-check.js.map +1 -1
  252. package/dist/lib/routes/public-invite.d.ts.map +1 -1
  253. package/dist/lib/routes/public-invite.js +2 -0
  254. package/dist/lib/routes/public-invite.js.map +1 -1
  255. package/dist/lib/routes/ready-check.d.ts.map +1 -1
  256. package/dist/lib/routes/ready-check.js +1 -0
  257. package/dist/lib/routes/ready-check.js.map +1 -1
  258. package/dist/lib/routes/util.d.ts.map +1 -1
  259. package/dist/lib/routes/util.js +8 -1
  260. package/dist/lib/routes/util.js.map +1 -1
  261. package/dist/lib/routes/util.test.d.ts +2 -0
  262. package/dist/lib/routes/util.test.d.ts.map +1 -0
  263. package/dist/lib/routes/util.test.js +18 -0
  264. package/dist/lib/routes/util.test.js.map +1 -0
  265. package/dist/lib/schema/html-input.d.ts +4 -0
  266. package/dist/lib/schema/html-input.d.ts.map +1 -0
  267. package/dist/lib/schema/html-input.js +38 -0
  268. package/dist/lib/schema/html-input.js.map +1 -0
  269. package/dist/lib/schema/html-input.test.d.ts +2 -0
  270. package/dist/lib/schema/html-input.test.d.ts.map +1 -0
  271. package/dist/lib/schema/html-input.test.js +98 -0
  272. package/dist/lib/schema/html-input.test.js.map +1 -0
  273. package/dist/lib/server-impl.d.ts +2 -1
  274. package/dist/lib/server-impl.d.ts.map +1 -1
  275. package/dist/lib/server-impl.js +2 -1
  276. package/dist/lib/server-impl.js.map +1 -1
  277. package/dist/lib/services/addon-service.d.ts +8 -1
  278. package/dist/lib/services/addon-service.d.ts.map +1 -1
  279. package/dist/lib/services/addon-service.js +24 -1
  280. package/dist/lib/services/addon-service.js.map +1 -1
  281. package/dist/lib/services/addon-service.test.js +75 -8
  282. package/dist/lib/services/addon-service.test.js.map +1 -1
  283. package/dist/lib/services/openapi-service.d.ts +2 -6
  284. package/dist/lib/services/openapi-service.d.ts.map +1 -1
  285. package/dist/lib/services/openapi-service.js.map +1 -1
  286. package/dist/lib/services/project-schema.d.ts +1 -2
  287. package/dist/lib/services/project-schema.d.ts.map +1 -1
  288. package/dist/lib/services/project-schema.js +4 -2
  289. package/dist/lib/services/project-schema.js.map +1 -1
  290. package/dist/lib/services/session-service.d.ts +6 -0
  291. package/dist/lib/services/session-service.d.ts.map +1 -1
  292. package/dist/lib/services/session-service.js +8 -0
  293. package/dist/lib/services/session-service.js.map +1 -1
  294. package/dist/lib/services/user-service.d.ts +18 -5
  295. package/dist/lib/services/user-service.d.ts.map +1 -1
  296. package/dist/lib/services/user-service.js +27 -7
  297. package/dist/lib/services/user-service.js.map +1 -1
  298. package/dist/lib/services/user-service.test.js +68 -0
  299. package/dist/lib/services/user-service.test.js.map +1 -1
  300. package/dist/lib/types/experimental.d.ts +1 -1
  301. package/dist/lib/types/experimental.d.ts.map +1 -1
  302. package/dist/lib/types/experimental.js +23 -2
  303. package/dist/lib/types/experimental.js.map +1 -1
  304. package/dist/lib/types/model.d.ts +2 -0
  305. package/dist/lib/types/model.d.ts.map +1 -1
  306. package/dist/lib/types/model.js.map +1 -1
  307. package/dist/lib/types/option.d.ts +4 -0
  308. package/dist/lib/types/option.d.ts.map +1 -1
  309. package/dist/lib/types/stores/session-store.d.ts +1 -0
  310. package/dist/lib/types/stores/session-store.d.ts.map +1 -1
  311. package/dist/lib/ui-config/ui-config-controller.d.ts.map +1 -1
  312. package/dist/lib/ui-config/ui-config-controller.js +2 -0
  313. package/dist/lib/ui-config/ui-config-controller.js.map +1 -1
  314. package/dist/lib/ui-config/ui-config-service.d.ts.map +1 -1
  315. package/dist/lib/ui-config/ui-config-service.js +4 -2
  316. package/dist/lib/ui-config/ui-config-service.js.map +1 -1
  317. package/dist/lib/ui-config/ui-config.test.js +21 -2
  318. package/dist/lib/ui-config/ui-config.test.js.map +1 -1
  319. package/dist/lib/users/inactive/inactive-users-controller.d.ts.map +1 -1
  320. package/dist/lib/users/inactive/inactive-users-controller.js +2 -0
  321. package/dist/lib/users/inactive/inactive-users-controller.js.map +1 -1
  322. package/dist/lib/util/anonymise.d.ts +1 -0
  323. package/dist/lib/util/anonymise.d.ts.map +1 -1
  324. package/dist/lib/util/anonymise.js +3 -0
  325. package/dist/lib/util/anonymise.js.map +1 -1
  326. package/dist/lib/util/anonymise.test.js +4 -1
  327. package/dist/lib/util/anonymise.test.js.map +1 -1
  328. package/dist/migrations/20260617115403-update-flag-descriptions.d.ts +3 -0
  329. package/dist/migrations/20260617115403-update-flag-descriptions.d.ts.map +1 -0
  330. package/dist/migrations/20260617115403-update-flag-descriptions.js +38 -0
  331. package/dist/migrations/20260617115403-update-flag-descriptions.js.map +1 -0
  332. package/dist/migrations/20260624120000-servicenow-change-references.d.ts +3 -0
  333. package/dist/migrations/20260624120000-servicenow-change-references.d.ts.map +1 -0
  334. package/dist/migrations/20260624120000-servicenow-change-references.js +22 -0
  335. package/dist/migrations/20260624120000-servicenow-change-references.js.map +1 -0
  336. package/dist/server-dev.js +6 -1
  337. package/dist/server-dev.js.map +1 -1
  338. package/dist/test/e2e/api/admin/addon.e2e.test.js +2 -1
  339. package/dist/test/e2e/api/admin/addon.e2e.test.js.map +1 -1
  340. package/dist/test/e2e/services/addon-service.e2e.test.js +2 -0
  341. package/dist/test/e2e/services/addon-service.e2e.test.js.map +1 -1
  342. package/dist/test/e2e/services/session-service.e2e.test.js +11 -0
  343. package/dist/test/e2e/services/session-service.e2e.test.js.map +1 -1
  344. package/dist/test/fixtures/fake-session-store.d.ts +1 -0
  345. package/dist/test/fixtures/fake-session-store.d.ts.map +1 -1
  346. package/dist/test/fixtures/fake-session-store.js +3 -0
  347. package/dist/test/fixtures/fake-session-store.js.map +1 -1
  348. package/frontend/build/index.html +2 -2
  349. package/frontend/build/static/AccordionSummary-wye3oOm6.js +1 -0
  350. package/frontend/build/static/AdvancedPlayground-DdeMb-6I.js +3 -0
  351. package/frontend/build/static/Alert-_bLyWbvx.js +1 -0
  352. package/frontend/build/static/BackendConnections-kgR0xyIH.js +1 -0
  353. package/frontend/build/static/Box-BQsxfFmC.js +1 -0
  354. package/frontend/build/static/Button-CebB8EPB.js +1 -0
  355. package/frontend/build/static/CircularProgress-C_LUU3DK.js +101 -0
  356. package/frontend/build/static/Close-DyTASMSq.js +1 -0
  357. package/frontend/build/static/Collapse-DPPTUMpf.js +1 -0
  358. package/frontend/build/static/ConditionallyRender---uTpMBn.js +1 -0
  359. package/frontend/build/static/CreateProject-BSlg0WYM.js +1 -0
  360. package/frontend/build/static/Dialog-C-xQxqWX.js +1 -0
  361. package/frontend/build/static/DialogWithAside-DzCSDyWo.js +1110 -0
  362. package/frontend/build/static/Divider-CsdWvu5F.js +1 -0
  363. package/frontend/build/static/EnterpriseEdge-CjslqYDM.js +6 -0
  364. package/frontend/build/static/FeatureMetricsChart-B4WryxcW.js +2 -0
  365. package/frontend/build/static/FeatureStaleDialog-EzReRTI5.js +8 -0
  366. package/frontend/build/static/FeatureViewLazyExport-8eQKTvdS.js +10 -0
  367. package/frontend/build/static/FileCopy-B8HZEA83.js +1 -0
  368. package/frontend/build/static/FlagMetricsChart-hNQuwOxW.js +2 -0
  369. package/frontend/build/static/FormControlLabel-F5gDLixN.js +1 -0
  370. package/frontend/build/static/FrontendNetworkTrafficUsage-pcr83PWo.js +1 -0
  371. package/frontend/build/static/GridLayoutWrapper-B_YyjZ7l.js +5 -0
  372. package/frontend/build/static/Grow-BIbmvKVy.js +1 -0
  373. package/frontend/build/static/HelpOutlineOutlined-CpMsVJZu.js +1 -0
  374. package/frontend/build/static/Highlighter-MomUaQww.js +1 -0
  375. package/frontend/build/static/HtmlTooltip-B9jv1G1R.js +1 -0
  376. package/frontend/build/static/ImpactMetricsPage-DGH_S9oz.js +1 -0
  377. package/frontend/build/static/ImpactViewsPage-DZqKPFvE.js +1 -0
  378. package/frontend/build/static/LazyAdminExport-B1ReAViz.js +38 -0
  379. package/frontend/build/static/LazyProjectExport-BMVcGpNI.js +46 -0
  380. package/frontend/build/static/LifecycleChartComponent-BeoRUO9q.js +2 -0
  381. package/frontend/build/static/LineChartComponent-BbCMbJ-m.js +1 -0
  382. package/frontend/build/static/Link-CfIScd2f.js +1 -0
  383. package/frontend/build/static/Loader-DdgXftPc.js +1 -0
  384. package/frontend/build/static/{LogRocketRunner-D_e4hzJQ.js → LogRocketRunner-Duzg1Kzh.js} +4 -4
  385. package/frontend/build/static/Logo-nextjs-DCzT4YXr.svg +1 -0
  386. package/frontend/build/static/Logo-react-CyIpikqs.svg +10 -0
  387. package/frontend/build/static/Logo-reactnative-DZ9HKW2l.svg +10 -0
  388. package/frontend/build/static/MarkCompletedDialogue-CcXyp8UE.js +1 -0
  389. package/frontend/build/static/NetworkOverview-0mBnFAZX.js +1 -0
  390. package/frontend/build/static/NetworkPrometheusAPIWarning-Bq62ygkV.js +1 -0
  391. package/frontend/build/static/NetworkTraffic-DmG5Iv25.js +1 -0
  392. package/frontend/build/static/NetworkTrafficUsage-DccaVLYs.js +1 -0
  393. package/frontend/build/static/OnboardingProgress-Bp9sZ-ZM.js +1 -0
  394. package/frontend/build/static/PageContent-c0NDm5oD.js +1 -0
  395. package/frontend/build/static/PercentageDonut-DBDGNJlh.js +1 -0
  396. package/frontend/build/static/PermissionButton-B-IfzChn.js +1 -0
  397. package/frontend/build/static/Popover-CUTnSn2h.js +1 -0
  398. package/frontend/build/static/Radio-DL8ja0ll.js +1 -0
  399. package/frontend/build/static/RadioGroup-Ci3WHaOy.js +1 -0
  400. package/frontend/build/static/ReactJSONEditor-DeBI7JPg.js +4 -0
  401. package/frontend/build/static/RoleCell-DhYvu4YH.js +1 -0
  402. package/frontend/build/static/Safeguard-DErU6fSK.js +1 -0
  403. package/frontend/build/static/SelectSdk-Dr_pzQgX.js +2 -0
  404. package/frontend/build/static/StoriesPage-frGP1Bfr.js +2 -0
  405. package/frontend/build/static/SwitchBase-DWPIxZnN.js +1 -0
  406. package/frontend/build/static/TextField-oipjeg6n.js +3 -0
  407. package/frontend/build/static/Tooltip-BaILXXti.js +1 -0
  408. package/frontend/build/static/TooltipResolver-4A1YhwBy.js +1 -0
  409. package/frontend/build/static/Truncator-D2bO9ub6.js +1 -0
  410. package/frontend/build/static/Typography-BTdLWIUX.js +1 -0
  411. package/frontend/build/static/aggregateFeatureMetrics-B-67HaIZ.js +1 -0
  412. package/frontend/build/static/chartjs-plugin-annotation.esm-DP4wCpdA.js +1 -0
  413. package/frontend/build/static/chunk-QUQL4437-Dr42NpoL.js +3 -0
  414. package/frontend/build/static/createBox-Cf2UJsmc.js +1 -0
  415. package/frontend/build/static/createLocalStorage-WS-MCMlG.js +1 -0
  416. package/frontend/build/static/createSimplePaletteValueFilter-BRAMrHWJ.js +1 -0
  417. package/frontend/build/static/differenceInSeconds-DMZGQwjK.js +1 -0
  418. package/frontend/build/static/dividerClasses-Cc45lyWo.js +1 -0
  419. package/frontend/build/static/endOfMonth-CkSR_DAx.js +1 -0
  420. package/frontend/build/static/{enterpriseEdgeCloud-DtcZf9iv.js → enterpriseEdgeCloud-C5u35XAw.js} +1 -1
  421. package/frontend/build/static/esm-DdgY1Q5s.js +12 -0
  422. package/frontend/build/static/format-C8UVjLNw.js +1 -0
  423. package/frontend/build/static/formatDate-cFuM4JYl.js +1 -0
  424. package/frontend/build/static/formatDistanceToNow-CyouiCIY.js +1 -0
  425. package/frontend/build/static/httpErrorResponseHandler-FMtt7Zqh.js +1 -0
  426. package/frontend/build/static/{impact-metrics-icon-1LLLS-bG.js → impact-metrics-icon-6dt-ye-h.js} +1 -1
  427. package/frontend/build/static/index-C04TEs4k.js +290 -0
  428. package/frontend/build/static/jsx-runtime-BnvnyDTF.js +1 -0
  429. package/frontend/build/static/metricsFormatters-DhX-aU17.js +1 -0
  430. package/frontend/build/static/mui-CoU2c-id.js +5 -0
  431. package/frontend/build/static/networkTrafficUsageHighlightPlugin-DlOtHZg3.js +1 -0
  432. package/frontend/build/static/parse-Chj4PyAg.js +1 -0
  433. package/frontend/build/static/parseISO-Cup6hyvQ.js +1 -0
  434. package/frontend/build/static/{react-DW1tWzGJ.js → react-GZhdek4G.js} +1 -1
  435. package/frontend/build/static/startOfHour-P0Sr6h8e.js +1 -0
  436. package/frontend/build/static/testIds-B_Ev-uQn.js +1 -0
  437. package/frontend/build/static/themeStyles-DGVpwkcv.js +1 -0
  438. package/frontend/build/static/useApiGetter-7FP8Avm4.js +1 -0
  439. package/frontend/build/static/useApiTokens-C8Dqw_X1.js +1 -0
  440. package/frontend/build/static/useConditionalSWR-DGgzun6i.js +1 -0
  441. package/frontend/build/static/useConditionallyHiddenColumns-C5q9zdfJ.js +5 -0
  442. package/frontend/build/static/useCustomEvent-Dj2V5RVb.js +1 -0
  443. package/frontend/build/static/useEnvironments-CTguhgy0.js +2 -0
  444. package/frontend/build/static/useGroupedImpactMetricsData-CW9qnV2y.js +1 -0
  445. package/frontend/build/static/useImpactMetrics-9qDSEpTn.js +3 -0
  446. package/frontend/build/static/useImpactMetricsEnabled-wRNO6-Oh.js +1 -0
  447. package/frontend/build/static/useInstanceTrafficMetrics-CRCDB4TX.js +1 -0
  448. package/frontend/build/static/useMediaQuery-DGx8zAkf.js +2 -0
  449. package/frontend/build/static/useOptionalPathParam-Cx3ru9yC.js +1 -0
  450. package/frontend/build/static/usePageTitle-CHzzFshF.js +1 -0
  451. package/frontend/build/static/useTheme-CQqAmDLr.js +9 -0
  452. package/frontend/build/static/useUiConfig-DbVjTDpE.js +1 -0
  453. package/frontend/package.json +13 -13
  454. package/package.json +13 -11
  455. package/frontend/build/static/AdvancedPlayground-Dc5CjsH6.js +0 -3
  456. package/frontend/build/static/BackendConnections-BzoyVkqE.js +0 -1
  457. package/frontend/build/static/CreateProject-CARqyXgr.js +0 -1
  458. package/frontend/build/static/DialogWithAside-CtKlvRxJ.js +0 -947
  459. package/frontend/build/static/EnterpriseEdge-6F99gSET.js +0 -6
  460. package/frontend/build/static/FeatureMetricsChart-CCUsCbvl.js +0 -2
  461. package/frontend/build/static/FeatureStaleDialog-IRgDg5x8.js +0 -8
  462. package/frontend/build/static/FeatureViewLazyExport-7dlvG8T-.js +0 -10
  463. package/frontend/build/static/FlagMetricsChart-CQCEqI6k.js +0 -2
  464. package/frontend/build/static/FrontendNetworkTrafficUsage-CdHe-oU2.js +0 -1
  465. package/frontend/build/static/GridLayoutWrapper-L_W9K-dV.js +0 -3
  466. package/frontend/build/static/ImpactMetricsPage-0OKGAVog.js +0 -1
  467. package/frontend/build/static/ImpactViewsPage-CdwvIuE9.js +0 -1
  468. package/frontend/build/static/LazyAdminExport-lAWqz1Kg.js +0 -38
  469. package/frontend/build/static/LazyProjectExport-CjjWWq5H.js +0 -46
  470. package/frontend/build/static/LifecycleChartComponent-Dw7X54qU.js +0 -2
  471. package/frontend/build/static/LineChartComponent-D81JPWi4.js +0 -1
  472. package/frontend/build/static/Logo-react-D2SuVol5.svg +0 -1
  473. package/frontend/build/static/MarkCompletedDialogue-vW74sVuW.js +0 -1
  474. package/frontend/build/static/NetworkOverview-Dx3Yhmnr.js +0 -1
  475. package/frontend/build/static/NetworkPrometheusAPIWarning-BlbOSbDW.js +0 -1
  476. package/frontend/build/static/NetworkTraffic-CJI952Qr.js +0 -1
  477. package/frontend/build/static/NetworkTrafficUsage-DP83K2Q6.js +0 -1
  478. package/frontend/build/static/OnboardingProgress-DECLEUJE.js +0 -1
  479. package/frontend/build/static/PercentageDonut-CV__KCpE.js +0 -1
  480. package/frontend/build/static/ReactJSONEditor-D4-lWgEb.js +0 -4
  481. package/frontend/build/static/RoleCell-0_ZJUpz5.js +0 -1
  482. package/frontend/build/static/Safeguard-B93Tz6lG.js +0 -1
  483. package/frontend/build/static/SelectSdk-Cxw0QOfY.js +0 -2
  484. package/frontend/build/static/StoriesPage-ZDw2ahU0.js +0 -1
  485. package/frontend/build/static/aggregateFeatureMetrics-Byd95jx-.js +0 -1
  486. package/frontend/build/static/chart-CG3XAKw_.js +0 -3
  487. package/frontend/build/static/chartjs-plugin-annotation.esm-bUcqmHD4.js +0 -1
  488. package/frontend/build/static/esm-LYuUsJ00.js +0 -15
  489. package/frontend/build/static/index-DIBimazR.js +0 -409
  490. package/frontend/build/static/networkTrafficUsageHighlightPlugin-C8avnJ5K.js +0 -1
  491. package/frontend/build/static/objectId-CwvEBicG.js +0 -1
  492. package/frontend/build/static/useApiTokens-CdZD_-zn.js +0 -1
  493. package/frontend/build/static/useGroupedImpactMetricsData-D2KwIe7Z.js +0 -1
  494. package/frontend/build/static/useImpactMetricsEnabled-Yb36cM6y.js +0 -1
  495. package/frontend/build/static/useInstanceTrafficMetrics-CcZqSYy1.js +0 -1
  496. /package/frontend/build/static/{daysOrHours-DZ037Bzn.js → daysOrHours-owFAL-4S.js} +0 -0
  497. /package/frontend/build/static/{formatPath-vbOoY_VU.js → formatPath-j72gcKwy.js} +0 -0
  498. /package/frontend/build/static/{formatTickValue-xCLMih6P.js → formatTickValue-DWHZUXee.js} +0 -0
  499. /package/frontend/build/static/{storage-DS1Ts5PA.js → storage-tBZ25pJM.js} +0 -0
  500. /package/frontend/build/static/{toDate-JUEZGP0n.js → toDate-BEKdmfOu.js} +0 -0
  501. /package/frontend/build/static/{unknownify-D0N8k6Ch.js → unknownify-CCAQc7w1.js} +0 -0
@@ -1,2 +0,0 @@
1
- import{o as e,t}from"./react-DW1tWzGJ.js";import{B as n,E as r,F as i,H as a,O as o,R as s,U as c,a as l,d as u,f as d,g as f,h as p,i as m,j as h,n as g,o as _,p as v,q as ee,v as te,z as y}from"./chart-CG3XAKw_.js";import{Jd as b,Lt as ne,df as re,f as ie,gc as ae}from"./index-DIBimazR.js";var oe=e(t(),1),se=e(ie(),1),x=function(){if(typeof window<`u`){if(window.devicePixelRatio)return window.devicePixelRatio;var e=window.screen;if(e)return(e.deviceXDPI||1)/(e.logicalXDPI||1)}return 1}(),S={toTextLines:function(e){var t=[],n;for(e=[].concat(e);e.length;)n=e.pop(),typeof n==`string`?t.unshift.apply(t,n.split(`
2
- `)):Array.isArray(n)?e.push.apply(e,n):i(e)||t.unshift(``+n);return t},textSize:function(e,t,n){var r=[].concat(t),i=r.length,a=e.font,o=0,s;for(e.font=n.string,s=0;s<i;++s)o=Math.max(e.measureText(r[s]).width,o);return e.font=a,{height:i*n.lineHeight,width:o}},bound:function(e,t,n){return Math.max(e,Math.min(t,n))},arrayDiff:function(e,t){var n=e.slice(),r=[],i,a,o,s;for(i=0,o=t.length;i<o;++i)s=t[i],a=n.indexOf(s),a===-1?r.push([s,1]):n.splice(a,1);for(i=0,o=n.length;i<o;++i)r.push([n[i],-1]);return r},rasterize:function(e){return Math.round(e*x)/x}};function C(e,t){var n=t.x,r=t.y;if(n===null)return{x:0,y:-1};if(r===null)return{x:1,y:0};var i=e.x-n,a=e.y-r,o=Math.sqrt(i*i+a*a);return{x:o?i/o:0,y:o?a/o:-1}}function w(e,t,n,r,i){switch(i){case`center`:n=r=0;break;case`bottom`:n=0,r=1;break;case`right`:n=1,r=0;break;case`left`:n=-1,r=0;break;case`top`:n=0,r=-1;break;case`start`:n=-n,r=-r;break;case`end`:break;default:i*=Math.PI/180,n=Math.cos(i),r=Math.sin(i);break}return{x:e,y:t,vx:n,vy:r}}var T=0,E=1,D=2,O=4,k=8;function A(e,t,n){var r=T;return e<n.left?r|=E:e>n.right&&(r|=D),t<n.top?r|=k:t>n.bottom&&(r|=O),r}function ce(e,t){for(var n=e.x0,r=e.y0,i=e.x1,a=e.y1,o=A(n,r,t),s=A(i,a,t),c,l,u;!(!(o|s)||o&s);)c=o||s,c&k?(l=n+(i-n)*(t.top-r)/(a-r),u=t.top):c&O?(l=n+(i-n)*(t.bottom-r)/(a-r),u=t.bottom):c&D?(u=r+(a-r)*(t.right-n)/(i-n),l=t.right):c&E&&(u=r+(a-r)*(t.left-n)/(i-n),l=t.left),c===o?(n=l,r=u,o=A(n,r,t)):(i=l,a=u,s=A(i,a,t));return{x0:n,x1:i,y0:r,y1:a}}function j(e,t){var n=t.anchor,r=e,i,a;return t.clamp&&(r=ce(r,t.area)),n===`start`?(i=r.x0,a=r.y0):n===`end`?(i=r.x1,a=r.y1):(i=(r.x0+r.x1)/2,a=(r.y0+r.y1)/2),w(i,a,e.vx,e.vy,t.align)}var M={arc:function(e,t){var n=(e.startAngle+e.endAngle)/2,r=Math.cos(n),i=Math.sin(n),a=e.innerRadius,o=e.outerRadius;return j({x0:e.x+r*a,y0:e.y+i*a,x1:e.x+r*o,y1:e.y+i*o,vx:r,vy:i},t)},point:function(e,t){var n=C(e,t.origin),r=n.x*e.options.radius,i=n.y*e.options.radius;return j({x0:e.x-r,y0:e.y-i,x1:e.x+r,y1:e.y+i,vx:n.x,vy:n.y},t)},bar:function(e,t){var n=C(e,t.origin),r=e.x,i=e.y,a=0,o=0;return e.horizontal?(r=Math.min(e.x,e.base),a=Math.abs(e.base-e.x)):(i=Math.min(e.y,e.base),o=Math.abs(e.base-e.y)),j({x0:r,y0:i+o,x1:r+a,y1:i,vx:n.x,vy:n.y},t)},fallback:function(e,t){var n=C(e,t.origin);return j({x0:e.x,y0:e.y,x1:e.x+(e.width||0),y1:e.y+(e.height||0),vx:n.x,vy:n.y},t)}},N=S.rasterize;function le(e){var t=e.borderWidth||0,n=e.padding,r=e.size.height,i=e.size.width,a=-i/2,o=-r/2;return{frame:{x:a-n.left-t,y:o-n.top-t,w:i+n.width+t*2,h:r+n.height+t*2},text:{x:a,y:o,w:i,h:r}}}function P(e,t){var n=t.chart.getDatasetMeta(t.datasetIndex).vScale;if(!n)return null;if(n.xCenter!==void 0&&n.yCenter!==void 0)return{x:n.xCenter,y:n.yCenter};var r=n.getBasePixel();return e.horizontal?{x:r,y:null}:{x:null,y:r}}function F(e){return e instanceof g?M.arc:e instanceof d?M.point:e instanceof m?M.bar:M.fallback}function I(e,t,n,r,i,a){var o=Math.PI/2;if(a){var s=Math.min(a,i/2,r/2),c=t+s,l=n+s,u=t+r-s,d=n+i-s;e.moveTo(t,l),c<u&&l<d?(e.arc(c,l,s,-Math.PI,-o),e.arc(u,l,s,-o,0),e.arc(u,d,s,0,o),e.arc(c,d,s,o,Math.PI)):c<u?(e.moveTo(c,n),e.arc(u,l,s,-o,o),e.arc(c,l,s,o,Math.PI+o)):l<d?(e.arc(c,l,s,-Math.PI,0),e.arc(c,d,s,0,Math.PI)):e.arc(c,l,s,-Math.PI,Math.PI),e.closePath(),e.moveTo(t,n)}else e.rect(t,n,r,i)}function L(e,t,n){var r=n.backgroundColor,i=n.borderColor,a=n.borderWidth;!r&&(!i||!a)||(e.beginPath(),I(e,N(t.x)+a/2,N(t.y)+a/2,N(t.w)-a,N(t.h)-a,n.borderRadius),e.closePath(),r&&(e.fillStyle=r,e.fill()),i&&a&&(e.strokeStyle=i,e.lineWidth=a,e.lineJoin=`miter`,e.stroke()))}function R(e,t,n){var r=n.lineHeight,i=e.w,a=e.x,o=e.y+r/2;return t===`center`?a+=i/2:(t===`end`||t===`right`)&&(a+=i),{h:r,w:i,x:a,y:o}}function z(e,t,n){var r=e.shadowBlur,i=n.stroked,a=N(n.x),o=N(n.y),s=N(n.w);i&&e.strokeText(t,a,o,s),n.filled&&(r&&i&&(e.shadowBlur=0),e.fillText(t,a,o,s),r&&i&&(e.shadowBlur=r))}function B(e,t,n,r){var i=r.textAlign,a=r.color,o=!!a,s=r.font,c=t.length,l=r.textStrokeColor,u=r.textStrokeWidth,d=l&&u,f;if(!(!c||!o&&!d))for(n=R(n,i,s),e.font=s.string,e.textAlign=i,e.textBaseline=`middle`,e.shadowBlur=r.textShadowBlur,e.shadowColor=r.textShadowColor,o&&(e.fillStyle=a),d&&(e.lineJoin=`round`,e.lineWidth=u,e.strokeStyle=l),f=0,c=t.length;f<c;++f)z(e,t[f],{stroked:d,filled:o,w:n.w,x:n.x,y:n.y+n.h*f})}var V=function(e,t,n,r){var i=this;i._config=e,i._index=r,i._model=null,i._rects=null,i._ctx=t,i._el=n};y(V.prototype,{_modelize:function(e,t,r,i){var s=this,l=s._index,u=a(n([r.font,{}],i,l)),d=n([r.color,o.color],i,l);return{align:n([r.align,`center`],i,l),anchor:n([r.anchor,`center`],i,l),area:i.chart.chartArea,backgroundColor:n([r.backgroundColor,null],i,l),borderColor:n([r.borderColor,null],i,l),borderRadius:n([r.borderRadius,0],i,l),borderWidth:n([r.borderWidth,0],i,l),clamp:n([r.clamp,!1],i,l),clip:n([r.clip,!1],i,l),color:d,display:e,font:u,lines:t,offset:n([r.offset,4],i,l),opacity:n([r.opacity,1],i,l),origin:P(s._el,i),padding:c(n([r.padding,4],i,l)),positioner:F(s._el),rotation:n([r.rotation,0],i,l)*(Math.PI/180),size:S.textSize(s._ctx,t,u),textAlign:n([r.textAlign,`start`],i,l),textShadowBlur:n([r.textShadowBlur,0],i,l),textShadowColor:n([r.textShadowColor,d],i,l),textStrokeColor:n([r.textStrokeColor,d],i,l),textStrokeWidth:n([r.textStrokeWidth,0],i,l)}},update:function(e){var t=this,a=null,o=null,s=t._index,c=t._config,l,u,d,f=n([c.display,!0],e,s);f&&(l=e.dataset.data[s],u=ee(r(c.formatter,[l,e]),l),d=i(u)?[]:S.toTextLines(u),d.length&&(a=t._modelize(f,d,c,e),o=le(a))),t._model=a,t._rects=o},geometry:function(){return this._rects?this._rects.frame:{}},rotation:function(){return this._model?this._model.rotation:0},visible:function(){return this._model&&this._model.opacity},model:function(){return this._model},draw:function(e,t){var n=this,r=e.ctx,i=n._model,a=n._rects,o;this.visible()&&(r.save(),i.clip&&(o=i.area,r.beginPath(),r.rect(o.left,o.top,o.right-o.left,o.bottom-o.top),r.clip()),r.globalAlpha=S.bound(0,i.opacity,1),r.translate(N(t.x),N(t.y)),r.rotate(i.rotation),L(r,a.frame,i),B(r,i.lines,a.text,i),r.restore())}});var H=-(2**53-1)||-9007199254740991,U=2**53-1||9007199254740991;function W(e,t,n){var r=Math.cos(n),i=Math.sin(n),a=t.x,o=t.y;return{x:a+r*(e.x-a)-i*(e.y-o),y:o+i*(e.x-a)+r*(e.y-o)}}function G(e,t){var n=U,r=H,i=t.origin,a,o,s,c,l;for(a=0;a<e.length;++a)o=e[a],s=o.x-i.x,c=o.y-i.y,l=t.vx*s+t.vy*c,n=Math.min(n,l),r=Math.max(r,l);return{min:n,max:r}}function K(e,t){var n=t.x-e.x,r=t.y-e.y,i=Math.sqrt(n*n+r*r);return{vx:(t.x-e.x)/i,vy:(t.y-e.y)/i,origin:e,ln:i}}var q=function(){this._rotation=0,this._rect={x:0,y:0,w:0,h:0}};y(q.prototype,{center:function(){var e=this._rect;return{x:e.x+e.w/2,y:e.y+e.h/2}},update:function(e,t,n){this._rotation=n,this._rect={x:t.x+e.x,y:t.y+e.y,w:t.w,h:t.h}},contains:function(e){var t=this,n=1,r=t._rect;return e=W(e,t.center(),-t._rotation),!(e.x<r.x-n||e.y<r.y-n||e.x>r.x+r.w+n*2||e.y>r.y+r.h+n*2)},intersects:function(e){var t=this._points(),n=e._points(),r=[K(t[0],t[1]),K(t[0],t[3])],i,a,o;for(this._rotation!==e._rotation&&r.push(K(n[0],n[1]),K(n[0],n[3])),i=0;i<r.length;++i)if(a=G(t,r[i]),o=G(n,r[i]),a.max<o.min||o.max<a.min)return!1;return!0},_points:function(){var e=this,t=e._rect,n=e._rotation,r=e.center();return[W({x:t.x,y:t.y},r,n),W({x:t.x+t.w,y:t.y},r,n),W({x:t.x+t.w,y:t.y+t.h},r,n),W({x:t.x,y:t.y+t.h},r,n)]}});function J(e,t,n){var r=t.positioner(e,t),i=r.vx,a=r.vy;if(!i&&!a)return{x:r.x,y:r.y};var o=n.w,s=n.h,c=t.rotation,l=Math.abs(o/2*Math.cos(c))+Math.abs(s/2*Math.sin(c)),u=Math.abs(o/2*Math.sin(c))+Math.abs(s/2*Math.cos(c)),d=1/Math.max(Math.abs(i),Math.abs(a));return l*=i*d,u*=a*d,l+=t.offset*i,u+=t.offset*a,{x:r.x+l,y:r.y+u}}function ue(e,t){var n,r,i,a;for(n=e.length-1;n>=0;--n)for(i=e[n].$layout,r=n-1;r>=0&&i._visible;--r)a=e[r].$layout,a._visible&&i._box.intersects(a._box)&&t(i,a);return e}function de(e){var t,n,r,i,a,o,s;for(t=0,n=e.length;t<n;++t)r=e[t],i=r.$layout,i._visible&&(s=new Proxy(r._el,{get:(e,t)=>e.getProps([t],!0)[t]}),a=r.geometry(),o=J(s,r.model(),a),i._box.update(o,a,r.rotation()));return ue(e,function(e,t){var n=e._hidable,r=t._hidable;n&&r||r?t._visible=!1:n&&(e._visible=!1)})}var Y={prepare:function(e){var t=[],n,r,i,a,o;for(n=0,i=e.length;n<i;++n)for(r=0,a=e[n].length;r<a;++r)o=e[n][r],t.push(o),o.$layout={_box:new q,_hidable:!1,_visible:!0,_set:n,_idx:o._index};return t.sort(function(e,t){var n=e.$layout,r=t.$layout;return n._idx===r._idx?r._set-n._set:r._idx-n._idx}),this.update(t),t},update:function(e){var t=!1,n,r,i,a,o;for(n=0,r=e.length;n<r;++n)i=e[n],a=i.model(),o=i.$layout,o._hidable=a&&a.display===`auto`,o._visible=i.visible(),t|=o._hidable;t&&de(e)},lookup:function(e,t){var n,r;for(n=e.length-1;n>=0;--n)if(r=e[n].$layout,r&&r._visible&&r._box.contains(t))return e[n];return null},draw:function(e,t){var n,r,i,a,o,s;for(n=0,r=t.length;n<r;++n)i=t[n],a=i.$layout,a._visible&&(o=i.geometry(),s=J(i._el,i.model(),o),a._box.update(s,o,i.rotation()),i.draw(e,s))}},fe={align:`center`,anchor:`center`,backgroundColor:null,borderColor:null,borderRadius:0,borderWidth:0,clamp:!1,clip:!1,color:void 0,display:!0,font:{family:void 0,lineHeight:1.2,size:void 0,style:void 0,weight:null},formatter:function(e){if(i(e))return null;var t=e,n,r,a;if(s(e))if(!i(e.label))t=e.label;else if(!i(e.r))t=e.r;else for(t=``,n=Object.keys(e),a=0,r=n.length;a<r;++a)t+=(a===0?``:`, `)+n[a]+`: `+e[n[a]];return``+t},labels:void 0,listeners:{},offset:4,opacity:1,padding:{top:4,right:4,bottom:4,left:4},rotation:0,textAlign:`start`,textStrokeColor:void 0,textStrokeWidth:0,textShadowBlur:0,textShadowColor:void 0},X=`$datalabels`,Z=`$default`;function pe(e,t){var n=e.datalabels,r={},i=[],a,o;return n===!1?null:(n===!0&&(n={}),t=y({},[t,n]),a=t.labels||{},o=Object.keys(a),delete t.labels,o.length?o.forEach(function(e){a[e]&&i.push(y({},[t,a[e],{_key:e}]))}):i.push(t),r=i.reduce(function(e,t){return h(t.listeners||{},function(n,r){e[r]=e[r]||{},e[r][t._key||Z]=n}),delete t.listeners,e},{}),{labels:i,listeners:r})}function Q(e,t,n,i){if(t){var a=n.$context,o=n.$groups,s;t[o._set]&&(s=t[o._set][o._key],s&&r(s,[a,i])===!0&&(e[X]._dirty=!0,n.update(a)))}}function me(e,t,n,r,i){var a,o;!n&&!r||(n?r?n!==r&&(o=a=!0):o=!0:a=!0,o&&Q(e,t.leave,n,i),a&&Q(e,t.enter,r,i))}function he(e,t){var n=e[X],r=n._listeners,i,a;if(!(!r.enter&&!r.leave)){if(t.type===`mousemove`)a=Y.lookup(n._labels,t);else if(t.type!==`mouseout`)return;i=n._hovered,n._hovered=a,me(e,r,i,a,t)}}function ge(e,t){var n=e[X],r=n._listeners.click,i=r&&Y.lookup(n._labels,t);i&&Q(e,r,i,t)}var _e={id:`datalabels`,defaults:fe,beforeInit:function(e){e[X]={_actives:[]}},beforeUpdate:function(e){var t=e[X];t._listened=!1,t._listeners={},t._datasets=[],t._labels=[]},afterDatasetUpdate:function(e,t,n){var r=t.index,i=e[X],a=i._datasets[r]=[],o=e.isDatasetVisible(r),s=e.data.datasets[r],c=pe(s,n),l=t.meta.data||[],u=e.ctx,d,f,p,m,h,g,_,v;for(u.save(),d=0,p=l.length;d<p;++d)if(_=l[d],_[X]=[],o&&_&&e.getDataVisibility(d)&&!_.skip)for(f=0,m=c.labels.length;f<m;++f)h=c.labels[f],g=h._key,v=new V(h,u,_,d),v.$groups={_set:r,_key:g||Z},v.$context={active:!1,chart:e,dataIndex:d,dataset:s,datasetIndex:r},v.update(v.$context),_[X].push(v),a.push(v);u.restore(),y(i._listeners,c.listeners,{merger:function(e,n,r){n[e]=n[e]||{},n[e][t.index]=r[e],i._listened=!0}})},afterUpdate:function(e){e[X]._labels=Y.prepare(e[X]._datasets)},afterDatasetsDraw:function(e){Y.draw(e,e[X]._labels)},beforeEvent:function(e,t){if(e[X]._listened){var n=t.event;switch(n.type){case`mousemove`:case`mouseout`:he(e,n);break;case`click`:ge(e,n);break}}},afterEvent:function(e){var t=e[X],n=t._actives,r=t._actives=e.getActiveElements(),i=S.arrayDiff(n,r),a,o,s,c,l,u,d;for(a=0,o=i.length;a<o;++a)if(l=i[a],l[1])for(d=l[0].element[X]||[],s=0,c=d.length;s<c;++s)u=d[s],u.$context.active=l[1]===1,u.update(u.$context);(t._dirty||i.length)&&(Y.update(t._labels),e.render()),delete t._dirty}},ve=re(),$=e=>({plugins:{legend:{position:`right`,maxWidth:150,align:`start`,labels:{color:e.palette.text.secondary,usePointStyle:!0,padding:21,boxHeight:8,font:{size:10}}},datalabels:{color:e.palette.text.primary,font:{weight:`bold`,size:10},anchor:`end`,align:`top`,offset:-6}},responsive:!0,maintainAspectRatio:!1,color:e.palette.text.secondary,scales:{y:{beginAtZero:!0,grid:{color:e.palette.divider},border:{display:!1},ticks:{stepSize:1,color:e.palette.text.disabled,font:{size:10}}},x:{grid:{display:!1},ticks:{color:e.palette.text.primary,font:{size:10}}}}});function ye(e){return se.default.all(e.filter(e=>e))}var be=({data:e,ariaLabel:t,ariaDescription:n,overrideOptions:r})=>{let i=b(),{locationSettings:a}=ae();return(0,ve.jsx)(ne,{options:(0,oe.useMemo)(()=>ye([$(i)]),[i,a,r]),data:e,"aria-label":t,"aria-description":n,plugins:[_e]})};_.register(l,u,d,m,v,te,f,p);export{$ as createOptions,be as default};
@@ -1 +0,0 @@
1
- import{o as e,t}from"./react-DW1tWzGJ.js";import{a as n,d as r,f as i,g as a,h as o,o as s,p as c,u as l,v as u}from"./chart-CG3XAKw_.js";import{Bt as d,Ht as f,It as p,Jd as m,Kd as h,Rt as g,Ut as _,Vt as v,df as y,f as b,gc as x,vu as S,zt as C}from"./index-DIBimazR.js";var w=e(t(),1),T={position:`bottom`,labels:{boxWidth:12,padding:30,generateLabels:e=>{let t=e.data.datasets,{labels:{usePointStyle:n,pointStyle:r,textAlign:i,color:a}}=e?.legend?.options||{labels:{}};return e._getSortedDatasetMetas().map(e=>{let o=e.controller.getStyle(n?0:void 0);return{text:t[e.index].label,fillStyle:o.borderColor,fontColor:a,hidden:!e.visible,lineWidth:0,borderRadius:6,strokeStyle:o.borderColor,pointStyle:r||o.pointStyle,textAlign:i||o.textAlign,datasetIndex:e.index}})}}},E=(e,t,n,r)=>({responsive:!0,...r?{animation:{duration:0}}:{},plugins:{legend:{...T,display:!r},tooltip:{enabled:!1,position:`nearest`,external:f(n)}},locale:t.locale,interaction:{intersect:!1,axis:`xy`,mode:`nearest`},elements:{point:{radius:0,hitRadius:15}},color:e.palette.text.secondary,scales:{y:{beginAtZero:!0,type:`linear`,grid:{color:e.palette.divider},border:{color:e.palette.divider},ticks:{color:e.palette.text.secondary,display:!r,precision:0}},x:{adapters:{date:{locale:_(t.locale)}},type:`time`,time:{unit:`week`,tooltipFormat:`P`},grid:{color:`transparent`},border:{color:`transparent`},ticks:{color:e.palette.text.secondary,display:!r,source:`data`,maxRotation:90,minRotation:23.5}}}}),D=e(b(),1),O=y(),k=h(`div`)(({theme:e})=>({position:`relative`}));function A(e){return D.default.all(e.filter(e=>e))}var j=({data:e,aspectRatio:t=2.5,cover:n,overrideOptions:r,TooltipComponent:i,chartRef:a})=>{let o=m(),{locationSettings:s}=x(),[c,l]=(0,w.useState)(null);return(0,O.jsxs)(k,{children:[(0,O.jsx)(g,{ref:e=>{a?.(e??null)},options:(0,w.useMemo)(()=>A([E(o,s,l,!!n),r??{}]),[o,s,l,r,n]),data:e,plugins:[C({width:26})],height:100,width:100*t},n?`cover`:`chart`),(0,O.jsx)(S,{condition:!n,show:i?(0,O.jsx)(v,{tooltip:c,children:(0,O.jsx)(i,{tooltip:c})}):(0,O.jsx)(d,{tooltip:c}),elseShow:(0,O.jsx)(p,{children:n===!0?` `:n})})]})};s.register(n,r,i,l,c,u,a,o);export{j as default};
@@ -1 +0,0 @@
1
- <svg width="32" height="32" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill="#F7F7FA" d="M0 0h32v32H0z"/><path d="M16 18.02a2.2 2.2 0 1 0 0-4.4 2.2 2.2 0 0 0 0 4.4Z" fill="#0A7EA4"/><path d="M16 20.77c6.075 0 11-2.217 11-4.95 0-2.735-4.925-4.95-11-4.95S5 13.084 5 15.82c0 2.733 4.925 4.95 11 4.95Z" stroke="#0A7EA4"/><path d="M11.713 18.294c3.038 5.261 7.42 8.418 9.787 7.051 2.368-1.366 1.825-6.74-1.213-12-3.037-5.262-7.42-8.419-9.787-7.052-2.367 1.367-1.824 6.74 1.213 12.001Z" stroke="#0A7EA4"/><path d="M11.713 13.344C8.677 18.606 8.133 23.98 10.5 25.346c2.368 1.366 6.75-1.79 9.787-7.052 3.038-5.26 3.58-10.634 1.213-12-2.367-1.368-6.749 1.79-9.787 7.05Z" stroke="#0A7EA4"/></svg>
@@ -1 +0,0 @@
1
- import{o as e,t}from"./react-DW1tWzGJ.js";import{n}from"./formatPath-vbOoY_VU.js";import{$r as r,$s as i,Ed as a,Gs as o,Hu as s,Kc as c,Kd as l,No as u,Pi as d,Qc as f,Td as p,Un as m,Vu as h,df as g,ds as _,ec as v,ei as y,er as b,gd as x,jr as S,ku as C,ni as w,pd as T,qc as E,rc as D,ti as O,tr as k,vu as A,xf as j,yd as M}from"./index-DIBimazR.js";var N=e(t(),1),P=e=>fetch(e).then(f(`ChangeRequest`)).then(e=>e.json()),F=(e,t)=>{let{data:r,error:i,mutate:a}=O([],n(`api/admin/projects/${e}/change-requests/scheduled?${t.map(e=>`feature=${e}`).join(`&`)}`),P);return{changeRequests:r,loading:!i&&!r,refetch:a,error:i}},I=g(),L=()=>(0,I.jsx)(a,{severity:`warning`,sx:{m:e=>e.spacing(2,0)},children:`Archiving flags with dependencies will also remove those dependencies.`}),R=({ids:e,projectId:t})=>{let n=e=>`/projects/${t}/features/${e}`;return e?(0,I.jsxs)(a,{severity:`warning`,sx:{m:e=>e.spacing(2,0)},children:[(0,I.jsx)(p,{variant:`body2`,sx:{fontWeight:`bold`,display:`inline`},children:`${e.length} feature flags `}),(0,I.jsx)(`span`,{children:`have usage from applications. If you archive these feature flags they will not be available to Client SDKs:`}),(0,I.jsx)(`ul`,{children:e?.map(e=>(0,I.jsx)(`li`,{children:(0,I.jsx)(j,{to:n(e),children:e})},e))})]}):null},z=({ids:e,projectId:t})=>{let n=e=>`/projects/${t}/features/${e}`;return e&&e.length>1?(0,I.jsxs)(a,{severity:`error`,sx:{m:e=>e.spacing(2,0)},children:[(0,I.jsx)(p,{variant:`body2`,sx:{fontWeight:`bold`,display:`inline`},children:`${e.length} feature flags `}),(0,I.jsx)(`span`,{children:`have child features that depend on them and are not part of the archive operation. These parent features can not be archived:`}),(0,I.jsx)(`ul`,{children:e?.map(e=>(0,I.jsx)(`li`,{children:(0,I.jsx)(j,{to:n(e),children:e})},e))})]}):e&&e.length===1?(0,I.jsxs)(a,{severity:`error`,sx:{m:e=>e.spacing(2,0)},children:[(0,I.jsx)(j,{to:n(e[0]),children:e[0]}),` has child features that depend on it and are not part of the archive operation.`]}):null},B=({changeRequests:e,projectId:t})=>e&&e.length>0?(0,I.jsxs)(a,{severity:`warning`,sx:{m:e=>e.spacing(2,0)},children:[(0,I.jsxs)(`p`,{children:[`This archive operation would conflict with`,` `,e.length,` scheduled change request(s). The change request(s) that would be affected by this are:`]}),(0,I.jsx)(`ul`,{children:e.map(({id:e,title:n})=>{let r=n?`#${e} (${n})`:`Change request #${e}`;return(0,I.jsx)(`li`,{children:(0,I.jsx)(j,{to:`/projects/${t}/change-requests/${e}`,target:`_blank`,rel:`noopener noreferrer`,title:`Change request ${e}`,children:r})},e)})})]}):e===void 0?(0,I.jsx)(a,{severity:`warning`,children:(0,I.jsx)(`p`,{children:`This archive operation might conflict with one or more scheduled change requests. If you complete it, those change requests can no longer be applied.`})}):null,V=(e,t)=>{let n=m(e)(),{isChangeRequestConfiguredForReview:r}=_(e);return n&&r(n)&&t?`Add to change request`:n&&r(n)?`Add change to draft`:t?`Archive flags`:`Archive flag`},H=({projectId:e,featureIds:t,onSuccess:n,onError:a})=>{let{setToastData:o,setToastApiError:s}=v(),{archiveFeatureToggle:c}=r(),{archiveFeatures:l}=d(),{isChangeRequestConfiguredForReview:u}=_(e),{addChange:f}=w(),{refetch:p}=y(e),h=m(e),g=t?.length>1,b=h(),x=async()=>{if(!b){console.error(`No change request environment`);return}await f(e,b,t.map(e=>({action:`archiveFeature`,feature:e,payload:void 0}))),p(),o({type:`success`,text:g?`Changes added to a draft`:`Change added to a draft`})},S=async()=>{await c(e,t[0]),o({type:`success`,text:`Feature flag archived`})},C=async()=>{await l(e,t),o({type:`success`,text:`Feature flags archived`})};return async()=>{try{b&&u(b)?await x():g?await C():await S(),n()}catch(e){s(i(e)),a()}}},U=(e,t,n)=>{let[r,i]=(0,N.useState)(!0),[a,o]=(0,N.useState)([]),[s,c]=(0,N.useState)(!1),{verifyArchiveFeatures:l}=d();return(0,N.useEffect)(()=>{n&&l(t,e).then(e=>e.json()).then(({hasDeletedDependencies:e,parentsWithChildFeatures:t})=>{t.length===0?(i(!1),o(t)):(i(!0),o(t)),c(e)})},[JSON.stringify(e),n,t,o,i,c,l]),{disableArchive:r,offendingParents:a,hasDeletedDependencies:s}},W=({isOpen:e,onClose:t,onConfirm:n,projectId:r,featureIds:i,featuresWithUsage:a})=>{let s=i?.length>1,c=V(r,s),l=s?`Archive feature flags`:`Archive feature flag`,u=H({projectId:r,featureIds:i,onSuccess(){n(),t()},onError(){t()}}),{changeRequests:d}=F(r,i),{disableArchive:f,offendingParents:p,hasDeletedDependencies:m}=U(i,r,e),h=p.length===0&&m;return(0,I.jsx)(o,{onClick:u,open:e,onClose:t,primaryButtonText:c,secondaryButtonText:`Cancel`,title:l,disabledPrimaryButton:f,children:(0,I.jsx)(A,{condition:s,show:(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)(`p`,{children:[`Are you sure you want to archive`,` `,(0,I.jsx)(`strong`,{children:i?.length}),` feature flags?`]}),(0,I.jsx)(A,{condition:!!(a&&a?.length>0),show:(0,I.jsx)(R,{ids:a,projectId:r})}),(0,I.jsx)(A,{condition:p.length>0,show:(0,I.jsx)(z,{ids:p,projectId:r})}),(0,I.jsx)(A,{condition:h,show:(0,I.jsx)(L,{})}),(0,I.jsx)(B,{changeRequests:d,projectId:r}),(0,I.jsx)(A,{condition:i?.length<=5,show:(0,I.jsx)(`ul`,{children:i?.map(e=>(0,I.jsx)(`li`,{children:e},e))})})]}),elseShow:(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)(`p`,{children:[`Are you sure you want to archive`,` `,s?`these feature flags`:`this feature flag`,`?`]}),(0,I.jsx)(A,{condition:p.length>0,show:(0,I.jsx)(z,{ids:p,projectId:r})}),(0,I.jsx)(A,{condition:h,show:(0,I.jsx)(L,{})}),(0,I.jsx)(B,{changeRequests:d,projectId:r})]})})})},G=(e,t)=>`/api/admin/projects/${e}/features/${t}/parents`,K=(e,t)=>{let r=n(G(e,t)),{data:i,loading:a,error:o}=E(r,()=>c(r,`Parent Options`));return{parentOptions:i,loading:a,error:o}},q=(e,t)=>`/api/admin/projects/${e}/features/${t}/parent-variants`,J=(e,t)=>{let r=n(q(e,t)),{data:i,loading:a,error:o}=E(r,()=>c(r,`Parent Variant Options`));return{parentVariantOptions:i||[],loading:a,error:o}},Y=l(M)(({theme:e})=>({marginTop:e.spacing(2),marginBottom:e.spacing(1.5)})),X=({project:e,parent:t,onSelect:n})=>{let{parentVariantOptions:r}=J(e,t),i=(0,I.jsx)(k,{fontSize:`small`}),a=(0,I.jsx)(b,{fontSize:`small`});return(0,I.jsx)(Y,{id:`single-variant-options`,options:r,renderOption:(e,t,{selected:n})=>(0,I.jsxs)(`li`,{...e,children:[(0,I.jsx)(T,{icon:i,checkedIcon:a,style:{marginRight:8},checked:n}),t]}),renderInput:e=>(0,I.jsx)(C,{...e,placeholder:`Select variant`}),fullWidth:!0,onChange:(e,t)=>{n(String(t))}})},Z=({projectId:e,featureId:t,isOpen:n,setIsOpen:r,onComplete:i})=>{let{markFeatureCompleted:a}=u(),{parentVariantOptions:c}=J(e,t),[l,d]=(0,N.useState)(`kept`),[f,m]=(0,N.useState)(void 0),{trackEvent:g}=D();return(0,I.jsx)(o,{open:n,title:`Mark completed`,onClose:()=>{r(!1)},disabledPrimaryButton:l===`kept-with-variant`&&f===null,onClick:async()=>{let n=l===`kept-with-variant`?`kept`:l;await a(t,e,{status:n,statusValue:f}),r(!1),i(),g(`feature-lifecycle`,{props:{eventType:`complete`,status:n}})},primaryButtonText:`Mark completed`,secondaryButtonText:`Cancel`,children:(0,I.jsxs)(x,{children:[(0,I.jsxs)(x,{sx:{mt:2,mb:4},children:[`Marking the feature `,(0,I.jsx)(`b`,{children:t}),` as complete does not affect any configuration, but it moves the feature flag into it’s next life cycle stage and is an indication that you have learned what you needed in order to progress with the feature. It serves as a reminder to start cleaning up the feature flag and removing it from the code.`]}),(0,I.jsx)(p,{sx:{mb:2},children:(0,I.jsx)(`b`,{children:`What was the outcome of this feature?`})}),(0,I.jsxs)(h,{"aria-label":`selected-value`,name:`selected`,sx:{gap:e=>e.spacing(.5)},onChange:(e,t)=>{d(t)},children:[(0,I.jsx)(S,{value:`kept`,legal:{value:`We decided to keep the feature`},control:(0,I.jsx)(s,{})},`kept`),(0,I.jsx)(S,{value:`discarded`,legal:{value:`We decided to discard the feature`},control:(0,I.jsx)(s,{})},`discarded`),(0,I.jsx)(A,{condition:c.length>0,show:(0,I.jsx)(S,{value:`kept-with-variant`,legal:{value:`We decided to keep the feature variant`,description:`Choose to specify which feature variant will be kept`},control:(0,I.jsx)(s,{})},`kept-with-variant`)}),(0,I.jsx)(A,{condition:c.length>0&&l===`kept-with-variant`,show:(0,I.jsx)(X,{parent:t,project:e,onSelect:e=>{m(e)}})})]})]})})};export{W as i,K as n,J as r,Z as t};
@@ -1 +0,0 @@
1
- import{o as e,t}from"./react-DW1tWzGJ.js";import{Ed as n,Jd as r,Jl as i,Kd as a,Nt as o,Td as s,df as c,gu as l,hu as u,lc as d}from"./index-DIBimazR.js";import{t as f}from"./unknownify-D0N8k6Ch.js";import{n as p,t as m}from"./NetworkPrometheusAPIWarning-BlbOSbDW.js";var h=o(),g=e(t(),1),_=c(),v=a(`div`)(({theme:e})=>({marginBottom:e.spacing(18),display:`flex`,justifyContent:`center`})),y=a(`div`)(({theme:e})=>({display:`flex`,justifyContent:`center`,gap:e.spacing(4),flexWrap:`wrap`})),b=a(`div`)(({theme:e})=>({borderRadius:e.shape.borderRadiusMedium,border:`1px solid`,borderColor:e.palette.secondary.border,backgroundColor:e.palette.secondary.light,display:`flex`,flexDirection:`column`,alignItems:`center`,padding:e.spacing(1.5),zIndex:1,"& > svg":{width:e.spacing(9),height:e.spacing(9)}})),x=a(s)(({theme:e})=>({fontWeight:e.fontWeight.bold})),S=a(s)(({theme:e})=>({fontSize:e.fontSizes.smallBody,color:e.palette.text.secondary})),C=a(s)(({theme:e})=>({fontSize:e.fontSizes.smallerBody,color:e.palette.text.secondary})),w=e=>e[0]*1e3>Date.now()-6e5,T=e=>{let t=(e.values||[]).filter(e=>w(e)),n=t.length?Number.parseFloat(t[t.length-1][1]):0;return{label:e.label,reqs:n,type:f(e.metric?.endpoint?.split(`/`)[2])}},E=(e,t)=>{let n=t.label+t.type;return e[n]={...t,reqs:t.reqs+(e[n]?.reqs??0)},e},D=e=>{let t=(e?.data?.result?.map(e=>({...e,label:f(e.metric?.appName)})).filter(e=>e.label!==`unknown`)||[]).map(T).reduce(E,{});return Object.values(t).map(e=>({...e,reqs:e.reqs.toFixed(2)})).filter(e=>e.reqs!==`0.00`)??[]},O=()=>{d(`Network - Overview`);let e=r(),{metrics:t}=p(),a=(0,g.useMemo)(()=>D(t),[t]);return a.length===0?(0,_.jsxs)(n,{severity:`warning`,children:[`No data available.`,(0,_.jsx)(m,{})]}):(0,_.jsxs)(h.ArcherContainer,{strokeColor:e.palette.text.primary,endShape:{arrow:{arrowLength:4,arrowThickness:4}},children:[(0,_.jsx)(v,{children:(0,_.jsx)(h.ArcherElement,{id:`unleash`,children:(0,_.jsxs)(b,{children:[(0,_.jsx)(i,{darkmode:(0,_.jsx)(u,{}),lightmode:(0,_.jsx)(l,{})}),(0,_.jsx)(s,{sx:{marginTop:e.spacing(1)},children:`Unleash`})]})})}),(0,_.jsx)(y,{children:a.map(({label:t,reqs:n,type:r},i)=>(0,_.jsx)(h.ArcherElement,{id:`${i}`,relations:[{targetId:`unleash`,targetAnchor:`bottom`,sourceAnchor:`top`,style:{strokeColor:e.palette.secondary.border}}],children:(0,_.jsxs)(b,{children:[(0,_.jsx)(x,{children:t}),(0,_.jsxs)(S,{children:[n,` req/s`]}),(0,_.jsxs)(C,{children:[r,` app`]})]})}))})]})};export{O as NetworkOverview,O as default};
@@ -1 +0,0 @@
1
- import{o as e,t}from"./react-DW1tWzGJ.js";import{n}from"./formatPath-vbOoY_VU.js";import{Hs as r,Qc as i,Zc as a,df as o}from"./index-DIBimazR.js";var s=e(t(),1),c=(e={})=>{let{uiConfig:{prometheusAPIAvailable:t}}=a(),{data:i,error:o,mutate:c}=r(t,{},n(`api/admin/metrics/rps`),l,e);return(0,s.useMemo)(()=>({metrics:i,loading:!o&&!i,refetch:()=>c(),error:o}),[i,o,c])},l=e=>fetch(e).then(i(`Instance Metrics`)).then(e=>e.json()),u=o(),d=()=>{let{uiConfig:{prometheusAPIAvailable:e}}=a();return e?null:(0,u.jsxs)(`p`,{children:[`This view requires the `,(0,u.jsx)(`strong`,{children:`PROMETHEUS_API`}),` environment variable to be set. Refer to our`,` `,(0,u.jsx)(`a`,{href:`https://docs.getunleash.io/concepts/network-view#configure-a-data-source`,target:`_blank`,rel:`noreferrer`,children:`documentation`}),` `,`for more information.`]})};export{c as n,d as t};
@@ -1 +0,0 @@
1
- import{o as e,t}from"./react-DW1tWzGJ.js";import{_ as n,a as r,d as i,f as a,g as o,o as s,p as c,u as l,v as u}from"./chart-CG3XAKw_.js";import{Ed as d,Jd as f,Rt as p,Vc as m,df as h,dt as g,ef as _,gc as v,lc as y,vu as b}from"./index-DIBimazR.js";import{t as x}from"./unknownify-D0N8k6Ch.js";import{n as S,t as C}from"./NetworkPrometheusAPIWarning-BlbOSbDW.js";var w=e(t(),1),T=h(),E=[`circle`,`rect`,`rectRounded`,`rectRot`,`triangle`],D=(e,t)=>e.map(e=>({x:e[0],y:t(e[1])})),O=(e,t)=>({locale:t.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.action.active,borderColor:e.palette.primary.main,borderWidth:1,padding:10,boxPadding:5,usePointStyle:!0,callbacks:{title:e=>m(1e3*(e[0].parsed.x??0),t.locale)},itemSort:(e,t)=>(t.parsed.y??0)-(e.parsed.y??0)},legend:{position:`bottom`,align:`start`,labels:{boxWidth:10,boxHeight:10,usePointStyle:!0,padding:24}},title:{text:`Top 10 requests per second in the last 6 hours`,position:`top`,align:`start`,display:!0,font:{size:16,weight:400},color:e.palette.text.primary,padding:{bottom:32}}},scales:{y:{type:`linear`,title:{display:!0,text:`Requests per second`,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`,time:{unit:`minute`},grid:{display:!0,color:e.palette.divider},border:{color:e.palette.divider},ticks:{callback:(e,n,r)=>m(r[n].value*1e3,t.locale)}}}}),k=class{items;picked=new Map;constructor(e){this.items=new g(e)}pick(e){return this.picked.has(e)||this.picked.set(e,this.items.next()),this.picked.get(e)}},A=(e,t)=>{if(t?.data?.result){let n=new k([e.palette.success,e.palette.error,e.palette.primary,e.palette.warning]);return t.data.result.map((e,t)=>{let r=x(e.metric?.endpoint),i=x(e.metric?.appName),a=n.pick(r),o=e.values||[];return{label:`${r}: ${i}`,borderColor:a.main,backgroundColor:a.main,data:D(o,e=>Number.parseFloat(e)),elements:{point:{radius:4,pointStyle:E[t%E.length]},line:{borderDash:[8,4]}}}})}return[]},j=()=>{let{locationSettings:e}=v(),{metrics:t}=S(),n=f(),r=(0,w.useMemo)(()=>O(n,e),[n,e]);y(`Network - Traffic`);let i=(0,w.useMemo)(()=>({datasets:A(n,t)}),[n,t,e]);return(0,T.jsx)(b,{condition:i.datasets.length===0,show:(0,T.jsxs)(d,{severity:`warning`,children:[`No data available.`,(0,T.jsx)(C,{})]}),elseShow:(0,T.jsx)(_,{sx:{display:`grid`,gap:4},children:(0,T.jsx)(`div`,{style:{height:400},children:(0,T.jsx)(p,{data:i,options:r,"aria-label":`An instance metrics line chart with two lines: requests per second for admin API and requests per second for client API`})})})})};s.register(r,i,a,l,c,o,u,n);export{j as NetworkTraffic,j as default};
@@ -1 +0,0 @@
1
- import{o as e,t}from"./react-DW1tWzGJ.js";import{n}from"./formatPath-vbOoY_VU.js";import{_ as r,a as i,d as a,g as o,i as s,o as c,v as l}from"./chart-CG3XAKw_.js";import{$u as u,Ed as d,Kd as f,Lt as p,Qc as m,Ql as h,Yl as g,Zc as _,co as v,df as y,gc as b,ho as x,lc as S,vu as C,xf as w}from"./index-DIBimazR.js";import{d as T,s as E}from"./useInstanceTrafficMetrics-CcZqSYy1.js";import{a as D,c as O,i as k,l as A,n as j,r as M,t as N,u as P}from"./networkTrafficUsageHighlightPlugin-C8avnJ5K.js";import{t as F}from"./chartjs-plugin-annotation.esm-bUcqmHD4.js";var I=y(),L=f(`article`)(({theme:e})=>({minWidth:`200px`,border:`2px solid ${e.palette.divider}`,borderRadius:e.shape.borderRadiusLarge,padding:e.spacing(3),display:`flex`,flexDirection:`column`,gap:e.spacing(2)})),R=f(`h3`)(({theme:e})=>({margin:0,fontSize:e.typography.body1.fontSize})),z=f(`dl`)(({theme:e})=>({display:`flex`,flexDirection:`column`,gap:e.spacing(2.5),padding:0,margin:0})),B=f(`div`)(({theme:e})=>({display:`flex`,flexFlow:`row wrap`,justifyContent:`space-between`,gap:e.spacing(1,3),fontSize:e.typography.body2.fontSize,color:e.palette.text.secondary,"& dd":{margin:0,color:e.palette.text.primary}})),V=e=>{let t=e=>e.toLocaleString(`en-US`,{month:`short`,year:`numeric`});if(e.grouping===`monthly`){let n=new Date,r=h(n,e.monthsBack),i=h(n,1);return`Average requests from ${t(r)} to ${t(i)}`}return`Requests used in ${t(T(e.month))}`},H=({period:e,usageTotal:t,includedTraffic:n,purchasedTraffic:r,currentMonth:i})=>{let{locationSettings:a}=b();return(0,I.jsxs)(L,{children:[(0,I.jsx)(R,{children:`Number of requests to Unleash`}),(0,I.jsxs)(z,{children:[(0,I.jsxs)(B,{children:[(0,I.jsx)(`dt`,{children:V(e)}),(0,I.jsx)(`dd`,{children:(0,I.jsxs)(v,{color:n>0?t<=n?`success`:`error`:`neutral`,children:[t.toLocaleString(a.locale??`en-US`),` `,`requests`]})})]}),n>0&&(0,I.jsxs)(B,{children:[(0,I.jsx)(`dt`,{children:`Included in your plan`}),(0,I.jsxs)(`dd`,{children:[n.toLocaleString(`en-US`),` requests`]})]}),r>0&&i&&(0,I.jsxs)(B,{children:[(0,I.jsx)(`dt`,{children:`Additional traffic purchased`}),(0,I.jsxs)(`dd`,{children:[r.toLocaleString(`en-US`),` requests`]})]}),n>0&&i&&(0,I.jsxs)(B,{children:[(0,I.jsx)(`dt`,{children:`Total traffic available`}),(0,I.jsxs)(`dd`,{children:[(n+r).toLocaleString(`en-US`),` `,`requests`]})]})]})]})},U=({overages:e,overageCost:t,estimatedMonthlyCost:n})=>(0,I.jsxs)(L,{children:[(0,I.jsx)(R,{children:`Accrued traffic charges`}),(0,I.jsxs)(z,{children:[(0,I.jsxs)(B,{children:[(0,I.jsxs)(`dt`,{children:[`Request overages this month (`,(0,I.jsx)(u,{href:`https://www.getunleash.io/pricing`,children:`pricing`}),`)`]}),(0,I.jsxs)(`dd`,{children:[e.toLocaleString(),` requests`]})]}),(0,I.jsxs)(B,{children:[(0,I.jsx)(`dt`,{children:`Accrued traffic charges`}),(0,I.jsx)(`dd`,{children:(0,I.jsxs)(v,{color:`secondary`,children:[t,` USD`]})})]}),n>0&&(0,I.jsxs)(B,{children:[(0,I.jsx)(`dt`,{children:`Estimated charges based on current usage`}),(0,I.jsx)(`dd`,{children:(0,I.jsxs)(v,{color:`secondary`,children:[n,` USD`]})})]})]})]}),W=e(t(),1),G=53,K=259,q=1e6,J=(e,t)=>!e||t===`pay-as-you-go`?G:K;function Y(e,t,n){return e===void 0?J(t,n):e}function X(e){return e===void 0?0:e}var Z=()=>{let{isEnterprise:e,uiConfig:t}=_(),{data:r,error:i,mutate:a}=g(n(`/api/instance/trafficBundles`),Q);return{trafficBundles:(0,W.useMemo)(()=>({includedTraffic:Y(r?.includedTraffic,e(),t.billing)*q,purchasedTraffic:X(r?.purchasedTraffic)*q}),[r]),loading:!i&&!r,refetch:a}},Q=e=>fetch(e).then(m(`configuration`)).then(e=>e.json()),$=f(`div`)(({theme:e})=>({display:`grid`,gridTemplateColumns:`repeat(auto-fit, minmax(200px, max-content))`,flex:1,gap:e.spacing(2,4)})),ee=()=>{S(`Network - Data Usage`);let e=x(`estimateTrafficDataCost`),{isOss:t}=_(),{trafficBundles:n}=Z(),r=n.includedTraffic+n.purchasedTraffic,{chartDataSelection:i,setChartDataSelection:a,options:o}=j(r),{chartData:s,usageTotal:c,overageCost:l,estimatedMonthlyCost:u,requestSummaryUsage:f}=O(r,i),m=i.grouping===`daily`&&i.month===E&&r>0&&c-r>0&&e,h=i.grouping===`daily`&&i.month===E,g=(i.grouping===`monthly`||i.month===E)&&r>0&&l>0;return(0,I.jsx)(C,{condition:t(),show:(0,I.jsx)(d,{severity:`warning`,children:`Not enabled.`}),elseShow:(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(C,{condition:g,show:(0,I.jsxs)(d,{severity:`warning`,sx:{mb:4},children:[(0,I.jsx)(M,{children:`Heads up!`}),` You are currently consuming more requests than your plan includes and will be billed according to our terms. Please see`,` `,(0,I.jsx)(w,{to:`https://www.getunleash.io/pricing`,children:`this page`}),` `,`for more information. In order to reduce your traffic consumption, you may configure an`,` `,(0,I.jsx)(w,{to:`https://docs.getunleash.io/unleash-edge`,children:`Unleash Edge instance`}),` `,`in your own datacenter.`]})}),(0,I.jsxs)(k,{children:[(0,I.jsxs)(D,{children:[(0,I.jsxs)($,{children:[(0,I.jsx)(H,{period:i,usageTotal:f,includedTraffic:n.includedTraffic,purchasedTraffic:n.purchasedTraffic,currentMonth:h}),m&&(0,I.jsx)(U,{overageCost:l,overages:c-r,estimatedMonthlyCost:u})]}),(0,I.jsx)(P,{selectedPeriod:i,setPeriod:a})]}),(0,I.jsx)(p,{data:s,plugins:[N],options:o,"aria-label":A(i)})]})]})})};c.register(F,i,a,s,r,l,o);export{ee as default};
@@ -1 +0,0 @@
1
- import{Ii as e,Ji as t,Kd as n,Ps as r,Td as i,df as a,ed as o,hd as s,to as c,vs as l}from"./index-DIBimazR.js";import{g as u}from"./DialogWithAside-CtKlvRxJ.js";var d=a(),f=n(`div`,{shouldForwardProp:e=>e!==`disabled`})(({theme:e,disabled:t})=>({flexBasis:`50%`,display:`flex`,gap:e.spacing(1),flexDirection:`column`,borderRight:`1px solid ${e.palette.divider}`,padding:e.spacing(2,3,3,3),...t&&{background:e.palette.background.elevation2},[e.breakpoints.down(`md`)]:{borderRight:0,borderBottom:`1px solid ${e.palette.divider}`},"&:last-child":{borderWidth:0}})),p=n(`div`)(()=>({display:`flex`,flexDirection:`row`,alignItems:`center`,justifyContent:`space-between`,width:`100%`,minHeight:32})),m=n(`div`)(()=>({width:32,height:32,borderRadius:8,display:`flex`,alignItems:`center`,justifyContent:`center`,"& svg":{fontSize:20},"& svg path":{fill:`currentColor`}})),h=n(m)(({theme:e})=>({backgroundColor:e.palette.primary.light,color:e.palette.primary.contrastText})),g=n(m)(({theme:e})=>({backgroundColor:e.palette.success.light,border:`1px solid ${e.palette.success.border}`,color:e.palette.success.main})),_=n(m)(({theme:e})=>({border:`1px solid ${e.palette.divider}`,background:e.palette.background.elevation1,color:e.palette.text.secondary})),v=n(i)(({theme:e})=>({fontSize:e.typography.caption.fontSize,fontWeight:e.typography.fontWeightBold,lineHeight:e.spacing(2),color:e.palette.text.secondary})),y=n(`div`)(({theme:e})=>({display:`flex`,flexDirection:`column`,flexGrow:1,gap:e.spacing(1)})),b=n(`div`)(({theme:e})=>({display:`flex`,flexDirection:`column`,gap:e.spacing(1)})),x=n(i,{shouldForwardProp:e=>e!==`done`})(({theme:e,done:t})=>({fontSize:e.typography.body1.fontSize,fontWeight:e.typography.fontWeightBold,color:t?e.palette.text.secondary:e.palette.text.primary,textDecoration:t?`line-through`:`none`})),S=n(i)(({theme:e})=>({fontSize:e.typography.body2.fontSize,color:e.palette.text.secondary})),C=n(`div`)(()=>({display:`flex`,alignSelf:`flex-start`,marginTop:`auto`})),w=(e,n)=>e===`done`?(0,d.jsx)(g,{children:(0,d.jsx)(t,{})}):e===`disabled`?(0,d.jsx)(_,{children:n}):(0,d.jsx)(h,{children:n}),T=({stepNumber:e,state:t,icon:n,title:r,body:i,children:a})=>{let o=t===`done`;return(0,d.jsxs)(f,{disabled:t===`disabled`,children:[(0,d.jsxs)(p,{children:[w(t,n),(0,d.jsxs)(v,{children:[`Step `,e]})]}),(0,d.jsxs)(y,{children:[(0,d.jsxs)(b,{children:[(0,d.jsx)(x,{done:o,children:r}),(0,d.jsx)(S,{children:i})]}),(0,d.jsx)(C,{children:a})]})]})},E=({projectId:n,setConnectSdkOpen:i,state:a})=>{let o=a===`done`;return(0,d.jsx)(T,{stepNumber:2,state:a,icon:(0,d.jsx)(u,{}),title:o?`Connect SDK`:`Connect SDKs`,body:o?`You can connect as many SDKs as you need.`:`To start using your feature flag, connect an SDK to the project.`,children:o?(0,d.jsx)(s,{variant:`outlined`,color:`inherit`,startIcon:(0,d.jsx)(t,{}),disabled:!0,children:`Done`}):(0,d.jsx)(e,{onClick:()=>i(!0),maxWidth:`200px`,projectId:n,Icon:c,permission:[r,l],disabled:a===`disabled`,children:`Connect SDK`})})},D=n(`div`)(({theme:e})=>({display:`flex`,flexDirection:`row`,alignItems:`center`,gap:e.spacing(1.5)})),O=n(o)(({theme:e})=>({width:`100px`,height:e.spacing(.5),borderRadius:e.shape.borderRadiusLarge})),k=({step:e,maxSteps:t,onDismiss:n})=>{let r=e>=t,i=e/t*100+10;return(0,d.jsxs)(D,{children:[e,`/`,t,` Completed`,r?(0,d.jsx)(s,{onClick:e=>{e.stopPropagation(),n()},variant:`outlined`,component:`span`,size:`small`,children:`Dismiss`}):(0,d.jsx)(O,{variant:`determinate`,value:i})]})};export{E as n,T as r,k as t};
@@ -1 +0,0 @@
1
- import{o as e,t}from"./react-DW1tWzGJ.js";import{$d as n,Hd as r,Jd as i,Kd as a,Qd as o,Yd as s,af as c,cf as l,df as u,if as d,lf as f,nf as p,of as m,rf as h,sf as g,uf as _}from"./index-DIBimazR.js";var v=e(t(),1),y=u(),b=d(),x=n(`div`,{name:`MuiStack`,slot:`Root`});function S(e){return o({props:e,name:`MuiStack`,defaultTheme:b})}function C(e,t){let n=v.Children.toArray(e).filter(Boolean);return n.reduce((e,r,i)=>(e.push(r),i<n.length-1&&e.push(v.cloneElement(t,{key:`separator-${i}`})),e),[])}var w=e=>({row:`Left`,"row-reverse":`Right`,column:`Top`,"column-reverse":`Bottom`})[e],T=({ownerState:e,theme:t})=>{let n={display:`flex`,flexDirection:`column`,...g({theme:t},f({values:e.direction,breakpoints:t.breakpoints.values}),e=>({flexDirection:e}))};if(e.spacing){let r=c(t),i=Object.keys(t.breakpoints.values).reduce((t,n)=>((typeof e.spacing==`object`&&e.spacing[n]!=null||typeof e.direction==`object`&&e.direction[n]!=null)&&(t[n]=!0),t),{}),a=f({values:e.direction,base:i}),o=f({values:e.spacing,base:i});typeof a==`object`&&Object.keys(a).forEach((e,t,n)=>{a[e]||(a[e]=t>0?a[n[t-1]]:`column`)}),n=_(n,g({theme:t},o,(t,n)=>e.useFlexGap?{gap:m(r,t)}:{"& > :not(style):not(style)":{margin:0},"& > :not(style) ~ :not(style)":{[`margin${w(n?a[n]:e.direction)}`]:m(r,t)}}))}return n=l(t.breakpoints,n),n};function E(e={}){let{createStyledComponent:t=x,useThemeProps:n=S,componentName:r=`MuiStack`}=e,i=()=>s({root:[`root`]},e=>p(r,e),{}),a=t(T);return v.forwardRef(function(e,t){let{component:r=`div`,direction:o=`column`,spacing:s=0,divider:c,children:l,className:u,useFlexGap:d=!1,...f}=n(e);return(0,y.jsx)(a,{as:r,ownerState:{direction:o,spacing:s,useFlexGap:d},ref:t,className:h(i().root,u),...f,children:c?C(l,c):l})})}var D=E({createStyledComponent:a(`div`,{name:`MuiStack`,slot:`Root`}),useThemeProps:e=>r({props:e,name:`MuiStack`})}),O=a(`div`)(()=>({display:`flex`,alignItems:`center`,justifyContent:`center`,position:`relative`,margin:0})),k=a(`div`,{shouldForwardProp:e=>e!==`color`})(({theme:e,color:t})=>({position:`absolute`,top:`50%`,left:`50%`,transform:`translate(-50%, -50%)`,color:t,fontSize:e.fontSizes.smallerBody,margin:0})),A=({percentage:e,size:t=`4rem`,disabled:n=!1,children:r,strokeRatio:a=.2})=>{let o=i(),s={display:`block`,borderRadius:`100%`,transform:`rotate(-90deg)`,height:t,width:t},c=100/(2*Math.PI),l=2*c,u=l*a,d=n?o.palette.neutral.border:o.palette.primary.light;return(0,y.jsxs)(O,{children:[(0,y.jsxs)(`svg`,{viewBox:`0 0 ${l} ${l}`,style:s,"aria-hidden":!0,children:[(0,y.jsx)(`circle`,{r:c,cx:c,cy:c,fill:`none`,stroke:o.palette.background.elevation2,strokeWidth:u}),(0,y.jsx)(`circle`,{r:c,cx:c,cy:c,fill:`none`,stroke:d,strokeWidth:u,strokeDasharray:`${e} 100`})]}),(0,y.jsx)(k,{color:d,children:r})]})};export{D as n,A as t};
@@ -1,4 +0,0 @@
1
- import{o as e,t}from"./react-DW1tWzGJ.js";import{Jd as n,Kd as r,Vd as i,df as a,gd as o,hd as s,ut as c}from"./index-DIBimazR.js";import{a as l,i as u,n as d,t as f}from"./esm-LYuUsJ00.js";var p=a(),m=i((0,p.jsx)(`path`,{d:`M3 21h18v-2H3zM3 8v8l4-4zm8 9h10v-2H11zM3 3v2h18V3zm8 6h10V7H11zm0 4h10v-2H11z`}),`FormatIndentIncrease`),h=e(t(),1),g=r(o,{shouldForwardProp:e=>e!==`editorStyle`&&e!==`hasError`})(({theme:e,editorStyle:t,hasError:n})=>({border:`1px solid ${n?e.palette.error.main:e.palette.divider}`,borderRadius:e.shape.borderRadiusMedium,overflow:`hidden`,position:`relative`,backgroundColor:e.palette.background.paper,minHeight:t===`sidePanel`?void 0:e.spacing(8),"&:hover":{borderColor:e.palette.action.disabled},"&:focus-within":{borderColor:n?e.palette.error.main:e.palette.primary.main},"& .cm-editor":{backgroundColor:e.palette.background.paper,color:e.palette.text.primary,fontSize:e.fontSizes.smallBody,minHeight:`inherit`,outline:0,position:`relative`,zIndex:0},"& .cm-focused":{outline:0},"& .cm-content":{paddingTop:e.spacing(1),paddingRight:e.spacing(12),paddingBottom:e.spacing(1),minHeight:`inherit`},"& .cm-gutters":{backgroundColor:e.palette.background.alternative,borderRight:`1px solid ${e.palette.divider}`,color:e.palette.text.secondary,minHeight:`inherit`},"& .cm-lineNumbers .cm-gutterElement":{paddingLeft:e.spacing(.75),paddingRight:e.spacing(.75),textAlign:`center`},"& .cm-gutter":{minHeight:`inherit`},"& .cm-line":{paddingLeft:e.spacing(1),paddingRight:e.spacing(1)},"& .cm-scroller":{fontFamily:e.typography.fontFamily,minHeight:`inherit`},"& .cm-activeLine, & .cm-activeLineGutter":{backgroundColor:`transparent`},"& .cm-selectionBackground, & .cm-content ::selection":{backgroundColor:`${e.palette.primary.light} !important`},"& .cm-tooltip":{backgroundColor:e.palette.background.paper,border:`1px solid ${e.palette.divider}`,borderRadius:e.shape.borderRadiusMedium,boxShadow:e.shadows[3]},"& .cm-lintRange-error":{backgroundImage:`linear-gradient(45deg, transparent 65%, ${e.palette.error.main} 80%, transparent 90%),
2
- linear-gradient(135deg, transparent 5%, ${e.palette.error.main} 15%, transparent 25%),
3
- linear-gradient(135deg, transparent 45%, ${e.palette.error.main} 55%, transparent 65%),
4
- linear-gradient(45deg, transparent 25%, ${e.palette.error.main} 35%, transparent 50%)`,backgroundPosition:`0 100%`,backgroundRepeat:`repeat-x`,backgroundSize:`8px 3px`},"& .cm-diagnostic-error":{borderLeftColor:e.palette.error.main},...t===`sidePanel`&&{height:`100%`,border:0,backgroundColor:`transparent`,"&:hover, &:focus-within":{borderColor:`transparent`},"& .cm-editor":{height:`100%`,backgroundColor:`transparent`},"& .cm-gutters":{backgroundColor:`transparent`,color:e.palette.text.secondary}}})),_=r(s)(({theme:e})=>({position:`absolute`,top:e.spacing(.75),right:e.spacing(.75),zIndex:1,backgroundColor:e.palette.background.paper,"&:hover":{backgroundColor:e.palette.background.elevation1}})),v=r(`div`)(({theme:e})=>({padding:e.spacing(.5,1),borderTop:`1px solid ${e.palette.divider}`,backgroundColor:e.palette.background.alternative,color:e.palette.text.secondary,fontSize:e.fontSizes.smallBody})),y=r(`div`)(({theme:e})=>({display:`flex`,alignItems:`center`,gap:e.spacing(1),marginTop:e.spacing(.75),padding:e.spacing(1,1.5),border:`1px solid ${e.palette.error.border}`,borderRadius:e.shape.borderRadiusMedium,backgroundColor:e.palette.error.light,color:e.palette.error.dark,fontSize:e.fontSizes.smallBody,lineHeight:1.4})),b=r(`div`)({width:`100%`}),x=e=>`text`in e?e.text:JSON.stringify(e.json,void 0,2)??``,S=e=>{if(e.trim()!==``)try{JSON.parse(e);return}catch(e){return e instanceof Error?e.message:`Invalid JSON`}},C=({content:e,onChange:t,onBlur:r,validationError:i,readOnly:a=!1,statusBar:o=!1,editorStyle:s=`default`})=>{let C=n(),w=(0,h.useMemo)(()=>x(e),[e]),[T,E]=(0,h.useState)(),D=(0,h.useMemo)(()=>[u(),...a?[]:[d(l())]],[a]),O=!a&&i===void 0;(0,h.useEffect)(()=>{E(O?S(w):void 0)},[O,w]);let k=(0,h.useCallback)(e=>{O&&E(S(e)),t?.({text:e})},[t,O]),A=(0,h.useCallback)(()=>{let e;try{e=JSON.stringify(JSON.parse(w),void 0,2)}catch{return}t?.({text:e})},[t,w]),j=s===`sidePanel`?void 0:C.spacing(10),M=i??T;return(0,p.jsxs)(b,{children:[(0,p.jsxs)(g,{editorStyle:s,hasError:!!M,children:[a?null:(0,p.jsx)(_,{size:`small`,variant:`outlined`,startIcon:(0,p.jsx)(m,{}),onClick:A,children:`Format`}),(0,p.jsx)(f,{value:w,minHeight:j,height:s===`sidePanel`?`100%`:void 0,theme:`none`,extensions:D,onChange:k,onBlur:r,readOnly:a,editable:!a,basicSetup:{foldGutter:!1,lineNumbers:!1,highlightActiveLine:!1,highlightActiveLineGutter:!1}}),o?(0,p.jsx)(v,{children:`JSON`}):null]}),M?(0,p.jsxs)(y,{role:`alert`,children:[(0,p.jsx)(c,{fontSize:`small`}),M]}):null]})};export{C as default};
@@ -1 +0,0 @@
1
- import{o as e,t}from"./react-DW1tWzGJ.js";import{n}from"./formatPath-vbOoY_VU.js";import{$s as r,$u as i,Ac as a,Dd as o,Df as s,Ec as c,Ed as l,Fu as u,Gl as d,Gs as f,Hd as p,Hs as m,Hu as h,Ii as g,Jo as ee,Kd as _,Ks as v,Li as y,Ln as b,Mu as te,Nu as x,Oc as ne,Oi as re,Ou as ie,Pn as S,Pu as C,Qc as w,Ri as T,Ru as ae,Sc as E,Td as D,Ua as oe,Us as se,Vd as ce,Vo as O,Vu as le,Ws as ue,Yd as de,Yl as fe,Zc as k,_c as pe,aa as me,ad as he,an as ge,da as A,df as _e,ec as j,eo as M,fa as N,fc as P,gd as F,hc as I,hd as L,hl as ve,ir as R,ju as z,kc as ye,mc as be,nf as xe,od as Se,pc as B,ra as Ce,rf as we,tf as Te,to as Ee,uc as De,vc as Oe,vu as V,xf as H,xu as ke,zi as Ae}from"./index-DIBimazR.js";import{t as je}from"./useApiTokens-CdZD_-zn.js";var U=e(t(),1);function Me(e){return xe(`MuiTableContainer`,e)}Te(`MuiTableContainer`,[`root`]);var W=_e(),Ne=e=>{let{classes:t}=e;return de({root:[`root`]},Me,t)},Pe=_(`div`,{name:`MuiTableContainer`,slot:`Root`})({width:`100%`,overflowX:`auto`}),Fe=U.forwardRef(function(e,t){let n=p({props:e,name:`MuiTableContainer`}),{className:r,component:i=`div`,...a}=n,o={...n,component:i};return(0,W.jsx)(Pe,{ref:t,as:i,className:we(Ne(o).root,r),ownerState:o,...a})}),Ie=()=>(0,W.jsx)(l,{severity:`info`,children:(0,W.jsxs)(`p`,{children:[`Read the`,` `,(0,W.jsx)(`a`,{href:`https://docs.getunleash.io/sdks`,target:`_blank`,rel:`noreferrer`,children:`SDK overview`}),` `,`to connect Unleash to your application. Please note it can take up to `,(0,W.jsx)(`strong`,{children:`1 minute`}),` before a new API key is activated.`]})}),G=e(N(),1),K=({title:e,url:t})=>{let{setToastData:n}=j();return(0,W.jsxs)(z,{children:[(0,W.jsx)(x,{component:`th`,scope:`row`,children:e}),(0,W.jsx)(x,{children:(0,W.jsx)(`pre`,{style:{display:`inline`},children:t})}),(0,W.jsx)(x,{align:`center`,children:(0,W.jsx)(ae,{title:`Copy URL`,arrow:!0,children:(0,W.jsx)(o,{onClick:(e=>()=>{(0,G.default)(e),n({type:`success`,text:`Copied to clipboard`})})(t),size:`small`,"aria-label":`Copy ${e} to clipboard`,children:(0,W.jsx)(A,{})})})})]})},q=_(x)(({theme:e})=>({color:e.palette.text.secondary})),Le=({compact:e})=>{let{uiConfig:t}=k(),[n,r]=(0,U.useState)(!e),i=t.unleashUrl&&(n||!t.edgeUrl),a=e&&t.edgeUrl&&t.unleashUrl,o=t.edgeUrl?{edgeUrl:`${t.edgeUrl}/api/`,edgeFrontendUrl:`${t.edgeUrl}/api/frontend/`}:void 0,s=`${t.unleashUrl}/api/`,c=`${t.unleashUrl}/api/frontend/`;return(0,W.jsxs)(Fe,{role:`region`,"aria-live":`polite`,children:[(0,W.jsxs)(u,{"aria-label":`API URLs`,id:`api-urls-table`,children:[(0,W.jsx)(te,{children:(0,W.jsxs)(z,{children:[(0,W.jsx)(q,{children:`Type`}),(0,W.jsx)(q,{children:`URL`}),(0,W.jsx)(q,{align:`center`,children:`Actions`})]})}),(0,W.jsxs)(C,{children:[o&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(K,{title:`Edge Backend`,url:o.edgeUrl}),(0,W.jsx)(K,{title:`Edge Frontend`,url:o.edgeFrontendUrl})]}),i&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(K,{title:`Backend`,url:s}),(0,W.jsx)(K,{title:`Frontend`,url:c})]})]})]}),a&&(0,W.jsx)(L,{sx:{mt:1,marginInline:1.5},variant:`text`,size:`small`,"aria-expanded":n,"aria-controls":`api-urls-table`,onClick:()=>r(!n),children:n?`Show less`:`Show all`})]})},Re=[`Icon`,`createdAt`,`seenAt`],ze=[`Icon`,`project`,`seenAt`],J=_(D)(({theme:e})=>({margin:0,marginBottom:e.spacing(1.5),fontSize:e.fontSizes.smallBody,color:e.palette.text.primary})),Be=({compact:e=!1,table:t,columns:n,loading:r,globalFilter:a})=>{S([{condition:ie(ke.breakpoints.down(`xl`)),columns:Re},{condition:e,columns:ze}],t.setColumnVisibility,n);let o=t.getRowModel().rows.length;return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(V,{condition:o>0,show:(0,W.jsxs)(F,{sx:{mb:4},children:[(0,W.jsx)(Ie,{}),(0,W.jsxs)(F,{sx:{marginBlock:4},children:[(0,W.jsx)(J,{variant:`h2`,children:`API URLs`}),(0,W.jsx)(Le,{compact:e})]})]})}),(0,W.jsxs)(F,{sx:{overflowX:`auto`},children:[(0,W.jsx)(J,{variant:`h2`,children:`API Tokens`}),(0,W.jsx)(pe,{value:a,children:(0,W.jsx)(Ae,{tableInstance:t})})]}),(0,W.jsx)(V,{condition:o===0&&!r,show:(0,W.jsx)(V,{condition:a?.length>0,show:(0,W.jsxs)(E,{children:[`No tokens found matching “`,a,`”`]}),elseShow:(0,W.jsx)(E,{children:(0,W.jsxs)(`span`,{children:[`No tokens available. Read `,(0,W.jsx)(i,{href:`https://docs.getunleash.io/api`,target:`_blank`,rel:`noreferrer`,children:`API How-to guides`}),` `,` to learn more.`]})})})})]})},Ve=(e,t)=>{let n=t>=e;return{limitReached:n,limitMessage:n?`You have reached the limit of ${e} API tokens`:void 0}},He=({path:e,permission:t,project:n})=>{let r=s(),{tokens:i,loading:a}=je(),{uiConfig:o}=k(),{limitReached:c,limitMessage:l}=Ve(o.resourceLimits.apiTokens,i.length);return(0,W.jsx)(g,{Icon:Ee,onClick:()=>r(e),"data-testid":ve,permission:t,projectId:n,maxWidth:`700px`,disabled:a||c,tooltipProps:{title:l},children:`New API token`})},Ue=_(H)(({theme:e})=>({textDecoration:`none`,color:e.palette.links,"&:hover, &:focus":{textDecoration:`underline`}})),We=_(`div`)({display:`flex`,alignItems:`center`}),Ge=({projects:e,project:t})=>{let{searchQuery:n}=Oe(),r=e&&Array.isArray(e)&&e.length>1?e:[];if(r.length>0)return(0,W.jsx)(I,{children:(0,W.jsx)(d,{title:r.map((e,t)=>(0,W.jsxs)(U.Fragment,{children:[t>0&&`, `,!e||e===`*`?(0,W.jsx)(B,{search:n,children:`*`}):(0,W.jsx)(Ue,{to:`/projects/${e}`,children:(0,W.jsx)(B,{search:n,children:e})})]},e)),placement:`bottom-start`,arrow:!0,tabIndex:0,children:(0,W.jsxs)(`span`,{children:[`${r.length}`,` projects`]})})});if(r.length===1&&r[0]!==`*`||t&&t!==`*`){let e=t||r[0];return(0,W.jsx)(De,{to:`/projects/${e}`,title:e})}return(0,W.jsx)(I,{children:(0,W.jsx)(d,{title:`ALL current and future projects.`,placement:`bottom`,arrow:!0,children:(0,W.jsx)(We,{children:(0,W.jsx)(B,{search:n,children:`*`})})})})},Y=ce((0,W.jsx)(`path`,{d:`M21 10h-8.35C11.83 7.67 9.61 6 7 6c-3.31 0-6 2.69-6 6s2.69 6 6 6c2.61 0 4.83-1.67 5.65-4H13l2 2 2-2 2 2 4-4.04zM7 15c-1.65 0-3-1.35-3-3s1.35-3 3-3 3 1.35 3 3-1.35 3-3 3`}),`Key`),Ke=({secret:e,project:t,projects:n})=>{let r=e?.includes(`:`)?`v2`:`v1`,i=e?.startsWith(`*:`),a=n&&n?.length>1||n?.length===1&&n[0]!==`*`||t&&t!==`*`;return r===`v2`&&!i&&!a},qe=({...e})=>Ke(e)?(0,W.jsx)(R,{icon:(0,W.jsx)(d,{title:(0,W.jsxs)(`p`,{children:[`This is an orphaned token. All of its original projects have been deleted and it now has access to all current and future projects. You should stop using this token and delete it. Read more in`,` `,(0,W.jsx)(i,{target:`_blank`,rel:`noopener noreferrer`,href:`https://github.com/Unleash/unleash/releases/tag/v6.1.0`,children:`release notes`}),`.`]}),placement:`bottom-start`,arrow:!0,children:(0,W.jsx)(me,{"aria-label":`Orphaned token`,color:`warning`,"data-testid":`orphaned-token-icon`})})}):(0,W.jsx)(R,{icon:(0,W.jsx)(Y,{color:`disabled`})}),Je=(e,t)=>{let[n,r]=(0,U.useState)(``),i=(0,U.useMemo)(()=>({sorting:[{id:`createdAt`,desc:!0}]}),[]),o=(0,U.useMemo)(()=>[{id:`Icon`,cell:({row:e})=>(0,W.jsx)(qe,{secret:e.original.secret,project:e.original.project,projects:e.original.projects}),enableSorting:!1,enableGlobalFilter:!1,meta:{width:50}},{id:`tokenName`,header:`Token name`,accessorKey:`tokenName`,cell:T,meta:{minWidth:35}},{id:`type`,header:`Type`,accessorKey:`type`,cell:({getValue:e})=>{let t=Ye[String(e()??``).toLowerCase()];return(0,W.jsx)(T,{value:t?.label??``,subtitle:t?.title,subtitleTooltip:!0})},meta:{width:180}},{id:`project`,header:`Project`,accessorKey:`project`,cell:({row:e})=>(0,W.jsx)(Ge,{project:e.original.project,projects:e.original.projects}),meta:{width:160}},{id:`environment`,header:`Environment`,accessorKey:`environment`,cell:T,meta:{width:120}},{id:`createdAt`,header:`Created`,accessorKey:`createdAt`,cell:be,enableGlobalFilter:!1,meta:{width:150}},{id:`seenAt`,header:`Last seen`,accessorKey:`seenAt`,cell:y,enableGlobalFilter:!1,meta:{width:140}},{id:`Actions`,header:`Actions`,cell:e=>t({row:e.row}),enableSorting:!1,enableGlobalFilter:!1,meta:{width:120,align:`center`}}],[]);return{table:c({columns:o,data:e,initialState:i,state:{globalFilter:n},onGlobalFilterChange:r,getCoreRowModel:ne(),getSortedRowModel:a(),getFilteredRowModel:ye(),autoResetAll:!1,enableSortingRemoval:!1}),columns:o,globalFilter:n,setGlobalFilter:r}},Ye={client:{label:`BACKEND`,title:`Connect backend SDK or Unleash Edge`},backend:{label:`BACKEND`,title:`Connect backend SDK or Unleash Edge`},frontend:{label:`FRONTEND`,title:`Connect frontend SDK`},admin:{label:`ADMIN`,title:`Full access for managing Unleash`}},Xe=({token:e,project:t,permission:n,track:r})=>{let{setToastData:i}=j(),a=e=>{(0,G.default)(e)&&(i({type:`success`,text:`Token copied to clipboard`}),r&&typeof r==`function`&&r())};return(0,W.jsx)(M,{permission:n,projectId:t,tooltipProps:{title:`Copy token`,arrow:!0},onClick:()=>a(e.secret),size:`large`,children:(0,W.jsx)(A,{})})},Ze=_(`ul`)({marginBottom:0}),Qe=({token:e,permission:t,onRemove:n,project:i})=>{let[a,o]=(0,U.useState)(!1),{setToastData:s,setToastApiError:c}=j();return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(M,{permission:t,projectId:i,tooltipProps:{title:`Delete token`,arrow:!0},onClick:()=>o(!0),size:`large`,children:(0,W.jsx)(oe,{})}),(0,W.jsx)(f,{open:a,onClick:async()=>{try{await n(),o(!1),s({type:`success`,text:`API token removed`})}catch(e){c(r(e))}},onClose:()=>o(!1),title:`Confirm deletion`,children:(0,W.jsxs)(`div`,{children:[`Are you sure you want to delete the following API token?`,(0,W.jsx)(`br`,{}),(0,W.jsxs)(Ze,{children:[(0,W.jsxs)(`li`,{children:[(0,W.jsx)(`strong`,{children:`name`}),`:`,` `,(0,W.jsx)(`code`,{children:e.tokenName})]}),(0,W.jsxs)(`li`,{children:[(0,W.jsx)(`strong`,{children:`type`}),`: `,(0,W.jsx)(`code`,{children:e.type})]}),(0,W.jsxs)(`li`,{children:[(0,W.jsx)(`strong`,{children:`environment`}),`:`,` `,(0,W.jsx)(`code`,{children:e.environment})]})]})]})})]})},$e=_(`div`)(()=>({maxWidth:`400px`})),et=_(`form`)(()=>({display:`flex`,flexDirection:`column`,height:`100%`})),tt=_(re)(({theme:e})=>({width:`100%`,marginBottom:e.spacing(2)})),nt=_(se)(({theme:e})=>({marginBottom:e.spacing(2),minWidth:`400px`,[e.breakpoints.down(`sm`)]:{minWidth:`379px`}})),X=_(`p`)(({theme:e})=>({marginBottom:e.spacing(1)})),rt=_(`label`)(({theme:e})=>({marginBottom:e.spacing(1)})),Z=_(L)(({theme:e})=>({marginLeft:e.spacing(3)})),it=_(F)({marginTop:`auto`,display:`flex`,justifyContent:`flex-end`}),at=({children:e,actions:t,handleSubmit:n,handleCancel:r})=>{let{uiConfig:a}=k();return(0,W.jsxs)(et,{onSubmit:n,children:[(0,W.jsx)(V,{condition:!!a?.flags?.UNLEASH_CLOUD,show:(0,W.jsxs)(l,{severity:`info`,sx:{mb:4},children:[`Please be aware of our`,` `,(0,W.jsx)(i,{href:`https://www.getunleash.io/fair-use-policy`,children:`fair use policy`}),`.`]})}),e,(0,W.jsxs)(it,{children:[t,(0,W.jsx)(Z,{onClick:r,children:`Cancel`})]})]})},Q=function(e){return e.ADMIN=`ADMIN`,e.CLIENT=`CLIENT`,e.FRONTEND=`FRONTEND`,e}({}),ot=e=>{let{environments:t}=v(),n=t?.find(e=>e.enabled)?.name,r=O(ee,e),i=[{key:Q.CLIENT,label:`Backend SDK`,title:`Creates a backend token to connect a backend SDK or Unleash Edge`,enabled:O(`CREATE_CLIENT_API_TOKEN`)||r},{key:Q.FRONTEND,label:`Frontend SDK`,title:`Creates a frontend token to connect a frontend SDK`,enabled:O(`CREATE_FRONTEND_API_TOKEN`)||r}],a=i.find(e=>e.enabled)?.key,[o,s]=(0,U.useState)(``),[c,l]=(0,U.useState)(a||Q.CLIENT),[u,d]=(0,U.useState)([e||`*`]),[f,p]=(0,U.useState)(u),[m,h]=(0,U.useState)(),[g,_]=(0,U.useState)({});return(0,U.useEffect)(()=>{h(c===`ADMIN`?`*`:n)},[c,n]),{tokenName:o,type:c,apiTokenTypes:i,projects:u,environment:m,setTokenName:s,setTokenType:e=>{e===`ADMIN`?(l(Q.ADMIN),p(u),d([`*`]),h(`*`)):(l(e),d(f),h(n))},setProjects:d,setEnvironment:h,getApiTokenPayload:()=>({tokenName:o,type:c,environment:m,projects:u}),isValid:()=>{let e={};return o||(e.tokenName=`Token name is required`),u.length===0&&(e.projects=`At least one project is required`),_(e),Object.keys(e).length===0},clearErrors:e=>{if(e){let t={...g};delete t[e],_(t)}else _({})},errors:g}},st=({open:e,setOpen:t,closeConfirm:n,token:r,type:i})=>(0,W.jsxs)(f,{open:e,setOpen:t,onClick:n,primaryButtonText:`Close`,title:`New token created`,children:[(0,W.jsx)(D,{variant:`body1`,children:`Your new token has been created successfully.`}),(0,W.jsx)(b,{token:r}),(0,W.jsx)(V,{condition:i===Q.FRONTEND,show:(0,W.jsxs)(l,{sx:{mt:2},severity:`info`,children:[`By default, all `,Q.FRONTEND,` tokens may be used from any CORS origin. If you'd like to configure a strict set of origins, please use the`,` `,(0,W.jsx)(H,{to:`/admin/cors`,target:`_blank`,rel:`noreferrer`,children:`CORS origins configuration page`}),`.`]})})]}),ct=({tokenName:e,setTokenName:t,errors:n,clearErrors:r})=>(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(X,{children:`What would you like to call this token?`}),(0,W.jsx)(tt,{value:e,name:`tokenName`,onChange:e=>t(e.target.value),label:`Token name`,error:n.tokenName!==void 0,errorText:n.tokenName,onFocus:()=>r(`tokenName`),autoFocus:!0})]}),lt=({type:e,setType:t,apiTokenTypes:n})=>(0,W.jsx)($e,{children:(0,W.jsxs)(Se,{sx:{mb:2,width:`100%`},children:[(0,W.jsx)(rt,{id:`token-type`,children:`What do you want to connect?`}),(0,W.jsx)(le,{"aria-labelledby":`token-type`,defaultValue:`CLIENT`,name:`radio-buttons-group`,value:e,onChange:(e,n)=>t(n),children:n.map(({key:e,label:t,title:n,enabled:r})=>(0,W.jsx)(he,{value:e,sx:{mb:1},disabled:!r,control:(0,W.jsx)(h,{sx:{ml:.75,alignSelf:`flex-start`}}),label:(0,W.jsx)(F,{children:(0,W.jsxs)(F,{children:[(0,W.jsx)(D,{children:t}),(0,W.jsx)(D,{variant:`body2`,sx:{color:`text.secondary`},children:n})]})})},e))})]})}),ut=({type:e,environment:t,setEnvironment:n})=>{let{environments:r}=v(),i=e===Q.ADMIN?[{key:`*`,label:`ALL`}]:r.map(e=>({key:e.name,label:`${e.name.concat(e.enabled?``:` - deprecated`)}`,title:e.name,disabled:!1}));return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(X,{children:`Which environment should the token have access to?`}),(0,W.jsx)(nt,{disabled:e===Q.ADMIN,options:i,value:t,onChange:n,label:`Environment`,id:`api_key_environment`,name:`environment`,IconComponent:ue,fullWidth:!0})]})},$=e=>e.map(e=>({...e.user,joinedAt:new Date(e.joinedAt),createdBy:e.createdBy})),dt=e=>{let{data:t,error:r,mutate:i}=fe(n(`api/admin/groups/${e}`),ft);return(0,U.useMemo)(()=>({group:t&&{...t,users:$(t?.users??[])},loading:!r&&!t,refetchGroup:()=>i(),error:r}),[t,r,i])},ft=e=>fetch(e).then(w(`Group`)).then(e=>e.json()),pt=()=>{let{isEnterprise:e}=k(),{data:t,error:r,mutate:i}=m(e(),{serviceAccounts:[],rootRoles:[]},n(`api/admin/service-account`),mt);return(0,U.useMemo)(()=>({serviceAccounts:t?.serviceAccounts??[],roles:t?.rootRoles??[],loading:!r&&!t,refetch:()=>i(),error:r}),[t,r,i])},mt=e=>fetch(e).then(w(`Service Accounts`)).then(e=>e.json()),ht=_(`div`)(({theme:e})=>({display:`flex`,flexDirection:`column`,gap:e.spacing(.5),"& > *:not(:last-child)":{borderBottom:`1px solid ${e.palette.divider}`,paddingBottom:e.spacing(1)}})),gt=_(P)(()=>({display:`block`})),_t=({role:e,roles:t,value:n})=>{let{isEnterprise:r}=k();return r()?(0,W.jsx)(I,{children:(0,W.jsx)(Ce,{tooltip:(0,W.jsx)(ht,{children:(t||[e]).map(e=>(0,W.jsx)(ge,{roleId:e,tooltip:!0},e))}),children:(0,W.jsx)(gt,{children:n})})}):(0,W.jsx)(I,{children:n})};export{He as _,ut as a,st as c,at as d,X as f,Y as g,Je as h,dt as i,ot as l,Xe as m,pt as n,lt as o,Qe as p,$ as r,ct as s,_t as t,Q as u,Be as v};
@@ -1 +0,0 @@
1
- import{o as e,t}from"./react-DW1tWzGJ.js";import{$s as n,Dd as r,E as i,Gs as a,Gu as o,Ha as s,K as c,Kd as l,Qs as u,Ru as d,Sf as f,Td as p,Uu as m,Wu as h,Za as g,co as _,df as v,ds as y,ec as b,ei as x,gd as S,hd as C,mt as w,ni as T,rc as E,to as D,xd as O}from"./index-DIBimazR.js";var k=e(t(),1),A=v(),j=({isOpen:e,onConfirm:t,onClose:n,safeguardData:r,mode:i,safeguardType:o})=>{let{metricName:s}=r.impactMetric;return(0,A.jsx)(a,{title:`Request changes`,open:e,secondaryButtonText:`Cancel`,onClose:n,customButton:(0,A.jsx)(C,{color:`primary`,variant:`contained`,onClick:t,autoFocus:!0,children:`Add suggestion to draft`}),children:(0,A.jsxs)(`p`,{children:[i===`create`?`Add`:`Update`,` safeguard that an`,` `,o===`featureEnvironment`?`disables the environment`:`pauses automation`,` based on `,(0,A.jsx)(`strong`,{children:s})]})})},M=()=>{let{makeRequest:e,createRequest:t,errors:n,loading:r}=u({propagateErrors:!0});return{createOrUpdateReleasePlanSafeguard:async({projectId:n,featureName:r,environment:i,planId:a,body:o})=>{let s=t(`api/admin/projects/${n}/features/${r}/environments/${i}/release-plans/${a}/safeguards`,{method:`PUT`,body:JSON.stringify(o)},`createOrUpdateReleasePlanSafeguard`);await e(s.caller,s.id)},createOrUpdateFeatureEnvironmentSafeguard:async({projectId:n,featureName:r,environment:i,body:a})=>{let o=t(`api/admin/projects/${n}/features/${r}/environments/${i}/safeguards`,{method:`PUT`,body:JSON.stringify(a)},`createOrUpdateFeatureEnvironmentSafeguard`);await e(o.caller,o.id)},deleteReleasePlanSafeguard:async({projectId:n,featureName:r,environment:i,planId:a,safeguardId:o})=>{let s=t(`api/admin/projects/${n}/features/${r}/environments/${i}/release-plans/${a}/safeguards/${o}`,{method:`DELETE`},`deleteReleasePlanSafeguard`);await e(s.caller,s.id)},deleteFeatureEnvironmentSafeguard:async({projectId:n,featureName:r,environment:i,safeguardId:a})=>{let o=t(`api/admin/projects/${n}/features/${r}/environments/${i}/safeguards/${a}`,{method:`DELETE`},`deleteFeatureEnvironmentSafeguard`);await e(o.caller,o.id)},errors:n,loading:r}},N=({open:e,onClose:t,onConfirm:n,isDeleting:r=!1})=>(0,A.jsxs)(a,{title:`Remove safeguard?`,open:e,primaryButtonText:r?`Removing...`:`Remove safeguard`,secondaryButtonText:`Cancel`,onClick:n,onClose:t,disabledPrimaryButton:r,children:[(0,A.jsx)(`p`,{children:`You are about to remove the safeguard that pauses automation when conditions are met.`}),(0,A.jsx)(`br`,{}),(0,A.jsx)(`p`,{children:`This action cannot be undone.`})]}),P=l(`div`)(({theme:e})=>({display:`flex`,padding:e.spacing(.25,.25),backgroundColor:w(e),borderTop:`1px solid ${e.palette.divider}`,borderBottom:`1px solid ${e.palette.divider}`,"& > form":{borderRadius:0,border:`none`}})),F=l(`div`)(({theme:e})=>({display:`flex`,alignItems:`center`,width:`100%`,paddingRight:e.spacing(2)})),I=l(h)(({theme:e})=>({[`& .${o.paper}`]:{maxWidth:e.spacing(45)}})),L=l(O)(({theme:e})=>({padding:e.spacing(1,2,.5,2),lineHeight:1.6,textTransform:`uppercase`,letterSpacing:.5,fontSize:e.typography.caption.fontSize,fontWeight:e.typography.fontWeightBold,color:e.palette.text.secondary,backgroundColor:`transparent`})),R={whiteSpace:`normal`,alignItems:`flex-start`,py:1.25},z=l(`li`)({listStyle:`none`,padding:0,margin:0}),B=l(p)(({theme:e})=>({display:`block`,marginTop:e.spacing(.25),color:e.palette.text.secondary})),V=l(r)(({theme:e})=>({color:e.palette.action.active,padding:e.spacing(.5)})),H=()=>{let[e,t]=f(),{trackEvent:n}=E();return(0,A.jsx)(d,{title:`Learn how safeguards work`,arrow:!0,children:(0,A.jsx)(V,{onClick:()=>{n(`safeguards`,{props:{eventType:`splash opened from feature page`}}),e.set(`splash`,`impact-metrics-safeguards`),t(e)},size:`small`,"aria-label":`Learn how safeguards work`,children:(0,A.jsx)(s,{fontSize:`small`})})})},U=({onSelect:e,releasePlan:t})=>{let[n,r]=(0,k.useState)(null),{trackEvent:i}=E();return(0,A.jsxs)(P,{children:[(0,A.jsxs)(F,{children:[(0,A.jsx)(c,{onClick:e=>{i(`safeguards`,{props:{eventType:`choose safeguard opened`}}),r(e.currentTarget)},color:`primary`,startIcon:(0,A.jsx)(D,{}),sx:{mt:2,mb:2,ml:2,mr:.5},children:`Add safeguard`}),(0,A.jsx)(H,{})]}),(0,A.jsxs)(I,{anchorEl:n,open:!!n,onClose:()=>r(null),children:[(0,A.jsx)(L,{disableSticky:!0,children:`Select safeguard action`}),(0,A.jsx)(m,{sx:R,onClick:()=>{i(`safeguards`,{props:{eventType:`form opened`,safeguardType:`featureEnvironment`}}),e(`featureEnvironment`),r(null)},children:(0,A.jsxs)(S,{children:[(0,A.jsx)(p,{variant:`body2`,children:`Disable environment`}),(0,A.jsx)(B,{variant:`caption`,children:`If your chosen metric crosses its threshold, this flag is turned off in this environment. Existing users stop seeing the flag immediately.`})]})}),(0,A.jsx)(d,{title:t?``:`Add a release plan to use this safeguard`,placement:`right`,arrow:!0,children:(0,A.jsx)(z,{children:(0,A.jsx)(m,{component:`div`,sx:R,disabled:!t,onClick:()=>{i(`safeguards`,{props:{eventType:`form opened`,safeguardType:`releasePlan`}}),e(`releasePlan`),r(null)},children:(0,A.jsxs)(S,{children:[(0,A.jsx)(p,{variant:`body2`,children:`Pause release plan automation`}),(0,A.jsx)(B,{variant:`caption`,children:`If your chosen metric crosses its threshold, automatic milestone progression stops. The current milestone keeps serving traffic.`})]})})})})]})]})},W=({projectId:e,featureId:t,environmentName:r,safeguardType:i,releasePlan:a,safeguard:o,onSafeguardChange:s})=>{let{setToastData:c,setToastApiError:l}=b(),{trackEvent:u}=E(),{addChange:d}=T(),{isChangeRequestConfigured:f}=y(e),{data:p,refetch:m}=x(e),{createOrUpdateReleasePlanSafeguard:h,deleteReleasePlanSafeguard:g,createOrUpdateFeatureEnvironmentSafeguard:_,deleteFeatureEnvironmentSafeguard:v}=M(),[S,C]=(0,k.useState)(!1),[w,D]=(0,k.useState)(!1),[O,A]=(0,k.useState)(!1),[j,N]=(0,k.useState)(null),[P,F]=(0,k.useState)(!1),I=f(r),L=i===`releasePlan`&&a?n=>h({projectId:e,featureName:t,environment:r,planId:a.id,body:n}):n=>_({projectId:e,featureName:t,environment:r,body:n}),R=i===`releasePlan`&&a?n=>g({projectId:e,featureName:t,environment:r,planId:a.id,safeguardId:n}):n=>v({projectId:e,featureName:t,environment:r,safeguardId:n}),z=async e=>{if(u(`safeguards`,{props:{eventType:`safeguard submitted`,safeguardType:i}}),I){N(e),A(!0);return}try{await L(e),c({type:`success`,text:`Safeguard added successfully`}),s()}catch(e){l(n(e))}},B=async()=>{if(j)try{if(i===`featureEnvironment`)await d(e,r,{feature:t,action:`changeFeatureEnvSafeguard`,payload:{safeguard:j}});else{if(!a)return;await d(e,r,{feature:t,action:`changeReleasePlanSafeguard`,payload:{planId:a.id,safeguard:j}})}await m(),c({type:`success`,text:`Added to draft`}),s()}catch(e){l(n(e))}finally{A(!1),N(null)}},V=()=>{o&&(I?D(!0):C(!0))},H=async()=>{if(!(!o||P)){F(!0);try{await R(o.id),c({type:`success`,text:`Safeguard deleted successfully`}),s()}catch(e){l(n(e))}finally{F(!1),C(!1)}}},U=async()=>{if(!(!o||P)){F(!0);try{if(i===`featureEnvironment`)await d(e,r,{feature:t,action:`deleteFeatureEnvSafeguard`,payload:{safeguardId:o.id}});else{if(!a)return;await d(e,r,{feature:t,action:`deleteReleasePlanSafeguard`,payload:{planId:a.id,safeguardId:o.id}})}await m(),c({type:`success`,text:`Added to draft`}),s()}catch(e){l(n(e))}finally{F(!1),D(!1)}}},W=e=>{let t=(e.action===`changeReleasePlanSafeguard`||e.action===`deleteReleasePlanSafeguard`)&&!!a&&e.payload?.planId===a.id,n=e.action===`changeFeatureEnvSafeguard`||e.action===`deleteFeatureEnvSafeguard`;return t||n};return{handleSubmit:z,handleDeleteRequest:V,pendingSafeguardAction:(0,k.useMemo)(()=>{if(!p)return null;for(let e of p){if(e.environment!==r)continue;let n=e.features.find(e=>e.name===t);if(!n)continue;let i=n.changes.find(W);if(i)return i.action}return null},[p,r,t,a?.id]),deleteDialog:{open:S,isDeleting:P,onConfirm:H,onClose:()=>{P||C(!1)}},deleteChangeRequestDialog:{open:w,isDeleting:P,onConfirm:U,onClose:()=>D(!1)},submitChangeRequestDialog:{open:O,data:j,onConfirm:B,onClose:()=>{A(!1),N(null)}}}},G=({safeguardType:e,releasePlan:t,safeguard:n,environmentName:r,featureId:o,onSafeguardChange:s,onCancel:c,headerAction:l})=>{let{handleSubmit:u,handleDeleteRequest:d,pendingSafeguardAction:f,deleteDialog:p,deleteChangeRequestDialog:m,submitChangeRequestDialog:h}=W({projectId:g(`projectId`),featureId:o,environmentName:r,safeguardType:e,releasePlan:t,safeguard:n,onSafeguardChange:s});return(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(i,{safeguard:n,onSubmit:u,onCancel:c,onDelete:n?d:void 0,environment:r,featureId:o,badge:f===`deleteReleasePlanSafeguard`||f===`deleteFeatureEnvSafeguard`?(0,A.jsx)(_,{color:`error`,children:`Deleted in draft`}):f===`changeReleasePlanSafeguard`||f===`changeFeatureEnvSafeguard`?(0,A.jsx)(_,{color:`warning`,children:`Modified in draft`}):void 0,safeguardType:e,headerAction:l}),h.data&&(0,A.jsx)(j,{isOpen:h.open,onConfirm:h.onConfirm,onClose:()=>{h.onClose(),c()},safeguardData:h.data,environment:r,mode:n?`edit`:`create`,safeguardType:e}),n&&(0,A.jsx)(N,{open:p.open,onClose:p.onClose,onConfirm:p.onConfirm,isDeleting:p.isDeleting}),n&&(0,A.jsx)(a,{title:`Request changes`,open:m.open,secondaryButtonText:`Cancel`,onClose:m.onClose,primaryButtonText:`Add suggestion to draft`,onClick:m.onConfirm,disabledPrimaryButton:m.isDeleting,children:(0,A.jsxs)(`p`,{children:[(0,A.jsx)(`strong`,{children:`Remove`}),` safeguard`,t&&(0,A.jsxs)(A.Fragment,{children:[` `,`from release plan`,` `,(0,A.jsx)(`strong`,{children:t.name})]}),` `,`for `,(0,A.jsx)(`strong`,{children:o}),` in`,` `,(0,A.jsx)(`strong`,{children:r})]})})]})},K=({featureEnvSafeguard:e,releasePlan:t,environmentName:n,featureId:r,onSafeguardChange:i})=>{let a=t?.safeguards?.[0],[o,s]=(0,k.useState)(null),c=()=>{s(null),i()};return e||a?(0,A.jsxs)(A.Fragment,{children:[e&&(0,A.jsx)(P,{children:(0,A.jsx)(G,{safeguardType:`featureEnvironment`,safeguard:e,environmentName:n,featureId:r,onSafeguardChange:c,onCancel:()=>{},headerAction:(0,A.jsx)(H,{})})}),a&&(0,A.jsx)(P,{children:(0,A.jsx)(G,{safeguardType:`releasePlan`,releasePlan:t,safeguard:a,environmentName:n,featureId:r,onSafeguardChange:c,onCancel:()=>{},headerAction:(0,A.jsx)(H,{})})})]}):o===`featureEnvironment`?(0,A.jsx)(P,{children:(0,A.jsx)(G,{safeguardType:`featureEnvironment`,environmentName:n,featureId:r,onSafeguardChange:i,onCancel:()=>s(null)})}):o===`releasePlan`&&t?(0,A.jsx)(P,{children:(0,A.jsx)(G,{safeguardType:`releasePlan`,releasePlan:t,environmentName:n,featureId:r,onSafeguardChange:i,onCancel:()=>s(null)})}):(0,A.jsx)(U,{onSelect:s,releasePlan:t})};export{U as AddSafeguard,K as Safeguard,K as default};
@@ -1,2 +0,0 @@
1
- import{Ed as e,Kd as t,df as n,ku as r,ta as i,yd as a}from"./index-DIBimazR.js";import{a as o,f as s,i as c,m as l}from"./DialogWithAside-CtKlvRxJ.js";var u=(e,t)=>{let n=e.split(`---
2
- `)[3];return n?n.replaceAll(`<YOUR_FLAG>`,t):null},d=n(),f=()=>(0,d.jsx)(e,{severity:`error`,children:`This SDK is missing a flag usage example. Please let us know so we can add one!`}),p=({sdkName:e,feature:t})=>{let n=o[e],r=n?u(n,t):null;return r===null?(0,d.jsx)(f,{}):(0,d.jsx)(i,{components:{code:c},children:r})},m=new Set(l.map(e=>e.name)),h=t(a)(({theme:e})=>({minWidth:e.spacing(20),maxWidth:e.spacing(32.5)})),g=t(`li`)(({theme:e})=>({display:`flex`,alignItems:`center`,gap:e.spacing(1)})),_=t(`img`)(({theme:e})=>({width:e.spacing(2.5),height:e.spacing(2.5),flexShrink:0,borderRadius:e.shape.borderRadiusSmall})),v=t(`span`)({flex:1}),y=({value:e,onChange:t})=>{let n=s.map(e=>({...e,group:m.has(e.name)?`Backend SDKs`:`Frontend SDKs`})).sort((e,t)=>e.group.localeCompare(t.group)||e.name.localeCompare(t.name));return(0,d.jsx)(h,{options:n,value:n.find(t=>t.name===e)??null,groupBy:e=>e.group,getOptionLabel:e=>e.name,isOptionEqualToValue:(e,t)=>e.name===t.name,onChange:(e,n)=>{n?.name&&t(n.name)},renderOption:({key:e,...t},n)=>(0,d.jsxs)(g,{...t,children:[(0,d.jsx)(_,{src:n.icon,alt:``}),(0,d.jsx)(v,{children:n.name})]},e),renderInput:e=>(0,d.jsx)(r,{...e,label:`SDK`,size:`small`})})};export{p as n,y as t};
@@ -1 +0,0 @@
1
- import{i as e,o as t,t as n}from"./react-DW1tWzGJ.js";import{Dd as r,Gd as i,Jd as a,Kd as o,Ru as s,Sf as ee,Td as c,Vd as l,bu as u,df as d,gd as f,hd as p,it as te,rt as ne,xu as m,yu as re}from"./index-DIBimazR.js";import{c as h,d as g,f as _,n as v,o as y,s as b,t as x}from"./DialogWithAside-CtKlvRxJ.js";import{n as S,t as ie}from"./SelectSdk-Cxw0QOfY.js";import{n as C,t as w}from"./OnboardingProgress-DECLEUJE.js";var ae=e({Default:()=>se,WithLongContent:()=>ce,meta:()=>oe}),T=t(n(),1),E=d(),oe={title:`Common/DialogWithAside`,background:`application`},D=()=>(0,E.jsxs)(f,{sx:{p:3,display:`flex`,flexDirection:`column`,gap:2},children:[(0,E.jsx)(c,{variant:`body2`,sx:{fontWeight:`bold`},children:`Aside panel`}),(0,E.jsx)(c,{variant:`body2`,children:`This area is always 320 px wide and hidden below the md breakpoint. The close button in the header handles dismissal on all screen sizes.`})]}),se=()=>{let[e,t]=(0,T.useState)(!0);return(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(p,{variant:`contained`,onClick:()=>t(!0),children:`Open dialog`}),(0,E.jsx)(x,{open:e,onClose:()=>t(!1),title:`Dialog title`,aside:(0,E.jsx)(D,{}),children:(0,E.jsxs)(f,{sx:{p:3,display:`flex`,flexDirection:`column`,gap:2},children:[(0,E.jsx)(c,{variant:`body1`,sx:{fontWeight:`bold`},children:`Main content`}),(0,E.jsx)(c,{variant:`body2`,children:`Children are rendered in the scrollable left column.`})]})})]})},ce=()=>{let[e,t]=(0,T.useState)(!1);return(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(p,{variant:`contained`,onClick:()=>t(!0),children:`Open dialog`}),(0,E.jsx)(x,{open:e,onClose:()=>t(!1),title:`Scrolling content`,aside:(0,E.jsx)(D,{}),children:(0,E.jsx)(f,{sx:{p:3,display:`flex`,flexDirection:`column`,gap:3},children:Array.from({length:12},(e,t)=>(0,E.jsxs)(f,{children:[(0,E.jsxs)(c,{variant:`body2`,sx:{fontWeight:`bold`,mb:.5},children:[`Section `,t+1]}),(0,E.jsx)(c,{variant:`body2`,children:`Content scrolls inside the left column while the aside and header stay fixed.`})]},t))})})]})},le=e({Android:()=>V,DotNet:()=>A,Flutter:()=>H,Go:()=>k,Java:()=>P,JavaScript:()=>I,MissingSnippet:()=>fe,NodeJs:()=>de,Php:()=>M,Python:()=>F,React:()=>L,Ruby:()=>j,Rust:()=>N,Svelte:()=>z,Swift:()=>B,Vue:()=>R,meta:()=>ue}),ue={title:`Onboarding/ImplementFlagDialog/FlagUsageSnippet`,background:`paper`},O=`my-feature-flag`,de=()=>(0,E.jsx)(S,{sdkName:`Node.js`,feature:O}),k=()=>(0,E.jsx)(S,{sdkName:`Go`,feature:O}),A=()=>(0,E.jsx)(S,{sdkName:`.NET`,feature:O}),j=()=>(0,E.jsx)(S,{sdkName:`Ruby`,feature:O}),M=()=>(0,E.jsx)(S,{sdkName:`PHP`,feature:O}),N=()=>(0,E.jsx)(S,{sdkName:`Rust`,feature:O}),P=()=>(0,E.jsx)(S,{sdkName:`Java`,feature:O}),F=()=>(0,E.jsx)(S,{sdkName:`Python`,feature:O}),I=()=>(0,E.jsx)(S,{sdkName:`JavaScript`,feature:O}),L=()=>(0,E.jsx)(S,{sdkName:`React`,feature:O}),R=()=>(0,E.jsx)(S,{sdkName:`Vue`,feature:O}),z=()=>(0,E.jsx)(S,{sdkName:`Svelte`,feature:O}),B=()=>(0,E.jsx)(S,{sdkName:`Swift`,feature:O}),V=()=>(0,E.jsx)(S,{sdkName:`Android`,feature:O}),H=()=>(0,E.jsx)(S,{sdkName:`Flutter`,feature:O}),fe=()=>(0,E.jsx)(S,{sdkName:`Unknown`,feature:`my-feature-flag`}),pe=e({Default:()=>ge,meta:()=>me}),me={title:`Onboarding/ImplementFlagDialog/SelectSdk`,background:`paper`},he=({initial:e})=>{let[t,n]=(0,T.useState)(e);return(0,E.jsx)(ie,{value:t,onChange:n})},ge=()=>(0,E.jsx)(he,{initial:_[0].name}),_e=e({Default:()=>ye,meta:()=>ve}),ve={title:`Onboarding / GenerateApiKey`,background:`paper`},ye=()=>(0,E.jsx)(b,{projectId:`my-project`,environments:[`production`,`development`,`staging`],sdk:{type:`client`},onApiKeyChange:e=>console.log(`API key changed:`,e),onNext:()=>console.log(`Next clicked`)}),be=e({Default:()=>Se,LongKey:()=>Ce,NoKey:()=>we,meta:()=>xe}),xe={title:`Onboarding / GenerateApiKeySummary`,background:`paper`},Se=()=>(0,E.jsx)(y,{apiKey:`my-project:production.0efcb2447a1b9f417c90afea8415dd867f1998bea7db9c13714554f3`}),Ce=()=>(0,E.jsx)(y,{apiKey:`my-very-long-project-name:some-environment-name.averylongsecretkeythatshouldgettruncated12345`}),we=()=>(0,E.jsx)(y,{}),Te=e({Default:()=>De,meta:()=>Ee}),Ee={title:`Onboarding / TokenExplanation`,background:`paper`},De=()=>(0,E.jsx)(h,{project:`my-project-here`,environment:`production`,secret:`0efcb2447a1b9f417c90afea8415dd867f1998bea7db9c13714554f3`}),Oe=e({Default:()=>Ae,WithSelection:()=>je,meta:()=>ke}),ke={title:`Onboarding / SelectSdk`,background:`paper`},Ae=()=>(0,E.jsx)(g,{onSelect:e=>console.log(`Selected SDK:`,e)}),je=()=>(0,E.jsx)(g,{sdk:{name:`Node.js`,type:`client`},onSelect:e=>console.log(`Selected SDK:`,e)}),Me=e({Default:()=>Fe,meta:()=>Ne}),Ne={title:`Onboarding/SdkEvaluationStatus`,background:`paper`},Pe=o(`div`)(({theme:e})=>({display:`flex`,flexDirection:`column`,gap:e.spacing(4),maxWidth:600})),U=o(`div`)(({theme:e})=>({display:`flex`,flexDirection:`column`,gap:e.spacing(1)})),W={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.`},G={connectedTitle:`Got the first evaluation!`,connectedBody:`Your flag is wired up. Finish setup to close this dialog.`,waitingTitle:`Listening for the first evaluation…`,waitingBody:`Run your app and evaluate your flag.`},Fe=()=>(0,E.jsxs)(Pe,{children:[(0,E.jsxs)(U,{children:[(0,E.jsx)(c,{variant:`subtitle2`,children:`ConfigureSdk — waiting`}),(0,E.jsx)(v,{sdkConnected:!1,...W})]}),(0,E.jsxs)(U,{children:[(0,E.jsx)(c,{variant:`subtitle2`,children:`ConfigureSdk — waiting with troubleshooting`}),(0,E.jsx)(v,{sdkConnected:!1,showTroubleshooting:!0,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.`,...W})]}),(0,E.jsxs)(U,{children:[(0,E.jsx)(c,{variant:`subtitle2`,children:`ConfigureSdk — connected`}),(0,E.jsx)(v,{sdkConnected:!0,...W})]}),(0,E.jsxs)(U,{children:[(0,E.jsx)(c,{variant:`subtitle2`,children:`ImplementFlagDialog — waiting`}),(0,E.jsx)(v,{sdkConnected:!1,...G})]}),(0,E.jsxs)(U,{children:[(0,E.jsx)(c,{variant:`subtitle2`,children:`ImplementFlagDialog — evaluated`}),(0,E.jsx)(v,{sdkConnected:!0,...G})]})]}),Ie=e({Completed:()=>Ve,FirstStep:()=>ze,JustStarted:()=>Re,SecondStep:()=>Be,meta:()=>Le}),Le={title:`Onboarding / OnboardingProgress`,background:`paper`},Re=()=>(0,E.jsx)(w,{step:0,maxSteps:3,onDismiss:()=>{}}),ze=()=>(0,E.jsx)(w,{step:1,maxSteps:3,onDismiss:()=>{}}),Be=()=>(0,E.jsx)(w,{step:2,maxSteps:3,onDismiss:()=>{}}),Ve=()=>(0,E.jsx)(w,{step:3,maxSteps:3,onDismiss:()=>{}}),He=e({Active:()=>Ge,Disabled:()=>We,Done:()=>Ke,meta:()=>Ue}),Ue={title:`Onboarding / ConnectSdkStep`,background:`paper`},We=()=>(0,E.jsx)(C,{projectId:`my-project`,setConnectSdkOpen:(...e)=>{console.log(`Open Connect SDK`,e)},state:`disabled`}),Ge=()=>(0,E.jsx)(C,{projectId:`my-project`,setConnectSdkOpen:(...e)=>{console.log(`Open Connect SDK`,e)},state:`active`}),Ke=()=>(0,E.jsx)(C,{projectId:`my-project`,setConnectSdkOpen:(...e)=>{console.log(`Open Connect SDK`,e)},state:`done`}),qe=e({AllColors:()=>et,meta:()=>Je}),Je={title:`Theme / Colors`,background:`application`},Ye=new Set([`mode`,`augmentColor`,`getContrastText`,`contrastThreshold`,`tonalOffset`]);function K(e,t=``){if(typeof e!=`object`||!e)return[];let n=[];for(let[r,i]of Object.entries(e)){if(Ye.has(r)||typeof i==`function`)continue;let e=t?`${t}.${r}`:r;typeof i==`string`&&Xe(i)?n.push({path:e,value:i}):Array.isArray(i)&&i.length>0&&i.every(e=>typeof e==`string`)?n.push({path:e,values:i}):typeof i==`object`&&i&&!Array.isArray(i)&&n.push(...K(i,e))}return n}function Xe(e){return e.startsWith(`#`)||e.startsWith(`rgb`)||e.startsWith(`hsl`)}function Ze(e){let t=new Map;for(let n of e){let e=n.path.split(`.`)[0];t.has(e)||t.set(e,[]),t.get(e).push(n)}return Array.from(t.entries())}var q=({color:e,size:t=36})=>(0,E.jsx)(f,{title:e,sx:{width:t,height:t,background:e,borderRadius:`4px`,border:`1px solid rgba(128,128,128,0.2)`,flexShrink:0}}),Qe=({path:e,value:t})=>(0,E.jsxs)(f,{sx:{display:`flex`,alignItems:`center`,gap:1.5,py:.5},children:[(0,E.jsx)(q,{color:t}),(0,E.jsxs)(f,{sx:{flex:1,minWidth:0},children:[(0,E.jsx)(c,{component:`div`,sx:{fontFamily:`monospace`,fontSize:`0.7rem`,color:`text.secondary`,wordBreak:`break-all`,lineHeight:1.4},children:e}),(0,E.jsx)(c,{component:`div`,sx:{fontFamily:`monospace`,fontSize:`0.65rem`,color:`text.disabled`,lineHeight:1.4},children:t})]})]}),$e=({path:e,values:t})=>(0,E.jsxs)(f,{sx:{py:.75},children:[(0,E.jsxs)(c,{component:`div`,sx:{fontFamily:`monospace`,fontSize:`0.7rem`,color:`text.secondary`,mb:.5},children:[e,` (`,t.length,`)`]}),(0,E.jsx)(f,{sx:{display:`flex`,flexWrap:`wrap`,gap:.5},children:t.map((e,t)=>(0,E.jsx)(q,{color:e,size:24},t))})]}),J=({theme:e,label:t})=>{let n=Ze(K(e.palette));return(0,E.jsx)(i,{theme:e,children:(0,E.jsxs)(f,{sx:{flex:1,minWidth:0,bgcolor:`background.paper`,borderRadius:1,p:2},children:[(0,E.jsx)(c,{variant:`subtitle1`,sx:{fontWeight:700,mb:2,pb:1,borderBottom:`2px solid`,borderColor:`divider`,color:`text.primary`},children:t}),n.map(([e,t])=>(0,E.jsxs)(f,{sx:{mb:2.5},children:[(0,E.jsx)(c,{component:`div`,sx:{fontSize:`0.6rem`,fontWeight:700,letterSpacing:`0.1em`,textTransform:`uppercase`,color:`text.disabled`,mb:.5,pb:.25,borderBottom:`1px solid`,borderColor:`divider`},children:e}),t.map(e=>`value`in e?(0,E.jsx)(Qe,{path:e.path,value:e.value},e.path):(0,E.jsx)($e,{path:e.path,values:e.values},e.path))]},e))]})})},et=()=>(0,E.jsxs)(f,{sx:{display:`flex`,gap:2,alignItems:`flex-start`},children:[(0,E.jsx)(J,{theme:m,label:`Light`}),(0,E.jsx)(J,{theme:u,label:`Dark`})]}),tt=l((0,E.jsx)(`path`,{d:`M17 7h-4v2h4c1.65 0 3 1.35 3 3s-1.35 3-3 3h-4v2h4c2.76 0 5-2.24 5-5s-2.24-5-5-5m-6 8H7c-1.65 0-3-1.35-3-3s1.35-3 3-3h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4zm-3-4h8v2H8z`}),`LinkOutlined`),nt=Object.assign({"../common/DialogWithAside/DialogWithAside.story.tsx":ae,"../feature/FeatureView/FeatureOverview/ImplementFlagDialog/FlagUsageSnippet.story.tsx":le,"../feature/FeatureView/FeatureOverview/ImplementFlagDialog/SelectSdk.story.tsx":pe,"../onboarding/dialog/ConnectSdkDialog/GenerateApiKey/GenerateApiKey.story.tsx":_e,"../onboarding/dialog/ConnectSdkDialog/GenerateApiKey/GenerateApiKeySummary.story.tsx":be,"../onboarding/dialog/ConnectSdkDialog/GenerateApiKey/TokenExplanation.story.tsx":Te,"../onboarding/dialog/ConnectSdkDialog/SelectSdk/SelectSdk.story.tsx":Oe,"../onboarding/dialog/SdkEvaluationStatus.story.tsx":Me,"../onboarding/flow/OnboardingProgress.story.tsx":Ie,"../onboarding/flow/steps/ConnectSdkStep.story.tsx":He,"../../themes/ThemeColors.story.tsx":qe});function rt(){let e=[];for(let[t,n]of Object.entries(nt)){if(!n.meta)continue;let r=Object.entries(n).filter(([e,t])=>e!==`meta`&&typeof t==`function`).map(([e,t])=>({name:e,component:t}));if(r.length===0)continue;let i=n.meta.title.split(`/`).map(e=>e.trim()),a=i.pop()??n.meta.title,o=i.length>0?i.join(` / `):`General`;e.push({moduleKey:t,meta:n.meta,category:o,name:a,stories:r})}return e.sort((e,t)=>e.category.localeCompare(t.category)||e.name.localeCompare(t.name))}var Y=rt(),X=e=>e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-|-$/g,``),Z=e=>e.toLowerCase().replace(/[^a-z0-9]+/g,`-`),Q=e=>`${X(e.category)}/${X(e.name)}`,it=[{key:`paper`,label:`Paper`},{key:`elevation1`,label:`Elevation 1`},{key:`elevation2`,label:`Elevation 2`},{key:`application`,label:`Application`},{key:`sidebar`,label:`Sidebar`}],$=o(`div`)({display:`flex`,height:`100vh`,overflow:`hidden`}),at=o(`nav`)(({theme:e})=>({width:220,flexShrink:0,borderRight:`1px solid ${e.palette.divider}`,display:`flex`,flexDirection:`column`,overflow:`hidden`,background:e.palette.background.paper})),ot=o(`div`)(({theme:e})=>({display:`flex`,alignItems:`center`,justifyContent:`space-between`,padding:e.spacing(1.5,2),borderBottom:`1px solid ${e.palette.divider}`,flexShrink:0})),st=o(`div`)({flex:1,overflowY:`auto`,padding:`8px 4px`}),ct=o(`div`)(({theme:e})=>({fontSize:10,fontWeight:700,letterSpacing:`0.1em`,textTransform:`uppercase`,color:e.palette.text.disabled,padding:e.spacing(1.5,1.5,.5)})),lt=o(`button`,{shouldForwardProp:e=>e!==`isSelected`})(({theme:e,isSelected:t})=>({display:`block`,width:`100%`,textAlign:`left`,border:`none`,borderRadius:e.shape.borderRadius,padding:e.spacing(.75,1.5),cursor:`pointer`,fontSize:13,background:t?e.palette.action.selected:`transparent`,color:t?e.palette.primary.main:e.palette.text.primary,fontWeight:t?500:400,"&:hover":{background:t?e.palette.action.selected:e.palette.action.hover}})),ut=o(`a`,{shouldForwardProp:e=>e!==`isActive`})(({theme:e,isActive:t})=>({display:`block`,padding:e.spacing(.5,1.5,.5,3.5),fontSize:12,color:t?e.palette.primary.main:e.palette.text.secondary,fontWeight:t?500:400,textDecoration:`none`,borderRadius:e.shape.borderRadius,background:t?e.palette.action.selected:`transparent`,"&:hover":{color:t?e.palette.primary.main:e.palette.text.primary,background:e.palette.action.hover}})),dt=o(`main`)({flex:1,overflow:`hidden`,display:`flex`,flexDirection:`column`}),ft=o(`div`)(({theme:e})=>({padding:e.spacing(1.5,3),borderBottom:`1px solid ${e.palette.divider}`,background:e.palette.background.paper,display:`flex`,alignItems:`center`,gap:e.spacing(1),flexShrink:0})),pt=o(`div`)(({theme:e})=>({flex:1,overflow:`auto`,padding:e.spacing(4)})),mt=o(`div`)(({theme:e})=>({marginBottom:e.spacing(6)})),ht=o(`div`,{shouldForwardProp:e=>e!==`isActive`})(({theme:e,isActive:t})=>({fontSize:12,fontWeight:500,fontFamily:`monospace`,color:t?e.palette.primary.main:e.palette.text.secondary,marginBottom:e.spacing(1.5),cursor:`pointer`,display:`flex`,alignItems:`center`,gap:e.spacing(.75),"& .anchor-icon":{fontSize:14,opacity:+!!t,transition:`opacity 0.15s`},"&:hover .anchor-icon":{opacity:1}})),gt=o(`div`)(({theme:e})=>({padding:e.spacing(4),borderRadius:e.shape.borderRadius,border:`1px solid ${e.palette.divider}`,width:`100%`,boxSizing:`border-box`})),_t=o(`button`,{shouldForwardProp:e=>e!==`isSelected`})(({theme:e,isSelected:t})=>({width:20,height:20,borderRadius:e.shape.borderRadius,border:`none`,cursor:`pointer`,padding:0,outline:t?`3px solid ${e.palette.primary.main}`:`1px solid ${e.palette.primary.main}`,outlineOffset:+!!t,flexShrink:0})),vt=()=>{let{themeMode:e,onSetThemeMode:t}=re(),n=a(),[i,o]=ee(),[l,u]=(0,T.useState)(Y[0]?.meta.background??`application`),d=(0,T.useRef)(null),p=i.get(`c`),m=i.get(`s`),h=(p?Y.find(e=>Q(e)===p):null)??Y[0],g=m,_=Y.reduce((e,t)=>(e[t.category]||(e[t.category]=[]),e[t.category].push(t),e),{});(0,T.useEffect)(()=>{u(h?.meta.background??`application`)},[h]),(0,T.useEffect)(()=>{if(!m){d.current?.scrollTo({top:0});return}requestAnimationFrame(()=>{let e=document.getElementById(m);if(e&&d.current){let t=d.current.getBoundingClientRect().top,n=e.getBoundingClientRect().top;d.current.scrollTo({top:d.current.scrollTop+n-t-32,behavior:`smooth`})}})},[m]);let v=e=>{o({c:Q(e)})},y=(e,t,n)=>{e.preventDefault(),o({c:Q(t),s:Z(n)})},b=e=>{let t=Z(e),n=new URLSearchParams({c:Q(h),s:t});o(n),navigator.clipboard.writeText(`${window.location.origin}${window.location.pathname}?${n}`).catch(e=>{console.error(`Failed to copy link to clipboard`,e)})},x=n.palette.background[l];return(0,E.jsxs)($,{children:[(0,E.jsxs)(at,{children:[(0,E.jsxs)(ot,{children:[(0,E.jsx)(c,{variant:`body2`,sx:{fontWeight:700,fontFamily:`monospace`},children:`_stories`}),(0,E.jsx)(s,{title:`${e===`light`?`Dark`:`Light`} mode`,children:(0,E.jsx)(r,{size:`small`,onClick:t,children:e===`light`?(0,E.jsx)(te,{sx:{fontSize:16}}):(0,E.jsx)(ne,{sx:{fontSize:16}})})})]}),(0,E.jsx)(st,{children:Object.entries(_).map(([e,t])=>(0,E.jsxs)(`div`,{children:[(0,E.jsx)(ct,{children:e}),t.map(e=>(0,E.jsxs)(`div`,{children:[(0,E.jsx)(lt,{isSelected:e.moduleKey===h?.moduleKey,onClick:()=>v(e),children:e.name}),e.moduleKey===h?.moduleKey&&e.stories.map(t=>(0,E.jsx)(ut,{href:`?c=${Q(e)}&s=${Z(t.name)}`,isActive:g===Z(t.name),onClick:n=>y(n,e,t.name),children:t.name},t.name))]},e.moduleKey))]},e))})]}),(0,E.jsx)(dt,{children:h?(0,E.jsxs)(E.Fragment,{children:[(0,E.jsxs)(ft,{children:[(0,E.jsx)(c,{variant:`body2`,sx:{color:`text.disabled`,fontSize:12},children:h.category}),(0,E.jsx)(c,{variant:`body2`,sx:{color:`text.disabled`,fontSize:12},children:`/`}),(0,E.jsx)(c,{variant:`body2`,sx:{fontWeight:600,fontSize:14},children:h.name}),(0,E.jsxs)(f,{sx:{ml:`auto`,display:`flex`,alignItems:`center`,gap:1},children:[(0,E.jsx)(c,{variant:`caption`,sx:{color:`text.disabled`,mr:.25},children:`Background:`}),it.map(({key:e,label:t})=>(0,E.jsx)(s,{title:t,arrow:!0,children:(0,E.jsx)(_t,{isSelected:l===e,onClick:()=>u(e),style:{background:n.palette.background[e]}})},e))]})]}),(0,E.jsx)(pt,{ref:d,sx:{background:x},children:h.stories.map(e=>{let t=e.component;return(0,E.jsxs)(mt,{children:[(0,E.jsxs)(ht,{id:Z(e.name),isActive:g===Z(e.name),onClick:()=>b(e.name),children:[e.name,(0,E.jsx)(tt,{className:`anchor-icon`})]}),(0,E.jsx)(gt,{children:(0,E.jsx)(t,{})})]},e.name)})})]}):(0,E.jsx)(f,{sx:{p:4},children:(0,E.jsxs)(c,{sx:{color:`text.secondary`},children:[`No stories found. Create a`,` `,(0,E.jsx)(f,{component:`code`,sx:{fontFamily:`monospace`},children:`*.story.tsx`}),` `,`file anywhere under`,` `,(0,E.jsx)(f,{component:`code`,sx:{fontFamily:`monospace`},children:`frontend/src/`}),` `,`to get started.`]})})})]})};export{vt as default};
@@ -1 +0,0 @@
1
- import{o as e,t}from"./react-DW1tWzGJ.js";import{n}from"./formatPath-vbOoY_VU.js";import{Gs as r,Kd as i,Qc as a,Us as o,Yl as s,Zc as c,Zl as l,df as u,ho as d,rc as f,xf as p}from"./index-DIBimazR.js";var m=u(),h=i(p)(({theme:e})=>({textDecoration:`none`,color:e.palette.primary.main,fontWeight:e.fontWeight.bold})),g=({isOpen:e,onClose:t,features:n,project:i})=>(0,m.jsxs)(r,{title:`You can't archive a feature that other features depend on`,open:e,primaryButtonText:`OK`,onClick:t,children:[(0,m.jsx)(`p`,{children:`The following features depend on your feature:`}),(0,m.jsx)(`ul`,{children:n.map(e=>(0,m.jsx)(`li`,{children:(0,m.jsx)(h,{to:`/projects/${i}/features/${e}`,target:`_blank`,rel:`noopener noreferrer`,children:e})},e))})]}),_=e(t(),1),v=n(`api/admin/client-metrics/features`),y=(e,t)=>{let r=n(`api/admin/client-metrics/features/${e}/raw?hoursBack=${t}`),{data:i,error:a}=s(r,()=>b(r)),o=(0,_.useCallback)(()=>{l(v).catch(console.warn)},[]);return{featureMetrics:i?.data,loading:!a&&!i,refetchFeatureMetrics:o,error:a}},b=e=>fetch(e).then(a(`Features`)).then(e=>e.json()).then(),x=({hoursBack:e,setHoursBack:t,label:n=`Period`})=>{let{trackEvent:r}=f(),i=e=>{t(Number.parseInt(e,10)),r(`feature-metrics`,{props:{eventType:`change-period`,hoursBack:e}})},{isEnterprise:a}=c(),s=d(`extendedUsageMetrics`),l=a()&&s?[...S,...C]:S,u=l.map(e=>Number(e.key)).includes(e)?e:48;return(0,_.useEffect)(()=>{e!==u&&t(u)},[e]),(0,m.jsx)(`div`,{children:(0,m.jsx)(o,{name:`feature-metrics-period`,label:n,id:`feature-metrics-period`,options:l,value:String(u),onChange:i,fullWidth:!0})})},S=[{key:`1`,label:`Last hour`},{key:`24`,label:`Last 24 hours`},{key:`48`,label:`Last 48 hours`}],C=[{key:`168`,label:`Last 7 days`},{key:`720`,label:`Last 30 days`},{key:`2160`,label:`Last 90 days`}],w=e=>{let t=new Map;return e.forEach(e=>{let n=t.get(e.timestamp);if(n||(n={...e,yes:0,no:0,variants:{}},t.set(e.timestamp,n)),n.yes+=e.yes,n.no+=e.no,e.variants){n.variants=n.variants||{};for(let[t,r]of Object.entries(e.variants))n.variants[t]=(n.variants[t]||0)+r}}),Array.from(t.values()).map(e=>({...e,variants:e.variants&&Object.keys(e.variants).length===0?void 0:e.variants}))};export{g as i,x as n,y as r,w as t};