Skip to content

Commit 52077ae

Browse files
committed
Add WASM Tailwind compiler, code editor hooks, and page editor improvements
Switch tailwind_compiler from local path to GitHub v0.0.7. Add WASM and plugin-css asset routes. Introduce code editor and template language hooks. Update page editor form, preview, and layouts.
1 parent a0c3584 commit 52077ae

20 files changed

Lines changed: 4017 additions & 2132 deletions

DESIGN_BRIEF.md

Lines changed: 492 additions & 0 deletions
Large diffs are not rendered by default.

assets/css/beacon_live_admin.css

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,10 @@
33
@import "tailwindcss/utilities";
44
@import "../../deps/live_monaco_editor/priv/static/live_monaco_editor.min.css";
55
@import url("https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@200;300;400;500;600;700;800&display=swap");
6+
7+
.beacon-page-code-editor {
8+
width: 100%;
9+
height: 100% !important;
10+
min-height: 0;
11+
overflow: hidden;
12+
}

assets/js/beacon_live_admin.js

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import topbar from "../vendor/topbar"
2-
import { CodeEditorHook } from "../../deps/live_monaco_editor/priv/static/live_monaco_editor.esm"
32
import visualEditorHooks from "../../lib/beacon/live_admin/components/visual_editor/hooks"
43
import { getHooks } from "live_svelte"
54
import * as Components from "../svelte/**/*.svelte"
5+
import { CodeEditorHook } from "./hooks/code_editor_hook"
66

77
let Hooks = {}
88

@@ -54,6 +54,63 @@ Hooks.ThemeToggle = {
5454
}
5555
}
5656

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+
57114
topbar.config({ barColors: { 0: "#29d" }, shadowColor: "rgba(0, 0, 0, .3)" })
58115
window.addEventListener("phx:page-loading-start", (_info) => topbar.show(300))
59116
window.addEventListener("phx:page-loading-stop", (_info) => topbar.hide())

0 commit comments

Comments
 (0)