def METHOD_NAME(text_input: PasswordInput) -> tuple[ModifyDoc, Plot]:
    plot = Plot(height=400, width=400, x_range=Range1d(0, 1), y_range=Range1d(0, 1), min_border=0)
    def modify_doc(doc):
        source = ColumnDataSource(dict(x=[1, 2], y=[1, 1], val=["a", "b"]))
        plot.add_glyph(source, Circle(x='x', y='y', size=20))
        plot.tags.append(CustomJS(name="custom-action", args=dict(s=source), code=RECORD("data", "s.data")))
        def cb(attr, old, new):
            source.data['val'] = [old, new]
        text_input.on_change('value', cb)
        doc.add_root(column(text_input, plot))
    return modify_doc, plot