{"version":3,"file":"OperationInfoButton.cjs","sources":["../../../../src/querybuilder/shared/OperationInfoButton.tsx"],"sourcesContent":["// Core Grafana history https://github.com/grafana/grafana/blob/v11.0.0-preview/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationInfoButton.tsx\nimport { css } from '@emotion/css';\nimport { autoUpdate, offset, useClick, useDismiss, useFloating, useInteractions } from '@floating-ui/react';\nimport { memo, useState } from 'react';\n\nimport { type GrafanaTheme2, renderMarkdown } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { FlexItem } from '@grafana/plugin-ui';\nimport { Button, floatingUtils, Portal, useStyles2 } from '@grafana/ui';\n\nimport { type QueryBuilderOperation, type QueryBuilderOperationDef } from './types';\n\ninterface Props {\n  operation: QueryBuilderOperation;\n  def: QueryBuilderOperationDef;\n}\n\nexport const OperationInfoButton = memo<Props>(({ def, operation }) => {\n  const styles = useStyles2(getStyles);\n  const [show, setShow] = useState(false);\n\n  // the order of middleware is important!\n  const middleware = [offset(16), ...floatingUtils.getPositioningMiddleware()];\n\n  const { context, refs, floatingStyles } = useFloating({\n    open: show,\n    placement: 'top',\n    onOpenChange: setShow,\n    middleware,\n    whileElementsMounted: autoUpdate,\n  });\n\n  const click = useClick(context);\n  const dismiss = useDismiss(context);\n\n  const { getReferenceProps, getFloatingProps } = useInteractions([dismiss, click]);\n\n  return (\n    <>\n      <Button\n        tooltip={t(\n          'grafana-prometheus.querybuilder.operation-info-button.title-click-to-show-description',\n          'Click to show description'\n        )}\n        ref={refs.setReference}\n        icon=\"info-circle\"\n        size=\"sm\"\n        variant=\"secondary\"\n        fill=\"text\"\n        {...getReferenceProps()}\n      />\n      {show && (\n        <Portal>\n          <div ref={refs.setFloating} style={floatingStyles} {...getFloatingProps()} className={styles.docBox}>\n            <div className={styles.docBoxHeader}>\n              <span>{def.renderer(operation, def, '<expr>')}</span>\n              <FlexItem grow={1} />\n              <Button\n                icon=\"times\"\n                onClick={() => setShow(false)}\n                fill=\"text\"\n                variant=\"secondary\"\n                aria-label={t(\n                  'grafana-prometheus.querybuilder.operation-info-button.title-remove-operation',\n                  'Remove operation'\n                )}\n              />\n            </div>\n            <div\n              className={styles.docBoxBody}\n              dangerouslySetInnerHTML={{ __html: getOperationDocs(def, operation) }}\n            ></div>\n          </div>\n        </Portal>\n      )}\n    </>\n  );\n});\n\nOperationInfoButton.displayName = 'OperationDocs';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n  return {\n    docBox: css({\n      overflow: 'hidden',\n      background: theme.colors.background.elevated,\n      border: `1px solid ${theme.colors.border.weak}`,\n      boxShadow: theme.shadows.z3,\n      maxWidth: '600px',\n      padding: theme.spacing(1),\n      borderRadius: theme.shape.radius.default,\n      zIndex: theme.zIndex.tooltip,\n    }),\n    docBoxHeader: css({\n      fontSize: theme.typography.h5.fontSize,\n      fontFamily: theme.typography.fontFamilyMonospace,\n      paddingBottom: theme.spacing(1),\n      display: 'flex',\n      alignItems: 'center',\n    }),\n    docBoxBody: css({\n      // The markdown paragraph has a marginBottom this removes it\n      marginBottom: theme.spacing(-1),\n      color: theme.colors.text.secondary,\n    }),\n  };\n};\n\nfunction getOperationDocs(def: QueryBuilderOperationDef, op: QueryBuilderOperation): string {\n  return renderMarkdown(def.explainHandler ? def.explainHandler(op, def) : (def.documentation ?? 'no docs'));\n}\n"],"names":["memo","useStyles2","useState","offset","floatingUtils","useFloating","autoUpdate","useClick","useDismiss","useInteractions","jsxs","Fragment","jsx","Button","t","Portal","FlexItem","css","renderMarkdown"],"mappings":"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"}