@jsenv/navi 0.29.223 → 0.29.225
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 +191 -55
- package/dist/dev/jsenv_navi.js.map +13 -11
- package/dist/jsenv_navi.js +184 -55
- package/dist/jsenv_navi.js.map +13 -11
- package/docs/AI_INSTRUCTIONS.md +7 -0
- package/docs/css_architecture.md +7 -0
- package/docs/dynamic_import.md +189 -0
- package/docs/navigation.md +3 -1
- package/package.json +1 -1
package/dist/dev/jsenv_navi.js
CHANGED
|
@@ -1632,18 +1632,6 @@ const reportErrorIfNobodyDisplaysIt = (error, { action } = {}) => {
|
|
|
1632
1632
|
});
|
|
1633
1633
|
};
|
|
1634
1634
|
|
|
1635
|
-
const actionPrivatePropertiesWeakMap = new WeakMap();
|
|
1636
|
-
const getActionPrivateProperties = (action) => {
|
|
1637
|
-
const actionPrivateProperties = actionPrivatePropertiesWeakMap.get(action);
|
|
1638
|
-
if (!actionPrivateProperties) {
|
|
1639
|
-
throw new Error(`Cannot find action private properties for "${action}"`);
|
|
1640
|
-
}
|
|
1641
|
-
return actionPrivateProperties;
|
|
1642
|
-
};
|
|
1643
|
-
const setActionPrivateProperties = (action, properties) => {
|
|
1644
|
-
actionPrivatePropertiesWeakMap.set(action, properties);
|
|
1645
|
-
};
|
|
1646
|
-
|
|
1647
1635
|
const IDLE = { id: "idle" };
|
|
1648
1636
|
const RUNNING = { id: "running" };
|
|
1649
1637
|
const ABORTED = { id: "aborted" };
|
|
@@ -1791,19 +1779,7 @@ const ActionRenderer = ({
|
|
|
1791
1779
|
if (aborted) {
|
|
1792
1780
|
return renderAborted(action);
|
|
1793
1781
|
}
|
|
1794
|
-
|
|
1795
|
-
if (renderCompleted) {
|
|
1796
|
-
renderCompletedSafe = renderCompleted;
|
|
1797
|
-
} else {
|
|
1798
|
-
const {
|
|
1799
|
-
ui
|
|
1800
|
-
} = getActionPrivateProperties(action);
|
|
1801
|
-
if (ui.renderCompleted) {
|
|
1802
|
-
renderCompletedSafe = ui.renderCompleted;
|
|
1803
|
-
} else {
|
|
1804
|
-
renderCompletedSafe = renderCompletedDefault;
|
|
1805
|
-
}
|
|
1806
|
-
}
|
|
1782
|
+
const renderCompletedSafe = renderCompleted || renderCompletedDefault;
|
|
1807
1783
|
if (loading) {
|
|
1808
1784
|
if (action.canDisplayOldData && data !== undefined) {
|
|
1809
1785
|
return renderCompletedSafe(data, action);
|
|
@@ -2552,6 +2528,18 @@ const weakEffect = (values, callback) => {
|
|
|
2552
2528
|
return dispose;
|
|
2553
2529
|
};
|
|
2554
2530
|
|
|
2531
|
+
const actionPrivatePropertiesWeakMap = new WeakMap();
|
|
2532
|
+
const getActionPrivateProperties = (action) => {
|
|
2533
|
+
const actionPrivateProperties = actionPrivatePropertiesWeakMap.get(action);
|
|
2534
|
+
if (!actionPrivateProperties) {
|
|
2535
|
+
throw new Error(`Cannot find action private properties for "${action}"`);
|
|
2536
|
+
}
|
|
2537
|
+
return actionPrivateProperties;
|
|
2538
|
+
};
|
|
2539
|
+
const setActionPrivateProperties = (action, properties) => {
|
|
2540
|
+
actionPrivatePropertiesWeakMap.set(action, properties);
|
|
2541
|
+
};
|
|
2542
|
+
|
|
2555
2543
|
const SYMBOL_OBJECT_SIGNAL = Symbol.for("navi_object_signal");
|
|
2556
2544
|
|
|
2557
2545
|
/*
|
|
@@ -3264,7 +3252,6 @@ const createAction = (callback, rootOptions = {}) => {
|
|
|
3264
3252
|
data = dataDefault,
|
|
3265
3253
|
|
|
3266
3254
|
completed = false,
|
|
3267
|
-
renderLoadedAsync,
|
|
3268
3255
|
sideEffect = () => {},
|
|
3269
3256
|
meta = {},
|
|
3270
3257
|
|
|
@@ -3669,10 +3656,6 @@ const createAction = (callback, rootOptions = {}) => {
|
|
|
3669
3656
|
}
|
|
3670
3657
|
|
|
3671
3658
|
{
|
|
3672
|
-
const ui = {
|
|
3673
|
-
renderLoaded: null,
|
|
3674
|
-
renderLoadedAsync,
|
|
3675
|
-
};
|
|
3676
3659
|
let sideEffectCleanup;
|
|
3677
3660
|
let completeSideEffectCleanup;
|
|
3678
3661
|
|
|
@@ -3869,20 +3852,6 @@ const createAction = (callback, rootOptions = {}) => {
|
|
|
3869
3852
|
} else {
|
|
3870
3853
|
runResult = callbackResult;
|
|
3871
3854
|
}
|
|
3872
|
-
if (ui.renderLoadedAsync && !ui.renderLoaded) {
|
|
3873
|
-
const renderLoadedPromise = ui.renderLoadedAsync(...args).then(
|
|
3874
|
-
(renderLoaded) => {
|
|
3875
|
-
ui.renderLoaded = renderLoaded;
|
|
3876
|
-
},
|
|
3877
|
-
(e) => {
|
|
3878
|
-
if (!rejected) {
|
|
3879
|
-
rejected = true;
|
|
3880
|
-
rejectedValue = e;
|
|
3881
|
-
}
|
|
3882
|
-
},
|
|
3883
|
-
);
|
|
3884
|
-
thenableArray.push(renderLoadedPromise);
|
|
3885
|
-
}
|
|
3886
3855
|
if (thenableArray.length === 0) {
|
|
3887
3856
|
return onRunEnd();
|
|
3888
3857
|
}
|
|
@@ -3936,7 +3905,6 @@ const createAction = (callback, rootOptions = {}) => {
|
|
|
3936
3905
|
|
|
3937
3906
|
performRun,
|
|
3938
3907
|
performReset,
|
|
3939
|
-
ui,
|
|
3940
3908
|
|
|
3941
3909
|
nameSignal: actionNameSignal,
|
|
3942
3910
|
callSourceSignal: actionCallSourceSignal,
|
|
@@ -4211,10 +4179,8 @@ const createActionProxyFromSignal = (
|
|
|
4211
4179
|
|
|
4212
4180
|
performRun: proxyPrivateMethod("performRun"),
|
|
4213
4181
|
performReset: proxyPrivateMethod("performReset"),
|
|
4214
|
-
ui: currentActionPrivateProperties.ui,
|
|
4215
4182
|
};
|
|
4216
4183
|
onActionTargetChange(() => {
|
|
4217
|
-
proxyPrivateProperties.ui = currentActionPrivateProperties.ui;
|
|
4218
4184
|
proxyPrivateProperties.childActionWeakSet =
|
|
4219
4185
|
currentActionPrivateProperties.childActionWeakSet;
|
|
4220
4186
|
});
|
|
@@ -17370,6 +17336,17 @@ const useAsyncData = (promiseOrAction, {
|
|
|
17370
17336
|
run,
|
|
17371
17337
|
onLoad
|
|
17372
17338
|
} = {}) => {
|
|
17339
|
+
// The request this component owns, as a function: one action per instance,
|
|
17340
|
+
// made on the first render and kept — the function's identity changes on
|
|
17341
|
+
// every render when it is written inline, the action's does not.
|
|
17342
|
+
const ownActionRef = useRef(null);
|
|
17343
|
+
if (typeof promiseOrAction === "function" && !promiseOrAction.isAction) {
|
|
17344
|
+
if (!ownActionRef.current) {
|
|
17345
|
+
ownActionRef.current = createAction(promiseOrAction);
|
|
17346
|
+
}
|
|
17347
|
+
promiseOrAction = ownActionRef.current;
|
|
17348
|
+
run = true;
|
|
17349
|
+
}
|
|
17373
17350
|
const isAction = Boolean(promiseOrAction && promiseOrAction.isAction);
|
|
17374
17351
|
if (loading === true) {
|
|
17375
17352
|
loading = "use";
|
|
@@ -17690,6 +17667,13 @@ const LoadingFallback = ({
|
|
|
17690
17667
|
useLayoutEffect(() => {
|
|
17691
17668
|
publishRouteRender();
|
|
17692
17669
|
});
|
|
17670
|
+
// A suspension nobody here wrote — preact/compat's lazy(), a promise thrown
|
|
17671
|
+
// by hand: the boundary holds the subtree and has nothing to say about it,
|
|
17672
|
+
// so the fallback is not drawn. Said out loud in dev rather than found by
|
|
17673
|
+
// reading this file; an import read through an action never lands here.
|
|
17674
|
+
if (!action) {
|
|
17675
|
+
console.warn(`<Loading> caught a suspension it cannot attribute to an action, so its fallback is not drawn. Read code loaded on demand through an action — a routeAction or useAsyncData(() => import(...)) — see docs/dynamic_import.md.`);
|
|
17676
|
+
}
|
|
17693
17677
|
if (loadingRef.current.reason !== "loading") {
|
|
17694
17678
|
return null;
|
|
17695
17679
|
}
|
|
@@ -25014,11 +24998,24 @@ const route = (
|
|
|
25014
24998
|
matchesParams: undefined,
|
|
25015
24999
|
navTo: undefined,
|
|
25016
25000
|
redirectTo: undefined,
|
|
25001
|
+
preload: undefined,
|
|
25017
25002
|
subscribeStatus,
|
|
25018
25003
|
toString: () => {
|
|
25019
25004
|
return `route "${cleanPattern}"`;
|
|
25020
25005
|
},
|
|
25021
25006
|
};
|
|
25007
|
+
// Asks ahead of the arrival for what this route's actions ask without the
|
|
25008
|
+
// address — a page's code, a read without params (see routeAction). An
|
|
25009
|
+
// action keyed by a param waits for the arrival: a prefetch has no address.
|
|
25010
|
+
route.preload = () => {
|
|
25011
|
+
const preloadSet = routePreloadMap.get(route);
|
|
25012
|
+
if (!preloadSet) {
|
|
25013
|
+
return;
|
|
25014
|
+
}
|
|
25015
|
+
for (const preload of preloadSet) {
|
|
25016
|
+
preload();
|
|
25017
|
+
}
|
|
25018
|
+
};
|
|
25022
25019
|
Object.preventExtensions(route);
|
|
25023
25020
|
|
|
25024
25021
|
// route private props
|
|
@@ -25490,6 +25487,34 @@ const paramsTargetCanPlace = (redirectRoute, urlParams) => {
|
|
|
25490
25487
|
};
|
|
25491
25488
|
|
|
25492
25489
|
let setupRoutesCalled = false;
|
|
25490
|
+
let activeRouteSet = null;
|
|
25491
|
+
|
|
25492
|
+
const routePreloadMap = new WeakMap();
|
|
25493
|
+
const registerRoutePreload = (route, preload) => {
|
|
25494
|
+
let preloadSet = routePreloadMap.get(route);
|
|
25495
|
+
if (!preloadSet) {
|
|
25496
|
+
preloadSet = new Set();
|
|
25497
|
+
routePreloadMap.set(route, preloadSet);
|
|
25498
|
+
}
|
|
25499
|
+
preloadSet.add(preload);
|
|
25500
|
+
};
|
|
25501
|
+
/**
|
|
25502
|
+
* Preloads every route the url leads to, a section and the page inside it
|
|
25503
|
+
* alike. What a link does when the pointer or the focus reaches it (see
|
|
25504
|
+
* use_preload_on_intent.js), available to anything else that knows where it
|
|
25505
|
+
* is about to go.
|
|
25506
|
+
*/
|
|
25507
|
+
const preloadUrl = (url) => {
|
|
25508
|
+
if (!activeRouteSet) {
|
|
25509
|
+
return;
|
|
25510
|
+
}
|
|
25511
|
+
for (const route of activeRouteSet) {
|
|
25512
|
+
const { routePattern } = getRoutePrivateProperties(route);
|
|
25513
|
+
if (routePattern.applyOn(url)) {
|
|
25514
|
+
route.preload();
|
|
25515
|
+
}
|
|
25516
|
+
}
|
|
25517
|
+
};
|
|
25493
25518
|
const setupRoutes = (routes) => {
|
|
25494
25519
|
if (setupRoutesCalled) {
|
|
25495
25520
|
throw new Error(
|
|
@@ -25501,6 +25526,7 @@ This prevents cross-test pollution and ensures clean state.`,
|
|
|
25501
25526
|
setupRoutesCalled = true;
|
|
25502
25527
|
|
|
25503
25528
|
const routeSet = new Set();
|
|
25529
|
+
activeRouteSet = routeSet;
|
|
25504
25530
|
let currentUrl = null;
|
|
25505
25531
|
const getUrl = () => currentUrl;
|
|
25506
25532
|
// PHASE 1: Setup patterns with unified objects (includes all relationships and signal connections)
|
|
@@ -25793,6 +25819,7 @@ This prevents cross-test pollution and ensures clean state.`,
|
|
|
25793
25819
|
routeSet.clear();
|
|
25794
25820
|
redirectingRouteSet = null;
|
|
25795
25821
|
setupRoutesCalled = false;
|
|
25822
|
+
activeRouteSet = null;
|
|
25796
25823
|
};
|
|
25797
25824
|
return {
|
|
25798
25825
|
updateRoutes,
|
|
@@ -31189,20 +31216,55 @@ const writeCover = (edge, element, size) => {
|
|
|
31189
31216
|
style.setProperty(property, value);
|
|
31190
31217
|
};
|
|
31191
31218
|
|
|
31219
|
+
/**
|
|
31220
|
+
* Binds an action to a route: it runs when the route matches, with the params
|
|
31221
|
+
* the effect reads off the address, and is aborted when the route is left.
|
|
31222
|
+
* Its data, its wait and its failure are read by the page through
|
|
31223
|
+
* `useAsyncData`.
|
|
31224
|
+
*
|
|
31225
|
+
* A page's CODE is declared the same way — the import is one more thing the
|
|
31226
|
+
* address asks for, started with the data rather than after it:
|
|
31227
|
+
*
|
|
31228
|
+
* ```js
|
|
31229
|
+
* const GAME_PAGE_CODE = routeAction(GAME_ROUTE, () =>
|
|
31230
|
+
* import("./game_page.jsx").then((m) => m.GamePage),
|
|
31231
|
+
* );
|
|
31232
|
+
* ```
|
|
31233
|
+
*
|
|
31234
|
+
* @param {object | object[]} routeOrRoutes - the route, or the routes, this
|
|
31235
|
+
* action belongs to.
|
|
31236
|
+
* @param {object | Function} action - an action, or a function made into one.
|
|
31237
|
+
* @param {() => any} [paramsEffect] - what the action runs with, read off
|
|
31238
|
+
* signals (the route's params, a search param): re-read when they change.
|
|
31239
|
+
* Return a falsy value to run nothing. Without it the action asks nothing of
|
|
31240
|
+
* the address, which is also what makes it worth fetching AHEAD of the
|
|
31241
|
+
* arrival: a link to the route preruns it when the pointer or the focus
|
|
31242
|
+
* reaches the link (see docs/dynamic_import.md). An action whose params
|
|
31243
|
+
* come from the address is never prefetched — a prefetch has no address.
|
|
31244
|
+
* @param {object} [options]
|
|
31245
|
+
* @param {boolean} [options.prefetch=true] - `false` keeps a param-less action
|
|
31246
|
+
* from being prerun on intent, when the read is not worth a hover.
|
|
31247
|
+
*/
|
|
31192
31248
|
const routeAction = (
|
|
31193
31249
|
routeOrRoutes,
|
|
31194
31250
|
action,
|
|
31195
|
-
paramsEffect
|
|
31196
|
-
options = {},
|
|
31251
|
+
paramsEffect,
|
|
31252
|
+
{ prefetch = true, ...options } = {},
|
|
31197
31253
|
) => {
|
|
31198
|
-
|
|
31199
|
-
|
|
31200
|
-
|
|
31254
|
+
if (typeof action === "function") {
|
|
31255
|
+
action = createAction(action);
|
|
31256
|
+
}
|
|
31257
|
+
const routes = Array.isArray(routeOrRoutes) ? routeOrRoutes : [routeOrRoutes];
|
|
31258
|
+
const routeMatchingSignal =
|
|
31259
|
+
routes.length === 1
|
|
31260
|
+
? routes[0].matchingSignal
|
|
31261
|
+
: anyMatchingRouteSignal(routes);
|
|
31262
|
+
const readParams = paramsEffect || (() => true);
|
|
31201
31263
|
const actionBoundToRoute = actionRunEffect(
|
|
31202
31264
|
action,
|
|
31203
31265
|
() => {
|
|
31204
31266
|
const matching = routeMatchingSignal.value;
|
|
31205
|
-
const params =
|
|
31267
|
+
const params = readParams();
|
|
31206
31268
|
if (!matching) {
|
|
31207
31269
|
return null;
|
|
31208
31270
|
}
|
|
@@ -31210,10 +31272,37 @@ const routeAction = (
|
|
|
31210
31272
|
},
|
|
31211
31273
|
options,
|
|
31212
31274
|
);
|
|
31213
|
-
|
|
31275
|
+
if (!paramsEffect && prefetch) {
|
|
31276
|
+
for (const route of routes) {
|
|
31277
|
+
registerRoutePreload(route, () => {
|
|
31278
|
+
prefetchParamless(action);
|
|
31279
|
+
});
|
|
31280
|
+
}
|
|
31281
|
+
}
|
|
31214
31282
|
return actionBoundToRoute;
|
|
31215
31283
|
};
|
|
31216
31284
|
|
|
31285
|
+
// The instance the effect above runs on the match is the one bound to `true`
|
|
31286
|
+
// (the default params), so a prerun here is what the arrival promotes to a
|
|
31287
|
+
// run. A prefetch that fails is forgotten rather than reported: nothing on
|
|
31288
|
+
// screen asked for it, and the arrival asks again and shows its own failure.
|
|
31289
|
+
const prefetchParamless = (action) => {
|
|
31290
|
+
const instance = action.bindParams(true);
|
|
31291
|
+
const forget = () => {
|
|
31292
|
+
instance.reset({ reason: "prefetch failed" });
|
|
31293
|
+
};
|
|
31294
|
+
let result;
|
|
31295
|
+
try {
|
|
31296
|
+
result = instance.prerun({ reason: "intent" });
|
|
31297
|
+
} catch {
|
|
31298
|
+
forget();
|
|
31299
|
+
return;
|
|
31300
|
+
}
|
|
31301
|
+
if (result && typeof result.catch === "function") {
|
|
31302
|
+
result.catch(forget);
|
|
31303
|
+
}
|
|
31304
|
+
};
|
|
31305
|
+
|
|
31217
31306
|
// I delibrately prefer the term "any" and avoid "some" so dev are not tempted to think
|
|
31218
31307
|
// "well I could just use array.some" and bypass this helper entirely, which would be incorrect:
|
|
31219
31308
|
// This helper does return if some/any route is matching but ensure all route matching signals are read (subscribed to)
|
|
@@ -41199,6 +41288,34 @@ const Icon = ({
|
|
|
41199
41288
|
});
|
|
41200
41289
|
};
|
|
41201
41290
|
|
|
41291
|
+
/**
|
|
41292
|
+
* Where a link leads, asked for when the pointer or the focus arrives on it:
|
|
41293
|
+
* the moment the user signals a destination, before the press. Only what the
|
|
41294
|
+
* route's actions ask without the address is fetched (see route.preload), so
|
|
41295
|
+
* a link whose address is not the final one — an id still to be chosen —
|
|
41296
|
+
* loses nothing by asking.
|
|
41297
|
+
*/
|
|
41298
|
+
const usePreloadOnIntent = (ref, href, prefetch = true) => {
|
|
41299
|
+
useEffect(() => {
|
|
41300
|
+
if (!prefetch || !href) {
|
|
41301
|
+
return undefined;
|
|
41302
|
+
}
|
|
41303
|
+
const element = ref.current;
|
|
41304
|
+
if (!element) {
|
|
41305
|
+
return undefined;
|
|
41306
|
+
}
|
|
41307
|
+
const preload = () => {
|
|
41308
|
+
preloadUrl(href);
|
|
41309
|
+
};
|
|
41310
|
+
element.addEventListener("pointerenter", preload);
|
|
41311
|
+
element.addEventListener("focusin", preload);
|
|
41312
|
+
return () => {
|
|
41313
|
+
element.removeEventListener("pointerenter", preload);
|
|
41314
|
+
element.removeEventListener("focusin", preload);
|
|
41315
|
+
};
|
|
41316
|
+
}, [ref, href, prefetch]);
|
|
41317
|
+
};
|
|
41318
|
+
|
|
41202
41319
|
/**
|
|
41203
41320
|
* Hook that reactively checks if a URL is visited.
|
|
41204
41321
|
* Re-renders when the visited URL set changes.
|
|
@@ -41708,6 +41825,12 @@ Object.assign(PSEUDO_CLASSES, {
|
|
|
41708
41825
|
* way there changes. What a row of tabs wants — the neighbour is a lateral
|
|
41709
41826
|
* move, not a step deeper, so the whole row weighs one entry and the back
|
|
41710
41827
|
* button leaves by where the reader came in.
|
|
41828
|
+
* @param {boolean} [props.prefetch=true] Fetch the code of where this leads when the
|
|
41829
|
+
* pointer or the focus arrives, ahead of the press (see
|
|
41830
|
+
* docs/dynamic_import.md): the route actions that ask nothing of the
|
|
41831
|
+
* address — a page's code, a read without params — are prerun; one keyed by
|
|
41832
|
+
* a param waits for the arrival. `false` for a destination not worth
|
|
41833
|
+
* fetching on a hover.
|
|
41711
41834
|
* @param {string} [props.command] - What the press asks of a control around
|
|
41712
41835
|
* the link — `"--navi-close"` on a link that leaves the sheet it is in.
|
|
41713
41836
|
* Triggered on the press, before the navigation.
|
|
@@ -41813,11 +41936,13 @@ const LinkPlain = props => {
|
|
|
41813
41936
|
routeTransition,
|
|
41814
41937
|
pressableDuringRouteTransition,
|
|
41815
41938
|
replace,
|
|
41939
|
+
prefetch = true,
|
|
41816
41940
|
children
|
|
41817
41941
|
} = props;
|
|
41818
41942
|
if (anchor && !props.id) {
|
|
41819
41943
|
props.id = href.slice(1);
|
|
41820
41944
|
}
|
|
41945
|
+
usePreloadOnIntent(props.ref, href, prefetch);
|
|
41821
41946
|
const selectionContext = useContext(SelectionContext);
|
|
41822
41947
|
const nav = useContext(NavContext);
|
|
41823
41948
|
const visited = useIsVisited(href);
|
|
@@ -41985,6 +42110,7 @@ const LinkPlain = props => {
|
|
|
41985
42110
|
routeTransition: undefined,
|
|
41986
42111
|
pressableDuringRouteTransition: undefined,
|
|
41987
42112
|
replace: undefined,
|
|
42113
|
+
prefetch: undefined,
|
|
41988
42114
|
"data-navi-route-transition-request": routeTransitionRequest,
|
|
41989
42115
|
...(pressableDuringRouteTransition ? {
|
|
41990
42116
|
[PRESSABLE_ATTRIBUTE]: ""
|
|
@@ -47910,6 +48036,7 @@ const ButtonUI = props => {
|
|
|
47910
48036
|
rel,
|
|
47911
48037
|
replace,
|
|
47912
48038
|
pressableDuringRouteTransition,
|
|
48039
|
+
prefetch = true,
|
|
47913
48040
|
// visual
|
|
47914
48041
|
variant,
|
|
47915
48042
|
pressEffect,
|
|
@@ -47968,6 +48095,7 @@ const ButtonUI = props => {
|
|
|
47968
48095
|
[PRESSABLE_ATTRIBUTE]: ""
|
|
47969
48096
|
} : null;
|
|
47970
48097
|
const visualSelector = ".navi_button_content";
|
|
48098
|
+
usePreloadOnIntent(ref, href, prefetch);
|
|
47971
48099
|
useAccentColorAttributes(ref, null, {
|
|
47972
48100
|
elementSelector: visualSelector
|
|
47973
48101
|
});
|
|
@@ -47997,8 +48125,10 @@ const ButtonUI = props => {
|
|
|
47997
48125
|
...replaceRequest,
|
|
47998
48126
|
pressableDuringRouteTransition: undefined,
|
|
47999
48127
|
...pressableRequest,
|
|
48128
|
+
prefetch: undefined
|
|
48000
48129
|
// Respond with the JS prop value directly so callers (e.g. resolveCommandValue)
|
|
48001
48130
|
// get the original type instead of the DOM-coerced string (e.g. "[object Object]").
|
|
48131
|
+
,
|
|
48002
48132
|
onnavi_get_value: e => {
|
|
48003
48133
|
e.detail.respondWith(props.value);
|
|
48004
48134
|
},
|
|
@@ -48227,6 +48357,12 @@ const COMMAND_DEFAULT_PROPS_FACTORIES = {
|
|
|
48227
48357
|
* `--navi-nav-to` command — by TAKING THE PLACE of the current history entry
|
|
48228
48358
|
* rather than stacking on it: what `<Link replace>` says, for a press drawn
|
|
48229
48359
|
* as a button.
|
|
48360
|
+
* @param {boolean} [prefetch=true] Fetch the code of where this leads when the
|
|
48361
|
+
* pointer or the focus arrives, ahead of the press (see
|
|
48362
|
+
* docs/dynamic_import.md): the route actions that ask nothing of the
|
|
48363
|
+
* address — a page's code, a read without params — are prerun; one keyed by
|
|
48364
|
+
* a param waits for the arrival. `false` for a destination not worth
|
|
48365
|
+
* fetching on a hover.
|
|
48230
48366
|
* @param {boolean} [pressableDuringRouteTransition] Keep answering presses
|
|
48231
48367
|
* while a route transition plays: what a movement photographs goes deaf to
|
|
48232
48368
|
* the pointer for its whole length, and the door that opened the page — a
|
|
@@ -83743,5 +83879,5 @@ const UserSvg = () => jsx("svg", {
|
|
|
83743
83879
|
})
|
|
83744
83880
|
});
|
|
83745
83881
|
|
|
83746
|
-
export { ActionRenderer, ActiveKeyboardShortcuts, Address, Badge, BadgeCount, BadgeList, Binder, Box, Button, ButtonCopyToClipboard, CalloutStatusIcon, Caption, CardLayout, CheckSvg, CheckboxGroup, CloseSvg, Code, Col, Colgroup, Color, ConstructionSvg, ControlGroup, ControlSwap, DaySpin, Details, Dialog, Editable, ErrorBoundary, ErrorBoundaryContext, ExclamationSvg, Expandable, EyeClosedSvg, EyeSvg, Field, FixedBar, Form, Group, Head, HeartSvg, HomeSvg, Icon, Image, InfoSvg, Input, InputDuration, Interpolate, Label, Link, LinkAnchorSvg, LinkBlankTargetSvg, LinkCurrentSvg, List, ListItem, ListItemGroup, ListItems, Loading, LoadingDotsSvg, LoadingIndicator, LoadingIndicatorFluid, LoadingOutline, MessageBox, Meter, Nav, NaviDebug, NumberSpin, OfflineError, Paragraph, Picker, Popover, Popup, Quantity, RadioGroup, Route, RouteTransitionArea, RouteTravel, RowNumberCol, RowNumberTableCell, SVGMaskOverlay, SearchSvg, Select, SelectableInput, SelectionContext, Separator, SettingsSvg, SidePanel, Slide, SlideContainer, Spin, SpinGroup, SplitButton, StarSvg, Step, StepList, SummaryMarker, Svg, Table, TableCell, Tbody, Text, TextBox, Textarea, TextareaCharCount, Thead, Time, TimeRange, TimeRangeSpin, TimeRangeWheel, TimeSpin, TimeWheel, Title, Tr, UITransition, Unit, UserSvg, ViewportLayout, Wheel, WheelGroup, WheelItem, actionRunEffect, anyMatchingRouteSignal, applySearch, arraySignalMembership, canNavBackSignal, canNavForwardSignal, coarsePointerSignal, compareTwoJsValues, constraintFromValidityRule, createAction, createAvailableConstraint, createRequestCanceller, createSearch, createSelectionKeyboardShortcuts, createSlot, defineInteractionDetector, defineRouteDefaultTransition, defineRouteTransition, detectHorizontalOverflow, dispatchRequestSetUIState, enableDebugActions, enableDebugOnDocumentLoading, ensureDocumentStartViewTransition, errorIsDisplayed, filterTableSelection, getNowHours, getNowHoursRoundedToStep, isCellSelected, isColumnSelected, isOfflineError, isRowSelected, isScrolling, isToday, languagesSignal, localStorageSignal, markAsOutsideTextFlow, markErrorAsDisplayedBy, moveArrayItemByIndex, moveFocusTo, navBack, navForward, navIntegratedVia, navTo, naviI18n, openCallout, rawUrlPart, registerGlobalConstraint, reload, rerunActions, resource, route, routeAction, scrollActivitySignal, setBaseUrl, setNetworkPolicy, setPreferredLanguage, setSupportedLanguages, setUrlTargetOptions, setupRoutes, smallTouchScreenSignal, stateSignal, stopLoad, stringifyTableSelectionValue, swapArrayItemByIndex, syncOwnedResourceToSignals, syncResourceToSignals, triggerNaviCommand, updateActions, useActionStatus, useArraySignalMembership, useAsyncData, useCalloutElement, useCalloutRequestClose, useCanNavBack, useCanNavForward, useCancelPrevious, useCellGridFromRows, useConstraintValidityState, useDependenciesDiff, useDisplayedLayoutEffect, useDocumentResource, useDocumentState, useDocumentUrl, useEditionController, useFocusGroup, useInputGroup, useKeyboardShortcuts, useNavState, useNetworkPolicyReason, useOrderedColumns, usePopupMode, useRouteStatus, useSearchText, useSelectableElement, useSelectionController, useSignalSync, useSlideContainer, useSlideValue, useStateArray, useTitleLevel, useTransitionCover, useUrlSearchParam, useUrlTargetId, valueInLocalStorage, windowWidthSignal };
|
|
83882
|
+
export { ActionRenderer, ActiveKeyboardShortcuts, Address, Badge, BadgeCount, BadgeList, Binder, Box, Button, ButtonCopyToClipboard, CalloutStatusIcon, Caption, CardLayout, CheckSvg, CheckboxGroup, CloseSvg, Code, Col, Colgroup, Color, ConstructionSvg, ControlGroup, ControlSwap, DaySpin, Details, Dialog, Editable, ErrorBoundary, ErrorBoundaryContext, ExclamationSvg, Expandable, EyeClosedSvg, EyeSvg, Field, FixedBar, Form, Group, Head, HeartSvg, HomeSvg, Icon, Image, InfoSvg, Input, InputDuration, Interpolate, Label, Link, LinkAnchorSvg, LinkBlankTargetSvg, LinkCurrentSvg, List, ListItem, ListItemGroup, ListItems, Loading, LoadingDotsSvg, LoadingIndicator, LoadingIndicatorFluid, LoadingOutline, MessageBox, Meter, Nav, NaviDebug, NumberSpin, OfflineError, Paragraph, Picker, Popover, Popup, Quantity, RadioGroup, Route, RouteTransitionArea, RouteTravel, RowNumberCol, RowNumberTableCell, SVGMaskOverlay, SearchSvg, Select, SelectableInput, SelectionContext, Separator, SettingsSvg, SidePanel, Slide, SlideContainer, Spin, SpinGroup, SplitButton, StarSvg, Step, StepList, SummaryMarker, Svg, Table, TableCell, Tbody, Text, TextBox, Textarea, TextareaCharCount, Thead, Time, TimeRange, TimeRangeSpin, TimeRangeWheel, TimeSpin, TimeWheel, Title, Tr, UITransition, Unit, UserSvg, ViewportLayout, Wheel, WheelGroup, WheelItem, actionRunEffect, anyMatchingRouteSignal, applySearch, arraySignalMembership, canNavBackSignal, canNavForwardSignal, coarsePointerSignal, compareTwoJsValues, constraintFromValidityRule, createAction, createAvailableConstraint, createRequestCanceller, createSearch, createSelectionKeyboardShortcuts, createSlot, defineInteractionDetector, defineRouteDefaultTransition, defineRouteTransition, detectHorizontalOverflow, dispatchRequestSetUIState, enableDebugActions, enableDebugOnDocumentLoading, ensureDocumentStartViewTransition, errorIsDisplayed, filterTableSelection, getNowHours, getNowHoursRoundedToStep, isCellSelected, isColumnSelected, isOfflineError, isRowSelected, isScrolling, isToday, languagesSignal, localStorageSignal, markAsOutsideTextFlow, markErrorAsDisplayedBy, moveArrayItemByIndex, moveFocusTo, navBack, navForward, navIntegratedVia, navTo, naviI18n, openCallout, preloadUrl, rawUrlPart, registerGlobalConstraint, reload, rerunActions, resource, route, routeAction, scrollActivitySignal, setBaseUrl, setNetworkPolicy, setPreferredLanguage, setSupportedLanguages, setUrlTargetOptions, setupRoutes, smallTouchScreenSignal, stateSignal, stopLoad, stringifyTableSelectionValue, swapArrayItemByIndex, syncOwnedResourceToSignals, syncResourceToSignals, triggerNaviCommand, updateActions, useActionStatus, useArraySignalMembership, useAsyncData, useCalloutElement, useCalloutRequestClose, useCanNavBack, useCanNavForward, useCancelPrevious, useCellGridFromRows, useConstraintValidityState, useDependenciesDiff, useDisplayedLayoutEffect, useDocumentResource, useDocumentState, useDocumentUrl, useEditionController, useFocusGroup, useInputGroup, useKeyboardShortcuts, useNavState, useNetworkPolicyReason, useOrderedColumns, usePopupMode, useRouteStatus, useSearchText, useSelectableElement, useSelectionController, useSignalSync, useSlideContainer, useSlideValue, useStateArray, useTitleLevel, useTransitionCover, useUrlSearchParam, useUrlTargetId, valueInLocalStorage, windowWidthSignal };
|
|
83747
83883
|
//# sourceMappingURL=jsenv_navi.js.map
|