Ariver
2026-05-11 c8a1b811bffd13dc6dfa39a7c5c0d4ee76cd11e5
Apptag/DataLayer.swift
@@ -283,6 +283,20 @@
        TagDatabase.save(store)
    }
    /// Replace the full editable tag set for multiple apps.
    static func setTags(_ tags: [String], to paths: [String]) {
        var store = TagDatabase.load()
        let validTags = tags.filter { store.tags[$0] != nil }
        for path in paths {
            if validTags.isEmpty {
                store.appTags.removeValue(forKey: path)
            } else {
                store.appTags[path] = validTags
            }
        }
        TagDatabase.save(store)
    }
    static func moveApp(path: String, from sourceTag: String, to targetTag: String, color: Int, copy: Bool) {
        var store = TagDatabase.load()
        if store.tags[targetTag] == nil {