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

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: !0 });
}, __copyProps = (to, from, except, desc) => {
  if (from && typeof from == "object" || typeof from == "function")
    for (let key of __getOwnPropNames(from))
      !__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: !0 }), mod);

// main.ts
var main_exports = {};
__export(main_exports, {
  default: () => DividerPlugin
});
module.exports = __toCommonJS(main_exports);
var import_obsidian = require("obsidian");

// node_modules/uuid/dist/esm-browser/rng.js
var getRandomValues, rnds8 = new Uint8Array(16);
function rng() {
  if (!getRandomValues && (getRandomValues = typeof crypto != "undefined" && crypto.getRandomValues && crypto.getRandomValues.bind(crypto), !getRandomValues))
    throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");
  return getRandomValues(rnds8);
}

// node_modules/uuid/dist/esm-browser/stringify.js
var byteToHex = [];
for (let i = 0; i < 256; ++i)
  byteToHex.push((i + 256).toString(16).slice(1));
function unsafeStringify(arr, offset = 0) {
  return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + "-" + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + "-" + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + "-" + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + "-" + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];
}

// node_modules/uuid/dist/esm-browser/native.js
var randomUUID = typeof crypto != "undefined" && crypto.randomUUID && crypto.randomUUID.bind(crypto), native_default = {
  randomUUID
};

// node_modules/uuid/dist/esm-browser/v4.js
function v4(options, buf, offset) {
  if (native_default.randomUUID && !buf && !options)
    return native_default.randomUUID();
  options = options || {};
  let rnds = options.random || (options.rng || rng)();
  if (rnds[6] = rnds[6] & 15 | 64, rnds[8] = rnds[8] & 63 | 128, buf) {
    offset = offset || 0;
    for (let i = 0; i < 16; ++i)
      buf[offset + i] = rnds[i];
    return buf;
  }
  return unsafeStringify(rnds);
}
var v4_default = v4;

// main.ts
var DEFAULT_SETTINGS = {
  dividers: {}
}, DividerPlugin = class extends import_obsidian.Plugin {
  constructor() {
    super(...arguments);
    this.dividerElements = {};
  }
  async onload() {
    await this.loadSettings(), this.versionCheck(), Object.keys(this.settings.dividers).forEach((dividerId) => {
      let divider = this.settings.dividers[dividerId];
      this.renderDivider(divider);
    }), this.addSettingTab(new DividerSettingTab(this.app, this));
  }
  onunload() {
  }
  /**
   * Load data from disk, stored in data.json in plugin folder
   */
  async loadSettings() {
    let data = await this.loadData() || {};
    this.settings = Object.assign({}, DEFAULT_SETTINGS, data), this.settings.dividers || (this.settings.dividers = {});
  }
  /**
   * Save data to disk, stored in data.json in plugin folder
   */
  async saveSettings() {
    await this.saveData(this.settings);
  }
  /**
   * Check the local plugin version against github. If there is a new version, notify the user.
   */
  async versionCheck() {
    let localVersion = "1.1.1", stableVersion = await (0, import_obsidian.requestUrl)(
      "https://raw.githubusercontent.com/andrewmcgivery/obsidian-ribbon-divider/main/package.json"
    ).then(async (res) => {
      if (res.status === 200)
        return (await res.json).version;
    }), betaVersion = await (0, import_obsidian.requestUrl)(
      "https://raw.githubusercontent.com/andrewmcgivery/obsidian-ribbon-divider/beta/package.json"
    ).then(async (res) => {
      if (res.status === 200)
        return (await res.json).version;
    });
    (localVersion == null ? void 0 : localVersion.indexOf("beta")) !== -1 ? localVersion !== betaVersion && new import_obsidian.Notice(
      "There is a beta update available for the Ribbon Divider plugin. Please update to to the latest version to get the latest features!",
      0
    ) : localVersion !== stableVersion && new import_obsidian.Notice(
      "There is an update available for the Ribbon Divider plugin. Please update to to the latest version to get the latest features!",
      0
    );
  }
  /**
   * Renders a divider on the ribbon. The HTMLElement is saved to this.dividerElemenets so we can remove it if the
   * user deletes it from the settings screen.
   * @param divider
   */
  async renderDivider(divider) {
    if (document.body.hasClass("is-phone"))
      return;
    let dividerIconEl = this.addRibbonIcon(
      "",
      `ribbon-divider-${divider.id}`,
      (evt) => {
      }
    );
    dividerIconEl.addClass("ribbon-divider"), dividerIconEl.addClass(`ribbon-divider-${divider.id}`), this.dividerElements[divider.id] = dividerIconEl;
  }
  /**
   * Add a new divider and render it
   * @param divider
   */
  async addDivider(divider) {
    this.renderDivider(divider), this.settings.dividers[divider.id] = divider, await this.saveSettings();
  }
  /**
   * Remove an existing divider, both from settings, and from the UI by calling remove() on the saved HTMLElement
   * @param dividerId
   */
  async removeDivider(dividerId) {
    delete this.settings.dividers[dividerId], this.saveSettings(), this.dividerElements[dividerId] && (this.dividerElements[dividerId].remove(), delete this.dividerElements[dividerId]);
  }
}, DividerSettingTab = class extends import_obsidian.PluginSettingTab {
  constructor(app, plugin) {
    super(app, plugin);
    this.plugin = plugin;
  }
  display() {
    let { containerEl } = this;
    containerEl.empty(), containerEl.createEl("p", {
      attr: {
        style: "display: block; margin-bottom: 5px"
      },
      text: 'Use this settings screen to add/update dividers to your ribbon. Clicking "New Divider" below will immediately add the divider.'
    }), containerEl.createEl("hr");
    let dividersContainerEl = containerEl.createDiv("dividers-container");
    Object.keys(this.plugin.settings.dividers).forEach((dividerId) => {
      let divider = this.plugin.settings.dividers[dividerId];
      new import_obsidian.Setting(dividersContainerEl).setName("Divider").setDesc(`Id: ${divider.id}`).addButton((button) => {
        button.setButtonText("Delete").onClick(async () => {
          await this.plugin.removeDivider(divider.id), this.display();
        });
      });
    }), containerEl.createEl("button", { text: "New divider", cls: "mod-cta" }).addEventListener("click", () => {
      this.plugin.addDivider({
        id: v4_default()
      }), this.display();
    });
  }
};