@grafana/scenes 6.7.0 → 6.8.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 (331) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/esm/components/layout/CSSGrid/SceneCSSGridItem.js +33 -0
  3. package/dist/esm/dist/esm/behaviors/CursorSync.js +76 -0
  4. package/dist/esm/dist/esm/behaviors/LiveNowTimer.js +44 -0
  5. package/dist/esm/dist/esm/behaviors/SceneQueryController.js +14 -0
  6. package/dist/esm/dist/esm/components/EmbeddedScene.js +59 -0
  7. package/dist/esm/dist/esm/components/NestedScene.js +95 -0
  8. package/dist/esm/dist/esm/components/SceneApp/SceneApp.js +27 -0
  9. package/dist/esm/dist/esm/components/SceneApp/SceneAppPage.js +176 -0
  10. package/dist/esm/dist/esm/components/SceneApp/SceneAppPageView.js +104 -0
  11. package/dist/esm/dist/esm/components/SceneApp/utils.js +42 -0
  12. package/dist/esm/dist/esm/components/SceneByFrameRepeater.js +41 -0
  13. package/dist/esm/dist/esm/components/SceneByVariableRepeater.js +55 -0
  14. package/dist/esm/dist/esm/components/SceneCanvasText.js +32 -0
  15. package/dist/esm/dist/esm/components/SceneControlsSpacer.js +17 -0
  16. package/dist/esm/dist/esm/components/SceneDebugger/DebugDetails.js +82 -0
  17. package/dist/esm/dist/esm/components/SceneDebugger/DebugTreeNode.js +72 -0
  18. package/dist/esm/dist/esm/components/SceneDebugger/SceneDebugger.js +77 -0
  19. package/dist/esm/dist/esm/components/SceneReactObject.js +34 -0
  20. package/dist/esm/dist/esm/components/SceneRefreshPicker.js +205 -0
  21. package/dist/esm/dist/esm/components/SceneTimePicker.js +139 -0
  22. package/dist/esm/dist/esm/components/SceneTimeRangeCompare.js +240 -0
  23. package/dist/esm/dist/esm/components/SceneToolbarButton.js +33 -0
  24. package/dist/esm/dist/esm/components/VizPanel/VizPanel.js +406 -0
  25. package/dist/esm/dist/esm/components/VizPanel/VizPanelExploreButton.js +44 -0
  26. package/dist/esm/dist/esm/components/VizPanel/VizPanelMenu.js +59 -0
  27. package/dist/esm/dist/esm/components/VizPanel/VizPanelRenderer.js +285 -0
  28. package/dist/esm/dist/esm/components/VizPanel/VizPanelSeriesLimit.js +45 -0
  29. package/dist/esm/dist/esm/components/VizPanel/colorSeriesConfigFactory.js +72 -0
  30. package/dist/esm/dist/esm/components/VizPanel/registerRuntimePanelPlugin.js +11 -0
  31. package/dist/esm/dist/esm/components/VizPanel/seriesVisibilityConfigFactory.js +164 -0
  32. package/dist/esm/dist/esm/components/layout/CSSGrid/SceneCSSGridLayout.js +124 -0
  33. package/dist/esm/dist/esm/components/layout/LazyLoader.js +103 -0
  34. package/dist/esm/dist/esm/components/layout/SceneFlexLayout.js +135 -0
  35. package/dist/esm/dist/esm/components/layout/grid/SceneGridItem.js +30 -0
  36. package/dist/esm/dist/esm/components/layout/grid/SceneGridLayout.js +283 -0
  37. package/dist/esm/dist/esm/components/layout/grid/SceneGridLayoutRenderer.js +178 -0
  38. package/dist/esm/dist/esm/components/layout/grid/SceneGridRow.js +190 -0
  39. package/dist/esm/dist/esm/components/layout/grid/constants.js +7 -0
  40. package/dist/esm/dist/esm/components/layout/grid/utils.js +36 -0
  41. package/dist/esm/dist/esm/components/layout/split/SplitLayout.js +17 -0
  42. package/dist/esm/dist/esm/components/layout/split/SplitLayoutRenderer.js +29 -0
  43. package/dist/esm/dist/esm/components/layout/split/Splitter.js +386 -0
  44. package/dist/esm/dist/esm/core/SceneComponentWrapper.js +57 -0
  45. package/dist/esm/dist/esm/core/SceneDataNode.js +43 -0
  46. package/dist/esm/dist/esm/core/SceneObjectBase.js +286 -0
  47. package/dist/esm/dist/esm/core/SceneObjectRef.js +32 -0
  48. package/dist/esm/dist/esm/core/SceneTimeRange.js +231 -0
  49. package/dist/esm/dist/esm/core/events.js +11 -0
  50. package/dist/esm/dist/esm/core/sceneGraph/getTimeRange.js +10 -0
  51. package/dist/esm/dist/esm/core/sceneGraph/index.js +25 -0
  52. package/dist/esm/dist/esm/core/sceneGraph/sceneGraph.js +178 -0
  53. package/dist/esm/dist/esm/core/sceneGraph/utils.js +64 -0
  54. package/dist/esm/dist/esm/core/types.js +15 -0
  55. package/dist/esm/dist/esm/querying/DataLayersMerger.js +46 -0
  56. package/dist/esm/dist/esm/querying/ExtraQueryProvider.js +6 -0
  57. package/dist/esm/dist/esm/querying/RuntimeDataSource.js +6 -0
  58. package/dist/esm/dist/esm/querying/SceneDataLayerSet.js +100 -0
  59. package/dist/esm/dist/esm/querying/SceneQueryRunner.js +468 -0
  60. package/dist/esm/dist/esm/querying/extraQueryProcessingOperator.js +46 -0
  61. package/dist/esm/dist/esm/querying/getEnrichedDataRequest.js +12 -0
  62. package/dist/esm/dist/esm/querying/layers/SceneDataLayerBase.js +112 -0
  63. package/dist/esm/dist/esm/querying/layers/SceneDataLayerControls.js +51 -0
  64. package/dist/esm/dist/esm/querying/layers/annotations/AnnotationsDataLayer.js +130 -0
  65. package/dist/esm/dist/esm/querying/layers/annotations/filterAnnotations.js +85 -0
  66. package/dist/esm/dist/esm/querying/layers/annotations/standardAnnotationQuery.js +121 -0
  67. package/dist/esm/dist/esm/querying/layers/annotations/standardAnnotationsSupport.js +211 -0
  68. package/dist/esm/dist/esm/querying/layers/annotations/utils.js +77 -0
  69. package/dist/esm/dist/esm/querying/registerQueryWithController.js +41 -0
  70. package/dist/esm/dist/esm/services/SceneObjectUrlSyncConfig.js +30 -0
  71. package/dist/esm/dist/esm/services/UniqueUrlKeyMapper.js +45 -0
  72. package/dist/esm/dist/esm/services/UrlSyncManager.js +167 -0
  73. package/dist/esm/dist/esm/services/useUrlSync.js +29 -0
  74. package/dist/esm/dist/esm/services/utils.js +71 -0
  75. package/dist/esm/dist/esm/utils/ControlsLabel.js +107 -0
  76. package/dist/esm/dist/esm/utils/LoadingIndicator.js +19 -0
  77. package/dist/esm/dist/esm/utils/SafeSerializableSceneObject.js +39 -0
  78. package/dist/esm/dist/esm/utils/compatibility/setWindowGrafanaSceneContext.js +16 -0
  79. package/dist/esm/dist/esm/utils/date.js +15 -0
  80. package/dist/esm/dist/esm/utils/evaluateTimeRange.js +16 -0
  81. package/dist/esm/dist/esm/utils/explore.js +47 -0
  82. package/dist/esm/dist/esm/utils/getCompareSeriesRefId.js +4 -0
  83. package/dist/esm/dist/esm/utils/getDataSource.js +18 -0
  84. package/dist/esm/dist/esm/utils/getMessageFromError.js +24 -0
  85. package/dist/esm/dist/esm/utils/metricTree.js +53 -0
  86. package/dist/esm/dist/esm/utils/parseUrlParam.js +41 -0
  87. package/dist/esm/dist/esm/utils/utils.js +11 -0
  88. package/dist/esm/dist/esm/utils/wrapInSafeSerializableSceneObject.js +30 -0
  89. package/dist/esm/dist/esm/utils/writeSceneLog.js +12 -0
  90. package/dist/esm/dist/esm/variables/VariableDependencyConfig.js +150 -0
  91. package/dist/esm/dist/esm/variables/VariableValueRecorder.js +71 -0
  92. package/dist/esm/dist/esm/variables/adhoc/AdHocFilterBuilder.js +24 -0
  93. package/dist/esm/dist/esm/variables/adhoc/AdHocFilterRenderer.js +303 -0
  94. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +162 -0
  95. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js +20 -0
  96. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +640 -0
  97. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +65 -0
  98. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js +146 -0
  99. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js +114 -0
  100. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/useFloatingInteractions.js +68 -0
  101. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/utils.js +146 -0
  102. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersVariable.js +289 -0
  103. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js +76 -0
  104. package/dist/esm/dist/esm/variables/adhoc/getAdhocOptionSearcher.js +13 -0
  105. package/dist/esm/dist/esm/variables/adhoc/patchGetAdhocFilters.js +47 -0
  106. package/dist/esm/dist/esm/variables/components/VariableValueControl.js +23 -0
  107. package/dist/esm/dist/esm/variables/components/VariableValueInput.js +33 -0
  108. package/dist/esm/dist/esm/variables/components/VariableValueSelect.js +228 -0
  109. package/dist/esm/dist/esm/variables/components/VariableValueSelectors.js +72 -0
  110. package/dist/esm/dist/esm/variables/components/getOptionSearcher.js +15 -0
  111. package/dist/esm/dist/esm/variables/constants.js +9 -0
  112. package/dist/esm/dist/esm/variables/getEnrichedFiltersRequest.js +12 -0
  113. package/dist/esm/dist/esm/variables/groupby/GroupByVariable.js +259 -0
  114. package/dist/esm/dist/esm/variables/groupby/GroupByVariableUrlSyncHandler.js +63 -0
  115. package/dist/esm/dist/esm/variables/groupby/findActiveGroupByVariablesByUid.js +13 -0
  116. package/dist/esm/dist/esm/variables/interpolation/ScopedVarsVariable.js +40 -0
  117. package/dist/esm/dist/esm/variables/interpolation/defaults.js +21 -0
  118. package/dist/esm/dist/esm/variables/interpolation/fieldAccessorCache.js +13 -0
  119. package/dist/esm/dist/esm/variables/interpolation/formatRegistry.js +296 -0
  120. package/dist/esm/dist/esm/variables/interpolation/sceneInterpolator.js +87 -0
  121. package/dist/esm/dist/esm/variables/lookupVariable.js +20 -0
  122. package/dist/esm/dist/esm/variables/macros/AllVariablesMacro.js +57 -0
  123. package/dist/esm/dist/esm/variables/macros/contextMacros.js +43 -0
  124. package/dist/esm/dist/esm/variables/macros/dataMacros.js +134 -0
  125. package/dist/esm/dist/esm/variables/macros/index.js +26 -0
  126. package/dist/esm/dist/esm/variables/macros/templateProxies.js +51 -0
  127. package/dist/esm/dist/esm/variables/macros/timeMacros.js +86 -0
  128. package/dist/esm/dist/esm/variables/macros/types.js +11 -0
  129. package/dist/esm/dist/esm/variables/macros/urlMacros.js +56 -0
  130. package/dist/esm/dist/esm/variables/sets/SceneVariableSet.js +254 -0
  131. package/dist/esm/dist/esm/variables/types.js +11 -0
  132. package/dist/esm/dist/esm/variables/utils.js +172 -0
  133. package/dist/esm/dist/esm/variables/variants/ConstantVariable.js +38 -0
  134. package/dist/esm/dist/esm/variables/variants/CustomVariable.js +60 -0
  135. package/dist/esm/dist/esm/variables/variants/DataSourceVariable.js +88 -0
  136. package/dist/esm/dist/esm/variables/variants/IntervalVariable.js +117 -0
  137. package/dist/esm/dist/esm/variables/variants/MultiValueVariable.js +295 -0
  138. package/dist/esm/dist/esm/variables/variants/TestVariable.js +117 -0
  139. package/dist/esm/dist/esm/variables/variants/TextBoxVariable.js +61 -0
  140. package/dist/esm/dist/esm/variables/variants/query/QueryVariable.js +139 -0
  141. package/dist/esm/dist/esm/variables/variants/query/createQueryVariableRunner.js +129 -0
  142. package/dist/esm/dist/esm/variables/variants/query/guards.js +28 -0
  143. package/dist/esm/dist/esm/variables/variants/query/toMetricFindValues.js +96 -0
  144. package/dist/esm/dist/esm/variables/variants/query/utils.js +124 -0
  145. package/dist/esm/index.js +1 -1
  146. package/dist/esm/index.js.map +1 -1
  147. package/dist/esm/querying/DataProviderSharer.js +39 -0
  148. package/dist/esm/src/behaviors/ActWhenVariableChanged.js +27 -0
  149. package/dist/esm/src/behaviors/CursorSync.js +76 -0
  150. package/dist/esm/src/behaviors/LiveNowTimer.js +44 -0
  151. package/dist/esm/src/behaviors/SceneQueryController.js +60 -0
  152. package/dist/esm/src/behaviors/index.js +5 -0
  153. package/dist/esm/src/components/EmbeddedScene.js +59 -0
  154. package/dist/esm/src/components/NestedScene.js +95 -0
  155. package/dist/esm/src/components/SceneApp/SceneApp.js +37 -0
  156. package/dist/esm/src/components/SceneApp/SceneAppPage.js +176 -0
  157. package/dist/esm/src/components/SceneApp/SceneAppPageView.js +104 -0
  158. package/dist/esm/src/components/SceneApp/utils.js +42 -0
  159. package/dist/esm/src/components/SceneByFrameRepeater.js +41 -0
  160. package/dist/esm/src/components/SceneByVariableRepeater.js +55 -0
  161. package/dist/esm/src/components/SceneCanvasText.js +32 -0
  162. package/dist/esm/src/components/SceneControlsSpacer.js +17 -0
  163. package/dist/esm/src/components/SceneDebugger/DebugDetails.js +82 -0
  164. package/dist/esm/src/components/SceneDebugger/DebugTreeNode.js +72 -0
  165. package/dist/esm/src/components/SceneDebugger/SceneDebugger.js +77 -0
  166. package/dist/esm/src/components/SceneReactObject.js +34 -0
  167. package/dist/esm/src/components/SceneRefreshPicker.js +205 -0
  168. package/dist/esm/src/components/SceneTimePicker.js +139 -0
  169. package/dist/esm/src/components/SceneTimeRangeCompare.js +240 -0
  170. package/dist/esm/src/components/SceneToolbarButton.js +33 -0
  171. package/dist/esm/src/components/VizPanel/VizPanel.js +406 -0
  172. package/dist/esm/src/components/VizPanel/VizPanelExploreButton.js +44 -0
  173. package/dist/esm/src/components/VizPanel/VizPanelMenu.js +59 -0
  174. package/dist/esm/src/components/VizPanel/VizPanelRenderer.js +285 -0
  175. package/dist/esm/src/components/VizPanel/VizPanelSeriesLimit.js +45 -0
  176. package/dist/esm/src/components/VizPanel/colorSeriesConfigFactory.js +72 -0
  177. package/dist/esm/src/components/VizPanel/registerRuntimePanelPlugin.js +56 -0
  178. package/dist/esm/src/components/VizPanel/seriesVisibilityConfigFactory.js +164 -0
  179. package/dist/esm/src/components/layout/CSSGrid/SceneCSSGridLayout.js +124 -0
  180. package/dist/esm/src/components/layout/LazyLoader.js +103 -0
  181. package/dist/esm/src/components/layout/SceneFlexLayout.js +135 -0
  182. package/dist/esm/src/components/layout/grid/SceneGridItem.js +30 -0
  183. package/dist/esm/src/components/layout/grid/SceneGridLayout.js +283 -0
  184. package/dist/esm/src/components/layout/grid/SceneGridLayoutRenderer.js +178 -0
  185. package/dist/esm/src/components/layout/grid/SceneGridRow.js +190 -0
  186. package/dist/esm/src/components/layout/grid/constants.js +7 -0
  187. package/dist/esm/src/components/layout/grid/utils.js +36 -0
  188. package/dist/esm/src/components/layout/split/SplitLayout.js +17 -0
  189. package/dist/esm/src/components/layout/split/SplitLayoutRenderer.js +29 -0
  190. package/dist/esm/src/components/layout/split/Splitter.js +386 -0
  191. package/dist/esm/src/core/PanelBuilders/FieldConfigBuilder.js +100 -0
  192. package/dist/esm/src/core/PanelBuilders/FieldConfigBuilders.js +75 -0
  193. package/dist/esm/src/core/PanelBuilders/FieldConfigOverridesBuilder.js +75 -0
  194. package/dist/esm/src/core/PanelBuilders/PanelOptionsBuilder.js +22 -0
  195. package/dist/esm/src/core/PanelBuilders/PanelOptionsBuilders.js +85 -0
  196. package/dist/esm/src/core/PanelBuilders/StandardFieldConfigBuilders.js +52 -0
  197. package/dist/esm/src/core/PanelBuilders/VizConfigBuilder.js +78 -0
  198. package/dist/esm/src/core/PanelBuilders/VizConfigBuilders.js +114 -0
  199. package/dist/esm/src/core/PanelBuilders/VizPanelBuilder.js +162 -0
  200. package/dist/esm/src/core/PanelBuilders/index.js +116 -0
  201. package/dist/esm/src/core/SceneComponentWrapper.js +57 -0
  202. package/dist/esm/src/core/SceneDataNode.js +43 -0
  203. package/dist/esm/src/core/SceneObjectBase.js +286 -0
  204. package/dist/esm/src/core/SceneObjectRef.js +32 -0
  205. package/dist/esm/src/core/SceneTimeRange.js +231 -0
  206. package/dist/esm/src/core/SceneTimeRangeTransformerBase.js +35 -0
  207. package/dist/esm/src/core/SceneTimeZoneOverride.js +63 -0
  208. package/dist/esm/src/core/events.js +11 -0
  209. package/dist/esm/src/core/sceneGraph/getTimeRange.js +10 -0
  210. package/dist/esm/src/core/sceneGraph/index.js +25 -0
  211. package/dist/esm/src/core/sceneGraph/sceneGraph.js +178 -0
  212. package/dist/esm/src/core/sceneGraph/utils.js +64 -0
  213. package/dist/esm/src/core/types.js +15 -0
  214. package/dist/esm/src/index.js +108 -0
  215. package/dist/esm/src/querying/DataLayersMerger.js +46 -0
  216. package/dist/esm/src/querying/DataProviderProxy.js +37 -0
  217. package/dist/esm/src/querying/DataProviderSharer.js +108 -0
  218. package/dist/esm/src/querying/ExtraQueryProvider.js +6 -0
  219. package/dist/esm/src/querying/RuntimeDataSource.js +49 -0
  220. package/dist/esm/src/querying/SceneDataLayerSet.js +100 -0
  221. package/dist/esm/src/querying/SceneDataTransformer.js +178 -0
  222. package/dist/esm/src/querying/SceneQueryRunner.js +468 -0
  223. package/dist/esm/src/querying/extraQueryProcessingOperator.js +46 -0
  224. package/dist/esm/src/querying/getEnrichedDataRequest.js +12 -0
  225. package/dist/esm/src/querying/layers/SceneDataLayerBase.js +112 -0
  226. package/dist/esm/src/querying/layers/SceneDataLayerControls.js +51 -0
  227. package/dist/esm/src/querying/layers/annotations/AnnotationsDataLayer.js +130 -0
  228. package/dist/esm/src/querying/layers/annotations/filterAnnotations.js +85 -0
  229. package/dist/esm/src/querying/layers/annotations/standardAnnotationQuery.js +121 -0
  230. package/dist/esm/src/querying/layers/annotations/standardAnnotationsSupport.js +211 -0
  231. package/dist/esm/src/querying/layers/annotations/utils.js +77 -0
  232. package/dist/esm/src/querying/layers/index.js +2 -0
  233. package/dist/esm/src/querying/registerQueryWithController.js +41 -0
  234. package/dist/esm/src/services/SceneObjectUrlSyncConfig.js +30 -0
  235. package/dist/esm/src/services/UniqueUrlKeyMapper.js +45 -0
  236. package/dist/esm/src/services/UrlSyncContextProvider.js +17 -0
  237. package/dist/esm/src/services/UrlSyncManager.js +167 -0
  238. package/dist/esm/src/services/useUrlSync.js +29 -0
  239. package/dist/esm/src/services/utils.js +75 -0
  240. package/dist/esm/src/utils/ControlsLabel.js +107 -0
  241. package/dist/esm/src/utils/LoadingIndicator.js +19 -0
  242. package/dist/esm/src/utils/SafeSerializableSceneObject.js +39 -0
  243. package/dist/esm/src/utils/compatibility/setWindowGrafanaSceneContext.js +16 -0
  244. package/dist/esm/src/utils/date.js +15 -0
  245. package/dist/esm/src/utils/evaluateTimeRange.js +16 -0
  246. package/dist/esm/src/utils/explore.js +47 -0
  247. package/dist/esm/src/utils/getCompareSeriesRefId.js +4 -0
  248. package/dist/esm/src/utils/getDataSource.js +18 -0
  249. package/dist/esm/src/utils/getMessageFromError.js +24 -0
  250. package/dist/esm/src/utils/metricTree.js +53 -0
  251. package/dist/esm/src/utils/parseUrlParam.js +41 -0
  252. package/dist/esm/src/utils/utils.js +11 -0
  253. package/dist/esm/src/utils/wrapInSafeSerializableSceneObject.js +30 -0
  254. package/dist/esm/src/utils/writeSceneLog.js +12 -0
  255. package/dist/esm/src/variables/VariableDependencyConfig.js +150 -0
  256. package/dist/esm/src/variables/VariableValueRecorder.js +71 -0
  257. package/dist/esm/src/variables/adhoc/AdHocFilterBuilder.js +24 -0
  258. package/dist/esm/src/variables/adhoc/AdHocFilterRenderer.js +303 -0
  259. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +162 -0
  260. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js +20 -0
  261. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +640 -0
  262. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +65 -0
  263. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js +146 -0
  264. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js +114 -0
  265. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/useFloatingInteractions.js +68 -0
  266. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/utils.js +146 -0
  267. package/dist/esm/src/variables/adhoc/AdHocFiltersVariable.js +289 -0
  268. package/dist/esm/src/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js +76 -0
  269. package/dist/esm/src/variables/adhoc/getAdhocOptionSearcher.js +13 -0
  270. package/dist/esm/src/variables/adhoc/patchGetAdhocFilters.js +47 -0
  271. package/dist/esm/src/variables/components/VariableValueControl.js +23 -0
  272. package/dist/esm/src/variables/components/VariableValueInput.js +33 -0
  273. package/dist/esm/src/variables/components/VariableValueSelect.js +228 -0
  274. package/dist/esm/src/variables/components/VariableValueSelectors.js +72 -0
  275. package/dist/esm/src/variables/components/getOptionSearcher.js +15 -0
  276. package/dist/esm/src/variables/constants.js +9 -0
  277. package/dist/esm/src/variables/getEnrichedFiltersRequest.js +12 -0
  278. package/dist/esm/src/variables/groupby/GroupByVariable.js +259 -0
  279. package/dist/esm/src/variables/groupby/GroupByVariableUrlSyncHandler.js +63 -0
  280. package/dist/esm/src/variables/groupby/findActiveGroupByVariablesByUid.js +13 -0
  281. package/dist/esm/src/variables/interpolation/ScopedVarsVariable.js +40 -0
  282. package/dist/esm/src/variables/interpolation/defaults.js +21 -0
  283. package/dist/esm/src/variables/interpolation/fieldAccessorCache.js +13 -0
  284. package/dist/esm/src/variables/interpolation/formatRegistry.js +296 -0
  285. package/dist/esm/src/variables/interpolation/sceneInterpolator.js +87 -0
  286. package/dist/esm/src/variables/lookupVariable.js +20 -0
  287. package/dist/esm/src/variables/macros/AllVariablesMacro.js +57 -0
  288. package/dist/esm/src/variables/macros/contextMacros.js +43 -0
  289. package/dist/esm/src/variables/macros/dataMacros.js +134 -0
  290. package/dist/esm/src/variables/macros/index.js +35 -0
  291. package/dist/esm/src/variables/macros/templateProxies.js +51 -0
  292. package/dist/esm/src/variables/macros/timeMacros.js +86 -0
  293. package/dist/esm/src/variables/macros/types.js +11 -0
  294. package/dist/esm/src/variables/macros/urlMacros.js +56 -0
  295. package/dist/esm/src/variables/sets/SceneVariableSet.js +254 -0
  296. package/dist/esm/src/variables/types.js +11 -0
  297. package/dist/esm/src/variables/utils.js +172 -0
  298. package/dist/esm/src/variables/variants/ConstantVariable.js +38 -0
  299. package/dist/esm/src/variables/variants/CustomVariable.js +60 -0
  300. package/dist/esm/src/variables/variants/DataSourceVariable.js +88 -0
  301. package/dist/esm/src/variables/variants/IntervalVariable.js +117 -0
  302. package/dist/esm/src/variables/variants/JsonVariable.js +193 -0
  303. package/dist/esm/src/variables/variants/LocalValueVariable.js +56 -0
  304. package/dist/esm/src/variables/variants/MultiValueVariable.js +295 -0
  305. package/dist/esm/src/variables/variants/TestVariable.js +117 -0
  306. package/dist/esm/src/variables/variants/TextBoxVariable.js +61 -0
  307. package/dist/esm/src/variables/variants/guards.js +27 -0
  308. package/dist/esm/src/variables/variants/query/QueryVariable.js +139 -0
  309. package/dist/esm/src/variables/variants/query/createQueryVariableRunner.js +129 -0
  310. package/dist/esm/src/variables/variants/query/guards.js +28 -0
  311. package/dist/esm/src/variables/variants/query/toMetricFindValues.js +96 -0
  312. package/dist/esm/src/variables/variants/query/utils.js +124 -0
  313. package/dist/esm/variables/components/VariableValueSelect.js +13 -9
  314. package/dist/esm/variables/components/VariableValueSelect.js.map +1 -1
  315. package/dist/esm/variables/variants/ConstantVariable.js +22 -0
  316. package/dist/esm/variables/variants/ConstantVariable.js.map +1 -1
  317. package/dist/esm/variables/variants/CustomVariable.js +3 -2
  318. package/dist/esm/variables/variants/CustomVariable.js.map +1 -1
  319. package/dist/esm/variables/variants/DataSourceVariable.js +3 -2
  320. package/dist/esm/variables/variants/DataSourceVariable.js.map +1 -1
  321. package/dist/esm/variables/variants/JsonVariable.js +96 -0
  322. package/dist/esm/variables/variants/TestVariable.js +3 -2
  323. package/dist/esm/variables/variants/TestVariable.js.map +1 -1
  324. package/dist/esm/variables/variants/json/JsonVariable.js +95 -0
  325. package/dist/esm/variables/variants/json/JsonVariableOptionProviders.js +70 -0
  326. package/dist/esm/variables/variants/query/QueryVariable.js +3 -2
  327. package/dist/esm/variables/variants/query/QueryVariable.js.map +1 -1
  328. package/dist/index.d.ts +14 -6
  329. package/dist/index.js +35 -13
  330. package/dist/index.js.map +1 -1
  331. package/package.json +2 -2
@@ -0,0 +1,303 @@
1
+ import React, { useState, useMemo } from 'react';
2
+ import { isMultiValueOperator } from './AdHocFiltersVariable.js';
3
+ import { useStyles2, Select, Field, Button } from '@grafana/ui';
4
+ import { cx, css } from '@emotion/css';
5
+ import { ControlsLabel } from '../../utils/ControlsLabel.js';
6
+ import { getAdhocOptionSearcher } from './getAdhocOptionSearcher.js';
7
+ import { handleOptionGroups } from '../utils.js';
8
+ import { OptionWithCheckbox } from '../components/VariableValueSelect.js';
9
+
10
+ var __defProp = Object.defineProperty;
11
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
12
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
13
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
14
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
15
+ var __spreadValues = (a, b) => {
16
+ for (var prop in b || (b = {}))
17
+ if (__hasOwnProp.call(b, prop))
18
+ __defNormalProp(a, prop, b[prop]);
19
+ if (__getOwnPropSymbols)
20
+ for (var prop of __getOwnPropSymbols(b)) {
21
+ if (__propIsEnum.call(b, prop))
22
+ __defNormalProp(a, prop, b[prop]);
23
+ }
24
+ return a;
25
+ };
26
+ function keyLabelToOption(key, label) {
27
+ return key !== "" ? {
28
+ value: key,
29
+ label: label || key
30
+ } : null;
31
+ }
32
+ const filterNoOp = () => true;
33
+ function AdHocFilterRenderer({ filter, model }) {
34
+ var _a, _b, _c, _d, _e;
35
+ const styles = useStyles2(getStyles);
36
+ const [keys, setKeys] = useState([]);
37
+ const [values, setValues] = useState([]);
38
+ const [isKeysLoading, setIsKeysLoading] = useState(false);
39
+ const [isValuesLoading, setIsValuesLoading] = useState(false);
40
+ const [isKeysOpen, setIsKeysOpen] = useState(false);
41
+ const [isValuesOpen, setIsValuesOpen] = useState(false);
42
+ const [isOperatorOpen, setIsOperatorOpen] = useState(false);
43
+ const [valueInputValue, setValueInputValue] = useState("");
44
+ const [valueHasCustomValue, setValueHasCustomValue] = useState(false);
45
+ const [uncommittedValue, setUncommittedValue] = useState(
46
+ filter.values ? filter.values.map((value, index) => {
47
+ var _a2;
48
+ return keyLabelToOption(value, (_a2 = filter.valueLabels) == null ? void 0 : _a2[index]);
49
+ }) : []
50
+ );
51
+ const isMultiValue = isMultiValueOperator(filter.operator);
52
+ const keyValue = keyLabelToOption(filter.key, filter.keyLabel);
53
+ const valueValue = keyLabelToOption(filter.value, (_a = filter.valueLabels) == null ? void 0 : _a[0]);
54
+ const optionSearcher = useMemo(() => getAdhocOptionSearcher(values), [values]);
55
+ const onValueInputChange = (value, { action }) => {
56
+ if (action === "input-change") {
57
+ setValueInputValue(value);
58
+ }
59
+ return value;
60
+ };
61
+ const onOperatorChange = (v) => {
62
+ var _a2, _b2;
63
+ const existingOperator = filter.operator;
64
+ const newOperator = v.value;
65
+ const update = { operator: newOperator };
66
+ if (isMultiValueOperator(existingOperator) && !isMultiValueOperator(newOperator)) {
67
+ update.value = "";
68
+ update.valueLabels = [""];
69
+ update.values = void 0;
70
+ setUncommittedValue([]);
71
+ } else if (!isMultiValueOperator(existingOperator) && isMultiValueOperator(newOperator) && filter.value) {
72
+ update.values = [filter.value];
73
+ setUncommittedValue([
74
+ {
75
+ value: filter.value,
76
+ label: (_b2 = (_a2 = filter.valueLabels) == null ? void 0 : _a2[0]) != null ? _b2 : filter.value
77
+ }
78
+ ]);
79
+ }
80
+ model._updateFilter(filter, update);
81
+ };
82
+ const filteredValueOptions = useMemo(
83
+ () => handleOptionGroups(optionSearcher(valueInputValue)),
84
+ [optionSearcher, valueInputValue]
85
+ );
86
+ const multiValueProps = {
87
+ isMulti: true,
88
+ value: uncommittedValue,
89
+ components: {
90
+ Option: OptionWithCheckbox
91
+ },
92
+ hideSelectedOptions: false,
93
+ closeMenuOnSelect: false,
94
+ openMenuOnFocus: false,
95
+ onChange: (v) => {
96
+ setUncommittedValue(v);
97
+ if (v.some((value) => value.__isNew__)) {
98
+ setValueInputValue("");
99
+ }
100
+ },
101
+ onBlur: () => {
102
+ var _a2, _b2;
103
+ model._updateFilter(filter, {
104
+ value: (_b2 = (_a2 = uncommittedValue[0]) == null ? void 0 : _a2.value) != null ? _b2 : "",
105
+ values: uncommittedValue.map((option) => option.value),
106
+ valueLabels: uncommittedValue.map((option) => option.label)
107
+ });
108
+ }
109
+ };
110
+ const valueSelect = /* @__PURE__ */ React.createElement(Select, __spreadValues({
111
+ virtualized: true,
112
+ allowCustomValue: (_b = model.state.allowCustomValue) != null ? _b : true,
113
+ isValidNewOption: (inputValue) => inputValue.trim().length > 0,
114
+ allowCreateWhileLoading: true,
115
+ formatCreateLabel: (inputValue) => `Use custom value: ${inputValue}`,
116
+ disabled: model.state.readOnly,
117
+ className: cx(styles.value, isValuesOpen ? styles.widthWhenOpen : void 0),
118
+ width: "auto",
119
+ value: valueValue,
120
+ filterOption: filterNoOp,
121
+ placeholder: "Select value",
122
+ options: filteredValueOptions,
123
+ inputValue: valueInputValue,
124
+ onInputChange: onValueInputChange,
125
+ onChange: (v) => {
126
+ model._updateFilter(filter, {
127
+ value: v.value,
128
+ valueLabels: v.label ? [v.label] : [v.value]
129
+ });
130
+ if (valueHasCustomValue !== v.__isNew__) {
131
+ setValueHasCustomValue(v.__isNew__);
132
+ }
133
+ },
134
+ isOpen: isValuesOpen && !isValuesLoading,
135
+ isLoading: isValuesLoading,
136
+ openMenuOnFocus: true,
137
+ onOpenMenu: async () => {
138
+ var _a2;
139
+ setIsValuesLoading(true);
140
+ setIsValuesOpen(true);
141
+ const values2 = await model._getValuesFor(filter);
142
+ setIsValuesLoading(false);
143
+ setValues(values2);
144
+ if (valueHasCustomValue) {
145
+ setValueInputValue((_a2 = valueValue == null ? void 0 : valueValue.label) != null ? _a2 : "");
146
+ }
147
+ },
148
+ onCloseMenu: () => {
149
+ setIsValuesOpen(false);
150
+ setValueInputValue("");
151
+ }
152
+ }, isMultiValue && multiValueProps));
153
+ const keySelect = /* @__PURE__ */ React.createElement(Select, {
154
+ key: `${isValuesLoading ? "loading" : "loaded"}`,
155
+ disabled: model.state.readOnly,
156
+ className: cx(styles.key, isKeysOpen ? styles.widthWhenOpen : void 0),
157
+ width: "auto",
158
+ allowCustomValue: (_c = model.state.allowCustomValue) != null ? _c : true,
159
+ value: keyValue,
160
+ placeholder: "Select label",
161
+ options: handleOptionGroups(keys),
162
+ onChange: (v) => {
163
+ model._updateFilter(filter, {
164
+ key: v.value,
165
+ keyLabel: v.label,
166
+ value: "",
167
+ valueLabels: [""],
168
+ values: void 0
169
+ });
170
+ setUncommittedValue([]);
171
+ },
172
+ autoFocus: filter.key === "",
173
+ isOpen: isKeysOpen && !isKeysLoading,
174
+ isLoading: isKeysLoading,
175
+ onOpenMenu: async () => {
176
+ setIsKeysOpen(true);
177
+ setIsKeysLoading(true);
178
+ const keys2 = await model._getKeys(filter.key);
179
+ setIsKeysLoading(false);
180
+ setKeys(keys2);
181
+ },
182
+ onCloseMenu: () => {
183
+ setIsKeysOpen(false);
184
+ },
185
+ onBlur: () => {
186
+ if (filter.key === "") {
187
+ model._removeFilter(filter);
188
+ }
189
+ },
190
+ openMenuOnFocus: true
191
+ });
192
+ const operatorSelect = /* @__PURE__ */ React.createElement(Select, {
193
+ className: cx(styles.operator, {
194
+ [styles.widthWhenOpen]: isOperatorOpen
195
+ }),
196
+ value: filter.operator,
197
+ disabled: model.state.readOnly,
198
+ options: model._getOperators(),
199
+ onChange: onOperatorChange,
200
+ onOpenMenu: () => {
201
+ setIsOperatorOpen(true);
202
+ },
203
+ onCloseMenu: () => {
204
+ setIsOperatorOpen(false);
205
+ }
206
+ });
207
+ if (model.state.layout === "vertical") {
208
+ if (filter.key) {
209
+ const label = /* @__PURE__ */ React.createElement(ControlsLabel, {
210
+ layout: "vertical",
211
+ label: (_d = filter.key) != null ? _d : "",
212
+ onRemove: () => model._removeFilter(filter)
213
+ });
214
+ return /* @__PURE__ */ React.createElement(Field, {
215
+ label,
216
+ "data-testid": `AdHocFilter-${filter.key}`,
217
+ className: styles.field
218
+ }, /* @__PURE__ */ React.createElement("div", {
219
+ className: styles.wrapper
220
+ }, operatorSelect, valueSelect));
221
+ } else {
222
+ return /* @__PURE__ */ React.createElement(Field, {
223
+ label: "Select label",
224
+ "data-testid": `AdHocFilter-${filter.key}`,
225
+ className: styles.field
226
+ }, keySelect);
227
+ }
228
+ }
229
+ return /* @__PURE__ */ React.createElement("div", {
230
+ className: styles.wrapper,
231
+ "data-testid": `AdHocFilter-${filter.key}`
232
+ }, keySelect, operatorSelect, valueSelect, /* @__PURE__ */ React.createElement(Button, {
233
+ variant: "secondary",
234
+ "aria-label": "Remove filter",
235
+ title: "Remove filter",
236
+ className: styles.removeButton,
237
+ icon: "times",
238
+ "data-testid": `AdHocFilter-remove-${(_e = filter.key) != null ? _e : ""}`,
239
+ onClick: () => model._removeFilter(filter)
240
+ }));
241
+ }
242
+ const getStyles = (theme) => ({
243
+ field: css({
244
+ marginBottom: 0
245
+ }),
246
+ wrapper: css({
247
+ display: "flex",
248
+ "> *": {
249
+ "&:not(:first-child)": {
250
+ marginLeft: -1
251
+ },
252
+ "&:first-child": {
253
+ borderTopRightRadius: 0,
254
+ borderBottomRightRadius: 0
255
+ },
256
+ "&:last-child": {
257
+ borderTopLeftRadius: 0,
258
+ borderBottomLeftRadius: 0
259
+ },
260
+ "&:not(:first-child):not(:last-child)": {
261
+ borderRadius: 0
262
+ },
263
+ position: "relative",
264
+ zIndex: 0,
265
+ "&:hover": {
266
+ zIndex: 1
267
+ },
268
+ "&:focus-within": {
269
+ zIndex: 2
270
+ }
271
+ }
272
+ }),
273
+ widthWhenOpen: css({
274
+ minWidth: theme.spacing(16)
275
+ }),
276
+ value: css({
277
+ flexBasis: "content",
278
+ flexShrink: 1,
279
+ minWidth: "90px"
280
+ }),
281
+ key: css({
282
+ flexBasis: "content",
283
+ minWidth: "90px",
284
+ flexShrink: 1
285
+ }),
286
+ operator: css({
287
+ flexShrink: 0,
288
+ flexBasis: "content"
289
+ }),
290
+ removeButton: css({
291
+ paddingLeft: theme.spacing(3 / 2),
292
+ paddingRight: theme.spacing(3 / 2),
293
+ borderLeft: "none",
294
+ width: theme.spacing(3),
295
+ marginRight: theme.spacing(1),
296
+ boxSizing: "border-box",
297
+ position: "relative",
298
+ left: "1px"
299
+ })
300
+ });
301
+
302
+ export { AdHocFilterRenderer };
303
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWRIb2NGaWx0ZXJSZW5kZXJlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3ZhcmlhYmxlcy9hZGhvYy9BZEhvY0ZpbHRlclJlbmRlcmVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7IEFkSG9jRmlsdGVyc1ZhcmlhYmxlLCBBZEhvY0ZpbHRlcldpdGhMYWJlbHMsIGlzTXVsdGlWYWx1ZU9wZXJhdG9yIH0gZnJvbSAnLi9BZEhvY0ZpbHRlcnNWYXJpYWJsZSc7XG5pbXBvcnQgeyBHcmFmYW5hVGhlbWUyLCBTZWxlY3RhYmxlVmFsdWUgfSBmcm9tICdAZ3JhZmFuYS9kYXRhJztcbmltcG9ydCB7IEJ1dHRvbiwgRmllbGQsIElucHV0QWN0aW9uTWV0YSwgU2VsZWN0LCB1c2VTdHlsZXMyIH0gZnJvbSAnQGdyYWZhbmEvdWknO1xuaW1wb3J0IHsgY3NzLCBjeCB9IGZyb20gJ0BlbW90aW9uL2Nzcyc7XG5pbXBvcnQgeyBDb250cm9sc0xhYmVsIH0gZnJvbSAnLi4vLi4vdXRpbHMvQ29udHJvbHNMYWJlbCc7XG5pbXBvcnQgeyBnZXRBZGhvY09wdGlvblNlYXJjaGVyIH0gZnJvbSAnLi9nZXRBZGhvY09wdGlvblNlYXJjaGVyJztcbmltcG9ydCB7IGhhbmRsZU9wdGlvbkdyb3VwcyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IE9wdGlvbldpdGhDaGVja2JveCB9IGZyb20gJy4uL2NvbXBvbmVudHMvVmFyaWFibGVWYWx1ZVNlbGVjdCc7XG5cbmludGVyZmFjZSBQcm9wcyB7XG4gIGZpbHRlcjogQWRIb2NGaWx0ZXJXaXRoTGFiZWxzO1xuICBtb2RlbDogQWRIb2NGaWx0ZXJzVmFyaWFibGU7XG59XG5cbmZ1bmN0aW9uIGtleUxhYmVsVG9PcHRpb24oa2V5OiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nKTogU2VsZWN0YWJsZVZhbHVlIHwgbnVsbCB7XG4gIHJldHVybiBrZXkgIT09ICcnXG4gICAgPyB7XG4gICAgICAgIHZhbHVlOiBrZXksXG4gICAgICAgIGxhYmVsOiBsYWJlbCB8fCBrZXksXG4gICAgICB9XG4gICAgOiBudWxsO1xufVxuXG5jb25zdCBmaWx0ZXJOb09wID0gKCkgPT4gdHJ1ZTtcblxuZXhwb3J0IGZ1bmN0aW9uIEFkSG9jRmlsdGVyUmVuZGVyZXIoeyBmaWx0ZXIsIG1vZGVsIH06IFByb3BzKSB7XG4gIGNvbnN0IHN0eWxlcyA9IHVzZVN0eWxlczIoZ2V0U3R5bGVzKTtcblxuICBjb25zdCBba2V5cywgc2V0S2V5c10gPSB1c2VTdGF0ZTxTZWxlY3RhYmxlVmFsdWVbXT4oW10pO1xuICBjb25zdCBbdmFsdWVzLCBzZXRWYWx1ZXNdID0gdXNlU3RhdGU8U2VsZWN0YWJsZVZhbHVlW10+KFtdKTtcbiAgY29uc3QgW2lzS2V5c0xvYWRpbmcsIHNldElzS2V5c0xvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaXNWYWx1ZXNMb2FkaW5nLCBzZXRJc1ZhbHVlc0xvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaXNLZXlzT3Blbiwgc2V0SXNLZXlzT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc1ZhbHVlc09wZW4sIHNldElzVmFsdWVzT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc09wZXJhdG9yT3Blbiwgc2V0SXNPcGVyYXRvck9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbdmFsdWVJbnB1dFZhbHVlLCBzZXRWYWx1ZUlucHV0VmFsdWVdID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCBbdmFsdWVIYXNDdXN0b21WYWx1ZSwgc2V0VmFsdWVIYXNDdXN0b21WYWx1ZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIC8vIFRvIG5vdCB0cmlnZ2VyIHF1ZXJpZXMgb24gZXZlcnkgc2VsZWN0aW9uIHdlIHN0b3JlIHRoaXMgc3RhdGUgbG9jYWxseSBoZXJlIGFuZCBvbmx5IHVwZGF0ZSB0aGUgdmFyaWFibGUgb25CbHVyXG4gIGNvbnN0IFt1bmNvbW1pdHRlZFZhbHVlLCBzZXRVbmNvbW1pdHRlZFZhbHVlXSA9IHVzZVN0YXRlPFNlbGVjdGFibGVWYWx1ZT4oXG4gICAgZmlsdGVyLnZhbHVlcyA/IGZpbHRlci52YWx1ZXMubWFwKCh2YWx1ZSwgaW5kZXgpID0+IGtleUxhYmVsVG9PcHRpb24odmFsdWUsIGZpbHRlci52YWx1ZUxhYmVscz8uW2luZGV4XSkpIDogW11cbiAgKTtcbiAgY29uc3QgaXNNdWx0aVZhbHVlID0gaXNNdWx0aVZhbHVlT3BlcmF0b3IoZmlsdGVyLm9wZXJhdG9yKTtcblxuICBjb25zdCBrZXlWYWx1ZSA9IGtleUxhYmVsVG9PcHRpb24oZmlsdGVyLmtleSwgZmlsdGVyLmtleUxhYmVsKTtcbiAgY29uc3QgdmFsdWVWYWx1ZSA9IGtleUxhYmVsVG9PcHRpb24oZmlsdGVyLnZhbHVlLCBmaWx0ZXIudmFsdWVMYWJlbHM/LlswXSk7XG5cbiAgY29uc3Qgb3B0aW9uU2VhcmNoZXIgPSB1c2VNZW1vKCgpID0+IGdldEFkaG9jT3B0aW9uU2VhcmNoZXIodmFsdWVzKSwgW3ZhbHVlc10pO1xuXG4gIGNvbnN0IG9uVmFsdWVJbnB1dENoYW5nZSA9ICh2YWx1ZTogc3RyaW5nLCB7IGFjdGlvbiB9OiBJbnB1dEFjdGlvbk1ldGEpID0+IHtcbiAgICBpZiAoYWN0aW9uID09PSAnaW5wdXQtY2hhbmdlJykge1xuICAgICAgc2V0VmFsdWVJbnB1dFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xuXG4gIGNvbnN0IG9uT3BlcmF0b3JDaGFuZ2UgPSAodjogU2VsZWN0YWJsZVZhbHVlKSA9PiB7XG4gICAgY29uc3QgZXhpc3RpbmdPcGVyYXRvciA9IGZpbHRlci5vcGVyYXRvcjtcbiAgICBjb25zdCBuZXdPcGVyYXRvciA9IHYudmFsdWU7XG5cbiAgICBjb25zdCB1cGRhdGU6IFBhcnRpYWw8QWRIb2NGaWx0ZXJXaXRoTGFiZWxzPiA9IHsgb3BlcmF0b3I6IG5ld09wZXJhdG9yIH07XG4gICAgLy8gY2xlYXIgdmFsdWUgaWYgb3BlcmF0b3IgaGFzIGNoYW5nZWQgZnJvbSBtdWx0aSB0byBzaW5nbGVcbiAgICBpZiAoaXNNdWx0aVZhbHVlT3BlcmF0b3IoZXhpc3RpbmdPcGVyYXRvcikgJiYgIWlzTXVsdGlWYWx1ZU9wZXJhdG9yKG5ld09wZXJhdG9yKSkge1xuICAgICAgdXBkYXRlLnZhbHVlID0gJyc7XG4gICAgICB1cGRhdGUudmFsdWVMYWJlbHMgPSBbJyddO1xuICAgICAgdXBkYXRlLnZhbHVlcyA9IHVuZGVmaW5lZDtcbiAgICAgIHNldFVuY29tbWl0dGVkVmFsdWUoW10pO1xuICAgICAgLy8gc2V0IHZhbHVlcyBpZiBvcGVyYXRvciBoYXMgY2hhbmdlZCBmcm9tIHNpbmdsZSB0byBtdWx0aVxuICAgIH0gZWxzZSBpZiAoIWlzTXVsdGlWYWx1ZU9wZXJhdG9yKGV4aXN0aW5nT3BlcmF0b3IpICYmIGlzTXVsdGlWYWx1ZU9wZXJhdG9yKG5ld09wZXJhdG9yKSAmJiBmaWx0ZXIudmFsdWUpIHtcbiAgICAgIHVwZGF0ZS52YWx1ZXMgPSBbZmlsdGVyLnZhbHVlXTtcbiAgICAgIHNldFVuY29tbWl0dGVkVmFsdWUoW1xuICAgICAgICB7XG4gICAgICAgICAgdmFsdWU6IGZpbHRlci52YWx1ZSxcbiAgICAgICAgICBsYWJlbDogZmlsdGVyLnZhbHVlTGFiZWxzPy5bMF0gPz8gZmlsdGVyLnZhbHVlLFxuICAgICAgICB9LFxuICAgICAgXSk7XG4gICAgfVxuICAgIG1vZGVsLl91cGRhdGVGaWx0ZXIoZmlsdGVyLCB1cGRhdGUpO1xuICB9O1xuXG4gIGNvbnN0IGZpbHRlcmVkVmFsdWVPcHRpb25zID0gdXNlTWVtbyhcbiAgICAoKSA9PiBoYW5kbGVPcHRpb25Hcm91cHMob3B0aW9uU2VhcmNoZXIodmFsdWVJbnB1dFZhbHVlKSksXG4gICAgW29wdGlvblNlYXJjaGVyLCB2YWx1ZUlucHV0VmFsdWVdXG4gICk7XG5cbiAgY29uc3QgbXVsdGlWYWx1ZVByb3BzID0ge1xuICAgIGlzTXVsdGk6IHRydWUsXG4gICAgdmFsdWU6IHVuY29tbWl0dGVkVmFsdWUsXG4gICAgY29tcG9uZW50czoge1xuICAgICAgT3B0aW9uOiBPcHRpb25XaXRoQ2hlY2tib3gsXG4gICAgfSxcbiAgICBoaWRlU2VsZWN0ZWRPcHRpb25zOiBmYWxzZSxcbiAgICBjbG9zZU1lbnVPblNlbGVjdDogZmFsc2UsXG4gICAgb3Blbk1lbnVPbkZvY3VzOiBmYWxzZSxcbiAgICBvbkNoYW5nZTogKHY6IFNlbGVjdGFibGVWYWx1ZSkgPT4ge1xuICAgICAgc2V0VW5jb21taXR0ZWRWYWx1ZSh2KTtcbiAgICAgIC8vIGNsZWFyIGlucHV0IHZhbHVlIHdoZW4gY3JlYXRpbmcgYSBuZXcgY3VzdG9tIG11bHRpIHZhbHVlXG4gICAgICBpZiAodi5zb21lKCh2YWx1ZTogU2VsZWN0YWJsZVZhbHVlKSA9PiB2YWx1ZS5fX2lzTmV3X18pKSB7XG4gICAgICAgIHNldFZhbHVlSW5wdXRWYWx1ZSgnJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBvbkJsdXI6ICgpID0+IHtcbiAgICAgIG1vZGVsLl91cGRhdGVGaWx0ZXIoZmlsdGVyLCB7XG4gICAgICAgIHZhbHVlOiB1bmNvbW1pdHRlZFZhbHVlWzBdPy52YWx1ZSA/PyAnJyxcbiAgICAgICAgLy8gVE9ETyByZW1vdmUgZXhwZWN0LWVycm9yIHdoZW4gd2UncmUgb24gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIEBncmFmYW5hL2RhdGFcbiAgICAgICAgdmFsdWVzOiB1bmNvbW1pdHRlZFZhbHVlLm1hcCgob3B0aW9uOiBTZWxlY3RhYmxlVmFsdWU8c3RyaW5nPikgPT4gb3B0aW9uLnZhbHVlKSxcbiAgICAgICAgdmFsdWVMYWJlbHM6IHVuY29tbWl0dGVkVmFsdWUubWFwKChvcHRpb246IFNlbGVjdGFibGVWYWx1ZTxzdHJpbmc+KSA9PiBvcHRpb24ubGFiZWwpLFxuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCB2YWx1ZVNlbGVjdCA9IChcbiAgICA8U2VsZWN0XG4gICAgICB2aXJ0dWFsaXplZFxuICAgICAgYWxsb3dDdXN0b21WYWx1ZT17bW9kZWwuc3RhdGUuYWxsb3dDdXN0b21WYWx1ZSA/PyB0cnVlfVxuICAgICAgaXNWYWxpZE5ld09wdGlvbj17KGlucHV0VmFsdWUpID0+IGlucHV0VmFsdWUudHJpbSgpLmxlbmd0aCA+IDB9XG4gICAgICBhbGxvd0NyZWF0ZVdoaWxlTG9hZGluZ1xuICAgICAgZm9ybWF0Q3JlYXRlTGFiZWw9eyhpbnB1dFZhbHVlKSA9PiBgVXNlIGN1c3RvbSB2YWx1ZTogJHtpbnB1dFZhbHVlfWB9XG4gICAgICBkaXNhYmxlZD17bW9kZWwuc3RhdGUucmVhZE9ubHl9XG4gICAgICBjbGFzc05hbWU9e2N4KHN0eWxlcy52YWx1ZSwgaXNWYWx1ZXNPcGVuID8gc3R5bGVzLndpZHRoV2hlbk9wZW4gOiB1bmRlZmluZWQpfVxuICAgICAgd2lkdGg9XCJhdXRvXCJcbiAgICAgIHZhbHVlPXt2YWx1ZVZhbHVlfVxuICAgICAgZmlsdGVyT3B0aW9uPXtmaWx0ZXJOb09wfVxuICAgICAgcGxhY2Vob2xkZXI9eydTZWxlY3QgdmFsdWUnfVxuICAgICAgb3B0aW9ucz17ZmlsdGVyZWRWYWx1ZU9wdGlvbnN9XG4gICAgICBpbnB1dFZhbHVlPXt2YWx1ZUlucHV0VmFsdWV9XG4gICAgICBvbklucHV0Q2hhbmdlPXtvblZhbHVlSW5wdXRDaGFuZ2V9XG4gICAgICBvbkNoYW5nZT17KHYpID0+IHtcbiAgICAgICAgbW9kZWwuX3VwZGF0ZUZpbHRlcihmaWx0ZXIsIHtcbiAgICAgICAgICB2YWx1ZTogdi52YWx1ZSxcbiAgICAgICAgICB2YWx1ZUxhYmVsczogdi5sYWJlbCA/IFt2LmxhYmVsXSA6IFt2LnZhbHVlXSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHZhbHVlSGFzQ3VzdG9tVmFsdWUgIT09IHYuX19pc05ld19fKSB7XG4gICAgICAgICAgc2V0VmFsdWVIYXNDdXN0b21WYWx1ZSh2Ll9faXNOZXdfXyk7XG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICAvLyB0aGVyZSdzIGEgYnVnIGluIHJlYWN0LXNlbGVjdCB3aGVyZSB0aGUgbWVudSBkb2Vzbid0IHJlY2FsY3VsYXRlIGl0cyBwb3NpdGlvbiB3aGVuIHRoZSBvcHRpb25zIGFyZSBsb2FkZWQgYXN5bmNocm9ub3VzbHlcbiAgICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZ3JhZmFuYS9ncmFmYW5hL2lzc3Vlcy82MzU1OFxuICAgICAgLy8gaW5zdGVhZCwgd2UgZXhwbGljaXRseSBjb250cm9sIHRoZSBtZW51IHZpc2liaWxpdHkgYW5kIHByZXZlbnQgc2hvd2luZyBpdCB1bnRpbCB0aGUgb3B0aW9ucyBoYXZlIGZ1bGx5IGxvYWRlZFxuICAgICAgaXNPcGVuPXtpc1ZhbHVlc09wZW4gJiYgIWlzVmFsdWVzTG9hZGluZ31cbiAgICAgIGlzTG9hZGluZz17aXNWYWx1ZXNMb2FkaW5nfVxuICAgICAgb3Blbk1lbnVPbkZvY3VzPXt0cnVlfVxuICAgICAgb25PcGVuTWVudT17YXN5bmMgKCkgPT4ge1xuICAgICAgICBzZXRJc1ZhbHVlc0xvYWRpbmcodHJ1ZSk7XG4gICAgICAgIHNldElzVmFsdWVzT3Blbih0cnVlKTtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gYXdhaXQgbW9kZWwuX2dldFZhbHVlc0ZvcihmaWx0ZXIpO1xuICAgICAgICBzZXRJc1ZhbHVlc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgICBzZXRWYWx1ZXModmFsdWVzKTtcbiAgICAgICAgaWYgKHZhbHVlSGFzQ3VzdG9tVmFsdWUpIHtcbiAgICAgICAgICBzZXRWYWx1ZUlucHV0VmFsdWUodmFsdWVWYWx1ZT8ubGFiZWwgPz8gJycpO1xuICAgICAgICB9XG4gICAgICB9fVxuICAgICAgb25DbG9zZU1lbnU9eygpID0+IHtcbiAgICAgICAgc2V0SXNWYWx1ZXNPcGVuKGZhbHNlKTtcbiAgICAgICAgc2V0VmFsdWVJbnB1dFZhbHVlKCcnKTtcbiAgICAgIH19XG4gICAgICB7Li4uKGlzTXVsdGlWYWx1ZSAmJiBtdWx0aVZhbHVlUHJvcHMpfVxuICAgIC8+XG4gICk7XG5cbiAgY29uc3Qga2V5U2VsZWN0ID0gKFxuICAgIDxTZWxlY3RcbiAgICAgIC8vIEJ5IGNoYW5naW5nIHRoZSBrZXksIHdlIHJlc2V0IHRoZSBTZWxlY3QgY29tcG9uZW50LFxuICAgICAgLy8gdG8gZW5zdXJlIHRoYXQgdGhlIGxvYWRlZCB2YWx1ZXMgYXJlIHNob3duIGFmdGVyIHRoZXkgYXJlIGxvYWRlZFxuICAgICAga2V5PXtgJHtpc1ZhbHVlc0xvYWRpbmcgPyAnbG9hZGluZycgOiAnbG9hZGVkJ31gfVxuICAgICAgZGlzYWJsZWQ9e21vZGVsLnN0YXRlLnJlYWRPbmx5fVxuICAgICAgY2xhc3NOYW1lPXtjeChzdHlsZXMua2V5LCBpc0tleXNPcGVuID8gc3R5bGVzLndpZHRoV2hlbk9wZW4gOiB1bmRlZmluZWQpfVxuICAgICAgd2lkdGg9XCJhdXRvXCJcbiAgICAgIGFsbG93Q3VzdG9tVmFsdWU9e21vZGVsLnN0YXRlLmFsbG93Q3VzdG9tVmFsdWUgPz8gdHJ1ZX1cbiAgICAgIHZhbHVlPXtrZXlWYWx1ZX1cbiAgICAgIHBsYWNlaG9sZGVyPXsnU2VsZWN0IGxhYmVsJ31cbiAgICAgIG9wdGlvbnM9e2hhbmRsZU9wdGlvbkdyb3VwcyhrZXlzKX1cbiAgICAgIG9uQ2hhbmdlPXsodikgPT4ge1xuICAgICAgICBtb2RlbC5fdXBkYXRlRmlsdGVyKGZpbHRlciwge1xuICAgICAgICAgIGtleTogdi52YWx1ZSxcbiAgICAgICAgICBrZXlMYWJlbDogdi5sYWJlbCxcbiAgICAgICAgICAvLyBjbGVhciB2YWx1ZSBpZiBrZXkgaGFzIGNoYW5nZWRcbiAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgdmFsdWVMYWJlbHM6IFsnJ10sXG4gICAgICAgICAgdmFsdWVzOiB1bmRlZmluZWQsXG4gICAgICAgIH0pO1xuICAgICAgICBzZXRVbmNvbW1pdHRlZFZhbHVlKFtdKTtcbiAgICAgIH19XG4gICAgICBhdXRvRm9jdXM9e2ZpbHRlci5rZXkgPT09ICcnfVxuICAgICAgLy8gdGhlcmUncyBhIGJ1ZyBpbiByZWFjdC1zZWxlY3Qgd2hlcmUgdGhlIG1lbnUgZG9lc24ndCByZWNhbGN1bGF0ZSBpdHMgcG9zaXRpb24gd2hlbiB0aGUgb3B0aW9ucyBhcmUgbG9hZGVkIGFzeW5jaHJvbm91c2x5XG4gICAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2dyYWZhbmEvZ3JhZmFuYS9pc3N1ZXMvNjM1NThcbiAgICAgIC8vIGluc3RlYWQsIHdlIGV4cGxpY2l0bHkgY29udHJvbCB0aGUgbWVudSB2aXNpYmlsaXR5IGFuZCBwcmV2ZW50IHNob3dpbmcgaXQgdW50aWwgdGhlIG9wdGlvbnMgaGF2ZSBmdWxseSBsb2FkZWRcbiAgICAgIGlzT3Blbj17aXNLZXlzT3BlbiAmJiAhaXNLZXlzTG9hZGluZ31cbiAgICAgIGlzTG9hZGluZz17aXNLZXlzTG9hZGluZ31cbiAgICAgIG9uT3Blbk1lbnU9e2FzeW5jICgpID0+IHtcbiAgICAgICAgc2V0SXNLZXlzT3Blbih0cnVlKTtcbiAgICAgICAgc2V0SXNLZXlzTG9hZGluZyh0cnVlKTtcbiAgICAgICAgY29uc3Qga2V5cyA9IGF3YWl0IG1vZGVsLl9nZXRLZXlzKGZpbHRlci5rZXkpO1xuICAgICAgICBzZXRJc0tleXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgc2V0S2V5cyhrZXlzKTtcbiAgICAgIH19XG4gICAgICBvbkNsb3NlTWVudT17KCkgPT4ge1xuICAgICAgICBzZXRJc0tleXNPcGVuKGZhbHNlKTtcbiAgICAgIH19XG4gICAgICBvbkJsdXI9eygpID0+IHtcbiAgICAgICAgaWYgKGZpbHRlci5rZXkgPT09ICcnKSB7XG4gICAgICAgICAgbW9kZWwuX3JlbW92ZUZpbHRlcihmaWx0ZXIpO1xuICAgICAgICB9XG4gICAgICB9fVxuICAgICAgb3Blbk1lbnVPbkZvY3VzPXt0cnVlfVxuICAgIC8+XG4gICk7XG5cbiAgY29uc3Qgb3BlcmF0b3JTZWxlY3QgPSAoXG4gICAgPFNlbGVjdFxuICAgICAgY2xhc3NOYW1lPXtjeChzdHlsZXMub3BlcmF0b3IsIHtcbiAgICAgICAgW3N0eWxlcy53aWR0aFdoZW5PcGVuXTogaXNPcGVyYXRvck9wZW4sXG4gICAgICB9KX1cbiAgICAgIHZhbHVlPXtmaWx0ZXIub3BlcmF0b3J9XG4gICAgICBkaXNhYmxlZD17bW9kZWwuc3RhdGUucmVhZE9ubHl9XG4gICAgICBvcHRpb25zPXttb2RlbC5fZ2V0T3BlcmF0b3JzKCl9XG4gICAgICBvbkNoYW5nZT17b25PcGVyYXRvckNoYW5nZX1cbiAgICAgIG9uT3Blbk1lbnU9eygpID0+IHtcbiAgICAgICAgc2V0SXNPcGVyYXRvck9wZW4odHJ1ZSk7XG4gICAgICB9fVxuICAgICAgb25DbG9zZU1lbnU9eygpID0+IHtcbiAgICAgICAgc2V0SXNPcGVyYXRvck9wZW4oZmFsc2UpO1xuICAgICAgfX1cbiAgICAvPlxuICApO1xuXG4gIGlmIChtb2RlbC5zdGF0ZS5sYXlvdXQgPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICBpZiAoZmlsdGVyLmtleSkge1xuICAgICAgY29uc3QgbGFiZWwgPSAoXG4gICAgICAgIDxDb250cm9sc0xhYmVsIGxheW91dD1cInZlcnRpY2FsXCIgbGFiZWw9e2ZpbHRlci5rZXkgPz8gJyd9IG9uUmVtb3ZlPXsoKSA9PiBtb2RlbC5fcmVtb3ZlRmlsdGVyKGZpbHRlcil9IC8+XG4gICAgICApO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8RmllbGQgbGFiZWw9e2xhYmVsfSBkYXRhLXRlc3RpZD17YEFkSG9jRmlsdGVyLSR7ZmlsdGVyLmtleX1gfSBjbGFzc05hbWU9e3N0eWxlcy5maWVsZH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy53cmFwcGVyfT5cbiAgICAgICAgICAgIHtvcGVyYXRvclNlbGVjdH1cbiAgICAgICAgICAgIHt2YWx1ZVNlbGVjdH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9GaWVsZD5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxGaWVsZCBsYWJlbD17J1NlbGVjdCBsYWJlbCd9IGRhdGEtdGVzdGlkPXtgQWRIb2NGaWx0ZXItJHtmaWx0ZXIua2V5fWB9IGNsYXNzTmFtZT17c3R5bGVzLmZpZWxkfT5cbiAgICAgICAgICB7a2V5U2VsZWN0fVxuICAgICAgICA8L0ZpZWxkPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMud3JhcHBlcn0gZGF0YS10ZXN0aWQ9e2BBZEhvY0ZpbHRlci0ke2ZpbHRlci5rZXl9YH0+XG4gICAgICB7a2V5U2VsZWN0fVxuICAgICAge29wZXJhdG9yU2VsZWN0fVxuICAgICAge3ZhbHVlU2VsZWN0fVxuICAgICAgPEJ1dHRvblxuICAgICAgICB2YXJpYW50PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgYXJpYS1sYWJlbD1cIlJlbW92ZSBmaWx0ZXJcIlxuICAgICAgICB0aXRsZT1cIlJlbW92ZSBmaWx0ZXJcIlxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5yZW1vdmVCdXR0b259XG4gICAgICAgIGljb249XCJ0aW1lc1wiXG4gICAgICAgIGRhdGEtdGVzdGlkPXtgQWRIb2NGaWx0ZXItcmVtb3ZlLSR7ZmlsdGVyLmtleSA/PyAnJ31gfVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBtb2RlbC5fcmVtb3ZlRmlsdGVyKGZpbHRlcil9XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5jb25zdCBnZXRTdHlsZXMgPSAodGhlbWU6IEdyYWZhbmFUaGVtZTIpID0+ICh7XG4gIGZpZWxkOiBjc3Moe1xuICAgIG1hcmdpbkJvdHRvbTogMCxcbiAgfSksXG4gIHdyYXBwZXI6IGNzcyh7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICc+IConOiB7XG4gICAgICAnJjpub3QoOmZpcnN0LWNoaWxkKSc6IHtcbiAgICAgICAgLy8gTmVnYXRpdmUgbWFyZ2luIGhpZGVzIHRoZSBkb3VibGUtYm9yZGVyIG9uIGFkamFjZW50IHNlbGVjdHNcbiAgICAgICAgbWFyZ2luTGVmdDogLTEsXG4gICAgICB9LFxuXG4gICAgICAnJjpmaXJzdC1jaGlsZCc6IHtcbiAgICAgICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6IDAsXG4gICAgICAgIGJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOiAwLFxuICAgICAgfSxcblxuICAgICAgJyY6bGFzdC1jaGlsZCc6IHtcbiAgICAgICAgYm9yZGVyVG9wTGVmdFJhZGl1czogMCxcbiAgICAgICAgYm9yZGVyQm90dG9tTGVmdFJhZGl1czogMCxcbiAgICAgIH0sXG5cbiAgICAgICcmOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCknOiB7XG4gICAgICAgIGJvcmRlclJhZGl1czogMCxcbiAgICAgIH0sXG5cbiAgICAgIC8vIEZpeCBmb2N1cyBzdGF0ZSB6SW5kZXggaXNzdWVzXG4gICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgIHpJbmRleDogMCxcblxuICAgICAgLy8gQWRqYWNlbnQgYm9yZGVycyBhcmUgb3ZlcmxhcHBpbmcsIHNvIHJhaXNlIGNoaWxkcmVuIHVwIHdoZW4gaG92ZXJpbmcgZXRjXG4gICAgICAvLyBzbyBhbGwgdGhhdCBjaGlsZCdzIGJvcmRlcnMgYXJlIHZpc2libGUuXG4gICAgICAnJjpob3Zlcic6IHtcbiAgICAgICAgekluZGV4OiAxLFxuICAgICAgfSxcblxuICAgICAgJyY6Zm9jdXMtd2l0aGluJzoge1xuICAgICAgICB6SW5kZXg6IDIsXG4gICAgICB9LFxuICAgIH0sXG4gIH0pLFxuICB3aWR0aFdoZW5PcGVuOiBjc3Moe1xuICAgIG1pbldpZHRoOiB0aGVtZS5zcGFjaW5nKDE2KSxcbiAgfSksXG4gIHZhbHVlOiBjc3Moe1xuICAgIGZsZXhCYXNpczogJ2NvbnRlbnQnLFxuICAgIGZsZXhTaHJpbms6IDEsXG4gICAgbWluV2lkdGg6ICc5MHB4JyxcbiAgfSksXG4gIGtleTogY3NzKHtcbiAgICBmbGV4QmFzaXM6ICdjb250ZW50JyxcbiAgICBtaW5XaWR0aDogJzkwcHgnLFxuICAgIGZsZXhTaHJpbms6IDEsXG4gIH0pLFxuICBvcGVyYXRvcjogY3NzKHtcbiAgICBmbGV4U2hyaW5rOiAwLFxuICAgIGZsZXhCYXNpczogJ2NvbnRlbnQnLFxuICB9KSxcbiAgcmVtb3ZlQnV0dG9uOiBjc3Moe1xuICAgIHBhZGRpbmdMZWZ0OiB0aGVtZS5zcGFjaW5nKDMgLyAyKSxcbiAgICBwYWRkaW5nUmlnaHQ6IHRoZW1lLnNwYWNpbmcoMyAvIDIpLFxuICAgIGJvcmRlckxlZnQ6ICdub25lJyxcbiAgICB3aWR0aDogdGhlbWUuc3BhY2luZygzKSxcbiAgICBtYXJnaW5SaWdodDogdGhlbWUuc3BhY2luZygxKSxcbiAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICAvLyBUbyBub3QgaGF2ZSBidXR0b24gYmFja2dyb3VuZCBhbmQgbGFzdCBzZWxlY3QgYm9yZGVyIGludGVyc2VjdFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIGxlZnQ6ICcxcHgnLFxuICB9KSxcbn0pO1xuIl0sIm5hbWVzIjpbIl9hIiwiX2IiLCJ2YWx1ZXMiLCJrZXlzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0JBLFNBQVMsZ0JBQUEsQ0FBaUIsS0FBYSxLQUF3QyxFQUFBO0FBQzdFLEVBQUEsT0FBTyxRQUFRLEVBQ1gsR0FBQTtBQUFBLElBQ0UsS0FBTyxFQUFBLEdBQUE7QUFBQSxJQUNQLE9BQU8sS0FBUyxJQUFBLEdBQUE7QUFBQSxHQUVsQixHQUFBLElBQUEsQ0FBQTtBQUNOLENBQUE7QUFFQSxNQUFNLGFBQWEsTUFBTSxJQUFBLENBQUE7QUFFbEIsU0FBUyxtQkFBb0IsQ0FBQSxFQUFFLE1BQVEsRUFBQSxLQUFBLEVBQWdCLEVBQUE7QUEzQjlELEVBQUEsSUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEs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
@@ -0,0 +1,162 @@
1
+ import { cx, css } from '@emotion/css';
2
+ import { useStyles2, Tooltip, IconButton } from '@grafana/ui';
3
+ import React, { useState, useRef, useCallback, useEffect } from 'react';
4
+ import { AdHocCombobox } from './AdHocFiltersCombobox.js';
5
+
6
+ var __defProp = Object.defineProperty;
7
+ var __defProps = Object.defineProperties;
8
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
9
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
10
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
11
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
12
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
13
+ var __spreadValues = (a, b) => {
14
+ for (var prop in b || (b = {}))
15
+ if (__hasOwnProp.call(b, prop))
16
+ __defNormalProp(a, prop, b[prop]);
17
+ if (__getOwnPropSymbols)
18
+ for (var prop of __getOwnPropSymbols(b)) {
19
+ if (__propIsEnum.call(b, prop))
20
+ __defNormalProp(a, prop, b[prop]);
21
+ }
22
+ return a;
23
+ };
24
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
25
+ function AdHocFilterPill({ filter, model, readOnly, focusOnWipInputRef }) {
26
+ var _a, _b, _c;
27
+ const styles = useStyles2(getStyles);
28
+ const [viewMode, setViewMode] = useState(true);
29
+ const [shouldFocusOnPillWrapper, setShouldFocusOnPillWrapper] = useState(false);
30
+ const pillWrapperRef = useRef(null);
31
+ const [populateInputOnEdit, setPopulateInputOnEdit] = useState(false);
32
+ const keyLabel = (_a = filter.keyLabel) != null ? _a : filter.key;
33
+ const valueLabel = ((_b = filter.valueLabels) == null ? void 0 : _b.join(", ")) || ((_c = filter.values) == null ? void 0 : _c.join(", ")) || filter.value;
34
+ const handleChangeViewMode = useCallback(
35
+ (event, shouldFocusOnPillWrapperOverride) => {
36
+ event == null ? void 0 : event.stopPropagation();
37
+ if (readOnly) {
38
+ return;
39
+ }
40
+ setShouldFocusOnPillWrapper(shouldFocusOnPillWrapperOverride != null ? shouldFocusOnPillWrapperOverride : !viewMode);
41
+ setViewMode(!viewMode);
42
+ },
43
+ [readOnly, viewMode]
44
+ );
45
+ useEffect(() => {
46
+ var _a2;
47
+ if (shouldFocusOnPillWrapper) {
48
+ (_a2 = pillWrapperRef.current) == null ? void 0 : _a2.focus();
49
+ setShouldFocusOnPillWrapper(false);
50
+ }
51
+ }, [shouldFocusOnPillWrapper]);
52
+ useEffect(() => {
53
+ if (filter.forceEdit && viewMode) {
54
+ setViewMode(false);
55
+ model._updateFilter(filter, { forceEdit: void 0 });
56
+ }
57
+ }, [filter, model, viewMode]);
58
+ useEffect(() => {
59
+ if (viewMode) {
60
+ setPopulateInputOnEdit((prevValue) => prevValue ? false : prevValue);
61
+ }
62
+ }, [viewMode]);
63
+ if (viewMode) {
64
+ const pillText = /* @__PURE__ */ React.createElement("span", {
65
+ className: styles.pillText
66
+ }, keyLabel, " ", filter.operator, " ", valueLabel);
67
+ return /* @__PURE__ */ React.createElement("div", {
68
+ className: cx(styles.combinedFilterPill, { [styles.readOnlyCombinedFilter]: readOnly }),
69
+ onClick: (e) => {
70
+ e.stopPropagation();
71
+ setPopulateInputOnEdit(true);
72
+ handleChangeViewMode();
73
+ },
74
+ onKeyDown: (e) => {
75
+ if (e.key === "Enter") {
76
+ setPopulateInputOnEdit(true);
77
+ handleChangeViewMode();
78
+ }
79
+ },
80
+ role: "button",
81
+ "aria-label": `Edit filter with key ${keyLabel}`,
82
+ tabIndex: 0,
83
+ ref: pillWrapperRef
84
+ }, valueLabel.length < 20 ? pillText : /* @__PURE__ */ React.createElement(Tooltip, {
85
+ content: /* @__PURE__ */ React.createElement("div", {
86
+ className: styles.tooltipText
87
+ }, valueLabel),
88
+ placement: "top"
89
+ }, pillText), !readOnly ? /* @__PURE__ */ React.createElement(IconButton, {
90
+ onClick: (e) => {
91
+ e.stopPropagation();
92
+ model._removeFilter(filter);
93
+ setTimeout(() => focusOnWipInputRef == null ? void 0 : focusOnWipInputRef());
94
+ },
95
+ onKeyDownCapture: (e) => {
96
+ if (e.key === "Enter") {
97
+ e.preventDefault();
98
+ e.stopPropagation();
99
+ model._removeFilter(filter);
100
+ setTimeout(() => focusOnWipInputRef == null ? void 0 : focusOnWipInputRef());
101
+ }
102
+ },
103
+ name: "times",
104
+ size: "md",
105
+ className: styles.removeButton,
106
+ tooltip: `Remove filter with key ${keyLabel}`
107
+ }) : null);
108
+ }
109
+ return /* @__PURE__ */ React.createElement(AdHocCombobox, {
110
+ filter,
111
+ model,
112
+ handleChangeViewMode,
113
+ focusOnWipInputRef,
114
+ populateInputOnEdit
115
+ });
116
+ }
117
+ const getStyles = (theme) => ({
118
+ combinedFilterPill: css(__spreadProps(__spreadValues({
119
+ display: "flex",
120
+ alignItems: "center",
121
+ background: theme.colors.action.selected,
122
+ borderRadius: theme.shape.radius.default,
123
+ border: `1px solid ${theme.colors.border.weak}`,
124
+ padding: theme.spacing(0.125, 0, 0.125, 1),
125
+ color: theme.colors.text.primary,
126
+ overflow: "hidden",
127
+ whiteSpace: "nowrap",
128
+ minHeight: theme.spacing(2.75)
129
+ }, theme.typography.bodySmall), {
130
+ fontWeight: theme.typography.fontWeightBold,
131
+ cursor: "pointer",
132
+ "&:hover": {
133
+ background: theme.colors.action.hover
134
+ }
135
+ })),
136
+ readOnlyCombinedFilter: css({
137
+ paddingRight: theme.spacing(1),
138
+ cursor: "text",
139
+ "&:hover": {
140
+ background: theme.colors.action.selected
141
+ }
142
+ }),
143
+ removeButton: css({
144
+ marginInline: theme.spacing(0.5),
145
+ cursor: "pointer",
146
+ "&:hover": {
147
+ color: theme.colors.text.primary
148
+ }
149
+ }),
150
+ pillText: css({
151
+ maxWidth: "200px",
152
+ width: "100%",
153
+ textOverflow: "ellipsis",
154
+ overflow: "hidden"
155
+ }),
156
+ tooltipText: css({
157
+ textAlign: "center"
158
+ })
159
+ });
160
+
161
+ export { AdHocFilterPill };
162
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWRIb2NGaWx0ZXJQaWxsLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvdmFyaWFibGVzL2FkaG9jL0FkSG9jRmlsdGVyc0NvbWJvYm94L0FkSG9jRmlsdGVyUGlsbC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3NzLCBjeCB9IGZyb20gJ0BlbW90aW9uL2Nzcyc7XG5pbXBvcnQgeyBHcmFmYW5hVGhlbWUyIH0gZnJvbSAnQGdyYWZhbmEvZGF0YSc7XG5pbXBvcnQgeyB1c2VTdHlsZXMyLCBJY29uQnV0dG9uLCBUb29sdGlwIH0gZnJvbSAnQGdyYWZhbmEvdWknO1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VSZWYsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBBZEhvY0NvbWJvYm94IH0gZnJvbSAnLi9BZEhvY0ZpbHRlcnNDb21ib2JveCc7XG5pbXBvcnQgeyBBZEhvY0ZpbHRlcldpdGhMYWJlbHMsIEFkSG9jRmlsdGVyc1ZhcmlhYmxlIH0gZnJvbSAnLi4vQWRIb2NGaWx0ZXJzVmFyaWFibGUnO1xuXG5pbnRlcmZhY2UgUHJvcHMge1xuICBmaWx0ZXI6IEFkSG9jRmlsdGVyV2l0aExhYmVscztcbiAgbW9kZWw6IEFkSG9jRmlsdGVyc1ZhcmlhYmxlO1xuICByZWFkT25seT86IGJvb2xlYW47XG4gIGZvY3VzT25XaXBJbnB1dFJlZj86ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBZEhvY0ZpbHRlclBpbGwoeyBmaWx0ZXIsIG1vZGVsLCByZWFkT25seSwgZm9jdXNPbldpcElucHV0UmVmIH06IFByb3BzKSB7XG4gIGNvbnN0IHN0eWxlcyA9IHVzZVN0eWxlczIoZ2V0U3R5bGVzKTtcbiAgY29uc3QgW3ZpZXdNb2RlLCBzZXRWaWV3TW9kZV0gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW3Nob3VsZEZvY3VzT25QaWxsV3JhcHBlciwgc2V0U2hvdWxkRm9jdXNPblBpbGxXcmFwcGVyXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgcGlsbFdyYXBwZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBbcG9wdWxhdGVJbnB1dE9uRWRpdCwgc2V0UG9wdWxhdGVJbnB1dE9uRWRpdF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3Qga2V5TGFiZWwgPSBmaWx0ZXIua2V5TGFiZWwgPz8gZmlsdGVyLmtleTtcbiAgY29uc3QgdmFsdWVMYWJlbCA9IGZpbHRlci52YWx1ZUxhYmVscz8uam9pbignLCAnKSB8fCBmaWx0ZXIudmFsdWVzPy5qb2luKCcsICcpIHx8IGZpbHRlci52YWx1ZTtcblxuICBjb25zdCBoYW5kbGVDaGFuZ2VWaWV3TW9kZSA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudD86IFJlYWN0Lk1vdXNlRXZlbnQsIHNob3VsZEZvY3VzT25QaWxsV3JhcHBlck92ZXJyaWRlPzogYm9vbGVhbikgPT4ge1xuICAgICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgaWYgKHJlYWRPbmx5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2V0U2hvdWxkRm9jdXNPblBpbGxXcmFwcGVyKHNob3VsZEZvY3VzT25QaWxsV3JhcHBlck92ZXJyaWRlID8/ICF2aWV3TW9kZSk7XG4gICAgICBzZXRWaWV3TW9kZSghdmlld01vZGUpO1xuICAgIH0sXG4gICAgW3JlYWRPbmx5LCB2aWV3TW9kZV1cbiAgKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzaG91bGRGb2N1c09uUGlsbFdyYXBwZXIpIHtcbiAgICAgIHBpbGxXcmFwcGVyUmVmLmN1cnJlbnQ/LmZvY3VzKCk7XG4gICAgICBzZXRTaG91bGRGb2N1c09uUGlsbFdyYXBwZXIoZmFsc2UpO1xuICAgIH1cbiAgfSwgW3Nob3VsZEZvY3VzT25QaWxsV3JhcHBlcl0pO1xuXG4gIC8vIHNldCB2aWV3TW9kZSB0byBmYWxzZSB3aGVuIGZpbHRlci5mb3JjZUVkaXQgaXMgZGVmaW5lZFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChmaWx0ZXIuZm9yY2VFZGl0ICYmIHZpZXdNb2RlKSB7XG4gICAgICBzZXRWaWV3TW9kZShmYWxzZSk7XG4gICAgICAvLyBpbW1lZGlhdGVseSBzZXQgZm9yY2VFZGl0IGJhY2sgdG8gdW5kZWZpbmVkIGFzIGEgY2xlYW4gdXBcbiAgICAgIG1vZGVsLl91cGRhdGVGaWx0ZXIoZmlsdGVyLCB7IGZvcmNlRWRpdDogdW5kZWZpbmVkIH0pO1xuICAgIH1cbiAgfSwgW2ZpbHRlciwgbW9kZWwsIHZpZXdNb2RlXSk7XG5cbiAgLy8gcmVzZXQgcG9wdWxhdGVJbnB1dE9uRWRpdCB3aGVuIHBpbGwgZ29lcyBpbnRvIHZpZXcgbW9kZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh2aWV3TW9kZSkge1xuICAgICAgc2V0UG9wdWxhdGVJbnB1dE9uRWRpdCgocHJldlZhbHVlKSA9PiAocHJldlZhbHVlID8gZmFsc2UgOiBwcmV2VmFsdWUpKTtcbiAgICB9XG4gIH0sIFt2aWV3TW9kZV0pO1xuXG4gIGlmICh2aWV3TW9kZSkge1xuICAgIGNvbnN0IHBpbGxUZXh0ID0gKFxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMucGlsbFRleHR9PlxuICAgICAgICB7a2V5TGFiZWx9IHtmaWx0ZXIub3BlcmF0b3J9IHt2YWx1ZUxhYmVsfVxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjeChzdHlsZXMuY29tYmluZWRGaWx0ZXJQaWxsLCB7IFtzdHlsZXMucmVhZE9ubHlDb21iaW5lZEZpbHRlcl06IHJlYWRPbmx5IH0pfVxuICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgc2V0UG9wdWxhdGVJbnB1dE9uRWRpdCh0cnVlKTtcbiAgICAgICAgICBoYW5kbGVDaGFuZ2VWaWV3TW9kZSgpO1xuICAgICAgICB9fVxuICAgICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICBzZXRQb3B1bGF0ZUlucHV0T25FZGl0KHRydWUpO1xuICAgICAgICAgICAgaGFuZGxlQ2hhbmdlVmlld01vZGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH19XG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICBhcmlhLWxhYmVsPXtgRWRpdCBmaWx0ZXIgd2l0aCBrZXkgJHtrZXlMYWJlbH1gfVxuICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgcmVmPXtwaWxsV3JhcHBlclJlZn1cbiAgICAgID5cbiAgICAgICAge3ZhbHVlTGFiZWwubGVuZ3RoIDwgMjAgPyAoXG4gICAgICAgICAgcGlsbFRleHRcbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8VG9vbHRpcCBjb250ZW50PXs8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRvb2x0aXBUZXh0fT57dmFsdWVMYWJlbH08L2Rpdj59IHBsYWNlbWVudD1cInRvcFwiPlxuICAgICAgICAgICAge3BpbGxUZXh0fVxuICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgKX1cblxuICAgICAgICB7IXJlYWRPbmx5ID8gKFxuICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICBtb2RlbC5fcmVtb3ZlRmlsdGVyKGZpbHRlcik7XG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZm9jdXNPbldpcElucHV0UmVmPy4oKSk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25LZXlEb3duQ2FwdHVyZT17KGUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgbW9kZWwuX3JlbW92ZUZpbHRlcihmaWx0ZXIpO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZm9jdXNPbldpcElucHV0UmVmPy4oKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBuYW1lPVwidGltZXNcIlxuICAgICAgICAgICAgc2l6ZT1cIm1kXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnJlbW92ZUJ1dHRvbn1cbiAgICAgICAgICAgIHRvb2x0aXA9e2BSZW1vdmUgZmlsdGVyIHdpdGgga2V5ICR7a2V5TGFiZWx9YH1cbiAgICAgICAgICAvPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxBZEhvY0NvbWJvYm94XG4gICAgICBmaWx0ZXI9e2ZpbHRlcn1cbiAgICAgIG1vZGVsPXttb2RlbH1cbiAgICAgIGhhbmRsZUNoYW5nZVZpZXdNb2RlPXtoYW5kbGVDaGFuZ2VWaWV3TW9kZX1cbiAgICAgIGZvY3VzT25XaXBJbnB1dFJlZj17Zm9jdXNPbldpcElucHV0UmVmfVxuICAgICAgcG9wdWxhdGVJbnB1dE9uRWRpdD17cG9wdWxhdGVJbnB1dE9uRWRpdH1cbiAgICAvPlxuICApO1xufVxuXG5jb25zdCBnZXRTdHlsZXMgPSAodGhlbWU6IEdyYWZhbmFUaGVtZTIpID0+ICh7XG4gIGNvbWJpbmVkRmlsdGVyUGlsbDogY3NzKHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgYmFja2dyb3VuZDogdGhlbWUuY29sb3JzLmFjdGlvbi5zZWxlY3RlZCxcbiAgICBib3JkZXJSYWRpdXM6IHRoZW1lLnNoYXBlLnJhZGl1cy5kZWZhdWx0LFxuICAgIGJvcmRlcjogYDFweCBzb2xpZCAke3RoZW1lLmNvbG9ycy5ib3JkZXIud2Vha31gLFxuICAgIHBhZGRpbmc6IHRoZW1lLnNwYWNpbmcoMC4xMjUsIDAsIDAuMTI1LCAxKSxcbiAgICBjb2xvcjogdGhlbWUuY29sb3JzLnRleHQucHJpbWFyeSxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gICAgbWluSGVpZ2h0OiB0aGVtZS5zcGFjaW5nKDIuNzUpLFxuICAgIC4uLnRoZW1lLnR5cG9ncmFwaHkuYm9keVNtYWxsLFxuICAgIGZvbnRXZWlnaHQ6IHRoZW1lLnR5cG9ncmFwaHkuZm9udFdlaWdodEJvbGQsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG5cbiAgICAnJjpob3Zlcic6IHtcbiAgICAgIGJhY2tncm91bmQ6IHRoZW1lLmNvbG9ycy5hY3Rpb24uaG92ZXIsXG4gICAgfSxcbiAgfSksXG4gIHJlYWRPbmx5Q29tYmluZWRGaWx0ZXI6IGNzcyh7XG4gICAgcGFkZGluZ1JpZ2h0OiB0aGVtZS5zcGFjaW5nKDEpLFxuICAgIGN1cnNvcjogJ3RleHQnLFxuICAgICcmOmhvdmVyJzoge1xuICAgICAgYmFja2dyb3VuZDogdGhlbWUuY29sb3JzLmFjdGlvbi5zZWxlY3RlZCxcbiAgICB9LFxuICB9KSxcbiAgcmVtb3ZlQnV0dG9uOiBjc3Moe1xuICAgIG1hcmdpbklubGluZTogdGhlbWUuc3BhY2luZygwLjUpLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICcmOmhvdmVyJzoge1xuICAgICAgY29sb3I6IHRoZW1lLmNvbG9ycy50ZXh0LnByaW1hcnksXG4gICAgfSxcbiAgfSksXG4gIHBpbGxUZXh0OiBjc3Moe1xuICAgIG1heFdpZHRoOiAnMjAwcHgnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgfSksXG4gIHRvb2x0aXBUZXh0OiBjc3Moe1xu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
@@ -0,0 +1,20 @@
1
+ import React, { forwardRef, useLayoutEffect } from 'react';
2
+ import { AdHocCombobox } from './AdHocFiltersCombobox.js';
3
+
4
+ const AdHocFiltersAlwaysWipCombobox = forwardRef(function AdHocFiltersAlwaysWipCombobox2({ model }, parentRef) {
5
+ const { _wip } = model.useState();
6
+ useLayoutEffect(() => {
7
+ if (!_wip) {
8
+ model._addWip();
9
+ }
10
+ }, [_wip]);
11
+ return /* @__PURE__ */ React.createElement(AdHocCombobox, {
12
+ model,
13
+ filter: _wip,
14
+ isAlwaysWip: true,
15
+ ref: parentRef
16
+ });
17
+ });
18
+
19
+ export { AdHocFiltersAlwaysWipCombobox };
20
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWRIb2NGaWx0ZXJzQWx3YXlzV2lwQ29tYm9ib3guanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy92YXJpYWJsZXMvYWRob2MvQWRIb2NGaWx0ZXJzQ29tYm9ib3gvQWRIb2NGaWx0ZXJzQWx3YXlzV2lwQ29tYm9ib3gudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmLCB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBBZEhvY0ZpbHRlcnNWYXJpYWJsZSB9IGZyb20gJy4uL0FkSG9jRmlsdGVyc1ZhcmlhYmxlJztcbmltcG9ydCB7IEFkSG9jQ29tYm9ib3ggfSBmcm9tICcuL0FkSG9jRmlsdGVyc0NvbWJvYm94JztcblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgbW9kZWw6IEFkSG9jRmlsdGVyc1ZhcmlhYmxlO1xufVxuXG5leHBvcnQgY29uc3QgQWRIb2NGaWx0ZXJzQWx3YXlzV2lwQ29tYm9ib3ggPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIEFkSG9jRmlsdGVyc0Fsd2F5c1dpcENvbWJvYm94KFxuICB7IG1vZGVsIH06IFByb3BzLFxuICAvLyBwYXNzIGFiaWxpdHkgdG8gZm9jdXMgb24gaW5wdXQgZWxlbWVudCBiYWNrIHRvIHBhcmVudFxuICAvLyAgICBwYXJlbnRSZWYgaXMgY29taW5nIGZyb20gQWRIb2NGaWx0ZXJzQ29tYm9ib3hSZW5kZXJlclxuICAvLyAgICBwYXJlbnRSZWYgaXMgbXV0YXRlZCB0aHJvdWdoIHVzZUltcGVyYXRpdmVIYW5kbGUgaW4gQWRIb2NDb21ib2JveFxuICBwYXJlbnRSZWZcbikge1xuICBjb25zdCB7IF93aXAgfSA9IG1vZGVsLnVzZVN0YXRlKCk7XG5cbiAgLy8gd2hlbiBjb21ib2JveCBpcyBpbiB3aXAgbW9kZSB0aGVuIGNoZWNrIGFuZCBhZGQgX3dpcCBpZiBpdHMgbWlzc2luZ1xuICAvLyAgICBuZWVkZWQgb24gZmlyc3QgcmVuZGVyIGFuZCB3aGVuIF93aXAgaXMgcmVzZXQgb24gZmlsdGVyIHZhbHVlIGNvbW1pdFxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghX3dpcCkge1xuICAgICAgbW9kZWwuX2FkZFdpcCgpO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW193aXBdKTtcblxuICByZXR1cm4gPEFkSG9jQ29tYm9ib3ggbW9kZWw9e21vZGVsfSBmaWx0ZXI9e193aXB9IGlzQWx3YXlzV2lwIHJlZj17cGFyZW50UmVmfSAvPjtcbn0pO1xuIl0sIm5hbWVzIjpbIkFkSG9jRmlsdGVyc0Fsd2F5c1dpcENvbWJvYm94Il0sIm1hcHBpbmdzIjoiOzs7QUFRTyxNQUFNLGdDQUFnQyxVQUFXLENBQUEsU0FBU0EsK0JBQy9ELEVBQUUsS0FBQSxJQUlGLFNBQ0EsRUFBQTtBQUNBLEVBQUEsTUFBTSxFQUFFLElBQUEsRUFBUyxHQUFBLEtBQUEsQ0FBTSxRQUFTLEVBQUEsQ0FBQTtBQUloQyxFQUFBLGVBQUEsQ0FBZ0IsTUFBTTtBQUNwQixJQUFBLElBQUksQ0FBQyxJQUFNLEVBQUE7QUFDVCxNQUFBLEtBQUEsQ0FBTSxPQUFRLEVBQUEsQ0FBQTtBQUFBLEtBQ2hCO0FBQUEsR0FHRixFQUFHLENBQUMsSUFBSSxDQUFDLENBQUEsQ0FBQTtBQUVULEVBQUEsdUJBQVEsS0FBQSxDQUFBLGFBQUEsQ0FBQSxhQUFBLEVBQUE7QUFBQSxJQUFjLEtBQUE7QUFBQSxJQUFjLE1BQVEsRUFBQSxJQUFBO0FBQUEsSUFBTSxXQUFXLEVBQUEsSUFBQTtBQUFBLElBQUMsR0FBSyxFQUFBLFNBQUE7QUFBQSxHQUFXLENBQUEsQ0FBQTtBQUNoRixDQUFDOzs7OyJ9