code: def __init__(self, tabname, main_ui_prompt, main_ui_negative_prompt):
      self.tabname = tabname
      self.main_ui_prompt = main_ui_prompt
      self.main_ui_negative_prompt = main_ui_negative_prompt
  
      with gr.Row(elem_id=f"{tabname}_styles_row"):
          self.dropdown = gr.Dropdown(
              label="Styles",
              show_label=False,
              elem_id=f"{tabname}_styles",
              choices=list(shared.prompt_styles.styles),
              value=[],
              multiselect=True,
              tooltip="Styles",
          )
          edit_button = ui_components.ToolButton(
              value=styles_edit_symbol,
              elem_id=f"{tabname}_styles_edit_button",
              tooltip="Edit styles",
          )
  
      with gr.Box(
          elem_id=f"{tabname}_styles_dialog",
          elem_classes="popup-dialog",
      ) as styles_dialog:
          with gr.Row():
              self.selection = gr.Dropdown(
                  label="Styles",
                  elem_id=f"{tabname}_styles_edit_select",
                  choices=list(shared.prompt_styles.styles),
                  value=[],
                  allow_custom_value=True,
                  info="Styles allow you to add custom text to prompt. Use the {prompt} token in style text, and it will be replaced with user's prompt when applying style. Otherwise, style's text will be added to the end of the prompt.",
              )
              ui_common.create_refresh_button(
                  [self.dropdown, self.selection],
                  shared.prompt_styles.reload,
                  lambda: {
                      "choices": list(shared.prompt_styles.styles)
                  },
                  f"refresh_{tabname}_styles",
              )
              self.materialize = ui_components.ToolButton(
                  value=styles_materialize_symbol,
                  elem_id=f"{tabname}_style_apply_dialog",
                  tooltip="Apply all selected styles from the style selction dropdown in main UI to the prompt.",
              )
              self.copy = ui_components.ToolButton(
                  value=styles_copy_symbol,
                  elem_id=f"{tabname}_style_copy",
                  tooltip="Copy main UI prompt to style.",
              )
  
          with gr.Row():
              self.prompt = gr.Textbox(
                  label="Prompt",
                  show_label=True,
                  elem_id=f"{tabname}_edit_style_prompt",
                  lines=3,
                  elem_classes=["prompt"],
              )
  
          with gr.Row():
              self.neg_prompt = gr.Textbox(
                  label="Negative prompt",
                  show_label=True,
                  elem_id=f"{tabname}_edit_style_neg_prompt",
                  lines=3,
                  elem_classes=["prompt"],
              )
  
          with gr.Row():
              self.save = gr.Button(
                  "Save",
                  variant="primary",
                  elem_id=f"{tabname}_edit_style_save",
                  visible=False,
              )
              self.delete = gr.Button(
                  "Delete",
                  variant="primary",
                  elem_id=f"{tabname}_edit_style_delete",
                  visible=False,
              )
              self.close = gr.Button(
                  "Close",
                  variant="secondary",
                  elem_id=f"{tabname}_edit_style_close",
              )
  
      self.selection.change(
          fn=select_style,
          inputs=[self.selection],
          outputs=[
              self.prompt,
              self.neg_prompt,
              self.delete,
              self.save,
          ],
          show_progress=False,
      )
  
      self.save.click(
          fn=save_style,
          inputs=[self.selection, self.prompt, self.neg_prompt],
          outputs=[self.delete],
          show_progress=False,
      ).then(
          refresh_styles,
          outputs=[self.dropdown, self.selection],
          show_progress=False,
      )
  
      self.delete.click(
          fn=delete_style,
          _js='function(name){ if(name == "") return ""; return confirm("Delete style " + name + "?") ? name : ""; }',
          inputs=[self.selection],
          outputs=[self.selection, self.prompt, self.neg_prompt],
          show_progress=False,
      ).then(
          refresh_styles,
          outputs=[self.dropdown, self.selection],
          show_progress=False,
      )
  
      self.setup_apply_button(self.materialize)
  
      self.copy.click(
          fn=lambda p, n: (p, n),
          inputs=[main_ui_prompt, main_ui_negative_prompt],
          outputs=[self.prompt, self.neg_prompt],
          show_progress=False,
      )
  
      ui_common.setup_dialog(
          button_show=edit_button,
          dialog=styles_dialog,
          button_close=self.close,
      )
  
file_path: stable-diffusion-webui/modules/ui_prompt_styles.py
imports: import gradio
  from modules import shared, ui_common, ui_components, styles
label_desc: Use image node_id 1 to create a new UiPromptStyles object  with example: obj = UiPromptStyles(tabname, main_ui_prompt, main_ui_negative_prompt)