@msb235/blits 0.14.0 → 0.15.1

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 (187) hide show
  1. package/CHANGELOG.md +198 -0
  2. package/README.md +3 -3
  3. package/dist/ahead.d.ts +26 -0
  4. package/dist/ahead.js +264 -0
  5. package/dist/around.d.ts +11 -0
  6. package/dist/around.js +32 -0
  7. package/dist/bare.js +37 -14
  8. package/dist/blank.d.ts +10 -0
  9. package/dist/blank.js +26 -0
  10. package/dist/blend.d.ts +2 -1
  11. package/dist/blend.js +1 -6
  12. package/dist/bound.d.ts +70 -0
  13. package/dist/bound.js +351 -0
  14. package/dist/chain.d.ts +2 -1
  15. package/dist/chain.js +7 -5
  16. package/dist/changes.d.ts +24 -0
  17. package/dist/changes.js +189 -0
  18. package/dist/channels.d.ts +39 -13
  19. package/dist/channels.js +14 -5
  20. package/dist/color.d.ts +12 -10
  21. package/dist/color.js +25 -25
  22. package/dist/columns.d.ts +2 -1
  23. package/dist/columns.js +62 -38
  24. package/dist/contribution.d.ts +30 -0
  25. package/dist/contribution.js +374 -0
  26. package/dist/copyout.d.ts +10 -0
  27. package/dist/copyout.js +69 -24
  28. package/dist/crowd.d.ts +16 -6
  29. package/dist/crowd.js +20 -11
  30. package/dist/cue.d.ts +8 -1
  31. package/dist/cue.js +39 -13
  32. package/dist/cut.d.ts +8 -0
  33. package/dist/cut.js +4 -0
  34. package/dist/delay.d.ts +3 -0
  35. package/dist/delay.js +7 -0
  36. package/dist/drop.d.ts +9 -0
  37. package/dist/drop.js +84 -0
  38. package/dist/due.d.ts +24 -5
  39. package/dist/due.js +114 -34
  40. package/dist/easing.d.ts +6 -4
  41. package/dist/easing.js +7 -3
  42. package/dist/everyone.d.ts +8 -2
  43. package/dist/everyone.js +33 -3
  44. package/dist/fade.d.ts +2 -1
  45. package/dist/fade.js +2 -1
  46. package/dist/fill.d.ts +3 -2
  47. package/dist/fill.js +52 -20
  48. package/dist/fit.d.ts +44 -26
  49. package/dist/fit.js +10 -9
  50. package/dist/fold.d.ts +4 -37
  51. package/dist/fold.js +5 -513
  52. package/dist/gather.d.ts +12 -7
  53. package/dist/gather.js +179 -44
  54. package/dist/gone.js +2 -2
  55. package/dist/grid.d.ts +47 -0
  56. package/dist/grid.js +247 -0
  57. package/dist/handle.d.ts +2 -0
  58. package/dist/handle.js +14 -8
  59. package/dist/held.d.ts +2 -1
  60. package/dist/held.js +2 -1
  61. package/dist/history.d.ts +6 -5
  62. package/dist/history.js +7 -9
  63. package/dist/hosts.js +9 -15
  64. package/dist/index.d.ts +5 -4
  65. package/dist/keyfill.d.ts +1 -1
  66. package/dist/keyfill.js +5 -3
  67. package/dist/keyrows.d.ts +12 -0
  68. package/dist/keyrows.js +99 -12
  69. package/dist/lane.d.ts +38 -11
  70. package/dist/lane.js +46 -11
  71. package/dist/lanes.d.ts +30 -12
  72. package/dist/lanes.js +56 -36
  73. package/dist/leavings.d.ts +2 -2
  74. package/dist/leavings.js +1 -1
  75. package/dist/lives.d.ts +47 -0
  76. package/dist/lives.js +180 -0
  77. package/dist/meet.d.ts +2 -2
  78. package/dist/meet.js +95 -7
  79. package/dist/mixer.d.ts +56 -37
  80. package/dist/mixer.js +57 -171
  81. package/dist/motion.d.ts +14 -118
  82. package/dist/motion.js +16 -8
  83. package/dist/motions.d.ts +62 -155
  84. package/dist/motions.js +56 -370
  85. package/dist/moved.d.ts +1 -1
  86. package/dist/moved.js +16 -7
  87. package/dist/named.d.ts +6 -2
  88. package/dist/named.js +49 -3
  89. package/dist/numbers.d.ts +7 -0
  90. package/dist/numbers.js +33 -0
  91. package/dist/owed.d.ts +2 -0
  92. package/dist/owed.js +4 -0
  93. package/dist/pack.d.ts +2 -1
  94. package/dist/pack.js +2 -3
  95. package/dist/patch.d.ts +7 -3
  96. package/dist/patch.js +6 -2
  97. package/dist/places.d.ts +53 -0
  98. package/dist/places.js +171 -0
  99. package/dist/plot.d.ts +12 -0
  100. package/dist/plot.js +52 -0
  101. package/dist/project.d.ts +4 -4
  102. package/dist/project.js +9 -212
  103. package/dist/pull.js +22 -9
  104. package/dist/qualify.js +93 -31
  105. package/dist/reading.d.ts +6 -0
  106. package/dist/reading.js +5 -0
  107. package/dist/record.d.ts +5 -1
  108. package/dist/record.js +3 -2
  109. package/dist/relink.d.ts +1 -1
  110. package/dist/renumber.d.ts +10 -0
  111. package/dist/renumber.js +75 -0
  112. package/dist/restored.d.ts +2 -2
  113. package/dist/restored.js +1 -1
  114. package/dist/rests.d.ts +9 -0
  115. package/dist/rests.js +76 -0
  116. package/dist/revive.d.ts +3 -2
  117. package/dist/revive.js +2 -2
  118. package/dist/{locus.d.ts → role.d.ts} +10 -9
  119. package/dist/{locus.js → role.js} +3 -3
  120. package/dist/roles.d.ts +10 -0
  121. package/dist/roles.js +158 -0
  122. package/dist/roster.js +3 -3
  123. package/dist/rotation.d.ts +1 -1
  124. package/dist/rotation.js +1 -1
  125. package/dist/rows.js +28 -20
  126. package/dist/sample.d.ts +2 -2
  127. package/dist/sample.js +33 -7
  128. package/dist/seat.d.ts +17 -0
  129. package/dist/seat.js +25 -0
  130. package/dist/seek.js +5 -5
  131. package/dist/setting.d.ts +27 -0
  132. package/dist/setting.js +55 -0
  133. package/dist/shared.d.ts +1 -1
  134. package/dist/shared.js +1 -1
  135. package/dist/signals.d.ts +64 -32
  136. package/dist/signals.js +20 -18
  137. package/dist/stack.d.ts +5 -5
  138. package/dist/stack.js +5 -5
  139. package/dist/standing.d.ts +2 -1
  140. package/dist/standing.js +3 -2
  141. package/dist/store.d.ts +9 -0
  142. package/dist/store.js +24 -0
  143. package/dist/strays.d.ts +2 -1
  144. package/dist/strays.js +23 -15
  145. package/dist/stretch.d.ts +112 -0
  146. package/dist/stretch.js +9 -0
  147. package/dist/subject.d.ts +142 -0
  148. package/dist/subject.js +1 -0
  149. package/dist/tape.d.ts +9 -5
  150. package/dist/tape.js +5 -1
  151. package/dist/then.d.ts +9 -0
  152. package/dist/then.js +57 -0
  153. package/dist/ticker.d.ts +4 -4
  154. package/dist/trace.d.ts +4 -0
  155. package/dist/trace.js +255 -0
  156. package/dist/transport.d.ts +0 -8
  157. package/dist/transport.js +0 -4
  158. package/dist/turns.d.ts +4 -3
  159. package/dist/turns.js +4 -3
  160. package/dist/types/arc.d.ts +12 -11
  161. package/dist/types/channel.d.ts +12 -8
  162. package/dist/types/history.d.ts +35 -19
  163. package/dist/types/mix.d.ts +237 -163
  164. package/dist/types/motion.d.ts +151 -0
  165. package/dist/types/motion.js +1 -0
  166. package/dist/types/patch.d.ts +67 -34
  167. package/dist/types/place.d.ts +51 -36
  168. package/dist/types/trace.d.ts +51 -0
  169. package/dist/types/trace.js +1 -0
  170. package/dist/types/transport.d.ts +20 -18
  171. package/dist/types/voice.d.ts +144 -73
  172. package/dist/types/watch.d.ts +88 -40
  173. package/dist/types.d.ts +2 -0
  174. package/dist/unreached.d.ts +2 -0
  175. package/dist/unreached.js +7 -0
  176. package/dist/voice.d.ts +10 -143
  177. package/dist/voice.js +37 -82
  178. package/dist/warn.d.ts +2 -0
  179. package/dist/warn.js +1 -1
  180. package/dist/watch.d.ts +2 -2
  181. package/dist/watch.js +5 -3
  182. package/dist/wave.d.ts +4 -3
  183. package/dist/wave.js +3 -2
  184. package/dist/weigh.d.ts +7 -1
  185. package/dist/weigh.js +27 -0
  186. package/docs/schema.html +223 -34
  187. package/package.json +2 -2
package/dist/meet.js CHANGED
@@ -1,6 +1,8 @@
1
+ import { open, shut } from './everyone.js';
2
+ import { seatOf } from './seat.js';
1
3
  /**
2
4
  * Whether the lanes a probe of the subject at `slot` just met (`met`) can be folded on the general
3
- * path after the lanes' values: none is in a locus or a crowd, the subject owes none already this
5
+ * path after the lanes' values: none is in a role or a crowd, the subject owes none already this
4
6
  * fill, and each comes after every other laned voice in voice order, so folding it last folds in
5
7
  * the general path's order.
6
8
  */
@@ -88,19 +90,105 @@ export function meet(lanes, slot, subject, head, lane) {
88
90
  // after every other laned voice, the general path folds just those onto the lanes' values;
89
91
  // otherwise it reads the general path all frame.
90
92
  const o = slot * 6 /* Per.SLOT */;
91
- if (lane && lanes.per[o + 2 /* Per.IDLE */] === 0 && owable(lanes, slot)) {
92
- lanes.owed.owe(slot, lanes.met, lanes.metN);
93
- return true;
93
+ if (lane && lanes.per[o + 2 /* Per.IDLE */] === 0) {
94
+ const again = foldsAgain(lanes, slot);
95
+ if (again || owable(lanes, slot)) {
96
+ if (!foldNow(lanes, slot, subject, again))
97
+ lanes.owed.owe(slot, lanes.met, lanes.metN);
98
+ return true;
99
+ }
94
100
  }
95
101
  lanes.per[o + 0 /* Per.FILLED */] = lanes.fills;
96
102
  return false;
97
103
  }
104
+ /**
105
+ * Whether the subject at `slot` met the lanes the last subject `foldNow` folded met, in the same
106
+ * fill: `owable` and `foldNow`'s own checks then answer as they did for that one.
107
+ */
108
+ function foldsAgain(lanes, slot) {
109
+ if (lanes.foldsFill !== lanes.fills || lanes.metCrowd || lanes.owes(slot))
110
+ return false;
111
+ const folds = lanes.folds;
112
+ const n = lanes.metN;
113
+ if (folds.length !== n)
114
+ return false;
115
+ for (let i = 0; i < n; i++)
116
+ if (folds[i] !== lanes.met[i])
117
+ return false;
118
+ return true;
119
+ }
120
+ /**
121
+ * Folds the lanes a probe of the subject at `slot` just met onto the lanes' values, making each
122
+ * one's first call or read for the subject as the general path would for this probe, where every
123
+ * one is a stateless fn or keys voice that ran this fill; false, leaving them owed, where any is
124
+ * not. The fold is last in voice order, as `owable` found, so it folds as the general path would
125
+ * after the fill.
126
+ */
127
+ function foldNow(lanes, slot, subject, again) {
128
+ if (lanes.filling)
129
+ return false;
130
+ // What `unread` answers, which `one` asks before this probe's own stamp is written.
131
+ const lately = lanes.lately;
132
+ const o = slot * 6 /* Per.SLOT */;
133
+ if (lately >= 0 &&
134
+ !(lanes.per[o + 3 /* Per.LANE_PROBE */] > lately ||
135
+ lanes.per[o + 4 /* Per.GENERAL_PROBE */] > lately))
136
+ return false;
137
+ const met = lanes.met;
138
+ const n = lanes.metN;
139
+ for (let i = 0; i < n && !again; i++) {
140
+ const lane = lanes.byId.get(met[i]);
141
+ const v = lane.voice;
142
+ if (lane.ran !== lanes.fills ||
143
+ lane.motion !== undefined ||
144
+ v.keeping ||
145
+ typeof v.spec.weight === 'function' ||
146
+ (v.sharing && v.everyone === null))
147
+ return false;
148
+ }
149
+ if (!again) {
150
+ lanes.folds = met.slice(0, n);
151
+ lanes.foldsFill = lanes.fills;
152
+ }
153
+ // The subject is at hand: `call` would look it up again by its number.
154
+ if (lanes.subjects[slot] === undefined) {
155
+ lanes.subjects[slot] = subject;
156
+ lanes.holding = true;
157
+ }
158
+ lanes.meeting = true;
159
+ try {
160
+ for (let i = 0; i < n; i++) {
161
+ const lane = lanes.byId.get(met[i]);
162
+ const v = lane.voice;
163
+ const p = lane.positionOf(slot);
164
+ if (!v.sharing) {
165
+ lanes.one(lane, p, slot);
166
+ continue;
167
+ }
168
+ const rec = v.everyone;
169
+ open(v, rec, slot);
170
+ lanes.one(lane, p, slot);
171
+ // Its patch just made kept state, and the record is now that subject's own.
172
+ if (!v.keeping)
173
+ shut(v, rec, slot, lanes.cap);
174
+ }
175
+ }
176
+ finally {
177
+ lanes.meeting = false;
178
+ }
179
+ // A patch that just made kept state takes its voice off its lane: check the next subject again.
180
+ for (let i = 0; i < n; i++)
181
+ if (lanes.byId.get(met[i]).voice.keeping)
182
+ lanes.foldsFill = -1;
183
+ return true;
184
+ }
98
185
  /** Places a crowd voice's row on the subject a probe met, as `Lane.add` adds a position. */
99
186
  function place(lanes, voice, slot, subject, from, head) {
100
- const c = lanes.crowdOf.get(voice.id);
101
- const p = c?.rowOf.get(voice.id);
102
- if (c === undefined || p === undefined)
187
+ const s = seatOf(lanes, voice);
188
+ if (s === null)
103
189
  return false;
190
+ const c = s.crowd;
191
+ const p = s.row;
104
192
  const h = p * c.stride;
105
193
  const flags = c.hot[h + 0 /* Hot.FLAGS */];
106
194
  if (c.hot[h + 6 /* Hot.EPOCH */] <= from || (flags & 16 /* Flag.PLACED */) !== 0)
package/dist/mixer.d.ts CHANGED
@@ -1,31 +1,40 @@
1
1
  import { type Arc } from './arcs.js';
2
+ import { around } from './around.js';
2
3
  import { blended, laneRead, shareKept } from './blend.js';
3
4
  import type { Book } from './book.js';
4
5
  import { aims, chain, linkable, relink } from './chain.js';
5
6
  import { type LerpInto } from './channels.js';
6
7
  import type { Column } from './columns.js';
8
+ import { baseFor, contribution, isRest, keyed, read, slopeFor, tick } from './contribution.js';
7
9
  import { DepartedIndex } from './departed.js';
8
- import type { Due } from './due.js';
10
+ import { drop, forgetIn, recordDrop, releaseIn } from './drop.js';
11
+ import { DueQueue } from './due.js';
9
12
  import { parting } from './fade.js';
10
- import { apply, baseFor, clamp, contribution, fold, foldDetour, folded, foldLoci, foldSharers, foldWith, isRest, type Key, keyed, linked, owedBy, passes, read, shared, slopeFor, tick } from './fold.js';
13
+ import { apply, clamp, fold, foldDetour, folded, foldSharers, foldWith, type Key, linked, owedBy, passes, shared } from './fold.js';
11
14
  import { GoneIndex } from './gone.js';
12
15
  import type { HandleHost } from './handle.js';
13
16
  import { held, shownOf, sinceOf, unreachedOf } from './held.js';
14
17
  import { Lanes } from './lanes.js';
15
- import { foldLocus, type LocusScratch } from './locus.js';
16
- import type { MotionOwner, Motions } from './motions.js';
18
+ import type { Motions } from './motions.js';
17
19
  import type { Pace } from './pace.js';
18
20
  import { Keys } from './paging.js';
21
+ import type { Places } from './places.js';
22
+ import { moved, place, plot, put } from './plot.js';
19
23
  import { keep } from './pull.js';
20
24
  import { Steps } from './relink.js';
25
+ import { atRest, restful, rests, restsKey, restsLaned, still } from './rests.js';
21
26
  import { Outs } from './revive.js';
27
+ import { foldRole, type RoleScratch } from './role.js';
28
+ import { foldRoles } from './roles.js';
22
29
  import { ScoreIndex } from './scored.js';
23
30
  import { Fitting } from './spans.js';
24
31
  import { Store } from './store.js';
32
+ import type { MotionOwner } from './stretch.js';
33
+ import type { Subject } from './subject.js';
25
34
  import { type Announced, Transport } from './transport.js';
26
- import type { ArcHandle, ArcSpec, BlendMember, Booker, BookOptions, Channel, Columns, Engine, Handle, Kit, Marked, Mix, MixOptions, OwnerSpec, Patch, Projection, Sent, Signal, SpanHandle, SpanSpec, Tape, VoiceSpec } from './types.js';
27
- import { type Subject, type Voice } from './voice.js';
28
- import { base, capped, fadeOf, horizonFor, ownedBy, ownerBase, prime, weigh, weighOwned } from './weigh.js';
35
+ import type { ArcHandle, ArcSpec, BlendMember, Booker, BookOptions, Channel, Columns, Engine, Handle, Kit, Marked, Mix, MixOptions, OwnerSpec, Patch, Projection, Sent, Signal, SpanHandle, SpanSpec, Tape, Trace, TraceOptions, VoiceSpec } from './types.js';
36
+ import { type Voice } from './voice.js';
37
+ import { base, capped, fadeOf, horizonFor, ownedBy, ownerBase, prime, primeLaned, weigh, weighOwned } from './weigh.js';
29
38
  /**
30
39
  * What a mix takes where its options say nothing. Not exported from the package: the suite turns
31
40
  * `lanes` off to run every test on the general path, which is what makes each one an equivalence check.
@@ -67,7 +76,7 @@ export declare class Mixer<I, O> implements Mix<I, O> {
67
76
  fields: Record<string, unknown>;
68
77
  } | undefined;
69
78
  /** Each subject's last two poses and when they were probed, for `from: 'current'`. */
70
- pose: Store<I, {
79
+ lastPoses: Store<I, {
71
80
  pose: O;
72
81
  at: number;
73
82
  prev: O | undefined;
@@ -91,7 +100,7 @@ export declare class Mixer<I, O> implements Mix<I, O> {
91
100
  /** The pose `pull` folds a subject into where it cannot read straight from the lanes. */
92
101
  scratch: O | undefined;
93
102
  /** Live voices by the earliest mix time `moveTo` would change each, a binary heap. */
94
- due: Due<I, O>[];
103
+ due: DueQueue<I, O>;
95
104
  /** Voices retired since `moveTo` last pruned them, in the order they retired. */
96
105
  retired: Voice<I, O>[];
97
106
  /** Visit every voice each sync, as before the due queue; for tests that compare the two. */
@@ -135,6 +144,8 @@ export declare class Mixer<I, O> implements Mix<I, O> {
135
144
  */
136
145
  chains: Store<I, Subject<unknown>>;
137
146
  version: number;
147
+ /** The positions `plot` gave, which a voice's `within` reads: see `bound.ts`. */
148
+ places: Places<I> | null;
138
149
  /** What `prime` reads its clock, voice time and pass from: see `Primed`. */
139
150
  readonly primed: Float64Array<ArrayBuffer>;
140
151
  readonly steps: Steps<Voice<I, O>, I>;
@@ -166,8 +177,10 @@ export declare class Mixer<I, O> implements Mix<I, O> {
166
177
  unshared: boolean;
167
178
  /** 0 where a fold is a walk of the chain: see `detour` in `everyone.ts`. */
168
179
  detours: number;
169
- /** How many voices in the list carry a locus; with none, a fold allocates nothing. */
170
- loci: number;
180
+ /** How many voices in the list carry a role; with none, a fold allocates nothing. */
181
+ roleVoices: number;
182
+ /** The tags the mix's options declare roles. */
183
+ readonly roleTags: readonly string[] | undefined;
171
184
  /** What every motion patch it plays asks for its voice's time, holding this mix weakly. */
172
185
  owner: MotionOwner | null;
173
186
  /** How many voices in the list are anchored, so a sync with none skips placing them. */
@@ -191,9 +204,9 @@ export declare class Mixer<I, O> implements Mix<I, O> {
191
204
  readonly lerpsInto: (LerpInto | undefined)[];
192
205
  /** By slot, a stock scalar channel's arithmetic, which a fold applies without calling the channel. */
193
206
  readonly scalars: ('sum' | 'mul' | 'max' | undefined)[];
194
- /** What a fold with a locus in play gathers into, one per depth of folds under way. */
195
- readonly locusScratch: LocusScratch<I, O>[];
196
- locusDepth: number;
207
+ /** What a fold with a role in play gathers into, one per depth of folds under way. */
208
+ readonly roleScratch: RoleScratch<I, O>[];
209
+ roleDepth: number;
197
210
  readonly slotOf: Map<string, number>;
198
211
  lanes: Lanes<I, O> | null;
199
212
  handles: HandleHost<I, O> | null;
@@ -209,6 +222,7 @@ export declare class Mixer<I, O> implements Mix<I, O> {
209
222
  keys: Keys | null;
210
223
  /** With a history store, the voices it paged out whose handles are still held; null without one. */
211
224
  outs: Outs | null;
225
+ readonly pose: () => O;
212
226
  constructor(kit: Kit<O>, opts: MixOptions,
213
227
  /** The lanes an entry was built with; null in one that leaves them out. */
214
228
  lanesOf: typeof Lanes | null);
@@ -237,7 +251,7 @@ export declare class Mixer<I, O> implements Mix<I, O> {
237
251
  off: number;
238
252
  };
239
253
  cue(spec: VoiceSpec<I, O>): Handle<I>;
240
- blend(members: readonly (Patch<I, O, unknown> | BlendMember<I, O>)[], by: Signal<I>, spec?: Omit<VoiceSpec<I, O>, 'patch' | 'weight' | 'locus'>): Handle<I>[];
254
+ blend(members: readonly (Patch<I, O, unknown> | BlendMember<I, O>)[], by: Signal<I>, spec?: Omit<VoiceSpec<I, O>, 'patch' | 'weight' | 'role' | 'locus' | 'within'>): Handle<I>[];
241
255
  owns(spec: OwnerSpec<I>): Handle<I>;
242
256
  span(spec: SpanSpec<I>): SpanHandle<I>;
243
257
  arc(spec: ArcSpec<I, O>): ArcHandle<I>;
@@ -252,6 +266,7 @@ export declare class Mixer<I, O> implements Mix<I, O> {
252
266
  project(at: number | {
253
267
  readonly frame: number;
254
268
  }): Projection<I, O>;
269
+ trace(from: number, to: number, opts?: TraceOptions): Trace<I, O>;
255
270
  announce(name: string, opts?: {
256
271
  at?: number;
257
272
  score?: string;
@@ -260,27 +275,17 @@ export declare class Mixer<I, O> implements Mix<I, O> {
260
275
  /** Throws for a mix taken off its transport. */
261
276
  attached(): void;
262
277
  marks(from: number, to: number): Marked[];
263
- atRest(subject: I): boolean;
264
- rests(pose: O): boolean;
265
278
  rebase(): void;
266
279
  voices(tag?: string): Handle<I>[];
267
280
  get live(): boolean;
268
281
  get inert(): boolean;
269
- private restful;
270
282
  get rate(): number;
271
283
  set rate(r: number);
272
284
  ramp(rate: number, over: number): void;
273
- /** Whether a voice will change no pose from `now` on, short of a change made to it. */
274
- still(voice: Voice<I, O>, now: number): boolean;
275
285
  close(): void;
276
286
  mute(opts?: {
277
287
  over?: number;
278
288
  }): void;
279
- drop(subject: I): void;
280
- /** Lets `voice` go of a dropped subject. Methods rather than closures, so a drop makes neither. */
281
- private forgetIn;
282
- private releaseIn;
283
- private recordDrop;
284
289
  touch(subject?: I): void;
285
290
  drain<E = unknown>(tag?: string): Sent<I, E>[];
286
291
  /** Voices whose stop 0 is mid-computation, so a fold for one cannot re-enter itself. */
@@ -292,15 +297,13 @@ export declare class Mixer<I, O> implements Mix<I, O> {
292
297
  */
293
298
  restStamps: Store<I, number> | null;
294
299
  /** What a probe's record of rest is good for: moved by a new frame, version, relink, or stir. */
295
- private restsEpoch;
296
- private restsFrame;
297
- private restsVersion;
298
- private restsRelinks;
299
- private restsStirs;
300
+ restsEpoch: number;
301
+ restsFrame: number;
302
+ restsVersion: number;
303
+ restsRelinks: number;
304
+ restsStirs: number;
300
305
  /** The pose `atRest` folds into where no probe this frame answers. */
301
- private restScratch;
302
- private restsLaned;
303
- private restsKey;
306
+ restScratch: O | undefined;
304
307
  }
305
308
  declare const methods: {
306
309
  fold: typeof fold;
@@ -308,7 +311,7 @@ declare const methods: {
308
311
  linked: typeof linked;
309
312
  foldWith: typeof foldWith;
310
313
  owedBy: typeof owedBy;
311
- foldLoci: typeof foldLoci;
314
+ foldRoles: typeof foldRoles;
312
315
  foldDetour: typeof foldDetour;
313
316
  foldSharers: typeof foldSharers;
314
317
  shared: typeof shared;
@@ -323,6 +326,7 @@ declare const methods: {
323
326
  baseFor: typeof baseFor;
324
327
  slopeFor: typeof slopeFor;
325
328
  prime: typeof prime;
329
+ primeLaned: typeof primeLaned;
326
330
  capped: typeof capped;
327
331
  horizonFor: typeof horizonFor;
328
332
  weigh: typeof weigh;
@@ -344,7 +348,22 @@ declare const methods: {
344
348
  sinceOf: typeof sinceOf;
345
349
  shownOf: typeof shownOf;
346
350
  keep: typeof keep;
347
- foldLocus: typeof foldLocus;
351
+ foldRole: typeof foldRole;
352
+ atRest: typeof atRest;
353
+ rests: typeof rests;
354
+ restful: typeof restful;
355
+ still: typeof still;
356
+ restsLaned: typeof restsLaned;
357
+ restsKey: typeof restsKey;
358
+ plot: typeof plot;
359
+ place: typeof place;
360
+ moved: typeof moved;
361
+ put: typeof put;
362
+ around: typeof around;
363
+ drop: typeof drop;
364
+ forgetIn: typeof forgetIn;
365
+ releaseIn: typeof releaseIn;
366
+ recordDrop: typeof recordDrop;
348
367
  };
349
368
  type Methods = typeof methods;
350
369
  export interface Mixer<I, O> extends Methods {
@@ -352,13 +371,13 @@ export interface Mixer<I, O> extends Methods {
352
371
  /** Makes a mix the host asked for, with the registry's history where it names none, and lists it there. */
353
372
  export declare function made<I, O, H>(kit: Kit<O>, opts: MixOptions<H>, lanes: typeof Lanes | null): Mix<I, O, H>;
354
373
  /**
355
- * The one that ships: every form on the CPU, probed per subject on demand.
374
+ * The engine that ships, running every form on the CPU. It probes per subject on demand.
356
375
  *
357
376
  * @category engine
358
377
  */
359
378
  export declare const mixer: Engine;
360
379
  /**
361
- * Makes a mix over a kit, on the engine the options name or the stock one.
380
+ * Makes a mix over a kit. It runs on the engine the options name, or the stock one.
362
381
  *
363
382
  * @category mix
364
383
  */