         });
     }
 
+    public function get isValid () :Boolean { return valid == CHECK; }
+
     public function updateModified (newModified :Ternary) :void {
         changeField("modified", function (..._) :void {
             if (newModified == Ternary.TRUE) modified = CHECK;

        _win = win;
        _errors = _win.errors;
        _libraries = _win.libraries;
        _libraries.addEventListener(GridSelectionEvent.SELECTION_CHANGE, function (..._) :void {
            log.info("Changed", "selected", _libraries.selectedIndices);
            _win.export.enabled = _libraries.selectedIndices.length > 0;
            _win.preview.enabled = _libraries.selectedIndices.length == 1;
        });
        _win.export.addEventListener(MouseEvent.CLICK, function (..._) :void {
            for each (var status :DocStatus in _libraries.selectedItems) {

        setImport(_importChooser.dir);
        _exportChooser =
            new DirChooser(_settings, "EXPORT_ROOT", _win.exportRoot, _win.browseExport);
        _exportChooser.changed.add(updateExportEnabled);

    }

    protected function setImport (root :File) :void {
