@jsenv/navi 0.29.92 → 0.29.94

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.
@@ -146,8 +146,9 @@ consistency across the app, not from any single call site.
146
146
  `canSendWhileUnchanged` because a submit "does nothing".
147
147
  - `distributeChildStates` on a group — the way down asked once for ALL the
148
148
  children, when they cannot be placed one at a time (four seats where who sits
149
- down decides who moves). The mirror of `aggregateChildStates`; see
150
- control_object.md. Read it before writing a `uiAction` whose only job is to
149
+ down decides who moves), and asked again whenever one of them speaks, so the
150
+ other views of the same answer follow. The mirror of `aggregateChildStates`;
151
+ see control_object.md. Read it before writing a `uiAction` whose only job is to
151
152
  translate. Two neighbouring questions have answers already: a yes/no shown as
152
153
  two rows needs no translation (`List.Item value={true}` beside
153
154
  `value={false}` IS a boolean control), and a cross that means "back to the
@@ -164,6 +164,19 @@ distributeChildStates: (groupValue, children) => new Map([[child, state], …])
164
164
  the mirror of `aggregateChildStates`, which already sees every child. A child
165
165
  the Map does not name is left where it is. Given both, the plural one wins.
166
166
 
167
+ **It closes the loop, which the per-child one does not.** A group with a plural
168
+ distribute holds ONE answer its children are views OF — a list saying who plays,
169
+ four seats saying who sits where — rather than a value that IS what they said.
170
+ So when one view speaks, the answer moves and **the other views are placed
171
+ again**; the one that just acted is left where the user put it. Without that, a
172
+ seat keeps showing somebody the list no longer holds, and nothing says so.
173
+
174
+ This is the same rule as "a child arriving after the value did is placed from
175
+ what the group holds", for a child that was there when the value moved without
176
+ it. It matters most inside a picker's popup, where nothing else would bring the
177
+ value back down: a picker's value IS what the control in its popup holds, so the
178
+ façade never echoes it back.
179
+
167
180
  A group with an `aggregateChildStates` of its own is outside all of this: what
168
181
  it returns is taken as the truth, `undefined` included. That is the one way such
169
182
  a group says **"I have nothing to say yet"** — return `undefined` while the
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jsenv/navi",
3
- "version": "0.29.92",
3
+ "version": "0.29.94",
4
4
  "type": "module",
5
5
  "description": "Library of components including navigation to create frontend applications",
6
6
  "repository": {