@miragon/mcp-toolkit-ui 1.1.0 → 2.0.0

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 (77) hide show
  1. package/dist/app/builder/BuilderBanners.d.ts +19 -0
  2. package/dist/app/builder/BuilderBanners.d.ts.map +1 -0
  3. package/dist/app/builder/BuilderBanners.js +22 -0
  4. package/dist/app/builder/BuilderBanners.js.map +1 -0
  5. package/dist/app/builder/CanvasRow.d.ts +26 -0
  6. package/dist/app/builder/CanvasRow.d.ts.map +1 -0
  7. package/dist/app/builder/CanvasRow.js +98 -0
  8. package/dist/app/builder/CanvasRow.js.map +1 -0
  9. package/dist/app/builder/CellPropsSheet.d.ts +19 -0
  10. package/dist/app/builder/CellPropsSheet.d.ts.map +1 -0
  11. package/dist/app/builder/CellPropsSheet.js +28 -0
  12. package/dist/app/builder/CellPropsSheet.js.map +1 -0
  13. package/dist/app/builder/EmptyHint.d.ts +6 -0
  14. package/dist/app/builder/EmptyHint.d.ts.map +1 -0
  15. package/dist/app/builder/EmptyHint.js +10 -0
  16. package/dist/app/builder/EmptyHint.js.map +1 -0
  17. package/dist/app/builder/LayoutSurface.d.ts +27 -0
  18. package/dist/app/builder/LayoutSurface.d.ts.map +1 -0
  19. package/dist/app/builder/LayoutSurface.js +45 -0
  20. package/dist/app/builder/LayoutSurface.js.map +1 -0
  21. package/dist/app/builder/Workspace.d.ts +9 -3
  22. package/dist/app/builder/Workspace.d.ts.map +1 -1
  23. package/dist/app/builder/Workspace.js +3 -97
  24. package/dist/app/builder/Workspace.js.map +1 -1
  25. package/dist/app/builder/builder-reducer.d.ts.map +1 -1
  26. package/dist/app/builder/builder-reducer.js +176 -164
  27. package/dist/app/builder/builder-reducer.js.map +1 -1
  28. package/dist/app/builder/use-builder-catalogue.d.ts +33 -0
  29. package/dist/app/builder/use-builder-catalogue.d.ts.map +1 -0
  30. package/dist/app/builder/use-builder-catalogue.js +155 -0
  31. package/dist/app/builder/use-builder-catalogue.js.map +1 -0
  32. package/dist/app/builder/use-key-step-entries.d.ts +22 -0
  33. package/dist/app/builder/use-key-step-entries.d.ts.map +1 -0
  34. package/dist/app/builder/use-key-step-entries.js +46 -0
  35. package/dist/app/builder/use-key-step-entries.js.map +1 -0
  36. package/dist/app/builder/use-save-dashboard.d.ts +33 -0
  37. package/dist/app/builder/use-save-dashboard.d.ts.map +1 -0
  38. package/dist/app/builder/use-save-dashboard.js +78 -0
  39. package/dist/app/builder/use-save-dashboard.js.map +1 -0
  40. package/dist/app/layout-builder.d.ts.map +1 -1
  41. package/dist/app/layout-builder.js +46 -277
  42. package/dist/app/layout-builder.js.map +1 -1
  43. package/dist/app/mcp-app-view-chrome.d.ts +77 -0
  44. package/dist/app/mcp-app-view-chrome.d.ts.map +1 -0
  45. package/dist/app/mcp-app-view-chrome.js +53 -0
  46. package/dist/app/mcp-app-view-chrome.js.map +1 -0
  47. package/dist/app/mcp-app-view.d.ts +3 -9
  48. package/dist/app/mcp-app-view.d.ts.map +1 -1
  49. package/dist/app/mcp-app-view.js +4 -31
  50. package/dist/app/mcp-app-view.js.map +1 -1
  51. package/dist/render-cases-primitives.d.ts +17 -0
  52. package/dist/render-cases-primitives.d.ts.map +1 -0
  53. package/dist/render-cases-primitives.js +88 -0
  54. package/dist/render-cases-primitives.js.map +1 -0
  55. package/dist/render-cases.d.ts +4 -0
  56. package/dist/render-cases.d.ts.map +1 -0
  57. package/dist/render-cases.js +140 -0
  58. package/dist/render-cases.js.map +1 -0
  59. package/package.json +10 -5
  60. package/src/app/builder/BuilderBanners.tsx +61 -0
  61. package/src/app/builder/CanvasRow.tsx +316 -0
  62. package/src/app/builder/CellPropsSheet.tsx +47 -0
  63. package/src/app/builder/EmptyHint.tsx +29 -0
  64. package/src/app/builder/LayoutSurface.tsx +140 -0
  65. package/src/app/builder/Workspace.tsx +33 -342
  66. package/src/app/builder/builder-reducer.ts +204 -170
  67. package/src/app/builder/use-builder-catalogue.ts +187 -0
  68. package/src/app/builder/use-key-step-entries.ts +60 -0
  69. package/src/app/builder/use-save-dashboard.ts +97 -0
  70. package/src/app/layout-builder.tsx +92 -497
  71. package/src/app/mcp-app-view-chrome.tsx +204 -0
  72. package/src/app/mcp-app-view.tsx +32 -140
  73. package/src/lib/parse-tool-result.property.test.ts +90 -0
  74. package/src/render-cases-primitives.tsx +255 -0
  75. package/src/render-cases.tsx +239 -0
  76. package/src/render-smoke.test.tsx +100 -0
  77. package/src/ui-catalog.test.ts +52 -0
@@ -0,0 +1,19 @@
1
+ import type { LayoutBuilderLabels } from "./labels.js";
2
+ /**
3
+ * Inline feedback strip under the toolbar. Surfaces two things the builder
4
+ * previously swallowed:
5
+ * - a `get-builder-catalogue` fetch failure (Finding [3]) — only console-
6
+ * logged before, so the user couldn't tell the palette was stale, and
7
+ * - pipeline validation issues (Finding [10]/[6]) the catalogue reports
8
+ * fail-soft but `render-view` would reject fail-hard.
9
+ *
10
+ * Renders nothing when there's no error and no issues, so the happy path is
11
+ * visually unchanged.
12
+ */
13
+ export declare function BuilderBanners({ L, catalogueToolName, refreshError, validationIssues, }: {
14
+ L: Required<LayoutBuilderLabels>;
15
+ catalogueToolName: string;
16
+ refreshError: string | null;
17
+ validationIssues: string[];
18
+ }): import("react").JSX.Element | null;
19
+ //# sourceMappingURL=BuilderBanners.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BuilderBanners.d.ts","sourceRoot":"","sources":["../../../src/app/builder/BuilderBanners.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAMtD;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,EAC7B,CAAC,EACD,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,GACjB,EAAE;IACD,CAAC,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAA;IAChC,iBAAiB,EAAE,MAAM,CAAA;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,gBAAgB,EAAE,MAAM,EAAE,CAAA;CAC3B,sCAgCA"}
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { AlertTriangle } from "lucide-react";
3
+ // -------------------------------------------------------------------------- //
4
+ // Builder banners — catalogue-fetch failure + pipeline validation warning
5
+ // -------------------------------------------------------------------------- //
6
+ /**
7
+ * Inline feedback strip under the toolbar. Surfaces two things the builder
8
+ * previously swallowed:
9
+ * - a `get-builder-catalogue` fetch failure (Finding [3]) — only console-
10
+ * logged before, so the user couldn't tell the palette was stale, and
11
+ * - pipeline validation issues (Finding [10]/[6]) the catalogue reports
12
+ * fail-soft but `render-view` would reject fail-hard.
13
+ *
14
+ * Renders nothing when there's no error and no issues, so the happy path is
15
+ * visually unchanged.
16
+ */
17
+ export function BuilderBanners({ L, catalogueToolName, refreshError, validationIssues, }) {
18
+ if (!refreshError && validationIssues.length === 0)
19
+ return null;
20
+ return (_jsxs("div", { className: "flex flex-col gap-2", role: "status", "aria-live": "polite", children: [refreshError && (_jsxs("div", { className: "border-destructive/30 bg-destructive/10 text-destructive flex items-start gap-2 rounded-md border px-3 py-2 text-xs", children: [_jsx(AlertTriangle, { className: "mt-0.5 size-3.5 shrink-0", "aria-hidden": "true" }), _jsxs("div", { className: "min-w-0", children: [_jsx("p", { className: "font-medium", children: L.catalogueError }), _jsxs("p", { className: "text-destructive/80 mt-0.5 break-words", children: [_jsx("span", { className: "font-mono", children: catalogueToolName }), ": ", refreshError] })] })] })), validationIssues.length > 0 && (_jsxs("div", { className: "flex items-start gap-2 rounded-md border border-amber-500/30 bg-amber-500/10 px-3 py-2 text-xs text-amber-700 dark:text-amber-400", children: [_jsx(AlertTriangle, { className: "mt-0.5 size-3.5 shrink-0", "aria-hidden": "true" }), _jsxs("div", { className: "min-w-0", children: [_jsx("p", { className: "font-medium", children: L.validationWarning }), _jsx("ul", { className: "mt-0.5 list-inside list-disc space-y-0.5", children: validationIssues.map((issue, idx) => (_jsx("li", { className: "break-words", children: issue }, idx))) })] })] }))] }));
21
+ }
22
+ //# sourceMappingURL=BuilderBanners.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BuilderBanners.js","sourceRoot":"","sources":["../../../src/app/builder/BuilderBanners.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAG5C,gFAAgF;AAChF,0EAA0E;AAC1E,gFAAgF;AAEhF;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc,CAAC,EAC7B,CAAC,EACD,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,GAMjB;IACC,IAAI,CAAC,YAAY,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAC/D,OAAO,CACL,eAAK,SAAS,EAAC,qBAAqB,EAAC,IAAI,EAAC,QAAQ,eAAW,QAAQ,aAClE,YAAY,IAAI,CACf,eAAK,SAAS,EAAC,qHAAqH,aAClI,KAAC,aAAa,IAAC,SAAS,EAAC,0BAA0B,iBAAa,MAAM,GAAG,EACzE,eAAK,SAAS,EAAC,SAAS,aACtB,YAAG,SAAS,EAAC,aAAa,YAAE,CAAC,CAAC,cAAc,GAAK,EACjD,aAAG,SAAS,EAAC,wCAAwC,aACnD,eAAM,SAAS,EAAC,WAAW,YAAE,iBAAiB,GAAQ,QAAG,YAAY,IACnE,IACA,IACF,CACP,EACA,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,CAC9B,eAAK,SAAS,EAAC,mIAAmI,aAChJ,KAAC,aAAa,IAAC,SAAS,EAAC,0BAA0B,iBAAa,MAAM,GAAG,EACzE,eAAK,SAAS,EAAC,SAAS,aACtB,YAAG,SAAS,EAAC,aAAa,YAAE,CAAC,CAAC,iBAAiB,GAAK,EACpD,aAAI,SAAS,EAAC,0CAA0C,YACrD,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CACpC,aAAc,SAAS,EAAC,aAAa,YAClC,KAAK,IADC,GAAG,CAEP,CACN,CAAC,GACC,IACD,IACF,CACP,IACG,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { RowDef, WidgetProps } from "@miragon/mcp-toolkit-core";
2
+ import { type WidgetComponent } from "../widget-renderer.js";
3
+ import type { LayoutBuilderLabels } from "./labels.js";
4
+ declare function CanvasRowImpl({ L, row, rowIdx, focused, isFirst, isLast, dragOver, setDragOverRow, setFocusedRowIndex, onRemoveRow, onMoveRow, onSetCellSpan, onRemoveCell, onAddWidget, onConfigureCell, propsSchemaByWidgetId, widgets, widgetProps, }: {
5
+ L: Required<LayoutBuilderLabels>;
6
+ row: RowDef;
7
+ rowIdx: number;
8
+ focused: boolean;
9
+ isFirst: boolean;
10
+ isLast: boolean;
11
+ dragOver: boolean;
12
+ setDragOverRow: (idx: number | null) => void;
13
+ setFocusedRowIndex: (idx: number) => void;
14
+ onRemoveRow: (rowIdx: number) => void;
15
+ onMoveRow: (rowIdx: number, direction: -1 | 1) => void;
16
+ onSetCellSpan: (rowIdx: number, cellIdx: number, span: number) => void;
17
+ onRemoveCell: (rowIdx: number, cellIdx: number) => void;
18
+ onAddWidget: (widgetId: string, targetRowIdx?: number) => void;
19
+ onConfigureCell: (rowIdx: number, cellIdx: number) => void;
20
+ propsSchemaByWidgetId: Map<string, Record<string, unknown>>;
21
+ widgets: Record<string, WidgetComponent>;
22
+ widgetProps: WidgetProps;
23
+ }): import("react").JSX.Element;
24
+ export declare const CanvasRow: import("react").MemoExoticComponent<typeof CanvasRowImpl>;
25
+ export {};
26
+ //# sourceMappingURL=CanvasRow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CanvasRow.d.ts","sourceRoot":"","sources":["../../../src/app/builder/CanvasRow.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAWpE,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAOtD,iBAAS,aAAa,CAAC,EACrB,CAAC,EACD,GAAG,EACH,MAAM,EACN,OAAO,EACP,OAAO,EACP,MAAM,EACN,QAAQ,EACR,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,SAAS,EACT,aAAa,EACb,YAAY,EACZ,WAAW,EACX,eAAe,EACf,qBAAqB,EACrB,OAAO,EACP,WAAW,GACZ,EAAE;IACD,CAAC,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAA;IAChC,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;IACf,QAAQ,EAAE,OAAO,CAAA;IACjB,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IAC5C,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAA;IACtD,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACtE,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACvD,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9D,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1D,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAC3D,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACxC,WAAW,EAAE,WAAW,CAAA;CACzB,+BAwLA;AAED,eAAO,MAAM,SAAS,2DAAsB,CAAA"}
@@ -0,0 +1,98 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { memo, useCallback, useRef } from "react";
3
+ import { ChevronDown, ChevronUp, SlidersHorizontal, Trash2, X } from "lucide-react";
4
+ import { GridItem, GridLayout } from "../../components/GridLayout.js";
5
+ import { Button } from "../../primitives/button.js";
6
+ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "../../primitives/select.js";
7
+ import { cn } from "../../lib/utils.js";
8
+ import { RenderedWidget } from "../widget-renderer.js";
9
+ import { WIDGET_DRAG_MIME } from "./labels.js";
10
+ // -------------------------------------------------------------------------- //
11
+ // Canvas row — drop target + per-cell controls + resize handle
12
+ // -------------------------------------------------------------------------- //
13
+ function CanvasRowImpl({ L, row, rowIdx, focused, isFirst, isLast, dragOver, setDragOverRow, setFocusedRowIndex, onRemoveRow, onMoveRow, onSetCellSpan, onRemoveCell, onAddWidget, onConfigureCell, propsSchemaByWidgetId, widgets, widgetProps, }) {
14
+ const gridRef = useRef(null);
15
+ return (_jsxs("div", { onClick: () => setFocusedRowIndex(rowIdx), onDragOver: (e) => {
16
+ if (!e.dataTransfer.types.includes(WIDGET_DRAG_MIME))
17
+ return;
18
+ e.preventDefault();
19
+ e.dataTransfer.dropEffect = "copy";
20
+ setDragOverRow(rowIdx);
21
+ }, onDragLeave: (e) => {
22
+ if (e.currentTarget.contains(e.relatedTarget))
23
+ return;
24
+ setDragOverRow(null);
25
+ }, onDrop: (e) => {
26
+ const id = e.dataTransfer.getData(WIDGET_DRAG_MIME);
27
+ setDragOverRow(null);
28
+ if (id) {
29
+ e.preventDefault();
30
+ onAddWidget(id, rowIdx);
31
+ }
32
+ }, className: cn("group relative rounded-lg border-l-2 px-3 py-2 transition-colors", focused
33
+ ? "border-l-primary bg-card"
34
+ : "bg-background hover:bg-card/60 border-l-transparent", dragOver && "bg-primary/5 border-l-primary"), children: [_jsxs("div", { className: "mb-2 flex items-center justify-between", children: [_jsxs("div", { className: "text-muted-foreground flex items-center gap-2 text-[11px]", children: [_jsxs("span", { className: "font-mono", children: ["row ", rowIdx + 1] }), _jsxs("span", { className: "bg-muted/60 rounded px-1 py-0.5 text-[10px]", children: [row.row.length, " ", row.row.length === 1 ? "widget" : "widgets"] })] }), _jsxs("div", { className: "opacity-0 transition-opacity group-hover:opacity-100", children: [_jsx(Button, { variant: "ghost", size: "icon-xs", onClick: (e) => {
35
+ e.stopPropagation();
36
+ onMoveRow(rowIdx, -1);
37
+ }, disabled: isFirst, "aria-label": "Move row up", children: _jsx(ChevronUp, {}) }), _jsx(Button, { variant: "ghost", size: "icon-xs", onClick: (e) => {
38
+ e.stopPropagation();
39
+ onMoveRow(rowIdx, 1);
40
+ }, disabled: isLast, "aria-label": "Move row down", children: _jsx(ChevronDown, {}) }), _jsx(Button, { variant: "ghost", size: "icon-xs", onClick: (e) => {
41
+ e.stopPropagation();
42
+ onRemoveRow(rowIdx);
43
+ }, "aria-label": L.removeRow, children: _jsx(Trash2, {}) })] })] }), row.row.length === 0 ? (_jsx("div", { className: cn("rounded-md border border-dashed py-6 text-center text-[11px] transition-colors", dragOver
44
+ ? "border-primary bg-primary/5 text-primary"
45
+ : "border-muted-foreground/30 text-muted-foreground"), children: dragOver ? L.canvasDropHint : L.canvasEmpty })) : (_jsx("div", { ref: gridRef, "data-row-grid": true, children: _jsx(GridLayout, { children: row.row.map((cell, cellIdx) => {
46
+ const span = cell.span ?? 12;
47
+ const Widget = widgets[cell.widget];
48
+ const hasPropsSchema = propsSchemaByWidgetId.has(cell.widget);
49
+ const propCount = cell.props ? Object.keys(cell.props).length : 0;
50
+ return (_jsx(GridItem, { span: span, children: _jsxs("div", { className: "border-border bg-card relative overflow-hidden rounded-md border shadow-sm", children: [_jsxs("div", { className: "text-muted-foreground bg-muted/30 flex items-center justify-between gap-2 border-b px-2 py-1 text-[10px]", children: [_jsx("span", { className: "truncate font-mono", children: cell.widget }), _jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [_jsxs("label", { className: "text-muted-foreground/80 inline-flex items-center gap-0.5 font-mono", children: [_jsx("span", { className: "sr-only", children: "Column span" }), _jsxs(Select, { value: String(span), onValueChange: (v) => onSetCellSpan(rowIdx, cellIdx, Number(v)), children: [_jsx(SelectTrigger, { size: "sm", className: "h-5 gap-0.5 border-none bg-transparent px-1 py-0 font-mono text-[10px] shadow-none focus:ring-0", "aria-label": "Column span", onClick: (e) => e.stopPropagation(), children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: Array.from({ length: 12 }, (_, i) => i + 1).map((n) => (_jsx(SelectItem, { value: String(n), className: "font-mono text-xs", children: n }, n))) })] }), _jsx("span", { "aria-hidden": "true", children: "/12" })] }), hasPropsSchema && (_jsx(Button, { variant: "ghost", size: "icon-xs", onClick: (e) => {
51
+ e.stopPropagation();
52
+ onConfigureCell(rowIdx, cellIdx);
53
+ }, "aria-label": "Configure widget props", title: propCount > 0
54
+ ? `Configure widget props (${propCount} set)`
55
+ : "Configure widget props", className: cn(propCount > 0 && "text-primary"), children: _jsx(SlidersHorizontal, {}) })), _jsx(Button, { variant: "ghost", size: "icon-xs", onClick: (e) => {
56
+ e.stopPropagation();
57
+ onRemoveCell(rowIdx, cellIdx);
58
+ }, "aria-label": "Remove widget", children: _jsx(X, {}) })] })] }), _jsx("div", { className: "p-2", children: _jsx(RenderedWidget, { widget: Widget, widgetId: cell.widget, props: widgetProps, cellProps: cell.props, showEmptyHint: true, notBundledClassName: "text-muted-foreground rounded border border-dashed p-3 text-center text-[11px]" }) }), _jsx(ResizeHandle, { rowIdx: rowIdx, cellIdx: cellIdx, span: span, getGridEl: () => gridRef.current, onSetCellSpan: onSetCellSpan })] }) }, `${cell.widget}-${cellIdx}`));
59
+ }) }) }))] }));
60
+ }
61
+ export const CanvasRow = memo(CanvasRowImpl);
62
+ // -------------------------------------------------------------------------- //
63
+ // Resize handle
64
+ // -------------------------------------------------------------------------- //
65
+ function ResizeHandle({ rowIdx, cellIdx, span, getGridEl, onSetCellSpan, }) {
66
+ const onPointerDown = useCallback((e) => {
67
+ e.preventDefault();
68
+ e.stopPropagation();
69
+ const grid = getGridEl();
70
+ if (!grid)
71
+ return;
72
+ const rect = grid.getBoundingClientRect();
73
+ const colWidth = rect.width / 12;
74
+ const startX = e.clientX;
75
+ const startSpan = span;
76
+ const onMove = (ev) => {
77
+ const delta = ev.clientX - startX;
78
+ const next = Math.round(startSpan + delta / colWidth);
79
+ onSetCellSpan(rowIdx, cellIdx, Math.max(1, Math.min(12, next)));
80
+ };
81
+ const onUp = () => {
82
+ window.removeEventListener("pointermove", onMove);
83
+ window.removeEventListener("pointerup", onUp);
84
+ };
85
+ window.addEventListener("pointermove", onMove);
86
+ window.addEventListener("pointerup", onUp);
87
+ }, [cellIdx, getGridEl, onSetCellSpan, rowIdx, span]);
88
+ const onKeyDown = useCallback((e) => {
89
+ const dir = e.key === "ArrowLeft" ? -1 : e.key === "ArrowRight" ? 1 : 0;
90
+ if (dir === 0)
91
+ return;
92
+ e.preventDefault();
93
+ e.stopPropagation();
94
+ onSetCellSpan(rowIdx, cellIdx, Math.max(1, Math.min(12, span + dir)));
95
+ }, [cellIdx, onSetCellSpan, rowIdx, span]);
96
+ return (_jsx("div", { onPointerDown: onPointerDown, onClick: (e) => e.stopPropagation(), onKeyDown: onKeyDown, tabIndex: 0, className: "hover:bg-primary/40 focus-visible:bg-primary/40 focus-visible:ring-primary/60 absolute top-0 right-0 h-full w-1.5 cursor-col-resize touch-none select-none focus-visible:ring-1 focus-visible:outline-none", "aria-label": "Resize widget", role: "separator", "aria-orientation": "vertical", "aria-valuenow": span, "aria-valuemin": 1, "aria-valuemax": 12 }));
97
+ }
98
+ //# sourceMappingURL=CanvasRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CanvasRow.js","sourceRoot":"","sources":["../../../src/app/builder/CanvasRow.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,cAAc,CAAA;AAEnF,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACnD,OAAO,EACL,MAAM,EACN,aAAa,EACb,UAAU,EACV,aAAa,EACb,WAAW,GACZ,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAA;AACvC,OAAO,EAAE,cAAc,EAAwB,MAAM,uBAAuB,CAAA;AAE5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE9C,gFAAgF;AAChF,+DAA+D;AAC/D,gFAAgF;AAEhF,SAAS,aAAa,CAAC,EACrB,CAAC,EACD,GAAG,EACH,MAAM,EACN,OAAO,EACP,OAAO,EACP,MAAM,EACN,QAAQ,EACR,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,SAAS,EACT,aAAa,EACb,YAAY,EACZ,WAAW,EACX,eAAe,EACf,qBAAqB,EACrB,OAAO,EACP,WAAW,GAoBZ;IACC,MAAM,OAAO,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAA;IAEnD,OAAO,CACL,eACE,OAAO,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,MAAM,CAAC,EACzC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE;YAChB,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC;gBAAE,OAAM;YAC5D,CAAC,CAAC,cAAc,EAAE,CAAA;YAClB,CAAC,CAAC,YAAY,CAAC,UAAU,GAAG,MAAM,CAAA;YAClC,cAAc,CAAC,MAAM,CAAC,CAAA;QACxB,CAAC,EACD,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;YACjB,IAAI,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAqB,CAAC;gBAAE,OAAM;YAC7D,cAAc,CAAC,IAAI,CAAC,CAAA;QACtB,CAAC,EACD,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;YACZ,MAAM,EAAE,GAAG,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;YACnD,cAAc,CAAC,IAAI,CAAC,CAAA;YACpB,IAAI,EAAE,EAAE,CAAC;gBACP,CAAC,CAAC,cAAc,EAAE,CAAA;gBAClB,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;YACzB,CAAC;QACH,CAAC,EACD,SAAS,EAAE,EAAE,CACX,kEAAkE,EAClE,OAAO;YACL,CAAC,CAAC,0BAA0B;YAC5B,CAAC,CAAC,qDAAqD,EACzD,QAAQ,IAAI,+BAA+B,CAC5C,aAED,eAAK,SAAS,EAAC,wCAAwC,aACrD,eAAK,SAAS,EAAC,2DAA2D,aACxE,gBAAM,SAAS,EAAC,WAAW,qBAAM,MAAM,GAAG,CAAC,IAAQ,EACnD,gBAAM,SAAS,EAAC,6CAA6C,aAC1D,GAAG,CAAC,GAAG,CAAC,MAAM,OAAG,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,IACxD,IACH,EACN,eAAK,SAAS,EAAC,sDAAsD,aACnE,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,SAAS,EACd,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;oCACb,CAAC,CAAC,eAAe,EAAE,CAAA;oCACnB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;gCACvB,CAAC,EACD,QAAQ,EAAE,OAAO,gBACN,aAAa,YAExB,KAAC,SAAS,KAAG,GACN,EACT,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,SAAS,EACd,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;oCACb,CAAC,CAAC,eAAe,EAAE,CAAA;oCACnB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;gCACtB,CAAC,EACD,QAAQ,EAAE,MAAM,gBACL,eAAe,YAE1B,KAAC,WAAW,KAAG,GACR,EACT,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,SAAS,EACd,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;oCACb,CAAC,CAAC,eAAe,EAAE,CAAA;oCACnB,WAAW,CAAC,MAAM,CAAC,CAAA;gCACrB,CAAC,gBACW,CAAC,CAAC,SAAS,YAEvB,KAAC,MAAM,KAAG,GACH,IACL,IACF,EACL,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACtB,cACE,SAAS,EAAE,EAAE,CACX,gFAAgF,EAChF,QAAQ;oBACN,CAAC,CAAC,0CAA0C;oBAC5C,CAAC,CAAC,kDAAkD,CACvD,YAEA,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,GACxC,CACP,CAAC,CAAC,CAAC,CACF,cAAK,GAAG,EAAE,OAAO,mCACf,KAAC,UAAU,cACR,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;wBAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAA;wBAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;wBACnC,MAAM,cAAc,GAAG,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;wBAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;wBACjE,OAAO,CACL,KAAC,QAAQ,IAAmC,IAAI,EAAE,IAAI,YACpD,eAAK,SAAS,EAAC,4EAA4E,aACzF,eAAK,SAAS,EAAC,0GAA0G,aACvH,eAAM,SAAS,EAAC,oBAAoB,YAAE,IAAI,CAAC,MAAM,GAAQ,EACzD,eAAK,SAAS,EAAC,kCAAkC,aAC/C,iBAAO,SAAS,EAAC,qEAAqE,aACpF,eAAM,SAAS,EAAC,SAAS,4BAAmB,EAC5C,MAAC,MAAM,IACL,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,EACnB,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,aAE/D,KAAC,aAAa,IACZ,IAAI,EAAC,IAAI,EACT,SAAS,EAAC,iGAAiG,gBAChG,aAAa,EACxB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,YAEnC,KAAC,WAAW,KAAG,GACD,EAChB,KAAC,aAAa,cACX,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACtD,KAAC,UAAU,IAAS,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAC,mBAAmB,YAChE,CAAC,IADa,CAAC,CAEL,CACd,CAAC,GACY,IACT,EACT,8BAAkB,MAAM,oBAAW,IAC7B,EACP,cAAc,IAAI,CACjB,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,SAAS,EACd,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;4DACb,CAAC,CAAC,eAAe,EAAE,CAAA;4DACnB,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;wDAClC,CAAC,gBACU,wBAAwB,EACnC,KAAK,EACH,SAAS,GAAG,CAAC;4DACX,CAAC,CAAC,2BAA2B,SAAS,OAAO;4DAC7C,CAAC,CAAC,wBAAwB,EAE9B,SAAS,EAAE,EAAE,CAAC,SAAS,GAAG,CAAC,IAAI,cAAc,CAAC,YAE9C,KAAC,iBAAiB,KAAG,GACd,CACV,EACD,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,SAAS,EACd,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;4DACb,CAAC,CAAC,eAAe,EAAE,CAAA;4DACnB,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;wDAC/B,CAAC,gBACU,eAAe,YAE1B,KAAC,CAAC,KAAG,GACE,IACL,IACF,EACN,cAAK,SAAS,EAAC,KAAK,YAClB,KAAC,cAAc,IACb,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,IAAI,CAAC,MAAM,EACrB,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,IAAI,CAAC,KAAK,EACrB,aAAa,QACb,mBAAmB,EAAC,gFAAgF,GACpG,GACE,EACN,KAAC,YAAY,IACX,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAChC,aAAa,EAAE,aAAa,GAC5B,IACE,IA9EO,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,EAAE,CA+E/B,CACZ,CAAA;oBACH,CAAC,CAAC,GACS,GACT,CACP,IACG,CACP,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,CAAA;AAE5C,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAEhF,SAAS,YAAY,CAAC,EACpB,MAAM,EACN,OAAO,EACP,IAAI,EACJ,SAAS,EACT,aAAa,GAOd;IACC,MAAM,aAAa,GAAG,WAAW,CAC/B,CAAC,CAAqC,EAAE,EAAE;QACxC,CAAC,CAAC,cAAc,EAAE,CAAA;QAClB,CAAC,CAAC,eAAe,EAAE,CAAA;QACnB,MAAM,IAAI,GAAG,SAAS,EAAE,CAAA;QACxB,IAAI,CAAC,IAAI;YAAE,OAAM;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAA;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;QAChC,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAA;QACxB,MAAM,SAAS,GAAG,IAAI,CAAA;QACtB,MAAM,MAAM,GAAG,CAAC,EAAgB,EAAE,EAAE;YAClC,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,GAAG,MAAM,CAAA;YACjC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAC,CAAA;YACrD,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;QACjE,CAAC,CAAA;QACD,MAAM,IAAI,GAAG,GAAG,EAAE;YAChB,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;YACjD,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;QAC/C,CAAC,CAAA;QACD,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;QAC9C,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;IAC5C,CAAC,EACD,CAAC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,CAClD,CAAA;IAED,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,CAAsC,EAAE,EAAE;QACzC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACvE,IAAI,GAAG,KAAK,CAAC;YAAE,OAAM;QACrB,CAAC,CAAC,cAAc,EAAE,CAAA;QAClB,CAAC,CAAC,eAAe,EAAE,CAAA;QACnB,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;IACvE,CAAC,EACD,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,CACvC,CAAA;IAED,OAAO,CACL,cACE,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,EACnC,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,CAAC,EACX,SAAS,EAAC,4MAA4M,gBAC3M,eAAe,EAC1B,IAAI,EAAC,WAAW,sBACC,UAAU,mBACZ,IAAI,mBACJ,CAAC,mBACD,EAAE,GACjB,CACH,CAAA;AACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { RowDef } from "@miragon/mcp-toolkit-core";
2
+ /**
3
+ * Mounted once at the LayoutBuilder root so that exactly one props editor
4
+ * can be open at a time across the entire workspace — including across
5
+ * tabs. `configuringCell` addresses `{ rowIdx, cellIdx }` on the currently
6
+ * active draft surface (rows or active tab's rows); renders nothing when no
7
+ * cell is being configured or the address no longer resolves.
8
+ */
9
+ export declare function CellPropsSheet({ configuringCell, activeRows, propsSchemaByWidgetId, onApply, onClose, }: {
10
+ configuringCell: {
11
+ rowIdx: number;
12
+ cellIdx: number;
13
+ } | null;
14
+ activeRows: RowDef[];
15
+ propsSchemaByWidgetId: Map<string, Record<string, unknown>>;
16
+ onApply: (rowIdx: number, cellIdx: number, next: Record<string, unknown> | undefined) => void;
17
+ onClose: () => void;
18
+ }): import("react").JSX.Element | null;
19
+ //# sourceMappingURL=CellPropsSheet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CellPropsSheet.d.ts","sourceRoot":"","sources":["../../../src/app/builder/CellPropsSheet.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAOvD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAC7B,eAAe,EACf,UAAU,EACV,qBAAqB,EACrB,OAAO,EACP,OAAO,GACR,EAAE;IACD,eAAe,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAC3D,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAC3D,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,KAAK,IAAI,CAAA;IAC7F,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB,sCAoBA"}
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { WidgetPropsSheet } from "../widget-props-sheet.js";
3
+ // -------------------------------------------------------------------------- //
4
+ // Cell props sheet — mounts the WidgetPropsSheet for the configured cell
5
+ // -------------------------------------------------------------------------- //
6
+ /**
7
+ * Mounted once at the LayoutBuilder root so that exactly one props editor
8
+ * can be open at a time across the entire workspace — including across
9
+ * tabs. `configuringCell` addresses `{ rowIdx, cellIdx }` on the currently
10
+ * active draft surface (rows or active tab's rows); renders nothing when no
11
+ * cell is being configured or the address no longer resolves.
12
+ */
13
+ export function CellPropsSheet({ configuringCell, activeRows, propsSchemaByWidgetId, onApply, onClose, }) {
14
+ if (!configuringCell)
15
+ return null;
16
+ const cell = activeRows[configuringCell.rowIdx]?.row[configuringCell.cellIdx];
17
+ if (!cell)
18
+ return null;
19
+ const schema = propsSchemaByWidgetId.get(cell.widget);
20
+ return (_jsx(WidgetPropsSheet, { open: true, onOpenChange: (open) => {
21
+ if (!open)
22
+ onClose();
23
+ }, widgetId: cell.widget, schema: schema, value: cell.props, onApply: (next) => {
24
+ onApply(configuringCell.rowIdx, configuringCell.cellIdx, next);
25
+ onClose();
26
+ } }));
27
+ }
28
+ //# sourceMappingURL=CellPropsSheet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CellPropsSheet.js","sourceRoot":"","sources":["../../../src/app/builder/CellPropsSheet.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAE3D,gFAAgF;AAChF,yEAAyE;AACzE,gFAAgF;AAEhF;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,EAC7B,eAAe,EACf,UAAU,EACV,qBAAqB,EACrB,OAAO,EACP,OAAO,GAOR;IACC,IAAI,CAAC,eAAe;QAAE,OAAO,IAAI,CAAA;IACjC,MAAM,IAAI,GAAG,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;IAC7E,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAA;IACtB,MAAM,MAAM,GAAG,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACrD,OAAO,CACL,KAAC,gBAAgB,IACf,IAAI,QACJ,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE;YACrB,IAAI,CAAC,IAAI;gBAAE,OAAO,EAAE,CAAA;QACtB,CAAC,EACD,QAAQ,EAAE,IAAI,CAAC,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YAChB,OAAO,CAAC,eAAe,CAAC,MAAM,EAAE,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;YAC9D,OAAO,EAAE,CAAA;QACX,CAAC,GACD,CACH,CAAA;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { LayoutBuilderLabels } from "./labels.js";
2
+ export declare function EmptyHint({ L, onGotoPipeline, }: {
3
+ L: Required<LayoutBuilderLabels>;
4
+ onGotoPipeline: () => void;
5
+ }): import("react").JSX.Element;
6
+ //# sourceMappingURL=EmptyHint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmptyHint.d.ts","sourceRoot":"","sources":["../../../src/app/builder/EmptyHint.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAMtD,wBAAgB,SAAS,CAAC,EACxB,CAAC,EACD,cAAc,GACf,EAAE;IACD,CAAC,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAA;IAChC,cAAc,EAAE,MAAM,IAAI,CAAA;CAC3B,+BAcA"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Layers, SlidersHorizontal } from "lucide-react";
3
+ import { Button } from "../../primitives/button.js";
4
+ // -------------------------------------------------------------------------- //
5
+ // Empty hint — shown on the Layout view before any widget is reachable
6
+ // -------------------------------------------------------------------------- //
7
+ export function EmptyHint({ L, onGotoPipeline, }) {
8
+ return (_jsxs("div", { className: "border-muted-foreground/30 text-muted-foreground flex flex-col items-center gap-2 rounded-md border border-dashed p-10 text-sm", children: [_jsx(Layers, { className: "size-5" }), _jsx("p", { children: "No widgets reachable yet." }), _jsxs("p", { className: "text-xs", children: ["Open the ", _jsx("span", { className: "font-medium", children: L.viewPipelineTab }), " tab to seed keys or add a pipeline step \u2014 the palette unlocks as soon as a widget's contract is satisfied."] }), _jsxs(Button, { variant: "outline", size: "sm", onClick: onGotoPipeline, className: "mt-1", children: [_jsx(SlidersHorizontal, {}), " Open ", L.viewPipelineTab] })] }));
9
+ }
10
+ //# sourceMappingURL=EmptyHint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmptyHint.js","sourceRoot":"","sources":["../../../src/app/builder/EmptyHint.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,gFAAgF;AAChF,uEAAuE;AACvE,gFAAgF;AAEhF,MAAM,UAAU,SAAS,CAAC,EACxB,CAAC,EACD,cAAc,GAIf;IACC,OAAO,CACL,eAAK,SAAS,EAAC,gIAAgI,aAC7I,KAAC,MAAM,IAAC,SAAS,EAAC,QAAQ,GAAG,EAC7B,oDAAgC,EAChC,aAAG,SAAS,EAAC,SAAS,0BACX,eAAM,SAAS,EAAC,aAAa,YAAE,CAAC,CAAC,eAAe,GAAQ,wHAE/D,EACJ,MAAC,MAAM,IAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAC,MAAM,aAC3E,KAAC,iBAAiB,KAAG,YAAO,CAAC,CAAC,eAAe,IACtC,IACL,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { DraftLayout } from "./builder-model.js";
2
+ import type { LayoutBuilderLabels } from "./labels.js";
3
+ import { type WorkspaceProps } from "./Workspace.js";
4
+ /**
5
+ * The "Layout" view's canvas surface, extracted from `layout-builder.tsx`.
6
+ *
7
+ * Renders either a single `Workspace` (rows draft) or the tab strip with
8
+ * the inline-rename editor plus one `Workspace` per tab (tabs draft). All
9
+ * state stays in the LayoutBuilder container — rename feedback included —
10
+ * so unmounting this surface (e.g. switching to the Pipeline view) loses
11
+ * nothing. Props in, callbacks out; the shared `workspace` bag is spread
12
+ * into `<Workspace>` untouched so its memo semantics are unchanged.
13
+ */
14
+ export declare function LayoutSurface({ L, draft, activeTabIndex, setActiveTabIndex, editingTabIdx, setEditingTabIdx, renameRejected, commitRename, onAddTab, onRemoveTab, workspace, }: {
15
+ L: Required<LayoutBuilderLabels>;
16
+ draft: DraftLayout;
17
+ activeTabIndex: number;
18
+ setActiveTabIndex: (idx: number) => void;
19
+ editingTabIdx: number | null;
20
+ setEditingTabIdx: (idx: number | null) => void;
21
+ renameRejected: boolean;
22
+ commitRename: (tabIdx: number, label: string) => void;
23
+ onAddTab: () => void;
24
+ onRemoveTab: (tabIdx: number) => void;
25
+ workspace: Omit<WorkspaceProps, "showAddTabButton" | "onAddTab">;
26
+ }): import("react").JSX.Element;
27
+ //# sourceMappingURL=LayoutSurface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LayoutSurface.d.ts","sourceRoot":"","sources":["../../../src/app/builder/LayoutSurface.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAO/D;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,EAC5B,CAAC,EACD,KAAK,EACL,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,SAAS,GACV,EAAE;IACD,CAAC,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAA;IAChC,KAAK,EAAE,WAAW,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,iBAAiB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IAC9C,cAAc,EAAE,OAAO,CAAA;IACvB,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACrD,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,kBAAkB,GAAG,UAAU,CAAC,CAAA;CACjE,+BA4FA"}
@@ -0,0 +1,45 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Plus, X } from "lucide-react";
3
+ import { Button } from "../../primitives/button.js";
4
+ import { Tabs, TabsContent, TabsList, TabsTrigger } from "../../primitives/tabs.js";
5
+ import { cn } from "../../lib/utils.js";
6
+ import { Workspace } from "./Workspace.js";
7
+ // -------------------------------------------------------------------------- //
8
+ // Layout surface — single workspace, or the tab strip (with inline rename)
9
+ // wrapping one workspace per tab
10
+ // -------------------------------------------------------------------------- //
11
+ /**
12
+ * The "Layout" view's canvas surface, extracted from `layout-builder.tsx`.
13
+ *
14
+ * Renders either a single `Workspace` (rows draft) or the tab strip with
15
+ * the inline-rename editor plus one `Workspace` per tab (tabs draft). All
16
+ * state stays in the LayoutBuilder container — rename feedback included —
17
+ * so unmounting this surface (e.g. switching to the Pipeline view) loses
18
+ * nothing. Props in, callbacks out; the shared `workspace` bag is spread
19
+ * into `<Workspace>` untouched so its memo semantics are unchanged.
20
+ */
21
+ export function LayoutSurface({ L, draft, activeTabIndex, setActiveTabIndex, editingTabIdx, setEditingTabIdx, renameRejected, commitRename, onAddTab, onRemoveTab, workspace, }) {
22
+ if (draft.kind !== "tabs") {
23
+ return _jsx(Workspace, { ...workspace, showAddTabButton: true, onAddTab: onAddTab });
24
+ }
25
+ return (_jsxs(Tabs, { value: draft.tabs[activeTabIndex]?.label ?? "", onValueChange: (label) => {
26
+ const idx = draft.tabs.findIndex((t) => t.label === label);
27
+ if (idx >= 0)
28
+ setActiveTabIndex(idx);
29
+ }, children: [_jsxs("div", { className: "mb-3 flex items-center gap-1", children: [_jsx(TabsList, { children: draft.tabs.map((tab, idx) => (_jsxs("div", { className: "group relative inline-flex", children: [_jsx(TabsTrigger, { value: tab.label, className: "pr-7", onDoubleClick: () => setEditingTabIdx(idx), title: "Double-click to rename", children: editingTabIdx === idx ? (_jsx("input", { autoFocus: true, defaultValue: tab.label, "aria-invalid": renameRejected, onClick: (e) => e.stopPropagation(), onPointerDown: (e) => e.stopPropagation(), onKeyDown: (e) => {
30
+ if (e.key === "Enter") {
31
+ e.preventDefault();
32
+ commitRename(idx, e.currentTarget.value);
33
+ }
34
+ else if (e.key === "Escape") {
35
+ e.preventDefault();
36
+ setEditingTabIdx(null);
37
+ }
38
+ }, onBlur: (e) => {
39
+ commitRename(idx, e.currentTarget.value);
40
+ }, className: cn("w-24 border-none bg-transparent p-0 text-inherit outline-none focus:ring-0", renameRejected && "text-destructive"), size: Math.max(tab.label.length + 1, 6) })) : (_jsx("span", { children: tab.label })) }), _jsx("button", { type: "button", "aria-label": L.removeTab, title: L.removeTab, onPointerDown: (e) => e.stopPropagation(), onClick: (e) => {
41
+ e.stopPropagation();
42
+ onRemoveTab(idx);
43
+ }, className: "text-muted-foreground/60 hover:text-foreground absolute top-1/2 right-1 -translate-y-1/2 rounded p-0.5 opacity-0 transition-opacity group-hover:opacity-100 data-[state=active]:opacity-100", children: _jsx(X, { className: "size-3" }) })] }, tab.label))) }), _jsx(Button, { variant: "ghost", size: "icon-sm", onClick: onAddTab, "aria-label": L.addTab, title: L.addTab, children: _jsx(Plus, {}) }), _jsx("span", { className: "text-muted-foreground/70 ml-2 hidden text-[10px] sm:inline", children: "double-click a tab to rename" })] }), renameRejected && editingTabIdx !== null && (_jsx("p", { className: "text-destructive -mt-1 mb-2 text-[11px]", role: "alert", children: L.renameDuplicate })), draft.tabs.map((tab, idx) => (_jsx(TabsContent, { value: tab.label, className: "mt-0", children: idx === activeTabIndex ? _jsx(Workspace, { ...workspace }) : null }, tab.label)))] }));
44
+ }
45
+ //# sourceMappingURL=LayoutSurface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LayoutSurface.js","sourceRoot":"","sources":["../../../src/app/builder/LayoutSurface.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +1,12 @@
1
1
  import type { ReachableWidget, RowDef, WidgetProps } from "@miragon/mcp-toolkit-core";
2
- import { type WidgetComponent } from "../widget-renderer.js";
2
+ import type { WidgetComponent } from "../widget-renderer.js";
3
3
  import type { LayoutBuilderLabels } from "./labels.js";
4
- declare function WorkspaceImpl({ L, paletteByApp, paletteCount, activeRows, focusedRowIndex, setFocusedRowIndex, dragOverRow, setDragOverRow, onAddRow, onRemoveRow, onMoveRow, onSetCellSpan, onRemoveCell, onAddWidget, onConfigureCell, propsSchemaByWidgetId, widgets, widgetProps, showAddTabButton, onAddTab, }: {
4
+ /**
5
+ * Props for the workspace surface. Exported so the LayoutSurface container
6
+ * can pass the shared prop bag through to `<Workspace {...workspace} />`
7
+ * without re-declaring the contract.
8
+ */
9
+ export interface WorkspaceProps {
5
10
  L: Required<LayoutBuilderLabels>;
6
11
  paletteByApp: [string, ReachableWidget[]][];
7
12
  paletteCount: number;
@@ -22,7 +27,8 @@ declare function WorkspaceImpl({ L, paletteByApp, paletteCount, activeRows, focu
22
27
  widgetProps: WidgetProps;
23
28
  showAddTabButton?: boolean;
24
29
  onAddTab?: () => void;
25
- }): import("react").JSX.Element;
30
+ }
31
+ declare function WorkspaceImpl({ L, paletteByApp, paletteCount, activeRows, focusedRowIndex, setFocusedRowIndex, dragOverRow, setDragOverRow, onAddRow, onRemoveRow, onMoveRow, onSetCellSpan, onRemoveCell, onAddWidget, onConfigureCell, propsSchemaByWidgetId, widgets, widgetProps, showAddTabButton, onAddTab, }: WorkspaceProps): import("react").JSX.Element;
26
32
  export declare const Workspace: import("react").MemoExoticComponent<typeof WorkspaceImpl>;
27
33
  export {};
28
34
  //# sourceMappingURL=Workspace.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Workspace.d.ts","sourceRoot":"","sources":["../../../src/app/builder/Workspace.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAarF,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAOtD,iBAAS,aAAa,CAAC,EACrB,CAAC,EACD,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,eAAe,EACf,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,QAAQ,EACR,WAAW,EACX,SAAS,EACT,aAAa,EACb,YAAY,EACZ,WAAW,EACX,eAAe,EACf,qBAAqB,EACrB,OAAO,EACP,WAAW,EACX,gBAAgB,EAChB,QAAQ,GACT,EAAE;IACD,CAAC,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAA;IAChC,YAAY,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,EAAE,CAAA;IAC3C,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IAC5C,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAA;IACtD,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACtE,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACvD,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9D,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1D,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAC3D,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACxC,WAAW,EAAE,WAAW,CAAA;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CACtB,+BA4EA;AAED,eAAO,MAAM,SAAS,2DAAsB,CAAA"}
1
+ {"version":3,"file":"Workspace.d.ts","sourceRoot":"","sources":["../../../src/app/builder/Workspace.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAIrF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAQtD;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,CAAC,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAA;IAChC,YAAY,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,EAAE,CAAA;IAC3C,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IAC5C,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAA;IACtD,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACtE,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACvD,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9D,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1D,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAC3D,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACxC,WAAW,EAAE,WAAW,CAAA;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CACtB;AAED,iBAAS,aAAa,CAAC,EACrB,CAAC,EACD,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,eAAe,EACf,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,QAAQ,EACR,WAAW,EACX,SAAS,EACT,aAAa,EACb,YAAY,EACZ,WAAW,EACX,eAAe,EACf,qBAAqB,EACrB,OAAO,EACP,WAAW,EACX,gBAAgB,EAChB,QAAQ,GACT,EAAE,cAAc,+BA4EhB;AAED,eAAO,MAAM,SAAS,2DAAsB,CAAA"}
@@ -1,17 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { memo, useCallback, useRef } from "react";
3
- import { ChevronDown, ChevronUp, GripVertical, Plus, SlidersHorizontal, Trash2, X, } from "lucide-react";
4
- import { GridItem, GridLayout } from "../../components/GridLayout.js";
2
+ import { memo } from "react";
3
+ import { GripVertical, Plus } from "lucide-react";
5
4
  import { Badge } from "../../primitives/badge.js";
6
5
  import { Button } from "../../primitives/button.js";
7
6
  import { ScrollArea } from "../../primitives/scroll-area.js";
8
- import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "../../primitives/select.js";
9
- import { cn } from "../../lib/utils.js";
10
- import { RenderedWidget } from "../widget-renderer.js";
11
7
  import { WIDGET_DRAG_MIME } from "./labels.js";
12
- // -------------------------------------------------------------------------- //
13
- // Workspace — palette + canvas (palette sticky on lg+)
14
- // -------------------------------------------------------------------------- //
8
+ import { CanvasRow } from "./CanvasRow.js";
15
9
  function WorkspaceImpl({ L, paletteByApp, paletteCount, activeRows, focusedRowIndex, setFocusedRowIndex, dragOverRow, setDragOverRow, onAddRow, onRemoveRow, onMoveRow, onSetCellSpan, onRemoveCell, onAddWidget, onConfigureCell, propsSchemaByWidgetId, widgets, widgetProps, showAddTabButton, onAddTab, }) {
16
10
  return (_jsxs("div", { className: "grid grid-cols-12 gap-4", children: [_jsx("aside", { className: "col-span-12 lg:col-span-3 xl:col-span-2", children: _jsxs("div", { className: "lg:sticky lg:top-16", children: [_jsxs("div", { className: "text-muted-foreground mb-2 flex items-center gap-2 text-[10px] font-semibold tracking-[0.12em] uppercase", children: [L.paletteHeader, _jsx(Badge, { variant: "outline", className: "px-1.5 text-[10px]", children: paletteCount })] }), paletteCount === 0 ? (_jsx("div", { className: "text-muted-foreground rounded-md border border-dashed p-3 text-xs", children: L.paletteEmpty })) : (_jsx(ScrollArea, { className: "lg:max-h-[70vh]", children: _jsx("div", { className: "flex flex-col gap-3 pr-1", children: paletteByApp.map(([app, ws]) => (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("div", { className: "text-muted-foreground/80 text-[10px] font-semibold tracking-wide uppercase", children: app }), ws.map((w) => (_jsx(PaletteItem, { w: w, onClick: () => onAddWidget(w.id) }, w.id)))] }, app))) }) })), showAddTabButton && onAddTab && (_jsxs(Button, { variant: "ghost", size: "xs", onClick: onAddTab, className: "text-muted-foreground hover:text-foreground mt-3", children: [_jsx(Plus, {}), " ", L.addTab] }))] }) }), _jsx("section", { className: "col-span-12 lg:col-span-9 xl:col-span-10", children: _jsxs("div", { className: "flex flex-col gap-3", children: [activeRows.map((row, rowIdx) => (_jsx(CanvasRow, { L: L, row: row, rowIdx: rowIdx, focused: rowIdx === focusedRowIndex, isFirst: rowIdx === 0, isLast: rowIdx === activeRows.length - 1, dragOver: dragOverRow === rowIdx, setDragOverRow: setDragOverRow, setFocusedRowIndex: setFocusedRowIndex, onRemoveRow: onRemoveRow, onMoveRow: onMoveRow, onSetCellSpan: onSetCellSpan, onRemoveCell: onRemoveCell, onAddWidget: onAddWidget, onConfigureCell: onConfigureCell, propsSchemaByWidgetId: propsSchemaByWidgetId, widgets: widgets, widgetProps: widgetProps }, rowIdx))), _jsxs(Button, { variant: "outline", size: "sm", onClick: onAddRow, className: "self-start text-xs", children: [_jsx(Plus, {}), " ", L.addRow] })] }) })] }));
17
11
  }
@@ -26,92 +20,4 @@ function PaletteItemImpl({ w, onClick }) {
26
20
  }, onClick: onClick, className: "hover:bg-accent hover:text-accent-foreground group bg-background/50 flex cursor-grab flex-col items-start gap-0.5 rounded-md border px-2 py-1.5 text-left text-xs transition-colors active:cursor-grabbing", children: [_jsxs("span", { className: "flex w-full items-center justify-between gap-2", children: [_jsx("span", { className: "truncate font-mono", children: w.id }), _jsx(GripVertical, { className: "text-muted-foreground/40 group-hover:text-muted-foreground size-3" })] }), w.requires.length > 0 && (_jsxs("span", { className: "text-muted-foreground/80 truncate font-mono text-[10px]", children: ["\u2190 ", w.requires.join(", ")] }))] }));
27
21
  }
28
22
  const PaletteItem = memo(PaletteItemImpl);
29
- // -------------------------------------------------------------------------- //
30
- // Canvas row — drop target + per-cell controls + resize handle
31
- // -------------------------------------------------------------------------- //
32
- function CanvasRowImpl({ L, row, rowIdx, focused, isFirst, isLast, dragOver, setDragOverRow, setFocusedRowIndex, onRemoveRow, onMoveRow, onSetCellSpan, onRemoveCell, onAddWidget, onConfigureCell, propsSchemaByWidgetId, widgets, widgetProps, }) {
33
- const gridRef = useRef(null);
34
- return (_jsxs("div", { onClick: () => setFocusedRowIndex(rowIdx), onDragOver: (e) => {
35
- if (!e.dataTransfer.types.includes(WIDGET_DRAG_MIME))
36
- return;
37
- e.preventDefault();
38
- e.dataTransfer.dropEffect = "copy";
39
- setDragOverRow(rowIdx);
40
- }, onDragLeave: (e) => {
41
- if (e.currentTarget.contains(e.relatedTarget))
42
- return;
43
- setDragOverRow(null);
44
- }, onDrop: (e) => {
45
- const id = e.dataTransfer.getData(WIDGET_DRAG_MIME);
46
- setDragOverRow(null);
47
- if (id) {
48
- e.preventDefault();
49
- onAddWidget(id, rowIdx);
50
- }
51
- }, className: cn("group relative rounded-lg border-l-2 px-3 py-2 transition-colors", focused
52
- ? "border-l-primary bg-card"
53
- : "bg-background hover:bg-card/60 border-l-transparent", dragOver && "bg-primary/5 border-l-primary"), children: [_jsxs("div", { className: "mb-2 flex items-center justify-between", children: [_jsxs("div", { className: "text-muted-foreground flex items-center gap-2 text-[11px]", children: [_jsxs("span", { className: "font-mono", children: ["row ", rowIdx + 1] }), _jsxs("span", { className: "bg-muted/60 rounded px-1 py-0.5 text-[10px]", children: [row.row.length, " ", row.row.length === 1 ? "widget" : "widgets"] })] }), _jsxs("div", { className: "opacity-0 transition-opacity group-hover:opacity-100", children: [_jsx(Button, { variant: "ghost", size: "icon-xs", onClick: (e) => {
54
- e.stopPropagation();
55
- onMoveRow(rowIdx, -1);
56
- }, disabled: isFirst, "aria-label": "Move row up", children: _jsx(ChevronUp, {}) }), _jsx(Button, { variant: "ghost", size: "icon-xs", onClick: (e) => {
57
- e.stopPropagation();
58
- onMoveRow(rowIdx, 1);
59
- }, disabled: isLast, "aria-label": "Move row down", children: _jsx(ChevronDown, {}) }), _jsx(Button, { variant: "ghost", size: "icon-xs", onClick: (e) => {
60
- e.stopPropagation();
61
- onRemoveRow(rowIdx);
62
- }, "aria-label": L.removeRow, children: _jsx(Trash2, {}) })] })] }), row.row.length === 0 ? (_jsx("div", { className: cn("rounded-md border border-dashed py-6 text-center text-[11px] transition-colors", dragOver
63
- ? "border-primary bg-primary/5 text-primary"
64
- : "border-muted-foreground/30 text-muted-foreground"), children: dragOver ? L.canvasDropHint : L.canvasEmpty })) : (_jsx("div", { ref: gridRef, "data-row-grid": true, children: _jsx(GridLayout, { children: row.row.map((cell, cellIdx) => {
65
- const span = cell.span ?? 12;
66
- const Widget = widgets[cell.widget];
67
- const hasPropsSchema = propsSchemaByWidgetId.has(cell.widget);
68
- const propCount = cell.props ? Object.keys(cell.props).length : 0;
69
- return (_jsx(GridItem, { span: span, children: _jsxs("div", { className: "border-border bg-card relative overflow-hidden rounded-md border shadow-sm", children: [_jsxs("div", { className: "text-muted-foreground bg-muted/30 flex items-center justify-between gap-2 border-b px-2 py-1 text-[10px]", children: [_jsx("span", { className: "truncate font-mono", children: cell.widget }), _jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [_jsxs("label", { className: "text-muted-foreground/80 inline-flex items-center gap-0.5 font-mono", children: [_jsx("span", { className: "sr-only", children: "Column span" }), _jsxs(Select, { value: String(span), onValueChange: (v) => onSetCellSpan(rowIdx, cellIdx, Number(v)), children: [_jsx(SelectTrigger, { size: "sm", className: "h-5 gap-0.5 border-none bg-transparent px-1 py-0 font-mono text-[10px] shadow-none focus:ring-0", "aria-label": "Column span", onClick: (e) => e.stopPropagation(), children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: Array.from({ length: 12 }, (_, i) => i + 1).map((n) => (_jsx(SelectItem, { value: String(n), className: "font-mono text-xs", children: n }, n))) })] }), _jsx("span", { "aria-hidden": "true", children: "/12" })] }), hasPropsSchema && (_jsx(Button, { variant: "ghost", size: "icon-xs", onClick: (e) => {
70
- e.stopPropagation();
71
- onConfigureCell(rowIdx, cellIdx);
72
- }, "aria-label": "Configure widget props", title: propCount > 0
73
- ? `Configure widget props (${propCount} set)`
74
- : "Configure widget props", className: cn(propCount > 0 && "text-primary"), children: _jsx(SlidersHorizontal, {}) })), _jsx(Button, { variant: "ghost", size: "icon-xs", onClick: (e) => {
75
- e.stopPropagation();
76
- onRemoveCell(rowIdx, cellIdx);
77
- }, "aria-label": "Remove widget", children: _jsx(X, {}) })] })] }), _jsx("div", { className: "p-2", children: _jsx(RenderedWidget, { widget: Widget, widgetId: cell.widget, props: widgetProps, cellProps: cell.props, showEmptyHint: true, notBundledClassName: "text-muted-foreground rounded border border-dashed p-3 text-center text-[11px]" }) }), _jsx(ResizeHandle, { rowIdx: rowIdx, cellIdx: cellIdx, span: span, getGridEl: () => gridRef.current, onSetCellSpan: onSetCellSpan })] }) }, `${cell.widget}-${cellIdx}`));
78
- }) }) }))] }));
79
- }
80
- const CanvasRow = memo(CanvasRowImpl);
81
- // -------------------------------------------------------------------------- //
82
- // Resize handle
83
- // -------------------------------------------------------------------------- //
84
- function ResizeHandle({ rowIdx, cellIdx, span, getGridEl, onSetCellSpan, }) {
85
- const onPointerDown = useCallback((e) => {
86
- e.preventDefault();
87
- e.stopPropagation();
88
- const grid = getGridEl();
89
- if (!grid)
90
- return;
91
- const rect = grid.getBoundingClientRect();
92
- const colWidth = rect.width / 12;
93
- const startX = e.clientX;
94
- const startSpan = span;
95
- const onMove = (ev) => {
96
- const delta = ev.clientX - startX;
97
- const next = Math.round(startSpan + delta / colWidth);
98
- onSetCellSpan(rowIdx, cellIdx, Math.max(1, Math.min(12, next)));
99
- };
100
- const onUp = () => {
101
- window.removeEventListener("pointermove", onMove);
102
- window.removeEventListener("pointerup", onUp);
103
- };
104
- window.addEventListener("pointermove", onMove);
105
- window.addEventListener("pointerup", onUp);
106
- }, [cellIdx, getGridEl, onSetCellSpan, rowIdx, span]);
107
- const onKeyDown = useCallback((e) => {
108
- const dir = e.key === "ArrowLeft" ? -1 : e.key === "ArrowRight" ? 1 : 0;
109
- if (dir === 0)
110
- return;
111
- e.preventDefault();
112
- e.stopPropagation();
113
- onSetCellSpan(rowIdx, cellIdx, Math.max(1, Math.min(12, span + dir)));
114
- }, [cellIdx, onSetCellSpan, rowIdx, span]);
115
- return (_jsx("div", { onPointerDown: onPointerDown, onClick: (e) => e.stopPropagation(), onKeyDown: onKeyDown, tabIndex: 0, className: "hover:bg-primary/40 focus-visible:bg-primary/40 focus-visible:ring-primary/60 absolute top-0 right-0 h-full w-1.5 cursor-col-resize touch-none select-none focus-visible:ring-1 focus-visible:outline-none", "aria-label": "Resize widget", role: "separator", "aria-orientation": "vertical", "aria-valuenow": span, "aria-valuemin": 1, "aria-valuemax": 12 }));
116
- }
117
23
  //# sourceMappingURL=Workspace.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Workspace.js","sourceRoot":"","sources":["../../../src/app/builder/Workspace.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Workspace.js","sourceRoot":"","sources":["../../../src/app/builder/Workspace.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"builder-reducer.d.ts","sourceRoot":"","sources":["../../../src/app/builder/builder-reducer.ts"],"names":[],"mappings":"AAUA,OAAO,EAAa,KAAK,WAAW,EAAiB,MAAM,oBAAoB,CAAA;AAM/E;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,WAAW,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B;;;;;OAKG;IACH,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,iBAAiB,CAQtE;AAMD,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GACxF;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACtE;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACvD;IACE,IAAI,EAAE,cAAc,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;CAC1C,GACD;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAkCzC,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,aAAa,GAAG,iBAAiB,CA0L/F"}
1
+ {"version":3,"file":"builder-reducer.d.ts","sourceRoot":"","sources":["../../../src/app/builder/builder-reducer.ts"],"names":[],"mappings":"AAUA,OAAO,EAAa,KAAK,WAAW,EAAiB,MAAM,oBAAoB,CAAA;AAM/E;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,WAAW,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B;;;;;OAKG;IACH,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,iBAAiB,CAQtE;AAMD,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GACxF;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACtE;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACvD;IACE,IAAI,EAAE,cAAc,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;CAC1C,GACD;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAqPzC,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,aAAa,GAAG,iBAAiB,CAS/F"}