unleash-server 7.2.2 → 7.3.0

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/README.md +21 -10
  2. package/dist/lib/create-config.d.ts.map +1 -1
  3. package/dist/lib/create-config.js +8 -0
  4. package/dist/lib/create-config.js.map +1 -1
  5. package/dist/lib/db/client-applications-store.d.ts.map +1 -1
  6. package/dist/lib/db/client-applications-store.js +32 -2
  7. package/dist/lib/db/client-applications-store.js.map +1 -1
  8. package/dist/lib/db/feature-environment-store.d.ts +1 -1
  9. package/dist/lib/db/feature-environment-store.d.ts.map +1 -1
  10. package/dist/lib/db/feature-environment-store.js +42 -35
  11. package/dist/lib/db/feature-environment-store.js.map +1 -1
  12. package/dist/lib/db/index.d.ts.map +1 -1
  13. package/dist/lib/db/index.js +2 -0
  14. package/dist/lib/db/index.js.map +1 -1
  15. package/dist/lib/error/unleash-error.d.ts.map +1 -1
  16. package/dist/lib/error/unleash-error.js +2 -2
  17. package/dist/lib/error/unleash-error.js.map +1 -1
  18. package/dist/lib/events/index.d.ts +8 -1
  19. package/dist/lib/events/index.d.ts.map +1 -1
  20. package/dist/lib/events/index.js +14 -0
  21. package/dist/lib/events/index.js.map +1 -1
  22. package/dist/lib/features/api-tokens/createApiTokenService.d.ts +2 -0
  23. package/dist/lib/features/api-tokens/createApiTokenService.d.ts.map +1 -1
  24. package/dist/lib/features/api-tokens/createApiTokenService.js +6 -2
  25. package/dist/lib/features/api-tokens/createApiTokenService.js.map +1 -1
  26. package/dist/lib/features/client-feature-toggles/client-feature-toggle.controller.d.ts.map +1 -1
  27. package/dist/lib/features/client-feature-toggles/client-feature-toggle.controller.js +2 -9
  28. package/dist/lib/features/client-feature-toggles/client-feature-toggle.controller.js.map +1 -1
  29. package/dist/lib/features/dependent-features/dependent.features.e2e.test.js +28 -29
  30. package/dist/lib/features/dependent-features/dependent.features.e2e.test.js.map +1 -1
  31. package/dist/lib/features/feature-links/feature-link-service.js +1 -1
  32. package/dist/lib/features/feature-links/feature-link-service.js.map +1 -1
  33. package/dist/lib/features/feature-toggle/createFeatureToggleService.d.ts.map +1 -1
  34. package/dist/lib/features/feature-toggle/createFeatureToggleService.js +14 -4
  35. package/dist/lib/features/feature-toggle/createFeatureToggleService.js.map +1 -1
  36. package/dist/lib/features/feature-toggle/fakes/fake-feature-strategies-store.d.ts.map +1 -1
  37. package/dist/lib/features/feature-toggle/fakes/fake-feature-strategies-store.js +2 -1
  38. package/dist/lib/features/feature-toggle/fakes/fake-feature-strategies-store.js.map +1 -1
  39. package/dist/lib/features/feature-toggle/feature-toggle-service.d.ts +9 -3
  40. package/dist/lib/features/feature-toggle/feature-toggle-service.d.ts.map +1 -1
  41. package/dist/lib/features/feature-toggle/feature-toggle-service.js +23 -7
  42. package/dist/lib/features/feature-toggle/feature-toggle-service.js.map +1 -1
  43. package/dist/lib/features/feature-toggle/feature-toggle-strategies-store.d.ts.map +1 -1
  44. package/dist/lib/features/feature-toggle/feature-toggle-strategies-store.js +3 -3
  45. package/dist/lib/features/feature-toggle/feature-toggle-strategies-store.js.map +1 -1
  46. package/dist/lib/features/feature-toggle/tests/feature-toggles.e2e.test.js +34 -35
  47. package/dist/lib/features/feature-toggle/tests/feature-toggles.e2e.test.js.map +1 -1
  48. package/dist/lib/features/instance-stats/createInstanceStatsService.d.ts.map +1 -1
  49. package/dist/lib/features/instance-stats/createInstanceStatsService.js +5 -2
  50. package/dist/lib/features/instance-stats/createInstanceStatsService.js.map +1 -1
  51. package/dist/lib/features/instance-stats/getEdgeInstances.d.ts +6 -0
  52. package/dist/lib/features/instance-stats/getEdgeInstances.d.ts.map +1 -0
  53. package/dist/lib/features/instance-stats/getEdgeInstances.e2e.test.d.ts +2 -0
  54. package/dist/lib/features/instance-stats/getEdgeInstances.e2e.test.d.ts.map +1 -0
  55. package/dist/lib/features/instance-stats/getEdgeInstances.e2e.test.js +137 -0
  56. package/dist/lib/features/instance-stats/getEdgeInstances.e2e.test.js.map +1 -0
  57. package/dist/lib/features/instance-stats/getEdgeInstances.js +36 -0
  58. package/dist/lib/features/instance-stats/getEdgeInstances.js.map +1 -0
  59. package/dist/lib/features/instance-stats/instance-stats-service.d.ts +4 -1
  60. package/dist/lib/features/instance-stats/instance-stats-service.d.ts.map +1 -1
  61. package/dist/lib/features/instance-stats/instance-stats-service.js +8 -3
  62. package/dist/lib/features/instance-stats/instance-stats-service.js.map +1 -1
  63. package/dist/lib/features/instance-stats/instance-stats-service.test.js +2 -1
  64. package/dist/lib/features/instance-stats/instance-stats-service.test.js.map +1 -1
  65. package/dist/lib/features/metrics/client-metrics/metrics-service-v2.js +1 -1
  66. package/dist/lib/features/metrics/client-metrics/metrics-service-v2.js.map +1 -1
  67. package/dist/lib/features/metrics/impact/batch-histogram.d.ts +36 -0
  68. package/dist/lib/features/metrics/impact/batch-histogram.d.ts.map +1 -0
  69. package/dist/lib/features/metrics/impact/batch-histogram.js +87 -0
  70. package/dist/lib/features/metrics/impact/batch-histogram.js.map +1 -0
  71. package/dist/lib/features/metrics/impact/batch-histogram.test.d.ts +2 -0
  72. package/dist/lib/features/metrics/impact/batch-histogram.test.d.ts.map +1 -0
  73. package/dist/lib/features/metrics/impact/batch-histogram.test.js +137 -0
  74. package/dist/lib/features/metrics/impact/batch-histogram.test.js.map +1 -0
  75. package/dist/lib/features/metrics/impact/define-impact-metrics.d.ts +2 -0
  76. package/dist/lib/features/metrics/impact/define-impact-metrics.d.ts.map +1 -1
  77. package/dist/lib/features/metrics/impact/define-impact-metrics.js +4 -0
  78. package/dist/lib/features/metrics/impact/define-impact-metrics.js.map +1 -1
  79. package/dist/lib/features/metrics/impact/impact-metrics.e2e.test.js +49 -0
  80. package/dist/lib/features/metrics/impact/impact-metrics.e2e.test.js.map +1 -1
  81. package/dist/lib/features/metrics/impact/metrics-translator.d.ts +22 -4
  82. package/dist/lib/features/metrics/impact/metrics-translator.d.ts.map +1 -1
  83. package/dist/lib/features/metrics/impact/metrics-translator.js +58 -2
  84. package/dist/lib/features/metrics/impact/metrics-translator.js.map +1 -1
  85. package/dist/lib/features/metrics/impact/metrics-translator.test.js +83 -0
  86. package/dist/lib/features/metrics/impact/metrics-translator.test.js.map +1 -1
  87. package/dist/lib/features/metrics/shared/schema.d.ts +1 -0
  88. package/dist/lib/features/metrics/shared/schema.d.ts.map +1 -1
  89. package/dist/lib/features/metrics/shared/schema.js +27 -1
  90. package/dist/lib/features/metrics/shared/schema.js.map +1 -1
  91. package/dist/lib/features/project/createProjectService.d.ts.map +1 -1
  92. package/dist/lib/features/project/createProjectService.js +7 -5
  93. package/dist/lib/features/project/createProjectService.js.map +1 -1
  94. package/dist/lib/features/project/project-service.d.ts +3 -2
  95. package/dist/lib/features/project/project-service.d.ts.map +1 -1
  96. package/dist/lib/features/project/project-service.js +4 -3
  97. package/dist/lib/features/project/project-service.js.map +1 -1
  98. package/dist/lib/features/release-plans/release-plan-milestone-store.d.ts +2 -2
  99. package/dist/lib/features/release-plans/release-plan-milestone-store.d.ts.map +1 -1
  100. package/dist/lib/features/release-plans/release-plan-milestone-store.js +3 -0
  101. package/dist/lib/features/release-plans/release-plan-milestone-store.js.map +1 -1
  102. package/dist/lib/features/release-plans/release-plan-milestone.d.ts +6 -0
  103. package/dist/lib/features/release-plans/release-plan-milestone.d.ts.map +1 -1
  104. package/dist/lib/features/release-plans/release-plan-read-model-type.d.ts +5 -0
  105. package/dist/lib/features/release-plans/release-plan-read-model-type.d.ts.map +1 -0
  106. package/dist/lib/features/release-plans/release-plan-read-model-type.js +2 -0
  107. package/dist/lib/features/release-plans/release-plan-read-model-type.js.map +1 -0
  108. package/dist/lib/features/release-plans/release-plan-read-model.d.ts +11 -0
  109. package/dist/lib/features/release-plans/release-plan-read-model.d.ts.map +1 -0
  110. package/dist/lib/features/release-plans/release-plan-read-model.js +133 -0
  111. package/dist/lib/features/release-plans/release-plan-read-model.js.map +1 -0
  112. package/dist/lib/features/release-plans/release-plan-read-model.test.d.ts +2 -0
  113. package/dist/lib/features/release-plans/release-plan-read-model.test.d.ts.map +1 -0
  114. package/dist/lib/features/release-plans/release-plan-read-model.test.js +165 -0
  115. package/dist/lib/features/release-plans/release-plan-read-model.test.js.map +1 -0
  116. package/dist/lib/features/release-plans/release-plan-store.d.ts +1 -1
  117. package/dist/lib/features/release-plans/release-plan-store.d.ts.map +1 -1
  118. package/dist/lib/features/release-plans/release-plan-store.js +16 -15
  119. package/dist/lib/features/release-plans/release-plan-store.js.map +1 -1
  120. package/dist/lib/features/release-plans/release-plan-template.d.ts +2 -2
  121. package/dist/lib/features/release-plans/release-plan-template.d.ts.map +1 -1
  122. package/dist/lib/features/release-plans/release-plan.d.ts +1 -1
  123. package/dist/lib/features/release-plans/release-plan.d.ts.map +1 -1
  124. package/dist/lib/features/resource-limits/resource-limits-service.d.ts +8 -0
  125. package/dist/lib/features/resource-limits/resource-limits-service.d.ts.map +1 -0
  126. package/dist/lib/features/resource-limits/resource-limits-service.js +9 -0
  127. package/dist/lib/features/resource-limits/resource-limits-service.js.map +1 -0
  128. package/dist/lib/features/scheduler/schedule-services.js +1 -1
  129. package/dist/lib/features/scheduler/schedule-services.js.map +1 -1
  130. package/dist/lib/features/segment/createSegmentService.d.ts.map +1 -1
  131. package/dist/lib/features/segment/createSegmentService.js +5 -3
  132. package/dist/lib/features/segment/createSegmentService.js.map +1 -1
  133. package/dist/lib/features/segment/segment-service.d.ts +3 -2
  134. package/dist/lib/features/segment/segment-service.d.ts.map +1 -1
  135. package/dist/lib/features/segment/segment-service.js +3 -3
  136. package/dist/lib/features/segment/segment-service.js.map +1 -1
  137. package/dist/lib/features/users/user-store.d.ts +2 -0
  138. package/dist/lib/features/users/user-store.d.ts.map +1 -1
  139. package/dist/lib/features/users/user-store.js +3 -2
  140. package/dist/lib/features/users/user-store.js.map +1 -1
  141. package/dist/lib/features/users/user-updates-read-model.d.ts +27 -0
  142. package/dist/lib/features/users/user-updates-read-model.d.ts.map +1 -0
  143. package/dist/lib/features/users/user-updates-read-model.js +68 -0
  144. package/dist/lib/features/users/user-updates-read-model.js.map +1 -0
  145. package/dist/lib/features/users/user-updates-read-model.test.d.ts +2 -0
  146. package/dist/lib/features/users/user-updates-read-model.test.d.ts.map +1 -0
  147. package/dist/lib/features/users/user-updates-read-model.test.js +50 -0
  148. package/dist/lib/features/users/user-updates-read-model.test.js.map +1 -0
  149. package/dist/lib/metrics.d.ts.map +1 -1
  150. package/dist/lib/metrics.js +8 -6
  151. package/dist/lib/metrics.js.map +1 -1
  152. package/dist/lib/metrics.test.js +2 -1
  153. package/dist/lib/metrics.test.js.map +1 -1
  154. package/dist/lib/middleware/origin-middleware.d.ts +1 -1
  155. package/dist/lib/middleware/origin-middleware.d.ts.map +1 -1
  156. package/dist/lib/middleware/origin-middleware.js +2 -9
  157. package/dist/lib/middleware/origin-middleware.js.map +1 -1
  158. package/dist/lib/middleware/origin-middleware.test.js +0 -16
  159. package/dist/lib/middleware/origin-middleware.test.js.map +1 -1
  160. package/dist/lib/openapi/spec/application-schema.d.ts +1 -1
  161. package/dist/lib/openapi/spec/application-schema.js +1 -1
  162. package/dist/lib/openapi/spec/application-schema.js.map +1 -1
  163. package/dist/lib/openapi/spec/applications-schema.d.ts +1 -1
  164. package/dist/lib/openapi/spec/bulk-metrics-schema.d.ts +126 -39
  165. package/dist/lib/openapi/spec/bulk-metrics-schema.d.ts.map +1 -1
  166. package/dist/lib/openapi/spec/create-application-schema.d.ts +1 -1
  167. package/dist/lib/openapi/spec/create-application-schema.js +1 -1
  168. package/dist/lib/openapi/spec/create-application-schema.js.map +1 -1
  169. package/dist/lib/openapi/spec/create-strategy-schema.d.ts +2 -2
  170. package/dist/lib/openapi/spec/create-strategy-schema.js +2 -2
  171. package/dist/lib/openapi/spec/create-strategy-schema.js.map +1 -1
  172. package/dist/lib/openapi/spec/event-schema.d.ts +1 -1
  173. package/dist/lib/openapi/spec/event-search-response-schema.d.ts +1 -1
  174. package/dist/lib/openapi/spec/events-schema.d.ts +1 -1
  175. package/dist/lib/openapi/spec/export-result-schema.d.ts +12304 -1250
  176. package/dist/lib/openapi/spec/export-result-schema.d.ts.map +1 -1
  177. package/dist/lib/openapi/spec/export-result-schema.js +12 -0
  178. package/dist/lib/openapi/spec/export-result-schema.js.map +1 -1
  179. package/dist/lib/openapi/spec/feature-environment-schema.d.ts +2767 -0
  180. package/dist/lib/openapi/spec/feature-environment-schema.d.ts.map +1 -1
  181. package/dist/lib/openapi/spec/feature-environment-schema.js +19 -0
  182. package/dist/lib/openapi/spec/feature-environment-schema.js.map +1 -1
  183. package/dist/lib/openapi/spec/feature-events-schema.d.ts +1 -1
  184. package/dist/lib/openapi/spec/feature-schema.d.ts +5808 -281
  185. package/dist/lib/openapi/spec/feature-schema.d.ts.map +1 -1
  186. package/dist/lib/openapi/spec/feature-schema.js +12 -0
  187. package/dist/lib/openapi/spec/feature-schema.js.map +1 -1
  188. package/dist/lib/openapi/spec/feature-search-environment-schema.d.ts +5613 -79
  189. package/dist/lib/openapi/spec/feature-search-environment-schema.d.ts.map +1 -1
  190. package/dist/lib/openapi/spec/feature-search-environment-schema.js +12 -0
  191. package/dist/lib/openapi/spec/feature-search-environment-schema.js.map +1 -1
  192. package/dist/lib/openapi/spec/feature-search-query-parameters.d.ts +2 -1
  193. package/dist/lib/openapi/spec/feature-search-query-parameters.d.ts.map +1 -1
  194. package/dist/lib/openapi/spec/feature-search-query-parameters.js +2 -1
  195. package/dist/lib/openapi/spec/feature-search-query-parameters.js.map +1 -1
  196. package/dist/lib/openapi/spec/feature-search-response-schema.d.ts +5613 -79
  197. package/dist/lib/openapi/spec/feature-search-response-schema.d.ts.map +1 -1
  198. package/dist/lib/openapi/spec/health-overview-schema.d.ts +11432 -605
  199. package/dist/lib/openapi/spec/health-overview-schema.d.ts.map +1 -1
  200. package/dist/lib/openapi/spec/health-overview-schema.js +8 -0
  201. package/dist/lib/openapi/spec/health-overview-schema.js.map +1 -1
  202. package/dist/lib/openapi/spec/health-report-schema.d.ts +11432 -605
  203. package/dist/lib/openapi/spec/health-report-schema.d.ts.map +1 -1
  204. package/dist/lib/openapi/spec/impact-metrics-schema.d.ts +126 -39
  205. package/dist/lib/openapi/spec/impact-metrics-schema.d.ts.map +1 -1
  206. package/dist/lib/openapi/spec/impact-metrics-schema.js +128 -39
  207. package/dist/lib/openapi/spec/impact-metrics-schema.js.map +1 -1
  208. package/dist/lib/openapi/spec/import-toggles-schema.d.ts +24822 -2714
  209. package/dist/lib/openapi/spec/import-toggles-schema.d.ts.map +1 -1
  210. package/dist/lib/openapi/spec/import-toggles-schema.js +12 -0
  211. package/dist/lib/openapi/spec/import-toggles-schema.js.map +1 -1
  212. package/dist/lib/openapi/spec/index.d.ts +7 -0
  213. package/dist/lib/openapi/spec/index.d.ts.map +1 -1
  214. package/dist/lib/openapi/spec/index.js +7 -0
  215. package/dist/lib/openapi/spec/index.js.map +1 -1
  216. package/dist/lib/openapi/spec/instance-admin-stats-schema.d.ts +13 -0
  217. package/dist/lib/openapi/spec/instance-admin-stats-schema.d.ts.map +1 -1
  218. package/dist/lib/openapi/spec/instance-admin-stats-schema.js +13 -0
  219. package/dist/lib/openapi/spec/instance-admin-stats-schema.js.map +1 -1
  220. package/dist/lib/openapi/spec/integration-event-schema.d.ts +1 -1
  221. package/dist/lib/openapi/spec/integration-events-schema.d.ts +2 -2
  222. package/dist/lib/openapi/spec/me-schema.d.ts +1 -1
  223. package/dist/lib/openapi/spec/patch-schema.d.ts +1 -1
  224. package/dist/lib/openapi/spec/patch-schema.js +1 -1
  225. package/dist/lib/openapi/spec/patch-schema.js.map +1 -1
  226. package/dist/lib/openapi/spec/patches-schema.d.ts +1 -1
  227. package/dist/lib/openapi/spec/permission-schema.d.ts +1 -1
  228. package/dist/lib/openapi/spec/permission-schema.js +1 -1
  229. package/dist/lib/openapi/spec/permission-schema.js.map +1 -1
  230. package/dist/lib/openapi/spec/profile-schema.d.ts +5808 -281
  231. package/dist/lib/openapi/spec/profile-schema.d.ts.map +1 -1
  232. package/dist/lib/openapi/spec/project-overview-schema.d.ts +11641 -814
  233. package/dist/lib/openapi/spec/project-overview-schema.d.ts.map +1 -1
  234. package/dist/lib/openapi/spec/project-overview-schema.js +8 -0
  235. package/dist/lib/openapi/spec/project-overview-schema.js.map +1 -1
  236. package/dist/lib/openapi/spec/ready-check-schema.d.ts +19 -0
  237. package/dist/lib/openapi/spec/ready-check-schema.d.ts.map +1 -0
  238. package/dist/lib/openapi/spec/ready-check-schema.js +17 -0
  239. package/dist/lib/openapi/spec/ready-check-schema.js.map +1 -0
  240. package/dist/lib/openapi/spec/release-plan-milestone-schema.d.ts +716 -0
  241. package/dist/lib/openapi/spec/release-plan-milestone-schema.d.ts.map +1 -0
  242. package/dist/lib/openapi/spec/release-plan-milestone-schema.js +72 -0
  243. package/dist/lib/openapi/spec/release-plan-milestone-schema.js.map +1 -0
  244. package/dist/lib/openapi/spec/release-plan-milestone-strategy-schema.d.ts +361 -0
  245. package/dist/lib/openapi/spec/release-plan-milestone-strategy-schema.d.ts.map +1 -0
  246. package/dist/lib/openapi/spec/release-plan-milestone-strategy-schema.js +40 -0
  247. package/dist/lib/openapi/spec/release-plan-milestone-strategy-schema.js.map +1 -0
  248. package/dist/lib/openapi/spec/release-plan-schema.d.ts +1449 -0
  249. package/dist/lib/openapi/spec/release-plan-schema.d.ts.map +1 -0
  250. package/dist/lib/openapi/spec/release-plan-schema.js +74 -0
  251. package/dist/lib/openapi/spec/release-plan-schema.js.map +1 -0
  252. package/dist/lib/openapi/spec/release-plan-template-id-schema.d.ts +19 -0
  253. package/dist/lib/openapi/spec/release-plan-template-id-schema.d.ts.map +1 -0
  254. package/dist/lib/openapi/spec/release-plan-template-id-schema.js +17 -0
  255. package/dist/lib/openapi/spec/release-plan-template-id-schema.js.map +1 -0
  256. package/dist/lib/openapi/spec/release-plan-template-schema.d.ts +1434 -0
  257. package/dist/lib/openapi/spec/release-plan-template-schema.d.ts.map +1 -0
  258. package/dist/lib/openapi/spec/release-plan-template-schema.js +79 -0
  259. package/dist/lib/openapi/spec/release-plan-template-schema.js.map +1 -0
  260. package/dist/lib/openapi/spec/search-features-schema.d.ts +11793 -725
  261. package/dist/lib/openapi/spec/search-features-schema.d.ts.map +1 -1
  262. package/dist/lib/openapi/spec/transition-condition-schema.d.ts +19 -0
  263. package/dist/lib/openapi/spec/transition-condition-schema.d.ts.map +1 -0
  264. package/dist/lib/openapi/spec/transition-condition-schema.js +17 -0
  265. package/dist/lib/openapi/spec/transition-condition-schema.js.map +1 -0
  266. package/dist/lib/openapi/spec/update-strategy-schema.d.ts +1 -1
  267. package/dist/lib/openapi/spec/update-strategy-schema.js +1 -1
  268. package/dist/lib/openapi/spec/update-strategy-schema.js.map +1 -1
  269. package/dist/lib/openapi/util/openapi-tags.d.ts +2 -2
  270. package/dist/lib/openapi/util/openapi-tags.js +1 -1
  271. package/dist/lib/openapi/util/openapi-tags.js.map +1 -1
  272. package/dist/lib/routes/admin-api/index.js +2 -2
  273. package/dist/lib/routes/admin-api/index.js.map +1 -1
  274. package/dist/lib/routes/admin-api/instance-admin.d.ts.map +1 -1
  275. package/dist/lib/routes/admin-api/instance-admin.js +5 -0
  276. package/dist/lib/routes/admin-api/instance-admin.js.map +1 -1
  277. package/dist/lib/routes/admin-api/strategy.js +1 -1
  278. package/dist/lib/routes/admin-api/strategy.js.map +1 -1
  279. package/dist/lib/routes/admin-api/strategy.test.js +25 -1
  280. package/dist/lib/routes/admin-api/strategy.test.js.map +1 -1
  281. package/dist/lib/routes/backstage.test.js +17 -5
  282. package/dist/lib/routes/backstage.test.js.map +1 -1
  283. package/dist/lib/routes/health-check.test.js +2 -2
  284. package/dist/lib/routes/health-check.test.js.map +1 -1
  285. package/dist/lib/routes/index.d.ts.map +1 -1
  286. package/dist/lib/routes/index.js +2 -0
  287. package/dist/lib/routes/index.js.map +1 -1
  288. package/dist/lib/routes/ready-check.d.ts +14 -0
  289. package/dist/lib/routes/ready-check.d.ts.map +1 -0
  290. package/dist/lib/routes/ready-check.js +86 -0
  291. package/dist/lib/routes/ready-check.js.map +1 -0
  292. package/dist/lib/routes/util.d.ts.map +1 -1
  293. package/dist/lib/routes/util.js +19 -1
  294. package/dist/lib/routes/util.js.map +1 -1
  295. package/dist/lib/server-impl.d.ts +9 -3
  296. package/dist/lib/server-impl.d.ts.map +1 -1
  297. package/dist/lib/server-impl.js +6 -1
  298. package/dist/lib/server-impl.js.map +1 -1
  299. package/dist/lib/services/api-token-service.d.ts +3 -2
  300. package/dist/lib/services/api-token-service.d.ts.map +1 -1
  301. package/dist/lib/services/api-token-service.js +3 -3
  302. package/dist/lib/services/api-token-service.js.map +1 -1
  303. package/dist/lib/services/index.d.ts +5 -1
  304. package/dist/lib/services/index.d.ts.map +1 -1
  305. package/dist/lib/services/index.js +16 -2
  306. package/dist/lib/services/index.js.map +1 -1
  307. package/dist/lib/services/strategy-service.d.ts +4 -1
  308. package/dist/lib/services/strategy-service.d.ts.map +1 -1
  309. package/dist/lib/services/strategy-service.js +15 -2
  310. package/dist/lib/services/strategy-service.js.map +1 -1
  311. package/dist/lib/services/user-service.d.ts.map +1 -1
  312. package/dist/lib/services/user-service.js +19 -3
  313. package/dist/lib/services/user-service.js.map +1 -1
  314. package/dist/lib/services/user-splash-service.d.ts.map +1 -1
  315. package/dist/lib/services/user-splash-service.js +7 -1
  316. package/dist/lib/services/user-splash-service.js.map +1 -1
  317. package/dist/lib/services/version-service.d.ts +2 -0
  318. package/dist/lib/services/version-service.d.ts.map +1 -1
  319. package/dist/lib/services/version-service.js.map +1 -1
  320. package/dist/lib/services/version-service.test.js +1 -0
  321. package/dist/lib/services/version-service.test.js.map +1 -1
  322. package/dist/lib/types/events.d.ts +28 -0
  323. package/dist/lib/types/events.d.ts.map +1 -1
  324. package/dist/lib/types/events.js +20 -1
  325. package/dist/lib/types/events.js.map +1 -1
  326. package/dist/lib/types/experimental.d.ts +3 -1
  327. package/dist/lib/types/experimental.d.ts.map +1 -1
  328. package/dist/lib/types/experimental.js +7 -8
  329. package/dist/lib/types/experimental.js.map +1 -1
  330. package/dist/lib/types/option.d.ts +8 -0
  331. package/dist/lib/types/option.d.ts.map +1 -1
  332. package/dist/lib/types/stores/feature-environment-store.d.ts +1 -1
  333. package/dist/lib/types/stores/feature-environment-store.d.ts.map +1 -1
  334. package/dist/lib/types/stores.d.ts +2 -0
  335. package/dist/lib/types/stores.d.ts.map +1 -1
  336. package/dist/lib/types/stores.js.map +1 -1
  337. package/dist/lib/ui-config/ui-config-controller.d.ts +18 -0
  338. package/dist/lib/ui-config/ui-config-controller.d.ts.map +1 -0
  339. package/dist/lib/ui-config/ui-config-controller.js +62 -0
  340. package/dist/lib/ui-config/ui-config-controller.js.map +1 -0
  341. package/dist/lib/ui-config/ui-config-service.d.ts +18 -0
  342. package/dist/lib/ui-config/ui-config-service.d.ts.map +1 -0
  343. package/dist/lib/ui-config/ui-config-service.js +64 -0
  344. package/dist/lib/ui-config/ui-config-service.js.map +1 -0
  345. package/dist/lib/ui-config/ui-config.test.d.ts +2 -0
  346. package/dist/lib/ui-config/ui-config.test.d.ts.map +1 -0
  347. package/dist/lib/{routes/admin-api/config.test.js → ui-config/ui-config.test.js} +6 -6
  348. package/dist/lib/ui-config/ui-config.test.js.map +1 -0
  349. package/dist/lib/util/metrics/createGauge.d.ts +17 -1
  350. package/dist/lib/util/metrics/createGauge.d.ts.map +1 -1
  351. package/dist/lib/util/metrics/createGauge.js +49 -4
  352. package/dist/lib/util/metrics/createGauge.js.map +1 -1
  353. package/dist/lib/util/random-id.js +2 -2
  354. package/dist/lib/util/random-id.js.map +1 -1
  355. package/dist/lib/util/random-id.test.d.ts +2 -0
  356. package/dist/lib/util/random-id.test.d.ts.map +1 -0
  357. package/dist/lib/util/random-id.test.js +7 -0
  358. package/dist/lib/util/random-id.test.js.map +1 -0
  359. package/dist/migrations/20210218090213-generate-server-identifier.js +2 -2
  360. package/dist/migrations/20210218090213-generate-server-identifier.js.map +1 -1
  361. package/dist/migrations/20210615115226-migrate-strategies-to-feature-strategies.js +2 -2
  362. package/dist/migrations/20210615115226-migrate-strategies-to-feature-strategies.js.map +1 -1
  363. package/dist/migrations/20250923130348-add-users-updated-at.d.ts +3 -0
  364. package/dist/migrations/20250923130348-add-users-updated-at.d.ts.map +1 -0
  365. package/dist/migrations/20250923130348-add-users-updated-at.js +40 -0
  366. package/dist/migrations/20250923130348-add-users-updated-at.js.map +1 -0
  367. package/dist/migrations/20251002095623-not-null-constraints.d.ts +3 -0
  368. package/dist/migrations/20251002095623-not-null-constraints.d.ts.map +1 -0
  369. package/dist/migrations/20251002095623-not-null-constraints.js +20 -0
  370. package/dist/migrations/20251002095623-not-null-constraints.js.map +1 -0
  371. package/dist/migrations/20251003105758-add-milestone-started-at.d.ts +3 -0
  372. package/dist/migrations/20251003105758-add-milestone-started-at.d.ts.map +1 -0
  373. package/dist/migrations/20251003105758-add-milestone-started-at.js +8 -0
  374. package/dist/migrations/20251003105758-add-milestone-started-at.js.map +1 -0
  375. package/dist/migrations/20251006111609-add-milestone-progressions.d.ts +3 -0
  376. package/dist/migrations/20251006111609-add-milestone-progressions.d.ts.map +1 -0
  377. package/dist/migrations/20251006111609-add-milestone-progressions.js +15 -0
  378. package/dist/migrations/20251006111609-add-milestone-progressions.js.map +1 -0
  379. package/dist/migrations/20251009081052-add-milestone-progression-executed-at.d.ts +3 -0
  380. package/dist/migrations/20251009081052-add-milestone-progression-executed-at.d.ts.map +1 -0
  381. package/dist/migrations/20251009081052-add-milestone-progression-executed-at.js +14 -0
  382. package/dist/migrations/20251009081052-add-milestone-progression-executed-at.js.map +1 -0
  383. package/dist/migrations/20251009132935-add-edge-node-presence.d.ts +3 -0
  384. package/dist/migrations/20251009132935-add-edge-node-presence.d.ts.map +1 -0
  385. package/dist/migrations/20251009132935-add-edge-node-presence.js +29 -0
  386. package/dist/migrations/20251009132935-add-edge-node-presence.js.map +1 -0
  387. package/dist/migrations/20251013131405-milestone-progression-uniqueness.d.ts +3 -0
  388. package/dist/migrations/20251013131405-milestone-progression-uniqueness.d.ts.map +1 -0
  389. package/dist/migrations/20251013131405-milestone-progression-uniqueness.js +9 -0
  390. package/dist/migrations/20251013131405-milestone-progression-uniqueness.js.map +1 -0
  391. package/dist/migrations/20251027094509-milestone-progression-natural-pk.d.ts +3 -0
  392. package/dist/migrations/20251027094509-milestone-progression-natural-pk.d.ts.map +1 -0
  393. package/dist/migrations/20251027094509-milestone-progression-natural-pk.js +22 -0
  394. package/dist/migrations/20251027094509-milestone-progression-natural-pk.js.map +1 -0
  395. package/dist/migrations/20251103114221-milestone-progression-paused-at.d.ts +3 -0
  396. package/dist/migrations/20251103114221-milestone-progression-paused-at.d.ts.map +1 -0
  397. package/dist/migrations/20251103114221-milestone-progression-paused-at.js +14 -0
  398. package/dist/migrations/20251103114221-milestone-progression-paused-at.js.map +1 -0
  399. package/dist/migrations/20251105153729-create-safeguards-table.d.ts +3 -0
  400. package/dist/migrations/20251105153729-create-safeguards-table.d.ts.map +1 -0
  401. package/dist/migrations/20251105153729-create-safeguards-table.js +17 -0
  402. package/dist/migrations/20251105153729-create-safeguards-table.js.map +1 -0
  403. package/dist/server-dev.js +5 -3
  404. package/dist/server-dev.js.map +1 -1
  405. package/dist/test/e2e/api/admin/context.e2e.test.js +2 -3
  406. package/dist/test/e2e/api/admin/context.e2e.test.js.map +1 -1
  407. package/dist/test/e2e/api/admin/user-admin.e2e.test.js +2 -3
  408. package/dist/test/e2e/api/admin/user-admin.e2e.test.js.map +1 -1
  409. package/dist/test/e2e/api/client/feature.optimal304.e2e.test.js +17 -41
  410. package/dist/test/e2e/api/client/feature.optimal304.e2e.test.js.map +1 -1
  411. package/dist/test/e2e/helpers/database-init.js +2 -2
  412. package/dist/test/e2e/helpers/database-init.js.map +1 -1
  413. package/dist/test/e2e/ready.e2e.test.d.ts +2 -0
  414. package/dist/test/e2e/ready.e2e.test.d.ts.map +1 -0
  415. package/dist/test/e2e/ready.e2e.test.js +66 -0
  416. package/dist/test/e2e/ready.e2e.test.js.map +1 -0
  417. package/dist/test/e2e/services/user-service.e2e.test.js +129 -99
  418. package/dist/test/e2e/services/user-service.e2e.test.js.map +1 -1
  419. package/dist/test/e2e/stores/client-application-store.e2e.test.js +0 -1
  420. package/dist/test/e2e/stores/client-application-store.e2e.test.js.map +1 -1
  421. package/dist/test/e2e/stores/feature-environment-store.e2e.test.js +3 -1
  422. package/dist/test/e2e/stores/feature-environment-store.e2e.test.js.map +1 -1
  423. package/dist/test/e2e/users/user-store.e2e.test.d.ts.map +1 -0
  424. package/dist/test/e2e/users/user-store.e2e.test.js.map +1 -0
  425. package/dist/test/e2e/users/user-updates-read-model.e2e.test.d.ts +2 -0
  426. package/dist/test/e2e/users/user-updates-read-model.e2e.test.d.ts.map +1 -0
  427. package/dist/test/e2e/users/user-updates-read-model.e2e.test.js +88 -0
  428. package/dist/test/e2e/users/user-updates-read-model.e2e.test.js.map +1 -0
  429. package/dist/test/fixtures/fake/fake-release-plan-read-model.d.ts +8 -0
  430. package/dist/test/fixtures/fake/fake-release-plan-read-model.d.ts.map +1 -0
  431. package/dist/test/fixtures/fake/fake-release-plan-read-model.js +9 -0
  432. package/dist/test/fixtures/fake/fake-release-plan-read-model.js.map +1 -0
  433. package/dist/test/fixtures/fake-impact-metrics.d.ts +12 -4
  434. package/dist/test/fixtures/fake-impact-metrics.d.ts.map +1 -1
  435. package/dist/test/fixtures/fake-impact-metrics.js +50 -26
  436. package/dist/test/fixtures/fake-impact-metrics.js.map +1 -1
  437. package/dist/test/fixtures/store.d.ts.map +1 -1
  438. package/dist/test/fixtures/store.js +1 -0
  439. package/dist/test/fixtures/store.js.map +1 -1
  440. package/frontend/build/index.html +1 -1
  441. package/frontend/build/static/{AdvancedPlayground-D2Y0O_LK.js → AdvancedPlayground-BMmRjlFK.js} +1 -1
  442. package/frontend/build/static/BackendConnections-C4TwFekS.js +1 -0
  443. package/frontend/build/static/{CreateProject-jRfRrbUO.js → CreateProject-De6TDUjF.js} +1 -1
  444. package/frontend/build/static/FeatureMetricsChart-CQOjOGdB.js +2 -0
  445. package/frontend/build/static/FeatureStaleDialog-DFBMJIHQ.js +7 -0
  446. package/frontend/build/static/FeatureViewLazyExport-CUraS5Co.js +10 -0
  447. package/frontend/build/static/{FlagMetricsChart-oDTQTkxU.js → FlagMetricsChart-BqT9hgdO.js} +2 -2
  448. package/frontend/build/static/FrontendNetworkTrafficUsage-BzwFAGbK.js +1 -0
  449. package/frontend/build/static/GridLayoutWrapper-DY9lNz0U.js +3 -0
  450. package/frontend/build/static/ImpactMetricsPage-Bqewvmqu.js +1 -0
  451. package/frontend/build/static/LazyAdminExport-DSSpZhpf.js +38 -0
  452. package/frontend/build/static/LazyProjectExport-Cd5au6uN.js +728 -0
  453. package/frontend/build/static/{LifecycleChartComponent-Dz1wdYkW.js → LifecycleChartComponent-iH7Xwal_.js} +3 -3
  454. package/frontend/build/static/LineChartComponent-BnogHewS.js +1 -0
  455. package/frontend/build/static/{MarkCompletedDialogue-Bw9Iccid.js → MarkCompletedDialogue-BOSV3MHM.js} +1 -1
  456. package/frontend/build/static/{NetworkConnectedEdges-HU923-QZ.js → NetworkConnectedEdges-d0ZBRss5.js} +1 -1
  457. package/frontend/build/static/{NetworkOverview-_igGCPCJ.js → NetworkOverview-DivQ4b83.js} +1 -1
  458. package/frontend/build/static/{NetworkPrometheusAPIWarning-BS9PGbzI.js → NetworkPrometheusAPIWarning-2jclDnfE.js} +1 -1
  459. package/frontend/build/static/{NetworkTraffic-BpNEMFBl.js → NetworkTraffic-DDSLmVgI.js} +1 -1
  460. package/frontend/build/static/NetworkTrafficUsage-DYNGGkkm.js +1 -0
  461. package/frontend/build/static/PercentageDonut-aa1oSbho.js +1 -0
  462. package/frontend/build/static/{ReactJSONEditor-DZ9l5V9S.js → ReactJSONEditor-BKB6MheT.js} +1 -1
  463. package/frontend/build/static/{RoleCell-C-hJFmul.js → RoleCell-CkV0Kf4-.js} +1 -1
  464. package/frontend/build/static/{aggregateFeatureMetrics-Dli6i5No.js → aggregateFeatureMetrics-CrQXQAeM.js} +1 -1
  465. package/frontend/build/static/{formatTickValue-D3KZyzeb.js → formatTickValue-BCAqKqmg.js} +2 -2
  466. package/frontend/build/static/index-B33kIVre.js +542 -0
  467. package/frontend/build/static/metricsFormatters-C7iN2dDH.js +1 -0
  468. package/frontend/build/static/{networkTrafficUsageHighlightPlugin-DLE_BBMN.js → networkTrafficUsageHighlightPlugin-o9kHeQ2O.js} +1 -1
  469. package/frontend/build/static/strategyCustom-Db-ZtYWl.svg +23 -0
  470. package/frontend/build/static/strategyDefault-LnSyH2eZ.svg +17 -0
  471. package/frontend/build/static/strategyGradual-oCA99tj3.svg +18 -0
  472. package/frontend/build/static/strategyHosts-4lVYC2Bf.svg +23 -0
  473. package/frontend/build/static/strategyIPs-BHaXsOYV.svg +24 -0
  474. package/frontend/build/static/strategyOn-CX-xL0oK.svg +18 -0
  475. package/frontend/build/static/{useApiTokens-DNIDLJlc.js → useApiTokens-eXyUbKcO.js} +1 -1
  476. package/frontend/package.json +3 -4
  477. package/package.json +7 -9
  478. package/dist/lib/routes/admin-api/config.d.ts +0 -24
  479. package/dist/lib/routes/admin-api/config.d.ts.map +0 -1
  480. package/dist/lib/routes/admin-api/config.js +0 -114
  481. package/dist/lib/routes/admin-api/config.js.map +0 -1
  482. package/dist/lib/routes/admin-api/config.test.d.ts +0 -2
  483. package/dist/lib/routes/admin-api/config.test.d.ts.map +0 -1
  484. package/dist/lib/routes/admin-api/config.test.js.map +0 -1
  485. package/dist/test/e2e/stores/user-store.e2e.test.d.ts.map +0 -1
  486. package/dist/test/e2e/stores/user-store.e2e.test.js.map +0 -1
  487. package/frontend/build/static/BackendConnections-C9HcQ9To.js +0 -1
  488. package/frontend/build/static/ChartItem-COMyVdgD.js +0 -1
  489. package/frontend/build/static/FeatureMetricsChart-CQkGp91T.js +0 -2
  490. package/frontend/build/static/FeatureStaleDialog-DKeGFuL1.js +0 -7
  491. package/frontend/build/static/FeatureViewLazyExport-CgntSCvS.js +0 -10
  492. package/frontend/build/static/FrontendNetworkTrafficUsage-E4pIeMFQ.js +0 -1
  493. package/frontend/build/static/ImpactMetricsPage-B3STis_H.js +0 -3
  494. package/frontend/build/static/LazyAdminExport-CsCsRIwk.js +0 -38
  495. package/frontend/build/static/LazyProjectExport-DkN0UegC.js +0 -728
  496. package/frontend/build/static/LineChartComponent-DG1LdcL_.js +0 -1
  497. package/frontend/build/static/NetworkTrafficUsage-bSUVPjoc.js +0 -1
  498. package/frontend/build/static/index-A5We7bvX.js +0 -542
  499. package/frontend/build/static/merge-C7IT0rZd.svg +0 -3
  500. /package/dist/test/e2e/{stores → users}/user-store.e2e.test.d.ts +0 -0
  501. /package/dist/test/e2e/{stores → users}/user-store.e2e.test.js +0 -0
@@ -1,2 +1,2 @@
1
- import{dq as w,iZ as F,bv as E,aR as S,r as p,j as r,B as k,i_ as D,bu as A,s as g,i$ as P,j0 as I,j1 as T,j2 as B,j3 as R,j4 as L,j5 as N,b as y,T as O,j6 as j,bs as $,aT as H}from"./index-A5We7bvX.js";import{f as V,a as W}from"./formatTickValue-D3KZyzeb.js";import{F as _,c as U,u as Y,b as G}from"./aggregateFeatureMetrics-Dli6i5No.js";import{F as q,M as z}from"./MarkCompletedDialogue-Bw9Iccid.js";const J=e=>{const t={label:"Exposed",hoverBackgroundColor:"#A39EFF",backgroundColor:"#A39EFF",data:M(e,n=>n.yes)},a={label:"Not exposed",hoverBackgroundColor:"#D8D6FF",backgroundColor:"#D8D6FF",data:M(e,n=>n.no)};return{datasets:[t,a]}},M=(e,t)=>e.map(a=>({x:a.timestamp,y:t(a),variants:a.variants||{}})),Z=(e,t)=>{if(t===0)return"";const[a,n]=e,s=Math.floor(Number(n)/t*100);return`${n} (${s}%) - ${a}`},C=e=>({plugins:{legend:{position:"top",labels:{color:e.palette.text.primary,usePointStyle:!0,pointStyle:"none",boxHeight:0,padding:15,boxPadding:5}},tooltip:{enabled:!1}},responsive:!0,maintainAspectRatio:!1,scales:{x:{stacked:!0,ticks:{display:!1},grid:{display:!1}},y:{stacked:!0,ticks:{maxTicksLimit:5,display:!1},grid:{drawBorder:!1,color:e.palette.divider}}},elements:{bar:{borderRadius:5}},interaction:{mode:"index",intersect:!1}}),K=(e,t,a)=>{var m;const{responsive:n,elements:s,interaction:c,scales:o,maintainAspectRatio:i}=C(e);return{plugins:{legend:{position:"bottom",labels:{color:e.palette.text.primary,pointStyle:"circle",usePointStyle:!0,boxHeight:6,padding:15,boxPadding:5}},annotation:{clip:!1,annotations:{}},tooltip:{backgroundColor:e.palette.background.paper,titleColor:e.palette.text.primary,bodyColor:e.palette.text.primary,bodySpacing:6,padding:{top:20,bottom:20,left:30,right:30},borderColor:"rgba(0, 0, 0, 0.05)",borderWidth:3,usePointStyle:!0,caretSize:0,boxPadding:10,callbacks:{label:l=>`${l.formattedValue} - ${l.dataset.label}`,afterLabel:l=>{const d=l.dataset.data[l.dataIndex];if(l.dataset.label!=="Exposed"||d.variants===void 0)return"";const{disabled:f,...u}=d.variants;return Object.entries(u).map(b=>Z(b,d.y)).join(`
2
- `)},title:l=>`Time: ${t>48?w(l[0].label,a.locale,"UTC"):F(l[0].label,a.locale)}`}}},responsive:n,maintainAspectRatio:i,scales:{x:{...o?o.x:{},ticks:{color:e.palette.text.secondary,callback(l){const d=this.getLabelForValue(Number(l));return t>48?E(d,a.locale,"UTC"):F(d,a.locale)}}},y:{...(o==null?void 0:o.y)??{},ticks:{...((m=o==null?void 0:o.y)==null?void 0:m.ticks)??{},color:e.palette.text.secondary,callback:V,display:!0}}},elements:s,interaction:c}},Q=({project:e,flagName:t,onArchive:a,className:n})=>{var f;const{feature:s,refetchFeature:c}=S(e,t),o=(f=s.environments)==null?void 0:f.map(u=>({name:u.name,lastSeenAt:u.lastSeenAt,enabled:u.enabled,yes:u.yes,no:u.no})),[i,m]=p.useState(!1),[l,d]=p.useState(!1);return r.jsxs(k,{sx:{display:"flex"},className:n,children:[r.jsx(D,{sx:{pt:0,pb:0},featureLastSeen:s.lastSeenAt,environments:o}),r.jsx(A,{feature:s,onArchive:()=>m(!0),onComplete:()=>d(!0),onUncomplete:c}),s.children.length>0?r.jsx(_,{features:s.children,project:e,isOpen:i,onClose:()=>m(!1)}):r.jsx(q,{isOpen:i,onConfirm:a,onClose:()=>m(!1),projectId:e,featureIds:[t]}),s.project?r.jsx(z,{isOpen:l,setIsOpen:d,projectId:s.project,featureId:s.name,onComplete:c}):null]})},X=[0,14,28,21,33,31,31,22,26,37,31,14,21,14,0],ee=e=>({labels:Array.from({length:15},(t,a)=>a+1),datasets:[{data:X,backgroundColor:e.palette.divider,hoverBackgroundColor:e.palette.divider,label:""}]}),v=g("div")({width:"100%",flexGrow:1}),x=({label:e})=>{const t=y(),a=p.useMemo(()=>C(t),[t]),n=p.useMemo(()=>ee(t),[t]),s="placeholder-chart-label";return r.jsxs(r.Fragment,{children:[r.jsx(O,{id:s,children:e}),r.jsx(v,{children:r.jsx(j,{data:n,options:a,"aria-describedby":s})})]})},te=()=>{const e=y(),t=p.useMemo(()=>C(e),[e]),a=p.useMemo(()=>({labels:[],datasets:[]}),[e]);return r.jsx(v,{children:r.jsx(j,{data:a,options:t,"aria-label":"A placeholder bar chart with a single feature flag exposure metrics"})})},ae=(e,t)=>{const[a,n]=p.useState(null),{feature:s}=S(e,t),c=((s==null?void 0:s.environments)??[]).map(i=>({name:i.name,type:i.type})),o=c.find(i=>i.type==="production");return p.useEffect(()=>{o?n(o.name):c.length>0&&n(c[0].name)},[t,JSON.stringify(c)]),{environment:a,setEnvironment:n,activeEnvironments:c}},re=(e,t,a)=>{const{featureMetrics:n=[],loading:s,error:c}=Y(e,a),o=p.useMemo(()=>[...n].sort((u,b)=>u.timestamp.localeCompare(b.timestamp)),[n]),i=p.useMemo(()=>G(o==null?void 0:o.filter(u=>t===u.environment)).map(u=>({...u,appName:"all selected"})),[o,t]),m=p.useMemo(()=>J(i),[i]),l=y(),{locationSettings:d}=$(),f=p.useMemo(()=>K(l,a,d),[l,a,d]);return{data:m,options:f,loading:s,error:c}},se=({activeEnvironments:e,environment:t,setEnvironment:a})=>r.jsx(H,{name:"feature-environments",label:"Environment",id:"feature-environments",options:e.map(n=>({key:n.name,label:n.name})),value:String(t),onChange:a}),ne=g(k)(({theme:e})=>({display:"flex",justifyContent:"flex-start",flexFlow:"row wrap",gap:e.spacing(2)})),h=g("div")(({theme:e})=>({display:"flex",flexDirection:"column",gap:e.spacing(3),alignItems:"center",height:"100%",justifyContent:"space-between"})),oe=g(Q)({alignItems:"center",justifySelf:"start"}),le=g("div")(({theme:e})=>({display:"flex",justifyContent:"space-between",flexFlow:"row wrap",width:"100%",gap:e.spacing(4)})),me=e=>r.jsx(h,{children:r.jsx(x,{...e})}),ie=({flag:e,onArchive:t})=>{const[a,n]=p.useState(48),{environment:s,setEnvironment:c,activeEnvironments:o}=ae(e.project,e.name),{data:i,options:m,loading:l,error:d}=re(e.name,s,a);if(d)return r.jsx(h,{children:r.jsx(x,{label:"Couldn't fetch metrics for the current flag right now. Please try again. Report this if it doesn't resolve itself."})});const f=i.datasets[0].data.length===0;return r.jsxs(h,{children:[r.jsxs(le,{children:[r.jsx(oe,{project:e.project,flagName:e.name,onArchive:t}),r.jsxs(ne,{children:[s?r.jsx(se,{environment:s,setEnvironment:c,activeEnvironments:o}):null,r.jsx(U,{hoursBack:a,setHoursBack:n})]})]}),l?r.jsx(te,{}):f?r.jsx(x,{label:"No metrics for this feature flag in the selected environment and time period"}):r.jsx(v,{children:r.jsx(j,{data:i,options:m,"aria-label":"A bar chart with a single feature flag exposure metrics"})})]})},fe=e=>[".",".."].includes(e.flag.name)?r.jsx(h,{children:r.jsx(x,{label:`The current flag name ('${e.flag.name}') is known to cause issues due how it affects URLs. We cannot show you a chart for it.`})}):r.jsx(ie,{...e});P.register(W,I,T,B,R,L,N);export{fe as FlagMetricsChart,me as PlaceholderFlagMetricsChartWithWrapper};
1
+ import{du as w,j2 as F,bv as E,aR as S,r as p,j as r,B as k,j3 as D,bu as A,s as g,j4 as P,j5 as I,j6 as T,j7 as B,j8 as R,j9 as L,ja as N,b as j,T as O,jb as y,bs as $,aT as H}from"./index-B33kIVre.js";import{f as V,a as W}from"./formatTickValue-BCAqKqmg.js";import{F as U,c as _,u as Y,b as G}from"./aggregateFeatureMetrics-CrQXQAeM.js";import{F as z,M as J}from"./MarkCompletedDialogue-BOSV3MHM.js";const q=e=>{const t={label:"Exposed",hoverBackgroundColor:"#A39EFF",backgroundColor:"#A39EFF",data:M(e,n=>n.yes)},a={label:"Not exposed",hoverBackgroundColor:"#D8D6FF",backgroundColor:"#D8D6FF",data:M(e,n=>n.no)};return{datasets:[t,a]}},M=(e,t)=>e.map(a=>({x:a.timestamp,y:t(a),variants:a.variants||{}})),K=(e,t)=>{if(t===0)return"";const[a,n]=e,s=Math.floor(Number(n)/t*100);return`${n} (${s}%) - ${a}`},C=e=>({plugins:{legend:{position:"top",labels:{color:e.palette.text.primary,usePointStyle:!0,pointStyle:"none",boxHeight:0,padding:15,boxPadding:5}},tooltip:{enabled:!1}},responsive:!0,maintainAspectRatio:!1,scales:{x:{stacked:!0,ticks:{display:!1},grid:{display:!1}},y:{stacked:!0,ticks:{maxTicksLimit:5,display:!1},grid:{drawBorder:!1,color:e.palette.divider}}},elements:{bar:{borderRadius:5}},interaction:{mode:"index",intersect:!1}}),Q=(e,t,a)=>{var m;const{responsive:n,elements:s,interaction:c,scales:o,maintainAspectRatio:i}=C(e);return{plugins:{legend:{position:"bottom",labels:{color:e.palette.text.primary,pointStyle:"circle",usePointStyle:!0,boxHeight:6,padding:15,boxPadding:5}},annotation:{clip:!1,annotations:{}},tooltip:{backgroundColor:e.palette.background.paper,titleColor:e.palette.text.primary,bodyColor:e.palette.text.primary,bodySpacing:6,padding:{top:20,bottom:20,left:30,right:30},borderColor:"rgba(0, 0, 0, 0.05)",borderWidth:3,usePointStyle:!0,caretSize:0,boxPadding:10,callbacks:{label:l=>`${l.formattedValue} - ${l.dataset.label}`,afterLabel:l=>{const d=l.dataset.data[l.dataIndex];if(l.dataset.label!=="Exposed"||d.variants===void 0)return"";const{disabled:f,...u}=d.variants;return Object.entries(u).map(b=>K(b,d.y)).join(`
2
+ `)},title:l=>`Time: ${t>48?w(l[0].label,a.locale,"UTC"):F(l[0].label,a.locale)}`}}},responsive:n,maintainAspectRatio:i,scales:{x:{...o?o.x:{},ticks:{color:e.palette.text.secondary,callback(l){const d=this.getLabelForValue(Number(l));return t>48?E(d,a.locale,"UTC"):F(d,a.locale)}}},y:{...(o==null?void 0:o.y)??{},ticks:{...((m=o==null?void 0:o.y)==null?void 0:m.ticks)??{},color:e.palette.text.secondary,callback:V,display:!0}}},elements:s,interaction:c}},X=({project:e,flagName:t,onArchive:a,className:n})=>{var f;const{feature:s,refetchFeature:c}=S(e,t),o=(f=s.environments)==null?void 0:f.map(u=>({name:u.name,lastSeenAt:u.lastSeenAt,enabled:u.enabled,yes:u.yes,no:u.no})),[i,m]=p.useState(!1),[l,d]=p.useState(!1);return r.jsxs(k,{sx:{display:"flex"},className:n,children:[r.jsx(D,{sx:{pt:0,pb:0},featureLastSeen:s.lastSeenAt,environments:o}),r.jsx(A,{feature:s,onArchive:()=>m(!0),onComplete:()=>d(!0),onUncomplete:c}),s.children.length>0?r.jsx(U,{features:s.children,project:e,isOpen:i,onClose:()=>m(!1)}):r.jsx(z,{isOpen:i,onConfirm:a,onClose:()=>m(!1),projectId:e,featureIds:[t]}),s.project?r.jsx(J,{isOpen:l,setIsOpen:d,projectId:s.project,featureId:s.name,onComplete:c}):null]})},Z=[0,14,28,21,33,31,31,22,26,37,31,14,21,14,0],ee=e=>({labels:Array.from({length:15},(t,a)=>a+1),datasets:[{data:Z,backgroundColor:e.palette.divider,hoverBackgroundColor:e.palette.divider,label:""}]}),v=g("div")({width:"100%",flexGrow:1}),x=({label:e})=>{const t=j(),a=p.useMemo(()=>C(t),[t]),n=p.useMemo(()=>ee(t),[t]),s="placeholder-chart-label";return r.jsxs(r.Fragment,{children:[r.jsx(O,{id:s,children:e}),r.jsx(v,{children:r.jsx(y,{data:n,options:a,"aria-describedby":s})})]})},te=()=>{const e=j(),t=p.useMemo(()=>C(e),[e]),a=p.useMemo(()=>({labels:[],datasets:[]}),[e]);return r.jsx(v,{children:r.jsx(y,{data:a,options:t,"aria-label":"A placeholder bar chart with a single feature flag exposure metrics"})})},ae=(e,t)=>{const[a,n]=p.useState(null),{feature:s}=S(e,t),c=((s==null?void 0:s.environments)??[]).map(i=>({name:i.name,type:i.type})),o=c.find(i=>i.type==="production");return p.useEffect(()=>{o?n(o.name):c.length>0&&n(c[0].name)},[t,JSON.stringify(c)]),{environment:a,setEnvironment:n,activeEnvironments:c}},re=(e,t,a)=>{const{featureMetrics:n=[],loading:s,error:c}=Y(e,a),o=p.useMemo(()=>[...n].sort((u,b)=>u.timestamp.localeCompare(b.timestamp)),[n]),i=p.useMemo(()=>G(o==null?void 0:o.filter(u=>t===u.environment)).map(u=>({...u,appName:"all selected"})),[o,t]),m=p.useMemo(()=>q(i),[i]),l=j(),{locationSettings:d}=$(),f=p.useMemo(()=>Q(l,a,d),[l,a,d]);return{data:m,options:f,loading:s,error:c}},se=({activeEnvironments:e,environment:t,setEnvironment:a})=>r.jsx(H,{name:"feature-environments",label:"Environment",id:"feature-environments",options:e.map(n=>({key:n.name,label:n.name})),value:String(t),onChange:a}),ne=g(k)(({theme:e})=>({display:"flex",justifyContent:"flex-start",flexFlow:"row wrap",gap:e.spacing(2)})),h=g("div")(({theme:e})=>({display:"flex",flexDirection:"column",gap:e.spacing(3),alignItems:"center",height:"100%",justifyContent:"space-between"})),oe=g(X)({alignItems:"center",justifySelf:"start"}),le=g("div")(({theme:e})=>({display:"flex",justifyContent:"space-between",flexFlow:"row wrap",width:"100%",gap:e.spacing(4)})),me=e=>r.jsx(h,{children:r.jsx(x,{...e})}),ie=({flag:e,onArchive:t})=>{const[a,n]=p.useState(48),{environment:s,setEnvironment:c,activeEnvironments:o}=ae(e.project,e.name),{data:i,options:m,loading:l,error:d}=re(e.name,s,a);if(d)return r.jsx(h,{children:r.jsx(x,{label:"Couldn't fetch metrics for the current flag right now. Please try again. Report this if it doesn't resolve itself."})});const f=i.datasets[0].data.length===0;return r.jsxs(h,{children:[r.jsxs(le,{children:[r.jsx(oe,{project:e.project,flagName:e.name,onArchive:t}),r.jsxs(ne,{children:[s?r.jsx(se,{environment:s,setEnvironment:c,activeEnvironments:o}):null,r.jsx(_,{hoursBack:a,setHoursBack:n})]})]}),l?r.jsx(te,{}):f?r.jsx(x,{label:"No metrics for this feature flag in the selected environment and time period"}):r.jsx(v,{children:r.jsx(y,{data:i,options:m,"aria-label":"A bar chart with a single feature flag exposure metrics"})})]})},fe=e=>[".",".."].includes(e.flag.name)?r.jsx(h,{children:r.jsx(x,{label:`The current flag name ('${e.flag.name}') is known to cause issues due how it affects URLs. We cannot show you a chart for it.`})}):r.jsx(ie,{...e});P.register(W,I,T,B,R,L,N);export{fe as FlagMetricsChart,me as PlaceholderFlagMetricsChartWithWrapper};
@@ -0,0 +1 @@
1
+ import{cY as n,bc as l,j as e,C as c,V as a,B as d,jb as g,j4 as j,j5 as h,j6 as p,j7 as f,j8 as m,j9 as u,ja as x}from"./index-B33kIVre.js";import{a as S}from"./formatTickValue-BCAqKqmg.js";import{u as C,c as w,S as P,T as b,P as y,n as T,g as B}from"./networkTrafficUsageHighlightPlugin-o9kHeQ2O.js";import"./LazyAdminExport-DSSpZhpf.js";import"./RoleCell-CkV0Kf4-.js";import"./useApiTokens-eXyUbKcO.js";import"./metricsFormatters-C7iN2dDH.js";import"./PercentageDonut-aa1oSbho.js";const v=()=>{n("Network - Frontend Traffic Usage");const{isOss:s}=l(),{chartDataSelection:t,setChartDataSelection:r,options:i}=C(),{chartData:o}=w(t);return e.jsx(c,{condition:s(),show:e.jsx(a,{severity:"warning",children:"Not enabled."}),elseShow:e.jsx(e.Fragment,{children:e.jsxs(P,{children:[e.jsxs(b,{children:[e.jsx(d,{children:e.jsx(a,{severity:"info",icon:!1,children:"Frontend traffic is determined by the total SDK requests to the Frontend API"})}),e.jsx(y,{selectedPeriod:t,setPeriod:r})]}),e.jsx(g,{data:o,plugins:[T],options:i,"aria-label":B(t)})]})})})};j.register(S,h,p,f,m,u,x);export{v as default};
@@ -0,0 +1,3 @@
1
+ import{fF as $n,fG as Nn,iX as Wn,dF as jt,b9 as Te,dG as Tt,j as p,A as jr,r as M,B as q,T as pe,et as lr,l as Lt,F as Tr,I as Lr,S as Hr,M as oe,d$ as kn,m as $r,u as An,t as Nr,V as wt,s as V,b as Ht,iV as In,fr as qn,iW as ur,al as Wr,cb as Gn,hV as Bn,hW as Fn,E as Yn,b_ as Un,i as cr,aE as Xn,cG as dr,b1 as Vn,b3 as Kn,ek as Zn,iY as Jn,iZ as kr,i_ as Qn,i$ as ye,j0 as $t,g as eo}from"./index-B33kIVre.js";import{g as Ar,a as fr,b as pr,c as hr,d as to,f as ro}from"./metricsFormatters-C7iN2dDH.js";function gr(t){$n(1,arguments);var e=Wn(t);return Nn(e*1e3)}const as=()=>{const t="api/admin/impact-metrics/metadata",{data:e,refetch:r,loading:n,error:o}=jt(Te(t),()=>Tt(Te(t),"Impact metrics metadata"));return{metadata:e,refetch:r,loading:n,error:o}},no=({value:t,onChange:e,options:r,loading:n=!1})=>p.jsx(jr,{options:r,getOptionLabel:o=>o.displayName,value:r.find(o=>o.name===t)||null,onChange:(o,a)=>e((a==null?void 0:a.name)||""),disabled:n,renderOption:(o,a,{inputValue:i})=>M.createElement(q,{component:"li",...o,key:a.name},p.jsxs(q,{sx:{display:"flex",flexDirection:"column"},children:[p.jsx(pe,{variant:"body2",children:p.jsx(lr,{search:i,children:a.displayName})}),p.jsx(pe,{variant:"caption",color:"text.secondary",children:p.jsx(lr,{search:i,children:a.help})})]})),renderInput:o=>p.jsx(Lt,{...o,label:"Data series",placeholder:"Search for a metric…",variant:"outlined",size:"small",required:!0}),noOptionsText:"No metrics available",sx:{minWidth:300}}),oo=({value:t,onChange:e})=>p.jsxs(Tr,{variant:"outlined",size:"small",sx:{minWidth:200},children:[p.jsx(Lr,{id:"range-select-label",children:"Time"}),p.jsxs(Hr,{labelId:"range-select-label",value:t,onChange:r=>e(r.target.value),label:"Time Range",children:[p.jsx(oe,{value:"hour",children:"Last hour"}),p.jsx(oe,{value:"day",children:"Last 24 hours"}),p.jsx(oe,{value:"week",children:"Last 7 days"}),p.jsx(oe,{value:"month",children:"Last 30 days"})]})]}),ao=({value:t,onChange:e,metricType:r})=>r==="unknown"?null:p.jsxs(Tr,{variant:"outlined",size:"small",sx:{minWidth:200},children:[p.jsx(Lr,{id:"mode-select-label",children:"Mode"}),p.jsx(Hr,{labelId:"mode-select-label",value:t,onChange:n=>e(n.target.value),label:"Mode",children:r==="counter"?[p.jsx(oe,{value:"rps",children:"Rate per second"},"rps"),p.jsx(oe,{value:"count",children:"Count"},"count")]:r==="gauge"?[p.jsx(oe,{value:"avg",children:"Average"},"avg"),p.jsx(oe,{value:"sum",children:"Sum"},"sum")]:r==="histogram"?[p.jsx(oe,{value:"p50",children:"50th percentile"},"p50"),p.jsx(oe,{value:"p95",children:"95th percentile"},"p95"),p.jsx(oe,{value:"p99",children:"99th percentile"},"p99")]:[]})]}),io=({formData:t,actions:e,metricSeries:r,loading:n})=>p.jsxs(q,{children:[p.jsxs(q,{sx:o=>({display:"flex",flexDirection:"column",gap:o.spacing(3)}),children:[p.jsx(pe,{variant:"body2",color:"text.secondary",children:"Select a custom metric to see its value over time. This can help you understand the impact of your feature rollout on key outcomes, such as system performance, usage patterns or error rates."}),p.jsx(no,{value:t.metricName,onChange:e.handleSeriesChange,options:r,loading:n}),t.metricName?p.jsxs(p.Fragment,{children:[p.jsx(oo,{value:t.timeRange,onChange:e.setTimeRange}),p.jsx(ao,{value:t.aggregationMode,onChange:e.setAggregationMode,metricType:Ar(t.metricName)})]}):null]}),t.metricName?p.jsx(kn,{sx:o=>({margin:o.spacing(1.5,0)}),control:p.jsx($r,{checked:t.yAxisMin==="zero",onChange:o=>e.setYAxisMin(o.target.checked?"zero":"auto")}),label:"Begin at zero"}):null]}),Ir=t=>{const e=!!(t!=null&&t.series&&(t!=null&&t.range)),n=(()=>{if(!t)return"";const s=new URLSearchParams({series:t.series,range:t.range});if(t.aggregationMode!==void 0&&s.append("aggregationMode",t.aggregationMode),t.labels&&Object.keys(t.labels).length>0){const l=Object.entries(t.labels).reduce((c,[d,f])=>(f.length>0&&(c[d]=f),c),{});Object.keys(l).length>0&&s.append("labels",JSON.stringify(l))}return`api/admin/impact-metrics/?${s.toString()}`})(),{data:o,refetch:a,loading:i,error:u}=jt(e?Te(n):null,e?()=>Tt(Te(n),"Impact metrics data"):()=>Promise.resolve([]),{refreshInterval:30*1e3,revalidateOnFocus:!0});return{data:o||{series:[],labels:{}},refetch:a,loading:e?i:!1,error:u}},so=({open:t,initialConfig:e})=>{const[r,n]=M.useState((e==null?void 0:e.title)||""),[o,a]=M.useState((e==null?void 0:e.metricName)||""),[i,u]=M.useState((e==null?void 0:e.timeRange)||"day"),[s,l]=M.useState((e==null?void 0:e.yAxisMin)||"auto"),[c,d]=M.useState((e==null?void 0:e.labelSelectors)||{}),[f,h]=M.useState((e==null?void 0:e.aggregationMode)||fr(o)),{data:{labels:v}}=Ir(o?{series:o,range:i,aggregationMode:f}:void 0);M.useEffect(()=>{t&&e?(n(e.title||""),a(e.metricName),u(e.timeRange),l(e.yAxisMin),d(e.labelSelectors),h(e.aggregationMode||fr(e.metricName))):t&&!e&&(n(""),a(""),u("day"),l("auto"),d({}),h("count"))},[t,e]);const R=b=>{a(b),d({});const y=Ar(b);y==="counter"?h("count"):y==="gauge"?h("avg"):y==="histogram"&&h("p50")},S=()=>({title:r||void 0,metricName:o,timeRange:i,yAxisMin:s,labelSelectors:c,aggregationMode:f}),g=o.length>0;return{formData:{title:r,metricName:o,timeRange:i,yAxisMin:s,aggregationMode:f,labelSelectors:c},actions:{setTitle:n,setMetricName:a,setTimeRange:u,setYAxisMin:l,setAggregationMode:h,setLabelSelectors:d,handleSeriesChange:R,getConfigToSave:S},isValid:g,currentAvailableLabels:v}},lo=()=>{const t="api/admin/impact-metrics/config",{data:e,refetch:r,loading:n,error:o}=jt(Te(t),()=>Tt(Te(t),"impactMetricsConfig"));return{configs:(e==null?void 0:e.configs)||[],refetch:r,loading:n,error:o}},uo=t=>{const e=t?`api/admin/projects/${t.projectId}/features/${t.featureName}/impact-metrics/config`:"api/admin/impact-metrics/config",{makeRequest:r,createRequest:n,errors:o,loading:a}=An({propagateErrors:!0}),i=M.useCallback(async s=>{const l=n(e,{method:"POST",body:JSON.stringify(s)},"updateImpactMetric");return r(l.caller,l.id)},[r,n]),u=M.useCallback(async s=>{const l=n(`${e}/${s}`,{method:"DELETE"},"deleteImpactMetric");return r(l.caller,l.id)},[r,n,e]);return{createImpactMetric:i,deleteImpactMetric:u,errors:o,loading:a}},he="*",is=()=>{const{configs:t,loading:e,error:r,refetch:n}=lo(),{layout:o,charts:a}=M.useMemo(()=>({layout:t.map((h,v)=>{const R=v%2,S=Math.floor(v/2);return{i:h.id,x:R*6,y:S*2,w:6,h:2,minW:4,minH:2,maxW:12,maxH:8}}),charts:t}),[t]),{createImpactMetric:i,deleteImpactMetric:u,loading:s,errors:l}=uo(),c=M.useCallback(async h=>{await i(h),n()},[i,n]),d=M.useCallback(async(h,v)=>{await i({...v,id:h}),n()},[t,i,n]),f=M.useCallback(async h=>{await u(h),n()},[t,u,n]);return{charts:a,layout:o,loading:e||s,error:r||Object.keys(l).length>0?l:void 0,addChart:c,updateChart:d,deleteChart:f}},co=({labelKey:t,options:e,value:r,onChange:n})=>{const o=r.includes(he),a=`autocomplete-${t}`,i=e.length>=1e3,u=[he,...e];return p.jsx(jr,{multiple:!0,disableCloseOnSelect:!0,id:a,options:u,value:o?e:r,getOptionLabel:s=>s===he?"(Select all)":s,onChange:(s,l,c,d)=>{if((d==null?void 0:d.option)===he){n(o?[]:[he]);return}n(l.filter(f=>f!==he))},renderOption:(s,l,{selected:c})=>{const{key:d,...f}=s;return p.jsxs("li",{...f,children:[p.jsx($r,{size:"small",checked:l===he?o:c,style:{marginRight:8}}),l===he?p.jsx(pe,{component:"span",sx:{color:"text.secondary"},children:"Select all"}):l]},d||l)},renderTags:(s,l)=>{const d=s.slice(-5),f=s.length-5;return p.jsxs(p.Fragment,{children:[d.map((h,v)=>{const{key:R,...S}=l({index:v});return M.createElement(Nr,{...S,key:R,label:h,size:"small"})}),f>0?p.jsxs(pe,{component:"span",sx:{color:"text.secondary"},children:[" ","(+",f,")"]}):null]})},renderInput:s=>p.jsxs(p.Fragment,{children:[p.jsx(Lt,{...s,label:t,placeholder:o?void 0:"Select values…",variant:"outlined",size:"small",inputProps:{...s.inputProps}}),i&&p.jsx(wt,{severity:"warning",sx:l=>({padding:l.spacing(1,2),marginTop:l.spacing(1)}),children:"Maximum of 1000 values loaded due to performance."})]})})},fo=V(q)(({theme:t})=>({display:"flex",flexDirection:"column",gap:t.spacing(1),width:"100%"})),po=V(q)(({theme:t})=>({width:"100%",display:"flex",alignItems:"center",gap:t.spacing(1)})),ho=V(q)(({theme:t})=>({display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(250px, 1fr))",gap:t.spacing(2),flexGrow:1})),go=V(q)({display:"flex",flexDirection:"column",flexGrow:1}),mo=V(pe)({lineHeight:1.5,height:"24px"}),yo=V(Nr)(({theme:t})=>({position:"relative",height:"20px",margin:t.spacing(-1,0)})),mr=({title:t,labels:e,labelSelectors:r,onLabelChange:n,onAllToggle:o,onChange:a})=>{const i=e.map(([l])=>l),u=i.some(l=>r[l]),s=()=>{const l={};Object.entries(r).forEach(([c,d])=>{i.includes(c)||(l[c]=d)}),a(l)};return p.jsxs(fo,{children:[p.jsxs(po,{children:[p.jsx(mo,{variant:"subtitle2",children:t}),u&&p.jsx(yo,{label:"Clear all",size:"small",variant:"outlined",onClick:s})]}),p.jsx(ho,{children:e.map(([l,c])=>{const d=r[l]||[];return p.jsx(go,{children:p.jsx(co,{labelKey:l,options:c,value:d,onChange:f=>n(l,f),handleAllToggle:o})},l)})})]})},yr=["environment","appName","origin"],vo=({labelSelectors:t,onChange:e,availableLabels:r})=>{const n=(u,s)=>{const l={...t};s.length===0?delete l[u]:l[u]=s,e(l)},o=(u,s)=>{const l={...t};s?l[u]=["*"]:delete l[u],e(l)};if(!r||Object.keys(r).length===0)return null;const a=Object.entries(r).filter(([u])=>yr.includes(u)).sort(),i=Object.entries(r).filter(([u])=>!yr.includes(u)).sort();return p.jsxs(q,{sx:{display:"flex",gap:2,flexWrap:"wrap"},children:[a.length>0&&p.jsx(mr,{title:"Filter by labels",labels:a,labelSelectors:t,onLabelChange:n,onAllToggle:o,onChange:e}),i.length>0&&p.jsx(mr,{title:"Flag specific filters",labels:i,labelSelectors:t,onLabelChange:n,onAllToggle:o,onChange:e})]})},bo=(t,e)=>{if(!e||e.length===0||t<=0)return 0;let r=0;for(let n=0;n<e.length;n++){const o=e.charCodeAt(n);r=(r<<5)-r+o,r=r&r}return Math.abs(r)%t},wo=(t,e)=>{const r=Ht(),n=r.palette.charts.series,o=bo(n.length,e);return M.useMemo(()=>{if(!t||t.length===0)return{labels:[],datasets:[{data:[],borderColor:r.palette.primary.main,backgroundColor:r.palette.primary.light}]};if(t.length===1){const a=t[0],i=a.data.map(([s])=>new Date(s*1e3)),u=a.data.map(([,s])=>s);return{labels:i,datasets:[{data:u,borderColor:r.palette.primary.main,backgroundColor:r.palette.primary.light,label:pr(a.metric)}]}}else{const a=new Set;if(t.forEach(l=>{l.data.forEach(([c])=>{a.add(c)})}),a.size===0)return{labels:[],datasets:[]};const i=Array.from(a).sort((l,c)=>l-c),u=i.map(l=>new Date(l*1e3)),s=t.map((l,c)=>{const d=pr(l.metric),f=n[(c+o)%n.length],h=new Map(l.data),v=i.map(R=>h.get(R)??null);return{label:d,data:v,borderColor:f,backgroundColor:f,fill:!1}});return{labels:u,datasets:s}}},[t,r])},qr=({metricName:t,timeRange:e,labelSelectors:r,yAxisMin:n,aggregationMode:o,aspectRatio:a,overrideOptions:i={},errorTitle:u="Failed to load impact metrics.",emptyDataDescription:s="Send impact metrics using Unleash SDK and select data series to view the chart.",noSeriesPlaceholder:l,isPreview:c})=>{const{data:{start:d,end:f,series:h,debug:v},loading:R,error:S}=Ir(t?{series:t,range:e,aggregationMode:o,labels:Object.keys(r).length>0?r:void 0}:void 0),g=In({fill:!0,type:"constant"}),b=wo(h,v==null?void 0:v.query),y=!!S,x=R,m=!t||x||y,P=M.useMemo(()=>!x&&(!h||h.length===0||!b.datasets.some(B=>B.data.length>1)),[b,x,h]),H=d?gr(Number.parseInt(d,10)):void 0,$=f?gr(Number.parseInt(f,10)):void 0,Y=t?p.jsx(ur,{description:s}):l||p.jsx(ur,{title:"Select a metric series to view the chart.",description:""}),K=Object.keys(r).length>0,ve=P?Y:x,He=m?i:{...i,scales:{x:{type:"time",min:H==null?void 0:H.getTime(),max:$==null?void 0:$.getTime(),time:{unit:hr(e),displayFormats:{[hr(e)]:to(e)},tooltipFormat:"PPpp"},ticks:{maxRotation:45,minRotation:45,maxTicksLimit:8}},y:{beginAtZero:n==="zero",title:{display:o==="rps",text:o==="rps"?"Rate per second":""},ticks:{precision:0,callback:B=>typeof B=="number"?`${ro(B)}${o==="rps"?"/s":""}`:B}}},plugins:{legend:{display:h&&(K||h.length>1),position:"bottom",labels:{usePointStyle:!0,boxWidth:8,padding:12}}},animations:{x:{duration:0},y:{duration:0}}};return p.jsxs(p.Fragment,{children:[p.jsx(q,{sx:c?{}:{height:"100%",width:"100%","& > div":{height:"100% !important",width:"100% !important"}},children:p.jsx(qn,{data:P||x?g:b,aspectRatio:a,overrideOptions:He,cover:y?p.jsx(wt,{severity:"error",children:u}):ve})}),c&&(v!=null&&v.query)?p.jsx(q,{sx:B=>({margin:B.spacing(2),padding:B.spacing(2),background:B.palette.background.elevation1}),children:p.jsx(pe,{variant:"caption",color:"text.secondary",sx:{wordBreak:"break-all"},children:p.jsx("code",{children:v.query})})}):null,c&&(v!=null&&v.isTruncated)?p.jsx(q,{sx:B=>({padding:B.spacing(0,2)}),children:p.jsxs(wt,{severity:"warning",children:["Showing only ",h.length," series due to performance. Please change filters for more accurate results."]})}):null]})},xo=V(q)(({theme:t})=>({display:"flex",flexDirection:"column",gap:t.spacing(3),[t.breakpoints.down("lg")]:{flex:"none"},[t.breakpoints.up("lg")]:{flex:"0 0 400px"}})),So=V(q)(({theme:t})=>({flex:1,display:"flex",flexDirection:"column",gap:t.spacing(2),[t.breakpoints.down("lg")]:{minHeight:"300px"},[t.breakpoints.up("lg")]:{minHeight:"400px"}})),ss=({open:t,onClose:e,onSave:r,initialConfig:n,metricSeries:o,loading:a=!1})=>{const{formData:i,actions:u,isValid:s,currentAvailableLabels:l}=so({open:t,initialConfig:n}),c=Ht(),d=Wr(c.breakpoints.down("lg")),f=()=>{s&&(r(u.getConfigToSave()),e())};return p.jsxs(Gn,{open:t,onClose:e,maxWidth:"lg",fullWidth:!0,sx:{"& .MuiDialog-paper":{minHeight:"600px",maxHeight:"90vh"}},children:[p.jsx(Bn,{children:n?"Edit Chart":"Add New Chart"}),p.jsxs(Fn,{children:[p.jsxs(q,{sx:h=>({display:"flex",flexDirection:{xs:"column",lg:"row"},gap:h.spacing(3),pt:h.spacing(1),height:"100%"}),children:[p.jsxs(xo,{children:[p.jsx(Lt,{label:"Chart Title (optional)",value:i.title,onChange:h=>u.setTitle(h.target.value),fullWidth:!0,variant:"outlined",size:"small"}),p.jsx(io,{formData:i,actions:u,metricSeries:o,loading:a})]}),p.jsx(So,{children:p.jsx(q,{sx:h=>({padding:h.spacing(1)}),children:p.jsx(qr,{metricName:i.metricName,timeRange:i.timeRange,labelSelectors:i.labelSelectors,yAxisMin:i.yAxisMin,aggregationMode:i.aggregationMode,isPreview:!0},d?"small":"large")})})]}),l?p.jsx(vo,{labelSelectors:i.labelSelectors,onChange:u.setLabelSelectors,availableLabels:l}):null]}),p.jsx(Yn,{}),p.jsxs(Un,{sx:h=>({margin:h.spacing(2,3,3)}),children:[p.jsx(cr,{onClick:e,children:"Cancel"}),p.jsx(cr,{onClick:f,variant:"contained",disabled:!s,children:n?"Update":"Add Chart"})]})]})},Ro=t=>{const e=[];t.displayName&&e.push(`${t.displayName}`),e.push(`last ${t.timeRange}`),e.push(t.aggregationMode);const r=Object.keys(t.labelSelectors).length;return r>0&&e.push(`${r} filter${r>1?"s":""}`),e.join(" • ")},Do=V(Xn)(({theme:t})=>({borderRadius:`${t.shape.borderRadiusMedium}px`,boxShadow:"none",display:"flex",flexDirection:"column",height:"100%"})),Oo=V(q)({flex:1,display:"flex",flexDirection:"column",minHeight:0}),_o=V(q)(({theme:t})=>({position:"relative",minWidth:0,flexGrow:1,height:"100%",display:"flex",flexDirection:"column",margin:"auto 0",padding:t.spacing(3)})),Po=V(q)(({theme:t})=>({display:"flex",gap:t.spacing(2),alignItems:"center",padding:t.spacing(1.5,2),borderBottom:`1px solid ${t.palette.divider}`})),Eo=V(q)(({theme:t})=>({display:"flex",flexDirection:"column",justifyContent:"flex-end",flexGrow:1,overflow:"hidden",textOverflow:"ellipsis"})),Co=V(q)(({theme:t})=>({marginLeft:"auto",display:"flex",alignItems:"center",gap:t.spacing(.5)})),ls=({config:t,onEdit:e,onDelete:r,permission:n=Zn,projectId:o,dragHandle:a})=>p.jsxs(Do,{children:[p.jsxs(Po,{children:[a,p.jsxs(Eo,{children:[t.title&&p.jsx(pe,{variant:"h6",children:t.title}),p.jsx(pe,{variant:"body2",color:"text.secondary",children:Ro(t)})]}),p.jsxs(Co,{children:[p.jsx(dr,{onClick:()=>e(t),permission:n,projectId:o,children:p.jsx(Vn,{})}),p.jsx(dr,{onClick:()=>r(t.id),permission:n,projectId:o,children:p.jsx(Kn,{})})]})]}),p.jsx(Oo,{children:p.jsx(_o,{children:p.jsx(qr,{metricName:t.metricName,timeRange:t.timeRange,labelSelectors:t.labelSelectors,yAxisMin:t.yAxisMin,aggregationMode:t.aggregationMode,aspectRatio:1.5,overrideOptions:{maintainAspectRatio:!1},emptyDataDescription:"Send impact metrics using Unleash SDK for this series to view the chart."})})})]});var Gr={exports:{}},Ie={},xt={exports:{}};(function(t,e){(function(r,n){n(e)})(Jn,function(r){function n(w){return function(L,j,T,k,G,re,A){return w(L,j,A)}}function o(w){return function(L,j,T,k){if(!L||!j||typeof L!="object"||typeof j!="object")return w(L,j,T,k);var G=k.get(L),re=k.get(j);if(G&&re)return G===j&&re===L;k.set(L,j),k.set(j,L);var A=w(L,j,T,k);return k.delete(L),k.delete(j),A}}function a(w,O){var L={};for(var j in w)L[j]=w[j];for(var j in O)L[j]=O[j];return L}function i(w){return w.constructor===Object||w.constructor==null}function u(w){return typeof w.then=="function"}function s(w,O){return w===O||w!==w&&O!==O}var l="[object Arguments]",c="[object Boolean]",d="[object Date]",f="[object RegExp]",h="[object Map]",v="[object Number]",R="[object Object]",S="[object Set]",g="[object String]",b=Object.prototype.toString;function y(w){var O=w.areArraysEqual,L=w.areDatesEqual,j=w.areMapsEqual,T=w.areObjectsEqual,k=w.areRegExpsEqual,G=w.areSetsEqual,re=w.createIsNestedEqual,A=re(ae);function ae(N,I,ie){if(N===I)return!0;if(!N||!I||typeof N!="object"||typeof I!="object")return N!==N&&I!==I;if(i(N)&&i(I))return T(N,I,A,ie);var ir=Array.isArray(N),sr=Array.isArray(I);if(ir||sr)return ir===sr&&O(N,I,A,ie);var se=b.call(N);return se!==b.call(I)?!1:se===d?L(N,I,A,ie):se===f?k(N,I,A,ie):se===h?j(N,I,A,ie):se===S?G(N,I,A,ie):se===R||se===l?u(N)||u(I)?!1:T(N,I,A,ie):se===c||se===v||se===g?s(N.valueOf(),I.valueOf()):!1}return ae}function x(w,O,L,j){var T=w.length;if(O.length!==T)return!1;for(;T-- >0;)if(!L(w[T],O[T],T,T,w,O,j))return!1;return!0}var m=o(x);function P(w,O){return s(w.valueOf(),O.valueOf())}function H(w,O,L,j){var T=w.size===O.size;if(!T)return!1;if(!w.size)return!0;var k={},G=0;return w.forEach(function(re,A){if(T){var ae=!1,N=0;O.forEach(function(I,ie){!ae&&!k[N]&&(ae=L(A,ie,G,N,w,O,j)&&L(re,I,A,ie,w,O,j))&&(k[N]=!0),N++}),G++,T=ae}}),T}var $=o(H),Y="_owner",K=Object.prototype.hasOwnProperty;function ve(w,O,L,j){var T=Object.keys(w),k=T.length;if(Object.keys(O).length!==k)return!1;for(var G;k-- >0;){if(G=T[k],G===Y){var re=!!w.$$typeof,A=!!O.$$typeof;if((re||A)&&re!==A)return!1}if(!K.call(O,G)||!L(w[G],O[G],G,G,w,O,j))return!1}return!0}var He=o(ve);function B(w,O){return w.source===O.source&&w.flags===O.flags}function $e(w,O,L,j){var T=w.size===O.size;if(!T)return!1;if(!w.size)return!0;var k={};return w.forEach(function(G,re){if(T){var A=!1,ae=0;O.forEach(function(N,I){!A&&!k[ae]&&(A=L(G,N,re,I,w,O,j))&&(k[ae]=!0),ae++}),T=A}}),T}var ar=o($e),be=Object.freeze({areArraysEqual:x,areDatesEqual:P,areMapsEqual:H,areObjectsEqual:ve,areRegExpsEqual:B,areSetsEqual:$e,createIsNestedEqual:n}),we=Object.freeze({areArraysEqual:m,areDatesEqual:P,areMapsEqual:$,areObjectsEqual:He,areRegExpsEqual:B,areSetsEqual:ar,createIsNestedEqual:n}),Be=y(be);function ft(w,O){return Be(w,O,void 0)}var En=y(a(be,{createIsNestedEqual:function(){return s}}));function Cn(w,O){return En(w,O,void 0)}var zn=y(we);function Mn(w,O){return zn(w,O,new WeakMap)}var jn=y(a(we,{createIsNestedEqual:function(){return s}}));function Tn(w,O){return jn(w,O,new WeakMap)}function Ln(w){return y(a(be,w(be)))}function Hn(w){var O=y(a(we,w(we)));return function(L,j,T){return T===void 0&&(T=new WeakMap),O(L,j,T)}}r.circularDeepEqual=Mn,r.circularShallowEqual=Tn,r.createCustomCircularEqual=Hn,r.createCustomEqual=Ln,r.deepEqual=ft,r.sameValueZeroEqual=s,r.shallowEqual=Cn,Object.defineProperty(r,"__esModule",{value:!0})})})(xt,xt.exports);var Nt=xt.exports;const Qe=kr(Qn);var C={},zo=function(e,r,n){return e===r?!0:e.className===r.className&&n(e.style,r.style)&&e.width===r.width&&e.autoSize===r.autoSize&&e.cols===r.cols&&e.draggableCancel===r.draggableCancel&&e.draggableHandle===r.draggableHandle&&n(e.verticalCompact,r.verticalCompact)&&n(e.compactType,r.compactType)&&n(e.layout,r.layout)&&n(e.margin,r.margin)&&n(e.containerPadding,r.containerPadding)&&e.rowHeight===r.rowHeight&&e.maxRows===r.maxRows&&e.isBounded===r.isBounded&&e.isDraggable===r.isDraggable&&e.isResizable===r.isResizable&&e.allowOverlap===r.allowOverlap&&e.preventCollision===r.preventCollision&&e.useCSSTransforms===r.useCSSTransforms&&e.transformScale===r.transformScale&&e.isDroppable===r.isDroppable&&n(e.resizeHandles,r.resizeHandles)&&n(e.resizeHandle,r.resizeHandle)&&e.onLayoutChange===r.onLayoutChange&&e.onDragStart===r.onDragStart&&e.onDrag===r.onDrag&&e.onDragStop===r.onDragStop&&e.onResizeStart===r.onResizeStart&&e.onResize===r.onResize&&e.onResizeStop===r.onResizeStop&&e.onDrop===r.onDrop&&n(e.droppingItem,r.droppingItem)&&n(e.innerRef,r.innerRef)};Object.defineProperty(C,"__esModule",{value:!0});C.bottom=Wt;C.childrenEqual=To;C.cloneLayout=Br;C.cloneLayoutItem=Oe;C.collides=et;C.compact=Yr;C.compactItem=Ur;C.compactType=Uo;C.correctBounds=Xr;C.fastPositionEqual=Lo;C.fastRGLPropsEqual=void 0;C.getAllCollisions=Vr;C.getFirstCollision=Re;C.getLayoutItem=kt;C.getStatics=At;C.modifyLayout=Fr;C.moveElement=Ae;C.moveElementAwayFromCollision=Rt;C.noop=void 0;C.perc=$o;C.resizeItemInDirection=qo;C.setTopLeft=Bo;C.setTransform=Go;C.sortLayoutItems=Yt;C.sortLayoutItemsByColRow=en;C.sortLayoutItemsByRowCol=Qr;C.synchronizeLayoutWithChildren=Fo;C.validateLayout=Yo;C.withLayoutItem=jo;var vr=Nt,ke=Mo(M);function Mo(t){return t&&t.__esModule?t:{default:t}}function Wt(t){let e=0,r;for(let n=0,o=t.length;n<o;n++)r=t[n].y+t[n].h,r>e&&(e=r);return e}function Br(t){const e=Array(t.length);for(let r=0,n=t.length;r<n;r++)e[r]=Oe(t[r]);return e}function Fr(t,e){const r=Array(t.length);for(let n=0,o=t.length;n<o;n++)e.i===t[n].i?r[n]=e:r[n]=t[n];return r}function jo(t,e,r){let n=kt(t,e);return n?(n=r(Oe(n)),t=Fr(t,n),[t,n]):[t,null]}function Oe(t){return{w:t.w,h:t.h,x:t.x,y:t.y,i:t.i,minW:t.minW,maxW:t.maxW,minH:t.minH,maxH:t.maxH,moved:!!t.moved,static:!!t.static,isDraggable:t.isDraggable,isResizable:t.isResizable,resizeHandles:t.resizeHandles,isBounded:t.isBounded}}function To(t,e){return(0,vr.deepEqual)(ke.default.Children.map(t,r=>r==null?void 0:r.key),ke.default.Children.map(e,r=>r==null?void 0:r.key))&&(0,vr.deepEqual)(ke.default.Children.map(t,r=>r==null?void 0:r.props["data-grid"]),ke.default.Children.map(e,r=>r==null?void 0:r.props["data-grid"]))}C.fastRGLPropsEqual=zo;function Lo(t,e){return t.left===e.left&&t.top===e.top&&t.width===e.width&&t.height===e.height}function et(t,e){return!(t.i===e.i||t.x+t.w<=e.x||t.x>=e.x+e.w||t.y+t.h<=e.y||t.y>=e.y+e.h)}function Yr(t,e,r,n){const o=At(t),a=Yt(t,e),i=Array(t.length);for(let u=0,s=a.length;u<s;u++){let l=Oe(a[u]);l.static||(l=Ur(o,l,e,r,a,n),o.push(l)),i[t.indexOf(a[u])]=l,l.moved=!1}return i}const Ho={x:"w",y:"h"};function St(t,e,r,n){const o=Ho[n];e[n]+=1;const a=t.map(i=>i.i).indexOf(e.i);for(let i=a+1;i<t.length;i++){const u=t[i];if(!u.static){if(u.y>e.y+e.h)break;et(e,u)&&St(t,u,r+e[o],n)}}e[n]=r}function Ur(t,e,r,n,o,a){const i=r==="vertical",u=r==="horizontal";if(i)for(e.y=Math.min(Wt(t),e.y);e.y>0&&!Re(t,e);)e.y--;else if(u)for(;e.x>0&&!Re(t,e);)e.x--;let s;for(;(s=Re(t,e))&&!(r===null&&a);)if(u?St(o,e,s.x+s.w,"x"):St(o,e,s.y+s.h,"y"),u&&e.x+e.w>n)for(e.x=n-e.w,e.y++;e.x>0&&!Re(t,e);)e.x--;return e.y=Math.max(e.y,0),e.x=Math.max(e.x,0),e}function Xr(t,e){const r=At(t);for(let n=0,o=t.length;n<o;n++){const a=t[n];if(a.x+a.w>e.cols&&(a.x=e.cols-a.w),a.x<0&&(a.x=0,a.w=e.cols),!a.static)r.push(a);else for(;Re(r,a);)a.y++}return t}function kt(t,e){for(let r=0,n=t.length;r<n;r++)if(t[r].i===e)return t[r]}function Re(t,e){for(let r=0,n=t.length;r<n;r++)if(et(t[r],e))return t[r]}function Vr(t,e){return t.filter(r=>et(r,e))}function At(t){return t.filter(e=>e.static)}function Ae(t,e,r,n,o,a,i,u,s){if(e.static&&e.isDraggable!==!0||e.y===n&&e.x===r)return t;`${e.i}${String(r)}${String(n)}${e.x}${e.y}`;const l=e.x,c=e.y;typeof r=="number"&&(e.x=r),typeof n=="number"&&(e.y=n),e.moved=!0;let d=Yt(t,i);(i==="vertical"&&typeof n=="number"?c>=n:i==="horizontal"&&typeof r=="number"?l>=r:!1)&&(d=d.reverse());const h=Vr(d,e),v=h.length>0;if(v&&s)return Br(t);if(v&&a)return`${e.i}`,e.x=l,e.y=c,e.moved=!1,t;for(let R=0,S=h.length;R<S;R++){const g=h[R];`${e.i}${e.x}${e.y}${g.i}${g.x}${g.y}`,!g.moved&&(g.static?t=Rt(t,g,e,o,i):t=Rt(t,e,g,o,i))}return t}function Rt(t,e,r,n,o,a){const i=o==="horizontal",u=o==="vertical",s=e.static;if(n){n=!1;const d={x:i?Math.max(e.x-r.w,0):r.x,y:u?Math.max(e.y-r.h,0):r.y,w:r.w,h:r.h,i:"-1"},f=Re(t,d),h=f&&f.y+f.h>e.y,v=f&&e.x+e.w>f.x;if(f){if(h&&u)return Ae(t,r,void 0,e.y+1,n,s,o);if(h&&o==null)return e.y=r.y,r.y=r.y+r.h,t;if(v&&i)return Ae(t,e,r.x,void 0,n,s,o)}else return`${r.i}${d.x}${d.y}`,Ae(t,r,i?d.x:void 0,u?d.y:void 0,n,s,o)}const l=i?r.x+1:void 0,c=u?r.y+1:void 0;return l==null&&c==null?t:Ae(t,r,i?r.x+1:void 0,u?r.y+1:void 0,n,s,o)}function $o(t){return t*100+"%"}const Kr=(t,e,r,n)=>t+r>n?e:r,Zr=(t,e,r)=>t<0?e:r,Jr=t=>Math.max(0,t),It=t=>Math.max(0,t),qt=(t,e,r)=>{let{left:n,height:o,width:a}=e;const i=t.top-(o-t.height);return{left:n,width:a,height:Zr(i,t.height,o),top:It(i)}},Gt=(t,e,r)=>{let{top:n,left:o,height:a,width:i}=e;return{top:n,height:a,width:Kr(t.left,t.width,i,r),left:Jr(o)}},Bt=(t,e,r)=>{let{top:n,height:o,width:a}=e;const i=t.left-(a-t.width);return{height:o,width:i<0?t.width:Kr(t.left,t.width,a,r),top:It(n),left:Jr(i)}},Ft=(t,e,r)=>{let{top:n,left:o,height:a,width:i}=e;return{width:i,left:o,height:Zr(n,t.height,a),top:It(n)}},No=function(){return qt(arguments.length<=0?void 0:arguments[0],Gt(...arguments))},Wo=function(){return qt(arguments.length<=0?void 0:arguments[0],Bt(...arguments))},ko=function(){return Ft(arguments.length<=0?void 0:arguments[0],Gt(...arguments))},Ao=function(){return Ft(arguments.length<=0?void 0:arguments[0],Bt(...arguments))},Io={n:qt,ne:No,e:Gt,se:ko,s:Ft,sw:Ao,w:Bt,nw:Wo};function qo(t,e,r,n){const o=Io[t];return o?o(e,{...e,...r},n):r}function Go(t){let{top:e,left:r,width:n,height:o}=t;const a=`translate(${r}px,${e}px)`;return{transform:a,WebkitTransform:a,MozTransform:a,msTransform:a,OTransform:a,width:`${n}px`,height:`${o}px`,position:"absolute"}}function Bo(t){let{top:e,left:r,width:n,height:o}=t;return{top:`${e}px`,left:`${r}px`,width:`${n}px`,height:`${o}px`,position:"absolute"}}function Yt(t,e){return e==="horizontal"?en(t):e==="vertical"?Qr(t):t}function Qr(t){return t.slice(0).sort(function(e,r){return e.y>r.y||e.y===r.y&&e.x>r.x?1:e.y===r.y&&e.x===r.x?0:-1})}function en(t){return t.slice(0).sort(function(e,r){return e.x>r.x||e.x===r.x&&e.y>r.y?1:-1})}function Fo(t,e,r,n,o){t=t||[];const a=[];ke.default.Children.forEach(e,u=>{if((u==null?void 0:u.key)==null)return;const s=kt(t,String(u.key)),l=u.props["data-grid"];s&&l==null?a.push(Oe(s)):l?a.push(Oe({...l,i:u.key})):a.push(Oe({w:1,h:1,x:0,y:Wt(a),i:String(u.key)}))});const i=Xr(a,{cols:r});return o?i:Yr(i,n,r)}function Yo(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"Layout";const r=["x","y","w","h"];if(!Array.isArray(t))throw new Error(e+" must be an array!");for(let n=0,o=t.length;n<o;n++){const a=t[n];for(let i=0;i<r.length;i++){const u=r[i],s=a[u];if(typeof s!="number"||Number.isNaN(s))throw new Error(`ReactGridLayout: ${e}[${n}].${u} must be a number! Received: ${s} (${typeof s})`)}if(typeof a.i<"u"&&typeof a.i!="string")throw new Error(`ReactGridLayout: ${e}[${n}].i must be a string! Received: ${a.i} (${typeof a.i})`)}}function Uo(t){const{verticalCompact:e,compactType:r}=t||{};return e===!1?null:r}const Xo=()=>{};C.noop=Xo;var ue={};Object.defineProperty(ue,"__esModule",{value:!0});ue.calcGridColWidth=tt;ue.calcGridItemPosition=Vo;ue.calcGridItemWHPx=Dt;ue.calcWH=Zo;ue.calcXY=Ko;ue.clamp=De;function tt(t){const{margin:e,containerPadding:r,containerWidth:n,cols:o}=t;return(n-e[0]*(o-1)-r[0]*2)/o}function Dt(t,e,r){return Number.isFinite(t)?Math.round(e*t+Math.max(0,t-1)*r):t}function Vo(t,e,r,n,o,a){const{margin:i,containerPadding:u,rowHeight:s}=t,l=tt(t),c={};return a&&a.resizing?(c.width=Math.round(a.resizing.width),c.height=Math.round(a.resizing.height)):(c.width=Dt(n,l,i[0]),c.height=Dt(o,s,i[1])),a&&a.dragging?(c.top=Math.round(a.dragging.top),c.left=Math.round(a.dragging.left)):a&&a.resizing&&typeof a.resizing.top=="number"&&typeof a.resizing.left=="number"?(c.top=Math.round(a.resizing.top),c.left=Math.round(a.resizing.left)):(c.top=Math.round((s+i[1])*r+u[1]),c.left=Math.round((l+i[0])*e+u[0])),c}function Ko(t,e,r,n,o){const{margin:a,containerPadding:i,cols:u,rowHeight:s,maxRows:l}=t,c=tt(t);let d=Math.round((r-i[0])/(c+a[0])),f=Math.round((e-i[1])/(s+a[1]));return d=De(d,0,u-n),f=De(f,0,l-o),{x:d,y:f}}function Zo(t,e,r,n,o,a){const{margin:i,maxRows:u,cols:s,rowHeight:l}=t,c=tt(t);let d=Math.round((e+i[0])/(c+i[0])),f=Math.round((r+i[1])/(l+i[1])),h=De(d,0,s-n),v=De(f,0,u-o);return["sw","w","nw"].indexOf(a)!==-1&&(h=De(d,0,s)),["nw","n","ne"].indexOf(a)!==-1&&(v=De(f,0,u)),{w:h,h:v}}function De(t,e,r){return Math.max(Math.min(t,r),e)}var rt={},nt={exports:{}},tn={},W={},ce={};Object.defineProperty(ce,"__esModule",{value:!0});ce.dontSetMe=ra;ce.findInArray=Jo;ce.int=ta;ce.isFunction=Qo;ce.isNum=ea;function Jo(t,e){for(let r=0,n=t.length;r<n;r++)if(e.apply(e,[t[r],r,t]))return t[r]}function Qo(t){return typeof t=="function"||Object.prototype.toString.call(t)==="[object Function]"}function ea(t){return typeof t=="number"&&!isNaN(t)}function ta(t){return parseInt(t,10)}function ra(t,e,r){if(t[e])return new Error(`Invalid prop ${e} passed to ${r} - do not set this, set it on the child.`)}var _e={};Object.defineProperty(_e,"__esModule",{value:!0});_e.browserPrefixToKey=nn;_e.browserPrefixToStyle=na;_e.default=void 0;_e.getPrefix=rn;const pt=["Moz","Webkit","O","ms"];function rn(){var r,n;let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"transform";if(typeof window>"u")return"";const e=(n=(r=window.document)==null?void 0:r.documentElement)==null?void 0:n.style;if(!e||t in e)return"";for(let o=0;o<pt.length;o++)if(nn(t,pt[o])in e)return pt[o];return""}function nn(t,e){return e?`${e}${oa(t)}`:t}function na(t,e){return e?`-${e.toLowerCase()}-${t}`:t}function oa(t){let e="",r=!0;for(let n=0;n<t.length;n++)r?(e+=t[n].toUpperCase(),r=!1):t[n]==="-"?r=!0:e+=t[n];return e}_e.default=rn();Object.defineProperty(W,"__esModule",{value:!0});W.addClassName=sn;W.addEvent=ia;W.addUserSelectStyles=ya;W.createCSSTransform=pa;W.createSVGTransform=ha;W.getTouch=ga;W.getTouchIdentifier=ma;W.getTranslation=Ut;W.innerHeight=ca;W.innerWidth=da;W.matchesSelector=an;W.matchesSelectorAndParentsTo=aa;W.offsetXYFromParent=fa;W.outerHeight=la;W.outerWidth=ua;W.removeClassName=ln;W.removeEvent=sa;W.scheduleRemoveUserSelectStyles=va;var te=ce,br=on(_e);function on(t,e){if(typeof WeakMap=="function")var r=new WeakMap,n=new WeakMap;return(on=function(o,a){if(!a&&o&&o.__esModule)return o;var i,u,s={__proto__:null,default:o};if(o===null||typeof o!="object"&&typeof o!="function")return s;if(i=a?n:r){if(i.has(o))return i.get(o);i.set(o,s)}for(const l in o)l!=="default"&&{}.hasOwnProperty.call(o,l)&&((u=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(o,l))&&(u.get||u.set)?i(s,l,u):s[l]=o[l]);return s})(t,e)}let Fe="";function an(t,e){return Fe||(Fe=(0,te.findInArray)(["matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector"],function(r){return(0,te.isFunction)(t[r])})),(0,te.isFunction)(t[Fe])?t[Fe](e):!1}function aa(t,e,r){let n=t;do{if(an(n,e))return!0;if(n===r)return!1;n=n.parentNode}while(n);return!1}function ia(t,e,r,n){if(!t)return;const o={capture:!0,...n};t.addEventListener?t.addEventListener(e,r,o):t.attachEvent?t.attachEvent("on"+e,r):t["on"+e]=r}function sa(t,e,r,n){if(!t)return;const o={capture:!0,...n};t.removeEventListener?t.removeEventListener(e,r,o):t.detachEvent?t.detachEvent("on"+e,r):t["on"+e]=null}function la(t){let e=t.clientHeight;const r=t.ownerDocument.defaultView.getComputedStyle(t);return e+=(0,te.int)(r.borderTopWidth),e+=(0,te.int)(r.borderBottomWidth),e}function ua(t){let e=t.clientWidth;const r=t.ownerDocument.defaultView.getComputedStyle(t);return e+=(0,te.int)(r.borderLeftWidth),e+=(0,te.int)(r.borderRightWidth),e}function ca(t){let e=t.clientHeight;const r=t.ownerDocument.defaultView.getComputedStyle(t);return e-=(0,te.int)(r.paddingTop),e-=(0,te.int)(r.paddingBottom),e}function da(t){let e=t.clientWidth;const r=t.ownerDocument.defaultView.getComputedStyle(t);return e-=(0,te.int)(r.paddingLeft),e-=(0,te.int)(r.paddingRight),e}function fa(t,e,r){const o=e===e.ownerDocument.body?{left:0,top:0}:e.getBoundingClientRect(),a=(t.clientX+e.scrollLeft-o.left)/r,i=(t.clientY+e.scrollTop-o.top)/r;return{x:a,y:i}}function pa(t,e){const r=Ut(t,e,"px");return{[(0,br.browserPrefixToKey)("transform",br.default)]:r}}function ha(t,e){return Ut(t,e,"")}function Ut(t,e,r){let{x:n,y:o}=t,a=`translate(${n}${r},${o}${r})`;if(e){const i=`${typeof e.x=="string"?e.x:e.x+r}`,u=`${typeof e.y=="string"?e.y:e.y+r}`;a=`translate(${i}, ${u})`+a}return a}function ga(t,e){return t.targetTouches&&(0,te.findInArray)(t.targetTouches,r=>e===r.identifier)||t.changedTouches&&(0,te.findInArray)(t.changedTouches,r=>e===r.identifier)}function ma(t){if(t.targetTouches&&t.targetTouches[0])return t.targetTouches[0].identifier;if(t.changedTouches&&t.changedTouches[0])return t.changedTouches[0].identifier}function ya(t){if(!t)return;let e=t.getElementById("react-draggable-style-el");e||(e=t.createElement("style"),e.type="text/css",e.id="react-draggable-style-el",e.innerHTML=`.react-draggable-transparent-selection *::-moz-selection {all: inherit;}
2
+ `,e.innerHTML+=`.react-draggable-transparent-selection *::selection {all: inherit;}
3
+ `,t.getElementsByTagName("head")[0].appendChild(e)),t.body&&sn(t.body,"react-draggable-transparent-selection")}function va(t){window.requestAnimationFrame?window.requestAnimationFrame(()=>{wr(t)}):wr(t)}function wr(t){if(t)try{if(t.body&&ln(t.body,"react-draggable-transparent-selection"),t.selection)t.selection.empty();else{const e=(t.defaultView||window).getSelection();e&&e.type!=="Caret"&&e.removeAllRanges()}}catch{}}function sn(t,e){t.classList?t.classList.add(e):t.className.match(new RegExp(`(?:^|\\s)${e}(?!\\S)`))||(t.className+=` ${e}`)}function ln(t,e){t.classList?t.classList.remove(e):t.className=t.className.replace(new RegExp(`(?:^|\\s)${e}(?!\\S)`,"g"),"")}var de={};Object.defineProperty(de,"__esModule",{value:!0});de.canDragX=xa;de.canDragY=Sa;de.createCoreData=Da;de.createDraggableData=Oa;de.getBoundPosition=ba;de.getControlPosition=Ra;de.snapToGrid=wa;var ee=ce,Me=W;function ba(t,e,r){if(!t.props.bounds)return[e,r];let{bounds:n}=t.props;n=typeof n=="string"?n:_a(n);const o=Xt(t);if(typeof n=="string"){const{ownerDocument:a}=o,i=a.defaultView;let u;if(n==="parent"?u=o.parentNode:u=o.getRootNode().querySelector(n),!(u instanceof i.HTMLElement))throw new Error('Bounds selector "'+n+'" could not find an element.');const s=u,l=i.getComputedStyle(o),c=i.getComputedStyle(s);n={left:-o.offsetLeft+(0,ee.int)(c.paddingLeft)+(0,ee.int)(l.marginLeft),top:-o.offsetTop+(0,ee.int)(c.paddingTop)+(0,ee.int)(l.marginTop),right:(0,Me.innerWidth)(s)-(0,Me.outerWidth)(o)-o.offsetLeft+(0,ee.int)(c.paddingRight)-(0,ee.int)(l.marginRight),bottom:(0,Me.innerHeight)(s)-(0,Me.outerHeight)(o)-o.offsetTop+(0,ee.int)(c.paddingBottom)-(0,ee.int)(l.marginBottom)}}return(0,ee.isNum)(n.right)&&(e=Math.min(e,n.right)),(0,ee.isNum)(n.bottom)&&(r=Math.min(r,n.bottom)),(0,ee.isNum)(n.left)&&(e=Math.max(e,n.left)),(0,ee.isNum)(n.top)&&(r=Math.max(r,n.top)),[e,r]}function wa(t,e,r){const n=Math.round(e/t[0])*t[0],o=Math.round(r/t[1])*t[1];return[n,o]}function xa(t){return t.props.axis==="both"||t.props.axis==="x"}function Sa(t){return t.props.axis==="both"||t.props.axis==="y"}function Ra(t,e,r){const n=typeof e=="number"?(0,Me.getTouch)(t,e):null;if(typeof e=="number"&&!n)return null;const o=Xt(r),a=r.props.offsetParent||o.offsetParent||o.ownerDocument.body;return(0,Me.offsetXYFromParent)(n||t,a,r.props.scale)}function Da(t,e,r){const n=!(0,ee.isNum)(t.lastX),o=Xt(t);return n?{node:o,deltaX:0,deltaY:0,lastX:e,lastY:r,x:e,y:r}:{node:o,deltaX:e-t.lastX,deltaY:r-t.lastY,lastX:t.lastX,lastY:t.lastY,x:e,y:r}}function Oa(t,e){const r=t.props.scale;return{node:e.node,x:t.state.x+e.deltaX/r,y:t.state.y+e.deltaY/r,deltaX:e.deltaX/r,deltaY:e.deltaY/r,lastX:t.state.x,lastY:t.state.y}}function _a(t){return{left:t.left,top:t.top,right:t.right,bottom:t.bottom}}function Xt(t){const e=t.findDOMNode();if(!e)throw new Error("<DraggableCore>: Unmounted during event!");return e}var ot={},at={};Object.defineProperty(at,"__esModule",{value:!0});at.default=Pa;function Pa(){}Object.defineProperty(ot,"__esModule",{value:!0});ot.default=void 0;var ht=un(M),Z=Vt(ye),Ea=Vt($t),U=W,ge=de,gt=ce,Ne=Vt(at);function Vt(t){return t&&t.__esModule?t:{default:t}}function un(t,e){if(typeof WeakMap=="function")var r=new WeakMap,n=new WeakMap;return(un=function(o,a){if(!a&&o&&o.__esModule)return o;var i,u,s={__proto__:null,default:o};if(o===null||typeof o!="object"&&typeof o!="function")return s;if(i=a?n:r){if(i.has(o))return i.get(o);i.set(o,s)}for(const l in o)l!=="default"&&{}.hasOwnProperty.call(o,l)&&((u=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(o,l))&&(u.get||u.set)?i(s,l,u):s[l]=o[l]);return s})(t,e)}function J(t,e,r){return(e=Ca(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function Ca(t){var e=za(t,"string");return typeof e=="symbol"?e:e+""}function za(t,e){if(typeof t!="object"||!t)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var n=r.call(t,e||"default");if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}const ne={touch:{start:"touchstart",move:"touchmove",stop:"touchend"},mouse:{start:"mousedown",move:"mousemove",stop:"mouseup"}};let me=ne.mouse,it=class extends ht.Component{constructor(){super(...arguments),J(this,"dragging",!1),J(this,"lastX",NaN),J(this,"lastY",NaN),J(this,"touchIdentifier",null),J(this,"mounted",!1),J(this,"handleDragStart",e=>{if(this.props.onMouseDown(e),!this.props.allowAnyClick&&typeof e.button=="number"&&e.button!==0)return!1;const r=this.findDOMNode();if(!r||!r.ownerDocument||!r.ownerDocument.body)throw new Error("<DraggableCore> not mounted on DragStart!");const{ownerDocument:n}=r;if(this.props.disabled||!(e.target instanceof n.defaultView.Node)||this.props.handle&&!(0,U.matchesSelectorAndParentsTo)(e.target,this.props.handle,r)||this.props.cancel&&(0,U.matchesSelectorAndParentsTo)(e.target,this.props.cancel,r))return;e.type==="touchstart"&&!this.props.allowMobileScroll&&e.preventDefault();const o=(0,U.getTouchIdentifier)(e);this.touchIdentifier=o;const a=(0,ge.getControlPosition)(e,o,this);if(a==null)return;const{x:i,y:u}=a,s=(0,ge.createCoreData)(this,i,u);(0,Ne.default)("DraggableCore: handleDragStart: %j",s),(0,Ne.default)("calling",this.props.onStart),!(this.props.onStart(e,s)===!1||this.mounted===!1)&&(this.props.enableUserSelectHack&&(0,U.addUserSelectStyles)(n),this.dragging=!0,this.lastX=i,this.lastY=u,(0,U.addEvent)(n,me.move,this.handleDrag),(0,U.addEvent)(n,me.stop,this.handleDragStop))}),J(this,"handleDrag",e=>{const r=(0,ge.getControlPosition)(e,this.touchIdentifier,this);if(r==null)return;let{x:n,y:o}=r;if(Array.isArray(this.props.grid)){let u=n-this.lastX,s=o-this.lastY;if([u,s]=(0,ge.snapToGrid)(this.props.grid,u,s),!u&&!s)return;n=this.lastX+u,o=this.lastY+s}const a=(0,ge.createCoreData)(this,n,o);if((0,Ne.default)("DraggableCore: handleDrag: %j",a),this.props.onDrag(e,a)===!1||this.mounted===!1){try{this.handleDragStop(new MouseEvent("mouseup"))}catch{const s=document.createEvent("MouseEvents");s.initMouseEvent("mouseup",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),this.handleDragStop(s)}return}this.lastX=n,this.lastY=o}),J(this,"handleDragStop",e=>{if(!this.dragging)return;const r=(0,ge.getControlPosition)(e,this.touchIdentifier,this);if(r==null)return;let{x:n,y:o}=r;if(Array.isArray(this.props.grid)){let s=n-this.lastX||0,l=o-this.lastY||0;[s,l]=(0,ge.snapToGrid)(this.props.grid,s,l),n=this.lastX+s,o=this.lastY+l}const a=(0,ge.createCoreData)(this,n,o);if(this.props.onStop(e,a)===!1||this.mounted===!1)return!1;const u=this.findDOMNode();u&&this.props.enableUserSelectHack&&(0,U.scheduleRemoveUserSelectStyles)(u.ownerDocument),(0,Ne.default)("DraggableCore: handleDragStop: %j",a),this.dragging=!1,this.lastX=NaN,this.lastY=NaN,u&&((0,Ne.default)("DraggableCore: Removing handlers"),(0,U.removeEvent)(u.ownerDocument,me.move,this.handleDrag),(0,U.removeEvent)(u.ownerDocument,me.stop,this.handleDragStop))}),J(this,"onMouseDown",e=>(me=ne.mouse,this.handleDragStart(e))),J(this,"onMouseUp",e=>(me=ne.mouse,this.handleDragStop(e))),J(this,"onTouchStart",e=>(me=ne.touch,this.handleDragStart(e))),J(this,"onTouchEnd",e=>(me=ne.touch,this.handleDragStop(e)))}componentDidMount(){this.mounted=!0;const e=this.findDOMNode();e&&(0,U.addEvent)(e,ne.touch.start,this.onTouchStart,{passive:!1})}componentWillUnmount(){this.mounted=!1;const e=this.findDOMNode();if(e){const{ownerDocument:r}=e;(0,U.removeEvent)(r,ne.mouse.move,this.handleDrag),(0,U.removeEvent)(r,ne.touch.move,this.handleDrag),(0,U.removeEvent)(r,ne.mouse.stop,this.handleDragStop),(0,U.removeEvent)(r,ne.touch.stop,this.handleDragStop),(0,U.removeEvent)(e,ne.touch.start,this.onTouchStart,{passive:!1}),this.props.enableUserSelectHack&&(0,U.scheduleRemoveUserSelectStyles)(r)}}findDOMNode(){var e,r,n;return(e=this.props)!=null&&e.nodeRef?(n=(r=this.props)==null?void 0:r.nodeRef)==null?void 0:n.current:Ea.default.findDOMNode(this)}render(){return ht.cloneElement(ht.Children.only(this.props.children),{onMouseDown:this.onMouseDown,onMouseUp:this.onMouseUp,onTouchEnd:this.onTouchEnd})}};ot.default=it;J(it,"displayName","DraggableCore");J(it,"propTypes",{allowAnyClick:Z.default.bool,allowMobileScroll:Z.default.bool,children:Z.default.node.isRequired,disabled:Z.default.bool,enableUserSelectHack:Z.default.bool,offsetParent:function(t,e){if(t[e]&&t[e].nodeType!==1)throw new Error("Draggable's offsetParent must be a DOM Node.")},grid:Z.default.arrayOf(Z.default.number),handle:Z.default.string,cancel:Z.default.string,nodeRef:Z.default.object,onStart:Z.default.func,onDrag:Z.default.func,onStop:Z.default.func,onMouseDown:Z.default.func,scale:Z.default.number,className:gt.dontSetMe,style:gt.dontSetMe,transform:gt.dontSetMe});J(it,"defaultProps",{allowAnyClick:!1,allowMobileScroll:!1,disabled:!1,enableUserSelectHack:!0,onStart:function(){},onDrag:function(){},onStop:function(){},onMouseDown:function(){},scale:1});(function(t){Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"DraggableCore",{enumerable:!0,get:function(){return s.default}}),t.default=void 0;var e=d(M),r=c(ye),n=c($t),o=Qe,a=W,i=de,u=ce,s=c(ot),l=c(at);function c(g){return g&&g.__esModule?g:{default:g}}function d(g,b){if(typeof WeakMap=="function")var y=new WeakMap,x=new WeakMap;return(d=function(m,P){if(!P&&m&&m.__esModule)return m;var H,$,Y={__proto__:null,default:m};if(m===null||typeof m!="object"&&typeof m!="function")return Y;if(H=P?x:y){if(H.has(m))return H.get(m);H.set(m,Y)}for(const K in m)K!=="default"&&{}.hasOwnProperty.call(m,K)&&(($=(H=Object.defineProperty)&&Object.getOwnPropertyDescriptor(m,K))&&($.get||$.set)?H(Y,K,$):Y[K]=m[K]);return Y})(g,b)}function f(){return f=Object.assign?Object.assign.bind():function(g){for(var b=1;b<arguments.length;b++){var y=arguments[b];for(var x in y)({}).hasOwnProperty.call(y,x)&&(g[x]=y[x])}return g},f.apply(null,arguments)}function h(g,b,y){return(b=v(b))in g?Object.defineProperty(g,b,{value:y,enumerable:!0,configurable:!0,writable:!0}):g[b]=y,g}function v(g){var b=R(g,"string");return typeof b=="symbol"?b:b+""}function R(g,b){if(typeof g!="object"||!g)return g;var y=g[Symbol.toPrimitive];if(y!==void 0){var x=y.call(g,b||"default");if(typeof x!="object")return x;throw new TypeError("@@toPrimitive must return a primitive value.")}return(b==="string"?String:Number)(g)}class S extends e.Component{static getDerivedStateFromProps(b,y){let{position:x}=b,{prevPropsPosition:m}=y;return x&&(!m||x.x!==m.x||x.y!==m.y)?((0,l.default)("Draggable: getDerivedStateFromProps %j",{position:x,prevPropsPosition:m}),{x:x.x,y:x.y,prevPropsPosition:{...x}}):null}constructor(b){super(b),h(this,"onDragStart",(y,x)=>{if((0,l.default)("Draggable: onDragStart: %j",x),this.props.onStart(y,(0,i.createDraggableData)(this,x))===!1)return!1;this.setState({dragging:!0,dragged:!0})}),h(this,"onDrag",(y,x)=>{if(!this.state.dragging)return!1;(0,l.default)("Draggable: onDrag: %j",x);const m=(0,i.createDraggableData)(this,x),P={x:m.x,y:m.y,slackX:0,slackY:0};if(this.props.bounds){const{x:$,y:Y}=P;P.x+=this.state.slackX,P.y+=this.state.slackY;const[K,ve]=(0,i.getBoundPosition)(this,P.x,P.y);P.x=K,P.y=ve,P.slackX=this.state.slackX+($-P.x),P.slackY=this.state.slackY+(Y-P.y),m.x=P.x,m.y=P.y,m.deltaX=P.x-this.state.x,m.deltaY=P.y-this.state.y}if(this.props.onDrag(y,m)===!1)return!1;this.setState(P)}),h(this,"onDragStop",(y,x)=>{if(!this.state.dragging||this.props.onStop(y,(0,i.createDraggableData)(this,x))===!1)return!1;(0,l.default)("Draggable: onDragStop: %j",x);const P={dragging:!1,slackX:0,slackY:0};if(!!this.props.position){const{x:$,y:Y}=this.props.position;P.x=$,P.y=Y}this.setState(P)}),this.state={dragging:!1,dragged:!1,x:b.position?b.position.x:b.defaultPosition.x,y:b.position?b.position.y:b.defaultPosition.y,prevPropsPosition:{...b.position},slackX:0,slackY:0,isElementSVG:!1},b.position&&!(b.onDrag||b.onStop)&&console.warn("A `position` was applied to this <Draggable>, without drag handlers. This will make this component effectively undraggable. Please attach `onDrag` or `onStop` handlers so you can adjust the `position` of this element.")}componentDidMount(){typeof window.SVGElement<"u"&&this.findDOMNode()instanceof window.SVGElement&&this.setState({isElementSVG:!0})}componentWillUnmount(){this.state.dragging&&this.setState({dragging:!1})}findDOMNode(){var b,y;return((y=(b=this.props)==null?void 0:b.nodeRef)==null?void 0:y.current)??n.default.findDOMNode(this)}render(){const{axis:b,bounds:y,children:x,defaultPosition:m,defaultClassName:P,defaultClassNameDragging:H,defaultClassNameDragged:$,position:Y,positionOffset:K,scale:ve,...He}=this.props;let B={},$e=null;const be=!!!Y||this.state.dragging,we=Y||m,Be={x:(0,i.canDragX)(this)&&be?this.state.x:we.x,y:(0,i.canDragY)(this)&&be?this.state.y:we.y};this.state.isElementSVG?$e=(0,a.createSVGTransform)(Be,K):B=(0,a.createCSSTransform)(Be,K);const ft=(0,o.clsx)(x.props.className||"",P,{[H]:this.state.dragging,[$]:this.state.dragged});return e.createElement(s.default,f({},He,{onStart:this.onDragStart,onDrag:this.onDrag,onStop:this.onDragStop}),e.cloneElement(e.Children.only(x),{className:ft,style:{...x.props.style,...B},transform:$e}))}}t.default=S,h(S,"displayName","Draggable"),h(S,"propTypes",{...s.default.propTypes,axis:r.default.oneOf(["both","x","y","none"]),bounds:r.default.oneOfType([r.default.shape({left:r.default.number,right:r.default.number,top:r.default.number,bottom:r.default.number}),r.default.string,r.default.oneOf([!1])]),defaultClassName:r.default.string,defaultClassNameDragging:r.default.string,defaultClassNameDragged:r.default.string,defaultPosition:r.default.shape({x:r.default.number,y:r.default.number}),positionOffset:r.default.shape({x:r.default.oneOfType([r.default.number,r.default.string]),y:r.default.oneOfType([r.default.number,r.default.string])}),position:r.default.shape({x:r.default.number,y:r.default.number}),className:u.dontSetMe,style:u.dontSetMe,transform:u.dontSetMe}),h(S,"defaultProps",{...s.default.defaultProps,axis:"both",bounds:!1,defaultClassName:"react-draggable",defaultClassNameDragging:"react-draggable-dragging",defaultClassNameDragged:"react-draggable-dragged",defaultPosition:{x:0,y:0},scale:1})})(tn);const{default:cn,DraggableCore:Ma}=tn;nt.exports=cn;nt.exports.default=cn;nt.exports.DraggableCore=Ma;var dn=nt.exports,st={exports:{}},qe={},Kt={};Kt.__esModule=!0;Kt.cloneElement=Na;var ja=Ta(M);function Ta(t){return t&&t.__esModule?t:{default:t}}function xr(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(o){return Object.getOwnPropertyDescriptor(t,o).enumerable})),r.push.apply(r,n)}return r}function Sr(t){for(var e=1;e<arguments.length;e++){var r=arguments[e]!=null?arguments[e]:{};e%2?xr(Object(r),!0).forEach(function(n){La(t,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):xr(Object(r)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(r,n))})}return t}function La(t,e,r){return e=Ha(e),e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function Ha(t){var e=$a(t,"string");return typeof e=="symbol"?e:String(e)}function $a(t,e){if(typeof t!="object"||t===null)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var n=r.call(t,e||"default");if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}function Na(t,e){return e.style&&t.props.style&&(e.style=Sr(Sr({},t.props.style),e.style)),e.className&&t.props.className&&(e.className=t.props.className+" "+e.className),ja.default.cloneElement(t,e)}var Ge={};Ge.__esModule=!0;Ge.resizableProps=void 0;var _=Wa(ye);function Wa(t){return t&&t.__esModule?t:{default:t}}var ka={axis:_.default.oneOf(["both","x","y","none"]),className:_.default.string,children:_.default.element.isRequired,draggableOpts:_.default.shape({allowAnyClick:_.default.bool,cancel:_.default.string,children:_.default.node,disabled:_.default.bool,enableUserSelectHack:_.default.bool,offsetParent:_.default.node,grid:_.default.arrayOf(_.default.number),handle:_.default.string,nodeRef:_.default.object,onStart:_.default.func,onDrag:_.default.func,onStop:_.default.func,onMouseDown:_.default.func,scale:_.default.number}),height:function(){for(var e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];var o=r[0];if(o.axis==="both"||o.axis==="y"){var a;return(a=_.default.number).isRequired.apply(a,r)}return _.default.number.apply(_.default,r)},handle:_.default.oneOfType([_.default.node,_.default.func]),handleSize:_.default.arrayOf(_.default.number),lockAspectRatio:_.default.bool,maxConstraints:_.default.arrayOf(_.default.number),minConstraints:_.default.arrayOf(_.default.number),onResizeStop:_.default.func,onResizeStart:_.default.func,onResize:_.default.func,resizeHandles:_.default.arrayOf(_.default.oneOf(["s","w","e","n","sw","nw","se","ne"])),transformScale:_.default.number,width:function(){for(var e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];var o=r[0];if(o.axis==="both"||o.axis==="x"){var a;return(a=_.default.number).isRequired.apply(a,r)}return _.default.number.apply(_.default,r)}};Ge.resizableProps=ka;qe.__esModule=!0;qe.default=void 0;var We=Ba(M),Aa=dn,Ia=Kt,qa=Ge,Ga=["children","className","draggableOpts","width","height","handle","handleSize","lockAspectRatio","axis","minConstraints","maxConstraints","onResize","onResizeStop","onResizeStart","resizeHandles","transformScale"];function fn(t){if(typeof WeakMap!="function")return null;var e=new WeakMap,r=new WeakMap;return(fn=function(o){return o?r:e})(t)}function Ba(t,e){if(t&&t.__esModule)return t;if(t===null||typeof t!="object"&&typeof t!="function")return{default:t};var r=fn(e);if(r&&r.has(t))return r.get(t);var n={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in t)if(a!=="default"&&Object.prototype.hasOwnProperty.call(t,a)){var i=o?Object.getOwnPropertyDescriptor(t,a):null;i&&(i.get||i.set)?Object.defineProperty(n,a,i):n[a]=t[a]}return n.default=t,r&&r.set(t,n),n}function Ot(){return Ot=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(t[n]=r[n])}return t},Ot.apply(this,arguments)}function Fa(t,e){if(t==null)return{};var r={},n=Object.keys(t),o,a;for(a=0;a<n.length;a++)o=n[a],!(e.indexOf(o)>=0)&&(r[o]=t[o]);return r}function Rr(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(o){return Object.getOwnPropertyDescriptor(t,o).enumerable})),r.push.apply(r,n)}return r}function mt(t){for(var e=1;e<arguments.length;e++){var r=arguments[e]!=null?arguments[e]:{};e%2?Rr(Object(r),!0).forEach(function(n){Ya(t,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):Rr(Object(r)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(r,n))})}return t}function Ya(t,e,r){return e=Ua(e),e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function Ua(t){var e=Xa(t,"string");return typeof e=="symbol"?e:String(e)}function Xa(t,e){if(typeof t!="object"||t===null)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var n=r.call(t,e||"default");if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}function Va(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,_t(t,e)}function _t(t,e){return _t=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(n,o){return n.__proto__=o,n},_t(t,e)}var Zt=function(t){Va(e,t);function e(){for(var n,o=arguments.length,a=new Array(o),i=0;i<o;i++)a[i]=arguments[i];return n=t.call.apply(t,[this].concat(a))||this,n.handleRefs={},n.lastHandleRect=null,n.slack=null,n}var r=e.prototype;return r.componentWillUnmount=function(){this.resetData()},r.resetData=function(){this.lastHandleRect=this.slack=null},r.runConstraints=function(o,a){var i=this.props,u=i.minConstraints,s=i.maxConstraints,l=i.lockAspectRatio;if(!u&&!s&&!l)return[o,a];if(l){var c=this.props.width/this.props.height,d=o-this.props.width,f=a-this.props.height;Math.abs(d)>Math.abs(f*c)?a=o/c:o=a*c}var h=o,v=a,R=this.slack||[0,0],S=R[0],g=R[1];return o+=S,a+=g,u&&(o=Math.max(u[0],o),a=Math.max(u[1],a)),s&&(o=Math.min(s[0],o),a=Math.min(s[1],a)),this.slack=[S+(h-o),g+(v-a)],[o,a]},r.resizeHandler=function(o,a){var i=this;return function(u,s){var l=s.node,c=s.deltaX,d=s.deltaY;o==="onResizeStart"&&i.resetData();var f=(i.props.axis==="both"||i.props.axis==="x")&&a!=="n"&&a!=="s",h=(i.props.axis==="both"||i.props.axis==="y")&&a!=="e"&&a!=="w";if(!(!f&&!h)){var v=a[0],R=a[a.length-1],S=l.getBoundingClientRect();if(i.lastHandleRect!=null){if(R==="w"){var g=S.left-i.lastHandleRect.left;c+=g}if(v==="n"){var b=S.top-i.lastHandleRect.top;d+=b}}i.lastHandleRect=S,R==="w"&&(c=-c),v==="n"&&(d=-d);var y=i.props.width+(f?c/i.props.transformScale:0),x=i.props.height+(h?d/i.props.transformScale:0),m=i.runConstraints(y,x);y=m[0],x=m[1];var P=y!==i.props.width||x!==i.props.height,H=typeof i.props[o]=="function"?i.props[o]:null,$=o==="onResize"&&!P;H&&!$&&(u.persist==null||u.persist(),H(u,{node:l,size:{width:y,height:x},handle:a})),o==="onResizeStop"&&i.resetData()}}},r.renderResizeHandle=function(o,a){var i=this.props.handle;if(!i)return We.createElement("span",{className:"react-resizable-handle react-resizable-handle-"+o,ref:a});if(typeof i=="function")return i(o,a);var u=typeof i.type=="string",s=mt({ref:a},u?{}:{handleAxis:o});return We.cloneElement(i,s)},r.render=function(){var o=this,a=this.props,i=a.children,u=a.className,s=a.draggableOpts;a.width,a.height,a.handle,a.handleSize,a.lockAspectRatio,a.axis,a.minConstraints,a.maxConstraints,a.onResize,a.onResizeStop,a.onResizeStart;var l=a.resizeHandles;a.transformScale;var c=Fa(a,Ga);return(0,Ia.cloneElement)(i,mt(mt({},c),{},{className:(u?u+" ":"")+"react-resizable",children:[].concat(i.props.children,l.map(function(d){var f,h=(f=o.handleRefs[d])!=null?f:o.handleRefs[d]=We.createRef();return We.createElement(Aa.DraggableCore,Ot({},s,{nodeRef:h,key:"resizableHandle-"+d,onStop:o.resizeHandler("onResizeStop",d),onStart:o.resizeHandler("onResizeStart",d),onDrag:o.resizeHandler("onResize",d)}),o.renderResizeHandle(d,h))}))}))},e}(We.Component);qe.default=Zt;Zt.propTypes=qa.resizableProps;Zt.defaultProps={axis:"both",handleSize:[20,20],lockAspectRatio:!1,minConstraints:[20,20],maxConstraints:[1/0,1/0],resizeHandles:["se"],transformScale:1};var lt={};lt.__esModule=!0;lt.default=void 0;var yt=ei(M),Ka=pn(ye),Za=pn(qe),Ja=Ge,Qa=["handle","handleSize","onResize","onResizeStart","onResizeStop","draggableOpts","minConstraints","maxConstraints","lockAspectRatio","axis","width","height","resizeHandles","style","transformScale"];function pn(t){return t&&t.__esModule?t:{default:t}}function hn(t){if(typeof WeakMap!="function")return null;var e=new WeakMap,r=new WeakMap;return(hn=function(o){return o?r:e})(t)}function ei(t,e){if(t&&t.__esModule)return t;if(t===null||typeof t!="object"&&typeof t!="function")return{default:t};var r=hn(e);if(r&&r.has(t))return r.get(t);var n={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in t)if(a!=="default"&&Object.prototype.hasOwnProperty.call(t,a)){var i=o?Object.getOwnPropertyDescriptor(t,a):null;i&&(i.get||i.set)?Object.defineProperty(n,a,i):n[a]=t[a]}return n.default=t,r&&r.set(t,n),n}function Pt(){return Pt=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(t[n]=r[n])}return t},Pt.apply(this,arguments)}function Dr(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(o){return Object.getOwnPropertyDescriptor(t,o).enumerable})),r.push.apply(r,n)}return r}function Ve(t){for(var e=1;e<arguments.length;e++){var r=arguments[e]!=null?arguments[e]:{};e%2?Dr(Object(r),!0).forEach(function(n){ti(t,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):Dr(Object(r)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(r,n))})}return t}function ti(t,e,r){return e=ri(e),e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function ri(t){var e=ni(t,"string");return typeof e=="symbol"?e:String(e)}function ni(t,e){if(typeof t!="object"||t===null)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var n=r.call(t,e||"default");if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}function oi(t,e){if(t==null)return{};var r={},n=Object.keys(t),o,a;for(a=0;a<n.length;a++)o=n[a],!(e.indexOf(o)>=0)&&(r[o]=t[o]);return r}function ai(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,Et(t,e)}function Et(t,e){return Et=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(n,o){return n.__proto__=o,n},Et(t,e)}var gn=function(t){ai(e,t);function e(){for(var n,o=arguments.length,a=new Array(o),i=0;i<o;i++)a[i]=arguments[i];return n=t.call.apply(t,[this].concat(a))||this,n.state={width:n.props.width,height:n.props.height,propsWidth:n.props.width,propsHeight:n.props.height},n.onResize=function(u,s){var l=s.size;n.props.onResize?(u.persist==null||u.persist(),n.setState(l,function(){return n.props.onResize&&n.props.onResize(u,s)})):n.setState(l)},n}e.getDerivedStateFromProps=function(o,a){return a.propsWidth!==o.width||a.propsHeight!==o.height?{width:o.width,height:o.height,propsWidth:o.width,propsHeight:o.height}:null};var r=e.prototype;return r.render=function(){var o=this.props,a=o.handle,i=o.handleSize;o.onResize;var u=o.onResizeStart,s=o.onResizeStop,l=o.draggableOpts,c=o.minConstraints,d=o.maxConstraints,f=o.lockAspectRatio,h=o.axis;o.width,o.height;var v=o.resizeHandles,R=o.style,S=o.transformScale,g=oi(o,Qa);return yt.createElement(Za.default,{axis:h,draggableOpts:l,handle:a,handleSize:i,height:this.state.height,lockAspectRatio:f,maxConstraints:d,minConstraints:c,onResizeStart:u,onResize:this.onResize,onResizeStop:s,resizeHandles:v,transformScale:S,width:this.state.width},yt.createElement("div",Pt({},g,{style:Ve(Ve({},R),{},{width:this.state.width+"px",height:this.state.height+"px"})})))},e}(yt.Component);lt.default=gn;gn.propTypes=Ve(Ve({},Ja.resizableProps),{},{children:Ka.default.element});st.exports=function(){throw new Error("Don't instantiate Resizable directly! Use require('react-resizable').Resizable")};st.exports.Resizable=qe.default;st.exports.ResizableBox=lt.default;var ii=st.exports,fe={};Object.defineProperty(fe,"__esModule",{value:!0});fe.resizeHandleType=fe.resizeHandleAxesType=fe.default=void 0;var E=mn(ye),si=mn(M);function mn(t){return t&&t.__esModule?t:{default:t}}const li=fe.resizeHandleAxesType=E.default.arrayOf(E.default.oneOf(["s","w","e","n","sw","nw","se","ne"])),ui=fe.resizeHandleType=E.default.oneOfType([E.default.node,E.default.func]);fe.default={className:E.default.string,style:E.default.object,width:E.default.number,autoSize:E.default.bool,cols:E.default.number,draggableCancel:E.default.string,draggableHandle:E.default.string,verticalCompact:function(t){t.verticalCompact},compactType:E.default.oneOf(["vertical","horizontal"]),layout:function(t){var e=t.layout;e!==void 0&&C.validateLayout(e,"layout")},margin:E.default.arrayOf(E.default.number),containerPadding:E.default.arrayOf(E.default.number),rowHeight:E.default.number,maxRows:E.default.number,isBounded:E.default.bool,isDraggable:E.default.bool,isResizable:E.default.bool,allowOverlap:E.default.bool,preventCollision:E.default.bool,useCSSTransforms:E.default.bool,transformScale:E.default.number,isDroppable:E.default.bool,resizeHandles:li,resizeHandle:ui,onLayoutChange:E.default.func,onDragStart:E.default.func,onDrag:E.default.func,onDragStop:E.default.func,onResizeStart:E.default.func,onResize:E.default.func,onResizeStop:E.default.func,onDrop:E.default.func,droppingItem:E.default.shape({i:E.default.string.isRequired,w:E.default.number.isRequired,h:E.default.number.isRequired}),children:function(t,e){const r=t[e],n={};si.default.Children.forEach(r,function(o){if((o==null?void 0:o.key)!=null){if(n[o.key])throw new Error('Duplicate child key "'+o.key+'" found! This will cause problems in ReactGridLayout.');n[o.key]=!0}})},innerRef:E.default.any};Object.defineProperty(rt,"__esModule",{value:!0});rt.default=void 0;var Ee=Jt(M),Or=$t,z=Jt(ye),ci=dn,di=ii,Ce=C,F=ue,_r=fe,fi=Jt(Qe);function Jt(t){return t&&t.__esModule?t:{default:t}}function le(t,e,r){return(e=pi(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function pi(t){var e=hi(t,"string");return typeof e=="symbol"?e:e+""}function hi(t,e){if(typeof t!="object"||!t)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var n=r.call(t,e||"default");if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}class Qt extends Ee.default.Component{constructor(){super(...arguments),le(this,"state",{resizing:null,dragging:null,className:""}),le(this,"elementRef",Ee.default.createRef()),le(this,"onDragStart",(e,r)=>{let{node:n}=r;const{onDragStart:o,transformScale:a}=this.props;if(!o)return;const i={top:0,left:0},{offsetParent:u}=n;if(!u)return;const s=u.getBoundingClientRect(),l=n.getBoundingClientRect(),c=l.left/a,d=s.left/a,f=l.top/a,h=s.top/a;i.left=c-d+u.scrollLeft,i.top=f-h+u.scrollTop,this.setState({dragging:i});const{x:v,y:R}=(0,F.calcXY)(this.getPositionParams(),i.top,i.left,this.props.w,this.props.h);return o.call(this,this.props.i,v,R,{e,node:n,newPosition:i})}),le(this,"onDrag",(e,r,n)=>{let{node:o,deltaX:a,deltaY:i}=r;const{onDrag:u}=this.props;if(!u)return;if(!this.state.dragging)throw new Error("onDrag called before onDragStart.");let s=this.state.dragging.top+i,l=this.state.dragging.left+a;const{isBounded:c,i:d,w:f,h,containerWidth:v}=this.props,R=this.getPositionParams();if(c){const{offsetParent:y}=o;if(y){const{margin:x,rowHeight:m}=this.props,P=y.clientHeight-(0,F.calcGridItemWHPx)(h,m,x[1]);s=(0,F.clamp)(s,0,P);const H=(0,F.calcGridColWidth)(R),$=v-(0,F.calcGridItemWHPx)(f,H,x[0]);l=(0,F.clamp)(l,0,$)}}const S={top:s,left:l};n?this.setState({dragging:S}):(0,Or.flushSync)(()=>{this.setState({dragging:S})});const{x:g,y:b}=(0,F.calcXY)(R,s,l,f,h);return u.call(this,d,g,b,{e,node:o,newPosition:S})}),le(this,"onDragStop",(e,r)=>{let{node:n}=r;const{onDragStop:o}=this.props;if(!o)return;if(!this.state.dragging)throw new Error("onDragEnd called before onDragStart.");const{w:a,h:i,i:u}=this.props,{left:s,top:l}=this.state.dragging,c={top:l,left:s};this.setState({dragging:null});const{x:d,y:f}=(0,F.calcXY)(this.getPositionParams(),l,s,a,i);return o.call(this,u,d,f,{e,node:n,newPosition:c})}),le(this,"onResizeStop",(e,r,n)=>this.onResizeHandler(e,r,n,"onResizeStop")),le(this,"onResizeStart",(e,r,n)=>this.onResizeHandler(e,r,n,"onResizeStart")),le(this,"onResize",(e,r,n)=>this.onResizeHandler(e,r,n,"onResize"))}shouldComponentUpdate(e,r){if(this.props.children!==e.children||this.props.droppingPosition!==e.droppingPosition)return!0;const n=(0,F.calcGridItemPosition)(this.getPositionParams(this.props),this.props.x,this.props.y,this.props.w,this.props.h,this.state),o=(0,F.calcGridItemPosition)(this.getPositionParams(e),e.x,e.y,e.w,e.h,r);return!(0,Ce.fastPositionEqual)(n,o)||this.props.useCSSTransforms!==e.useCSSTransforms}componentDidMount(){this.moveDroppingItem({})}componentDidUpdate(e){this.moveDroppingItem(e)}moveDroppingItem(e){const{droppingPosition:r}=this.props;if(!r)return;const n=this.elementRef.current;if(!n)return;const o=e.droppingPosition||{left:0,top:0},{dragging:a}=this.state,i=a&&r.left!==o.left||r.top!==o.top;if(!a)this.onDragStart(r.e,{node:n,deltaX:r.left,deltaY:r.top});else if(i){const u=r.left-a.left,s=r.top-a.top;this.onDrag(r.e,{node:n,deltaX:u,deltaY:s},!0)}}getPositionParams(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.props;return{cols:e.cols,containerPadding:e.containerPadding,containerWidth:e.containerWidth,margin:e.margin,maxRows:e.maxRows,rowHeight:e.rowHeight}}createStyle(e){const{usePercentages:r,containerWidth:n,useCSSTransforms:o}=this.props;let a;return o?a=(0,Ce.setTransform)(e):(a=(0,Ce.setTopLeft)(e),r&&(a.left=(0,Ce.perc)(e.left/n),a.width=(0,Ce.perc)(e.width/n))),a}mixinDraggable(e,r){return Ee.default.createElement(ci.DraggableCore,{disabled:!r,onStart:this.onDragStart,onDrag:this.onDrag,onStop:this.onDragStop,handle:this.props.handle,cancel:".react-resizable-handle"+(this.props.cancel?","+this.props.cancel:""),scale:this.props.transformScale,nodeRef:this.elementRef},e)}curryResizeHandler(e,r){return(n,o)=>r(n,o,e)}mixinResizable(e,r,n){const{cols:o,minW:a,minH:i,maxW:u,maxH:s,transformScale:l,resizeHandles:c,resizeHandle:d}=this.props,f=this.getPositionParams(),h=(0,F.calcGridItemPosition)(f,0,0,o,0).width,v=(0,F.calcGridItemPosition)(f,0,0,a,i),R=(0,F.calcGridItemPosition)(f,0,0,u,s),S=[v.width,v.height],g=[Math.min(R.width,h),Math.min(R.height,1/0)];return Ee.default.createElement(di.Resizable,{draggableOpts:{disabled:!n},className:n?void 0:"react-resizable-hide",width:r.width,height:r.height,minConstraints:S,maxConstraints:g,onResizeStop:this.curryResizeHandler(r,this.onResizeStop),onResizeStart:this.curryResizeHandler(r,this.onResizeStart),onResize:this.curryResizeHandler(r,this.onResize),transformScale:l,resizeHandles:c,handle:d},e)}onResizeHandler(e,r,n,o){let{node:a,size:i,handle:u}=r;const s=this.props[o];if(!s)return;const{x:l,y:c,i:d,maxH:f,minH:h,containerWidth:v}=this.props,{minW:R,maxW:S}=this.props;let g=i;a&&(g=(0,Ce.resizeItemInDirection)(u,n,i,v),(0,Or.flushSync)(()=>{this.setState({resizing:o==="onResizeStop"?null:g})}));let{w:b,h:y}=(0,F.calcWH)(this.getPositionParams(),g.width,g.height,l,c,u);b=(0,F.clamp)(b,Math.max(R,1),S),y=(0,F.clamp)(y,h,f),s.call(this,d,b,y,{e,node:a,size:g,handle:u})}render(){const{x:e,y:r,w:n,h:o,isDraggable:a,isResizable:i,droppingPosition:u,useCSSTransforms:s}=this.props,l=(0,F.calcGridItemPosition)(this.getPositionParams(),e,r,n,o,this.state),c=Ee.default.Children.only(this.props.children);let d=Ee.default.cloneElement(c,{ref:this.elementRef,className:(0,fi.default)("react-grid-item",c.props.className,this.props.className,{static:this.props.static,resizing:!!this.state.resizing,"react-draggable":a,"react-draggable-dragging":!!this.state.dragging,dropping:!!u,cssTransforms:s}),style:{...this.props.style,...c.props.style,...this.createStyle(l)}});return d=this.mixinResizable(d,l,i),d=this.mixinDraggable(d,a),d}}rt.default=Qt;le(Qt,"propTypes",{children:z.default.element,cols:z.default.number.isRequired,containerWidth:z.default.number.isRequired,rowHeight:z.default.number.isRequired,margin:z.default.array.isRequired,maxRows:z.default.number.isRequired,containerPadding:z.default.array.isRequired,x:z.default.number.isRequired,y:z.default.number.isRequired,w:z.default.number.isRequired,h:z.default.number.isRequired,minW:function(t,e){const r=t[e];if(typeof r!="number")return new Error("minWidth not Number");if(r>t.w||r>t.maxW)return new Error("minWidth larger than item width/maxWidth")},maxW:function(t,e){const r=t[e];if(typeof r!="number")return new Error("maxWidth not Number");if(r<t.w||r<t.minW)return new Error("maxWidth smaller than item width/minWidth")},minH:function(t,e){const r=t[e];if(typeof r!="number")return new Error("minHeight not Number");if(r>t.h||r>t.maxH)return new Error("minHeight larger than item height/maxHeight")},maxH:function(t,e){const r=t[e];if(typeof r!="number")return new Error("maxHeight not Number");if(r<t.h||r<t.minH)return new Error("maxHeight smaller than item height/minHeight")},i:z.default.string.isRequired,resizeHandles:_r.resizeHandleAxesType,resizeHandle:_r.resizeHandleType,onDragStop:z.default.func,onDragStart:z.default.func,onDrag:z.default.func,onResizeStop:z.default.func,onResizeStart:z.default.func,onResize:z.default.func,isDraggable:z.default.bool.isRequired,isResizable:z.default.bool.isRequired,isBounded:z.default.bool.isRequired,static:z.default.bool,useCSSTransforms:z.default.bool.isRequired,transformScale:z.default.number,className:z.default.string,handle:z.default.string,cancel:z.default.string,droppingPosition:z.default.shape({e:z.default.object.isRequired,left:z.default.number.isRequired,top:z.default.number.isRequired})});le(Qt,"defaultProps",{className:"",cancel:"",handle:"",minH:1,minW:1,maxH:1/0,maxW:1/0,transformScale:1});Object.defineProperty(Ie,"__esModule",{value:!0});Ie.default=void 0;var xe=yn(M),vt=Nt,gi=er(Qe),D=C,mi=ue,Pr=er(rt),yi=er(fe);function er(t){return t&&t.__esModule?t:{default:t}}function yn(t,e){if(typeof WeakMap=="function")var r=new WeakMap,n=new WeakMap;return(yn=function(o,a){if(!a&&o&&o.__esModule)return o;var i,u,s={__proto__:null,default:o};if(o===null||typeof o!="object"&&typeof o!="function")return s;if(i=a?n:r){if(i.has(o))return i.get(o);i.set(o,s)}for(const l in o)l!=="default"&&{}.hasOwnProperty.call(o,l)&&((u=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(o,l))&&(u.get||u.set)?i(s,l,u):s[l]=o[l]);return s})(t,e)}function X(t,e,r){return(e=vi(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function vi(t){var e=bi(t,"string");return typeof e=="symbol"?e:e+""}function bi(t,e){if(typeof t!="object"||!t)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var n=r.call(t,e||"default");if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}const Er="react-grid-layout";let vn=!1;try{vn=/firefox/i.test(navigator.userAgent)}catch{}class ut extends xe.Component{constructor(){super(...arguments),X(this,"state",{activeDrag:null,layout:(0,D.synchronizeLayoutWithChildren)(this.props.layout,this.props.children,this.props.cols,(0,D.compactType)(this.props),this.props.allowOverlap),mounted:!1,oldDragItem:null,oldLayout:null,oldResizeItem:null,resizing:!1,droppingDOMNode:null,children:[]}),X(this,"dragEnterCounter",0),X(this,"onDragStart",(e,r,n,o)=>{let{e:a,node:i}=o;const{layout:u}=this.state,s=(0,D.getLayoutItem)(u,e);if(!s)return;const l={w:s.w,h:s.h,x:s.x,y:s.y,placeholder:!0,i:e};return this.setState({oldDragItem:(0,D.cloneLayoutItem)(s),oldLayout:u,activeDrag:l}),this.props.onDragStart(u,s,s,null,a,i)}),X(this,"onDrag",(e,r,n,o)=>{let{e:a,node:i}=o;const{oldDragItem:u}=this.state;let{layout:s}=this.state;const{cols:l,allowOverlap:c,preventCollision:d}=this.props,f=(0,D.getLayoutItem)(s,e);if(!f)return;const h={w:f.w,h:f.h,x:f.x,y:f.y,placeholder:!0,i:e};s=(0,D.moveElement)(s,f,r,n,!0,d,(0,D.compactType)(this.props),l,c),this.props.onDrag(s,u,f,h,a,i),this.setState({layout:c?s:(0,D.compact)(s,(0,D.compactType)(this.props),l),activeDrag:h})}),X(this,"onDragStop",(e,r,n,o)=>{let{e:a,node:i}=o;if(!this.state.activeDrag)return;const{oldDragItem:u}=this.state;let{layout:s}=this.state;const{cols:l,preventCollision:c,allowOverlap:d}=this.props,f=(0,D.getLayoutItem)(s,e);if(!f)return;s=(0,D.moveElement)(s,f,r,n,!0,c,(0,D.compactType)(this.props),l,d);const v=d?s:(0,D.compact)(s,(0,D.compactType)(this.props),l);this.props.onDragStop(v,u,f,null,a,i);const{oldLayout:R}=this.state;this.setState({activeDrag:null,layout:v,oldDragItem:null,oldLayout:null}),this.onLayoutMaybeChanged(v,R)}),X(this,"onResizeStart",(e,r,n,o)=>{let{e:a,node:i}=o;const{layout:u}=this.state,s=(0,D.getLayoutItem)(u,e);s&&(this.setState({oldResizeItem:(0,D.cloneLayoutItem)(s),oldLayout:this.state.layout,resizing:!0}),this.props.onResizeStart(u,s,s,null,a,i))}),X(this,"onResize",(e,r,n,o)=>{let{e:a,node:i,size:u,handle:s}=o;const{oldResizeItem:l}=this.state,{layout:c}=this.state,{cols:d,preventCollision:f,allowOverlap:h}=this.props;let v=!1,R,S,g;const[b,y]=(0,D.withLayoutItem)(c,e,m=>{let P;return S=m.x,g=m.y,["sw","w","nw","n","ne"].indexOf(s)!==-1&&(["sw","nw","w"].indexOf(s)!==-1&&(S=m.x+(m.w-r),r=m.x!==S&&S<0?m.w:r,S=S<0?0:S),["ne","n","nw"].indexOf(s)!==-1&&(g=m.y+(m.h-n),n=m.y!==g&&g<0?m.h:n,g=g<0?0:g),v=!0),f&&!h&&(P=(0,D.getAllCollisions)(c,{...m,w:r,h:n,x:S,y:g}).filter($=>$.i!==m.i).length>0,P&&(g=m.y,n=m.h,S=m.x,r=m.w,v=!1)),m.w=r,m.h=n,m});if(!y)return;R=b,v&&(R=(0,D.moveElement)(b,y,S,g,!0,this.props.preventCollision,(0,D.compactType)(this.props),d,h));const x={w:y.w,h:y.h,x:y.x,y:y.y,static:!0,i:e};this.props.onResize(R,l,y,x,a,i),this.setState({layout:h?R:(0,D.compact)(R,(0,D.compactType)(this.props),d),activeDrag:x})}),X(this,"onResizeStop",(e,r,n,o)=>{let{e:a,node:i}=o;const{layout:u,oldResizeItem:s}=this.state,{cols:l,allowOverlap:c}=this.props,d=(0,D.getLayoutItem)(u,e),f=c?u:(0,D.compact)(u,(0,D.compactType)(this.props),l);this.props.onResizeStop(f,s,d,null,a,i);const{oldLayout:h}=this.state;this.setState({activeDrag:null,layout:f,oldResizeItem:null,oldLayout:null,resizing:!1}),this.onLayoutMaybeChanged(f,h)}),X(this,"onDragOver",e=>{var b;if(e.preventDefault(),e.stopPropagation(),vn&&!((b=e.nativeEvent.target)!=null&&b.classList.contains(Er)))return!1;const{droppingItem:r,onDropDragOver:n,margin:o,cols:a,rowHeight:i,maxRows:u,width:s,containerPadding:l,transformScale:c}=this.props,d=n==null?void 0:n(e);if(d===!1)return this.state.droppingDOMNode&&this.removeDroppingPlaceholder(),!1;const f={...r,...d},{layout:h}=this.state,v=e.currentTarget.getBoundingClientRect(),R=e.clientX-v.left,S=e.clientY-v.top,g={left:R/c,top:S/c,e};if(this.state.droppingDOMNode){if(this.state.droppingPosition){const{left:y,top:x}=this.state.droppingPosition;(y!=R||x!=S)&&this.setState({droppingPosition:g})}}else{const y={cols:a,margin:o,maxRows:u,rowHeight:i,containerWidth:s,containerPadding:l||o},x=(0,mi.calcXY)(y,S,R,f.w,f.h);this.setState({droppingDOMNode:xe.createElement("div",{key:f.i}),droppingPosition:g,layout:[...h,{...f,x:x.x,y:x.y,static:!1,isDraggable:!0}]})}}),X(this,"removeDroppingPlaceholder",()=>{const{droppingItem:e,cols:r}=this.props,{layout:n}=this.state,o=(0,D.compact)(n.filter(a=>a.i!==e.i),(0,D.compactType)(this.props),r,this.props.allowOverlap);this.setState({layout:o,droppingDOMNode:null,activeDrag:null,droppingPosition:void 0})}),X(this,"onDragLeave",e=>{e.preventDefault(),e.stopPropagation(),this.dragEnterCounter--,this.dragEnterCounter===0&&this.removeDroppingPlaceholder()}),X(this,"onDragEnter",e=>{e.preventDefault(),e.stopPropagation(),this.dragEnterCounter++}),X(this,"onDrop",e=>{e.preventDefault(),e.stopPropagation();const{droppingItem:r}=this.props,{layout:n}=this.state,o=n.find(a=>a.i===r.i);this.dragEnterCounter=0,this.removeDroppingPlaceholder(),this.props.onDrop(n,o,e)})}componentDidMount(){this.setState({mounted:!0}),this.onLayoutMaybeChanged(this.state.layout,this.props.layout)}static getDerivedStateFromProps(e,r){let n;return r.activeDrag?null:(!(0,vt.deepEqual)(e.layout,r.propsLayout)||e.compactType!==r.compactType?n=e.layout:(0,D.childrenEqual)(e.children,r.children)||(n=r.layout),n?{layout:(0,D.synchronizeLayoutWithChildren)(n,e.children,e.cols,(0,D.compactType)(e),e.allowOverlap),compactType:e.compactType,children:e.children,propsLayout:e.layout}:null)}shouldComponentUpdate(e,r){return this.props.children!==e.children||!(0,D.fastRGLPropsEqual)(this.props,e,vt.deepEqual)||this.state.activeDrag!==r.activeDrag||this.state.mounted!==r.mounted||this.state.droppingPosition!==r.droppingPosition}componentDidUpdate(e,r){if(!this.state.activeDrag){const n=this.state.layout,o=r.layout;this.onLayoutMaybeChanged(n,o)}}containerHeight(){if(!this.props.autoSize)return;const e=(0,D.bottom)(this.state.layout),r=this.props.containerPadding?this.props.containerPadding[1]:this.props.margin[1];return e*this.props.rowHeight+(e-1)*this.props.margin[1]+r*2+"px"}onLayoutMaybeChanged(e,r){r||(r=this.state.layout),(0,vt.deepEqual)(r,e)||this.props.onLayoutChange(e)}placeholder(){const{activeDrag:e}=this.state;if(!e)return null;const{width:r,cols:n,margin:o,containerPadding:a,rowHeight:i,maxRows:u,useCSSTransforms:s,transformScale:l}=this.props;return xe.createElement(Pr.default,{w:e.w,h:e.h,x:e.x,y:e.y,i:e.i,className:`react-grid-placeholder ${this.state.resizing?"placeholder-resizing":""}`,containerWidth:r,cols:n,margin:o,containerPadding:a||o,maxRows:u,rowHeight:i,isDraggable:!1,isResizable:!1,isBounded:!1,useCSSTransforms:s,transformScale:l},xe.createElement("div",null))}processGridItem(e,r){if(!e||!e.key)return;const n=(0,D.getLayoutItem)(this.state.layout,String(e.key));if(!n)return null;const{width:o,cols:a,margin:i,containerPadding:u,rowHeight:s,maxRows:l,isDraggable:c,isResizable:d,isBounded:f,useCSSTransforms:h,transformScale:v,draggableCancel:R,draggableHandle:S,resizeHandles:g,resizeHandle:b}=this.props,{mounted:y,droppingPosition:x}=this.state,m=typeof n.isDraggable=="boolean"?n.isDraggable:!n.static&&c,P=typeof n.isResizable=="boolean"?n.isResizable:!n.static&&d,H=n.resizeHandles||g,$=m&&f&&n.isBounded!==!1;return xe.createElement(Pr.default,{containerWidth:o,cols:a,margin:i,containerPadding:u||i,maxRows:l,rowHeight:s,cancel:R,handle:S,onDragStop:this.onDragStop,onDragStart:this.onDragStart,onDrag:this.onDrag,onResizeStart:this.onResizeStart,onResize:this.onResize,onResizeStop:this.onResizeStop,isDraggable:m,isResizable:P,isBounded:$,useCSSTransforms:h&&y,usePercentages:!y,transformScale:v,w:n.w,h:n.h,x:n.x,y:n.y,i:n.i,minH:n.minH,minW:n.minW,maxH:n.maxH,maxW:n.maxW,static:n.static,droppingPosition:r?x:void 0,resizeHandles:H,resizeHandle:b},e)}render(){const{className:e,style:r,isDroppable:n,innerRef:o}=this.props,a=(0,gi.default)(Er,e),i={height:this.containerHeight(),...r};return xe.createElement("div",{ref:o,className:a,style:i,onDrop:n?this.onDrop:D.noop,onDragLeave:n?this.onDragLeave:D.noop,onDragEnter:n?this.onDragEnter:D.noop,onDragOver:n?this.onDragOver:D.noop},xe.Children.map(this.props.children,u=>this.processGridItem(u)),n&&this.state.droppingDOMNode&&this.processGridItem(this.state.droppingDOMNode,!0),this.placeholder())}}Ie.default=ut;X(ut,"displayName","ReactGridLayout");X(ut,"propTypes",yi.default);X(ut,"defaultProps",{autoSize:!0,cols:12,className:"",style:{},draggableHandle:"",draggableCancel:"",containerPadding:null,rowHeight:150,maxRows:1/0,layout:[],margin:[10,10],isBounded:!1,isDraggable:!0,isResizable:!0,allowOverlap:!1,isDroppable:!1,useCSSTransforms:!0,transformScale:1,verticalCompact:!0,compactType:"vertical",preventCollision:!1,droppingItem:{i:"__dropping-elem__",h:1,w:1},resizeHandles:["se"],onLayoutChange:D.noop,onDragStart:D.noop,onDrag:D.noop,onDragStop:D.noop,onResizeStart:D.noop,onResize:D.noop,onResizeStop:D.noop,onDrop:D.noop,onDropDragOver:D.noop});var ct={},Pe={};Object.defineProperty(Pe,"__esModule",{value:!0});Pe.findOrGenerateResponsiveLayout=Si;Pe.getBreakpointFromWidth=wi;Pe.getColsFromBreakpoint=xi;Pe.sortBreakpoints=tr;var Ye=C;function wi(t,e){const r=tr(t);let n=r[0];for(let o=1,a=r.length;o<a;o++){const i=r[o];e>t[i]&&(n=i)}return n}function xi(t,e){if(!e[t])throw new Error("ResponsiveReactGridLayout: `cols` entry for breakpoint "+t+" is missing!");return e[t]}function Si(t,e,r,n,o,a){if(t[r])return(0,Ye.cloneLayout)(t[r]);let i=t[n];const u=tr(e),s=u.slice(u.indexOf(r));for(let l=0,c=s.length;l<c;l++){const d=s[l];if(t[d]){i=t[d];break}}return i=(0,Ye.cloneLayout)(i||[]),(0,Ye.compact)((0,Ye.correctBounds)(i,{cols:o}),a,o)}function tr(t){return Object.keys(t).sort(function(r,n){return t[r]-t[n]})}Object.defineProperty(ct,"__esModule",{value:!0});ct.default=void 0;var Cr=wn(M),Q=bn(ye),bt=Nt,je=C,Se=Pe,Ri=bn(Ie);function bn(t){return t&&t.__esModule?t:{default:t}}function wn(t,e){if(typeof WeakMap=="function")var r=new WeakMap,n=new WeakMap;return(wn=function(o,a){if(!a&&o&&o.__esModule)return o;var i,u,s={__proto__:null,default:o};if(o===null||typeof o!="object"&&typeof o!="function")return s;if(i=a?n:r){if(i.has(o))return i.get(o);i.set(o,s)}for(const l in o)l!=="default"&&{}.hasOwnProperty.call(o,l)&&((u=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(o,l))&&(u.get||u.set)?i(s,l,u):s[l]=o[l]);return s})(t,e)}function Ct(){return Ct=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var n in r)({}).hasOwnProperty.call(r,n)&&(t[n]=r[n])}return t},Ct.apply(null,arguments)}function Ke(t,e,r){return(e=Di(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function Di(t){var e=Oi(t,"string");return typeof e=="symbol"?e:e+""}function Oi(t,e){if(typeof t!="object"||!t)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var n=r.call(t,e||"default");if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}const zr=t=>Object.prototype.toString.call(t);function Ue(t,e){return t==null?null:Array.isArray(t)?t:t[e]}class rr extends Cr.Component{constructor(){super(...arguments),Ke(this,"state",this.generateInitialState()),Ke(this,"onLayoutChange",e=>{this.props.onLayoutChange(e,{...this.props.layouts,[this.state.breakpoint]:e})})}generateInitialState(){const{width:e,breakpoints:r,layouts:n,cols:o}=this.props,a=(0,Se.getBreakpointFromWidth)(r,e),i=(0,Se.getColsFromBreakpoint)(a,o),u=this.props.verticalCompact===!1?null:this.props.compactType;return{layout:(0,Se.findOrGenerateResponsiveLayout)(n,r,a,a,i,u),breakpoint:a,cols:i}}static getDerivedStateFromProps(e,r){if(!(0,bt.deepEqual)(e.layouts,r.layouts)){const{breakpoint:n,cols:o}=r;return{layout:(0,Se.findOrGenerateResponsiveLayout)(e.layouts,e.breakpoints,n,n,o,e.compactType),layouts:e.layouts}}return null}componentDidUpdate(e){(this.props.width!=e.width||this.props.breakpoint!==e.breakpoint||!(0,bt.deepEqual)(this.props.breakpoints,e.breakpoints)||!(0,bt.deepEqual)(this.props.cols,e.cols))&&this.onWidthChange(e)}onWidthChange(e){const{breakpoints:r,cols:n,layouts:o,compactType:a}=this.props,i=this.props.breakpoint||(0,Se.getBreakpointFromWidth)(this.props.breakpoints,this.props.width),u=this.state.breakpoint,s=(0,Se.getColsFromBreakpoint)(i,n),l={...o};if(u!==i||e.breakpoints!==r||e.cols!==n){u in l||(l[u]=(0,je.cloneLayout)(this.state.layout));let f=(0,Se.findOrGenerateResponsiveLayout)(l,r,i,u,s,a);f=(0,je.synchronizeLayoutWithChildren)(f,this.props.children,s,a,this.props.allowOverlap),l[i]=f,this.props.onBreakpointChange(i,s),this.props.onLayoutChange(f,l),this.setState({breakpoint:i,layout:f,cols:s})}const c=Ue(this.props.margin,i),d=Ue(this.props.containerPadding,i);this.props.onWidthChange(this.props.width,c,s,d)}render(){const{breakpoint:e,breakpoints:r,cols:n,layouts:o,margin:a,containerPadding:i,onBreakpointChange:u,onLayoutChange:s,onWidthChange:l,...c}=this.props;return Cr.createElement(Ri.default,Ct({},c,{margin:Ue(a,this.state.breakpoint),containerPadding:Ue(i,this.state.breakpoint),onLayoutChange:this.onLayoutChange,layout:this.state.layout,cols:this.state.cols}))}}ct.default=rr;Ke(rr,"propTypes",{breakpoint:Q.default.string,breakpoints:Q.default.object,allowOverlap:Q.default.bool,cols:Q.default.object,margin:Q.default.oneOfType([Q.default.array,Q.default.object]),containerPadding:Q.default.oneOfType([Q.default.array,Q.default.object]),layouts(t,e){if(zr(t[e])!=="[object Object]")throw new Error("Layout property must be an object. Received: "+zr(t[e]));Object.keys(t[e]).forEach(r=>{if(!(r in t.breakpoints))throw new Error("Each key in layouts must align with a key in breakpoints.");(0,je.validateLayout)(t.layouts[r],"layouts."+r)})},width:Q.default.number.isRequired,onBreakpointChange:Q.default.func,onLayoutChange:Q.default.func,onWidthChange:Q.default.func});Ke(rr,"defaultProps",{breakpoints:{lg:1200,md:996,sm:768,xs:480,xxs:0},cols:{lg:12,md:10,sm:6,xs:4,xxs:2},containerPadding:{lg:null,md:null,sm:null,xs:null,xxs:null},layouts:{},margin:[10,10],allowOverlap:!1,onBreakpointChange:je.noop,onLayoutChange:je.noop,onWidthChange:je.noop});var nr={},xn=function(){if(typeof Map<"u")return Map;function t(e,r){var n=-1;return e.some(function(o,a){return o[0]===r?(n=a,!0):!1}),n}return function(){function e(){this.__entries__=[]}return Object.defineProperty(e.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),e.prototype.get=function(r){var n=t(this.__entries__,r),o=this.__entries__[n];return o&&o[1]},e.prototype.set=function(r,n){var o=t(this.__entries__,r);~o?this.__entries__[o][1]=n:this.__entries__.push([r,n])},e.prototype.delete=function(r){var n=this.__entries__,o=t(n,r);~o&&n.splice(o,1)},e.prototype.has=function(r){return!!~t(this.__entries__,r)},e.prototype.clear=function(){this.__entries__.splice(0)},e.prototype.forEach=function(r,n){n===void 0&&(n=null);for(var o=0,a=this.__entries__;o<a.length;o++){var i=a[o];r.call(n,i[1],i[0])}},e}()}(),zt=typeof window<"u"&&typeof document<"u"&&window.document===document,Ze=function(){return typeof global<"u"&&global.Math===Math?global:typeof self<"u"&&self.Math===Math?self:typeof window<"u"&&window.Math===Math?window:Function("return this")()}(),_i=function(){return typeof requestAnimationFrame=="function"?requestAnimationFrame.bind(Ze):function(t){return setTimeout(function(){return t(Date.now())},1e3/60)}}(),Pi=2;function Ei(t,e){var r=!1,n=!1,o=0;function a(){r&&(r=!1,t()),n&&u()}function i(){_i(a)}function u(){var s=Date.now();if(r){if(s-o<Pi)return;n=!0}else r=!0,n=!1,setTimeout(i,e);o=s}return u}var Ci=20,zi=["top","right","bottom","left","width","height","size","weight"],Mi=typeof MutationObserver<"u",ji=function(){function t(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=Ei(this.refresh.bind(this),Ci)}return t.prototype.addObserver=function(e){~this.observers_.indexOf(e)||this.observers_.push(e),this.connected_||this.connect_()},t.prototype.removeObserver=function(e){var r=this.observers_,n=r.indexOf(e);~n&&r.splice(n,1),!r.length&&this.connected_&&this.disconnect_()},t.prototype.refresh=function(){var e=this.updateObservers_();e&&this.refresh()},t.prototype.updateObservers_=function(){var e=this.observers_.filter(function(r){return r.gatherActive(),r.hasActive()});return e.forEach(function(r){return r.broadcastActive()}),e.length>0},t.prototype.connect_=function(){!zt||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),Mi?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},t.prototype.disconnect_=function(){!zt||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},t.prototype.onTransitionEnd_=function(e){var r=e.propertyName,n=r===void 0?"":r,o=zi.some(function(a){return!!~n.indexOf(a)});o&&this.refresh()},t.getInstance=function(){return this.instance_||(this.instance_=new t),this.instance_},t.instance_=null,t}(),Sn=function(t,e){for(var r=0,n=Object.keys(e);r<n.length;r++){var o=n[r];Object.defineProperty(t,o,{value:e[o],enumerable:!1,writable:!1,configurable:!0})}return t},Le=function(t){var e=t&&t.ownerDocument&&t.ownerDocument.defaultView;return e||Ze},Rn=dt(0,0,0,0);function Je(t){return parseFloat(t)||0}function Mr(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];return e.reduce(function(n,o){var a=t["border-"+o+"-width"];return n+Je(a)},0)}function Ti(t){for(var e=["top","right","bottom","left"],r={},n=0,o=e;n<o.length;n++){var a=o[n],i=t["padding-"+a];r[a]=Je(i)}return r}function Li(t){var e=t.getBBox();return dt(0,0,e.width,e.height)}function Hi(t){var e=t.clientWidth,r=t.clientHeight;if(!e&&!r)return Rn;var n=Le(t).getComputedStyle(t),o=Ti(n),a=o.left+o.right,i=o.top+o.bottom,u=Je(n.width),s=Je(n.height);if(n.boxSizing==="border-box"&&(Math.round(u+a)!==e&&(u-=Mr(n,"left","right")+a),Math.round(s+i)!==r&&(s-=Mr(n,"top","bottom")+i)),!Ni(t)){var l=Math.round(u+a)-e,c=Math.round(s+i)-r;Math.abs(l)!==1&&(u-=l),Math.abs(c)!==1&&(s-=c)}return dt(o.left,o.top,u,s)}var $i=function(){return typeof SVGGraphicsElement<"u"?function(t){return t instanceof Le(t).SVGGraphicsElement}:function(t){return t instanceof Le(t).SVGElement&&typeof t.getBBox=="function"}}();function Ni(t){return t===Le(t).document.documentElement}function Wi(t){return zt?$i(t)?Li(t):Hi(t):Rn}function ki(t){var e=t.x,r=t.y,n=t.width,o=t.height,a=typeof DOMRectReadOnly<"u"?DOMRectReadOnly:Object,i=Object.create(a.prototype);return Sn(i,{x:e,y:r,width:n,height:o,top:r,right:e+n,bottom:o+r,left:e}),i}function dt(t,e,r,n){return{x:t,y:e,width:r,height:n}}var Ai=function(){function t(e){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=dt(0,0,0,0),this.target=e}return t.prototype.isActive=function(){var e=Wi(this.target);return this.contentRect_=e,e.width!==this.broadcastWidth||e.height!==this.broadcastHeight},t.prototype.broadcastRect=function(){var e=this.contentRect_;return this.broadcastWidth=e.width,this.broadcastHeight=e.height,e},t}(),Ii=function(){function t(e,r){var n=ki(r);Sn(this,{target:e,contentRect:n})}return t}(),qi=function(){function t(e,r,n){if(this.activeObservations_=[],this.observations_=new xn,typeof e!="function")throw new TypeError("The callback provided as parameter 1 is not a function.");this.callback_=e,this.controller_=r,this.callbackCtx_=n}return t.prototype.observe=function(e){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if(!(typeof Element>"u"||!(Element instanceof Object))){if(!(e instanceof Le(e).Element))throw new TypeError('parameter 1 is not of type "Element".');var r=this.observations_;r.has(e)||(r.set(e,new Ai(e)),this.controller_.addObserver(this),this.controller_.refresh())}},t.prototype.unobserve=function(e){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if(!(typeof Element>"u"||!(Element instanceof Object))){if(!(e instanceof Le(e).Element))throw new TypeError('parameter 1 is not of type "Element".');var r=this.observations_;r.has(e)&&(r.delete(e),r.size||this.controller_.removeObserver(this))}},t.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},t.prototype.gatherActive=function(){var e=this;this.clearActive(),this.observations_.forEach(function(r){r.isActive()&&e.activeObservations_.push(r)})},t.prototype.broadcastActive=function(){if(this.hasActive()){var e=this.callbackCtx_,r=this.activeObservations_.map(function(n){return new Ii(n.target,n.broadcastRect())});this.callback_.call(e,r,e),this.clearActive()}},t.prototype.clearActive=function(){this.activeObservations_.splice(0)},t.prototype.hasActive=function(){return this.activeObservations_.length>0},t}(),Dn=typeof WeakMap<"u"?new WeakMap:new xn,On=function(){function t(e){if(!(this instanceof t))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var r=ji.getInstance(),n=new qi(e,r,this);Dn.set(this,n)}return t}();["observe","unobserve","disconnect"].forEach(function(t){On.prototype[t]=function(){var e;return(e=Dn.get(this))[t].apply(e,arguments)}});var Gi=function(){return typeof Ze.ResizeObserver<"u"?Ze.ResizeObserver:On}();const Bi=Object.freeze(Object.defineProperty({__proto__:null,default:Gi},Symbol.toStringTag,{value:"Module"})),Fi=kr(Bi);Object.defineProperty(nr,"__esModule",{value:!0});nr.default=Ji;var Xe=_n(M),Yi=or(ye),Ui=or(Fi),Xi=or(Qe);function or(t){return t&&t.__esModule?t:{default:t}}function _n(t,e){if(typeof WeakMap=="function")var r=new WeakMap,n=new WeakMap;return(_n=function(o,a){if(!a&&o&&o.__esModule)return o;var i,u,s={__proto__:null,default:o};if(o===null||typeof o!="object"&&typeof o!="function")return s;if(i=a?n:r){if(i.has(o))return i.get(o);i.set(o,s)}for(const l in o)l!=="default"&&{}.hasOwnProperty.call(o,l)&&((u=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(o,l))&&(u.get||u.set)?i(s,l,u):s[l]=o[l]);return s})(t,e)}function Mt(){return Mt=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var n in r)({}).hasOwnProperty.call(r,n)&&(t[n]=r[n])}return t},Mt.apply(null,arguments)}function ze(t,e,r){return(e=Vi(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function Vi(t){var e=Ki(t,"string");return typeof e=="symbol"?e:e+""}function Ki(t,e){if(typeof t!="object"||!t)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var n=r.call(t,e||"default");if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}const Zi="react-grid-layout";function Ji(t){var e;return e=class extends Xe.Component{constructor(){super(...arguments),ze(this,"state",{width:1280}),ze(this,"elementRef",Xe.createRef()),ze(this,"mounted",!1),ze(this,"resizeObserver",void 0)}componentDidMount(){this.mounted=!0,this.resizeObserver=new Ui.default(o=>{if(this.elementRef.current instanceof HTMLElement){const i=o[0].contentRect.width;this.setState({width:i})}});const n=this.elementRef.current;n instanceof HTMLElement&&this.resizeObserver.observe(n)}componentWillUnmount(){this.mounted=!1;const n=this.elementRef.current;n instanceof HTMLElement&&this.resizeObserver.unobserve(n),this.resizeObserver.disconnect()}render(){const{measureBeforeMount:n,...o}=this.props;return n&&!this.mounted?Xe.createElement("div",{className:(0,Xi.default)(this.props.className,Zi),style:this.props.style,ref:this.elementRef}):Xe.createElement(t,Mt({innerRef:this.elementRef},o,this.state))}},ze(e,"defaultProps",{measureBeforeMount:!1}),ze(e,"propTypes",{measureBeforeMount:Yi.default.bool}),e}(function(t){t.exports=Ie.default,t.exports.utils=C,t.exports.calculateUtils=ue,t.exports.Responsive=ct.default,t.exports.Responsive.utils=Pe,t.exports.WidthProvider=nr.default})(Gr);var Pn=Gr.exports;const Qi=eo(Pn),es=Pn.WidthProvider(Qi),ts=V("div")(({theme:t})=>({"& .react-grid-item":{borderRadius:`${t.shape.borderRadiusMedium}px`},"& .grid-item-drag-handle":{[t.breakpoints.down("md")]:{display:"none"}}})),rs=V("div")(({theme:t})=>({border:`1px solid ${t.palette.divider}`})),ds=({items:t,onLayoutChange:e,cols:r={lg:12,md:12,sm:6,xs:4,xxs:2},rowHeight:n=180})=>{const o=Ht(),a=Wr(o.breakpoints.down("md")),i=M.useMemo(()=>{if(a){let l=0;return t.map(c=>{const d={i:c.id,x:0,y:l,w:r.xs,h:c.h??4,minW:r.xs,minH:c.minH??3,maxW:r.xs,maxH:c.maxH??8,static:!1};return l+=d.h,d})}return t.map((l,c)=>({i:l.id,x:l.x??c%Math.floor(r.lg/(l.w??4))*(l.w??4),y:l.y??Math.floor(c/Math.floor(r.lg/(l.w??4)))*(l.h??4),w:l.w??4,h:l.h??4,minW:l.minW??4,minH:l.minH??3,maxW:l.maxW??12,maxH:l.maxH??8,static:l.static??!1}))},[t,r,a]),u=M.useMemo(()=>t.map(l=>p.jsx(rs,{children:l.component},l.id)),[t]),s=M.useCallback(l=>{a||e==null||e(l)},[e,a]);return p.jsx(ts,{children:p.jsx(es,{className:"impact-metrics-grid",layout:i,cols:a?r.xs:r.lg,rowHeight:n,margin:[Number.parseInt(o.spacing(2)),Number.parseInt(o.spacing(2))],containerPadding:[0,0],isDraggable:!1,isResizable:!1,onLayoutChange:s,resizeHandles:["se"],draggableHandle:".grid-item-drag-handle",compactType:a?null:"vertical",preventCollision:!1,useCSSTransforms:!0,autoSize:!0,allowOverlap:!1,children:u})})};export{ls as C,ds as G,as as a,ss as b,is as c,uo as u};
@@ -0,0 +1 @@
1
+ import{dF as B,dG as N,b9 as T,iV as G,r as u,j as t,B as b,fr as $,V as L,iW as U,s as o,aE as O,T as C,e as V,cJ as J,h as F,aD as Z,b5 as _,bh as H,ek as q,i as z}from"./index-B33kIVre.js";import{c as K,a as Q,C as X,G as Y,b as tt}from"./GridLayoutWrapper-DY9lNz0U.js";import{f as at}from"./metricsFormatters-C7iN2dDH.js";const et=()=>{const a="api/admin/impact-metrics/plausible",{data:n,refetch:c,loading:x,error:p}=B(T(a),()=>N(T(a),"Plausible metrics"),{refreshInterval:3e4,revalidateOnFocus:!0});return{data:n||{data:[]},refetch:c,loading:x,error:p}},rt=({aspectRatio:a,overrideOptions:n={},errorTitle:c="Failed to load Plausible metrics.",emptyDataDescription:x="No Plausible analytics data available.",noSeriesPlaceholder:p,isPreview:j})=>{const{data:e,loading:g,error:v}=et(),M=G({fill:!0,type:"constant"}),f=u.useMemo(()=>{if(!(e!=null&&e.data)||e.data.length===0)return{labels:[],datasets:[]};const s=[...e.data].sort((l,S)=>new Date(l.date).getTime()-new Date(S.date).getTime());return{labels:s.map(l=>l.date),datasets:[{label:"Events",data:s.map(l=>l.count),borderColor:"rgb(129, 122, 254)",backgroundColor:"rgba(129, 122, 254, 0.1)",fill:!0,tension:.1}]}},[e]),E=!!v,h=g,d=u.useMemo(()=>!h&&(!(e!=null&&e.data)||e.data.length===0||!f.datasets.some(s=>s.data.length>1)),[f,h,e]),w=d?p||t.jsx(U,{title:"No Plausible data available",description:x}):h,I={...n,scales:{x:{type:"time",time:{unit:"hour",displayFormats:{hour:"MMM dd, HH:mm"},tooltipFormat:"PPpp"},ticks:{maxRotation:45,minRotation:45,maxTicksLimit:8}},y:{beginAtZero:!0,title:{display:!0,text:"Events"},ticks:{precision:0,callback:s=>typeof s=="number"?at(s):s}}},plugins:{legend:{display:!0,position:"bottom",labels:{usePointStyle:!0,boxWidth:8,padding:12}}},animations:{x:{duration:0},y:{duration:0}}};return t.jsx(t.Fragment,{children:t.jsx(b,{sx:j?{}:{height:"100%",width:"100%","& > div":{height:"100% !important",width:"100% !important"}},children:t.jsx($,{data:d||h?M:f,aspectRatio:a,overrideOptions:I,cover:E?t.jsx(L,{severity:"error",children:c}):w})})})},st=o(O)(({theme:a})=>({borderRadius:`${a.shape.borderRadiusMedium}px`,boxShadow:"none",display:"flex",flexDirection:"column",height:"100%"})),it=o(b)({flex:1,display:"flex",flexDirection:"column",minHeight:0}),ot=o(b)(({theme:a})=>({position:"relative",minWidth:0,flexGrow:1,height:"100%",display:"flex",flexDirection:"column",margin:"auto 0",padding:a.spacing(3)})),nt=o(b)(({theme:a})=>({display:"flex",gap:a.spacing(2),alignItems:"center",padding:a.spacing(1.5,2),borderBottom:`1px solid ${a.palette.divider}`})),dt=o(b)(({theme:a})=>({display:"flex",flexDirection:"column",justifyContent:"flex-end",flexGrow:1,overflow:"hidden",textOverflow:"ellipsis"})),lt=()=>t.jsxs(st,{children:[t.jsx(nt,{children:t.jsxs(dt,{children:[t.jsx(C,{variant:"h6",children:"Plausible Analytics"}),t.jsx(C,{variant:"body2",color:"text.secondary",children:"Favorite events from Plausible analytics"})]})}),t.jsx(it,{children:t.jsx(ot,{children:t.jsx(rt,{aspectRatio:1.5,overrideOptions:{maintainAspectRatio:!1},emptyDataDescription:"No Plausible analytics data available for favorite events."})})})]}),ct=o(O)(({theme:a})=>({textAlign:"center",padding:a.spacing(8),backgroundColor:a.palette.background.default,borderRadius:`${a.shape.borderRadiusMedium}px`,boxShadow:"none"}));o(b)(({theme:a})=>({display:"flex",alignItems:"center",cursor:"move",padding:a.spacing(.5),borderRadius:a.shape.borderRadius,color:a.palette.text.secondary,"&:hover":{backgroundColor:a.palette.action.hover,color:a.palette.text.primary}}));const pt=()=>{const[a,n]=u.useState(!1),[c,x]=u.useState(),{setToastApiError:p}=V(),j=J("plausibleMetrics"),{charts:e,layout:g,loading:v,error:M,addChart:f,updateChart:E,deleteChart:h}=K(),{metadata:d,loading:P,error:w}=Q(),I=u.useMemo(()=>d!=null&&d.series?Object.entries(d.series).map(([i,m])=>({name:i,...m})):[],[d]),s=()=>{x(void 0),n(!0)},l=i=>{x(i),n(!0)},S=async i=>{try{c?await E(c.id,i):await f(i),n(!1)}catch(m){p(F(m))}},A=u.useCallback(async i=>{try{await h(i)}catch(m){p(F(m))}},[h]),R=u.useMemo(()=>{const i=[];if(j){const y={id:"plausible-analytics",component:t.jsx(lt,{}),w:6,h:2};i.push(y)}const m=e.map((y,ut)=>{const r=g==null?void 0:g.find(W=>W.i===y.id);return{id:y.id,component:t.jsx(X,{config:y,onEdit:l,onDelete:A}),w:(r==null?void 0:r.w)??6,h:(r==null?void 0:r.h)??4,x:r==null?void 0:r.x,y:r==null?void 0:r.y,minW:4,minH:2,maxW:12,maxH:8}});return[...i,...m]},[e,g,l,A,j]),D=w||M,k=P||v;return t.jsxs(t.Fragment,{children:[t.jsx(Z,{title:"Impact Metrics",titleElement:t.jsx(C,{variant:"h1",component:"span",children:"Impact Metrics"}),actions:t.jsx(_,{variant:"contained",startIcon:t.jsx(H,{}),onClick:s,disabled:k||!!D,permission:q,children:"Add Chart"})}),e.length===0&&!k&&!D?t.jsxs(ct,{children:[t.jsx(C,{variant:"h6",gutterBottom:!0,children:"No impact metrics charts configured"}),t.jsx(C,{variant:"body2",color:"text.secondary",sx:{mb:3},children:"Add your first impact metrics chart to start tracking performance with a beautiful drag-and-drop grid layout"}),t.jsx(z,{variant:"contained",startIcon:t.jsx(H,{}),onClick:s,disabled:k||!!D,children:"Add Chart"})]}):R.length>0?t.jsx(Y,{items:R}):null,t.jsx(tt,{open:a,onClose:()=>n(!1),onSave:S,initialConfig:c,metricSeries:I,loading:P||v})]})},ht=o("div")(({theme:a})=>({paddingTop:a.spacing(2)})),mt=o("div")(({theme:a})=>({display:"flex",flexDirection:"column",gap:a.spacing(4),paddingBottom:a.spacing(4)})),ft=()=>t.jsx(ht,{children:t.jsx(mt,{children:t.jsx(pt,{})})});export{ft as ImpactMetricsPage};