import { d as defineComponent, l as resolveComponent, o as openBlock, q as createBlock, w as withCtx, f as createBaseVNode, n as normalizeClass, m as withKeys, aF as renderSlot, aD as mergeProps, k as watch, b2 as scrollIntoView, J as onMounted, r as ref, c as computed, a_ as onUnmounted, b as createElementBlock, aL as withModifiers, G as normalizeStyle, b3 as useMediaQuery, t as toDisplayString, e as createVNode, g as unref, I as Icon, h as createCommentVNode, T as Transition } from "./vendor-BCKkA27H.js";
const _sfc_main$2 = defineComponent({
  inheritAttrs: false,
  props: {
    isActive: {
      type: Boolean,
      default: void 0
    }
  },
  emits: {
    navigate: () => true
  },
  setup(props, { emit }) {
    function handleNavigate(event, navigate) {
      emit("navigate");
      navigate(event);
    }
    return {
      handleNavigate
    };
  }
});
const _export_sfc = (sfc, props) => {
  const target = sfc.__vccOpts || sfc;
  for (const [key, val] of props) {
    target[key] = val;
  }
  return target;
};
const _hoisted_1$2 = ["href", "onClick", "onKeyup"];
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
  const _component_RouterLink = resolveComponent("RouterLink");
  return openBlock(), createBlock(_component_RouterLink, mergeProps({ class: "histoire-base-list-item-link" }, _ctx.$attrs, { custom: "" }), {
    default: withCtx(({ isActive: linkIsActive, href, navigate }) => [
      createBaseVNode("a", {
        href,
        class: normalizeClass(["htw-flex htw-items-center htw-gap-2 htw-text-gray-900 dark:htw-text-gray-100", [
          _ctx.$attrs.class,
          (_ctx.isActive != null ? _ctx.isActive : linkIsActive) ? "active htw-bg-primary-500 hover:htw-bg-primary-600 htw-text-white dark:htw-text-black" : "hover:htw-bg-primary-100 dark:hover:htw-bg-primary-900"
        ]]),
        onClick: ($event) => _ctx.handleNavigate($event, navigate),
        onKeyup: [
          withKeys(($event) => _ctx.handleNavigate($event, navigate), ["enter"]),
          withKeys(($event) => _ctx.handleNavigate($event, navigate), ["space"])
        ]
      }, [
        renderSlot(_ctx.$slots, "default", {
          active: _ctx.isActive != null ? _ctx.isActive : linkIsActive
        })
      ], 42, _hoisted_1$2)
    ]),
    _: 3
  }, 16);
}
const BaseListItemLink = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render]]);
function useScrollOnActive(active, el) {
  watch(active, (value) => {
    if (value) {
      autoScroll();
    }
  });
  function autoScroll() {
    if (el.value) {
      scrollIntoView(el.value, {
        scrollMode: "if-needed",
        block: "center",
        inline: "nearest",
        behavior: "smooth"
      });
    }
  }
  onMounted(() => {
    if (active.value) {
      autoScroll();
    }
  });
  return {
    autoScroll
  };
}
const _hoisted_1$1 = ["onMousedown"];
const SAVE_PREFIX = "__histoire";
const _sfc_main$1 = /* @__PURE__ */ defineComponent({
  __name: "BaseSplitPane",
  props: {
    orientation: {
      type: String,
      default: "landscape",
      validator: (value) => ["landscape", "portrait"].includes(value)
    },
    defaultSplit: {
      type: Number,
      default: 50
    },
    split: {
      type: Number,
      default: void 0
    },
    min: {
      type: Number,
      default: 20
    },
    max: {
      type: Number,
      default: 80
    },
    draggerOffset: {
      type: String,
      default: "center",
      validator: (value) => ["before", "center", "after"].includes(value)
    },
    saveId: {
      type: String,
      default: null
    },
    fixed: {
      type: Boolean,
      default: false
    }
  },
  emits: {
    "update:split": (_value) => true
  },
  setup(__props, { emit: __emit }) {
    const props = __props;
    const emit = __emit;
    const currentSplit = ref(props.defaultSplit);
    watch(() => props.split, (value) => {
      if (value !== void 0) {
        currentSplit.value = value;
      }
    }, {
      immediate: true
    });
    if (props.saveId) {
      const storageKey = `${SAVE_PREFIX}-split-pane-${props.saveId}`;
      const savedValue = localStorage.getItem(storageKey);
      if (savedValue != null) {
        let parsedValue;
        try {
          parsedValue = JSON.parse(savedValue);
        } catch (e) {
          console.error(e);
        }
        if (typeof parsedValue === "number") {
          currentSplit.value = parsedValue;
        }
      }
      watch(currentSplit, (value) => {
        localStorage.setItem(storageKey, JSON.stringify(value));
      });
      watch(currentSplit, (value) => {
        if (value !== props.split) {
          emit("update:split", value);
        }
      }, {
        immediate: true
      });
    }
    const boundSplit = computed(() => {
      if (currentSplit.value < props.min) {
        return props.min;
      } else if (currentSplit.value > props.max) {
        return props.max;
      } else {
        return currentSplit.value;
      }
    });
    const leftStyle = computed(() => ({
      [props.orientation === "landscape" ? "width" : "height"]: props.fixed ? `${boundSplit.value}px` : `${boundSplit.value}%`
    }));
    const rightStyle = computed(() => ({
      [props.orientation === "landscape" ? "width" : "height"]: props.fixed ? null : `${100 - boundSplit.value}%`
    }));
    const dragging = ref(false);
    let startPosition = 0;
    let startSplit = 0;
    const el = ref(null);
    function dragStart(e) {
      dragging.value = true;
      startPosition = props.orientation === "landscape" ? e.pageX : e.pageY;
      startSplit = boundSplit.value;
      window.addEventListener("mousemove", dragMove);
      window.addEventListener("mouseup", dragEnd);
    }
    function dragMove(e) {
      if (dragging.value) {
        let position;
        let totalSize;
        if (props.orientation === "landscape") {
          position = e.pageX;
          totalSize = el.value.offsetWidth;
        } else {
          position = e.pageY;
          totalSize = el.value.offsetHeight;
        }
        const dPosition = position - startPosition;
        if (props.fixed) {
          currentSplit.value = startSplit + dPosition;
        } else {
          currentSplit.value = startSplit + ~~(dPosition / totalSize * 200) / 2;
        }
      }
    }
    function dragEnd() {
      dragging.value = false;
      removeDragListeners();
    }
    function removeDragListeners() {
      window.removeEventListener("mousemove", dragMove);
      window.removeEventListener("mouseup", dragEnd);
    }
    onUnmounted(() => {
      removeDragListeners();
    });
    return (_ctx, _cache) => {
      return openBlock(), createElementBlock("div", {
        ref_key: "el",
        ref: el,
        class: normalizeClass(["histoire-base-split-pane htw-flex htw-h-full htw-isolate htw-overflow-auto", {
          "htw-flex-col": __props.orientation === "portrait",
          "htw-cursor-ew-resize": dragging.value && __props.orientation === "landscape",
          "htw-cursor-ns-resize": dragging.value && __props.orientation === "portrait",
          [__props.orientation]: true
        }])
      }, [
        createBaseVNode("div", {
          class: normalizeClass(["htw-relative htw-top-0 htw-left-0 htw-z-20", {
            "htw-pointer-events-none": dragging.value,
            "htw-border-r htw-border-gray-300/30 dark:htw-border-gray-800": __props.orientation === "landscape",
            "htw-flex-none": __props.fixed
          }]),
          style: normalizeStyle(leftStyle.value)
        }, [
          renderSlot(_ctx.$slots, "first", {}, void 0, true),
          createBaseVNode("div", {
            class: normalizeClass(["dragger htw-absolute htw-z-100 hover:htw-bg-primary-500/50 htw-transition-colors htw-duration-150 htw-delay-150", {
              "htw-top-0 htw-bottom-0 htw-cursor-ew-resize": __props.orientation === "landscape",
              "htw-left-0 htw-right-0 htw-cursor-ns-resize": __props.orientation === "portrait",
              [`dragger-offset-${__props.draggerOffset}`]: true,
              "htw-bg-primary-500/25": dragging.value
            }]),
            onMousedown: withModifiers(dragStart, ["prevent"])
          }, null, 42, _hoisted_1$1)
        ], 6),
        createBaseVNode("div", {
          class: normalizeClass(["htw-relative htw-bottom-0 htw-right-0", {
            "htw-pointer-events-none": dragging.value,
            "htw-border-t htw-border-gray-300/30 dark:htw-border-gray-800": __props.orientation === "portrait",
            "htw-flex-1": __props.fixed
          }]),
          style: normalizeStyle(rightStyle.value)
        }, [
          renderSlot(_ctx.$slots, "last", {}, void 0, true)
        ], 6)
      ], 2);
    };
  }
});
const BaseSplitPane = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-4f40a1bb"]]);
const isMobile = useMediaQuery("(max-width: 640px)");
const _hoisted_1 = {
  key: 0,
  class: "histoire-mobile-overlay htw-absolute htw-z-10 htw-bg-white dark:htw-bg-gray-700 htw-w-screen htw-h-screen htw-inset-0 htw-overflow-hidden htw-flex htw-flex-col"
};
const _hoisted_2 = { class: "htw-p-4 htw-h-16 htw-flex htw-border-b htw-border-gray-100 dark:htw-border-gray-800 htw-items-center htw-place-content-between" };
const _hoisted_3 = { class: "htw-text-gray-500" };
const _sfc_main = /* @__PURE__ */ defineComponent({
  __name: "MobileOverlay",
  props: {
    title: {},
    opened: { type: Boolean }
  },
  emits: ["close"],
  setup(__props, { emit: __emit }) {
    const emit = __emit;
    return (_ctx, _cache) => {
      return openBlock(), createBlock(Transition, { name: "__histoire-fade-bottom" }, {
        default: withCtx(() => [
          _ctx.opened ? (openBlock(), createElementBlock("div", _hoisted_1, [
            createBaseVNode("div", _hoisted_2, [
              createBaseVNode("span", _hoisted_3, toDisplayString(_ctx.title), 1),
              createBaseVNode("a", {
                class: "htw-p-1 hover:htw-text-primary-500 dark:hover:htw-text-primary-400 htw-cursor-pointer",
                onClick: _cache[0] || (_cache[0] = ($event) => emit("close"))
              }, [
                createVNode(unref(Icon), {
                  icon: "carbon:close",
                  class: "htw-w-8 htw-h-8 htw-shrink-0"
                })
              ])
            ]),
            renderSlot(_ctx.$slots, "default")
          ])) : createCommentVNode("", true)
        ]),
        _: 3
      });
    };
  }
});
export {
  BaseListItemLink as B,
  _export_sfc as _,
  _sfc_main as a,
  BaseSplitPane as b,
  isMobile as i,
  useScrollOnActive as u
};