treesap 0.1.5 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"SimpleLivePreview.d.ts","sourceRoot":"","sources":["../../src/components/SimpleLivePreview.tsx"],"names":[],"mappings":"AAAA,UAAU,sBAAsB;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAqB,EAAE,WAAkB,EAAE,EAAE,sBAAsB,kDAwBtG"}
1
+ {"version":3,"file":"SimpleLivePreview.d.ts","sourceRoot":"","sources":["../../src/components/SimpleLivePreview.tsx"],"names":[],"mappings":"AAAA,UAAU,sBAAsB;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAqB,EAAE,WAAkB,EAAE,EAAE,sBAAsB,kDAkCtG"}
@@ -2,6 +2,6 @@ import { jsx as _jsx, jsxs as _jsxs } from "hono/jsx/jsx-runtime";
2
2
  export function SimpleLivePreview({ id = "simple-preview", previewPort = 5173 }) {
3
3
  const defaultSrc = `http://localhost:${previewPort}`;
4
4
  const baseUrl = `localhost:${previewPort}/`;
5
- return (_jsxs("sapling-island", { loading: "visible", children: [_jsxs("template", { children: [_jsx("script", { type: "module", src: "https://code.iconify.design/iconify-icon/2.0.0/iconify-icon.min.js" }), _jsx("script", { type: "module", src: "/components/SimpleLivePreview.js" })] }), _jsx("div", { id: id, class: "flex-1 h-full bg-white transition-all duration-300", children: _jsx("iframe", { id: `${id}-iframe`, src: defaultSrc, class: "w-full h-full border-0 bg-white block", title: "Live Preview", sandbox: "allow-same-origin allow-scripts allow-forms allow-popups allow-top-navigation allow-downloads allow-modals allow-orientation-lock allow-pointer-lock allow-presentation allow-storage-access-by-user-activation", "data-preview-port": previewPort }) })] }));
5
+ return (_jsxs("sapling-island", { loading: "visible", children: [_jsxs("template", { children: [_jsx("script", { type: "module", src: "https://code.iconify.design/iconify-icon/2.0.0/iconify-icon.min.js" }), _jsx("script", { type: "module", src: "/components/SimpleLivePreview.js" })] }), _jsxs("div", { id: id, class: "flex-1 h-full bg-white transition-all duration-300 p-2 relative overflow-hidden", children: [_jsx("iframe", { id: `${id}-iframe`, src: defaultSrc, class: "w-full h-full border border-gray-300 bg-white block rounded-md", title: "Live Preview", sandbox: "allow-same-origin allow-scripts allow-forms allow-popups allow-top-navigation allow-downloads allow-modals allow-orientation-lock allow-pointer-lock allow-presentation allow-storage-access-by-user-activation", "data-preview-port": previewPort }), _jsx("button", { id: `${id}-floating-hide-sidebar-btn`, class: "absolute p-3 bg-white border-2 border-gray-400 rounded-lg shadow-xl hover:bg-gray-50 hover:shadow-2xl transition-all flex items-center justify-center z-50", title: "Toggle Sidebar", style: "position: absolute !important; z-index: 9999 !important; bottom: 16px; left: 16px;", children: _jsx("iconify-icon", { id: `${id}-floating-hide-sidebar-icon`, icon: "ph:sidebar-simple", width: "20", height: "20", class: "text-gray-800" }) })] })] }));
6
6
  }
7
7
  //# sourceMappingURL=SimpleLivePreview.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SimpleLivePreview.js","sourceRoot":"","sources":["../../src/components/SimpleLivePreview.tsx"],"names":[],"mappings":";AAKA,MAAM,UAAU,iBAAiB,CAAC,EAAE,EAAE,GAAG,gBAAgB,EAAE,WAAW,GAAG,IAAI,EAA0B;IACrG,MAAM,UAAU,GAAG,oBAAoB,WAAW,EAAE,CAAC;IACrD,MAAM,OAAO,GAAG,aAAa,WAAW,GAAG,CAAC;IAE5C,OAAO,CACL,0BAAgB,OAAO,EAAC,SAAS,aAC/B,+BACE,iBAAQ,IAAI,EAAC,QAAQ,EAAC,GAAG,EAAC,oEAAoE,GAAU,EACxG,iBAAQ,IAAI,EAAC,QAAQ,EAAC,GAAG,EAAC,kCAAkC,GAAU,IAC7D,EAEX,cAAK,EAAE,EAAE,EAAE,EAAE,KAAK,EAAC,oDAAoD,YAErE,iBACE,EAAE,EAAE,GAAG,EAAE,SAAS,EAClB,GAAG,EAAE,UAAU,EACf,KAAK,EAAC,uCAAuC,EAC7C,KAAK,EAAC,cAAc,EACpB,OAAO,EAAC,iNAAiN,uBACtM,WAAW,GACtB,GACN,IACS,CAClB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"SimpleLivePreview.js","sourceRoot":"","sources":["../../src/components/SimpleLivePreview.tsx"],"names":[],"mappings":";AAKA,MAAM,UAAU,iBAAiB,CAAC,EAAE,EAAE,GAAG,gBAAgB,EAAE,WAAW,GAAG,IAAI,EAA0B;IACrG,MAAM,UAAU,GAAG,oBAAoB,WAAW,EAAE,CAAC;IACrD,MAAM,OAAO,GAAG,aAAa,WAAW,GAAG,CAAC;IAE5C,OAAO,CACL,0BAAgB,OAAO,EAAC,SAAS,aAC/B,+BACE,iBAAQ,IAAI,EAAC,QAAQ,EAAC,GAAG,EAAC,oEAAoE,GAAU,EACxG,iBAAQ,IAAI,EAAC,QAAQ,EAAC,GAAG,EAAC,kCAAkC,GAAU,IAC7D,EAEX,eAAK,EAAE,EAAE,EAAE,EAAE,KAAK,EAAC,iFAAiF,aAElG,iBACE,EAAE,EAAE,GAAG,EAAE,SAAS,EAClB,GAAG,EAAE,UAAU,EACf,KAAK,EAAC,gEAAgE,EACtE,KAAK,EAAC,cAAc,EACpB,OAAO,EAAC,iNAAiN,uBACtM,WAAW,GACtB,EAGV,iBACE,EAAE,EAAE,GAAG,EAAE,4BAA4B,EACrC,KAAK,EAAC,4JAA4J,EAClK,KAAK,EAAC,gBAAgB,EACtB,KAAK,EAAC,oFAAoF,YAE1F,uBAAc,EAAE,EAAE,GAAG,EAAE,6BAA6B,EAAE,IAAI,EAAC,mBAAmB,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,KAAK,EAAC,eAAe,GAAgB,GACpI,IACL,IACS,CAClB,CAAC;AACJ,CAAC"}
@@ -3,6 +3,6 @@ import Layout from "../layouts/Layout.js";
3
3
  import { Terminal as TerminalComponent } from "../components/Terminal.js";
4
4
  import { SimpleLivePreview } from "../components/SimpleLivePreview.js";
5
5
  export function Code({ previewPort = 1234, workingDirectory }) {
6
- return (_jsx(Layout, { title: "Code Editor", children: _jsxs("div", { id: "code-container", class: "h-screen flex bg-[#1e1e1e]", children: [_jsxs("div", { id: "sidebar-pane", class: "w-2/5-plus border-r border-[#3c3c3c] transition-all duration-300 flex flex-col bg-[#252526]", children: [_jsx("div", { class: "p-3 border-b border-[#3c3c3c]", children: _jsx("a", { href: "/", class: "text-[#cccccc] hover:text-white text-sm", children: "\u2190 Back to Home" }) }), _jsx("div", { class: "p-3 border-b border-[#3c3c3c] bg-[#2d2d30]", children: _jsxs("div", { class: "flex items-center gap-2", children: [_jsx("button", { id: "live-preview-hide-claude-btn", class: "p-2 hover:bg-[#3c3c3c] rounded-md transition-colors flex items-center text-[#cccccc] hover:text-white", title: "Hide Sidebar", children: _jsx("iconify-icon", { id: "live-preview-hide-claude-icon", icon: "ph:sidebar-simple", width: "16", height: "16" }) }), _jsx("button", { type: "button", id: "live-preview-refresh-btn", class: "p-2 hover:bg-[#3c3c3c] rounded-md transition-colors flex-shrink-0 text-[#cccccc] hover:text-white", title: "Reload", children: _jsx("iconify-icon", { icon: "tabler:refresh", width: "16", height: "16" }) }), _jsxs("div", { class: "flex-1 flex items-center bg-[#1e1e1e] border border-[#3c3c3c] rounded px-3 py-2 hover:border-[#0e639c] focus-within:border-[#0e639c] transition-all", children: [_jsx("iconify-icon", { icon: "tabler:world", width: "16", height: "16", class: "text-[#cccccc] mr-2" }), _jsxs("span", { class: "text-[#cccccc] text-sm", children: ["localhost:", previewPort, "/"] }), _jsx("input", { id: "live-preview-url-input", type: "text", placeholder: "path", defaultValue: "", class: "flex-1 bg-transparent text-sm focus:outline-none text-[#cccccc] ml-1" }), _jsx("button", { type: "button", id: "live-preview-load-btn", class: "ml-2 p-1 hover:bg-[#3c3c3c] rounded transition-colors flex-shrink-0 text-[#cccccc] hover:text-white", title: "Go", children: _jsx("iconify-icon", { icon: "tabler:chevron-right", width: "16", height: "16" }) })] })] }) }), _jsxs("div", { class: "flex py-2", children: [_jsx("button", { class: "px-3 py-2 text-[#cccccc] disabled:opacity-50 cursor-not-allowed flex items-center justify-center", children: _jsx("iconify-icon", { icon: "tabler:folder", width: "20", height: "20" }) }), _jsx("button", { class: "px-3 py-2 text-[#cccccc] disabled:opacity-50 cursor-not-allowed flex items-center justify-center", children: _jsx("iconify-icon", { icon: "tabler:search", width: "20", height: "20" }) }), _jsx("button", { class: "px-3 py-2 text-white flex items-center justify-center", children: _jsx("iconify-icon", { icon: "tabler:terminal", width: "20", height: "20" }) }), _jsx("button", { class: "px-3 py-2 text-[#cccccc] disabled:opacity-50 cursor-not-allowed flex items-center justify-center", children: _jsx("iconify-icon", { icon: "tabler:git-merge", width: "20", height: "20" }) })] }), _jsx("div", { class: "flex-1 overflow-hidden bg-[#1e1e1e]", children: _jsx("div", { class: "h-full p-4", children: _jsx(TerminalComponent, { id: "terminal", sessionId: "shared-terminal-session" }) }) })] }), _jsx(SimpleLivePreview, { id: "live-preview", previewPort: previewPort })] }) }));
6
+ return (_jsx(Layout, { title: "Code Editor", children: _jsxs("div", { id: "code-container", class: "h-screen flex bg-[#1e1e1e]", children: [_jsxs("div", { id: "sidebar-pane", class: "w-2/5-plus border-r border-[#3c3c3c] transition-all duration-300 flex flex-col bg-[#252526]", children: [_jsx("div", { class: "p-3 border-b border-[#3c3c3c]", children: _jsx("a", { href: "/", class: "text-[#cccccc] hover:text-white text-sm", children: "\u2190 Back to Home" }) }), _jsx("div", { class: "p-3 border-b border-[#3c3c3c] bg-[#2d2d30]", children: _jsxs("div", { class: "flex items-center gap-2", children: [_jsx("button", { id: "live-preview-hide-sidebar-btn", class: "p-2 hover:bg-[#3c3c3c] rounded-md transition-colors flex items-center text-[#cccccc] hover:text-white", title: "Hide Sidebar", children: _jsx("iconify-icon", { id: "live-preview-hide-sidebar-icon", icon: "ph:sidebar-simple", width: "16", height: "16" }) }), _jsx("button", { type: "button", id: "live-preview-refresh-btn", class: "p-2 hover:bg-[#3c3c3c] rounded-md transition-colors flex-shrink-0 text-[#cccccc] hover:text-white", title: "Reload", children: _jsx("iconify-icon", { icon: "tabler:refresh", width: "16", height: "16" }) }), _jsxs("div", { class: "flex-1 flex items-center bg-[#1e1e1e] border border-[#3c3c3c] rounded px-3 py-2 hover:border-[#0e639c] focus-within:border-[#0e639c] transition-all", children: [_jsx("iconify-icon", { icon: "tabler:world", width: "16", height: "16", class: "text-[#cccccc] mr-2" }), _jsxs("span", { class: "text-[#cccccc] text-sm", children: ["localhost:", previewPort, "/"] }), _jsx("input", { id: "live-preview-url-input", type: "text", placeholder: "path", defaultValue: "", class: "flex-1 bg-transparent text-sm focus:outline-none text-[#cccccc] ml-1" }), _jsx("button", { type: "button", id: "live-preview-load-btn", class: "ml-2 p-1 hover:bg-[#3c3c3c] rounded transition-colors flex-shrink-0 text-[#cccccc] hover:text-white", title: "Go", children: _jsx("iconify-icon", { icon: "tabler:chevron-right", width: "16", height: "16" }) })] })] }) }), _jsxs("div", { class: "flex py-2", children: [_jsx("button", { class: "px-3 py-2 text-[#cccccc] disabled:opacity-50 cursor-not-allowed flex items-center justify-center", children: _jsx("iconify-icon", { icon: "tabler:folder", width: "20", height: "20" }) }), _jsx("button", { class: "px-3 py-2 text-[#cccccc] disabled:opacity-50 cursor-not-allowed flex items-center justify-center", children: _jsx("iconify-icon", { icon: "tabler:search", width: "20", height: "20" }) }), _jsx("button", { class: "px-3 py-2 text-white flex items-center justify-center", children: _jsx("iconify-icon", { icon: "tabler:terminal", width: "20", height: "20" }) }), _jsx("button", { class: "px-3 py-2 text-[#cccccc] disabled:opacity-50 cursor-not-allowed flex items-center justify-center", children: _jsx("iconify-icon", { icon: "tabler:git-merge", width: "20", height: "20" }) })] }), _jsx("div", { class: "flex-1 overflow-hidden bg-[#1e1e1e]", children: _jsx("div", { class: "h-full p-4", children: _jsx(TerminalComponent, { id: "terminal", sessionId: "shared-terminal-session" }) }) })] }), _jsx(SimpleLivePreview, { id: "live-preview", previewPort: previewPort })] }) }));
7
7
  }
8
8
  //# sourceMappingURL=Code.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Code.js","sourceRoot":"","sources":["../../src/pages/Code.tsx"],"names":[],"mappings":";AAAA,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAOvE,MAAM,UAAU,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,EAAE,gBAAgB,EAAiB;IAC1E,OAAO,CACL,KAAC,MAAM,IAAC,KAAK,EAAC,aAAa,YACzB,eAAK,EAAE,EAAC,gBAAgB,EAAC,KAAK,EAAC,4BAA4B,aAEzD,eAAK,EAAE,EAAC,cAAc,EAAC,KAAK,EAAC,6FAA6F,aAExH,cAAK,KAAK,EAAC,+BAA+B,YACxC,YAAG,IAAI,EAAC,GAAG,EAAC,KAAK,EAAC,yCAAyC,oCAAmB,GAC1E,EAGN,cAAK,KAAK,EAAC,4CAA4C,YACrD,eAAK,KAAK,EAAC,yBAAyB,aAClC,iBACE,EAAE,EAAC,8BAA8B,EACjC,KAAK,EAAC,uGAAuG,EAC7G,KAAK,EAAC,cAAc,YAEpB,uBAAc,EAAE,EAAC,+BAA+B,EAAC,IAAI,EAAC,mBAAmB,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,GAAgB,GACzG,EACT,iBACE,IAAI,EAAC,QAAQ,EACb,EAAE,EAAC,0BAA0B,EAC7B,KAAK,EAAC,mGAAmG,EACzG,KAAK,EAAC,QAAQ,YAEd,uBAAc,IAAI,EAAC,gBAAgB,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,GAAgB,GACnE,EACT,eAAK,KAAK,EAAC,qJAAqJ,aAC9J,uBAAc,IAAI,EAAC,cAAc,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,KAAK,EAAC,qBAAqB,GAAgB,EACpG,gBAAM,KAAK,EAAC,wBAAwB,2BAAY,WAAW,SAAS,EACpE,gBACE,EAAE,EAAC,wBAAwB,EAC3B,IAAI,EAAC,MAAM,EACX,WAAW,EAAC,MAAM,EAClB,YAAY,EAAC,EAAE,EACf,KAAK,EAAC,sEAAsE,GAC5E,EACF,iBACE,IAAI,EAAC,QAAQ,EACb,EAAE,EAAC,uBAAuB,EAC1B,KAAK,EAAC,qGAAqG,EAC3G,KAAK,EAAC,IAAI,YAEV,uBAAc,IAAI,EAAC,sBAAsB,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,GAAgB,GACzE,IACL,IACF,GACF,EAGN,eAAK,KAAK,EAAC,WAAW,aACpB,iBAAQ,KAAK,EAAC,kGAAkG,YAC9G,uBAAc,IAAI,EAAC,eAAe,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,GAAgB,GAClE,EACT,iBAAQ,KAAK,EAAC,kGAAkG,YAC9G,uBAAc,IAAI,EAAC,eAAe,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,GAAgB,GAClE,EACT,iBAAQ,KAAK,EAAC,uDAAuD,YACnE,uBAAc,IAAI,EAAC,iBAAiB,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,GAAgB,GACpE,EACT,iBAAQ,KAAK,EAAC,kGAAkG,YAC9G,uBAAc,IAAI,EAAC,kBAAkB,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,GAAgB,GACrE,IACL,EAGN,cAAK,KAAK,EAAC,qCAAqC,YAE9C,cAAK,KAAK,EAAC,YAAY,YACrB,KAAC,iBAAiB,IAChB,EAAE,EAAC,UAAU,EACb,SAAS,EAAC,yBAAyB,GACnC,GACE,GACF,IACF,EAGN,KAAC,iBAAiB,IAAC,EAAE,EAAC,cAAc,EAAC,WAAW,EAAE,WAAW,GAAI,IAC7D,GACC,CACV,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"Code.js","sourceRoot":"","sources":["../../src/pages/Code.tsx"],"names":[],"mappings":";AAAA,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAOvE,MAAM,UAAU,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,EAAE,gBAAgB,EAAiB;IAC1E,OAAO,CACL,KAAC,MAAM,IAAC,KAAK,EAAC,aAAa,YACzB,eAAK,EAAE,EAAC,gBAAgB,EAAC,KAAK,EAAC,4BAA4B,aAEzD,eAAK,EAAE,EAAC,cAAc,EAAC,KAAK,EAAC,6FAA6F,aAExH,cAAK,KAAK,EAAC,+BAA+B,YACxC,YAAG,IAAI,EAAC,GAAG,EAAC,KAAK,EAAC,yCAAyC,oCAAmB,GAC1E,EAGN,cAAK,KAAK,EAAC,4CAA4C,YACrD,eAAK,KAAK,EAAC,yBAAyB,aAClC,iBACE,EAAE,EAAC,+BAA+B,EAClC,KAAK,EAAC,uGAAuG,EAC7G,KAAK,EAAC,cAAc,YAEpB,uBAAc,EAAE,EAAC,gCAAgC,EAAC,IAAI,EAAC,mBAAmB,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,GAAgB,GAC1G,EACT,iBACE,IAAI,EAAC,QAAQ,EACb,EAAE,EAAC,0BAA0B,EAC7B,KAAK,EAAC,mGAAmG,EACzG,KAAK,EAAC,QAAQ,YAEd,uBAAc,IAAI,EAAC,gBAAgB,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,GAAgB,GACnE,EACT,eAAK,KAAK,EAAC,qJAAqJ,aAC9J,uBAAc,IAAI,EAAC,cAAc,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,KAAK,EAAC,qBAAqB,GAAgB,EACpG,gBAAM,KAAK,EAAC,wBAAwB,2BAAY,WAAW,SAAS,EACpE,gBACE,EAAE,EAAC,wBAAwB,EAC3B,IAAI,EAAC,MAAM,EACX,WAAW,EAAC,MAAM,EAClB,YAAY,EAAC,EAAE,EACf,KAAK,EAAC,sEAAsE,GAC5E,EACF,iBACE,IAAI,EAAC,QAAQ,EACb,EAAE,EAAC,uBAAuB,EAC1B,KAAK,EAAC,qGAAqG,EAC3G,KAAK,EAAC,IAAI,YAEV,uBAAc,IAAI,EAAC,sBAAsB,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,GAAgB,GACzE,IACL,IACF,GACF,EAGN,eAAK,KAAK,EAAC,WAAW,aACpB,iBAAQ,KAAK,EAAC,kGAAkG,YAC9G,uBAAc,IAAI,EAAC,eAAe,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,GAAgB,GAClE,EACT,iBAAQ,KAAK,EAAC,kGAAkG,YAC9G,uBAAc,IAAI,EAAC,eAAe,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,GAAgB,GAClE,EACT,iBAAQ,KAAK,EAAC,uDAAuD,YACnE,uBAAc,IAAI,EAAC,iBAAiB,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,GAAgB,GACpE,EACT,iBAAQ,KAAK,EAAC,kGAAkG,YAC9G,uBAAc,IAAI,EAAC,kBAAkB,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,GAAgB,GACrE,IACL,EAGN,cAAK,KAAK,EAAC,qCAAqC,YAE9C,cAAK,KAAK,EAAC,YAAY,YACrB,KAAC,iBAAiB,IAChB,EAAE,EAAC,UAAU,EACb,SAAS,EAAC,yBAAyB,GACnC,GACE,GACF,IACF,EAGN,KAAC,iBAAiB,IAAC,EAAE,EAAC,cAAc,EAAC,WAAW,EAAE,WAAW,GAAI,IAC7D,GACC,CACV,CAAC;AACJ,CAAC"}
@@ -5,8 +5,10 @@ class SimpleLivePreviewManager {
5
5
 
6
6
  // DOM elements
7
7
  this.container = document.getElementById(id);
8
- this.hideClaudeBtn = document.getElementById(`${id}-hide-claude-btn`);
9
- this.hideClaudeIcon = document.getElementById(`${id}-hide-claude-icon`);
8
+ this.hideSidebarBtn = document.getElementById(`${id}-hide-sidebar-btn`);
9
+ this.hideSidebarIcon = document.getElementById(`${id}-hide-sidebar-icon`);
10
+ this.floatingHideSidebarBtn = document.getElementById(`${id}-floating-hide-sidebar-btn`);
11
+ this.floatingHideSidebarIcon = document.getElementById(`${id}-floating-hide-sidebar-icon`);
10
12
  this.refreshBtn = document.getElementById(`${id}-refresh-btn`);
11
13
  this.urlInput = document.getElementById(`${id}-url-input`);
12
14
  this.loadBtn = document.getElementById(`${id}-load-btn`);
@@ -16,7 +18,7 @@ class SimpleLivePreviewManager {
16
18
  this.previewPort = this.iframe?.getAttribute('data-preview-port') || 5173;
17
19
 
18
20
  // State
19
- this.isClaudeHidden = false;
21
+ this.isSidebarHidden = false;
20
22
 
21
23
  this.init();
22
24
  }
@@ -35,8 +37,9 @@ class SimpleLivePreviewManager {
35
37
  }
36
38
 
37
39
  setupEventListeners() {
38
- // Hide Claude toggle
39
- this.hideClaudeBtn?.addEventListener('click', () => this.toggleClaudeVisibility());
40
+ // Hide sidebar toggle (both sidebar and floating button)
41
+ this.hideSidebarBtn?.addEventListener('click', () => this.toggleSidebarVisibility());
42
+ this.floatingHideSidebarBtn?.addEventListener('click', () => this.toggleSidebarVisibility());
40
43
 
41
44
  // Refresh button
42
45
  this.refreshBtn?.addEventListener('click', () => this.refreshIframe());
@@ -66,10 +69,10 @@ class SimpleLivePreviewManager {
66
69
  e.preventDefault();
67
70
  this.refreshIframe();
68
71
  }
69
- // Cmd/Ctrl + B to toggle Claude panel
72
+ // Cmd/Ctrl + B to toggle sidebar panel
70
73
  if ((e.metaKey || e.ctrlKey) && e.key === 'b') {
71
74
  e.preventDefault();
72
- this.toggleClaudeVisibility();
75
+ this.toggleSidebarVisibility();
73
76
  }
74
77
  });
75
78
 
@@ -126,38 +129,50 @@ class SimpleLivePreviewManager {
126
129
  }
127
130
  }
128
131
 
129
- toggleClaudeVisibility() {
130
- this.isClaudeHidden = !this.isClaudeHidden;
132
+ toggleSidebarVisibility() {
133
+ this.isSidebarHidden = !this.isSidebarHidden;
131
134
 
132
- const terminalPane = document.getElementById('sidebar-pane');
135
+ const sidebarPane = document.getElementById('sidebar-pane');
133
136
  const previewPane = document.getElementById(this.id);
134
137
 
135
- if (terminalPane && previewPane) {
136
- if (this.isClaudeHidden) {
137
- // Hide terminal pane and make preview full width
138
- terminalPane.style.display = 'none';
138
+ if (sidebarPane && previewPane) {
139
+ if (this.isSidebarHidden) {
140
+ // Hide sidebar pane and make preview full width
141
+ sidebarPane.style.display = 'none';
139
142
  previewPane.classList.remove('flex-1');
140
143
  previewPane.classList.add('w-full');
141
144
 
142
- // Update button icon and title
143
- if (this.hideClaudeIcon) {
144
- this.hideClaudeIcon.setAttribute('icon', 'ph:sidebar-simple-fill');
145
+ // Update button icons and titles
146
+ if (this.hideSidebarIcon) {
147
+ this.hideSidebarIcon.setAttribute('icon', 'ph:sidebar-simple-fill');
145
148
  }
146
- if (this.hideClaudeBtn) {
147
- this.hideClaudeBtn.setAttribute('title', 'Show Terminal');
149
+ if (this.floatingHideSidebarIcon) {
150
+ this.floatingHideSidebarIcon.setAttribute('icon', 'ph:sidebar-simple-fill');
151
+ }
152
+ if (this.hideSidebarBtn) {
153
+ this.hideSidebarBtn.setAttribute('title', 'Show Sidebar');
154
+ }
155
+ if (this.floatingHideSidebarBtn) {
156
+ this.floatingHideSidebarBtn.setAttribute('title', 'Show Sidebar');
148
157
  }
149
158
  } else {
150
- // Show terminal pane and restore original widths
151
- terminalPane.style.display = '';
159
+ // Show sidebar pane and restore original widths
160
+ sidebarPane.style.display = '';
152
161
  previewPane.classList.remove('w-full');
153
162
  previewPane.classList.add('flex-1');
154
163
 
155
- // Update button icon and title
156
- if (this.hideClaudeIcon) {
157
- this.hideClaudeIcon.setAttribute('icon', 'ph:sidebar-simple');
164
+ // Update button icons and titles
165
+ if (this.hideSidebarIcon) {
166
+ this.hideSidebarIcon.setAttribute('icon', 'ph:sidebar-simple');
167
+ }
168
+ if (this.floatingHideSidebarIcon) {
169
+ this.floatingHideSidebarIcon.setAttribute('icon', 'ph:sidebar-simple');
170
+ }
171
+ if (this.hideSidebarBtn) {
172
+ this.hideSidebarBtn.setAttribute('title', 'Hide Sidebar');
158
173
  }
159
- if (this.hideClaudeBtn) {
160
- this.hideClaudeBtn.setAttribute('title', 'Hide Terminal');
174
+ if (this.floatingHideSidebarBtn) {
175
+ this.floatingHideSidebarBtn.setAttribute('title', 'Hide Sidebar');
161
176
  }
162
177
  }
163
178
  }
@@ -1109,6 +1109,10 @@ video {
1109
1109
  position: relative;
1110
1110
  }
1111
1111
 
1112
+ .z-50 {
1113
+ z-index: 50;
1114
+ }
1115
+
1112
1116
  .mb-4 {
1113
1117
  margin-bottom: 1rem;
1114
1118
  }
@@ -1249,10 +1253,6 @@ video {
1249
1253
  border-width: 1px;
1250
1254
  }
1251
1255
 
1252
- .border-0 {
1253
- border-width: 0px;
1254
- }
1255
-
1256
1256
  .border-2 {
1257
1257
  border-width: 2px;
1258
1258
  }
@@ -1270,6 +1270,16 @@ video {
1270
1270
  border-color: rgb(60 60 60 / var(--tw-border-opacity, 1));
1271
1271
  }
1272
1272
 
1273
+ .border-gray-300 {
1274
+ --tw-border-opacity: 1;
1275
+ border-color: rgb(209 213 219 / var(--tw-border-opacity, 1));
1276
+ }
1277
+
1278
+ .border-gray-400 {
1279
+ --tw-border-opacity: 1;
1280
+ border-color: rgb(156 163 175 / var(--tw-border-opacity, 1));
1281
+ }
1282
+
1273
1283
  .border-green-600 {
1274
1284
  --tw-border-opacity: 1;
1275
1285
  border-color: rgb(22 163 74 / var(--tw-border-opacity, 1));
@@ -1454,6 +1464,12 @@ video {
1454
1464
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1455
1465
  }
1456
1466
 
1467
+ .shadow-xl {
1468
+ --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
1469
+ --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);
1470
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1471
+ }
1472
+
1457
1473
  .filter {
1458
1474
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
1459
1475
  }
@@ -1489,6 +1505,11 @@ video {
1489
1505
  background-color: rgb(60 60 60 / var(--tw-bg-opacity, 1));
1490
1506
  }
1491
1507
 
1508
+ .hover\:bg-gray-50:hover {
1509
+ --tw-bg-opacity: 1;
1510
+ background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));
1511
+ }
1512
+
1492
1513
  .hover\:bg-gray-800:hover {
1493
1514
  --tw-bg-opacity: 1;
1494
1515
  background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1));
@@ -1504,6 +1525,12 @@ video {
1504
1525
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
1505
1526
  }
1506
1527
 
1528
+ .hover\:shadow-2xl:hover {
1529
+ --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);
1530
+ --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);
1531
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1532
+ }
1533
+
1507
1534
  .focus\:outline-none:focus {
1508
1535
  outline: 2px solid transparent;
1509
1536
  outline-offset: 2px;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "treesap",
3
- "version": "0.1.5",
3
+ "version": "0.1.6",
4
4
  "description": "AI Agent Framework",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -14,16 +14,26 @@ export function SimpleLivePreview({ id = "simple-preview", previewPort = 5173 }:
14
14
  <script type="module" src="/components/SimpleLivePreview.js"></script>
15
15
  </template>
16
16
 
17
- <div id={id} class="flex-1 h-full bg-white transition-all duration-300">
17
+ <div id={id} class="flex-1 h-full bg-white transition-all duration-300 p-2 relative overflow-hidden">
18
18
  {/* Iframe - Full Height */}
19
19
  <iframe
20
20
  id={`${id}-iframe`}
21
21
  src={defaultSrc}
22
- class="w-full h-full border-0 bg-white block"
22
+ class="w-full h-full border border-gray-300 bg-white block rounded-md"
23
23
  title="Live Preview"
24
24
  sandbox="allow-same-origin allow-scripts allow-forms allow-popups allow-top-navigation allow-downloads allow-modals allow-orientation-lock allow-pointer-lock allow-presentation allow-storage-access-by-user-activation"
25
25
  data-preview-port={previewPort}
26
26
  ></iframe>
27
+
28
+ {/* Floating Sidebar Toggle */}
29
+ <button
30
+ id={`${id}-floating-hide-sidebar-btn`}
31
+ class="absolute p-3 bg-white border-2 border-gray-400 rounded-lg shadow-xl hover:bg-gray-50 hover:shadow-2xl transition-all flex items-center justify-center z-50"
32
+ title="Toggle Sidebar"
33
+ style="position: absolute !important; z-index: 9999 !important; bottom: 16px; left: 16px;"
34
+ >
35
+ <iconify-icon id={`${id}-floating-hide-sidebar-icon`} icon="ph:sidebar-simple" width="20" height="20" class="text-gray-800"></iconify-icon>
36
+ </button>
27
37
  </div>
28
38
  </sapling-island>
29
39
  );
@@ -22,11 +22,11 @@ export function Code({ previewPort = 1234, workingDirectory }: TerminalProps) {
22
22
  <div class="p-3 border-b border-[#3c3c3c] bg-[#2d2d30]">
23
23
  <div class="flex items-center gap-2">
24
24
  <button
25
- id="live-preview-hide-claude-btn"
25
+ id="live-preview-hide-sidebar-btn"
26
26
  class="p-2 hover:bg-[#3c3c3c] rounded-md transition-colors flex items-center text-[#cccccc] hover:text-white"
27
27
  title="Hide Sidebar"
28
28
  >
29
- <iconify-icon id="live-preview-hide-claude-icon" icon="ph:sidebar-simple" width="16" height="16"></iconify-icon>
29
+ <iconify-icon id="live-preview-hide-sidebar-icon" icon="ph:sidebar-simple" width="16" height="16"></iconify-icon>
30
30
  </button>
31
31
  <button
32
32
  type="button"
@@ -5,8 +5,10 @@ class SimpleLivePreviewManager {
5
5
 
6
6
  // DOM elements
7
7
  this.container = document.getElementById(id);
8
- this.hideClaudeBtn = document.getElementById(`${id}-hide-claude-btn`);
9
- this.hideClaudeIcon = document.getElementById(`${id}-hide-claude-icon`);
8
+ this.hideSidebarBtn = document.getElementById(`${id}-hide-sidebar-btn`);
9
+ this.hideSidebarIcon = document.getElementById(`${id}-hide-sidebar-icon`);
10
+ this.floatingHideSidebarBtn = document.getElementById(`${id}-floating-hide-sidebar-btn`);
11
+ this.floatingHideSidebarIcon = document.getElementById(`${id}-floating-hide-sidebar-icon`);
10
12
  this.refreshBtn = document.getElementById(`${id}-refresh-btn`);
11
13
  this.urlInput = document.getElementById(`${id}-url-input`);
12
14
  this.loadBtn = document.getElementById(`${id}-load-btn`);
@@ -16,7 +18,7 @@ class SimpleLivePreviewManager {
16
18
  this.previewPort = this.iframe?.getAttribute('data-preview-port') || 5173;
17
19
 
18
20
  // State
19
- this.isClaudeHidden = false;
21
+ this.isSidebarHidden = false;
20
22
 
21
23
  this.init();
22
24
  }
@@ -35,8 +37,9 @@ class SimpleLivePreviewManager {
35
37
  }
36
38
 
37
39
  setupEventListeners() {
38
- // Hide Claude toggle
39
- this.hideClaudeBtn?.addEventListener('click', () => this.toggleClaudeVisibility());
40
+ // Hide sidebar toggle (both sidebar and floating button)
41
+ this.hideSidebarBtn?.addEventListener('click', () => this.toggleSidebarVisibility());
42
+ this.floatingHideSidebarBtn?.addEventListener('click', () => this.toggleSidebarVisibility());
40
43
 
41
44
  // Refresh button
42
45
  this.refreshBtn?.addEventListener('click', () => this.refreshIframe());
@@ -66,10 +69,10 @@ class SimpleLivePreviewManager {
66
69
  e.preventDefault();
67
70
  this.refreshIframe();
68
71
  }
69
- // Cmd/Ctrl + B to toggle Claude panel
72
+ // Cmd/Ctrl + B to toggle sidebar panel
70
73
  if ((e.metaKey || e.ctrlKey) && e.key === 'b') {
71
74
  e.preventDefault();
72
- this.toggleClaudeVisibility();
75
+ this.toggleSidebarVisibility();
73
76
  }
74
77
  });
75
78
 
@@ -126,38 +129,50 @@ class SimpleLivePreviewManager {
126
129
  }
127
130
  }
128
131
 
129
- toggleClaudeVisibility() {
130
- this.isClaudeHidden = !this.isClaudeHidden;
132
+ toggleSidebarVisibility() {
133
+ this.isSidebarHidden = !this.isSidebarHidden;
131
134
 
132
- const terminalPane = document.getElementById('sidebar-pane');
135
+ const sidebarPane = document.getElementById('sidebar-pane');
133
136
  const previewPane = document.getElementById(this.id);
134
137
 
135
- if (terminalPane && previewPane) {
136
- if (this.isClaudeHidden) {
137
- // Hide terminal pane and make preview full width
138
- terminalPane.style.display = 'none';
138
+ if (sidebarPane && previewPane) {
139
+ if (this.isSidebarHidden) {
140
+ // Hide sidebar pane and make preview full width
141
+ sidebarPane.style.display = 'none';
139
142
  previewPane.classList.remove('flex-1');
140
143
  previewPane.classList.add('w-full');
141
144
 
142
- // Update button icon and title
143
- if (this.hideClaudeIcon) {
144
- this.hideClaudeIcon.setAttribute('icon', 'ph:sidebar-simple-fill');
145
+ // Update button icons and titles
146
+ if (this.hideSidebarIcon) {
147
+ this.hideSidebarIcon.setAttribute('icon', 'ph:sidebar-simple-fill');
145
148
  }
146
- if (this.hideClaudeBtn) {
147
- this.hideClaudeBtn.setAttribute('title', 'Show Terminal');
149
+ if (this.floatingHideSidebarIcon) {
150
+ this.floatingHideSidebarIcon.setAttribute('icon', 'ph:sidebar-simple-fill');
151
+ }
152
+ if (this.hideSidebarBtn) {
153
+ this.hideSidebarBtn.setAttribute('title', 'Show Sidebar');
154
+ }
155
+ if (this.floatingHideSidebarBtn) {
156
+ this.floatingHideSidebarBtn.setAttribute('title', 'Show Sidebar');
148
157
  }
149
158
  } else {
150
- // Show terminal pane and restore original widths
151
- terminalPane.style.display = '';
159
+ // Show sidebar pane and restore original widths
160
+ sidebarPane.style.display = '';
152
161
  previewPane.classList.remove('w-full');
153
162
  previewPane.classList.add('flex-1');
154
163
 
155
- // Update button icon and title
156
- if (this.hideClaudeIcon) {
157
- this.hideClaudeIcon.setAttribute('icon', 'ph:sidebar-simple');
164
+ // Update button icons and titles
165
+ if (this.hideSidebarIcon) {
166
+ this.hideSidebarIcon.setAttribute('icon', 'ph:sidebar-simple');
167
+ }
168
+ if (this.floatingHideSidebarIcon) {
169
+ this.floatingHideSidebarIcon.setAttribute('icon', 'ph:sidebar-simple');
170
+ }
171
+ if (this.hideSidebarBtn) {
172
+ this.hideSidebarBtn.setAttribute('title', 'Hide Sidebar');
158
173
  }
159
- if (this.hideClaudeBtn) {
160
- this.hideClaudeBtn.setAttribute('title', 'Hide Terminal');
174
+ if (this.floatingHideSidebarBtn) {
175
+ this.floatingHideSidebarBtn.setAttribute('title', 'Hide Sidebar');
161
176
  }
162
177
  }
163
178
  }
@@ -1109,6 +1109,10 @@ video {
1109
1109
  position: relative;
1110
1110
  }
1111
1111
 
1112
+ .z-50 {
1113
+ z-index: 50;
1114
+ }
1115
+
1112
1116
  .mb-4 {
1113
1117
  margin-bottom: 1rem;
1114
1118
  }
@@ -1249,10 +1253,6 @@ video {
1249
1253
  border-width: 1px;
1250
1254
  }
1251
1255
 
1252
- .border-0 {
1253
- border-width: 0px;
1254
- }
1255
-
1256
1256
  .border-2 {
1257
1257
  border-width: 2px;
1258
1258
  }
@@ -1270,6 +1270,16 @@ video {
1270
1270
  border-color: rgb(60 60 60 / var(--tw-border-opacity, 1));
1271
1271
  }
1272
1272
 
1273
+ .border-gray-300 {
1274
+ --tw-border-opacity: 1;
1275
+ border-color: rgb(209 213 219 / var(--tw-border-opacity, 1));
1276
+ }
1277
+
1278
+ .border-gray-400 {
1279
+ --tw-border-opacity: 1;
1280
+ border-color: rgb(156 163 175 / var(--tw-border-opacity, 1));
1281
+ }
1282
+
1273
1283
  .border-green-600 {
1274
1284
  --tw-border-opacity: 1;
1275
1285
  border-color: rgb(22 163 74 / var(--tw-border-opacity, 1));
@@ -1454,6 +1464,12 @@ video {
1454
1464
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1455
1465
  }
1456
1466
 
1467
+ .shadow-xl {
1468
+ --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
1469
+ --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);
1470
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1471
+ }
1472
+
1457
1473
  .filter {
1458
1474
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
1459
1475
  }
@@ -1489,6 +1505,11 @@ video {
1489
1505
  background-color: rgb(60 60 60 / var(--tw-bg-opacity, 1));
1490
1506
  }
1491
1507
 
1508
+ .hover\:bg-gray-50:hover {
1509
+ --tw-bg-opacity: 1;
1510
+ background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));
1511
+ }
1512
+
1492
1513
  .hover\:bg-gray-800:hover {
1493
1514
  --tw-bg-opacity: 1;
1494
1515
  background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1));
@@ -1504,6 +1525,12 @@ video {
1504
1525
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
1505
1526
  }
1506
1527
 
1528
+ .hover\:shadow-2xl:hover {
1529
+ --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);
1530
+ --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);
1531
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1532
+ }
1533
+
1507
1534
  .focus\:outline-none:focus {
1508
1535
  outline: 2px solid transparent;
1509
1536
  outline-offset: 2px;