{"version":3,"file":"TableCellInspector.cjs","sources":["../../../../src/components/Table/TableCellInspector.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { useState } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t, Trans } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { ClipboardButton } from '../ClipboardButton/ClipboardButton';\nimport { Drawer } from '../Drawer/Drawer';\nimport { Stack } from '../Layout/Stack/Stack';\nimport { CodeEditor } from '../Monaco/CodeEditor';\nimport { Tab } from '../Tabs/Tab';\nimport { TabsBar } from '../Tabs/TabsBar';\n\nexport enum TableCellInspectorMode {\n  code = 'code',\n  text = 'text',\n}\n\ninterface TableCellInspectorProps {\n  value: unknown;\n  onDismiss: () => void;\n  mode: TableCellInspectorMode;\n}\n\nconst toString = (value: unknown): string => {\n  if (typeof value === 'string') {\n    return value;\n  }\n  return value?.toString?.() ?? '';\n};\n\nexport function TableCellInspector({ value, onDismiss, mode }: TableCellInspectorProps) {\n  const [currentMode, setMode] = useState(mode);\n  const text = toString(value).trim();\n  const styles = useStyles2(getStyles);\n\n  const tabs = [\n    {\n      label: 'Plain text',\n      value: 'text',\n    },\n    {\n      label: 'Code editor',\n      value: 'code',\n    },\n  ];\n\n  const changeTabs = () => {\n    setMode(currentMode === TableCellInspectorMode.text ? TableCellInspectorMode.code : TableCellInspectorMode.text);\n  };\n\n  const tabBar = (\n    <TabsBar>\n      {tabs.map((t, index) => (\n        <Tab key={`${t.value}-${index}`} label={t.label} active={t.value === currentMode} onChangeTab={changeTabs} />\n      ))}\n    </TabsBar>\n  );\n\n  return (\n    <Drawer onClose={onDismiss} title={t('grafana-ui.table.inspect-drawer-title', 'Inspect value')} tabs={tabBar}>\n      <Stack direction=\"column\" gap={2}>\n        <ClipboardButton icon=\"copy\" getText={() => text} style={{ marginLeft: 'auto', width: '200px' }}>\n          <Trans i18nKey=\"grafana-ui.table.copy\">Copy to Clipboard</Trans>\n        </ClipboardButton>\n        {currentMode === 'code' ? (\n          <CodeEditor\n            width=\"100%\"\n            height={500}\n            language=\"json\"\n            showLineNumbers={true}\n            showMiniMap={(text ? text.length : 0) > 100}\n            value={text}\n            readOnly={true}\n            wordWrap={true}\n          />\n        ) : (\n          <pre className={styles.textContainer}>{text}</pre>\n        )}\n      </Stack>\n    </Drawer>\n  );\n}\n\n// TODO: should we have different empty styles?\nconst getStyles = (theme: GrafanaTheme2) => ({\n  textContainer: css({\n    color: theme.colors.text.secondary,\n    minHeight: 42,\n  }),\n});\n"],"names":["TableCellInspectorMode","useState","useStyles2","jsx","TabsBar","t","Tab","Drawer","jsxs","Stack","ClipboardButton","Trans","CodeEditor","css"],"mappings":"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"}