@elixpo/lixsketch 5.5.9 → 5.5.11
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.
- package/dist/react/{AIRenderer-46WIFF2B.js → AIRenderer-PWWLWI6U.js} +84 -16
- package/dist/react/AIRenderer-PWWLWI6U.js.map +7 -0
- package/dist/react/{CopyPaste-4CKJRHJ3.js → CopyPaste-SA72NDFN.js} +2 -2
- package/dist/react/{EventDispatcher-AD2BPPPS.js → EventDispatcher-BZQRHROG.js} +2 -2
- package/dist/react/{MermaidFlowchartRenderer-A26B2SM3.js → MermaidFlowchartRenderer-4YEMAYQC.js} +18 -3
- package/dist/react/MermaidFlowchartRenderer-4YEMAYQC.js.map +7 -0
- package/dist/react/{MermaidSequenceRenderer-OF4JK77D.js → MermaidSequenceRenderer-KCUHO7UI.js} +106 -4
- package/dist/react/MermaidSequenceRenderer-KCUHO7UI.js.map +7 -0
- package/dist/react/MermaidStructuredRenderer-GGOOGON5.js +365 -0
- package/dist/react/MermaidStructuredRenderer-GGOOGON5.js.map +7 -0
- package/dist/react/{SceneSerializer-4U4B24JM.js → SceneSerializer-ZPHV6IUP.js} +2 -2
- package/dist/react/{SketchEngine-XWWTA2MT.js → SketchEngine-NPF2XN6Z.js} +7 -7
- package/dist/react/TextShape-U6ZZKB35.js +8 -0
- package/dist/react/{chunk-QXFBG7OM.js → chunk-42O6W7DF.js} +18 -1
- package/dist/react/chunk-42O6W7DF.js.map +7 -0
- package/dist/react/{chunk-YVCENC7J.js → chunk-5QIT2WBE.js} +19 -116
- package/dist/react/chunk-5QIT2WBE.js.map +7 -0
- package/dist/react/index.js +34 -100
- package/dist/react/index.js.map +3 -3
- package/dist/react/{textTool-KY4AYUTC.js → textTool-HY5NMM7H.js} +2 -2
- package/package.json +1 -1
- package/src/core/AIRenderer.js +95 -11
- package/src/core/MermaidFlowchartRenderer.js +18 -3
- package/src/core/MermaidSequenceRenderer.js +116 -7
- package/src/core/MermaidStructuredRenderer.js +363 -0
- package/src/react/LixSketchCanvas.jsx +1 -1
- package/src/react/components/modals/LixScriptModal.jsx +22 -96
- package/src/react/components/sidebars/TextSidebar.jsx +1 -1
- package/src/react/store/useUIStore.js +1 -1
- package/src/shapes/TextShape.js +19 -0
- package/src/tools/textTool.js +23 -157
- package/dist/react/AIRenderer-46WIFF2B.js.map +0 -7
- package/dist/react/MermaidFlowchartRenderer-A26B2SM3.js.map +0 -7
- package/dist/react/MermaidSequenceRenderer-OF4JK77D.js.map +0 -7
- package/dist/react/TextShape-54ZJ66E3.js +0 -8
- package/dist/react/chunk-QXFBG7OM.js.map +0 -7
- package/dist/react/chunk-YVCENC7J.js.map +0 -7
- /package/dist/react/{CopyPaste-4CKJRHJ3.js.map → CopyPaste-SA72NDFN.js.map} +0 -0
- /package/dist/react/{EventDispatcher-AD2BPPPS.js.map → EventDispatcher-BZQRHROG.js.map} +0 -0
- /package/dist/react/{SceneSerializer-4U4B24JM.js.map → SceneSerializer-ZPHV6IUP.js.map} +0 -0
- /package/dist/react/{SketchEngine-XWWTA2MT.js.map → SketchEngine-NPF2XN6Z.js.map} +0 -0
- /package/dist/react/{TextShape-54ZJ66E3.js.map → TextShape-U6ZZKB35.js.map} +0 -0
- /package/dist/react/{textTool-KY4AYUTC.js.map → textTool-HY5NMM7H.js.map} +0 -0
package/dist/react/index.js
CHANGED
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
} from "./chunk-DNAG7ML6.js";
|
|
10
10
|
|
|
11
11
|
// src/react/LixSketchCanvas.jsx
|
|
12
|
-
import { useCallback as
|
|
12
|
+
import { useCallback as useCallback16, useEffect as useEffect15, useRef as useRef11, useState as useState20 } from "react";
|
|
13
13
|
|
|
14
14
|
// src/react/store/useSketchStore.js
|
|
15
15
|
import { create } from "zustand";
|
|
@@ -331,7 +331,7 @@ var useUIStore = create2((set, get) => ({
|
|
|
331
331
|
setCanvasLoading: (loading, message) => set({ canvasLoading: loading, canvasLoadingMessage: message || "Loading canvas..." }),
|
|
332
332
|
// --- Theme ---
|
|
333
333
|
// Issue #38 bug #1: light by default. Dark stays available via toggle.
|
|
334
|
-
theme: "
|
|
334
|
+
theme: "light",
|
|
335
335
|
setTheme: (newTheme) => {
|
|
336
336
|
const prev = get().theme;
|
|
337
337
|
const resolve = (t) => t === "system" ? window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light" : t;
|
|
@@ -427,7 +427,7 @@ function useSketchEngine(svgRef, ready = true) {
|
|
|
427
427
|
setZoom: (zoom) => useSketchStore_default.setState({ zoom }),
|
|
428
428
|
getState: () => useSketchStore_default.getState()
|
|
429
429
|
};
|
|
430
|
-
const { SketchEngine } = await import("./SketchEngine-
|
|
430
|
+
const { SketchEngine } = await import("./SketchEngine-NPF2XN6Z.js");
|
|
431
431
|
if (cancelled) return;
|
|
432
432
|
const engine = new SketchEngine(svgRef.current);
|
|
433
433
|
await engine.init();
|
|
@@ -2161,7 +2161,7 @@ function TextSidebar() {
|
|
|
2161
2161
|
const activeTool = useSketchStore_default((s) => s.activeTool);
|
|
2162
2162
|
const selectedShapeSidebar = useSketchStore_default((s) => s.selectedShapeSidebar);
|
|
2163
2163
|
const [textColor, setTextColor] = useState9("#fff");
|
|
2164
|
-
const [fontSize, setFontSize] = useState9("
|
|
2164
|
+
const [fontSize, setFontSize] = useState9("S");
|
|
2165
2165
|
const [font, setFont] = useState9("lixFont");
|
|
2166
2166
|
const [codeMode, setCodeMode] = useState9(false);
|
|
2167
2167
|
const [language, setLanguage] = useState9("javascript");
|
|
@@ -4500,73 +4500,33 @@ function HelpModal() {
|
|
|
4500
4500
|
}
|
|
4501
4501
|
|
|
4502
4502
|
// src/react/components/modals/LixScriptModal.jsx
|
|
4503
|
-
import {
|
|
4503
|
+
import { useEffect as useEffect13 } from "react";
|
|
4504
4504
|
import { jsx as jsx24, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
4505
|
-
var SAMPLE = `# LixScript \u2014 paste shapes / arrows in a simple DSL.
|
|
4506
|
-
# Hit Cmd/Ctrl+Enter to render onto the canvas.
|
|
4507
|
-
|
|
4508
|
-
rect A "Idea" 100 100 220 90
|
|
4509
|
-
rect B "Plan" 400 100 220 90
|
|
4510
|
-
rect C "Ship" 700 100 220 90
|
|
4511
|
-
|
|
4512
|
-
arrow A -> B
|
|
4513
|
-
arrow B -> C
|
|
4514
|
-
`;
|
|
4515
4505
|
function LixScriptModal() {
|
|
4516
|
-
const open = useUIStore_default((
|
|
4517
|
-
const toggle = useUIStore_default((
|
|
4518
|
-
const [source, setSource] = useState19(SAMPLE);
|
|
4519
|
-
const [busy, setBusy] = useState19(false);
|
|
4520
|
-
const [status, setStatus] = useState19(null);
|
|
4521
|
-
const taRef = useRef10(null);
|
|
4506
|
+
const open = useUIStore_default((state) => state.aiModalOpen);
|
|
4507
|
+
const toggle = useUIStore_default((state) => state.toggleAIModal);
|
|
4522
4508
|
useEffect13(() => {
|
|
4523
4509
|
if (!open) return;
|
|
4524
|
-
|
|
4525
|
-
|
|
4526
|
-
if (e.key === "Escape") toggle();
|
|
4510
|
+
const onKeyDown = (event) => {
|
|
4511
|
+
if (event.key === "Escape") toggle();
|
|
4527
4512
|
};
|
|
4528
|
-
document.addEventListener("keydown",
|
|
4529
|
-
return () => document.removeEventListener("keydown",
|
|
4513
|
+
document.addEventListener("keydown", onKeyDown);
|
|
4514
|
+
return () => document.removeEventListener("keydown", onKeyDown);
|
|
4530
4515
|
}, [open, toggle]);
|
|
4531
|
-
const render = useCallback15(async () => {
|
|
4532
|
-
if (busy) return;
|
|
4533
|
-
setBusy(true);
|
|
4534
|
-
setStatus(null);
|
|
4535
|
-
try {
|
|
4536
|
-
const mod = await import("./LixScriptParser-JYWJX375.js");
|
|
4537
|
-
const parsed = mod.parseLixScript(source);
|
|
4538
|
-
const resolved = mod.resolveShapeRefs ? mod.resolveShapeRefs(parsed) : parsed;
|
|
4539
|
-
mod.renderLixScript(resolved);
|
|
4540
|
-
setStatus({ tone: "success", message: `Rendered ${Array.isArray(resolved) ? resolved.length : "?"} elements.` });
|
|
4541
|
-
setTimeout(() => {
|
|
4542
|
-
toggle();
|
|
4543
|
-
}, 700);
|
|
4544
|
-
} catch (err) {
|
|
4545
|
-
console.warn("[LixScriptModal] parse failed:", err);
|
|
4546
|
-
setStatus({ tone: "error", message: err?.message || "Parse failed." });
|
|
4547
|
-
} finally {
|
|
4548
|
-
setBusy(false);
|
|
4549
|
-
}
|
|
4550
|
-
}, [source, busy, toggle]);
|
|
4551
|
-
const handleKeyDown = useCallback15((e) => {
|
|
4552
|
-
if ((e.ctrlKey || e.metaKey) && e.key === "Enter") {
|
|
4553
|
-
e.preventDefault();
|
|
4554
|
-
render();
|
|
4555
|
-
}
|
|
4556
|
-
}, [render]);
|
|
4557
4516
|
if (!open) return null;
|
|
4558
4517
|
return /* @__PURE__ */ jsx24(
|
|
4559
4518
|
"div",
|
|
4560
4519
|
{
|
|
4561
|
-
className: "fixed inset-0 z-[1100] flex items-center justify-center bg-black/
|
|
4520
|
+
className: "fixed inset-0 z-[1100] flex items-center justify-center bg-black/40 backdrop-blur-sm font-[lixFont]",
|
|
4562
4521
|
onClick: toggle,
|
|
4563
4522
|
role: "dialog",
|
|
4564
4523
|
"aria-modal": "true",
|
|
4524
|
+
"aria-labelledby": "lixscript-coming-soon-title",
|
|
4565
4525
|
children: /* @__PURE__ */ jsxs24(
|
|
4566
4526
|
"div",
|
|
4567
4527
|
{
|
|
4568
|
-
onClick: (
|
|
4569
|
-
className: "relative w-[
|
|
4528
|
+
onClick: (event) => event.stopPropagation(),
|
|
4529
|
+
className: "relative w-[520px] max-w-[94vw] bg-surface border border-border-light rounded-2xl px-8 py-10 shadow-2xl text-center",
|
|
4570
4530
|
children: [
|
|
4571
4531
|
/* @__PURE__ */ jsx24(
|
|
4572
4532
|
"button",
|
|
@@ -4577,36 +4537,10 @@ function LixScriptModal() {
|
|
|
4577
4537
|
children: /* @__PURE__ */ jsx24("i", { className: "bx bx-x text-lg" })
|
|
4578
4538
|
}
|
|
4579
4539
|
),
|
|
4580
|
-
/* @__PURE__ */
|
|
4581
|
-
|
|
4582
|
-
|
|
4583
|
-
|
|
4584
|
-
/* @__PURE__ */ jsx24("p", { className: "text-text-dim text-[11px]", children: "Type shapes + arrows, render directly. No AI involved." })
|
|
4585
|
-
] })
|
|
4586
|
-
] }),
|
|
4587
|
-
/* @__PURE__ */ jsx24(
|
|
4588
|
-
"textarea",
|
|
4589
|
-
{
|
|
4590
|
-
ref: taRef,
|
|
4591
|
-
value: source,
|
|
4592
|
-
onChange: (e) => setSource(e.target.value),
|
|
4593
|
-
onKeyDown: handleKeyDown,
|
|
4594
|
-
spellCheck: false,
|
|
4595
|
-
className: "w-full h-[260px] resize-none bg-surface-card border border-border-light rounded-lg px-3 py-2 text-[12px] text-text-primary font-[lixCode] outline-none focus:border-accent-blue/50"
|
|
4596
|
-
}
|
|
4597
|
-
),
|
|
4598
|
-
/* @__PURE__ */ jsxs24("div", { className: "flex items-center justify-between", children: [
|
|
4599
|
-
status ? /* @__PURE__ */ jsx24("span", { className: `text-[11px] ${status.tone === "error" ? "text-red-400" : "text-green-400"}`, children: status.message }) : /* @__PURE__ */ jsx24("span", { className: "text-text-dim text-[11px]", children: "Cmd/Ctrl+Enter to render \xB7 Esc to close" }),
|
|
4600
|
-
/* @__PURE__ */ jsx24(
|
|
4601
|
-
"button",
|
|
4602
|
-
{
|
|
4603
|
-
onClick: render,
|
|
4604
|
-
disabled: busy,
|
|
4605
|
-
className: "px-3 py-1.5 rounded-lg bg-accent-blue text-text-primary text-[12px] font-medium hover:bg-accent-blue-hover transition-colors disabled:opacity-50 disabled:pointer-events-none",
|
|
4606
|
-
children: busy ? "Rendering\u2026" : "Render"
|
|
4607
|
-
}
|
|
4608
|
-
)
|
|
4609
|
-
] })
|
|
4540
|
+
/* @__PURE__ */ jsx24("div", { className: "mx-auto mb-5 w-12 h-12 rounded-xl bg-accent-blue/10 border border-accent-blue/25 flex items-center justify-center", children: /* @__PURE__ */ jsx24("i", { className: "bx bx-plug text-2xl text-accent-blue" }) }),
|
|
4541
|
+
/* @__PURE__ */ jsx24("span", { className: "inline-flex px-2.5 py-1 rounded-full bg-[#a97852]/15 text-[#8f6244] text-[10px] font-semibold uppercase tracking-wider", children: "Coming soon" }),
|
|
4542
|
+
/* @__PURE__ */ jsx24("h2", { id: "lixscript-coming-soon-title", className: "mt-4 text-text-primary text-xl font-medium", children: "LixScript MCP" }),
|
|
4543
|
+
/* @__PURE__ */ jsx24("p", { className: "mt-2 text-text-muted text-sm leading-relaxed", children: "LixScript is being prepared as the programmable MCP interface for LixSketch. This workspace panel will become available with the supported platform integration." })
|
|
4610
4544
|
]
|
|
4611
4545
|
}
|
|
4612
4546
|
)
|
|
@@ -4615,9 +4549,9 @@ function LixScriptModal() {
|
|
|
4615
4549
|
}
|
|
4616
4550
|
|
|
4617
4551
|
// src/react/components/modals/GraphModal.jsx
|
|
4618
|
-
import { useCallback as
|
|
4552
|
+
import { useCallback as useCallback15, useEffect as useEffect14, useRef as useRef10, useState as useState19 } from "react";
|
|
4619
4553
|
import { jsx as jsx25, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
4620
|
-
var
|
|
4554
|
+
var SAMPLE = `# One equation per line. Comments start with #.
|
|
4621
4555
|
# Hit Cmd/Ctrl+Enter to render onto the canvas.
|
|
4622
4556
|
|
|
4623
4557
|
y = x^2
|
|
@@ -4631,11 +4565,11 @@ function parseEquations(text) {
|
|
|
4631
4565
|
function GraphModal() {
|
|
4632
4566
|
const open = useUIStore_default((s) => s.graphModalOpen);
|
|
4633
4567
|
const toggle = useUIStore_default((s) => s.toggleGraphModal);
|
|
4634
|
-
const [source, setSource] =
|
|
4635
|
-
const [settings, setSettings] =
|
|
4636
|
-
const [busy, setBusy] =
|
|
4637
|
-
const [status, setStatus] =
|
|
4638
|
-
const taRef =
|
|
4568
|
+
const [source, setSource] = useState19(SAMPLE);
|
|
4569
|
+
const [settings, setSettings] = useState19(DEFAULT_SETTINGS);
|
|
4570
|
+
const [busy, setBusy] = useState19(false);
|
|
4571
|
+
const [status, setStatus] = useState19(null);
|
|
4572
|
+
const taRef = useRef10(null);
|
|
4639
4573
|
useEffect14(() => {
|
|
4640
4574
|
if (!open) return;
|
|
4641
4575
|
requestAnimationFrame(() => taRef.current?.focus());
|
|
@@ -4645,7 +4579,7 @@ function GraphModal() {
|
|
|
4645
4579
|
document.addEventListener("keydown", onKey);
|
|
4646
4580
|
return () => document.removeEventListener("keydown", onKey);
|
|
4647
4581
|
}, [open, toggle]);
|
|
4648
|
-
const render =
|
|
4582
|
+
const render = useCallback15(async () => {
|
|
4649
4583
|
if (busy) return;
|
|
4650
4584
|
setBusy(true);
|
|
4651
4585
|
setStatus(null);
|
|
@@ -4677,7 +4611,7 @@ function GraphModal() {
|
|
|
4677
4611
|
setBusy(false);
|
|
4678
4612
|
}
|
|
4679
4613
|
}, [source, settings, busy, toggle]);
|
|
4680
|
-
const handleKeyDown =
|
|
4614
|
+
const handleKeyDown = useCallback15((e) => {
|
|
4681
4615
|
if ((e.ctrlKey || e.metaKey) && e.key === "Enter") {
|
|
4682
4616
|
e.preventDefault();
|
|
4683
4617
|
render();
|
|
@@ -4803,7 +4737,7 @@ var _saveScene = null;
|
|
|
4803
4737
|
var _loadScene = null;
|
|
4804
4738
|
async function ensureSceneSerializer() {
|
|
4805
4739
|
if (_saveScene && _loadScene) return;
|
|
4806
|
-
const m = await import("./SceneSerializer-
|
|
4740
|
+
const m = await import("./SceneSerializer-ZPHV6IUP.js");
|
|
4807
4741
|
_saveScene = m.saveScene;
|
|
4808
4742
|
_loadScene = m.loadScene;
|
|
4809
4743
|
}
|
|
@@ -4816,10 +4750,10 @@ function LixSketchCanvas({
|
|
|
4816
4750
|
className = "",
|
|
4817
4751
|
style = null
|
|
4818
4752
|
}) {
|
|
4819
|
-
const wrapperRef =
|
|
4820
|
-
const lastSceneJsonRef =
|
|
4821
|
-
const debounceRef =
|
|
4822
|
-
const [bootstrapped, setBootstrapped] =
|
|
4753
|
+
const wrapperRef = useRef11(null);
|
|
4754
|
+
const lastSceneJsonRef = useRef11("");
|
|
4755
|
+
const debounceRef = useRef11(null);
|
|
4756
|
+
const [bootstrapped, setBootstrapped] = useState20(false);
|
|
4823
4757
|
useEffect15(() => {
|
|
4824
4758
|
installImageUploadBridge(onUploadImage);
|
|
4825
4759
|
}, [onUploadImage]);
|
|
@@ -4978,7 +4912,7 @@ function LixSketchCanvas({
|
|
|
4978
4912
|
"button",
|
|
4979
4913
|
{
|
|
4980
4914
|
type: "button",
|
|
4981
|
-
title: "LixScript \u2014
|
|
4915
|
+
title: "LixScript MCP \u2014 coming soon",
|
|
4982
4916
|
onClick: () => useUIStore_default.getState().toggleAIModal?.(),
|
|
4983
4917
|
className: "w-9 h-9 flex items-center justify-center rounded-lg bg-surface border border-border-light text-text-muted hover:text-text-primary hover:bg-surface-hover transition-colors",
|
|
4984
4918
|
children: /* @__PURE__ */ jsx26("i", { className: "bx bx-code-alt text-base" })
|