@meonode/canvas 2.0.0 → 2.0.2
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/README.md +272 -256
- package/dist/cjs/canvas/canvas.helper.js.map +1 -1
- package/dist/cjs/canvas/{chart.canvas.util.js → chart.canvas.js} +23 -23
- package/dist/cjs/canvas/chart.canvas.js.map +1 -0
- package/dist/cjs/canvas/{grid.canvas.util.js → grid.canvas.js} +4 -4
- package/dist/cjs/canvas/grid.canvas.js.map +1 -0
- package/dist/cjs/canvas/{image.canvas.util.js → image.canvas.js} +3 -3
- package/dist/cjs/canvas/image.canvas.js.map +1 -0
- package/dist/cjs/canvas/{layout.canvas.util.js → layout.canvas.js} +18 -11
- package/dist/cjs/canvas/layout.canvas.js.map +1 -0
- package/dist/cjs/canvas/{root.canvas.util.js → root.canvas.js} +17 -17
- package/dist/cjs/canvas/root.canvas.js.map +1 -0
- package/dist/cjs/canvas/{text.canvas.util.js → text.canvas.js} +3 -3
- package/dist/cjs/canvas/text.canvas.js.map +1 -0
- package/dist/cjs/constant/common.const.js.map +1 -1
- package/dist/cjs/index.js +17 -17
- package/dist/cjs/src/canvas/canvas.helper.d.ts.map +1 -0
- package/dist/{esm → cjs/src}/canvas/canvas.type.d.ts +4 -4
- package/dist/cjs/src/canvas/canvas.type.d.ts.map +1 -0
- package/dist/cjs/{canvas/chart.canvas.util.d.ts → src/canvas/chart.canvas.d.ts} +2 -2
- package/dist/cjs/src/canvas/chart.canvas.d.ts.map +1 -0
- package/dist/{esm/canvas/grid.canvas.util.d.ts → cjs/src/canvas/grid.canvas.d.ts} +2 -2
- package/dist/cjs/src/canvas/grid.canvas.d.ts.map +1 -0
- package/dist/{esm/canvas/image.canvas.util.d.ts → cjs/src/canvas/image.canvas.d.ts} +2 -2
- package/dist/cjs/src/canvas/image.canvas.d.ts.map +1 -0
- package/dist/{esm/canvas/layout.canvas.util.d.ts → cjs/src/canvas/layout.canvas.d.ts} +1 -1
- package/dist/cjs/src/canvas/layout.canvas.d.ts.map +1 -0
- package/dist/{esm/canvas/root.canvas.util.d.ts → cjs/src/canvas/root.canvas.d.ts} +2 -2
- package/dist/cjs/src/canvas/root.canvas.d.ts.map +1 -0
- package/dist/cjs/{canvas/text.canvas.util.d.ts → src/canvas/text.canvas.d.ts} +2 -2
- package/dist/cjs/src/canvas/text.canvas.d.ts.map +1 -0
- package/dist/cjs/src/constant/common.const.d.ts +18 -0
- package/dist/cjs/src/constant/common.const.d.ts.map +1 -0
- package/dist/cjs/src/index.d.ts +11 -0
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/cjs/src/util/disk.cache.d.ts.map +1 -0
- package/dist/cjs/src/worker/render.worker.d.ts.map +1 -0
- package/dist/cjs/src/worker/worker.types.d.ts.map +1 -0
- package/dist/cjs/util/disk.cache.js +9 -3
- package/dist/cjs/util/disk.cache.js.map +1 -1
- package/dist/cjs/worker/render.worker.js +2 -2
- package/dist/cjs/worker/render.worker.js.map +1 -1
- package/dist/esm/canvas/{chart.canvas.util.js → chart.canvas.js} +4 -4
- package/dist/esm/canvas/{grid.canvas.util.js → grid.canvas.js} +1 -1
- package/dist/esm/canvas/{image.canvas.util.js → image.canvas.js} +1 -1
- package/dist/esm/canvas/{layout.canvas.util.js → layout.canvas.js} +17 -10
- package/dist/esm/canvas/{root.canvas.util.js → root.canvas.js} +5 -5
- package/dist/esm/canvas/{text.canvas.util.js → text.canvas.js} +1 -1
- package/dist/esm/index.js +6 -6
- package/dist/esm/src/canvas/canvas.helper.d.ts.map +1 -0
- package/dist/{cjs → esm/src}/canvas/canvas.type.d.ts +4 -4
- package/dist/esm/src/canvas/canvas.type.d.ts.map +1 -0
- package/dist/esm/{canvas/chart.canvas.util.d.ts → src/canvas/chart.canvas.d.ts} +2 -2
- package/dist/esm/src/canvas/chart.canvas.d.ts.map +1 -0
- package/dist/{cjs/canvas/grid.canvas.util.d.ts → esm/src/canvas/grid.canvas.d.ts} +2 -2
- package/dist/esm/src/canvas/grid.canvas.d.ts.map +1 -0
- package/dist/{cjs/canvas/image.canvas.util.d.ts → esm/src/canvas/image.canvas.d.ts} +2 -2
- package/dist/esm/src/canvas/image.canvas.d.ts.map +1 -0
- package/dist/{cjs/canvas/layout.canvas.util.d.ts → esm/src/canvas/layout.canvas.d.ts} +1 -1
- package/dist/esm/src/canvas/layout.canvas.d.ts.map +1 -0
- package/dist/{cjs/canvas/root.canvas.util.d.ts → esm/src/canvas/root.canvas.d.ts} +2 -2
- package/dist/esm/src/canvas/root.canvas.d.ts.map +1 -0
- package/dist/esm/{canvas/text.canvas.util.d.ts → src/canvas/text.canvas.d.ts} +2 -2
- package/dist/esm/src/canvas/text.canvas.d.ts.map +1 -0
- package/dist/esm/src/constant/common.const.d.ts +18 -0
- package/dist/esm/src/constant/common.const.d.ts.map +1 -0
- package/dist/esm/src/index.d.ts +11 -0
- package/dist/esm/src/index.d.ts.map +1 -0
- package/dist/esm/src/util/disk.cache.d.ts.map +1 -0
- package/dist/esm/src/worker/render.worker.d.ts.map +1 -0
- package/dist/esm/src/worker/worker.types.d.ts.map +1 -0
- package/dist/esm/util/disk.cache.js +9 -3
- package/dist/esm/worker/render.worker.js +1 -1
- package/package.json +9 -8
- package/dist/cjs/canvas/canvas.helper.d.ts.map +0 -1
- package/dist/cjs/canvas/canvas.type.d.ts.map +0 -1
- package/dist/cjs/canvas/chart.canvas.util.d.ts.map +0 -1
- package/dist/cjs/canvas/chart.canvas.util.js.map +0 -1
- package/dist/cjs/canvas/grid.canvas.util.d.ts.map +0 -1
- package/dist/cjs/canvas/grid.canvas.util.js.map +0 -1
- package/dist/cjs/canvas/image.canvas.util.d.ts.map +0 -1
- package/dist/cjs/canvas/image.canvas.util.js.map +0 -1
- package/dist/cjs/canvas/layout.canvas.util.d.ts.map +0 -1
- package/dist/cjs/canvas/layout.canvas.util.js.map +0 -1
- package/dist/cjs/canvas/root.canvas.util.d.ts.map +0 -1
- package/dist/cjs/canvas/root.canvas.util.js.map +0 -1
- package/dist/cjs/canvas/text.canvas.util.d.ts.map +0 -1
- package/dist/cjs/canvas/text.canvas.util.js.map +0 -1
- package/dist/cjs/constant/common.const.d.ts +0 -37
- package/dist/cjs/constant/common.const.d.ts.map +0 -1
- package/dist/cjs/index.d.ts +0 -11
- package/dist/cjs/index.d.ts.map +0 -1
- package/dist/cjs/util/disk.cache.d.ts.map +0 -1
- package/dist/cjs/worker/render.worker.d.ts.map +0 -1
- package/dist/cjs/worker/worker.types.d.ts.map +0 -1
- package/dist/esm/canvas/canvas.helper.d.ts.map +0 -1
- package/dist/esm/canvas/canvas.type.d.ts.map +0 -1
- package/dist/esm/canvas/chart.canvas.util.d.ts.map +0 -1
- package/dist/esm/canvas/grid.canvas.util.d.ts.map +0 -1
- package/dist/esm/canvas/image.canvas.util.d.ts.map +0 -1
- package/dist/esm/canvas/layout.canvas.util.d.ts.map +0 -1
- package/dist/esm/canvas/root.canvas.util.d.ts.map +0 -1
- package/dist/esm/canvas/text.canvas.util.d.ts.map +0 -1
- package/dist/esm/constant/common.const.d.ts +0 -37
- package/dist/esm/constant/common.const.d.ts.map +0 -1
- package/dist/esm/index.d.ts +0 -11
- package/dist/esm/index.d.ts.map +0 -1
- package/dist/esm/util/disk.cache.d.ts.map +0 -1
- package/dist/esm/worker/render.worker.d.ts.map +0 -1
- package/dist/esm/worker/worker.types.d.ts.map +0 -1
- /package/dist/cjs/{canvas → src/canvas}/canvas.helper.d.ts +0 -0
- /package/dist/cjs/{util → src/util}/disk.cache.d.ts +0 -0
- /package/dist/cjs/{worker → src/worker}/render.worker.d.ts +0 -0
- /package/dist/cjs/{worker → src/worker}/worker.types.d.ts +0 -0
- /package/dist/esm/{canvas → src/canvas}/canvas.helper.d.ts +0 -0
- /package/dist/esm/{util → src/util}/disk.cache.d.ts +0 -0
- /package/dist/esm/{worker → src/worker}/render.worker.d.ts +0 -0
- /package/dist/esm/{worker → src/worker}/worker.types.d.ts +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chart.canvas.util.js","sources":["../../../../src/canvas/chart.canvas.util.ts"],"sourcesContent":["import { BoxNode, ColumnNode, RowNode } from '@/canvas/layout.canvas.util.js'\nimport type {\n BaseProps,\n CartesianChartData,\n ChartDataset,\n ChartProps,\n ChartType,\n PieChartDataPoint,\n CanvasElement,\n PreComputedChartOptions,\n} from '@/canvas/canvas.type.js'\nimport type { CanvasRenderingContext2D } from 'skia-canvas'\nimport { Style } from '@/constant/common.const.js'\nimport { TextNode } from '@/canvas/text.canvas.util.js'\nimport { ImageNode } from '@/canvas/image.canvas.util.js'\n\n/**\n * Local buildTree for pre-computed render function results.\n * Handles only node types that render functions would return (Box, Column, Row, Text, Image).\n * Avoids circular dependency with root.canvas.util.ts.\n */\nfunction buildDescriptorTree(descriptor: CanvasElement): BoxNode {\n switch (descriptor.__type) {\n case 'Box':\n return new BoxNode({ ...descriptor.props, children: descriptor.children?.map(buildDescriptorTree) })\n case 'Column':\n return new ColumnNode({ ...descriptor.props, children: descriptor.children?.map(buildDescriptorTree) })\n case 'Row':\n return new RowNode({ ...descriptor.props, children: descriptor.children?.map(buildDescriptorTree) })\n case 'Image':\n return new ImageNode(descriptor.props as any)\n case 'Text':\n return new TextNode(descriptor.text, descriptor.props)\n default:\n return new BoxNode({})\n }\n}\n\nexport class ChartNode<T extends ChartType> extends BoxNode {\n private chartData: CartesianChartData | PieChartDataPoint[]\n private chartType: ChartProps<T>['type']\n private chartOptions: ChartProps<T>['options'] & PreComputedChartOptions\n\n constructor(props: ChartProps<T> & BaseProps) {\n // Set default intrinsic size if not provided\n const defaultWidth = props.width ?? 400\n const defaultHeight = props.height ?? 300\n\n super({\n ...props,\n width: defaultWidth,\n height: defaultHeight,\n name: 'Chart',\n })\n\n this.chartData = props.data\n this.chartType = props.type\n this.chartOptions = {\n showLabels: true,\n showLegend: true,\n labelFontSize: 12,\n legendPosition: 'bottom',\n ...props.options,\n } as ChartProps<T>['options'] & PreComputedChartOptions\n\n this.validateProps()\n }\n\n private validateProps() {\n if (this.chartType === 'bar' || this.chartType === 'line') {\n const data = this.chartData as CartesianChartData\n if (!data.labels || !data.datasets) {\n console.warn(`[ChartNode] Warning: Cartesian chart (${this.chartType}) is missing 'labels' or 'datasets' in its data prop.`)\n }\n data.datasets?.forEach((dataset, i) => {\n if (dataset.data.length !== data.labels.length) {\n console.warn(\n `[ChartNode] Warning: In dataset ${i} (\"${dataset.label}\"), the number of data points (${dataset.data.length}) does not match the number of labels (${data.labels.length}).`,\n )\n }\n })\n } else if (this.chartType === 'pie' || this.chartType === 'doughnut') {\n const data = this.chartData as PieChartDataPoint[]\n if (!Array.isArray(data)) {\n console.warn(`[ChartNode] Warning: ${this.chartType} chart expects an array of PieChartDataPoint, but received a different type.`)\n }\n }\n }\n\n protected _renderContent(ctx: CanvasRenderingContext2D, x: number, y: number, width: number, height: number) {\n // First render background/borders from parent\n super._renderContent(ctx, x, y, width, height)\n\n // Then render chart-specific content\n const paddingLeft = this.node.getComputedPadding(Style.Edge.Left)\n const paddingRight = this.node.getComputedPadding(Style.Edge.Right)\n const paddingTop = this.node.getComputedPadding(Style.Edge.Top)\n const paddingBottom = this.node.getComputedPadding(Style.Edge.Bottom)\n const contentX = x + paddingLeft\n const contentY = y + paddingTop\n const contentWidth = width - paddingLeft - paddingRight\n const contentHeight = height - paddingTop - paddingBottom\n\n switch (this.chartType) {\n case 'bar':\n this.renderBarChart(ctx, contentX, contentY, contentWidth, contentHeight)\n break\n case 'line':\n this.renderLineChart(ctx, contentX, contentY, contentWidth, contentHeight)\n break\n case 'pie':\n this.renderPieChart(ctx, contentX, contentY, contentWidth, contentHeight)\n break\n case 'doughnut':\n this.renderDoughnutChart(ctx, contentX, contentY, contentWidth, contentHeight)\n break\n }\n }\n\n private getSmartYAxisFormatter(maxValue: number): (v: number) => string {\n const absMax = Math.abs(maxValue)\n\n // Thresholds with corresponding decimal places, divisors, and suffixes\n const thresholds = [\n { min: 1000000, decimals: 1, divisor: 1000000, suffix: 'M' },\n { min: 1000, decimals: 0, divisor: 1, suffix: '' },\n { min: 100, decimals: 1, divisor: 1, suffix: '' },\n { min: 1, decimals: 2, divisor: 1, suffix: '' },\n { min: 0, decimals: 4, divisor: 1, suffix: '' },\n ]\n\n let config = thresholds[thresholds.length - 1]\n for (const threshold of thresholds) {\n if (absMax >= threshold.min) {\n config = threshold\n break\n }\n }\n\n return (v: number) => {\n const scaled = v / config.divisor\n const factor = Math.pow(10, config.decimals)\n const rounded = Math.round(scaled * factor) / factor\n return rounded.toString() + config.suffix\n }\n }\n\n private getLegendLayout(ctx: CanvasRenderingContext2D, totalWidth: number, totalHeight: number) {\n if (!this.chartOptions?.showLegend) {\n return { x: 0, y: 0, width: 0, height: 0, chartWidth: totalWidth, chartHeight: totalHeight, chartX: 0, chartY: 0 }\n }\n\n const legendItems = 'datasets' in this.chartData ? this.chartData.datasets : (this.chartData as PieChartDataPoint[])\n if (legendItems.length === 0) {\n return { x: 0, y: 0, width: 0, height: 0, chartWidth: totalWidth, chartHeight: totalHeight, chartX: 0, chartY: 0 }\n }\n\n const fontSize = this.chartOptions?.labelFontSize || 12\n ctx.font = `${fontSize}px ${this.props.fontFamily || 'sans-serif'}`\n const metrics = ctx.measureText('Mg')\n const textHeight = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent\n const itemHeight = Math.ceil(textHeight + 8)\n const position = this.chartOptions.legendPosition\n const boxSize = Math.min(15, itemHeight - 2)\n\n const legendItemLabels =\n 'datasets' in this.chartData ? this.chartData.datasets.map(d => d.label) : (this.chartData as PieChartDataPoint[]).map(p => `${p.label} (${p.value})`)\n\n let calculatedLegendHeight: number\n let calculatedLegendWidth: number\n\n if (position === 'top' || position === 'bottom') {\n let currentX = 0\n let numRows = 1\n const itemPadding = 20\n legendItemLabels.forEach(label => {\n const labelWidth = ctx.measureText(label).width\n const itemWidth = boxSize + 5 + labelWidth + itemPadding\n\n if (currentX > 0 && currentX + itemWidth > totalWidth) {\n numRows++\n currentX = 0\n }\n currentX += itemWidth\n })\n calculatedLegendHeight = numRows * itemHeight + 10\n calculatedLegendWidth = totalWidth\n } else {\n // 'left' or 'right'\n const maxLabelWidth = Math.max(...legendItemLabels.map(label => ctx.measureText(label).width))\n calculatedLegendWidth = maxLabelWidth + boxSize + 25 // padding + box + padding + text\n calculatedLegendHeight = totalHeight\n }\n\n let effectiveChartWidth = totalWidth\n let effectiveChartHeight = totalHeight\n let legendAreaX: number\n let legendAreaY: number\n let chartAreaX: number\n let chartAreaY: number\n let legendAreaWidth: number\n let legendAreaHeight: number\n\n if (position === 'top' || position === 'bottom') {\n effectiveChartHeight -= calculatedLegendHeight\n legendAreaHeight = calculatedLegendHeight\n legendAreaWidth = totalWidth\n legendAreaX = 0\n chartAreaX = 0\n\n if (position === 'top') {\n chartAreaY = calculatedLegendHeight\n legendAreaY = 0\n } else {\n // bottom\n legendAreaY = effectiveChartHeight\n chartAreaY = 0\n }\n } else {\n // 'left' or 'right'\n effectiveChartWidth -= calculatedLegendWidth\n legendAreaWidth = calculatedLegendWidth\n legendAreaHeight = totalHeight\n legendAreaY = 0\n chartAreaY = 0\n\n if (position === 'left') {\n chartAreaX = calculatedLegendWidth\n legendAreaX = 0\n } else {\n // right\n legendAreaX = effectiveChartWidth\n chartAreaX = 0\n }\n }\n\n return {\n x: legendAreaX,\n y: legendAreaY,\n width: legendAreaWidth,\n height: legendAreaHeight,\n chartWidth: effectiveChartWidth,\n chartHeight: effectiveChartHeight,\n chartX: chartAreaX,\n chartY: chartAreaY,\n }\n }\n\n private renderBarChart(ctx: CanvasRenderingContext2D, x: number, y: number, width: number, height: number) {\n if (this.chartType !== 'bar') return\n const chartData = this.chartData as CartesianChartData\n const chartOptions = this.chartOptions as ChartProps<'bar'>['options'] & PreComputedChartOptions\n\n const { labels, datasets } = chartData\n const maxValue = Math.max(...datasets.flatMap(d => d.data))\n\n const legendLayout = this.getLegendLayout(ctx, width, height)\n let chartX = x + legendLayout.chartX\n const chartY = y + legendLayout.chartY\n let chartWidth = legendLayout.chartWidth\n const chartHeight = legendLayout.chartHeight\n\n if (chartOptions?.showYAxis) {\n const fontSize = chartOptions.yAxisFontSize || 12\n ctx.font = `${fontSize}px ${this.props.fontFamily || 'sans-serif'}`\n const maxLabel =\n chartOptions._preComputedYAxisLabels?.[0] ??\n (chartOptions.yAxisLabelFormatter ? chartOptions.yAxisLabelFormatter(maxValue) : this.getSmartYAxisFormatter(maxValue)(maxValue))\n const yAxisWidth = ctx.measureText(maxLabel).width + 10\n chartX += yAxisWidth\n chartWidth -= yAxisWidth\n }\n\n let labelHeight = 0\n if (chartOptions?.showLabels) {\n const fontSize = chartOptions.labelFontSize || 12\n ctx.font = `${fontSize}px ${this.props.fontFamily || 'sans-serif'}`\n const metrics = ctx.measureText('Mg')\n labelHeight = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent + 10 // with padding\n }\n const finalChartHeight = chartHeight - labelHeight\n\n const groupWidth = chartWidth / labels.length\n const barSpacing = groupWidth * 0.2\n const barWidth = (groupWidth - barSpacing) / datasets.length\n\n // Render grid\n if (chartOptions?.grid?.show) {\n ctx.strokeStyle = chartOptions.grid.color || '#e0e0e0'\n ctx.lineWidth = 1\n if (chartOptions.grid.style === 'dashed') {\n ctx.setLineDash([5, 5])\n } else if (chartOptions.grid.style === 'dotted') {\n ctx.setLineDash([2, 2])\n }\n\n for (let i = 0; i <= 5; i++) {\n const gridY = chartY + (finalChartHeight / 5) * i\n ctx.beginPath()\n ctx.moveTo(chartX, gridY)\n ctx.lineTo(chartX + chartWidth, gridY)\n ctx.stroke()\n\n if (chartOptions?.showYAxis) {\n const value = maxValue - (maxValue / 5) * i\n const label =\n chartOptions._preComputedYAxisLabels?.[i] ??\n (chartOptions.yAxisLabelFormatter ? chartOptions.yAxisLabelFormatter(value) : this.getSmartYAxisFormatter(maxValue)(value))\n\n TextNode.renderSimpleText(ctx, label, chartX - 5, gridY, {\n color: chartOptions.yAxisColor || chartOptions.axisColor || '#000',\n fontSize: chartOptions.yAxisFontSize || 12,\n fontFamily: this.props.fontFamily,\n textAlign: 'right',\n textBaseline: 'middle',\n })\n }\n }\n ctx.setLineDash([])\n }\n\n // Render bars\n labels.forEach((label, index) => {\n const groupX = chartX + index * groupWidth + barSpacing / 2\n\n datasets.forEach((dataset, datasetIndex) => {\n const barHeight = (dataset.data[index] / maxValue) * finalChartHeight\n const barX = groupX + datasetIndex * barWidth\n const barY = chartY + finalChartHeight - barHeight\n\n ctx.fillStyle = dataset.color || this.generateColor(datasetIndex)\n ctx.fillRect(barX, barY, barWidth, barHeight)\n\n // Render values\n if (chartOptions?.showValues) {\n const value = dataset.data[index]\n const valueX = barX + barWidth / 2\n const valueY = barY - 5 // 5px padding above bar\n\n const preComputedValueDesc = chartOptions._preComputedValueItems?.[datasetIndex]?.[index]\n if (preComputedValueDesc) {\n const valueNode = buildDescriptorTree(preComputedValueDesc)\n valueNode.processInitialChildren()\n valueNode.node.calculateLayout(undefined, undefined, Style.Direction.LTR)\n const layout = valueNode.node.getComputedLayout()\n valueNode.render(ctx, valueX - layout.width / 2, valueY - layout.height)\n } else if (chartOptions.renderValueItem) {\n const valueNode = chartOptions.renderValueItem({ item: value, index, datasetIndex })\n if (valueNode) {\n valueNode.processInitialChildren()\n valueNode.node.calculateLayout(undefined, undefined, Style.Direction.LTR)\n const layout = valueNode.node.getComputedLayout()\n valueNode.render(ctx, valueX - layout.width / 2, valueY - layout.height)\n }\n } else {\n TextNode.renderSimpleText(ctx, value.toString(), valueX, valueY, {\n color: chartOptions.valueColor || '#000',\n fontSize: chartOptions.valueFontSize || 12,\n fontFamily: this.props.fontFamily,\n textAlign: 'center',\n textBaseline: 'bottom',\n })\n }\n }\n })\n\n // Render labels\n if (chartOptions?.showLabels) {\n const displayLabel =\n chartOptions._preComputedXAxisLabels?.[index] ?? (chartOptions.xAxisLabelFormatter ? chartOptions.xAxisLabelFormatter(label, index) : label)\n\n const preComputedLabelDesc = chartOptions._preComputedLabelItems?.[index]\n if (preComputedLabelDesc) {\n const labelNode = buildDescriptorTree(preComputedLabelDesc)\n labelNode.processInitialChildren()\n labelNode.node.calculateLayout(undefined, undefined, Style.Direction.LTR)\n const layout = labelNode.node.getComputedLayout()\n labelNode.render(ctx, groupX + (groupWidth - barSpacing) / 2 - layout.width / 2, chartY + finalChartHeight + labelHeight / 2 - layout.height / 2)\n } else if (chartOptions.renderLabelItem) {\n const labelNode = chartOptions.renderLabelItem({ item: label, index })\n if (labelNode) {\n labelNode.processInitialChildren()\n labelNode.node.calculateLayout(undefined, undefined, Style.Direction.LTR)\n const layout = labelNode.node.getComputedLayout()\n labelNode.render(ctx, groupX + (groupWidth - barSpacing) / 2 - layout.width / 2, chartY + finalChartHeight + labelHeight / 2 - layout.height / 2)\n }\n } else {\n TextNode.renderSimpleText(ctx, displayLabel, groupX + (groupWidth - barSpacing) / 2, chartY + finalChartHeight + labelHeight / 2, {\n color: chartOptions.labelColor || chartOptions.axisColor,\n fontSize: chartOptions.labelFontSize,\n fontFamily: this.props.fontFamily,\n textAlign: 'center',\n textBaseline: 'middle',\n })\n }\n }\n })\n\n // Render legend\n if (chartOptions?.showLegend) {\n this.renderLegend(ctx, x + legendLayout.x, y + legendLayout.y, legendLayout.width, legendLayout.height)\n }\n }\n\n private renderLineChart(ctx: CanvasRenderingContext2D, x: number, y: number, width: number, height: number) {\n if (this.chartType !== 'line') return\n const chartData = this.chartData as CartesianChartData\n const chartOptions = this.chartOptions as ChartProps<'line'>['options'] & PreComputedChartOptions\n\n const { labels, datasets } = chartData\n const maxValue = Math.max(...datasets.flatMap(d => d.data))\n\n const legendLayout = this.getLegendLayout(ctx, width, height)\n let chartX = x + legendLayout.chartX\n const chartY = y + legendLayout.chartY\n let chartWidth = legendLayout.chartWidth\n const chartHeight = legendLayout.chartHeight\n\n if (chartOptions?.showYAxis) {\n const fontSize = chartOptions.yAxisFontSize || 12\n ctx.font = `${fontSize}px ${this.props.fontFamily || 'sans-serif'}`\n const maxLabel =\n chartOptions._preComputedYAxisLabels?.[0] ??\n (chartOptions.yAxisLabelFormatter ? chartOptions.yAxisLabelFormatter(maxValue) : this.getSmartYAxisFormatter(maxValue)(maxValue))\n const yAxisWidth = ctx.measureText(maxLabel).width + 10\n chartX += yAxisWidth\n chartWidth -= yAxisWidth\n }\n\n let labelHeight = 0\n if (chartOptions?.showLabels) {\n const fontSize = chartOptions.labelFontSize || 12\n ctx.font = `${fontSize}px ${this.props.fontFamily || 'sans-serif'}`\n const metrics = ctx.measureText('Mg')\n labelHeight = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent + 10 // with padding\n }\n const finalChartHeight = chartHeight - labelHeight\n const pointSpacing = chartWidth / (labels.length > 1 ? labels.length - 1 : 1)\n\n // Render grid\n if (chartOptions?.grid?.show) {\n ctx.strokeStyle = chartOptions.grid.color || '#e0e0e0'\n ctx.lineWidth = 1\n if (chartOptions.grid.style === 'dashed') {\n ctx.setLineDash([5, 5])\n } else if (chartOptions.grid.style === 'dotted') {\n ctx.setLineDash([2, 2])\n }\n\n for (let i = 0; i <= 5; i++) {\n const gridY = chartY + (finalChartHeight / 5) * i\n ctx.beginPath()\n ctx.moveTo(chartX, gridY)\n ctx.lineTo(chartX + chartWidth, gridY)\n ctx.stroke()\n\n if (chartOptions?.showYAxis) {\n const value = maxValue - (maxValue / 5) * i\n const label =\n chartOptions._preComputedYAxisLabels?.[i] ??\n (chartOptions.yAxisLabelFormatter ? chartOptions.yAxisLabelFormatter(value) : this.getSmartYAxisFormatter(maxValue)(value))\n\n TextNode.renderSimpleText(ctx, label, chartX - 5, gridY, {\n color: chartOptions.yAxisColor || chartOptions.axisColor || '#000',\n fontSize: chartOptions.yAxisFontSize || 12,\n fontFamily: this.props.fontFamily,\n textAlign: 'right',\n textBaseline: 'middle',\n })\n }\n }\n ctx.setLineDash([])\n }\n\n // Render lines and points\n datasets.forEach((dataset, datasetIndex) => {\n ctx.strokeStyle = dataset.color || this.generateColor(datasetIndex)\n ctx.lineWidth = 2\n ctx.beginPath()\n\n dataset.data.forEach((value, index) => {\n const pointX = chartX + index * pointSpacing\n const pointY = chartY + finalChartHeight - (value / maxValue) * finalChartHeight\n\n if (index === 0) {\n ctx.moveTo(pointX, pointY)\n } else {\n ctx.lineTo(pointX, pointY)\n }\n })\n ctx.stroke()\n\n // Render points\n dataset.data.forEach((value, index) => {\n const pointX = chartX + index * pointSpacing\n const pointY = chartY + finalChartHeight - (value / maxValue) * finalChartHeight\n ctx.fillStyle = dataset.color || this.generateColor(datasetIndex)\n ctx.beginPath()\n ctx.arc(pointX, pointY, 4, 0, Math.PI * 2)\n ctx.fill()\n })\n })\n\n // Render labels\n if (chartOptions?.showLabels) {\n labels.forEach((label, index) => {\n const pointX = chartX + index * pointSpacing\n const displayLabel =\n chartOptions._preComputedXAxisLabels?.[index] ?? (chartOptions.xAxisLabelFormatter ? chartOptions.xAxisLabelFormatter(label, index) : label)\n\n const preComputedLabelDesc = chartOptions._preComputedLabelItems?.[index]\n if (preComputedLabelDesc) {\n const labelNode = buildDescriptorTree(preComputedLabelDesc)\n labelNode.processInitialChildren()\n labelNode.node.calculateLayout(undefined, undefined, Style.Direction.LTR)\n const layout = labelNode.node.getComputedLayout()\n labelNode.render(ctx, pointX - layout.width / 2, chartY + finalChartHeight + labelHeight / 2 - layout.height / 2)\n } else if (chartOptions.renderLabelItem) {\n const labelNode = chartOptions.renderLabelItem({ item: label, index })\n if (labelNode) {\n labelNode.processInitialChildren()\n labelNode.node.calculateLayout(undefined, undefined, Style.Direction.LTR)\n const layout = labelNode.node.getComputedLayout()\n labelNode.render(ctx, pointX - layout.width / 2, chartY + finalChartHeight + labelHeight / 2 - layout.height / 2)\n }\n } else {\n TextNode.renderSimpleText(ctx, displayLabel, pointX, chartY + finalChartHeight + labelHeight / 2, {\n color: chartOptions.labelColor || chartOptions.axisColor,\n fontSize: chartOptions.labelFontSize,\n fontFamily: this.props.fontFamily,\n textAlign: 'center',\n textBaseline: 'middle',\n })\n }\n })\n }\n\n if (chartOptions?.showLegend) {\n this.renderLegend(ctx, x + legendLayout.x, y + legendLayout.y, legendLayout.width, legendLayout.height)\n }\n }\n\n private renderPieChart(ctx: CanvasRenderingContext2D, x: number, y: number, width: number, height: number) {\n if (this.chartType !== 'pie') return\n const data = this.chartData as PieChartDataPoint[]\n const chartOptions = this.chartOptions as ChartProps<'pie'>['options'] & PreComputedChartOptions\n\n const legendLayout = this.getLegendLayout(ctx, width, height)\n const chartX = x + legendLayout.chartX\n const chartY = y + legendLayout.chartY\n const chartWidth = legendLayout.chartWidth\n const chartHeight = legendLayout.chartHeight\n\n const centerX = chartX + chartWidth / 2\n const centerY = chartY + chartHeight / 2\n const radius = Math.min(chartWidth, chartHeight) / 2 - 10\n\n const total = data.reduce((sum, point) => sum + point.value, 0)\n let currentAngle = -Math.PI / 2 // Start at top\n\n data.forEach((point, index) => {\n const sliceAngle = (point.value / total) * Math.PI * 2\n const startAngle = currentAngle\n const endAngle = currentAngle + sliceAngle\n\n ctx.fillStyle = point.color || this.generateColor(index)\n ctx.beginPath()\n ctx.moveTo(centerX, centerY)\n ctx.arc(centerX, centerY, radius, startAngle, endAngle)\n ctx.closePath()\n ctx.fill()\n\n // Draw slice border\n ctx.strokeStyle = '#fff'\n ctx.lineWidth = 2\n ctx.stroke()\n\n // Render labels\n if (chartOptions?.showLabels) {\n const labelAngle = startAngle + sliceAngle / 2\n const labelRadius = radius * 0.7\n const labelX = centerX + Math.cos(labelAngle) * labelRadius\n const labelY = centerY + Math.sin(labelAngle) * labelRadius\n\n const preComputedLabelDesc = chartOptions._preComputedLabelItems?.[index]\n if (preComputedLabelDesc) {\n const labelNode = buildDescriptorTree(preComputedLabelDesc)\n labelNode.processInitialChildren()\n labelNode.node.calculateLayout(undefined, undefined, Style.Direction.LTR)\n const layout = labelNode.node.getComputedLayout()\n labelNode.render(ctx, labelX - layout.width / 2, labelY - layout.height / 2)\n } else if (chartOptions.renderLabelItem) {\n const labelNode = chartOptions.renderLabelItem({ item: point, index })\n if (labelNode) {\n labelNode.processInitialChildren()\n labelNode.node.calculateLayout(undefined, undefined, Style.Direction.LTR)\n const layout = labelNode.node.getComputedLayout()\n labelNode.render(ctx, labelX - layout.width / 2, labelY - layout.height / 2)\n }\n } else {\n TextNode.renderSimpleText(ctx, point.label, labelX, labelY, {\n color: chartOptions.labelColor,\n fontSize: chartOptions.labelFontSize,\n fontFamily: this.props.fontFamily,\n textAlign: 'center',\n textBaseline: 'middle',\n })\n }\n }\n\n currentAngle = endAngle\n })\n\n if (chartOptions?.showLegend) {\n this.renderLegend(ctx, x + legendLayout.x, y + legendLayout.y, legendLayout.width, legendLayout.height)\n }\n }\n\n private renderDoughnutChart(ctx: CanvasRenderingContext2D, x: number, y: number, width: number, height: number) {\n if (this.chartType !== 'doughnut') return\n const data = this.chartData as PieChartDataPoint[]\n const chartOptions = this.chartOptions as ChartProps<'doughnut'>['options'] & PreComputedChartOptions\n\n const legendLayout = this.getLegendLayout(ctx, width, height)\n const chartX = x + legendLayout.chartX\n const chartY = y + legendLayout.chartY\n const chartWidth = legendLayout.chartWidth\n const chartHeight = legendLayout.chartHeight\n\n const centerX = chartX + chartWidth / 2\n const centerY = chartY + chartHeight / 2\n const outerRadius = Math.min(chartWidth, chartHeight) / 2 - 10\n const innerRadius = outerRadius * (chartOptions?.innerRadius ?? 0.6)\n\n const total = data.reduce((sum, point) => sum + point.value, 0)\n let currentAngle = -Math.PI / 2\n\n data.forEach((point, index) => {\n const sliceAngle = (point.value / total) * Math.PI * 2\n const startAngle = currentAngle\n const endAngle = currentAngle + sliceAngle\n\n ctx.fillStyle = point.color || this.generateColor(index)\n ctx.beginPath()\n ctx.arc(centerX, centerY, outerRadius, startAngle, endAngle)\n ctx.arc(centerX, centerY, innerRadius, endAngle, startAngle, true)\n ctx.closePath()\n ctx.fill()\n\n ctx.strokeStyle = '#fff'\n ctx.lineWidth = 2\n ctx.stroke()\n\n // Render labels\n if (chartOptions?.showLabels) {\n const labelAngle = startAngle + sliceAngle / 2\n const labelRadius = innerRadius + (outerRadius - innerRadius) / 2\n const labelX = centerX + Math.cos(labelAngle) * labelRadius\n const labelY = centerY + Math.sin(labelAngle) * labelRadius\n\n const preComputedLabelDesc = chartOptions._preComputedLabelItems?.[index]\n if (preComputedLabelDesc) {\n const labelNode = buildDescriptorTree(preComputedLabelDesc)\n labelNode.processInitialChildren()\n labelNode.node.calculateLayout(undefined, undefined, Style.Direction.LTR)\n const layout = labelNode.node.getComputedLayout()\n labelNode.render(ctx, labelX - layout.width / 2, labelY - layout.height / 2)\n } else if (chartOptions.renderLabelItem) {\n const labelNode = chartOptions.renderLabelItem({ item: point, index })\n if (labelNode) {\n labelNode.processInitialChildren()\n labelNode.node.calculateLayout(undefined, undefined, Style.Direction.LTR)\n const layout = labelNode.node.getComputedLayout()\n labelNode.render(ctx, labelX - layout.width / 2, labelY - layout.height / 2)\n }\n } else {\n TextNode.renderSimpleText(ctx, point.label, labelX, labelY, {\n color: chartOptions.labelColor,\n fontSize: chartOptions.labelFontSize,\n fontFamily: this.props.fontFamily,\n textAlign: 'center',\n textBaseline: 'middle',\n })\n }\n }\n\n currentAngle = endAngle\n })\n\n if (chartOptions?.showLegend) {\n this.renderLegend(ctx, x + legendLayout.x, y + legendLayout.y, legendLayout.width, legendLayout.height)\n }\n }\n\n private renderLegend(ctx: CanvasRenderingContext2D, x: number, y: number, width: number, height: number) {\n const { renderLegendItem, _preComputedLegendItems } = this.chartOptions\n\n if (_preComputedLegendItems) {\n const finalNodes = _preComputedLegendItems.filter((desc): desc is CanvasElement => !!desc).map(desc => buildDescriptorTree(desc))\n\n if (finalNodes.length > 0) {\n const legendContainer = new RowNode({\n children: finalNodes,\n width,\n height,\n justifyContent: Style.Justify.Center,\n alignItems: Style.Align.Center,\n flexWrap: Style.Wrap.Wrap,\n gap: 10,\n })\n legendContainer.processInitialChildren()\n legendContainer.node.calculateLayout(width, height, Style.Direction.LTR)\n legendContainer.render(ctx, x, y)\n }\n return\n }\n\n if (renderLegendItem) {\n let legendNodes: (BoxNode | null | undefined)[]\n if (this.chartType === 'bar' || this.chartType === 'line') {\n const items = (this.chartData as CartesianChartData).datasets\n const render = renderLegendItem as (props: { item: ChartDataset; index: number; color: string }) => BoxNode | null | undefined\n legendNodes = items.map((item, index) => {\n const color = item.color || this.generateColor(index)\n return render({ item, index, color })\n })\n } else {\n const items = this.chartData as PieChartDataPoint[]\n const render = renderLegendItem as (props: { item: PieChartDataPoint; index: number; color: string }) => BoxNode | null | undefined\n legendNodes = items.map((item, index) => {\n const color = item.color || this.generateColor(index)\n return render({ item, index, color })\n })\n }\n\n const finalNodes = legendNodes.filter((node): node is BoxNode => !!node)\n\n if (finalNodes.length > 0) {\n const legendContainer = new RowNode({\n children: finalNodes,\n width,\n height,\n justifyContent: Style.Justify.Center,\n alignItems: Style.Align.Center,\n flexWrap: Style.Wrap.Wrap,\n gap: 10,\n })\n legendContainer.processInitialChildren()\n legendContainer.node.calculateLayout(width, height, Style.Direction.LTR)\n legendContainer.render(ctx, x, y)\n }\n return\n }\n\n // Fallback to default rendering if renderLegendItem is not provided\n const legendItems =\n 'datasets' in this.chartData\n ? this.chartData.datasets.map(d => ({ label: d.label, value: d.data.reduce((a, b) => a + b, 0) }))\n : (this.chartData as PieChartDataPoint[])\n const fontSize = this.chartOptions?.labelFontSize || 12\n ctx.font = `${fontSize}px ${this.props.fontFamily || 'sans-serif'}`\n\n const metrics = ctx.measureText('Mg')\n const textHeight = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent\n const itemHeight = Math.ceil(textHeight + 8)\n const boxSize = Math.min(15, itemHeight - 2)\n\n const position = this.chartOptions.legendPosition\n if (position === 'top' || position === 'bottom') {\n const itemPadding = 20 // horizontal padding between items\n const rows: { items: { label: string; color: string; width: number }[]; width: number }[] = []\n let currentRow: { items: { label: string; color: string; width: number }[]; width: number } = { items: [], width: 0 }\n\n legendItems.forEach((point, index) => {\n const color =\n ('datasets' in this.chartData ? (this.chartData as CartesianChartData).datasets[index].color : (point as any).color) || this.generateColor(index)\n const label = 'datasets' in this.chartData ? point.label : `${point.label} (${point.value})`\n const labelWidth = ctx.measureText(label).width\n const itemWidth = boxSize + 5 + labelWidth\n\n if (currentRow.items.length > 0 && currentRow.width + itemPadding + itemWidth > width) {\n rows.push(currentRow)\n currentRow = { items: [], width: 0 }\n }\n\n currentRow.items.push({ label, color, width: itemWidth })\n currentRow.width += itemWidth + (currentRow.items.length > 1 ? itemPadding : 0)\n })\n rows.push(currentRow)\n\n let currentY = y + 5\n rows.forEach(row => {\n let currentX = x + (width - row.width) / 2\n row.items.forEach(item => {\n const boxY = currentY + (itemHeight - boxSize) / 2\n ctx.fillStyle = item.color\n ctx.fillRect(currentX, boxY, boxSize, boxSize)\n\n TextNode.renderSimpleText(ctx, item.label, currentX + boxSize + 5, currentY + itemHeight / 2, {\n color: this.chartOptions?.labelColor,\n fontSize,\n fontFamily: this.props.fontFamily,\n textAlign: 'left',\n textBaseline: 'middle',\n })\n\n currentX += item.width + itemPadding\n })\n currentY += itemHeight\n })\n } else {\n // 'left' or 'right'\n const totalHeight = legendItems.length * itemHeight\n const startY = y + (height - totalHeight) / 2\n\n legendItems.forEach((point, index) => {\n const itemX = x + 10\n const itemY = startY + index * itemHeight\n\n const boxY = itemY + (itemHeight - boxSize) / 2\n ctx.fillStyle =\n ('datasets' in this.chartData ? (this.chartData as CartesianChartData).datasets[index].color : (point as any).color) || this.generateColor(index)\n ctx.fillRect(itemX, boxY, boxSize, boxSize)\n\n const label = 'datasets' in this.chartData ? point.label : `${point.label} (${point.value})`\n TextNode.renderSimpleText(ctx, label, itemX + boxSize + 5, itemY + itemHeight / 2, {\n color: this.chartOptions?.labelColor,\n fontSize,\n fontFamily: this.props.fontFamily,\n textAlign: 'left',\n textBaseline: 'middle',\n })\n })\n }\n }\n\n private generateColor(index: number): string {\n const colors = ['#FF6384', '#36A2EB', '#FFCE56', '#4BC0C0', '#9966FF', '#FF9F40', '#C9CBCF']\n return colors[index % colors.length]\n }\n}\n\nexport const Chart = <T extends ChartType>(props: ChartProps<T> & BaseProps): CanvasElement => ({\n __type: 'Chart',\n props: props as any,\n})\n"],"names":["BoxNode","ColumnNode","RowNode","ImageNode","TextNode","Style"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"grid.canvas.util.d.ts","sourceRoot":"","sources":["../../../src/canvas/grid.canvas.util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAiB,aAAa,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAErG,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAUjE;;;;GAIG;AACH,qBAAa,YAAa,SAAQ,OAAO;gBAC3B,KAAK,EAAE,aAAa;CAMjC;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,uBAAuB,aAAa,KAAG,aAI9D,CAAA;AAEF;;;GAGG;AACH,qBAAa,QAAS,SAAQ,OAAO;IACnC;;;OAGG;gBACS,KAAK,EAAE,SAAS;IAQ5B;;OAEG;IACH,OAAO,CAAC,UAAU;IAwBlB;;OAEG;IACH,OAAO,CAAC,YAAY;IAmBpB;;OAEG;cACgB,+BAA+B;IAoTlD;;OAEG;IACH,OAAO,CAAC,aAAa;CAkCtB;AAED;;GAEG;AACH,eAAO,MAAM,IAAI,GAAI,uBAAuB,SAAS,KAAG,aAItD,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"grid.canvas.util.js","sources":["../../../../src/canvas/grid.canvas.util.ts"],"sourcesContent":["import type { GridProps, GridTrackSize, GridItemProps, CanvasElement } from '@/canvas/canvas.type.js'\nimport type { BoxProps } from '@/canvas/canvas.type.js'\nimport { BoxNode, RowNode } from '@/canvas/layout.canvas.util.js'\nimport { Style } from '@/constant/common.const.js'\nimport { parsePercentage } from '@/canvas/canvas.helper.js'\n\nfunction normalizeDescriptorChildren(children: BoxProps['children']): CanvasElement[] | undefined {\n if (children === undefined || children === null || children === false) return undefined\n const arr = (Array.isArray(children) ? children : [children]).filter(Boolean) as CanvasElement[]\n return arr.length > 0 ? arr : undefined\n}\n\n/**\n * GridItem Node. Theoretically just a BoxNode but typed differently in factory.\n * In runtime, it behaves almost like a BoxNode, but we can detect it if needed,\n * or simply rely on the props being present in the instance.\n */\nexport class GridItemNode extends BoxNode {\n constructor(props: GridItemProps) {\n super({\n ...props,\n name: 'GridItem',\n })\n }\n}\n\n/**\n * Factory for GridItem.\n */\nexport const GridItem = ({ children, ...rest }: GridItemProps): CanvasElement => ({\n __type: 'GridItem',\n props: rest,\n children: normalizeDescriptorChildren(children),\n})\n\n/**\n * Grid layout node that arranges children in a 2D grid.\n * Implements a simplified version of the CSS Grid Layout algorithm.\n */\nexport class GridNode extends RowNode {\n /**\n * Creates a new grid layout node\n * @param props Grid configuration properties\n */\n constructor(props: GridProps) {\n super({\n ...props,\n name: props.name || 'Grid',\n flexWrap: Style.Wrap.Wrap,\n })\n }\n\n /**\n * Helper to parse a track size definition.\n */\n private parseTrack(track: GridTrackSize, availableSpace: number): { type: 'px' | '%' | 'fr' | 'auto'; value: number } {\n if (typeof track === 'number') {\n return { type: 'px', value: track }\n }\n if (track === 'auto') {\n return { type: 'auto', value: 0 }\n }\n if (typeof track === 'string') {\n if (track.endsWith('fr')) {\n return { type: 'fr', value: parseFloat(track) }\n }\n if (track.endsWith('%')) {\n return { type: '%', value: parsePercentage(track, availableSpace) }\n }\n if (track.endsWith('px')) {\n return { type: 'px', value: parseFloat(track) }\n }\n // Try parsing as number (px) if just string \"100\"\n const num = parseFloat(track)\n if (!isNaN(num)) return { type: 'px', value: num }\n }\n return { type: 'auto', value: 0 }\n }\n\n /**\n * Parses the gap property into pixels.\n */\n private getGapPixels(gap: GridProps['gap'], width: number, height: number) {\n let rowGap = 0\n let colGap = 0\n\n if (typeof gap === 'number') {\n rowGap = colGap = gap\n } else if (typeof gap === 'string') {\n const val = parsePercentage(gap, width) // Use width as base for simplicity if %\n rowGap = colGap = val\n } else if (gap && typeof gap === 'object') {\n const colVal = gap.Column ?? gap.All ?? 0\n const rowVal = gap.Row ?? gap.All ?? 0\n colGap = parsePercentage(colVal as string | number, width)\n rowGap = parsePercentage(rowVal as string | number, height)\n }\n\n return { rowGap, colGap }\n }\n\n /**\n * Update layout calculations after the initial layout is computed.\n */\n protected override updateLayoutBasedOnComputedSize() {\n // 1. Get Container Dimensions\n let width = this.node.getComputedWidth()\n const parent = this.node.getParent()\n\n if (parent) {\n const parentWidth = parent.getWidth()\n const parentMinWidth = parent.getMinWidth()\n const parentMaxWidth = parent.getMaxWidth()\n\n // Parent has % minWidth but no hard width/maxWidth constraint\n const hasPercentMinWidth = parentMinWidth.unit === Style.Unit.Percent\n const hasExplicitWidth = parentWidth.unit !== Style.Unit.Undefined && parentWidth.unit !== Style.Unit.Auto\n const hasMaxWidth = parentMaxWidth.unit !== Style.Unit.Undefined && parentMaxWidth.unit !== Style.Unit.Auto\n\n if (hasPercentMinWidth && !hasExplicitWidth && !hasMaxWidth) {\n const grandparent = parent.getParent()\n if (grandparent) {\n const intendedWidth = (parentMinWidth.value / 100) * grandparent.getComputedWidth()\n\n // Check if parent has flexGrow - if so, don't constrain\n const parentFlexGrow = parent.getFlexGrow()\n if (parentFlexGrow > 0) {\n // Allow expansion - use computed width\n } else {\n // No flexGrow - constrain to minWidth\n width = Math.min(width, intendedWidth)\n }\n }\n }\n }\n\n const paddingLeft = this.node.getComputedPadding(Style.Edge.Left)\n const paddingRight = this.node.getComputedPadding(Style.Edge.Right)\n const paddingTop = this.node.getComputedPadding(Style.Edge.Top)\n const paddingBottom = this.node.getComputedPadding(Style.Edge.Bottom)\n\n const contentWidth = Math.max(0, width - paddingLeft - paddingRight)\n const computedHeight = this.node.getComputedHeight()\n const contentHeight = Math.max(0, computedHeight - paddingTop - paddingBottom)\n\n const { templateColumns, templateRows, autoRows = 'auto', gap, columns } = this.props as GridProps\n\n // 2. Resolve Gaps\n const { rowGap, colGap } = this.getGapPixels(gap, contentWidth, contentHeight)\n\n // 3. Resolve Columns (Tracks)\n let explicitColTracks: GridTrackSize[] = templateColumns || []\n if (explicitColTracks.length === 0 && columns) {\n explicitColTracks = Array(columns).fill('1fr')\n }\n if (explicitColTracks.length === 0) explicitColTracks = ['1fr']\n\n const resolvedColTracks = this.resolveTracks(explicitColTracks, contentWidth, colGap)\n\n // Pre-calculate Col Offsets needed for placement/width\n const colOffsetsValues = [0]\n for (let i = 0; i < resolvedColTracks.length; i++) {\n colOffsetsValues.push(colOffsetsValues[i] + resolvedColTracks[i] + colGap)\n }\n\n // 4. Place Items & Resolve Explicit Row Tracks\n const explicitRowTracks = templateRows || []\n const resolvedExplicitRowTracks = this.resolveTracks(explicitRowTracks, contentHeight, rowGap)\n\n const cells: boolean[][] = [] // true if occupied\n const items: { node: BoxNode; rowStart: number; rowEnd: number; colStart: number; colEnd: number }[] = []\n\n const isOccupied = (r: number, c: number) => {\n if (!cells[r]) return false\n return cells[r][c] === true\n }\n const setOccupied = (r: number, c: number) => {\n if (!cells[r]) cells[r] = []\n cells[r][c] = true\n }\n\n let cursorRow = 0\n let cursorCol = 0\n\n for (const child of this.children) {\n const childProps = child.props as GridItemProps\n const { gridColumn, gridRow } = childProps\n\n let colStart: number | undefined\n let colEnd: number | undefined\n let colSpan = 1\n let rowStart: number | undefined\n let rowEnd: number | undefined\n let rowSpan = 1\n\n // ... Grid Placement Logic ...\n if (gridColumn) {\n const parts = gridColumn.split('/').map(s => s.trim())\n if (parts[0]) {\n if (parts[0].startsWith('span')) {\n colSpan = parseInt(parts[0].replace('span', '')) || 1\n } else {\n colStart = parseInt(parts[0]) - 1\n }\n }\n if (parts[1]) {\n if (parts[1].startsWith('span')) {\n const span = parseInt(parts[1].replace('span', '')) || 1\n if (colStart !== undefined) {\n colEnd = colStart + span\n colSpan = span\n } else {\n // If start is undefined but end is span? Unusual. Treat as span.\n colSpan = span\n }\n } else {\n colEnd = parseInt(parts[1]) - 1\n if (colStart !== undefined) {\n colSpan = colEnd - colStart\n }\n }\n }\n }\n\n if (gridRow) {\n const parts = gridRow.split('/').map(s => s.trim())\n if (parts[0]) {\n if (parts[0].startsWith('span')) {\n rowSpan = parseInt(parts[0].replace('span', '')) || 1\n } else {\n rowStart = parseInt(parts[0]) - 1\n }\n }\n if (parts[1]) {\n if (parts[1].startsWith('span')) {\n const span = parseInt(parts[1].replace('span', '')) || 1\n if (rowStart !== undefined) {\n rowEnd = rowStart + span\n rowSpan = span\n } else {\n rowSpan = span\n }\n } else {\n rowEnd = parseInt(parts[1]) - 1\n if (rowStart !== undefined) {\n rowSpan = rowEnd - rowStart\n }\n }\n }\n }\n\n if (colStart !== undefined && rowStart !== undefined) {\n // Fixed position: Check overlap in simpler V1? Or just place?\n // Just place.\n } else {\n // Auto placement\n let placed = false\n while (!placed) {\n if (!cells[cursorRow]) cells[cursorRow] = []\n\n if (colStart !== undefined) cursorCol = colStart\n\n let fits = true\n for (let r = 0; r < rowSpan; r++) {\n for (let c = 0; c < colSpan; c++) {\n if (isOccupied(cursorRow + r, cursorCol + c)) {\n fits = false\n break\n }\n }\n if (!fits) break\n }\n\n if (fits) {\n rowStart = cursorRow\n colStart = cursorCol\n placed = true\n } else {\n cursorCol++\n if (cursorCol + colSpan > resolvedColTracks.length) {\n cursorCol = 0\n cursorRow++\n }\n }\n }\n cursorCol += colSpan\n if (cursorCol >= resolvedColTracks.length) {\n cursorCol = 0\n cursorRow++\n }\n }\n\n rowEnd = (rowStart ?? 0) + rowSpan\n colEnd = (colStart ?? 0) + colSpan\n\n for (let r = rowStart!; r < rowEnd!; r++) {\n for (let c = colStart!; c < colEnd!; c++) {\n setOccupied(r, c)\n }\n }\n\n // CRITICAL FIX: Pre-set width on item to ensure height calculation is accurate later\n const itemColStart = colStart!\n const itemColEnd = colEnd!\n\n // Extend local offsets if needed for spanned columns beyond track count (rare but safe)\n while (colOffsetsValues.length <= itemColEnd) {\n colOffsetsValues.push(colOffsetsValues[colOffsetsValues.length - 1] + 0 + colGap)\n }\n\n const cs = Math.min(itemColStart, colOffsetsValues.length - 1)\n const ce = Math.min(itemColEnd, colOffsetsValues.length - 1)\n const targetWidth = Math.max(0, colOffsetsValues[ce] - colOffsetsValues[cs] - colGap)\n\n child.node.setWidth(targetWidth)\n child.node.calculateLayout(targetWidth, Number.NaN, Style.Direction.LTR)\n\n // Recursively finalize nested children (e.g. inner Grids) so their\n // computed heights are accurate before we measure row sizes.\n child.finalizeLayout()\n if (child.node.isDirty()) {\n child.node.calculateLayout(targetWidth, Number.NaN, Style.Direction.LTR)\n }\n\n items.push({ node: child, rowStart: rowStart!, rowEnd: rowEnd!, colStart: itemColStart, colEnd: itemColEnd })\n }\n\n // 6. Finalize Rows (Implicit)\n const totalRowsNeeded = Math.max(resolvedExplicitRowTracks.length, ...items.map(i => i.rowEnd))\n const resolvedRowTracks = [...resolvedExplicitRowTracks]\n\n // Fill implicit rows\n for (let r = resolvedExplicitRowTracks.length; r < totalRowsNeeded; r++) {\n let rowSize = 0\n\n // Better 'auto' handling:\n if (autoRows === 'auto') {\n const rowItems = items.filter(i => i.rowStart === r && i.rowEnd - i.rowStart === 1)\n for (const item of rowItems) {\n rowSize = Math.max(rowSize, item.node.node.getComputedHeight())\n }\n } else {\n const parsed = this.parseTrack(autoRows, contentHeight)\n rowSize = parsed.value\n }\n resolvedRowTracks.push(rowSize)\n }\n\n // 6. Calculate Offsets (Rows) & Final Layout Application\n const colOffsets = colOffsetsValues // Re-use\n const rowOffsets = [0]\n for (let i = 0; i < resolvedRowTracks.length; i++) {\n let size = resolvedRowTracks[i]\n // Re-check auto-sized explicit rows (value 0)\n if (size === 0) {\n const rowItems = items.filter(it => it.rowStart === i && it.rowEnd - it.rowStart === 1)\n for (const item of rowItems) {\n size = Math.max(size, item.node.node.getComputedHeight())\n }\n resolvedRowTracks[i] = size\n }\n rowOffsets.push(rowOffsets[i] + size + rowGap)\n }\n\n // 7. Apply Positions\n for (const item of items) {\n const x = colOffsets[item.colStart] + paddingLeft\n\n while (colOffsets.length <= item.colEnd) {\n colOffsets.push(colOffsets[colOffsets.length - 1] + 0 + colGap)\n }\n\n const widthStart = colOffsets[item.colStart]\n const widthEnd = colOffsets[item.colEnd]\n const totalWidth = Math.max(0, widthEnd - widthStart - colGap)\n\n const y = rowOffsets[item.rowStart] + paddingTop\n\n const heightStart = rowOffsets[item.rowStart]\n const heightEnd = rowOffsets[item.rowEnd]\n const totalHeight = Math.max(0, heightEnd - heightStart - rowGap)\n\n const childNode = item.node.node\n\n if (childNode.getPositionType() !== Style.PositionType.Absolute) {\n childNode.setPositionType(Style.PositionType.Absolute)\n }\n\n if (childNode.getPosition(Style.Edge.Left).value !== x) {\n childNode.setPosition(Style.Edge.Left, x)\n }\n if (childNode.getPosition(Style.Edge.Top).value !== y) {\n childNode.setPosition(Style.Edge.Top, y)\n }\n\n if (childNode.getWidth().unit !== Style.Unit.Point || Math.abs(childNode.getWidth().value - totalWidth) > 0.1) {\n childNode.setWidth(totalWidth)\n }\n if (childNode.getHeight().unit !== Style.Unit.Point || Math.abs(childNode.getHeight().value - totalHeight) > 0.1) {\n childNode.setHeight(totalHeight)\n }\n }\n\n // 9. Update Grid Height\n const totalGridHeight = Math.max(0, rowOffsets[rowOffsets.length - 1] - rowGap)\n const currentHeightStyle = this.node.getHeight()\n if (currentHeightStyle.unit === Style.Unit.Auto || currentHeightStyle.unit === Style.Unit.Undefined) {\n const targetTotalHeight = totalGridHeight + paddingTop + paddingBottom\n this.node.setHeight(targetTotalHeight)\n }\n }\n\n /**\n * Resolves track sizes to pixels.\n */\n private resolveTracks(tracks: GridTrackSize[], availableSpace: number, gap: number): number[] {\n const resolved: number[] = []\n let usedSpace = 0\n let totalFr = 0\n const frIndices: number[] = []\n\n tracks.forEach((t, i) => {\n const parsed = this.parseTrack(t, availableSpace)\n if (parsed.type === 'px' || parsed.type === '%') {\n resolved[i] = parsed.value\n usedSpace += parsed.value\n } else if (parsed.type === 'fr') {\n totalFr += parsed.value\n resolved[i] = 0\n frIndices.push(i)\n } else {\n resolved[i] = 0\n }\n })\n\n const totalGaps = Math.max(0, tracks.length - 1) * gap\n usedSpace += totalGaps\n\n const remainingSpace = Math.max(0, availableSpace - usedSpace)\n if (totalFr > 0) {\n frIndices.forEach(i => {\n const parsed = this.parseTrack(tracks[i], availableSpace)\n const share = (parsed.value / totalFr) * remainingSpace\n resolved[i] = share\n })\n }\n\n return resolved\n }\n}\n\n/**\n * Factory function to create a new GridNode instance.\n */\nexport const Grid = ({ children, ...rest }: GridProps): CanvasElement => ({\n __type: 'Grid',\n props: rest,\n children: normalizeDescriptorChildren(children),\n})\n"],"names":["BoxNode","RowNode","Style","parsePercentage"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"image.canvas.util.d.ts","sourceRoot":"","sources":["../../../src/canvas/image.canvas.util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACnF,OAAO,EAAE,KAAK,wBAAwB,EAAE,KAAK,IAAI,WAAW,EAAa,MAAM,aAAa,CAAA;AAC5F,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAuBxD;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAA;AAEhE;;;GAGG;AACH,qBAAa,SAAU,SAAQ,OAAO;IAC5B,KAAK,EAAE,UAAU,GAAG,SAAS,CAAA;IACrC,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,YAAY,CAAI;IACxB,OAAO,CAAC,aAAa,CAAI;IACzB,OAAO,CAAC,cAAc,CAA6B;gBAEvC,KAAK,EAAE,UAAU;IAYtB,IAAI,CAAC,KAAK,CAAC,EAAE,gBAAgB,EAAE,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjF;;;;;;OAMG;YACW,iBAAiB;IA4E/B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,UAAU;IAoEX,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzC;;;OAGG;cACgB,cAAc,CAAC,GAAG,EAAE,wBAAwB,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAoJrH;AAED;;GAEG;AACH,eAAO,MAAM,KAAK,GAAI,OAAO,UAAU,KAAG,aAGxC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"image.canvas.util.js","sources":["../../../../src/canvas/image.canvas.util.ts"],"sourcesContent":["import type { BaseProps, ImageProps, CanvasElement } from '@/canvas/canvas.type.js'\nimport { type CanvasRenderingContext2D, Image as CanvasImage, loadImage } from 'skia-canvas'\nimport { BoxNode } from '@/canvas/layout.canvas.util.js'\nimport { drawRoundedRectPath, parseBorderRadius } from '@/canvas/canvas.helper.js'\nimport { promises as fs } from 'fs'\nimport { Style } from '@/constant/common.const.js'\nimport { hashBuffer, readDiskCache, writeDiskCache } from '@/util/disk.cache.js'\n\n/**\n * Calculates pixel offset for image positioning based on percentage or pixel values.\n * This handles centering, edge alignment, and percentage-based positioning.\n */\nfunction calculateOffsetFromValue(positionValue: number | `${number}%` | undefined, availableSpace: number): number {\n const value = positionValue ?? '50%'\n if (typeof value === 'number') {\n return value\n }\n if (typeof value === 'string' && value.endsWith('%')) {\n const percentage = parseFloat(value) / 100\n return availableSpace * percentage\n }\n console.warn(`[ImageNode] Invalid objectPosition value format: ${value}. Defaulting to 50%.`)\n return availableSpace * 0.5\n}\n\n/**\n * Per-render image cache — keyed by `src|color` for string sources.\n * Scoped to a single RootNode.render() call; discarded after rendering.\n * Deduplicates concurrent fetches when multiple ImageNodes share the same src.\n */\nexport type RenderImageCache = Map<string, Promise<CanvasImage>>\n\n/**\n * Renders images with configurable sizing, positioning, and effects.\n * Supports object-fit modes, positioning, border radius, and saturation filters.\n */\nexport class ImageNode extends BoxNode {\n declare props: ImageProps & BaseProps\n private loadedImage: CanvasImage | null = null\n private naturalWidth = 0\n private naturalHeight = 0\n private loadingPromise: Promise<void> | null = null\n\n constructor(props: ImageProps) {\n super({ name: 'Image', ...props, children: undefined })\n\n this.props = {\n objectFit: 'fill',\n overflow: Style.Overflow.Hidden,\n saturate: 1,\n objectPosition: { Left: '50%', Top: '50%' },\n ...props,\n }\n }\n\n public load(cache?: RenderImageCache, diskCacheKeys?: Set<string>): Promise<void> {\n if (!this.loadingPromise) {\n this.loadingPromise = this._loadImage(cache, diskCacheKeys)\n }\n return this.loadingPromise\n }\n\n /**\n * Fetches and processes the image source into a CanvasImage.\n * Does not touch node state — pure fetch logic.\n *\n * If `diskCacheKey` and `diskCacheKeys` are provided, the resolved image buffer\n * is written to disk and the key is recorded so the caller can clean it up later.\n */\n private async _fetchCanvasImage(diskCacheKey?: string, diskCacheKeys?: Set<string>): Promise<CanvasImage> {\n const { fileTypeFromBuffer, fileTypeFromFile } = await import('file-type')\n let finalSource: string | Buffer = this.props.src\n let isSvg = false\n let contentBuffer: Buffer | null = null\n let detectedMime: string | undefined\n\n if (typeof this.props.src === 'string') {\n if (this.props.src.startsWith('http')) {\n const response = await fetch(this.props.src)\n if (!response.ok) {\n throw new Error(`HTTP error ${response.status} fetching image: ${this.props.src}`)\n }\n const imageArrayBuffer = await response.arrayBuffer()\n contentBuffer = Buffer.from(imageArrayBuffer)\n finalSource = contentBuffer\n\n const fileTypeResult = await fileTypeFromBuffer(contentBuffer)\n detectedMime = fileTypeResult?.mime\n isSvg = detectedMime === 'image/svg+xml'\n\n if ((!detectedMime || detectedMime === 'application/xml') && contentBuffer.toString('utf-8').includes('<svg')) {\n isSvg = true\n }\n } else {\n finalSource = this.props.src\n const filePath = this.props.src\n\n try {\n const fileTypeResult = await fileTypeFromFile(filePath)\n detectedMime = fileTypeResult?.mime\n isSvg = detectedMime === 'image/svg+xml'\n\n if ((!detectedMime || detectedMime === 'application/xml') && filePath.toLowerCase().endsWith('.svg')) {\n isSvg = true\n }\n } catch {\n isSvg = filePath.toLowerCase().endsWith('.svg')\n }\n\n if (isSvg && this.props.color) {\n try {\n contentBuffer = await fs.readFile(filePath)\n } catch {\n isSvg = false\n contentBuffer = null\n }\n }\n }\n } else {\n contentBuffer = this.props.src\n finalSource = contentBuffer\n\n const fileTypeResult = await fileTypeFromBuffer(contentBuffer)\n detectedMime = fileTypeResult?.mime\n isSvg = detectedMime === 'image/svg+xml'\n }\n\n if (isSvg && this.props.color && contentBuffer) {\n const svgString = contentBuffer.toString('utf-8')\n const modifiedSvgString = svgString.replace(/fill=\"[^\"]*\"/g, `fill=\"${this.props.color}\"`)\n finalSource = modifiedSvgString !== svgString ? Buffer.from(modifiedSvgString) : contentBuffer\n }\n\n // Write to disk and track the key so the render owner can clean it up\n if (diskCacheKey && diskCacheKeys) {\n const cacheBuffer = Buffer.isBuffer(finalSource) ? finalSource : contentBuffer\n if (cacheBuffer) {\n await writeDiskCache(diskCacheKey, cacheBuffer)\n diskCacheKeys.add(diskCacheKey)\n }\n }\n\n return loadImage(finalSource as never)\n }\n\n /**\n * Loads and processes an image.\n *\n * Resolution order:\n * 1. Disk cache at `.cache/files/<hash>` — survives process restarts.\n * 2. Per-render dedup cache — avoids duplicate in-flight fetches when\n * multiple ImageNodes share the same src within one render pass.\n * 3. Fresh fetch via `_fetchCanvasImage()` — writes buffer to disk cache.\n *\n * Buffer sources use a SHA-256 hash as their cache key (same as string sources).\n * All resolved images are released when the render completes (no cross-render retention).\n */\n private _loadImage(cache?: RenderImageCache, diskCacheKeys?: Set<string>): Promise<void> {\n if (!this.props.src) {\n const aspectRatioFromProps = typeof this.props.aspectRatio === 'number' && this.props.aspectRatio > 0 ? this.props.aspectRatio : undefined\n this.node.setAspectRatio(aspectRatioFromProps)\n this.naturalWidth = 0\n this.naturalHeight = 0\n return Promise.resolve()\n }\n\n return new Promise(resolve => {\n const load = async () => {\n try {\n const srcHash = typeof this.props.src === 'string' ? hashBuffer(Buffer.from(this.props.src)) : hashBuffer(this.props.src)\n const cacheKey = this.props.color ? `${srcHash}|${this.props.color}` : srcHash\n\n // 1. Disk cache read — only when disk caching is enabled for this render\n if (diskCacheKeys) {\n const diskBuffer = await readDiskCache(cacheKey)\n if (diskBuffer) {\n const img = await loadImage(diskBuffer as never)\n this.loadedImage = img\n this.naturalWidth = img.width\n this.naturalHeight = img.height\n const calculatedAspectRatio = img.width > 0 && img.height > 0 ? img.width / img.height : undefined\n const finalAspectRatio = typeof this.props.aspectRatio === 'number' && this.props.aspectRatio > 0 ? this.props.aspectRatio : calculatedAspectRatio\n this.node.setAspectRatio(finalAspectRatio)\n this.props.onLoad?.()\n resolve()\n return\n }\n }\n\n // 2. Per-render memory dedup cache or fresh fetch\n let imagePromise: Promise<CanvasImage>\n if (cache) {\n if (!cache.has(cacheKey)) {\n cache.set(cacheKey, this._fetchCanvasImage(diskCacheKeys ? cacheKey : undefined, diskCacheKeys))\n }\n imagePromise = cache.get(cacheKey)!\n } else {\n imagePromise = this._fetchCanvasImage(diskCacheKeys ? cacheKey : undefined, diskCacheKeys)\n }\n\n const img = await imagePromise\n\n this.loadedImage = img\n this.naturalWidth = img.width\n this.naturalHeight = img.height\n\n const calculatedAspectRatio = this.naturalWidth > 0 && this.naturalHeight > 0 ? this.naturalWidth / this.naturalHeight : undefined\n const finalAspectRatio = typeof this.props.aspectRatio === 'number' && this.props.aspectRatio > 0 ? this.props.aspectRatio : calculatedAspectRatio\n\n this.node.setAspectRatio(finalAspectRatio)\n this.props.onLoad?.()\n resolve()\n } catch (error: any) {\n this.naturalWidth = 0\n this.naturalHeight = 0\n const finalAspectRatioOnError = typeof this.props.aspectRatio === 'number' && this.props.aspectRatio > 0 ? this.props.aspectRatio : undefined\n this.node.setAspectRatio(finalAspectRatioOnError)\n this.props.onError?.(error)\n resolve()\n }\n }\n load()\n })\n }\n\n public getLoadingPromise(): Promise<void> {\n return this.loadingPromise ?? this.load()\n }\n\n /**\n * Renders the image with correct sizing, clipping, and positioning.\n * Handles object-fit, object-position, and visual effects like saturation.\n */\n protected override _renderContent(ctx: CanvasRenderingContext2D, x: number, y: number, width: number, height: number) {\n super._renderContent(ctx, x, y, width, height)\n\n if (!this.loadedImage || width <= 0 || height <= 0) return\n const img = this.loadedImage\n const imgW = this.naturalWidth\n const imgH = this.naturalHeight\n if (imgW <= 0 || imgH <= 0) return\n\n // Calculate content box accounting for padding and borders\n const paddingLeft = this.node.getComputedPadding(Style.Edge.Left)\n const paddingTop = this.node.getComputedPadding(Style.Edge.Top)\n const paddingRight = this.node.getComputedPadding(Style.Edge.Right)\n const paddingBottom = this.node.getComputedPadding(Style.Edge.Bottom)\n const borderLeft = this.node.getComputedBorder(Style.Edge.Left)\n const borderTop = this.node.getComputedBorder(Style.Edge.Top)\n const borderRight = this.node.getComputedBorder(Style.Edge.Right)\n const borderBottom = this.node.getComputedBorder(Style.Edge.Bottom)\n const contentX = x + borderLeft + paddingLeft\n const contentY = y + borderTop + paddingTop\n const contentWidth = Math.max(0, width - borderLeft - paddingLeft - borderRight - paddingRight)\n const contentHeight = Math.max(0, height - borderTop - paddingTop - borderBottom - paddingBottom)\n\n if (contentWidth <= 0 || contentHeight <= 0) return\n\n // Apply clipping for border radius\n ctx.save()\n const outerRadii = parseBorderRadius(this.props.borderRadius)\n const innerBorderRadii = {\n TopLeft: Math.max(0, outerRadii.TopLeft - borderTop),\n TopRight: Math.max(0, outerRadii.TopRight - borderTop),\n BottomRight: Math.max(0, outerRadii.BottomRight - borderBottom),\n BottomLeft: Math.max(0, outerRadii.BottomLeft - borderBottom),\n }\n const contentRadii = {\n TopLeft: Math.max(0, innerBorderRadii.TopLeft - Math.max(paddingLeft, paddingTop)),\n TopRight: Math.max(0, innerBorderRadii.TopRight - Math.max(paddingRight, paddingTop)),\n BottomRight: Math.max(0, innerBorderRadii.BottomRight - Math.max(paddingRight, paddingBottom)),\n BottomLeft: Math.max(0, innerBorderRadii.BottomLeft - Math.max(paddingLeft, paddingBottom)),\n }\n drawRoundedRectPath(ctx, contentX, contentY, contentWidth, contentHeight, contentRadii)\n ctx.clip()\n\n // Calculate image dimensions based on object-fit\n const nodeRatio = contentWidth / contentHeight\n const imgRatio = imgW / imgH\n const objectFit = this.props.objectFit\n let dw = contentWidth\n let dh = contentHeight\n\n if (objectFit === 'contain') {\n if (imgRatio > nodeRatio) {\n dw = contentWidth\n dh = contentWidth / imgRatio\n } else {\n dh = contentHeight\n dw = contentHeight * imgRatio\n }\n } else if (objectFit === 'cover') {\n if (imgRatio > nodeRatio) {\n dh = contentHeight\n dw = contentHeight * imgRatio\n } else {\n dw = contentWidth\n dh = contentWidth / imgRatio\n }\n } else if (objectFit === 'none') {\n dw = imgW\n dh = imgH\n } else if (objectFit === 'scale-down') {\n if (imgW <= contentWidth && imgH <= contentHeight) {\n dw = imgW\n dh = imgH\n } else {\n if (imgRatio > nodeRatio) {\n dw = contentWidth\n dh = contentWidth / imgRatio\n } else {\n dh = contentHeight\n dw = contentHeight * imgRatio\n }\n }\n }\n\n // Calculate image position based on object-position\n const sx = 0\n const sy = 0\n const sw = imgW\n const sh = imgH\n\n const availableWidth = contentWidth - dw\n const availableHeight = contentHeight - dh\n const posProps = this.props.objectPosition || {}\n const horizontalValue = posProps.Left !== undefined ? posProps.Left : posProps.Right !== undefined ? posProps.Right : '50%'\n const verticalValue = posProps.Top !== undefined ? posProps.Top : posProps.Bottom !== undefined ? posProps.Bottom : '50%'\n\n let offsetX = calculateOffsetFromValue(horizontalValue, availableWidth)\n let offsetY = calculateOffsetFromValue(verticalValue, availableHeight)\n\n if (posProps.Left === undefined && posProps.Right !== undefined) {\n offsetX = availableWidth - offsetX\n }\n if (posProps.Top === undefined && posProps.Bottom !== undefined) {\n offsetY = availableHeight - offsetY\n }\n\n const dx = contentX + offsetX\n const dy = contentY + offsetY\n\n // Draw image with filters\n ctx.save()\n try {\n if (this.props.dropShadow) {\n const shadow = this.props.dropShadow\n const shadowBlur = Math.max(shadow.offsetX ?? 0, shadow.offsetY ?? 0)\n ctx.shadowOffsetX = shadow.offsetX ?? 0\n ctx.shadowOffsetY = shadow.offsetY ?? 0\n ctx.shadowBlur = Math.max(0, shadow.blur ?? shadowBlur)\n ctx.shadowColor = shadow.color ?? 'black'\n }\n\n const saturateValue = this.props.saturate ?? 1\n let filterString = ''\n if (saturateValue !== 1) {\n filterString += `saturate(${saturateValue * 100}%) `\n }\n\n if (filterString) {\n const currentFilter = ctx.filter && ctx.filter !== 'none' ? ctx.filter + ' ' : ''\n ctx.filter = currentFilter + filterString.trim()\n }\n\n const finalDX = Math.floor(dx)\n const finalDY = Math.floor(dy)\n const finalDW = Math.ceil(dw + (dx - finalDX))\n const finalDH = Math.ceil(dh + (dy - finalDY))\n\n if (finalDW > 0 && finalDH > 0) {\n ctx.drawImage(img, sx, sy, sw, sh, finalDX, finalDY, finalDW, finalDH)\n }\n } catch (drawError) {\n console.error('[ImageNode] Error drawing image:', drawError)\n } finally {\n ctx.restore()\n }\n\n ctx.restore()\n }\n}\n\n/**\n * Factory function to create ImageNode instances\n */\nexport const Image = (props: ImageProps): CanvasElement => ({\n __type: 'Image',\n props: props as Omit<ImageProps, 'onLoad' | 'onError'>,\n})\n"],"names":["BoxNode","Style","fs","writeDiskCache","loadImage","hashBuffer","readDiskCache","parseBorderRadius","drawRoundedRectPath"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"layout.canvas.util.d.ts","sourceRoot":"","sources":["../../../src/canvas/layout.canvas.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAEnE,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAkB,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAGjG,OAAa,EAAS,IAAI,EAAE,MAAM,4BAA4B,CAAA;AAE9D;;;;GAIG;AACH,qBAAa,OAAO;IAClB;;OAEG;IACH,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;IAE/B;;OAEG;IACH,IAAI,EAAE,IAAI,CAAA;IAEV;;OAEG;IACH,QAAQ,EAAE,OAAO,EAAE,CAAA;IAEnB;;OAEG;IACH,KAAK,EAAE,QAAQ,GAAG,SAAS,CAAA;IAE3B;;OAEG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IAEtB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IAEZ;;;OAGG;gBACS,KAAK,GAAE,QAAQ,GAAG,SAAc;IAqB5C;;OAEG;IACI,sBAAsB;IAW7B;;;OAGG;IACH,SAAS,CAAC,sBAAsB,CAAC,WAAW,EAAE,QAAQ,GAAG,SAAS;IAkClE;;OAEG;IACH,SAAS,CAAC,aAAa,IAAI,IAAI;IAI/B;;;;OAIG;IACH,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM;IAanD;;;OAGG;IACI,cAAc,IAAI,OAAO;IAiBhC;;OAEG;IACH,SAAS,CAAC,+BAA+B;IAIzC;;;OAGG;IACH,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ;IAqInC;;;;;OAKG;IACH,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,OAAO,GAAE,MAAU,EAAE,OAAO,GAAE,MAAU;IA+J9E;;;;;;;;OAQG;IACH,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,wBAAwB,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAoR5G;AAWD;;;;GAIG;AACH,eAAO,MAAM,GAAG,GAAI,uBAAuB,QAAQ,KAAG,aAIpD,CAAA;AAEF;;;GAGG;AACH,qBAAa,UAAW,SAAQ,OAAO;gBACzB,KAAK,GAAE,QAAQ,GAAG,SAAc;CAS7C;AAED;;;;GAIG;AACH,eAAO,MAAM,MAAM,GAAI,uBAAuB,QAAQ,KAAG,aAIvD,CAAA;AAEF;;;GAGG;AACH,qBAAa,OAAQ,SAAQ,OAAO;gBACtB,KAAK,GAAE,QAAQ,GAAG,SAAc;CAS7C;AAED;;;;GAIG;AACH,eAAO,MAAM,GAAG,GAAI,uBAAuB,QAAQ,KAAG,aAIpD,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"layout.canvas.util.js","sources":["../../../../src/canvas/layout.canvas.util.ts"],"sourcesContent":["import { Canvas, type CanvasRenderingContext2D } from 'skia-canvas'\nimport { drawBorders, drawRoundedRectPath, parseBorderRadius, parsePercentage } from '@/canvas/canvas.helper.js'\nimport type { BaseProps, BoxProps, BoxShadowProps, CanvasElement } from '@/canvas/canvas.type.js'\nimport { omit } from 'lodash-es'\nimport tinycolor from 'tinycolor2'\nimport Yoga, { Style, Node } from '@/constant/common.const.js'\n\n/**\n * @class BoxNode\n * @classdesc Base node class for rendering rectangular boxes with layout, styling, and children.\n * It uses the Yoga layout engine for positioning and sizing.\n */\nexport class BoxNode {\n /**\n * @property {Partial<BoxProps>} initialProps - Original props passed to the constructor before any modifications.\n */\n initialProps: Partial<BoxProps>\n\n /**\n * @property {Node} node - The Yoga layout engine node.\n */\n node: Node\n\n /**\n * @property {BoxNode[]} children - Child nodes.\n */\n children: BoxNode[]\n\n /**\n * @property {BoxProps & BaseProps} props - Current props including defaults and inherited values.\n */\n props: BoxProps & BaseProps\n\n /**\n * @property {string} name - Node type name.\n */\n readonly name?: string\n\n /**\n * @property {string} key - Unique node identifier.\n */\n key?: string\n\n /**\n * Creates a new BoxNode instance\n * @param props Initial box properties and styling\n */\n constructor(props: BoxProps & BaseProps = {}) {\n const children = (Array.isArray(props?.children) ? props.children : [props.children]).filter(child => child)\n this.initialProps = { ...props, children }\n this.node = Yoga.Node.create()\n this.children = []\n\n this.props = {\n key: this.key,\n borderColor: 'black',\n borderStyle: Style.Border.Solid,\n boxSizing: Style.BoxSizing.BorderBox,\n opacity: 1,\n flexShrink: 1,\n ...this.initialProps,\n }\n this.name = this.props.name || 'Box'\n this.key = this.props.key || `${this.name}-0`\n\n this.setLayout(this.props)\n }\n\n /**\n * Processes and appends any children passed in the initial props.\n */\n public processInitialChildren() {\n if (this.props.children) {\n const childrenToAdd = Array.isArray(this.props.children) ? this.props.children : [this.props.children]\n childrenToAdd.forEach((child, index) => {\n if (child) {\n this.appendChild(child as BoxNode, index)\n }\n })\n }\n }\n\n /**\n * Inherits styles from the parent node.\n * @param {BoxProps & BaseProps} parentProps Parent node properties to inherit from.\n */\n protected resolveInheritedStyles(parentProps: BoxProps & BaseProps) {\n if (parentProps.key) {\n this.key = `${parentProps.key}-${this.key}`\n this.props.key = this.key\n }\n\n const inheritableKeys = [\n 'fontSize',\n 'fontFamily',\n 'fontWeight',\n 'fontStyle',\n 'color',\n 'textAlign',\n 'verticalAlign',\n 'lineHeight',\n 'lineGap',\n 'letterSpacing',\n 'wordSpacing',\n 'textDecoration',\n 'maxLines',\n 'fontVariant',\n ]\n\n for (const key of inheritableKeys) {\n if (this.initialProps[key] === undefined && parentProps[key] !== undefined) {\n this.props[key] = parentProps[key]\n }\n }\n\n if (!this.node.isDirty()) {\n this.node.markDirty()\n }\n }\n\n /**\n * Applies node type-specific default values after inheritance.\n */\n protected applyDefaults(): void {\n // Base implementation does nothing; subclasses can override.\n }\n\n /**\n * Appends a child node at the specified index.\n * @param {BoxNode} child Child node to append.\n * @param index Index to insert child at\n */\n protected appendChild(child: BoxNode, index: number) {\n if (!child || !child.node) {\n console.warn('Attempted to append an invalid child node.', child)\n return\n }\n\n child.resolveInheritedStyles(omit(this.props, 'children'))\n child.applyDefaults()\n this.children.push(child)\n this.node.insertChild(child.node, index)\n child.processInitialChildren()\n }\n\n /**\n * Performs final layout adjustments recursively after the main layout calculation.\n * @returns {boolean} Whether any node was marked as dirty during finalization.\n */\n public finalizeLayout(): boolean {\n let wasDirty = false\n this.updateLayoutBasedOnComputedSize()\n if (this.node.isDirty()) {\n wasDirty = true\n }\n\n for (const child of this.children) {\n child.finalizeLayout()\n if (child.node.isDirty()) {\n wasDirty = true\n }\n }\n\n return wasDirty\n }\n\n /**\n * Hook for subclasses to update layout based on computed size.\n */\n protected updateLayoutBasedOnComputedSize() {\n // Base implementation does nothing; subclasses can override.\n }\n\n /**\n * Applies layout properties to the Yoga node.\n * @param props Box properties containing layout values\n */\n protected setLayout(props: BoxProps) {\n // --- Yoga layout property application ---\n // (This entire block remains unchanged as it interacts with Yoga, not the canvas library)\n const {\n width,\n height,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n flexDirection,\n justifyContent,\n alignItems,\n alignSelf,\n alignContent,\n flexGrow,\n flexShrink,\n flexBasis,\n positionType,\n position,\n gap,\n margin,\n padding,\n border,\n aspectRatio,\n overflow,\n display,\n boxSizing = Style.BoxSizing.BorderBox,\n direction = Style.Direction.LTR,\n flexWrap,\n } = props\n\n if (width !== undefined) this.node.setWidth(width)\n if (height !== undefined) this.node.setHeight(height)\n if (minWidth !== undefined) this.node.setMinWidth(minWidth)\n if (minHeight !== undefined) this.node.setMinHeight(minHeight)\n if (maxWidth !== undefined) this.node.setMaxWidth(maxWidth)\n if (maxHeight !== undefined) this.node.setMaxHeight(maxHeight)\n if (flexDirection !== undefined) this.node.setFlexDirection(flexDirection)\n if (justifyContent !== undefined) this.node.setJustifyContent(justifyContent)\n if (alignItems !== undefined) this.node.setAlignItems(alignItems)\n if (alignSelf !== undefined) this.node.setAlignSelf(alignSelf)\n if (alignContent !== undefined) this.node.setAlignContent(alignContent)\n if (flexGrow !== undefined) this.node.setFlexGrow(flexGrow)\n if (flexShrink !== undefined) this.node.setFlexShrink(flexShrink)\n if (positionType !== undefined) this.node.setPositionType(positionType)\n if (flexBasis !== undefined) this.node.setFlexBasis(flexBasis)\n if (position) {\n if (typeof position === 'number') {\n this.node.setPosition(Style.Edge.All, position)\n } else if (typeof position === 'string' && position.endsWith('%')) {\n this.node.setPositionPercent(Style.Edge.All, parseFloat(position))\n } else {\n for (const [edge, value] of Object.entries(position)) {\n if (edge in Style.Edge) {\n if (typeof value === 'string' && value.endsWith('%')) {\n this.node.setPositionPercent(Style.Edge[edge], parseFloat(value))\n } else {\n this.node.setPosition(Style.Edge[edge], value as number)\n }\n }\n }\n }\n }\n if (gap) {\n if (typeof gap === 'number') {\n this.node.setGap(Style.Gutter.All, gap)\n } else if (typeof gap === 'string' && gap.endsWith('%')) {\n this.node.setGapPercent(Style.Gutter.All, parseFloat(gap))\n } else {\n for (const [gutter, value] of Object.entries(gap)) {\n if (gutter in Style.Gutter) {\n if (typeof value === 'string' && value.endsWith('%')) {\n this.node.setGapPercent(Style.Gutter[gutter], parseFloat(value))\n } else {\n this.node.setGap(Style.Gutter[gutter], value as number)\n }\n }\n }\n }\n }\n if (margin) {\n if (typeof margin === 'number' || margin === 'auto') {\n this.node.setMargin(Style.Edge.All, margin)\n } else if (typeof margin === 'string' && margin.endsWith('%')) {\n this.node.setMarginPercent(Style.Edge.All, parseFloat(margin))\n } else {\n for (const [edge, value] of Object.entries(margin)) {\n if (edge in Style.Edge) {\n if (typeof value === 'string' && value.endsWith('%')) {\n this.node.setMarginPercent(Style.Edge[edge], parseFloat(value))\n } else {\n this.node.setMargin(Style.Edge[edge], value as number)\n }\n }\n }\n }\n }\n if (padding) {\n if (typeof padding === 'number') {\n this.node.setPadding(Style.Edge.All, padding)\n } else if (typeof padding === 'string' && padding.endsWith('%')) {\n this.node.setPaddingPercent(Style.Edge.All, parseFloat(padding))\n } else {\n for (const [edge, value] of Object.entries(padding)) {\n if (edge in Style.Edge) {\n if (typeof value === 'string' && value.endsWith('%')) {\n this.node.setPaddingPercent(Style.Edge[edge], parseFloat(value))\n } else {\n this.node.setPadding(Style.Edge[edge], value as number)\n }\n }\n }\n }\n }\n if (border) {\n if (typeof border === 'number') {\n this.node.setBorder(Style.Edge.All, border)\n } else {\n for (const [edge, value] of Object.entries(border)) {\n if (edge in Style.Edge) this.node.setBorder(Style.Edge[edge], value)\n }\n }\n }\n if (aspectRatio !== undefined) this.node.setAspectRatio(aspectRatio)\n if (overflow !== undefined) this.node.setOverflow(overflow)\n if (display !== undefined) this.node.setDisplay(display)\n if (boxSizing !== undefined) this.node.setBoxSizing(boxSizing)\n if (direction !== undefined) this.node.setDirection(direction)\n if (flexWrap !== undefined) this.node.setFlexWrap(flexWrap)\n // --- End Yoga layout property application ---\n }\n\n /**\n * Renders the node and its children to the canvas.\n * @param {CanvasRenderingContext2D} ctx Canvas rendering context (from skia-canvas).\n * @param {number} offsetX X offset for rendering.\n * @param {number} offsetY Y offset for rendering.\n */\n render(ctx: CanvasRenderingContext2D, offsetX: number = 0, offsetY: number = 0) {\n const layout = this.node.getComputedLayout()\n const x = layout.left + offsetX\n const y = layout.top + offsetY\n const width = layout.width\n const height = layout.height\n\n // Exit early if the node is invisible or has no dimensions.\n if (width <= 0 || height <= 0 || this.props.display === Style.Display.None) {\n return\n }\n\n // --- Opacity Setup ---\n const desiredOpacity = Math.max(0, Math.min(1, this.props.opacity ?? 1))\n let originalAlpha: number | undefined = undefined\n let appliedOpacity = false\n if (desiredOpacity < 1) {\n originalAlpha = ctx.globalAlpha\n ctx.globalAlpha = originalAlpha * desiredOpacity\n appliedOpacity = true\n }\n // --- End Opacity Setup ---\n\n try {\n // --- Transformation Setup ---\n const transform = this.props.transform\n const needsTransform =\n transform && (transform.translateX || transform.translateY || transform.rotate || transform.scale || transform.scaleX || transform.scaleY)\n\n let savedContextForTransform = false\n if (needsTransform) {\n ctx.save()\n savedContextForTransform = true\n const originXRaw = transform.originX ?? '50%'\n const originYRaw = transform.originY ?? '50%'\n const originOffsetX = parsePercentage(originXRaw, width)\n const originOffsetY = parsePercentage(originYRaw, height)\n const originAbsX = x + originOffsetX\n const originAbsY = y + originOffsetY\n ctx.translate(originAbsX, originAbsY)\n if (transform.translateX || transform.translateY) {\n const tx = parsePercentage(transform.translateX, width)\n const ty = parsePercentage(transform.translateY, height)\n if (tx !== 0 || ty !== 0) ctx.translate(tx, ty)\n }\n if (transform.rotate) {\n ctx.rotate((transform.rotate * Math.PI) / 180)\n }\n if (transform.scale || transform.scaleX || transform.scaleY) {\n const scaleX = transform.scaleX ?? transform.scale ?? 1\n const scaleY = transform.scaleY ?? transform.scale ?? 1\n if (scaleX !== 1 || scaleY !== 1) ctx.scale(scaleX, scaleY)\n }\n ctx.translate(-originAbsX, -originAbsY)\n }\n // --- End Transformation Setup ---\n\n // --- Step 1: Render Parent Background/Borders/Content ---\n // This renders the current node's own visual appearance first.\n this._renderContent(ctx, x, y, width, height)\n\n // --- Step 2: Prepare Children for Stacking ---\n const positionedChildren: { node: BoxNode; zIndex: number; originalIndex: number }[] = []\n const inFlowChildren: BoxNode[] = []\n\n this.children.forEach((child, index) => {\n // Check if child participates in zIndex stacking\n if (child.props.positionType === Style.PositionType.Absolute && child.props.zIndex !== undefined) {\n positionedChildren.push({\n node: child,\n zIndex: child.props.zIndex,\n originalIndex: index, // Keep original order for tie-breaking\n })\n } else {\n inFlowChildren.push(child)\n }\n })\n\n // Sort positioned children by zIndex, then by original order\n positionedChildren.sort((a, b) => {\n return a.zIndex - b.zIndex || a.originalIndex - b.originalIndex\n })\n\n // --- Step 3: Handle Clipping (Applies before drawing children) ---\n let savedContextForClip = false\n if (this.props.overflow === Style.Overflow.Hidden && (width > 0 || height > 0)) {\n ctx.save()\n savedContextForClip = true\n const borderLeft = this.node.getComputedBorder(Style.Edge.Left)\n const borderTop = this.node.getComputedBorder(Style.Edge.Top)\n const borderRight = this.node.getComputedBorder(Style.Edge.Right)\n const borderBottom = this.node.getComputedBorder(Style.Edge.Bottom)\n const innerX = x + borderLeft\n const innerY = y + borderTop\n const innerWidth = Math.max(0, width - borderLeft - borderRight)\n const innerHeight = Math.max(0, height - borderTop - borderBottom)\n const outerRadii = parseBorderRadius(this.props.borderRadius)\n const innerRadii = {\n TopLeft: Math.max(0, outerRadii.TopLeft - Math.max(borderLeft, borderTop)),\n TopRight: Math.max(0, outerRadii.TopRight - Math.max(borderRight, borderTop)),\n BottomRight: Math.max(0, outerRadii.BottomRight - Math.max(borderRight, borderBottom)),\n BottomLeft: Math.max(0, outerRadii.BottomLeft - Math.max(borderLeft, borderBottom)),\n }\n if (innerWidth > 0 && innerHeight > 0) {\n drawRoundedRectPath(ctx, innerX, innerY, innerWidth, innerHeight, innerRadii)\n ctx.clip()\n } else {\n ctx.beginPath()\n ctx.rect(innerX, innerY, 0, 0)\n ctx.clip()\n }\n }\n // --- End Clipping Setup ---\n\n // --- Step 4: Render Children in Stacking Order ---\n\n // 4a: Render positioned children with negative zIndex\n for (const item of positionedChildren) {\n if (item.zIndex < 0) {\n // Pass parent's layout origin (x, y) as offset\n item.node.render(ctx, x, y)\n }\n }\n\n // 4b: Render in-flow children (recursively)\n for (const child of inFlowChildren) {\n // Pass parent's layout origin (x, y) as offset\n child.render(ctx, x, y)\n }\n\n // 4c: Render positioned children with zero or positive zIndex\n for (const item of positionedChildren) {\n if (item.zIndex >= 0) {\n // Pass parent's layout origin (x, y) as offset\n item.node.render(ctx, x, y)\n }\n }\n // --- End Child Rendering ---\n\n // --- Step 5: Restore Clipping Context ---\n if (savedContextForClip) {\n ctx.restore()\n }\n // --- End Clipping Restoration ---\n\n // --- Step 6: Restore Transformation Context ---\n if (savedContextForTransform) {\n ctx.restore()\n }\n // --- End Transformation Restoration ---\n } finally {\n // --- Opacity Restoration ---\n if (appliedOpacity && originalAlpha !== undefined) {\n ctx.globalAlpha = originalAlpha\n }\n // --- End Opacity Restoration ---\n }\n }\n\n /**\n * Renders the node's visual content including background fills, shadows, and borders.\n * This is an internal method used by the render() pipeline.\n * @param ctx The skia-canvas 2D rendering context to draw into\n * @param x The absolute x-coordinate where drawing should begin\n * @param y The absolute y-coordinate where drawing should begin\n * @param width The width of the content area to render\n * @param height The height of the content area to render\n */\n protected _renderContent(ctx: CanvasRenderingContext2D, x: number, y: number, width: number, height: number) {\n // Calculate border radius values for all corners\n const radii = { TopLeft: 0, TopRight: 0, BottomRight: 0, BottomLeft: 0 }\n if (this.props.borderRadius) {\n // Handle both number and object border radius specifications\n if (typeof this.props.borderRadius === 'number') {\n radii.TopLeft = radii.TopRight = radii.BottomRight = radii.BottomLeft = this.props.borderRadius\n } else {\n // Extract individual corner radii, defaulting to 0 if not specified\n radii.TopLeft = this.props.borderRadius.TopLeft ?? 0\n radii.TopRight = this.props.borderRadius.TopRight ?? 0\n radii.BottomRight = this.props.borderRadius.BottomRight ?? 0\n radii.BottomLeft = this.props.borderRadius.BottomLeft ?? 0\n }\n // Ensure all radii are non-negative\n radii.TopLeft = Math.max(0, radii.TopLeft)\n radii.TopRight = Math.max(0, radii.TopRight)\n radii.BottomRight = Math.max(0, radii.BottomRight)\n radii.BottomLeft = Math.max(0, radii.BottomLeft)\n }\n\n // Process shadow configurations\n let shadows: BoxShadowProps[] = []\n if (this.props.boxShadow) {\n shadows = Array.isArray(this.props.boxShadow) ? this.props.boxShadow : [this.props.boxShadow]\n }\n // Split shadows into outset (normal) and inset types\n const outsetShadows = shadows.filter(s => !s.inset)\n const insetShadows = shadows.filter(s => s.inset)\n\n // Determine if background is fully opaque for shadow optimization\n const backgroundColor = this.props.backgroundColor\n let isOpaque = false\n if (backgroundColor && !this.props.gradient) {\n const rgba = tinycolor(backgroundColor).toRgb()\n isOpaque = rgba && rgba.a === 1\n }\n\n // Render outset shadows if present\n if (outsetShadows.length > 0) {\n const subtractOffset = 0.75\n if (isOpaque) {\n // Optimized rendering path for opaque backgrounds\n ctx.save()\n ctx.fillStyle = 'black' // Shadow source color\n for (const shadow of outsetShadows) {\n ctx.shadowColor = shadow.color ?? 'black'\n ctx.shadowOffsetX = shadow.offsetX ?? 0\n ctx.shadowOffsetY = shadow.offsetY ?? 0\n ctx.shadowBlur = shadow.blur ?? Math.max(shadow.offsetX ?? 0, shadow.offsetY ?? 0)\n drawRoundedRectPath(ctx, x + subtractOffset / 2, y + subtractOffset / 2, width - subtractOffset, height - subtractOffset, radii)\n ctx.fill()\n }\n ctx.restore()\n } else {\n // Complex shadow rendering for transparent/gradient backgrounds\n let maxBlur = 0\n let maxOffsetX = 0\n let maxOffsetY = 0\n\n // Calculate maximum shadow extents\n for (const shadow of outsetShadows) {\n const currentOffsetX = shadow.offsetX ?? 0\n const currentOffsetY = shadow.offsetY ?? 0\n const currentBlur = shadow.blur ?? Math.max(currentOffsetX, currentOffsetY)\n maxBlur = Math.max(maxBlur, currentBlur)\n maxOffsetX = Math.max(maxOffsetX, Math.abs(currentOffsetX))\n maxOffsetY = Math.max(maxOffsetY, Math.abs(currentOffsetY))\n }\n\n // Calculate offscreen canvas size with padding for shadows\n const blurPaddingMultiplier = 2\n const shadowPadding = Math.ceil(maxBlur * blurPaddingMultiplier + Math.max(maxOffsetX, maxOffsetY))\n const offscreenWidth = Math.ceil(width + shadowPadding * 2)\n const offscreenHeight = Math.ceil(height + shadowPadding * 2)\n\n if (offscreenWidth > 0 && offscreenHeight > 0) {\n // Create temporary canvas for shadow composition\n const offscreenCanvas = new Canvas(offscreenWidth, offscreenHeight)\n const offCtx = offscreenCanvas.getContext('2d')\n offCtx.imageSmoothingEnabled = true\n offCtx.imageSmoothingQuality = 'high'\n const shapeOffsetX = shadowPadding\n const shapeOffsetY = shadowPadding\n\n // Render each shadow individually onto offscreen canvas\n for (const shadow of outsetShadows) {\n offCtx.save()\n const shadowOffsetX = shadow.offsetX ?? 0\n const shadowOffsetY = shadow.offsetY ?? 0\n const blur = shadow.blur ?? Math.max(shadowOffsetX, shadowOffsetY)\n offCtx.shadowColor = shadow.color ?? 'black'\n offCtx.shadowOffsetX = shadowOffsetX\n offCtx.shadowOffsetY = shadowOffsetY\n offCtx.shadowBlur = Math.max(0, blur)\n drawRoundedRectPath(\n offCtx,\n shapeOffsetX + subtractOffset / 2,\n shapeOffsetY + subtractOffset / 2,\n width - subtractOffset,\n height - subtractOffset,\n radii,\n )\n offCtx.fillStyle = 'rgba(0,0,0,1)'\n offCtx.fill()\n offCtx.restore()\n }\n\n // Cut out the shape from accumulated shadows\n offCtx.save()\n offCtx.globalCompositeOperation = 'destination-out'\n drawRoundedRectPath(offCtx, shapeOffsetX, shapeOffsetY, width, height, radii)\n offCtx.fillStyle = 'rgba(0,0,0,1)'\n offCtx.fill()\n offCtx.restore()\n\n // Composite shadow result onto main canvas\n ctx.drawImage(offscreenCanvas, x - shadowPadding, y - shadowPadding)\n }\n }\n }\n\n // Render background fill (solid color or gradient)\n // This logic uses standard context methods and remains unchanged.\n const hasFill = this.props.gradient || this.props.backgroundColor\n if (hasFill) {\n let fillStyle: string | CanvasGradient = this.props.backgroundColor || 'transparent'\n if (this.props.gradient) {\n const { type = 'linear', colors, direction = 'to-bottom' } = this.props.gradient\n let grad: CanvasGradient | null = null\n if (colors && colors.length > 0 && width > 0 && height > 0) {\n if (type === 'linear') {\n let x0 = 0,\n y0 = 0,\n x1 = 0,\n y1 = 0\n let directionIsValid = false\n if (Array.isArray(direction) && direction.length === 4) {\n ;[x0, y0, x1, y1] = direction\n directionIsValid = true\n } else if (typeof direction === 'string') {\n switch (direction.toLowerCase()) {\n case 'to-right':\n x0 = 0\n y0 = 0\n x1 = width\n y1 = 0\n directionIsValid = true\n break\n case 'to-left':\n x0 = width\n y0 = 0\n x1 = 0\n y1 = 0\n directionIsValid = true\n break\n case 'to-bottom':\n x0 = 0\n y0 = 0\n x1 = 0\n y1 = height\n directionIsValid = true\n break\n case 'to-top':\n x0 = 0\n y0 = height\n x1 = 0\n y1 = 0\n directionIsValid = true\n break\n case 'to-top-right':\n x0 = 0\n y0 = height\n x1 = width\n y1 = 0\n directionIsValid = true\n break\n case 'to-top-left':\n x0 = width\n y0 = height\n x1 = 0\n y1 = 0\n directionIsValid = true\n break\n case 'to-bottom-right':\n x0 = 0\n y0 = 0\n x1 = width\n y1 = height\n directionIsValid = true\n break\n case 'to-bottom-left':\n x0 = width\n y0 = 0\n x1 = 0\n y1 = height\n directionIsValid = true\n break\n }\n }\n if (directionIsValid) {\n grad = ctx.createLinearGradient(x + x0, y + y0, x + x1, y + y1)\n } else {\n console.warn(`[BoxNode ${this.key}] Invalid linear gradient direction:`, direction)\n }\n } else if (type === 'radial') {\n const centerX = x + width / 2\n const centerY = y + height / 2\n const r0 = 0\n const r1 = 0.5 * Math.sqrt(width * width + height * height)\n if (r1 > 0) {\n grad = ctx.createRadialGradient(centerX, centerY, r0, centerX, centerY, r1)\n }\n }\n if (grad) {\n colors.forEach((color, i) => {\n const stop = colors.length > 1 ? Math.max(0, Math.min(1, i / (colors.length - 1))) : 0.5\n grad!.addColorStop(stop, color)\n })\n fillStyle = grad\n } else {\n console.warn(`[BoxNode ${this.key}] Could not create ${type} gradient. Falling back to backgroundColor.`)\n }\n } else {\n if (!colors?.length) {\n console.warn(`[BoxNode ${this.key}] Gradient specified but no colors provided. Falling back to backgroundColor.`)\n } else {\n console.warn(`[BoxNode ${this.key}] Cannot draw gradient with zero width/height.`)\n }\n }\n }\n if (fillStyle && fillStyle !== 'transparent') {\n ctx.fillStyle = fillStyle\n drawRoundedRectPath(ctx, x, y, width, height, radii)\n ctx.fill()\n }\n }\n\n // Render inset shadows\n // This logic uses standard context methods and remains unchanged.\n if (insetShadows.length > 0) {\n for (const shadow of insetShadows) {\n ctx.save()\n const color = shadow.color ?? 'black'\n const shadowOffsetX = shadow.offsetX ?? 0\n const shadowOffsetY = shadow.offsetY ?? 0\n const blur = shadow.blur ?? Math.max(shadowOffsetX, shadowOffsetY)\n drawRoundedRectPath(ctx, x, y, width, height, radii)\n ctx.clip()\n ctx.shadowColor = color\n ctx.shadowOffsetX = shadowOffsetX\n ctx.shadowOffsetY = shadowOffsetY\n ctx.shadowBlur = blur\n ctx.lineWidth = 1 // Minimal line width for the stroke.\n ctx.strokeStyle = 'transparent' // Stroke color doesn't matter; only the shadow does.\n // Draw a slightly offset path *inside* the clip to generate the inset shadow.\n drawRoundedRectPath(ctx, x - shadowOffsetX, y - shadowOffsetY, width, height, radii)\n ctx.stroke() // The stroke generates the shadow inside the clipped area.\n ctx.restore()\n }\n }\n\n // Render border strokes\n // (This logic uses standard context methods via drawBorders helper and remains unchanged)\n drawBorders({\n ctx,\n node: this.node,\n x,\n y,\n width,\n height,\n radii,\n borderColor: this.props.borderColor,\n borderStyle: this.props.borderStyle,\n })\n }\n}\n\n/**\n * Normalizes children into a flat CanvasElement array, filtering falsy values.\n */\nfunction normalizeDescriptorChildren(children: BoxProps['children']): CanvasElement[] | undefined {\n if (children === undefined || children === null || children === false) return undefined\n const arr = (Array.isArray(children) ? children : [children]).filter(Boolean) as CanvasElement[]\n return arr.length > 0 ? arr : undefined\n}\n\n/**\n * Creates a new BoxNode instance.\n * @param {BoxProps} props Box properties and configuration.\n * @returns {BoxNode} New BoxNode instance.\n */\nexport const Box = ({ children, ...rest }: BoxProps): CanvasElement => ({\n __type: 'Box',\n props: rest,\n children: normalizeDescriptorChildren(children),\n})\n\n/**\n * @class ColumnNode\n * Node class for vertical column layout\n */\nexport class ColumnNode extends BoxNode {\n constructor(props: BoxProps & BaseProps = {}) {\n super({\n display: Style.Display.Flex,\n flexDirection: Style.FlexDirection.Column,\n flexShrink: 1,\n flexBasis: props.flexGrow === 1 ? 0 : undefined,\n ...props,\n })\n }\n}\n\n/**\n * Creates a new ColumnNode instance.\n * @param {BoxProps} props Column properties and configuration.\n * @returns {ColumnNode} New ColumnNode instance.\n */\nexport const Column = ({ children, ...rest }: BoxProps): CanvasElement => ({\n __type: 'Column',\n props: rest,\n children: normalizeDescriptorChildren(children),\n})\n\n/**\n * @class RowNode\n * @classdesc Node class for horizontal row layout.\n */\nexport class RowNode extends BoxNode {\n constructor(props: BoxProps & BaseProps = {}) {\n super({\n name: 'Row',\n display: Style.Display.Flex,\n flexDirection: Style.FlexDirection.Row,\n flexShrink: 1, // Default shrink for rows\n ...props,\n })\n }\n}\n\n/**\n * Creates a new RowNode instance.\n * @param {BoxProps} props Row properties and configuration.\n * @returns {RowNode} New RowNode instance.\n */\nexport const Row = ({ children, ...rest }: BoxProps): CanvasElement => ({\n __type: 'Row',\n props: rest,\n children: normalizeDescriptorChildren(children),\n})\n"],"names":["Yoga","Style","omit","parsePercentage","parseBorderRadius","drawRoundedRectPath","Canvas","drawBorders"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"root.canvas.util.d.ts","sourceRoot":"","sources":["../../../src/canvas/root.canvas.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAA8C,MAAM,aAAa,CAAA;AAEhF,OAAO,EAAE,UAAU,EAAE,OAAO,EAAW,MAAM,gCAAgC,CAAA;AAC7E,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAmB/H,eAAO,MAAM,qBAAqB,YAEjC,CAAA;AAwBD,MAAM,WAAW,kBAAkB;IACjC,uFAAuF;IACvF,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,kBAAkB,QAGpD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,SAKxB;AAgMD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,aAAa,GAAG,OAAO,CAmB5D;AAED;;;GAGG;AACH,qBAAa,QAAS,SAAQ,UAAU;IAC9B,KAAK,EAAE,SAAS,GAAG,SAAS,CAAA;IACpC,6CAA6C;IAC7C,OAAO,CAAC,MAAM,CAAoB;IAClC,8CAA8C;IAC9C,OAAO,CAAC,GAAG,CAAwC;IACnD,4CAA4C;IAC5C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,6CAA6C;IAC7C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IACrC,4DAA4D;IAC5D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAE9B;;;;OAIG;gBACS,KAAK,EAAE,SAAS,GAAG,SAAS;IAoDxC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAazB;;;;OAIG;IACG,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;CAqDhC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,GAAG;IAAE,OAAO,IAAI,IAAI,CAAA;CAAE,CAAC,CAAA;AACvF,wBAAgB,IAAI,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"root.canvas.util.js","sources":["../../../../src/canvas/root.canvas.util.ts"],"sourcesContent":["import { Canvas, FontLibrary, type CanvasRenderingContext2D } from 'skia-canvas'\nimport type { ExportFormat, ExportOptions, SaveOptions, RenderOptions } from 'skia-canvas'\nimport { ColumnNode, BoxNode, RowNode } from '@/canvas/layout.canvas.util.js'\nimport type { BaseProps, RootProps, CanvasElement, RootPropsWithWorker, RootPropsWithoutWorker } from '@/canvas/canvas.type.js'\nimport type { CanvasCallMethod, CallArgs, CallResult, WorkerCallRequest, WorkerResponse, WorkerRequest } from '@/worker/worker.types.js'\nimport { ImageNode, type RenderImageCache } from '@/canvas/image.canvas.util.js'\nimport { deleteDiskCache } from '@/util/disk.cache.js'\nimport { TextNode } from '@/canvas/text.canvas.util.js'\nimport { ChartNode } from '@/canvas/chart.canvas.util.js'\nimport { GridNode, GridItemNode } from '@/canvas/grid.canvas.util.js'\nimport { Style } from '@/constant/common.const.js'\nimport { WorkerPreProcessor } from '@/canvas/canvas.helper.js'\nimport * as path from 'node:path'\nimport * as fs from 'node:fs'\nimport { cpus } from 'node:os'\nimport { Worker } from 'node:worker_threads'\nimport { fileURLToPath } from 'node:url'\n\n/** Registry to track fonts that have already been loaded */\nconst registeredFonts = new Map<string, Set<string>>()\n\n// Exported for testing purposes only\nexport const _clearRegisteredFonts = () => {\n registeredFonts.clear()\n}\n\n/**\n * FinalizationRegistry to clean up WorkerCanvas instances that were not explicitly released.\n * This is a safety net — users should still call .release() explicitly.\n */\nconst canvasRegistry = new FinalizationRegistry<{ workerIdx: number; canvasId: number }>(heldValue => {\n // Best-effort cleanup — worker may already be terminated\n try {\n // Access workers via a public method or make it accessible\n // For now, just try to send the message and let errors be caught\n if (_workerPool) {\n ;(_workerPool as any).workers?.[heldValue.workerIdx]?.postMessage({ type: 'release', canvasId: heldValue.canvasId })\n }\n } catch {\n // Worker already gone — nothing to clean up\n }\n})\n\n/** Engine configuration — legacy support for configure() */\nlet _defaultWorkerMode = true\nlet _defaultWorkerPoolSize = Math.max(1, cpus().length - 1)\nlet _workerPool: WorkerPool | null = null\n\nexport interface CanvasEngineConfig {\n /** Run rendering in worker threads to avoid blocking the event loop (default: true) */\n workerMode?: boolean\n /** Number of worker threads in the pool (default: os.cpus().length - 1) */\n workers?: number\n}\n\n/**\n * Configure the canvas rendering engine.\n * Call this once at application startup before rendering.\n * @deprecated Pass workerMode and workers directly to Root() props instead.\n */\nexport function configure(options: CanvasEngineConfig) {\n if (options.workerMode !== undefined) _defaultWorkerMode = options.workerMode\n if (options.workers !== undefined) _defaultWorkerPoolSize = options.workers\n}\n\n/**\n * Terminate all worker pools and free worker thread resources.\n * Call this when shutting down a long-running server to clean up immediately.\n * After calling, you must call configure() again before rendering.\n */\nexport function terminate() {\n if (_workerPool) {\n _workerPool.terminate()\n _workerPool = null\n }\n}\n\ninterface PendingTask {\n resolve: (value: unknown) => void\n reject: (err: Error) => void\n}\n\ninterface PoolRenderResult {\n buffer: Buffer\n canvasId: number\n workerIdx: number\n width: number\n height: number\n}\n\n/**\n * Proxies all skia-canvas Canvas APIs to a Canvas instance living inside a worker thread.\n * Sync methods (toBufferSync, toURLSync) return from a pre-encoded PNG buffer.\n * Async methods (toBuffer, toURL, toFile, getters) delegate to the worker.\n */\nclass WorkerCanvas {\n readonly width: number\n readonly height: number\n private readonly _buffer: Buffer // pre-encoded PNG for sync use\n private readonly _pool: WorkerPool\n private readonly _workerIdx: number\n private readonly _canvasId: number\n\n constructor(opts: PoolRenderResult & { pool: WorkerPool }) {\n this._buffer = opts.buffer\n this.width = opts.width\n this.height = opts.height\n this._pool = opts.pool\n this._workerIdx = opts.workerIdx\n this._canvasId = opts.canvasId\n // Register for finalizer-based cleanup if user forgets to call .release()\n canvasRegistry.register(this, { workerIdx: opts.workerIdx, canvasId: opts.canvasId }, this)\n }\n\n private _call<M extends CanvasCallMethod>(method: M, ...args: CallArgs<M>): Promise<CallResult<M>> {\n return this._pool.callOnCanvas(this._workerIdx, this._canvasId, method, args)\n }\n\n // --- Sync methods: return from pre-encoded PNG buffer ---\n\n toBufferSync(_format?: ExportFormat, _options?: ExportOptions): Buffer {\n return this._buffer\n }\n\n toURLSync(_format?: ExportFormat, _options?: ExportOptions): string {\n return `data:image/png;base64,${this._buffer.toString('base64')}`\n }\n\n // --- Async methods: delegate to worker ---\n\n toBuffer(format: ExportFormat, options?: ExportOptions): Promise<Buffer> {\n return this._call('toBuffer', format, options)\n }\n\n toURL(format: ExportFormat, options?: ExportOptions): Promise<string> {\n return this._call('toURL', format, options)\n }\n\n toFile(filename: string, options?: SaveOptions): Promise<void> {\n return this._call('toFile', filename, options)\n }\n\n /** Returns a Buffer (Sharp instance cannot be transferred across threads) */\n toSharp(options?: RenderOptions): Promise<Buffer> {\n return this._call('toSharp', options)\n }\n\n toSharpSync(_options?: RenderOptions): never {\n throw new Error('[canvas] toSharpSync() is not available in worker mode — use toSharp() instead')\n }\n\n // --- Async convenience getters ---\n\n get png(): Promise<Buffer> {\n return this._call('toBuffer', 'png')\n }\n get webp(): Promise<Buffer> {\n return this._call('toBuffer', 'webp')\n }\n get jpg(): Promise<Buffer> {\n return this._call('toBuffer', 'jpg')\n }\n get svg(): Promise<Buffer> {\n return this._call('toBuffer', 'svg')\n }\n get pdf(): Promise<Buffer> {\n return this._call('toBuffer', 'pdf')\n }\n get raw(): Promise<Buffer> {\n return this._call('toBuffer', 'raw')\n }\n\n /** Release the Canvas from worker memory. Call when done with this object. */\n release(): void {\n this._pool.releaseCanvas(this._workerIdx, this._canvasId)\n // Unregister from finalizer since we're explicitly cleaning up\n canvasRegistry.unregister(this)\n }\n}\n\n/** Worker thread pool — routes render and canvas-call messages */\nclass WorkerPool {\n private workers: Worker[] = []\n private idle: Worker[] = []\n private queue: Array<{ id: number; props: RootProps }> = []\n private pending = new Map<number, PendingTask>()\n private nextId = 0\n\n constructor(size: number) {\n this.init(size)\n }\n\n private init(size: number) {\n const workerFile = path.join(path.dirname(fileURLToPath(import.meta.url)), '../worker/render.worker.js')\n\n for (let i = 0; i < size; i++) {\n const workerIdx = i\n const worker = new Worker(workerFile)\n worker.on('message', (msg: WorkerResponse) => {\n const task = this.pending.get(msg.taskId)\n if (!task) return\n this.pending.delete(msg.taskId)\n\n if ('error' in msg) {\n task.reject(new Error(msg.error))\n return\n }\n\n if ('canvasId' in msg) {\n // Render complete — put worker back to idle\n this.idle.push(worker)\n this.drain()\n const result: PoolRenderResult = { buffer: msg.buffer, canvasId: msg.canvasId, workerIdx, width: msg.width, height: msg.height }\n task.resolve(result)\n } else {\n // Canvas method call complete\n task.resolve(msg.result)\n }\n })\n this.workers.push(worker)\n this.idle.push(worker)\n }\n }\n\n private drain() {\n while (this.queue.length > 0 && this.idle.length > 0) {\n const task = this.queue.shift()!\n const worker = this.idle.pop()!\n const request: WorkerRequest = { type: 'render', taskId: task.id, props: task.props }\n worker.postMessage(request)\n }\n }\n\n render(props: RootProps): Promise<PoolRenderResult> {\n const sanitizedProps = WorkerPreProcessor.process(props)\n return new Promise<PoolRenderResult>((resolve, reject) => {\n const id = this.nextId++\n this.pending.set(id, { resolve: resolve as (v: unknown) => void, reject })\n if (this.idle.length > 0) {\n const worker = this.idle.pop()!\n const request: WorkerRequest = { type: 'render', taskId: id, props: sanitizedProps }\n worker.postMessage(request)\n } else {\n this.queue.push({ id, props: sanitizedProps })\n }\n })\n }\n\n callOnCanvas<M extends CanvasCallMethod>(workerIdx: number, canvasId: number, method: M, args: CallArgs<M>): Promise<CallResult<M>> {\n return new Promise<CallResult<M>>((resolve, reject) => {\n const id = this.nextId++\n this.pending.set(id, { resolve: resolve as (v: unknown) => void, reject })\n const request = { type: 'call' as const, taskId: id, canvasId, method, args } as WorkerCallRequest\n this.workers[workerIdx].postMessage(request)\n })\n }\n\n releaseCanvas(workerIdx: number, canvasId: number): void {\n const request: WorkerRequest = { type: 'release', canvasId }\n this.workers[workerIdx]?.postMessage(request)\n }\n\n terminate() {\n this.workers.forEach(w => w.terminate())\n }\n}\n\n/**\n * Converts a CanvasElement tree into actual BoxNode instances.\n * Used both for non-worker rendering (inline tree building) and inside\n * the render worker (reconstructing the tree from serialized descriptors).\n */\nexport function buildTree(descriptor: CanvasElement): BoxNode {\n switch (descriptor.__type) {\n case 'Box':\n return new BoxNode({ ...descriptor.props, children: descriptor.children?.map(buildTree) })\n case 'Column':\n return new ColumnNode({ ...descriptor.props, children: descriptor.children?.map(buildTree) })\n case 'Row':\n return new RowNode({ ...descriptor.props, children: descriptor.children?.map(buildTree) })\n case 'Grid':\n return new GridNode({ ...descriptor.props, children: descriptor.children?.map(buildTree) as any })\n case 'GridItem':\n return new GridItemNode({ ...descriptor.props, children: descriptor.children?.map(buildTree) as any })\n case 'Image':\n return new ImageNode(descriptor.props as any)\n case 'Text':\n return new TextNode(descriptor.text, descriptor.props)\n case 'Chart':\n return new ChartNode(descriptor.props as any)\n }\n}\n\n/**\n * Root node that manages the canvas rendering context and coordinates overall layout and drawing.\n * Inherits from ColumnNode to provide vertical layout capabilities.\n */\nexport class RootNode extends ColumnNode {\n declare props: RootProps & BaseProps\n /** The canvas instance used for rendering */\n private canvas: Canvas | undefined\n /** The 2D rendering context for the canvas */\n private ctx: CanvasRenderingContext2D | null = null\n /** Target width for the canvas in pixels */\n private readonly targetWidth: number\n /** Target height for the canvas in pixels */\n private readonly targetHeight: number\n /** Scale factor for rendering (e.g. 2 for 2x resolution) */\n private readonly scale: number\n\n /**\n * Creates a new root node for canvas rendering\n * @param props Configuration properties for the root node\n * @throws Error if width property is not provided\n */\n constructor(props: RootProps & BaseProps) {\n // Call the parent constructor with root name and props\n super({ name: 'Root', ...props })\n\n this.props = props\n\n // Validate the required width property\n if (!props.width) {\n throw new Error('Width and height are required for Root')\n }\n\n // Register provided fonts with caching\n if (props.fonts?.length) {\n for (const font of props.fonts) {\n const family = font.family\n const paths = font.paths.map(p => path.resolve(p))\n\n if (!registeredFonts.has(family)) {\n registeredFonts.set(family, new Set())\n }\n\n const cachedPaths = registeredFonts.get(family)!\n const newPaths = paths.filter(p => !cachedPaths.has(p) && fs.existsSync(p))\n\n if (newPaths.length > 0) {\n FontLibrary.use({ [family]: newPaths })\n newPaths.forEach(p => cachedPaths.add(p))\n }\n }\n }\n\n // Set up scale and width\n this.scale = props.scale || 1\n this.targetWidth = props.width\n this.targetHeight = props.height\n this.node.setWidth(this.targetWidth)\n\n // Convert any CanvasElement children to actual BoxNode instances\n if (this.props.children) {\n const childArray = Array.isArray(this.props.children) ? this.props.children : [this.props.children]\n this.props.children = childArray.map(child => {\n if (child && typeof child === 'object' && '__type' in child) {\n return buildTree(child as CanvasElement)\n }\n return child\n }) as any\n }\n\n // Initialize children nodes\n this.processInitialChildren()\n }\n\n /**\n * Traverses the node tree to find all ImageNode instances using breadth-first search\n * @returns Array of all ImageNode instances found in the tree\n */\n private findAllImageNodes(): ImageNode[] {\n const imageNodes: ImageNode[] = []\n const queue: BoxNode[] = [this]\n while (queue.length > 0) {\n const node = queue.shift()!\n if (node instanceof ImageNode) {\n imageNodes.push(node)\n }\n queue.push(...node.children)\n }\n return imageNodes\n }\n\n /**\n * Renders the entire node tree to a canvas, handling image loading, layout calculation,\n * and final drawing\n * @returns Promise resolving to the rendered Canvas instance\n */\n async render(): Promise<Canvas> {\n const diskCacheKeys = this.props.useDiskCache ? new Set<string>() : undefined\n\n try {\n // Step 1: Load all images with a concurrency limit to avoid overwhelming remote sources.\n // A per-render cache deduplicates identical src+color combinations within this render pass.\n const imageNodes = this.findAllImageNodes()\n if (imageNodes.length > 0) {\n const imageCache: RenderImageCache = new Map()\n const CONCURRENCY = 5\n const queue = [...imageNodes]\n const workers = Array.from({ length: Math.min(CONCURRENCY, queue.length) }, async () => {\n while (queue.length > 0) {\n const node = queue.shift()!\n await node.load(imageCache, diskCacheKeys)\n }\n })\n await Promise.allSettled(workers)\n }\n\n // Step 2: Calculate initial layout\n this.node.calculateLayout(this.targetWidth, undefined, Style.Direction.LTR)\n\n // Step 3: Allow nodes to finalize their layout\n const needRecalculate = this.finalizeLayout()\n if (needRecalculate) {\n this.node.calculateLayout(this.targetWidth, undefined, Style.Direction.LTR)\n }\n\n // Step 4: Create a canvas with calculated dimensions\n const calculatedContentHeight = this.node.getComputedHeight()\n const finalCanvasWidth = Math.ceil(this.targetWidth * this.scale)\n const finalCanvasHeight = this.targetHeight ? Math.ceil(this.targetHeight * this.scale) : Math.max(1, Math.ceil(calculatedContentHeight * this.scale))\n\n // Step 5: Set up canvas context\n this.canvas = new Canvas(finalCanvasWidth, finalCanvasHeight)\n this.ctx = this.canvas.getContext('2d')\n this.ctx.scale(this.scale, this.scale)\n\n // Step 6: Render content\n super.render(this.ctx, 0, 0)\n\n if (!this.canvas) {\n throw new Error('Canvas not initialized')\n }\n\n return this.canvas\n } finally {\n if (diskCacheKeys?.size) {\n await Promise.allSettled([...diskCacheKeys].map(key => deleteDiskCache(key)))\n }\n }\n }\n}\n\n/**\n * Creates and renders a new root node with the given properties.\n * Rendering runs in worker threads by default for non-blocking operation.\n * @example\n * // Worker mode (default) - .release() available\n * const canvas = await Root({ width: 400, children: [...] })\n * canvas.release() // ✓ OK\n * @example\n * // Worker mode explicit - .release() available\n * const canvas = await Root({ width: 400, workerMode: true, workers: 2 })\n * canvas.release() // ✓ OK\n * @example\n * // Non-worker mode - .release() NOT available, workers not allowed\n * const canvas = await Root({ width: 400, workerMode: false })\n * canvas.release() // ✗ TypeScript error\n * @param props Configuration properties for the root node\n * @returns Canvas with .release() in worker mode, plain Canvas otherwise\n */\nexport function Root(props: RootPropsWithWorker): Promise<Canvas & { release(): void }>\nexport function Root(props: RootPropsWithoutWorker): Promise<Canvas>\nexport async function Root(props: RootProps): Promise<Canvas | (Canvas & { release(): void })> {\n // Determine worker mode: props override legacy configure()\n const workerMode = props.workerMode ?? _defaultWorkerMode\n const workerPoolSize = props.workers ?? _defaultWorkerPoolSize\n\n if (workerMode) {\n // Lazy initialize worker pool\n if (!_workerPool) {\n _workerPool = new WorkerPool(workerPoolSize)\n }\n const result = await _workerPool.render(props)\n return new WorkerCanvas({ ...result, pool: _workerPool }) as unknown as Canvas & { release(): void }\n }\n\n // Non-worker mode — render directly and return Canvas\n return new RootNode(props).render()\n}\n"],"names":["cpus","path","fileURLToPath","Worker","WorkerPreProcessor","BoxNode","ColumnNode","RowNode","GridNode","GridItemNode","ImageNode","TextNode","ChartNode","fs","FontLibrary","Style","Canvas","deleteDiskCache"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA;AACA,MAAM,eAAe,GAAG,IAAI,GAAG,EAAuB;AAOtD;;;AAGG;AACH,MAAM,cAAc,GAAG,IAAI,oBAAoB,CAA0C,SAAS,IAAG;;AAEnG,IAAA,IAAI;;;QAGF,IAAI,WAAW,EAAE;YACf;YAAE,WAAmB,CAAC,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC;QACtH;IACF;AAAE,IAAA,MAAM;;IAER;AACF,CAAC,CAAC;AAEF;AACA,IAAI,kBAAkB,GAAG,IAAI;AAC7B,IAAI,sBAAsB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAEA,YAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3D,IAAI,WAAW,GAAsB,IAAI;AASzC;;;;AAIG;AACG,SAAU,SAAS,CAAC,OAA2B,EAAA;AACnD,IAAA,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS;AAAE,QAAA,kBAAkB,GAAG,OAAO,CAAC,UAAU;AAC7E,IAAA,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS;AAAE,QAAA,sBAAsB,GAAG,OAAO,CAAC,OAAO;AAC7E;AAEA;;;;AAIG;SACa,SAAS,GAAA;IACvB,IAAI,WAAW,EAAE;QACf,WAAW,CAAC,SAAS,EAAE;QACvB,WAAW,GAAG,IAAI;IACpB;AACF;AAeA;;;;AAIG;AACH,MAAM,YAAY,CAAA;AACP,IAAA,KAAK;AACL,IAAA,MAAM;IACE,OAAO,CAAQ;AACf,IAAA,KAAK;AACL,IAAA,UAAU;AACV,IAAA,SAAS;AAE1B,IAAA,WAAA,CAAY,IAA6C,EAAA;AACvD,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM;AAC1B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AACzB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI;AACtB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS;AAChC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ;;QAE9B,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC;IAC7F;AAEQ,IAAA,KAAK,CAA6B,MAAS,EAAE,GAAG,IAAiB,EAAA;AACvE,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC;IAC/E;;IAIA,YAAY,CAAC,OAAsB,EAAE,QAAwB,EAAA;QAC3D,OAAO,IAAI,CAAC,OAAO;IACrB;IAEA,SAAS,CAAC,OAAsB,EAAE,QAAwB,EAAA;QACxD,OAAO,CAAA,sBAAA,EAAyB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA,CAAE;IACnE;;IAIA,QAAQ,CAAC,MAAoB,EAAE,OAAuB,EAAA;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC;IAChD;IAEA,KAAK,CAAC,MAAoB,EAAE,OAAuB,EAAA;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC;IAC7C;IAEA,MAAM,CAAC,QAAgB,EAAE,OAAqB,EAAA;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC;IAChD;;AAGA,IAAA,OAAO,CAAC,OAAuB,EAAA;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;IACvC;AAEA,IAAA,WAAW,CAAC,QAAwB,EAAA;AAClC,QAAA,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC;IACnG;;AAIA,IAAA,IAAI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC;IACtC;AACA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC;IACvC;AACA,IAAA,IAAI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC;IACtC;AACA,IAAA,IAAI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC;IACtC;AACA,IAAA,IAAI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC;IACtC;AACA,IAAA,IAAI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC;IACtC;;IAGA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC;;AAEzD,QAAA,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC;IACjC;AACD;AAED;AACA,MAAM,UAAU,CAAA;IACN,OAAO,GAAa,EAAE;IACtB,IAAI,GAAa,EAAE;IACnB,KAAK,GAA4C,EAAE;AACnD,IAAA,OAAO,GAAG,IAAI,GAAG,EAAuB;IACxC,MAAM,GAAG,CAAC;AAElB,IAAA,WAAA,CAAY,IAAY,EAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACjB;AAEQ,IAAA,IAAI,CAAC,IAAY,EAAA;QACvB,MAAM,UAAU,GAAGC,eAAI,CAAC,IAAI,CAACA,eAAI,CAAC,OAAO,CAACC,sBAAa,CAAC,4QAAe,CAAC,CAAC,EAAE,4BAA4B,CAAC;AAExG,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;YAC7B,MAAM,SAAS,GAAG,CAAC;AACnB,YAAA,MAAM,MAAM,GAAG,IAAIC,0BAAM,CAAC,UAAU,CAAC;YACrC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAmB,KAAI;AAC3C,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;AACzC,gBAAA,IAAI,CAAC,IAAI;oBAAE;gBACX,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;AAE/B,gBAAA,IAAI,OAAO,IAAI,GAAG,EAAE;oBAClB,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBACjC;gBACF;AAEA,gBAAA,IAAI,UAAU,IAAI,GAAG,EAAE;;AAErB,oBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;oBACtB,IAAI,CAAC,KAAK,EAAE;AACZ,oBAAA,MAAM,MAAM,GAAqB,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE;AAChI,oBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;gBACtB;qBAAO;;AAEL,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;gBAC1B;AACF,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;AACzB,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QACxB;IACF;IAEQ,KAAK,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YACpD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAG;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAG;AAC/B,YAAA,MAAM,OAAO,GAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACrF,YAAA,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC;QAC7B;IACF;AAEA,IAAA,MAAM,CAAC,KAAgB,EAAA;QACrB,MAAM,cAAc,GAAGC,gCAAkB,CAAC,OAAO,CAAC,KAAK,CAAC;QACxD,OAAO,IAAI,OAAO,CAAmB,CAAC,OAAO,EAAE,MAAM,KAAI;AACvD,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAA+B,EAAE,MAAM,EAAE,CAAC;YAC1E,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBACxB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAG;AAC/B,gBAAA,MAAM,OAAO,GAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;AACpF,gBAAA,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC;YAC7B;iBAAO;AACL,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAChD;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,YAAY,CAA6B,SAAiB,EAAE,QAAgB,EAAE,MAAS,EAAE,IAAiB,EAAA;QACxG,OAAO,IAAI,OAAO,CAAgB,CAAC,OAAO,EAAE,MAAM,KAAI;AACpD,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAA+B,EAAE,MAAM,EAAE,CAAC;AAC1E,YAAA,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,MAAe,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAuB;YAClG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC;AAC9C,QAAA,CAAC,CAAC;IACJ;IAEA,aAAa,CAAC,SAAiB,EAAE,QAAgB,EAAA;QAC/C,MAAM,OAAO,GAAkB,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE;QAC5D,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC;IAC/C;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;IAC1C;AACD;AAED;;;;AAIG;AACG,SAAU,SAAS,CAAC,UAAyB,EAAA;AACjD,IAAA,QAAQ,UAAU,CAAC,MAAM;AACvB,QAAA,KAAK,KAAK;YACR,OAAO,IAAIC,0BAAO,CAAC,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;AAC5F,QAAA,KAAK,QAAQ;YACX,OAAO,IAAIC,6BAAU,CAAC,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;AAC/F,QAAA,KAAK,KAAK;YACR,OAAO,IAAIC,0BAAO,CAAC,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;AAC5F,QAAA,KAAK,MAAM;YACT,OAAO,IAAIC,yBAAQ,CAAC,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAQ,EAAE,CAAC;AACpG,QAAA,KAAK,UAAU;YACb,OAAO,IAAIC,6BAAY,CAAC,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAQ,EAAE,CAAC;AACxG,QAAA,KAAK,OAAO;AACV,YAAA,OAAO,IAAIC,2BAAS,CAAC,UAAU,CAAC,KAAY,CAAC;AAC/C,QAAA,KAAK,MAAM;YACT,OAAO,IAAIC,yBAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC;AACxD,QAAA,KAAK,OAAO;AACV,YAAA,OAAO,IAAIC,2BAAS,CAAC,UAAU,CAAC,KAAY,CAAC;;AAEnD;AAEA;;;AAGG;AACG,MAAO,QAAS,SAAQN,6BAAU,CAAA;;AAG9B,IAAA,MAAM;;IAEN,GAAG,GAAoC,IAAI;;AAElC,IAAA,WAAW;;AAEX,IAAA,YAAY;;AAEZ,IAAA,KAAK;AAEtB;;;;AAIG;AACH,IAAA,WAAA,CAAY,KAA4B,EAAA;;QAEtC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;AAEjC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;AAGlB,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC;QAC3D;;AAGA,QAAA,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE;AACvB,YAAA,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE;AAC9B,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;AAC1B,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAIL,eAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAElD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;oBAChC,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;gBACxC;gBAEA,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAE;gBAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAIY,aAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAE3E,gBAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;oBACvBC,sBAAW,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;AACvC,oBAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC3C;YACF;QACF;;QAGA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK;AAC9B,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM;QAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;;AAGpC,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACvB,YAAA,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;YACnG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,IAAG;gBAC3C,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,IAAI,KAAK,EAAE;AAC3D,oBAAA,OAAO,SAAS,CAAC,KAAsB,CAAC;gBAC1C;AACA,gBAAA,OAAO,KAAK;AACd,YAAA,CAAC,CAAQ;QACX;;QAGA,IAAI,CAAC,sBAAsB,EAAE;IAC/B;AAEA;;;AAGG;IACK,iBAAiB,GAAA;QACvB,MAAM,UAAU,GAAgB,EAAE;AAClC,QAAA,MAAM,KAAK,GAAc,CAAC,IAAI,CAAC;AAC/B,QAAA,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAG;AAC3B,YAAA,IAAI,IAAI,YAAYJ,2BAAS,EAAE;AAC7B,gBAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;YACvB;YACA,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B;AACA,QAAA,OAAO,UAAU;IACnB;AAEA;;;;AAIG;AACH,IAAA,MAAM,MAAM,GAAA;AACV,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,GAAG,EAAU,GAAG,SAAS;AAE7E,QAAA,IAAI;;;AAGF,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC3C,YAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,gBAAA,MAAM,UAAU,GAAqB,IAAI,GAAG,EAAE;gBAC9C,MAAM,WAAW,GAAG,CAAC;AACrB,gBAAA,MAAM,KAAK,GAAG,CAAC,GAAG,UAAU,CAAC;gBAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,YAAW;AACrF,oBAAA,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,wBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAG;wBAC3B,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC;oBAC5C;AACF,gBAAA,CAAC,CAAC;AACF,gBAAA,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;YACnC;;AAGA,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAEK,kBAAK,CAAC,SAAS,CAAC,GAAG,CAAC;;AAG3E,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,EAAE;YAC7C,IAAI,eAAe,EAAE;AACnB,gBAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAEA,kBAAK,CAAC,SAAS,CAAC,GAAG,CAAC;YAC7E;;YAGA,MAAM,uBAAuB,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AAC7D,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;AACjE,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;;YAGtJ,IAAI,CAAC,MAAM,GAAG,IAAIC,iBAAM,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;YAC7D,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;AACvC,YAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;;YAGtC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AAE5B,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,gBAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;YAC3C;YAEA,OAAO,IAAI,CAAC,MAAM;QACpB;gBAAU;AACR,YAAA,IAAI,aAAa,EAAE,IAAI,EAAE;gBACvB,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,GAAG,CAAC,GAAG,IAAIC,0BAAe,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/E;QACF;IACF;AACD;AAsBM,eAAe,IAAI,CAAC,KAAgB,EAAA;;AAEzC,IAAA,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,kBAAkB;AACzD,IAAA,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,IAAI,sBAAsB;IAE9D,IAAI,UAAU,EAAE;;QAEd,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,WAAW,GAAG,IAAI,UAAU,CAAC,cAAc,CAAC;QAC9C;QACA,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;AAC9C,QAAA,OAAO,IAAI,YAAY,CAAC,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,CAA4C;IACtG;;IAGA,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;AACrC;;;;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"text.canvas.util.d.ts","sourceRoot":"","sources":["../../../src/canvas/text.canvas.util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAe,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACpF,OAAO,EAAU,KAAK,wBAAwB,EAA2B,MAAM,aAAa,CAAA;AAC5F,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAGxD;;;GAGG;AACH,qBAAa,QAAS,SAAQ,OAAO;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAC7C,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAwC;IACzE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAU;IACxC,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,kBAAkB,CAAe;IAEjC,KAAK,EAAE,SAAS,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;gBAElC,IAAI,GAAE,MAAM,GAAG,MAAW,EAAE,KAAK,GAAE,SAAc;IAuB7D;;;;;;;;OAQG;WACW,gBAAgB,CAC5B,GAAG,EAAE,wBAAwB,EAC7B,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,GAAE;QACL,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,UAAU,CAAC,EAAE,SAAS,CAAC,YAAY,CAAC,CAAA;QACpC,SAAS,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,CAAA;QAClC,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,SAAS,CAAC,EAAE,wBAAwB,CAAC,WAAW,CAAC,CAAA;QACjD,YAAY,CAAC,EAAE,wBAAwB,CAAC,cAAc,CAAC,CAAA;KACnD;cAwBW,aAAa,IAAI,IAAI;IAoDxC;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,sBAAsB;IA8B9B;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,aAAa;IA+ErB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,gBAAgB;IAyBxB;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAM7B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,aAAa;IAiCrB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAQjC;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,WAAW;IA+NnB;;;;;;;;;OASG;IACH,OAAO,CAAC,YAAY;IA6KpB;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa;IAmErB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;;;;;;;;;;;;;;;OAgBG;cACgB,cAAc,CAAC,GAAG,EAAE,wBAAwB,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAkXrH;AAED;;GAEG;AACH,eAAO,MAAM,IAAI,GAAI,MAAM,MAAM,GAAG,MAAM,EAAE,QAAQ,SAAS,KAAG,aAI9D,CAAA"}
|