@perses-dev/alert-manager-plugin 0.1.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 (380) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +41 -0
  3. package/__mf/css/async/7790.85c2cbf6.css +1 -0
  4. package/__mf/font/inter-cyrillic-300-normal.432f2b21.woff +0 -0
  5. package/__mf/font/inter-cyrillic-300-normal.9da91009.woff2 +0 -0
  6. package/__mf/font/inter-cyrillic-400-normal.372704ff.woff2 +0 -0
  7. package/__mf/font/inter-cyrillic-400-normal.a6b6ef6f.woff +0 -0
  8. package/__mf/font/inter-cyrillic-500-normal.7c15bba8.woff2 +0 -0
  9. package/__mf/font/inter-cyrillic-500-normal.b9f8c929.woff +0 -0
  10. package/__mf/font/inter-cyrillic-600-normal.2f42892a.woff2 +0 -0
  11. package/__mf/font/inter-cyrillic-600-normal.c3987adc.woff +0 -0
  12. package/__mf/font/inter-cyrillic-700-normal.93eba3c3.woff +0 -0
  13. package/__mf/font/inter-cyrillic-700-normal.e9e5b2dc.woff2 +0 -0
  14. package/__mf/font/inter-cyrillic-900-normal.f285bd7a.woff2 +0 -0
  15. package/__mf/font/inter-cyrillic-900-normal.ffbd8a3a.woff +0 -0
  16. package/__mf/font/inter-cyrillic-ext-300-normal.95bb9038.woff2 +0 -0
  17. package/__mf/font/inter-cyrillic-ext-300-normal.cfc143a9.woff +0 -0
  18. package/__mf/font/inter-cyrillic-ext-400-normal.2a31c04b.woff +0 -0
  19. package/__mf/font/inter-cyrillic-ext-400-normal.f572b170.woff2 +0 -0
  20. package/__mf/font/inter-cyrillic-ext-500-normal.5a6bb1da.woff +0 -0
  21. package/__mf/font/inter-cyrillic-ext-500-normal.fe0d9b14.woff2 +0 -0
  22. package/__mf/font/inter-cyrillic-ext-600-normal.ecbdecad.woff +0 -0
  23. package/__mf/font/inter-cyrillic-ext-600-normal.f7b3c15b.woff2 +0 -0
  24. package/__mf/font/inter-cyrillic-ext-700-normal.4b4022a6.woff +0 -0
  25. package/__mf/font/inter-cyrillic-ext-700-normal.74b516d2.woff2 +0 -0
  26. package/__mf/font/inter-cyrillic-ext-900-normal.9970ddb5.woff +0 -0
  27. package/__mf/font/inter-cyrillic-ext-900-normal.a0d59adc.woff2 +0 -0
  28. package/__mf/font/inter-greek-300-normal.0d7be683.woff2 +0 -0
  29. package/__mf/font/inter-greek-300-normal.8f0b988e.woff +0 -0
  30. package/__mf/font/inter-greek-400-normal.cc58c11b.woff +0 -0
  31. package/__mf/font/inter-greek-400-normal.d7020e3c.woff2 +0 -0
  32. package/__mf/font/inter-greek-500-normal.d9a33207.woff +0 -0
  33. package/__mf/font/inter-greek-500-normal.f41f43db.woff2 +0 -0
  34. package/__mf/font/inter-greek-600-normal.4ec0c1c1.woff +0 -0
  35. package/__mf/font/inter-greek-600-normal.cc532937.woff2 +0 -0
  36. package/__mf/font/inter-greek-700-normal.5ec6c758.woff +0 -0
  37. package/__mf/font/inter-greek-700-normal.97f0eeeb.woff2 +0 -0
  38. package/__mf/font/inter-greek-900-normal.46b66369.woff2 +0 -0
  39. package/__mf/font/inter-greek-900-normal.9ae3a3c5.woff +0 -0
  40. package/__mf/font/inter-greek-ext-300-normal.10247a66.woff2 +0 -0
  41. package/__mf/font/inter-greek-ext-300-normal.4668e5cb.woff +0 -0
  42. package/__mf/font/inter-greek-ext-400-normal.4ce1df5d.woff2 +0 -0
  43. package/__mf/font/inter-greek-ext-400-normal.88ede1ea.woff +0 -0
  44. package/__mf/font/inter-greek-ext-500-normal.7a4aa726.woff +0 -0
  45. package/__mf/font/inter-greek-ext-500-normal.cbd51e2d.woff2 +0 -0
  46. package/__mf/font/inter-greek-ext-600-normal.089a95ee.woff +0 -0
  47. package/__mf/font/inter-greek-ext-600-normal.1f33d317.woff2 +0 -0
  48. package/__mf/font/inter-greek-ext-700-normal.31f1075d.woff +0 -0
  49. package/__mf/font/inter-greek-ext-700-normal.827cd618.woff2 +0 -0
  50. package/__mf/font/inter-greek-ext-900-normal.531bcee7.woff +0 -0
  51. package/__mf/font/inter-greek-ext-900-normal.8a9b36b9.woff2 +0 -0
  52. package/__mf/font/inter-latin-300-normal.15fb600d.woff2 +0 -0
  53. package/__mf/font/inter-latin-300-normal.6f95f590.woff +0 -0
  54. package/__mf/font/inter-latin-400-normal.2c7a775c.woff +0 -0
  55. package/__mf/font/inter-latin-400-normal.ef6d3f52.woff2 +0 -0
  56. package/__mf/font/inter-latin-500-normal.b7b43ace.woff2 +0 -0
  57. package/__mf/font/inter-latin-500-normal.cb4c8ceb.woff +0 -0
  58. package/__mf/font/inter-latin-600-normal.8fb1a964.woff2 +0 -0
  59. package/__mf/font/inter-latin-600-normal.ce0f5f43.woff +0 -0
  60. package/__mf/font/inter-latin-700-normal.953b7aa5.woff2 +0 -0
  61. package/__mf/font/inter-latin-700-normal.9c21d4dc.woff +0 -0
  62. package/__mf/font/inter-latin-900-normal.2a8028ec.woff2 +0 -0
  63. package/__mf/font/inter-latin-900-normal.fa252135.woff +0 -0
  64. package/__mf/font/inter-latin-ext-300-normal.167cc8c9.woff2 +0 -0
  65. package/__mf/font/inter-latin-ext-300-normal.f695be66.woff +0 -0
  66. package/__mf/font/inter-latin-ext-400-normal.32a25442.woff2 +0 -0
  67. package/__mf/font/inter-latin-ext-400-normal.4edcaace.woff +0 -0
  68. package/__mf/font/inter-latin-ext-500-normal.a19a84a6.woff +0 -0
  69. package/__mf/font/inter-latin-ext-500-normal.d9b491de.woff2 +0 -0
  70. package/__mf/font/inter-latin-ext-600-normal.38b075d8.woff2 +0 -0
  71. package/__mf/font/inter-latin-ext-600-normal.49faa47a.woff +0 -0
  72. package/__mf/font/inter-latin-ext-700-normal.93534b50.woff +0 -0
  73. package/__mf/font/inter-latin-ext-700-normal.b63daa1a.woff2 +0 -0
  74. package/__mf/font/inter-latin-ext-900-normal.0efdb307.woff +0 -0
  75. package/__mf/font/inter-latin-ext-900-normal.9c0fc2c7.woff2 +0 -0
  76. package/__mf/font/inter-vietnamese-300-normal.aad496d8.woff +0 -0
  77. package/__mf/font/inter-vietnamese-300-normal.ad9ef503.woff2 +0 -0
  78. package/__mf/font/inter-vietnamese-400-normal.a9dd2faf.woff +0 -0
  79. package/__mf/font/inter-vietnamese-400-normal.de4fc44f.woff2 +0 -0
  80. package/__mf/font/inter-vietnamese-500-normal.7c0a695f.woff2 +0 -0
  81. package/__mf/font/inter-vietnamese-500-normal.a3a73b95.woff +0 -0
  82. package/__mf/font/inter-vietnamese-600-normal.9d518599.woff2 +0 -0
  83. package/__mf/font/inter-vietnamese-600-normal.c5ce3fcb.woff +0 -0
  84. package/__mf/font/inter-vietnamese-700-normal.bc68b199.woff +0 -0
  85. package/__mf/font/inter-vietnamese-700-normal.faf12809.woff2 +0 -0
  86. package/__mf/font/inter-vietnamese-900-normal.2b782045.woff +0 -0
  87. package/__mf/font/inter-vietnamese-900-normal.e639b65a.woff2 +0 -0
  88. package/__mf/js/AlertManager.f762e62c.js +7 -0
  89. package/__mf/js/async/1616.24f00c9d.js +1 -0
  90. package/__mf/js/async/1728.83bb9a7c.js +1 -0
  91. package/__mf/js/async/1871.23ff54b3.js +1 -0
  92. package/__mf/js/async/1969.a83b1b48.js +1 -0
  93. package/__mf/js/async/2218.7829c9d9.js +2 -0
  94. package/__mf/js/async/2218.7829c9d9.js.LICENSE.txt +9 -0
  95. package/__mf/js/async/2377.f8875a4e.js +1 -0
  96. package/__mf/js/async/2657.fe8dd44f.js +1 -0
  97. package/__mf/js/async/2954.3ac1f636.js +2 -0
  98. package/__mf/js/async/392.7e11dd69.js +2 -0
  99. package/__mf/js/async/392.7e11dd69.js.LICENSE.txt +8 -0
  100. package/__mf/js/async/3963.fb6246d2.js +1 -0
  101. package/__mf/js/async/4121.ec666be2.js +2 -0
  102. package/__mf/js/async/4121.ec666be2.js.LICENSE.txt +9 -0
  103. package/__mf/js/async/4133.e94df4f8.js +28 -0
  104. package/__mf/js/async/4213.a0c4f2eb.js +1 -0
  105. package/__mf/js/async/4397.d399eecb.js +2 -0
  106. package/__mf/js/async/4397.d399eecb.js.LICENSE.txt +37 -0
  107. package/__mf/js/async/4466.a8145edd.js +74 -0
  108. package/__mf/js/async/4732.e866a740.js +1 -0
  109. package/__mf/js/async/4788.49ffeac3.js +1 -0
  110. package/__mf/js/async/5038.269393e3.js +2 -0
  111. package/__mf/js/async/5038.269393e3.js.LICENSE.txt +9 -0
  112. package/__mf/js/async/573.214f2003.js +2 -0
  113. package/__mf/js/async/573.214f2003.js.LICENSE.txt +9 -0
  114. package/__mf/js/async/6274.8c77cb1a.js +2 -0
  115. package/__mf/js/async/6274.8c77cb1a.js.LICENSE.txt +8 -0
  116. package/__mf/js/async/6390.3f6f279d.js +2 -0
  117. package/__mf/js/async/6390.3f6f279d.js.LICENSE.txt +9 -0
  118. package/__mf/js/async/6401.1a59dbad.js +1 -0
  119. package/__mf/js/async/6593.acc8b704.js +4 -0
  120. package/__mf/js/async/6593.acc8b704.js.LICENSE.txt +24 -0
  121. package/__mf/js/async/6594.b02adfd9.js +2 -0
  122. package/__mf/js/async/6594.b02adfd9.js.LICENSE.txt +9 -0
  123. package/__mf/js/async/663.5445c7e0.js +1 -0
  124. package/__mf/js/async/6854.1d628838.js +1 -0
  125. package/__mf/js/async/7177.27c86137.js +1 -0
  126. package/__mf/js/async/7192.ede9860b.js +1 -0
  127. package/__mf/js/async/733.22ab2a8a.js +1 -0
  128. package/__mf/js/async/7422.33d76364.js +2 -0
  129. package/__mf/js/async/7422.33d76364.js.LICENSE.txt +9 -0
  130. package/__mf/js/async/7790.a75199e6.js +7 -0
  131. package/__mf/js/async/7790.a75199e6.js.LICENSE.txt +64 -0
  132. package/__mf/js/async/7862.556c038f.js +2 -0
  133. package/__mf/js/async/7862.556c038f.js.LICENSE.txt +9 -0
  134. package/__mf/js/async/7984.49fa1156.js +22 -0
  135. package/__mf/js/async/7984.49fa1156.js.LICENSE.txt +19 -0
  136. package/__mf/js/async/804.23da0d30.js +37 -0
  137. package/__mf/js/async/8470.2df0db71.js +2 -0
  138. package/__mf/js/async/8470.2df0db71.js.LICENSE.txt +19 -0
  139. package/__mf/js/async/8697.c13c6603.js +1 -0
  140. package/__mf/js/async/8907.9e3edf43.js +1 -0
  141. package/__mf/js/async/9040.94717f28.js +10 -0
  142. package/__mf/js/async/9040.94717f28.js.LICENSE.txt +17 -0
  143. package/__mf/js/async/9184.27a439a4.js +1 -0
  144. package/__mf/js/async/9235.00f9412f.js +1 -0
  145. package/__mf/js/async/941.d3bc6208.js +2 -0
  146. package/__mf/js/async/941.d3bc6208.js.LICENSE.txt +9 -0
  147. package/__mf/js/async/9634.3a366799.js +1 -0
  148. package/__mf/js/async/9836.cc839227.js +1 -0
  149. package/__mf/js/async/__federation_expose_AlertManagerAlertsExplorer.d4fb76c0.js +2 -0
  150. package/__mf/js/async/__federation_expose_AlertManagerAlertsExplorer.d4fb76c0.js.LICENSE.txt +9 -0
  151. package/__mf/js/async/__federation_expose_AlertManagerAlertsQuery.9ea3093c.js +1 -0
  152. package/__mf/js/async/__federation_expose_AlertManagerDatasource.2fbf067c.js +2 -0
  153. package/__mf/js/async/__federation_expose_AlertManagerDatasource.2fbf067c.js.LICENSE.txt +9 -0
  154. package/__mf/js/async/__federation_expose_AlertManagerSilencesExplorer.d2527c12.js +2 -0
  155. package/__mf/js/async/__federation_expose_AlertManagerSilencesExplorer.d2527c12.js.LICENSE.txt +9 -0
  156. package/__mf/js/async/__federation_expose_AlertManagerSilencesQuery.7aca31d3.js +2 -0
  157. package/__mf/js/async/__federation_expose_AlertManagerSilencesQuery.7aca31d3.js.LICENSE.txt +9 -0
  158. package/__mf/js/async/__federation_expose_AlertTable.4a636b80.js +1 -0
  159. package/__mf/js/async/__federation_expose_SilenceTable.11259028.js +1 -0
  160. package/__mf/js/async/lib-router.19f64904.js +2 -0
  161. package/__mf/js/async/lib-router.19f64904.js.LICENSE.txt +32 -0
  162. package/__mf/js/main.a1362788.js +7 -0
  163. package/lib/bootstrap.d.ts +2 -0
  164. package/lib/bootstrap.d.ts.map +1 -0
  165. package/lib/bootstrap.js +19 -0
  166. package/lib/bootstrap.js.map +1 -0
  167. package/lib/cjs/bootstrap.js +26 -0
  168. package/lib/cjs/components/ColumnsEditor.js +271 -0
  169. package/lib/cjs/components/LazyTextField.js +50 -0
  170. package/lib/cjs/components/MatcherEditor.js +153 -0
  171. package/lib/cjs/components/MatchersList.js +46 -0
  172. package/lib/cjs/components/SilenceForm.js +205 -0
  173. package/lib/cjs/components/StatusBadge.js +71 -0
  174. package/lib/cjs/components/index.js +44 -0
  175. package/lib/cjs/explore/AlertManagerAlertsExplorer.js +79 -0
  176. package/lib/cjs/explore/AlertManagerSilencesExplorer.js +153 -0
  177. package/lib/cjs/getPluginModule.js +39 -0
  178. package/lib/cjs/index-federation.js +55 -0
  179. package/lib/cjs/index.js +39 -0
  180. package/lib/cjs/model/alertmanager-client.js +128 -0
  181. package/lib/cjs/model/alertmanager-selectors.js +66 -0
  182. package/lib/cjs/model/api-types.js +22 -0
  183. package/lib/cjs/model/index.js +32 -0
  184. package/lib/cjs/plugins/AlertManagerDatasourceEditor.js +71 -0
  185. package/lib/cjs/plugins/alert-table/AlertTable.js +56 -0
  186. package/lib/cjs/plugins/alert-table/AlertTableColumnsEditor.js +110 -0
  187. package/lib/cjs/plugins/alert-table/AlertTableDeduplicationEditor.js +138 -0
  188. package/lib/cjs/plugins/alert-table/AlertTableLabelsEditor.js +277 -0
  189. package/lib/cjs/plugins/alert-table/AlertTableOptionsEditor.js +128 -0
  190. package/lib/cjs/plugins/alert-table/AlertTablePanel.js +773 -0
  191. package/lib/cjs/plugins/alert-table/alert-table-model.js +142 -0
  192. package/lib/cjs/plugins/alert-table/alert-table-sorting.js +205 -0
  193. package/lib/cjs/plugins/alert-table/label-colors.js +170 -0
  194. package/lib/cjs/plugins/alertmanager-alerts-query/AlertManagerAlertsQuery.js +51 -0
  195. package/lib/cjs/plugins/alertmanager-alerts-query/AlertManagerAlertsQueryEditor.js +138 -0
  196. package/lib/cjs/plugins/alertmanager-alerts-query/get-alerts-data.js +124 -0
  197. package/lib/cjs/plugins/alertmanager-datasource.js +69 -0
  198. package/lib/cjs/plugins/alertmanager-silences-query/AlertManagerSilencesQuery.js +45 -0
  199. package/lib/cjs/plugins/alertmanager-silences-query/AlertManagerSilencesQueryEditor.js +78 -0
  200. package/lib/cjs/plugins/alertmanager-silences-query/get-silences-data.js +64 -0
  201. package/lib/cjs/plugins/index.js +74 -0
  202. package/lib/cjs/plugins/silence-table/SilenceTable.js +42 -0
  203. package/lib/cjs/plugins/silence-table/SilenceTableColumnsEditor.js +137 -0
  204. package/lib/cjs/plugins/silence-table/SilenceTableOptionsEditor.js +63 -0
  205. package/lib/cjs/plugins/silence-table/SilenceTablePanel.js +345 -0
  206. package/lib/cjs/plugins/silence-table/silence-table-model.js +116 -0
  207. package/lib/cjs/plugins/silence-table/silence-table-sorting.js +68 -0
  208. package/lib/cjs/plugins/types.js +16 -0
  209. package/lib/cjs/setup-tests.js +18 -0
  210. package/lib/components/ColumnsEditor.d.ts +25 -0
  211. package/lib/components/ColumnsEditor.d.ts.map +1 -0
  212. package/lib/components/ColumnsEditor.js +258 -0
  213. package/lib/components/ColumnsEditor.js.map +1 -0
  214. package/lib/components/LazyTextField.d.ts +12 -0
  215. package/lib/components/LazyTextField.d.ts.map +1 -0
  216. package/lib/components/LazyTextField.js +42 -0
  217. package/lib/components/LazyTextField.js.map +1 -0
  218. package/lib/components/MatcherEditor.d.ts +17 -0
  219. package/lib/components/MatcherEditor.d.ts.map +1 -0
  220. package/lib/components/MatcherEditor.js +142 -0
  221. package/lib/components/MatcherEditor.js.map +1 -0
  222. package/lib/components/MatchersList.d.ts +10 -0
  223. package/lib/components/MatchersList.d.ts.map +1 -0
  224. package/lib/components/MatchersList.js +40 -0
  225. package/lib/components/MatchersList.js.map +1 -0
  226. package/lib/components/SilenceForm.d.ts +13 -0
  227. package/lib/components/SilenceForm.d.ts.map +1 -0
  228. package/lib/components/SilenceForm.js +194 -0
  229. package/lib/components/SilenceForm.js.map +1 -0
  230. package/lib/components/StatusBadge.d.ts +10 -0
  231. package/lib/components/StatusBadge.d.ts.map +1 -0
  232. package/lib/components/StatusBadge.js +65 -0
  233. package/lib/components/StatusBadge.js.map +1 -0
  234. package/lib/components/index.d.ts +11 -0
  235. package/lib/components/index.d.ts.map +1 -0
  236. package/lib/components/index.js +19 -0
  237. package/lib/components/index.js.map +1 -0
  238. package/lib/explore/AlertManagerAlertsExplorer.d.ts +3 -0
  239. package/lib/explore/AlertManagerAlertsExplorer.d.ts.map +1 -0
  240. package/lib/explore/AlertManagerAlertsExplorer.js +71 -0
  241. package/lib/explore/AlertManagerAlertsExplorer.js.map +1 -0
  242. package/lib/explore/AlertManagerSilencesExplorer.d.ts +3 -0
  243. package/lib/explore/AlertManagerSilencesExplorer.d.ts.map +1 -0
  244. package/lib/explore/AlertManagerSilencesExplorer.js +140 -0
  245. package/lib/explore/AlertManagerSilencesExplorer.js.map +1 -0
  246. package/lib/getPluginModule.d.ts +3 -0
  247. package/lib/getPluginModule.d.ts.map +1 -0
  248. package/lib/getPluginModule.js +26 -0
  249. package/lib/getPluginModule.js.map +1 -0
  250. package/lib/index-federation.d.ts +1 -0
  251. package/lib/index-federation.d.ts.map +1 -0
  252. package/lib/index-federation.js +15 -0
  253. package/lib/index-federation.js.map +1 -0
  254. package/lib/index.d.ts +5 -0
  255. package/lib/index.d.ts.map +1 -0
  256. package/lib/index.js +18 -0
  257. package/lib/index.js.map +1 -0
  258. package/lib/model/alertmanager-client.d.ts +27 -0
  259. package/lib/model/alertmanager-client.d.ts.map +1 -0
  260. package/lib/model/alertmanager-client.js +100 -0
  261. package/lib/model/alertmanager-client.js.map +1 -0
  262. package/lib/model/alertmanager-selectors.d.ts +13 -0
  263. package/lib/model/alertmanager-selectors.d.ts.map +1 -0
  264. package/lib/model/alertmanager-selectors.js +41 -0
  265. package/lib/model/alertmanager-selectors.js.map +1 -0
  266. package/lib/model/api-types.d.ts +120 -0
  267. package/lib/model/api-types.d.ts.map +1 -0
  268. package/lib/model/api-types.js +23 -0
  269. package/lib/model/api-types.js.map +1 -0
  270. package/lib/model/index.d.ts +4 -0
  271. package/lib/model/index.d.ts.map +1 -0
  272. package/lib/model/index.js +17 -0
  273. package/lib/model/index.js.map +1 -0
  274. package/lib/plugins/AlertManagerDatasourceEditor.d.ts +9 -0
  275. package/lib/plugins/AlertManagerDatasourceEditor.d.ts.map +1 -0
  276. package/lib/plugins/AlertManagerDatasourceEditor.js +63 -0
  277. package/lib/plugins/AlertManagerDatasourceEditor.js.map +1 -0
  278. package/lib/plugins/alert-table/AlertTable.d.ts +8 -0
  279. package/lib/plugins/alert-table/AlertTable.d.ts.map +1 -0
  280. package/lib/plugins/alert-table/AlertTable.js +50 -0
  281. package/lib/plugins/alert-table/AlertTable.js.map +1 -0
  282. package/lib/plugins/alert-table/AlertTableColumnsEditor.d.ts +5 -0
  283. package/lib/plugins/alert-table/AlertTableColumnsEditor.d.ts.map +1 -0
  284. package/lib/plugins/alert-table/AlertTableColumnsEditor.js +102 -0
  285. package/lib/plugins/alert-table/AlertTableColumnsEditor.js.map +1 -0
  286. package/lib/plugins/alert-table/AlertTableDeduplicationEditor.d.ts +5 -0
  287. package/lib/plugins/alert-table/AlertTableDeduplicationEditor.d.ts.map +1 -0
  288. package/lib/plugins/alert-table/AlertTableDeduplicationEditor.js +130 -0
  289. package/lib/plugins/alert-table/AlertTableDeduplicationEditor.js.map +1 -0
  290. package/lib/plugins/alert-table/AlertTableLabelsEditor.d.ts +5 -0
  291. package/lib/plugins/alert-table/AlertTableLabelsEditor.d.ts.map +1 -0
  292. package/lib/plugins/alert-table/AlertTableLabelsEditor.js +264 -0
  293. package/lib/plugins/alert-table/AlertTableLabelsEditor.js.map +1 -0
  294. package/lib/plugins/alert-table/AlertTableOptionsEditor.d.ts +5 -0
  295. package/lib/plugins/alert-table/AlertTableOptionsEditor.d.ts.map +1 -0
  296. package/lib/plugins/alert-table/AlertTableOptionsEditor.js +120 -0
  297. package/lib/plugins/alert-table/AlertTableOptionsEditor.js.map +1 -0
  298. package/lib/plugins/alert-table/AlertTablePanel.d.ts +11 -0
  299. package/lib/plugins/alert-table/AlertTablePanel.d.ts.map +1 -0
  300. package/lib/plugins/alert-table/AlertTablePanel.js +763 -0
  301. package/lib/plugins/alert-table/AlertTablePanel.js.map +1 -0
  302. package/lib/plugins/alert-table/alert-table-model.d.ts +73 -0
  303. package/lib/plugins/alert-table/alert-table-model.d.ts.map +1 -0
  304. package/lib/plugins/alert-table/alert-table-model.js +127 -0
  305. package/lib/plugins/alert-table/alert-table-model.js.map +1 -0
  306. package/lib/plugins/alert-table/alert-table-sorting.d.ts +13 -0
  307. package/lib/plugins/alert-table/alert-table-sorting.d.ts.map +1 -0
  308. package/lib/plugins/alert-table/alert-table-sorting.js +180 -0
  309. package/lib/plugins/alert-table/alert-table-sorting.js.map +1 -0
  310. package/lib/plugins/alert-table/label-colors.d.ts +6 -0
  311. package/lib/plugins/alert-table/label-colors.d.ts.map +1 -0
  312. package/lib/plugins/alert-table/label-colors.js +148 -0
  313. package/lib/plugins/alert-table/label-colors.js.map +1 -0
  314. package/lib/plugins/alertmanager-alerts-query/AlertManagerAlertsQuery.d.ts +4 -0
  315. package/lib/plugins/alertmanager-alerts-query/AlertManagerAlertsQuery.d.ts.map +1 -0
  316. package/lib/plugins/alertmanager-alerts-query/AlertManagerAlertsQuery.js +43 -0
  317. package/lib/plugins/alertmanager-alerts-query/AlertManagerAlertsQuery.js.map +1 -0
  318. package/lib/plugins/alertmanager-alerts-query/AlertManagerAlertsQueryEditor.d.ts +9 -0
  319. package/lib/plugins/alertmanager-alerts-query/AlertManagerAlertsQueryEditor.d.ts.map +1 -0
  320. package/lib/plugins/alertmanager-alerts-query/AlertManagerAlertsQueryEditor.js +130 -0
  321. package/lib/plugins/alertmanager-alerts-query/AlertManagerAlertsQueryEditor.js.map +1 -0
  322. package/lib/plugins/alertmanager-alerts-query/get-alerts-data.d.ts +8 -0
  323. package/lib/plugins/alertmanager-alerts-query/get-alerts-data.d.ts.map +1 -0
  324. package/lib/plugins/alertmanager-alerts-query/get-alerts-data.js +118 -0
  325. package/lib/plugins/alertmanager-alerts-query/get-alerts-data.js.map +1 -0
  326. package/lib/plugins/alertmanager-datasource.d.ts +5 -0
  327. package/lib/plugins/alertmanager-datasource.d.ts.map +1 -0
  328. package/lib/plugins/alertmanager-datasource.js +61 -0
  329. package/lib/plugins/alertmanager-datasource.js.map +1 -0
  330. package/lib/plugins/alertmanager-silences-query/AlertManagerSilencesQuery.d.ts +4 -0
  331. package/lib/plugins/alertmanager-silences-query/AlertManagerSilencesQuery.d.ts.map +1 -0
  332. package/lib/plugins/alertmanager-silences-query/AlertManagerSilencesQuery.js +37 -0
  333. package/lib/plugins/alertmanager-silences-query/AlertManagerSilencesQuery.js.map +1 -0
  334. package/lib/plugins/alertmanager-silences-query/AlertManagerSilencesQueryEditor.d.ts +9 -0
  335. package/lib/plugins/alertmanager-silences-query/AlertManagerSilencesQueryEditor.d.ts.map +1 -0
  336. package/lib/plugins/alertmanager-silences-query/AlertManagerSilencesQueryEditor.js +70 -0
  337. package/lib/plugins/alertmanager-silences-query/AlertManagerSilencesQueryEditor.js.map +1 -0
  338. package/lib/plugins/alertmanager-silences-query/get-silences-data.d.ts +8 -0
  339. package/lib/plugins/alertmanager-silences-query/get-silences-data.d.ts.map +1 -0
  340. package/lib/plugins/alertmanager-silences-query/get-silences-data.js +58 -0
  341. package/lib/plugins/alertmanager-silences-query/get-silences-data.js.map +1 -0
  342. package/lib/plugins/index.d.ts +19 -0
  343. package/lib/plugins/index.d.ts.map +1 -0
  344. package/lib/plugins/index.js +30 -0
  345. package/lib/plugins/index.js.map +1 -0
  346. package/lib/plugins/silence-table/SilenceTable.d.ts +7 -0
  347. package/lib/plugins/silence-table/SilenceTable.d.ts.map +1 -0
  348. package/lib/plugins/silence-table/SilenceTable.js +36 -0
  349. package/lib/plugins/silence-table/SilenceTable.js.map +1 -0
  350. package/lib/plugins/silence-table/SilenceTableColumnsEditor.d.ts +5 -0
  351. package/lib/plugins/silence-table/SilenceTableColumnsEditor.d.ts.map +1 -0
  352. package/lib/plugins/silence-table/SilenceTableColumnsEditor.js +129 -0
  353. package/lib/plugins/silence-table/SilenceTableColumnsEditor.js.map +1 -0
  354. package/lib/plugins/silence-table/SilenceTableOptionsEditor.d.ts +5 -0
  355. package/lib/plugins/silence-table/SilenceTableOptionsEditor.d.ts.map +1 -0
  356. package/lib/plugins/silence-table/SilenceTableOptionsEditor.js +55 -0
  357. package/lib/plugins/silence-table/SilenceTableOptionsEditor.js.map +1 -0
  358. package/lib/plugins/silence-table/SilenceTablePanel.d.ts +11 -0
  359. package/lib/plugins/silence-table/SilenceTablePanel.d.ts.map +1 -0
  360. package/lib/plugins/silence-table/SilenceTablePanel.js +335 -0
  361. package/lib/plugins/silence-table/SilenceTablePanel.js.map +1 -0
  362. package/lib/plugins/silence-table/silence-table-model.d.ts +29 -0
  363. package/lib/plugins/silence-table/silence-table-model.d.ts.map +1 -0
  364. package/lib/plugins/silence-table/silence-table-model.js +90 -0
  365. package/lib/plugins/silence-table/silence-table-model.js.map +1 -0
  366. package/lib/plugins/silence-table/silence-table-sorting.d.ts +9 -0
  367. package/lib/plugins/silence-table/silence-table-sorting.d.ts.map +1 -0
  368. package/lib/plugins/silence-table/silence-table-sorting.js +60 -0
  369. package/lib/plugins/silence-table/silence-table-sorting.js.map +1 -0
  370. package/lib/plugins/types.d.ts +30 -0
  371. package/lib/plugins/types.d.ts.map +1 -0
  372. package/lib/plugins/types.js +17 -0
  373. package/lib/plugins/types.js.map +1 -0
  374. package/lib/setup-tests.d.ts +2 -0
  375. package/lib/setup-tests.d.ts.map +1 -0
  376. package/lib/setup-tests.js +16 -0
  377. package/lib/setup-tests.js.map +1 -0
  378. package/mf-manifest.json +631 -0
  379. package/mf-stats.json +752 -0
  380. package/package.json +115 -0
@@ -0,0 +1,68 @@
1
+ // Copyright The Perses Authors
2
+ // Licensed under the Apache License, Version 2.0 (the "License");
3
+ // you may not use this file except in compliance with the License.
4
+ // You may obtain a copy of the License at
5
+ //
6
+ // http://www.apache.org/licenses/LICENSE-2.0
7
+ //
8
+ // Unless required by applicable law or agreed to in writing, software
9
+ // distributed under the License is distributed on an "AS IS" BASIS,
10
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ // See the License for the specific language governing permissions and
12
+ // limitations under the License.
13
+ "use strict";
14
+ Object.defineProperty(exports, "__esModule", {
15
+ value: true
16
+ });
17
+ Object.defineProperty(exports, "compareSilencesByColumn", {
18
+ enumerable: true,
19
+ get: function() {
20
+ return compareSilencesByColumn;
21
+ }
22
+ });
23
+ const _silencetablemodel = require("./silence-table-model");
24
+ const STATUS_WEIGHT = {
25
+ active: 0,
26
+ pending: 1,
27
+ expired: 2
28
+ };
29
+ function directionMultiplier(direction) {
30
+ return direction === 'asc' ? 1 : -1;
31
+ }
32
+ function compareAlphabetical(a, b) {
33
+ if (!a && !b) return 0;
34
+ if (!a) return 1;
35
+ if (!b) return -1;
36
+ return a.localeCompare(b);
37
+ }
38
+ function compareDate(a, b) {
39
+ const ta = a ? new Date(a).getTime() : NaN;
40
+ const tb = b ? new Date(b).getTime() : NaN;
41
+ if (isNaN(ta) && isNaN(tb)) return 0;
42
+ if (isNaN(ta)) return 1;
43
+ if (isNaN(tb)) return -1;
44
+ return ta - tb;
45
+ }
46
+ function compareStatus(a, b) {
47
+ const wa = STATUS_WEIGHT[a] ?? 3;
48
+ const wb = STATUS_WEIGHT[b] ?? 3;
49
+ return wa - wb;
50
+ }
51
+ function compareSilencesByColumn(a, b, sort) {
52
+ const va = (0, _silencetablemodel.getSilenceFieldValue)(a, sort.fieldName);
53
+ const vb = (0, _silencetablemodel.getSilenceFieldValue)(b, sort.fieldName);
54
+ let result;
55
+ switch(sort.mode){
56
+ case 'date':
57
+ result = compareDate(va, vb);
58
+ break;
59
+ case 'status':
60
+ result = compareStatus(va, vb);
61
+ break;
62
+ case 'alphabetical':
63
+ default:
64
+ result = compareAlphabetical(va, vb);
65
+ break;
66
+ }
67
+ return result * directionMultiplier(sort.direction);
68
+ }
@@ -0,0 +1,16 @@
1
+ // Copyright The Perses Authors
2
+ // Licensed under the Apache License, Version 2.0 (the "License");
3
+ // you may not use this file except in compliance with the License.
4
+ // You may obtain a copy of the License at
5
+ //
6
+ // http://www.apache.org/licenses/LICENSE-2.0
7
+ //
8
+ // Unless required by applicable law or agreed to in writing, software
9
+ // distributed under the License is distributed on an "AS IS" BASIS,
10
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ // See the License for the specific language governing permissions and
12
+ // limitations under the License.
13
+ "use strict";
14
+ Object.defineProperty(exports, "__esModule", {
15
+ value: true
16
+ });
@@ -0,0 +1,18 @@
1
+ // Copyright The Perses Authors
2
+ // Licensed under the Apache License, Version 2.0 (the "License");
3
+ // you may not use this file except in compliance with the License.
4
+ // You may obtain a copy of the License at
5
+ //
6
+ // http://www.apache.org/licenses/LICENSE-2.0
7
+ //
8
+ // Unless required by applicable law or agreed to in writing, software
9
+ // distributed under the License is distributed on an "AS IS" BASIS,
10
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ // See the License for the specific language governing permissions and
12
+ // limitations under the License.
13
+ "use strict";
14
+ Object.defineProperty(exports, "__esModule", {
15
+ value: true
16
+ });
17
+ require("@testing-library/jest-dom");
18
+ jest.mock('echarts/core');
@@ -0,0 +1,25 @@
1
+ import { ReactElement } from 'react';
2
+ export interface BaseColumnDefinition {
3
+ name: string;
4
+ header?: string;
5
+ enableSorting?: boolean;
6
+ sort?: 'asc' | 'desc';
7
+ sortMode?: string;
8
+ }
9
+ export type ColumnUpdater<C> = (index: number, updater: (draft: C) => void) => void;
10
+ export interface ColumnsEditorProps<C extends BaseColumnDefinition> {
11
+ columns: C[];
12
+ description: string;
13
+ sortModeLabels: Record<string, string>;
14
+ defaultSortMode: string;
15
+ getDisplayName: (column: C) => string;
16
+ getHeaderPlaceholder: (column: C) => string;
17
+ onAdd: () => void;
18
+ onRemove: (index: number) => void;
19
+ onUpdate: ColumnUpdater<C>;
20
+ onMoveUp: (index: number) => void;
21
+ onMoveDown: (index: number) => void;
22
+ renderNameField: (column: C, index: number, onUpdate: ColumnUpdater<C>) => ReactElement;
23
+ }
24
+ export declare function ColumnsEditor<C extends BaseColumnDefinition>(props: ColumnsEditorProps<C>): ReactElement;
25
+ //# sourceMappingURL=ColumnsEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColumnsEditor.d.ts","sourceRoot":"","sources":["../../../src/components/ColumnsEditor.tsx"],"names":[],"mappings":"AAiCA,OAAO,EAAE,YAAY,EAAuB,MAAM,OAAO,CAAC;AAE1D,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,IAAI,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,KAAK,IAAI,CAAC;AAEpF,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,oBAAoB;IAChE,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,MAAM,CAAC;IACtC,oBAAoB,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,MAAM,CAAC;IAC5C,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,eAAe,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC;CACzF;AAiID,wBAAgB,aAAa,CAAC,CAAC,SAAS,oBAAoB,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,YAAY,CA2FxG"}
@@ -0,0 +1,258 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // Copyright The Perses Authors
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ import { Box, Button, Checkbox, Divider, FormControl, FormControlLabel, IconButton, InputLabel, MenuItem, Select, Stack, TextField, Typography } from '@mui/material';
15
+ import { OptionsEditorGroup } from '@perses-dev/components';
16
+ import ArrowUpIcon from 'mdi-material-ui/ArrowUp';
17
+ import ArrowDownIcon from 'mdi-material-ui/ArrowDown';
18
+ import DeleteIcon from 'mdi-material-ui/Delete';
19
+ import PlusIcon from 'mdi-material-ui/Plus';
20
+ import { useCallback, useRef } from 'react';
21
+ const DEFAULT_SORT_LABELS = {
22
+ none: 'None',
23
+ asc: 'Ascending',
24
+ desc: 'Descending'
25
+ };
26
+ function ColumnEntry({ column, index, isFirst, isLast, sortModeLabels, defaultSortMode, getDisplayName, getHeaderPlaceholder, onUpdate, onRemove, onMoveUp, onMoveDown, renderNameField }) {
27
+ return /*#__PURE__*/ _jsx(Box, {
28
+ sx: {
29
+ border: 1,
30
+ borderColor: 'divider',
31
+ borderRadius: 1,
32
+ p: 2
33
+ },
34
+ children: /*#__PURE__*/ _jsxs(Stack, {
35
+ spacing: 2,
36
+ children: [
37
+ /*#__PURE__*/ _jsxs(Stack, {
38
+ direction: "row",
39
+ spacing: 0.5,
40
+ alignItems: "center",
41
+ justifyContent: "space-between",
42
+ children: [
43
+ /*#__PURE__*/ _jsx(Typography, {
44
+ variant: "subtitle2",
45
+ children: getDisplayName(column)
46
+ }),
47
+ /*#__PURE__*/ _jsxs(Stack, {
48
+ direction: "row",
49
+ spacing: 0.5,
50
+ children: [
51
+ /*#__PURE__*/ _jsx(IconButton, {
52
+ size: "small",
53
+ onClick: ()=>onMoveUp(index),
54
+ disabled: isFirst,
55
+ "aria-label": "Move column up",
56
+ children: /*#__PURE__*/ _jsx(ArrowUpIcon, {
57
+ fontSize: "small"
58
+ })
59
+ }),
60
+ /*#__PURE__*/ _jsx(IconButton, {
61
+ size: "small",
62
+ onClick: ()=>onMoveDown(index),
63
+ disabled: isLast,
64
+ "aria-label": "Move column down",
65
+ children: /*#__PURE__*/ _jsx(ArrowDownIcon, {
66
+ fontSize: "small"
67
+ })
68
+ }),
69
+ /*#__PURE__*/ _jsx(IconButton, {
70
+ size: "small",
71
+ onClick: ()=>onRemove(index),
72
+ "aria-label": "Remove column",
73
+ children: /*#__PURE__*/ _jsx(DeleteIcon, {
74
+ fontSize: "small"
75
+ })
76
+ })
77
+ ]
78
+ })
79
+ ]
80
+ }),
81
+ /*#__PURE__*/ _jsxs(Stack, {
82
+ direction: "row",
83
+ spacing: 1,
84
+ children: [
85
+ /*#__PURE__*/ _jsx(Box, {
86
+ sx: {
87
+ flex: 1
88
+ },
89
+ children: renderNameField(column, index, onUpdate)
90
+ }),
91
+ /*#__PURE__*/ _jsx(TextField, {
92
+ label: "Header",
93
+ value: column.header ?? '',
94
+ onChange: (e)=>onUpdate(index, (draft)=>{
95
+ draft.header = e.target.value || undefined;
96
+ }),
97
+ size: "small",
98
+ sx: {
99
+ flex: 1
100
+ },
101
+ placeholder: getHeaderPlaceholder(column)
102
+ })
103
+ ]
104
+ }),
105
+ /*#__PURE__*/ _jsx(FormControlLabel, {
106
+ control: /*#__PURE__*/ _jsx(Checkbox, {
107
+ checked: column.enableSorting !== false,
108
+ onChange: (e)=>onUpdate(index, (draft)=>{
109
+ draft.enableSorting = e.target.checked ? undefined : false;
110
+ }),
111
+ size: "small"
112
+ }),
113
+ label: "Allow header sorting"
114
+ }),
115
+ /*#__PURE__*/ _jsxs(Stack, {
116
+ direction: "row",
117
+ spacing: 1,
118
+ children: [
119
+ /*#__PURE__*/ _jsxs(FormControl, {
120
+ size: "small",
121
+ sx: {
122
+ flex: 1
123
+ },
124
+ children: [
125
+ /*#__PURE__*/ _jsx(InputLabel, {
126
+ id: `sort-mode-label-${index}`,
127
+ children: "Sort mode"
128
+ }),
129
+ /*#__PURE__*/ _jsx(Select, {
130
+ labelId: `sort-mode-label-${index}`,
131
+ value: column.sortMode ?? defaultSortMode,
132
+ onChange: (e)=>onUpdate(index, (draft)=>{
133
+ draft.sortMode = e.target.value;
134
+ }),
135
+ label: "Sort mode",
136
+ children: Object.entries(sortModeLabels).map(([mode, label])=>/*#__PURE__*/ _jsx(MenuItem, {
137
+ value: mode,
138
+ children: label
139
+ }, mode))
140
+ })
141
+ ]
142
+ }),
143
+ /*#__PURE__*/ _jsxs(FormControl, {
144
+ size: "small",
145
+ sx: {
146
+ flex: 1
147
+ },
148
+ children: [
149
+ /*#__PURE__*/ _jsx(InputLabel, {
150
+ id: `default-sort-label-${index}`,
151
+ children: "Default sort"
152
+ }),
153
+ /*#__PURE__*/ _jsx(Select, {
154
+ labelId: `default-sort-label-${index}`,
155
+ value: column.sort ?? 'none',
156
+ onChange: (e)=>onUpdate(index, (draft)=>{
157
+ const val = e.target.value;
158
+ draft.sort = val === 'none' ? undefined : val;
159
+ }),
160
+ label: "Default sort",
161
+ children: Object.entries(DEFAULT_SORT_LABELS).map(([value, label])=>/*#__PURE__*/ _jsx(MenuItem, {
162
+ value: value,
163
+ children: label
164
+ }, value))
165
+ })
166
+ ]
167
+ })
168
+ ]
169
+ })
170
+ ]
171
+ })
172
+ });
173
+ }
174
+ export function ColumnsEditor(props) {
175
+ const { columns, description, sortModeLabels, defaultSortMode, getDisplayName, getHeaderPlaceholder, onAdd, onRemove, onUpdate, onMoveUp, onMoveDown, renderNameField } = props;
176
+ const idCounterRef = useRef(0);
177
+ const idsRef = useRef([]);
178
+ while(idsRef.current.length < columns.length){
179
+ idsRef.current.push(idCounterRef.current++);
180
+ }
181
+ idsRef.current.length = columns.length;
182
+ const handleAdd = useCallback(()=>{
183
+ idsRef.current.push(idCounterRef.current++);
184
+ onAdd();
185
+ }, [
186
+ onAdd
187
+ ]);
188
+ const handleRemove = useCallback((index)=>{
189
+ idsRef.current.splice(index, 1);
190
+ onRemove(index);
191
+ }, [
192
+ onRemove
193
+ ]);
194
+ const handleMoveUp = useCallback((index)=>{
195
+ if (index <= 0) return;
196
+ const ids = idsRef.current;
197
+ const id = ids.splice(index, 1)[0];
198
+ ids.splice(index - 1, 0, id);
199
+ onMoveUp(index);
200
+ }, [
201
+ onMoveUp
202
+ ]);
203
+ const handleMoveDown = useCallback((index)=>{
204
+ const ids = idsRef.current;
205
+ if (index >= ids.length - 1) return;
206
+ const id = ids.splice(index, 1)[0];
207
+ ids.splice(index + 1, 0, id);
208
+ onMoveDown(index);
209
+ }, [
210
+ onMoveDown
211
+ ]);
212
+ return /*#__PURE__*/ _jsx(OptionsEditorGroup, {
213
+ title: "Columns",
214
+ children: /*#__PURE__*/ _jsxs(Stack, {
215
+ spacing: 2,
216
+ children: [
217
+ /*#__PURE__*/ _jsx(Typography, {
218
+ variant: "body2",
219
+ color: "text.secondary",
220
+ children: description
221
+ }),
222
+ columns.map((column, index)=>/*#__PURE__*/ _jsxs(Box, {
223
+ children: [
224
+ index > 0 && /*#__PURE__*/ _jsx(Divider, {
225
+ sx: {
226
+ mb: 2
227
+ }
228
+ }),
229
+ /*#__PURE__*/ _jsx(ColumnEntry, {
230
+ column: column,
231
+ index: index,
232
+ isFirst: index === 0,
233
+ isLast: index === columns.length - 1,
234
+ sortModeLabels: sortModeLabels,
235
+ defaultSortMode: defaultSortMode,
236
+ getDisplayName: getDisplayName,
237
+ getHeaderPlaceholder: getHeaderPlaceholder,
238
+ onUpdate: onUpdate,
239
+ onRemove: handleRemove,
240
+ onMoveUp: handleMoveUp,
241
+ onMoveDown: handleMoveDown,
242
+ renderNameField: renderNameField
243
+ })
244
+ ]
245
+ }, idsRef.current[index])),
246
+ /*#__PURE__*/ _jsx(Button, {
247
+ variant: "outlined",
248
+ size: "small",
249
+ startIcon: /*#__PURE__*/ _jsx(PlusIcon, {}),
250
+ onClick: handleAdd,
251
+ children: "Add column"
252
+ })
253
+ ]
254
+ })
255
+ });
256
+ }
257
+
258
+ //# sourceMappingURL=ColumnsEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/ColumnsEditor.tsx"],"sourcesContent":["// Copyright The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport {\n Box,\n Button,\n Checkbox,\n Divider,\n FormControl,\n FormControlLabel,\n IconButton,\n InputLabel,\n MenuItem,\n Select,\n Stack,\n TextField,\n Typography,\n} from '@mui/material';\nimport { OptionsEditorGroup } from '@perses-dev/components';\nimport ArrowUpIcon from 'mdi-material-ui/ArrowUp';\nimport ArrowDownIcon from 'mdi-material-ui/ArrowDown';\nimport DeleteIcon from 'mdi-material-ui/Delete';\nimport PlusIcon from 'mdi-material-ui/Plus';\nimport { ReactElement, useCallback, useRef } from 'react';\n\nexport interface BaseColumnDefinition {\n name: string;\n header?: string;\n enableSorting?: boolean;\n sort?: 'asc' | 'desc';\n sortMode?: string;\n}\n\nexport type ColumnUpdater<C> = (index: number, updater: (draft: C) => void) => void;\n\nexport interface ColumnsEditorProps<C extends BaseColumnDefinition> {\n columns: C[];\n description: string;\n sortModeLabels: Record<string, string>;\n defaultSortMode: string;\n getDisplayName: (column: C) => string;\n getHeaderPlaceholder: (column: C) => string;\n onAdd: () => void;\n onRemove: (index: number) => void;\n onUpdate: ColumnUpdater<C>;\n onMoveUp: (index: number) => void;\n onMoveDown: (index: number) => void;\n renderNameField: (column: C, index: number, onUpdate: ColumnUpdater<C>) => ReactElement;\n}\n\nconst DEFAULT_SORT_LABELS: Record<string, string> = {\n none: 'None',\n asc: 'Ascending',\n desc: 'Descending',\n};\n\nfunction ColumnEntry<C extends BaseColumnDefinition>({\n column,\n index,\n isFirst,\n isLast,\n sortModeLabels,\n defaultSortMode,\n getDisplayName,\n getHeaderPlaceholder,\n onUpdate,\n onRemove,\n onMoveUp,\n onMoveDown,\n renderNameField,\n}: {\n column: C;\n index: number;\n isFirst: boolean;\n isLast: boolean;\n sortModeLabels: Record<string, string>;\n defaultSortMode: string;\n getDisplayName: (column: C) => string;\n getHeaderPlaceholder: (column: C) => string;\n onUpdate: ColumnUpdater<C>;\n onRemove: (index: number) => void;\n onMoveUp: (index: number) => void;\n onMoveDown: (index: number) => void;\n renderNameField: (column: C, index: number, onUpdate: ColumnUpdater<C>) => ReactElement;\n}): ReactElement {\n return (\n <Box sx={{ border: 1, borderColor: 'divider', borderRadius: 1, p: 2 }}>\n <Stack spacing={2}>\n <Stack direction=\"row\" spacing={0.5} alignItems=\"center\" justifyContent=\"space-between\">\n <Typography variant=\"subtitle2\">{getDisplayName(column)}</Typography>\n <Stack direction=\"row\" spacing={0.5}>\n <IconButton size=\"small\" onClick={() => onMoveUp(index)} disabled={isFirst} aria-label=\"Move column up\">\n <ArrowUpIcon fontSize=\"small\" />\n </IconButton>\n <IconButton size=\"small\" onClick={() => onMoveDown(index)} disabled={isLast} aria-label=\"Move column down\">\n <ArrowDownIcon fontSize=\"small\" />\n </IconButton>\n <IconButton size=\"small\" onClick={() => onRemove(index)} aria-label=\"Remove column\">\n <DeleteIcon fontSize=\"small\" />\n </IconButton>\n </Stack>\n </Stack>\n <Stack direction=\"row\" spacing={1}>\n <Box sx={{ flex: 1 }}>{renderNameField(column, index, onUpdate)}</Box>\n <TextField\n label=\"Header\"\n value={column.header ?? ''}\n onChange={(e) =>\n onUpdate(index, (draft) => {\n draft.header = e.target.value || undefined;\n })\n }\n size=\"small\"\n sx={{ flex: 1 }}\n placeholder={getHeaderPlaceholder(column)}\n />\n </Stack>\n <FormControlLabel\n control={\n <Checkbox\n checked={column.enableSorting !== false}\n onChange={(e) =>\n onUpdate(index, (draft) => {\n draft.enableSorting = e.target.checked ? undefined : false;\n })\n }\n size=\"small\"\n />\n }\n label=\"Allow header sorting\"\n />\n <Stack direction=\"row\" spacing={1}>\n <FormControl size=\"small\" sx={{ flex: 1 }}>\n <InputLabel id={`sort-mode-label-${index}`}>Sort mode</InputLabel>\n <Select\n labelId={`sort-mode-label-${index}`}\n value={column.sortMode ?? defaultSortMode}\n onChange={(e) =>\n onUpdate(index, (draft) => {\n draft.sortMode = e.target.value;\n })\n }\n label=\"Sort mode\"\n >\n {Object.entries(sortModeLabels).map(([mode, label]) => (\n <MenuItem key={mode} value={mode}>\n {label}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <FormControl size=\"small\" sx={{ flex: 1 }}>\n <InputLabel id={`default-sort-label-${index}`}>Default sort</InputLabel>\n <Select\n labelId={`default-sort-label-${index}`}\n value={column.sort ?? 'none'}\n onChange={(e) =>\n onUpdate(index, (draft) => {\n const val = e.target.value;\n draft.sort = val === 'none' ? undefined : (val as 'asc' | 'desc');\n })\n }\n label=\"Default sort\"\n >\n {Object.entries(DEFAULT_SORT_LABELS).map(([value, label]) => (\n <MenuItem key={value} value={value}>\n {label}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </Stack>\n </Stack>\n </Box>\n );\n}\n\nexport function ColumnsEditor<C extends BaseColumnDefinition>(props: ColumnsEditorProps<C>): ReactElement {\n const {\n columns,\n description,\n sortModeLabels,\n defaultSortMode,\n getDisplayName,\n getHeaderPlaceholder,\n onAdd,\n onRemove,\n onUpdate,\n onMoveUp,\n onMoveDown,\n renderNameField,\n } = props;\n\n const idCounterRef = useRef(0);\n const idsRef = useRef<number[]>([]);\n\n while (idsRef.current.length < columns.length) {\n idsRef.current.push(idCounterRef.current++);\n }\n idsRef.current.length = columns.length;\n\n const handleAdd = useCallback((): void => {\n idsRef.current.push(idCounterRef.current++);\n onAdd();\n }, [onAdd]);\n\n const handleRemove = useCallback(\n (index: number): void => {\n idsRef.current.splice(index, 1);\n onRemove(index);\n },\n [onRemove]\n );\n\n const handleMoveUp = useCallback(\n (index: number): void => {\n if (index <= 0) return;\n const ids = idsRef.current;\n const id = ids.splice(index, 1)[0]!;\n ids.splice(index - 1, 0, id);\n onMoveUp(index);\n },\n [onMoveUp]\n );\n\n const handleMoveDown = useCallback(\n (index: number): void => {\n const ids = idsRef.current;\n if (index >= ids.length - 1) return;\n const id = ids.splice(index, 1)[0]!;\n ids.splice(index + 1, 0, id);\n onMoveDown(index);\n },\n [onMoveDown]\n );\n\n return (\n <OptionsEditorGroup title=\"Columns\">\n <Stack spacing={2}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {description}\n </Typography>\n {columns.map((column, index) => (\n <Box key={idsRef.current[index]}>\n {index > 0 && <Divider sx={{ mb: 2 }} />}\n <ColumnEntry\n column={column}\n index={index}\n isFirst={index === 0}\n isLast={index === columns.length - 1}\n sortModeLabels={sortModeLabels}\n defaultSortMode={defaultSortMode}\n getDisplayName={getDisplayName}\n getHeaderPlaceholder={getHeaderPlaceholder}\n onUpdate={onUpdate}\n onRemove={handleRemove}\n onMoveUp={handleMoveUp}\n onMoveDown={handleMoveDown}\n renderNameField={renderNameField}\n />\n </Box>\n ))}\n <Button variant=\"outlined\" size=\"small\" startIcon={<PlusIcon />} onClick={handleAdd}>\n Add column\n </Button>\n </Stack>\n </OptionsEditorGroup>\n );\n}\n"],"names":["Box","Button","Checkbox","Divider","FormControl","FormControlLabel","IconButton","InputLabel","MenuItem","Select","Stack","TextField","Typography","OptionsEditorGroup","ArrowUpIcon","ArrowDownIcon","DeleteIcon","PlusIcon","useCallback","useRef","DEFAULT_SORT_LABELS","none","asc","desc","ColumnEntry","column","index","isFirst","isLast","sortModeLabels","defaultSortMode","getDisplayName","getHeaderPlaceholder","onUpdate","onRemove","onMoveUp","onMoveDown","renderNameField","sx","border","borderColor","borderRadius","p","spacing","direction","alignItems","justifyContent","variant","size","onClick","disabled","aria-label","fontSize","flex","label","value","header","onChange","e","draft","target","undefined","placeholder","control","checked","enableSorting","id","labelId","sortMode","Object","entries","map","mode","sort","val","ColumnsEditor","props","columns","description","onAdd","idCounterRef","idsRef","current","length","push","handleAdd","handleRemove","splice","handleMoveUp","ids","handleMoveDown","title","color","mb","startIcon"],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { ReactElement } from 'react';
2
+ export interface LazyTextFieldProps {
3
+ label: string;
4
+ value?: string;
5
+ onCommit: (nextValue: string) => void;
6
+ placeholder?: string;
7
+ helperText?: string;
8
+ multiline?: boolean;
9
+ minRows?: number;
10
+ }
11
+ export declare function LazyTextField(props: LazyTextFieldProps): ReactElement;
12
+ //# sourceMappingURL=LazyTextField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LazyTextField.d.ts","sourceRoot":"","sources":["../../../src/components/LazyTextField.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAe,YAAY,EAAoC,MAAM,OAAO,CAAC;AAEpF,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,YAAY,CAiBrE"}
@@ -0,0 +1,42 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // Copyright The Perses Authors
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ import { TextField } from '@mui/material';
15
+ import { useCallback, useEffect, useState } from 'react';
16
+ export function LazyTextField(props) {
17
+ const { value, onCommit, ...textFieldProps } = props;
18
+ const [draftValue, setDraftValue] = useState(value ?? '');
19
+ useEffect(()=>{
20
+ setDraftValue(value ?? '');
21
+ }, [
22
+ value
23
+ ]);
24
+ const handleChange = useCallback((event)=>{
25
+ setDraftValue(event.target.value);
26
+ }, []);
27
+ const handleBlur = useCallback(()=>{
28
+ onCommit(draftValue);
29
+ }, [
30
+ draftValue,
31
+ onCommit
32
+ ]);
33
+ return /*#__PURE__*/ _jsx(TextField, {
34
+ ...textFieldProps,
35
+ size: "small",
36
+ value: draftValue,
37
+ onChange: handleChange,
38
+ onBlur: handleBlur
39
+ });
40
+ }
41
+
42
+ //# sourceMappingURL=LazyTextField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/LazyTextField.tsx"],"sourcesContent":["// Copyright The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { TextField } from '@mui/material';\nimport { ChangeEvent, ReactElement, useCallback, useEffect, useState } from 'react';\n\nexport interface LazyTextFieldProps {\n label: string;\n value?: string;\n onCommit: (nextValue: string) => void;\n placeholder?: string;\n helperText?: string;\n multiline?: boolean;\n minRows?: number;\n}\n\nexport function LazyTextField(props: LazyTextFieldProps): ReactElement {\n const { value, onCommit, ...textFieldProps } = props;\n const [draftValue, setDraftValue] = useState(value ?? '');\n\n useEffect(() => {\n setDraftValue(value ?? '');\n }, [value]);\n\n const handleChange = useCallback((event: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>): void => {\n setDraftValue(event.target.value);\n }, []);\n\n const handleBlur = useCallback((): void => {\n onCommit(draftValue);\n }, [draftValue, onCommit]);\n\n return <TextField {...textFieldProps} size=\"small\" value={draftValue} onChange={handleChange} onBlur={handleBlur} />;\n}\n"],"names":["TextField","useCallback","useEffect","useState","LazyTextField","props","value","onCommit","textFieldProps","draftValue","setDraftValue","handleChange","event","target","handleBlur","size","onChange","onBlur"],"mappings":";AAAA,+BAA+B;AAC/B,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,SAASA,SAAS,QAAQ,gBAAgB;AAC1C,SAAoCC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,QAAQ;AAYpF,OAAO,SAASC,cAAcC,KAAyB;IACrD,MAAM,EAAEC,KAAK,EAAEC,QAAQ,EAAE,GAAGC,gBAAgB,GAAGH;IAC/C,MAAM,CAACI,YAAYC,cAAc,GAAGP,SAASG,SAAS;IAEtDJ,UAAU;QACRQ,cAAcJ,SAAS;IACzB,GAAG;QAACA;KAAM;IAEV,MAAMK,eAAeV,YAAY,CAACW;QAChCF,cAAcE,MAAMC,MAAM,CAACP,KAAK;IAClC,GAAG,EAAE;IAEL,MAAMQ,aAAab,YAAY;QAC7BM,SAASE;IACX,GAAG;QAACA;QAAYF;KAAS;IAEzB,qBAAO,KAACP;QAAW,GAAGQ,cAAc;QAAEO,MAAK;QAAQT,OAAOG;QAAYO,UAAUL;QAAcM,QAAQH;;AACxG"}
@@ -0,0 +1,17 @@
1
+ import { ReactElement } from 'react';
2
+ export interface MatcherValue {
3
+ name: string;
4
+ value: string;
5
+ isEqual: boolean;
6
+ isRegex: boolean;
7
+ }
8
+ export interface MatcherEditorProps {
9
+ matcher: MatcherValue;
10
+ onChange: (matcher: MatcherValue) => void;
11
+ onRemove: () => void;
12
+ }
13
+ /**
14
+ * A form for editing a single matcher with fields for name, value, and match type.
15
+ */
16
+ export declare function MatcherEditor({ matcher, onChange, onRemove }: MatcherEditorProps): ReactElement;
17
+ //# sourceMappingURL=MatcherEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MatcherEditor.d.ts","sourceRoot":"","sources":["../../../src/components/MatcherEditor.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAE,YAAY,EAAS,MAAM,OAAO,CAAC;AAa5C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;IAC1C,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAwBD;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,kBAAkB,GAAG,YAAY,CAwC/F"}
@@ -0,0 +1,142 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // Copyright The Perses Authors
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ import { useId } from 'react';
15
+ import { IconButton, MenuItem, Stack, TextField, Select, FormControl, InputLabel } from '@mui/material';
16
+ import DeleteIcon from 'mdi-material-ui/Delete';
17
+ function getMatchType(matcher) {
18
+ if (matcher.isRegex) {
19
+ return matcher.isEqual ? '=~' : '!~';
20
+ }
21
+ return matcher.isEqual ? '=' : '!=';
22
+ }
23
+ function parseMatchType(matchType) {
24
+ switch(matchType){
25
+ case '=':
26
+ return {
27
+ isEqual: true,
28
+ isRegex: false
29
+ };
30
+ case '!=':
31
+ return {
32
+ isEqual: false,
33
+ isRegex: false
34
+ };
35
+ case '=~':
36
+ return {
37
+ isEqual: true,
38
+ isRegex: true
39
+ };
40
+ case '!~':
41
+ return {
42
+ isEqual: false,
43
+ isRegex: true
44
+ };
45
+ }
46
+ }
47
+ /**
48
+ * A form for editing a single matcher with fields for name, value, and match type.
49
+ */ export function MatcherEditor({ matcher, onChange, onRemove }) {
50
+ const matchTypeLabelId = useId();
51
+ const handleNameChange = (e)=>{
52
+ onChange({
53
+ ...matcher,
54
+ name: e.target.value
55
+ });
56
+ };
57
+ const handleValueChange = (e)=>{
58
+ onChange({
59
+ ...matcher,
60
+ value: e.target.value
61
+ });
62
+ };
63
+ const handleMatchTypeChange = (e)=>{
64
+ const { isEqual, isRegex } = parseMatchType(e.target.value);
65
+ onChange({
66
+ ...matcher,
67
+ isEqual,
68
+ isRegex
69
+ });
70
+ };
71
+ return /*#__PURE__*/ _jsxs(Stack, {
72
+ direction: "row",
73
+ spacing: 1,
74
+ alignItems: "center",
75
+ children: [
76
+ /*#__PURE__*/ _jsx(TextField, {
77
+ label: "Label name",
78
+ value: matcher.name,
79
+ onChange: handleNameChange,
80
+ size: "small",
81
+ sx: {
82
+ minWidth: 150
83
+ }
84
+ }),
85
+ /*#__PURE__*/ _jsxs(FormControl, {
86
+ size: "small",
87
+ sx: {
88
+ minWidth: 80
89
+ },
90
+ children: [
91
+ /*#__PURE__*/ _jsx(InputLabel, {
92
+ id: matchTypeLabelId,
93
+ children: "Match"
94
+ }),
95
+ /*#__PURE__*/ _jsxs(Select, {
96
+ labelId: matchTypeLabelId,
97
+ value: getMatchType(matcher),
98
+ onChange: handleMatchTypeChange,
99
+ label: "Match",
100
+ children: [
101
+ /*#__PURE__*/ _jsx(MenuItem, {
102
+ value: "=",
103
+ children: "="
104
+ }),
105
+ /*#__PURE__*/ _jsx(MenuItem, {
106
+ value: "!=",
107
+ children: "!="
108
+ }),
109
+ /*#__PURE__*/ _jsx(MenuItem, {
110
+ value: "=~",
111
+ children: "=~"
112
+ }),
113
+ /*#__PURE__*/ _jsx(MenuItem, {
114
+ value: "!~",
115
+ children: "!~"
116
+ })
117
+ ]
118
+ })
119
+ ]
120
+ }),
121
+ /*#__PURE__*/ _jsx(TextField, {
122
+ label: "Value",
123
+ value: matcher.value,
124
+ onChange: handleValueChange,
125
+ size: "small",
126
+ sx: {
127
+ minWidth: 200
128
+ }
129
+ }),
130
+ /*#__PURE__*/ _jsx(IconButton, {
131
+ onClick: onRemove,
132
+ size: "small",
133
+ "aria-label": "Remove matcher",
134
+ children: /*#__PURE__*/ _jsx(DeleteIcon, {
135
+ fontSize: "small"
136
+ })
137
+ })
138
+ ]
139
+ });
140
+ }
141
+
142
+ //# sourceMappingURL=MatcherEditor.js.map