@jsenv/navi 0.29.311 → 0.29.314

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.
@@ -36632,6 +36632,13 @@ const useUIFacadeStateController = (props, realUIStateController) => {
36632
36632
  // ── init: runs once on mount ───────────────────────────────────────────
36633
36633
  (s) => {
36634
36634
  const canRegisterAsFacadeChild = (childController) => {
36635
+ if (s.props.picksNothing) {
36636
+ // The popup is a question, not a choice: a control in it (the "I
36637
+ // understand" checkbox gating a confirm) holds its own value, and
36638
+ // that value is not the picker's. Adopted, it would reach the
36639
+ // picker's action as its params, over whatever the caller bound.
36640
+ return false;
36641
+ }
36635
36642
  if (childController.controlType === "button") {
36636
36643
  return false;
36637
36644
  }
@@ -54308,8 +54315,8 @@ const Form = props => {
54308
54315
  // second's opening tag, so the inner fields would silently belong to the
54309
54316
  // outer form. Rather than forbidding the shape (a form inside a picker inside
54310
54317
  // a form is a legitimate thing to want), a form that finds itself inside one
54311
- // is a different component: same group, no <form> element and none of the
54312
- // browser machinery that comes with it.
54318
+ // is a different component: a group of its own, no <form> element and none of
54319
+ // the browser machinery that comes with it (see FormNested).
54313
54320
  const isNested = Boolean(useContext(FormContext));
54314
54321
  return isNested ? jsx(FormNested, {
54315
54322
  ...props
@@ -54439,13 +54446,26 @@ const FormControl = props => {
54439
54446
  // event to intercept and no requestSubmit() to go through, so it is driven the
54440
54447
  // way every other group is — a command, or an action requested on it. method
54441
54448
  // belongs to the browser's own submission, so it means nothing here either.
54449
+ //
54450
+ // And it owns what it holds: `standalone`, unconditionally. A <Form> is a
54451
+ // question with a send of its own, so its fields answer to it and to nothing
54452
+ // above it — they are not in the outer form's value, not in its "changed", and
54453
+ // not in the constraints it checks before sending. That last one is what a
54454
+ // caller feels: a required field in a popup nobody opened would otherwise
54455
+ // refuse the outer submit, pointing at something the screen is not even
54456
+ // showing. A cluster of fields that IS part of the value around it is a
54457
+ // <ControlGroup>, which is the shape without the send (see
54458
+ // docs/control_object.md).
54442
54459
  const FormNested = props => {
54443
54460
  const {
54444
54461
  formRootProps,
54445
54462
  formProps,
54446
54463
  onnavi_action_end,
54447
54464
  inside
54448
- } = useFormGroup(props);
54465
+ } = useFormGroup({
54466
+ ...props,
54467
+ standalone: true
54468
+ });
54449
54469
  return jsx(Box, {
54450
54470
  ...formRootProps,
54451
54471
  ...formProps,
@@ -71604,9 +71624,11 @@ const PickerText = props => {
71604
71624
  };
71605
71625
 
71606
71626
  // The popup holds a group of named controls — a `<ControlGroup>`, or a `<Form>`
71607
- // when that group is a question with a send of its own — and this picker's
71608
- // value is the object that group aggregates. The popup itself holds nothing: it
71609
- // is a surface (see dialog.jsx), so there is nothing to tell it about the shape.
71627
+ // when that group is a question with a send of its own and the picker is not
71628
+ // itself inside a form (a form in a form answers for itself, see form.jsx) —
71629
+ // and this picker's value is the object that group aggregates. The popup itself
71630
+ // holds nothing: it is a surface (see dialog.jsx), so there is nothing to tell
71631
+ // it about the shape.
71610
71632
  const PickerObject = props => {
71611
71633
  const Next = useNextResolver();
71612
71634
  return jsx(Next, {
@@ -73347,7 +73369,9 @@ const PickerFirstResolver = props => {
73347
73369
  * on it.
73348
73370
  * @param {boolean} [picksNothing] The popup asks something rather than holding
73349
73371
  * an answer, so the trigger draws a label and never a value: no chevron, no
73350
- * clear cross, in any variant. `type="confirm"` says it for itself; say it
73372
+ * clear cross, in any variant — and the controls in the popup are their own
73373
+ * (a checkbox gating the yes), never the picker's value, so a bound `action`
73374
+ * keeps the params it was bound with. `type="confirm"` says it for itself; say it
73351
73375
  * for a popup of your own that is a menu of actions rather than a choice —
73352
73376
  * or a DOOR: a drawing that grows to be looked at (a weather scene, a plan),
73353
73377
  * with no `action` at all. The picker is then a trigger and a popup, and