|
1 | 1 | import topbar from "../vendor/topbar" |
2 | | -import { CodeEditorHook } from "../../deps/live_monaco_editor/priv/static/live_monaco_editor.esm" |
3 | 2 | import visualEditorHooks from "../../lib/beacon/live_admin/components/visual_editor/hooks" |
4 | 3 | import { getHooks } from "live_svelte" |
5 | 4 | import * as Components from "../svelte/**/*.svelte" |
| 5 | +import { CodeEditorHook } from "./hooks/code_editor_hook" |
6 | 6 |
|
7 | 7 | let Hooks = {} |
8 | 8 |
|
@@ -54,6 +54,63 @@ Hooks.ThemeToggle = { |
54 | 54 | } |
55 | 55 | } |
56 | 56 |
|
| 57 | +Hooks.SidebarToggle = { |
| 58 | + mounted() { |
| 59 | + const sidebar = this.el |
| 60 | + const btn = document.getElementById("sidebar-toggle") |
| 61 | + const collapseIcon = document.getElementById("sidebar-collapse-icon") |
| 62 | + const expandIcon = document.getElementById("sidebar-expand-icon") |
| 63 | + const collapsed = localStorage.getItem("beacon_sidebar_collapsed") === "true" |
| 64 | + |
| 65 | + if (collapsed) this.collapse(sidebar, collapseIcon, expandIcon) |
| 66 | + |
| 67 | + btn.addEventListener("click", () => { |
| 68 | + const isCollapsed = sidebar.style.width === "56px" |
| 69 | + if (isCollapsed) { |
| 70 | + this.expand(sidebar, collapseIcon, expandIcon) |
| 71 | + localStorage.setItem("beacon_sidebar_collapsed", "false") |
| 72 | + } else { |
| 73 | + this.collapse(sidebar, collapseIcon, expandIcon) |
| 74 | + localStorage.setItem("beacon_sidebar_collapsed", "true") |
| 75 | + } |
| 76 | + }) |
| 77 | + }, |
| 78 | + collapse(sidebar, collapseIcon, expandIcon) { |
| 79 | + sidebar.style.width = "56px" |
| 80 | + collapseIcon.classList.add("hidden") |
| 81 | + expandIcon.classList.remove("hidden") |
| 82 | + }, |
| 83 | + expand(sidebar, collapseIcon, expandIcon) { |
| 84 | + sidebar.style.width = "220px" |
| 85 | + collapseIcon.classList.remove("hidden") |
| 86 | + expandIcon.classList.add("hidden") |
| 87 | + } |
| 88 | +} |
| 89 | + |
| 90 | +Hooks.WorkspaceResize = { |
| 91 | + mounted() { |
| 92 | + this._resize = () => { |
| 93 | + const top = this.el.getBoundingClientRect().top |
| 94 | + const h = window.innerHeight - top - 12 |
| 95 | + this.el.style.height = h + 'px' |
| 96 | + } |
| 97 | + // Wait for layout to settle, then measure |
| 98 | + requestAnimationFrame(() => { |
| 99 | + this._resize() |
| 100 | + this._observer = new ResizeObserver(() => this._resize()) |
| 101 | + this._observer.observe(this.el.parentElement) |
| 102 | + }) |
| 103 | + window.addEventListener('resize', this._resize) |
| 104 | + }, |
| 105 | + updated() { |
| 106 | + requestAnimationFrame(() => this._resize()) |
| 107 | + }, |
| 108 | + destroyed() { |
| 109 | + window.removeEventListener('resize', this._resize) |
| 110 | + if (this._observer) this._observer.disconnect() |
| 111 | + } |
| 112 | +} |
| 113 | + |
57 | 114 | topbar.config({ barColors: { 0: "#29d" }, shadowColor: "rgba(0, 0, 0, .3)" }) |
58 | 115 | window.addEventListener("phx:page-loading-start", (_info) => topbar.show(300)) |
59 | 116 | window.addEventListener("phx:page-loading-stop", (_info) => topbar.hide()) |
|
0 commit comments