@seed-ship/mcp-ui-solid 2.1.0 → 2.1.1

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 (31) hide show
  1. package/dist/components/DraggableGridItem.cjs +2 -2
  2. package/dist/components/DraggableGridItem.cjs.map +1 -1
  3. package/dist/components/DraggableGridItem.d.ts +1 -1
  4. package/dist/components/DraggableGridItem.d.ts.map +1 -1
  5. package/dist/components/DraggableGridItem.js +2 -2
  6. package/dist/components/DraggableGridItem.js.map +1 -1
  7. package/dist/components/EditableUIResourceRenderer.cjs +2 -6
  8. package/dist/components/EditableUIResourceRenderer.cjs.map +1 -1
  9. package/dist/components/EditableUIResourceRenderer.d.ts.map +1 -1
  10. package/dist/components/EditableUIResourceRenderer.js +2 -6
  11. package/dist/components/EditableUIResourceRenderer.js.map +1 -1
  12. package/dist/components/ResizeHandle.cjs +6 -2
  13. package/dist/components/ResizeHandle.cjs.map +1 -1
  14. package/dist/components/ResizeHandle.d.ts +1 -1
  15. package/dist/components/ResizeHandle.d.ts.map +1 -1
  16. package/dist/components/ResizeHandle.js +6 -2
  17. package/dist/components/ResizeHandle.js.map +1 -1
  18. package/dist/hooks/useAutocomplete.cjs +8 -0
  19. package/dist/hooks/useAutocomplete.cjs.map +1 -1
  20. package/dist/hooks/useAutocomplete.d.ts.map +1 -1
  21. package/dist/hooks/useAutocomplete.js +8 -0
  22. package/dist/hooks/useAutocomplete.js.map +1 -1
  23. package/esbuild-why-Full bundle (with deps).html +51 -0
  24. package/esbuild-why-Hooks only.html +51 -0
  25. package/esbuild-why-Streaming renderer.html +51 -0
  26. package/package.json +1 -1
  27. package/src/components/DraggableGridItem.tsx +3 -3
  28. package/src/components/EditableUIResourceRenderer.tsx +2 -7
  29. package/src/components/ResizeHandle.tsx +8 -3
  30. package/src/hooks/useAutocomplete.ts +16 -0
  31. package/tsconfig.tsbuildinfo +1 -1
@@ -54,9 +54,9 @@ const DraggableGridItem = (props) => {
54
54
  if (props.class) classes.push(props.class);
55
55
  return classes.join(" ");
56
56
  });
57
- const handleResizeStart = (edge) => {
57
+ const handleResizeStart = (edge, event) => {
58
58
  var _a;
59
- (_a = props.onResizeStart) == null ? void 0 : _a.call(props, edge);
59
+ (_a = props.onResizeStart) == null ? void 0 : _a.call(props, edge, event);
60
60
  };
61
61
  return (() => {
62
62
  var _el$ = web.getNextElement(_tmpl$3), _el$5 = _el$.firstChild, [_el$6, _co$] = web.getNextMarker(_el$5.nextSibling), _el$7 = _el$6.nextSibling, [_el$8, _co$2] = web.getNextMarker(_el$7.nextSibling), _el$9 = _el$8.nextSibling, [_el$0, _co$3] = web.getNextMarker(_el$9.nextSibling), _el$4 = _el$0.nextSibling;
@@ -1 +1 @@
1
- {"version":3,"file":"DraggableGridItem.cjs","sources":["../../src/components/DraggableGridItem.tsx"],"sourcesContent":["/**\n * DraggableGridItem Component\n * Wrapper for grid items that enables drag-and-drop reordering and resizing\n *\n * Sprint Drag-Drop Feature\n */\n\nimport { Component, JSX, Show, createMemo, mergeProps } from 'solid-js'\nimport type { GridPosition, ResizeConstraints } from '../types'\nimport { ResizeHandle } from './ResizeHandle'\n\n/**\n * Props for DraggableGridItem\n */\nexport interface DraggableGridItemProps {\n /**\n * Component ID\n */\n id: string\n\n /**\n * Grid position\n */\n position: GridPosition\n\n /**\n * Whether dragging is enabled\n */\n draggable?: boolean\n\n /**\n * Whether resizing is enabled\n */\n resizable?: boolean\n\n /**\n * Resize constraints\n */\n constraints?: ResizeConstraints\n\n /**\n * Whether this item is currently being dragged\n */\n isDragging?: boolean\n\n /**\n * Whether this item is a drop target\n */\n isDropTarget?: boolean\n\n /**\n * Preview position during resize\n */\n previewPosition?: GridPosition | null\n\n /**\n * Drag props from useDragDrop\n */\n dragProps?: {\n draggable: boolean\n onDragStart: (e: DragEvent) => void\n onDragOver: (e: DragEvent) => void\n onDragEnter: (e: DragEvent) => void\n onDragLeave: (e: DragEvent) => void\n onDrop: (e: DragEvent) => void\n onDragEnd: (e: DragEvent) => void\n }\n\n /**\n * Callback when resize starts\n */\n onResizeStart?: (edge: 'left' | 'right' | 'top' | 'bottom') => void\n\n /**\n * Callback for resize preview\n */\n onResizePreview?: (position: GridPosition) => void\n\n /**\n * Callback when resize completes\n */\n onResize?: (position: GridPosition) => void\n\n /**\n * Whether resize is in progress\n */\n isResizing?: boolean\n\n /**\n * Show grid overlay during drag/resize\n */\n showGridOverlay?: boolean\n\n /**\n * Custom CSS class\n */\n class?: string\n\n /**\n * Custom styles\n */\n style?: JSX.CSSProperties\n\n /**\n * Children to render\n */\n children?: JSX.Element\n}\n\n/**\n * Generate CSS Grid style string from position\n */\nfunction getGridStyle(position: GridPosition): JSX.CSSProperties {\n return {\n 'grid-column': `${position.colStart} / span ${position.colSpan}`,\n 'grid-row': position.rowStart\n ? `${position.rowStart} / span ${position.rowSpan || 1}`\n : undefined\n }\n}\n\n/**\n * DraggableGridItem Component\n */\nexport const DraggableGridItem: Component<DraggableGridItemProps> = (props) => {\n const merged = mergeProps(\n {\n draggable: false,\n resizable: false,\n isDragging: false,\n isDropTarget: false,\n isResizing: false,\n showGridOverlay: false\n },\n props\n )\n\n // Use preview position during resize if available\n const effectivePosition = createMemo(() =>\n merged.previewPosition || props.position\n )\n\n // Compute grid style\n const gridStyle = createMemo(() => getGridStyle(effectivePosition()))\n\n // Compute combined style\n const combinedStyle = createMemo((): JSX.CSSProperties => {\n const base: JSX.CSSProperties = {\n ...gridStyle(),\n position: 'relative',\n transition: merged.isResizing ? 'none' : 'all 200ms ease-out'\n }\n\n // Add drag/drop visual feedback\n if (merged.isDragging) {\n base.opacity = '0.5'\n base.transform = 'scale(1.02)'\n base['z-index'] = '100'\n }\n\n if (merged.isDropTarget && !merged.isDragging) {\n base['box-shadow'] = '0 0 0 2px #3b82f6'\n base['border-radius'] = '4px'\n }\n\n if (merged.isResizing) {\n base['z-index'] = '100'\n }\n\n // Merge with custom styles\n if (props.style) {\n Object.assign(base, props.style)\n }\n\n return base\n })\n\n // Build class names\n const classNames = createMemo(() => {\n const classes = ['mcp-draggable-grid-item']\n\n if (merged.draggable) classes.push('mcp-draggable')\n if (merged.resizable) classes.push('mcp-resizable')\n if (merged.isDragging) classes.push('mcp-dragging')\n if (merged.isDropTarget) classes.push('mcp-drop-target')\n if (merged.isResizing) classes.push('mcp-resizing')\n if (props.class) classes.push(props.class)\n\n return classes.join(' ')\n })\n\n // Handle resize start\n const handleResizeStart = (edge: 'left' | 'right' | 'top' | 'bottom') => {\n props.onResizeStart?.(edge)\n }\n\n return (\n <div\n class={classNames()}\n style={combinedStyle()}\n data-component-id={props.id}\n {...(merged.draggable && props.dragProps ? props.dragProps : {})}\n >\n {/* Drag handle indicator */}\n <Show when={merged.draggable && !merged.isResizing}>\n <div\n class=\"mcp-drag-handle\"\n style={{\n position: 'absolute',\n top: '4px',\n left: '50%',\n transform: 'translateX(-50%)',\n width: '40px',\n height: '4px',\n 'background-color': 'rgba(0, 0, 0, 0.2)',\n 'border-radius': '2px',\n cursor: 'grab',\n opacity: '0',\n transition: 'opacity 150ms ease',\n 'z-index': '5'\n }}\n />\n </Show>\n\n {/* Resize handles */}\n <Show when={merged.resizable && !merged.isDragging}>\n <ResizeHandle\n edge=\"left\"\n onResizeStart={handleResizeStart}\n disabled={merged.constraints?.lockHorizontal}\n />\n <ResizeHandle\n edge=\"right\"\n onResizeStart={handleResizeStart}\n disabled={merged.constraints?.lockHorizontal}\n />\n <ResizeHandle\n edge=\"top\"\n onResizeStart={handleResizeStart}\n disabled={merged.constraints?.lockVertical}\n />\n <ResizeHandle\n edge=\"bottom\"\n onResizeStart={handleResizeStart}\n disabled={merged.constraints?.lockVertical}\n />\n </Show>\n\n {/* Drop indicator line */}\n <Show when={merged.isDropTarget && !merged.isDragging}>\n <div\n class=\"mcp-drop-indicator\"\n style={{\n position: 'absolute',\n top: '-2px',\n left: '0',\n right: '0',\n height: '4px',\n 'background-color': '#3b82f6',\n 'border-radius': '2px',\n 'z-index': '20'\n }}\n />\n </Show>\n\n {/* Content */}\n <div class=\"mcp-grid-item-content\" style={{ position: 'relative', 'z-index': '1' }}>\n {props.children}\n </div>\n </div>\n )\n}\n\nexport default DraggableGridItem\n"],"names":["getGridStyle","position","colStart","colSpan","rowStart","rowSpan","undefined","DraggableGridItem","props","merged","mergeProps","draggable","resizable","isDragging","isDropTarget","isResizing","showGridOverlay","effectivePosition","createMemo","previewPosition","gridStyle","combinedStyle","base","transition","opacity","transform","style","Object","assign","classNames","classes","push","class","join","handleResizeStart","edge","onResizeStart","_el$","_$getNextElement","_tmpl$3","_el$5","firstChild","_el$6","_co$","_$getNextMarker","nextSibling","_el$7","_el$8","_co$2","_el$9","_el$0","_co$3","_el$4","_$spread","_$mergeProps","id","dragProps","_$insert","_$createComponent","Show","when","_$memo","children","_tmpl$","ResizeHandle","disabled","constraints","lockHorizontal","lockVertical","_tmpl$2","_$runHydrationEvents"],"mappings":"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"}
1
+ {"version":3,"file":"DraggableGridItem.cjs","sources":["../../src/components/DraggableGridItem.tsx"],"sourcesContent":["/**\n * DraggableGridItem Component\n * Wrapper for grid items that enables drag-and-drop reordering and resizing\n *\n * Sprint Drag-Drop Feature\n */\n\nimport { Component, JSX, Show, createMemo, mergeProps } from 'solid-js'\nimport type { GridPosition, ResizeConstraints } from '../types'\nimport { ResizeHandle } from './ResizeHandle'\n\n/**\n * Props for DraggableGridItem\n */\nexport interface DraggableGridItemProps {\n /**\n * Component ID\n */\n id: string\n\n /**\n * Grid position\n */\n position: GridPosition\n\n /**\n * Whether dragging is enabled\n */\n draggable?: boolean\n\n /**\n * Whether resizing is enabled\n */\n resizable?: boolean\n\n /**\n * Resize constraints\n */\n constraints?: ResizeConstraints\n\n /**\n * Whether this item is currently being dragged\n */\n isDragging?: boolean\n\n /**\n * Whether this item is a drop target\n */\n isDropTarget?: boolean\n\n /**\n * Preview position during resize\n */\n previewPosition?: GridPosition | null\n\n /**\n * Drag props from useDragDrop\n */\n dragProps?: {\n draggable: boolean\n onDragStart: (e: DragEvent) => void\n onDragOver: (e: DragEvent) => void\n onDragEnter: (e: DragEvent) => void\n onDragLeave: (e: DragEvent) => void\n onDrop: (e: DragEvent) => void\n onDragEnd: (e: DragEvent) => void\n }\n\n /**\n * Callback when resize starts\n */\n onResizeStart?: (edge: 'left' | 'right' | 'top' | 'bottom', event: PointerEvent) => void\n\n /**\n * Callback for resize preview\n */\n onResizePreview?: (position: GridPosition) => void\n\n /**\n * Callback when resize completes\n */\n onResize?: (position: GridPosition) => void\n\n /**\n * Whether resize is in progress\n */\n isResizing?: boolean\n\n /**\n * Show grid overlay during drag/resize\n */\n showGridOverlay?: boolean\n\n /**\n * Custom CSS class\n */\n class?: string\n\n /**\n * Custom styles\n */\n style?: JSX.CSSProperties\n\n /**\n * Children to render\n */\n children?: JSX.Element\n}\n\n/**\n * Generate CSS Grid style string from position\n */\nfunction getGridStyle(position: GridPosition): JSX.CSSProperties {\n return {\n 'grid-column': `${position.colStart} / span ${position.colSpan}`,\n 'grid-row': position.rowStart\n ? `${position.rowStart} / span ${position.rowSpan || 1}`\n : undefined\n }\n}\n\n/**\n * DraggableGridItem Component\n */\nexport const DraggableGridItem: Component<DraggableGridItemProps> = (props) => {\n const merged = mergeProps(\n {\n draggable: false,\n resizable: false,\n isDragging: false,\n isDropTarget: false,\n isResizing: false,\n showGridOverlay: false\n },\n props\n )\n\n // Use preview position during resize if available\n const effectivePosition = createMemo(() =>\n merged.previewPosition || props.position\n )\n\n // Compute grid style\n const gridStyle = createMemo(() => getGridStyle(effectivePosition()))\n\n // Compute combined style\n const combinedStyle = createMemo((): JSX.CSSProperties => {\n const base: JSX.CSSProperties = {\n ...gridStyle(),\n position: 'relative',\n transition: merged.isResizing ? 'none' : 'all 200ms ease-out'\n }\n\n // Add drag/drop visual feedback\n if (merged.isDragging) {\n base.opacity = '0.5'\n base.transform = 'scale(1.02)'\n base['z-index'] = '100'\n }\n\n if (merged.isDropTarget && !merged.isDragging) {\n base['box-shadow'] = '0 0 0 2px #3b82f6'\n base['border-radius'] = '4px'\n }\n\n if (merged.isResizing) {\n base['z-index'] = '100'\n }\n\n // Merge with custom styles\n if (props.style) {\n Object.assign(base, props.style)\n }\n\n return base\n })\n\n // Build class names\n const classNames = createMemo(() => {\n const classes = ['mcp-draggable-grid-item']\n\n if (merged.draggable) classes.push('mcp-draggable')\n if (merged.resizable) classes.push('mcp-resizable')\n if (merged.isDragging) classes.push('mcp-dragging')\n if (merged.isDropTarget) classes.push('mcp-drop-target')\n if (merged.isResizing) classes.push('mcp-resizing')\n if (props.class) classes.push(props.class)\n\n return classes.join(' ')\n })\n\n // Handle resize start\n const handleResizeStart = (edge: 'left' | 'right' | 'top' | 'bottom', event: PointerEvent) => {\n props.onResizeStart?.(edge, event)\n }\n\n return (\n <div\n class={classNames()}\n style={combinedStyle()}\n data-component-id={props.id}\n {...(merged.draggable && props.dragProps ? props.dragProps : {})}\n >\n {/* Drag handle indicator */}\n <Show when={merged.draggable && !merged.isResizing}>\n <div\n class=\"mcp-drag-handle\"\n style={{\n position: 'absolute',\n top: '4px',\n left: '50%',\n transform: 'translateX(-50%)',\n width: '40px',\n height: '4px',\n 'background-color': 'rgba(0, 0, 0, 0.2)',\n 'border-radius': '2px',\n cursor: 'grab',\n opacity: '0',\n transition: 'opacity 150ms ease',\n 'z-index': '5'\n }}\n />\n </Show>\n\n {/* Resize handles */}\n <Show when={merged.resizable && !merged.isDragging}>\n <ResizeHandle\n edge=\"left\"\n onResizeStart={handleResizeStart}\n disabled={merged.constraints?.lockHorizontal}\n />\n <ResizeHandle\n edge=\"right\"\n onResizeStart={handleResizeStart}\n disabled={merged.constraints?.lockHorizontal}\n />\n <ResizeHandle\n edge=\"top\"\n onResizeStart={handleResizeStart}\n disabled={merged.constraints?.lockVertical}\n />\n <ResizeHandle\n edge=\"bottom\"\n onResizeStart={handleResizeStart}\n disabled={merged.constraints?.lockVertical}\n />\n </Show>\n\n {/* Drop indicator line */}\n <Show when={merged.isDropTarget && !merged.isDragging}>\n <div\n class=\"mcp-drop-indicator\"\n style={{\n position: 'absolute',\n top: '-2px',\n left: '0',\n right: '0',\n height: '4px',\n 'background-color': '#3b82f6',\n 'border-radius': '2px',\n 'z-index': '20'\n }}\n />\n </Show>\n\n {/* Content */}\n <div class=\"mcp-grid-item-content\" style={{ position: 'relative', 'z-index': '1' }}>\n {props.children}\n </div>\n </div>\n )\n}\n\nexport default DraggableGridItem\n"],"names":["getGridStyle","position","colStart","colSpan","rowStart","rowSpan","undefined","DraggableGridItem","props","merged","mergeProps","draggable","resizable","isDragging","isDropTarget","isResizing","showGridOverlay","effectivePosition","createMemo","previewPosition","gridStyle","combinedStyle","base","transition","opacity","transform","style","Object","assign","classNames","classes","push","class","join","handleResizeStart","edge","event","onResizeStart","_el$","_$getNextElement","_tmpl$3","_el$5","firstChild","_el$6","_co$","_$getNextMarker","nextSibling","_el$7","_el$8","_co$2","_el$9","_el$0","_co$3","_el$4","_$spread","_$mergeProps","id","dragProps","_$insert","_$createComponent","Show","when","_$memo","children","_tmpl$","ResizeHandle","disabled","constraints","lockHorizontal","lockVertical","_tmpl$2","_$runHydrationEvents"],"mappings":"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"}
@@ -57,7 +57,7 @@ export interface DraggableGridItemProps {
57
57
  /**
58
58
  * Callback when resize starts
59
59
  */
60
- onResizeStart?: (edge: 'left' | 'right' | 'top' | 'bottom') => void;
60
+ onResizeStart?: (edge: 'left' | 'right' | 'top' | 'bottom', event: PointerEvent) => void;
61
61
  /**
62
62
  * Callback for resize preview
63
63
  */
@@ -1 +1 @@
1
- {"version":3,"file":"DraggableGridItem.d.ts","sourceRoot":"","sources":["../../src/components/DraggableGridItem.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,GAAG,EAAgC,MAAM,UAAU,CAAA;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAG/D;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,EAAE,EAAE,MAAM,CAAA;IAEV;;OAEG;IACH,QAAQ,EAAE,YAAY,CAAA;IAEtB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB;;OAEG;IACH,WAAW,CAAC,EAAE,iBAAiB,CAAA;IAE/B;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IAEpB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB;;OAEG;IACH,eAAe,CAAC,EAAE,YAAY,GAAG,IAAI,CAAA;IAErC;;OAEG;IACH,SAAS,CAAC,EAAE;QACV,SAAS,EAAE,OAAO,CAAA;QAClB,WAAW,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAA;QACnC,UAAU,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAA;QAClC,WAAW,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAA;QACnC,WAAW,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAA;QACnC,MAAM,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAA;QAC9B,SAAS,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAA;KAClC,CAAA;IAED;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,KAAK,IAAI,CAAA;IAEnE;;OAEG;IACH,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAA;IAElD;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAA;IAE3C;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IAEpB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IAEzB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,KAAK,CAAC,EAAE,GAAG,CAAC,aAAa,CAAA;IAEzB;;OAEG;IACH,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;CACvB;AAcD;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,CAAC,sBAAsB,CAmJ/D,CAAA;AAED,eAAe,iBAAiB,CAAA"}
1
+ {"version":3,"file":"DraggableGridItem.d.ts","sourceRoot":"","sources":["../../src/components/DraggableGridItem.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,GAAG,EAAgC,MAAM,UAAU,CAAA;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAG/D;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,EAAE,EAAE,MAAM,CAAA;IAEV;;OAEG;IACH,QAAQ,EAAE,YAAY,CAAA;IAEtB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB;;OAEG;IACH,WAAW,CAAC,EAAE,iBAAiB,CAAA;IAE/B;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IAEpB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB;;OAEG;IACH,eAAe,CAAC,EAAE,YAAY,GAAG,IAAI,CAAA;IAErC;;OAEG;IACH,SAAS,CAAC,EAAE;QACV,SAAS,EAAE,OAAO,CAAA;QAClB,WAAW,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAA;QACnC,UAAU,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAA;QAClC,WAAW,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAA;QACnC,WAAW,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAA;QACnC,MAAM,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAA;QAC9B,SAAS,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAA;KAClC,CAAA;IAED;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,EAAE,KAAK,EAAE,YAAY,KAAK,IAAI,CAAA;IAExF;;OAEG;IACH,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAA;IAElD;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAA;IAE3C;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IAEpB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IAEzB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,KAAK,CAAC,EAAE,GAAG,CAAC,aAAa,CAAA;IAEzB;;OAEG;IACH,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;CACvB;AAcD;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,CAAC,sBAAsB,CAmJ/D,CAAA;AAED,eAAe,iBAAiB,CAAA"}
@@ -52,9 +52,9 @@ const DraggableGridItem = (props) => {
52
52
  if (props.class) classes.push(props.class);
53
53
  return classes.join(" ");
54
54
  });
55
- const handleResizeStart = (edge) => {
55
+ const handleResizeStart = (edge, event) => {
56
56
  var _a;
57
- (_a = props.onResizeStart) == null ? void 0 : _a.call(props, edge);
57
+ (_a = props.onResizeStart) == null ? void 0 : _a.call(props, edge, event);
58
58
  };
59
59
  return (() => {
60
60
  var _el$ = getNextElement(_tmpl$3), _el$5 = _el$.firstChild, [_el$6, _co$] = getNextMarker(_el$5.nextSibling), _el$7 = _el$6.nextSibling, [_el$8, _co$2] = getNextMarker(_el$7.nextSibling), _el$9 = _el$8.nextSibling, [_el$0, _co$3] = getNextMarker(_el$9.nextSibling), _el$4 = _el$0.nextSibling;
@@ -1 +1 @@
1
- {"version":3,"file":"DraggableGridItem.js","sources":["../../src/components/DraggableGridItem.tsx"],"sourcesContent":["/**\n * DraggableGridItem Component\n * Wrapper for grid items that enables drag-and-drop reordering and resizing\n *\n * Sprint Drag-Drop Feature\n */\n\nimport { Component, JSX, Show, createMemo, mergeProps } from 'solid-js'\nimport type { GridPosition, ResizeConstraints } from '../types'\nimport { ResizeHandle } from './ResizeHandle'\n\n/**\n * Props for DraggableGridItem\n */\nexport interface DraggableGridItemProps {\n /**\n * Component ID\n */\n id: string\n\n /**\n * Grid position\n */\n position: GridPosition\n\n /**\n * Whether dragging is enabled\n */\n draggable?: boolean\n\n /**\n * Whether resizing is enabled\n */\n resizable?: boolean\n\n /**\n * Resize constraints\n */\n constraints?: ResizeConstraints\n\n /**\n * Whether this item is currently being dragged\n */\n isDragging?: boolean\n\n /**\n * Whether this item is a drop target\n */\n isDropTarget?: boolean\n\n /**\n * Preview position during resize\n */\n previewPosition?: GridPosition | null\n\n /**\n * Drag props from useDragDrop\n */\n dragProps?: {\n draggable: boolean\n onDragStart: (e: DragEvent) => void\n onDragOver: (e: DragEvent) => void\n onDragEnter: (e: DragEvent) => void\n onDragLeave: (e: DragEvent) => void\n onDrop: (e: DragEvent) => void\n onDragEnd: (e: DragEvent) => void\n }\n\n /**\n * Callback when resize starts\n */\n onResizeStart?: (edge: 'left' | 'right' | 'top' | 'bottom') => void\n\n /**\n * Callback for resize preview\n */\n onResizePreview?: (position: GridPosition) => void\n\n /**\n * Callback when resize completes\n */\n onResize?: (position: GridPosition) => void\n\n /**\n * Whether resize is in progress\n */\n isResizing?: boolean\n\n /**\n * Show grid overlay during drag/resize\n */\n showGridOverlay?: boolean\n\n /**\n * Custom CSS class\n */\n class?: string\n\n /**\n * Custom styles\n */\n style?: JSX.CSSProperties\n\n /**\n * Children to render\n */\n children?: JSX.Element\n}\n\n/**\n * Generate CSS Grid style string from position\n */\nfunction getGridStyle(position: GridPosition): JSX.CSSProperties {\n return {\n 'grid-column': `${position.colStart} / span ${position.colSpan}`,\n 'grid-row': position.rowStart\n ? `${position.rowStart} / span ${position.rowSpan || 1}`\n : undefined\n }\n}\n\n/**\n * DraggableGridItem Component\n */\nexport const DraggableGridItem: Component<DraggableGridItemProps> = (props) => {\n const merged = mergeProps(\n {\n draggable: false,\n resizable: false,\n isDragging: false,\n isDropTarget: false,\n isResizing: false,\n showGridOverlay: false\n },\n props\n )\n\n // Use preview position during resize if available\n const effectivePosition = createMemo(() =>\n merged.previewPosition || props.position\n )\n\n // Compute grid style\n const gridStyle = createMemo(() => getGridStyle(effectivePosition()))\n\n // Compute combined style\n const combinedStyle = createMemo((): JSX.CSSProperties => {\n const base: JSX.CSSProperties = {\n ...gridStyle(),\n position: 'relative',\n transition: merged.isResizing ? 'none' : 'all 200ms ease-out'\n }\n\n // Add drag/drop visual feedback\n if (merged.isDragging) {\n base.opacity = '0.5'\n base.transform = 'scale(1.02)'\n base['z-index'] = '100'\n }\n\n if (merged.isDropTarget && !merged.isDragging) {\n base['box-shadow'] = '0 0 0 2px #3b82f6'\n base['border-radius'] = '4px'\n }\n\n if (merged.isResizing) {\n base['z-index'] = '100'\n }\n\n // Merge with custom styles\n if (props.style) {\n Object.assign(base, props.style)\n }\n\n return base\n })\n\n // Build class names\n const classNames = createMemo(() => {\n const classes = ['mcp-draggable-grid-item']\n\n if (merged.draggable) classes.push('mcp-draggable')\n if (merged.resizable) classes.push('mcp-resizable')\n if (merged.isDragging) classes.push('mcp-dragging')\n if (merged.isDropTarget) classes.push('mcp-drop-target')\n if (merged.isResizing) classes.push('mcp-resizing')\n if (props.class) classes.push(props.class)\n\n return classes.join(' ')\n })\n\n // Handle resize start\n const handleResizeStart = (edge: 'left' | 'right' | 'top' | 'bottom') => {\n props.onResizeStart?.(edge)\n }\n\n return (\n <div\n class={classNames()}\n style={combinedStyle()}\n data-component-id={props.id}\n {...(merged.draggable && props.dragProps ? props.dragProps : {})}\n >\n {/* Drag handle indicator */}\n <Show when={merged.draggable && !merged.isResizing}>\n <div\n class=\"mcp-drag-handle\"\n style={{\n position: 'absolute',\n top: '4px',\n left: '50%',\n transform: 'translateX(-50%)',\n width: '40px',\n height: '4px',\n 'background-color': 'rgba(0, 0, 0, 0.2)',\n 'border-radius': '2px',\n cursor: 'grab',\n opacity: '0',\n transition: 'opacity 150ms ease',\n 'z-index': '5'\n }}\n />\n </Show>\n\n {/* Resize handles */}\n <Show when={merged.resizable && !merged.isDragging}>\n <ResizeHandle\n edge=\"left\"\n onResizeStart={handleResizeStart}\n disabled={merged.constraints?.lockHorizontal}\n />\n <ResizeHandle\n edge=\"right\"\n onResizeStart={handleResizeStart}\n disabled={merged.constraints?.lockHorizontal}\n />\n <ResizeHandle\n edge=\"top\"\n onResizeStart={handleResizeStart}\n disabled={merged.constraints?.lockVertical}\n />\n <ResizeHandle\n edge=\"bottom\"\n onResizeStart={handleResizeStart}\n disabled={merged.constraints?.lockVertical}\n />\n </Show>\n\n {/* Drop indicator line */}\n <Show when={merged.isDropTarget && !merged.isDragging}>\n <div\n class=\"mcp-drop-indicator\"\n style={{\n position: 'absolute',\n top: '-2px',\n left: '0',\n right: '0',\n height: '4px',\n 'background-color': '#3b82f6',\n 'border-radius': '2px',\n 'z-index': '20'\n }}\n />\n </Show>\n\n {/* Content */}\n <div class=\"mcp-grid-item-content\" style={{ position: 'relative', 'z-index': '1' }}>\n {props.children}\n </div>\n </div>\n )\n}\n\nexport default DraggableGridItem\n"],"names":["getGridStyle","position","colStart","colSpan","rowStart","rowSpan","undefined","DraggableGridItem","props","merged","mergeProps","draggable","resizable","isDragging","isDropTarget","isResizing","showGridOverlay","effectivePosition","createMemo","previewPosition","gridStyle","combinedStyle","base","transition","opacity","transform","style","Object","assign","classNames","classes","push","class","join","handleResizeStart","edge","onResizeStart","_el$","_$getNextElement","_tmpl$3","_el$5","firstChild","_el$6","_co$","_$getNextMarker","nextSibling","_el$7","_el$8","_co$2","_el$9","_el$0","_co$3","_el$4","_$spread","_$mergeProps","id","dragProps","_$insert","_$createComponent","Show","when","_$memo","children","_tmpl$","ResizeHandle","disabled","constraints","lockHorizontal","lockVertical","_tmpl$2","_$runHydrationEvents"],"mappings":"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"}
1
+ {"version":3,"file":"DraggableGridItem.js","sources":["../../src/components/DraggableGridItem.tsx"],"sourcesContent":["/**\n * DraggableGridItem Component\n * Wrapper for grid items that enables drag-and-drop reordering and resizing\n *\n * Sprint Drag-Drop Feature\n */\n\nimport { Component, JSX, Show, createMemo, mergeProps } from 'solid-js'\nimport type { GridPosition, ResizeConstraints } from '../types'\nimport { ResizeHandle } from './ResizeHandle'\n\n/**\n * Props for DraggableGridItem\n */\nexport interface DraggableGridItemProps {\n /**\n * Component ID\n */\n id: string\n\n /**\n * Grid position\n */\n position: GridPosition\n\n /**\n * Whether dragging is enabled\n */\n draggable?: boolean\n\n /**\n * Whether resizing is enabled\n */\n resizable?: boolean\n\n /**\n * Resize constraints\n */\n constraints?: ResizeConstraints\n\n /**\n * Whether this item is currently being dragged\n */\n isDragging?: boolean\n\n /**\n * Whether this item is a drop target\n */\n isDropTarget?: boolean\n\n /**\n * Preview position during resize\n */\n previewPosition?: GridPosition | null\n\n /**\n * Drag props from useDragDrop\n */\n dragProps?: {\n draggable: boolean\n onDragStart: (e: DragEvent) => void\n onDragOver: (e: DragEvent) => void\n onDragEnter: (e: DragEvent) => void\n onDragLeave: (e: DragEvent) => void\n onDrop: (e: DragEvent) => void\n onDragEnd: (e: DragEvent) => void\n }\n\n /**\n * Callback when resize starts\n */\n onResizeStart?: (edge: 'left' | 'right' | 'top' | 'bottom', event: PointerEvent) => void\n\n /**\n * Callback for resize preview\n */\n onResizePreview?: (position: GridPosition) => void\n\n /**\n * Callback when resize completes\n */\n onResize?: (position: GridPosition) => void\n\n /**\n * Whether resize is in progress\n */\n isResizing?: boolean\n\n /**\n * Show grid overlay during drag/resize\n */\n showGridOverlay?: boolean\n\n /**\n * Custom CSS class\n */\n class?: string\n\n /**\n * Custom styles\n */\n style?: JSX.CSSProperties\n\n /**\n * Children to render\n */\n children?: JSX.Element\n}\n\n/**\n * Generate CSS Grid style string from position\n */\nfunction getGridStyle(position: GridPosition): JSX.CSSProperties {\n return {\n 'grid-column': `${position.colStart} / span ${position.colSpan}`,\n 'grid-row': position.rowStart\n ? `${position.rowStart} / span ${position.rowSpan || 1}`\n : undefined\n }\n}\n\n/**\n * DraggableGridItem Component\n */\nexport const DraggableGridItem: Component<DraggableGridItemProps> = (props) => {\n const merged = mergeProps(\n {\n draggable: false,\n resizable: false,\n isDragging: false,\n isDropTarget: false,\n isResizing: false,\n showGridOverlay: false\n },\n props\n )\n\n // Use preview position during resize if available\n const effectivePosition = createMemo(() =>\n merged.previewPosition || props.position\n )\n\n // Compute grid style\n const gridStyle = createMemo(() => getGridStyle(effectivePosition()))\n\n // Compute combined style\n const combinedStyle = createMemo((): JSX.CSSProperties => {\n const base: JSX.CSSProperties = {\n ...gridStyle(),\n position: 'relative',\n transition: merged.isResizing ? 'none' : 'all 200ms ease-out'\n }\n\n // Add drag/drop visual feedback\n if (merged.isDragging) {\n base.opacity = '0.5'\n base.transform = 'scale(1.02)'\n base['z-index'] = '100'\n }\n\n if (merged.isDropTarget && !merged.isDragging) {\n base['box-shadow'] = '0 0 0 2px #3b82f6'\n base['border-radius'] = '4px'\n }\n\n if (merged.isResizing) {\n base['z-index'] = '100'\n }\n\n // Merge with custom styles\n if (props.style) {\n Object.assign(base, props.style)\n }\n\n return base\n })\n\n // Build class names\n const classNames = createMemo(() => {\n const classes = ['mcp-draggable-grid-item']\n\n if (merged.draggable) classes.push('mcp-draggable')\n if (merged.resizable) classes.push('mcp-resizable')\n if (merged.isDragging) classes.push('mcp-dragging')\n if (merged.isDropTarget) classes.push('mcp-drop-target')\n if (merged.isResizing) classes.push('mcp-resizing')\n if (props.class) classes.push(props.class)\n\n return classes.join(' ')\n })\n\n // Handle resize start\n const handleResizeStart = (edge: 'left' | 'right' | 'top' | 'bottom', event: PointerEvent) => {\n props.onResizeStart?.(edge, event)\n }\n\n return (\n <div\n class={classNames()}\n style={combinedStyle()}\n data-component-id={props.id}\n {...(merged.draggable && props.dragProps ? props.dragProps : {})}\n >\n {/* Drag handle indicator */}\n <Show when={merged.draggable && !merged.isResizing}>\n <div\n class=\"mcp-drag-handle\"\n style={{\n position: 'absolute',\n top: '4px',\n left: '50%',\n transform: 'translateX(-50%)',\n width: '40px',\n height: '4px',\n 'background-color': 'rgba(0, 0, 0, 0.2)',\n 'border-radius': '2px',\n cursor: 'grab',\n opacity: '0',\n transition: 'opacity 150ms ease',\n 'z-index': '5'\n }}\n />\n </Show>\n\n {/* Resize handles */}\n <Show when={merged.resizable && !merged.isDragging}>\n <ResizeHandle\n edge=\"left\"\n onResizeStart={handleResizeStart}\n disabled={merged.constraints?.lockHorizontal}\n />\n <ResizeHandle\n edge=\"right\"\n onResizeStart={handleResizeStart}\n disabled={merged.constraints?.lockHorizontal}\n />\n <ResizeHandle\n edge=\"top\"\n onResizeStart={handleResizeStart}\n disabled={merged.constraints?.lockVertical}\n />\n <ResizeHandle\n edge=\"bottom\"\n onResizeStart={handleResizeStart}\n disabled={merged.constraints?.lockVertical}\n />\n </Show>\n\n {/* Drop indicator line */}\n <Show when={merged.isDropTarget && !merged.isDragging}>\n <div\n class=\"mcp-drop-indicator\"\n style={{\n position: 'absolute',\n top: '-2px',\n left: '0',\n right: '0',\n height: '4px',\n 'background-color': '#3b82f6',\n 'border-radius': '2px',\n 'z-index': '20'\n }}\n />\n </Show>\n\n {/* Content */}\n <div class=\"mcp-grid-item-content\" style={{ position: 'relative', 'z-index': '1' }}>\n {props.children}\n </div>\n </div>\n )\n}\n\nexport default DraggableGridItem\n"],"names":["getGridStyle","position","colStart","colSpan","rowStart","rowSpan","undefined","DraggableGridItem","props","merged","mergeProps","draggable","resizable","isDragging","isDropTarget","isResizing","showGridOverlay","effectivePosition","createMemo","previewPosition","gridStyle","combinedStyle","base","transition","opacity","transform","style","Object","assign","classNames","classes","push","class","join","handleResizeStart","edge","event","onResizeStart","_el$","_$getNextElement","_tmpl$3","_el$5","firstChild","_el$6","_co$","_$getNextMarker","nextSibling","_el$7","_el$8","_co$2","_el$9","_el$0","_co$3","_el$4","_$spread","_$mergeProps","id","dragProps","_$insert","_$createComponent","Show","when","_$memo","children","_tmpl$","ResizeHandle","disabled","constraints","lockHorizontal","lockVertical","_tmpl$2","_$runHydrationEvents"],"mappings":";;;;AAgHA,SAASA,aAAaC,UAA2C;AAC/D,SAAO;AAAA,IACL,eAAe,GAAGA,SAASC,QAAQ,WAAWD,SAASE,OAAO;AAAA,IAC9D,YAAYF,SAASG,WACjB,GAAGH,SAASG,QAAQ,WAAWH,SAASI,WAAW,CAAC,KACpDC;AAAAA,EAAAA;AAER;AAKO,MAAMC,oBAAwDC,CAAAA,UAAU;AAC7E,QAAMC,SAASC,WACb;AAAA,IACEC,WAAW;AAAA,IACXC,WAAW;AAAA,IACXC,YAAY;AAAA,IACZC,cAAc;AAAA,IACdC,YAAY;AAAA,IACZC,iBAAiB;AAAA,EAAA,GAEnBR,KACF;AAGA,QAAMS,oBAAoBC,WAAW,MACnCT,OAAOU,mBAAmBX,MAAMP,QAClC;AAGA,QAAMmB,YAAYF,WAAW,MAAMlB,aAAaiB,kBAAAA,CAAmB,CAAC;AAGpE,QAAMI,gBAAgBH,WAAW,MAAyB;AACxD,UAAMI,OAA0B;AAAA,MAC9B,GAAGF,UAAAA;AAAAA,MACHnB,UAAU;AAAA,MACVsB,YAAYd,OAAOM,aAAa,SAAS;AAAA,IAAA;AAI3C,QAAIN,OAAOI,YAAY;AACrBS,WAAKE,UAAU;AACfF,WAAKG,YAAY;AACjBH,WAAK,SAAS,IAAI;AAAA,IACpB;AAEA,QAAIb,OAAOK,gBAAgB,CAACL,OAAOI,YAAY;AAC7CS,WAAK,YAAY,IAAI;AACrBA,WAAK,eAAe,IAAI;AAAA,IAC1B;AAEA,QAAIb,OAAOM,YAAY;AACrBO,WAAK,SAAS,IAAI;AAAA,IACpB;AAGA,QAAId,MAAMkB,OAAO;AACfC,aAAOC,OAAON,MAAMd,MAAMkB,KAAK;AAAA,IACjC;AAEA,WAAOJ;AAAAA,EACT,CAAC;AAGD,QAAMO,aAAaX,WAAW,MAAM;AAClC,UAAMY,UAAU,CAAC,yBAAyB;AAE1C,QAAIrB,OAAOE,UAAWmB,SAAQC,KAAK,eAAe;AAClD,QAAItB,OAAOG,UAAWkB,SAAQC,KAAK,eAAe;AAClD,QAAItB,OAAOI,WAAYiB,SAAQC,KAAK,cAAc;AAClD,QAAItB,OAAOK,aAAcgB,SAAQC,KAAK,iBAAiB;AACvD,QAAItB,OAAOM,WAAYe,SAAQC,KAAK,cAAc;AAClD,QAAIvB,MAAMwB,MAAOF,SAAQC,KAAKvB,MAAMwB,KAAK;AAEzC,WAAOF,QAAQG,KAAK,GAAG;AAAA,EACzB,CAAC;AAGD,QAAMC,oBAAoBA,CAACC,MAA2CC,UAAwB;;AAC5F5B,gBAAM6B,kBAAN7B,+BAAsB2B,MAAMC;AAAAA,EAC9B;AAEA,UAAA,MAAA;AAAA,QAAAE,OAAAC,eAAAC,OAAA,GAAAC,QAAAH,KAAAI,YAAA,CAAAC,OAAAC,IAAA,IAAAC,cAAAJ,MAAAK,WAAA,GAAAC,QAAAJ,MAAAG,aAAA,CAAAE,OAAAC,KAAA,IAAAJ,cAAAE,MAAAD,WAAA,GAAAI,QAAAF,MAAAF,aAAA,CAAAK,OAAAC,KAAA,IAAAP,cAAAK,MAAAJ,WAAA,GAAAO,QAAAF,MAAAL;AAAAQ,WAAAhB,MAAAiB,aAAA;AAAA,MAAA,KAAA,OAAA,IAAA;AAAA,eAEW1B,WAAAA;AAAAA,MAAY;AAAA,MAAA,IACnBH,QAAK;AAAA,eAAEL,cAAAA;AAAAA,MAAe;AAAA,MAAA,KAAA,mBAAA,IAAA;AAAA,eACHb,MAAMgD;AAAAA,MAAE;AAAA,IAAA,GAAA,MACtB/C,OAAOE,aAAaH,MAAMiD,YAAYjD,MAAMiD,YAAY,CAAA,CAAE,GAAA,OAAA,IAAA;AAAAC,WAAApB,MAAAqB,gBAG9DC,MAAI;AAAA,MAAA,IAACC,OAAI;AAAA,eAAEC,aAAArD,OAAOE,SAAS,EAAA,KAAI,CAACF,OAAOM;AAAAA,MAAU;AAAA,MAAA,IAAAgD,WAAA;AAAA,eAAAxB,eAAAyB,MAAA;AAAA,MAAA;AAAA,IAAA,CAAA,GAAArB,OAAAC,IAAA;AAAAc,WAAApB,MAAAqB,gBAqBjDC,MAAI;AAAA,MAAA,IAACC,OAAI;AAAA,eAAEC,aAAArD,OAAOG,SAAS,EAAA,KAAI,CAACH,OAAOI;AAAAA,MAAU;AAAA,MAAA,IAAAkD,WAAA;AAAA,eAAA,CAAAJ,gBAC/CM,cAAY;AAAA,UACX9B,MAAI;AAAA,UACJE,eAAeH;AAAAA,UAAiB,IAChCgC,WAAQ;;AAAA,oBAAEzD,YAAO0D,gBAAP1D,mBAAoB2D;AAAAA,UAAc;AAAA,QAAA,CAAA,GAAAT,gBAE7CM,cAAY;AAAA,UACX9B,MAAI;AAAA,UACJE,eAAeH;AAAAA,UAAiB,IAChCgC,WAAQ;;AAAA,oBAAEzD,YAAO0D,gBAAP1D,mBAAoB2D;AAAAA,UAAc;AAAA,QAAA,CAAA,GAAAT,gBAE7CM,cAAY;AAAA,UACX9B,MAAI;AAAA,UACJE,eAAeH;AAAAA,UAAiB,IAChCgC,WAAQ;;AAAA,oBAAEzD,YAAO0D,gBAAP1D,mBAAoB4D;AAAAA,UAAY;AAAA,QAAA,CAAA,GAAAV,gBAE3CM,cAAY;AAAA,UACX9B,MAAI;AAAA,UACJE,eAAeH;AAAAA,UAAiB,IAChCgC,WAAQ;;AAAA,oBAAEzD,YAAO0D,gBAAP1D,mBAAoB4D;AAAAA,UAAY;AAAA,QAAA,CAAA,CAAA;AAAA,MAAA;AAAA,IAAA,CAAA,GAAArB,OAAAC,KAAA;AAAAS,WAAApB,MAAAqB,gBAK7CC,MAAI;AAAA,MAAA,IAACC,OAAI;AAAA,eAAEC,aAAArD,OAAOK,YAAY,EAAA,KAAI,CAACL,OAAOI;AAAAA,MAAU;AAAA,MAAA,IAAAkD,WAAA;AAAA,eAAAxB,eAAA+B,OAAA;AAAA,MAAA;AAAA,IAAA,CAAA,GAAAnB,OAAAC,KAAA;AAAAM,WAAAL,OAAA,MAkBlD7C,MAAMuD,QAAQ;AAAAQ,uBAAAA;AAAA,WAAAjC;AAAAA,EAAA,GAAA;AAIvB;"}
@@ -167,13 +167,9 @@ const EditableUIResourceRenderer = (props) => {
167
167
  get dragProps() {
168
168
  return dragDrop.getDragProps(component.id);
169
169
  },
170
- onResizeStart: (edge) => {
170
+ onResizeStart: (edge, event) => {
171
171
  setActiveResizeId(component.id);
172
- const syntheticEvent = new PointerEvent("pointerdown", {
173
- clientX: 0,
174
- clientY: 0
175
- });
176
- resize.handleResizeStart(syntheticEvent, edge);
172
+ resize.handleResizeStart(event, edge);
177
173
  },
178
174
  get children() {
179
175
  return web.createComponent(UIResourceRenderer.UIResourceRenderer, {
@@ -1 +1 @@
1
- {"version":3,"file":"EditableUIResourceRenderer.cjs","sources":["../../src/components/EditableUIResourceRenderer.tsx"],"sourcesContent":["/**\n * EditableUIResourceRenderer Component\n * Extends UIResourceRenderer with drag-and-drop reordering and resizing capabilities\n *\n * Sprint Drag-Drop Feature\n */\n\nimport {\n Component,\n For,\n Show,\n createSignal,\n createMemo,\n createEffect,\n on,\n JSX\n} from 'solid-js'\nimport type {\n UIComponent,\n UILayout,\n RendererError,\n GridPosition,\n DragDropConfig\n} from '../types'\nimport { useDragDrop } from '../hooks/useDragDrop'\nimport { useResize, ResizeEdge } from '../hooks/useResize'\nimport { DraggableGridItem } from './DraggableGridItem'\nimport { UIResourceRenderer } from './UIResourceRenderer'\n\n/**\n * Props for EditableUIResourceRenderer\n */\nexport interface EditableUIResourceRendererProps {\n /**\n * Layout to render (must be UILayout, not single component)\n */\n layout: UILayout\n\n /**\n * Drag-drop configuration\n */\n dragDrop?: DragDropConfig\n\n /**\n * Error callback\n */\n onError?: (error: RendererError) => void\n\n /**\n * Callback when layout changes (reorder or resize)\n */\n onLayoutChange?: (layout: UILayout) => void\n\n /**\n * Custom CSS class\n */\n class?: string\n\n /**\n * Show grid overlay during editing\n */\n showGridOverlay?: boolean\n}\n\n/**\n * Grid overlay component for visual feedback\n */\nconst GridOverlay: Component<{ columns: number; visible: boolean }> = (props) => {\n return (\n <Show when={props.visible}>\n <div\n class=\"mcp-grid-overlay\"\n style={{\n position: 'absolute',\n inset: '0',\n display: 'grid',\n 'grid-template-columns': `repeat(${props.columns}, 1fr)`,\n gap: '1rem',\n padding: '0',\n 'pointer-events': 'none',\n 'z-index': '0'\n }}\n >\n <For each={Array(props.columns).fill(0)}>\n {() => (\n <div\n class=\"mcp-grid-overlay-column\"\n style={{\n 'background-color': 'rgba(59, 130, 246, 0.05)',\n border: '1px dashed rgba(59, 130, 246, 0.2)',\n 'border-radius': '4px'\n }}\n />\n )}\n </For>\n </div>\n </Show>\n )\n}\n\n/**\n * EditableUIResourceRenderer Component\n */\nexport const EditableUIResourceRenderer: Component<EditableUIResourceRendererProps> = (props) => {\n // Internal state for components (allows editing)\n const [components, setComponents] = createSignal<UIComponent[]>(props.layout.components)\n const [activeResizeId, setActiveResizeId] = createSignal<string | null>(null)\n const [previewPositions, setPreviewPositions] = createSignal<Map<string, GridPosition>>(new Map())\n const [gridContainerRef, setGridContainerRef] = createSignal<HTMLElement | null>(null)\n\n // Sync with external layout changes\n createEffect(on(() => props.layout.components, (newComponents) => {\n setComponents(newComponents)\n }))\n\n // Drag-drop configuration\n const dragDropConfig = createMemo(() => ({\n enabled: props.dragDrop?.enabled ?? false,\n reorder: props.dragDrop?.reorder ?? true,\n resize: props.dragDrop?.resize ?? true,\n constraints: props.dragDrop?.constraints ?? {},\n showGridLines: props.dragDrop?.showGridLines ?? true,\n animationDuration: props.dragDrop?.animationDuration ?? 200\n }))\n\n // Handle reorder from drag-drop\n const handleReorder = (newComponents: UIComponent[]) => {\n setComponents(newComponents)\n\n const newLayout: UILayout = {\n ...props.layout,\n components: newComponents\n }\n\n props.dragDrop?.onReorder?.(newComponents)\n props.dragDrop?.onChange?.(newLayout)\n props.onLayoutChange?.(newLayout)\n }\n\n // Handle resize completion\n const handleResize = (componentId: string, newPosition: GridPosition) => {\n const updatedComponents = components().map(c =>\n c.id === componentId ? { ...c, position: newPosition } : c\n )\n\n setComponents(updatedComponents)\n setActiveResizeId(null)\n setPreviewPositions(new Map())\n\n const newLayout: UILayout = {\n ...props.layout,\n components: updatedComponents\n }\n\n props.dragDrop?.onResize?.(componentId, newPosition)\n props.dragDrop?.onChange?.(newLayout)\n props.onLayoutChange?.(newLayout)\n }\n\n // Handle resize preview\n const handleResizePreview = (componentId: string, previewPosition: GridPosition) => {\n setPreviewPositions(prev => {\n const next = new Map(prev)\n next.set(componentId, previewPosition)\n return next\n })\n }\n\n // Initialize drag-drop hook\n const dragDrop = useDragDrop({\n components,\n onReorder: handleReorder,\n enabled: dragDropConfig().enabled && dragDropConfig().reorder\n })\n\n // Grid container style\n const gridContainerStyle = createMemo((): JSX.CSSProperties => ({\n display: 'grid',\n 'grid-template-columns': `repeat(${props.layout.grid.columns}, 1fr)`,\n gap: props.layout.grid.gap,\n position: 'relative'\n }))\n\n // Check if we should show grid overlay\n const showOverlay = createMemo(() =>\n dragDropConfig().showGridLines && (dragDrop.isDragging() || activeResizeId() !== null)\n )\n\n // Get effective position for a component (preview if resizing, otherwise actual)\n const getEffectivePosition = (component: UIComponent): GridPosition => {\n const preview = previewPositions().get(component.id)\n return preview || component.position\n }\n\n // If drag-drop is not enabled, just render the standard UIResourceRenderer\n if (!props.dragDrop?.enabled) {\n return (\n <UIResourceRenderer\n content={props.layout}\n onError={props.onError}\n class={props.class}\n />\n )\n }\n\n return (\n <div class={`w-full editable-ui-renderer ${props.class || ''}`}>\n <div\n ref={setGridContainerRef}\n class=\"grid relative\"\n style={gridContainerStyle()}\n data-grid-container\n >\n {/* Grid overlay */}\n <GridOverlay\n columns={props.layout.grid.columns}\n visible={showOverlay()}\n />\n\n {/* Render components with drag-drop wrappers */}\n <For each={components()}>\n {(component) => {\n // Create resize hook for each component\n const resize = useResize({\n componentId: component.id,\n currentPosition: () => component.position,\n onResize: (pos) => handleResize(component.id, pos),\n onResizePreview: (pos) => handleResizePreview(component.id, pos),\n constraints: dragDropConfig().constraints,\n gridContainer: gridContainerRef,\n gridColumns: props.layout.grid.columns,\n enabled: dragDropConfig().enabled && dragDropConfig().resize\n })\n\n const effectivePosition = () => getEffectivePosition(component)\n\n return (\n <DraggableGridItem\n id={component.id}\n position={effectivePosition()}\n draggable={dragDropConfig().enabled && dragDropConfig().reorder}\n resizable={dragDropConfig().enabled && dragDropConfig().resize}\n constraints={dragDropConfig().constraints}\n isDragging={dragDrop.isComponentDragging(component.id)}\n isDropTarget={dragDrop.isDropTarget(component.id)}\n isResizing={activeResizeId() === component.id}\n previewPosition={previewPositions().get(component.id) || null}\n dragProps={dragDrop.getDragProps(component.id)}\n onResizeStart={(edge) => {\n setActiveResizeId(component.id)\n // Trigger resize with a synthetic event\n const syntheticEvent = new PointerEvent('pointerdown', {\n clientX: 0,\n clientY: 0\n })\n resize.handleResizeStart(syntheticEvent, edge as ResizeEdge)\n }}\n >\n {/* Render component using UIResourceRenderer for single component */}\n <UIResourceRenderer\n content={component}\n onError={props.onError}\n />\n </DraggableGridItem>\n )\n }}\n </For>\n </div>\n </div>\n )\n}\n\nexport default EditableUIResourceRenderer\n"],"names":["GridOverlay","props","_$createComponent","Show","when","visible","children","_el$","_$getNextElement","_tmpl$","_$insert","For","each","Array","columns","fill","_tmpl$2","_$effect","_$p","_$setStyleProperty","EditableUIResourceRenderer","components","setComponents","createSignal","layout","activeResizeId","setActiveResizeId","previewPositions","setPreviewPositions","Map","gridContainerRef","setGridContainerRef","createEffect","on","newComponents","dragDropConfig","createMemo","enabled","dragDrop","reorder","resize","constraints","showGridLines","animationDuration","handleReorder","newLayout","onReorder","onChange","onLayoutChange","handleResize","componentId","newPosition","updatedComponents","map","c","id","position","onResize","handleResizePreview","previewPosition","prev","next","set","useDragDrop","gridContainerStyle","display","grid","gap","showOverlay","isDragging","getEffectivePosition","component","preview","get","UIResourceRenderer","content","onError","class","_el$3","_tmpl$3","_el$4","firstChild","_el$5","_el$6","_co$","_$getNextMarker","nextSibling","_el$7","_el$8","_co$2","_$use","useResize","currentPosition","pos","onResizePreview","gridContainer","gridColumns","effectivePosition","DraggableGridItem","draggable","_$memo","resizable","isComponentDragging","isDropTarget","isResizing","dragProps","getDragProps","onResizeStart","edge","syntheticEvent","PointerEvent","clientX","clientY","handleResizeStart","_p$","_v$","_v$2","e","_$className","t","_$style","undefined"],"mappings":";;;;;;;;;AAmEA,MAAMA,cAAiEC,CAAAA,UAAU;AAC/E,SAAAC,IAAAA,gBACGC,QAAAA,MAAI;AAAA,IAAA,IAACC,OAAI;AAAA,aAAEH,MAAMI;AAAAA,IAAO;AAAA,IAAA,IAAAC,WAAA;AAAA,UAAAC,OAAAC,IAAAA,eAAAC,MAAA;AAAAC,iBAAAH,MAAAL,IAAAA,gBAcpBS,aAAG;AAAA,QAAA,IAACC,OAAI;AAAA,iBAAEC,MAAMZ,MAAMa,OAAO,EAAEC,KAAK,CAAC;AAAA,QAAC;AAAA,QAAAT,UACpCA,MAAAE,IAAAA,eAAAQ,OAAA;AAAA,MAAA,CASA,CAAA;AAAAC,UAAAA,OAAAC,CAAAA,QAAAC,IAAAA,iBAAAZ,MAAA,yBAjBwB,UAAUN,MAAMa,OAAO,QAAQ,CAAA;AAAA,aAAAP;AAAAA,IAAA;AAAA,EAAA,CAAA;AAsBlE;AAKO,MAAMa,6BAA0EnB,CAAAA,UAAU;;AAE/F,QAAM,CAACoB,YAAYC,aAAa,IAAIC,QAAAA,aAA4BtB,MAAMuB,OAAOH,UAAU;AACvF,QAAM,CAACI,gBAAgBC,iBAAiB,IAAIH,QAAAA,aAA4B,IAAI;AAC5E,QAAM,CAACI,kBAAkBC,mBAAmB,IAAIL,QAAAA,aAAwC,oBAAIM,KAAK;AACjG,QAAM,CAACC,kBAAkBC,mBAAmB,IAAIR,QAAAA,aAAiC,IAAI;AAGrFS,UAAAA,aAAaC,QAAAA,GAAG,MAAMhC,MAAMuB,OAAOH,YAAaa,CAAAA,kBAAkB;AAChEZ,kBAAcY,aAAa;AAAA,EAC7B,CAAC,CAAC;AAGF,QAAMC,iBAAiBC,QAAAA,WAAW,MAAA;;AAAO;AAAA,MACvCC,WAASpC,MAAAA,MAAMqC,aAANrC,gBAAAA,IAAgBoC,YAAW;AAAA,MACpCE,WAAStC,WAAMqC,aAANrC,mBAAgBsC,YAAW;AAAA,MACpCC,UAAQvC,WAAMqC,aAANrC,mBAAgBuC,WAAU;AAAA,MAClCC,eAAaxC,WAAMqC,aAANrC,mBAAgBwC,gBAAe,CAAA;AAAA,MAC5CC,iBAAezC,WAAMqC,aAANrC,mBAAgByC,kBAAiB;AAAA,MAChDC,qBAAmB1C,WAAMqC,aAANrC,mBAAgB0C,sBAAqB;AAAA,IAAA;AAAA,GACxD;AAGF,QAAMC,gBAAgBA,CAACV,kBAAiC;;AACtDZ,kBAAcY,aAAa;AAE3B,UAAMW,YAAsB;AAAA,MAC1B,GAAG5C,MAAMuB;AAAAA,MACTH,YAAYa;AAAAA,IAAAA;AAGdjC,WAAAA,MAAAA,MAAMqC,aAANrC,gBAAAA,IAAgB6C,cAAhB7C,wBAAAA,KAA4BiC;AAC5BjC,sBAAMqC,aAANrC,mBAAgB8C,aAAhB9C,4BAA2B4C;AAC3B5C,gBAAM+C,mBAAN/C,+BAAuB4C;AAAAA,EACzB;AAGA,QAAMI,eAAeA,CAACC,aAAqBC,gBAA8B;;AACvE,UAAMC,oBAAoB/B,WAAAA,EAAagC,IAAIC,CAAAA,MACzCA,EAAEC,OAAOL,cAAc;AAAA,MAAE,GAAGI;AAAAA,MAAGE,UAAUL;AAAAA,IAAAA,IAAgBG,CAC3D;AAEAhC,kBAAc8B,iBAAiB;AAC/B1B,sBAAkB,IAAI;AACtBE,wBAAoB,oBAAIC,KAAK;AAE7B,UAAMgB,YAAsB;AAAA,MAC1B,GAAG5C,MAAMuB;AAAAA,MACTH,YAAY+B;AAAAA,IAAAA;AAGdnD,WAAAA,MAAAA,MAAMqC,aAANrC,gBAAAA,IAAgBwD,aAAhBxD,wBAAAA,KAA2BiD,aAAaC;AACxClD,sBAAMqC,aAANrC,mBAAgB8C,aAAhB9C,4BAA2B4C;AAC3B5C,gBAAM+C,mBAAN/C,+BAAuB4C;AAAAA,EACzB;AAGA,QAAMa,sBAAsBA,CAACR,aAAqBS,oBAAkC;AAClF/B,wBAAoBgC,CAAAA,SAAQ;AAC1B,YAAMC,OAAO,IAAIhC,IAAI+B,IAAI;AACzBC,WAAKC,IAAIZ,aAAaS,eAAe;AACrC,aAAOE;AAAAA,IACT,CAAC;AAAA,EACH;AAGA,QAAMvB,WAAWyB,YAAAA,YAAY;AAAA,IAC3B1C;AAAAA,IACAyB,WAAWF;AAAAA,IACXP,SAASF,eAAAA,EAAiBE,WAAWF,iBAAiBI;AAAAA,EAAAA,CACvD;AAGD,QAAMyB,qBAAqB5B,QAAAA,WAAW,OAA0B;AAAA,IAC9D6B,SAAS;AAAA,IACT,yBAAyB,UAAUhE,MAAMuB,OAAO0C,KAAKpD,OAAO;AAAA,IAC5DqD,KAAKlE,MAAMuB,OAAO0C,KAAKC;AAAAA,IACvBX,UAAU;AAAA,EAAA,EACV;AAGF,QAAMY,cAAchC,QAAAA,WAAW,MAC7BD,iBAAiBO,kBAAkBJ,SAAS+B,WAAAA,KAAgB5C,eAAAA,MAAqB,KACnF;AAGA,QAAM6C,uBAAuBA,CAACC,cAAyC;AACrE,UAAMC,UAAU7C,iBAAAA,EAAmB8C,IAAIF,UAAUhB,EAAE;AACnD,WAAOiB,WAAWD,UAAUf;AAAAA,EAC9B;AAGA,MAAI,GAACvD,WAAMqC,aAANrC,mBAAgBoC,UAAS;AAC5B,WAAAnC,IAAAA,gBACGwE,mBAAAA,oBAAkB;AAAA,MAAA,IACjBC,UAAO;AAAA,eAAE1E,MAAMuB;AAAAA,MAAM;AAAA,MAAA,IACrBoD,UAAO;AAAA,eAAE3E,MAAM2E;AAAAA,MAAO;AAAA,MAAA,KAAA,OAAA,IAAA;AAAA,eACf3E,MAAM4E;AAAAA,MAAK;AAAA,IAAA,CAAA;AAAA,EAGxB;AAEA,UAAA,MAAA;AAAA,QAAAC,QAAAtE,IAAAA,eAAAuE,OAAA,GAAAC,QAAAF,MAAAG,YAAAC,QAAAF,MAAAC,YAAA,CAAAE,OAAAC,IAAA,IAAAC,IAAAA,cAAAH,MAAAI,WAAA,GAAAC,QAAAJ,MAAAG,aAAA,CAAAE,OAAAC,KAAA,IAAAJ,kBAAAE,MAAAD,WAAA;AAAAI,QAAAA,IAGW3D,qBAAmBiD,KAAA;AAAAtE,eAAAsE,OAAA9E,IAAAA,gBAMvBF,aAAW;AAAA,MAAA,IACVc,UAAO;AAAA,eAAEb,MAAMuB,OAAO0C,KAAKpD;AAAAA,MAAO;AAAA,MAAA,IAClCT,UAAO;AAAA,eAAE+D,YAAAA;AAAAA,MAAa;AAAA,IAAA,CAAA,GAAAe,OAAAC,IAAA;AAAA1E,eAAAsE,OAAA9E,IAAAA,gBAIvBS,aAAG;AAAA,MAAA,IAACC,OAAI;AAAA,eAAES,WAAAA;AAAAA,MAAY;AAAA,MAAAf,UACnBiE,CAAAA,cAAc;AAEd,cAAM/B,SAASmD,UAAAA,UAAU;AAAA,UACvBzC,aAAaqB,UAAUhB;AAAAA,UACvBqC,iBAAiBA,MAAMrB,UAAUf;AAAAA,UACjCC,UAAWoC,CAAAA,QAAQ5C,aAAasB,UAAUhB,IAAIsC,GAAG;AAAA,UACjDC,iBAAkBD,CAAAA,QAAQnC,oBAAoBa,UAAUhB,IAAIsC,GAAG;AAAA,UAC/DpD,aAAaN,iBAAiBM;AAAAA,UAC9BsD,eAAejE;AAAAA,UACfkE,aAAa/F,MAAMuB,OAAO0C,KAAKpD;AAAAA,UAC/BuB,SAASF,eAAAA,EAAiBE,WAAWF,iBAAiBK;AAAAA,QAAAA,CACvD;AAED,cAAMyD,oBAAoBA,MAAM3B,qBAAqBC,SAAS;AAE9D,eAAArE,IAAAA,gBACGgG,kBAAAA,mBAAiB;AAAA,UAAA,IAChB3C,KAAE;AAAA,mBAAEgB,UAAUhB;AAAAA,UAAE;AAAA,UAAA,IAChBC,WAAQ;AAAA,mBAAEyC,kBAAAA;AAAAA,UAAmB;AAAA,UAAA,IAC7BE,YAAS;AAAA,mBAAEC,IAAAA,KAAA,MAAA,CAAA,CAAAjE,eAAAA,EAAiBE,OAAO,EAAA,KAAIF,eAAAA,EAAiBI;AAAAA,UAAO;AAAA,UAAA,IAC/D8D,YAAS;AAAA,mBAAED,IAAAA,KAAA,MAAA,CAAA,CAAAjE,eAAAA,EAAiBE,OAAO,EAAA,KAAIF,eAAAA,EAAiBK;AAAAA,UAAM;AAAA,UAAA,IAC9DC,cAAW;AAAA,mBAAEN,iBAAiBM;AAAAA,UAAW;AAAA,UAAA,IACzC4B,aAAU;AAAA,mBAAE/B,SAASgE,oBAAoB/B,UAAUhB,EAAE;AAAA,UAAC;AAAA,UAAA,IACtDgD,eAAY;AAAA,mBAAEjE,SAASiE,aAAahC,UAAUhB,EAAE;AAAA,UAAC;AAAA,UAAA,IACjDiD,aAAU;AAAA,mBAAE/E,eAAAA,MAAqB8C,UAAUhB;AAAAA,UAAE;AAAA,UAAA,IAC7CI,kBAAe;AAAA,mBAAEhC,iBAAAA,EAAmB8C,IAAIF,UAAUhB,EAAE,KAAK;AAAA,UAAI;AAAA,UAAA,IAC7DkD,YAAS;AAAA,mBAAEnE,SAASoE,aAAanC,UAAUhB,EAAE;AAAA,UAAC;AAAA,UAC9CoD,eAAgBC,CAAAA,SAAS;AACvBlF,8BAAkB6C,UAAUhB,EAAE;AAE9B,kBAAMsD,iBAAiB,IAAIC,aAAa,eAAe;AAAA,cACrDC,SAAS;AAAA,cACTC,SAAS;AAAA,YAAA,CACV;AACDxE,mBAAOyE,kBAAkBJ,gBAAgBD,IAAkB;AAAA,UAC7D;AAAA,UAAC,IAAAtG,WAAA;AAAA,mBAAAJ,IAAAA,gBAGAwE,mBAAAA,oBAAkB;AAAA,cACjBC,SAASJ;AAAAA,cAAS,IAClBK,UAAO;AAAA,uBAAE3E,MAAM2E;AAAAA,cAAO;AAAA,YAAA,CAAA;AAAA,UAAA;AAAA,QAAA,CAAA;AAAA,MAI9B;AAAA,IAAA,CAAC,GAAAY,OAAAC,KAAA;AAAAxE,QAAAA,OAAAiG,CAAAA,QAAA;AAAA,UAAAC,MA3DK,+BAA+BlH,MAAM4E,SAAS,EAAE,IAAEuC,OAInDpD,mBAAAA;AAAoBmD,cAAAD,IAAAG,KAAAC,IAAAA,UAAAxC,OAAAoC,IAAAG,IAAAF,GAAA;AAAAD,UAAAK,IAAAC,IAAAA,MAAAxC,OAAAoC,MAAAF,IAAAK,CAAA;AAAA,aAAAL;AAAAA,IAAA,GAAA;AAAA,MAAAG,GAAAI;AAAAA,MAAAF,GAAAE;AAAAA,IAAAA,CAAA;AAAA,WAAA3C;AAAAA,EAAA,GAAA;AA4DnC;;;"}
1
+ {"version":3,"file":"EditableUIResourceRenderer.cjs","sources":["../../src/components/EditableUIResourceRenderer.tsx"],"sourcesContent":["/**\n * EditableUIResourceRenderer Component\n * Extends UIResourceRenderer with drag-and-drop reordering and resizing capabilities\n *\n * Sprint Drag-Drop Feature\n */\n\nimport {\n Component,\n For,\n Show,\n createSignal,\n createMemo,\n createEffect,\n on,\n JSX\n} from 'solid-js'\nimport type {\n UIComponent,\n UILayout,\n RendererError,\n GridPosition,\n DragDropConfig\n} from '../types'\nimport { useDragDrop } from '../hooks/useDragDrop'\nimport { useResize, ResizeEdge } from '../hooks/useResize'\nimport { DraggableGridItem } from './DraggableGridItem'\nimport { UIResourceRenderer } from './UIResourceRenderer'\n\n/**\n * Props for EditableUIResourceRenderer\n */\nexport interface EditableUIResourceRendererProps {\n /**\n * Layout to render (must be UILayout, not single component)\n */\n layout: UILayout\n\n /**\n * Drag-drop configuration\n */\n dragDrop?: DragDropConfig\n\n /**\n * Error callback\n */\n onError?: (error: RendererError) => void\n\n /**\n * Callback when layout changes (reorder or resize)\n */\n onLayoutChange?: (layout: UILayout) => void\n\n /**\n * Custom CSS class\n */\n class?: string\n\n /**\n * Show grid overlay during editing\n */\n showGridOverlay?: boolean\n}\n\n/**\n * Grid overlay component for visual feedback\n */\nconst GridOverlay: Component<{ columns: number; visible: boolean }> = (props) => {\n return (\n <Show when={props.visible}>\n <div\n class=\"mcp-grid-overlay\"\n style={{\n position: 'absolute',\n inset: '0',\n display: 'grid',\n 'grid-template-columns': `repeat(${props.columns}, 1fr)`,\n gap: '1rem',\n padding: '0',\n 'pointer-events': 'none',\n 'z-index': '0'\n }}\n >\n <For each={Array(props.columns).fill(0)}>\n {() => (\n <div\n class=\"mcp-grid-overlay-column\"\n style={{\n 'background-color': 'rgba(59, 130, 246, 0.05)',\n border: '1px dashed rgba(59, 130, 246, 0.2)',\n 'border-radius': '4px'\n }}\n />\n )}\n </For>\n </div>\n </Show>\n )\n}\n\n/**\n * EditableUIResourceRenderer Component\n */\nexport const EditableUIResourceRenderer: Component<EditableUIResourceRendererProps> = (props) => {\n // Internal state for components (allows editing)\n const [components, setComponents] = createSignal<UIComponent[]>(props.layout.components)\n const [activeResizeId, setActiveResizeId] = createSignal<string | null>(null)\n const [previewPositions, setPreviewPositions] = createSignal<Map<string, GridPosition>>(new Map())\n const [gridContainerRef, setGridContainerRef] = createSignal<HTMLElement | null>(null)\n\n // Sync with external layout changes\n createEffect(on(() => props.layout.components, (newComponents) => {\n setComponents(newComponents)\n }))\n\n // Drag-drop configuration\n const dragDropConfig = createMemo(() => ({\n enabled: props.dragDrop?.enabled ?? false,\n reorder: props.dragDrop?.reorder ?? true,\n resize: props.dragDrop?.resize ?? true,\n constraints: props.dragDrop?.constraints ?? {},\n showGridLines: props.dragDrop?.showGridLines ?? true,\n animationDuration: props.dragDrop?.animationDuration ?? 200\n }))\n\n // Handle reorder from drag-drop\n const handleReorder = (newComponents: UIComponent[]) => {\n setComponents(newComponents)\n\n const newLayout: UILayout = {\n ...props.layout,\n components: newComponents\n }\n\n props.dragDrop?.onReorder?.(newComponents)\n props.dragDrop?.onChange?.(newLayout)\n props.onLayoutChange?.(newLayout)\n }\n\n // Handle resize completion\n const handleResize = (componentId: string, newPosition: GridPosition) => {\n const updatedComponents = components().map(c =>\n c.id === componentId ? { ...c, position: newPosition } : c\n )\n\n setComponents(updatedComponents)\n setActiveResizeId(null)\n setPreviewPositions(new Map())\n\n const newLayout: UILayout = {\n ...props.layout,\n components: updatedComponents\n }\n\n props.dragDrop?.onResize?.(componentId, newPosition)\n props.dragDrop?.onChange?.(newLayout)\n props.onLayoutChange?.(newLayout)\n }\n\n // Handle resize preview\n const handleResizePreview = (componentId: string, previewPosition: GridPosition) => {\n setPreviewPositions(prev => {\n const next = new Map(prev)\n next.set(componentId, previewPosition)\n return next\n })\n }\n\n // Initialize drag-drop hook\n const dragDrop = useDragDrop({\n components,\n onReorder: handleReorder,\n enabled: dragDropConfig().enabled && dragDropConfig().reorder\n })\n\n // Grid container style\n const gridContainerStyle = createMemo((): JSX.CSSProperties => ({\n display: 'grid',\n 'grid-template-columns': `repeat(${props.layout.grid.columns}, 1fr)`,\n gap: props.layout.grid.gap,\n position: 'relative'\n }))\n\n // Check if we should show grid overlay\n const showOverlay = createMemo(() =>\n dragDropConfig().showGridLines && (dragDrop.isDragging() || activeResizeId() !== null)\n )\n\n // Get effective position for a component (preview if resizing, otherwise actual)\n const getEffectivePosition = (component: UIComponent): GridPosition => {\n const preview = previewPositions().get(component.id)\n return preview || component.position\n }\n\n // If drag-drop is not enabled, just render the standard UIResourceRenderer\n if (!props.dragDrop?.enabled) {\n return (\n <UIResourceRenderer\n content={props.layout}\n onError={props.onError}\n class={props.class}\n />\n )\n }\n\n return (\n <div class={`w-full editable-ui-renderer ${props.class || ''}`}>\n <div\n ref={setGridContainerRef}\n class=\"grid relative\"\n style={gridContainerStyle()}\n data-grid-container\n >\n {/* Grid overlay */}\n <GridOverlay\n columns={props.layout.grid.columns}\n visible={showOverlay()}\n />\n\n {/* Render components with drag-drop wrappers */}\n <For each={components()}>\n {(component) => {\n // Create resize hook for each component\n const resize = useResize({\n componentId: component.id,\n currentPosition: () => component.position,\n onResize: (pos) => handleResize(component.id, pos),\n onResizePreview: (pos) => handleResizePreview(component.id, pos),\n constraints: dragDropConfig().constraints,\n gridContainer: gridContainerRef,\n gridColumns: props.layout.grid.columns,\n enabled: dragDropConfig().enabled && dragDropConfig().resize\n })\n\n const effectivePosition = () => getEffectivePosition(component)\n\n return (\n <DraggableGridItem\n id={component.id}\n position={effectivePosition()}\n draggable={dragDropConfig().enabled && dragDropConfig().reorder}\n resizable={dragDropConfig().enabled && dragDropConfig().resize}\n constraints={dragDropConfig().constraints}\n isDragging={dragDrop.isComponentDragging(component.id)}\n isDropTarget={dragDrop.isDropTarget(component.id)}\n isResizing={activeResizeId() === component.id}\n previewPosition={previewPositions().get(component.id) || null}\n dragProps={dragDrop.getDragProps(component.id)}\n onResizeStart={(edge, event) => {\n setActiveResizeId(component.id)\n resize.handleResizeStart(event, edge as ResizeEdge)\n }}\n >\n {/* Render component using UIResourceRenderer for single component */}\n <UIResourceRenderer\n content={component}\n onError={props.onError}\n />\n </DraggableGridItem>\n )\n }}\n </For>\n </div>\n </div>\n )\n}\n\nexport default EditableUIResourceRenderer\n"],"names":["GridOverlay","props","_$createComponent","Show","when","visible","children","_el$","_$getNextElement","_tmpl$","_$insert","For","each","Array","columns","fill","_tmpl$2","_$effect","_$p","_$setStyleProperty","EditableUIResourceRenderer","components","setComponents","createSignal","layout","activeResizeId","setActiveResizeId","previewPositions","setPreviewPositions","Map","gridContainerRef","setGridContainerRef","createEffect","on","newComponents","dragDropConfig","createMemo","enabled","dragDrop","reorder","resize","constraints","showGridLines","animationDuration","handleReorder","newLayout","onReorder","onChange","onLayoutChange","handleResize","componentId","newPosition","updatedComponents","map","c","id","position","onResize","handleResizePreview","previewPosition","prev","next","set","useDragDrop","gridContainerStyle","display","grid","gap","showOverlay","isDragging","getEffectivePosition","component","preview","get","UIResourceRenderer","content","onError","class","_el$3","_tmpl$3","_el$4","firstChild","_el$5","_el$6","_co$","_$getNextMarker","nextSibling","_el$7","_el$8","_co$2","_$use","useResize","currentPosition","pos","onResizePreview","gridContainer","gridColumns","effectivePosition","DraggableGridItem","draggable","_$memo","resizable","isComponentDragging","isDropTarget","isResizing","dragProps","getDragProps","onResizeStart","edge","event","handleResizeStart","_p$","_v$","_v$2","e","_$className","t","_$style","undefined"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"EditableUIResourceRenderer.d.ts","sourceRoot":"","sources":["../../src/components/EditableUIResourceRenderer.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,SAAS,EAQV,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EAEV,QAAQ,EACR,aAAa,EAEb,cAAc,EACf,MAAM,UAAU,CAAA;AAMjB;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C;;OAEG;IACH,MAAM,EAAE,QAAQ,CAAA;IAEhB;;OAEG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAA;IAEzB;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAA;IAExC;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,KAAK,IAAI,CAAA;IAE3C;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAsCD;;GAEG;AACH,eAAO,MAAM,0BAA0B,EAAE,SAAS,CAAC,+BAA+B,CAuKjF,CAAA;AAED,eAAe,0BAA0B,CAAA"}
1
+ {"version":3,"file":"EditableUIResourceRenderer.d.ts","sourceRoot":"","sources":["../../src/components/EditableUIResourceRenderer.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,SAAS,EAQV,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EAEV,QAAQ,EACR,aAAa,EAEb,cAAc,EACf,MAAM,UAAU,CAAA;AAMjB;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C;;OAEG;IACH,MAAM,EAAE,QAAQ,CAAA;IAEhB;;OAEG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAA;IAEzB;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAA;IAExC;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,KAAK,IAAI,CAAA;IAE3C;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAsCD;;GAEG;AACH,eAAO,MAAM,0BAA0B,EAAE,SAAS,CAAC,+BAA+B,CAkKjF,CAAA;AAED,eAAe,0BAA0B,CAAA"}
@@ -165,13 +165,9 @@ const EditableUIResourceRenderer = (props) => {
165
165
  get dragProps() {
166
166
  return dragDrop.getDragProps(component.id);
167
167
  },
168
- onResizeStart: (edge) => {
168
+ onResizeStart: (edge, event) => {
169
169
  setActiveResizeId(component.id);
170
- const syntheticEvent = new PointerEvent("pointerdown", {
171
- clientX: 0,
172
- clientY: 0
173
- });
174
- resize.handleResizeStart(syntheticEvent, edge);
170
+ resize.handleResizeStart(event, edge);
175
171
  },
176
172
  get children() {
177
173
  return createComponent(UIResourceRenderer, {
@@ -1 +1 @@
1
- {"version":3,"file":"EditableUIResourceRenderer.js","sources":["../../src/components/EditableUIResourceRenderer.tsx"],"sourcesContent":["/**\n * EditableUIResourceRenderer Component\n * Extends UIResourceRenderer with drag-and-drop reordering and resizing capabilities\n *\n * Sprint Drag-Drop Feature\n */\n\nimport {\n Component,\n For,\n Show,\n createSignal,\n createMemo,\n createEffect,\n on,\n JSX\n} from 'solid-js'\nimport type {\n UIComponent,\n UILayout,\n RendererError,\n GridPosition,\n DragDropConfig\n} from '../types'\nimport { useDragDrop } from '../hooks/useDragDrop'\nimport { useResize, ResizeEdge } from '../hooks/useResize'\nimport { DraggableGridItem } from './DraggableGridItem'\nimport { UIResourceRenderer } from './UIResourceRenderer'\n\n/**\n * Props for EditableUIResourceRenderer\n */\nexport interface EditableUIResourceRendererProps {\n /**\n * Layout to render (must be UILayout, not single component)\n */\n layout: UILayout\n\n /**\n * Drag-drop configuration\n */\n dragDrop?: DragDropConfig\n\n /**\n * Error callback\n */\n onError?: (error: RendererError) => void\n\n /**\n * Callback when layout changes (reorder or resize)\n */\n onLayoutChange?: (layout: UILayout) => void\n\n /**\n * Custom CSS class\n */\n class?: string\n\n /**\n * Show grid overlay during editing\n */\n showGridOverlay?: boolean\n}\n\n/**\n * Grid overlay component for visual feedback\n */\nconst GridOverlay: Component<{ columns: number; visible: boolean }> = (props) => {\n return (\n <Show when={props.visible}>\n <div\n class=\"mcp-grid-overlay\"\n style={{\n position: 'absolute',\n inset: '0',\n display: 'grid',\n 'grid-template-columns': `repeat(${props.columns}, 1fr)`,\n gap: '1rem',\n padding: '0',\n 'pointer-events': 'none',\n 'z-index': '0'\n }}\n >\n <For each={Array(props.columns).fill(0)}>\n {() => (\n <div\n class=\"mcp-grid-overlay-column\"\n style={{\n 'background-color': 'rgba(59, 130, 246, 0.05)',\n border: '1px dashed rgba(59, 130, 246, 0.2)',\n 'border-radius': '4px'\n }}\n />\n )}\n </For>\n </div>\n </Show>\n )\n}\n\n/**\n * EditableUIResourceRenderer Component\n */\nexport const EditableUIResourceRenderer: Component<EditableUIResourceRendererProps> = (props) => {\n // Internal state for components (allows editing)\n const [components, setComponents] = createSignal<UIComponent[]>(props.layout.components)\n const [activeResizeId, setActiveResizeId] = createSignal<string | null>(null)\n const [previewPositions, setPreviewPositions] = createSignal<Map<string, GridPosition>>(new Map())\n const [gridContainerRef, setGridContainerRef] = createSignal<HTMLElement | null>(null)\n\n // Sync with external layout changes\n createEffect(on(() => props.layout.components, (newComponents) => {\n setComponents(newComponents)\n }))\n\n // Drag-drop configuration\n const dragDropConfig = createMemo(() => ({\n enabled: props.dragDrop?.enabled ?? false,\n reorder: props.dragDrop?.reorder ?? true,\n resize: props.dragDrop?.resize ?? true,\n constraints: props.dragDrop?.constraints ?? {},\n showGridLines: props.dragDrop?.showGridLines ?? true,\n animationDuration: props.dragDrop?.animationDuration ?? 200\n }))\n\n // Handle reorder from drag-drop\n const handleReorder = (newComponents: UIComponent[]) => {\n setComponents(newComponents)\n\n const newLayout: UILayout = {\n ...props.layout,\n components: newComponents\n }\n\n props.dragDrop?.onReorder?.(newComponents)\n props.dragDrop?.onChange?.(newLayout)\n props.onLayoutChange?.(newLayout)\n }\n\n // Handle resize completion\n const handleResize = (componentId: string, newPosition: GridPosition) => {\n const updatedComponents = components().map(c =>\n c.id === componentId ? { ...c, position: newPosition } : c\n )\n\n setComponents(updatedComponents)\n setActiveResizeId(null)\n setPreviewPositions(new Map())\n\n const newLayout: UILayout = {\n ...props.layout,\n components: updatedComponents\n }\n\n props.dragDrop?.onResize?.(componentId, newPosition)\n props.dragDrop?.onChange?.(newLayout)\n props.onLayoutChange?.(newLayout)\n }\n\n // Handle resize preview\n const handleResizePreview = (componentId: string, previewPosition: GridPosition) => {\n setPreviewPositions(prev => {\n const next = new Map(prev)\n next.set(componentId, previewPosition)\n return next\n })\n }\n\n // Initialize drag-drop hook\n const dragDrop = useDragDrop({\n components,\n onReorder: handleReorder,\n enabled: dragDropConfig().enabled && dragDropConfig().reorder\n })\n\n // Grid container style\n const gridContainerStyle = createMemo((): JSX.CSSProperties => ({\n display: 'grid',\n 'grid-template-columns': `repeat(${props.layout.grid.columns}, 1fr)`,\n gap: props.layout.grid.gap,\n position: 'relative'\n }))\n\n // Check if we should show grid overlay\n const showOverlay = createMemo(() =>\n dragDropConfig().showGridLines && (dragDrop.isDragging() || activeResizeId() !== null)\n )\n\n // Get effective position for a component (preview if resizing, otherwise actual)\n const getEffectivePosition = (component: UIComponent): GridPosition => {\n const preview = previewPositions().get(component.id)\n return preview || component.position\n }\n\n // If drag-drop is not enabled, just render the standard UIResourceRenderer\n if (!props.dragDrop?.enabled) {\n return (\n <UIResourceRenderer\n content={props.layout}\n onError={props.onError}\n class={props.class}\n />\n )\n }\n\n return (\n <div class={`w-full editable-ui-renderer ${props.class || ''}`}>\n <div\n ref={setGridContainerRef}\n class=\"grid relative\"\n style={gridContainerStyle()}\n data-grid-container\n >\n {/* Grid overlay */}\n <GridOverlay\n columns={props.layout.grid.columns}\n visible={showOverlay()}\n />\n\n {/* Render components with drag-drop wrappers */}\n <For each={components()}>\n {(component) => {\n // Create resize hook for each component\n const resize = useResize({\n componentId: component.id,\n currentPosition: () => component.position,\n onResize: (pos) => handleResize(component.id, pos),\n onResizePreview: (pos) => handleResizePreview(component.id, pos),\n constraints: dragDropConfig().constraints,\n gridContainer: gridContainerRef,\n gridColumns: props.layout.grid.columns,\n enabled: dragDropConfig().enabled && dragDropConfig().resize\n })\n\n const effectivePosition = () => getEffectivePosition(component)\n\n return (\n <DraggableGridItem\n id={component.id}\n position={effectivePosition()}\n draggable={dragDropConfig().enabled && dragDropConfig().reorder}\n resizable={dragDropConfig().enabled && dragDropConfig().resize}\n constraints={dragDropConfig().constraints}\n isDragging={dragDrop.isComponentDragging(component.id)}\n isDropTarget={dragDrop.isDropTarget(component.id)}\n isResizing={activeResizeId() === component.id}\n previewPosition={previewPositions().get(component.id) || null}\n dragProps={dragDrop.getDragProps(component.id)}\n onResizeStart={(edge) => {\n setActiveResizeId(component.id)\n // Trigger resize with a synthetic event\n const syntheticEvent = new PointerEvent('pointerdown', {\n clientX: 0,\n clientY: 0\n })\n resize.handleResizeStart(syntheticEvent, edge as ResizeEdge)\n }}\n >\n {/* Render component using UIResourceRenderer for single component */}\n <UIResourceRenderer\n content={component}\n onError={props.onError}\n />\n </DraggableGridItem>\n )\n }}\n </For>\n </div>\n </div>\n )\n}\n\nexport default EditableUIResourceRenderer\n"],"names":["GridOverlay","props","_$createComponent","Show","when","visible","children","_el$","_$getNextElement","_tmpl$","_$insert","For","each","Array","columns","fill","_tmpl$2","_$effect","_$p","_$setStyleProperty","EditableUIResourceRenderer","components","setComponents","createSignal","layout","activeResizeId","setActiveResizeId","previewPositions","setPreviewPositions","Map","gridContainerRef","setGridContainerRef","createEffect","on","newComponents","dragDropConfig","createMemo","enabled","dragDrop","reorder","resize","constraints","showGridLines","animationDuration","handleReorder","newLayout","onReorder","onChange","onLayoutChange","handleResize","componentId","newPosition","updatedComponents","map","c","id","position","onResize","handleResizePreview","previewPosition","prev","next","set","useDragDrop","gridContainerStyle","display","grid","gap","showOverlay","isDragging","getEffectivePosition","component","preview","get","UIResourceRenderer","content","onError","class","_el$3","_tmpl$3","_el$4","firstChild","_el$5","_el$6","_co$","_$getNextMarker","nextSibling","_el$7","_el$8","_co$2","_$use","useResize","currentPosition","pos","onResizePreview","gridContainer","gridColumns","effectivePosition","DraggableGridItem","draggable","_$memo","resizable","isComponentDragging","isDropTarget","isResizing","dragProps","getDragProps","onResizeStart","edge","syntheticEvent","PointerEvent","clientX","clientY","handleResizeStart","_p$","_v$","_v$2","e","_$className","t","_$style","undefined"],"mappings":"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"}
1
+ {"version":3,"file":"EditableUIResourceRenderer.js","sources":["../../src/components/EditableUIResourceRenderer.tsx"],"sourcesContent":["/**\n * EditableUIResourceRenderer Component\n * Extends UIResourceRenderer with drag-and-drop reordering and resizing capabilities\n *\n * Sprint Drag-Drop Feature\n */\n\nimport {\n Component,\n For,\n Show,\n createSignal,\n createMemo,\n createEffect,\n on,\n JSX\n} from 'solid-js'\nimport type {\n UIComponent,\n UILayout,\n RendererError,\n GridPosition,\n DragDropConfig\n} from '../types'\nimport { useDragDrop } from '../hooks/useDragDrop'\nimport { useResize, ResizeEdge } from '../hooks/useResize'\nimport { DraggableGridItem } from './DraggableGridItem'\nimport { UIResourceRenderer } from './UIResourceRenderer'\n\n/**\n * Props for EditableUIResourceRenderer\n */\nexport interface EditableUIResourceRendererProps {\n /**\n * Layout to render (must be UILayout, not single component)\n */\n layout: UILayout\n\n /**\n * Drag-drop configuration\n */\n dragDrop?: DragDropConfig\n\n /**\n * Error callback\n */\n onError?: (error: RendererError) => void\n\n /**\n * Callback when layout changes (reorder or resize)\n */\n onLayoutChange?: (layout: UILayout) => void\n\n /**\n * Custom CSS class\n */\n class?: string\n\n /**\n * Show grid overlay during editing\n */\n showGridOverlay?: boolean\n}\n\n/**\n * Grid overlay component for visual feedback\n */\nconst GridOverlay: Component<{ columns: number; visible: boolean }> = (props) => {\n return (\n <Show when={props.visible}>\n <div\n class=\"mcp-grid-overlay\"\n style={{\n position: 'absolute',\n inset: '0',\n display: 'grid',\n 'grid-template-columns': `repeat(${props.columns}, 1fr)`,\n gap: '1rem',\n padding: '0',\n 'pointer-events': 'none',\n 'z-index': '0'\n }}\n >\n <For each={Array(props.columns).fill(0)}>\n {() => (\n <div\n class=\"mcp-grid-overlay-column\"\n style={{\n 'background-color': 'rgba(59, 130, 246, 0.05)',\n border: '1px dashed rgba(59, 130, 246, 0.2)',\n 'border-radius': '4px'\n }}\n />\n )}\n </For>\n </div>\n </Show>\n )\n}\n\n/**\n * EditableUIResourceRenderer Component\n */\nexport const EditableUIResourceRenderer: Component<EditableUIResourceRendererProps> = (props) => {\n // Internal state for components (allows editing)\n const [components, setComponents] = createSignal<UIComponent[]>(props.layout.components)\n const [activeResizeId, setActiveResizeId] = createSignal<string | null>(null)\n const [previewPositions, setPreviewPositions] = createSignal<Map<string, GridPosition>>(new Map())\n const [gridContainerRef, setGridContainerRef] = createSignal<HTMLElement | null>(null)\n\n // Sync with external layout changes\n createEffect(on(() => props.layout.components, (newComponents) => {\n setComponents(newComponents)\n }))\n\n // Drag-drop configuration\n const dragDropConfig = createMemo(() => ({\n enabled: props.dragDrop?.enabled ?? false,\n reorder: props.dragDrop?.reorder ?? true,\n resize: props.dragDrop?.resize ?? true,\n constraints: props.dragDrop?.constraints ?? {},\n showGridLines: props.dragDrop?.showGridLines ?? true,\n animationDuration: props.dragDrop?.animationDuration ?? 200\n }))\n\n // Handle reorder from drag-drop\n const handleReorder = (newComponents: UIComponent[]) => {\n setComponents(newComponents)\n\n const newLayout: UILayout = {\n ...props.layout,\n components: newComponents\n }\n\n props.dragDrop?.onReorder?.(newComponents)\n props.dragDrop?.onChange?.(newLayout)\n props.onLayoutChange?.(newLayout)\n }\n\n // Handle resize completion\n const handleResize = (componentId: string, newPosition: GridPosition) => {\n const updatedComponents = components().map(c =>\n c.id === componentId ? { ...c, position: newPosition } : c\n )\n\n setComponents(updatedComponents)\n setActiveResizeId(null)\n setPreviewPositions(new Map())\n\n const newLayout: UILayout = {\n ...props.layout,\n components: updatedComponents\n }\n\n props.dragDrop?.onResize?.(componentId, newPosition)\n props.dragDrop?.onChange?.(newLayout)\n props.onLayoutChange?.(newLayout)\n }\n\n // Handle resize preview\n const handleResizePreview = (componentId: string, previewPosition: GridPosition) => {\n setPreviewPositions(prev => {\n const next = new Map(prev)\n next.set(componentId, previewPosition)\n return next\n })\n }\n\n // Initialize drag-drop hook\n const dragDrop = useDragDrop({\n components,\n onReorder: handleReorder,\n enabled: dragDropConfig().enabled && dragDropConfig().reorder\n })\n\n // Grid container style\n const gridContainerStyle = createMemo((): JSX.CSSProperties => ({\n display: 'grid',\n 'grid-template-columns': `repeat(${props.layout.grid.columns}, 1fr)`,\n gap: props.layout.grid.gap,\n position: 'relative'\n }))\n\n // Check if we should show grid overlay\n const showOverlay = createMemo(() =>\n dragDropConfig().showGridLines && (dragDrop.isDragging() || activeResizeId() !== null)\n )\n\n // Get effective position for a component (preview if resizing, otherwise actual)\n const getEffectivePosition = (component: UIComponent): GridPosition => {\n const preview = previewPositions().get(component.id)\n return preview || component.position\n }\n\n // If drag-drop is not enabled, just render the standard UIResourceRenderer\n if (!props.dragDrop?.enabled) {\n return (\n <UIResourceRenderer\n content={props.layout}\n onError={props.onError}\n class={props.class}\n />\n )\n }\n\n return (\n <div class={`w-full editable-ui-renderer ${props.class || ''}`}>\n <div\n ref={setGridContainerRef}\n class=\"grid relative\"\n style={gridContainerStyle()}\n data-grid-container\n >\n {/* Grid overlay */}\n <GridOverlay\n columns={props.layout.grid.columns}\n visible={showOverlay()}\n />\n\n {/* Render components with drag-drop wrappers */}\n <For each={components()}>\n {(component) => {\n // Create resize hook for each component\n const resize = useResize({\n componentId: component.id,\n currentPosition: () => component.position,\n onResize: (pos) => handleResize(component.id, pos),\n onResizePreview: (pos) => handleResizePreview(component.id, pos),\n constraints: dragDropConfig().constraints,\n gridContainer: gridContainerRef,\n gridColumns: props.layout.grid.columns,\n enabled: dragDropConfig().enabled && dragDropConfig().resize\n })\n\n const effectivePosition = () => getEffectivePosition(component)\n\n return (\n <DraggableGridItem\n id={component.id}\n position={effectivePosition()}\n draggable={dragDropConfig().enabled && dragDropConfig().reorder}\n resizable={dragDropConfig().enabled && dragDropConfig().resize}\n constraints={dragDropConfig().constraints}\n isDragging={dragDrop.isComponentDragging(component.id)}\n isDropTarget={dragDrop.isDropTarget(component.id)}\n isResizing={activeResizeId() === component.id}\n previewPosition={previewPositions().get(component.id) || null}\n dragProps={dragDrop.getDragProps(component.id)}\n onResizeStart={(edge, event) => {\n setActiveResizeId(component.id)\n resize.handleResizeStart(event, edge as ResizeEdge)\n }}\n >\n {/* Render component using UIResourceRenderer for single component */}\n <UIResourceRenderer\n content={component}\n onError={props.onError}\n />\n </DraggableGridItem>\n )\n }}\n </For>\n </div>\n </div>\n )\n}\n\nexport default EditableUIResourceRenderer\n"],"names":["GridOverlay","props","_$createComponent","Show","when","visible","children","_el$","_$getNextElement","_tmpl$","_$insert","For","each","Array","columns","fill","_tmpl$2","_$effect","_$p","_$setStyleProperty","EditableUIResourceRenderer","components","setComponents","createSignal","layout","activeResizeId","setActiveResizeId","previewPositions","setPreviewPositions","Map","gridContainerRef","setGridContainerRef","createEffect","on","newComponents","dragDropConfig","createMemo","enabled","dragDrop","reorder","resize","constraints","showGridLines","animationDuration","handleReorder","newLayout","onReorder","onChange","onLayoutChange","handleResize","componentId","newPosition","updatedComponents","map","c","id","position","onResize","handleResizePreview","previewPosition","prev","next","set","useDragDrop","gridContainerStyle","display","grid","gap","showOverlay","isDragging","getEffectivePosition","component","preview","get","UIResourceRenderer","content","onError","class","_el$3","_tmpl$3","_el$4","firstChild","_el$5","_el$6","_co$","_$getNextMarker","nextSibling","_el$7","_el$8","_co$2","_$use","useResize","currentPosition","pos","onResizePreview","gridContainer","gridColumns","effectivePosition","DraggableGridItem","draggable","_$memo","resizable","isComponentDragging","isDropTarget","isResizing","dragProps","getDragProps","onResizeStart","edge","event","handleResizeStart","_p$","_v$","_v$2","e","_$className","t","_$style","undefined"],"mappings":"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"}
@@ -116,7 +116,7 @@ const ResizeHandle = (props) => {
116
116
  if (merged.disabled) return;
117
117
  e.preventDefault();
118
118
  e.stopPropagation();
119
- (_a = props.onResizeStart) == null ? void 0 : _a.call(props, props.edge);
119
+ (_a = props.onResizeStart) == null ? void 0 : _a.call(props, props.edge, e);
120
120
  };
121
121
  const containerStyle = solidJs.createMemo(() => ({
122
122
  position: "absolute",
@@ -141,7 +141,11 @@ const ResizeHandle = (props) => {
141
141
  if (merged.disabled) return;
142
142
  if (e.key === "Enter" || e.key === " ") {
143
143
  e.preventDefault();
144
- (_a = props.onResizeStart) == null ? void 0 : _a.call(props, props.edge);
144
+ const syntheticEvent = new PointerEvent("pointerdown", {
145
+ clientX: window.innerWidth / 2,
146
+ clientY: window.innerHeight / 2
147
+ });
148
+ (_a = props.onResizeStart) == null ? void 0 : _a.call(props, props.edge, syntheticEvent);
145
149
  }
146
150
  };
147
151
  _el$.$$pointerdown = handlePointerDown;
@@ -1 +1 @@
1
- {"version":3,"file":"ResizeHandle.cjs","sources":["../../src/components/ResizeHandle.tsx"],"sourcesContent":["/**\n * ResizeHandle Component\n * Visual handle for resizing grid components\n *\n * Sprint Drag-Drop Feature\n */\n\nimport { Component, JSX, createMemo, mergeProps } from 'solid-js'\n\n/**\n * Resize edge types\n */\nexport type ResizeEdge = 'left' | 'right' | 'top' | 'bottom'\n\n/**\n * Props for ResizeHandle\n */\nexport interface ResizeHandleProps {\n /**\n * Which edge this handle is on\n */\n edge: ResizeEdge\n\n /**\n * Callback when resize starts\n */\n onResizeStart?: (edge: ResizeEdge) => void\n\n /**\n * Whether the handle is disabled\n */\n disabled?: boolean\n\n /**\n * Whether resize is active\n */\n isActive?: boolean\n\n /**\n * Custom class\n */\n class?: string\n\n /**\n * Handle size in pixels\n */\n size?: number\n\n /**\n * Hit area size in pixels (larger than visible size for easier grabbing)\n */\n hitAreaSize?: number\n}\n\n/**\n * Get cursor style for edge\n */\nfunction getCursor(edge: ResizeEdge): string {\n switch (edge) {\n case 'left':\n case 'right':\n return 'ew-resize'\n case 'top':\n case 'bottom':\n return 'ns-resize'\n default:\n return 'default'\n }\n}\n\n/**\n * Get position styles for edge\n */\nfunction getPositionStyle(\n edge: ResizeEdge,\n hitAreaSize: number\n): JSX.CSSProperties {\n const halfSize = hitAreaSize / 2\n\n switch (edge) {\n case 'left':\n return {\n left: `-${halfSize}px`,\n top: '0',\n width: `${hitAreaSize}px`,\n height: '100%'\n }\n case 'right':\n return {\n right: `-${halfSize}px`,\n top: '0',\n width: `${hitAreaSize}px`,\n height: '100%'\n }\n case 'top':\n return {\n top: `-${halfSize}px`,\n left: '0',\n width: '100%',\n height: `${hitAreaSize}px`\n }\n case 'bottom':\n return {\n bottom: `-${halfSize}px`,\n left: '0',\n width: '100%',\n height: `${hitAreaSize}px`\n }\n default:\n return {}\n }\n}\n\n/**\n * Get visual indicator styles for edge\n */\nfunction getIndicatorStyle(\n edge: ResizeEdge,\n size: number,\n isActive: boolean\n): JSX.CSSProperties {\n const baseColor = isActive ? '#3b82f6' : '#9ca3af'\n\n const common: JSX.CSSProperties = {\n position: 'absolute',\n 'background-color': baseColor,\n 'border-radius': `${size / 2}px`,\n transition: 'background-color 150ms ease, opacity 150ms ease',\n opacity: isActive ? '1' : '0'\n }\n\n switch (edge) {\n case 'left':\n return {\n ...common,\n left: '50%',\n top: '50%',\n transform: 'translate(-50%, -50%)',\n width: `${size}px`,\n height: '40px',\n 'max-height': '60%'\n }\n case 'right':\n return {\n ...common,\n right: '50%',\n top: '50%',\n transform: 'translate(50%, -50%)',\n width: `${size}px`,\n height: '40px',\n 'max-height': '60%'\n }\n case 'top':\n return {\n ...common,\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n width: '40px',\n 'max-width': '60%',\n height: `${size}px`\n }\n case 'bottom':\n return {\n ...common,\n bottom: '50%',\n left: '50%',\n transform: 'translate(-50%, 50%)',\n width: '40px',\n 'max-width': '60%',\n height: `${size}px`\n }\n default:\n return common\n }\n}\n\n/**\n * ResizeHandle Component\n */\nexport const ResizeHandle: Component<ResizeHandleProps> = (props) => {\n const merged = mergeProps(\n {\n disabled: false,\n isActive: false,\n size: 4,\n hitAreaSize: 12\n },\n props\n )\n\n const handlePointerDown = (e: PointerEvent) => {\n if (merged.disabled) return\n\n e.preventDefault()\n e.stopPropagation()\n\n props.onResizeStart?.(props.edge)\n }\n\n // Container styles\n const containerStyle = createMemo((): JSX.CSSProperties => ({\n position: 'absolute',\n 'z-index': '10',\n cursor: merged.disabled ? 'default' : getCursor(props.edge),\n 'user-select': 'none',\n 'touch-action': 'none',\n ...getPositionStyle(props.edge, merged.hitAreaSize)\n }))\n\n // Indicator styles\n const indicatorStyle = createMemo(() =>\n getIndicatorStyle(props.edge, merged.size, merged.isActive)\n )\n\n // Class names\n const classNames = createMemo(() => {\n const classes = [\n 'mcp-resize-handle',\n `mcp-resize-handle-${props.edge}`\n ]\n\n if (merged.disabled) classes.push('mcp-resize-handle-disabled')\n if (merged.isActive) classes.push('mcp-resize-handle-active')\n if (props.class) classes.push(props.class)\n\n return classes.join(' ')\n })\n\n return (\n <div\n class={classNames()}\n style={containerStyle()}\n onPointerDown={handlePointerDown}\n data-resize-edge={props.edge}\n role=\"separator\"\n aria-orientation={\n props.edge === 'left' || props.edge === 'right'\n ? 'vertical'\n : 'horizontal'\n }\n aria-valuenow={undefined}\n tabIndex={merged.disabled ? -1 : 0}\n onKeyDown={(e) => {\n // Allow keyboard resizing\n if (merged.disabled) return\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n props.onResizeStart?.(props.edge)\n }\n }}\n >\n {/* Visual indicator */}\n <div\n class=\"mcp-resize-indicator\"\n style={indicatorStyle()}\n />\n </div>\n )\n}\n\nexport default ResizeHandle\n"],"names":["getCursor","edge","getPositionStyle","hitAreaSize","halfSize","left","top","width","height","right","bottom","getIndicatorStyle","size","isActive","baseColor","common","position","transition","opacity","transform","ResizeHandle","props","merged","mergeProps","disabled","handlePointerDown","e","preventDefault","stopPropagation","onResizeStart","containerStyle","createMemo","cursor","indicatorStyle","classNames","classes","push","class","join","_el$","_$getNextElement","_tmpl$","_el$2","firstChild","$$keydown","key","$$pointerdown","_$setAttribute","undefined","_$effect","_p$","_v$","_v$2","_v$3","_v$4","_v$5","_v$6","_$className","t","_$style","a","o","i","n","_$runHydrationEvents","_$delegateEvents"],"mappings":"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"}
1
+ {"version":3,"file":"ResizeHandle.cjs","sources":["../../src/components/ResizeHandle.tsx"],"sourcesContent":["/**\n * ResizeHandle Component\n * Visual handle for resizing grid components\n *\n * Sprint Drag-Drop Feature\n */\n\nimport { Component, JSX, createMemo, mergeProps } from 'solid-js'\n\n/**\n * Resize edge types\n */\nexport type ResizeEdge = 'left' | 'right' | 'top' | 'bottom'\n\n/**\n * Props for ResizeHandle\n */\nexport interface ResizeHandleProps {\n /**\n * Which edge this handle is on\n */\n edge: ResizeEdge\n\n /**\n * Callback when resize starts\n */\n onResizeStart?: (edge: ResizeEdge, event: PointerEvent) => void\n\n /**\n * Whether the handle is disabled\n */\n disabled?: boolean\n\n /**\n * Whether resize is active\n */\n isActive?: boolean\n\n /**\n * Custom class\n */\n class?: string\n\n /**\n * Handle size in pixels\n */\n size?: number\n\n /**\n * Hit area size in pixels (larger than visible size for easier grabbing)\n */\n hitAreaSize?: number\n}\n\n/**\n * Get cursor style for edge\n */\nfunction getCursor(edge: ResizeEdge): string {\n switch (edge) {\n case 'left':\n case 'right':\n return 'ew-resize'\n case 'top':\n case 'bottom':\n return 'ns-resize'\n default:\n return 'default'\n }\n}\n\n/**\n * Get position styles for edge\n */\nfunction getPositionStyle(\n edge: ResizeEdge,\n hitAreaSize: number\n): JSX.CSSProperties {\n const halfSize = hitAreaSize / 2\n\n switch (edge) {\n case 'left':\n return {\n left: `-${halfSize}px`,\n top: '0',\n width: `${hitAreaSize}px`,\n height: '100%'\n }\n case 'right':\n return {\n right: `-${halfSize}px`,\n top: '0',\n width: `${hitAreaSize}px`,\n height: '100%'\n }\n case 'top':\n return {\n top: `-${halfSize}px`,\n left: '0',\n width: '100%',\n height: `${hitAreaSize}px`\n }\n case 'bottom':\n return {\n bottom: `-${halfSize}px`,\n left: '0',\n width: '100%',\n height: `${hitAreaSize}px`\n }\n default:\n return {}\n }\n}\n\n/**\n * Get visual indicator styles for edge\n */\nfunction getIndicatorStyle(\n edge: ResizeEdge,\n size: number,\n isActive: boolean\n): JSX.CSSProperties {\n const baseColor = isActive ? '#3b82f6' : '#9ca3af'\n\n const common: JSX.CSSProperties = {\n position: 'absolute',\n 'background-color': baseColor,\n 'border-radius': `${size / 2}px`,\n transition: 'background-color 150ms ease, opacity 150ms ease',\n opacity: isActive ? '1' : '0'\n }\n\n switch (edge) {\n case 'left':\n return {\n ...common,\n left: '50%',\n top: '50%',\n transform: 'translate(-50%, -50%)',\n width: `${size}px`,\n height: '40px',\n 'max-height': '60%'\n }\n case 'right':\n return {\n ...common,\n right: '50%',\n top: '50%',\n transform: 'translate(50%, -50%)',\n width: `${size}px`,\n height: '40px',\n 'max-height': '60%'\n }\n case 'top':\n return {\n ...common,\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n width: '40px',\n 'max-width': '60%',\n height: `${size}px`\n }\n case 'bottom':\n return {\n ...common,\n bottom: '50%',\n left: '50%',\n transform: 'translate(-50%, 50%)',\n width: '40px',\n 'max-width': '60%',\n height: `${size}px`\n }\n default:\n return common\n }\n}\n\n/**\n * ResizeHandle Component\n */\nexport const ResizeHandle: Component<ResizeHandleProps> = (props) => {\n const merged = mergeProps(\n {\n disabled: false,\n isActive: false,\n size: 4,\n hitAreaSize: 12\n },\n props\n )\n\n const handlePointerDown = (e: PointerEvent) => {\n if (merged.disabled) return\n\n e.preventDefault()\n e.stopPropagation()\n\n props.onResizeStart?.(props.edge, e)\n }\n\n // Container styles\n const containerStyle = createMemo((): JSX.CSSProperties => ({\n position: 'absolute',\n 'z-index': '10',\n cursor: merged.disabled ? 'default' : getCursor(props.edge),\n 'user-select': 'none',\n 'touch-action': 'none',\n ...getPositionStyle(props.edge, merged.hitAreaSize)\n }))\n\n // Indicator styles\n const indicatorStyle = createMemo(() =>\n getIndicatorStyle(props.edge, merged.size, merged.isActive)\n )\n\n // Class names\n const classNames = createMemo(() => {\n const classes = [\n 'mcp-resize-handle',\n `mcp-resize-handle-${props.edge}`\n ]\n\n if (merged.disabled) classes.push('mcp-resize-handle-disabled')\n if (merged.isActive) classes.push('mcp-resize-handle-active')\n if (props.class) classes.push(props.class)\n\n return classes.join(' ')\n })\n\n return (\n <div\n class={classNames()}\n style={containerStyle()}\n onPointerDown={handlePointerDown}\n data-resize-edge={props.edge}\n role=\"separator\"\n aria-orientation={\n props.edge === 'left' || props.edge === 'right'\n ? 'vertical'\n : 'horizontal'\n }\n aria-valuenow={undefined}\n tabIndex={merged.disabled ? -1 : 0}\n onKeyDown={(e) => {\n // Allow keyboard resizing\n if (merged.disabled) return\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n // Create synthetic pointer event for keyboard activation\n const syntheticEvent = new PointerEvent('pointerdown', {\n clientX: window.innerWidth / 2,\n clientY: window.innerHeight / 2\n })\n props.onResizeStart?.(props.edge, syntheticEvent)\n }\n }}\n >\n {/* Visual indicator */}\n <div\n class=\"mcp-resize-indicator\"\n style={indicatorStyle()}\n />\n </div>\n )\n}\n\nexport default ResizeHandle\n"],"names":["getCursor","edge","getPositionStyle","hitAreaSize","halfSize","left","top","width","height","right","bottom","getIndicatorStyle","size","isActive","baseColor","common","position","transition","opacity","transform","ResizeHandle","props","merged","mergeProps","disabled","handlePointerDown","e","preventDefault","stopPropagation","onResizeStart","containerStyle","createMemo","cursor","indicatorStyle","classNames","classes","push","class","join","_el$","_$getNextElement","_tmpl$","_el$2","firstChild","$$keydown","key","syntheticEvent","PointerEvent","clientX","window","innerWidth","clientY","innerHeight","$$pointerdown","_$setAttribute","undefined","_$effect","_p$","_v$","_v$2","_v$3","_v$4","_v$5","_v$6","_$className","t","_$style","a","o","i","n","_$runHydrationEvents","_$delegateEvents"],"mappings":"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"}
@@ -20,7 +20,7 @@ export interface ResizeHandleProps {
20
20
  /**
21
21
  * Callback when resize starts
22
22
  */
23
- onResizeStart?: (edge: ResizeEdge) => void;
23
+ onResizeStart?: (edge: ResizeEdge, event: PointerEvent) => void;
24
24
  /**
25
25
  * Whether the handle is disabled
26
26
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ResizeHandle.d.ts","sourceRoot":"","sources":["../../src/components/ResizeHandle.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAA+B,MAAM,UAAU,CAAA;AAEjE;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAA;AAE5D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,IAAI,EAAE,UAAU,CAAA;IAEhB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAA;IAE1C;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AA6HD;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,SAAS,CAAC,iBAAiB,CA+ErD,CAAA;AAED,eAAe,YAAY,CAAA"}
1
+ {"version":3,"file":"ResizeHandle.d.ts","sourceRoot":"","sources":["../../src/components/ResizeHandle.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAA+B,MAAM,UAAU,CAAA;AAEjE;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAA;AAE5D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,IAAI,EAAE,UAAU,CAAA;IAEhB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,KAAK,IAAI,CAAA;IAE/D;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AA6HD;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,SAAS,CAAC,iBAAiB,CAoFrD,CAAA;AAED,eAAe,YAAY,CAAA"}
@@ -114,7 +114,7 @@ const ResizeHandle = (props) => {
114
114
  if (merged.disabled) return;
115
115
  e.preventDefault();
116
116
  e.stopPropagation();
117
- (_a = props.onResizeStart) == null ? void 0 : _a.call(props, props.edge);
117
+ (_a = props.onResizeStart) == null ? void 0 : _a.call(props, props.edge, e);
118
118
  };
119
119
  const containerStyle = createMemo(() => ({
120
120
  position: "absolute",
@@ -139,7 +139,11 @@ const ResizeHandle = (props) => {
139
139
  if (merged.disabled) return;
140
140
  if (e.key === "Enter" || e.key === " ") {
141
141
  e.preventDefault();
142
- (_a = props.onResizeStart) == null ? void 0 : _a.call(props, props.edge);
142
+ const syntheticEvent = new PointerEvent("pointerdown", {
143
+ clientX: window.innerWidth / 2,
144
+ clientY: window.innerHeight / 2
145
+ });
146
+ (_a = props.onResizeStart) == null ? void 0 : _a.call(props, props.edge, syntheticEvent);
143
147
  }
144
148
  };
145
149
  _el$.$$pointerdown = handlePointerDown;
@@ -1 +1 @@
1
- {"version":3,"file":"ResizeHandle.js","sources":["../../src/components/ResizeHandle.tsx"],"sourcesContent":["/**\n * ResizeHandle Component\n * Visual handle for resizing grid components\n *\n * Sprint Drag-Drop Feature\n */\n\nimport { Component, JSX, createMemo, mergeProps } from 'solid-js'\n\n/**\n * Resize edge types\n */\nexport type ResizeEdge = 'left' | 'right' | 'top' | 'bottom'\n\n/**\n * Props for ResizeHandle\n */\nexport interface ResizeHandleProps {\n /**\n * Which edge this handle is on\n */\n edge: ResizeEdge\n\n /**\n * Callback when resize starts\n */\n onResizeStart?: (edge: ResizeEdge) => void\n\n /**\n * Whether the handle is disabled\n */\n disabled?: boolean\n\n /**\n * Whether resize is active\n */\n isActive?: boolean\n\n /**\n * Custom class\n */\n class?: string\n\n /**\n * Handle size in pixels\n */\n size?: number\n\n /**\n * Hit area size in pixels (larger than visible size for easier grabbing)\n */\n hitAreaSize?: number\n}\n\n/**\n * Get cursor style for edge\n */\nfunction getCursor(edge: ResizeEdge): string {\n switch (edge) {\n case 'left':\n case 'right':\n return 'ew-resize'\n case 'top':\n case 'bottom':\n return 'ns-resize'\n default:\n return 'default'\n }\n}\n\n/**\n * Get position styles for edge\n */\nfunction getPositionStyle(\n edge: ResizeEdge,\n hitAreaSize: number\n): JSX.CSSProperties {\n const halfSize = hitAreaSize / 2\n\n switch (edge) {\n case 'left':\n return {\n left: `-${halfSize}px`,\n top: '0',\n width: `${hitAreaSize}px`,\n height: '100%'\n }\n case 'right':\n return {\n right: `-${halfSize}px`,\n top: '0',\n width: `${hitAreaSize}px`,\n height: '100%'\n }\n case 'top':\n return {\n top: `-${halfSize}px`,\n left: '0',\n width: '100%',\n height: `${hitAreaSize}px`\n }\n case 'bottom':\n return {\n bottom: `-${halfSize}px`,\n left: '0',\n width: '100%',\n height: `${hitAreaSize}px`\n }\n default:\n return {}\n }\n}\n\n/**\n * Get visual indicator styles for edge\n */\nfunction getIndicatorStyle(\n edge: ResizeEdge,\n size: number,\n isActive: boolean\n): JSX.CSSProperties {\n const baseColor = isActive ? '#3b82f6' : '#9ca3af'\n\n const common: JSX.CSSProperties = {\n position: 'absolute',\n 'background-color': baseColor,\n 'border-radius': `${size / 2}px`,\n transition: 'background-color 150ms ease, opacity 150ms ease',\n opacity: isActive ? '1' : '0'\n }\n\n switch (edge) {\n case 'left':\n return {\n ...common,\n left: '50%',\n top: '50%',\n transform: 'translate(-50%, -50%)',\n width: `${size}px`,\n height: '40px',\n 'max-height': '60%'\n }\n case 'right':\n return {\n ...common,\n right: '50%',\n top: '50%',\n transform: 'translate(50%, -50%)',\n width: `${size}px`,\n height: '40px',\n 'max-height': '60%'\n }\n case 'top':\n return {\n ...common,\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n width: '40px',\n 'max-width': '60%',\n height: `${size}px`\n }\n case 'bottom':\n return {\n ...common,\n bottom: '50%',\n left: '50%',\n transform: 'translate(-50%, 50%)',\n width: '40px',\n 'max-width': '60%',\n height: `${size}px`\n }\n default:\n return common\n }\n}\n\n/**\n * ResizeHandle Component\n */\nexport const ResizeHandle: Component<ResizeHandleProps> = (props) => {\n const merged = mergeProps(\n {\n disabled: false,\n isActive: false,\n size: 4,\n hitAreaSize: 12\n },\n props\n )\n\n const handlePointerDown = (e: PointerEvent) => {\n if (merged.disabled) return\n\n e.preventDefault()\n e.stopPropagation()\n\n props.onResizeStart?.(props.edge)\n }\n\n // Container styles\n const containerStyle = createMemo((): JSX.CSSProperties => ({\n position: 'absolute',\n 'z-index': '10',\n cursor: merged.disabled ? 'default' : getCursor(props.edge),\n 'user-select': 'none',\n 'touch-action': 'none',\n ...getPositionStyle(props.edge, merged.hitAreaSize)\n }))\n\n // Indicator styles\n const indicatorStyle = createMemo(() =>\n getIndicatorStyle(props.edge, merged.size, merged.isActive)\n )\n\n // Class names\n const classNames = createMemo(() => {\n const classes = [\n 'mcp-resize-handle',\n `mcp-resize-handle-${props.edge}`\n ]\n\n if (merged.disabled) classes.push('mcp-resize-handle-disabled')\n if (merged.isActive) classes.push('mcp-resize-handle-active')\n if (props.class) classes.push(props.class)\n\n return classes.join(' ')\n })\n\n return (\n <div\n class={classNames()}\n style={containerStyle()}\n onPointerDown={handlePointerDown}\n data-resize-edge={props.edge}\n role=\"separator\"\n aria-orientation={\n props.edge === 'left' || props.edge === 'right'\n ? 'vertical'\n : 'horizontal'\n }\n aria-valuenow={undefined}\n tabIndex={merged.disabled ? -1 : 0}\n onKeyDown={(e) => {\n // Allow keyboard resizing\n if (merged.disabled) return\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n props.onResizeStart?.(props.edge)\n }\n }}\n >\n {/* Visual indicator */}\n <div\n class=\"mcp-resize-indicator\"\n style={indicatorStyle()}\n />\n </div>\n )\n}\n\nexport default ResizeHandle\n"],"names":["getCursor","edge","getPositionStyle","hitAreaSize","halfSize","left","top","width","height","right","bottom","getIndicatorStyle","size","isActive","baseColor","common","position","transition","opacity","transform","ResizeHandle","props","merged","mergeProps","disabled","handlePointerDown","e","preventDefault","stopPropagation","onResizeStart","containerStyle","createMemo","cursor","indicatorStyle","classNames","classes","push","class","join","_el$","_$getNextElement","_tmpl$","_el$2","firstChild","$$keydown","key","$$pointerdown","_$setAttribute","undefined","_$effect","_p$","_v$","_v$2","_v$3","_v$4","_v$5","_v$6","_$className","t","_$style","a","o","i","n","_$runHydrationEvents","_$delegateEvents"],"mappings":";;;AAyDA,SAASA,UAAUC,MAA0B;AAC3C,UAAQA,MAAAA;AAAAA,IACN,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EAAA;AAEb;AAKA,SAASC,iBACPD,MACAE,aACmB;AACnB,QAAMC,WAAWD,cAAc;AAE/B,UAAQF,MAAAA;AAAAA,IACN,KAAK;AACH,aAAO;AAAA,QACLI,MAAM,IAAID,QAAQ;AAAA,QAClBE,KAAK;AAAA,QACLC,OAAO,GAAGJ,WAAW;AAAA,QACrBK,QAAQ;AAAA,MAAA;AAAA,IAEZ,KAAK;AACH,aAAO;AAAA,QACLC,OAAO,IAAIL,QAAQ;AAAA,QACnBE,KAAK;AAAA,QACLC,OAAO,GAAGJ,WAAW;AAAA,QACrBK,QAAQ;AAAA,MAAA;AAAA,IAEZ,KAAK;AACH,aAAO;AAAA,QACLF,KAAK,IAAIF,QAAQ;AAAA,QACjBC,MAAM;AAAA,QACNE,OAAO;AAAA,QACPC,QAAQ,GAAGL,WAAW;AAAA,MAAA;AAAA,IAE1B,KAAK;AACH,aAAO;AAAA,QACLO,QAAQ,IAAIN,QAAQ;AAAA,QACpBC,MAAM;AAAA,QACNE,OAAO;AAAA,QACPC,QAAQ,GAAGL,WAAW;AAAA,MAAA;AAAA,IAE1B;AACE,aAAO,CAAA;AAAA,EAAC;AAEd;AAKA,SAASQ,kBACPV,MACAW,MACAC,UACmB;AACnB,QAAMC,YAAYD,WAAW,YAAY;AAEzC,QAAME,SAA4B;AAAA,IAChCC,UAAU;AAAA,IACV,oBAAoBF;AAAAA,IACpB,iBAAiB,GAAGF,OAAO,CAAC;AAAA,IAC5BK,YAAY;AAAA,IACZC,SAASL,WAAW,MAAM;AAAA,EAAA;AAG5B,UAAQZ,MAAAA;AAAAA,IACN,KAAK;AACH,aAAO;AAAA,QACL,GAAGc;AAAAA,QACHV,MAAM;AAAA,QACNC,KAAK;AAAA,QACLa,WAAW;AAAA,QACXZ,OAAO,GAAGK,IAAI;AAAA,QACdJ,QAAQ;AAAA,QACR,cAAc;AAAA,MAAA;AAAA,IAElB,KAAK;AACH,aAAO;AAAA,QACL,GAAGO;AAAAA,QACHN,OAAO;AAAA,QACPH,KAAK;AAAA,QACLa,WAAW;AAAA,QACXZ,OAAO,GAAGK,IAAI;AAAA,QACdJ,QAAQ;AAAA,QACR,cAAc;AAAA,MAAA;AAAA,IAElB,KAAK;AACH,aAAO;AAAA,QACL,GAAGO;AAAAA,QACHT,KAAK;AAAA,QACLD,MAAM;AAAA,QACNc,WAAW;AAAA,QACXZ,OAAO;AAAA,QACP,aAAa;AAAA,QACbC,QAAQ,GAAGI,IAAI;AAAA,MAAA;AAAA,IAEnB,KAAK;AACH,aAAO;AAAA,QACL,GAAGG;AAAAA,QACHL,QAAQ;AAAA,QACRL,MAAM;AAAA,QACNc,WAAW;AAAA,QACXZ,OAAO;AAAA,QACP,aAAa;AAAA,QACbC,QAAQ,GAAGI,IAAI;AAAA,MAAA;AAAA,IAEnB;AACE,aAAOG;AAAAA,EAAAA;AAEb;AAKO,MAAMK,eAA8CC,CAAAA,UAAU;AACnE,QAAMC,SAASC,WACb;AAAA,IACEC,UAAU;AAAA,IACVX,UAAU;AAAA,IACVD,MAAM;AAAA,IACNT,aAAa;AAAA,EAAA,GAEfkB,KACF;AAEA,QAAMI,oBAAoBA,CAACC,MAAoB;;AAC7C,QAAIJ,OAAOE,SAAU;AAErBE,MAAEC,eAAAA;AACFD,MAAEE,gBAAAA;AAEFP,gBAAMQ,kBAANR,+BAAsBA,MAAMpB;AAAAA,EAC9B;AAGA,QAAM6B,iBAAiBC,WAAW,OAA0B;AAAA,IAC1Df,UAAU;AAAA,IACV,WAAW;AAAA,IACXgB,QAAQV,OAAOE,WAAW,YAAYxB,UAAUqB,MAAMpB,IAAI;AAAA,IAC1D,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,GAAGC,iBAAiBmB,MAAMpB,MAAMqB,OAAOnB,WAAW;AAAA,EAAA,EAClD;AAGF,QAAM8B,iBAAiBF,WAAW,MAChCpB,kBAAkBU,MAAMpB,MAAMqB,OAAOV,MAAMU,OAAOT,QAAQ,CAC5D;AAGA,QAAMqB,aAAaH,WAAW,MAAM;AAClC,UAAMI,UAAU,CACd,qBACA,qBAAqBd,MAAMpB,IAAI,EAAE;AAGnC,QAAIqB,OAAOE,SAAUW,SAAQC,KAAK,4BAA4B;AAC9D,QAAId,OAAOT,SAAUsB,SAAQC,KAAK,0BAA0B;AAC5D,QAAIf,MAAMgB,MAAOF,SAAQC,KAAKf,MAAMgB,KAAK;AAEzC,WAAOF,QAAQG,KAAK,GAAG;AAAA,EACzB,CAAC;AAED,UAAA,MAAA;AAAA,QAAAC,OAAAC,eAAAC,MAAA,GAAAC,QAAAH,KAAAI;AAAAJ,SAAAK,YAcgBlB,CAAAA,MAAM;;AAEhB,UAAIJ,OAAOE,SAAU;AACrB,UAAIE,EAAEmB,QAAQ,WAAWnB,EAAEmB,QAAQ,KAAK;AACtCnB,UAAEC,eAAAA;AACFN,oBAAMQ,kBAANR,+BAAsBA,MAAMpB;AAAAA,MAC9B;AAAA,IACF;AAACsC,SAAAO,gBAjBcrB;AAAiBsB,iBAAAR,MAAA,iBAQjBS,MAAS;AAAAC,WAAAC,CAAAA,QAAA;AAAA,UAAAC,MAVjBjB,cAAYkB,OACZtB,eAAAA,GAAgBuB,OAELhC,MAAMpB,MAAIqD,OAG1BjC,MAAMpB,SAAS,UAAUoB,MAAMpB,SAAS,UACpC,aACA,cAAYsD,OAGRjC,OAAOE,WAAW,KAAK,GAACgC,OAazBvB,eAAAA;AAAgBkB,cAAAD,IAAAxB,KAAA+B,UAAAlB,MAAAW,IAAAxB,IAAAyB,GAAA;AAAAD,UAAAQ,IAAAC,MAAApB,MAAAa,MAAAF,IAAAQ,CAAA;AAAAL,eAAAH,IAAAU,KAAAb,aAAAR,MAAA,oBAAAW,IAAAU,IAAAP,IAAA;AAAAC,eAAAJ,IAAAW,KAAAd,aAAAR,MAAA,oBAAAW,IAAAW,IAAAP,IAAA;AAAAC,eAAAL,IAAAY,KAAAf,aAAAR,MAAA,YAAAW,IAAAY,IAAAP,IAAA;AAAAL,UAAAa,IAAAJ,MAAAjB,OAAAc,MAAAN,IAAAa,CAAA;AAAA,aAAAb;AAAAA,IAAA,GAAA;AAAA,MAAAxB,GAAAsB;AAAAA,MAAAU,GAAAV;AAAAA,MAAAY,GAAAZ;AAAAA,MAAAa,GAAAb;AAAAA,MAAAc,GAAAd;AAAAA,MAAAe,GAAAf;AAAAA,IAAAA,CAAA;AAAAgB,uBAAAA;AAAA,WAAAzB;AAAAA,EAAA,GAAA;AAI/B;AAE2B0B,eAAA,CAAA,eAAA,SAAA,CAAA;"}
1
+ {"version":3,"file":"ResizeHandle.js","sources":["../../src/components/ResizeHandle.tsx"],"sourcesContent":["/**\n * ResizeHandle Component\n * Visual handle for resizing grid components\n *\n * Sprint Drag-Drop Feature\n */\n\nimport { Component, JSX, createMemo, mergeProps } from 'solid-js'\n\n/**\n * Resize edge types\n */\nexport type ResizeEdge = 'left' | 'right' | 'top' | 'bottom'\n\n/**\n * Props for ResizeHandle\n */\nexport interface ResizeHandleProps {\n /**\n * Which edge this handle is on\n */\n edge: ResizeEdge\n\n /**\n * Callback when resize starts\n */\n onResizeStart?: (edge: ResizeEdge, event: PointerEvent) => void\n\n /**\n * Whether the handle is disabled\n */\n disabled?: boolean\n\n /**\n * Whether resize is active\n */\n isActive?: boolean\n\n /**\n * Custom class\n */\n class?: string\n\n /**\n * Handle size in pixels\n */\n size?: number\n\n /**\n * Hit area size in pixels (larger than visible size for easier grabbing)\n */\n hitAreaSize?: number\n}\n\n/**\n * Get cursor style for edge\n */\nfunction getCursor(edge: ResizeEdge): string {\n switch (edge) {\n case 'left':\n case 'right':\n return 'ew-resize'\n case 'top':\n case 'bottom':\n return 'ns-resize'\n default:\n return 'default'\n }\n}\n\n/**\n * Get position styles for edge\n */\nfunction getPositionStyle(\n edge: ResizeEdge,\n hitAreaSize: number\n): JSX.CSSProperties {\n const halfSize = hitAreaSize / 2\n\n switch (edge) {\n case 'left':\n return {\n left: `-${halfSize}px`,\n top: '0',\n width: `${hitAreaSize}px`,\n height: '100%'\n }\n case 'right':\n return {\n right: `-${halfSize}px`,\n top: '0',\n width: `${hitAreaSize}px`,\n height: '100%'\n }\n case 'top':\n return {\n top: `-${halfSize}px`,\n left: '0',\n width: '100%',\n height: `${hitAreaSize}px`\n }\n case 'bottom':\n return {\n bottom: `-${halfSize}px`,\n left: '0',\n width: '100%',\n height: `${hitAreaSize}px`\n }\n default:\n return {}\n }\n}\n\n/**\n * Get visual indicator styles for edge\n */\nfunction getIndicatorStyle(\n edge: ResizeEdge,\n size: number,\n isActive: boolean\n): JSX.CSSProperties {\n const baseColor = isActive ? '#3b82f6' : '#9ca3af'\n\n const common: JSX.CSSProperties = {\n position: 'absolute',\n 'background-color': baseColor,\n 'border-radius': `${size / 2}px`,\n transition: 'background-color 150ms ease, opacity 150ms ease',\n opacity: isActive ? '1' : '0'\n }\n\n switch (edge) {\n case 'left':\n return {\n ...common,\n left: '50%',\n top: '50%',\n transform: 'translate(-50%, -50%)',\n width: `${size}px`,\n height: '40px',\n 'max-height': '60%'\n }\n case 'right':\n return {\n ...common,\n right: '50%',\n top: '50%',\n transform: 'translate(50%, -50%)',\n width: `${size}px`,\n height: '40px',\n 'max-height': '60%'\n }\n case 'top':\n return {\n ...common,\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n width: '40px',\n 'max-width': '60%',\n height: `${size}px`\n }\n case 'bottom':\n return {\n ...common,\n bottom: '50%',\n left: '50%',\n transform: 'translate(-50%, 50%)',\n width: '40px',\n 'max-width': '60%',\n height: `${size}px`\n }\n default:\n return common\n }\n}\n\n/**\n * ResizeHandle Component\n */\nexport const ResizeHandle: Component<ResizeHandleProps> = (props) => {\n const merged = mergeProps(\n {\n disabled: false,\n isActive: false,\n size: 4,\n hitAreaSize: 12\n },\n props\n )\n\n const handlePointerDown = (e: PointerEvent) => {\n if (merged.disabled) return\n\n e.preventDefault()\n e.stopPropagation()\n\n props.onResizeStart?.(props.edge, e)\n }\n\n // Container styles\n const containerStyle = createMemo((): JSX.CSSProperties => ({\n position: 'absolute',\n 'z-index': '10',\n cursor: merged.disabled ? 'default' : getCursor(props.edge),\n 'user-select': 'none',\n 'touch-action': 'none',\n ...getPositionStyle(props.edge, merged.hitAreaSize)\n }))\n\n // Indicator styles\n const indicatorStyle = createMemo(() =>\n getIndicatorStyle(props.edge, merged.size, merged.isActive)\n )\n\n // Class names\n const classNames = createMemo(() => {\n const classes = [\n 'mcp-resize-handle',\n `mcp-resize-handle-${props.edge}`\n ]\n\n if (merged.disabled) classes.push('mcp-resize-handle-disabled')\n if (merged.isActive) classes.push('mcp-resize-handle-active')\n if (props.class) classes.push(props.class)\n\n return classes.join(' ')\n })\n\n return (\n <div\n class={classNames()}\n style={containerStyle()}\n onPointerDown={handlePointerDown}\n data-resize-edge={props.edge}\n role=\"separator\"\n aria-orientation={\n props.edge === 'left' || props.edge === 'right'\n ? 'vertical'\n : 'horizontal'\n }\n aria-valuenow={undefined}\n tabIndex={merged.disabled ? -1 : 0}\n onKeyDown={(e) => {\n // Allow keyboard resizing\n if (merged.disabled) return\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n // Create synthetic pointer event for keyboard activation\n const syntheticEvent = new PointerEvent('pointerdown', {\n clientX: window.innerWidth / 2,\n clientY: window.innerHeight / 2\n })\n props.onResizeStart?.(props.edge, syntheticEvent)\n }\n }}\n >\n {/* Visual indicator */}\n <div\n class=\"mcp-resize-indicator\"\n style={indicatorStyle()}\n />\n </div>\n )\n}\n\nexport default ResizeHandle\n"],"names":["getCursor","edge","getPositionStyle","hitAreaSize","halfSize","left","top","width","height","right","bottom","getIndicatorStyle","size","isActive","baseColor","common","position","transition","opacity","transform","ResizeHandle","props","merged","mergeProps","disabled","handlePointerDown","e","preventDefault","stopPropagation","onResizeStart","containerStyle","createMemo","cursor","indicatorStyle","classNames","classes","push","class","join","_el$","_$getNextElement","_tmpl$","_el$2","firstChild","$$keydown","key","syntheticEvent","PointerEvent","clientX","window","innerWidth","clientY","innerHeight","$$pointerdown","_$setAttribute","undefined","_$effect","_p$","_v$","_v$2","_v$3","_v$4","_v$5","_v$6","_$className","t","_$style","a","o","i","n","_$runHydrationEvents","_$delegateEvents"],"mappings":"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"}
@@ -40,6 +40,7 @@ function useAutocomplete(options) {
40
40
  const [error, setError] = solidJs.createSignal(null);
41
41
  const [isOpen, setIsOpen] = solidJs.createSignal(false);
42
42
  const [resultType, setResultType] = solidJs.createSignal(null);
43
+ let currentRequestId = 0;
43
44
  const config = solidJs.createMemo(() => ({
44
45
  minChars: minCharsOption ?? (fieldConfig == null ? void 0 : fieldConfig.minChars) ?? (autocompleteCtx == null ? void 0 : autocompleteCtx.config.minChars) ?? 1,
45
46
  debounceMs: debounceOption ?? (fieldConfig == null ? void 0 : fieldConfig.debounceMs) ?? (autocompleteCtx == null ? void 0 : autocompleteCtx.config.debounceMs) ?? 150
@@ -66,6 +67,7 @@ function useAutocomplete(options) {
66
67
  });
67
68
  return;
68
69
  }
70
+ const requestId = ++currentRequestId;
69
71
  setIsLoading(true);
70
72
  setError(null);
71
73
  try {
@@ -76,6 +78,9 @@ function useAutocomplete(options) {
76
78
  targetPluginId,
77
79
  contextData
78
80
  );
81
+ if (requestId !== currentRequestId) {
82
+ return;
83
+ }
79
84
  solidJs.batch(() => {
80
85
  var _a;
81
86
  setResultType(result.type);
@@ -92,6 +97,9 @@ function useAutocomplete(options) {
92
97
  setIsLoading(false);
93
98
  });
94
99
  } catch (e) {
100
+ if (requestId !== currentRequestId) {
101
+ return;
102
+ }
95
103
  solidJs.batch(() => {
96
104
  setError(e instanceof Error ? e.message : "Unknown error");
97
105
  setIsLoading(false);