@grafana/plugin-ui 0.13.0 → 0.14.0-dev.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.
- package/dist/cjs/index.cjs +214 -224
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +2 -9
- package/dist/cjs/test-utils.cjs +2 -2
- package/dist/cjs/test-utils.cjs.map +1 -1
- package/dist/cjs/test-utils.d.cts +1 -1
- package/dist/esm/components/ConfigEditor/AdvancedSettings/AdvancedHttpSettings.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/Auth.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.js +4 -4
- package/dist/esm/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/auth-method/BasicAuth.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeader.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeaders.js +1 -1
- package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeaders.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/styles.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/SelfSignedCertificate.js +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/SelfSignedCertificate.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/SkipTLSVerification.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/TLSClientAuth.js +3 -3
- package/dist/esm/components/ConfigEditor/Auth/tls/TLSClientAuth.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/TLSSettings.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/TLSSettingsSection.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/types.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/utils.js +3 -3
- package/dist/esm/components/ConfigEditor/Auth/utils.js.map +1 -1
- package/dist/esm/components/ConfigEditor/ConfigSection/ConfigDescriptionLink.js +2 -2
- package/dist/esm/components/ConfigEditor/ConfigSection/ConfigDescriptionLink.js.map +1 -1
- package/dist/esm/components/ConfigEditor/ConfigSection/ConfigSection.js.map +1 -1
- package/dist/esm/components/ConfigEditor/ConfigSection/ConfigSubSection.js.map +1 -1
- package/dist/esm/components/ConfigEditor/ConfigSection/GenericConfigSection.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Connection/ConnectionSettings.js +1 -1
- package/dist/esm/components/ConfigEditor/Connection/ConnectionSettings.js.map +1 -1
- package/dist/esm/components/ConfigEditor/DataSourceDescription.js.map +1 -1
- package/dist/esm/components/ConfigEditor/SecureSocksProxyToggle.js.map +1 -1
- package/dist/esm/components/CustomHeadersSettings/CustomHeadersSettings.js +11 -11
- package/dist/esm/components/CustomHeadersSettings/CustomHeadersSettings.js.map +1 -1
- package/dist/esm/components/DataLinks/DataLink.js +4 -4
- package/dist/esm/components/DataLinks/DataLink.js.map +1 -1
- package/dist/esm/components/DataLinks/DataLinks.js +3 -3
- package/dist/esm/components/DataLinks/DataLinks.js.map +1 -1
- package/dist/esm/components/DataSourcePicker/DataSourcePicker.js +8 -8
- package/dist/esm/components/DataSourcePicker/DataSourcePicker.js.map +1 -1
- package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
- package/dist/esm/components/DatePicker/styles.js +2 -2
- package/dist/esm/components/DatePicker/styles.js.map +1 -1
- package/dist/esm/components/DatePickerWithInput/DatePickerWithInput.js.map +1 -1
- package/dist/esm/components/DatePickerWithInput/styles.js +2 -2
- package/dist/esm/components/DatePickerWithInput/styles.js.map +1 -1
- package/dist/esm/components/DebounceInput/DebounceInput.js.map +1 -1
- package/dist/esm/components/Plugins/PluginSignatureBadge.js.map +1 -1
- package/dist/esm/components/QueryEditor/AccessoryButton.js.map +1 -1
- package/dist/esm/components/QueryEditor/CatalogSelector.js +1 -1
- package/dist/esm/components/QueryEditor/CatalogSelector.js.map +1 -1
- package/dist/esm/components/QueryEditor/ConfirmModal.js +1 -1
- package/dist/esm/components/QueryEditor/ConfirmModal.js.map +1 -1
- package/dist/esm/components/QueryEditor/DatasetSelector.js +1 -1
- package/dist/esm/components/QueryEditor/DatasetSelector.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorField.js +5 -5
- package/dist/esm/components/QueryEditor/EditorField.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorFieldGroup.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorHeader.js +2 -2
- package/dist/esm/components/QueryEditor/EditorHeader.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorList.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorRow.js +4 -4
- package/dist/esm/components/QueryEditor/EditorRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorRows.js +2 -2
- package/dist/esm/components/QueryEditor/EditorRows.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorStack.js +1 -1
- package/dist/esm/components/QueryEditor/EditorStack.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorSwitch.js +2 -2
- package/dist/esm/components/QueryEditor/EditorSwitch.js.map +1 -1
- package/dist/esm/components/QueryEditor/FlexItem.js.map +1 -1
- package/dist/esm/components/QueryEditor/InlineSelect.js.map +1 -1
- package/dist/esm/components/QueryEditor/InputGroup.js +2 -2
- package/dist/esm/components/QueryEditor/InputGroup.js.map +1 -1
- package/dist/esm/components/QueryEditor/QueryEditor.js +7 -7
- package/dist/esm/components/QueryEditor/QueryEditor.js.map +1 -1
- package/dist/esm/components/QueryEditor/QueryHeader.js +18 -18
- package/dist/esm/components/QueryEditor/QueryHeader.js.map +1 -1
- package/dist/esm/components/QueryEditor/RunQueryButton.js +1 -1
- package/dist/esm/components/QueryEditor/RunQueryButton.js.map +1 -1
- package/dist/esm/components/QueryEditor/Space.js +17 -26
- package/dist/esm/components/QueryEditor/Space.js.map +1 -1
- package/dist/esm/components/QueryEditor/TableSelector.js.map +1 -1
- package/dist/esm/components/QueryEditor/defaults.js +7 -7
- package/dist/esm/components/QueryEditor/defaults.js.map +1 -1
- package/dist/esm/components/QueryEditor/expressions.js.map +1 -1
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryEditorRaw.js.map +1 -1
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryToolbox.js +1 -1
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryToolbox.js.map +1 -1
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryValidator.js +4 -4
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryValidator.js.map +1 -1
- package/dist/esm/components/QueryEditor/query-editor-raw/RawEditor.js +3 -3
- package/dist/esm/components/QueryEditor/query-editor-raw/RawEditor.js.map +1 -1
- package/dist/esm/components/QueryEditor/types.js.map +1 -1
- package/dist/esm/components/QueryEditor/utils/formatSQL.js.map +1 -1
- package/dist/esm/components/QueryEditor/utils/sql.utils.js +8 -8
- package/dist/esm/components/QueryEditor/utils/sql.utils.js.map +1 -1
- package/dist/esm/components/QueryEditor/utils/useSqlChange.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/AwesomeQueryBuilder.js +26 -27
- package/dist/esm/components/QueryEditor/visual-query-builder/AwesomeQueryBuilder.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorField.js +3 -3
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorField.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorRow.js +2 -2
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorRows.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/GroupByRow.js +2 -2
- package/dist/esm/components/QueryEditor/visual-query-builder/GroupByRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/OrderByRow.js +4 -4
- package/dist/esm/components/QueryEditor/visual-query-builder/OrderByRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/Preview.js +2 -2
- package/dist/esm/components/QueryEditor/visual-query-builder/Preview.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLGroupByRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLOrderByRow.js +2 -2
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLOrderByRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLSelectRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLWhereRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SelectRow.js +9 -9
- package/dist/esm/components/QueryEditor/visual-query-builder/SelectRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/VisualEditor.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/WhereRow.js.map +1 -1
- package/dist/esm/components/QueryEditorRow/QueryEditorRow.js.map +1 -1
- package/dist/esm/components/SQLEditor/components/SQLEditor.js +13 -13
- package/dist/esm/components/SQLEditor/components/SQLEditor.js.map +1 -1
- package/dist/esm/components/SQLEditor/hooks/useLatestCallback.js +1 -1
- package/dist/esm/components/SQLEditor/hooks/useLatestCallback.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/Monaco.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/TextModel.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/multiLineFullQuery.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/multiLineFullQueryWithAggregation.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/multiLineMultipleColumns.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineEmptyQuery.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineFullQuery.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineFullQueryWithAggregation.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineMultipleColumns.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineTwoQueries.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineTwoQueriesWithAggregation.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/definition.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/getStandardSuggestions.js +2 -2
- package/dist/esm/components/SQLEditor/standardSql/getStandardSuggestions.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/getStatementPosition.js +3 -3
- package/dist/esm/components/SQLEditor/standardSql/getStatementPosition.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/language.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/macros.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/standardSQLCompletionItemProvider.js +2 -2
- package/dist/esm/components/SQLEditor/standardSql/standardSQLCompletionItemProvider.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/standardSuggestionsRegistry.js +1 -1
- package/dist/esm/components/SQLEditor/standardSql/standardSuggestionsRegistry.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/statementPositionResolversRegistry.js +25 -25
- package/dist/esm/components/SQLEditor/standardSql/statementPositionResolversRegistry.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/suggestionsKindRegistry.js +1 -1
- package/dist/esm/components/SQLEditor/standardSql/suggestionsKindRegistry.js.map +1 -1
- package/dist/esm/components/SQLEditor/test-utils/index.js.map +1 -1
- package/dist/esm/components/SQLEditor/test-utils/statementPosition.js.map +1 -1
- package/dist/esm/components/SQLEditor/types.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/LinkedToken.js +7 -7
- package/dist/esm/components/SQLEditor/utils/LinkedToken.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/commands.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/debugger.js +1 -1
- package/dist/esm/components/SQLEditor/utils/debugger.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/getSuggestionKind.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/linkedTokenBuilder.js +1 -1
- package/dist/esm/components/SQLEditor/utils/linkedTokenBuilder.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/toCompletionItem.js +1 -1
- package/dist/esm/components/SQLEditor/utils/toCompletionItem.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/tokenUtils.js +9 -9
- package/dist/esm/components/SQLEditor/utils/tokenUtils.js.map +1 -1
- package/dist/esm/components/Segment/Segment.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/QueryModellerBase.js +2 -2
- package/dist/esm/components/VisualQueryBuilder/QueryModellerBase.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/LabelFilterItem.js +11 -11
- package/dist/esm/components/VisualQueryBuilder/components/LabelFilterItem.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/LabelFilters.js +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/LabelFilters.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationEditor.js +4 -4
- package/dist/esm/components/VisualQueryBuilder/components/OperationEditor.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationEditorBody.js +2 -3
- package/dist/esm/components/VisualQueryBuilder/components/OperationEditorBody.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationExplainedBox.js +3 -3
- package/dist/esm/components/VisualQueryBuilder/components/OperationExplainedBox.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationHeader.js +2 -2
- package/dist/esm/components/VisualQueryBuilder/components/OperationHeader.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationInfoButton.js +2 -2
- package/dist/esm/components/VisualQueryBuilder/components/OperationInfoButton.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationList.js +3 -4
- package/dist/esm/components/VisualQueryBuilder/components/OperationList.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationListExplained.js +2 -2
- package/dist/esm/components/VisualQueryBuilder/components/OperationListExplained.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationParamEditor.js +5 -6
- package/dist/esm/components/VisualQueryBuilder/components/OperationParamEditor.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationsEditorRow.js +2 -3
- package/dist/esm/components/VisualQueryBuilder/components/OperationsEditorRow.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/QueryBuilderHints.js +8 -8
- package/dist/esm/components/VisualQueryBuilder/components/QueryBuilderHints.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/QueryEditorModeToggle.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/QueryHeaderSwitch.js +2 -3
- package/dist/esm/components/VisualQueryBuilder/components/QueryHeaderSwitch.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/QueryOptionGroup.js +0 -1
- package/dist/esm/components/VisualQueryBuilder/components/QueryOptionGroup.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/RawQuery.js +2 -2
- package/dist/esm/components/VisualQueryBuilder/components/RawQuery.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/types.js.map +1 -1
- package/dist/esm/datasource/SqlDatasource.js +14 -14
- package/dist/esm/datasource/SqlDatasource.js.map +1 -1
- package/dist/esm/datasource/constants.js.map +1 -1
- package/dist/esm/hooks/useDebounce.js.map +1 -1
- package/dist/esm/index.d.ts +2 -9
- package/dist/esm/test/mocks/DataQuery.js.map +1 -1
- package/dist/esm/test/mocks/Datasource.js +1 -1
- package/dist/esm/test/mocks/Datasource.js.map +1 -1
- package/dist/esm/test/mocks/Plugin.js +1 -1
- package/dist/esm/test/mocks/Plugin.js.map +1 -1
- package/dist/esm/test/mocks/QueryEditorProps.js.map +1 -1
- package/dist/esm/test/mocks/utils.js +2 -2
- package/dist/esm/test/mocks/utils.js.map +1 -1
- package/dist/esm/test-utils.d.ts +1 -1
- package/package.json +13 -29
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataSourcePicker.js","sources":["../../../../src/components/DataSourcePicker/DataSourcePicker.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport { HorizontalGroup, Select } from '@grafana/ui';\nimport { type DataSourceInstanceSettings, type SelectableValue } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { isUnsignedPluginSignature, PluginSignatureBadge } from '../Plugins/PluginSignatureBadge';\nimport { getDataSourceSrv, type DataSourceSrv } from '@grafana/runtime';\n\nexport interface Props {\n onChange: (ds: DataSourceInstanceSettings) => void;\n current: string | null;\n hideTextValue?: boolean;\n onBlur?: () => void;\n autoFocus?: boolean;\n openMenuOnFocus?: boolean;\n placeholder?: string;\n tracing?: boolean;\n mixed?: boolean;\n dashboard?: boolean;\n metrics?: boolean;\n annotations?: boolean;\n variables?: boolean;\n pluginId?: string;\n noDefault?: boolean;\n}\n\nexport interface State {\n error?: string;\n}\n\nexport class DataSourcePicker extends PureComponent<Props, State> {\n dataSourceSrv: DataSourceSrv = getDataSourceSrv();\n\n static defaultProps: Partial<Props> = {\n autoFocus: false,\n openMenuOnFocus: false,\n placeholder: 'Select datasource',\n };\n\n state: State = {};\n\n constructor(props: Props) {\n super(props);\n }\n\n componentDidMount() {\n const { current } = this.props;\n const dsSettings = this.dataSourceSrv.getInstanceSettings(current!);\n if (!dsSettings) {\n this.setState({ error: 'Could not find data source ' + current });\n }\n }\n\n onChange = (item: SelectableValue<string>) => {\n const dsSettings = this.dataSourceSrv.getInstanceSettings(item.value!);\n\n if (dsSettings) {\n this.props.onChange(dsSettings);\n this.setState({ error: undefined });\n }\n };\n\n private getCurrentValue(): SelectableValue<string> {\n const { current, hideTextValue, noDefault } = this.props;\n\n if (!current && noDefault) {\n return {\n label: 'No datasources found',\n };\n }\n\n const ds = this.dataSourceSrv.getInstanceSettings(current!);\n\n if (ds) {\n return {\n label: ds.name.substr(0, 37),\n value: ds.name,\n imgUrl: ds.meta.info.logos.small,\n hideText: hideTextValue,\n meta: ds.meta,\n };\n }\n\n return {\n label: (current ?? 'no name') + ' - not found',\n value: (current ?? 'no name') + ' - not found',\n imgUrl: '',\n hideText: hideTextValue,\n };\n }\n\n getDataSourceOptions(): Array<SelectableValue<string>> {\n const options: Array<SelectableValue<string>> = this.dataSourceSrv.getList().map((ds) => ({\n value: ds.uid,\n label: ds.name,\n imgUrl: ds.meta.info.logos.small,\n meta: ds.meta,\n }));\n\n return options;\n }\n\n render() {\n const { autoFocus, onBlur, openMenuOnFocus, placeholder } = this.props;\n const { error } = this.state;\n const options = this.getDataSourceOptions();\n const value = this.getCurrentValue();\n\n return (\n <div aria-label={selectors.components.DataSourcePicker.container}>\n <Select\n className=\"ds-picker select-container\"\n isMulti={false}\n isClearable={false}\n backspaceRemovesValue={false}\n onChange={this.onChange}\n options={options}\n autoFocus={autoFocus}\n onBlur={onBlur}\n openMenuOnFocus={openMenuOnFocus}\n maxMenuHeight={500}\n placeholder={placeholder}\n noOptionsMessage=\"No datasources found\"\n value={value}\n invalid={!!error}\n getOptionLabel={(o) => {\n if (o.meta && isUnsignedPluginSignature(o.meta.signature) && o !== value) {\n return (\n <HorizontalGroup align=\"center\" justify=\"space-between\">\n <span>{o.label}</span> <PluginSignatureBadge status={o.meta.signature} />\n </HorizontalGroup>\n );\n }\n return o.label || '';\n }}\n />\n </div>\n );\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;AA6BO,MAAM,yBAAyB,
|
|
1
|
+
{"version":3,"file":"DataSourcePicker.js","sources":["../../../../src/components/DataSourcePicker/DataSourcePicker.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport { HorizontalGroup, Select } from '@grafana/ui';\nimport { type DataSourceInstanceSettings, type SelectableValue } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { isUnsignedPluginSignature, PluginSignatureBadge } from '../Plugins/PluginSignatureBadge';\nimport { getDataSourceSrv, type DataSourceSrv } from '@grafana/runtime';\n\nexport interface Props {\n onChange: (ds: DataSourceInstanceSettings) => void;\n current: string | null;\n hideTextValue?: boolean;\n onBlur?: () => void;\n autoFocus?: boolean;\n openMenuOnFocus?: boolean;\n placeholder?: string;\n tracing?: boolean;\n mixed?: boolean;\n dashboard?: boolean;\n metrics?: boolean;\n annotations?: boolean;\n variables?: boolean;\n pluginId?: string;\n noDefault?: boolean;\n}\n\nexport interface State {\n error?: string;\n}\n\nexport class DataSourcePicker extends PureComponent<Props, State> {\n dataSourceSrv: DataSourceSrv = getDataSourceSrv();\n\n static defaultProps: Partial<Props> = {\n autoFocus: false,\n openMenuOnFocus: false,\n placeholder: 'Select datasource',\n };\n\n state: State = {};\n\n constructor(props: Props) {\n super(props);\n }\n\n componentDidMount() {\n const { current } = this.props;\n const dsSettings = this.dataSourceSrv.getInstanceSettings(current!);\n if (!dsSettings) {\n this.setState({ error: 'Could not find data source ' + current });\n }\n }\n\n onChange = (item: SelectableValue<string>) => {\n const dsSettings = this.dataSourceSrv.getInstanceSettings(item.value!);\n\n if (dsSettings) {\n this.props.onChange(dsSettings);\n this.setState({ error: undefined });\n }\n };\n\n private getCurrentValue(): SelectableValue<string> {\n const { current, hideTextValue, noDefault } = this.props;\n\n if (!current && noDefault) {\n return {\n label: 'No datasources found',\n };\n }\n\n const ds = this.dataSourceSrv.getInstanceSettings(current!);\n\n if (ds) {\n return {\n label: ds.name.substr(0, 37),\n value: ds.name,\n imgUrl: ds.meta.info.logos.small,\n hideText: hideTextValue,\n meta: ds.meta,\n };\n }\n\n return {\n label: (current ?? 'no name') + ' - not found',\n value: (current ?? 'no name') + ' - not found',\n imgUrl: '',\n hideText: hideTextValue,\n };\n }\n\n getDataSourceOptions(): Array<SelectableValue<string>> {\n const options: Array<SelectableValue<string>> = this.dataSourceSrv.getList().map((ds) => ({\n value: ds.uid,\n label: ds.name,\n imgUrl: ds.meta.info.logos.small,\n meta: ds.meta,\n }));\n\n return options;\n }\n\n render() {\n const { autoFocus, onBlur, openMenuOnFocus, placeholder } = this.props;\n const { error } = this.state;\n const options = this.getDataSourceOptions();\n const value = this.getCurrentValue();\n\n return (\n <div aria-label={selectors.components.DataSourcePicker.container}>\n <Select\n className=\"ds-picker select-container\"\n isMulti={false}\n isClearable={false}\n backspaceRemovesValue={false}\n onChange={this.onChange}\n options={options}\n autoFocus={autoFocus}\n onBlur={onBlur}\n openMenuOnFocus={openMenuOnFocus}\n maxMenuHeight={500}\n placeholder={placeholder}\n noOptionsMessage=\"No datasources found\"\n value={value}\n invalid={!!error}\n getOptionLabel={(o) => {\n if (o.meta && isUnsignedPluginSignature(o.meta.signature) && o !== value) {\n return (\n <HorizontalGroup align=\"center\" justify=\"space-between\">\n <span>{o.label}</span> <PluginSignatureBadge status={o.meta.signature} />\n </HorizontalGroup>\n );\n }\n return o.label || '';\n }}\n />\n </div>\n );\n }\n}\n"],"names":["__publicField"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePicker.js","sources":["../../../../src/components/DatePicker/DatePicker.tsx"],"sourcesContent":["import React, { memo } from 'react';\nimport Calendar from 'react-calendar';\nimport { useTheme2, ClickOutsideWrapper, Icon } from '@grafana/ui';\nimport { getStyles, getBodyStyles } from './styles';\n\nexport interface DatePickerProps {\n isOpen?: boolean;\n onClose: () => void;\n onChange: (value: Date) => void;\n value?: Date;\n}\n\nexport const DatePicker = memo<DatePickerProps>((props) => {\n const theme = useTheme2();\n const styles = getStyles(theme);\n const { isOpen, onClose } = props;\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <ClickOutsideWrapper useCapture={true} includeButtonPress={false} onClick={onClose}>\n <div className={styles.modal} data-testid=\"date-picker\">\n <Body {...props} />\n </div>\n </ClickOutsideWrapper>\n );\n});\n\nDatePicker.displayName = 'DatePicker';\n\nconst Body = memo<DatePickerProps>(({ value, onChange }) => {\n const theme = useTheme2();\n const styles = getBodyStyles(theme);\n\n return (\n <Calendar\n className={styles.body}\n tileClassName={styles.title}\n value={value || new Date()}\n nextLabel={<Icon name=\"angle-right\" />}\n prevLabel={<Icon name=\"angle-left\" />}\n onChange={(ev: any) => {\n if (!Array.isArray(ev)) {\n onChange(ev);\n }\n }}\n locale=\"en\"\n />\n );\n});\n\nBody.displayName = 'Body';\n"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"DatePicker.js","sources":["../../../../src/components/DatePicker/DatePicker.tsx"],"sourcesContent":["import React, { memo } from 'react';\nimport Calendar from 'react-calendar';\nimport { useTheme2, ClickOutsideWrapper, Icon } from '@grafana/ui';\nimport { getStyles, getBodyStyles } from './styles';\n\nexport interface DatePickerProps {\n isOpen?: boolean;\n onClose: () => void;\n onChange: (value: Date) => void;\n value?: Date;\n}\n\nexport const DatePicker = memo<DatePickerProps>((props) => {\n const theme = useTheme2();\n const styles = getStyles(theme);\n const { isOpen, onClose } = props;\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <ClickOutsideWrapper useCapture={true} includeButtonPress={false} onClick={onClose}>\n <div className={styles.modal} data-testid=\"date-picker\">\n <Body {...props} />\n </div>\n </ClickOutsideWrapper>\n );\n});\n\nDatePicker.displayName = 'DatePicker';\n\nconst Body = memo<DatePickerProps>(({ value, onChange }) => {\n const theme = useTheme2();\n const styles = getBodyStyles(theme);\n\n return (\n <Calendar\n className={styles.body}\n tileClassName={styles.title}\n value={value || new Date()}\n nextLabel={<Icon name=\"angle-right\" />}\n prevLabel={<Icon name=\"angle-left\" />}\n onChange={(ev: any) => {\n if (!Array.isArray(ev)) {\n onChange(ev);\n }\n }}\n locale=\"en\"\n />\n );\n});\n\nBody.displayName = 'Body';\n"],"names":[],"mappings":";;;;;AAYO,MAAM,UAAA,GAAa,IAAA,CAAsB,CAAC,KAAA,KAAU;AACzD,EAAA,MAAM,QAAQ,SAAA,EAAU;AACxB,EAAA,MAAM,MAAA,GAAS,UAAU,KAAK,CAAA;AAC9B,EAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAQ,GAAI,KAAA;AAE5B,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACE,KAAA,CAAA,aAAA,CAAC,uBAAoB,UAAA,EAAY,IAAA,EAAM,oBAAoB,KAAA,EAAO,OAAA,EAAS,2BACzE,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAW,MAAA,CAAO,KAAA,EAAO,eAAY,aAAA,EAAA,kBACxC,KAAA,CAAA,aAAA,CAAC,QAAM,GAAG,KAAA,EAAO,CACnB,CACF,CAAA;AAEJ,CAAC;AAED,UAAA,CAAW,WAAA,GAAc,YAAA;AAEzB,MAAM,OAAO,IAAA,CAAsB,CAAC,EAAE,KAAA,EAAO,UAAS,KAAM;AAC1D,EAAA,MAAM,QAAQ,SAAA,EAAU;AACxB,EAAA,MAAM,MAAA,GAAS,cAAc,KAAK,CAAA;AAElC,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,WAAW,MAAA,CAAO,IAAA;AAAA,MAClB,eAAe,MAAA,CAAO,KAAA;AAAA,MACtB,KAAA,EAAO,KAAA,oBAAS,IAAI,IAAA,EAAK;AAAA,MACzB,SAAA,kBAAW,KAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,aAAA,EAAc,CAAA;AAAA,MACpC,SAAA,kBAAW,KAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,YAAA,EAAa,CAAA;AAAA,MACnC,QAAA,EAAU,CAAC,EAAA,KAAY;AACrB,QAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,EAAG;AACtB,UAAA,QAAA,CAAS,EAAE,CAAA;AAAA,QACb;AAAA,MACF,CAAA;AAAA,MACA,MAAA,EAAO;AAAA;AAAA,GACT;AAEJ,CAAC,CAAA;AAED,IAAA,CAAK,WAAA,GAAc,MAAA;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import '@grafana/data';
|
|
2
2
|
import { css } from '@emotion/css';
|
|
3
3
|
|
|
4
|
-
const getStyles = (theme) => {
|
|
4
|
+
const getStyles$r = (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 };
|
|
152
|
+
export { getBodyStyles, getStyles$r as getStyles };
|
|
153
153
|
//# sourceMappingURL=styles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sources":["../../../../src/components/DatePicker/styles.ts"],"sourcesContent":["import { type GrafanaTheme2 } from '@grafana/data';\nimport { css } from '@emotion/css';\n\nexport const getStyles = (theme: GrafanaTheme2) => {\n const containerBorder = theme.isDark ? theme.v1.palette.dark9 : theme.v1.palette.gray5;\n\n return {\n container: css`\n top: -1px;\n position: absolute;\n right: 544px;\n box-shadow: 0px 0px 20px ${theme.v1.colors.dropdownShadow};\n background-color: ${theme.v1.colors.bodyBg};\n z-index: -1;\n border: 1px solid ${containerBorder};\n border-radius: 2px 0 0 2px;\n\n &:after {\n display: block;\n background-color: ${theme.v1.colors.bodyBg};\n width: 19px;\n height: 100%;\n content: '';\n position: absolute;\n top: 0;\n right: -19px;\n border-left: 1px solid ${theme.v1.colors.border1};\n }\n `,\n modal: css`\n z-index: ${theme.v1.zIndex.modal};\n `,\n content: css`\n margin: 0 auto;\n width: 268px;\n `,\n backdrop: css`\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: #202226;\n opacity: 0.7;\n z-index: ${theme.v1.zIndex.modalBackdrop};\n text-align: center;\n `,\n };\n};\n\nexport const getBodyStyles = (theme: GrafanaTheme2) => {\n const containerBorder = theme.isDark ? theme.v1.palette.dark9 : theme.v1.palette.gray5;\n\n return {\n title: css`\n color: ${theme.colors.text};\n background-color: ${theme.v1.colors.bodyBg};\n font-size: ${theme.v1.typography.size.md};\n border: 1px solid transparent;\n\n &:hover {\n position: relative;\n }\n `,\n body: css`\n z-index: ${theme.zIndex.modal};\n position: fixed;\n background-color: ${theme.v1.colors.bodyBg};\n width: 268px;\n\n box-shadow: 0px 0px 20px ${theme.v1.colors.dropdownShadow};\n border: 1px solid ${containerBorder};\n border-radius: 2px 0 0 2px;\n\n .react-calendar__navigation__label,\n .react-calendar__navigation__arrow,\n .react-calendar__navigation {\n padding-top: 4px;\n background-color: inherit;\n color: ${theme.colors.text};\n border: 0;\n font-weight: ${theme.v1.typography.weight.semibold};\n }\n\n .react-calendar__month-view__weekdays {\n background-color: inherit;\n text-align: center;\n color: ${theme.v1.palette.blue77};\n\n abbr {\n border: 0;\n text-decoration: none;\n cursor: default;\n display: block;\n padding: 4px 0 4px 0;\n }\n }\n\n .react-calendar__month-view__days {\n background-color: inherit;\n }\n\n .react-calendar__tile,\n .react-calendar__tile--now {\n margin-bottom: 4px;\n background-color: inherit;\n height: 26px;\n }\n\n .react-calendar__navigation__label,\n .react-calendar__navigation > button:focus,\n .time-picker-calendar-tile:focus {\n outline: 0;\n }\n\n .react-calendar__tile--active,\n .react-calendar__tile--active:hover {\n color: ${theme.v1.palette.white};\n font-weight: ${theme.v1.typography.weight.semibold};\n background: ${theme.v1.palette.blue95};\n box-shadow: none;\n border: 0px;\n }\n\n .react-calendar__tile--rangeEnd,\n .react-calendar__tile--rangeStart {\n padding: 0;\n border: 0px;\n color: ${theme.v1.palette.white};\n font-weight: ${theme.v1.typography.weight.semibold};\n background: ${theme.v1.palette.blue95};\n\n abbr {\n background-color: ${theme.v1.palette.blue77};\n border-radius: 100px;\n display: block;\n padding-top: 2px;\n height: 26px;\n }\n }\n\n .react-calendar__tile--rangeStart {\n border-top-left-radius: 20px;\n border-bottom-left-radius: 20px;\n }\n\n .react-calendar__tile--rangeEnd {\n border-top-right-radius: 20px;\n border-bottom-right-radius: 20px;\n }\n `,\n };\n};\n"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"styles.js","sources":["../../../../src/components/DatePicker/styles.ts"],"sourcesContent":["import { type GrafanaTheme2 } from '@grafana/data';\nimport { css } from '@emotion/css';\n\nexport const getStyles = (theme: GrafanaTheme2) => {\n const containerBorder = theme.isDark ? theme.v1.palette.dark9 : theme.v1.palette.gray5;\n\n return {\n container: css`\n top: -1px;\n position: absolute;\n right: 544px;\n box-shadow: 0px 0px 20px ${theme.v1.colors.dropdownShadow};\n background-color: ${theme.v1.colors.bodyBg};\n z-index: -1;\n border: 1px solid ${containerBorder};\n border-radius: 2px 0 0 2px;\n\n &:after {\n display: block;\n background-color: ${theme.v1.colors.bodyBg};\n width: 19px;\n height: 100%;\n content: '';\n position: absolute;\n top: 0;\n right: -19px;\n border-left: 1px solid ${theme.v1.colors.border1};\n }\n `,\n modal: css`\n z-index: ${theme.v1.zIndex.modal};\n `,\n content: css`\n margin: 0 auto;\n width: 268px;\n `,\n backdrop: css`\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: #202226;\n opacity: 0.7;\n z-index: ${theme.v1.zIndex.modalBackdrop};\n text-align: center;\n `,\n };\n};\n\nexport const getBodyStyles = (theme: GrafanaTheme2) => {\n const containerBorder = theme.isDark ? theme.v1.palette.dark9 : theme.v1.palette.gray5;\n\n return {\n title: css`\n color: ${theme.colors.text};\n background-color: ${theme.v1.colors.bodyBg};\n font-size: ${theme.v1.typography.size.md};\n border: 1px solid transparent;\n\n &:hover {\n position: relative;\n }\n `,\n body: css`\n z-index: ${theme.zIndex.modal};\n position: fixed;\n background-color: ${theme.v1.colors.bodyBg};\n width: 268px;\n\n box-shadow: 0px 0px 20px ${theme.v1.colors.dropdownShadow};\n border: 1px solid ${containerBorder};\n border-radius: 2px 0 0 2px;\n\n .react-calendar__navigation__label,\n .react-calendar__navigation__arrow,\n .react-calendar__navigation {\n padding-top: 4px;\n background-color: inherit;\n color: ${theme.colors.text};\n border: 0;\n font-weight: ${theme.v1.typography.weight.semibold};\n }\n\n .react-calendar__month-view__weekdays {\n background-color: inherit;\n text-align: center;\n color: ${theme.v1.palette.blue77};\n\n abbr {\n border: 0;\n text-decoration: none;\n cursor: default;\n display: block;\n padding: 4px 0 4px 0;\n }\n }\n\n .react-calendar__month-view__days {\n background-color: inherit;\n }\n\n .react-calendar__tile,\n .react-calendar__tile--now {\n margin-bottom: 4px;\n background-color: inherit;\n height: 26px;\n }\n\n .react-calendar__navigation__label,\n .react-calendar__navigation > button:focus,\n .time-picker-calendar-tile:focus {\n outline: 0;\n }\n\n .react-calendar__tile--active,\n .react-calendar__tile--active:hover {\n color: ${theme.v1.palette.white};\n font-weight: ${theme.v1.typography.weight.semibold};\n background: ${theme.v1.palette.blue95};\n box-shadow: none;\n border: 0px;\n }\n\n .react-calendar__tile--rangeEnd,\n .react-calendar__tile--rangeStart {\n padding: 0;\n border: 0px;\n color: ${theme.v1.palette.white};\n font-weight: ${theme.v1.typography.weight.semibold};\n background: ${theme.v1.palette.blue95};\n\n abbr {\n background-color: ${theme.v1.palette.blue77};\n border-radius: 100px;\n display: block;\n padding-top: 2px;\n height: 26px;\n }\n }\n\n .react-calendar__tile--rangeStart {\n border-top-left-radius: 20px;\n border-bottom-left-radius: 20px;\n }\n\n .react-calendar__tile--rangeEnd {\n border-top-right-radius: 20px;\n border-bottom-right-radius: 20px;\n }\n `,\n };\n};\n"],"names":["getStyles"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePickerWithInput.js","sources":["../../../../src/components/DatePickerWithInput/DatePickerWithInput.tsx"],"sourcesContent":["import React, { type ComponentProps, useState } from 'react';\nimport { Input } from '@grafana/ui';\nimport { DatePicker } from '../DatePicker/DatePicker';\nimport { getStyles } from './styles';\nimport { cx } from '@emotion/css';\n\nexport const formatDate = (date: Date) => date.toISOString().split('T')[0];\n\nexport interface DatePickerWithInputProps extends Omit<ComponentProps<typeof Input>, 'ref' | 'value' | 'onChange'> {\n value?: Date;\n onChange: (value: Date) => void;\n}\n\nexport const DatePickerWithInput = (props: DatePickerWithInputProps) => {\n const { value, onChange, className, ...rest } = props;\n const [open, setOpen] = useState(false);\n const styles = getStyles();\n\n return (\n <>\n <Input\n type=\"date\"\n placeholder=\"Date\"\n value={formatDate(value || new Date())}\n onClick={() => setOpen(true)}\n onChange={() => {}}\n className={cx(styles.input, className)}\n {...rest}\n />\n <DatePicker isOpen={open} value={value} onChange={(ev: any) => onChange(ev)} onClose={() => setOpen(false)} />\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"DatePickerWithInput.js","sources":["../../../../src/components/DatePickerWithInput/DatePickerWithInput.tsx"],"sourcesContent":["import React, { type ComponentProps, useState } from 'react';\nimport { Input } from '@grafana/ui';\nimport { DatePicker } from '../DatePicker/DatePicker';\nimport { getStyles } from './styles';\nimport { cx } from '@emotion/css';\n\nexport const formatDate = (date: Date) => date.toISOString().split('T')[0];\n\nexport interface DatePickerWithInputProps extends Omit<ComponentProps<typeof Input>, 'ref' | 'value' | 'onChange'> {\n value?: Date;\n onChange: (value: Date) => void;\n}\n\nexport const DatePickerWithInput = (props: DatePickerWithInputProps) => {\n const { value, onChange, className, ...rest } = props;\n const [open, setOpen] = useState(false);\n const styles = getStyles();\n\n return (\n <>\n <Input\n type=\"date\"\n placeholder=\"Date\"\n value={formatDate(value || new Date())}\n onClick={() => setOpen(true)}\n onChange={() => {}}\n className={cx(styles.input, className)}\n {...rest}\n />\n <DatePicker isOpen={open} value={value} onChange={(ev: any) => onChange(ev)} onClose={() => setOpen(false)} />\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;AAMO,MAAM,UAAA,GAAa,CAAC,IAAA,KAAe,IAAA,CAAK,aAAY,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC;AAOlE,MAAM,mBAAA,GAAsB,CAAC,KAAA,KAAoC;AACtE,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAU,SAAA,EAAW,GAAG,MAAK,GAAI,KAAA;AAChD,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAS,KAAK,CAAA;AACtC,EAAA,MAAM,SAAS,SAAA,EAAU;AAEzB,EAAA,uBACE,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,kBACE,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,MAAA;AAAA,MACL,WAAA,EAAY,MAAA;AAAA,MACZ,KAAA,EAAO,UAAA,CAAW,KAAA,oBAAS,IAAI,MAAM,CAAA;AAAA,MACrC,OAAA,EAAS,MAAM,OAAA,CAAQ,IAAI,CAAA;AAAA,MAC3B,UAAU,MAAM;AAAA,MAAC,CAAA;AAAA,MACjB,SAAA,EAAW,EAAA,CAAG,MAAA,CAAO,KAAA,EAAO,SAAS,CAAA;AAAA,MACpC,GAAG;AAAA;AAAA,qBAEN,KAAA,CAAA,aAAA,CAAC,UAAA,EAAA,EAAW,MAAA,EAAQ,IAAA,EAAM,OAAc,QAAA,EAAU,CAAC,EAAA,KAAY,QAAA,CAAS,EAAE,CAAA,EAAG,OAAA,EAAS,MAAM,OAAA,CAAQ,KAAK,GAAG,CAC9G,CAAA;AAEJ;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { css } from '@emotion/css';
|
|
2
2
|
|
|
3
|
-
function getStyles() {
|
|
3
|
+
function getStyles$q() {
|
|
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() {
|
|
|
12
12
|
};
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
export { getStyles };
|
|
15
|
+
export { getStyles$q as getStyles };
|
|
16
16
|
//# sourceMappingURL=styles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sources":["../../../../src/components/DatePickerWithInput/styles.ts"],"sourcesContent":["import { css } from '@emotion/css';\n\nexport function getStyles() {\n return {\n input: css({\n /* hides the native Calendar picker icon given when using type=date */\n \"input[type='date']::-webkit-inner-spin-button, input[type='date']::-webkit-calendar-picker-indicator\": {\n display: 'none',\n WebkitAppearance: 'none',\n },\n }),\n };\n}\n"],"names":[],"mappings":";;AAEO,
|
|
1
|
+
{"version":3,"file":"styles.js","sources":["../../../../src/components/DatePickerWithInput/styles.ts"],"sourcesContent":["import { css } from '@emotion/css';\n\nexport function getStyles() {\n return {\n input: css({\n /* hides the native Calendar picker icon given when using type=date */\n \"input[type='date']::-webkit-inner-spin-button, input[type='date']::-webkit-calendar-picker-indicator\": {\n display: 'none',\n WebkitAppearance: 'none',\n },\n }),\n };\n}\n"],"names":["getStyles"],"mappings":";;AAEO,SAASA,WAAA,GAAY;AAC1B,EAAA,OAAO;AAAA,IACL,OAAO,GAAA,CAAI;AAAA;AAAA,MAET,sGAAA,EAAwG;AAAA,QACtG,OAAA,EAAS,MAAA;AAAA,QACT,gBAAA,EAAkB;AAAA;AACpB,KACD;AAAA,GACH;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DebounceInput.js","sources":["../../../../src/components/DebounceInput/DebounceInput.tsx"],"sourcesContent":["import React, { type ComponentProps, useState, useEffect } from 'react';\nimport { Input } from '@grafana/ui';\nimport { useDebounce } from '../../hooks/useDebounce';\n\nexport interface DebounceInputProps extends Omit<ComponentProps<typeof Input>, 'ref'> {\n value: string;\n onDebounce: (debouncedInput?: string) => void;\n delay?: number;\n}\n\nexport const DebounceInput = (props: DebounceInputProps) => {\n const { delay, onDebounce, value, ...rest } = props;\n const [input, setInput] = useState(value);\n\n const debouncedInput = useDebounce(input, delay);\n\n // TODO: We should fix this\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => onDebounce(debouncedInput), [debouncedInput]);\n useEffect(() => setInput(value), [value]);\n\n return <Input onChange={(ev) => setInput(ev.currentTarget.value)} value={input} {...rest} />;\n};\n"],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"DebounceInput.js","sources":["../../../../src/components/DebounceInput/DebounceInput.tsx"],"sourcesContent":["import React, { type ComponentProps, useState, useEffect } from 'react';\nimport { Input } from '@grafana/ui';\nimport { useDebounce } from '../../hooks/useDebounce';\n\nexport interface DebounceInputProps extends Omit<ComponentProps<typeof Input>, 'ref'> {\n value: string;\n onDebounce: (debouncedInput?: string) => void;\n delay?: number;\n}\n\nexport const DebounceInput = (props: DebounceInputProps) => {\n const { delay, onDebounce, value, ...rest } = props;\n const [input, setInput] = useState(value);\n\n const debouncedInput = useDebounce(input, delay);\n\n // TODO: We should fix this\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => onDebounce(debouncedInput), [debouncedInput]);\n useEffect(() => setInput(value), [value]);\n\n return <Input onChange={(ev) => setInput(ev.currentTarget.value)} value={input} {...rest} />;\n};\n"],"names":[],"mappings":";;;;AAUO,MAAM,aAAA,GAAgB,CAAC,KAAA,KAA8B;AAC1D,EAAA,MAAM,EAAE,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,GAAG,MAAK,GAAI,KAAA;AAC9C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,KAAK,CAAA;AAExC,EAAA,MAAM,cAAA,GAAiB,WAAA,CAAY,KAAA,EAAO,KAAK,CAAA;AAI/C,EAAA,SAAA,CAAU,MAAM,UAAA,CAAW,cAAc,CAAA,EAAG,CAAC,cAAc,CAAC,CAAA;AAC5D,EAAA,SAAA,CAAU,MAAM,QAAA,CAAS,KAAK,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAExC,EAAA,uBAAO,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAM,QAAA,EAAU,CAAC,EAAA,KAAO,QAAA,CAAS,EAAA,CAAG,aAAA,CAAc,KAAK,CAAA,EAAG,KAAA,EAAO,KAAA,EAAQ,GAAG,IAAA,EAAM,CAAA;AAC5F;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PluginSignatureBadge.js","sources":["../../../../src/components/Plugins/PluginSignatureBadge.tsx"],"sourcesContent":["import React, { type HTMLAttributes } from 'react';\nimport { Badge, type BadgeProps } from '@grafana/ui';\nimport { PluginErrorCode, PluginSignatureStatus } from '@grafana/data';\n\ninterface Props extends HTMLAttributes<HTMLDivElement> {\n status?: PluginSignatureStatus;\n}\n\nexport const PluginSignatureBadge = ({ status, ...otherProps }: Props) => {\n const display = getSignatureDisplayModel(status);\n return (\n <Badge\n text={display.text}\n color={display.color as any}\n icon={display.icon}\n tooltip={display.tooltip}\n {...otherProps}\n />\n );\n};\n\nexport function isUnsignedPluginSignature(signature?: PluginSignatureStatus) {\n return signature && signature !== PluginSignatureStatus.valid && signature !== PluginSignatureStatus.internal;\n}\n\nexport function mapPluginErrorCodeToSignatureStatus(code: PluginErrorCode) {\n switch (code) {\n case PluginErrorCode.invalidSignature:\n return PluginSignatureStatus.invalid;\n case PluginErrorCode.missingSignature:\n return PluginSignatureStatus.missing;\n case PluginErrorCode.modifiedSignature:\n return PluginSignatureStatus.modified;\n default:\n return PluginSignatureStatus.missing;\n }\n}\n\nfunction getSignatureDisplayModel(signature?: PluginSignatureStatus): BadgeProps {\n if (!signature) {\n signature = PluginSignatureStatus.invalid;\n }\n\n switch (signature) {\n case PluginSignatureStatus.internal:\n return { text: 'Core', icon: 'cube', color: 'blue', tooltip: 'Core plugin that is bundled with Grafana' };\n case PluginSignatureStatus.valid:\n return { text: 'Signed', icon: 'lock', color: 'green', tooltip: 'Signed and verified plugin' };\n case PluginSignatureStatus.invalid:\n return {\n text: 'Invalid signature',\n icon: 'exclamation-triangle',\n color: 'red',\n tooltip: 'Invalid plugin signature',\n };\n case PluginSignatureStatus.modified:\n return {\n text: 'Modified signature',\n icon: 'exclamation-triangle',\n color: 'red',\n tooltip: 'Valid signature but content has been modified',\n };\n case PluginSignatureStatus.missing:\n return {\n text: 'Missing signature',\n icon: 'exclamation-triangle',\n color: 'red',\n tooltip: 'Missing plugin signature',\n };\n }\n\n return { text: 'Unsigned', icon: 'exclamation-triangle', color: 'red', tooltip: 'Unsigned external plugin' };\n}\n\nPluginSignatureBadge.displayName = 'PluginSignatureBadge';\n"],"names":[],"mappings":";;;;AAQO,MAAM,uBAAuB,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"PluginSignatureBadge.js","sources":["../../../../src/components/Plugins/PluginSignatureBadge.tsx"],"sourcesContent":["import React, { type HTMLAttributes } from 'react';\nimport { Badge, type BadgeProps } from '@grafana/ui';\nimport { PluginErrorCode, PluginSignatureStatus } from '@grafana/data';\n\ninterface Props extends HTMLAttributes<HTMLDivElement> {\n status?: PluginSignatureStatus;\n}\n\nexport const PluginSignatureBadge = ({ status, ...otherProps }: Props) => {\n const display = getSignatureDisplayModel(status);\n return (\n <Badge\n text={display.text}\n color={display.color as any}\n icon={display.icon}\n tooltip={display.tooltip}\n {...otherProps}\n />\n );\n};\n\nexport function isUnsignedPluginSignature(signature?: PluginSignatureStatus) {\n return signature && signature !== PluginSignatureStatus.valid && signature !== PluginSignatureStatus.internal;\n}\n\nexport function mapPluginErrorCodeToSignatureStatus(code: PluginErrorCode) {\n switch (code) {\n case PluginErrorCode.invalidSignature:\n return PluginSignatureStatus.invalid;\n case PluginErrorCode.missingSignature:\n return PluginSignatureStatus.missing;\n case PluginErrorCode.modifiedSignature:\n return PluginSignatureStatus.modified;\n default:\n return PluginSignatureStatus.missing;\n }\n}\n\nfunction getSignatureDisplayModel(signature?: PluginSignatureStatus): BadgeProps {\n if (!signature) {\n signature = PluginSignatureStatus.invalid;\n }\n\n switch (signature) {\n case PluginSignatureStatus.internal:\n return { text: 'Core', icon: 'cube', color: 'blue', tooltip: 'Core plugin that is bundled with Grafana' };\n case PluginSignatureStatus.valid:\n return { text: 'Signed', icon: 'lock', color: 'green', tooltip: 'Signed and verified plugin' };\n case PluginSignatureStatus.invalid:\n return {\n text: 'Invalid signature',\n icon: 'exclamation-triangle',\n color: 'red',\n tooltip: 'Invalid plugin signature',\n };\n case PluginSignatureStatus.modified:\n return {\n text: 'Modified signature',\n icon: 'exclamation-triangle',\n color: 'red',\n tooltip: 'Valid signature but content has been modified',\n };\n case PluginSignatureStatus.missing:\n return {\n text: 'Missing signature',\n icon: 'exclamation-triangle',\n color: 'red',\n tooltip: 'Missing plugin signature',\n };\n }\n\n return { text: 'Unsigned', icon: 'exclamation-triangle', color: 'red', tooltip: 'Unsigned external plugin' };\n}\n\nPluginSignatureBadge.displayName = 'PluginSignatureBadge';\n"],"names":[],"mappings":";;;;AAQO,MAAM,uBAAuB,CAAC,EAAE,MAAA,EAAQ,GAAG,YAAW,KAAa;AACxE,EAAA,MAAM,OAAA,GAAU,yBAAyB,MAAM,CAAA;AAC/C,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,SAAS,OAAA,CAAQ,OAAA;AAAA,MAChB,GAAG;AAAA;AAAA,GACN;AAEJ;AAEO,SAAS,0BAA0B,SAAA,EAAmC;AAC3E,EAAA,OAAO,SAAA,IAAa,SAAA,KAAc,qBAAA,CAAsB,KAAA,IAAS,cAAc,qBAAA,CAAsB,QAAA;AACvG;AAeA,SAAS,yBAAyB,SAAA,EAA+C;AAC/E,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,SAAA,GAAY,qBAAA,CAAsB,OAAA;AAAA,EACpC;AAEA,EAAA,QAAQ,SAAA;AAAW,IACjB,KAAK,qBAAA,CAAsB,QAAA;AACzB,MAAA,OAAO,EAAE,MAAM,MAAA,EAAQ,IAAA,EAAM,QAAQ,KAAA,EAAO,MAAA,EAAQ,SAAS,0CAAA,EAA2C;AAAA,IAC1G,KAAK,qBAAA,CAAsB,KAAA;AACzB,MAAA,OAAO,EAAE,MAAM,QAAA,EAAU,IAAA,EAAM,QAAQ,KAAA,EAAO,OAAA,EAAS,SAAS,4BAAA,EAA6B;AAAA,IAC/F,KAAK,qBAAA,CAAsB,OAAA;AACzB,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,mBAAA;AAAA,QACN,IAAA,EAAM,sBAAA;AAAA,QACN,KAAA,EAAO,KAAA;AAAA,QACP,OAAA,EAAS;AAAA,OACX;AAAA,IACF,KAAK,qBAAA,CAAsB,QAAA;AACzB,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,oBAAA;AAAA,QACN,IAAA,EAAM,sBAAA;AAAA,QACN,KAAA,EAAO,KAAA;AAAA,QACP,OAAA,EAAS;AAAA,OACX;AAAA,IACF,KAAK,qBAAA,CAAsB,OAAA;AACzB,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,mBAAA;AAAA,QACN,IAAA,EAAM,sBAAA;AAAA,QACN,KAAA,EAAO,KAAA;AAAA,QACP,OAAA,EAAS;AAAA,OACX;AAAA;AAGJ,EAAA,OAAO,EAAE,MAAM,UAAA,EAAY,IAAA,EAAM,wBAAwB,KAAA,EAAO,KAAA,EAAO,SAAS,0BAAA,EAA2B;AAC7G;AAEA,oBAAA,CAAqB,WAAA,GAAc,sBAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccessoryButton.js","sources":["../../../../src/components/QueryEditor/AccessoryButton.tsx"],"sourcesContent":["import React from 'react';\nimport { css, cx } from '@emotion/css';\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { Button, type ButtonProps, useStyles2 } from '@grafana/ui';\n\ntype AccessoryButtonProps = ButtonProps & {};\n\nexport const AccessoryButton = ({ className, ...props }: AccessoryButtonProps) => {\n const styles = useStyles2(getButtonStyles);\n\n return <Button {...props} className={cx(className, styles.button)} />;\n};\n\nconst getButtonStyles = (theme: GrafanaTheme2) => ({\n button: css({\n paddingLeft: theme.spacing(3 / 2),\n paddingRight: theme.spacing(3 / 2),\n }),\n});\n"],"names":[],"mappings":";;;;;AAOO,MAAM,kBAAkB,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"AccessoryButton.js","sources":["../../../../src/components/QueryEditor/AccessoryButton.tsx"],"sourcesContent":["import React from 'react';\nimport { css, cx } from '@emotion/css';\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { Button, type ButtonProps, useStyles2 } from '@grafana/ui';\n\ntype AccessoryButtonProps = ButtonProps & {};\n\nexport const AccessoryButton = ({ className, ...props }: AccessoryButtonProps) => {\n const styles = useStyles2(getButtonStyles);\n\n return <Button {...props} className={cx(className, styles.button)} />;\n};\n\nconst getButtonStyles = (theme: GrafanaTheme2) => ({\n button: css({\n paddingLeft: theme.spacing(3 / 2),\n paddingRight: theme.spacing(3 / 2),\n }),\n});\n"],"names":[],"mappings":";;;;;AAOO,MAAM,kBAAkB,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAA4B;AAChF,EAAA,MAAM,MAAA,GAAS,WAAW,eAAe,CAAA;AAEzC,EAAA,uBAAO,KAAA,CAAA,aAAA,CAAC,UAAQ,GAAG,KAAA,EAAO,WAAW,EAAA,CAAG,SAAA,EAAW,MAAA,CAAO,MAAM,CAAA,EAAG,CAAA;AACrE;AAEA,MAAM,eAAA,GAAkB,CAAC,KAAA,MAA0B;AAAA,EACjD,QAAQ,GAAA,CAAI;AAAA,IACV,WAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,CAAA,GAAI,CAAC,CAAA;AAAA,IAChC,YAAA,EAAc,KAAA,CAAM,OAAA,CAAQ,CAAA,GAAI,CAAC;AAAA,GAClC;AACH,CAAA,CAAA;;;;"}
|
|
@@ -29,7 +29,7 @@ const CatalogSelector = ({ db, inputId, value, onChange }) => {
|
|
|
29
29
|
loadCatalogs();
|
|
30
30
|
}, [db, loadCatalogs]);
|
|
31
31
|
const handleChange = (selectable) => {
|
|
32
|
-
onChange((selectable == null ?
|
|
32
|
+
onChange((selectable == null ? void 0 : selectable.value) || null);
|
|
33
33
|
};
|
|
34
34
|
const selectedValue = catalogs.find((catalog) => catalog.value === value) || null;
|
|
35
35
|
return /* @__PURE__ */ React.createElement(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CatalogSelector.js","sources":["../../../../src/components/QueryEditor/CatalogSelector.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback } from 'react';\nimport { Select } from '@grafana/ui';\nimport { type SelectableValue } from '@grafana/data';\nimport { type DB } from './types';\n\nexport interface CatalogSelectorProps {\n db: DB;\n inputId?: string;\n value: string | null;\n onChange: (catalog: string | null) => void;\n}\n\nexport const CatalogSelector = ({ db, inputId, value, onChange }: CatalogSelectorProps) => {\n const [catalogs, setCatalogs] = useState<Array<SelectableValue<string>>>([]);\n const [isLoading, setIsLoading] = useState(false);\n\n const loadCatalogs = useCallback(async () => {\n if (!db.catalogs) {\n return;\n }\n\n setIsLoading(true);\n try {\n const catalogList = await db.catalogs();\n const catalogOptions = catalogList.map((catalog) => ({\n label: catalog,\n value: catalog,\n }));\n setCatalogs(catalogOptions);\n } catch (error) {\n console.error('Error loading catalogs:', error);\n setCatalogs([]);\n } finally {\n setIsLoading(false);\n }\n }, [db]);\n\n useEffect(() => {\n loadCatalogs();\n }, [db, loadCatalogs]);\n\n const handleChange = (selectable: SelectableValue<string>) => {\n onChange(selectable?.value || null);\n };\n\n const selectedValue = catalogs.find((catalog) => catalog.value === value) || null;\n\n return (\n <Select\n inputId={inputId}\n options={catalogs}\n value={selectedValue}\n onChange={handleChange}\n isLoading={isLoading}\n placeholder=\"Select catalog\"\n isClearable\n allowCustomValue\n menuShouldPortal={true}\n />\n );\n};\n"],"names":[],"mappings":";;;;;AAYO,MAAM,kBAAkB,CAAC,EAAE,IAAI,
|
|
1
|
+
{"version":3,"file":"CatalogSelector.js","sources":["../../../../src/components/QueryEditor/CatalogSelector.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback } from 'react';\nimport { Select } from '@grafana/ui';\nimport { type SelectableValue } from '@grafana/data';\nimport { type DB } from './types';\n\nexport interface CatalogSelectorProps {\n db: DB;\n inputId?: string;\n value: string | null;\n onChange: (catalog: string | null) => void;\n}\n\nexport const CatalogSelector = ({ db, inputId, value, onChange }: CatalogSelectorProps) => {\n const [catalogs, setCatalogs] = useState<Array<SelectableValue<string>>>([]);\n const [isLoading, setIsLoading] = useState(false);\n\n const loadCatalogs = useCallback(async () => {\n if (!db.catalogs) {\n return;\n }\n\n setIsLoading(true);\n try {\n const catalogList = await db.catalogs();\n const catalogOptions = catalogList.map((catalog) => ({\n label: catalog,\n value: catalog,\n }));\n setCatalogs(catalogOptions);\n } catch (error) {\n console.error('Error loading catalogs:', error);\n setCatalogs([]);\n } finally {\n setIsLoading(false);\n }\n }, [db]);\n\n useEffect(() => {\n loadCatalogs();\n }, [db, loadCatalogs]);\n\n const handleChange = (selectable: SelectableValue<string>) => {\n onChange(selectable?.value || null);\n };\n\n const selectedValue = catalogs.find((catalog) => catalog.value === value) || null;\n\n return (\n <Select\n inputId={inputId}\n options={catalogs}\n value={selectedValue}\n onChange={handleChange}\n isLoading={isLoading}\n placeholder=\"Select catalog\"\n isClearable\n allowCustomValue\n menuShouldPortal={true}\n />\n );\n};\n"],"names":[],"mappings":";;;;;AAYO,MAAM,kBAAkB,CAAC,EAAE,IAAI,OAAA,EAAS,KAAA,EAAO,UAAS,KAA4B;AACzF,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,QAAA,CAAyC,EAAE,CAAA;AAC3E,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAEhD,EAAA,MAAM,YAAA,GAAe,YAAY,YAAY;AAC3C,IAAA,IAAI,CAAC,GAAG,QAAA,EAAU;AAChB,MAAA;AAAA,IACF;AAEA,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,IAAI;AACF,MAAA,MAAM,WAAA,GAAc,MAAM,EAAA,CAAG,QAAA,EAAS;AACtC,MAAA,MAAM,cAAA,GAAiB,WAAA,CAAY,GAAA,CAAI,CAAC,OAAA,MAAa;AAAA,QACnD,KAAA,EAAO,OAAA;AAAA,QACP,KAAA,EAAO;AAAA,OACT,CAAE,CAAA;AACF,MAAA,WAAA,CAAY,cAAc,CAAA;AAAA,IAC5B,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,2BAA2B,KAAK,CAAA;AAC9C,MAAA,WAAA,CAAY,EAAE,CAAA;AAAA,IAChB,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF,CAAA,EAAG,CAAC,EAAE,CAAC,CAAA;AAEP,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,YAAA,EAAa;AAAA,EACf,CAAA,EAAG,CAAC,EAAA,EAAI,YAAY,CAAC,CAAA;AAErB,EAAA,MAAM,YAAA,GAAe,CAAC,UAAA,KAAwC;AAC5D,IAAA,QAAA,CAAA,CAAS,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,UAAS,IAAI,CAAA;AAAA,EACpC,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,SAAS,IAAA,CAAK,CAAC,YAAY,OAAA,CAAQ,KAAA,KAAU,KAAK,CAAA,IAAK,IAAA;AAE7E,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA;AAAA,MACA,OAAA,EAAS,QAAA;AAAA,MACT,KAAA,EAAO,aAAA;AAAA,MACP,QAAA,EAAU,YAAA;AAAA,MACV,SAAA;AAAA,MACA,WAAA,EAAY,gBAAA;AAAA,MACZ,WAAA,EAAW,IAAA;AAAA,MACX,gBAAA,EAAgB,IAAA;AAAA,MAChB,gBAAA,EAAkB;AAAA;AAAA,GACpB;AAEJ;;;;"}
|
|
@@ -6,7 +6,7 @@ function ConfirmModal({ isOpen, onCancel, onDiscard, onCopy }) {
|
|
|
6
6
|
useEffect(() => {
|
|
7
7
|
var _a;
|
|
8
8
|
if (isOpen) {
|
|
9
|
-
(_a = buttonRef.current) == null ?
|
|
9
|
+
(_a = buttonRef.current) == null ? void 0 : _a.focus();
|
|
10
10
|
}
|
|
11
11
|
}, [isOpen]);
|
|
12
12
|
return /* @__PURE__ */ React.createElement(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfirmModal.js","sources":["../../../../src/components/QueryEditor/ConfirmModal.tsx"],"sourcesContent":["import React, { useRef, useEffect } from 'react';\n\nimport { Button, Icon, Modal } from '@grafana/ui';\n\ntype ConfirmModalProps = {\n isOpen: boolean;\n onCancel?: () => void;\n onDiscard?: () => void;\n onCopy?: () => void;\n};\nexport function ConfirmModal({ isOpen, onCancel, onDiscard, onCopy }: ConfirmModalProps) {\n const buttonRef = useRef<HTMLButtonElement>(null);\n\n // Moved from grafana/ui\n useEffect(() => {\n // for some reason autoFocus property did no work on this button, but this does\n if (isOpen) {\n buttonRef.current?.focus();\n }\n }, [isOpen]);\n\n return (\n <Modal\n title={\n <div className=\"modal-header-title\">\n <Icon name=\"exclamation-triangle\" size=\"lg\" />\n <span className=\"p-l-1\">Warning</span>\n </div>\n }\n onDismiss={onCancel}\n isOpen={isOpen}\n >\n <p>\n Builder mode does not display changes made in code. The query builder will display the last changes you made in\n builder mode.\n </p>\n <p>Do you want to copy your code to the clipboard?</p>\n <Modal.ButtonRow>\n <Button type=\"button\" variant=\"secondary\" onClick={onCancel} fill=\"outline\">\n Cancel\n </Button>\n <Button variant=\"destructive\" type=\"button\" onClick={onDiscard} ref={buttonRef}>\n Discard code and switch\n </Button>\n <Button variant=\"primary\" onClick={onCopy}>\n Copy code and switch\n </Button>\n </Modal.ButtonRow>\n </Modal>\n );\n}\n"],"names":[],"mappings":";;;AAUO,SAAS,aAAa,EAAE,MAAA,EAAQ,
|
|
1
|
+
{"version":3,"file":"ConfirmModal.js","sources":["../../../../src/components/QueryEditor/ConfirmModal.tsx"],"sourcesContent":["import React, { useRef, useEffect } from 'react';\n\nimport { Button, Icon, Modal } from '@grafana/ui';\n\ntype ConfirmModalProps = {\n isOpen: boolean;\n onCancel?: () => void;\n onDiscard?: () => void;\n onCopy?: () => void;\n};\nexport function ConfirmModal({ isOpen, onCancel, onDiscard, onCopy }: ConfirmModalProps) {\n const buttonRef = useRef<HTMLButtonElement>(null);\n\n // Moved from grafana/ui\n useEffect(() => {\n // for some reason autoFocus property did no work on this button, but this does\n if (isOpen) {\n buttonRef.current?.focus();\n }\n }, [isOpen]);\n\n return (\n <Modal\n title={\n <div className=\"modal-header-title\">\n <Icon name=\"exclamation-triangle\" size=\"lg\" />\n <span className=\"p-l-1\">Warning</span>\n </div>\n }\n onDismiss={onCancel}\n isOpen={isOpen}\n >\n <p>\n Builder mode does not display changes made in code. The query builder will display the last changes you made in\n builder mode.\n </p>\n <p>Do you want to copy your code to the clipboard?</p>\n <Modal.ButtonRow>\n <Button type=\"button\" variant=\"secondary\" onClick={onCancel} fill=\"outline\">\n Cancel\n </Button>\n <Button variant=\"destructive\" type=\"button\" onClick={onDiscard} ref={buttonRef}>\n Discard code and switch\n </Button>\n <Button variant=\"primary\" onClick={onCopy}>\n Copy code and switch\n </Button>\n </Modal.ButtonRow>\n </Modal>\n );\n}\n"],"names":[],"mappings":";;;AAUO,SAAS,aAAa,EAAE,MAAA,EAAQ,QAAA,EAAU,SAAA,EAAW,QAAO,EAAsB;AACvF,EAAA,MAAM,SAAA,GAAY,OAA0B,IAAI,CAAA;AAGhD,EAAA,SAAA,CAAU,MAAM;AAdlB,IAAA,IAAA,EAAA;AAgBI,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,CAAA,EAAA,GAAA,SAAA,CAAU,YAAV,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,KAAA,EAAA;AAAA,IACrB;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,uBACE,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EAAA,sCACZ,IAAA,EAAA,EAAK,IAAA,EAAK,sBAAA,EAAuB,IAAA,EAAK,MAAK,CAAA,kBAC5C,KAAA,CAAA,aAAA,CAAC,UAAK,SAAA,EAAU,OAAA,EAAA,EAAQ,SAAO,CACjC,CAAA;AAAA,MAEF,SAAA,EAAW,QAAA;AAAA,MACX;AAAA,KAAA;AAAA,oBAEA,KAAA,CAAA,aAAA,CAAC,WAAE,+HAGH,CAAA;AAAA,oBACA,KAAA,CAAA,aAAA,CAAC,WAAE,iDAA+C,CAAA;AAAA,oBAClD,KAAA,CAAA,aAAA,CAAC,KAAA,CAAM,SAAA,EAAN,IAAA,sCACE,MAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,OAAA,EAAQ,aAAY,OAAA,EAAS,QAAA,EAAU,IAAA,EAAK,SAAA,EAAA,EAAU,QAE5E,CAAA,kBACA,KAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,eAAc,IAAA,EAAK,QAAA,EAAS,OAAA,EAAS,SAAA,EAAW,KAAK,SAAA,EAAA,EAAW,yBAEhF,CAAA,kBACA,KAAA,CAAA,aAAA,CAAC,UAAO,OAAA,EAAQ,SAAA,EAAU,OAAA,EAAS,MAAA,EAAA,EAAQ,sBAE3C,CACF;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -34,7 +34,7 @@ const DatasetSelector = ({
|
|
|
34
34
|
onChange(state.value[0]);
|
|
35
35
|
}
|
|
36
36
|
} else {
|
|
37
|
-
if (state.value && state.value.find((v) => v.value === value) ===
|
|
37
|
+
if (state.value && state.value.find((v) => v.value === value) === void 0) {
|
|
38
38
|
if (state.value.length > 0) {
|
|
39
39
|
onChange(state.value[0]);
|
|
40
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatasetSelector.js","sources":["../../../../src/components/QueryEditor/DatasetSelector.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { useAsync } from 'react-use';\n\nimport { type SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { type DB, type ResourceSelectorProps, toOption } from './types';\n\ninterface DatasetSelectorProps extends ResourceSelectorProps {\n db: DB;\n dataset?: string;\n catalog?: string; // When provided, fetch schemas instead of datasets\n value: string | null;\n applyDefault?: boolean;\n disabled?: boolean;\n onChange: (v: SelectableValue) => void;\n inputId?: string;\n enableCatalogs?: boolean;\n 'data-testid'?: string;\n}\n\nexport const DatasetSelector = ({\n db,\n dataset,\n catalog,\n value,\n onChange,\n disabled,\n className,\n applyDefault,\n inputId,\n enableCatalogs,\n 'data-testid': dataTestId,\n}: DatasetSelectorProps) => {\n const state = useAsync(async () => {\n // If a default dataset is provided, use it\n if (dataset) {\n onChange(toOption(dataset));\n return [toOption(dataset)];\n }\n\n // Fetch datasets - when catalog is provided, db.datasets(catalog) returns schemas for that catalog\n const datasets = await db.datasets(catalog);\n return datasets.map(toOption);\n }, [catalog]);\n\n useEffect(() => {\n if (!applyDefault) {\n return;\n }\n // Set default dataset when values are fetched\n if (!value) {\n if (state.value && state.value[0]) {\n onChange(state.value[0]);\n }\n } else {\n if (state.value && state.value.find((v) => v.value === value) === undefined) {\n // if value is set and newly fetched values does not contain selected value\n if (state.value.length > 0) {\n onChange(state.value[0]);\n }\n }\n }\n }, [state.value, value, applyDefault, onChange]);\n\n return (\n <Select\n inputId={inputId}\n className={className}\n aria-label=\"Dataset selector\"\n value={value}\n options={state.value}\n onChange={onChange}\n disabled={disabled}\n isLoading={state.loading}\n menuShouldPortal={true}\n data-testid={dataTestId}\n placeholder={enableCatalogs ? 'Select schema' : 'Select dataset'}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;AAqBO,MAAM,kBAAkB,CAAC;AAAA,EAC9B,EAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,cAAA;AAAA,EACA,
|
|
1
|
+
{"version":3,"file":"DatasetSelector.js","sources":["../../../../src/components/QueryEditor/DatasetSelector.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { useAsync } from 'react-use';\n\nimport { type SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { type DB, type ResourceSelectorProps, toOption } from './types';\n\ninterface DatasetSelectorProps extends ResourceSelectorProps {\n db: DB;\n dataset?: string;\n catalog?: string; // When provided, fetch schemas instead of datasets\n value: string | null;\n applyDefault?: boolean;\n disabled?: boolean;\n onChange: (v: SelectableValue) => void;\n inputId?: string;\n enableCatalogs?: boolean;\n 'data-testid'?: string;\n}\n\nexport const DatasetSelector = ({\n db,\n dataset,\n catalog,\n value,\n onChange,\n disabled,\n className,\n applyDefault,\n inputId,\n enableCatalogs,\n 'data-testid': dataTestId,\n}: DatasetSelectorProps) => {\n const state = useAsync(async () => {\n // If a default dataset is provided, use it\n if (dataset) {\n onChange(toOption(dataset));\n return [toOption(dataset)];\n }\n\n // Fetch datasets - when catalog is provided, db.datasets(catalog) returns schemas for that catalog\n const datasets = await db.datasets(catalog);\n return datasets.map(toOption);\n }, [catalog]);\n\n useEffect(() => {\n if (!applyDefault) {\n return;\n }\n // Set default dataset when values are fetched\n if (!value) {\n if (state.value && state.value[0]) {\n onChange(state.value[0]);\n }\n } else {\n if (state.value && state.value.find((v) => v.value === value) === undefined) {\n // if value is set and newly fetched values does not contain selected value\n if (state.value.length > 0) {\n onChange(state.value[0]);\n }\n }\n }\n }, [state.value, value, applyDefault, onChange]);\n\n return (\n <Select\n inputId={inputId}\n className={className}\n aria-label=\"Dataset selector\"\n value={value}\n options={state.value}\n onChange={onChange}\n disabled={disabled}\n isLoading={state.loading}\n menuShouldPortal={true}\n data-testid={dataTestId}\n placeholder={enableCatalogs ? 'Select schema' : 'Select dataset'}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;AAqBO,MAAM,kBAAkB,CAAC;AAAA,EAC9B,EAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA,EAAe;AACjB,CAAA,KAA4B;AAC1B,EAAA,MAAM,KAAA,GAAQ,SAAS,YAAY;AAEjC,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,QAAA,CAAS,QAAA,CAAS,OAAO,CAAC,CAAA;AAC1B,MAAA,OAAO,CAAC,QAAA,CAAS,OAAO,CAAC,CAAA;AAAA,IAC3B;AAGA,IAAA,MAAM,QAAA,GAAW,MAAM,EAAA,CAAG,QAAA,CAAS,OAAO,CAAA;AAC1C,IAAA,OAAO,QAAA,CAAS,IAAI,QAAQ,CAAA;AAAA,EAC9B,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,IAAI,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,EAAG;AACjC,QAAA,QAAA,CAAS,KAAA,CAAM,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,MACzB;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAI,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU,KAAK,CAAA,KAAM,MAAA,EAAW;AAE3E,QAAA,IAAI,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AAC1B,UAAA,QAAA,CAAS,KAAA,CAAM,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AAAA,EACF,GAAG,CAAC,KAAA,CAAM,OAAO,KAAA,EAAO,YAAA,EAAc,QAAQ,CAAC,CAAA;AAE/C,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA,EAAW,kBAAA;AAAA,MACX,KAAA;AAAA,MACA,SAAS,KAAA,CAAM,KAAA;AAAA,MACf,QAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAW,KAAA,CAAM,OAAA;AAAA,MACjB,gBAAA,EAAkB,IAAA;AAAA,MAClB,aAAA,EAAa,UAAA;AAAA,MACb,WAAA,EAAa,iBAAiB,eAAA,GAAkB;AAAA;AAAA,GAClD;AAEJ;;;;"}
|
|
@@ -3,15 +3,15 @@ import { css } from '@emotion/css';
|
|
|
3
3
|
import '@grafana/data';
|
|
4
4
|
import { useStyles2, ReactUtils, Tooltip, Icon, Space, Field } from '@grafana/ui';
|
|
5
5
|
|
|
6
|
-
const EditorField = (props) => {
|
|
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, width);
|
|
10
|
-
const childInputId = (fieldProps == null ?
|
|
9
|
+
const styles = useStyles2(getStyles$l, width);
|
|
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 = (theme, width) => {
|
|
14
|
+
const getStyles$l = (theme, width) => {
|
|
15
15
|
return {
|
|
16
16
|
root: css({
|
|
17
17
|
minWidth: theme.spacing(width != null ? width : 0)
|
|
@@ -38,5 +38,5 @@ const getStyles = (theme, width) => {
|
|
|
38
38
|
};
|
|
39
39
|
};
|
|
40
40
|
|
|
41
|
-
export { EditorField };
|
|
41
|
+
export { EditorField$1 as EditorField };
|
|
42
42
|
//# sourceMappingURL=EditorField.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditorField.js","sources":["../../../../src/components/QueryEditor/EditorField.tsx"],"sourcesContent":["import React, { type ComponentProps } from 'react';\nimport { css } from '@emotion/css';\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { Field, Icon, type PopoverContent, ReactUtils, Space, Tooltip, useStyles2 } from '@grafana/ui';\n\ninterface EditorFieldProps extends ComponentProps<typeof Field> {\n label: string;\n children: React.ReactElement;\n width?: number | string;\n optional?: boolean;\n tooltip?: PopoverContent;\n tooltipInteractive?: boolean;\n}\nexport const EditorField = (props: EditorFieldProps) => {\n const { label, optional, tooltip, tooltipInteractive, children, width, ...fieldProps } = props;\n\n const styles = useStyles2(getStyles, width);\n\n // Null check for backward compatibility\n const childInputId = fieldProps?.htmlFor || ReactUtils?.getChildId(children);\n\n const labelEl = (\n <>\n <label className={styles.label} htmlFor={childInputId}>\n {label}\n {optional && <span className={styles.optional}> - optional</span>}\n {tooltip && (\n <Tooltip placement=\"top\" content={tooltip} theme=\"info\" interactive={tooltipInteractive}>\n <Icon tabIndex={0} name=\"info-circle\" size=\"sm\" className={styles.icon} />\n </Tooltip>\n )}\n </label>\n <Space v={0.5} />\n </>\n );\n\n return (\n <div className={styles.root}>\n <Field className={styles.field} label={labelEl} {...fieldProps}>\n {children}\n </Field>\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2, width?: number | string) => {\n return {\n root: css({\n minWidth: theme.spacing(width ?? 0),\n }),\n label: css({\n fontSize: 12,\n fontWeight: theme.typography.fontWeightMedium,\n }),\n optional: css({\n fontStyle: 'italic',\n color: theme.colors.text.secondary,\n }),\n field: css({\n marginBottom: 0, // GrafanaUI/Field has a bottom margin which we must remove\n }),\n icon: css({\n color: theme.colors.text.secondary,\n marginLeft: theme.spacing(1),\n ':hover': {\n color: theme.colors.text.primary,\n },\n }),\n };\n};\n"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"EditorField.js","sources":["../../../../src/components/QueryEditor/EditorField.tsx"],"sourcesContent":["import React, { type ComponentProps } from 'react';\nimport { css } from '@emotion/css';\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { Field, Icon, type PopoverContent, ReactUtils, Space, Tooltip, useStyles2 } from '@grafana/ui';\n\ninterface EditorFieldProps extends ComponentProps<typeof Field> {\n label: string;\n children: React.ReactElement;\n width?: number | string;\n optional?: boolean;\n tooltip?: PopoverContent;\n tooltipInteractive?: boolean;\n}\nexport const EditorField = (props: EditorFieldProps) => {\n const { label, optional, tooltip, tooltipInteractive, children, width, ...fieldProps } = props;\n\n const styles = useStyles2(getStyles, width);\n\n // Null check for backward compatibility\n const childInputId = fieldProps?.htmlFor || ReactUtils?.getChildId(children);\n\n const labelEl = (\n <>\n <label className={styles.label} htmlFor={childInputId}>\n {label}\n {optional && <span className={styles.optional}> - optional</span>}\n {tooltip && (\n <Tooltip placement=\"top\" content={tooltip} theme=\"info\" interactive={tooltipInteractive}>\n <Icon tabIndex={0} name=\"info-circle\" size=\"sm\" className={styles.icon} />\n </Tooltip>\n )}\n </label>\n <Space v={0.5} />\n </>\n );\n\n return (\n <div className={styles.root}>\n <Field className={styles.field} label={labelEl} {...fieldProps}>\n {children}\n </Field>\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2, width?: number | string) => {\n return {\n root: css({\n minWidth: theme.spacing(width ?? 0),\n }),\n label: css({\n fontSize: 12,\n fontWeight: theme.typography.fontWeightMedium,\n }),\n optional: css({\n fontStyle: 'italic',\n color: theme.colors.text.secondary,\n }),\n field: css({\n marginBottom: 0, // GrafanaUI/Field has a bottom margin which we must remove\n }),\n icon: css({\n color: theme.colors.text.secondary,\n marginLeft: theme.spacing(1),\n ':hover': {\n color: theme.colors.text.primary,\n },\n }),\n };\n};\n"],"names":["EditorField","getStyles"],"mappings":";;;;;AAaO,MAAMA,aAAA,GAAc,CAAC,KAAA,KAA4B;AAbxD,EAAA,IAAA,EAAA;AAcE,EAAA,MAAM,EAAE,OAAO,QAAA,EAAU,OAAA,EAAS,oBAAoB,QAAA,EAAU,KAAA,EAAO,GAAG,UAAA,EAAW,GAAI,KAAA;AAEzF,EAAA,MAAM,MAAA,GAAS,UAAA,CAAWC,WAAA,EAAW,KAAK,CAAA;AAG1C,EAAA,MAAM,YAAA,GAAA,CAAe,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,OAAA,MAAA,CAAW,EAAA,GAAA,UAAA,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,UAAA,CAAW,QAAA,CAAA,CAAA;AAEnE,EAAA,MAAM,OAAA,6EAEF,KAAA,CAAA,aAAA,CAAC,OAAA,EAAA,EAAM,WAAW,MAAA,CAAO,KAAA,EAAO,SAAS,YAAA,EAAA,EACtC,KAAA,EACA,4BAAY,KAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,WAAW,MAAA,CAAO,QAAA,EAAA,EAAU,aAAW,CAAA,EACzD,OAAA,oBACC,KAAA,CAAA,aAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,KAAA,EAAM,SAAS,OAAA,EAAS,KAAA,EAAM,QAAO,WAAA,EAAa,kBAAA,EAAA,sCAClE,IAAA,EAAA,EAAK,QAAA,EAAU,CAAA,EAAG,IAAA,EAAK,aAAA,EAAc,IAAA,EAAK,MAAK,SAAA,EAAW,MAAA,CAAO,MAAM,CAC1E,CAEJ,mBACA,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAM,CAAA,EAAG,GAAA,EAAK,CACjB,CAAA;AAGF,EAAA,uBACE,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,wBACrB,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAW,MAAA,CAAO,OAAO,KAAA,EAAO,OAAA,EAAU,GAAG,UAAA,EAAA,EACjD,QACH,CACF,CAAA;AAEJ;AAEA,MAAMA,WAAA,GAAY,CAAC,KAAA,EAAsB,KAAA,KAA4B;AACnE,EAAA,OAAO;AAAA,IACL,MAAM,GAAA,CAAI;AAAA,MACR,QAAA,EAAU,KAAA,CAAM,OAAA,CAAQ,KAAA,IAAA,IAAA,GAAA,KAAA,GAAS,CAAC;AAAA,KACnC,CAAA;AAAA,IACD,OAAO,GAAA,CAAI;AAAA,MACT,QAAA,EAAU,EAAA;AAAA,MACV,UAAA,EAAY,MAAM,UAAA,CAAW;AAAA,KAC9B,CAAA;AAAA,IACD,UAAU,GAAA,CAAI;AAAA,MACZ,SAAA,EAAW,QAAA;AAAA,MACX,KAAA,EAAO,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK;AAAA,KAC1B,CAAA;AAAA,IACD,OAAO,GAAA,CAAI;AAAA,MACT,YAAA,EAAc;AAAA;AAAA,KACf,CAAA;AAAA,IACD,MAAM,GAAA,CAAI;AAAA,MACR,KAAA,EAAO,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,SAAA;AAAA,MACzB,UAAA,EAAY,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,MAC3B,QAAA,EAAU;AAAA,QACR,KAAA,EAAO,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK;AAAA;AAC3B,KACD;AAAA,GACH;AACF,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditorFieldGroup.js","sources":["../../../../src/components/QueryEditor/EditorFieldGroup.tsx"],"sourcesContent":["import React from 'react';\nimport { EditorStack } from './EditorStack';\n\ninterface EditorFieldGroupProps {\n children?: React.ReactNode;\n}\n\nexport const EditorFieldGroup = ({ children }: EditorFieldGroupProps) => {\n return <EditorStack gap={1}>{children}</EditorStack>;\n};\n"],"names":[],"mappings":";;;AAOO,MAAM,
|
|
1
|
+
{"version":3,"file":"EditorFieldGroup.js","sources":["../../../../src/components/QueryEditor/EditorFieldGroup.tsx"],"sourcesContent":["import React from 'react';\nimport { EditorStack } from './EditorStack';\n\ninterface EditorFieldGroupProps {\n children?: React.ReactNode;\n}\n\nexport const EditorFieldGroup = ({ children }: EditorFieldGroupProps) => {\n return <EditorStack gap={1}>{children}</EditorStack>;\n};\n"],"names":[],"mappings":";;;AAOO,MAAM,gBAAA,GAAmB,CAAC,EAAE,QAAA,EAAS,KAA6B;AACvE,EAAA,uBAAO,KAAA,CAAA,aAAA,CAAC,WAAA,EAAA,EAAY,GAAA,EAAK,CAAA,EAAA,EAAI,QAAS,CAAA;AACxC;;;;"}
|
|
@@ -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);
|
|
7
|
+
const styles = useStyles2(getStyles$m);
|
|
8
8
|
return /* @__PURE__ */ React.createElement("div", { className: styles.root }, children);
|
|
9
9
|
};
|
|
10
|
-
const getStyles = (theme) => ({
|
|
10
|
+
const getStyles$m = (theme) => ({
|
|
11
11
|
root: css({
|
|
12
12
|
display: "flex",
|
|
13
13
|
flexWrap: "wrap",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditorHeader.js","sources":["../../../../src/components/QueryEditor/EditorHeader.tsx"],"sourcesContent":["import React from 'react';\nimport { css } from '@emotion/css';\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\ninterface EditorHeaderProps {\n children?: React.ReactNode;\n}\n\nexport const EditorHeader = ({ children }: EditorHeaderProps) => {\n const styles = useStyles2(getStyles);\n\n return <div className={styles.root}>{children}</div>;\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n root: css({\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: theme.spacing(3),\n minHeight: theme.spacing(4),\n }),\n});\n"],"names":[],"mappings":";;;;;AASO,MAAM,
|
|
1
|
+
{"version":3,"file":"EditorHeader.js","sources":["../../../../src/components/QueryEditor/EditorHeader.tsx"],"sourcesContent":["import React from 'react';\nimport { css } from '@emotion/css';\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\ninterface EditorHeaderProps {\n children?: React.ReactNode;\n}\n\nexport const EditorHeader = ({ children }: EditorHeaderProps) => {\n const styles = useStyles2(getStyles);\n\n return <div className={styles.root}>{children}</div>;\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n root: css({\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: theme.spacing(3),\n minHeight: theme.spacing(4),\n }),\n});\n"],"names":["getStyles"],"mappings":";;;;;AASO,MAAM,YAAA,GAAe,CAAC,EAAE,QAAA,EAAS,KAAyB;AAC/D,EAAA,MAAM,MAAA,GAAS,WAAWA,WAAS,CAAA;AAEnC,EAAA,uBAAO,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,QAAO,QAAS,CAAA;AAChD;AAEA,MAAMA,WAAA,GAAY,CAAC,KAAA,MAA0B;AAAA,EAC3C,MAAM,GAAA,CAAI;AAAA,IACR,OAAA,EAAS,MAAA;AAAA,IACT,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,QAAA;AAAA,IACZ,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,IACpB,SAAA,EAAW,KAAA,CAAM,OAAA,CAAQ,CAAC;AAAA,GAC3B;AACH,CAAA,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditorList.js","sources":["../../../../src/components/QueryEditor/EditorList.tsx"],"sourcesContent":["import React, { type ReactElement, type Ref, forwardRef } from 'react';\nimport { Button } from '@grafana/ui';\n\nimport { EditorStack } from './EditorStack';\n\ninterface EditorListProps<T> {\n items: Array<Partial<T>>;\n renderItem: (item: Partial<T>, onChangeItem: (item: Partial<T>) => void, onDeleteItem: () => void) => ReactElement;\n onChange: (items: Array<Partial<T>>) => void;\n}\n\nexport const EditorList = forwardRef(function EditorList<T>(\n { items, renderItem, onChange }: EditorListProps<T>,\n ref: Ref<HTMLButtonElement>\n) {\n const onAddItem = () => {\n const newItems = [...items, {}];\n\n onChange(newItems);\n };\n\n const onChangeItem = (itemIndex: number, newItem: Partial<T>) => {\n const newItems = [...items];\n newItems[itemIndex] = newItem;\n onChange(newItems);\n };\n\n const onDeleteItem = (itemIndex: number) => {\n const newItems = [...items];\n newItems.splice(itemIndex, 1);\n onChange(newItems);\n };\n return (\n <EditorStack>\n {items.map((item, index) => (\n <div key={index}>\n {renderItem(\n item,\n (newItem) => onChangeItem(index, newItem),\n () => onDeleteItem(index)\n )}\n </div>\n ))}\n <Button ref={ref} onClick={onAddItem} variant=\"secondary\" size=\"md\" icon=\"plus\" aria-label=\"Add\" type=\"button\" />\n </EditorStack>\n );\n});\n"],"names":["EditorList"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"EditorList.js","sources":["../../../../src/components/QueryEditor/EditorList.tsx"],"sourcesContent":["import React, { type ReactElement, type Ref, forwardRef } from 'react';\nimport { Button } from '@grafana/ui';\n\nimport { EditorStack } from './EditorStack';\n\ninterface EditorListProps<T> {\n items: Array<Partial<T>>;\n renderItem: (item: Partial<T>, onChangeItem: (item: Partial<T>) => void, onDeleteItem: () => void) => ReactElement;\n onChange: (items: Array<Partial<T>>) => void;\n}\n\nexport const EditorList = forwardRef(function EditorList<T>(\n { items, renderItem, onChange }: EditorListProps<T>,\n ref: Ref<HTMLButtonElement>\n) {\n const onAddItem = () => {\n const newItems = [...items, {}];\n\n onChange(newItems);\n };\n\n const onChangeItem = (itemIndex: number, newItem: Partial<T>) => {\n const newItems = [...items];\n newItems[itemIndex] = newItem;\n onChange(newItems);\n };\n\n const onDeleteItem = (itemIndex: number) => {\n const newItems = [...items];\n newItems.splice(itemIndex, 1);\n onChange(newItems);\n };\n return (\n <EditorStack>\n {items.map((item, index) => (\n <div key={index}>\n {renderItem(\n item,\n (newItem) => onChangeItem(index, newItem),\n () => onDeleteItem(index)\n )}\n </div>\n ))}\n <Button ref={ref} onClick={onAddItem} variant=\"secondary\" size=\"md\" icon=\"plus\" aria-label=\"Add\" type=\"button\" />\n </EditorStack>\n );\n});\n"],"names":["EditorList"],"mappings":";;;;AAWO,MAAM,UAAA,GAAa,WAAW,SAASA,WAAAA,CAC5C,EAAE,KAAA,EAAO,UAAA,EAAY,QAAA,EAAS,EAC9B,GAAA,EACA;AACA,EAAA,MAAM,YAAY,MAAM;AACtB,IAAA,MAAM,QAAA,GAAW,CAAC,GAAG,KAAA,EAAO,EAAE,CAAA;AAE9B,IAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,EACnB,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,SAAA,EAAmB,OAAA,KAAwB;AAC/D,IAAA,MAAM,QAAA,GAAW,CAAC,GAAG,KAAK,CAAA;AAC1B,IAAA,QAAA,CAAS,SAAS,CAAA,GAAI,OAAA;AACtB,IAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,EACnB,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,SAAA,KAAsB;AAC1C,IAAA,MAAM,QAAA,GAAW,CAAC,GAAG,KAAK,CAAA;AAC1B,IAAA,QAAA,CAAS,MAAA,CAAO,WAAW,CAAC,CAAA;AAC5B,IAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,EACnB,CAAA;AACA,EAAA,uBACE,KAAA,CAAA,aAAA,CAAC,WAAA,EAAA,IAAA,EACE,KAAA,CAAM,GAAA,CAAI,CAAC,MAAM,KAAA,qBAChB,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,KAAA,EAAA,EACP,UAAA;AAAA,IACC,IAAA;AAAA,IACA,CAAC,OAAA,KAAY,YAAA,CAAa,KAAA,EAAO,OAAO,CAAA;AAAA,IACxC,MAAM,aAAa,KAAK;AAAA,GAE5B,CACD,CAAA,sCACA,MAAA,EAAA,EAAO,GAAA,EAAU,SAAS,SAAA,EAAW,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAK,IAAA,EAAK,MAAA,EAAO,cAAW,KAAA,EAAM,IAAA,EAAK,UAAS,CACjH,CAAA;AAEJ,CAAC;;;;"}
|
|
@@ -4,11 +4,11 @@ import '@grafana/data';
|
|
|
4
4
|
import { useStyles2 } from '@grafana/ui';
|
|
5
5
|
import { EditorStack } from './EditorStack.js';
|
|
6
6
|
|
|
7
|
-
const EditorRow = ({ children }) => {
|
|
8
|
-
const styles = useStyles2(getStyles);
|
|
7
|
+
const EditorRow$1 = ({ children }) => {
|
|
8
|
+
const styles = useStyles2(getStyles$k);
|
|
9
9
|
return /* @__PURE__ */ React.createElement("div", { className: styles.root }, /* @__PURE__ */ React.createElement(EditorStack, { gap: 2 }, children));
|
|
10
10
|
};
|
|
11
|
-
const getStyles = (theme) => {
|
|
11
|
+
const getStyles$k = (theme) => {
|
|
12
12
|
return {
|
|
13
13
|
root: css({
|
|
14
14
|
padding: theme.spacing(1),
|
|
@@ -18,5 +18,5 @@ const getStyles = (theme) => {
|
|
|
18
18
|
};
|
|
19
19
|
};
|
|
20
20
|
|
|
21
|
-
export { EditorRow };
|
|
21
|
+
export { EditorRow$1 as EditorRow };
|
|
22
22
|
//# sourceMappingURL=EditorRow.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditorRow.js","sources":["../../../../src/components/QueryEditor/EditorRow.tsx"],"sourcesContent":["import React from 'react';\nimport { css } from '@emotion/css';\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\nimport { EditorStack } from './EditorStack';\n\ninterface EditorRowProps {\n children?: React.ReactNode;\n}\n\nexport const EditorRow = ({ children }: EditorRowProps) => {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.root}>\n <EditorStack gap={2}>{children}</EditorStack>\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n root: css({\n padding: theme.spacing(1),\n backgroundColor: theme.colors.background.secondary,\n borderRadius: theme.shape.radius.default,\n }),\n };\n};\n"],"names":[],"mappings":";;;;;;AAUO,
|
|
1
|
+
{"version":3,"file":"EditorRow.js","sources":["../../../../src/components/QueryEditor/EditorRow.tsx"],"sourcesContent":["import React from 'react';\nimport { css } from '@emotion/css';\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\nimport { EditorStack } from './EditorStack';\n\ninterface EditorRowProps {\n children?: React.ReactNode;\n}\n\nexport const EditorRow = ({ children }: EditorRowProps) => {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.root}>\n <EditorStack gap={2}>{children}</EditorStack>\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n root: css({\n padding: theme.spacing(1),\n backgroundColor: theme.colors.background.secondary,\n borderRadius: theme.shape.radius.default,\n }),\n };\n};\n"],"names":["EditorRow","getStyles"],"mappings":";;;;;;AAUO,MAAMA,WAAA,GAAY,CAAC,EAAE,QAAA,EAAS,KAAsB;AACzD,EAAA,MAAM,MAAA,GAAS,WAAWC,WAAS,CAAA;AAEnC,EAAA,uBACE,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,IAAA,EAAA,sCACpB,WAAA,EAAA,EAAY,GAAA,EAAK,CAAA,EAAA,EAAI,QAAS,CACjC,CAAA;AAEJ;AAEA,MAAMA,WAAA,GAAY,CAAC,KAAA,KAAyB;AAC1C,EAAA,OAAO;AAAA,IACL,MAAM,GAAA,CAAI;AAAA,MACR,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,MACxB,eAAA,EAAiB,KAAA,CAAM,MAAA,CAAO,UAAA,CAAW,SAAA;AAAA,MACzC,YAAA,EAAc,KAAA,CAAM,KAAA,CAAM,MAAA,CAAO;AAAA,KAClC;AAAA,GACH;AACF,CAAA;;;;"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { EditorStack } from './EditorStack.js';
|
|
3
3
|
|
|
4
|
-
const EditorRows = ({ children }) => {
|
|
4
|
+
const EditorRows$1 = ({ children }) => {
|
|
5
5
|
return /* @__PURE__ */ React.createElement(EditorStack, { gap: 0.5, direction: "column" }, children);
|
|
6
6
|
};
|
|
7
7
|
|
|
8
|
-
export { EditorRows };
|
|
8
|
+
export { EditorRows$1 as EditorRows };
|
|
9
9
|
//# sourceMappingURL=EditorRows.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditorRows.js","sources":["../../../../src/components/QueryEditor/EditorRows.tsx"],"sourcesContent":["import React from 'react';\nimport { EditorStack } from './EditorStack';\n\ninterface EditorRowsProps {\n children?: React.ReactNode;\n}\n\nexport const EditorRows = ({ children }: EditorRowsProps) => {\n return (\n <EditorStack gap={0.5} direction=\"column\">\n {children}\n </EditorStack>\n );\n};\n"],"names":[],"mappings":";;;AAOO,
|
|
1
|
+
{"version":3,"file":"EditorRows.js","sources":["../../../../src/components/QueryEditor/EditorRows.tsx"],"sourcesContent":["import React from 'react';\nimport { EditorStack } from './EditorStack';\n\ninterface EditorRowsProps {\n children?: React.ReactNode;\n}\n\nexport const EditorRows = ({ children }: EditorRowsProps) => {\n return (\n <EditorStack gap={0.5} direction=\"column\">\n {children}\n </EditorStack>\n );\n};\n"],"names":["EditorRows"],"mappings":";;;AAOO,MAAMA,YAAA,GAAa,CAAC,EAAE,QAAA,EAAS,KAAuB;AAC3D,EAAA,2CACG,WAAA,EAAA,EAAY,GAAA,EAAK,GAAA,EAAK,SAAA,EAAU,YAC9B,QACH,CAAA;AAEJ;;;;"}
|
|
@@ -4,7 +4,7 @@ import '@grafana/data';
|
|
|
4
4
|
|
|
5
5
|
const EditorStack = ({ children, wrap: wrapItems = true, ...props }) => {
|
|
6
6
|
var _a, _b;
|
|
7
|
-
return /* @__PURE__ */ React.createElement(Stack, { wrap: wrapItems ? "wrap" :
|
|
7
|
+
return /* @__PURE__ */ React.createElement(Stack, { wrap: wrapItems ? "wrap" : void 0, direction: (_a = props.direction) != null ? _a : "row", gap: (_b = props.gap) != null ? _b : 2, ...props }, children);
|
|
8
8
|
};
|
|
9
9
|
|
|
10
10
|
export { EditorStack };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditorStack.js","sources":["../../../../src/components/QueryEditor/EditorStack.tsx"],"sourcesContent":["import React from 'react';\nimport { Stack } from '@grafana/ui';\nimport { type ThemeSpacingTokens } from '@grafana/data';\n\nexport type Direction = 'row' | 'row-reverse' | 'column' | 'column-reverse';\nexport type AlignItems =\n | 'stretch'\n | 'flex-start'\n | 'flex-end'\n | 'center'\n | 'baseline'\n | 'start'\n | 'end'\n | 'self-start'\n | 'self-end';\n\ninterface StackProps {\n children?: React.ReactNode;\n direction?: Direction;\n alignItems?: AlignItems;\n wrap?: boolean;\n gap?: ThemeSpacingTokens;\n}\n\nexport const EditorStack = ({ children, wrap: wrapItems = true, ...props }: StackProps) => {\n return (\n <Stack wrap={wrapItems ? 'wrap' : undefined} direction={props.direction ?? 'row'} gap={props.gap ?? 2} {...props}>\n {children}\n </Stack>\n );\n};\n"],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"EditorStack.js","sources":["../../../../src/components/QueryEditor/EditorStack.tsx"],"sourcesContent":["import React from 'react';\nimport { Stack } from '@grafana/ui';\nimport { type ThemeSpacingTokens } from '@grafana/data';\n\nexport type Direction = 'row' | 'row-reverse' | 'column' | 'column-reverse';\nexport type AlignItems =\n | 'stretch'\n | 'flex-start'\n | 'flex-end'\n | 'center'\n | 'baseline'\n | 'start'\n | 'end'\n | 'self-start'\n | 'self-end';\n\ninterface StackProps {\n children?: React.ReactNode;\n direction?: Direction;\n alignItems?: AlignItems;\n wrap?: boolean;\n gap?: ThemeSpacingTokens;\n}\n\nexport const EditorStack = ({ children, wrap: wrapItems = true, ...props }: StackProps) => {\n return (\n <Stack wrap={wrapItems ? 'wrap' : undefined} direction={props.direction ?? 'row'} gap={props.gap ?? 2} {...props}>\n {children}\n </Stack>\n );\n};\n"],"names":[],"mappings":";;;;AAwBO,MAAM,WAAA,GAAc,CAAC,EAAE,QAAA,EAAU,MAAM,SAAA,GAAY,IAAA,EAAM,GAAG,KAAA,EAAM,KAAkB;AAxB3F,EAAA,IAAA,EAAA,EAAA,EAAA;AAyBE,EAAA,2CACG,KAAA,EAAA,EAAM,IAAA,EAAM,YAAY,MAAA,GAAS,MAAA,EAAW,YAAW,EAAA,GAAA,KAAA,CAAM,SAAA,KAAN,IAAA,GAAA,EAAA,GAAmB,KAAA,EAAO,MAAK,EAAA,GAAA,KAAA,CAAM,GAAA,KAAN,YAAa,CAAA,EAAI,GAAG,SACxG,QACH,CAAA;AAEJ;;;;"}
|
|
@@ -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();
|
|
6
|
+
const styles = getStyles$j();
|
|
7
7
|
return /* @__PURE__ */ React.createElement("div", { className: styles.switch }, /* @__PURE__ */ React.createElement(Switch, { ...props }));
|
|
8
8
|
};
|
|
9
|
-
const getStyles = () => {
|
|
9
|
+
const getStyles$j = () => {
|
|
10
10
|
return {
|
|
11
11
|
switch: css({
|
|
12
12
|
display: "flex",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditorSwitch.js","sources":["../../../../src/components/QueryEditor/EditorSwitch.tsx"],"sourcesContent":["import React, { type ComponentProps } from 'react';\nimport { css } from '@emotion/css';\nimport { Switch } from '@grafana/ui';\n\n// Wrapper component around <Switch /> that properly aligns it in <EditorField />\nexport const EditorSwitch = (props: ComponentProps<typeof Switch>) => {\n const styles = getStyles();\n\n return (\n <div className={styles.switch}>\n <Switch {...props} />\n </div>\n );\n};\n\nconst getStyles = () => {\n return {\n switch: css({\n display: 'flex',\n alignItems: 'center',\n minHeight: 30,\n }),\n };\n};\n"],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"EditorSwitch.js","sources":["../../../../src/components/QueryEditor/EditorSwitch.tsx"],"sourcesContent":["import React, { type ComponentProps } from 'react';\nimport { css } from '@emotion/css';\nimport { Switch } from '@grafana/ui';\n\n// Wrapper component around <Switch /> that properly aligns it in <EditorField />\nexport const EditorSwitch = (props: ComponentProps<typeof Switch>) => {\n const styles = getStyles();\n\n return (\n <div className={styles.switch}>\n <Switch {...props} />\n </div>\n );\n};\n\nconst getStyles = () => {\n return {\n switch: css({\n display: 'flex',\n alignItems: 'center',\n minHeight: 30,\n }),\n };\n};\n"],"names":["getStyles"],"mappings":";;;;AAKO,MAAM,YAAA,GAAe,CAAC,KAAA,KAAyC;AACpE,EAAA,MAAM,SAASA,WAAA,EAAU;AAEzB,EAAA,uBACE,KAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAW,MAAA,CAAO,0BACrB,KAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAQ,GAAG,KAAA,EAAO,CACrB,CAAA;AAEJ;AAEA,MAAMA,cAAY,MAAM;AACtB,EAAA,OAAO;AAAA,IACL,QAAQ,GAAA,CAAI;AAAA,MACV,OAAA,EAAS,MAAA;AAAA,MACT,UAAA,EAAY,QAAA;AAAA,MACZ,SAAA,EAAW;AAAA,KACZ;AAAA,GACH;AACF,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlexItem.js","sources":["../../../../src/components/QueryEditor/FlexItem.tsx"],"sourcesContent":["import React from 'react';\ninterface FlexItemProps {\n grow?: number;\n shrink?: number;\n}\n\nexport const FlexItem = ({ grow, shrink }: FlexItemProps) => {\n return <div style={{ display: 'block', flexGrow: grow, flexShrink: shrink }} />;\n};\n"],"names":[],"mappings":";;AAMO,MAAM,
|
|
1
|
+
{"version":3,"file":"FlexItem.js","sources":["../../../../src/components/QueryEditor/FlexItem.tsx"],"sourcesContent":["import React from 'react';\ninterface FlexItemProps {\n grow?: number;\n shrink?: number;\n}\n\nexport const FlexItem = ({ grow, shrink }: FlexItemProps) => {\n return <div style={{ display: 'block', flexGrow: grow, flexShrink: shrink }} />;\n};\n"],"names":[],"mappings":";;AAMO,MAAM,QAAA,GAAW,CAAC,EAAE,IAAA,EAAM,QAAO,KAAqB;AAC3D,EAAA,uBAAO,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,SAAS,QAAA,EAAU,IAAA,EAAM,UAAA,EAAY,MAAA,EAAO,EAAG,CAAA;AAC/E;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InlineSelect.js","sources":["../../../../src/components/QueryEditor/InlineSelect.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { css, cx } from '@emotion/css';\nimport { type GroupBase } from 'react-select';\n\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport {\n Select,\n type SelectCommonProps,\n type SelectContainerProps,\n SelectContainer as BaseSelectContainer,\n useStyles2,\n} from '@grafana/ui';\n\ninterface InlineSelectProps<T> extends SelectCommonProps<T> {\n label?: string;\n}\n\nexport function InlineSelect<T>({ label: labelProp, ...props }: InlineSelectProps<T>) {\n const [id] = useState(() => Math.random().toString(16).slice(2));\n const styles = useStyles2(getSelectStyles);\n const components = {\n SelectContainer,\n ValueContainer,\n SingleValue: ValueContainer,\n };\n\n return (\n <div className={styles.root}>\n {labelProp && (\n <label className={styles.label} htmlFor={id}>\n {labelProp}\n {':'} \n </label>\n )}\n <Select openMenuOnFocus inputId={id} {...props} components={components} />\n </div>\n );\n}\n\nconst SelectContainer = <Option, isMulti extends boolean, Group extends GroupBase<Option>>(\n props: SelectContainerProps<Option, isMulti, Group>\n) => {\n const { children } = props;\n\n const styles = useStyles2(getSelectStyles);\n\n return (\n <BaseSelectContainer {...props} className={cx(props.className, styles.container)}>\n {children}\n </BaseSelectContainer>\n );\n};\n\nconst ValueContainer = <Option, isMulti extends boolean, Group extends GroupBase<Option>>(\n props: SelectContainerProps<Option, isMulti, Group>\n) => {\n const { className, children } = props;\n const styles = useStyles2(getSelectStyles);\n\n return <div className={cx(className, styles.valueContainer)}>{children}</div>;\n};\n\nconst getSelectStyles = (theme: GrafanaTheme2) => ({\n root: css({\n display: 'flex',\n fontSize: 12,\n alignItems: 'center',\n }),\n\n label: css({\n color: theme.colors.text.secondary,\n whiteSpace: 'nowrap',\n }),\n\n container: css({\n background: 'none',\n borderColor: 'transparent',\n }),\n\n valueContainer: css({\n display: 'flex',\n alignItems: 'center',\n flex: 'initial',\n color: theme.colors.text.secondary,\n fontSize: 12,\n }),\n});\n"],"names":["BaseSelectContainer"],"mappings":";;;;;AAiBO,SAAS,aAAgB,EAAE,KAAA,EAAO,
|
|
1
|
+
{"version":3,"file":"InlineSelect.js","sources":["../../../../src/components/QueryEditor/InlineSelect.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { css, cx } from '@emotion/css';\nimport { type GroupBase } from 'react-select';\n\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport {\n Select,\n type SelectCommonProps,\n type SelectContainerProps,\n SelectContainer as BaseSelectContainer,\n useStyles2,\n} from '@grafana/ui';\n\ninterface InlineSelectProps<T> extends SelectCommonProps<T> {\n label?: string;\n}\n\nexport function InlineSelect<T>({ label: labelProp, ...props }: InlineSelectProps<T>) {\n const [id] = useState(() => Math.random().toString(16).slice(2));\n const styles = useStyles2(getSelectStyles);\n const components = {\n SelectContainer,\n ValueContainer,\n SingleValue: ValueContainer,\n };\n\n return (\n <div className={styles.root}>\n {labelProp && (\n <label className={styles.label} htmlFor={id}>\n {labelProp}\n {':'} \n </label>\n )}\n <Select openMenuOnFocus inputId={id} {...props} components={components} />\n </div>\n );\n}\n\nconst SelectContainer = <Option, isMulti extends boolean, Group extends GroupBase<Option>>(\n props: SelectContainerProps<Option, isMulti, Group>\n) => {\n const { children } = props;\n\n const styles = useStyles2(getSelectStyles);\n\n return (\n <BaseSelectContainer {...props} className={cx(props.className, styles.container)}>\n {children}\n </BaseSelectContainer>\n );\n};\n\nconst ValueContainer = <Option, isMulti extends boolean, Group extends GroupBase<Option>>(\n props: SelectContainerProps<Option, isMulti, Group>\n) => {\n const { className, children } = props;\n const styles = useStyles2(getSelectStyles);\n\n return <div className={cx(className, styles.valueContainer)}>{children}</div>;\n};\n\nconst getSelectStyles = (theme: GrafanaTheme2) => ({\n root: css({\n display: 'flex',\n fontSize: 12,\n alignItems: 'center',\n }),\n\n label: css({\n color: theme.colors.text.secondary,\n whiteSpace: 'nowrap',\n }),\n\n container: css({\n background: 'none',\n borderColor: 'transparent',\n }),\n\n valueContainer: css({\n display: 'flex',\n alignItems: 'center',\n flex: 'initial',\n color: theme.colors.text.secondary,\n fontSize: 12,\n }),\n});\n"],"names":["BaseSelectContainer"],"mappings":";;;;;AAiBO,SAAS,aAAgB,EAAE,KAAA,EAAO,SAAA,EAAW,GAAG,OAAM,EAAyB;AACpF,EAAA,MAAM,CAAC,EAAE,CAAA,GAAI,QAAA,CAAS,MAAM,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA;AAC/D,EAAA,MAAM,MAAA,GAAS,WAAW,eAAe,CAAA;AACzC,EAAA,MAAM,UAAA,GAAa;AAAA,IACjB,eAAA;AAAA,IACA,cAAA;AAAA,IACA,WAAA,EAAa;AAAA,GACf;AAEA,EAAA,uBACE,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,IAAA,EAAA,EACpB,SAAA,oBACC,KAAA,CAAA,aAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAW,MAAA,CAAO,KAAA,EAAO,OAAA,EAAS,EAAA,EAAA,EACtC,WACA,GAAA,EAAI,MACP,CAAA,kBAEF,KAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAO,eAAA,EAAe,IAAA,EAAC,OAAA,EAAS,EAAA,EAAK,GAAG,KAAA,EAAO,UAAA,EAAwB,CAC1E,CAAA;AAEJ;AAEA,MAAM,eAAA,GAAkB,CACtB,KAAA,KACG;AACH,EAAA,MAAM,EAAE,UAAS,GAAI,KAAA;AAErB,EAAA,MAAM,MAAA,GAAS,WAAW,eAAe,CAAA;AAEzC,EAAA,uBACE,KAAA,CAAA,aAAA,CAACA,iBAAA,EAAA,EAAqB,GAAG,KAAA,EAAO,SAAA,EAAW,EAAA,CAAG,KAAA,CAAM,SAAA,EAAW,MAAA,CAAO,SAAS,CAAA,EAAA,EAC5E,QACH,CAAA;AAEJ,CAAA;AAEA,MAAM,cAAA,GAAiB,CACrB,KAAA,KACG;AACH,EAAA,MAAM,EAAE,SAAA,EAAW,QAAA,EAAS,GAAI,KAAA;AAChC,EAAA,MAAM,MAAA,GAAS,WAAW,eAAe,CAAA;AAEzC,EAAA,uBAAO,KAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAW,EAAA,CAAG,WAAW,MAAA,CAAO,cAAc,KAAI,QAAS,CAAA;AACzE,CAAA;AAEA,MAAM,eAAA,GAAkB,CAAC,KAAA,MAA0B;AAAA,EACjD,MAAM,GAAA,CAAI;AAAA,IACR,OAAA,EAAS,MAAA;AAAA,IACT,QAAA,EAAU,EAAA;AAAA,IACV,UAAA,EAAY;AAAA,GACb,CAAA;AAAA,EAED,OAAO,GAAA,CAAI;AAAA,IACT,KAAA,EAAO,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,SAAA;AAAA,IACzB,UAAA,EAAY;AAAA,GACb,CAAA;AAAA,EAED,WAAW,GAAA,CAAI;AAAA,IACb,UAAA,EAAY,MAAA;AAAA,IACZ,WAAA,EAAa;AAAA,GACd,CAAA;AAAA,EAED,gBAAgB,GAAA,CAAI;AAAA,IAClB,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,SAAA;AAAA,IACzB,QAAA,EAAU;AAAA,GACX;AACH,CAAA,CAAA;;;;"}
|