code: def get_event_data_from_property_update(
      cls, property, selected_data, fig_dict
  ):
      traces = fig_dict.get("data", [])
  
      # Initialize event data by clearing box selection on everything
      event_data = {}
      for trace in traces:
          trace_uid = trace.get("uid", None)
          if cls.boundsx and cls.boundsy:
              stream_data = dict(bounds=None)
          elif cls.boundsx:
              stream_data = dict(boundsx=None)
          elif cls.boundsy:
              stream_data = dict(boundsy=None)
          else:
              stream_data = {}
  
          event_data[trace_uid] = stream_data
  
      range_data = (selected_data or {}).get("range", {})
      cls.update_event_data_xyaxis(range_data, traces, event_data)
      cls.update_event_data_mapbox(range_data, traces, event_data)
  
      return event_data
  
imports: from weakref import WeakValueDictionary
  from ...element import Tiles
  from ...streams import BoundsX, BoundsXY, BoundsY, RangeX, RangeXY, RangeY, Selection1D, SelectionXY, Stream
  from .util import _trace_to_subplot
label_desc: Use image node_id 1 for calling the BoundsCallback obj's underlying member method code with example usage: obj.get_event_data_from_property_update(cls, property, selected_data, fig_dict) and returns: event_data