<!-- eslint-disable vue/no-multiple-template-root -->
<template>
<component
:is="ResizablePanel"
ref="leftResizablePanelRef"
rememberSizeKey="func-picker"
side="left"
:minSize="320"
>
<div class="flex flex-col h-full">
<div class="relative flex-grow">
<CustomizeTabs tabContentSlug="packages">
<template #packages>
<ModuleListPanel />
</template>
</CustomizeTabs>
</div>
</div>
</component>
<div
class="grow overflow-hidden bg-shade-0 dark:bg-neutral-800 dark:text-shade-0 font-semi-bold flex flex-col relative"
>
<ModuleDisplay :key="moduleSlug" />
</div>
<component
:is="ResizablePanel"
ref="rightResizablePanelRef"
rememberSizeKey="func-details"
side="right"
:minSize="200"
>
<SidebarSubpanelTitle label="Module Details" />
<ModuleDetailsPanel :key="moduleSlug" />
</component>
</template>
<script lang="ts" setup>
import * as _ from "lodash-es";
import { computed, onBeforeUnmount, onMounted, ref } from "vue";
import { ResizablePanel } from "@si/vue-lib/design-system";
import ModuleListPanel from "@/components/modules/ModuleListPanel.vue";
import ModuleDisplay from "@/components/modules/ModuleDisplay.vue";
import ModuleDetailsPanel from "@/components/modules/ModuleDetailsPanel.vue";
import { useModuleStore } from "@/store/module.store";
import SidebarSubpanelTitle from "@/components/SidebarSubpanelTitle.vue";
import CustomizeTabs from "../CustomizeTabs.vue";
const moduleStore = useModuleStore();
const moduleSlug = computed(() => moduleStore.urlSelectedModuleSlug);
const leftResizablePanelRef = ref();
const rightResizablePanelRef = ref();
const onKeyDown = async (e: KeyboardEvent) => {
if (
e.altKey &&
e.shiftKey &&
leftResizablePanelRef.value &&
rightResizablePanelRef.value
) {
if (
leftResizablePanelRef.value.collapsed &&
rightResizablePanelRef.value.collapsed
) {
// Open all panels
leftResizablePanelRef.value.collapseSet(false);
rightResizablePanelRef.value.collapseSet(false);
leftResizablePanelRef.value.subpanelCollapseSet(false);
} else {
// Close all panels
leftResizablePanelRef.value.collapseSet(true);
rightResizablePanelRef.value.collapseSet(true);
}
}
};
onMounted(() => {
window.addEventListener("keydown", onKeyDown);
});
onBeforeUnmount(() => {
window.removeEventListener("keydown", onKeyDown);
});
</script>