text: import param
  
  from ...selection import ColorListSelectionDisplay
  from .element import ElementPlot
  
  
  class TablePlot(ElementPlot):
  
      height = param.Number(default=400)
  
      width = param.Number(default=400)
  
      style_opts = ['visible', 'line', 'fill', 'align', 'font', 'cell_height']
  
      _style_key = 'cells'
  
      selection_display = ColorListSelectionDisplay(color_prop='fill', backend='plotly')
  
      @classmethod
      def trace_kwargs(cls, is_geo=False, **kwargs):
          return {'type': 'table'}
  
      def get_data(self, element, ranges, style, **kwargs):
          header = dict(values=[d.pprint_label for d in element.dimensions()])
          cells = dict(values=[[d.pprint_value(v) for v in element.dimension_values(d)]
                                for d in element.dimensions()])
          return [{'header': header, 'cells': cells}]
  
      def graph_options(self, element, ranges, style, **kwargs):
          opts = super().graph_options(element, ranges, style, **kwargs)
  
          # Transpose fill_color array so values apply by rows not column
          if 'fill' in opts.get('cells', {}):
              opts['cells']['fill_color'] = [opts['cells'].pop('fill')]
  
          if 'line' in opts.get('cells', {}):
              opts['cells']['line_color'] = [opts['cells']['line']]
  
          return opts
  
      def init_layout(self, key, element, ranges, **kwargs):
          return dict(width=self.width, height=self.height,
                      title=self._format_title(key, separator=' '),
                      plot_bgcolor=self.bgcolor)
  