@hypen-space/web 0.4.3 → 0.4.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,6 +4,10 @@
4
4
  * Handle text input using DOM overlay elements
5
5
  */
6
6
  import type { VirtualNode } from "./types.js";
7
+ /** Minimal engine interface for dispatching bind actions */
8
+ interface BindEngine {
9
+ dispatchAction(name: string, payload?: unknown): void;
10
+ }
7
11
  /**
8
12
  * Input Overlay Manager
9
13
  */
@@ -12,11 +16,13 @@ export declare class InputOverlay {
12
16
  private overlay;
13
17
  private focusedNode;
14
18
  private onChangeCallback;
19
+ private bindPath;
20
+ private engine;
15
21
  constructor(container: HTMLElement | null);
16
22
  /**
17
23
  * Show input overlay for a node
18
24
  */
19
- showInput(node: VirtualNode, canvasBounds: DOMRect, onChange: (value: string) => void): void;
25
+ showInput(node: VirtualNode, canvasBounds: DOMRect, onChange: (value: string) => void, engine?: BindEngine | null): void;
20
26
  /**
21
27
  * Hide input overlay
22
28
  */
@@ -54,3 +60,4 @@ export declare class InputOverlay {
54
60
  */
55
61
  getFocusedNode(): VirtualNode | null;
56
62
  }
63
+ export {};
@@ -156,13 +156,17 @@ class InputOverlay {
156
156
  overlay = null;
157
157
  focusedNode = null;
158
158
  onChangeCallback = null;
159
+ bindPath = null;
160
+ engine = null;
159
161
  constructor(container) {
160
162
  this.container = container || {};
161
163
  }
162
- showInput(node, canvasBounds, onChange) {
164
+ showInput(node, canvasBounds, onChange, engine) {
163
165
  if (typeof document === "undefined")
164
166
  return;
165
167
  this.hideInput();
168
+ this.bindPath = node.props.bind || null;
169
+ this.engine = engine || null;
166
170
  const bounds = getAbsoluteBounds(node);
167
171
  if (!bounds)
168
172
  return;
@@ -186,6 +190,8 @@ class InputOverlay {
186
190
  }
187
191
  this.focusedNode = null;
188
192
  this.onChangeCallback = null;
193
+ this.bindPath = null;
194
+ this.engine = null;
189
195
  }
190
196
  updatePosition(node, canvasBounds) {
191
197
  if (!this.overlay || node !== this.focusedNode)
@@ -247,6 +253,12 @@ class InputOverlay {
247
253
  return;
248
254
  const value = this.overlay.value;
249
255
  this.onChangeCallback(value);
256
+ if (this.bindPath && this.engine) {
257
+ this.engine.dispatchAction("__hypen_bind", {
258
+ path: this.bindPath,
259
+ value
260
+ });
261
+ }
250
262
  }
251
263
  onBlur() {
252
264
  this.hideInput();
@@ -274,4 +286,4 @@ export {
274
286
  InputOverlay
275
287
  };
276
288
 
277
- //# debugId=D10A1E6BEB4037D364756E2164756E21
289
+ //# debugId=E146AC92E5A01CFA64756E2164756E21
@@ -3,9 +3,9 @@
3
3
  "sources": ["../src/canvas/utils.ts", "../src/canvas/input.ts"],
4
4
  "sourcesContent": [
5
5
  "/**\n * Canvas Renderer Utilities\n *\n * Common utility functions\n */\n\nimport type { BoxSpacing, Rectangle, Point, VirtualNode } from \"./types.js\";\n\n/**\n * Parse spacing value (margin, padding)\n * Supports: number, \"10\", \"10 20\", \"10 20 30 40\"\n */\nexport function parseSpacing(value: any): BoxSpacing {\n if (typeof value === \"number\") {\n return { top: value, right: value, bottom: value, left: value };\n }\n\n if (typeof value === \"string\") {\n const parts = value.split(/\\s+/).map((v) => parseFloat(v) || 0);\n if (parts.length === 1) {\n return { top: parts[0], right: parts[0], bottom: parts[0], left: parts[0] };\n }\n if (parts.length === 2) {\n return { top: parts[0], right: parts[1], bottom: parts[0], left: parts[1] };\n }\n if (parts.length === 4) {\n return { top: parts[0], right: parts[1], bottom: parts[2], left: parts[3] };\n }\n }\n\n if (typeof value === \"object\" && value !== null) {\n return {\n top: parseFloat(value.top) || 0,\n right: parseFloat(value.right) || 0,\n bottom: parseFloat(value.bottom) || 0,\n left: parseFloat(value.left) || 0,\n };\n }\n\n return { top: 0, right: 0, bottom: 0, left: 0 };\n}\n\n/**\n * Parse size value (width, height)\n * Returns pixel value or null for \"auto\"\n */\nexport function parseSize(value: any): number | null {\n if (typeof value === \"number\") return value;\n if (typeof value === \"string\") {\n if (value === \"auto\") return null;\n const num = parseFloat(value);\n return isNaN(num) ? null : num;\n }\n return null;\n}\n\n/**\n * Check if point is inside rectangle\n */\nexport function isPointInRect(point: Point, rect: Rectangle): boolean {\n return (\n point.x >= rect.x &&\n point.x <= rect.x + rect.width &&\n point.y >= rect.y &&\n point.y <= rect.y + rect.height\n );\n}\n\n/**\n * Check if point is inside rounded rectangle\n */\nexport function isPointInRoundedRect(\n point: Point,\n rect: Rectangle,\n radius: number\n): boolean {\n const { x, y, width, height } = rect;\n\n // Quick reject if outside bounding box\n if (!isPointInRect(point, rect)) return false;\n\n // No radius means simple rectangle\n if (radius <= 0) return true;\n\n const px = point.x;\n const py = point.y;\n\n // Check corners\n // Top-left\n if (px < x + radius && py < y + radius) {\n return Math.pow(px - (x + radius), 2) + Math.pow(py - (y + radius), 2) <= Math.pow(radius, 2);\n }\n\n // Top-right\n if (px > x + width - radius && py < y + radius) {\n return (\n Math.pow(px - (x + width - radius), 2) + Math.pow(py - (y + radius), 2) <=\n Math.pow(radius, 2)\n );\n }\n\n // Bottom-left\n if (px < x + radius && py > y + height - radius) {\n return (\n Math.pow(px - (x + radius), 2) + Math.pow(py - (y + height - radius), 2) <=\n Math.pow(radius, 2)\n );\n }\n\n // Bottom-right\n if (px > x + width - radius && py > y + height - radius) {\n return (\n Math.pow(px - (x + width - radius), 2) + Math.pow(py - (y + height - radius), 2) <=\n Math.pow(radius, 2)\n );\n }\n\n // Inside rectangle\n return true;\n}\n\n/**\n * Merge rectangles into bounding box\n */\nexport function mergeRects(rects: Rectangle[]): Rectangle | null {\n if (rects.length === 0) return null;\n if (rects.length === 1) return rects[0];\n\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n for (const rect of rects) {\n minX = Math.min(minX, rect.x);\n minY = Math.min(minY, rect.y);\n maxX = Math.max(maxX, rect.x + rect.width);\n maxY = Math.max(maxY, rect.y + rect.height);\n }\n\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY,\n };\n}\n\n/**\n * Create a canvas font string from font style\n */\nexport function createFontString(\n fontSize: number,\n fontWeight: string | number,\n fontFamily: string\n): string {\n return `${fontWeight} ${fontSize}px ${fontFamily}`;\n}\n\n/**\n * Walk tree depth-first\n */\nexport function walkTree(node: VirtualNode, callback: (node: VirtualNode) => void): void {\n callback(node);\n for (const child of node.children) {\n walkTree(child, callback);\n }\n}\n\n/**\n * Find node by ID in tree\n */\nexport function findNodeById(root: VirtualNode, id: string): VirtualNode | null {\n if (root.id === id) return root;\n\n for (const child of root.children) {\n const found = findNodeById(child, id);\n if (found) return found;\n }\n\n return null;\n}\n\n/**\n * Get absolute bounds of node (including transformations)\n */\nexport function getAbsoluteBounds(node: VirtualNode): Rectangle | null {\n if (!node.layout) return null;\n\n let x = node.layout.x;\n let y = node.layout.y;\n\n // Walk up tree to accumulate offsets\n let current = node.parent;\n while (current && current.layout) {\n x += current.layout.contentX;\n y += current.layout.contentY;\n current = current.parent;\n }\n\n return {\n x,\n y,\n width: node.layout.width,\n height: node.layout.height,\n };\n}\n\n\n\n\n\n\n\n\n\n\n\n",
6
- "/**\n * Input Overlay System\n *\n * Handle text input using DOM overlay elements\n */\n\nimport type { VirtualNode, Rectangle } from \"./types.js\";\nimport { getAbsoluteBounds } from \"./utils.js\";\n\n/**\n * Input Overlay Manager\n */\nexport class InputOverlay {\n private container: HTMLElement;\n private overlay: HTMLInputElement | HTMLTextAreaElement | null = null;\n private focusedNode: VirtualNode | null = null;\n private onChangeCallback: ((value: string) => void) | null = null;\n\n constructor(container: HTMLElement | null) {\n this.container = container || ({} as HTMLElement);\n }\n\n /**\n * Show input overlay for a node\n */\n showInput(\n node: VirtualNode,\n canvasBounds: DOMRect,\n onChange: (value: string) => void\n ): void {\n // Skip if document is not available (non-browser environment)\n if (typeof document === \"undefined\") return;\n\n this.hideInput();\n\n const bounds = getAbsoluteBounds(node);\n if (!bounds) return;\n\n const isMultiline = node.type === \"textarea\";\n this.overlay = isMultiline\n ? document.createElement(\"textarea\")\n : document.createElement(\"input\");\n\n // Style overlay\n this.styleOverlay(node, bounds, canvasBounds);\n\n // Set initial value\n const value = node.props.value || \"\";\n this.overlay.value = value;\n\n // Setup event handlers\n this.onChangeCallback = onChange;\n this.overlay.addEventListener(\"input\", this.onInput.bind(this));\n this.overlay.addEventListener(\"blur\", this.onBlur.bind(this));\n this.overlay.addEventListener(\"keydown\", this.onKeyDown.bind(this) as EventListener);\n\n // Add to DOM and focus\n this.container.appendChild(this.overlay);\n this.overlay.focus();\n\n this.focusedNode = node;\n }\n\n /**\n * Hide input overlay\n */\n hideInput(): void {\n if (this.overlay) {\n this.overlay.remove();\n this.overlay = null;\n }\n this.focusedNode = null;\n this.onChangeCallback = null;\n }\n\n /**\n * Update overlay position\n */\n updatePosition(node: VirtualNode, canvasBounds: DOMRect): void {\n if (!this.overlay || node !== this.focusedNode) return;\n\n const bounds = getAbsoluteBounds(node);\n if (!bounds) return;\n\n this.positionOverlay(bounds, canvasBounds);\n }\n\n /**\n * Style overlay to match canvas node\n */\n private styleOverlay(\n node: VirtualNode,\n bounds: Rectangle,\n canvasBounds: DOMRect\n ): void {\n if (!this.overlay) return;\n\n const props = node.props;\n\n // Position\n this.positionOverlay(bounds, canvasBounds);\n\n // Font and text styling\n const fontSize = parseFloat(props.fontSize) || 16;\n const fontWeight = props.fontWeight || \"normal\";\n const fontFamily = props.fontFamily || \"system-ui, sans-serif\";\n const color = props.color || \"#000000\";\n\n Object.assign(this.overlay.style, {\n fontSize: `${fontSize}px`,\n fontWeight: fontWeight,\n fontFamily: fontFamily,\n color: color,\n border: \"none\",\n outline: \"2px solid #007bff\",\n backgroundColor: props.backgroundColor || \"#ffffff\",\n padding: `${props.padding || 8}px`,\n borderRadius: `${props.borderRadius || 4}px`,\n boxSizing: \"border-box\",\n resize: \"none\",\n });\n\n // Placeholder\n if (props.placeholder) {\n this.overlay.placeholder = props.placeholder;\n }\n\n // Input type\n if (this.overlay instanceof HTMLInputElement && props.type) {\n this.overlay.type = props.type;\n }\n }\n\n /**\n * Position overlay over canvas node\n */\n private positionOverlay(bounds: Rectangle, canvasBounds: DOMRect): void {\n if (!this.overlay) return;\n\n // Calculate scale factor between canvas and display\n const canvas = this.container.querySelector(\"canvas\") as HTMLCanvasElement;\n const scaleX = canvasBounds.width / canvas.width;\n const scaleY = canvasBounds.height / canvas.height;\n\n const left = bounds.x * scaleX;\n const top = bounds.y * scaleY;\n const width = bounds.width * scaleX;\n const height = bounds.height * scaleY;\n\n Object.assign(this.overlay.style, {\n position: \"absolute\",\n left: `${left}px`,\n top: `${top}px`,\n width: `${width}px`,\n height: `${height}px`,\n });\n }\n\n /**\n * Handle input event\n */\n private onInput(e: Event): void {\n if (!this.overlay || !this.onChangeCallback) return;\n\n const value = this.overlay.value;\n this.onChangeCallback(value);\n }\n\n /**\n * Handle blur event\n */\n private onBlur(): void {\n // Hide overlay when focus is lost\n this.hideInput();\n }\n\n /**\n * Handle keyboard events\n */\n private onKeyDown(e: KeyboardEvent): void {\n if (!this.overlay) return;\n\n // Enter key submits (unless multiline)\n if (e.key === \"Enter\" && this.overlay instanceof HTMLInputElement) {\n e.preventDefault();\n this.overlay.blur();\n }\n\n // Escape cancels\n if (e.key === \"Escape\") {\n e.preventDefault();\n this.overlay.blur();\n }\n }\n\n /**\n * Check if input is currently shown\n */\n isShown(): boolean {\n return this.overlay !== null;\n }\n\n /**\n * Get current focused node\n */\n getFocusedNode(): VirtualNode | null {\n return this.focusedNode;\n }\n}\n\n"
6
+ "/**\n * Input Overlay System\n *\n * Handle text input using DOM overlay elements\n */\n\nimport type { VirtualNode, Rectangle } from \"./types.js\";\nimport { getAbsoluteBounds } from \"./utils.js\";\n\n/** Minimal engine interface for dispatching bind actions */\ninterface BindEngine {\n dispatchAction(name: string, payload?: unknown): void;\n}\n\n/**\n * Input Overlay Manager\n */\nexport class InputOverlay {\n private container: HTMLElement;\n private overlay: HTMLInputElement | HTMLTextAreaElement | null = null;\n private focusedNode: VirtualNode | null = null;\n private onChangeCallback: ((value: string) => void) | null = null;\n private bindPath: string | null = null;\n private engine: BindEngine | null = null;\n\n constructor(container: HTMLElement | null) {\n this.container = container || ({} as HTMLElement);\n }\n\n /**\n * Show input overlay for a node\n */\n showInput(\n node: VirtualNode,\n canvasBounds: DOMRect,\n onChange: (value: string) => void,\n engine?: BindEngine | null\n ): void {\n // Skip if document is not available (non-browser environment)\n if (typeof document === \"undefined\") return;\n\n this.hideInput();\n\n // Store bind path and engine for two-way binding\n this.bindPath = (node.props.bind as string) || null;\n this.engine = engine || null;\n\n const bounds = getAbsoluteBounds(node);\n if (!bounds) return;\n\n const isMultiline = node.type === \"textarea\";\n this.overlay = isMultiline\n ? document.createElement(\"textarea\")\n : document.createElement(\"input\");\n\n // Style overlay\n this.styleOverlay(node, bounds, canvasBounds);\n\n // Set initial value\n const value = node.props.value || \"\";\n this.overlay.value = value;\n\n // Setup event handlers\n this.onChangeCallback = onChange;\n this.overlay.addEventListener(\"input\", this.onInput.bind(this));\n this.overlay.addEventListener(\"blur\", this.onBlur.bind(this));\n this.overlay.addEventListener(\"keydown\", this.onKeyDown.bind(this) as EventListener);\n\n // Add to DOM and focus\n this.container.appendChild(this.overlay);\n this.overlay.focus();\n\n this.focusedNode = node;\n }\n\n /**\n * Hide input overlay\n */\n hideInput(): void {\n if (this.overlay) {\n this.overlay.remove();\n this.overlay = null;\n }\n this.focusedNode = null;\n this.onChangeCallback = null;\n this.bindPath = null;\n this.engine = null;\n }\n\n /**\n * Update overlay position\n */\n updatePosition(node: VirtualNode, canvasBounds: DOMRect): void {\n if (!this.overlay || node !== this.focusedNode) return;\n\n const bounds = getAbsoluteBounds(node);\n if (!bounds) return;\n\n this.positionOverlay(bounds, canvasBounds);\n }\n\n /**\n * Style overlay to match canvas node\n */\n private styleOverlay(\n node: VirtualNode,\n bounds: Rectangle,\n canvasBounds: DOMRect\n ): void {\n if (!this.overlay) return;\n\n const props = node.props;\n\n // Position\n this.positionOverlay(bounds, canvasBounds);\n\n // Font and text styling\n const fontSize = parseFloat(props.fontSize) || 16;\n const fontWeight = props.fontWeight || \"normal\";\n const fontFamily = props.fontFamily || \"system-ui, sans-serif\";\n const color = props.color || \"#000000\";\n\n Object.assign(this.overlay.style, {\n fontSize: `${fontSize}px`,\n fontWeight: fontWeight,\n fontFamily: fontFamily,\n color: color,\n border: \"none\",\n outline: \"2px solid #007bff\",\n backgroundColor: props.backgroundColor || \"#ffffff\",\n padding: `${props.padding || 8}px`,\n borderRadius: `${props.borderRadius || 4}px`,\n boxSizing: \"border-box\",\n resize: \"none\",\n });\n\n // Placeholder\n if (props.placeholder) {\n this.overlay.placeholder = props.placeholder;\n }\n\n // Input type\n if (this.overlay instanceof HTMLInputElement && props.type) {\n this.overlay.type = props.type;\n }\n }\n\n /**\n * Position overlay over canvas node\n */\n private positionOverlay(bounds: Rectangle, canvasBounds: DOMRect): void {\n if (!this.overlay) return;\n\n // Calculate scale factor between canvas and display\n const canvas = this.container.querySelector(\"canvas\") as HTMLCanvasElement;\n const scaleX = canvasBounds.width / canvas.width;\n const scaleY = canvasBounds.height / canvas.height;\n\n const left = bounds.x * scaleX;\n const top = bounds.y * scaleY;\n const width = bounds.width * scaleX;\n const height = bounds.height * scaleY;\n\n Object.assign(this.overlay.style, {\n position: \"absolute\",\n left: `${left}px`,\n top: `${top}px`,\n width: `${width}px`,\n height: `${height}px`,\n });\n }\n\n /**\n * Handle input event\n */\n private onInput(e: Event): void {\n if (!this.overlay || !this.onChangeCallback) return;\n\n const value = this.overlay.value;\n this.onChangeCallback(value);\n\n // Dispatch __hypen_bind for two-way binding\n if (this.bindPath && this.engine) {\n this.engine.dispatchAction(\"__hypen_bind\", {\n path: this.bindPath,\n value,\n });\n }\n }\n\n /**\n * Handle blur event\n */\n private onBlur(): void {\n // Hide overlay when focus is lost\n this.hideInput();\n }\n\n /**\n * Handle keyboard events\n */\n private onKeyDown(e: KeyboardEvent): void {\n if (!this.overlay) return;\n\n // Enter key submits (unless multiline)\n if (e.key === \"Enter\" && this.overlay instanceof HTMLInputElement) {\n e.preventDefault();\n this.overlay.blur();\n }\n\n // Escape cancels\n if (e.key === \"Escape\") {\n e.preventDefault();\n this.overlay.blur();\n }\n }\n\n /**\n * Check if input is currently shown\n */\n isShown(): boolean {\n return this.overlay !== null;\n }\n\n /**\n * Get current focused node\n */\n getFocusedNode(): VirtualNode | null {\n return this.focusedNode;\n }\n}\n\n"
7
7
  ],
8
- "mappings": "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",
9
- "debugId": "D10A1E6BEB4037D364756E2164756E21",
8
+ "mappings": "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",
9
+ "debugId": "E146AC92E5A01CFA64756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -47,6 +47,10 @@ export declare class CanvasRenderer implements Renderer {
47
47
  * Set property on node
48
48
  */
49
49
  private onSetProp;
50
+ /**
51
+ * Remove a property from a node
52
+ */
53
+ private onRemoveProp;
50
54
  /**
51
55
  * Set text on node
52
56
  */
@@ -1613,13 +1613,17 @@ class InputOverlay {
1613
1613
  overlay = null;
1614
1614
  focusedNode = null;
1615
1615
  onChangeCallback = null;
1616
+ bindPath = null;
1617
+ engine = null;
1616
1618
  constructor(container) {
1617
1619
  this.container = container || {};
1618
1620
  }
1619
- showInput(node, canvasBounds, onChange) {
1621
+ showInput(node, canvasBounds, onChange, engine) {
1620
1622
  if (typeof document === "undefined")
1621
1623
  return;
1622
1624
  this.hideInput();
1625
+ this.bindPath = node.props.bind || null;
1626
+ this.engine = engine || null;
1623
1627
  const bounds = getAbsoluteBounds(node);
1624
1628
  if (!bounds)
1625
1629
  return;
@@ -1643,6 +1647,8 @@ class InputOverlay {
1643
1647
  }
1644
1648
  this.focusedNode = null;
1645
1649
  this.onChangeCallback = null;
1650
+ this.bindPath = null;
1651
+ this.engine = null;
1646
1652
  }
1647
1653
  updatePosition(node, canvasBounds) {
1648
1654
  if (!this.overlay || node !== this.focusedNode)
@@ -1704,6 +1710,12 @@ class InputOverlay {
1704
1710
  return;
1705
1711
  const value = this.overlay.value;
1706
1712
  this.onChangeCallback(value);
1713
+ if (this.bindPath && this.engine) {
1714
+ this.engine.dispatchAction("__hypen_bind", {
1715
+ path: this.bindPath,
1716
+ value
1717
+ });
1718
+ }
1707
1719
  }
1708
1720
  onBlur() {
1709
1721
  this.hideInput();
@@ -1944,6 +1956,9 @@ class CanvasRenderer {
1944
1956
  case "setProp":
1945
1957
  this.onSetProp(patch.id, patch.name, patch.value);
1946
1958
  break;
1959
+ case "removeProp":
1960
+ this.onRemoveProp(patch.id, patch.name);
1961
+ break;
1947
1962
  case "setText":
1948
1963
  this.onSetText(patch.id, patch.text);
1949
1964
  break;
@@ -1988,6 +2003,19 @@ class CanvasRenderer {
1988
2003
  }
1989
2004
  this.accessibilityLayer.updateNode(node);
1990
2005
  }
2006
+ onRemoveProp(id, name) {
2007
+ const node = this.nodes.get(id);
2008
+ if (!node)
2009
+ return;
2010
+ delete node.props[name];
2011
+ if (name === "visible") {
2012
+ node.visible = true;
2013
+ }
2014
+ if (name === "opacity") {
2015
+ node.opacity = 1;
2016
+ }
2017
+ this.accessibilityLayer.updateNode(node);
2018
+ }
1991
2019
  onSetText(id, text) {
1992
2020
  const node = this.nodes.get(id);
1993
2021
  if (!node)
@@ -2127,4 +2155,4 @@ export {
2127
2155
  CanvasRenderer
2128
2156
  };
2129
2157
 
2130
- //# debugId=3901CBDDA84A235F64756E2164756E21
2158
+ //# debugId=64A1C0C9DB735D3764756E2164756E21