stickyflow 0.7.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.
Files changed (63) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +1 -1
  3. package/dist/binding/index.cjs +9 -9
  4. package/dist/binding/index.d.cts +4 -4
  5. package/dist/binding/index.d.ts +4 -4
  6. package/dist/binding/index.js +3 -3
  7. package/dist/{chunk-OWNVXKXN.cjs → chunk-B3YRZVMR.cjs} +23 -23
  8. package/dist/chunk-B3YRZVMR.cjs.map +1 -0
  9. package/dist/{chunk-JCRPLPKV.js → chunk-BUVUJMWT.js} +5 -5
  10. package/dist/chunk-BUVUJMWT.js.map +1 -0
  11. package/dist/{chunk-ZNHYW47T.js → chunk-CM35H45Z.js} +3 -3
  12. package/dist/{chunk-ZNHYW47T.js.map → chunk-CM35H45Z.js.map} +1 -1
  13. package/dist/{chunk-JQK4IGXJ.js → chunk-D2266VBZ.js} +440 -8
  14. package/dist/chunk-D2266VBZ.js.map +1 -0
  15. package/dist/{chunk-SDMQRSRW.js → chunk-FS6L462E.js} +455 -136
  16. package/dist/chunk-FS6L462E.js.map +1 -0
  17. package/dist/{chunk-EKAWJFJQ.cjs → chunk-OUWGWDJ2.cjs} +15 -15
  18. package/dist/{chunk-EKAWJFJQ.cjs.map → chunk-OUWGWDJ2.cjs.map} +1 -1
  19. package/dist/{chunk-KXYSO6GC.cjs → chunk-QL7MNEMT.cjs} +444 -7
  20. package/dist/chunk-QL7MNEMT.cjs.map +1 -0
  21. package/dist/{chunk-BUOWM3LC.cjs → chunk-SQBF2BKT.cjs} +382 -73
  22. package/dist/chunk-SQBF2BKT.cjs.map +1 -0
  23. package/dist/{chunk-A73UJ5AQ.cjs → chunk-YSXD5IVZ.cjs} +1074 -755
  24. package/dist/chunk-YSXD5IVZ.cjs.map +1 -0
  25. package/dist/{chunk-MUKIGLR5.js → chunk-ZCGZJBAT.js} +353 -44
  26. package/dist/chunk-ZCGZJBAT.js.map +1 -0
  27. package/dist/index.cjs +36 -36
  28. package/dist/index.d.cts +5 -5
  29. package/dist/index.d.ts +5 -5
  30. package/dist/index.js +5 -5
  31. package/dist/interaction/index.cjs +268 -235
  32. package/dist/interaction/index.cjs.map +1 -1
  33. package/dist/interaction/index.d.cts +2 -2
  34. package/dist/interaction/index.d.ts +2 -2
  35. package/dist/interaction/index.js +44 -11
  36. package/dist/interaction/index.js.map +1 -1
  37. package/dist/{render-BU2uYzjG.d.cts → render-DU4lYbRl.d.cts} +29 -11
  38. package/dist/{render-BU2uYzjG.d.ts → render-DU4lYbRl.d.ts} +29 -11
  39. package/dist/{runtime-B7KiTmn8.d.cts → runtime-DG8X3Fwf.d.cts} +2 -2
  40. package/dist/{runtime-BPzyD-Nd.d.ts → runtime-kqD1RS17.d.ts} +2 -2
  41. package/dist/{runtimeTypes-DalvhScn.d.ts → runtimeTypes-CvjlBZds.d.cts} +7 -3
  42. package/dist/{runtimeTypes-BIP70z72.d.cts → runtimeTypes-vRaHOIHi.d.ts} +7 -3
  43. package/dist/stickyflow-diagram.global.js +294 -39
  44. package/dist/stickyflow-diagram.global.js.map +1 -1
  45. package/dist/{types-D_2NZ6lL.d.cts → types-B5jrEEcF.d.cts} +1 -1
  46. package/dist/{types-DMWs27Hn.d.ts → types-B7IkZ0w4.d.ts} +1 -1
  47. package/dist/viewer/index.cjs +9 -9
  48. package/dist/viewer/index.d.cts +4 -4
  49. package/dist/viewer/index.d.ts +4 -4
  50. package/dist/viewer/index.js +4 -4
  51. package/dist/web-component/index.cjs +6 -6
  52. package/dist/web-component/index.d.cts +2 -2
  53. package/dist/web-component/index.d.ts +2 -2
  54. package/dist/web-component/index.js +4 -4
  55. package/package.json +1 -1
  56. package/dist/chunk-A73UJ5AQ.cjs.map +0 -1
  57. package/dist/chunk-BUOWM3LC.cjs.map +0 -1
  58. package/dist/chunk-JCRPLPKV.js.map +0 -1
  59. package/dist/chunk-JQK4IGXJ.js.map +0 -1
  60. package/dist/chunk-KXYSO6GC.cjs.map +0 -1
  61. package/dist/chunk-MUKIGLR5.js.map +0 -1
  62. package/dist/chunk-OWNVXKXN.cjs.map +0 -1
  63. package/dist/chunk-SDMQRSRW.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -17,6 +17,29 @@ Two things count as breaking here that are easy to overlook:
17
17
 
18
18
  ## [Unreleased]
19
19
 
20
+ ## [0.9.0] - 2026-10-28
21
+
22
+ ### Added
23
+
24
+ - The `Repeat` block puts the blocks in it on a grid, one set for every cell, so a scene of hundreds of equal parts is a few lines. `columns` and `rows` (or `count`) set the grid, `step` the distance between cells and `origin` where it starts. In the blocks inside, a value can be computed: `col`, `row`, `index`, `x` and `y` are the cell, and `+ - * /`, comparisons, `floor`, `round`, `abs`, `min`, `max`, `sin`, `cos`, `sqrt`, `when(condition, a, b)`, `random(low, high)` and `pick(a, b, c)` work out the rest, as in `position: (x - y) * 0.866, (x + y) * 0.5` and `fill: pick("#79b04c", "#6aa84a")`. `seed` makes `random` and `pick` give the same result every time, `jitter` shifts every cell by up to that many units, `chance` keeps only that share of the cells, `where` keeps the cells for which an expression is true, and `order: diagonal` makes the cells from the back to the front of an isometric scene. Any other computed property of the Repeat is a name for the blocks in it, like a height worked out once. `mix(color, color, amount)` blends two colors and `shade(color, factor)` makes one lighter or darker, and `exp`, `pow` and `dist` give soft patches of color. A Repeat is turned into plain blocks when a document is read. The text is not changed, and a document without a Repeat reads exactly as before.
25
+ - `seams: false` in the style of an `Isometric` block leaves out the light lines along the edges of its box, so a scene of many blocks has no outlines. They are drawn unless it is `false`.
26
+ - `blend` in the style of a `Shape` sets how it mixes with what lies under it: `multiply`, `screen`, `overlay`, `darken`, `lighten`, `color-dodge`, `color-burn`, `hard-light`, `soft-light`, `difference`, `exclusion`, `hue`, `saturation`, `color` or `luminosity`. With `multiply`, layers of colored glass darken each other where they overlap, as in a print. Left out, a shape covers what is under it.
27
+ - The shader program `glassDots` fills a circle with an uneven cloud of color whose edge bleeds out into the dark, and lays a grid of round glass dots over it. Every dot is a lens with a gradient of its own: it is lighter on the side that faces the middle and darker on the side that faces out, and the dots near the edge of the cloud are nearly black on their outer side. The cloud runs through `colorA` (light side), `colorB` (base), `colorC` (cool side) and `colorD` (hot patch), with a glow in `rimColor` around it. `spread`, `warp` and `glow` set how far the cloud reaches, how uneven its edge is and how strong the glow is, `lens` the darkening of the dots, and `dots`, `dotSize`, `stagger`, `angle`, `grain`, `intensity` and `speed` the rest. `sphere` is an extra: it wraps the grid round a ball, so the dots turn to ellipses toward the rim, lined up to the middle. It is `0` (flat) by default. The shader draws its own rectangle, so it also works on a `rectangle` or a `rounded_rectangle`, where the dots run on over the whole surface and some lie wholly outside the cloud: `scatter` is how many of them are drawn there, in the dark glow color. On a circle the picture ends at the edge of the circle, unless `round` is `0`.
28
+ - `clip: true` in the style of a `Container` of `kind: frame` cuts everything that sits in it at the edge of the frame, with its rounded corners. It works for turned shapes too. Text is not cut, because a text has no style to carry the clip.
29
+ - `blur` in the style of a `Shape` softens the whole shape. It is the spread in pixels, and `0` or no value keeps the edge sharp. A blurred shape keeps room around it, so the soft edge is not cut off.
30
+
31
+ ## [0.8.0] - 2026-10-28
32
+
33
+ ### Added
34
+
35
+ - The shader program `glowCard`, the surface of a card: dark glass with a thin edge and colored lights low in the card that curl like smoke, fade out from the side set by `angle` and turn white at that edge, with grit in the lit parts. Parameters are `colorA`, `colorB`, `colorC`, `baseColor`, `glowHeight`, `glowSpread`, `angle`, `core`, `rim`, `grain`, `warp`, `intensity`, `cornerRadius` and `speed`. It draws its own rectangle.
36
+ - The names and the color bar of a heatmap can stand on any side of its grid. `rowLabelSide` is `left` or `right`, `columnLabelSide` is `top` or `bottom`, and `legendSide` is `top`, `bottom`, `left` or `right`. `legendGap` sets the distance between the grid and the color bar, and `axisLabelSpace` sets how much room the names get beside the data. Left out, the room is as much as the longest name needs. The names of a heatmap follow the font, size and color of the axis.
37
+ - `xLabelGap` and `yLabelGap` set how far the labels stand from the graphic, in pixels, along the x axis and along the y axis.
38
+ - `titleAlign` and `axisLabelAlign` align the title over a chart and the names beside the data to `left`, `center` or `right`.
39
+ - `axisLabelAngle` stands the labels of heatmap columns, bar categories and boxplot boxes up, from `0` for flat to `90` for upright.
40
+ - `data-sf-snap-distance` on the svg sets in pixels how close a shape has to come to another before it snaps. Without it the distance stays 20.
41
+ - Round charts (`pie`, `radar`, `radial`, `radialBar` and `polarArea`) keep their proportions while they are resized, and any shape does while Shift is held.
42
+
20
43
  ## [0.7.0] - 2026-10-25
21
44
 
22
45
  ### Added
package/README.md CHANGED
@@ -174,7 +174,7 @@ Binding and live input need only `stickyflow/binding` and `stickyflow/viewer`. E
174
174
 
175
175
  ## What it draws
176
176
 
177
- Shapes, links, frames, swimlanes, paths and text. Fifteen chart types. Isometric objects. Shader surfaces and components. Data sources with bindings, and events with handlers, so a document can react to data and input.
177
+ Shapes, links, frames, swimlanes, paths and text. Fifteen chart types. Isometric objects. A Repeat block puts many alike parts on a grid from a few lines. Shader surfaces and components. Data sources with bindings, and events with handlers, so a document can react to data and input.
178
178
 
179
179
  ## Principles
180
180
 
@@ -1,34 +1,34 @@
1
1
  'use strict';
2
2
 
3
- var chunkOWNVXKXN_cjs = require('../chunk-OWNVXKXN.cjs');
4
- require('../chunk-A73UJ5AQ.cjs');
5
- require('../chunk-KXYSO6GC.cjs');
3
+ var chunkB3YRZVMR_cjs = require('../chunk-B3YRZVMR.cjs');
4
+ require('../chunk-YSXD5IVZ.cjs');
5
+ require('../chunk-QL7MNEMT.cjs');
6
6
 
7
7
 
8
8
 
9
9
  Object.defineProperty(exports, "buildBindingGraph", {
10
10
  enumerable: true,
11
- get: function () { return chunkOWNVXKXN_cjs.buildBindingGraph; }
11
+ get: function () { return chunkB3YRZVMR_cjs.buildBindingGraph; }
12
12
  });
13
13
  Object.defineProperty(exports, "collectContracts", {
14
14
  enumerable: true,
15
- get: function () { return chunkOWNVXKXN_cjs.collectContracts; }
15
+ get: function () { return chunkB3YRZVMR_cjs.collectContracts; }
16
16
  });
17
17
  Object.defineProperty(exports, "createBindingRuntime", {
18
18
  enumerable: true,
19
- get: function () { return chunkOWNVXKXN_cjs.createBindingRuntime; }
19
+ get: function () { return chunkB3YRZVMR_cjs.createBindingRuntime; }
20
20
  });
21
21
  Object.defineProperty(exports, "createDataSource", {
22
22
  enumerable: true,
23
- get: function () { return chunkOWNVXKXN_cjs.createDataSource; }
23
+ get: function () { return chunkB3YRZVMR_cjs.createDataSource; }
24
24
  });
25
25
  Object.defineProperty(exports, "interactiveElements", {
26
26
  enumerable: true,
27
- get: function () { return chunkOWNVXKXN_cjs.interactiveElements; }
27
+ get: function () { return chunkB3YRZVMR_cjs.interactiveElements; }
28
28
  });
29
29
  Object.defineProperty(exports, "renderBound", {
30
30
  enumerable: true,
31
- get: function () { return chunkOWNVXKXN_cjs.renderBound; }
31
+ get: function () { return chunkB3YRZVMR_cjs.renderBound; }
32
32
  });
33
33
  //# sourceMappingURL=index.cjs.map
34
34
  //# sourceMappingURL=index.cjs.map
@@ -1,7 +1,7 @@
1
- import { S as SflDocument, D as DataSourceContract, B as BindingDiagnostic } from '../runtimeTypes-BIP70z72.cjs';
2
- export { a as BindingGraph, b as BindingRuntime, c as BindingRuntimeOptions, d as BindingTarget, e as BindingType, f as BindingValue, g as BoundAssignment, h as BoundHandler, i as BoundProperty, j as DataSource, E as ElementInfo, k as ElementState, I as InteractiveElements, M as MutableDataSource, l as buildBindingGraph, m as createDataSource, n as interactiveElements } from '../runtimeTypes-BIP70z72.cjs';
3
- export { R as RenderBoundOptions, c as createBindingRuntime, r as renderBound } from '../runtime-B7KiTmn8.cjs';
4
- import '../render-BU2uYzjG.cjs';
1
+ import { S as SflDocument, D as DataSourceContract, B as BindingDiagnostic } from '../runtimeTypes-CvjlBZds.cjs';
2
+ export { a as BindingGraph, b as BindingRuntime, c as BindingRuntimeOptions, d as BindingTarget, e as BindingType, f as BindingValue, g as BoundAssignment, h as BoundHandler, i as BoundProperty, j as DataSource, E as ElementInfo, k as ElementState, I as InteractiveElements, M as MutableDataSource, l as buildBindingGraph, m as createDataSource, n as interactiveElements } from '../runtimeTypes-CvjlBZds.cjs';
3
+ export { R as RenderBoundOptions, c as createBindingRuntime, r as renderBound } from '../runtime-DG8X3Fwf.cjs';
4
+ import '../render-DU4lYbRl.cjs';
5
5
 
6
6
  declare function collectContracts(sflDocument: SflDocument): {
7
7
  contracts: Map<string, DataSourceContract>;
@@ -1,7 +1,7 @@
1
- import { S as SflDocument, D as DataSourceContract, B as BindingDiagnostic } from '../runtimeTypes-DalvhScn.js';
2
- export { a as BindingGraph, b as BindingRuntime, c as BindingRuntimeOptions, d as BindingTarget, e as BindingType, f as BindingValue, g as BoundAssignment, h as BoundHandler, i as BoundProperty, j as DataSource, E as ElementInfo, k as ElementState, I as InteractiveElements, M as MutableDataSource, l as buildBindingGraph, m as createDataSource, n as interactiveElements } from '../runtimeTypes-DalvhScn.js';
3
- export { R as RenderBoundOptions, c as createBindingRuntime, r as renderBound } from '../runtime-BPzyD-Nd.js';
4
- import '../render-BU2uYzjG.js';
1
+ import { S as SflDocument, D as DataSourceContract, B as BindingDiagnostic } from '../runtimeTypes-vRaHOIHi.js';
2
+ export { a as BindingGraph, b as BindingRuntime, c as BindingRuntimeOptions, d as BindingTarget, e as BindingType, f as BindingValue, g as BoundAssignment, h as BoundHandler, i as BoundProperty, j as DataSource, E as ElementInfo, k as ElementState, I as InteractiveElements, M as MutableDataSource, l as buildBindingGraph, m as createDataSource, n as interactiveElements } from '../runtimeTypes-vRaHOIHi.js';
3
+ export { R as RenderBoundOptions, c as createBindingRuntime, r as renderBound } from '../runtime-kqD1RS17.js';
4
+ import '../render-DU4lYbRl.js';
5
5
 
6
6
  declare function collectContracts(sflDocument: SflDocument): {
7
7
  contracts: Map<string, DataSourceContract>;
@@ -1,5 +1,5 @@
1
- export { buildBindingGraph, collectContracts, createBindingRuntime, createDataSource, interactiveElements, renderBound } from '../chunk-JCRPLPKV.js';
2
- import '../chunk-SDMQRSRW.js';
3
- import '../chunk-JQK4IGXJ.js';
1
+ export { buildBindingGraph, collectContracts, createBindingRuntime, createDataSource, interactiveElements, renderBound } from '../chunk-BUVUJMWT.js';
2
+ import '../chunk-FS6L462E.js';
3
+ import '../chunk-D2266VBZ.js';
4
4
  //# sourceMappingURL=index.js.map
5
5
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkA73UJ5AQ_cjs = require('./chunk-A73UJ5AQ.cjs');
4
- var chunkKXYSO6GC_cjs = require('./chunk-KXYSO6GC.cjs');
3
+ var chunkYSXD5IVZ_cjs = require('./chunk-YSXD5IVZ.cjs');
4
+ var chunkQL7MNEMT_cjs = require('./chunk-QL7MNEMT.cjs');
5
5
 
6
6
  // src/binding/types.ts
7
7
  var DECLARED = {
@@ -102,10 +102,10 @@ function createDataSource(initial) {
102
102
  // src/binding/componentBinding.ts
103
103
  var BINDABLE_COMPONENT_PROPERTIES = ["value", "valueEnd", "disabled"];
104
104
  function acceptsUserChange(componentType) {
105
- return chunkKXYSO6GC_cjs.getComponentDescriptor(componentType)?.value?.writable === true;
105
+ return chunkQL7MNEMT_cjs.getComponentDescriptor(componentType)?.value?.writable === true;
106
106
  }
107
107
  function componentStateType(componentType, state) {
108
- const descriptor = chunkKXYSO6GC_cjs.getComponentDescriptor(componentType);
108
+ const descriptor = chunkQL7MNEMT_cjs.getComponentDescriptor(componentType);
109
109
  if (state === "focused") {
110
110
  return "boolean";
111
111
  }
@@ -119,9 +119,9 @@ function componentPropertyType(componentType, property) {
119
119
  return "boolean";
120
120
  }
121
121
  if (property === "valueEnd") {
122
- return chunkKXYSO6GC_cjs.getComponentDescriptor(componentType)?.properties.valueEnd?.type === "number" ? "number" : void 0;
122
+ return chunkQL7MNEMT_cjs.getComponentDescriptor(componentType)?.properties.valueEnd?.type === "number" ? "number" : void 0;
123
123
  }
124
- return property === "value" ? chunkKXYSO6GC_cjs.getComponentDescriptor(componentType)?.value?.type : void 0;
124
+ return property === "value" ? chunkQL7MNEMT_cjs.getComponentDescriptor(componentType)?.value?.type : void 0;
125
125
  }
126
126
  function twoWayTargetProblem(key, expr, contracts) {
127
127
  const target = expr.kind === "ref" ? expr.path : void 0;
@@ -689,7 +689,7 @@ function interactiveElements(graph) {
689
689
  collectRefs(binding.expr).forEach(note);
690
690
  }
691
691
  for (const [name, info] of graph.elements) {
692
- const interaction = chunkKXYSO6GC_cjs.getComponentDescriptor(info.componentType)?.interaction;
692
+ const interaction = chunkQL7MNEMT_cjs.getComponentDescriptor(info.componentType)?.interaction;
693
693
  if (info.kind === "Component" && interaction && OPERATED.has(interaction) && !graph.contracts.has(name)) {
694
694
  pressable.add(name);
695
695
  }
@@ -739,23 +739,23 @@ function writeComponentValue(input, id, value) {
739
739
  if (!component) {
740
740
  return;
741
741
  }
742
- component.value = chunkKXYSO6GC_cjs.isGenericComponent(component) ? value : String(value);
742
+ component.value = chunkQL7MNEMT_cjs.isGenericComponent(component) ? value : String(value);
743
743
  }
744
744
  function writeComponentValueEnd(input, id, value) {
745
745
  const component = findComponent(input, id);
746
- if (component && chunkKXYSO6GC_cjs.isGenericComponent(component)) {
746
+ if (component && chunkQL7MNEMT_cjs.isGenericComponent(component)) {
747
747
  component.properties.valueEnd = value;
748
748
  }
749
749
  }
750
750
  function writeComponentDisabled(input, id, disabled) {
751
751
  const component = findComponent(input, id);
752
- if (component && chunkKXYSO6GC_cjs.isGenericComponent(component)) {
752
+ if (component && chunkQL7MNEMT_cjs.isGenericComponent(component)) {
753
753
  component.disabled = disabled;
754
754
  }
755
755
  }
756
756
  function isComponentDisabled(input, id) {
757
757
  const component = findComponent(input, id);
758
- return component !== void 0 && chunkKXYSO6GC_cjs.isGenericComponent(component) && component.disabled;
758
+ return component !== void 0 && chunkQL7MNEMT_cjs.isGenericComponent(component) && component.disabled;
759
759
  }
760
760
  function setShape(input, path, change) {
761
761
  const shape = input.shapes.find((candidate) => candidate.id === path[0]);
@@ -808,7 +808,7 @@ function applyShader(input, binding, value, ownerId) {
808
808
 
809
809
  // src/binding/runtimeState.ts
810
810
  function initialValue(input, id, componentType) {
811
- const descriptor = chunkKXYSO6GC_cjs.getComponentDescriptor(componentType);
811
+ const descriptor = chunkQL7MNEMT_cjs.getComponentDescriptor(componentType);
812
812
  const current = findComponent(input, id)?.value;
813
813
  if (current === void 0) {
814
814
  return descriptor?.value?.default ?? 0;
@@ -820,8 +820,8 @@ function initialValue(input, id, componentType) {
820
820
  return current;
821
821
  }
822
822
  function createRuntimeState(sfl, options) {
823
- const graph = buildBindingGraph(chunkKXYSO6GC_cjs.parseSource(sfl));
824
- const input = structuredClone(chunkA73UJ5AQ_cjs.sflToRenderInput(sfl));
823
+ const graph = buildBindingGraph(chunkQL7MNEMT_cjs.expandRepeats(chunkQL7MNEMT_cjs.parseSource(sfl)));
824
+ const input = structuredClone(chunkYSXD5IVZ_cjs.sflToRenderInput(sfl));
825
825
  const elementState = /* @__PURE__ */ new Map();
826
826
  for (const [name, info] of graph.elements) {
827
827
  if (!graph.contracts.has(name)) {
@@ -881,7 +881,7 @@ function applyComponentValue(state, binding, value) {
881
881
  element.value = value;
882
882
  markDirty(state, id);
883
883
  }
884
- if (!chunkKXYSO6GC_cjs.isBuiltInComponentType(state.graph.elements.get(id)?.componentType)) {
884
+ if (!chunkQL7MNEMT_cjs.isBuiltInComponentType(state.graph.elements.get(id)?.componentType)) {
885
885
  return true;
886
886
  }
887
887
  announce(state, binding.id, { kind: "component", id, value });
@@ -966,7 +966,7 @@ function flush(state) {
966
966
  if (!changed) {
967
967
  return null;
968
968
  }
969
- const result = chunkA73UJ5AQ_cjs.renderCanvas(state.input, { ...state.options.renderOptions, linkHitAreas: true });
969
+ const result = chunkYSXD5IVZ_cjs.renderCanvas(state.input, { ...state.options.renderOptions, linkHitAreas: true });
970
970
  for (const listener of [...state.listeners]) {
971
971
  listener(result);
972
972
  }
@@ -1049,7 +1049,7 @@ function setElementState(state, id, patch) {
1049
1049
  // src/binding/userInput.ts
1050
1050
  function descriptorOf(state, id) {
1051
1051
  const info = state.graph.elements.get(id);
1052
- return info?.kind === "Component" ? chunkKXYSO6GC_cjs.getComponentDescriptor(info.componentType) : void 0;
1052
+ return info?.kind === "Component" ? chunkQL7MNEMT_cjs.getComponentDescriptor(info.componentType) : void 0;
1053
1053
  }
1054
1054
  function valueBinding(state, id, property = "value") {
1055
1055
  return state.graph.bindings.find(
@@ -1069,7 +1069,7 @@ function writeBack(state, binding, value) {
1069
1069
  }
1070
1070
  function changeValueEnd(state, id, next) {
1071
1071
  const component = findComponent(state.input, id);
1072
- if (!component || !chunkKXYSO6GC_cjs.isGenericComponent(component) || component.properties.valueEnd === next || isComponentDisabled(state.input, id)) {
1072
+ if (!component || !chunkQL7MNEMT_cjs.isGenericComponent(component) || component.properties.valueEnd === next || isComponentDisabled(state.input, id)) {
1073
1073
  return false;
1074
1074
  }
1075
1075
  const binding = valueBinding(state, id, "valueEnd");
@@ -1121,7 +1121,7 @@ var within = (value) => Math.min(1, Math.max(0, value));
1121
1121
  function slideAlong(properties, width, height, x, y) {
1122
1122
  const vertical = properties.direction === "vertical";
1123
1123
  const length = vertical ? height : width;
1124
- const reach = chunkA73UJ5AQ_cjs.sliderReach(properties.variant, vertical ? width : height);
1124
+ const reach = chunkYSXD5IVZ_cjs.sliderReach(properties.variant, vertical ? width : height);
1125
1125
  const position = vertical ? 1 - y : x;
1126
1126
  return length > reach * 2 ? within((position * length - reach) / (length - reach * 2)) : position;
1127
1127
  }
@@ -1135,7 +1135,7 @@ function turnAlong(properties, width, height, x, y) {
1135
1135
  }
1136
1136
  function slideElement(state, id, x, y = 0) {
1137
1137
  const component = findComponent(state.input, id);
1138
- if (!component || !chunkKXYSO6GC_cjs.isGenericComponent(component)) {
1138
+ if (!component || !chunkQL7MNEMT_cjs.isGenericComponent(component)) {
1139
1139
  return;
1140
1140
  }
1141
1141
  const kind = descriptorOf(state, id)?.interaction;
@@ -1309,7 +1309,7 @@ function renderBound(sfl, options = {}) {
1309
1309
  runtime.registerSource(name, { get: () => rows, subscribe: () => () => void 0 });
1310
1310
  }
1311
1311
  runtime.flush();
1312
- return chunkA73UJ5AQ_cjs.renderCanvas(runtime.input, renderOptions);
1312
+ return chunkYSXD5IVZ_cjs.renderCanvas(runtime.input, renderOptions);
1313
1313
  }
1314
1314
 
1315
1315
  exports.buildBindingGraph = buildBindingGraph;
@@ -1318,5 +1318,5 @@ exports.createBindingRuntime = createBindingRuntime;
1318
1318
  exports.createDataSource = createDataSource;
1319
1319
  exports.interactiveElements = interactiveElements;
1320
1320
  exports.renderBound = renderBound;
1321
- //# sourceMappingURL=chunk-OWNVXKXN.cjs.map
1322
- //# sourceMappingURL=chunk-OWNVXKXN.cjs.map
1321
+ //# sourceMappingURL=chunk-B3YRZVMR.cjs.map
1322
+ //# sourceMappingURL=chunk-B3YRZVMR.cjs.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":["getComponentDescriptor","isGenericComponent","expandRepeats","parseSource","sflToRenderInput","isBuiltInComponentType","value","key","renderCanvas","sliderReach"],"mappings":"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","file":"chunk-B3YRZVMR.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 { expandRepeats } from '../sflLanguage/expansion/repeat';\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(expandRepeats(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"]}
@@ -1,5 +1,5 @@
1
- import { renderCanvas, sflToRenderInput, sliderReach } from './chunk-SDMQRSRW.js';
2
- import { getComponentDescriptor, parseSource, isGenericComponent, isBuiltInComponentType } from './chunk-JQK4IGXJ.js';
1
+ import { renderCanvas, sflToRenderInput, sliderReach } from './chunk-FS6L462E.js';
2
+ import { getComponentDescriptor, expandRepeats, parseSource, isGenericComponent, isBuiltInComponentType } from './chunk-D2266VBZ.js';
3
3
 
4
4
  // src/binding/types.ts
5
5
  var DECLARED = {
@@ -818,7 +818,7 @@ function initialValue(input, id, componentType) {
818
818
  return current;
819
819
  }
820
820
  function createRuntimeState(sfl, options) {
821
- const graph = buildBindingGraph(parseSource(sfl));
821
+ const graph = buildBindingGraph(expandRepeats(parseSource(sfl)));
822
822
  const input = structuredClone(sflToRenderInput(sfl));
823
823
  const elementState = /* @__PURE__ */ new Map();
824
824
  for (const [name, info] of graph.elements) {
@@ -1311,5 +1311,5 @@ function renderBound(sfl, options = {}) {
1311
1311
  }
1312
1312
 
1313
1313
  export { buildBindingGraph, collectContracts, createBindingRuntime, createDataSource, interactiveElements, renderBound };
1314
- //# sourceMappingURL=chunk-JCRPLPKV.js.map
1315
- //# sourceMappingURL=chunk-JCRPLPKV.js.map
1314
+ //# sourceMappingURL=chunk-BUVUJMWT.js.map
1315
+ //# sourceMappingURL=chunk-BUVUJMWT.js.map