stickyflow 0.5.0 → 0.7.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 (62) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/dist/binding/index.cjs +9 -9
  3. package/dist/binding/index.d.cts +4 -4
  4. package/dist/binding/index.d.ts +4 -4
  5. package/dist/binding/index.js +3 -3
  6. package/dist/{chunk-ZMLQIMJK.cjs → chunk-A73UJ5AQ.cjs} +1537 -738
  7. package/dist/chunk-A73UJ5AQ.cjs.map +1 -0
  8. package/dist/{chunk-VK3T6O5Z.cjs → chunk-BUOWM3LC.cjs} +745 -62
  9. package/dist/chunk-BUOWM3LC.cjs.map +1 -0
  10. package/dist/{chunk-L3VJXZFD.cjs → chunk-EKAWJFJQ.cjs} +15 -15
  11. package/dist/{chunk-L3VJXZFD.cjs.map → chunk-EKAWJFJQ.cjs.map} +1 -1
  12. package/dist/{chunk-BODZN3ZI.js → chunk-JCRPLPKV.js} +156 -23
  13. package/dist/chunk-JCRPLPKV.js.map +1 -0
  14. package/dist/{chunk-IEHE6WVN.js → chunk-JQK4IGXJ.js} +489 -51
  15. package/dist/chunk-JQK4IGXJ.js.map +1 -0
  16. package/dist/{chunk-XY2GZUHC.cjs → chunk-KXYSO6GC.cjs} +498 -50
  17. package/dist/chunk-KXYSO6GC.cjs.map +1 -0
  18. package/dist/{chunk-G7NRK5AG.js → chunk-MUKIGLR5.js} +717 -34
  19. package/dist/chunk-MUKIGLR5.js.map +1 -0
  20. package/dist/{chunk-TWDLOXRM.cjs → chunk-OWNVXKXN.cjs} +170 -37
  21. package/dist/chunk-OWNVXKXN.cjs.map +1 -0
  22. package/dist/{chunk-LTGF5OHP.js → chunk-SDMQRSRW.js} +941 -143
  23. package/dist/chunk-SDMQRSRW.js.map +1 -0
  24. package/dist/{chunk-7VW2XKVB.js → chunk-ZNHYW47T.js} +3 -3
  25. package/dist/{chunk-7VW2XKVB.js.map → chunk-ZNHYW47T.js.map} +1 -1
  26. package/dist/index.cjs +57 -29
  27. package/dist/index.d.cts +80 -7
  28. package/dist/index.d.ts +80 -7
  29. package/dist/index.js +5 -5
  30. package/dist/interaction/index.cjs +245 -235
  31. package/dist/interaction/index.cjs.map +1 -1
  32. package/dist/interaction/index.d.cts +3 -2
  33. package/dist/interaction/index.d.ts +3 -2
  34. package/dist/interaction/index.js +17 -7
  35. package/dist/interaction/index.js.map +1 -1
  36. package/dist/{render-CgX_y15a.d.ts → render-BU2uYzjG.d.cts} +40 -16
  37. package/dist/{render-CgX_y15a.d.cts → render-BU2uYzjG.d.ts} +40 -16
  38. package/dist/{runtime-reWgr7MP.d.cts → runtime-B7KiTmn8.d.cts} +2 -2
  39. package/dist/{runtime-DnUxca3Y.d.ts → runtime-BPzyD-Nd.d.ts} +2 -2
  40. package/dist/{runtimeTypes-D60w6nyF.d.cts → runtimeTypes-BIP70z72.d.cts} +3 -2
  41. package/dist/{runtimeTypes-CEBGueYM.d.ts → runtimeTypes-DalvhScn.d.ts} +3 -2
  42. package/dist/stickyflow-diagram.global.js +387 -36
  43. package/dist/stickyflow-diagram.global.js.map +1 -1
  44. package/dist/{types-DYLC_lsk.d.ts → types-DMWs27Hn.d.ts} +1 -1
  45. package/dist/{types-DvhMpqrL.d.cts → types-D_2NZ6lL.d.cts} +1 -1
  46. package/dist/viewer/index.cjs +9 -9
  47. package/dist/viewer/index.d.cts +5 -4
  48. package/dist/viewer/index.d.ts +5 -4
  49. package/dist/viewer/index.js +4 -4
  50. package/dist/web-component/index.cjs +6 -6
  51. package/dist/web-component/index.d.cts +2 -2
  52. package/dist/web-component/index.d.ts +2 -2
  53. package/dist/web-component/index.js +4 -4
  54. package/package.json +1 -1
  55. package/dist/chunk-BODZN3ZI.js.map +0 -1
  56. package/dist/chunk-G7NRK5AG.js.map +0 -1
  57. package/dist/chunk-IEHE6WVN.js.map +0 -1
  58. package/dist/chunk-LTGF5OHP.js.map +0 -1
  59. package/dist/chunk-TWDLOXRM.cjs.map +0 -1
  60. package/dist/chunk-VK3T6O5Z.cjs.map +0 -1
  61. package/dist/chunk-XY2GZUHC.cjs.map +0 -1
  62. package/dist/chunk-ZMLQIMJK.cjs.map +0 -1
@@ -1,5 +1,5 @@
1
- import { renderCanvas, sflToRenderInput } from './chunk-LTGF5OHP.js';
2
- import { getComponentDescriptor, parseSource, isGenericComponent, isBuiltInComponentType } from './chunk-IEHE6WVN.js';
1
+ import { renderCanvas, sflToRenderInput, sliderReach } from './chunk-SDMQRSRW.js';
2
+ import { getComponentDescriptor, parseSource, isGenericComponent, isBuiltInComponentType } from './chunk-JQK4IGXJ.js';
3
3
 
4
4
  // src/binding/types.ts
5
5
  var DECLARED = {
@@ -98,7 +98,7 @@ function createDataSource(initial) {
98
98
  }
99
99
 
100
100
  // src/binding/componentBinding.ts
101
- var BINDABLE_COMPONENT_PROPERTIES = ["value", "disabled"];
101
+ var BINDABLE_COMPONENT_PROPERTIES = ["value", "valueEnd", "disabled"];
102
102
  function acceptsUserChange(componentType) {
103
103
  return getComponentDescriptor(componentType)?.value?.writable === true;
104
104
  }
@@ -116,6 +116,9 @@ function componentPropertyType(componentType, property) {
116
116
  if (property === "disabled") {
117
117
  return "boolean";
118
118
  }
119
+ if (property === "valueEnd") {
120
+ return getComponentDescriptor(componentType)?.properties.valueEnd?.type === "number" ? "number" : void 0;
121
+ }
119
122
  return property === "value" ? getComponentDescriptor(componentType)?.value?.type : void 0;
120
123
  }
121
124
  function twoWayTargetProblem(key, expr, contracts) {
@@ -260,7 +263,7 @@ function inferType(expr, scope, report) {
260
263
  const name = expr.path.join(".");
261
264
  report(
262
265
  "unknown-reference",
263
- name === "time.delta" ? "'time.delta' is only available in an onTick handler." : `Unknown reference '${name}'. Use <DataSource>.<field>, or <element>.pressed / hovered / pointer.`
266
+ name === "time.delta" ? "'time.delta' is only available in an onTick handler." : `Unknown reference '${name}'. Use <DataSource>.<field>, self.id, or <element>.pressed / hovered / pointer.`
264
267
  );
265
268
  }
266
269
  return type;
@@ -429,12 +432,15 @@ function elementStateType(element, state) {
429
432
  }
430
433
  return element.kind === "Component" ? componentStateType(element.componentType, state) : void 0;
431
434
  }
432
- function createScope(contracts, elements, ticking = false) {
435
+ function createScope(contracts, elements, ticking = false, selfAvailable = false) {
433
436
  return {
434
437
  resolve(path) {
435
438
  if (path.length !== 2) {
436
439
  return void 0;
437
440
  }
441
+ if (selfAvailable && path[0] === "self" && path[1] === "id") {
442
+ return "string";
443
+ }
438
444
  const contract = contracts.get(path[0]);
439
445
  if (contract) {
440
446
  return fieldType(contract, path[1]);
@@ -542,7 +548,7 @@ function bindHandler(site, contracts, elements, diagnostics) {
542
548
  report("tick-needs-record", `DataSource '${name}' has to be a record source to change its fields on every tick.`);
543
549
  return void 0;
544
550
  }
545
- const scope = createScope(contracts, elements, ticking);
551
+ const scope = createScope(contracts, elements, ticking, !ticking);
546
552
  const assignments = handler.assignments.flatMap(
547
553
  (assignment) => bindAssignment(assignment, name, own, contracts, scope, report) ?? []
548
554
  );
@@ -581,7 +587,7 @@ function expectedType(site, elements) {
581
587
  }
582
588
  function canBindTwoWay(site, elements) {
583
589
  const { kind, path, binding } = site;
584
- return kind === "Component" && binding.key === "value" && acceptsUserChange(elements.get(path[0])?.componentType);
590
+ return kind === "Component" && (binding.key === "value" || binding.key === "valueEnd") && acceptsUserChange(elements.get(path[0])?.componentType);
585
591
  }
586
592
  function rejectedOperator(site, elements, contracts) {
587
593
  const { binding } = site;
@@ -648,7 +654,7 @@ function buildBindingGraph(sflDocument) {
648
654
  const { contracts, diagnostics } = collectContracts(sflDocument);
649
655
  const elements = collectElements(sflDocument);
650
656
  warnNameCollisions(contracts, elements, diagnostics);
651
- const scope = createScope(contracts, elements);
657
+ const scope = createScope(contracts, elements, false, true);
652
658
  const sites = [];
653
659
  collectSites(sflDocument.blocks, [], sites);
654
660
  const bindings = sites.flatMap((site) => bindProperty(site, scope, elements, contracts, diagnostics) ?? []);
@@ -659,7 +665,7 @@ function buildBindingGraph(sflDocument) {
659
665
  }
660
666
 
661
667
  // src/binding/interactive.ts
662
- var OPERATED = /* @__PURE__ */ new Set(["toggle", "press"]);
668
+ var OPERATED = /* @__PURE__ */ new Set(["toggle", "press", "slide", "pick", "turn", "range"]);
663
669
  function interactiveElements(graph) {
664
670
  const pressable = /* @__PURE__ */ new Set();
665
671
  const scales = /* @__PURE__ */ new Set();
@@ -733,6 +739,12 @@ function writeComponentValue(input, id, value) {
733
739
  }
734
740
  component.value = isGenericComponent(component) ? value : String(value);
735
741
  }
742
+ function writeComponentValueEnd(input, id, value) {
743
+ const component = findComponent(input, id);
744
+ if (component && isGenericComponent(component)) {
745
+ component.properties.valueEnd = value;
746
+ }
747
+ }
736
748
  function writeComponentDisabled(input, id, disabled) {
737
749
  const component = findComponent(input, id);
738
750
  if (component && isGenericComponent(component)) {
@@ -775,13 +787,17 @@ var APPLY = {
775
787
  "Shape.textColor": (input, path, value) => setShape(input, path, (shape) => shape.textColor = value),
776
788
  "Shape.opacity": (input, path, value) => setShape(input, path, (shape) => shape.opacity = value),
777
789
  "Component.value": (input, path, value) => writeComponentValue(input, path[0], value),
790
+ "Component.valueEnd": (input, path, value) => writeComponentValueEnd(input, path[0], value),
778
791
  "Component.disabled": (input, path, value) => writeComponentDisabled(input, path[0], value === true)
779
792
  };
780
- function applyShader(input, binding, value) {
793
+ function applyShader(input, binding, value, ownerId) {
781
794
  const owners = [];
782
795
  for (const shape of input.shapes) {
783
- if (shape.shader?.name === binding.ownerPath[0]) {
784
- shape.shader.parameters = { ...shape.shader.parameters, [binding.property]: value };
796
+ if (shape.shader?.name === binding.ownerPath[0] && (ownerId === void 0 || shape.id === ownerId)) {
797
+ shape.shader = {
798
+ ...shape.shader,
799
+ parameters: { ...shape.shader.parameters, [binding.property]: value }
800
+ };
785
801
  owners.push(shape.id);
786
802
  }
787
803
  }
@@ -846,7 +862,7 @@ function readValue(state, path) {
846
862
  return Array.isArray(data) ? data.map((row) => row[field]) : data[field];
847
863
  }
848
864
  function missingSource(state, binding) {
849
- return binding.dependencies.map((dependency) => dependency.split(".")[0]).find((name) => !state.sources.has(name) && !state.elementState.has(name));
865
+ return binding.dependencies.map((dependency) => dependency.split(".")[0]).find((name) => name !== "self" && !state.sources.has(name) && !state.elementState.has(name));
850
866
  }
851
867
 
852
868
  // src/binding/evaluation.ts
@@ -888,7 +904,32 @@ function evaluateBinding(state, binding) {
888
904
  warnMissingSource(state, binding, missing);
889
905
  return false;
890
906
  }
891
- const value = evaluate(binding.expr, { read: (path) => readValue(state, path) });
907
+ const readsSelf = binding.dependencies.includes("self.id");
908
+ if (binding.ownerKind === "Shader" && readsSelf) {
909
+ const owners = state.input.shapes.filter((shape) => shape.shader?.name === binding.ownerPath[0]);
910
+ for (const owner of owners) {
911
+ const value2 = evaluate(binding.expr, {
912
+ read: (path) => path[0] === "self" && path[1] === "id" ? owner.id : readValue(state, path)
913
+ });
914
+ const appliedId = `${binding.id}.${owner.id}`;
915
+ const key2 = JSON.stringify(value2);
916
+ if (state.applied.get(appliedId) === key2) {
917
+ continue;
918
+ }
919
+ state.applied.set(appliedId, key2);
920
+ applyShader(state.input, binding, value2, owner.id);
921
+ announce(state, appliedId, {
922
+ kind: "shader",
923
+ owners: [owner.id],
924
+ parameters: { [binding.property]: value2 }
925
+ });
926
+ }
927
+ return false;
928
+ }
929
+ const selfId = binding.ownerKind === "Shader" ? void 0 : binding.ownerPath[0];
930
+ const value = evaluate(binding.expr, {
931
+ read: (path) => path[0] === "self" && path[1] === "id" && selfId ? selfId : readValue(state, path)
932
+ });
892
933
  const key = JSON.stringify(value);
893
934
  if (state.applied.get(binding.id) === key) {
894
935
  return false;
@@ -946,14 +987,22 @@ function markDirty(state, name) {
946
987
  }
947
988
 
948
989
  // src/binding/handlers.ts
949
- function runHandler(state, handler, delta) {
990
+ function runHandler(state, handler, delta, selfId) {
950
991
  const env = {
951
- read: (path) => path[0] === "time" && path[1] === "delta" ? delta ?? 0 : readValue(state, path)
992
+ read: (path) => {
993
+ if (path[0] === "time" && path[1] === "delta") {
994
+ return delta ?? 0;
995
+ }
996
+ if (path[0] === "self" && path[1] === "id" && selfId) {
997
+ return selfId;
998
+ }
999
+ return readValue(state, path);
1000
+ }
952
1001
  };
953
1002
  for (const assignment of handler.assignments) {
954
1003
  const target = state.sources.get(assignment.source);
955
1004
  const readable = collectRefs(assignment.expr).every(
956
- ([name]) => name === "time" || state.sources.has(name) || state.elementState.has(name)
1005
+ ([name]) => name === "time" || name === "self" && Boolean(selfId) || state.sources.has(name) || state.elementState.has(name)
957
1006
  );
958
1007
  if (!target || !("set" in target) || !readable) {
959
1008
  continue;
@@ -974,7 +1023,7 @@ function runHandler(state, handler, delta) {
974
1023
  function dispatch(state, id, event) {
975
1024
  for (const handler of state.graph.handlers) {
976
1025
  if (handler.event === event && handler.ownerKind !== "DataSource" && handler.ownerPath[0] === id) {
977
- runHandler(state, handler);
1026
+ runHandler(state, handler, void 0, id);
978
1027
  }
979
1028
  }
980
1029
  }
@@ -1000,9 +1049,9 @@ function descriptorOf(state, id) {
1000
1049
  const info = state.graph.elements.get(id);
1001
1050
  return info?.kind === "Component" ? getComponentDescriptor(info.componentType) : void 0;
1002
1051
  }
1003
- function valueBinding(state, id) {
1052
+ function valueBinding(state, id, property = "value") {
1004
1053
  return state.graph.bindings.find(
1005
- (binding) => binding.ownerKind === "Component" && binding.ownerPath[0] === id && binding.property === "value"
1054
+ (binding) => binding.ownerKind === "Component" && binding.ownerPath[0] === id && binding.property === property
1006
1055
  );
1007
1056
  }
1008
1057
  function writeBack(state, binding, value) {
@@ -1016,7 +1065,30 @@ function writeBack(state, binding, value) {
1016
1065
  source.set({ ...row, [target[1]]: value });
1017
1066
  }
1018
1067
  }
1019
- function changeComponentValue(state, id, next) {
1068
+ function changeValueEnd(state, id, next) {
1069
+ const component = findComponent(state.input, id);
1070
+ if (!component || !isGenericComponent(component) || component.properties.valueEnd === next || isComponentDisabled(state.input, id)) {
1071
+ return false;
1072
+ }
1073
+ const binding = valueBinding(state, id, "valueEnd");
1074
+ if (binding && binding.operator !== "<->") {
1075
+ return false;
1076
+ }
1077
+ writeComponentValueEnd(state.input, id, next);
1078
+ state.renderNeeded = true;
1079
+ if (binding) {
1080
+ state.applied.set(binding.id, JSON.stringify(next));
1081
+ writeBack(state, binding, next);
1082
+ }
1083
+ markDirty(state, id);
1084
+ dispatch(state, id, CHANGE_EVENT);
1085
+ schedule(state);
1086
+ return true;
1087
+ }
1088
+ function changeComponentValue(state, id, next, property = "value") {
1089
+ if (property === "valueEnd") {
1090
+ return typeof next === "number" && changeValueEnd(state, id, next);
1091
+ }
1020
1092
  const spec = descriptorOf(state, id)?.value;
1021
1093
  const element = state.elementState.get(id);
1022
1094
  if (!spec?.writable || !element || typeof next !== spec.type || element.value === next) {
@@ -1041,6 +1113,64 @@ function changeComponentValue(state, id, next) {
1041
1113
  schedule(state);
1042
1114
  return true;
1043
1115
  }
1116
+ var TAU = Math.PI * 2;
1117
+ var grabbed = /* @__PURE__ */ new WeakMap();
1118
+ var within = (value) => Math.min(1, Math.max(0, value));
1119
+ function slideAlong(properties, width, height, x, y) {
1120
+ const vertical = properties.direction === "vertical";
1121
+ const length = vertical ? height : width;
1122
+ const reach = sliderReach(properties.variant, vertical ? width : height);
1123
+ const position = vertical ? 1 - y : x;
1124
+ return length > reach * 2 ? within((position * length - reach) / (length - reach * 2)) : position;
1125
+ }
1126
+ function turnAlong(properties, width, height, x, y) {
1127
+ const start = Number(properties.start ?? 225) * Math.PI / 180;
1128
+ const sweep = Number(properties.sweep ?? 270) * Math.PI / 180;
1129
+ const gap = TAU - sweep;
1130
+ const angle = Math.atan2(-(y - 0.5) * height, (x - 0.5) * width);
1131
+ const shifted = start - angle + gap / 2;
1132
+ return within(((shifted % TAU + TAU) % TAU - gap / 2) / sweep);
1133
+ }
1134
+ function slideElement(state, id, x, y = 0) {
1135
+ const component = findComponent(state.input, id);
1136
+ if (!component || !isGenericComponent(component)) {
1137
+ return;
1138
+ }
1139
+ const kind = descriptorOf(state, id)?.interaction;
1140
+ const { properties } = component;
1141
+ if (kind === "pick") {
1142
+ const count = String(properties.options ?? "").split(",").filter((option) => option.trim()).length;
1143
+ if (count > 0) {
1144
+ changeComponentValue(state, id, Math.min(count - 1, Math.floor(x * count)));
1145
+ }
1146
+ return;
1147
+ }
1148
+ const along = kind === "turn" ? turnAlong(properties, component.width, component.height, x, y) : slideAlong(properties, component.width, component.height, x, y);
1149
+ const min = Number(properties.min ?? 0);
1150
+ const max = Number(properties.max ?? 100);
1151
+ const step = Number(properties.step ?? 0);
1152
+ let value = min + along * (max - min);
1153
+ if (step > 0) {
1154
+ value = min + Math.round((value - min) / step) * step;
1155
+ }
1156
+ const taken = Number(Math.min(max, Math.max(min, value)).toFixed(6));
1157
+ if (kind !== "range") {
1158
+ changeComponentValue(state, id, taken);
1159
+ return;
1160
+ }
1161
+ const low = Number(component.value);
1162
+ const high = Number(properties.valueEnd ?? max);
1163
+ const holds = grabbed.get(state) ?? /* @__PURE__ */ new Map();
1164
+ grabbed.set(state, holds);
1165
+ if (!holds.has(id)) {
1166
+ holds.set(id, taken >= high || taken > low && taken - low > high - taken ? "end" : "start");
1167
+ }
1168
+ if (holds.get(id) === "start") {
1169
+ changeComponentValue(state, id, Math.min(taken, high));
1170
+ } else {
1171
+ changeComponentValue(state, id, Math.max(taken, low), "valueEnd");
1172
+ }
1173
+ }
1044
1174
  function reactToActivation(state, id) {
1045
1175
  const element = state.elementState.get(id);
1046
1176
  const descriptor = descriptorOf(state, id);
@@ -1049,6 +1179,7 @@ function reactToActivation(state, id) {
1049
1179
  }
1050
1180
  }
1051
1181
  function pressElement(state, id) {
1182
+ grabbed.get(state)?.delete(id);
1052
1183
  if (isComponentDisabled(state.input, id)) {
1053
1184
  return;
1054
1185
  }
@@ -1056,6 +1187,7 @@ function pressElement(state, id) {
1056
1187
  dispatch(state, id, "onPress");
1057
1188
  }
1058
1189
  function releaseElement(state, id, tapped) {
1190
+ grabbed.get(state)?.delete(id);
1059
1191
  setElementState(state, id, { pressed: false });
1060
1192
  if (isComponentDisabled(state.input, id)) {
1061
1193
  return;
@@ -1152,6 +1284,7 @@ function createBindingRuntime(sfl, options = {}) {
1152
1284
  release: (id, tapped) => releaseElement(state, id, tapped),
1153
1285
  activate: (id) => activateElement(state, id),
1154
1286
  change: (id, value) => changeComponentValue(state, id, value),
1287
+ slide: (id, x, y) => slideElement(state, id, x, y),
1155
1288
  drag(id, pointer) {
1156
1289
  if (pointer !== void 0) {
1157
1290
  setElementState(state, id, { pointer });
@@ -1178,5 +1311,5 @@ function renderBound(sfl, options = {}) {
1178
1311
  }
1179
1312
 
1180
1313
  export { buildBindingGraph, collectContracts, createBindingRuntime, createDataSource, interactiveElements, renderBound };
1181
- //# sourceMappingURL=chunk-BODZN3ZI.js.map
1182
- //# sourceMappingURL=chunk-BODZN3ZI.js.map
1314
+ //# sourceMappingURL=chunk-JCRPLPKV.js.map
1315
+ //# sourceMappingURL=chunk-JCRPLPKV.js.map
@@ -0,0 +1 @@
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":["value","key"],"mappings":"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","file":"chunk-JCRPLPKV.js","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"]}