{"version":3,"file":"VizLegend.cjs","sources":["../../../../src/components/VizLegend/VizLegend.tsx"],"sourcesContent":["import { useCallback } from 'react';\nimport * as React from 'react';\n\nimport { DataHoverClearEvent, DataHoverEvent } from '@grafana/data';\nimport { LegendDisplayMode } from '@grafana/schema';\n\nimport { SeriesVisibilityChangeMode, usePanelContext } from '../PanelChrome';\n\nimport { VizLegendList } from './VizLegendList';\nimport { VizLegendTable } from './VizLegendTable';\nimport { LegendProps, SeriesVisibilityChangeBehavior, VizLegendItem } from './types';\nimport { mapMouseEventToMode } from './utils';\n\n/**\n * @public\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/plugins-vizlegend--docs\n */\nexport function VizLegend<T>({\n  items,\n  thresholdItems,\n  mappingItems,\n  displayMode,\n  sortBy: sortKey,\n  seriesVisibilityChangeBehavior = SeriesVisibilityChangeBehavior.Isolate,\n  sortDesc,\n  onLabelClick,\n  onToggleSort,\n  placement,\n  className,\n  itemRenderer,\n  readonly,\n  isSortable,\n}: LegendProps<T>) {\n  const { eventBus, onToggleSeriesVisibility, onToggleLegendSort } = usePanelContext();\n\n  const onMouseOver = useCallback(\n    (\n      item: VizLegendItem,\n      event: React.MouseEvent<HTMLButtonElement, MouseEvent> | React.FocusEvent<HTMLButtonElement>\n    ) => {\n      eventBus?.publish({\n        type: DataHoverEvent.type,\n        payload: {\n          raw: event,\n          x: 0,\n          y: 0,\n          dataId: item.label,\n        },\n      });\n    },\n    [eventBus]\n  );\n\n  const onMouseOut = useCallback(\n    (\n      item: VizLegendItem,\n      event: React.MouseEvent<HTMLButtonElement, MouseEvent> | React.FocusEvent<HTMLButtonElement>\n    ) => {\n      eventBus?.publish({\n        type: DataHoverClearEvent.type,\n        payload: {\n          raw: event,\n          x: 0,\n          y: 0,\n          dataId: item.label,\n        },\n      });\n    },\n    [eventBus]\n  );\n\n  const onLegendLabelClick = useCallback(\n    (item: VizLegendItem, event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n      if (onLabelClick) {\n        onLabelClick(item, event);\n      }\n      if (onToggleSeriesVisibility) {\n        onToggleSeriesVisibility(\n          item.fieldName ?? item.label,\n          seriesVisibilityChangeBehavior === SeriesVisibilityChangeBehavior.Hide\n            ? SeriesVisibilityChangeMode.AppendToSelection\n            : mapMouseEventToMode(event)\n        );\n      }\n    },\n    [onToggleSeriesVisibility, onLabelClick, seriesVisibilityChangeBehavior]\n  );\n\n  const makeVizLegendList = useCallback(\n    (items: VizLegendItem[]) => {\n      return (\n        <VizLegendList<T>\n          className={className}\n          placement={placement}\n          onLabelMouseOver={onMouseOver}\n          onLabelMouseOut={onMouseOut}\n          onLabelClick={onLegendLabelClick}\n          itemRenderer={itemRenderer}\n          readonly={readonly}\n          items={items}\n        />\n      );\n    },\n    [className, placement, onMouseOver, onMouseOut, onLegendLabelClick, itemRenderer, readonly]\n  );\n\n  switch (displayMode) {\n    case LegendDisplayMode.Table:\n      return (\n        <VizLegendTable<T>\n          className={className}\n          items={items}\n          placement={placement}\n          sortBy={sortKey}\n          sortDesc={sortDesc}\n          onLabelClick={onLegendLabelClick}\n          onToggleSort={onToggleSort || onToggleLegendSort}\n          onLabelMouseOver={onMouseOver}\n          onLabelMouseOut={onMouseOut}\n          itemRenderer={itemRenderer}\n          readonly={readonly}\n          isSortable={isSortable}\n        />\n      );\n    case LegendDisplayMode.List:\n      const isThresholdsEnabled = thresholdItems && thresholdItems.length > 1;\n      const isValueMappingEnabled = mappingItems && mappingItems.length > 0;\n      return (\n        <>\n          {/* render items when single series and there is no thresholds and no value mappings\n           * render items when multi series and there is no thresholds\n           */}\n          {!isThresholdsEnabled && (!isValueMappingEnabled || items.length > 1) && makeVizLegendList(items)}\n          {/* render threshold colors if From thresholds scheme selected */}\n          {isThresholdsEnabled && makeVizLegendList(thresholdItems)}\n          {/* render value mapping colors */}\n          {isValueMappingEnabled && makeVizLegendList(mappingItems)}\n        </>\n      );\n    default:\n      return null;\n  }\n}\n\nVizLegend.displayName = 'VizLegend';\n"],"names":["SeriesVisibilityChangeBehavior","usePanelContext","useCallback","DataHoverEvent","DataHoverClearEvent","SeriesVisibilityChangeMode","mapMouseEventToMode","items","jsx","VizLegendList","LegendDisplayMode","VizLegendTable","jsxs","Fragment"],"mappings":"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"}