@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.
- package/dist/dev/jsenv_navi.js +31 -7
- package/dist/dev/jsenv_navi.js.map +5 -5
- package/dist/jsenv_navi.js +28 -6
- package/dist/jsenv_navi.js.map +5 -5
- package/docs/actions.md +11 -4
- package/docs/control_object.md +15 -6
- package/docs/data_states.md +5 -1
- package/package.json +1 -1
package/dist/dev/jsenv_navi.js
CHANGED
|
@@ -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:
|
|
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(
|
|
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
|
|
71608
|
-
//
|
|
71609
|
-
//
|
|
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
|
|
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
|