stickyflow 0.8.0 → 0.9.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/CHANGELOG.md +11 -0
- package/README.md +1 -1
- package/dist/binding/index.cjs +9 -9
- package/dist/binding/index.d.cts +4 -4
- package/dist/binding/index.d.ts +4 -4
- package/dist/binding/index.js +3 -3
- package/dist/{chunk-XPM3E7NV.cjs → chunk-B3YRZVMR.cjs} +23 -23
- package/dist/chunk-B3YRZVMR.cjs.map +1 -0
- package/dist/{chunk-CZW3ARXQ.js → chunk-BUVUJMWT.js} +5 -5
- package/dist/chunk-BUVUJMWT.js.map +1 -0
- package/dist/{chunk-LFEGZJWC.js → chunk-CM35H45Z.js} +3 -3
- package/dist/{chunk-LFEGZJWC.js.map → chunk-CM35H45Z.js.map} +1 -1
- package/dist/{chunk-GLZVHUSW.js → chunk-D2266VBZ.js} +393 -5
- package/dist/chunk-D2266VBZ.js.map +1 -0
- package/dist/{chunk-MAPNY7MJ.js → chunk-FS6L462E.js} +128 -15
- package/dist/chunk-FS6L462E.js.map +1 -0
- package/dist/{chunk-FQ7GMLCM.cjs → chunk-OUWGWDJ2.cjs} +15 -15
- package/dist/{chunk-FQ7GMLCM.cjs.map → chunk-OUWGWDJ2.cjs.map} +1 -1
- package/dist/{chunk-LNW5VIEA.cjs → chunk-QL7MNEMT.cjs} +393 -4
- package/dist/chunk-QL7MNEMT.cjs.map +1 -0
- package/dist/{chunk-IR2T47NW.cjs → chunk-SQBF2BKT.cjs} +257 -75
- package/dist/chunk-SQBF2BKT.cjs.map +1 -0
- package/dist/{chunk-VOYX6JMW.cjs → chunk-YSXD5IVZ.cjs} +778 -665
- package/dist/chunk-YSXD5IVZ.cjs.map +1 -0
- package/dist/{chunk-EDOPENSE.js → chunk-ZCGZJBAT.js} +228 -46
- package/dist/chunk-ZCGZJBAT.js.map +1 -0
- package/dist/index.cjs +36 -36
- package/dist/index.d.cts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.js +5 -5
- package/dist/interaction/index.cjs +232 -230
- package/dist/interaction/index.cjs.map +1 -1
- package/dist/interaction/index.d.cts +2 -2
- package/dist/interaction/index.d.ts +2 -2
- package/dist/interaction/index.js +4 -2
- package/dist/interaction/index.js.map +1 -1
- package/dist/{render-Bp2FLEzv.d.cts → render-DU4lYbRl.d.cts} +19 -11
- package/dist/{render-Bp2FLEzv.d.ts → render-DU4lYbRl.d.ts} +19 -11
- package/dist/{runtime-DIag-XBa.d.cts → runtime-DG8X3Fwf.d.cts} +2 -2
- package/dist/{runtime-CWIGxRcL.d.ts → runtime-kqD1RS17.d.ts} +2 -2
- package/dist/{runtimeTypes-C7sSLfOK.d.ts → runtimeTypes-CvjlBZds.d.cts} +7 -3
- package/dist/{runtimeTypes-BYODuxHk.d.cts → runtimeTypes-vRaHOIHi.d.ts} +7 -3
- package/dist/stickyflow-diagram.global.js +192 -40
- package/dist/stickyflow-diagram.global.js.map +1 -1
- package/dist/{types-D2w6D_wG.d.cts → types-B5jrEEcF.d.cts} +1 -1
- package/dist/{types-B9QM_H3R.d.ts → types-B7IkZ0w4.d.ts} +1 -1
- package/dist/viewer/index.cjs +9 -9
- package/dist/viewer/index.d.cts +4 -4
- package/dist/viewer/index.d.ts +4 -4
- package/dist/viewer/index.js +4 -4
- package/dist/web-component/index.cjs +6 -6
- package/dist/web-component/index.d.cts +2 -2
- package/dist/web-component/index.d.ts +2 -2
- package/dist/web-component/index.js +4 -4
- package/package.json +1 -1
- package/dist/chunk-CZW3ARXQ.js.map +0 -1
- package/dist/chunk-EDOPENSE.js.map +0 -1
- package/dist/chunk-GLZVHUSW.js.map +0 -1
- package/dist/chunk-IR2T47NW.cjs.map +0 -1
- package/dist/chunk-LNW5VIEA.cjs.map +0 -1
- package/dist/chunk-MAPNY7MJ.js.map +0 -1
- package/dist/chunk-VOYX6JMW.cjs.map +0 -1
- package/dist/chunk-XPM3E7NV.cjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/binding/types.ts","../src/binding/contract.ts","../src/binding/dataSource.ts","../src/binding/componentBinding.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/userInput.ts","../src/binding/runtime.ts"],"names":["getComponentDescriptor","isGenericComponent","parseSource","sflToRenderInput","isBuiltInComponentType","value","key","renderCanvas","sliderReach"],"mappings":"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","file":"chunk-XPM3E7NV.cjs","sourcesContent":["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 componentType?: string;\n}\n\nexport const POINTER_EVENTS = ['onPress', 'onRelease', 'onTap', 'onDrag'] as const;\nexport const CHANGE_EVENT = 'onChange';\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 { getComponentDescriptor } from '../model/component';\nimport type { SflExpr } from '../sflLanguage/ast';\nimport type { BindingType, DataSourceContract } from './types';\n\n// `valueEnd` is the second value of a component that holds two, such as the upper end of a range.\nexport const BINDABLE_COMPONENT_PROPERTIES = ['value', 'valueEnd', 'disabled'];\n\nexport function acceptsUserChange(componentType: string | undefined): boolean {\n return getComponentDescriptor(componentType)?.value?.writable === true;\n}\n\nexport function componentStateType(componentType: string | undefined, state: string): BindingType | undefined {\n const descriptor = getComponentDescriptor(componentType);\n if (state === 'focused') {\n return 'boolean';\n }\n if (state === 'pointer') {\n return descriptor?.pointerScale ? 'number' : undefined;\n }\n return state === 'value' ? descriptor?.value?.type : undefined;\n}\n\nexport function componentPropertyType(componentType: string | undefined, property: string): BindingType | undefined {\n if (property === 'disabled') {\n return 'boolean';\n }\n if (property === 'valueEnd') {\n return getComponentDescriptor(componentType)?.properties.valueEnd?.type === 'number' ? 'number' : undefined;\n }\n return property === 'value' ? getComponentDescriptor(componentType)?.value?.type : undefined;\n}\n\nexport function twoWayTargetProblem(\n key: string,\n expr: SflExpr,\n contracts: Map<string, DataSourceContract>,\n): string | undefined {\n const target = expr.kind === 'ref' ? expr.path : undefined;\n const contract = target?.length === 2 ? contracts.get(target[0]) : undefined;\n if (!target || contract?.mode !== 'record' || !contract.fields[target[1]]) {\n return `'<->' on '${key}' has to name one field of a record DataSource, as in <DataSource>.<field>.`;\n }\n return undefined;\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>, self.id, 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};\n","import type { BlockKind, SflBinding, SflBlock, SflDocument, SflExpr, SflHandler } from '../sflLanguage/ast';\nimport {\n acceptsUserChange,\n BINDABLE_COMPONENT_PROPERTIES,\n componentPropertyType,\n componentStateType,\n twoWayTargetProblem,\n} from './componentBinding';\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 CHANGE_EVENT,\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: blockKind(block), path, binding: entry.binding });\n } else if (entry.type === 'style') {\n for (const binding of entry.style.bindings ?? []) {\n sites.push({ kind: blockKind(block), 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', 'Component'];\nconst blockKind = (block: SflBlock): BlockKind => (block.kind === 'Widget' ? 'Component' : block.kind);\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(blockKind(block)) || 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: blockKind(block),\n componentType: 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 element.kind === 'Component' ? componentStateType(element.componentType, state) : undefined;\n}\n\nfunction createScope(\n contracts: Map<string, DataSourceContract>,\n elements: Map<string, ElementInfo>,\n ticking = false,\n selfAvailable = false,\n): TypeScope {\n return {\n resolve(path) {\n if (path.length !== 2) {\n return undefined;\n }\n if (selfAvailable && path[0] === 'self' && path[1] === 'id') {\n return 'string';\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: blockKind(block), 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, componentType: string | undefined): readonly string[] {\n if (kind === 'DataSource') {\n return [TICK_EVENT];\n }\n if (!INTERACTIVE_KINDS.includes(kind)) {\n return [];\n }\n const changes = kind === 'Component' && acceptsUserChange(componentType);\n return changes ? [...POINTER_EVENTS, CHANGE_EVENT] : POINTER_EVENTS;\n}\n\nfunction eventIsKnown(site: HandlerSite, componentType: string | undefined, report: Report): boolean {\n const { kind, name, handler } = site;\n const allowed = allowedEvents(kind, componentType);\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, Component 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, elements.get(name)?.componentType, 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, !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 expectedType(site: BindingSite, elements: Map<string, ElementInfo>): BindingType | undefined {\n const { kind, path, binding } = site;\n if (kind === 'Shader') {\n return 'number';\n }\n if (kind === 'Component') {\n return componentPropertyType(elements.get(path[0])?.componentType, binding.key);\n }\n return BINDABLE_PROPERTIES[kind]?.[binding.key];\n}\n\nfunction canBindTwoWay(site: BindingSite, elements: Map<string, ElementInfo>): boolean {\n const { kind, path, binding } = site;\n return (\n kind === 'Component' &&\n (binding.key === 'value' || binding.key === 'valueEnd') &&\n acceptsUserChange(elements.get(path[0])?.componentType)\n );\n}\n\ninterface RejectedOperator {\n code: string;\n message: string;\n severity: 'error' | 'warning';\n}\n\nfunction rejectedOperator(\n site: BindingSite,\n elements: Map<string, ElementInfo>,\n contracts: Map<string, DataSourceContract>,\n): RejectedOperator | undefined {\n const { binding } = site;\n const twoWay = binding.operator === '<->';\n if (binding.operator === '->' || (twoWay && !canBindTwoWay(site, elements))) {\n return {\n code: 'binding-operator-unsupported',\n message: `'${binding.operator}' on '${binding.key}' is parsed but not executed; '<->' works on the value of a component that the user can change, and '->' is not supported.`,\n severity: 'warning',\n };\n }\n const problem = twoWay ? twoWayTargetProblem(binding.key, binding.expr, contracts) : undefined;\n return problem ? { code: 'two-way-target', message: problem, severity: 'error' } : undefined;\n}\n\nfunction bindProperty(\n site: BindingSite,\n scope: TypeScope,\n elements: Map<string, ElementInfo>,\n contracts: Map<string, DataSourceContract>,\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 const rejected = rejectedOperator(site, elements, contracts);\n if (rejected) {\n report(rejected.code, rejected.message, rejected.severity);\n return undefined;\n }\n const expected = expectedType(site, elements);\n if (!expected) {\n const allowed = kind === 'Component' ? BINDABLE_COMPONENT_PROPERTIES : 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, false, true);\n const sites: BindingSite[] = [];\n collectSites(sflDocument.blocks, [], sites);\n\n const bindings = sites.flatMap(site => bindProperty(site, scope, elements, contracts, 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 { getComponentDescriptor } from '../model/component';\nimport { collectRefs } from './expression';\nimport type { BindingGraph } from './graph';\n\nexport interface InteractiveElements {\n pressable: ReadonlySet<string>;\n scales: ReadonlySet<string>;\n}\n\nconst OPERATED = new Set(['toggle', 'press', 'slide', 'pick', 'turn', 'range']);\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 for (const [name, info] of graph.elements) {\n const interaction = getComponentDescriptor(info.componentType)?.interaction;\n if (info.kind === 'Component' && interaction && OPERATED.has(interaction) && !graph.contracts.has(name)) {\n pressable.add(name);\n }\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 Component, type ComponentValue, isGenericComponent } from '../model/component';\nimport 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\nexport function findComponent(input: RenderInput, id: string): Component | undefined {\n return (input.components ?? input.widgets)?.find(candidate => candidate.id === id);\n}\n\nexport function writeComponentValue(input: RenderInput, id: string, value: ComponentValue): void {\n const component = findComponent(input, id);\n if (!component) {\n return;\n }\n component.value = isGenericComponent(component) ? value : String(value);\n}\n\nexport function writeComponentValueEnd(input: RenderInput, id: string, value: number): void {\n const component = findComponent(input, id);\n if (component && isGenericComponent(component)) {\n component.properties.valueEnd = value;\n }\n}\n\nexport function writeComponentDisabled(input: RenderInput, id: string, disabled: boolean): void {\n const component = findComponent(input, id);\n if (component && isGenericComponent(component)) {\n component.disabled = disabled;\n }\n}\n\nexport function isComponentDisabled(input: RenderInput, id: string): boolean {\n const component = findComponent(input, id);\n return component !== undefined && isGenericComponent(component) && component.disabled;\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 'Component.value': (input, path, value) => writeComponentValue(input, path[0], value as ComponentValue),\n 'Component.valueEnd': (input, path, value) => writeComponentValueEnd(input, path[0], value as number),\n 'Component.disabled': (input, path, value) => writeComponentDisabled(input, path[0], value === true),\n};\n\nexport function applyShader(\n input: RenderInput,\n binding: BoundProperty,\n value: BindingValue,\n ownerId?: string,\n): string[] {\n const owners: string[] = [];\n for (const shape of input.shapes) {\n if (shape.shader?.name === binding.ownerPath[0] && (ownerId === undefined || shape.id === ownerId)) {\n // Shapes that use one Shader share its object, so each one gets its own copy to hold its own value.\n shape.shader = {\n ...shape.shader,\n parameters: { ...shape.shader.parameters, [binding.property]: value as number },\n };\n owners.push(shape.id);\n }\n }\n return owners;\n}\n","import { type ComponentValue, getComponentDescriptor } from '../model/component';\nimport type { RenderResult } from '../render';\nimport { sflToRenderInput } from '../renderInput/fromSfl';\nimport type { RenderInput } from '../renderInput/types';\nimport { parse } from '../sflLanguage';\nimport { findComponent } from './applyValue';\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 renderNeeded: boolean;\n}\n\nfunction initialValue(input: RenderInput, id: string, componentType: string | undefined): ComponentValue {\n const descriptor = getComponentDescriptor(componentType);\n const current = findComponent(input, id)?.value;\n if (current === undefined) {\n return descriptor?.value?.default ?? 0;\n }\n if (descriptor?.value?.type === 'number') {\n const value = Number(current);\n return Number.isFinite(value) ? value : descriptor.value.default;\n }\n return current;\n}\n\nexport function createRuntimeState(sfl: string, options: BindingRuntimeOptions): RuntimeState {\n const graph = buildBindingGraph(parse(sfl));\n const input = structuredClone(sflToRenderInput(sfl));\n const elementState = new Map<string, ElementState>();\n for (const [name, info] of graph.elements) {\n if (!graph.contracts.has(name)) {\n elementState.set(name, {\n pressed: false,\n hovered: false,\n focused: false,\n pointer: 0,\n value: initialValue(input, name, info.componentType),\n });\n }\n }\n return {\n options,\n graph,\n diagnostics: [...graph.diagnostics],\n input,\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 renderNeeded: 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 => name !== 'self' && !state.sources.has(name) && !state.elementState.has(name));\n}\n","import { type ComponentValue, isBuiltInComponentType } from '../model/component';\nimport { 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 applyComponentValue(state: RuntimeState, binding: BoundProperty, value: ComponentValue): boolean {\n const id = binding.ownerPath[0];\n const element = state.elementState.get(id);\n if (element) {\n element.value = value;\n markDirty(state, id);\n }\n if (!isBuiltInComponentType(state.graph.elements.get(id)?.componentType)) {\n return true;\n }\n announce(state, binding.id, { kind: 'component', id, value: value as number });\n return false;\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 readsSelf = binding.dependencies.includes('self.id');\n if (binding.ownerKind === 'Shader' && readsSelf) {\n const owners = state.input.shapes.filter(shape => shape.shader?.name === binding.ownerPath[0]);\n for (const owner of owners) {\n const value = evaluate(binding.expr, {\n read: path => (path[0] === 'self' && path[1] === 'id' ? owner.id : readValue(state, path)),\n });\n const appliedId = `${binding.id}.${owner.id}`;\n const key = JSON.stringify(value);\n if (state.applied.get(appliedId) === key) {\n continue;\n }\n state.applied.set(appliedId, key);\n applyShader(state.input, binding, value, owner.id);\n announce(state, appliedId, {\n kind: 'shader',\n owners: [owner.id],\n parameters: { [binding.property]: value as number },\n });\n }\n return false;\n }\n const selfId = binding.ownerKind === 'Shader' ? undefined : binding.ownerPath[0];\n const value = evaluate(binding.expr, {\n read: path => (path[0] === 'self' && path[1] === 'id' && selfId ? selfId : readValue(state, path)),\n });\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 === 'Component' && binding.property === 'value') {\n return applyComponentValue(state, binding, value as ComponentValue);\n }\n return true;\n}\n\nexport function flush(state: RuntimeState): RenderResult | null {\n state.scheduled = false;\n let changed = state.renderNeeded;\n state.renderNeeded = 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, selfId?: string): void {\n const env = {\n read: (path: string[]) => {\n if (path[0] === 'time' && path[1] === 'delta') {\n return delta ?? 0;\n }\n if (path[0] === 'self' && path[1] === 'id' && selfId) {\n return selfId;\n }\n return readValue(state, path);\n },\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]) =>\n name === 'time' ||\n (name === 'self' && Boolean(selfId)) ||\n state.sources.has(name) ||\n 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, undefined, id);\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 ComponentValue, getComponentDescriptor, isGenericComponent } from '../model/component';\nimport { sliderReach } from '../model/component/sliderReach';\nimport { findComponent, isComponentDisabled, writeComponentValue, writeComponentValueEnd } from './applyValue';\nimport type { MutableDataSource } from './dataSource';\nimport { markDirty, schedule } from './evaluation';\nimport { dispatch, setElementState } from './handlers';\nimport type { RuntimeState } from './runtimeState';\nimport { type BoundProperty, CHANGE_EVENT, type Row } from './types';\n\nfunction descriptorOf(state: RuntimeState, id: string) {\n const info = state.graph.elements.get(id);\n return info?.kind === 'Component' ? getComponentDescriptor(info.componentType) : undefined;\n}\n\nfunction valueBinding(state: RuntimeState, id: string, property = 'value'): BoundProperty | undefined {\n return state.graph.bindings.find(\n binding => binding.ownerKind === 'Component' && binding.ownerPath[0] === id && binding.property === property,\n );\n}\n\nfunction writeBack(state: RuntimeState, binding: BoundProperty, value: ComponentValue): void {\n const target = binding.expr.kind === 'ref' ? binding.expr.path : undefined;\n const source = target ? state.sources.get(target[0]) : undefined;\n if (!target || !source || !('set' in source)) {\n return;\n }\n const row = source.get() as Row;\n if (row[target[1]] !== value) {\n (source as MutableDataSource).set({ ...row, [target[1]]: value });\n }\n}\n\n// The second value of a component that holds two, such as the upper end of a range.\nfunction changeValueEnd(state: RuntimeState, id: string, next: number): boolean {\n const component = findComponent(state.input, id);\n if (\n !component ||\n !isGenericComponent(component) ||\n component.properties.valueEnd === next ||\n isComponentDisabled(state.input, id)\n ) {\n return false;\n }\n const binding = valueBinding(state, id, 'valueEnd');\n if (binding && binding.operator !== '<->') {\n return false;\n }\n writeComponentValueEnd(state.input, id, next);\n state.renderNeeded = true;\n if (binding) {\n state.applied.set(binding.id, JSON.stringify(next));\n writeBack(state, binding, next);\n }\n markDirty(state, id);\n dispatch(state, id, CHANGE_EVENT);\n schedule(state);\n return true;\n}\n\nexport function changeComponentValue(\n state: RuntimeState,\n id: string,\n next: ComponentValue,\n property: 'value' | 'valueEnd' = 'value',\n): boolean {\n if (property === 'valueEnd') {\n return typeof next === 'number' && changeValueEnd(state, id, next);\n }\n const spec = descriptorOf(state, id)?.value;\n const element = state.elementState.get(id);\n if (!spec?.writable || !element || typeof next !== spec.type || element.value === next) {\n return false;\n }\n if (isComponentDisabled(state.input, id)) {\n return false;\n }\n const binding = valueBinding(state, id);\n if (binding && binding.operator !== '<->') {\n return false;\n }\n element.value = next;\n writeComponentValue(state.input, id, next);\n state.renderNeeded = true;\n if (binding) {\n state.applied.set(binding.id, JSON.stringify(next));\n writeBack(state, binding, next);\n }\n markDirty(state, id);\n dispatch(state, id, CHANGE_EVENT);\n schedule(state);\n return true;\n}\n\nconst TAU = Math.PI * 2;\n// Which thumb of a range a gesture holds: the one that was nearer where it began.\nconst grabbed = new WeakMap<RuntimeState, Map<string, 'start' | 'end'>>();\nconst within = (value: number): number => Math.min(1, Math.max(0, value));\n\n// How far along its range a slider is when the pointer is at a fraction of its width and of its height.\nfunction slideAlong(\n properties: Record<string, ComponentValue>,\n width: number,\n height: number,\n x: number,\n y: number,\n): number {\n const vertical = properties.direction === 'vertical';\n const length = vertical ? height : width;\n const reach = sliderReach(properties.variant, vertical ? width : height);\n const position = vertical ? 1 - y : x;\n return length > reach * 2 ? within((position * length - reach) / (length - reach * 2)) : position;\n}\n\n// How far round its range a knob is when the pointer is at a fraction of its width and of its height.\nfunction turnAlong(\n properties: Record<string, ComponentValue>,\n width: number,\n height: number,\n x: number,\n y: number,\n): number {\n const start = (Number(properties.start ?? 225) * Math.PI) / 180;\n const sweep = (Number(properties.sweep ?? 270) * Math.PI) / 180;\n const gap = TAU - sweep;\n const angle = Math.atan2(-(y - 0.5) * height, (x - 0.5) * width);\n const shifted = start - angle + gap / 2;\n return within(((((shifted % TAU) + TAU) % TAU) - gap / 2) / sweep);\n}\n\n// A pointer in a slider, a knob or a row of options becomes the value of the component. It comes as fractions of the width and the height.\nexport function slideElement(state: RuntimeState, id: string, x: number, y = 0): void {\n const component = findComponent(state.input, id);\n if (!component || !isGenericComponent(component)) {\n return;\n }\n const kind = descriptorOf(state, id)?.interaction;\n const { properties } = component;\n if (kind === 'pick') {\n const count = String(properties.options ?? '')\n .split(',')\n .filter(option => option.trim()).length;\n if (count > 0) {\n changeComponentValue(state, id, Math.min(count - 1, Math.floor(x * count)));\n }\n return;\n }\n const along =\n kind === 'turn'\n ? turnAlong(properties, component.width, component.height, x, y)\n : slideAlong(properties, component.width, component.height, x, y);\n const min = Number(properties.min ?? 0);\n const max = Number(properties.max ?? 100);\n const step = Number(properties.step ?? 0);\n let value = min + along * (max - min);\n if (step > 0) {\n value = min + Math.round((value - min) / step) * step;\n }\n const taken = Number(Math.min(max, Math.max(min, value)).toFixed(6));\n if (kind !== 'range') {\n changeComponentValue(state, id, taken);\n return;\n }\n const low = Number(component.value);\n const high = Number(properties.valueEnd ?? max);\n const holds = grabbed.get(state) ?? new Map<string, 'start' | 'end'>();\n grabbed.set(state, holds);\n if (!holds.has(id)) {\n holds.set(id, taken >= high || (taken > low && taken - low > high - taken) ? 'end' : 'start');\n }\n // The thumbs do not pass each other.\n if (holds.get(id) === 'start') {\n changeComponentValue(state, id, Math.min(taken, high));\n } else {\n changeComponentValue(state, id, Math.max(taken, low), 'valueEnd');\n }\n}\n\nfunction reactToActivation(state: RuntimeState, id: string): void {\n const element = state.elementState.get(id);\n const descriptor = descriptorOf(state, id);\n if (element && descriptor?.interaction === 'toggle' && descriptor.value?.type === 'boolean') {\n changeComponentValue(state, id, element.value !== true);\n }\n}\n\nexport function pressElement(state: RuntimeState, id: string): void {\n grabbed.get(state)?.delete(id);\n if (isComponentDisabled(state.input, id)) {\n return;\n }\n setElementState(state, id, { pressed: true });\n dispatch(state, id, 'onPress');\n}\n\nexport function releaseElement(state: RuntimeState, id: string, tapped: boolean): void {\n grabbed.get(state)?.delete(id);\n setElementState(state, id, { pressed: false });\n if (isComponentDisabled(state.input, id)) {\n return;\n }\n if (tapped) {\n reactToActivation(state, id);\n }\n dispatch(state, id, 'onRelease');\n if (tapped) {\n dispatch(state, id, 'onTap');\n }\n}\n\nexport function activateElement(state: RuntimeState, id: string): void {\n if (isComponentDisabled(state.input, id)) {\n return;\n }\n reactToActivation(state, id);\n dispatch(state, id, 'onTap');\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';\nimport { activateElement, changeComponentValue, pressElement, releaseElement, slideElement } from './userInput';\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 === 'component') {\n (target.setComponentValue ?? target.setWidgetValue)?.call(target, 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 => pressElement(state, id),\n release: (id, tapped) => releaseElement(state, id, tapped),\n activate: id => activateElement(state, id),\n change: (id, value) => changeComponentValue(state, id, value),\n slide: (id, x, y) => slideElement(state, id, x, y),\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"]}
|