@hypen-space/web 0.4.31 → 0.4.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/canvas/accessibility.js +19 -9
- package/dist/canvas/accessibility.js.map +2 -2
- package/dist/canvas/events.d.ts +7 -0
- package/dist/canvas/events.js +53 -17
- package/dist/canvas/events.js.map +3 -3
- package/dist/canvas/index.js +19 -2134
- package/dist/canvas/index.js.map +3 -11
- package/dist/canvas/input.js +19 -9
- package/dist/canvas/input.js.map +2 -2
- package/dist/canvas/layout.js +19 -9
- package/dist/canvas/layout.js.map +2 -2
- package/dist/canvas/paint.d.ts +4 -0
- package/dist/canvas/paint.js +100 -11
- package/dist/canvas/paint.js.map +3 -3
- package/dist/canvas/renderer.js +821 -707
- package/dist/canvas/renderer.js.map +7 -7
- package/dist/canvas/text.js +19 -9
- package/dist/canvas/text.js.map +2 -2
- package/dist/canvas/utils.js +19 -9
- package/dist/canvas/utils.js.map +2 -2
- package/dist/client.js +19 -3863
- package/dist/client.js.map +3 -57
- package/dist/dom/applicators/advanced-layout.js +19 -9
- package/dist/dom/applicators/advanced-layout.js.map +2 -2
- package/dist/dom/applicators/background.js +19 -9
- package/dist/dom/applicators/background.js.map +2 -2
- package/dist/dom/applicators/border.js +19 -9
- package/dist/dom/applicators/border.js.map +2 -2
- package/dist/dom/applicators/color.js +19 -9
- package/dist/dom/applicators/color.js.map +2 -2
- package/dist/dom/applicators/display.js +19 -9
- package/dist/dom/applicators/display.js.map +2 -2
- package/dist/dom/applicators/effects.js +19 -9
- package/dist/dom/applicators/effects.js.map +2 -2
- package/dist/dom/applicators/events.js +26 -10
- package/dist/dom/applicators/events.js.map +3 -3
- package/dist/dom/applicators/font.js +19 -9
- package/dist/dom/applicators/font.js.map +2 -2
- package/dist/dom/applicators/index.js +26 -10
- package/dist/dom/applicators/index.js.map +3 -3
- package/dist/dom/applicators/layout.js +19 -9
- package/dist/dom/applicators/layout.js.map +2 -2
- package/dist/dom/applicators/margin.js +19 -9
- package/dist/dom/applicators/margin.js.map +2 -2
- package/dist/dom/applicators/padding.js +19 -9
- package/dist/dom/applicators/padding.js.map +2 -2
- package/dist/dom/applicators/size.js +19 -9
- package/dist/dom/applicators/size.js.map +2 -2
- package/dist/dom/applicators/transform.js +19 -9
- package/dist/dom/applicators/transform.js.map +2 -2
- package/dist/dom/applicators/transition.js +19 -9
- package/dist/dom/applicators/transition.js.map +2 -2
- package/dist/dom/applicators/typography.js +19 -9
- package/dist/dom/applicators/typography.js.map +2 -2
- package/dist/dom/canvas/index.js +19 -9
- package/dist/dom/canvas/index.js.map +2 -2
- package/dist/dom/components/app.js +19 -9
- package/dist/dom/components/app.js.map +2 -2
- package/dist/dom/components/audio.js +19 -9
- package/dist/dom/components/audio.js.map +2 -2
- package/dist/dom/components/avatar.js +19 -9
- package/dist/dom/components/avatar.js.map +2 -2
- package/dist/dom/components/badge.js +19 -9
- package/dist/dom/components/badge.js.map +2 -2
- package/dist/dom/components/button.js +19 -9
- package/dist/dom/components/button.js.map +2 -2
- package/dist/dom/components/card.js +19 -9
- package/dist/dom/components/card.js.map +2 -2
- package/dist/dom/components/center.js +19 -9
- package/dist/dom/components/center.js.map +2 -2
- package/dist/dom/components/checkbox.js +19 -9
- package/dist/dom/components/checkbox.js.map +2 -2
- package/dist/dom/components/column.js +19 -9
- package/dist/dom/components/column.js.map +2 -2
- package/dist/dom/components/container.js +19 -9
- package/dist/dom/components/container.js.map +2 -2
- package/dist/dom/components/divider.js +19 -9
- package/dist/dom/components/divider.js.map +2 -2
- package/dist/dom/components/grid.js +19 -9
- package/dist/dom/components/grid.js.map +2 -2
- package/dist/dom/components/heading.js +19 -9
- package/dist/dom/components/heading.js.map +2 -2
- package/dist/dom/components/hypenapp.js +19 -9
- package/dist/dom/components/hypenapp.js.map +2 -2
- package/dist/dom/components/image.js +19 -9
- package/dist/dom/components/image.js.map +2 -2
- package/dist/dom/components/index.js +20 -10
- package/dist/dom/components/index.js.map +3 -3
- package/dist/dom/components/input.js +19 -9
- package/dist/dom/components/input.js.map +2 -2
- package/dist/dom/components/link.js +19 -9
- package/dist/dom/components/link.js.map +2 -2
- package/dist/dom/components/list.js +19 -9
- package/dist/dom/components/list.js.map +2 -2
- package/dist/dom/components/paragraph.js +19 -9
- package/dist/dom/components/paragraph.js.map +2 -2
- package/dist/dom/components/progressbar.js +19 -9
- package/dist/dom/components/progressbar.js.map +2 -2
- package/dist/dom/components/route.js +19 -9
- package/dist/dom/components/route.js.map +2 -2
- package/dist/dom/components/router.js +19 -9
- package/dist/dom/components/router.js.map +2 -2
- package/dist/dom/components/row.js +19 -9
- package/dist/dom/components/row.js.map +2 -2
- package/dist/dom/components/select.js +19 -9
- package/dist/dom/components/select.js.map +2 -2
- package/dist/dom/components/slider.js +19 -9
- package/dist/dom/components/slider.js.map +2 -2
- package/dist/dom/components/spacer.js +19 -9
- package/dist/dom/components/spacer.js.map +2 -2
- package/dist/dom/components/spinner.js +19 -9
- package/dist/dom/components/spinner.js.map +2 -2
- package/dist/dom/components/stack.js +19 -9
- package/dist/dom/components/stack.js.map +2 -2
- package/dist/dom/components/switch.js +19 -9
- package/dist/dom/components/switch.js.map +2 -2
- package/dist/dom/components/text.js +19 -9
- package/dist/dom/components/text.js.map +2 -2
- package/dist/dom/components/textarea.js +20 -10
- package/dist/dom/components/textarea.js.map +3 -3
- package/dist/dom/components/video.js +19 -9
- package/dist/dom/components/video.js.map +2 -2
- package/dist/dom/debug.js +19 -9
- package/dist/dom/debug.js.map +2 -2
- package/dist/dom/element-data.js +19 -9
- package/dist/dom/element-data.js.map +2 -2
- package/dist/dom/events.js +28 -18
- package/dist/dom/events.js.map +3 -3
- package/dist/dom/index.js +19 -3682
- package/dist/dom/index.js.map +3 -57
- package/dist/dom/renderer.js +31 -11
- package/dist/dom/renderer.js.map +5 -5
- package/dist/hypen.js +31 -11
- package/dist/hypen.js.map +5 -5
- package/dist/index.js +19 -5810
- package/dist/index.js.map +3 -66
- package/package.json +2 -2
- package/src/canvas/events.ts +35 -8
- package/src/canvas/paint.ts +104 -4
- package/src/dom/applicators/events.ts +11 -2
- package/src/dom/components/textarea.ts +3 -3
- package/src/dom/events.ts +14 -12
- package/src/dom/renderer.ts +8 -1
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"/**\n * Text Rendering System\n *\n * Text measurement, wrapping, and rendering\n */\n\nimport type { FontStyle, TextMetrics, TextStyle } from \"./types.js\";\nimport { createFontString } from \"./utils.js\";\nimport { frameworkLoggers } from \"@hypen-space/core/logger\";\n\nconst log = frameworkLoggers.canvas;\n\n/**\n * Text metrics cache\n */\nconst textMetricsCache = new Map<string, TextMetrics>();\n\n/**\n * Get cache key for text metrics\n */\nfunction getCacheKey(text: string, fontStyle: FontStyle, maxWidth?: number): string {\n return `${text}|${fontStyle.fontSize}|${fontStyle.fontWeight}|${fontStyle.fontFamily}|${maxWidth || \"auto\"}`;\n}\n\n/**\n * Measure text dimensions\n */\nexport function measureText(\n ctx: CanvasRenderingContext2D,\n text: string,\n fontStyle: FontStyle,\n maxWidth?: number\n): TextMetrics {\n const cacheKey = getCacheKey(text, fontStyle, maxWidth);\n const cached = textMetricsCache.get(cacheKey);\n if (cached) return cached;\n\n const font = createFontString(fontStyle.fontSize, fontStyle.fontWeight, fontStyle.fontFamily);\n ctx.save();\n ctx.font = font;\n\n const lineHeight = fontStyle.lineHeight || fontStyle.fontSize * 1.2;\n\n // No wrapping needed\n if (!maxWidth) {\n const metrics = ctx.measureText(text);\n const result: TextMetrics = {\n width: metrics.width,\n height: lineHeight,\n lines: [text],\n lineHeight,\n };\n ctx.restore();\n textMetricsCache.set(cacheKey, result);\n return result;\n }\n\n // Wrap text\n const lines = wrapText(ctx, text, maxWidth);\n const width = Math.max(...lines.map((line) => ctx.measureText(line).width));\n const height = lines.length * lineHeight;\n\n const result: TextMetrics = {\n width,\n height,\n lines,\n lineHeight,\n };\n\n ctx.restore();\n textMetricsCache.set(cacheKey, result);\n return result;\n}\n\n/**\n * Wrap text to fit within maxWidth\n */\nfunction wrapText(ctx: CanvasRenderingContext2D, text: string, maxWidth: number): string[] {\n const lines: string[] = [];\n const paragraphs = text.split(\"\\n\");\n\n for (const paragraph of paragraphs) {\n const words = paragraph.split(\" \");\n let currentLine = \"\";\n\n for (const word of words) {\n const testLine = currentLine ? `${currentLine} ${word}` : word;\n const metrics = ctx.measureText(testLine);\n\n if (metrics.width > maxWidth && currentLine) {\n lines.push(currentLine);\n currentLine = word;\n } else {\n currentLine = testLine;\n }\n }\n\n if (currentLine) {\n lines.push(currentLine);\n }\n }\n\n return lines.length > 0 ? lines : [\"\"];\n}\n\n/**\n * Render text with style\n */\nexport function renderText(\n ctx: CanvasRenderingContext2D,\n text: string,\n x: number,\n y: number,\n width: number,\n height: number,\n style: TextStyle\n): void {\n const font = createFontString(style.fontSize, style.fontWeight, style.fontFamily);\n ctx.save();\n ctx.font = font;\n ctx.fillStyle = style.color;\n ctx.textBaseline = \"top\";\n\n const metrics = measureText(ctx, text, style, width);\n\n // Calculate starting Y based on vertical alignment\n let startY = y;\n if (style.verticalAlign === \"middle\") {\n startY = y + (height - metrics.height) / 2;\n } else if (style.verticalAlign === \"bottom\") {\n startY = y + height - metrics.height;\n }\n\n // Render each line\n for (let i = 0; i < metrics.lines.length; i++) {\n const line = metrics.lines[i];\n const lineY = startY + i * metrics.lineHeight;\n\n // Calculate X based on text alignment\n let lineX = x;\n if (style.textAlign === \"center\") {\n const lineWidth = ctx.measureText(line).width;\n lineX = x + (width - lineWidth) / 2;\n } else if (style.textAlign === \"right\") {\n const lineWidth = ctx.measureText(line).width;\n lineX = x + width - lineWidth;\n }\n\n ctx.fillText(line, lineX, lineY);\n }\n\n ctx.restore();\n}\n\n/**\n * Clear text metrics cache\n */\nexport function clearTextCache(): void {\n textMetricsCache.clear();\n}\n\n/**\n * Preload font to ensure it's available\n */\nexport async function loadFont(fontFamily: string, fontWeight: string | number = \"normal\"): Promise<void> {\n if (!(\"fonts\" in document)) return;\n\n const font = `${fontWeight} 16px ${fontFamily}`;\n try {\n await document.fonts.load(font);\n } catch (error) {\n log.warn(`Failed to load font: ${font}`, error);\n }\n}\n\n\n\n\n\n\n\n\n\n\n\n",
|
|
7
7
|
"/**\n * Layout Engine\n *\n * Flexbox-like layout system for positioning virtual nodes\n */\n\nimport type { VirtualNode, Layout, BoxSpacing } from \"./types.js\";\nimport { parseSpacing, parseSize } from \"./utils.js\";\nimport { measureText } from \"./text.js\";\n\n/**\n * Compute layout for a virtual node tree\n */\nexport function computeLayout(\n ctx: CanvasRenderingContext2D,\n node: VirtualNode,\n availableWidth: number,\n availableHeight: number,\n x: number = 0,\n y: number = 0\n): void {\n // Parse props\n const props = node.props;\n\n // Support individual margins (marginTop, marginRight, etc.)\n let margin = parseSpacing(props.margin || 0);\n if (props.marginTop !== undefined) margin.top = parseFloat(props.marginTop) || 0;\n if (props.marginRight !== undefined) margin.right = parseFloat(props.marginRight) || 0;\n if (props.marginBottom !== undefined) margin.bottom = parseFloat(props.marginBottom) || 0;\n if (props.marginLeft !== undefined) margin.left = parseFloat(props.marginLeft) || 0;\n\n // Support individual padding (paddingTop, paddingRight, etc.)\n let padding = parseSpacing(props.padding || 0);\n if (props.paddingTop !== undefined) padding.top = parseFloat(props.paddingTop) || 0;\n if (props.paddingRight !== undefined) padding.right = parseFloat(props.paddingRight) || 0;\n if (props.paddingBottom !== undefined) padding.bottom = parseFloat(props.paddingBottom) || 0;\n if (props.paddingLeft !== undefined) padding.left = parseFloat(props.paddingLeft) || 0;\n\n const borderWidth = parseFloat(props.borderWidth) || 0;\n const borderColor = props.borderColor || \"transparent\";\n const borderRadius = parseFloat(props.borderRadius) || 0;\n\n // Calculate available space after margin\n const availableAfterMargin = {\n width: availableWidth - margin.left - margin.right,\n height: availableHeight - margin.top - margin.bottom,\n };\n\n // Determine size\n let width = parseSize(props.width);\n let height = parseSize(props.height);\n\n // Default sizing for specific component types\n const type = node.type.toLowerCase();\n\n if (type === \"app\") {\n // App fills the full available space by default\n if (width === null) width = availableAfterMargin.width;\n if (height === null) height = availableAfterMargin.height;\n } else if (type === \"spacer\") {\n // Spacer fills available space by default\n if (width === null) width = availableAfterMargin.width;\n if (height === null) height = availableAfterMargin.height;\n } else if (type === \"divider\" || type === \"separator\") {\n const orientation = props.orientation || \"horizontal\";\n const thickness = parseFloat(props.thickness) || 1;\n\n if (orientation === \"vertical\") {\n if (width === null) width = thickness;\n if (height === null) height = availableAfterMargin.height;\n } else {\n if (width === null) width = availableAfterMargin.width;\n if (height === null) height = thickness;\n }\n } else if (type === \"checkbox\" || type === \"radio\") {\n const size = parseFloat(props.size) || 20;\n if (width === null) width = size;\n if (height === null) height = size;\n } else if (type === \"switch\" || type === \"toggle\") {\n if (width === null) width = 44;\n if (height === null) height = 24;\n } else if (type === \"slider\") {\n if (width === null) width = 200;\n if (height === null) height = 20;\n } else if (type === \"progress\" || type === \"progressbar\") {\n if (width === null) width = 200;\n if (height === null) height = 8;\n } else if (type === \"spinner\" || type === \"loading\") {\n const size = parseFloat(props.size) || 24;\n if (width === null) width = size;\n if (height === null) height = size;\n } else if (type === \"badge\") {\n if (width === null) width = 20;\n if (height === null) height = 20;\n } else if (type === \"avatar\") {\n const size = parseFloat(props.size) || 40;\n if (width === null) width = size;\n if (height === null) height = size;\n } else if (type === \"icon\") {\n const size = parseFloat(props.size) || 24;\n if (width === null) width = size;\n if (height === null) height = size;\n }\n\n // Intrinsic sizing for text nodes\n if (node.type === \"text\" && node.props[0]) {\n const text = String(node.props[0] || \"\");\n const fontSize = parseFloat(props.fontSize) || 16;\n const fontWeight = props.fontWeight || \"normal\";\n const fontFamily = props.fontFamily || \"system-ui, sans-serif\";\n const lineHeight = parseFloat(props.lineHeight) || fontSize * 1.2;\n\n const maxWidth = width || availableAfterMargin.width - padding.left - padding.right;\n const metrics = measureText(ctx, text, { fontSize, fontWeight, fontFamily, lineHeight }, maxWidth);\n\n if (!width) width = metrics.width + padding.left + padding.right;\n if (!height) height = metrics.height + padding.top + padding.bottom;\n }\n\n // Default to available size if not specified\n if (width === null) width = availableAfterMargin.width;\n if (height === null) height = availableAfterMargin.height;\n\n // Apply constraints\n const minWidth = parseSize(props.minWidth);\n const maxWidth = parseSize(props.maxWidth);\n const minHeight = parseSize(props.minHeight);\n const maxHeight = parseSize(props.maxHeight);\n\n if (minWidth !== null) width = Math.max(width, minWidth);\n if (maxWidth !== null) width = Math.min(width, maxWidth);\n if (minHeight !== null) height = Math.max(height, minHeight);\n if (maxHeight !== null) height = Math.min(height, maxHeight);\n\n // Create layout object\n const layout: Layout = {\n x: x + margin.left,\n y: y + margin.top,\n width,\n height,\n margin,\n padding,\n border: {\n width: borderWidth,\n color: borderColor,\n radius: borderRadius,\n },\n contentX: padding.left + borderWidth,\n contentY: padding.top + borderWidth,\n contentWidth: width - padding.left - padding.right - borderWidth * 2,\n contentHeight: height - padding.top - padding.bottom - borderWidth * 2,\n };\n\n node.layout = layout;\n\n // Layout children if container\n if (node.children.length > 0) {\n layoutChildren(ctx, node);\n }\n}\n\n/**\n * Layout children using flexbox-like rules\n */\nfunction layoutChildren(ctx: CanvasRenderingContext2D, parent: VirtualNode): void {\n const layout = parent.layout!;\n const props = parent.props;\n\n // Stack components overlay children on top of each other\n if (parent.type.toLowerCase() === \"stack\") {\n layoutStackChildren(ctx, parent);\n return;\n }\n\n const flexDirection = props.flexDirection || (parent.type === \"column\" ? \"column\" : \"row\");\n const isColumn = flexDirection === \"column\";\n\n // Resolve verticalAlignment/horizontalAlignment to main/cross axis based on direction\n const justifyContent = isColumn\n ? (props.verticalAlignment || \"flex-start\")\n : (props.horizontalAlignment || \"flex-start\");\n const alignItems = isColumn\n ? (props.horizontalAlignment || \"flex-start\")\n : (props.verticalAlignment || \"flex-start\");\n const gap = parseFloat(props.gap) || 0;\n\n const availableWidth = layout.contentWidth;\n const availableHeight = layout.contentHeight;\n\n // First pass: compute intrinsic sizes and collect flex info\n const childInfo: Array<{\n width: number;\n height: number;\n flexGrow: number;\n flexShrink: number;\n flexBasis: number | null;\n }> = [];\n let totalMainSize = 0;\n let totalFlexGrow = 0;\n let totalFlexShrink = 0;\n\n for (const child of parent.children) {\n const flexGrow = parseFloat(child.props.flexGrow) || parseFloat(child.props.flex) || 0;\n const flexShrink = parseFloat(child.props.flexShrink) || 1;\n const flexBasis = parseSize(child.props.flexBasis);\n\n // Compute child layout with available space\n computeLayout(\n ctx,\n child,\n availableWidth,\n availableHeight,\n 0,\n 0\n );\n\n const childLayout = child.layout!;\n let mainSize = isColumn ? childLayout.height : childLayout.width;\n\n // Use flexBasis if specified\n if (flexBasis !== null) {\n mainSize = flexBasis;\n if (isColumn) {\n childLayout.height = flexBasis;\n } else {\n childLayout.width = flexBasis;\n }\n }\n\n childInfo.push({\n width: childLayout.width,\n height: childLayout.height,\n flexGrow,\n flexShrink,\n flexBasis,\n });\n\n totalMainSize += mainSize;\n totalFlexGrow += flexGrow;\n totalFlexShrink += flexShrink;\n }\n\n // Add gaps\n const totalGap = gap * (parent.children.length - 1);\n totalMainSize += totalGap;\n\n // Apply flex grow/shrink\n const availableMain = isColumn ? availableHeight : availableWidth;\n let remainingSpace = availableMain - totalMainSize;\n\n // Distribute remaining space to flex-grow children\n if (remainingSpace > 0 && totalFlexGrow > 0) {\n const spacePerFlex = remainingSpace / totalFlexGrow;\n\n for (let i = 0; i < parent.children.length; i++) {\n const info = childInfo[i];\n if (info.flexGrow > 0) {\n const extraSpace = spacePerFlex * info.flexGrow;\n if (isColumn) {\n info.height += extraSpace;\n } else {\n info.width += extraSpace;\n }\n totalMainSize += extraSpace;\n }\n }\n\n remainingSpace = 0;\n }\n\n // Apply flex shrink if needed (content is too large)\n if (remainingSpace < 0 && totalFlexShrink > 0) {\n const shrinkPerFlex = Math.abs(remainingSpace) / totalFlexShrink;\n\n for (let i = 0; i < parent.children.length; i++) {\n const info = childInfo[i];\n if (info.flexShrink > 0) {\n const shrinkSpace = Math.min(\n shrinkPerFlex * info.flexShrink,\n isColumn ? info.height : info.width\n );\n\n if (isColumn) {\n info.height = Math.max(0, info.height - shrinkSpace);\n } else {\n info.width = Math.max(0, info.width - shrinkSpace);\n }\n\n totalMainSize -= shrinkSpace;\n }\n }\n\n remainingSpace = availableMain - totalMainSize;\n }\n\n // Calculate starting position based on justifyContent\n let mainStart = 0;\n let spacing = 0;\n\n if (justifyContent === \"center\") {\n mainStart = Math.max(0, remainingSpace / 2);\n } else if (justifyContent === \"flex-end\") {\n mainStart = Math.max(0, remainingSpace);\n } else if (justifyContent === \"space-between\") {\n spacing = remainingSpace / Math.max(1, parent.children.length - 1);\n } else if (justifyContent === \"space-around\") {\n spacing = remainingSpace / parent.children.length;\n mainStart = spacing / 2;\n }\n\n // Position children\n let currentMain = mainStart;\n\n for (let i = 0; i < parent.children.length; i++) {\n const child = parent.children[i];\n const childLayout = child.layout!;\n const info = childInfo[i];\n\n // Update child layout with flex-adjusted size\n childLayout.width = info.width;\n childLayout.height = info.height;\n\n // Calculate cross position based on alignItems\n let crossStart = 0;\n const availableCross = isColumn ? availableWidth : availableHeight;\n const childCross = isColumn ? info.width : info.height;\n\n if (alignItems === \"center\") {\n crossStart = (availableCross - childCross) / 2;\n } else if (alignItems === \"flex-end\") {\n crossStart = availableCross - childCross;\n }\n\n // Update child position relative to parent content area\n if (isColumn) {\n childLayout.x = layout.x + layout.contentX + crossStart;\n childLayout.y = layout.y + layout.contentY + currentMain;\n currentMain += info.height + gap;\n } else {\n childLayout.x = layout.x + layout.contentX + currentMain;\n childLayout.y = layout.y + layout.contentY + crossStart;\n currentMain += info.width + gap;\n }\n\n if (justifyContent === \"space-between\" || justifyContent === \"space-around\") {\n currentMain += spacing;\n }\n }\n}\n\n/**\n * Layout Stack children - overlays children on top of each other\n */\nfunction layoutStackChildren(ctx: CanvasRenderingContext2D, parent: VirtualNode): void {\n const layout = parent.layout!;\n const props = parent.props;\n\n // Stack uses horizontalAlignment/verticalAlignment directly\n const horizontalAlignment = props.horizontalAlignment || \"flex-start\";\n const verticalAlignment = props.verticalAlignment || \"flex-start\";\n\n const availableWidth = layout.contentWidth;\n const availableHeight = layout.contentHeight;\n\n // Layout all children at the same position (stacked on top of each other)\n for (const child of parent.children) {\n // Compute child layout\n computeLayout(\n ctx,\n child,\n availableWidth,\n availableHeight,\n 0,\n 0\n );\n\n const childLayout = child.layout!;\n\n // Calculate position based on alignment\n let x = 0;\n let y = 0;\n\n // Horizontal alignment\n if (horizontalAlignment === \"center\") {\n x = (availableWidth - childLayout.width) / 2;\n } else if (horizontalAlignment === \"flex-end\") {\n x = availableWidth - childLayout.width;\n }\n\n // Vertical alignment\n if (verticalAlignment === \"center\") {\n y = (availableHeight - childLayout.height) / 2;\n } else if (verticalAlignment === \"flex-end\") {\n y = availableHeight - childLayout.height;\n }\n\n // Update child position relative to parent content area\n childLayout.x = layout.x + layout.contentX + x;\n childLayout.y = layout.y + layout.contentY + y;\n }\n}\n\n\n\n\n\n\n\n\n\n\n\n"
|
|
8
8
|
],
|
|
9
|
-
"mappings": "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",
|
|
10
|
-
"debugId": "
|
|
9
|
+
"mappings": "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",
|
|
10
|
+
"debugId": "107090D4899BFD6E64756E2164756E21",
|
|
11
11
|
"names": []
|
|
12
12
|
}
|
package/dist/canvas/paint.d.ts
CHANGED
|
@@ -12,3 +12,7 @@ export declare function registerPainter(type: string, painter: PainterFunction):
|
|
|
12
12
|
* Paint a virtual node and its children
|
|
13
13
|
*/
|
|
14
14
|
export declare function paintNode(ctx: CanvasRenderingContext2D, node: VirtualNode): void;
|
|
15
|
+
/**
|
|
16
|
+
* Clear the image cache and cancel all in-flight loads, freeing resources.
|
|
17
|
+
*/
|
|
18
|
+
export declare function clearImageCache(): void;
|
package/dist/canvas/paint.js
CHANGED
|
@@ -2,27 +2,37 @@ var __defProp = Object.defineProperty;
|
|
|
2
2
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
|
|
5
|
+
function __accessProp(key) {
|
|
6
|
+
return this[key];
|
|
7
|
+
}
|
|
6
8
|
var __toCommonJS = (from) => {
|
|
7
|
-
var entry = __moduleCache.get(from), desc;
|
|
9
|
+
var entry = (__moduleCache ??= new WeakMap).get(from), desc;
|
|
8
10
|
if (entry)
|
|
9
11
|
return entry;
|
|
10
12
|
entry = __defProp({}, "__esModule", { value: true });
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function")
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (var key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(entry, key))
|
|
16
|
+
__defProp(entry, key, {
|
|
17
|
+
get: __accessProp.bind(from, key),
|
|
18
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
19
|
+
});
|
|
20
|
+
}
|
|
16
21
|
__moduleCache.set(from, entry);
|
|
17
22
|
return entry;
|
|
18
23
|
};
|
|
24
|
+
var __moduleCache;
|
|
25
|
+
var __returnValue = (v) => v;
|
|
26
|
+
function __exportSetter(name, newValue) {
|
|
27
|
+
this[name] = __returnValue.bind(null, newValue);
|
|
28
|
+
}
|
|
19
29
|
var __export = (target, all) => {
|
|
20
30
|
for (var name in all)
|
|
21
31
|
__defProp(target, name, {
|
|
22
32
|
get: all[name],
|
|
23
33
|
enumerable: true,
|
|
24
34
|
configurable: true,
|
|
25
|
-
set: (
|
|
35
|
+
set: __exportSetter.bind(all, name)
|
|
26
36
|
});
|
|
27
37
|
};
|
|
28
38
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
@@ -551,6 +561,46 @@ function paintInput(ctx, node) {
|
|
|
551
561
|
});
|
|
552
562
|
}
|
|
553
563
|
}
|
|
564
|
+
var MAX_IMAGE_CACHE_SIZE = 100;
|
|
565
|
+
var MAX_FAIL_CACHE_SIZE = 200;
|
|
566
|
+
var imageCache = new Map;
|
|
567
|
+
var imagePending = new Set;
|
|
568
|
+
var imageInFlight = new Map;
|
|
569
|
+
var imageFailCache = new Map;
|
|
570
|
+
var IMAGE_FAIL_COOLDOWN_MS = 30000;
|
|
571
|
+
var IMAGE_MAX_ATTEMPTS = 3;
|
|
572
|
+
function evictMap(map, max) {
|
|
573
|
+
while (map.size > max) {
|
|
574
|
+
const oldest = map.keys().next().value;
|
|
575
|
+
if (oldest === undefined)
|
|
576
|
+
break;
|
|
577
|
+
map.delete(oldest);
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
function purgeExpiredFailures() {
|
|
581
|
+
const now = Date.now();
|
|
582
|
+
for (const [key, entry] of imageFailCache) {
|
|
583
|
+
if (entry.attempts >= IMAGE_MAX_ATTEMPTS)
|
|
584
|
+
continue;
|
|
585
|
+
if (now - entry.failedAt >= IMAGE_FAIL_COOLDOWN_MS) {
|
|
586
|
+
imageFailCache.delete(key);
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
function clearImageCache() {
|
|
591
|
+
for (const img of imageInFlight.values()) {
|
|
592
|
+
img.onload = null;
|
|
593
|
+
img.onerror = null;
|
|
594
|
+
img.src = "";
|
|
595
|
+
}
|
|
596
|
+
imageInFlight.clear();
|
|
597
|
+
for (const img of imageCache.values()) {
|
|
598
|
+
img.src = "";
|
|
599
|
+
}
|
|
600
|
+
imageCache.clear();
|
|
601
|
+
imagePending.clear();
|
|
602
|
+
imageFailCache.clear();
|
|
603
|
+
}
|
|
554
604
|
function paintImage(ctx, node) {
|
|
555
605
|
const layout = node.layout;
|
|
556
606
|
const props = node.props;
|
|
@@ -561,6 +611,11 @@ function paintImage(ctx, node) {
|
|
|
561
611
|
const y = layout.y;
|
|
562
612
|
const width = layout.width;
|
|
563
613
|
const height = layout.height;
|
|
614
|
+
const cached = imageCache.get(src);
|
|
615
|
+
if (cached && cached.complete && cached.naturalWidth > 0) {
|
|
616
|
+
ctx.drawImage(cached, x, y, width, height);
|
|
617
|
+
return;
|
|
618
|
+
}
|
|
564
619
|
ctx.fillStyle = "#e0e0e0";
|
|
565
620
|
ctx.fillRect(x, y, width, height);
|
|
566
621
|
ctx.strokeStyle = "#999999";
|
|
@@ -570,7 +625,40 @@ function paintImage(ctx, node) {
|
|
|
570
625
|
ctx.font = "14px sans-serif";
|
|
571
626
|
ctx.textAlign = "center";
|
|
572
627
|
ctx.textBaseline = "middle";
|
|
573
|
-
|
|
628
|
+
const failEntry = imageFailCache.get(src);
|
|
629
|
+
if (failEntry) {
|
|
630
|
+
if (failEntry.attempts >= IMAGE_MAX_ATTEMPTS || Date.now() - failEntry.failedAt < IMAGE_FAIL_COOLDOWN_MS) {
|
|
631
|
+
ctx.fillText("Failed", x + width / 2, y + height / 2);
|
|
632
|
+
return;
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
ctx.fillText("Loading...", x + width / 2, y + height / 2);
|
|
636
|
+
if (!imagePending.has(src)) {
|
|
637
|
+
imagePending.add(src);
|
|
638
|
+
const canvas = ctx.canvas;
|
|
639
|
+
const img = new Image;
|
|
640
|
+
img.crossOrigin = "anonymous";
|
|
641
|
+
imageInFlight.set(src, img);
|
|
642
|
+
img.onload = () => {
|
|
643
|
+
imageInFlight.delete(src);
|
|
644
|
+
imageCache.set(src, img);
|
|
645
|
+
imagePending.delete(src);
|
|
646
|
+
imageFailCache.delete(src);
|
|
647
|
+
evictMap(imageCache, MAX_IMAGE_CACHE_SIZE);
|
|
648
|
+
canvas.dispatchEvent(new CustomEvent("hypen:redraw"));
|
|
649
|
+
};
|
|
650
|
+
img.onerror = () => {
|
|
651
|
+
imageInFlight.delete(src);
|
|
652
|
+
imagePending.delete(src);
|
|
653
|
+
purgeExpiredFailures();
|
|
654
|
+
imageFailCache.set(src, {
|
|
655
|
+
failedAt: Date.now(),
|
|
656
|
+
attempts: (imageFailCache.get(src)?.attempts ?? 0) + 1
|
|
657
|
+
});
|
|
658
|
+
evictMap(imageFailCache, MAX_FAIL_CACHE_SIZE);
|
|
659
|
+
};
|
|
660
|
+
img.src = src;
|
|
661
|
+
}
|
|
574
662
|
}
|
|
575
663
|
function drawRoundedRect(ctx, x, y, width, height, radius) {
|
|
576
664
|
if (radius <= 0) {
|
|
@@ -1123,7 +1211,8 @@ function drawStar(ctx, cx, cy, spikes, outerRadius, innerRadius) {
|
|
|
1123
1211
|
}
|
|
1124
1212
|
export {
|
|
1125
1213
|
registerPainter,
|
|
1126
|
-
paintNode
|
|
1214
|
+
paintNode,
|
|
1215
|
+
clearImageCache
|
|
1127
1216
|
};
|
|
1128
1217
|
|
|
1129
|
-
//# debugId=
|
|
1218
|
+
//# debugId=DB7D7BF5FB8A39B564756E2164756E21
|