code: def test_clsd003_clientside_exceptions_halt_subsequent_updates(
      dash_duo,
  ):
      app = Dash(__name__, assets_folder="assets")
  
      app.layout = html.Div(
          [
              dcc.Input(id="first", value=1),
              dcc.Input(id="second"),
              dcc.Input(id="third"),
          ]
      )
  
      app.clientside_callback(
          ClientsideFunction("clientside", "add1_break_at_11"),
          Output("second", "value"),
          [Input("first", "value")],
      )
  
      app.clientside_callback(
          ClientsideFunction("clientside", "add1_break_at_11"),
          Output("third", "value"),
          [Input("second", "value")],
      )
  
      dash_duo.start_server(app)
  
      test_cases = [["#first", "1"], ["#second", "2"], ["#third", "3"]]
      for selector, expected in test_cases:
          dash_duo.wait_for_text_to_equal(selector, expected)
  
      first_input = dash_duo.wait_for_element("#first")
      first_input.send_keys("1")
      # clientside code will prevent the update from occurring
      test_cases = [["#first", "11"], ["#second", "2"], ["#third", "3"]]
      for selector, expected in test_cases:
          dash_duo.wait_for_text_to_equal(selector, expected)
  
      first_input.send_keys("1")
  
      # the previous clientside code error should not be fatal:
      # subsequent updates should still be able to occur
      test_cases = [
          ["#first", "111"],
          ["#second", "112"],
          ["#third", "113"],
      ]
      for selector, expected in test_cases:
          dash_duo.wait_for_text_to_equal(selector, expected)
  
imports: from multiprocessing import Value, Lock
  from dash import Dash, Input, Output, State, ClientsideFunction, ALL, html, dcc
  from selenium.webdriver.common.keys import Keys
label_desc: Use image node_id 3 for calling a global function with example usage: test_clsd003_clientside_exceptions_halt_subsequent_updates(dash_duo) without return types