@meonode/canvas 2.0.5 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONTRIBUTING.md +9 -9
- package/README.md +9 -21
- package/dist/cjs/canvas/canvas.helper.d.ts +1 -1
- package/dist/cjs/canvas/canvas.type.d.ts +9 -4
- package/dist/cjs/canvas/canvas.type.d.ts.map +1 -1
- package/dist/cjs/canvas/chart.canvas.d.ts +7 -3
- package/dist/cjs/canvas/chart.canvas.d.ts.map +1 -1
- package/dist/cjs/canvas/chart.canvas.js +3 -4
- package/dist/cjs/canvas/chart.canvas.js.map +1 -1
- package/dist/cjs/canvas/grid.canvas.d.ts +2 -2
- package/dist/cjs/canvas/grid.canvas.d.ts.map +1 -1
- package/dist/cjs/canvas/grid.canvas.js +2 -8
- package/dist/cjs/canvas/grid.canvas.js.map +1 -1
- package/dist/cjs/canvas/image.canvas.d.ts +2 -2
- package/dist/cjs/canvas/image.canvas.js.map +1 -1
- package/dist/cjs/canvas/layout.canvas.d.ts +5 -1
- package/dist/cjs/canvas/layout.canvas.d.ts.map +1 -1
- package/dist/cjs/canvas/layout.canvas.js +59 -68
- package/dist/cjs/canvas/layout.canvas.js.map +1 -1
- package/dist/cjs/canvas/root.canvas.d.ts +9 -16
- package/dist/cjs/canvas/root.canvas.d.ts.map +1 -1
- package/dist/cjs/canvas/root.canvas.js +56 -43
- package/dist/cjs/canvas/root.canvas.js.map +1 -1
- package/dist/cjs/canvas/text.canvas.d.ts +7 -3
- package/dist/cjs/canvas/text.canvas.d.ts.map +1 -1
- package/dist/cjs/canvas/text.canvas.js +25 -85
- package/dist/cjs/canvas/text.canvas.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -2
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/util/disk.cache.d.ts +5 -0
- package/dist/cjs/util/disk.cache.d.ts.map +1 -1
- package/dist/cjs/util/disk.cache.js +23 -8
- package/dist/cjs/util/disk.cache.js.map +1 -1
- package/dist/cjs/worker/comlink.pool.d.ts +1 -1
- package/dist/cjs/worker/comlink.pool.d.ts.map +1 -1
- package/dist/cjs/worker/comlink.pool.js +3 -0
- package/dist/cjs/worker/comlink.pool.js.map +1 -1
- package/dist/cjs/worker/comlink.setup.js +0 -1
- package/dist/cjs/worker/comlink.setup.js.map +1 -1
- package/dist/esm/canvas/canvas.helper.d.ts +1 -1
- package/dist/esm/canvas/canvas.type.d.ts +9 -4
- package/dist/esm/canvas/canvas.type.d.ts.map +1 -1
- package/dist/esm/canvas/chart.canvas.d.ts +7 -3
- package/dist/esm/canvas/chart.canvas.d.ts.map +1 -1
- package/dist/esm/canvas/chart.canvas.js +3 -4
- package/dist/esm/canvas/grid.canvas.d.ts +2 -2
- package/dist/esm/canvas/grid.canvas.d.ts.map +1 -1
- package/dist/esm/canvas/grid.canvas.js +1 -7
- package/dist/esm/canvas/image.canvas.d.ts +2 -2
- package/dist/esm/canvas/layout.canvas.d.ts +5 -1
- package/dist/esm/canvas/layout.canvas.d.ts.map +1 -1
- package/dist/esm/canvas/layout.canvas.js +59 -69
- package/dist/esm/canvas/root.canvas.d.ts +9 -16
- package/dist/esm/canvas/root.canvas.d.ts.map +1 -1
- package/dist/esm/canvas/root.canvas.js +57 -43
- package/dist/esm/canvas/text.canvas.d.ts +7 -3
- package/dist/esm/canvas/text.canvas.d.ts.map +1 -1
- package/dist/esm/canvas/text.canvas.js +25 -85
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/util/disk.cache.d.ts +5 -0
- package/dist/esm/util/disk.cache.d.ts.map +1 -1
- package/dist/esm/util/disk.cache.js +23 -9
- package/dist/esm/worker/comlink.pool.d.ts +1 -1
- package/dist/esm/worker/comlink.pool.d.ts.map +1 -1
- package/dist/esm/worker/comlink.pool.js +3 -0
- package/package.json +9 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comlink.pool.js","sources":["../../../../src/worker/comlink.pool.ts"],"sourcesContent":["import { Worker } from 'node:worker_threads'\nimport { fileURLToPath } from 'node:url'\nimport * as path from 'node:path'\nimport { Comlink, nodeEndpoint } from '@/worker/comlink.setup.js'\nimport type { Remote } from 'comlink'\nimport type { WorkerAPI, RenderResult, CallFn } from '@/worker/worker.types.js'\nimport type { RootProps } from '@/canvas/canvas.type.js'\n\nexport interface PoolRenderResult extends RenderResult {\n workerIdx: number\n}\n\ninterface QueuedTask {\n props: RootProps\n callFn: CallFn | undefined\n resolve: (result: PoolRenderResult) => void\n reject: (err: Error) => void\n}\n\n/** Sentinel embedded in serialized props to mark where a function was extracted. */\nexport const FN_MARKER = '__comlinkFnId'\n\n/**\n * Deeply walks an object tree, replaces function values with `{ [FN_MARKER]: id }` sentinels,\n * and collects the original functions in a Map keyed by their assigned id.\n * Returns the cleaned (function-free) tree that is safe for structured clone.\n */\nexport function extractFunctions<T>(obj: T, fnMap: Map<number, (...args: unknown[]) => unknown>, nextId: { value: number }): T {\n if (obj === null || obj === undefined) return obj\n if (typeof obj === 'function') {\n const id = nextId.value++\n fnMap.set(id, obj as (...args: unknown[]) => unknown)\n return { [FN_MARKER]: id } as unknown as T\n }\n if (typeof obj !== 'object') return obj\n\n // Preserve binary data types — don't walk into them\n if (Buffer.isBuffer(obj)) return obj\n if (obj instanceof ArrayBuffer) return obj\n if (ArrayBuffer.isView(obj)) return obj\n\n if (Array.isArray(obj)) {\n return obj.map(item => extractFunctions(item, fnMap, nextId)) as unknown as T\n }\n\n const result: Record<string, unknown> = {}\n for (const key of Object.keys(obj as Record<string, unknown>)) {\n result[key] = extractFunctions((obj as Record<string, unknown>)[key], fnMap, nextId)\n }\n return result as T\n}\n\n/**\n * Deeply walks an object tree received on the worker side, replaces\n * `{ [FN_MARKER]: id }` sentinels with async functions that delegate\n * to the main-thread callback proxy.\n */\nexport function restoreFunctions<T>(obj: T, callFn: (id: number, ...args: unknown[]) => Promise<unknown>): T {\n if (obj === null || obj === undefined) return obj\n if (typeof obj !== 'object') return obj\n\n if (Buffer.isBuffer(obj)) return obj\n if (obj instanceof ArrayBuffer) return obj\n if (ArrayBuffer.isView(obj)) return obj\n\n // Check for sentinel\n if (FN_MARKER in (obj as Record<string, unknown>)) {\n const id = (obj as Record<string, unknown>)[FN_MARKER] as number\n return ((...args: unknown[]) => callFn(id, ...args)) as unknown as T\n }\n\n if (Array.isArray(obj)) {\n return obj.map(item => restoreFunctions(item, callFn)) as unknown as T\n }\n\n const result: Record<string, unknown> = {}\n for (const key of Object.keys(obj as Record<string, unknown>)) {\n result[key] = restoreFunctions((obj as Record<string, unknown>)[key], callFn)\n }\n return result as T\n}\n\n/**\n * Pool of Comlink-wrapped worker threads.\n * Manages idle/queue scheduling and proxy lifecycle.\n */\nexport class ComlinkPool {\n private workers: Worker[] = []\n private endpoints: Remote<WorkerAPI>[] = []\n private idle: number[] = []\n private queue: QueuedTask[] = []\n\n constructor(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 worker = new Worker(workerFile)\n const endpoint = Comlink.wrap<WorkerAPI>(nodeEndpoint(worker))\n this.workers.push(worker)\n this.endpoints.push(endpoint)\n this.idle.push(i)\n }\n }\n\n private acquire(): number | null {\n return this.idle.pop() ?? null\n }\n\n private release(idx: number) {\n this.idle.push(idx)\n this.drain()\n }\n\n private drain() {\n while (this.queue.length > 0 && this.idle.length > 0) {\n const task = this.queue.shift()!\n const idx = this.idle.pop()!\n void this.executeRender(idx, task.props, task.callFn, task.resolve, task.reject)\n }\n }\n\n private async executeRender(\n idx: number,\n props: RootProps,\n callFn: CallFn | undefined,\n resolve: (result: PoolRenderResult) => void,\n reject: (err: Error) => void,\n ) {\n try {\n const result = await this.endpoints[idx].render(props, callFn)\n resolve({ ...result, workerIdx: idx })\n } catch (err) {\n reject(err instanceof Error ? err : new Error(String(err)))\n } finally {\n this.release(idx)\n }\n }\n\n async render(props: RootProps): Promise<PoolRenderResult> {\n // Extract functions from props, replacing them with serializable sentinels.\n // A single Comlink.proxy() callback is created at the top level so Comlink\n // can correctly transfer it via its proxy transfer handler.\n const fnMap = new Map<number, (...args: unknown[]) => unknown>()\n const cleaned = extractFunctions(props, fnMap, { value: 0 })\n\n let callFnProxy: CallFn | undefined\n if (fnMap.size > 0) {\n callFnProxy = Comlink.proxy(async (id: number, ...args: unknown[]) => {\n const fn = fnMap.get(id)\n if (!fn) throw new Error(`[ComlinkPool] Function #${id} not found`)\n return fn(...args)\n })\n }\n\n const cleanup = () => {\n if (callFnProxy) {\n try {\n ;(callFnProxy as any)[Comlink.releaseProxy]?.()\n } catch {\n // Proxy may already be released\n }\n }\n }\n\n // Direct path — idle worker available\n const idx = this.acquire()\n if (idx !== null) {\n try {\n const result = await this.endpoints[idx].render(cleaned, callFnProxy)\n return { ...result, workerIdx: idx }\n } finally {\n this.release(idx)\n cleanup()\n }\n }\n\n // Queued path — cleanup AFTER the queued task completes, not before\n return new Promise<PoolRenderResult>((resolve, reject) => {\n this.queue.push({\n props: cleaned,\n callFn: callFnProxy,\n resolve: result => {\n cleanup()\n resolve(result)\n },\n reject: err => {\n cleanup()\n reject(err)\n },\n })\n })\n }\n\n callOnCanvas(workerIdx: number, canvasId: number, method: string, args: unknown[]): Promise<Buffer | string | void> {\n return this.endpoints[workerIdx].callOnCanvas(canvasId, method, args) as Promise<Buffer | string | void>\n }\n\n releaseCanvas(workerIdx: number, canvasId: number): void {\n this.endpoints[workerIdx].releaseCanvas(canvasId)\n }\n\n terminate() {\n this.workers.forEach(w => w.terminate())\n this.workers = []\n this.endpoints = []\n this.idle = []\n this.queue = []\n }\n}\n"],"names":["path","fileURLToPath","Worker","Comlink"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"comlink.pool.js","sources":["../../../../src/worker/comlink.pool.ts"],"sourcesContent":["import { Worker } from 'node:worker_threads'\nimport { fileURLToPath } from 'node:url'\nimport * as path from 'node:path'\nimport { Comlink, nodeEndpoint } from '@/worker/comlink.setup.js'\nimport type { Remote } from 'comlink'\nimport type { WorkerAPI, RenderResult, CallFn } from '@/worker/worker.types.js'\nimport type { RootProps } from '@/canvas/canvas.type.js'\n\nexport interface PoolRenderResult extends RenderResult {\n workerIdx: number\n}\n\ninterface QueuedTask {\n props: RootProps\n callFn: CallFn | undefined\n resolve: (result: PoolRenderResult) => void\n reject: (err: Error) => void\n}\n\n/** Sentinel embedded in serialized props to mark where a function was extracted. */\nexport const FN_MARKER = '__comlinkFnId'\n\n/**\n * Deeply walks an object tree, replaces function values with `{ [FN_MARKER]: id }` sentinels,\n * and collects the original functions in a Map keyed by their assigned id.\n * Returns the cleaned (function-free) tree that is safe for structured clone.\n */\nexport function extractFunctions<T>(obj: T, fnMap: Map<number, (...args: unknown[]) => unknown>, nextId: { value: number }): T {\n if (obj === null || obj === undefined) return obj\n if (typeof obj === 'function') {\n const id = nextId.value++\n fnMap.set(id, obj as (...args: unknown[]) => unknown)\n return { [FN_MARKER]: id } as unknown as T\n }\n if (typeof obj !== 'object') return obj\n\n // Preserve binary data types — don't walk into them\n if (Buffer.isBuffer(obj)) return obj\n if (obj instanceof ArrayBuffer) return obj\n if (ArrayBuffer.isView(obj)) return obj\n\n if (Array.isArray(obj)) {\n return obj.map(item => extractFunctions(item, fnMap, nextId)) as unknown as T\n }\n\n const result: Record<string, unknown> = {}\n for (const key of Object.keys(obj as Record<string, unknown>)) {\n result[key] = extractFunctions((obj as Record<string, unknown>)[key], fnMap, nextId)\n }\n return result as T\n}\n\n/**\n * Deeply walks an object tree received on the worker side, replaces\n * `{ [FN_MARKER]: id }` sentinels with async functions that delegate\n * to the main-thread callback proxy.\n */\nexport function restoreFunctions<T>(obj: T, callFn: (id: number, ...args: unknown[]) => Promise<unknown>): T {\n if (obj === null || obj === undefined) return obj\n if (typeof obj !== 'object') return obj\n\n if (Buffer.isBuffer(obj)) return obj\n if (obj instanceof ArrayBuffer) return obj\n if (ArrayBuffer.isView(obj)) return obj\n\n // Check for sentinel\n if (FN_MARKER in (obj as Record<string, unknown>)) {\n const id = (obj as Record<string, unknown>)[FN_MARKER] as number\n return ((...args: unknown[]) => callFn(id, ...args)) as unknown as T\n }\n\n if (Array.isArray(obj)) {\n return obj.map(item => restoreFunctions(item, callFn)) as unknown as T\n }\n\n const result: Record<string, unknown> = {}\n for (const key of Object.keys(obj as Record<string, unknown>)) {\n result[key] = restoreFunctions((obj as Record<string, unknown>)[key], callFn)\n }\n return result as T\n}\n\n/**\n * Pool of Comlink-wrapped worker threads.\n * Manages idle/queue scheduling and proxy lifecycle.\n */\nexport class ComlinkPool {\n private workers: Worker[] = []\n private endpoints: Remote<WorkerAPI>[] = []\n private idle: number[] = []\n private queue: QueuedTask[] = []\n\n constructor(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 worker = new Worker(workerFile)\n const endpoint = Comlink.wrap<WorkerAPI>(nodeEndpoint(worker))\n this.workers.push(worker)\n this.endpoints.push(endpoint)\n this.idle.push(i)\n }\n }\n\n private acquire(): number | null {\n return this.idle.pop() ?? null\n }\n\n private release(idx: number) {\n this.idle.push(idx)\n this.drain()\n }\n\n private drain() {\n while (this.queue.length > 0 && this.idle.length > 0) {\n const task = this.queue.shift()!\n const idx = this.idle.pop()!\n void this.executeRender(idx, task.props, task.callFn, task.resolve, task.reject)\n }\n }\n\n private async executeRender(\n idx: number,\n props: RootProps,\n callFn: CallFn | undefined,\n resolve: (result: PoolRenderResult) => void,\n reject: (err: Error) => void,\n ) {\n try {\n const result = await this.endpoints[idx].render(props, callFn)\n resolve({ ...result, workerIdx: idx })\n } catch (err) {\n reject(err instanceof Error ? err : new Error(String(err)))\n } finally {\n this.release(idx)\n }\n }\n\n async render(props: RootProps): Promise<PoolRenderResult> {\n if (this.endpoints.length === 0) {\n throw new Error('[ComlinkPool] Pool has been terminated')\n }\n\n // Extract functions from props, replacing them with serializable sentinels.\n // A single Comlink.proxy() callback is created at the top level so Comlink\n // can correctly transfer it via its proxy transfer handler.\n const fnMap = new Map<number, (...args: unknown[]) => unknown>()\n const cleaned = extractFunctions(props, fnMap, { value: 0 })\n\n let callFnProxy: CallFn | undefined\n if (fnMap.size > 0) {\n callFnProxy = Comlink.proxy(async (id: number, ...args: unknown[]) => {\n const fn = fnMap.get(id)\n if (!fn) throw new Error(`[ComlinkPool] Function #${id} not found`)\n return fn(...args)\n })\n }\n\n const cleanup = () => {\n if (callFnProxy) {\n try {\n ;(callFnProxy as any)[Comlink.releaseProxy]?.()\n } catch {\n // Proxy may already be released\n }\n }\n }\n\n // Direct path — idle worker available\n const idx = this.acquire()\n if (idx !== null) {\n try {\n const result = await this.endpoints[idx].render(cleaned, callFnProxy)\n return { ...result, workerIdx: idx }\n } finally {\n this.release(idx)\n cleanup()\n }\n }\n\n // Queued path — cleanup AFTER the queued task completes, not before\n return new Promise<PoolRenderResult>((resolve, reject) => {\n this.queue.push({\n props: cleaned,\n callFn: callFnProxy,\n resolve: result => {\n cleanup()\n resolve(result)\n },\n reject: err => {\n cleanup()\n reject(err)\n },\n })\n })\n }\n\n callOnCanvas(workerIdx: number, canvasId: number, method: string, args: unknown[]): Promise<Buffer | string | void> {\n return this.endpoints[workerIdx].callOnCanvas(canvasId, method, args) as Promise<Buffer | string | void>\n }\n\n releaseCanvas(workerIdx: number, canvasId: number): void {\n this.endpoints[workerIdx].releaseCanvas(canvasId)\n }\n\n terminate() {\n this.workers.forEach(w => w.terminate())\n this.workers = []\n this.endpoints = []\n this.idle = []\n this.queue = []\n }\n}\n"],"names":["path","fileURLToPath","Worker","Comlink"],"mappings":"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"}
|
|
@@ -23,7 +23,6 @@ function _interopNamespaceDefault(e) {
|
|
|
23
23
|
|
|
24
24
|
var Comlink__namespace = /*#__PURE__*/_interopNamespaceDefault(Comlink);
|
|
25
25
|
|
|
26
|
-
// src/worker/comlink.setup.ts
|
|
27
26
|
/**
|
|
28
27
|
* Fix Comlink.proxy() for Node.js worker_threads (issue #313).
|
|
29
28
|
* The built-in proxy transfer handler uses browser MessageChannel.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comlink.setup.js","sources":["../../../../src/worker/comlink.setup.ts"],"sourcesContent":["// src/worker/comlink.setup.ts\nimport * as Comlink from 'comlink'\nimport { MessageChannel } from 'node:worker_threads'\n\n// Use deep import path — Comlink has no `exports` field (issue #508)\n// @ts-expect-error — Comlink's node-adapter has no type declarations at this path\nimport nodeEndpoint from 'comlink/dist/esm/node-adapter.mjs'\n\n/**\n * Fix Comlink.proxy() for Node.js worker_threads (issue #313).\n * The built-in proxy transfer handler uses browser MessageChannel.\n * This override uses Node's MessageChannel instead.\n *\n * Must be called on BOTH main thread and worker before any Comlink usage.\n */\nfunction installNodeProxyHandler() {\n Comlink.transferHandlers.set('proxy', {\n canHandle: (obj: unknown): obj is { [Comlink.proxyMarker]: true } =>\n (typeof obj === 'object' || typeof obj === 'function') && obj !== null && Comlink.proxyMarker in obj,\n serialize: (obj: unknown) => {\n const { port1, port2 } = new MessageChannel()\n Comlink.expose(obj, nodeEndpoint(port1))\n return [port2, [port2]]\n },\n deserialize: (port: MessagePort) => {\n ;(port as any).start?.()\n return Comlink.wrap(nodeEndpoint(port))\n },\n })\n}\n\n// Install immediately on import\ninstallNodeProxyHandler()\n\nexport { Comlink, nodeEndpoint }\n"],"names":["Comlink","MessageChannel"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"comlink.setup.js","sources":["../../../../src/worker/comlink.setup.ts"],"sourcesContent":["// src/worker/comlink.setup.ts\nimport * as Comlink from 'comlink'\nimport { MessageChannel } from 'node:worker_threads'\n\n// Use deep import path — Comlink has no `exports` field (issue #508)\n// @ts-expect-error — Comlink's node-adapter has no type declarations at this path\nimport nodeEndpoint from 'comlink/dist/esm/node-adapter.mjs'\n\n/**\n * Fix Comlink.proxy() for Node.js worker_threads (issue #313).\n * The built-in proxy transfer handler uses browser MessageChannel.\n * This override uses Node's MessageChannel instead.\n *\n * Must be called on BOTH main thread and worker before any Comlink usage.\n */\nfunction installNodeProxyHandler() {\n Comlink.transferHandlers.set('proxy', {\n canHandle: (obj: unknown): obj is { [Comlink.proxyMarker]: true } =>\n (typeof obj === 'object' || typeof obj === 'function') && obj !== null && Comlink.proxyMarker in obj,\n serialize: (obj: unknown) => {\n const { port1, port2 } = new MessageChannel()\n Comlink.expose(obj, nodeEndpoint(port1))\n return [port2, [port2]]\n },\n deserialize: (port: MessagePort) => {\n ;(port as any).start?.()\n return Comlink.wrap(nodeEndpoint(port))\n },\n })\n}\n\n// Install immediately on import\ninstallNodeProxyHandler()\n\nexport { Comlink, nodeEndpoint }\n"],"names":["Comlink","MessageChannel"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAQA;;;;;;AAMG;AACH,SAAS,uBAAuB,GAAA;AAC9B,IAAAA,kBAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,EAAE;QACpC,SAAS,EAAE,CAAC,GAAY,KACtB,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,UAAU,KAAK,GAAG,KAAK,IAAI,IAAIA,kBAAO,CAAC,WAAW,IAAI,GAAG;AACtG,QAAA,SAAS,EAAE,CAAC,GAAY,KAAI;YAC1B,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAIC,kCAAc,EAAE;YAC7CD,kBAAO,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;AACxC,YAAA,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;AACD,QAAA,WAAW,EAAE,CAAC,IAAiB,KAAI;AAC/B,YAAA,IAAY,CAAC,KAAK,IAAI;YACxB,OAAOA,kBAAO,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;AACF,KAAA,CAAC;AACJ;AAEA;AACA,uBAAuB,EAAE;;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { CanvasRenderingContext2D } from 'skia-canvas';
|
|
2
2
|
import * as YogaTypes from 'yoga-layout';
|
|
3
|
-
import type { BoxProps } from '
|
|
3
|
+
import type { BoxProps } from './canvas.type.js';
|
|
4
4
|
export declare const drawBorders: ({ ctx, node, x, y, width, height, radii, borderColor, borderStyle, }: {
|
|
5
5
|
ctx: CanvasRenderingContext2D;
|
|
6
6
|
node: YogaTypes.Node;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { BoxNode } from '
|
|
2
|
-
import type { TextNode } from '
|
|
3
|
-
import type { ImageNode } from '
|
|
4
|
-
import type { GridNode } from '
|
|
1
|
+
import { BoxNode } from './layout.canvas.js';
|
|
2
|
+
import type { TextNode } from './text.canvas.js';
|
|
3
|
+
import type { ImageNode } from './image.canvas.js';
|
|
4
|
+
import type { GridNode } from './grid.canvas.js';
|
|
5
5
|
import type { FontVariantSetting } from 'skia-canvas';
|
|
6
6
|
import * as Style from '../constant/common.const.js';
|
|
7
7
|
export interface BaseProps {
|
|
@@ -546,6 +546,11 @@ export interface RootProps extends BoxProps {
|
|
|
546
546
|
* @default false
|
|
547
547
|
*/
|
|
548
548
|
useDiskCache?: boolean;
|
|
549
|
+
/**
|
|
550
|
+
* Maximum number of images to fetch concurrently during render.
|
|
551
|
+
* @default 5
|
|
552
|
+
*/
|
|
553
|
+
imageConcurrency?: number;
|
|
549
554
|
/**
|
|
550
555
|
* Enable worker thread rendering for non-blocking operation.
|
|
551
556
|
* Worker mode renders in a separate thread to avoid blocking the event loop.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas.type.d.ts","sourceRoot":"","sources":["../../../src/canvas/canvas.type.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"canvas.type.d.ts","sourceRoot":"","sources":["../../../src/canvas/canvas.type.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { BoxNode } from '
|
|
2
|
-
import type { BaseProps, ChartProps, ChartType, CanvasElement } from '
|
|
1
|
+
import { BoxNode } from './layout.canvas.js';
|
|
2
|
+
import type { BaseProps, ChartProps, ChartType, CanvasElement } from './canvas.type.js';
|
|
3
3
|
import type { CanvasRenderingContext2D } from 'skia-canvas';
|
|
4
4
|
export declare class ChartNode<T extends ChartType> extends BoxNode {
|
|
5
5
|
private chartData;
|
|
@@ -17,5 +17,9 @@ export declare class ChartNode<T extends ChartType> extends BoxNode {
|
|
|
17
17
|
private renderLegend;
|
|
18
18
|
private generateColor;
|
|
19
19
|
}
|
|
20
|
-
|
|
20
|
+
type ChartElement = Extract<CanvasElement, {
|
|
21
|
+
__type: 'Chart';
|
|
22
|
+
}>;
|
|
23
|
+
export declare const Chart: <T extends ChartType>(props: ChartProps<T> & BaseProps) => ChartElement;
|
|
24
|
+
export {};
|
|
21
25
|
//# sourceMappingURL=chart.canvas.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart.canvas.d.ts","sourceRoot":"","sources":["../../../src/canvas/chart.canvas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAW,MAAM,2BAA2B,CAAA;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAoC,UAAU,EAAE,SAAS,EAAqB,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACnJ,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAI3D,qBAAa,SAAS,CAAC,CAAC,SAAS,SAAS,CAAE,SAAQ,OAAO;IACzD,OAAO,CAAC,SAAS,CAA0C;IAC3D,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,YAAY,CAA0B;gBAElC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS;IAyB5C,OAAO,CAAC,aAAa;cAqBL,cAAc,CAAC,GAAG,EAAE,wBAAwB,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IA8BjH,OAAO,CAAC,sBAAsB;IA4B9B,OAAO,CAAC,eAAe;YAqGT,cAAc;YA+Id,eAAe;YAiIf,cAAc;YAsEd,mBAAmB;YAsEnB,YAAY;
|
|
1
|
+
{"version":3,"file":"chart.canvas.d.ts","sourceRoot":"","sources":["../../../src/canvas/chart.canvas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAW,MAAM,2BAA2B,CAAA;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAoC,UAAU,EAAE,SAAS,EAAqB,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACnJ,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAI3D,qBAAa,SAAS,CAAC,CAAC,SAAS,SAAS,CAAE,SAAQ,OAAO;IACzD,OAAO,CAAC,SAAS,CAA0C;IAC3D,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,YAAY,CAA0B;gBAElC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS;IAyB5C,OAAO,CAAC,aAAa;cAqBL,cAAc,CAAC,GAAG,EAAE,wBAAwB,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IA8BjH,OAAO,CAAC,sBAAsB;IA4B9B,OAAO,CAAC,eAAe;YAqGT,cAAc;YA+Id,eAAe;YAiIf,cAAc;YAsEd,mBAAmB;YAsEnB,YAAY;IAiI1B,OAAO,CAAC,aAAa;CAItB;AAED,KAAK,YAAY,GAAG,OAAO,CAAC,aAAa,EAAE;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,CAAA;AAE/D,eAAO,MAAM,KAAK,GAAI,CAAC,SAAS,SAAS,EAAE,OAAO,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,KAAG,YAG5E,CAAA"}
|
|
@@ -595,7 +595,7 @@ class ChartNode extends BoxNode {
|
|
|
595
595
|
if (!this.chartData)
|
|
596
596
|
return;
|
|
597
597
|
const legendItems = 'datasets' in this.chartData
|
|
598
|
-
? this.chartData.datasets.map(d => ({ label: d.label, value: d.data.reduce((a, b) => a + b, 0) }))
|
|
598
|
+
? this.chartData.datasets.map(d => ({ label: d.label, value: d.data.reduce((a, b) => a + b, 0), color: d.color }))
|
|
599
599
|
: this.chartData;
|
|
600
600
|
const fontSize = this.chartOptions?.labelFontSize || 12;
|
|
601
601
|
ctx.font = `${fontSize}px ${this.props.fontFamily || 'sans-serif'}`;
|
|
@@ -609,7 +609,7 @@ class ChartNode extends BoxNode {
|
|
|
609
609
|
const rows = [];
|
|
610
610
|
let currentRow = { items: [], width: 0 };
|
|
611
611
|
legendItems.forEach((point, index) => {
|
|
612
|
-
const color =
|
|
612
|
+
const color = point.color || this.generateColor(index);
|
|
613
613
|
const label = 'datasets' in this.chartData ? point.label : `${point.label} (${point.value})`;
|
|
614
614
|
const labelWidth = ctx.measureText(label).width;
|
|
615
615
|
const itemWidth = boxSize + 5 + labelWidth;
|
|
@@ -648,8 +648,7 @@ class ChartNode extends BoxNode {
|
|
|
648
648
|
const itemX = x + 10;
|
|
649
649
|
const itemY = startY + index * itemHeight;
|
|
650
650
|
const boxY = itemY + (itemHeight - boxSize) / 2;
|
|
651
|
-
ctx.fillStyle =
|
|
652
|
-
('datasets' in this.chartData ? this.chartData.datasets[index].color : point.color) || this.generateColor(index);
|
|
651
|
+
ctx.fillStyle = point.color || this.generateColor(index);
|
|
653
652
|
ctx.fillRect(itemX, boxY, boxSize, boxSize);
|
|
654
653
|
const label = 'datasets' in this.chartData ? point.label : `${point.label} (${point.value})`;
|
|
655
654
|
TextNode.renderSimpleText(ctx, label, itemX + boxSize + 5, itemY + itemHeight / 2, {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { GridProps, GridItemProps, CanvasElement } from '
|
|
2
|
-
import { BoxNode, RowNode } from '
|
|
1
|
+
import type { GridProps, GridItemProps, CanvasElement } from './canvas.type.js';
|
|
2
|
+
import { BoxNode, RowNode } from './layout.canvas.js';
|
|
3
3
|
/**
|
|
4
4
|
* GridItem Node. Theoretically just a BoxNode but typed differently in factory.
|
|
5
5
|
* In runtime, it behaves almost like a BoxNode, but we can detect it if needed,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid.canvas.d.ts","sourceRoot":"","sources":["../../../src/canvas/grid.canvas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAiB,aAAa,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"grid.canvas.d.ts","sourceRoot":"","sources":["../../../src/canvas/grid.canvas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAiB,aAAa,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACrG,OAAO,EAAE,OAAO,EAA+B,OAAO,EAAE,MAAM,2BAA2B,CAAA;AAIzF;;;;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,13 +1,7 @@
|
|
|
1
|
-
import { BoxNode, RowNode } from './layout.canvas.js';
|
|
1
|
+
import { BoxNode, RowNode, normalizeDescriptorChildren } from './layout.canvas.js';
|
|
2
2
|
import { Style } from '../constant/common.const.js';
|
|
3
3
|
import { parsePercentage } from './canvas.helper.js';
|
|
4
4
|
|
|
5
|
-
function normalizeDescriptorChildren(children) {
|
|
6
|
-
if (children === undefined || children === null || children === false)
|
|
7
|
-
return undefined;
|
|
8
|
-
const arr = (Array.isArray(children) ? children : [children]).filter(Boolean);
|
|
9
|
-
return arr.length > 0 ? arr : undefined;
|
|
10
|
-
}
|
|
11
5
|
/**
|
|
12
6
|
* GridItem Node. Theoretically just a BoxNode but typed differently in factory.
|
|
13
7
|
* In runtime, it behaves almost like a BoxNode, but we can detect it if needed,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { BaseProps, ImageProps, CanvasElement } from '
|
|
1
|
+
import type { BaseProps, ImageProps, CanvasElement } from './canvas.type.js';
|
|
2
2
|
import { type CanvasRenderingContext2D, Image as CanvasImage } from 'skia-canvas';
|
|
3
|
-
import { BoxNode } from '
|
|
3
|
+
import { BoxNode } from './layout.canvas.js';
|
|
4
4
|
/**
|
|
5
5
|
* Per-render image cache — keyed by `src|color` for string sources.
|
|
6
6
|
* Scoped to a single RootNode.render() call; discarded after rendering.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type CanvasRenderingContext2D } from 'skia-canvas';
|
|
2
|
-
import type { BaseProps, BoxProps, CanvasElement } from '
|
|
2
|
+
import type { BaseProps, BoxProps, CanvasElement } from './canvas.type.js';
|
|
3
3
|
import { Node } from '../constant/common.const.js';
|
|
4
4
|
/**
|
|
5
5
|
* @class BoxNode
|
|
@@ -87,6 +87,10 @@ export declare class BoxNode {
|
|
|
87
87
|
*/
|
|
88
88
|
protected _renderContent(ctx: CanvasRenderingContext2D, x: number, y: number, width: number, height: number): Promise<void>;
|
|
89
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Normalizes children into a flat CanvasElement array, filtering falsy values.
|
|
92
|
+
*/
|
|
93
|
+
export declare function normalizeDescriptorChildren(children: BoxProps['children']): CanvasElement[] | undefined;
|
|
90
94
|
/**
|
|
91
95
|
* Creates a new BoxNode instance.
|
|
92
96
|
* @param {BoxProps} props Box properties and configuration.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.canvas.d.ts","sourceRoot":"","sources":["../../../src/canvas/layout.canvas.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;
|
|
1
|
+
{"version":3,"file":"layout.canvas.d.ts","sourceRoot":"","sources":["../../../src/canvas/layout.canvas.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;AACjG,OAAa,EAAS,IAAI,EAAE,MAAM,4BAA4B,CAAA;AAI9D;;;;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;IAqClE;;OAEG;IACH,SAAS,CAAC,aAAa,IAAI,IAAI;IAI/B;;;;OAIG;IACH,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM;IAcnD;;;OAGG;IACI,cAAc,IAAI,OAAO;IAiBhC;;OAEG;IACH,SAAS,CAAC,+BAA+B;IAIzC;;;OAGG;IACH,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ;IAyGnC;;;;;OAKG;IACG,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,OAAO,GAAE,MAAU,EAAE,OAAO,GAAE,MAAU;IA+JpF;;;;;;;;OAQG;cACa,cAAc,CAAC,GAAG,EAAE,wBAAwB,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAmRlH;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,aAAa,EAAE,GAAG,SAAS,CAIvG;AAwDD;;;;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,10 +1,9 @@
|
|
|
1
1
|
import { Canvas } from 'skia-canvas';
|
|
2
2
|
import { parsePercentage, parseBorderRadius, drawRoundedRectPath, drawBorders } from './canvas.helper.js';
|
|
3
|
-
import { omit } from 'lodash-es';
|
|
4
|
-
import tinycolor from 'tinycolor2';
|
|
5
3
|
import { Style } from '../constant/common.const.js';
|
|
6
4
|
import YogaTypes__default from 'yoga-layout';
|
|
7
5
|
|
|
6
|
+
const _HEX_ALPHA_RE = /^#([0-9a-fA-F]{8})$/;
|
|
8
7
|
/**
|
|
9
8
|
* @class BoxNode
|
|
10
9
|
* @classdesc Base node class for rendering rectangular boxes with layout, styling, and children.
|
|
@@ -123,7 +122,8 @@ class BoxNode {
|
|
|
123
122
|
console.warn('Attempted to append an invalid child node.', child);
|
|
124
123
|
return;
|
|
125
124
|
}
|
|
126
|
-
|
|
125
|
+
const { children: _c, ...inheritedProps } = this.props;
|
|
126
|
+
child.resolveInheritedStyles(inheritedProps);
|
|
127
127
|
child.applyDefaults();
|
|
128
128
|
this.children.push(child);
|
|
129
129
|
this.node.insertChild(child.node, index);
|
|
@@ -212,69 +212,12 @@ class BoxNode {
|
|
|
212
212
|
}
|
|
213
213
|
}
|
|
214
214
|
}
|
|
215
|
-
if (gap)
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
}
|
|
222
|
-
else {
|
|
223
|
-
for (const [gutter, value] of Object.entries(gap)) {
|
|
224
|
-
if (gutter in Style.Gutter) {
|
|
225
|
-
const gutterKey = gutter;
|
|
226
|
-
if (typeof value === 'string' && value.endsWith('%')) {
|
|
227
|
-
this.node.setGapPercent(Style.Gutter[gutterKey], parseFloat(value));
|
|
228
|
-
}
|
|
229
|
-
else {
|
|
230
|
-
this.node.setGap(Style.Gutter[gutterKey], value);
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
if (margin) {
|
|
237
|
-
if (typeof margin === 'number' || margin === 'auto') {
|
|
238
|
-
this.node.setMargin(Style.Edge.All, margin);
|
|
239
|
-
}
|
|
240
|
-
else if (typeof margin === 'string' && margin.endsWith('%')) {
|
|
241
|
-
this.node.setMarginPercent(Style.Edge.All, parseFloat(margin));
|
|
242
|
-
}
|
|
243
|
-
else {
|
|
244
|
-
for (const [edge, value] of Object.entries(margin)) {
|
|
245
|
-
if (edge in Style.Edge) {
|
|
246
|
-
const edgeKey = edge;
|
|
247
|
-
if (typeof value === 'string' && value.endsWith('%')) {
|
|
248
|
-
this.node.setMarginPercent(Style.Edge[edgeKey], parseFloat(value));
|
|
249
|
-
}
|
|
250
|
-
else {
|
|
251
|
-
this.node.setMargin(Style.Edge[edgeKey], value);
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
if (padding) {
|
|
258
|
-
if (typeof padding === 'number') {
|
|
259
|
-
this.node.setPadding(Style.Edge.All, padding);
|
|
260
|
-
}
|
|
261
|
-
else if (typeof padding === 'string' && padding.endsWith('%')) {
|
|
262
|
-
this.node.setPaddingPercent(Style.Edge.All, parseFloat(padding));
|
|
263
|
-
}
|
|
264
|
-
else {
|
|
265
|
-
for (const [edge, value] of Object.entries(padding)) {
|
|
266
|
-
if (edge in Style.Edge) {
|
|
267
|
-
const edgeKey = edge;
|
|
268
|
-
if (typeof value === 'string' && value.endsWith('%')) {
|
|
269
|
-
this.node.setPaddingPercent(Style.Edge[edgeKey], parseFloat(value));
|
|
270
|
-
}
|
|
271
|
-
else {
|
|
272
|
-
this.node.setPadding(Style.Edge[edgeKey], value);
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
}
|
|
215
|
+
if (gap)
|
|
216
|
+
_setEdgeValues(gap, Style.Gutter, (e, v) => this.node.setGap(e, v), (e, v) => this.node.setGapPercent(e, v));
|
|
217
|
+
if (margin)
|
|
218
|
+
_setEdgeValues(margin, Style.Edge, (e, v) => this.node.setMargin(e, v), (e, v) => this.node.setMarginPercent(e, v), true);
|
|
219
|
+
if (padding)
|
|
220
|
+
_setEdgeValues(padding, Style.Edge, (e, v) => this.node.setPadding(e, v), (e, v) => this.node.setPaddingPercent(e, v));
|
|
278
221
|
if (border) {
|
|
279
222
|
if (typeof border === 'number') {
|
|
280
223
|
this.node.setBorder(Style.Edge.All, border);
|
|
@@ -495,8 +438,7 @@ class BoxNode {
|
|
|
495
438
|
const backgroundColor = this.props.backgroundColor;
|
|
496
439
|
let isOpaque = false;
|
|
497
440
|
if (backgroundColor && !this.props.gradient) {
|
|
498
|
-
|
|
499
|
-
isOpaque = rgba && rgba.a === 1;
|
|
441
|
+
isOpaque = _isColorOpaque(backgroundColor);
|
|
500
442
|
}
|
|
501
443
|
// Render outset shadows if present
|
|
502
444
|
if (outsetShadows.length > 0) {
|
|
@@ -734,6 +676,54 @@ function normalizeDescriptorChildren(children) {
|
|
|
734
676
|
const arr = (Array.isArray(children) ? children : [children]).filter(Boolean);
|
|
735
677
|
return arr.length > 0 ? arr : undefined;
|
|
736
678
|
}
|
|
679
|
+
/**
|
|
680
|
+
* Generic helper to set gap/margin/padding edge values on a Yoga node.
|
|
681
|
+
* Handles scalar (number | string), percent strings, and per-edge object notation.
|
|
682
|
+
*/
|
|
683
|
+
function _setEdgeValues(value, keys, setFn, percentFn, allowAuto = false) {
|
|
684
|
+
if (typeof value === 'number' || (allowAuto && value === 'auto')) {
|
|
685
|
+
setFn(keys.All, value);
|
|
686
|
+
}
|
|
687
|
+
else if (typeof value === 'string' && percentFn && value.endsWith('%')) {
|
|
688
|
+
percentFn(keys.All, parseFloat(value));
|
|
689
|
+
}
|
|
690
|
+
else if (typeof value === 'object') {
|
|
691
|
+
for (const [key, val] of Object.entries(value)) {
|
|
692
|
+
if (key in keys) {
|
|
693
|
+
const edgeKey = keys[key];
|
|
694
|
+
if (typeof val === 'string' && percentFn && val.endsWith('%')) {
|
|
695
|
+
percentFn(edgeKey, parseFloat(val));
|
|
696
|
+
}
|
|
697
|
+
else {
|
|
698
|
+
setFn(edgeKey, val);
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
}
|
|
702
|
+
}
|
|
703
|
+
}
|
|
704
|
+
/**
|
|
705
|
+
* Checks if a CSS color string represents a fully opaque color (alpha = 1).
|
|
706
|
+
* Handles hex (#RGB, #RRGGBB, #RRGGBBAA), rgb()/rgba(), and transparent.
|
|
707
|
+
*/
|
|
708
|
+
function _isColorOpaque(color) {
|
|
709
|
+
if (color === 'transparent')
|
|
710
|
+
return false;
|
|
711
|
+
const hexAlpha = _HEX_ALPHA_RE.exec(color);
|
|
712
|
+
if (hexAlpha) {
|
|
713
|
+
return parseInt(hexAlpha[1].slice(6), 16) === 255;
|
|
714
|
+
}
|
|
715
|
+
// #RGB or #RRGGBB are always opaque
|
|
716
|
+
if (color.startsWith('#'))
|
|
717
|
+
return true;
|
|
718
|
+
// rgba(r, g, b, a)
|
|
719
|
+
const rgba = /rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*([\d.]+))?\s*\)/.exec(color);
|
|
720
|
+
if (rgba) {
|
|
721
|
+
const a = rgba[4] !== undefined ? parseFloat(rgba[4]) : 1;
|
|
722
|
+
return a === 1;
|
|
723
|
+
}
|
|
724
|
+
// Unknown format — assume opaque (covers named colors like 'black', 'white', etc.)
|
|
725
|
+
return true;
|
|
726
|
+
}
|
|
737
727
|
/**
|
|
738
728
|
* Creates a new BoxNode instance.
|
|
739
729
|
* @param {BoxProps} props Box properties and configuration.
|
|
@@ -795,4 +785,4 @@ const Row = ({ children, ...rest }) => ({
|
|
|
795
785
|
children: normalizeDescriptorChildren(children),
|
|
796
786
|
});
|
|
797
787
|
|
|
798
|
-
export { Box, BoxNode, Column, ColumnNode, Row, RowNode };
|
|
788
|
+
export { Box, BoxNode, Column, ColumnNode, Row, RowNode, normalizeDescriptorChildren };
|
|
@@ -1,23 +1,9 @@
|
|
|
1
1
|
import { Canvas, type CanvasRenderingContext2D } from 'skia-canvas';
|
|
2
|
-
import { ColumnNode, BoxNode } from '
|
|
3
|
-
import type { BaseProps, RootProps, CanvasElement, RootPropsWithWorker, RootPropsWithoutWorker } from '
|
|
4
|
-
export declare const _clearRegisteredFonts: () => void;
|
|
5
|
-
export interface CanvasEngineConfig {
|
|
6
|
-
/** Run rendering in worker threads to avoid blocking the event loop (default: true) */
|
|
7
|
-
workerMode?: boolean;
|
|
8
|
-
/** Number of worker threads in the pool (default: os.cpus().length - 1) */
|
|
9
|
-
workers?: number;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Configure the canvas rendering engine.
|
|
13
|
-
* Call this once at application startup before rendering.
|
|
14
|
-
* @deprecated Pass workerMode and workers directly to Root() props instead.
|
|
15
|
-
*/
|
|
16
|
-
export declare function configure(options: CanvasEngineConfig): void;
|
|
2
|
+
import { ColumnNode, BoxNode } from './layout.canvas.js';
|
|
3
|
+
import type { BaseProps, RootProps, CanvasElement, RootPropsWithWorker, RootPropsWithoutWorker } from './canvas.type.js';
|
|
17
4
|
/**
|
|
18
5
|
* Terminate all worker pools and free worker thread resources.
|
|
19
6
|
* Call this when shutting down a long-running server to clean up immediately.
|
|
20
|
-
* After calling, you must call configure() again before rendering.
|
|
21
7
|
*/
|
|
22
8
|
export declare function terminate(): void;
|
|
23
9
|
/**
|
|
@@ -42,6 +28,8 @@ export declare class RootNode extends ColumnNode {
|
|
|
42
28
|
private readonly targetHeight;
|
|
43
29
|
/** Scale factor for rendering (e.g. 2 for 2x resolution) */
|
|
44
30
|
private readonly scale;
|
|
31
|
+
/** Max concurrent image fetches during render (default: 5) */
|
|
32
|
+
private readonly imageConcurrency;
|
|
45
33
|
/**
|
|
46
34
|
* Creates a new root node for canvas rendering
|
|
47
35
|
* @param props Configuration properties for the root node
|
|
@@ -53,6 +41,11 @@ export declare class RootNode extends ColumnNode {
|
|
|
53
41
|
* @returns Array of all ImageNode instances found in the tree
|
|
54
42
|
*/
|
|
55
43
|
private findAllImageNodes;
|
|
44
|
+
/**
|
|
45
|
+
* Registers fonts with serialization to prevent duplicate FontLibrary.use() calls
|
|
46
|
+
* when multiple Root() instances are created concurrently.
|
|
47
|
+
*/
|
|
48
|
+
private _registerFonts;
|
|
56
49
|
/**
|
|
57
50
|
* Renders the entire node tree to a canvas, handling image loading, layout calculation,
|
|
58
51
|
* and final drawing
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"root.canvas.d.ts","sourceRoot":"","sources":["../../../src/canvas/root.canvas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAe,KAAK,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAEhF,OAAO,EAAE,UAAU,EAAE,OAAO,EAAW,MAAM,2BAA2B,CAAA;AACxE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"root.canvas.d.ts","sourceRoot":"","sources":["../../../src/canvas/root.canvas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAe,KAAK,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAEhF,OAAO,EAAE,UAAU,EAAE,OAAO,EAAW,MAAM,2BAA2B,CAAA;AACxE,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACT,aAAa,EACb,mBAAmB,EACnB,sBAAsB,EAKvB,MAAM,yBAAyB,CAAA;AAoChC;;;GAGG;AACH,wBAAgB,SAAS,SAKxB;AAqFD;;;;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,CAAoB;IACjD,4DAA4D;IAC5D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,8DAA8D;IAC9D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IAEzC;;;;OAIG;gBACS,KAAK,EAAE,SAAS,GAAG,SAAS;IAkCxC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAczB;;;OAGG;YACW,cAAc;IAgC5B;;;;OAIG;IACY,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACjG,MAAM,CAAC,GAAG,CAAC,EAAE,wBAAwB,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAmElG;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"}
|