@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.
Files changed (43) hide show
  1. package/dist/react/{AIRenderer-46WIFF2B.js → AIRenderer-PWWLWI6U.js} +84 -16
  2. package/dist/react/AIRenderer-PWWLWI6U.js.map +7 -0
  3. package/dist/react/{CopyPaste-4CKJRHJ3.js → CopyPaste-SA72NDFN.js} +2 -2
  4. package/dist/react/{EventDispatcher-AD2BPPPS.js → EventDispatcher-BZQRHROG.js} +2 -2
  5. package/dist/react/{MermaidFlowchartRenderer-A26B2SM3.js → MermaidFlowchartRenderer-4YEMAYQC.js} +18 -3
  6. package/dist/react/MermaidFlowchartRenderer-4YEMAYQC.js.map +7 -0
  7. package/dist/react/{MermaidSequenceRenderer-OF4JK77D.js → MermaidSequenceRenderer-KCUHO7UI.js} +106 -4
  8. package/dist/react/MermaidSequenceRenderer-KCUHO7UI.js.map +7 -0
  9. package/dist/react/MermaidStructuredRenderer-GGOOGON5.js +365 -0
  10. package/dist/react/MermaidStructuredRenderer-GGOOGON5.js.map +7 -0
  11. package/dist/react/{SceneSerializer-4U4B24JM.js → SceneSerializer-ZPHV6IUP.js} +2 -2
  12. package/dist/react/{SketchEngine-XWWTA2MT.js → SketchEngine-NPF2XN6Z.js} +7 -7
  13. package/dist/react/TextShape-U6ZZKB35.js +8 -0
  14. package/dist/react/{chunk-QXFBG7OM.js → chunk-42O6W7DF.js} +18 -1
  15. package/dist/react/chunk-42O6W7DF.js.map +7 -0
  16. package/dist/react/{chunk-YVCENC7J.js → chunk-5QIT2WBE.js} +19 -116
  17. package/dist/react/chunk-5QIT2WBE.js.map +7 -0
  18. package/dist/react/index.js +34 -100
  19. package/dist/react/index.js.map +3 -3
  20. package/dist/react/{textTool-KY4AYUTC.js → textTool-HY5NMM7H.js} +2 -2
  21. package/package.json +1 -1
  22. package/src/core/AIRenderer.js +95 -11
  23. package/src/core/MermaidFlowchartRenderer.js +18 -3
  24. package/src/core/MermaidSequenceRenderer.js +116 -7
  25. package/src/core/MermaidStructuredRenderer.js +363 -0
  26. package/src/react/LixSketchCanvas.jsx +1 -1
  27. package/src/react/components/modals/LixScriptModal.jsx +22 -96
  28. package/src/react/components/sidebars/TextSidebar.jsx +1 -1
  29. package/src/react/store/useUIStore.js +1 -1
  30. package/src/shapes/TextShape.js +19 -0
  31. package/src/tools/textTool.js +23 -157
  32. package/dist/react/AIRenderer-46WIFF2B.js.map +0 -7
  33. package/dist/react/MermaidFlowchartRenderer-A26B2SM3.js.map +0 -7
  34. package/dist/react/MermaidSequenceRenderer-OF4JK77D.js.map +0 -7
  35. package/dist/react/TextShape-54ZJ66E3.js +0 -8
  36. package/dist/react/chunk-QXFBG7OM.js.map +0 -7
  37. package/dist/react/chunk-YVCENC7J.js.map +0 -7
  38. /package/dist/react/{CopyPaste-4CKJRHJ3.js.map → CopyPaste-SA72NDFN.js.map} +0 -0
  39. /package/dist/react/{EventDispatcher-AD2BPPPS.js.map → EventDispatcher-BZQRHROG.js.map} +0 -0
  40. /package/dist/react/{SceneSerializer-4U4B24JM.js.map → SceneSerializer-ZPHV6IUP.js.map} +0 -0
  41. /package/dist/react/{SketchEngine-XWWTA2MT.js.map → SketchEngine-NPF2XN6Z.js.map} +0 -0
  42. /package/dist/react/{TextShape-54ZJ66E3.js.map → TextShape-U6ZZKB35.js.map} +0 -0
  43. /package/dist/react/{textTool-KY4AYUTC.js.map → textTool-HY5NMM7H.js.map} +0 -0
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-DNAG7ML6.js";
10
10
 
11
11
  // src/react/LixSketchCanvas.jsx
12
- import { useCallback as useCallback17, useEffect as useEffect15, useRef as useRef12, useState as useState21 } from "react";
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: "dark",
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-XWWTA2MT.js");
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("M");
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 { useCallback as useCallback15, useEffect as useEffect13, useRef as useRef10, useState as useState19 } from "react";
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((s) => s.aiModalOpen);
4517
- const toggle = useUIStore_default((s) => s.toggleAIModal);
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
- requestAnimationFrame(() => taRef.current?.focus());
4525
- const onKey = (e) => {
4526
- if (e.key === "Escape") toggle();
4510
+ const onKeyDown = (event) => {
4511
+ if (event.key === "Escape") toggle();
4527
4512
  };
4528
- document.addEventListener("keydown", onKey);
4529
- return () => document.removeEventListener("keydown", onKey);
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/60 backdrop-blur-sm font-[lixFont]",
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: (e) => e.stopPropagation(),
4569
- className: "relative w-[560px] max-w-[94vw] bg-surface border border-border-light rounded-2xl p-5 shadow-2xl flex flex-col gap-3",
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__ */ jsxs24("div", { className: "flex items-center gap-2", children: [
4581
- /* @__PURE__ */ jsx24("div", { className: "w-8 h-8 rounded-lg bg-accent-blue/10 border border-accent-blue/30 flex items-center justify-center", children: /* @__PURE__ */ jsx24("i", { className: "bx bx-code-alt text-accent-blue" }) }),
4582
- /* @__PURE__ */ jsxs24("div", { className: "flex-1", children: [
4583
- /* @__PURE__ */ jsx24("h2", { className: "text-text-primary text-sm font-medium", children: "LixScript" }),
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 useCallback16, useEffect as useEffect14, useRef as useRef11, useState as useState20 } from "react";
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 SAMPLE2 = `# One equation per line. Comments start with #.
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] = useState20(SAMPLE2);
4635
- const [settings, setSettings] = useState20(DEFAULT_SETTINGS);
4636
- const [busy, setBusy] = useState20(false);
4637
- const [status, setStatus] = useState20(null);
4638
- const taRef = useRef11(null);
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 = useCallback16(async () => {
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 = useCallback16((e) => {
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-4U4B24JM.js");
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 = useRef12(null);
4820
- const lastSceneJsonRef = useRef12("");
4821
- const debounceRef = useRef12(null);
4822
- const [bootstrapped, setBootstrapped] = useState21(false);
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 write shapes in DSL",
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" })