PATCH FOR samples_tab.py

Changes needed:
1. In show_add_tool_dialog() - add type selector and rename type → parser
2. In import_identification_files() - use tool.parser instead of tool.type  
3. In refresh_tools() - display tool.type in subtitle

=============== UPDATED show_add_tool_dialog METHOD ===============

async def show_add_tool_dialog(self, e):
    """Show dialog for adding new tool."""
    # Get available identification parsers
    parsers = registry.get_identification_parsers()
    parser_options = [
        ft.dropdown.Option(key=name, text=name)
        for name in parsers.keys()
    ]
    
    if not parser_options:
        self.page.snack_bar = ft.SnackBar(
            content=ft.Text("No identification parsers available"),
            bgcolor=ft.Colors.RED_400
        )
        self.page.snack_bar.open = True
        self.page.update()
        return
    
    name_field = ft.TextField(
        label="Tool Name",
        hint_text="e.g., PowerNovo2, MaxQuant",
        autofocus=True
    )
    
    # NEW: Tool type selector
    tool_type_group = ft.RadioGroup(
        content=ft.Column([
            ft.Radio(value="Library", label="Library Search"),
            ft.Radio(value="De Novo", label="De Novo Sequencing")
        ]),
        value="Library"
    )
    
    # RENAMED: Parser dropdown (was "Type")
    parser_dropdown = ft.Dropdown(
        label="Parser / Format",
        options=parser_options,
        value=parser_options[0].key,
        width=300
    )
    
    color_field = ft.TextField(
        label="Color (hex)",
        value="9333EA",
    )
    
    async def save_tool(e):
        if not name_field.value:
            name_field.error_text = "Name is required"
            name_field.update()
            return
        
        try:
            color = color_field.value
            if not color.startswith('#'):
                color = '#' + color
            
            # NEW: Pass both type and parser
            await self.project.add_tool(
                name=name_field.value,
                type=tool_type_group.value,  # "Library" or "De Novo"
                parser=parser_dropdown.value,  # Parser name
                display_color=color
            )
            
            # Close dialog
            dialog.open = False
            self.page.update()
            
            # Refresh tools list
            await self.refresh_tools()
            
            # Show success
            self.page.snack_bar = ft.SnackBar(
                content=ft.Text(f"Added tool: {name_field.value}"),
                bgcolor=ft.Colors.GREEN_400
            )
            self.page.snack_bar.open = True
            self.page.update()
            
        except Exception as ex:
            self.page.snack_bar = ft.SnackBar(
                content=ft.Text(f"Error: {ex}"),
                bgcolor=ft.Colors.RED_400
            )
            self.page.snack_bar.open = True
            self.page.update()
    
    dialog = ft.AlertDialog(
        title=ft.Text("Add Identification Tool"),
        content=ft.Column([
            name_field,
            ft.Text("Tool Type:", weight=ft.FontWeight.W_500),
            tool_type_group,
            parser_dropdown,
            color_field,
            ft.Container(height=5),
            ft.Text(
                "Tool represents an identification method (e.g., de novo, database search)",
                size=11,
                italic=True,
                color=ft.Colors.GREY_600
            )
        ], tight=True, width=400),
        actions=[
            ft.TextButton(
                content="Cancel", 
                on_click=lambda e: self._close_dialog(dialog)
            ),
            ft.ElevatedButton(
                content=ft.Text("Add"),
                on_click=lambda e: self.page.run_task(save_tool, e)
            )
        ]
    )
    
    self.page.overlay.append(dialog)
    dialog.open = True
    self.page.update()

=============== CHANGE IN import_identification_files ===============

Line ~570:
OLD: parser_class = registry.get_parser(tool.type, "identification")
NEW: parser_class = registry.get_parser(tool.parser, "identification")

=============== CHANGE IN refresh_tools ===============

Line ~130:
OLD: subtitle=ft.Text(f"{len(ident_files)} identification file(s)" + (f" • Type: {tool.type}" if tool.type else "")),
NEW: subtitle=ft.Text(f"{len(ident_files)} identification file(s) • {tool.type} ({tool.parser})"),
