stickyflow 0.3.0 → 0.5.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.
Files changed (65) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +51 -5
  3. package/dist/binding/index.cjs +34 -0
  4. package/dist/binding/index.cjs.map +1 -0
  5. package/dist/binding/index.d.cts +11 -0
  6. package/dist/binding/index.d.ts +11 -0
  7. package/dist/binding/index.js +5 -0
  8. package/dist/binding/index.js.map +1 -0
  9. package/dist/{chunk-XEN5QIIJ.js → chunk-7VW2XKVB.js} +3 -3
  10. package/dist/{chunk-XEN5QIIJ.js.map → chunk-7VW2XKVB.js.map} +1 -1
  11. package/dist/chunk-BODZN3ZI.js +1182 -0
  12. package/dist/chunk-BODZN3ZI.js.map +1 -0
  13. package/dist/{chunk-CSXQD3ON.js → chunk-G7NRK5AG.js} +1128 -1081
  14. package/dist/chunk-G7NRK5AG.js.map +1 -0
  15. package/dist/{chunk-BYMIYXP5.js → chunk-IEHE6WVN.js} +197 -19
  16. package/dist/chunk-IEHE6WVN.js.map +1 -0
  17. package/dist/{chunk-HFOGKSNU.cjs → chunk-L3VJXZFD.cjs} +15 -15
  18. package/dist/{chunk-HFOGKSNU.cjs.map → chunk-L3VJXZFD.cjs.map} +1 -1
  19. package/dist/{chunk-65IVT4GK.js → chunk-LTGF5OHP.js} +1008 -631
  20. package/dist/chunk-LTGF5OHP.js.map +1 -0
  21. package/dist/chunk-TWDLOXRM.cjs +1189 -0
  22. package/dist/chunk-TWDLOXRM.cjs.map +1 -0
  23. package/dist/{chunk-UXDWH2JC.cjs → chunk-VK3T6O5Z.cjs} +1165 -1118
  24. package/dist/chunk-VK3T6O5Z.cjs.map +1 -0
  25. package/dist/{chunk-CXL254BT.cjs → chunk-XY2GZUHC.cjs} +204 -18
  26. package/dist/chunk-XY2GZUHC.cjs.map +1 -0
  27. package/dist/{chunk-DDCTNLLD.cjs → chunk-ZMLQIMJK.cjs} +1504 -1128
  28. package/dist/chunk-ZMLQIMJK.cjs.map +1 -0
  29. package/dist/index.cjs +53 -1013
  30. package/dist/index.cjs.map +1 -1
  31. package/dist/index.d.cts +22 -14
  32. package/dist/index.d.ts +22 -14
  33. package/dist/index.js +6 -993
  34. package/dist/index.js.map +1 -1
  35. package/dist/interaction/index.cjs +474 -305
  36. package/dist/interaction/index.cjs.map +1 -1
  37. package/dist/interaction/index.d.cts +11 -3
  38. package/dist/interaction/index.d.ts +11 -3
  39. package/dist/interaction/index.js +255 -87
  40. package/dist/interaction/index.js.map +1 -1
  41. package/dist/{render-C5X74hds.d.cts → render-CgX_y15a.d.cts} +193 -116
  42. package/dist/{render-C5X74hds.d.ts → render-CgX_y15a.d.ts} +193 -116
  43. package/dist/runtime-DnUxca3Y.d.ts +10 -0
  44. package/dist/runtime-reWgr7MP.d.cts +10 -0
  45. package/dist/{runtimeTypes-D8hPZ62T.d.ts → runtimeTypes-CEBGueYM.d.ts} +10 -5
  46. package/dist/{runtimeTypes-yTSAvtCn.d.cts → runtimeTypes-D60w6nyF.d.cts} +10 -5
  47. package/dist/stickyflow-diagram.global.js +35 -35
  48. package/dist/stickyflow-diagram.global.js.map +1 -1
  49. package/dist/{types-BDKDf4zr.d.cts → types-DYLC_lsk.d.ts} +3 -2
  50. package/dist/{types-CdgGdtoD.d.ts → types-DvhMpqrL.d.cts} +3 -2
  51. package/dist/viewer/index.cjs +9 -9
  52. package/dist/viewer/index.d.cts +4 -4
  53. package/dist/viewer/index.d.ts +4 -4
  54. package/dist/viewer/index.js +4 -4
  55. package/dist/web-component/index.cjs +6 -6
  56. package/dist/web-component/index.d.cts +2 -2
  57. package/dist/web-component/index.d.ts +2 -2
  58. package/dist/web-component/index.js +4 -4
  59. package/package.json +6 -1
  60. package/dist/chunk-65IVT4GK.js.map +0 -1
  61. package/dist/chunk-BYMIYXP5.js.map +0 -1
  62. package/dist/chunk-CSXQD3ON.js.map +0 -1
  63. package/dist/chunk-CXL254BT.cjs.map +0 -1
  64. package/dist/chunk-DDCTNLLD.cjs.map +0 -1
  65. package/dist/chunk-UXDWH2JC.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/model/shape/supportedTypes.ts","../src/adapters/importJson/groups.ts","../src/adapters/importJson/assembly.ts","../src/binding/types.ts","../src/binding/contract.ts","../src/binding/dataSource.ts","../src/binding/expression.ts","../src/binding/targets.ts","../src/binding/graph.ts","../src/binding/interactive.ts","../src/binding/checkData.ts","../src/binding/applyValue.ts","../src/binding/runtimeState.ts","../src/binding/evaluation.ts","../src/binding/handlers.ts","../src/binding/runtime.ts"],"names":["sflToCanvasState","collectCanvasObjects","parseSource","sflToRenderInput","renderCanvas"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ShapeType } from './types';\n\nexport const SHAPE_TYPES = [\n 'rectangle',\n 'rounded_rectangle',\n 'triangle',\n 'diamond',\n 'hexagon',\n 'oval',\n 'circle',\n 'document',\n 'parallelogram',\n 'trapezoid',\n 'cylinder',\n 'note',\n 'cloud',\n 'predefined_process',\n 'pill',\n 'person',\n 'symbol',\n] as const satisfies readonly ShapeType[];\n","import type { SflGroupOut } from '../../sflSemantic/sflToCanvasState';\nimport type { ImportBuckets, ImportGroup } from './types';\n\nexport function emptyBuckets(): ImportBuckets {\n return { notes: [], shapes: [], links: [] };\n}\n\nexport function indexGroupMembership(\n groups: SflGroupOut[],\n membership = new Map<string, string>(),\n): Map<string, string> {\n for (const group of groups) {\n group.canvasObjectIds.forEach(id => {\n membership.set(id, group.id);\n });\n indexGroupMembership(group.subGroups, membership);\n }\n return membership;\n}\n\nexport function createBucketResolver(membership: Map<string, string>, canvas: ImportBuckets) {\n const groupBuckets = new Map<string, ImportBuckets>();\n const bucketFor = (id: string): ImportBuckets => {\n const groupId = membership.get(id);\n if (!groupId) {\n return canvas;\n }\n const bucket = groupBuckets.get(groupId) ?? emptyBuckets();\n groupBuckets.set(groupId, bucket);\n return bucket;\n };\n return { groupBuckets, bucketFor };\n}\n\nexport function flattenGroups(groups: SflGroupOut[], buckets: Map<string, ImportBuckets>): ImportGroup[] {\n const flattened: ImportGroup[] = [];\n const visit = (group: SflGroupOut, parentGroupId?: string): void => {\n flattened.push({\n id: group.id,\n name: group.name,\n color: group.color,\n icon: group.icon,\n parent_group_id: parentGroupId,\n parent_frame_id: group.parentFrameId,\n entities: buckets.get(group.id) ?? emptyBuckets(),\n });\n group.subGroups.forEach(child => {\n visit(child, group.id);\n });\n };\n groups.forEach(group => {\n visit(group);\n });\n return flattened;\n}\n","import { collectCanvasObjects } from '../../renderInput/fromSfl/canvasObjects/collect';\nimport { sflToCanvasState } from '../../sflSemantic/sflToCanvasState';\nimport { createBucketResolver, emptyBuckets, flattenGroups, indexGroupMembership } from './groups';\nimport type { SflImportJson } from './types';\n\nexport function sflToImportJson(sfl: string): SflImportJson {\n const state = sflToCanvasState(sfl);\n const collected = collectCanvasObjects(state);\n const canvas = emptyBuckets();\n const { groupBuckets, bucketFor } = createBucketResolver(indexGroupMembership(state.groups), canvas);\n\n for (const shape of collected.shapes) {\n bucketFor(shape.id).shapes.push(shape);\n }\n for (const link of collected.links) {\n bucketFor(link.id).links.push(link);\n }\n\n return {\n project: { export_type: 'stickyflow_canvas_v3', name: 'SFL Import' },\n canvas: {\n entities: {\n notes: [],\n shapes: canvas.shapes,\n links: canvas.links,\n frames: collected.frames,\n swimlanes: collected.swimlanes,\n isometricObjects: collected.isometricObjects,\n paths: collected.paths,\n charts: collected.charts,\n connections: collected.connections,\n },\n },\n layers: { groups: flattenGroups(state.groups, groupBuckets) },\n diagnostics: state.diagnostics,\n };\n}\n","import type { BindingOperator, BlockKind, SflExpr } from '../sflLanguage/ast';\n\nexport type ScalarType = 'number' | 'string' | 'boolean';\nexport type BindingType = ScalarType | { list: ScalarType };\nexport type BindingValue = number | string | boolean | number[] | string[] | boolean[];\n\nconst DECLARED: Record<string, ScalarType> = {\n number: 'number',\n int: 'number',\n float: 'number',\n string: 'string',\n boolean: 'boolean',\n bool: 'boolean',\n};\n\nexport const scalarOf = (declared: string): ScalarType | undefined => DECLARED[declared];\n\nexport const typeName = (type: BindingType): string => (typeof type === 'string' ? type : `list<${type.list}>`);\n\nexport const sameType = (left: BindingType, right: BindingType): boolean => typeName(left) === typeName(right);\n\nexport type SourceMode = 'table' | 'record';\n\nexport type Row = Record<string, unknown>;\n\nexport interface DataSourceContract {\n name: string;\n mode: SourceMode;\n fields: Record<string, ScalarType>;\n declared: Record<string, string>;\n}\n\nexport interface BindingDiagnostic {\n severity: 'error' | 'warning';\n code: string;\n message: string;\n line: number;\n col: number;\n}\n\nexport interface BoundProperty {\n id: string;\n ownerKind: BlockKind;\n ownerPath: string[];\n property: string;\n operator: BindingOperator;\n expr: SflExpr;\n type: BindingType;\n dependencies: string[];\n line: number;\n col: number;\n}\n\nexport interface BoundAssignment {\n source: string;\n field: string;\n expr: SflExpr;\n type: ScalarType;\n line: number;\n col: number;\n}\n\nexport interface BoundHandler {\n id: string;\n ownerKind: BlockKind;\n ownerPath: string[];\n event: string;\n assignments: BoundAssignment[];\n line: number;\n col: number;\n}\n\nexport interface ElementInfo {\n kind: BlockKind;\n widgetType?: string;\n}\n\nexport const POINTER_EVENTS = ['onPress', 'onRelease', 'onTap', 'onDrag'] as const;\nexport const TICK_EVENT = 'onTick';\n","import type { SflBlock, SflDocument, SflValue } from '../sflLanguage/ast';\nimport { type BindingDiagnostic, type DataSourceContract, type SourceMode, scalarOf } from './types';\n\nfunction identOf(value: SflValue | undefined): string | undefined {\n return value?.type === 'ident' ? value.segments.join('.') : undefined;\n}\n\nfunction readContract(block: SflBlock, diagnostics: BindingDiagnostic[]): DataSourceContract {\n const properties = block.entries.flatMap(entry => (entry.type === 'property' ? [entry.property] : []));\n const mode: SourceMode =\n identOf(properties.find(property => property.key === 'mode')?.value) === 'record' ? 'record' : 'table';\n const contract: DataSourceContract = { name: block.name, mode, fields: {}, declared: {} };\n for (const entry of block.entries) {\n if (entry.type === 'fields') {\n for (const field of entry.fields) {\n const declared = identOf(field.value) ?? '';\n const scalar = scalarOf(declared);\n if (scalar) {\n contract.fields[field.key] = scalar;\n contract.declared[field.key] = declared;\n } else {\n diagnostics.push({\n severity: 'error',\n code: 'unknown-field-type',\n message: `Field '${block.name}.${field.key}' has unknown type '${declared}' (use int, float, number, string or bool).`,\n line: 0,\n col: 0,\n });\n }\n }\n }\n }\n return contract;\n}\n\nexport function visitBlocks(blocks: SflBlock[], visit: (block: SflBlock) => void): void {\n for (const block of blocks) {\n visit(block);\n visitBlocks(\n block.entries.flatMap(entry => (entry.type === 'block' ? [entry.block] : [])),\n visit,\n );\n }\n}\n\nexport function collectContracts(sflDocument: SflDocument): {\n contracts: Map<string, DataSourceContract>;\n diagnostics: BindingDiagnostic[];\n} {\n const contracts = new Map<string, DataSourceContract>();\n const diagnostics: BindingDiagnostic[] = [];\n visitBlocks(sflDocument.blocks, block => {\n if (block.kind !== 'DataSource') {\n return;\n }\n if (contracts.has(block.name)) {\n diagnostics.push({\n severity: 'error',\n code: 'duplicate-data-source',\n message: `DataSource '${block.name}' is declared more than once.`,\n line: 0,\n col: 0,\n });\n return;\n }\n contracts.set(block.name, readContract(block, diagnostics));\n });\n return { contracts, diagnostics };\n}\n","import type { Row } from './types';\n\nexport type SourceListener = () => void;\n\nexport interface DataSource {\n get(): readonly Row[] | Row;\n subscribe(listener: SourceListener): () => void;\n}\n\nexport interface MutableDataSource extends DataSource {\n set(next: readonly Row[] | Row): void;\n}\n\nexport function createDataSource(initial: readonly Row[] | Row): MutableDataSource {\n let current = initial;\n const listeners = new Set<SourceListener>();\n return {\n get: () => current,\n set(next) {\n current = next;\n for (const listener of [...listeners]) {\n listener();\n }\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n };\n}\n","import type { SflExpr } from '../sflLanguage/ast';\nimport { type BindingType, type BindingValue, sameType, typeName } from './types';\n\nexport interface TypeScope {\n resolve(path: string[]): BindingType | undefined;\n}\n\nexport interface ValueEnv {\n read(path: string[]): BindingValue;\n}\n\ntype Report = (code: string, message: string) => void;\n\nconst isNumeric = (type: BindingType): boolean =>\n type === 'number' || (typeof type === 'object' && type.list === 'number');\nconst isList = (type: BindingType): boolean => typeof type === 'object';\n\nexport function collectRefs(expr: SflExpr): string[][] {\n switch (expr.kind) {\n case 'ref':\n return [expr.path];\n case 'unary':\n return collectRefs(expr.operand);\n case 'binary':\n return [...collectRefs(expr.left), ...collectRefs(expr.right)];\n case 'call':\n return expr.args.flatMap(collectRefs);\n default:\n return [];\n }\n}\n\nfunction inferBinary(\n expr: Extract<SflExpr, { kind: 'binary' }>,\n scope: TypeScope,\n report: Report,\n): BindingType | undefined {\n const left = inferType(expr.left, scope, report);\n const right = inferType(expr.right, scope, report);\n if (!left || !right) {\n return undefined;\n }\n const { operator } = expr;\n if (operator === '&&' || operator === '||') {\n if (left !== 'boolean' || right !== 'boolean') {\n report('type-mismatch', `'${operator}' needs two booleans, got ${typeName(left)} and ${typeName(right)}.`);\n return undefined;\n }\n return 'boolean';\n }\n if (['>', '<', '>=', '<='].includes(operator)) {\n if (left !== 'number' || right !== 'number') {\n report('type-mismatch', `'${operator}' compares two numbers, got ${typeName(left)} and ${typeName(right)}.`);\n return undefined;\n }\n return 'boolean';\n }\n if (operator === '==' || operator === '!=') {\n if (isList(left) || !sameType(left, right)) {\n report(\n 'type-mismatch',\n `'${operator}' compares two values of the same simple type, got ${typeName(left)} and ${typeName(right)}.`,\n );\n return undefined;\n }\n return 'boolean';\n }\n if (operator === '+' && !isList(left) && !isList(right) && (left === 'string' || right === 'string')) {\n return 'string';\n }\n if (!isNumeric(left) || !isNumeric(right)) {\n report('type-mismatch', `'${operator}' needs numbers, got ${typeName(left)} and ${typeName(right)}.`);\n return undefined;\n }\n return isList(left) || isList(right) ? { list: 'number' } : 'number';\n}\n\nconst MATH: Record<string, { arguments: number; apply(values: number[]): number }> = {\n round: { arguments: 1, apply: ([value]) => Math.round(value) },\n floor: { arguments: 1, apply: ([value]) => Math.floor(value) },\n ceil: { arguments: 1, apply: ([value]) => Math.ceil(value) },\n abs: { arguments: 1, apply: ([value]) => Math.abs(value) },\n min: { arguments: 2, apply: ([a, b]) => Math.min(a, b) },\n max: { arguments: 2, apply: ([a, b]) => Math.max(a, b) },\n clamp: { arguments: 3, apply: ([value, low, high]) => Math.min(high, Math.max(low, value)) },\n moveToward: {\n arguments: 3,\n apply: ([current, target, maxStep]) =>\n Math.abs(target - current) <= maxStep ? target : current + Math.sign(target - current) * maxStep,\n },\n};\n\nfunction inferMath(\n name: string,\n expr: Extract<SflExpr, { kind: 'call' }>,\n scope: TypeScope,\n report: Report,\n): BindingType | undefined {\n const spec = MATH[name];\n if (expr.args.length !== spec.arguments) {\n report('wrong-arguments', `${name}() takes exactly ${spec.arguments} argument${spec.arguments === 1 ? '' : 's'}.`);\n return undefined;\n }\n const types = expr.args.map(arg => inferType(arg, scope, report));\n if (types.some(type => !type)) {\n return undefined;\n }\n if (types.some(type => !isNumeric(type as BindingType))) {\n report(\n 'type-mismatch',\n `${name}() needs numbers, got ${types.map(type => typeName(type as BindingType)).join(', ')}.`,\n );\n return undefined;\n }\n return types.some(type => isList(type as BindingType)) ? { list: 'number' } : 'number';\n}\n\nfunction inferCall(\n expr: Extract<SflExpr, { kind: 'call' }>,\n scope: TypeScope,\n report: Report,\n): BindingType | undefined {\n const name = expr.callee.join('.');\n if (name in MATH) {\n return inferMath(name, expr, scope, report);\n }\n if (name !== 'when') {\n report('unknown-function', `Unknown function '${name}'. Available: when, ${Object.keys(MATH).join(', ')}.`);\n return undefined;\n }\n if (expr.args.length !== 3) {\n report('wrong-arguments', 'when(condition, then, else) takes exactly three arguments.');\n return undefined;\n }\n const [condition, whenTrue, whenFalse] = expr.args.map(arg => inferType(arg, scope, report));\n if (!condition || !whenTrue || !whenFalse) {\n return undefined;\n }\n if (condition !== 'boolean') {\n report('type-mismatch', `The condition of when() must be boolean, got ${typeName(condition)}.`);\n return undefined;\n }\n if (!sameType(whenTrue, whenFalse)) {\n report(\n 'type-mismatch',\n `when() branches must have the same type, got ${typeName(whenTrue)} and ${typeName(whenFalse)}.`,\n );\n return undefined;\n }\n return whenTrue;\n}\n\nexport function inferType(expr: SflExpr, scope: TypeScope, report: Report): BindingType | undefined {\n switch (expr.kind) {\n case 'number':\n return 'number';\n case 'string':\n return 'string';\n case 'boolean':\n return 'boolean';\n case 'ref': {\n const type = scope.resolve(expr.path);\n if (!type) {\n const name = expr.path.join('.');\n report(\n 'unknown-reference',\n name === 'time.delta'\n ? \"'time.delta' is only available in an onTick handler.\"\n : `Unknown reference '${name}'. Use <DataSource>.<field>, or <element>.pressed / hovered / pointer.`,\n );\n }\n return type;\n }\n case 'unary': {\n const operand = inferType(expr.operand, scope, report);\n const wanted = expr.operator === '!' ? 'boolean' : 'number';\n if (operand && operand !== wanted) {\n report('type-mismatch', `'${expr.operator}' needs a ${wanted}, got ${typeName(operand)}.`);\n return undefined;\n }\n return operand ? wanted : undefined;\n }\n case 'binary':\n return inferBinary(expr, scope, report);\n case 'call':\n return inferCall(expr, scope, report);\n }\n}\n\nfunction arithmetic(operator: string, left: number, right: number): number {\n switch (operator) {\n case '+':\n return left + right;\n case '-':\n return left - right;\n case '*':\n return left * right;\n default:\n return right === 0 ? 0 : left / right;\n }\n}\n\nconst text = (value: BindingValue): string =>\n typeof value === 'number' ? String(Math.round(value * 10) / 10) : String(value);\n\nfunction evaluateBinary(expr: Extract<SflExpr, { kind: 'binary' }>, env: ValueEnv): BindingValue {\n const left = evaluate(expr.left, env);\n if (expr.operator === '&&') {\n return Boolean(left) && Boolean(evaluate(expr.right, env));\n }\n if (expr.operator === '||') {\n return Boolean(left) || Boolean(evaluate(expr.right, env));\n }\n const right = evaluate(expr.right, env);\n switch (expr.operator) {\n case '>':\n return (left as number) > (right as number);\n case '<':\n return (left as number) < (right as number);\n case '>=':\n return (left as number) >= (right as number);\n case '<=':\n return (left as number) <= (right as number);\n case '==':\n return left === right;\n case '!=':\n return left !== right;\n }\n if (typeof left === 'string' || typeof right === 'string') {\n return text(left) + text(right);\n }\n const apply = (a: number, b: number) => arithmetic(expr.operator, a, b);\n if (Array.isArray(left) && Array.isArray(right)) {\n const length = Math.min(left.length, right.length);\n return Array.from({ length }, (_value, index) => apply(left[index] as number, right[index] as number));\n }\n if (Array.isArray(left)) {\n return left.map(value => apply(value as number, right as number));\n }\n if (Array.isArray(right)) {\n return right.map(value => apply(left as number, value as number));\n }\n return apply(left as number, right as number);\n}\n\nexport function evaluate(expr: SflExpr, env: ValueEnv): BindingValue {\n switch (expr.kind) {\n case 'number':\n case 'string':\n case 'boolean':\n return expr.value;\n case 'ref':\n return env.read(expr.path);\n case 'unary': {\n const operand = evaluate(expr.operand, env);\n return expr.operator === '!' ? !operand : -(operand as number);\n }\n case 'binary':\n return evaluateBinary(expr, env);\n case 'call': {\n const name = expr.callee.join('.');\n if (name in MATH) {\n const values = expr.args.map(arg => evaluate(arg, env));\n const length = Math.max(0, ...values.map(value => (Array.isArray(value) ? value.length : 0)));\n if (length === 0 && !values.some(Array.isArray)) {\n return MATH[name].apply(values as number[]);\n }\n return Array.from({ length }, (_value, index) =>\n MATH[name].apply(values.map(value => (Array.isArray(value) ? (value[index] as number) : (value as number)))),\n );\n }\n const [condition, whenTrue, whenFalse] = expr.args;\n return evaluate(condition, env) ? evaluate(whenTrue, env) : evaluate(whenFalse, env);\n }\n }\n}\n","import type { BlockKind } from '../sflLanguage/ast';\nimport type { BindingType } from './types';\n\nexport const BINDABLE_PROPERTIES: Partial<Record<BlockKind, Record<string, BindingType>>> = {\n Chart: { categories: { list: 'string' }, text: 'string' },\n Series: { values: { list: 'number' }, label: 'string' },\n Shape: { text: 'string', fill: 'string', stroke: 'string', textColor: 'string', opacity: 'number' },\n Text: { text: 'string', textColor: 'string', opacity: 'number' },\n Widget: { value: 'number' },\n};\n","import type { BlockKind, SflBinding, SflBlock, SflDocument, SflExpr, SflHandler } from '../sflLanguage/ast';\nimport { collectContracts, visitBlocks } from './contract';\nimport { collectRefs, inferType, type TypeScope } from './expression';\nimport { BINDABLE_PROPERTIES } from './targets';\nimport {\n type BindingDiagnostic,\n type BindingType,\n type BoundAssignment,\n type BoundHandler,\n type BoundProperty,\n type DataSourceContract,\n type ElementInfo,\n POINTER_EVENTS,\n sameType,\n TICK_EVENT,\n typeName,\n} from './types';\n\nexport interface BindingGraph {\n contracts: Map<string, DataSourceContract>;\n bindings: BoundProperty[];\n handlers: BoundHandler[];\n elements: Map<string, ElementInfo>;\n byField: Map<string, BoundProperty[]>;\n diagnostics: BindingDiagnostic[];\n}\n\ninterface BindingSite {\n kind: BlockKind;\n path: string[];\n binding: SflBinding;\n}\n\nfunction collectSites(blocks: SflBlock[], chartPath: string[], sites: BindingSite[]): void {\n for (const block of blocks) {\n const path = block.kind === 'Series' ? [...chartPath, block.name] : [block.name];\n const ownChart = block.kind === 'Chart' ? [block.name] : chartPath;\n for (const entry of block.entries) {\n if (entry.type === 'binding') {\n sites.push({ kind: block.kind, path, binding: entry.binding });\n } else if (entry.type === 'style') {\n for (const binding of entry.style.bindings ?? []) {\n sites.push({ kind: block.kind, path, binding });\n }\n } else if (entry.type === 'block') {\n collectSites([entry.block], ownChart, sites);\n } else if (entry.type === 'data') {\n for (const inner of entry.data.entries) {\n if (inner.type === 'binding') {\n sites.push({ kind: 'Chart', path: ownChart, binding: inner.binding });\n } else if (inner.type === 'block') {\n collectSites([inner.block], ownChart, sites);\n }\n }\n }\n }\n }\n}\n\nfunction fieldType(contract: DataSourceContract, field: string): BindingType | undefined {\n const type = contract.fields[field];\n if (!type) {\n return undefined;\n }\n return contract.mode === 'table' ? { list: type } : type;\n}\n\nconst INTERACTIVE_KINDS: BlockKind[] = ['Shape', 'Text', 'Widget'];\nconst SCALE_WIDGETS = ['ruler', 'tickScale'];\n\nfunction collectElements(sflDocument: SflDocument): Map<string, ElementInfo> {\n const elements = new Map<string, ElementInfo>();\n visitBlocks(sflDocument.blocks, block => {\n if (!INTERACTIVE_KINDS.includes(block.kind) || elements.has(block.name)) {\n return;\n }\n const type = block.entries.find(entry => entry.type === 'property' && entry.property.key === 'type');\n const value = type?.type === 'property' ? type.property.value : undefined;\n elements.set(block.name, {\n kind: block.kind,\n widgetType: value?.type === 'ident' ? value.segments.join('.') : undefined,\n });\n });\n return elements;\n}\n\nfunction elementStateType(element: ElementInfo, state: string): BindingType | undefined {\n if (state === 'pressed' || state === 'hovered') {\n return 'boolean';\n }\n return state === 'pointer' && element.kind === 'Widget' && SCALE_WIDGETS.includes(element.widgetType ?? '')\n ? 'number'\n : undefined;\n}\n\nfunction createScope(\n contracts: Map<string, DataSourceContract>,\n elements: Map<string, ElementInfo>,\n ticking = false,\n): TypeScope {\n return {\n resolve(path) {\n if (path.length !== 2) {\n return undefined;\n }\n const contract = contracts.get(path[0]);\n if (contract) {\n return fieldType(contract, path[1]);\n }\n if (ticking && path[0] === 'time' && path[1] === 'delta') {\n return 'number';\n }\n const element = elements.get(path[0]);\n return element ? elementStateType(element, path[1]) : undefined;\n },\n };\n}\n\nfunction qualify(expr: SflExpr, source: DataSourceContract): SflExpr {\n switch (expr.kind) {\n case 'ref':\n return expr.path.length === 1 && expr.path[0] in source.fields\n ? { kind: 'ref', path: [source.name, expr.path[0]] }\n : expr;\n case 'unary':\n return { ...expr, operand: qualify(expr.operand, source) };\n case 'binary':\n return { ...expr, left: qualify(expr.left, source), right: qualify(expr.right, source) };\n case 'call':\n return { ...expr, args: expr.args.map(arg => qualify(arg, source)) };\n default:\n return expr;\n }\n}\n\ninterface HandlerSite {\n kind: BlockKind;\n name: string;\n handler: SflHandler;\n}\n\nfunction collectHandlerSites(sflDocument: SflDocument): HandlerSite[] {\n const sites: HandlerSite[] = [];\n visitBlocks(sflDocument.blocks, block => {\n for (const entry of block.entries) {\n if (entry.type === 'handler') {\n sites.push({ kind: block.kind, name: block.name, handler: entry.handler });\n }\n }\n });\n return sites;\n}\n\ntype Report = (code: string, message: string, line?: number, col?: number) => void;\n\nfunction allowedEvents(kind: BlockKind): readonly string[] {\n if (kind === 'DataSource') {\n return [TICK_EVENT];\n }\n return INTERACTIVE_KINDS.includes(kind) ? POINTER_EVENTS : [];\n}\n\nfunction eventIsKnown(site: HandlerSite, report: Report): boolean {\n const { kind, name, handler } = site;\n const allowed = allowedEvents(kind);\n if (allowed.includes(handler.event)) {\n return true;\n }\n report(\n 'unknown-event',\n allowed.length\n ? `${kind} '${name}' has no event '${handler.event}' (events: ${allowed.join(', ')}).`\n : `${kind} '${name}' has no events; handlers belong on a Shape, Text, Widget or DataSource.`,\n );\n return false;\n}\n\nfunction bindAssignment(\n assignment: SflHandler['assignments'][number],\n name: string,\n own: DataSourceContract | undefined,\n contracts: Map<string, DataSourceContract>,\n scope: TypeScope,\n report: Report,\n): BoundAssignment | undefined {\n const at = (code: string, message: string) => report(code, message, assignment.line, assignment.col);\n const target = assignment.target.join('.');\n const [source, field] = own && assignment.target.length === 1 ? [own.name, assignment.target[0]] : assignment.target;\n const contract = assignment.target.length <= 2 ? contracts.get(source) : undefined;\n if (!contract || field === undefined) {\n at('unknown-target', `'${target}' is not a field of a DataSource (write <DataSource>.<field>).`);\n return undefined;\n }\n if (own && contract !== own) {\n at('tick-foreign-target', `onTick of '${name}' can only change fields of '${name}', not '${target}'.`);\n return undefined;\n }\n if (contract.mode !== 'record') {\n at(\n 'target-not-record',\n `DataSource '${source}' is a table source; only record sources can be changed by a handler.`,\n );\n return undefined;\n }\n const wanted = contract.fields[field];\n if (!wanted) {\n at('unknown-target', `DataSource '${source}' has no field '${field}'.`);\n return undefined;\n }\n const expr = own ? qualify(assignment.expr, own) : assignment.expr;\n const actual = inferType(expr, scope, (code, message) => at(code, message));\n if (!actual) {\n return undefined;\n }\n if (!sameType(actual, wanted)) {\n at('type-mismatch', `'${target}' is ${wanted}, the expression is ${typeName(actual)}.`);\n return undefined;\n }\n return { source, field, expr, type: wanted, line: assignment.line, col: assignment.col };\n}\n\nfunction bindHandler(\n site: HandlerSite,\n contracts: Map<string, DataSourceContract>,\n elements: Map<string, ElementInfo>,\n diagnostics: BindingDiagnostic[],\n): BoundHandler | undefined {\n const { kind, name, handler } = site;\n const report: Report = (code, message, line = handler.line, col = handler.col) =>\n diagnostics.push({ severity: 'error', code, message, line, col });\n if (!eventIsKnown(site, report)) {\n return undefined;\n }\n const ticking = kind === 'DataSource';\n const own = ticking ? contracts.get(name) : undefined;\n if (ticking && own?.mode !== 'record') {\n report('tick-needs-record', `DataSource '${name}' has to be a record source to change its fields on every tick.`);\n return undefined;\n }\n const scope = createScope(contracts, elements, ticking);\n const assignments = handler.assignments.flatMap(\n assignment => bindAssignment(assignment, name, own, contracts, scope, report) ?? [],\n );\n return {\n id: `${kind}.${name}.${handler.event}`,\n ownerKind: kind,\n ownerPath: [name],\n event: handler.event,\n assignments,\n line: handler.line,\n col: handler.col,\n };\n}\n\nfunction warnNameCollisions(\n contracts: Map<string, DataSourceContract>,\n elements: Map<string, ElementInfo>,\n diagnostics: BindingDiagnostic[],\n): void {\n for (const name of elements.keys()) {\n if (contracts.has(name)) {\n diagnostics.push({\n severity: 'warning',\n code: 'name-collision',\n message: `'${name}' is a DataSource and an element; in expressions it means the DataSource.`,\n line: 0,\n col: 0,\n });\n }\n }\n}\n\nfunction bindProperty(\n site: BindingSite,\n scope: TypeScope,\n diagnostics: BindingDiagnostic[],\n): BoundProperty | undefined {\n const { kind, path, binding } = site;\n const owner = path.join('.');\n const report = (code: string, message: string, severity: 'error' | 'warning' = 'error') =>\n diagnostics.push({ severity, code, message, line: binding.line, col: binding.col });\n if (binding.operator !== '<-') {\n report(\n 'binding-operator-unsupported',\n `'${binding.operator}' on '${binding.key}' is parsed but not executed yet; only '<-' is supported.`,\n 'warning',\n );\n return undefined;\n }\n const expected = kind === 'Shader' ? 'number' : BINDABLE_PROPERTIES[kind]?.[binding.key];\n if (!expected) {\n const allowed = Object.keys(BINDABLE_PROPERTIES[kind] ?? {});\n report(\n 'unknown-bound-property',\n `${kind} '${owner}' has no bindable property '${binding.key}'${allowed.length ? ` (bindable: ${allowed.join(', ')})` : ''}.`,\n );\n return undefined;\n }\n const actual = inferType(binding.expr, scope, report);\n if (!actual) {\n return undefined;\n }\n if (!sameType(actual, expected)) {\n report('type-mismatch', `'${binding.key}' expects ${typeName(expected)}, the expression is ${typeName(actual)}.`);\n return undefined;\n }\n return {\n id: `${kind}.${owner}.${binding.key}`,\n ownerKind: kind,\n ownerPath: path,\n property: binding.key,\n operator: binding.operator,\n expr: binding.expr,\n type: expected,\n dependencies: [...new Set(collectRefs(binding.expr).map(ref => ref.join('.')))],\n line: binding.line,\n col: binding.col,\n };\n}\n\nfunction indexByField(bindings: BoundProperty[]): Map<string, BoundProperty[]> {\n const byField = new Map<string, BoundProperty[]>();\n for (const binding of bindings) {\n for (const dependency of binding.dependencies) {\n byField.set(dependency, [...(byField.get(dependency) ?? []), binding]);\n }\n }\n return byField;\n}\n\nexport function buildBindingGraph(sflDocument: SflDocument): BindingGraph {\n const { contracts, diagnostics } = collectContracts(sflDocument);\n const elements = collectElements(sflDocument);\n warnNameCollisions(contracts, elements, diagnostics);\n const scope = createScope(contracts, elements);\n const sites: BindingSite[] = [];\n collectSites(sflDocument.blocks, [], sites);\n\n const bindings = sites.flatMap(site => bindProperty(site, scope, diagnostics) ?? []);\n const handlers = collectHandlerSites(sflDocument).flatMap(\n site => bindHandler(site, contracts, elements, diagnostics) ?? [],\n );\n return { contracts, bindings, handlers, elements, byField: indexByField(bindings), diagnostics };\n}\n","import { collectRefs } from './expression';\nimport type { BindingGraph } from './graph';\n\nexport interface InteractiveElements {\n pressable: ReadonlySet<string>;\n scales: ReadonlySet<string>;\n}\n\nexport function interactiveElements(graph: BindingGraph): InteractiveElements {\n const pressable = new Set<string>();\n const scales = new Set<string>();\n const note = ([name, state]: string[]) => {\n if (graph.contracts.has(name) || !graph.elements.has(name)) {\n return;\n }\n (state === 'pointer' ? scales : pressable).add(name);\n };\n for (const handler of graph.handlers) {\n if (handler.ownerKind !== 'DataSource') {\n pressable.add(handler.ownerPath[0]);\n }\n for (const assignment of handler.assignments) {\n collectRefs(assignment.expr).forEach(note);\n }\n }\n for (const binding of graph.bindings) {\n collectRefs(binding.expr).forEach(note);\n }\n return { pressable, scales };\n}\n","import type { DataSource } from './dataSource';\nimport type { DataSourceContract, Row } from './types';\n\nconst typeOfValue = (value: unknown): string =>\n typeof value === 'number' || typeof value === 'string' || typeof value === 'boolean' ? typeof value : 'other';\n\nexport function checkData(contract: DataSourceContract, data: ReturnType<DataSource['get']>): string | null {\n const rows = Array.isArray(data) ? data : [data];\n if ((contract.mode === 'table') !== Array.isArray(data)) {\n return `DataSource '${contract.name}' is a ${contract.mode} source but delivered ${Array.isArray(data) ? 'rows' : 'a record'}.`;\n }\n for (const row of rows as Row[]) {\n for (const [field, type] of Object.entries(contract.fields)) {\n if (typeOfValue(row[field]) !== type) {\n return `'${contract.name}.${field}' should be ${contract.declared[field]}, got ${typeOfValue(row[field])}.`;\n }\n if (contract.declared[field] === 'int' && !Number.isInteger(row[field])) {\n return `'${contract.name}.${field}' should be a whole number (int), got ${String(row[field])}.`;\n }\n }\n }\n return null;\n}\n","import type { RenderInput } from '../renderInput/types';\nimport type { BindingValue, BoundProperty } from './types';\n\ntype Apply = (input: RenderInput, path: string[], value: BindingValue) => void;\n\nconst findChart = (input: RenderInput, id: string) => input.charts?.find(candidate => candidate.id === id);\n\nfunction applyToSeries(\n input: RenderInput,\n path: string[],\n change: (series: { values: unknown; label: string }) => void,\n): void {\n const chart = findChart(input, path[0]);\n if (!chart) {\n return;\n }\n let series = chart.series.find(candidate => candidate.id === path[1]);\n if (!series) {\n series = { id: path[1], label: path[1], values: [] };\n chart.series.push(series);\n }\n change(series);\n}\n\nfunction setShape(input: RenderInput, path: string[], change: (shape: RenderInput['shapes'][number]) => void): void {\n const shape = input.shapes.find(candidate => candidate.id === path[0]);\n if (shape) {\n change(shape);\n }\n}\n\nexport const APPLY: Record<string, Apply> = {\n 'Chart.categories': (input, path, value) => {\n const chart = findChart(input, path[0]);\n if (chart) {\n chart.config = { ...(chart.config ?? {}), categories: value as string[] } as typeof chart.config;\n }\n },\n 'Chart.text': (input, path, value) => {\n const chart = findChart(input, path[0]);\n if (chart) {\n chart.title = value as string;\n }\n },\n 'Series.values': (input, path, value) => applyToSeries(input, path, series => (series.values = value)),\n 'Series.label': (input, path, value) => applyToSeries(input, path, series => (series.label = value as string)),\n 'Shape.text': (input, path, value) => {\n const shape = input.shapes.find(candidate => candidate.id === path[0]);\n if (shape) {\n shape.text = value as string;\n }\n },\n 'Shape.fill': (input, path, value) => setShape(input, path, shape => (shape.fillColor = value as string)),\n 'Shape.stroke': (input, path, value) => setShape(input, path, shape => (shape.strokeColor = value as string)),\n 'Shape.textColor': (input, path, value) => setShape(input, path, shape => (shape.textColor = value as string)),\n 'Shape.opacity': (input, path, value) => setShape(input, path, shape => (shape.opacity = value as number)),\n 'Widget.value': (input, path, value) => {\n const widget = input.widgets?.find(candidate => candidate.id === path[0]);\n if (widget) {\n widget.value = String(value);\n }\n },\n};\n\nexport function applyShader(input: RenderInput, binding: BoundProperty, value: BindingValue): string[] {\n const owners: string[] = [];\n for (const shape of input.shapes) {\n if (shape.shader?.name === binding.ownerPath[0]) {\n shape.shader.parameters = { ...shape.shader.parameters, [binding.property]: value as number };\n owners.push(shape.id);\n }\n }\n return owners;\n}\n","import type { RenderResult } from '../render';\nimport { sflToRenderInput } from '../renderInput/fromSfl';\nimport type { RenderInput } from '../renderInput/types';\nimport { parse } from '../sflLanguage';\nimport type { DataSource } from './dataSource';\nimport { type BindingGraph, buildBindingGraph } from './graph';\nimport type { BindingRuntimeOptions, ElementState, LiveChange } from './runtimeTypes';\nimport type { BindingDiagnostic, BindingValue, BoundProperty } from './types';\n\nexport interface RuntimeState {\n options: BindingRuntimeOptions;\n graph: BindingGraph;\n diagnostics: BindingDiagnostic[];\n input: RenderInput;\n sources: Map<string, DataSource>;\n applied: Map<string, string>;\n dirty: Set<BoundProperty>;\n listeners: Set<(result: RenderResult) => void>;\n warned: Set<string>;\n liveListeners: Set<(change: LiveChange) => void>;\n liveState: Map<string, LiveChange>;\n elementState: Map<string, ElementState>;\n scheduled: boolean;\n}\n\nexport function createRuntimeState(sfl: string, options: BindingRuntimeOptions): RuntimeState {\n const graph = buildBindingGraph(parse(sfl));\n const elementState = new Map<string, ElementState>();\n for (const name of graph.elements.keys()) {\n if (!graph.contracts.has(name)) {\n elementState.set(name, { pressed: false, hovered: false, pointer: 0 });\n }\n }\n return {\n options,\n graph,\n diagnostics: [...graph.diagnostics],\n input: structuredClone(sflToRenderInput(sfl)),\n sources: new Map(),\n applied: new Map(),\n dirty: new Set(),\n listeners: new Set(),\n warned: new Set(),\n liveListeners: new Set(),\n liveState: new Map(),\n elementState,\n scheduled: false,\n };\n}\n\nexport function readValue(state: RuntimeState, path: string[]): BindingValue {\n const [name, field] = path;\n const element = state.sources.has(name) ? undefined : state.elementState.get(name);\n if (element) {\n return element[field as keyof ElementState];\n }\n const data = state.sources.get(name)?.get();\n if (data === undefined) {\n throw new Error(`DataSource '${name}' has no data yet.`);\n }\n return Array.isArray(data)\n ? (data.map(row => row[field]) as BindingValue)\n : ((data as Record<string, unknown>)[field] as BindingValue);\n}\n\nexport function missingSource(state: RuntimeState, binding: BoundProperty): string | undefined {\n return binding.dependencies\n .map(dependency => dependency.split('.')[0])\n .find(name => !state.sources.has(name) && !state.elementState.has(name));\n}\n","import { type RenderResult, renderCanvas } from '../render';\nimport { APPLY, applyShader } from './applyValue';\nimport { evaluate } from './expression';\nimport { missingSource, type RuntimeState, readValue } from './runtimeState';\nimport type { LiveChange } from './runtimeTypes';\nimport type { BoundProperty } from './types';\n\nfunction announce(state: RuntimeState, id: string, change: LiveChange): void {\n state.liveState.set(id, change);\n for (const listener of [...state.liveListeners]) {\n listener(change);\n }\n}\n\nfunction warnMissingSource(state: RuntimeState, binding: BoundProperty, missing: string): void {\n if (state.warned.has(missing)) {\n return;\n }\n state.warned.add(missing);\n state.diagnostics.push({\n severity: 'warning',\n code: 'source-not-registered',\n message: `DataSource '${missing}' has no registered source, so '${binding.property}' stays empty.`,\n line: binding.line,\n col: binding.col,\n });\n}\n\nfunction evaluateBinding(state: RuntimeState, binding: BoundProperty): boolean {\n const missing = missingSource(state, binding);\n if (missing) {\n warnMissingSource(state, binding, missing);\n return false;\n }\n const value = evaluate(binding.expr, { read: path => readValue(state, path) });\n const key = JSON.stringify(value);\n if (state.applied.get(binding.id) === key) {\n return false;\n }\n state.applied.set(binding.id, key);\n if (binding.ownerKind === 'Shader') {\n announce(state, binding.id, {\n kind: 'shader',\n owners: applyShader(state.input, binding, value),\n parameters: { [binding.property]: value as number },\n });\n return false;\n }\n APPLY[`${binding.ownerKind === 'Text' ? 'Shape' : binding.ownerKind}.${binding.property}`]?.(\n state.input,\n binding.ownerPath,\n value,\n );\n if (binding.ownerKind === 'Widget') {\n announce(state, binding.id, { kind: 'widget', id: binding.ownerPath[0], value: value as number });\n return false;\n }\n return true;\n}\n\nexport function flush(state: RuntimeState): RenderResult | null {\n state.scheduled = false;\n let changed = false;\n for (const binding of state.dirty) {\n changed = evaluateBinding(state, binding) || changed;\n }\n state.dirty.clear();\n if (!changed) {\n return null;\n }\n const result = renderCanvas(state.input, { ...state.options.renderOptions, linkHitAreas: true });\n for (const listener of [...state.listeners]) {\n listener(result);\n }\n return result;\n}\n\nexport function schedule(state: RuntimeState): void {\n if (!state.scheduled) {\n state.scheduled = true;\n queueMicrotask(() => flush(state));\n }\n}\n\nexport function markDirty(state: RuntimeState, name: string): void {\n for (const [field, bindings] of state.graph.byField) {\n if (field.startsWith(`${name}.`)) {\n for (const binding of bindings) {\n state.dirty.add(binding);\n }\n }\n }\n}\n","import type { MutableDataSource } from './dataSource';\nimport { markDirty, schedule } from './evaluation';\nimport { collectRefs, evaluate } from './expression';\nimport { type RuntimeState, readValue } from './runtimeState';\nimport type { ElementState } from './runtimeTypes';\nimport type { BoundHandler, Row } from './types';\nimport { TICK_EVENT } from './types';\n\nexport function runHandler(state: RuntimeState, handler: BoundHandler, delta?: number): void {\n const env = {\n read: (path: string[]) => (path[0] === 'time' && path[1] === 'delta' ? (delta ?? 0) : readValue(state, path)),\n };\n for (const assignment of handler.assignments) {\n const target = state.sources.get(assignment.source);\n const readable = collectRefs(assignment.expr).every(\n ([name]) => name === 'time' || state.sources.has(name) || state.elementState.has(name),\n );\n if (!target || !('set' in target) || !readable) {\n continue;\n }\n let value = evaluate(assignment.expr, env);\n if (typeof value === 'number') {\n value =\n state.graph.contracts.get(assignment.source)?.declared[assignment.field] === 'int' ? Math.round(value) : value;\n if (!Number.isFinite(value)) {\n continue;\n }\n }\n const row = target.get() as Row;\n if (row[assignment.field] !== value) {\n (target as MutableDataSource).set({ ...row, [assignment.field]: value });\n }\n }\n}\n\nexport function dispatch(state: RuntimeState, id: string, event: string): void {\n for (const handler of state.graph.handlers) {\n if (handler.event === event && handler.ownerKind !== 'DataSource' && handler.ownerPath[0] === id) {\n runHandler(state, handler);\n }\n }\n}\n\nexport function runTick(state: RuntimeState, seconds: number): void {\n for (const handler of state.graph.handlers) {\n if (handler.event === TICK_EVENT) {\n runHandler(state, handler, seconds);\n }\n }\n}\n\nexport function setElementState(state: RuntimeState, id: string, patch: Partial<ElementState>): void {\n const current = state.elementState.get(id);\n if (!current || (Object.keys(patch) as Array<keyof ElementState>).every(key => current[key] === patch[key])) {\n return;\n }\n Object.assign(current, patch);\n markDirty(state, id);\n schedule(state);\n}\n","import { type RenderOptions, type RenderResult, renderCanvas } from '../render';\nimport { checkData } from './checkData';\nimport type { DataSource } from './dataSource';\nimport { flush, markDirty, schedule } from './evaluation';\nimport { dispatch, runTick, setElementState } from './handlers';\nimport { interactiveElements } from './interactive';\nimport { createRuntimeState, type RuntimeState } from './runtimeState';\nimport type { BindingRuntime, BindingRuntimeOptions, BindingTarget, LiveChange } from './runtimeTypes';\nimport type { Row } from './types';\n\nfunction registerSource(state: RuntimeState, name: string, source: DataSource): () => void {\n const contract = state.graph.contracts.get(name);\n if (!contract) {\n throw new Error(`No DataSource '${name}' is declared in the SFL.`);\n }\n const accept = (): boolean => {\n const problem = checkData(contract, source.get());\n if (problem) {\n state.diagnostics.push({ severity: 'error', code: 'data-type-mismatch', message: problem, line: 0, col: 0 });\n return false;\n }\n return true;\n };\n const adopt = () => {\n if (accept()) {\n state.sources.set(name, source);\n state.warned.delete(name);\n markDirty(state, name);\n schedule(state);\n }\n };\n adopt();\n const unsubscribe = source.subscribe(adopt);\n return () => {\n unsubscribe();\n state.sources.delete(name);\n };\n}\n\nfunction pushLiveChange(target: BindingTarget, change: LiveChange): void {\n if (change.kind === 'widget') {\n target.setWidgetValue?.(change.id, change.value);\n return;\n }\n for (const owner of change.owners) {\n target.setShaderParameters?.(owner, change.parameters);\n }\n}\n\nfunction attach(state: RuntimeState, target: BindingTarget): () => void {\n const send = (change: LiveChange) => pushLiveChange(target, change);\n state.liveListeners.add(send);\n for (const change of state.liveState.values()) {\n send(change);\n }\n const listener = (result: RenderResult) => target.update({ svg: result.svg });\n state.listeners.add(listener);\n for (const binding of state.graph.bindings) {\n state.dirty.add(binding);\n }\n flush(state);\n return () => {\n state.listeners.delete(listener);\n state.liveListeners.delete(send);\n };\n}\n\nexport function createBindingRuntime(sfl: string, options: BindingRuntimeOptions = {}): BindingRuntime {\n const state = createRuntimeState(sfl, options);\n for (const binding of state.graph.bindings) {\n if (binding.dependencies.length === 0) {\n state.dirty.add(binding);\n }\n }\n if (state.dirty.size > 0) {\n schedule(state);\n }\n\n return {\n diagnostics: state.diagnostics,\n graph: state.graph,\n interactive: interactiveElements(state.graph),\n input: state.input,\n registerSource: (name, source) => registerSource(state, name, source),\n setElementState: (id, patch) => setElementState(state, id, patch),\n press(id) {\n setElementState(state, id, { pressed: true });\n dispatch(state, id, 'onPress');\n },\n release(id, tapped) {\n setElementState(state, id, { pressed: false });\n dispatch(state, id, 'onRelease');\n if (tapped) {\n dispatch(state, id, 'onTap');\n }\n },\n drag(id, pointer) {\n if (pointer !== undefined) {\n setElementState(state, id, { pointer });\n }\n dispatch(state, id, 'onDrag');\n },\n tick: seconds => runTick(state, seconds),\n flush: () => flush(state),\n onRender(listener) {\n state.listeners.add(listener);\n return () => state.listeners.delete(listener);\n },\n attach: target => attach(state, target),\n };\n}\n\nexport interface RenderBoundOptions extends RenderOptions {\n data?: Record<string, Row | Row[]>;\n}\n\nexport function renderBound(sfl: string, options: RenderBoundOptions = {}): RenderResult {\n const { data = {}, ...renderOptions } = options;\n const runtime = createBindingRuntime(sfl, { renderOptions });\n for (const [name, rows] of Object.entries(data)) {\n runtime.registerSource(name, { get: () => rows, subscribe: () => () => undefined });\n }\n runtime.flush();\n return renderCanvas(runtime.input, renderOptions);\n}\n"]}
1
+ {"version":3,"sources":["../src/model/shape/supportedTypes.ts","../src/adapters/importJson/groups.ts","../src/adapters/importJson/assembly.ts"],"names":["sflToCanvasState","collectCanvasObjects"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ShapeType } from './types';\n\nexport const SHAPE_TYPES = [\n 'rectangle',\n 'rounded_rectangle',\n 'triangle',\n 'diamond',\n 'hexagon',\n 'oval',\n 'circle',\n 'document',\n 'parallelogram',\n 'trapezoid',\n 'cylinder',\n 'note',\n 'cloud',\n 'predefined_process',\n 'pill',\n 'person',\n 'symbol',\n] as const satisfies readonly ShapeType[];\n","import type { SflGroupOut } from '../../sflSemantic/sflToCanvasState';\nimport type { ImportBuckets, ImportGroup } from './types';\n\nexport function emptyBuckets(): ImportBuckets {\n return { notes: [], shapes: [], links: [] };\n}\n\nexport function indexGroupMembership(\n groups: SflGroupOut[],\n membership = new Map<string, string>(),\n): Map<string, string> {\n for (const group of groups) {\n group.canvasObjectIds.forEach(id => {\n membership.set(id, group.id);\n });\n indexGroupMembership(group.subGroups, membership);\n }\n return membership;\n}\n\nexport function createBucketResolver(membership: Map<string, string>, canvas: ImportBuckets) {\n const groupBuckets = new Map<string, ImportBuckets>();\n const bucketFor = (id: string): ImportBuckets => {\n const groupId = membership.get(id);\n if (!groupId) {\n return canvas;\n }\n const bucket = groupBuckets.get(groupId) ?? emptyBuckets();\n groupBuckets.set(groupId, bucket);\n return bucket;\n };\n return { groupBuckets, bucketFor };\n}\n\nexport function flattenGroups(groups: SflGroupOut[], buckets: Map<string, ImportBuckets>): ImportGroup[] {\n const flattened: ImportGroup[] = [];\n const visit = (group: SflGroupOut, parentGroupId?: string): void => {\n flattened.push({\n id: group.id,\n name: group.name,\n color: group.color,\n icon: group.icon,\n parent_group_id: parentGroupId,\n parent_frame_id: group.parentFrameId,\n entities: buckets.get(group.id) ?? emptyBuckets(),\n });\n group.subGroups.forEach(child => {\n visit(child, group.id);\n });\n };\n groups.forEach(group => {\n visit(group);\n });\n return flattened;\n}\n","import { collectCanvasObjects } from '../../renderInput/fromSfl/canvasObjects/collect';\nimport { sflToCanvasState } from '../../sflSemantic/sflToCanvasState';\nimport { createBucketResolver, emptyBuckets, flattenGroups, indexGroupMembership } from './groups';\nimport type { SflImportJson } from './types';\n\nexport function sflToImportJson(sfl: string): SflImportJson {\n const state = sflToCanvasState(sfl);\n const collected = collectCanvasObjects(state);\n const canvas = emptyBuckets();\n const { groupBuckets, bucketFor } = createBucketResolver(indexGroupMembership(state.groups), canvas);\n\n for (const shape of collected.shapes) {\n bucketFor(shape.id).shapes.push(shape);\n }\n for (const link of collected.links) {\n bucketFor(link.id).links.push(link);\n }\n\n return {\n project: { export_type: 'stickyflow_canvas_v3', name: 'SFL Import' },\n canvas: {\n entities: {\n notes: [],\n shapes: canvas.shapes,\n links: canvas.links,\n frames: collected.frames,\n swimlanes: collected.swimlanes,\n isometricObjects: collected.isometricObjects,\n paths: collected.paths,\n charts: collected.charts,\n connections: collected.connections,\n },\n },\n layers: { groups: flattenGroups(state.groups, groupBuckets) },\n diagnostics: state.diagnostics,\n };\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -1,13 +1,27 @@
1
- import { I as IsometricFace, D as Diagnostic, S as Shader, R as RenderInput, a as ShadowStyle, L as LinkStyle, b as Shape, c as Link, F as Frame, d as Swimlane, e as IsometricObject, f as FreeformPath, C as Chart, g as RenderOptions, h as RenderResult } from './render-C5X74hds.cjs';
2
- export { B as Bounds, i as CHART_TYPES, j as ChartAxis, k as ChartRamp, l as ChartSeries, m as ChartType, M as MeasureTextFactory, P as PathPoint, n as Point, o as RenderDiagnostic, p as RenderNode, q as RenderScene, r as RollingNumberWidget, s as RollingNumberWidgetStyle, t as RulerWidget, u as SceneRole, v as ShaderParameter, w as ShapeType, T as TextMetrics, x as TickScaleWidget, W as Widget, y as WidgetType, z as render, A as renderCanvas } from './render-C5X74hds.cjs';
3
- import { S as SflDocument, a as Side, R as Row, B as BindingRuntimeOptions, b as BindingRuntime } from './runtimeTypes-yTSAvtCn.cjs';
4
- export { c as BindingDiagnostic, d as BindingGraph, e as BindingTarget, f as BindingType, g as BindingValue, h as BoundAssignment, i as BoundHandler, j as BoundProperty, D as DataSource, k as DataSourceContract, E as ElementInfo, l as ElementState, I as InteractiveElements, M as MutableDataSource, m as buildBindingGraph, n as createDataSource, o as interactiveElements } from './runtimeTypes-yTSAvtCn.cjs';
1
+ import { C as Component, G as GenericComponent, a as ComponentDescriptor, R as RollingNumberComponent, b as RollingNumberComponentStyle, c as RulerComponent, T as TickScaleComponent, I as IsometricFace, D as Diagnostic, S as Shader, d as RenderInput, e as ShadowStyle, L as LinkStyle, f as Shape, g as Link, F as Frame, h as Swimlane, i as IsometricObject, j as FreeformPath, k as Chart } from './render-CgX_y15a.cjs';
2
+ export { B as Bounds, l as CHART_TYPES, m as ChartAxis, n as ChartRamp, o as ChartSeries, p as ChartType, q as ComponentDefinition, r as ComponentGroup, s as ComponentInteraction, t as ComponentPropertyDescriptor, u as ComponentSceneContext, v as ComponentSize, w as ComponentValue, x as ComponentValueDescriptor, y as ComponentValueType, M as MeasureTextFactory, P as PathPoint, z as Point, A as RenderDiagnostic, E as RenderNode, H as RenderOptions, J as RenderResult, K as RenderScene, N as SceneRole, O as ShaderParameter, Q as ShapeType, U as TextMetrics, V as defineComponent, W as render, X as renderCanvas } from './render-CgX_y15a.cjs';
3
+ import { S as SflDocument, o as Side } from './runtimeTypes-D60w6nyF.cjs';
4
+ export { B as BindingDiagnostic, a as BindingGraph, b as BindingRuntime, c as BindingRuntimeOptions, d as BindingTarget, e as BindingType, f as BindingValue, g as BoundAssignment, h as BoundHandler, i as BoundProperty, j as DataSource, D as DataSourceContract, E as ElementInfo, k as ElementState, I as InteractiveElements, M as MutableDataSource, l as buildBindingGraph, m as createDataSource, n as interactiveElements } from './runtimeTypes-D60w6nyF.cjs';
5
+ export { R as RenderBoundOptions, c as createBindingRuntime, r as renderBound } from './runtime-reWgr7MP.cjs';
6
+
7
+ declare function isGenericComponent(component: Component): component is GenericComponent;
8
+
9
+ declare function getComponentDescriptor(type: string | undefined): ComponentDescriptor | undefined;
10
+
11
+ type ComponentType = string;
5
12
 
6
13
  declare const AXIS_COS: number;
7
14
  declare const AXIS_SIN: number;
8
15
 
9
16
  declare const SHAPE_TYPES: readonly ["rectangle", "rounded_rectangle", "triangle", "diamond", "hexagon", "oval", "circle", "document", "parallelogram", "trapezoid", "cylinder", "note", "cloud", "predefined_process", "pill", "person", "symbol"];
10
17
 
18
+ type Widget = Component;
19
+ type WidgetType = ComponentType;
20
+ type RollingNumberWidget = RollingNumberComponent;
21
+ type RollingNumberWidgetStyle = RollingNumberComponentStyle;
22
+ type TickScaleWidget = TickScaleComponent;
23
+ type RulerWidget = RulerComponent;
24
+
11
25
  declare function canonicalizeSource(sflText: string): string;
12
26
 
13
27
  declare function parseSource(input: string): SflDocument;
@@ -183,7 +197,7 @@ type SflSwimlaneObject = SflCanvasObject & {
183
197
  };
184
198
  declare function isSwimlaneObject(canvasObject: SflCanvasObject): canvasObject is SflSwimlaneObject;
185
199
 
186
- type SflCanvasObjectType = 'shape' | 'frame' | 'swimlane' | 'path' | 'chart' | 'widget' | 'isometric';
200
+ type SflCanvasObjectType = 'shape' | 'frame' | 'swimlane' | 'path' | 'chart' | 'component' | 'isometric';
187
201
  interface SflSymbolDefinition {
188
202
  name: string;
189
203
  points: Array<[number, number]>;
@@ -214,10 +228,10 @@ interface SflCanvasObject extends SflCanvasObjectBase {
214
228
  swimlane?: SflSwimlaneData;
215
229
  path?: SflPathData;
216
230
  chart?: SflChartData;
217
- widget?: SflWidgetData;
231
+ component?: SflComponentData;
218
232
  isometric?: SflIsometricData;
219
233
  }
220
- interface SflWidgetData {
234
+ interface SflComponentData {
221
235
  type: string;
222
236
  value: string;
223
237
  digits?: number;
@@ -326,10 +340,4 @@ interface SflImportJson {
326
340
 
327
341
  declare function sflToImportJson(sfl: string): SflImportJson;
328
342
 
329
- declare function createBindingRuntime(sfl: string, options?: BindingRuntimeOptions): BindingRuntime;
330
- interface RenderBoundOptions extends RenderOptions {
331
- data?: Record<string, Row | Row[]>;
332
- }
333
- declare function renderBound(sfl: string, options?: RenderBoundOptions): RenderResult;
334
-
335
- export { AXIS_COS, AXIS_SIN, BindingRuntime, BindingRuntimeOptions, Chart, DOM_CONTRACT_VERSION, FreeformPath, IsometricFace, IsometricObject, type RenderBoundOptions, RenderInput, RenderOptions, RenderResult, SHAPE_TYPES, type SflCanvasObject, type SflCanvasState, type SflChartObject, type SflGroupOut, type SflImportJson, type SflIsometricObject, type SflLinkOut, type SflPathObject, type SflSwimlaneObject, Shader, canonicalizeSource as canonicalize, createBindingRuntime, decodeColor, decodeShadow, isChartObject, isIsometricObject, isPathObject, isSwimlaneObject, parseSource as parse, renderBound, sflToCanvasState, sflToImportJson, sflToRenderInput };
343
+ export { AXIS_COS, AXIS_SIN, Chart, Component, ComponentDescriptor, type ComponentType, DOM_CONTRACT_VERSION, FreeformPath, GenericComponent, IsometricFace, IsometricObject, RenderInput, RollingNumberComponent, RollingNumberComponentStyle, type RollingNumberWidget, type RollingNumberWidgetStyle, RulerComponent, type RulerWidget, SHAPE_TYPES, type SflCanvasObject, type SflCanvasState, type SflChartObject, type SflGroupOut, type SflImportJson, type SflIsometricObject, type SflLinkOut, type SflPathObject, type SflSwimlaneObject, Shader, TickScaleComponent, type TickScaleWidget, type Widget, type WidgetType, canonicalizeSource as canonicalize, decodeColor, decodeShadow, getComponentDescriptor, isChartObject, isGenericComponent, isIsometricObject, isPathObject, isSwimlaneObject, parseSource as parse, sflToCanvasState, sflToImportJson, sflToRenderInput };
package/dist/index.d.ts CHANGED
@@ -1,13 +1,27 @@
1
- import { I as IsometricFace, D as Diagnostic, S as Shader, R as RenderInput, a as ShadowStyle, L as LinkStyle, b as Shape, c as Link, F as Frame, d as Swimlane, e as IsometricObject, f as FreeformPath, C as Chart, g as RenderOptions, h as RenderResult } from './render-C5X74hds.js';
2
- export { B as Bounds, i as CHART_TYPES, j as ChartAxis, k as ChartRamp, l as ChartSeries, m as ChartType, M as MeasureTextFactory, P as PathPoint, n as Point, o as RenderDiagnostic, p as RenderNode, q as RenderScene, r as RollingNumberWidget, s as RollingNumberWidgetStyle, t as RulerWidget, u as SceneRole, v as ShaderParameter, w as ShapeType, T as TextMetrics, x as TickScaleWidget, W as Widget, y as WidgetType, z as render, A as renderCanvas } from './render-C5X74hds.js';
3
- import { S as SflDocument, a as Side, R as Row, B as BindingRuntimeOptions, b as BindingRuntime } from './runtimeTypes-D8hPZ62T.js';
4
- export { c as BindingDiagnostic, d as BindingGraph, e as BindingTarget, f as BindingType, g as BindingValue, h as BoundAssignment, i as BoundHandler, j as BoundProperty, D as DataSource, k as DataSourceContract, E as ElementInfo, l as ElementState, I as InteractiveElements, M as MutableDataSource, m as buildBindingGraph, n as createDataSource, o as interactiveElements } from './runtimeTypes-D8hPZ62T.js';
1
+ import { C as Component, G as GenericComponent, a as ComponentDescriptor, R as RollingNumberComponent, b as RollingNumberComponentStyle, c as RulerComponent, T as TickScaleComponent, I as IsometricFace, D as Diagnostic, S as Shader, d as RenderInput, e as ShadowStyle, L as LinkStyle, f as Shape, g as Link, F as Frame, h as Swimlane, i as IsometricObject, j as FreeformPath, k as Chart } from './render-CgX_y15a.js';
2
+ export { B as Bounds, l as CHART_TYPES, m as ChartAxis, n as ChartRamp, o as ChartSeries, p as ChartType, q as ComponentDefinition, r as ComponentGroup, s as ComponentInteraction, t as ComponentPropertyDescriptor, u as ComponentSceneContext, v as ComponentSize, w as ComponentValue, x as ComponentValueDescriptor, y as ComponentValueType, M as MeasureTextFactory, P as PathPoint, z as Point, A as RenderDiagnostic, E as RenderNode, H as RenderOptions, J as RenderResult, K as RenderScene, N as SceneRole, O as ShaderParameter, Q as ShapeType, U as TextMetrics, V as defineComponent, W as render, X as renderCanvas } from './render-CgX_y15a.js';
3
+ import { S as SflDocument, o as Side } from './runtimeTypes-CEBGueYM.js';
4
+ export { B as BindingDiagnostic, a as BindingGraph, b as BindingRuntime, c as BindingRuntimeOptions, d as BindingTarget, e as BindingType, f as BindingValue, g as BoundAssignment, h as BoundHandler, i as BoundProperty, j as DataSource, D as DataSourceContract, E as ElementInfo, k as ElementState, I as InteractiveElements, M as MutableDataSource, l as buildBindingGraph, m as createDataSource, n as interactiveElements } from './runtimeTypes-CEBGueYM.js';
5
+ export { R as RenderBoundOptions, c as createBindingRuntime, r as renderBound } from './runtime-DnUxca3Y.js';
6
+
7
+ declare function isGenericComponent(component: Component): component is GenericComponent;
8
+
9
+ declare function getComponentDescriptor(type: string | undefined): ComponentDescriptor | undefined;
10
+
11
+ type ComponentType = string;
5
12
 
6
13
  declare const AXIS_COS: number;
7
14
  declare const AXIS_SIN: number;
8
15
 
9
16
  declare const SHAPE_TYPES: readonly ["rectangle", "rounded_rectangle", "triangle", "diamond", "hexagon", "oval", "circle", "document", "parallelogram", "trapezoid", "cylinder", "note", "cloud", "predefined_process", "pill", "person", "symbol"];
10
17
 
18
+ type Widget = Component;
19
+ type WidgetType = ComponentType;
20
+ type RollingNumberWidget = RollingNumberComponent;
21
+ type RollingNumberWidgetStyle = RollingNumberComponentStyle;
22
+ type TickScaleWidget = TickScaleComponent;
23
+ type RulerWidget = RulerComponent;
24
+
11
25
  declare function canonicalizeSource(sflText: string): string;
12
26
 
13
27
  declare function parseSource(input: string): SflDocument;
@@ -183,7 +197,7 @@ type SflSwimlaneObject = SflCanvasObject & {
183
197
  };
184
198
  declare function isSwimlaneObject(canvasObject: SflCanvasObject): canvasObject is SflSwimlaneObject;
185
199
 
186
- type SflCanvasObjectType = 'shape' | 'frame' | 'swimlane' | 'path' | 'chart' | 'widget' | 'isometric';
200
+ type SflCanvasObjectType = 'shape' | 'frame' | 'swimlane' | 'path' | 'chart' | 'component' | 'isometric';
187
201
  interface SflSymbolDefinition {
188
202
  name: string;
189
203
  points: Array<[number, number]>;
@@ -214,10 +228,10 @@ interface SflCanvasObject extends SflCanvasObjectBase {
214
228
  swimlane?: SflSwimlaneData;
215
229
  path?: SflPathData;
216
230
  chart?: SflChartData;
217
- widget?: SflWidgetData;
231
+ component?: SflComponentData;
218
232
  isometric?: SflIsometricData;
219
233
  }
220
- interface SflWidgetData {
234
+ interface SflComponentData {
221
235
  type: string;
222
236
  value: string;
223
237
  digits?: number;
@@ -326,10 +340,4 @@ interface SflImportJson {
326
340
 
327
341
  declare function sflToImportJson(sfl: string): SflImportJson;
328
342
 
329
- declare function createBindingRuntime(sfl: string, options?: BindingRuntimeOptions): BindingRuntime;
330
- interface RenderBoundOptions extends RenderOptions {
331
- data?: Record<string, Row | Row[]>;
332
- }
333
- declare function renderBound(sfl: string, options?: RenderBoundOptions): RenderResult;
334
-
335
- export { AXIS_COS, AXIS_SIN, BindingRuntime, BindingRuntimeOptions, Chart, DOM_CONTRACT_VERSION, FreeformPath, IsometricFace, IsometricObject, type RenderBoundOptions, RenderInput, RenderOptions, RenderResult, SHAPE_TYPES, type SflCanvasObject, type SflCanvasState, type SflChartObject, type SflGroupOut, type SflImportJson, type SflIsometricObject, type SflLinkOut, type SflPathObject, type SflSwimlaneObject, Shader, canonicalizeSource as canonicalize, createBindingRuntime, decodeColor, decodeShadow, isChartObject, isIsometricObject, isPathObject, isSwimlaneObject, parseSource as parse, renderBound, sflToCanvasState, sflToImportJson, sflToRenderInput };
343
+ export { AXIS_COS, AXIS_SIN, Chart, Component, ComponentDescriptor, type ComponentType, DOM_CONTRACT_VERSION, FreeformPath, GenericComponent, IsometricFace, IsometricObject, RenderInput, RollingNumberComponent, RollingNumberComponentStyle, type RollingNumberWidget, type RollingNumberWidgetStyle, RulerComponent, type RulerWidget, SHAPE_TYPES, type SflCanvasObject, type SflCanvasState, type SflChartObject, type SflGroupOut, type SflImportJson, type SflIsometricObject, type SflLinkOut, type SflPathObject, type SflSwimlaneObject, Shader, TickScaleComponent, type TickScaleWidget, type Widget, type WidgetType, canonicalizeSource as canonicalize, decodeColor, decodeShadow, getComponentDescriptor, isChartObject, isGenericComponent, isIsometricObject, isPathObject, isSwimlaneObject, parseSource as parse, sflToCanvasState, sflToImportJson, sflToRenderInput };