@grafana/aws-sdk 0.2.0 → 0.3.1

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 (27) hide show
  1. package/README.md +10 -3
  2. package/dist/esm/src/{ConnectionConfig.js → components/ConnectionConfig.js} +20 -8
  3. package/dist/esm/src/components/ConnectionConfig.js.map +1 -0
  4. package/dist/esm/src/components/Divider.js +15 -0
  5. package/dist/esm/src/components/Divider.js.map +1 -0
  6. package/dist/esm/src/components/NewConnectionConfig.js +203 -0
  7. package/dist/esm/src/components/NewConnectionConfig.js.map +1 -0
  8. package/dist/esm/src/components/SIGV4ConnectionConfig.js.map +1 -0
  9. package/dist/esm/src/index.js +9 -4
  10. package/dist/esm/src/index.js.map +1 -1
  11. package/dist/esm/src/sql/ConfigEditor/ConfigSelect.js +3 -1
  12. package/dist/esm/src/sql/ConfigEditor/ConfigSelect.js.map +1 -1
  13. package/dist/esm/src/sql/ConfigEditor/InlineInput.js +1 -1
  14. package/dist/esm/src/sql/ConfigEditor/InlineInput.js.map +1 -1
  15. package/dist/esm/src/sql/QueryEditor/FillValueSelect.js +42 -6
  16. package/dist/esm/src/sql/QueryEditor/FillValueSelect.js.map +1 -1
  17. package/dist/esm/src/sql/QueryEditor/FormatSelect.js +16 -5
  18. package/dist/esm/src/sql/QueryEditor/FormatSelect.js.map +1 -1
  19. package/dist/esm/src/sql/ResourceSelector.js +26 -3
  20. package/dist/esm/src/sql/ResourceSelector.js.map +1 -1
  21. package/dist/index.d.ts +15 -5
  22. package/dist/index.js +303 -16
  23. package/dist/index.js.map +1 -1
  24. package/package.json +17 -8
  25. package/dist/esm/src/ConnectionConfig.js.map +0 -1
  26. package/dist/esm/src/SIGV4ConnectionConfig.js.map +0 -1
  27. /package/dist/esm/src/{SIGV4ConnectionConfig.js → components/SIGV4ConnectionConfig.js} +0 -0
package/dist/index.js CHANGED
@@ -6,8 +6,8 @@ var React = require('react');
6
6
  var ui = require('@grafana/ui');
7
7
  var data = require('@grafana/data');
8
8
  var runtime = require('@grafana/runtime');
9
- var lodash = require('lodash');
10
9
  var experimental = require('@grafana/experimental');
10
+ var lodash = require('lodash');
11
11
  var asyncQueryData = require('@grafana/async-query-data');
12
12
 
13
13
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -2100,6 +2100,200 @@ var _createEmotion = createEmotion({
2100
2100
  }),
2101
2101
  css = _createEmotion.css;
2102
2102
 
2103
+ var __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;
2104
+ var __hasOwnProp$8 = Object.prototype.hasOwnProperty;
2105
+ var __propIsEnum$8 = Object.prototype.propertyIsEnumerable;
2106
+ var __objRest = (source, exclude) => {
2107
+ var target = {};
2108
+ for (var prop in source)
2109
+ if (__hasOwnProp$8.call(source, prop) && exclude.indexOf(prop) < 0)
2110
+ target[prop] = source[prop];
2111
+ if (source != null && __getOwnPropSymbols$8)
2112
+ for (var prop of __getOwnPropSymbols$8(source)) {
2113
+ if (exclude.indexOf(prop) < 0 && __propIsEnum$8.call(source, prop))
2114
+ target[prop] = source[prop];
2115
+ }
2116
+ return target;
2117
+ };
2118
+ const NewConnectionConfig = (_a) => {
2119
+ var _b = _a, {
2120
+ isARNInstructionsOpen,
2121
+ setIsARNInstructionsOpen,
2122
+ awsAssumeRoleEnabled,
2123
+ currentProvider,
2124
+ awsAllowedAuthProviders,
2125
+ skipHeader,
2126
+ regions,
2127
+ assumeRoleInstructionsStyle
2128
+ } = _b, props = __objRest(_b, [
2129
+ "isARNInstructionsOpen",
2130
+ "setIsARNInstructionsOpen",
2131
+ "awsAssumeRoleEnabled",
2132
+ "currentProvider",
2133
+ "awsAllowedAuthProviders",
2134
+ "skipHeader",
2135
+ "regions",
2136
+ "assumeRoleInstructionsStyle"
2137
+ ]);
2138
+ var _a2, _b2, _c, _d, _e, _f, _g;
2139
+ const options = props.options;
2140
+ return /* @__PURE__ */ React__default["default"].createElement("div", { "data-testid": "connection-config" }, /* @__PURE__ */ React__default["default"].createElement(experimental.ConfigSection, { title: skipHeader ? "" : "Connection Details", "data-testid": "connection-config" }, /* @__PURE__ */ React__default["default"].createElement(experimental.ConfigSubSection, { title: "Authentication" }, /* @__PURE__ */ React__default["default"].createElement(
2141
+ ui.Field,
2142
+ {
2143
+ label: "Authentication Provider",
2144
+ description: "Specify which AWS credentials chain to use.",
2145
+ htmlFor: "authProvider"
2146
+ },
2147
+ /* @__PURE__ */ React__default["default"].createElement(
2148
+ ui.Select,
2149
+ {
2150
+ id: "authProvider",
2151
+ "aria-label": "Authentication Provider",
2152
+ value: currentProvider,
2153
+ options: awsAuthProviderOptions.filter((opt) => awsAllowedAuthProviders.includes(opt.value)),
2154
+ defaultValue: options.jsonData.authType,
2155
+ onChange: (option) => {
2156
+ data.onUpdateDatasourceJsonDataOptionSelect(props, "authType")(option);
2157
+ },
2158
+ menuShouldPortal: true
2159
+ }
2160
+ )
2161
+ ), options.jsonData.authType === "credentials" && /* @__PURE__ */ React__default["default"].createElement(
2162
+ ui.Field,
2163
+ {
2164
+ label: "Credentials Profile Name",
2165
+ description: "Credentials profile name, as specified in ~/.aws/credentials, leave blank for default.",
2166
+ htmlFor: "credentialsProfileName"
2167
+ },
2168
+ /* @__PURE__ */ React__default["default"].createElement(
2169
+ ui.Input,
2170
+ {
2171
+ id: "credentialsProfileName",
2172
+ placeholder: "default",
2173
+ value: options.jsonData.profile,
2174
+ onChange: data.onUpdateDatasourceJsonDataOption(props, "profile")
2175
+ }
2176
+ )
2177
+ ), options.jsonData.authType === "keys" && /* @__PURE__ */ React__default["default"].createElement(React__default["default"].Fragment, null, /* @__PURE__ */ React__default["default"].createElement(ui.Field, { label: "Access Key ID", htmlFor: "accessKeyId" }, ((_a2 = props.options.secureJsonFields) == null ? void 0 : _a2.accessKey) ? /* @__PURE__ */ React__default["default"].createElement(ui.ButtonGroup, null, /* @__PURE__ */ React__default["default"].createElement(ui.Input, { disabled: true, placeholder: "Configured", id: "accessKeyId" }), /* @__PURE__ */ React__default["default"].createElement(
2178
+ ui.ToolbarButton,
2179
+ {
2180
+ icon: "edit",
2181
+ tooltip: "Edit Access Key ID",
2182
+ type: "button",
2183
+ onClick: data.onUpdateDatasourceResetOption(props, "accessKey")
2184
+ }
2185
+ )) : /* @__PURE__ */ React__default["default"].createElement(
2186
+ ui.Input,
2187
+ {
2188
+ id: "accessKeyId",
2189
+ value: (_c = (_b2 = options.secureJsonData) == null ? void 0 : _b2.accessKey) != null ? _c : "",
2190
+ onChange: data.onUpdateDatasourceSecureJsonDataOption(props, "accessKey")
2191
+ }
2192
+ )), /* @__PURE__ */ React__default["default"].createElement(ui.Field, { label: "Secret Access Key", htmlFor: "secretKey" }, ((_d = props.options.secureJsonFields) == null ? void 0 : _d.secretKey) ? /* @__PURE__ */ React__default["default"].createElement(ui.ButtonGroup, null, /* @__PURE__ */ React__default["default"].createElement(ui.Input, { disabled: true, placeholder: "Configured" }), /* @__PURE__ */ React__default["default"].createElement(
2193
+ ui.ToolbarButton,
2194
+ {
2195
+ id: "secretKey",
2196
+ icon: "edit",
2197
+ type: "button",
2198
+ tooltip: "Edit Secret Access Key",
2199
+ onClick: data.onUpdateDatasourceResetOption(props, "secretKey")
2200
+ }
2201
+ )) : /* @__PURE__ */ React__default["default"].createElement(
2202
+ ui.Input,
2203
+ {
2204
+ id: "secretKey",
2205
+ value: (_f = (_e = options.secureJsonData) == null ? void 0 : _e.secretKey) != null ? _f : "",
2206
+ onChange: data.onUpdateDatasourceSecureJsonDataOption(props, "secretKey")
2207
+ }
2208
+ )))), /* @__PURE__ */ React__default["default"].createElement(experimental.ConfigSubSection, { title: "Assume Role" }, options.jsonData.authType === AwsAuthType.GrafanaAssumeRole && /* @__PURE__ */ React__default["default"].createElement("div", { className: assumeRoleInstructionsStyle }, /* @__PURE__ */ React__default["default"].createElement(
2209
+ ui.Collapse,
2210
+ {
2211
+ label: "How to create an IAM role for grafana to assume:",
2212
+ collapsible: true,
2213
+ isOpen: isARNInstructionsOpen,
2214
+ onToggle: () => setIsARNInstructionsOpen(!isARNInstructionsOpen)
2215
+ },
2216
+ /* @__PURE__ */ React__default["default"].createElement("ol", null, /* @__PURE__ */ React__default["default"].createElement("li", null, /* @__PURE__ */ React__default["default"].createElement("p", null, "1. Create a new IAM role in the AWS console, and select ", /* @__PURE__ */ React__default["default"].createElement("code", null, "Another AWS account"), " as the", " ", /* @__PURE__ */ React__default["default"].createElement("code", null, "Trusted entity"), ".")), /* @__PURE__ */ React__default["default"].createElement("li", null, /* @__PURE__ */ React__default["default"].createElement("p", null, "2. Enter the account ID of the Grafana account that has permission to assume this role:", /* @__PURE__ */ React__default["default"].createElement("code", null, " 008923505280 "), " and check the ", /* @__PURE__ */ React__default["default"].createElement("code", null, "Require external ID"), " box.")), /* @__PURE__ */ React__default["default"].createElement("li", null, /* @__PURE__ */ React__default["default"].createElement("p", null, "3. Enter the following external ID:", " ", /* @__PURE__ */ React__default["default"].createElement("code", null, props.externalId || "External Id is currently unavailable"), " and click", " ", /* @__PURE__ */ React__default["default"].createElement("code", null, "Next"), ".")), /* @__PURE__ */ React__default["default"].createElement("li", null, /* @__PURE__ */ React__default["default"].createElement("p", null, "4. Add any required permissions you would like Grafana to be able to access on your behalf. For more details on our permissions please", " ", /* @__PURE__ */ React__default["default"].createElement(
2217
+ "a",
2218
+ {
2219
+ href: "https://grafana.com/docs/grafana/latest/datasources/aws-cloudwatch/",
2220
+ target: "_blank",
2221
+ rel: "noreferrer"
2222
+ },
2223
+ "read through our documentation"
2224
+ ), ".")), /* @__PURE__ */ React__default["default"].createElement("li", null, /* @__PURE__ */ React__default["default"].createElement("p", null, "5. Give the role a name and description, and click ", /* @__PURE__ */ React__default["default"].createElement("code", null, "Create role"), ".")), /* @__PURE__ */ React__default["default"].createElement("li", null, /* @__PURE__ */ React__default["default"].createElement("p", null, "6. Copy the ARN of the role you just created and paste it into the ", /* @__PURE__ */ React__default["default"].createElement("code", null, "Assume Role ARN"), " ", "field below.")))
2225
+ )), awsAssumeRoleEnabled && /* @__PURE__ */ React__default["default"].createElement(React__default["default"].Fragment, null, /* @__PURE__ */ React__default["default"].createElement(
2226
+ ui.Field,
2227
+ {
2228
+ htmlFor: "assumeRoleArn",
2229
+ label: "Assume Role ARN",
2230
+ description: "Optional. Specifying the ARN of a role will ensure that the\n selected authentication provider is used to assume the role rather than the\n credentials directly."
2231
+ },
2232
+ /* @__PURE__ */ React__default["default"].createElement(
2233
+ ui.Input,
2234
+ {
2235
+ id: "assumeRoleArn",
2236
+ placeholder: "arn:aws:iam:*",
2237
+ value: options.jsonData.assumeRoleArn || "",
2238
+ onChange: data.onUpdateDatasourceJsonDataOption(props, "assumeRoleArn")
2239
+ }
2240
+ )
2241
+ ), options.jsonData.authType !== AwsAuthType.GrafanaAssumeRole && /* @__PURE__ */ React__default["default"].createElement(
2242
+ ui.Field,
2243
+ {
2244
+ htmlFor: "externalId",
2245
+ label: "External ID",
2246
+ description: "If you are assuming a role in another account, that has been created with an external ID, specify the external ID here."
2247
+ },
2248
+ /* @__PURE__ */ React__default["default"].createElement(
2249
+ ui.Input,
2250
+ {
2251
+ id: "externalId",
2252
+ placeholder: "External ID",
2253
+ value: options.jsonData.externalId || "",
2254
+ onChange: data.onUpdateDatasourceJsonDataOption(props, "externalId")
2255
+ }
2256
+ )
2257
+ ))), /* @__PURE__ */ React__default["default"].createElement(experimental.ConfigSubSection, { title: "Additional Settings" }, !props.skipEndpoint && options.jsonData.authType !== AwsAuthType.GrafanaAssumeRole && /* @__PURE__ */ React__default["default"].createElement(
2258
+ ui.Field,
2259
+ {
2260
+ label: "Endpoint",
2261
+ description: "Optionally, specify a custom endpoint for the service",
2262
+ htmlFor: "endpoint"
2263
+ },
2264
+ /* @__PURE__ */ React__default["default"].createElement(
2265
+ ui.Input,
2266
+ {
2267
+ id: "endpoint",
2268
+ placeholder: (_g = props.defaultEndpoint) != null ? _g : "https://{service}.{region}.amazonaws.com",
2269
+ value: options.jsonData.endpoint || "",
2270
+ onChange: data.onUpdateDatasourceJsonDataOption(props, "endpoint")
2271
+ }
2272
+ )
2273
+ ), /* @__PURE__ */ React__default["default"].createElement(
2274
+ ui.Field,
2275
+ {
2276
+ label: "Default Region",
2277
+ description: "Specify the region, such as for US West (Oregon) use ` us-west-2 ` as the region.",
2278
+ htmlFor: "defaultRegion"
2279
+ },
2280
+ /* @__PURE__ */ React__default["default"].createElement(
2281
+ ui.Select,
2282
+ {
2283
+ id: "defaultRegion",
2284
+ "aria-label": "Default Region",
2285
+ value: regions.find((region) => region.value === options.jsonData.defaultRegion),
2286
+ options: regions,
2287
+ defaultValue: options.jsonData.defaultRegion,
2288
+ allowCustomValue: true,
2289
+ onChange: data.onUpdateDatasourceJsonDataOptionSelect(props, "defaultRegion"),
2290
+ formatCreateLabel: (r) => `Use region: ${r}`,
2291
+ menuShouldPortal: true
2292
+ }
2293
+ )
2294
+ )), props.children));
2295
+ };
2296
+
2103
2297
  var __defProp$7 = Object.defineProperty;
2104
2298
  var __defProps$6 = Object.defineProperties;
2105
2299
  var __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;
@@ -2159,7 +2353,18 @@ const ConnectionConfig = (props) => {
2159
2353
  }, [loadRegions]);
2160
2354
  const inputWidth = inExperimentalAuthComponent ? "width-20" : "width-30";
2161
2355
  const styles = ui.useStyles2(getStyles);
2162
- return /* @__PURE__ */ React__default["default"].createElement(ui.FieldSet, { label: skipHeader ? "" : "Connection Details", "data-testid": "connection-config" }, /* @__PURE__ */ React__default["default"].createElement(
2356
+ return /* @__PURE__ */ React__default["default"].createElement(React__default["default"].Fragment, null, props.newFormStylingEnabled ? /* @__PURE__ */ React__default["default"].createElement(
2357
+ NewConnectionConfig,
2358
+ __spreadValues$7({
2359
+ currentProvider,
2360
+ awsAllowedAuthProviders,
2361
+ isARNInstructionsOpen,
2362
+ setIsARNInstructionsOpen,
2363
+ awsAssumeRoleEnabled,
2364
+ regions,
2365
+ assumeRoleInstructionsStyle: styles.assumeRoleInstructions
2366
+ }, props)
2367
+ ) : /* @__PURE__ */ React__default["default"].createElement(ui.FieldSet, { label: skipHeader ? "" : "Connection Details", "data-testid": "connection-config" }, /* @__PURE__ */ React__default["default"].createElement(
2163
2368
  ui.InlineField,
2164
2369
  {
2165
2370
  label: "Authentication Provider",
@@ -2237,7 +2442,7 @@ const ConnectionConfig = (props) => {
2237
2442
  isOpen: isARNInstructionsOpen,
2238
2443
  onToggle: () => setIsARNInstructionsOpen(!isARNInstructionsOpen)
2239
2444
  },
2240
- /* @__PURE__ */ React__default["default"].createElement("ol", null, /* @__PURE__ */ React__default["default"].createElement("li", null, /* @__PURE__ */ React__default["default"].createElement("p", null, "1. Create a new IAM role in the AWS console, and select ", /* @__PURE__ */ React__default["default"].createElement("code", null, "Another AWS account"), " as the", " ", /* @__PURE__ */ React__default["default"].createElement("code", null, "Trusted entity"), ".")), /* @__PURE__ */ React__default["default"].createElement("li", null, /* @__PURE__ */ React__default["default"].createElement("p", null, "2. Enter the account ID of the Grafana account that has permission to assume this role:", /* @__PURE__ */ React__default["default"].createElement("code", null, " 008923505280 "), " and check the ", /* @__PURE__ */ React__default["default"].createElement("code", null, "Require external ID"), " box.")), /* @__PURE__ */ React__default["default"].createElement("li", null, /* @__PURE__ */ React__default["default"].createElement("p", null, "3. Enter the following external ID:", " ", /* @__PURE__ */ React__default["default"].createElement("code", null, props.externalId || "External Id is currently unavailable"), " and click ", /* @__PURE__ */ React__default["default"].createElement("code", null, "Next"), ".")), /* @__PURE__ */ React__default["default"].createElement("li", null, /* @__PURE__ */ React__default["default"].createElement("p", null, "4. Add any required permissions you would like Grafana to be able to access on your behalf. For more details on our permissions please", " ", /* @__PURE__ */ React__default["default"].createElement(
2445
+ /* @__PURE__ */ React__default["default"].createElement("ol", null, /* @__PURE__ */ React__default["default"].createElement("li", null, /* @__PURE__ */ React__default["default"].createElement("p", null, "1. Create a new IAM role in the AWS console, and select ", /* @__PURE__ */ React__default["default"].createElement("code", null, "Another AWS account"), " as the", " ", /* @__PURE__ */ React__default["default"].createElement("code", null, "Trusted entity"), ".")), /* @__PURE__ */ React__default["default"].createElement("li", null, /* @__PURE__ */ React__default["default"].createElement("p", null, "2. Enter the account ID of the Grafana account that has permission to assume this role:", /* @__PURE__ */ React__default["default"].createElement("code", null, " 008923505280 "), " and check the ", /* @__PURE__ */ React__default["default"].createElement("code", null, "Require external ID"), " box.")), /* @__PURE__ */ React__default["default"].createElement("li", null, /* @__PURE__ */ React__default["default"].createElement("p", null, "3. Enter the following external ID:", " ", /* @__PURE__ */ React__default["default"].createElement("code", null, props.externalId || "External Id is currently unavailable"), " and click", " ", /* @__PURE__ */ React__default["default"].createElement("code", null, "Next"), ".")), /* @__PURE__ */ React__default["default"].createElement("li", null, /* @__PURE__ */ React__default["default"].createElement("p", null, "4. Add any required permissions you would like Grafana to be able to access on your behalf. For more details on our permissions please", " ", /* @__PURE__ */ React__default["default"].createElement(
2241
2446
  "a",
2242
2447
  {
2243
2448
  href: "https://grafana.com/docs/grafana/latest/datasources/aws-cloudwatch/",
@@ -2245,7 +2450,7 @@ const ConnectionConfig = (props) => {
2245
2450
  rel: "noreferrer"
2246
2451
  },
2247
2452
  "read through our documentation"
2248
- ), ".")), /* @__PURE__ */ React__default["default"].createElement("li", null, /* @__PURE__ */ React__default["default"].createElement("p", null, "5. Give the role a name and description, and click ", /* @__PURE__ */ React__default["default"].createElement("code", null, "Create role"), ".")), /* @__PURE__ */ React__default["default"].createElement("li", null, /* @__PURE__ */ React__default["default"].createElement("p", null, "6. Copy the ARN of the role you just created and paste it into the ", /* @__PURE__ */ React__default["default"].createElement("code", null, "Assume Role ARN"), " field below.")))
2453
+ ), ".")), /* @__PURE__ */ React__default["default"].createElement("li", null, /* @__PURE__ */ React__default["default"].createElement("p", null, "5. Give the role a name and description, and click ", /* @__PURE__ */ React__default["default"].createElement("code", null, "Create role"), ".")), /* @__PURE__ */ React__default["default"].createElement("li", null, /* @__PURE__ */ React__default["default"].createElement("p", null, "6. Copy the ARN of the role you just created and paste it into the ", /* @__PURE__ */ React__default["default"].createElement("code", null, "Assume Role ARN"), " ", "field below.")))
2249
2454
  )), awsAssumeRoleEnabled && /* @__PURE__ */ React__default["default"].createElement(React__default["default"].Fragment, null, /* @__PURE__ */ React__default["default"].createElement(
2250
2455
  ui.InlineField,
2251
2456
  {
@@ -2318,7 +2523,7 @@ const ConnectionConfig = (props) => {
2318
2523
  menuShouldPortal: true
2319
2524
  }
2320
2525
  )
2321
- ), props.children);
2526
+ ), props.children));
2322
2527
  };
2323
2528
  function getStyles() {
2324
2529
  return {
@@ -2328,6 +2533,16 @@ function getStyles() {
2328
2533
  };
2329
2534
  }
2330
2535
 
2536
+ function Divider() {
2537
+ const theme = ui.useTheme2();
2538
+ return /* @__PURE__ */ React__default["default"].createElement(
2539
+ "div",
2540
+ {
2541
+ style: { borderTop: `1px solid ${theme.colors.border.weak}`, margin: theme.spacing(2, 0), width: "100%" }
2542
+ }
2543
+ );
2544
+ }
2545
+
2331
2546
  var __defProp$6 = Object.defineProperty;
2332
2547
  var __defProps$5 = Object.defineProperties;
2333
2548
  var __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;
@@ -2497,9 +2712,10 @@ function ResourceSelector(props) {
2497
2712
  setIsLoading(false);
2498
2713
  }
2499
2714
  };
2500
- return /* @__PURE__ */ React__default["default"].createElement(ui.InlineField, { label: props.label, labelWidth: props.labelWidth, tooltip: props.tooltip, hidden: props.hidden }, /* @__PURE__ */ React__default["default"].createElement("div", { "data-testid": props["data-testid"], title: props.title }, /* @__PURE__ */ React__default["default"].createElement(
2715
+ return /* @__PURE__ */ React__default["default"].createElement(React__default["default"].Fragment, null, props.newFormStylingEnabled ? /* @__PURE__ */ React__default["default"].createElement(
2501
2716
  ui.Select,
2502
2717
  __spreadProps$4(__spreadValues$5({}, props), {
2718
+ id: props.id,
2503
2719
  "aria-label": props.label,
2504
2720
  options,
2505
2721
  onChange,
@@ -2508,7 +2724,29 @@ function ResourceSelector(props) {
2508
2724
  onOpenMenu: () => props.fetch && onClick(),
2509
2725
  menuShouldPortal: true
2510
2726
  })
2511
- )));
2727
+ ) : /* @__PURE__ */ React__default["default"].createElement(
2728
+ ui.InlineField,
2729
+ {
2730
+ label: props.label,
2731
+ labelWidth: props.labelWidth,
2732
+ tooltip: props.tooltip,
2733
+ hidden: props.hidden,
2734
+ htmlFor: props.id
2735
+ },
2736
+ /* @__PURE__ */ React__default["default"].createElement("div", { "data-testid": props["data-testid"], title: props.title }, /* @__PURE__ */ React__default["default"].createElement(
2737
+ ui.Select,
2738
+ __spreadProps$4(__spreadValues$5({}, props), {
2739
+ id: props.id,
2740
+ "aria-label": props.label,
2741
+ options,
2742
+ onChange,
2743
+ isLoading,
2744
+ className: props.className || "min-width-6",
2745
+ onOpenMenu: () => props.fetch && onClick(),
2746
+ menuShouldPortal: true
2747
+ })
2748
+ ))
2749
+ ));
2512
2750
  }
2513
2751
 
2514
2752
  var __defProp$4 = Object.defineProperty;
@@ -2548,6 +2786,8 @@ function ConfigSelect(props) {
2548
2786
  return /* @__PURE__ */ React__default["default"].createElement(
2549
2787
  ResourceSelector,
2550
2788
  __spreadValues$4({
2789
+ id: props.id,
2790
+ newFormStylingEnabled: props.newFormStylingEnabled,
2551
2791
  label: props.label,
2552
2792
  "data-testid": props["data-testid"],
2553
2793
  onChange: props.onChange,
@@ -2705,14 +2945,25 @@ var __spreadValues$2 = (a, b) => {
2705
2945
  };
2706
2946
  var __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));
2707
2947
  function FormatSelect(props) {
2948
+ var _a;
2708
2949
  const onChangeFormat = (e) => {
2709
- var _a;
2950
+ var _a2;
2710
2951
  props.onChange(__spreadProps$2(__spreadValues$2({}, props.query), {
2711
2952
  format: e.value || 0
2712
2953
  }));
2713
- (_a = props.onRunQuery) == null ? void 0 : _a.call(props);
2954
+ (_a2 = props.onRunQuery) == null ? void 0 : _a2.call(props);
2714
2955
  };
2715
- return /* @__PURE__ */ React__default["default"].createElement(ui.InlineField, { label: "Format as", labelWidth: 11 }, /* @__PURE__ */ React__default["default"].createElement(
2956
+ return /* @__PURE__ */ React__default["default"].createElement(React__default["default"].Fragment, null, props.newFormStylingEnabled ? /* @__PURE__ */ React__default["default"].createElement(
2957
+ ui.Select,
2958
+ {
2959
+ "aria-label": "Format data frames as",
2960
+ id: (_a = props.id) != null ? _a : "formatAs",
2961
+ options: props.options,
2962
+ value: props.query.format,
2963
+ onChange: onChangeFormat,
2964
+ menuShouldPortal: true
2965
+ }
2966
+ ) : /* @__PURE__ */ React__default["default"].createElement(ui.InlineField, { label: "Format as", labelWidth: 11 }, /* @__PURE__ */ React__default["default"].createElement(
2716
2967
  ui.Select,
2717
2968
  {
2718
2969
  "aria-label": "Format as",
@@ -2722,7 +2973,7 @@ function FormatSelect(props) {
2722
2973
  className: "width-12",
2723
2974
  menuShouldPortal: true
2724
2975
  }
2725
- ));
2976
+ )));
2726
2977
  }
2727
2978
 
2728
2979
  var __defProp$1 = Object.defineProperty;
@@ -2765,11 +3016,13 @@ const SelectableFillValueOptions = [
2765
3016
  }
2766
3017
  ];
2767
3018
  function FillValueSelect(props) {
2768
- var _a, _b, _c;
2769
- return /* @__PURE__ */ React__default["default"].createElement(React__default["default"].Fragment, null, /* @__PURE__ */ React__default["default"].createElement(ui.InlineField, { label: "Fill value", tooltip: "value to fill missing points" }, /* @__PURE__ */ React__default["default"].createElement(
3019
+ var _a, _b, _c, _d, _e, _f;
3020
+ return /* @__PURE__ */ React__default["default"].createElement(React__default["default"].Fragment, null, props.newFormStylingEnabled ? /* @__PURE__ */ React__default["default"].createElement(React__default["default"].Fragment, null, /* @__PURE__ */ React__default["default"].createElement(experimental.EditorField, { label: "Fill with", tooltip: "value to fill missing points", htmlFor: "fillWith" }, /* @__PURE__ */ React__default["default"].createElement(
2770
3021
  ui.Select,
2771
3022
  {
2772
- "aria-label": "Fill value",
3023
+ id: "fillWith",
3024
+ "aria-label": "Fill with",
3025
+ "data-testid": "table-fill-with-select",
2773
3026
  options: SelectableFillValueOptions,
2774
3027
  value: (_b = (_a = props.query.fillMode) == null ? void 0 : _a.mode) != null ? _b : 0 /* Previous */,
2775
3028
  onChange: ({ value }) => {
@@ -2779,10 +3032,43 @@ function FillValueSelect(props) {
2779
3032
  }));
2780
3033
  (_a2 = props.onRunQuery) == null ? void 0 : _a2.call(props);
2781
3034
  },
3035
+ menuShouldPortal: true
3036
+ }
3037
+ )), ((_c = props.query.fillMode) == null ? void 0 : _c.mode) === 2 /* Value */ && /* @__PURE__ */ React__default["default"].createElement(experimental.EditorField, { label: "Value", htmlFor: "valueToFill", width: 6 }, /* @__PURE__ */ React__default["default"].createElement(
3038
+ ui.Input,
3039
+ {
3040
+ id: "valueToFill",
3041
+ "aria-label": "Value",
3042
+ type: "number",
3043
+ value: props.query.fillMode.value,
3044
+ onChange: ({ currentTarget }) => props.onChange(__spreadProps$1(__spreadValues$1({}, props.query), {
3045
+ fillMode: {
3046
+ mode: 2 /* Value */,
3047
+ value: currentTarget.valueAsNumber
3048
+ }
3049
+ })),
3050
+ onBlur: () => {
3051
+ var _a2;
3052
+ return (_a2 = props.onRunQuery) == null ? void 0 : _a2.call(props);
3053
+ }
3054
+ }
3055
+ ))) : /* @__PURE__ */ React__default["default"].createElement(React__default["default"].Fragment, null, /* @__PURE__ */ React__default["default"].createElement(ui.InlineField, { label: "Fill value", tooltip: "value to fill missing points" }, /* @__PURE__ */ React__default["default"].createElement(
3056
+ ui.Select,
3057
+ {
3058
+ "aria-label": "Fill value",
3059
+ options: SelectableFillValueOptions,
3060
+ value: (_e = (_d = props.query.fillMode) == null ? void 0 : _d.mode) != null ? _e : 0 /* Previous */,
3061
+ onChange: ({ value }) => {
3062
+ var _a2;
3063
+ props.onChange(__spreadProps$1(__spreadValues$1({}, props.query), {
3064
+ fillMode: __spreadProps$1(__spreadValues$1({}, props.query.fillMode), { mode: value })
3065
+ }));
3066
+ (_a2 = props.onRunQuery) == null ? void 0 : _a2.call(props);
3067
+ },
2782
3068
  className: "width-12",
2783
3069
  menuShouldPortal: true
2784
3070
  }
2785
- )), ((_c = props.query.fillMode) == null ? void 0 : _c.mode) === 2 /* Value */ && /* @__PURE__ */ React__default["default"].createElement(ui.InlineField, { label: "Value", labelWidth: 11 }, /* @__PURE__ */ React__default["default"].createElement(
3071
+ )), ((_f = props.query.fillMode) == null ? void 0 : _f.mode) === 2 /* Value */ && /* @__PURE__ */ React__default["default"].createElement(ui.InlineField, { label: "Value", labelWidth: 11 }, /* @__PURE__ */ React__default["default"].createElement(
2786
3072
  ui.Input,
2787
3073
  {
2788
3074
  type: "number",
@@ -2799,7 +3085,7 @@ function FillValueSelect(props) {
2799
3085
  return (_a2 = props.onRunQuery) == null ? void 0 : _a2.call(props);
2800
3086
  }
2801
3087
  }
2802
- )));
3088
+ ))));
2803
3089
  }
2804
3090
 
2805
3091
  var __defProp = Object.defineProperty;
@@ -2864,6 +3150,7 @@ exports.AwsAuthType = AwsAuthType;
2864
3150
  exports.ConfigSelect = ConfigSelect;
2865
3151
  exports.ConnectionConfig = ConnectionConfig;
2866
3152
  exports.DEFAULT_LABEL_WIDTH = DEFAULT_LABEL_WIDTH;
3153
+ exports.Divider = Divider;
2867
3154
  exports.FillValueOptions = FillValueOptions;
2868
3155
  exports.FillValueSelect = FillValueSelect;
2869
3156
  exports.FormatSelect = FormatSelect;