@grafana/plugin-ui 0.17.0 → 0.17.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 (86) hide show
  1. package/dist/cjs/index.cjs +13105 -7657
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/cjs/index.d.cts +852 -542
  4. package/dist/esm/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.js +3 -3
  5. package/dist/esm/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.js.map +1 -1
  6. package/dist/esm/components/ConfigEditor/ConfigSection/ConfigDescriptionLink.js +2 -2
  7. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/DatasourceConfigWizard.js +23 -0
  8. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/DatasourceConfigWizard.js.map +1 -0
  9. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/DatasourceErrorBoundary.js +27 -0
  10. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/DatasourceErrorBoundary.js.map +1 -0
  11. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/SchemaField.js +61 -0
  12. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/SchemaField.js.map +1 -0
  13. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/WizardLayout.js +89 -0
  14. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/WizardLayout.js.map +1 -0
  15. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/cel.js +75 -0
  16. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/cel.js.map +1 -0
  17. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/config.js +262 -0
  18. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/config.js.map +1 -0
  19. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/datasource.js +354 -0
  20. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/datasource.js.map +1 -0
  21. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/formInterpreter.js +93 -0
  22. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/formInterpreter.js.map +1 -0
  23. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/useDatasourceConfigForm.js +254 -0
  24. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/useDatasourceConfigForm.js.map +1 -0
  25. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/useHealthChecks.js +106 -0
  26. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/useHealthChecks.js.map +1 -0
  27. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/AuthorizationHeaderField.js +52 -0
  28. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/AuthorizationHeaderField.js.map +1 -0
  29. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/ComplexFieldNote.js +32 -0
  30. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/ComplexFieldNote.js.map +1 -0
  31. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/FieldInput.js +110 -0
  32. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/FieldInput.js.map +1 -0
  33. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/FileUploadField.js +112 -0
  34. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/FileUploadField.js.map +1 -0
  35. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/IndexedPairEditor.js +140 -0
  36. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/IndexedPairEditor.js.map +1 -0
  37. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/ObjectArrayEditor.js +201 -0
  38. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/ObjectArrayEditor.js.map +1 -0
  39. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/PrimitiveInputs.js +103 -0
  40. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/PrimitiveInputs.js.map +1 -0
  41. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/SecureFieldInput.js +72 -0
  42. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/SecureFieldInput.js.map +1 -0
  43. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/StringArrayInput.js +94 -0
  44. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/StringArrayInput.js.map +1 -0
  45. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/fieldUtils.js +138 -0
  46. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/fieldUtils.js.map +1 -0
  47. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/layoutParts.js +82 -0
  48. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/layoutParts.js.map +1 -0
  49. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/resolvePluginName.js +30 -0
  50. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/resolvePluginName.js.map +1 -0
  51. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/styles.js +128 -0
  52. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/styles.js.map +1 -0
  53. package/dist/esm/components/DataLinks/DataLink.js +2 -2
  54. package/dist/esm/components/DataLinks/DataLinks.js +2 -2
  55. package/dist/esm/components/DataSourcePicker/DataSourcePicker.js +7 -7
  56. package/dist/esm/components/DatePicker/styles.js +2 -2
  57. package/dist/esm/components/DatePickerWithInput/styles.js +2 -2
  58. package/dist/esm/components/QueryEditor/EditorField.js +2 -2
  59. package/dist/esm/components/QueryEditor/EditorHeader.js +2 -2
  60. package/dist/esm/components/QueryEditor/EditorRow.js +2 -2
  61. package/dist/esm/components/QueryEditor/EditorSwitch.js +2 -2
  62. package/dist/esm/components/QueryEditor/InputGroup.js +2 -2
  63. package/dist/esm/components/QueryEditor/Space.js +2 -2
  64. package/dist/esm/components/QueryEditor/query-editor-raw/RawEditor.js +2 -2
  65. package/dist/esm/components/QueryEditor/visual-query-builder/EditorField.js +2 -2
  66. package/dist/esm/components/QueryEditor/visual-query-builder/EditorRow.js +2 -2
  67. package/dist/esm/components/QueryEditor/visual-query-builder/Preview.js +2 -2
  68. package/dist/esm/components/QueryEditor/visual-query-builder/SelectRow.js +2 -2
  69. package/dist/esm/components/SQLEditor/utils/LinkedToken.js +8 -8
  70. package/dist/esm/datasource/SqlDatasource.js +11 -11
  71. package/dist/esm/index.d.ts +852 -542
  72. package/dist/esm/index.js +9 -1
  73. package/dist/esm/index.js.map +1 -1
  74. package/dist/esm/node_modules/immutable/dist/immutable.es.js +11 -11
  75. package/dist/esm/node_modules/immutable/dist/immutable.es.js.map +1 -1
  76. package/dist/esm/node_modules/react-hook-form/dist/index.esm.js +2798 -0
  77. package/dist/esm/node_modules/react-hook-form/dist/index.esm.js.map +1 -0
  78. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isFunction.js +2 -2
  79. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isFunction.js.map +1 -1
  80. package/dist/esm/schema/utils/dsconfig.js +97 -0
  81. package/dist/esm/schema/utils/dsconfig.js.map +1 -0
  82. package/dist/esm/schema/utils/llm.js +54 -0
  83. package/dist/esm/schema/utils/llm.js.map +1 -0
  84. package/dist/esm/schema/utils/provisioning.js +2 -2
  85. package/dist/esm/schema/utils/provisioning.js.map +1 -1
  86. package/package.json +2 -1
@@ -0,0 +1,138 @@
1
+ import { parseDependsOn, formKey, evaluateDependsOn, getWatchedValue } from '../config.js';
2
+ import { evaluateCelExpression } from '../cel.js';
3
+ import { SECURE_FIELD_CONFIGURED } from '../datasource.js';
4
+
5
+ function evaluateEffectCondition(when, fieldValue) {
6
+ var _a, _b;
7
+ const m = when.match(/^value\s*(==|!=)\s*(?:'([^']*)'|"([^"]*)"|(.+))$/);
8
+ if (!m) {
9
+ return false;
10
+ }
11
+ const op = m[1];
12
+ let target = (_b = (_a = m[2]) != null ? _a : m[3]) != null ? _b : m[4];
13
+ if (target === "true") {
14
+ target = true;
15
+ } else if (target === "false") {
16
+ target = false;
17
+ } else if (typeof target === "string" && /^-?\d+(\.\d+)?$/.test(target)) {
18
+ target = Number(target);
19
+ }
20
+ const eq = String(fieldValue) === String(target);
21
+ return op === "==" ? eq : !eq;
22
+ }
23
+ function isFieldRequired(field, watchedValues, fieldById, celContext) {
24
+ if (field.required) {
25
+ return true;
26
+ }
27
+ if (field.requiredWhen) {
28
+ if (celContext) {
29
+ return evaluateCelExpression(field.requiredWhen, celContext);
30
+ }
31
+ const parsed = parseDependsOn(field.requiredWhen);
32
+ if (parsed) {
33
+ const depField = fieldById.get(parsed.field);
34
+ const depKey = depField ? formKey(depField) : parsed.field;
35
+ return evaluateDependsOn(parsed, getWatchedValue(watchedValues, depKey));
36
+ }
37
+ }
38
+ return false;
39
+ }
40
+ function buildValidationRules(field, required) {
41
+ var _a, _b, _c, _d, _e, _f, _g, _h;
42
+ const rules = {};
43
+ const label = (_a = field.label) != null ? _a : field.key;
44
+ if (required) {
45
+ if (field.target === "secureJsonData") {
46
+ rules.validate = (value) => {
47
+ if (value === SECURE_FIELD_CONFIGURED) {
48
+ return true;
49
+ }
50
+ if (!value || value === "") {
51
+ return `${label} is required`;
52
+ }
53
+ return true;
54
+ };
55
+ } else {
56
+ rules.required = `${label} is required`;
57
+ }
58
+ }
59
+ if (field.valueType === "array" && ((_b = field.item) == null ? void 0 : _b.valueType) === "object" && ((_c = field.item.fields) == null ? void 0 : _c.length)) {
60
+ const requiredItemFields = field.item.fields.filter((f) => f.required);
61
+ if (requiredItemFields.length > 0) {
62
+ const existingValidate = rules.validate;
63
+ rules.validate = (value) => {
64
+ var _a2;
65
+ if (existingValidate) {
66
+ const r = existingValidate(value);
67
+ if (r !== true) {
68
+ return r;
69
+ }
70
+ }
71
+ if (!Array.isArray(value)) {
72
+ return true;
73
+ }
74
+ const itemErrors = {};
75
+ for (let i = 0; i < value.length; i++) {
76
+ const item = value[i];
77
+ const missing = [];
78
+ for (const rf of requiredItemFields) {
79
+ const v = item[rf.key];
80
+ if (v === void 0 || v === null || v === "") {
81
+ missing.push((_a2 = rf.label) != null ? _a2 : rf.key);
82
+ }
83
+ }
84
+ if (missing.length > 0) {
85
+ itemErrors[i] = `${missing.join(", ")} required`;
86
+ }
87
+ }
88
+ if (Object.keys(itemErrors).length === 0) {
89
+ return true;
90
+ }
91
+ return `__ITEM_ERRORS__${JSON.stringify(itemErrors)}`;
92
+ };
93
+ }
94
+ }
95
+ if (field.validations) {
96
+ for (const v of field.validations) {
97
+ switch (v.type) {
98
+ case "pattern":
99
+ rules.pattern = {
100
+ value: new RegExp(v.pattern),
101
+ message: (_d = v.message) != null ? _d : `Invalid ${label}`
102
+ };
103
+ break;
104
+ case "range":
105
+ if (v.min !== void 0) {
106
+ rules.min = { value: v.min, message: (_e = v.message) != null ? _e : `Minimum value is ${v.min}` };
107
+ }
108
+ if (v.max !== void 0) {
109
+ rules.max = { value: v.max, message: (_f = v.message) != null ? _f : `Maximum value is ${v.max}` };
110
+ }
111
+ break;
112
+ case "length":
113
+ if (v.min !== void 0) {
114
+ rules.minLength = { value: v.min, message: (_g = v.message) != null ? _g : `Minimum length is ${v.min}` };
115
+ }
116
+ if (v.max !== void 0) {
117
+ rules.maxLength = { value: v.max, message: (_h = v.message) != null ? _h : `Maximum length is ${v.max}` };
118
+ }
119
+ break;
120
+ }
121
+ }
122
+ }
123
+ return rules;
124
+ }
125
+ const ITEM_ERRORS_PREFIX = "__ITEM_ERRORS__";
126
+ function parseItemErrors(errorMessage) {
127
+ if (!errorMessage || !errorMessage.startsWith(ITEM_ERRORS_PREFIX)) {
128
+ return null;
129
+ }
130
+ try {
131
+ return JSON.parse(errorMessage.slice(ITEM_ERRORS_PREFIX.length));
132
+ } catch (e) {
133
+ return null;
134
+ }
135
+ }
136
+
137
+ export { buildValidationRules, evaluateEffectCondition, isFieldRequired, parseItemErrors };
138
+ //# sourceMappingURL=fieldUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fieldUtils.js","sources":["../../../../../../src/components/ConfigEditor/DatasourceConfigWizard/inputs/fieldUtils.ts"],"sourcesContent":["import { parseDependsOn, evaluateDependsOn, formKey, getWatchedValue } from '../config';\nimport { evaluateCelExpression } from '../cel';\nimport { SECURE_FIELD_CONFIGURED } from '../datasource';\nimport type { ConfigField } from '../../../../schema/schema';\n\n/**\n * Evaluate an effect's `when` condition against a field value.\n * Supports: \"value == 'literal'\", \"value == true\", \"value != 'literal'\"\n * The keyword `value` refers to the current value of the source field.\n */\nexport function evaluateEffectCondition(when: string, fieldValue: unknown): boolean {\n const m = when.match(/^value\\s*(==|!=)\\s*(?:'([^']*)'|\"([^\"]*)\"|(.+))$/);\n if (!m) {\n return false;\n }\n const op = m[1];\n let target: unknown = m[2] ?? m[3] ?? m[4];\n if (target === 'true') {\n target = true;\n } else if (target === 'false') {\n target = false;\n } else if (typeof target === 'string' && /^-?\\d+(\\.\\d+)?$/.test(target)) {\n target = Number(target);\n }\n\n const eq = String(fieldValue) === String(target);\n return op === '==' ? eq : !eq;\n}\n\n/**\n * Evaluate whether a field is currently required, considering both the static\n * `required` flag and the conditional `requiredWhen` expression.\n */\nexport function isFieldRequired(\n field: ConfigField,\n watchedValues: Record<string, unknown>,\n fieldById: Map<string, ConfigField>,\n celContext?: Record<string, unknown>\n): boolean {\n if (field.required) {\n return true;\n }\n if (field.requiredWhen) {\n // Use CEL evaluation if context is available (supports compound expressions)\n if (celContext) {\n return evaluateCelExpression(field.requiredWhen, celContext);\n }\n // Fallback to simple parser for backward compatibility\n const parsed = parseDependsOn(field.requiredWhen);\n if (parsed) {\n const depField = fieldById.get(parsed.field);\n const depKey = depField ? formKey(depField) : parsed.field;\n return evaluateDependsOn(parsed, getWatchedValue(watchedValues, depKey));\n }\n }\n return false;\n}\n\nexport function buildValidationRules(field: ConfigField, required: boolean) {\n const rules: Record<string, unknown> = {};\n const label = field.label ?? field.key;\n\n if (required) {\n if (field.target === 'secureJsonData') {\n rules.validate = (value: unknown) => {\n if (value === SECURE_FIELD_CONFIGURED) {\n return true;\n }\n if (!value || value === '') {\n return `${label} is required`;\n }\n return true;\n };\n } else {\n rules.required = `${label} is required`;\n }\n }\n\n // Validate required item fields inside object arrays.\n // Returns a JSON-encoded map of {itemIndex: \"message\"} so ObjectArrayEditor\n // can render errors inline per item. react-hook-form treats any non-true\n // string as an error message.\n if (field.valueType === 'array' && field.item?.valueType === 'object' && field.item.fields?.length) {\n const requiredItemFields = field.item.fields.filter((f) => f.required);\n if (requiredItemFields.length > 0) {\n const existingValidate = rules.validate as ((v: unknown) => true | string) | undefined;\n rules.validate = (value: unknown) => {\n if (existingValidate) {\n const r = existingValidate(value);\n if (r !== true) {\n return r;\n }\n }\n if (!Array.isArray(value)) {\n return true;\n }\n const itemErrors: Record<number, string> = {};\n for (let i = 0; i < value.length; i++) {\n const item = value[i] as Record<string, unknown>;\n const missing: string[] = [];\n for (const rf of requiredItemFields) {\n const v = item[rf.key];\n if (v === undefined || v === null || v === '') {\n missing.push(rf.label ?? rf.key);\n }\n }\n if (missing.length > 0) {\n itemErrors[i] = `${missing.join(', ')} required`;\n }\n }\n if (Object.keys(itemErrors).length === 0) {\n return true;\n }\n // Encode as JSON so ObjectArrayEditor can parse and show per-item\n return `__ITEM_ERRORS__${JSON.stringify(itemErrors)}`;\n };\n }\n }\n\n if (field.validations) {\n for (const v of field.validations) {\n switch (v.type) {\n case 'pattern':\n rules.pattern = {\n value: new RegExp(v.pattern),\n message: v.message ?? `Invalid ${label}`,\n };\n break;\n case 'range':\n if (v.min !== undefined) {\n rules.min = { value: v.min, message: v.message ?? `Minimum value is ${v.min}` };\n }\n if (v.max !== undefined) {\n rules.max = { value: v.max, message: v.message ?? `Maximum value is ${v.max}` };\n }\n break;\n case 'length':\n if (v.min !== undefined) {\n rules.minLength = { value: v.min, message: v.message ?? `Minimum length is ${v.min}` };\n }\n if (v.max !== undefined) {\n rules.maxLength = { value: v.max, message: v.message ?? `Maximum length is ${v.max}` };\n }\n break;\n }\n }\n }\n\n return rules;\n}\nconst ITEM_ERRORS_PREFIX = '__ITEM_ERRORS__';\n\n/**\n * Parse a per-item error message encoded by buildValidationRules.\n * Returns a map of item index → error message, or null if not an item error.\n */\nexport function parseItemErrors(errorMessage: string | undefined): Record<number, string> | null {\n if (!errorMessage || !errorMessage.startsWith(ITEM_ERRORS_PREFIX)) {\n return null;\n }\n try {\n return JSON.parse(errorMessage.slice(ITEM_ERRORS_PREFIX.length));\n } catch {\n return null;\n }\n}\n"],"names":["_a"],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ import React from 'react';
2
+ import { Alert, LinkButton, Button } from '@grafana/ui';
3
+ import { formKey } from './config.js';
4
+ import { SchemaField } from './SchemaField.js';
5
+ import { AuthorizationHeaderField } from './inputs/AuthorizationHeaderField.js';
6
+
7
+ function GroupFields({
8
+ group,
9
+ form,
10
+ dsUid,
11
+ showAuthHeaders
12
+ }) {
13
+ const {
14
+ control,
15
+ errors,
16
+ watchedValues,
17
+ fieldById,
18
+ celContext,
19
+ setValue,
20
+ isFieldVisible,
21
+ isFieldDisabled,
22
+ httpHeadersField,
23
+ submitting,
24
+ readOnly
25
+ } = form;
26
+ const allDisabled = submitting || readOnly;
27
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, group.fields.filter(isFieldVisible).map((field) => /* @__PURE__ */ React.createElement(
28
+ SchemaField,
29
+ {
30
+ key: formKey(field),
31
+ field,
32
+ control,
33
+ errors,
34
+ disabled: allDisabled || isFieldDisabled(field),
35
+ dsUid,
36
+ watchedValues,
37
+ fieldById,
38
+ celContext,
39
+ setValue
40
+ }
41
+ )), showAuthHeaders && httpHeadersField && /* @__PURE__ */ React.createElement(
42
+ AuthorizationHeaderField,
43
+ {
44
+ headersFieldKey: formKey(httpHeadersField),
45
+ control,
46
+ disabled: allDisabled
47
+ }
48
+ ));
49
+ }
50
+ function FormFooter({
51
+ form,
52
+ schema,
53
+ dsUid,
54
+ dsName,
55
+ onRetest,
56
+ healthError,
57
+ renderActions,
58
+ saveDisabled,
59
+ className
60
+ }) {
61
+ const { readOnly, submitting, submitError } = form;
62
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, submitError && /* @__PURE__ */ React.createElement(Alert, { severity: "error", title: "Error" }, submitError), /* @__PURE__ */ React.createElement("div", { className }, readOnly ? /* @__PURE__ */ React.createElement(Button, { variant: "primary", size: "sm", icon: "sync", onClick: onRetest, type: "button" }, "Test") : /* @__PURE__ */ React.createElement(Button, { variant: "primary", size: "sm", disabled: saveDisabled, type: "submit" }, submitting ? "Saving\u2026" : "Save & Test"), healthError && (renderActions == null ? void 0 : renderActions({ dsUid, dsName, dsType: schema.pluginType, healthError }))));
63
+ }
64
+ function FetchErrorState({
65
+ error,
66
+ dsUid,
67
+ buttonClassName
68
+ }) {
69
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Alert, { severity: "error", title: "Failed to load configuration" }, error), /* @__PURE__ */ React.createElement("div", { className: buttonClassName }, /* @__PURE__ */ React.createElement(
70
+ LinkButton,
71
+ {
72
+ variant: "secondary",
73
+ size: "sm",
74
+ icon: "external-link-alt",
75
+ href: `/connections/datasources/edit/${dsUid}`
76
+ },
77
+ "Open datasource settings"
78
+ )));
79
+ }
80
+
81
+ export { FetchErrorState, FormFooter, GroupFields };
82
+ //# sourceMappingURL=layoutParts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layoutParts.js","sources":["../../../../../src/components/ConfigEditor/DatasourceConfigWizard/layoutParts.tsx"],"sourcesContent":["import React, { type ReactNode } from 'react';\nimport { Alert, Button, LinkButton } from '@grafana/ui';\nimport type { DatasourceConfigSchema } from '../../../schema/schema';\nimport { formKey, type ResolvedGroup } from './config';\nimport type { useDatasourceConfigForm } from './hooks/useDatasourceConfigForm';\nimport { SchemaField } from './SchemaField';\nimport { AuthorizationHeaderField } from './inputs/AuthorizationHeaderField';\n\ntype ConfigForm = ReturnType<typeof useDatasourceConfigForm>;\n\ntype RenderActions = (props: { dsUid: string; dsName: string; dsType: string; healthError?: string }) => ReactNode;\n\n/**\n * Renders the visible fields of a single group plus the optional Authorization\n * header editor. Shared by both the tab and wizard layouts so the field-render\n * contract lives in exactly one place.\n *\n * `showAuthHeaders` is passed in (rather than derived here) because the two\n * layouts intentionally use different predicates for when to show it.\n */\nexport function GroupFields({\n group,\n form,\n dsUid,\n showAuthHeaders,\n}: {\n group: ResolvedGroup;\n form: ConfigForm;\n dsUid: string;\n showAuthHeaders: boolean;\n}) {\n const {\n control,\n errors,\n watchedValues,\n fieldById,\n celContext,\n setValue,\n isFieldVisible,\n isFieldDisabled,\n httpHeadersField,\n submitting,\n readOnly,\n } = form;\n const allDisabled = submitting || readOnly;\n\n return (\n <>\n {group.fields.filter(isFieldVisible).map((field) => (\n <SchemaField\n key={formKey(field)}\n field={field}\n control={control}\n errors={errors}\n disabled={allDisabled || isFieldDisabled(field)}\n dsUid={dsUid}\n watchedValues={watchedValues}\n fieldById={fieldById}\n celContext={celContext}\n setValue={setValue}\n />\n ))}\n\n {showAuthHeaders && httpHeadersField && (\n <AuthorizationHeaderField\n headersFieldKey={formKey(httpHeadersField)}\n control={control}\n disabled={allDisabled}\n />\n )}\n </>\n );\n}\n\n/**\n * Submit-error alert plus the Save/Test action row. `saveDisabled` and\n * `className` differ per layout (the wizard also gates on step validity and\n * uses its own button container).\n */\nexport function FormFooter({\n form,\n schema,\n dsUid,\n dsName,\n onRetest,\n healthError,\n renderActions,\n saveDisabled,\n className,\n}: {\n form: ConfigForm;\n schema: DatasourceConfigSchema;\n dsUid: string;\n dsName: string;\n onRetest?: () => void;\n healthError?: string;\n renderActions?: RenderActions;\n saveDisabled: boolean;\n className: string;\n}) {\n const { readOnly, submitting, submitError } = form;\n\n return (\n <>\n {submitError && (\n <Alert severity=\"error\" title=\"Error\">\n {submitError}\n </Alert>\n )}\n\n <div className={className}>\n {readOnly ? (\n <Button variant=\"primary\" size=\"sm\" icon=\"sync\" onClick={onRetest} type=\"button\">\n Test\n </Button>\n ) : (\n <Button variant=\"primary\" size=\"sm\" disabled={saveDisabled} type=\"submit\">\n {submitting ? 'Saving…' : 'Save & Test'}\n </Button>\n )}\n {healthError && renderActions?.({ dsUid, dsName, dsType: schema.pluginType, healthError })}\n </div>\n </>\n );\n}\n\n/**\n * \"Failed to load configuration\" state with a link to the native datasource\n * settings page. The outer container class differs per layout, so callers wrap\n * this; `buttonClassName` styles the link row.\n */\nexport function FetchErrorState({\n error,\n dsUid,\n buttonClassName,\n}: {\n error: string;\n dsUid: string;\n buttonClassName: string;\n}) {\n return (\n <>\n <Alert severity=\"error\" title=\"Failed to load configuration\">\n {error}\n </Alert>\n <div className={buttonClassName}>\n <LinkButton\n variant=\"secondary\"\n size=\"sm\"\n icon=\"external-link-alt\"\n href={`/connections/datasources/edit/${dsUid}`}\n >\n Open datasource settings\n </LinkButton>\n </div>\n </>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { getDataSourceSrv } from '@grafana/runtime';
2
+
3
+ let pluginNameCache = null;
4
+ function buildPluginNameCache() {
5
+ var _a;
6
+ if (pluginNameCache) {
7
+ return pluginNameCache;
8
+ }
9
+ const map = /* @__PURE__ */ new Map();
10
+ try {
11
+ const list = getDataSourceSrv().getList();
12
+ for (const ds of list) {
13
+ if (((_a = ds.meta) == null ? void 0 : _a.name) && ds.type && !map.has(ds.type)) {
14
+ map.set(ds.type, ds.meta.name);
15
+ }
16
+ }
17
+ } catch (ex) {
18
+ console.error(ex);
19
+ }
20
+ pluginNameCache = map;
21
+ return map;
22
+ }
23
+ function resolvePluginName(pluginType) {
24
+ var _a;
25
+ const cache = buildPluginNameCache();
26
+ return (_a = cache.get(pluginType)) != null ? _a : pluginType;
27
+ }
28
+
29
+ export { resolvePluginName };
30
+ //# sourceMappingURL=resolvePluginName.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolvePluginName.js","sources":["../../../../../src/components/ConfigEditor/DatasourceConfigWizard/resolvePluginName.ts"],"sourcesContent":["import { getDataSourceSrv } from '@grafana/runtime';\n\nlet pluginNameCache: Map<string, string> | null = null;\n\nfunction buildPluginNameCache(): Map<string, string> {\n if (pluginNameCache) {\n return pluginNameCache;\n }\n const map = new Map<string, string>();\n try {\n const list = getDataSourceSrv().getList();\n for (const ds of list) {\n if (ds.meta?.name && ds.type && !map.has(ds.type)) {\n map.set(ds.type, ds.meta.name);\n }\n }\n } catch (ex) {\n console.error(ex);\n }\n pluginNameCache = map;\n return map;\n}\n\nexport function resolvePluginName(pluginType: string): string {\n const cache = buildPluginNameCache();\n return cache.get(pluginType) ?? pluginType;\n}\n"],"names":[],"mappings":";;AAEA,IAAI,eAAA,GAA8C,IAAA;AAElD,SAAS,oBAAA,GAA4C;AAJrD,EAAA,IAAA,EAAA;AAKE,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,OAAO,eAAA;AAAA,EACT;AACA,EAAA,MAAM,GAAA,uBAAU,GAAA,EAAoB;AACpC,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,gBAAA,EAAiB,CAAE,OAAA,EAAQ;AACxC,IAAA,KAAA,MAAW,MAAM,IAAA,EAAM;AACrB,MAAA,IAAA,CAAA,CAAI,EAAA,GAAA,EAAA,CAAG,IAAA,KAAH,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAS,IAAA,KAAQ,EAAA,CAAG,IAAA,IAAQ,CAAC,GAAA,CAAI,GAAA,CAAI,EAAA,CAAG,IAAI,CAAA,EAAG;AACjD,QAAA,GAAA,CAAI,GAAA,CAAI,EAAA,CAAG,IAAA,EAAM,EAAA,CAAG,KAAK,IAAI,CAAA;AAAA,MAC/B;AAAA,IACF;AAAA,EACF,SAAS,EAAA,EAAI;AACX,IAAA,OAAA,CAAQ,MAAM,EAAE,CAAA;AAAA,EAClB;AACA,EAAA,eAAA,GAAkB,GAAA;AAClB,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,kBAAkB,UAAA,EAA4B;AAvB9D,EAAA,IAAA,EAAA;AAwBE,EAAA,MAAM,QAAQ,oBAAA,EAAqB;AACnC,EAAA,OAAA,CAAO,EAAA,GAAA,KAAA,CAAM,GAAA,CAAI,UAAU,CAAA,KAApB,IAAA,GAAA,EAAA,GAAyB,UAAA;AAClC;;;;"}
@@ -0,0 +1,128 @@
1
+ import { css } from '@emotion/css';
2
+
3
+ const overlayStyle = (theme) => ({
4
+ position: "absolute",
5
+ inset: 0,
6
+ display: "flex",
7
+ alignItems: "center",
8
+ justifyContent: "center",
9
+ gap: theme.spacing(1),
10
+ background: theme.colors.background.secondary,
11
+ borderRadius: theme.shape.radius.default,
12
+ zIndex: 1,
13
+ fontSize: theme.typography.bodySmall.fontSize,
14
+ color: theme.colors.text.primary,
15
+ opacity: 0.95
16
+ });
17
+ const readOnlyBannerStyle = (theme) => ({
18
+ display: "inline-flex",
19
+ alignItems: "center",
20
+ gap: theme.spacing(0.5),
21
+ padding: `${theme.spacing(0.25)} ${theme.spacing(0.75)}`,
22
+ fontSize: theme.typography.bodySmall.fontSize,
23
+ color: theme.colors.text.secondary,
24
+ backgroundColor: theme.colors.background.secondary,
25
+ borderRadius: theme.shape.radius.default,
26
+ border: `1px solid ${theme.colors.border.weak}`
27
+ });
28
+ const getWizardStyles = (theme) => ({
29
+ container: css({
30
+ position: "relative",
31
+ display: "flex",
32
+ flexDirection: "column",
33
+ gap: theme.spacing(1),
34
+ padding: theme.spacing(1.5),
35
+ backgroundColor: theme.colors.background.secondary,
36
+ borderRadius: theme.shape.radius.default,
37
+ border: `1px solid ${theme.colors.border.weak}`,
38
+ overflow: "hidden"
39
+ }),
40
+ overlay: css(overlayStyle(theme)),
41
+ readOnlyBanner: css(readOnlyBannerStyle(theme)),
42
+ navBar: css({
43
+ display: "flex",
44
+ alignItems: "center",
45
+ justifyContent: "space-between"
46
+ }),
47
+ navTitle: css({
48
+ display: "inline-flex",
49
+ alignItems: "center",
50
+ gap: theme.spacing(0.5),
51
+ fontSize: theme.typography.body.fontSize,
52
+ fontWeight: theme.typography.fontWeightBold,
53
+ color: theme.colors.text.primary
54
+ }),
55
+ stepCount: css({
56
+ fontSize: theme.typography.bodySmall.fontSize,
57
+ fontWeight: theme.typography.fontWeightRegular,
58
+ color: theme.colors.text.secondary
59
+ }),
60
+ navActions: css({
61
+ display: "flex",
62
+ alignItems: "center",
63
+ gap: theme.spacing(0.25)
64
+ }),
65
+ form: css({
66
+ display: "flex",
67
+ flexDirection: "column",
68
+ gap: theme.spacing(0.75)
69
+ }),
70
+ buttons: css({
71
+ display: "flex",
72
+ gap: theme.spacing(1),
73
+ paddingTop: theme.spacing(0.25)
74
+ })
75
+ });
76
+ const getFieldStyles = (theme) => ({
77
+ fieldRow: css({
78
+ display: "grid",
79
+ gridTemplateColumns: "minmax(80px, 1fr) minmax(0, 2fr)",
80
+ gap: theme.spacing(0.75),
81
+ alignItems: "start"
82
+ }),
83
+ fieldRowCenter: css({
84
+ display: "grid",
85
+ gridTemplateColumns: "minmax(80px, 1fr) minmax(0, 2fr)",
86
+ gap: theme.spacing(0.75),
87
+ alignItems: "center",
88
+ padding: `${theme.spacing(0.5)} 0`
89
+ }),
90
+ fieldLabelRow: css({
91
+ display: "flex",
92
+ alignItems: "center",
93
+ gap: theme.spacing(0.5),
94
+ paddingTop: theme.spacing(0.5)
95
+ }),
96
+ fieldLabelRowCompact: css({
97
+ display: "flex",
98
+ alignItems: "center",
99
+ gap: theme.spacing(0.5)
100
+ }),
101
+ fieldLabel: css({
102
+ fontSize: theme.typography.bodySmall.fontSize,
103
+ fontWeight: theme.typography.fontWeightMedium,
104
+ color: theme.colors.text.primary
105
+ }),
106
+ fieldRequired: css({
107
+ color: theme.colors.error.text,
108
+ marginLeft: 2
109
+ }),
110
+ fieldInfoIcon: css({
111
+ color: theme.colors.text.disabled,
112
+ cursor: "help",
113
+ flexShrink: 0
114
+ }),
115
+ fieldInputCol: css({
116
+ display: "flex",
117
+ flexDirection: "column",
118
+ gap: theme.spacing(0.25),
119
+ minWidth: 0
120
+ }),
121
+ fieldError: css({
122
+ fontSize: theme.typography.bodySmall.fontSize,
123
+ color: theme.colors.error.text
124
+ })
125
+ });
126
+
127
+ export { getFieldStyles, getWizardStyles };
128
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sources":["../../../../../src/components/ConfigEditor/DatasourceConfigWizard/styles.ts"],"sourcesContent":["import { css } from '@emotion/css';\nimport type { GrafanaTheme2 } from '@grafana/data';\n\n/** Centered saving/loading overlay. Identical in tab and wizard layouts. */\nconst overlayStyle = (theme: GrafanaTheme2) =>\n ({\n position: 'absolute',\n inset: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: theme.spacing(1),\n background: theme.colors.background.secondary,\n borderRadius: theme.shape.radius.default,\n zIndex: 1,\n fontSize: theme.typography.bodySmall.fontSize,\n color: theme.colors.text.primary,\n opacity: 0.95,\n }) as const;\n\n/** \"Read-only — managed externally\" banner. Tab layout adds a marginBottom. */\nconst readOnlyBannerStyle = (theme: GrafanaTheme2) =>\n ({\n display: 'inline-flex',\n alignItems: 'center',\n gap: theme.spacing(0.5),\n padding: `${theme.spacing(0.25)} ${theme.spacing(0.75)}`,\n fontSize: theme.typography.bodySmall.fontSize,\n color: theme.colors.text.secondary,\n backgroundColor: theme.colors.background.secondary,\n borderRadius: theme.shape.radius.default,\n border: `1px solid ${theme.colors.border.weak}`,\n }) as const;\n\nexport const getWizardStyles = (theme: GrafanaTheme2) => ({\n container: css({\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(1),\n padding: theme.spacing(1.5),\n backgroundColor: theme.colors.background.secondary,\n borderRadius: theme.shape.radius.default,\n border: `1px solid ${theme.colors.border.weak}`,\n overflow: 'hidden',\n }),\n overlay: css(overlayStyle(theme)),\n readOnlyBanner: css(readOnlyBannerStyle(theme)),\n navBar: css({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }),\n navTitle: css({\n display: 'inline-flex',\n alignItems: 'center',\n gap: theme.spacing(0.5),\n fontSize: theme.typography.body.fontSize,\n fontWeight: theme.typography.fontWeightBold,\n color: theme.colors.text.primary,\n }),\n stepCount: css({\n fontSize: theme.typography.bodySmall.fontSize,\n fontWeight: theme.typography.fontWeightRegular,\n color: theme.colors.text.secondary,\n }),\n navActions: css({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(0.25),\n }),\n form: css({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(0.75),\n }),\n buttons: css({\n display: 'flex',\n gap: theme.spacing(1),\n paddingTop: theme.spacing(0.25),\n }),\n});\n\n// Field-level styles shared by SchemaField and AuthorizationHeaderField, which\n// render in both the tab and wizard layouts (hence not tied to either one).\nexport const getFieldStyles = (theme: GrafanaTheme2) => ({\n fieldRow: css({\n display: 'grid',\n gridTemplateColumns: 'minmax(80px, 1fr) minmax(0, 2fr)',\n gap: theme.spacing(0.75),\n alignItems: 'start',\n }),\n fieldRowCenter: css({\n display: 'grid',\n gridTemplateColumns: 'minmax(80px, 1fr) minmax(0, 2fr)',\n gap: theme.spacing(0.75),\n alignItems: 'center',\n padding: `${theme.spacing(0.5)} 0`,\n }),\n fieldLabelRow: css({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(0.5),\n paddingTop: theme.spacing(0.5),\n }),\n fieldLabelRowCompact: css({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(0.5),\n }),\n fieldLabel: css({\n fontSize: theme.typography.bodySmall.fontSize,\n fontWeight: theme.typography.fontWeightMedium,\n color: theme.colors.text.primary,\n }),\n fieldRequired: css({\n color: theme.colors.error.text,\n marginLeft: 2,\n }),\n fieldInfoIcon: css({\n color: theme.colors.text.disabled,\n cursor: 'help',\n flexShrink: 0,\n }),\n fieldInputCol: css({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(0.25),\n minWidth: 0,\n }),\n fieldError: css({\n fontSize: theme.typography.bodySmall.fontSize,\n color: theme.colors.error.text,\n }),\n});\n"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ import { usePrevious } from 'react-use';
6
6
  import { DataSourcePicker } from '../DataSourcePicker/DataSourcePicker.js';
7
7
 
8
8
  const { FormField, Switch } = LegacyForms;
9
- const getStyles$p = stylesFactory(() => ({
9
+ const getStyles$u = stylesFactory(() => ({
10
10
  firstRow: css`
11
11
  display: flex;
12
12
  `,
@@ -23,7 +23,7 @@ const getStyles$p = stylesFactory(() => ({
23
23
  }));
24
24
  const DataLink = (props) => {
25
25
  const { value, onChange, onDelete, suggestions, className } = props;
26
- const styles = getStyles$p();
26
+ const styles = getStyles$u();
27
27
  const [showInternalLink, setShowInternalLink] = useInternalLink(value.datasourceUid);
28
28
  const handleChange = (field) => (event) => {
29
29
  onChange({
@@ -4,7 +4,7 @@ import { useTheme2, Button } from '@grafana/ui';
4
4
  import { VariableOrigin, DataLinkBuiltInVars } from '@grafana/data';
5
5
  import { DataLink } from './DataLink.js';
6
6
 
7
- const getStyles$o = (theme) => ({
7
+ const getStyles$t = (theme) => ({
8
8
  infoText: css`
9
9
  padding-bottom: ${theme.v1.spacing.md};
10
10
  color: ${theme.v1.colors.textWeak};
@@ -16,7 +16,7 @@ const getStyles$o = (theme) => ({
16
16
  const DataLinks = (props) => {
17
17
  const { value, onChange } = props;
18
18
  const theme = useTheme2();
19
- const styles = getStyles$o(theme);
19
+ const styles = getStyles$t(theme);
20
20
  return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("h3", { className: "page-heading" }, "Data links"), /* @__PURE__ */ React.createElement("div", { className: styles.infoText }, "Add links to existing fields. Links will be shown in log row details next to the field value."), /* @__PURE__ */ React.createElement("div", { className: "gf-form-group" }, value && value.map((field, index) => {
21
21
  return /* @__PURE__ */ React.createElement(
22
22
  DataLink,
@@ -5,15 +5,15 @@ import { selectors } from '@grafana/e2e-selectors';
5
5
  import { isUnsignedPluginSignature, PluginSignatureBadge } from '../Plugins/PluginSignatureBadge.js';
6
6
  import { getDataSourceSrv } from '@grafana/runtime';
7
7
 
8
- var __defProp$5 = Object.defineProperty;
9
- var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
10
- var __publicField$5 = (obj, key, value) => __defNormalProp$5(obj, typeof key !== "symbol" ? key + "" : key, value);
8
+ var __defProp$6 = Object.defineProperty;
9
+ var __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
10
+ var __publicField$6 = (obj, key, value) => __defNormalProp$6(obj, typeof key !== "symbol" ? key + "" : key, value);
11
11
  class DataSourcePicker extends PureComponent {
12
12
  constructor(props) {
13
13
  super(props);
14
- __publicField$5(this, "dataSourceSrv", getDataSourceSrv());
15
- __publicField$5(this, "state", {});
16
- __publicField$5(this, "onChange", (item) => {
14
+ __publicField$6(this, "dataSourceSrv", getDataSourceSrv());
15
+ __publicField$6(this, "state", {});
16
+ __publicField$6(this, "onChange", (item) => {
17
17
  const dsSettings = this.dataSourceSrv.getInstanceSettings(item.value);
18
18
  if (dsSettings) {
19
19
  this.props.onChange(dsSettings);
@@ -93,7 +93,7 @@ class DataSourcePicker extends PureComponent {
93
93
  ));
94
94
  }
95
95
  }
96
- __publicField$5(DataSourcePicker, "defaultProps", {
96
+ __publicField$6(DataSourcePicker, "defaultProps", {
97
97
  autoFocus: false,
98
98
  openMenuOnFocus: false,
99
99
  placeholder: "Select datasource"
@@ -1,7 +1,7 @@
1
1
  import '@grafana/data';
2
2
  import { css } from '@emotion/css';
3
3
 
4
- const getStyles$r = (theme) => {
4
+ const getStyles$w = (theme) => {
5
5
  const containerBorder = theme.isDark ? theme.v1.palette.dark9 : theme.v1.palette.gray5;
6
6
  return {
7
7
  container: css`
@@ -149,5 +149,5 @@ const getBodyStyles = (theme) => {
149
149
  };
150
150
  };
151
151
 
152
- export { getBodyStyles, getStyles$r as getStyles };
152
+ export { getBodyStyles, getStyles$w as getStyles };
153
153
  //# sourceMappingURL=styles.js.map
@@ -1,6 +1,6 @@
1
1
  import { css } from '@emotion/css';
2
2
 
3
- function getStyles$q() {
3
+ function getStyles$v() {
4
4
  return {
5
5
  input: css({
6
6
  /* hides the native Calendar picker icon given when using type=date */
@@ -12,5 +12,5 @@ function getStyles$q() {
12
12
  };
13
13
  }
14
14
 
15
- export { getStyles$q as getStyles };
15
+ export { getStyles$v as getStyles };
16
16
  //# sourceMappingURL=styles.js.map
@@ -6,12 +6,12 @@ import { useStyles2, ReactUtils, Tooltip, Icon, Space, Field } from '@grafana/ui
6
6
  const EditorField$1 = (props) => {
7
7
  var _a;
8
8
  const { label, optional, tooltip, tooltipInteractive, children, width, ...fieldProps } = props;
9
- const styles = useStyles2(getStyles$l, width);
9
+ const styles = useStyles2(getStyles$q, width);
10
10
  const childInputId = (fieldProps == null ? void 0 : fieldProps.htmlFor) || ((_a = ReactUtils) == null ? void 0 : _a.getChildId(children));
11
11
  const labelEl = /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("label", { className: styles.label, htmlFor: childInputId }, label, optional && /* @__PURE__ */ React.createElement("span", { className: styles.optional }, " - optional"), tooltip && /* @__PURE__ */ React.createElement(Tooltip, { placement: "top", content: tooltip, theme: "info", interactive: tooltipInteractive }, /* @__PURE__ */ React.createElement(Icon, { tabIndex: 0, name: "info-circle", size: "sm", className: styles.icon }))), /* @__PURE__ */ React.createElement(Space, { v: 0.5 }));
12
12
  return /* @__PURE__ */ React.createElement("div", { className: styles.root }, /* @__PURE__ */ React.createElement(Field, { className: styles.field, label: labelEl, ...fieldProps }, children));
13
13
  };
14
- const getStyles$l = (theme, width) => {
14
+ const getStyles$q = (theme, width) => {
15
15
  return {
16
16
  root: css({
17
17
  minWidth: theme.spacing(width != null ? width : 0)
@@ -4,10 +4,10 @@ import '@grafana/data';
4
4
  import { useStyles2 } from '@grafana/ui';
5
5
 
6
6
  const EditorHeader = ({ children }) => {
7
- const styles = useStyles2(getStyles$m);
7
+ const styles = useStyles2(getStyles$r);
8
8
  return /* @__PURE__ */ React.createElement("div", { className: styles.root }, children);
9
9
  };
10
- const getStyles$m = (theme) => ({
10
+ const getStyles$r = (theme) => ({
11
11
  root: css({
12
12
  display: "flex",
13
13
  flexWrap: "wrap",
@@ -5,10 +5,10 @@ import { useStyles2 } from '@grafana/ui';
5
5
  import { EditorStack } from './EditorStack.js';
6
6
 
7
7
  const EditorRow$1 = ({ children }) => {
8
- const styles = useStyles2(getStyles$k);
8
+ const styles = useStyles2(getStyles$p);
9
9
  return /* @__PURE__ */ React.createElement("div", { className: styles.root }, /* @__PURE__ */ React.createElement(EditorStack, { gap: 2 }, children));
10
10
  };
11
- const getStyles$k = (theme) => {
11
+ const getStyles$p = (theme) => {
12
12
  return {
13
13
  root: css({
14
14
  padding: theme.spacing(1),
@@ -3,10 +3,10 @@ import { css } from '@emotion/css';
3
3
  import { Switch } from '@grafana/ui';
4
4
 
5
5
  const EditorSwitch = (props) => {
6
- const styles = getStyles$j();
6
+ const styles = getStyles$o();
7
7
  return /* @__PURE__ */ React.createElement("div", { className: styles.switch }, /* @__PURE__ */ React.createElement(Switch, { ...props }));
8
8
  };
9
- const getStyles$j = () => {
9
+ const getStyles$o = () => {
10
10
  return {
11
11
  switch: css({
12
12
  display: "flex",
@@ -3,7 +3,7 @@ import { cx, css } from '@emotion/css';
3
3
  import { useStyles2 } from '@grafana/ui';
4
4
 
5
5
  const InputGroup = ({ children }) => {
6
- const styles = useStyles2(getStyles$n);
6
+ const styles = useStyles2(getStyles$s);
7
7
  const modifiedChildren = Children.map(children, (child) => {
8
8
  if (isValidElement(child) && child.props.invalid) {
9
9
  return cloneElement(child, { className: cx(child.props.className, styles.invalidChild) });
@@ -21,7 +21,7 @@ const borderPriority = [
21
21
  "focused"
22
22
  // highest priority
23
23
  ];
24
- const getStyles$n = () => ({
24
+ const getStyles$s = () => ({
25
25
  root: css({
26
26
  display: "flex",
27
27
  // Style the direct children of the component
@@ -4,10 +4,10 @@ import '@grafana/data';
4
4
  import { useStyles2 } from '@grafana/ui';
5
5
 
6
6
  const Space = ({ v = 0, h = 0, layout = "block" }) => {
7
- const styles = useStyles2(getStyles$i, v, h, layout);
7
+ const styles = useStyles2(getStyles$n, v, h, layout);
8
8
  return /* @__PURE__ */ React.createElement("span", { className: cx(styles.wrapper) });
9
9
  };
10
- const getStyles$i = (theme, v, h, layout) => ({
10
+ const getStyles$n = (theme, v, h, layout) => ({
11
11
  wrapper: css([
12
12
  {
13
13
  paddingRight: theme.spacing(h != null ? h : 0),