code: def component_callbacks(self, app):
      @app.callback(
          Output("shap-summary-index-" + self.name, "value"),
          [Input("shap-summary-graph-" + self.name, "clickData")],
      )
      def display_scatter_click_data(clickdata):
          if (
              clickdata is not None
              and clickdata["points"][0] is not None
          ):
              if isinstance(
                  clickdata["points"][0]["y"], float
              ):  # detailed
                  index = (
                      clickdata["points"][0]["text"]
                      .split("=")[1]
                      .split("<br>")[0]
                  )
                  return index
          raise PreventUpdate
  
      @app.callback(
          [
              Output("shap-summary-graph-" + self.name, "figure"),
              Output("shap-summary-index-col-" + self.name, "style"),
          ],
          [
              Input("shap-summary-type-" + self.name, "value"),
              Input("shap-summary-depth-" + self.name, "value"),
              Input("shap-summary-index-" + self.name, "value"),
              Input("pos-label-" + self.name, "value"),
          ],
      )
      def update_shap_summary_graph(
          summary_type, depth, index, pos_label
      ):
          depth = None if depth is None else int(depth)
          if summary_type == "aggregate":
              plot = self.explainer.plot_importances(
                  kind="shap", topx=depth, pos_label=pos_label
              )
          elif summary_type == "detailed":
              plot = self.explainer.plot_importances_detailed(
                  topx=depth,
                  pos_label=pos_label,
                  highlight_index=index,
                  max_cat_colors=self.max_cat_colors,
                  plot_sample=self.plot_sample,
              )
          else:
              raise PreventUpdate
  
          ctx = dash.callback_context
          trigger = ctx.triggered[0]["prop_id"].split(".")[0]
          if trigger == "shap-summary-type-" + self.name:
              if summary_type == "aggregate":
                  return (plot, dict(display="none"))
              elif summary_type == "detailed":
                  return (plot, {})
          else:
              return (plot, dash.no_update)
  
imports: import dash
  from dash import html, dcc, Input, Output, State
  from dash.exceptions import PreventUpdate
  import dash_bootstrap_components
  from ..dashboard_methods import *
  from ..None import to_html
label_desc: Use image node_id 4 for calling the ShapSummaryComponent obj's underlying member method code with example usage: obj.component_callbacks(app) and returns: plot,  dash, index, plot,  dict, plot,  dict