```
    def show_match_dialog(self, input_path, matches):
        """
        Opens a dialog displaying duplicate matches in a table format.
        Shows basename, parent directory, and a 'Browse' button.
        """
        dialog = tk.Toplevel(self)
        dialog.title("Duplicate Matches")
        dialog.geometry("800x400")
        dialog.resizable(True, True)  # Made window resizable

        # Center the dialog relative to the main window
        self.center_window(dialog, 800, 600)

        # Frame for content
        content_frame = ttk.Frame(dialog, padding=10)
        content_frame.pack(fill=tk.BOTH, expand=True)

        # Labels for original file
        input_label = ttk.Label(content_frame, text=f"Input file: {os.path.basename(input_path)}")
        input_label.pack(anchor=tk.W, pady=(0, 5))

        # Parent folder info
        parent_frame = ttk.Frame(content_frame)
        parent_frame.pack(fill=tk.X, pady=(0, 10))

        parent_label = ttk.Label(parent_frame, text="Parent folder:")
        parent_label.pack(side=tk.LEFT)

        parent_path = os.path.dirname(input_path)
        parent_path_label = ttk.Label(parent_frame, text=parent_path)
        parent_path_label.pack(side=tk.LEFT, padx=5)

        parent_browse = ttk.Button(parent_frame, text="Browse", command=lambda *_: open_folder(parent_path))
        parent_browse.pack(side=tk.LEFT)

        # Frame for treeview and scrollbars
        tree_frame = ttk.Frame(content_frame)
        tree_frame.pack(fill=tk.BOTH, expand=True)

        # Treeview to display matches
        columns = ("basename", "browse")
        tree = ttk.Treeview(tree_frame, columns=columns, show='headings')

        tree.heading("basename", text="Basename")
        tree.heading("browse", text="Browse")

        tree.column("basename", width=600, anchor=tk.W)
        tree.column("browse", width=60, minwidth=60, stretch=False, anchor=tk.CENTER)

        # Scrollbars
        y_scrollbar = ttk.Scrollbar(tree_frame, orient=tk.VERTICAL, command=tree.yview)
        x_scrollbar = ttk.Scrollbar(tree_frame, orient=tk.HORIZONTAL, command=tree.xview)

        # Configure the treeview
        tree.configure(yscroll=y_scrollbar.set, xscroll=x_scrollbar.set)

        # Grid layout for treeview and scrollbars
        tree.grid(row=0, column=0, sticky='nsew')
        y_scrollbar.grid(row=0, column=1, sticky='ns')
        x_scrollbar.grid(row=1, column=0, sticky='ew')

        # Configure grid weights
        tree_frame.grid_rowconfigure(0, weight=1)
        tree_frame.grid_columnconfigure(0, weight=1)

        # Insert match data
        for dup_basename, is_exact, dup_full_path in matches:
            tree.insert("", tk.END, values=(dup_basename, "Browse"))

        def on_click_tree(event):
            region = tree.identify("region", event.x, event.y)
            if region != "cell":
                return  # Only act on cell clicks
            row_id = tree.identify_row(event.y)
            column = tree.identify_column(event.x)

            if not row_id:
                return  # Click was outside any row

            column_number = int(column.replace("#", ""))
            column_name = tree.heading(column)["text"]

            if column_name == "Browse":
                basename = tree.set(row_id, "basename")
                file_path = os.path.join(parent_path, basename)
                if os.path.exists(file_path):
                    highlight_files(file_path)
                else:
                    messagebox.showerror("File Not Found", f"The file '{file_path}' does not exist.")

        # Bind single-click event for 'Browse' button
        tree.bind("<Button-1>", on_click_tree)

        # OK button to close the dialog
        button_frame = ttk.Frame(dialog, padding=10)
        button_frame.pack(fill=tk.X, pady=5)

        ok_button = ttk.Button(button_frame, text="OK", command=dialog.destroy)
        ok_button.pack()
```

wrap the popup window functionality into a separate class.
also add a 2nd column (total 3 columns) `File size`, which checks the file size of the file path and is in human readable form (e.g. 9B, 12KB, 23MB, 1GB)