/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
if you want to view the source, please visit the github repository of this plugin
*/

"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
  for (var name in all)
    __defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
  if (from && typeof from === "object" || typeof from === "function") {
    for (let key of __getOwnPropNames(from))
      if (!__hasOwnProp.call(to, key) && key !== except)
        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
  }
  return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);

// src/main.ts
var main_exports = {};
__export(main_exports, {
  ExplorerFocusPlugin: () => ExplorerFocusPlugin,
  default: () => main_default
});
module.exports = __toCommonJS(main_exports);
var import_obsidian5 = require("obsidian");

// src/types.ts
var DEFAULT_SETTINGS = {
  showRightClickMenu: true,
  showFileExplorerIcon: true,
  focusLevel: "parent",
  customFolderPath: "",
  hideAncestorFolders: false,
  autoHidePaths: []
};

// src/ui/settings-tab.ts
var import_obsidian4 = require("obsidian");

// src/utils/file-explorer-patch.ts
var import_obsidian = require("obsidian");

// node_modules/.pnpm/monkey-around@3.0.0/node_modules/monkey-around/dist/index.mjs
function around(obj, factories) {
  const removers = Object.keys(factories).map((key) => around1(obj, key, factories[key]));
  return removers.length === 1 ? removers[0] : function() {
    removers.forEach((r) => r());
  };
}
function around1(obj, method, createWrapper) {
  const inherited = obj[method], hadOwn = obj.hasOwnProperty(method), original = hadOwn ? inherited : function() {
    return Object.getPrototypeOf(obj)[method].apply(this, arguments);
  };
  let current = createWrapper(original);
  if (inherited)
    Object.setPrototypeOf(current, inherited);
  Object.setPrototypeOf(wrapper, current);
  obj[method] = wrapper;
  return remove;
  function wrapper(...args) {
    if (current === original && obj[method] === wrapper)
      remove();
    return current.apply(this, args);
  }
  function remove() {
    if (obj[method] === wrapper) {
      if (hadOwn)
        obj[method] = original;
      else
        delete obj[method];
    }
    if (current === original)
      return;
    current = original;
    Object.setPrototypeOf(wrapper, inherited || Function);
  }
}

// src/utils/file-explorer-patch.ts
var prototypePatched = false;
var patchingFailed = false;
function patchFileExplorer(plugin) {
  if (patchingFailed) {
    return;
  }
  if (import_obsidian.Platform.isMobile) {
    patchingFailed = true;
    return;
  }
  const fileExplorer = getFileExplorer(plugin);
  if (!fileExplorer) {
    return;
  }
  if (!prototypePatched) {
    try {
      const prototype = Object.getPrototypeOf(fileExplorer);
      if (typeof prototype.getSortedFolderItems !== "function") {
        throw new Error("getSortedFolderItems method not found on file explorer prototype");
      }
      plugin.register(
        around(prototype, {
          getSortedFolderItems(old) {
            return function(folder) {
              let sortedChildren = old.call(this, folder);
              if (plugin.isFocus && plugin.focusedPath) {
                const focusedPath = plugin.focusedPath;
                sortedChildren = sortedChildren.filter((vEl) => {
                  const filePath = vEl.file.path;
                  if (filePath === focusedPath) {
                    vEl.info.hidden = false;
                    return true;
                  }
                  if (filePath.startsWith(focusedPath + "/")) {
                    vEl.info.hidden = false;
                    return true;
                  }
                  if (focusedPath.startsWith(filePath + "/")) {
                    vEl.info.hidden = false;
                    return true;
                  }
                  vEl.info.hidden = true;
                  return false;
                });
              } else {
                sortedChildren.forEach((vEl) => {
                  vEl.info.hidden = false;
                });
              }
              return sortedChildren;
            };
          }
        })
      );
      prototypePatched = true;
    } catch (error) {
      patchingFailed = true;
      console.warn(
        "[Explorer Focus] Failed to patch file explorer. The plugin will use CSS-based hiding as a fallback, which may be less precise. This usually happens after an Obsidian update - please check for plugin updates.",
        error
      );
      new import_obsidian.Notice(
        "Explorer Focus: File explorer patching failed. The plugin will still work but may need an update for full functionality.",
        8e3
      );
      return;
    }
  }
  fileExplorer.fileExplorerPlusPatched = true;
}
function getFileExplorer(plugin) {
  var _a;
  const fileExplorerContainer = (_a = plugin.app.workspace.getLeavesOfType("file-explorer")) == null ? void 0 : _a.first();
  return fileExplorerContainer == null ? void 0 : fileExplorerContainer.view;
}
function getAllFileExplorers(plugin) {
  const fileExplorerLeaves = plugin.app.workspace.getLeavesOfType("file-explorer");
  return fileExplorerLeaves.map((leaf) => leaf.view);
}

// src/ui/folder-suggest.ts
var import_obsidian2 = require("obsidian");
var FolderSuggest = class extends import_obsidian2.AbstractInputSuggest {
  constructor(app, inputEl) {
    super(app, inputEl);
    this.inputEl = inputEl;
  }
  getSuggestions(query) {
    const lowerQuery = query.toLowerCase();
    const folders = [];
    this.app.vault.getAllLoadedFiles().forEach((file) => {
      if (file instanceof import_obsidian2.TFolder) {
        if (file.path.toLowerCase().includes(lowerQuery)) {
          folders.push(file);
        }
      }
    });
    folders.sort((a, b) => a.path.localeCompare(b.path));
    return folders.slice(0, 20);
  }
  renderSuggestion(folder, el) {
    el.createEl("div", { text: folder.path || "/" });
  }
  selectSuggestion(folder) {
    this.inputEl.value = folder.path;
    this.inputEl.trigger("input");
    this.close();
  }
};

// src/ui/auto-hide-modal.ts
var import_obsidian3 = require("obsidian");
var AutoHideModal = class extends import_obsidian3.Modal {
  constructor(app, plugin, onSave) {
    var _a;
    super(app);
    this.addInput = null;
    this.plugin = plugin;
    this.paths = [...(_a = plugin.settings.autoHidePaths) != null ? _a : []];
    this.onSave = onSave;
  }
  onOpen() {
    this.setTitle("Auto-hide folders");
    this.renderContent();
  }
  renderContent() {
    var _a;
    const { contentEl } = this;
    contentEl.empty();
    contentEl.createEl("p", {
      text: "The following folders are currently hidden from the file explorer."
    });
    const listWrapper = contentEl.createDiv();
    this.paths.forEach((path, index) => {
      const row = listWrapper.createDiv({ cls: "mobile-option-setting-item" });
      row.createSpan({
        text: path || "(empty)",
        cls: "mobile-option-setting-item-name"
      });
      const removeBtn = row.createDiv({
        cls: "clickable-icon mobile-option-setting-item-option-icon",
        attr: { "aria-label": "Delete" }
      });
      (0, import_obsidian3.setIcon)(removeBtn, "x");
      removeBtn.addEventListener("click", () => {
        this.paths.splice(index, 1);
        this.renderContent();
      });
    });
    new import_obsidian3.Setting(contentEl).setName("Folder").addText((text) => {
      new FolderSuggest(this.app, text.inputEl);
      text.setPlaceholder("Enter folder path");
      this.addInput = text;
    }).addButton((button) => button.setButtonText("Add").onClick(() => {
      var _a2, _b, _c;
      const value = (_b = (_a2 = this.addInput) == null ? void 0 : _a2.getValue()) == null ? void 0 : _b.trim();
      if (value) {
        this.paths.push(value);
        (_c = this.addInput) == null ? void 0 : _c.setValue("");
        this.renderContent();
      }
    }));
    (_a = this.modalEl.querySelector(".modal-button-container")) == null ? void 0 : _a.remove();
    const buttonContainer = this.modalEl.createDiv({ cls: "modal-button-container" });
    const saveBtn = buttonContainer.createEl("button", {
      text: "Save",
      cls: "mod-cta"
    });
    saveBtn.addEventListener("click", () => {
      this.plugin.settings.autoHidePaths = this.paths;
      void this.plugin.saveSettings();
      this.plugin.updateAutoHideStyles();
      this.onSave();
      this.close();
    });
    const cancelBtn = buttonContainer.createEl("button", {
      text: "Cancel",
      cls: "mod-cancel"
    });
    cancelBtn.addEventListener("click", () => {
      this.close();
    });
  }
};

// src/ui/settings-tab.ts
var ExplorerFocusSettingTab = class extends import_obsidian4.PluginSettingTab {
  constructor(app, plugin) {
    super(app, plugin);
    this.icon = "lucide-focus";
    this.plugin = plugin;
  }
  display() {
    const { containerEl } = this;
    containerEl.empty();
    const generalGroup = new import_obsidian4.SettingGroup(containerEl);
    generalGroup.addSetting((setting) => {
      setting.setName("Show right-click menu option").addToggle((toggle) => toggle.setValue(this.plugin.settings.showRightClickMenu).onChange(async (value) => {
        this.plugin.settings.showRightClickMenu = value;
        await this.plugin.saveSettings();
      }));
    });
    generalGroup.addSetting((setting) => {
      setting.setName("Show file explorer icon").addToggle((toggle) => toggle.setValue(this.plugin.settings.showFileExplorerIcon).onChange(async (value) => {
        this.plugin.settings.showFileExplorerIcon = value;
        await this.plugin.saveSettings();
        this.plugin.updateFileExplorerIcon();
      }));
    });
    generalGroup.addSetting((setting) => {
      setting.setName("Command focus level").setDesc("Determines what to focus when using the toggle command or file explorer icon. Right-click menu always focuses the clicked file/folder.").addDropdown((dropdown) => dropdown.addOption("file", "Current file only").addOption("parent", "Parent folder").addOption("grandparent", "Grandparent folder").addOption("greatgrandparent", "Great grandparent folder").addOption("custom", "Specific folder").setValue(this.plugin.settings.focusLevel).onChange(async (value) => {
        this.plugin.settings.focusLevel = value;
        await this.plugin.saveSettings();
        if (this.plugin.isFocus) {
          const fileExplorers = getAllFileExplorers(this.plugin);
          fileExplorers.forEach((fileExplorer) => {
            if (fileExplorer == null ? void 0 : fileExplorer.requestSort) {
              fileExplorer.requestSort();
            }
          });
        }
        this.display();
      }));
    });
    if (this.plugin.settings.focusLevel === "custom") {
      generalGroup.addSetting((setting) => {
        setting.setName("Custom folder path").setDesc("Enter a folder path (folder/subfolder). This folder will be focused regardless of which file is open.").addText((text) => {
          new FolderSuggest(this.app, text.inputEl);
          text.setPlaceholder("Folder/subfolder").setValue(this.plugin.settings.customFolderPath).onChange(async (value) => {
            this.plugin.settings.customFolderPath = value;
            await this.plugin.saveSettings();
          });
        });
      });
    }
    const autoHideGroup = new import_obsidian4.SettingGroup(containerEl).setHeading("Auto-hide folders");
    autoHideGroup.addSetting((setting) => {
      var _a;
      const autoHidePaths = ((_a = this.plugin.settings.autoHidePaths) != null ? _a : []).filter((p) => p.trim().length > 0);
      const descFragment = document.createDocumentFragment();
      descFragment.appendText("These folders are always hidden from the file explorer.");
      if (autoHidePaths.length > 0) {
        const list = descFragment.createEl("ul");
        autoHidePaths.forEach((p) => {
          list.createEl("li", { text: p });
        });
      }
      setting.setName("Hidden folders").setDesc(descFragment).addButton((button) => button.setButtonText("Manage").onClick(() => {
        new AutoHideModal(this.app, this.plugin, () => {
          this.display();
        }).open();
      }));
    });
  }
};

// src/utils/focus.ts
function getFocusPath(path, level, settings) {
  if (level === "custom") {
    return settings.customFolderPath || path;
  }
  if (level === "file") {
    return path;
  }
  const parts = path.split("/");
  if (level === "parent") {
    if (parts.length === 1) {
      return path;
    }
    return parts.slice(0, -1).join("/");
  }
  if (level === "grandparent") {
    if (parts.length <= 2) {
      return parts[0] || path;
    }
    return parts.slice(0, -2).join("/");
  }
  if (parts.length <= 3) {
    return parts[0] || path;
  }
  return parts.slice(0, -3).join("/");
}

// src/commands/index.ts
function registerCommands(plugin) {
  plugin.addCommand({
    id: "toggle",
    name: "Toggle focus",
    callback: () => {
      if (plugin.isFocus) {
        plugin.exitFocus();
      } else {
        if (plugin.settings.focusLevel === "custom") {
          if (plugin.settings.customFolderPath) {
            plugin.enterFocus(plugin.settings.customFolderPath);
          }
        } else {
          const file = plugin.app.workspace.getActiveFile();
          if (file == null ? void 0 : file.path) {
            const focusPath = getFocusPath(file.path, plugin.settings.focusLevel, plugin.settings);
            plugin.enterFocus(focusPath);
          }
        }
      }
    }
  });
  if (plugin.settings.showRightClickMenu) {
    plugin.registerEvent(
      plugin.app.workspace.on("file-menu", (menu, file) => {
        if (!plugin.settings.showRightClickMenu) {
          return;
        }
        menu.addItem((item) => {
          item.setTitle(plugin.isFocus ? "Exit focus" : "Focus").setIcon(plugin.isFocus ? "log-out" : "focus").onClick(() => {
            plugin.toggleFocus(file == null ? void 0 : file.path);
          });
        });
      })
    );
  }
}

// src/utils/file-explorer.ts
function findNavButtonsContainer(fileExplorerView) {
  var _a;
  let container = fileExplorerView.querySelector(".nav-buttons-container");
  if (container) {
    return container;
  }
  container = fileExplorerView.querySelector(".nav-header-button-container");
  if (container) {
    return container;
  }
  const existingButtons = fileExplorerView.querySelectorAll(".nav-action-button");
  if (existingButtons.length > 0) {
    const firstButton = existingButtons[0];
    const parent = firstButton.parentElement;
    if (parent && (parent.classList.contains("nav-buttons-container") || parent.classList.contains("nav-header-button-container") || Array.from(parent.children).some((el) => el.classList.contains("nav-action-button")))) {
      return parent;
    }
  }
  const viewHeader = fileExplorerView.querySelector(".view-header");
  if (viewHeader) {
    const headerContainer = viewHeader.querySelector(".nav-buttons-container") || viewHeader.querySelector(".nav-header-button-container") || viewHeader.querySelector(".view-header-title-container");
    if (headerContainer) {
      return headerContainer;
    }
    return viewHeader;
  }
  const navFilesContainer = fileExplorerView.querySelector(".nav-files-container");
  if (navFilesContainer) {
    let mobileButtonContainer = fileExplorerView.querySelector(".explorer-focus-mobile-buttons");
    if (!mobileButtonContainer) {
      mobileButtonContainer = document.createElement("div");
      mobileButtonContainer.className = "nav-buttons-container explorer-focus-mobile-buttons";
      mobileButtonContainer.setCssProps({
        display: "flex",
        alignItems: "center",
        gap: "4px",
        padding: "8px",
        borderBottom: "1px solid var(--background-modifier-border)"
      });
      (_a = navFilesContainer.parentElement) == null ? void 0 : _a.insertBefore(mobileButtonContainer, navFilesContainer);
    }
    return mobileButtonContainer;
  }
  let topContainer = fileExplorerView.querySelector(".explorer-focus-mobile-buttons");
  if (!topContainer) {
    topContainer = document.createElement("div");
    topContainer.className = "nav-buttons-container explorer-focus-mobile-buttons";
    topContainer.setCssProps({
      display: "flex",
      alignItems: "center",
      gap: "4px",
      padding: "8px",
      borderBottom: "1px solid var(--background-modifier-border)"
    });
    fileExplorerView.insertBefore(topContainer, fileExplorerView.firstChild);
  }
  return topContainer;
}
function createFileExplorerIcon(plugin) {
  const icon = document.createElement("div");
  icon.className = "clickable-icon nav-action-button";
  icon.setAttribute("aria-label", "Toggle focus");
  const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
  svg.setAttribute("xmlns", "http://www.w3.org/2000/svg");
  svg.setAttribute("width", "24");
  svg.setAttribute("height", "24");
  svg.setAttribute("viewBox", "0 0 24 24");
  svg.setAttribute("fill", "none");
  svg.setAttribute("stroke", "currentColor");
  svg.setAttribute("stroke-width", "2");
  svg.setAttribute("stroke-linecap", "round");
  svg.setAttribute("stroke-linejoin", "round");
  svg.setAttribute("class", "svg-icon lucide-focus");
  const circle = document.createElementNS("http://www.w3.org/2000/svg", "circle");
  circle.setAttribute("cx", "12");
  circle.setAttribute("cy", "12");
  circle.setAttribute("r", "3");
  svg.appendChild(circle);
  const path1 = document.createElementNS("http://www.w3.org/2000/svg", "path");
  path1.setAttribute("d", "M3 7V5a2 2 0 0 1 2-2h2");
  svg.appendChild(path1);
  const path2 = document.createElementNS("http://www.w3.org/2000/svg", "path");
  path2.setAttribute("d", "M17 3h2a2 2 0 0 1 2 2v2");
  svg.appendChild(path2);
  const path3 = document.createElementNS("http://www.w3.org/2000/svg", "path");
  path3.setAttribute("d", "M21 17v2a2 2 0 0 1-2 2h-2");
  svg.appendChild(path3);
  const path4 = document.createElementNS("http://www.w3.org/2000/svg", "path");
  path4.setAttribute("d", "M7 21H5a2 2 0 0 1-2-2v-2");
  svg.appendChild(path4);
  icon.appendChild(svg);
  return icon;
}
function insertFileExplorerIcon(icon, navButtonsContainer) {
  if (navButtonsContainer.contains(icon)) {
    return;
  }
  const allIcons = Array.from(navButtonsContainer.querySelectorAll(".clickable-icon.nav-action-button"));
  const defaultIcons = allIcons.filter((el) => !el.classList.contains("cmdr") && el !== icon);
  const cmdrIcons = Array.from(navButtonsContainer.querySelectorAll(".cmdr"));
  if (cmdrIcons.length > 0) {
    navButtonsContainer.insertBefore(icon, cmdrIcons[0]);
  } else if (defaultIcons.length > 0) {
    const lastIcon = defaultIcons[defaultIcons.length - 1];
    if (lastIcon.nextSibling) {
      navButtonsContainer.insertBefore(icon, lastIcon.nextSibling);
    } else {
      navButtonsContainer.appendChild(icon);
    }
  } else {
    navButtonsContainer.appendChild(icon);
  }
}

// src/main.ts
var ExplorerFocusPlugin = class extends import_obsidian5.Plugin {
  constructor(app, manifest) {
    super(app, manifest);
    this.isFocus = false;
    this.focusedPath = null;
    this.fileExplorerIcon = null;
  }
  async onload() {
    await this.loadSettings();
    this.addSettingTab(new ExplorerFocusSettingTab(this.app, this));
    registerCommands(this);
    if (this.settings.showFileExplorerIcon) {
      this.addFileExplorerIcon();
    }
    this.app.workspace.onLayoutReady(() => {
      this.patchAllFileExplorers();
      this.updateFocusModeClasses();
      this.updateAutoHideStyles();
    });
    this.app.workspace.on("layout-change", () => {
      this.patchAllFileExplorers();
      this.updateFocusModeClasses();
      this.updateAutoHideStyles();
    });
  }
  async loadSettings() {
    const loadedData = await this.loadData();
    this.settings = Object.assign({}, DEFAULT_SETTINGS, loadedData);
  }
  async saveSettings() {
    await this.saveData(this.settings);
  }
  toggleFocus(path) {
    if (this.isFocus) {
      this.exitFocus();
    } else if (path) {
      this.enterFocus(path);
    }
  }
  enterFocus(path) {
    this.isFocus = true;
    this.focusedPath = path;
    this.updateFileExplorerIcon();
    this.updateFocusModeClasses();
    const fileExplorers = getAllFileExplorers(this);
    fileExplorers.forEach((fileExplorer) => {
      if (fileExplorer == null ? void 0 : fileExplorer.requestSort) {
        fileExplorer.requestSort();
      }
    });
    setTimeout(() => {
      fileExplorers.forEach((fileExplorer) => {
        this.refreshFileExplorerVisibility(fileExplorer);
      });
    }, 0);
  }
  patchAllFileExplorers() {
    patchFileExplorer(this);
    const fileExplorers = getAllFileExplorers(this);
    fileExplorers.forEach((fileExplorer) => {
      fileExplorer.fileExplorerPlusPatched = true;
    });
  }
  exitFocus() {
    this.isFocus = false;
    this.focusedPath = null;
    this.updateFileExplorerIcon();
    this.updateFocusModeClasses();
    const fileExplorers = getAllFileExplorers(this);
    fileExplorers.forEach((fileExplorer) => {
      if (fileExplorer == null ? void 0 : fileExplorer.requestSort) {
        fileExplorer.requestSort();
      }
    });
    setTimeout(() => {
      fileExplorers.forEach((fileExplorer) => {
        this.refreshFileExplorerVisibility(fileExplorer);
      });
      this.updateAutoHideStyles();
    }, 0);
  }
  refreshFileExplorerVisibility(fileExplorer) {
    if (!(fileExplorer == null ? void 0 : fileExplorer.fileItems)) {
      return;
    }
    if (!this.isFocus || !this.focusedPath) {
      Object.values(fileExplorer.fileItems).forEach((vEl) => {
        if (!(vEl == null ? void 0 : vEl.el)) return;
        if (vEl.el.hasAttribute("data-explorer-focus-hidden")) {
          if (vEl.info) vEl.info.hidden = false;
          vEl.el.setCssProps({ display: "" });
          vEl.el.removeAttribute("data-explorer-focus-hidden");
        }
      });
      return;
    }
    const focusedPath = this.focusedPath;
    const ancestorPaths = /* @__PURE__ */ new Set();
    const pathParts = focusedPath.split("/");
    for (let i = 1; i < pathParts.length; i++) {
      ancestorPaths.add(pathParts.slice(0, i).join("/"));
    }
    const topLevelFolders = /* @__PURE__ */ new Map();
    const rootItems = [];
    for (const path of Object.keys(fileExplorer.fileItems)) {
      const firstSlash = path.indexOf("/");
      if (firstSlash === -1) {
        rootItems.push(path);
      } else {
        const topLevel = path.substring(0, firstSlash);
        if (!topLevelFolders.has(topLevel)) {
          topLevelFolders.set(topLevel, []);
        }
        topLevelFolders.get(topLevel).push(path);
      }
    }
    const focusedTopLevel = focusedPath.split("/")[0];
    for (const path of rootItems) {
      const vEl = fileExplorer.fileItems[path];
      if (!(vEl == null ? void 0 : vEl.el)) continue;
      const shouldShow = path === focusedPath || focusedPath.startsWith(path + "/") || path.startsWith(focusedPath + "/");
      this.updateItemVisibility(vEl, shouldShow);
    }
    for (const [topLevel, paths] of topLevelFolders) {
      const isInFocusPath = topLevel === focusedTopLevel || ancestorPaths.has(topLevel) || focusedPath === topLevel;
      if (!isInFocusPath) {
        for (const path of paths) {
          const vEl = fileExplorer.fileItems[path];
          if (!(vEl == null ? void 0 : vEl.el)) continue;
          this.updateItemVisibility(vEl, false);
        }
      } else {
        for (const path of paths) {
          const vEl = fileExplorer.fileItems[path];
          if (!(vEl == null ? void 0 : vEl.el)) continue;
          const shouldShow = path === focusedPath || path.startsWith(focusedPath + "/") || ancestorPaths.has(path);
          this.updateItemVisibility(vEl, shouldShow);
        }
      }
    }
  }
  updateItemVisibility(vEl, shouldShow) {
    const currentlyHidden = vEl.el.hasAttribute("data-explorer-focus-hidden");
    if (shouldShow && currentlyHidden) {
      if (vEl.info) vEl.info.hidden = false;
      vEl.el.setCssProps({ display: "" });
      vEl.el.removeAttribute("data-explorer-focus-hidden");
    } else if (!shouldShow && !currentlyHidden) {
      if (vEl.info) vEl.info.hidden = true;
      vEl.el.setCssProps({ display: "none" });
      vEl.el.setAttribute("data-explorer-focus-hidden", "true");
    }
  }
  updateFocusModeClasses() {
    const fileExplorers = getAllFileExplorers(this);
    fileExplorers.forEach((fileExplorer) => {
      const containerEl = fileExplorer.containerEl;
      if (this.isFocus) {
        containerEl.addClass("explorer-focus-mode");
      } else {
        containerEl.removeClass("explorer-focus-mode");
      }
    });
  }
  addFileExplorerIcon() {
    const handleIconClick = () => {
      if (this.isFocus) {
        this.exitFocus();
      } else {
        if (this.settings.focusLevel === "custom") {
          if (this.settings.customFolderPath) {
            this.enterFocus(this.settings.customFolderPath);
          }
        } else {
          const file = this.app.workspace.getActiveFile();
          if (file == null ? void 0 : file.path) {
            const focusPath = getFocusPath(file.path, this.settings.focusLevel, this.settings);
            this.enterFocus(focusPath);
          }
        }
      }
    };
    const addIconToFileExplorer = () => {
      const fileExplorerLeaves = this.app.workspace.getLeavesOfType("file-explorer");
      if (fileExplorerLeaves.length === 0) {
        return;
      }
      const fileExplorerView = fileExplorerLeaves[0].view.containerEl;
      const navButtonsContainer = findNavButtonsContainer(fileExplorerView);
      if (!navButtonsContainer) {
        return;
      }
      if (this.fileExplorerIcon && navButtonsContainer.contains(this.fileExplorerIcon)) {
        return;
      }
      if (this.fileExplorerIcon && this.fileExplorerIcon.parentElement) {
        this.fileExplorerIcon.remove();
      }
      if (!this.fileExplorerIcon) {
        this.fileExplorerIcon = createFileExplorerIcon(this);
        this.fileExplorerIcon.setCssProps({ touchAction: "manipulation" });
        let touchHandled = false;
        this.registerDomEvent(this.fileExplorerIcon, "touchstart", (evt) => {
          touchHandled = true;
          evt.preventDefault();
          evt.stopPropagation();
          handleIconClick();
          setTimeout(() => {
            touchHandled = false;
          }, 300);
        });
        this.registerDomEvent(this.fileExplorerIcon, "click", (evt) => {
          if (touchHandled) {
            evt.preventDefault();
            evt.stopPropagation();
            return;
          }
          evt.preventDefault();
          evt.stopPropagation();
          handleIconClick();
        });
      }
      this.updateFileExplorerIcon();
      insertFileExplorerIcon(this.fileExplorerIcon, navButtonsContainer);
    };
    addIconToFileExplorer();
    this.registerEvent(
      this.app.workspace.on("layout-change", () => {
        if (this.settings.showFileExplorerIcon) {
          addIconToFileExplorer();
        }
      })
    );
  }
  updateFileExplorerIcon() {
    if (!this.fileExplorerIcon) {
      return;
    }
    if (!this.settings.showFileExplorerIcon) {
      if (this.fileExplorerIcon.parentElement) {
        this.fileExplorerIcon.remove();
      }
      return;
    }
    if (!this.fileExplorerIcon.parentElement) {
      const fileExplorerLeaves = this.app.workspace.getLeavesOfType("file-explorer");
      if (fileExplorerLeaves.length > 0) {
        const fileExplorerView = fileExplorerLeaves[0].view.containerEl;
        const navButtonsContainer = findNavButtonsContainer(fileExplorerView);
        if (navButtonsContainer) {
          insertFileExplorerIcon(this.fileExplorerIcon, navButtonsContainer);
        }
      }
    }
    if (this.fileExplorerIcon.style.cursor) {
      this.fileExplorerIcon.style.removeProperty("cursor");
    }
    if (this.isFocus) {
      this.fileExplorerIcon.addClass("is-active");
    } else {
      this.fileExplorerIcon.removeClass("is-active");
    }
  }
  updateAutoHideStyles() {
    var _a;
    const paths = new Set(
      ((_a = this.settings.autoHidePaths) != null ? _a : []).map((p) => p.trim()).filter((p) => p.length > 0)
    );
    const fileExplorers = getAllFileExplorers(this);
    fileExplorers.forEach((fileExplorer) => {
      if (!(fileExplorer == null ? void 0 : fileExplorer.fileItems)) return;
      for (const [filePath, vEl] of Object.entries(fileExplorer.fileItems)) {
        if (!(vEl == null ? void 0 : vEl.el)) continue;
        const shouldHide = paths.has(filePath);
        const isHidden = vEl.el.hasAttribute("data-explorer-focus-auto-hidden");
        if (shouldHide && !isHidden) {
          vEl.el.setCssProps({ display: "none" });
          vEl.el.setAttribute("data-explorer-focus-auto-hidden", "true");
        } else if (!shouldHide && isHidden) {
          vEl.el.setCssProps({ display: "" });
          vEl.el.removeAttribute("data-explorer-focus-auto-hidden");
        }
      }
    });
  }
  onunload() {
    if (this.fileExplorerIcon) {
      this.fileExplorerIcon.remove();
      this.fileExplorerIcon = null;
    }
  }
};
var main_default = ExplorerFocusPlugin;
//# sourceMappingURL=data:application/json;base64,[encoded data, 78684 characters]
