@jsenv/navi 0.29.310 → 0.29.312
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 +26 -1
- package/dist/dev/jsenv_navi.js.map +4 -4
- package/dist/jsenv_navi.js +23 -0
- package/dist/jsenv_navi.js.map +4 -4
- package/docs/actions.md +11 -4
- package/docs/data_states.md +5 -1
- package/package.json +1 -1
package/dist/dev/jsenv_navi.js
CHANGED
|
@@ -26292,6 +26292,22 @@ This prevents cross-test pollution and ensures clean state.`,
|
|
|
26292
26292
|
// URL is the source of truth for explicit parameters
|
|
26293
26293
|
const value = paramSignal.peek();
|
|
26294
26294
|
if (urlParamValue === undefined) {
|
|
26295
|
+
// An address silent about a persisted search param leaves it
|
|
26296
|
+
// alone: the state already holds what is stored (it starts from
|
|
26297
|
+
// storage and every write goes back to it), and a reset here
|
|
26298
|
+
// would empty the storage as well. Reading the storage back is
|
|
26299
|
+
// not an option either: the write that removes the param from
|
|
26300
|
+
// the address is the one emptying its storage, and this sync can
|
|
26301
|
+
// run before that removal has happened.
|
|
26302
|
+
// A path segment or a pushed param names a place, and an address
|
|
26303
|
+
// without it is the place without it: those follow the address.
|
|
26304
|
+
if (
|
|
26305
|
+
connection.persists &&
|
|
26306
|
+
connection.paramType === "query" &&
|
|
26307
|
+
connection.history !== "push"
|
|
26308
|
+
) {
|
|
26309
|
+
continue;
|
|
26310
|
+
}
|
|
26295
26311
|
// No URL parameter - reset signal to its current default value
|
|
26296
26312
|
// (handles both static fallback and dynamic default cases)
|
|
26297
26313
|
const defaultValue = connection.getDefaultValue();
|
|
@@ -36616,6 +36632,13 @@ const useUIFacadeStateController = (props, realUIStateController) => {
|
|
|
36616
36632
|
// ── init: runs once on mount ───────────────────────────────────────────
|
|
36617
36633
|
(s) => {
|
|
36618
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
|
+
}
|
|
36619
36642
|
if (childController.controlType === "button") {
|
|
36620
36643
|
return false;
|
|
36621
36644
|
}
|
|
@@ -73331,7 +73354,9 @@ const PickerFirstResolver = props => {
|
|
|
73331
73354
|
* on it.
|
|
73332
73355
|
* @param {boolean} [picksNothing] The popup asks something rather than holding
|
|
73333
73356
|
* an answer, so the trigger draws a label and never a value: no chevron, no
|
|
73334
|
-
* clear cross, in any variant
|
|
73357
|
+
* clear cross, in any variant — and the controls in the popup are their own
|
|
73358
|
+
* (a checkbox gating the yes), never the picker's value, so a bound `action`
|
|
73359
|
+
* keeps the params it was bound with. `type="confirm"` says it for itself; say it
|
|
73335
73360
|
* for a popup of your own that is a menu of actions rather than a choice —
|
|
73336
73361
|
* or a DOOR: a drawing that grows to be looked at (a weather scene, a plan),
|
|
73337
73362
|
* with no `action` at all. The picker is then a trigger and a popup, and
|