@jsenv/navi 0.29.83 → 0.29.84
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/jsenv_navi.js +184 -29
- package/dist/jsenv_navi.js.map +11 -6
- package/docs/AI_INSTRUCTIONS.md +3 -1
- package/docs/control_object.md +83 -0
- package/docs/control_value.md +13 -0
- package/docs/navigation.md +39 -3
- package/package.json +1 -1
package/dist/jsenv_navi.js
CHANGED
|
@@ -22656,6 +22656,69 @@ const scrollTo = ({ x, y }) => {
|
|
|
22656
22656
|
const [publishBeforeRouting, observeBeforeRouting] = createPubSub();
|
|
22657
22657
|
const [publishAfterRouting, observeAfterRouting] = createPubSub();
|
|
22658
22658
|
|
|
22659
|
+
/**
|
|
22660
|
+
* Is there an entry of THIS document behind the current one? And ahead of it?
|
|
22661
|
+
*
|
|
22662
|
+
* A back arrow drawn inside an app promises to give back the screen it came
|
|
22663
|
+
* from — never the page the reader was on before the app. A url opened cold
|
|
22664
|
+
* (a shared link, a bookmark, a notification) has someone else's page under
|
|
22665
|
+
* it, and `window.history.length` cannot tell the two apart: it counts the
|
|
22666
|
+
* whole tab.
|
|
22667
|
+
*
|
|
22668
|
+
* So the count is kept here, and written into the state of each entry as it is
|
|
22669
|
+
* created, so it survives a reload in the middle of the stack. It cannot be
|
|
22670
|
+
* read back from an entry alone: a replaced entry inherits the state of the
|
|
22671
|
+
* one it takes the place of, so an entry's state does not say how it arrived.
|
|
22672
|
+
* Only the navigation being applied says that, which is why the integrations
|
|
22673
|
+
* (via_history.js, via_navigation.js) hand each navigation over here as they
|
|
22674
|
+
* apply it — the one place no push and no replace can escape.
|
|
22675
|
+
*/
|
|
22676
|
+
|
|
22677
|
+
|
|
22678
|
+
const NAV_DEPTH_STATE_KEY = "jsenv_nav_depth";
|
|
22679
|
+
|
|
22680
|
+
const canNavBackSignal = signal(false);
|
|
22681
|
+
const useCanNavBack = () => {
|
|
22682
|
+
return canNavBackSignal.value;
|
|
22683
|
+
};
|
|
22684
|
+
|
|
22685
|
+
const canNavForwardSignal = signal(false);
|
|
22686
|
+
const useCanNavForward = () => {
|
|
22687
|
+
return canNavForwardSignal.value;
|
|
22688
|
+
};
|
|
22689
|
+
|
|
22690
|
+
// How many entries of this document stand under the current one, and how high
|
|
22691
|
+
// the stack goes above it. Both are unknown for entries this document never
|
|
22692
|
+
// created (a fragment navigation makes its own, and the browser stores no
|
|
22693
|
+
// state on it): those leave the count as it is, which under-reports rather
|
|
22694
|
+
// than promising a screen that is not there.
|
|
22695
|
+
let navDepth = 0;
|
|
22696
|
+
let navDepthMax = 0;
|
|
22697
|
+
|
|
22698
|
+
const getNavDepth = () => navDepth;
|
|
22699
|
+
|
|
22700
|
+
const applyNavigationToNavDepth = (navigationType, state) => {
|
|
22701
|
+
if (navigationType === "push") {
|
|
22702
|
+
navDepth++;
|
|
22703
|
+
// A push cuts whatever stood ahead.
|
|
22704
|
+
navDepthMax = navDepth;
|
|
22705
|
+
} else if (navigationType === "replace") ; else {
|
|
22706
|
+
// load, reload, traverse: the entry itself says where it stands.
|
|
22707
|
+
const depthInState =
|
|
22708
|
+
state && typeof state[NAV_DEPTH_STATE_KEY] === "number"
|
|
22709
|
+
? state[NAV_DEPTH_STATE_KEY]
|
|
22710
|
+
: undefined;
|
|
22711
|
+
if (depthInState !== undefined) {
|
|
22712
|
+
navDepth = depthInState;
|
|
22713
|
+
if (navDepth > navDepthMax) {
|
|
22714
|
+
navDepthMax = navDepth;
|
|
22715
|
+
}
|
|
22716
|
+
}
|
|
22717
|
+
}
|
|
22718
|
+
canNavBackSignal.value = navDepth > 0;
|
|
22719
|
+
canNavForwardSignal.value = navDepth < navDepthMax;
|
|
22720
|
+
};
|
|
22721
|
+
|
|
22659
22722
|
/*
|
|
22660
22723
|
* A press aims at a place; it does not always go one step deeper. A row of tabs
|
|
22661
22724
|
* is a lateral move — the neighbour is one finger away — so the whole row should
|
|
@@ -22815,6 +22878,11 @@ const setupBrowserIntegrationViaHistory = ({
|
|
|
22815
22878
|
state,
|
|
22816
22879
|
} = options;
|
|
22817
22880
|
|
|
22881
|
+
// Where the entry being reached stands in this document's own stack —
|
|
22882
|
+
// decided before the state that carries it is built (see
|
|
22883
|
+
// document_back_and_forward.js).
|
|
22884
|
+
applyNavigationToNavDepth(navigationType, state);
|
|
22885
|
+
|
|
22818
22886
|
if (navigationType === "push" || navigationType === "replace") {
|
|
22819
22887
|
markUrlAsVisited(url);
|
|
22820
22888
|
// undefined → inherit current state (link click, neutral navigation)
|
|
@@ -22824,6 +22892,7 @@ const setupBrowserIntegrationViaHistory = ({
|
|
|
22824
22892
|
let effectiveState;
|
|
22825
22893
|
const sharedState = {
|
|
22826
22894
|
jsenv_visited_urls: Array.from(visitedUrlSet),
|
|
22895
|
+
[NAV_DEPTH_STATE_KEY]: getNavDepth(),
|
|
22827
22896
|
};
|
|
22828
22897
|
if (state === undefined) {
|
|
22829
22898
|
effectiveState = {
|
|
@@ -23026,8 +23095,18 @@ const setupBrowserIntegrationViaHistory = ({
|
|
|
23026
23095
|
});
|
|
23027
23096
|
};
|
|
23028
23097
|
|
|
23029
|
-
const navBack = () => {
|
|
23030
|
-
|
|
23098
|
+
const navBack = ({ fallback } = {}) => {
|
|
23099
|
+
if (canNavBackSignal.peek()) {
|
|
23100
|
+
window.history.back();
|
|
23101
|
+
return;
|
|
23102
|
+
}
|
|
23103
|
+
if (fallback === undefined) {
|
|
23104
|
+
return;
|
|
23105
|
+
}
|
|
23106
|
+
// Replace, not push: pushing the fallback would put the screen just left
|
|
23107
|
+
// one press ahead, and the device's own back button would walk straight
|
|
23108
|
+
// back into it — a loop with no way out of the app.
|
|
23109
|
+
navTo(fallback, { replace: true });
|
|
23031
23110
|
};
|
|
23032
23111
|
|
|
23033
23112
|
const navForward = () => {
|
|
@@ -23238,6 +23317,21 @@ const stopLoad = (reason = "stopLoad() called") => {
|
|
|
23238
23317
|
}
|
|
23239
23318
|
};
|
|
23240
23319
|
const reload = browserIntegration.reload;
|
|
23320
|
+
/**
|
|
23321
|
+
* Go back to the screen this document came from.
|
|
23322
|
+
*
|
|
23323
|
+
* Only ever within this document: at the bottom of the stack (a url opened
|
|
23324
|
+
* cold — a shared link, a bookmark, a notification), the entry underneath
|
|
23325
|
+
* belongs to whoever sent the reader here, and going back there would take
|
|
23326
|
+
* them out of the app. Ask `canNavBackSignal`/`useCanNavBack()` to know which
|
|
23327
|
+
* of the two cases the arrow is in.
|
|
23328
|
+
*
|
|
23329
|
+
* @param {object} [options]
|
|
23330
|
+
* @param {string} [options.fallback]
|
|
23331
|
+
* Where to land when there is nothing of this document behind. It takes the
|
|
23332
|
+
* place of the current entry rather than stacking on it. Without it, a
|
|
23333
|
+
* navBack() with nowhere to go does nothing.
|
|
23334
|
+
*/
|
|
23241
23335
|
const navBack = browserIntegration.navBack;
|
|
23242
23336
|
const navForward = browserIntegration.navForward;
|
|
23243
23337
|
const isVisited = browserIntegration.isVisited;
|
|
@@ -24928,6 +25022,20 @@ const useUIStateController = (
|
|
|
24928
25022
|
})
|
|
24929
25023
|
: ownUIStateSignal;
|
|
24930
25024
|
|
|
25025
|
+
// The two-way half of a bound `signal` prop: setting it re-renders and
|
|
25026
|
+
// re-syncs via state_prop_change, but with the same value → guarded as a
|
|
25027
|
+
// no-op, so no loop. For a checkbox/radio the signal holds the boolean
|
|
25028
|
+
// checked state.
|
|
25029
|
+
const writeBoundSignal = (uiState) => {
|
|
25030
|
+
const boundSignal = s.controlInfo?.signal;
|
|
25031
|
+
if (!boundSignal) {
|
|
25032
|
+
return;
|
|
25033
|
+
}
|
|
25034
|
+
boundSignal.value = s.controlInfo.signalHoldsChecked
|
|
25035
|
+
? uiState !== undefined
|
|
25036
|
+
: uiState;
|
|
25037
|
+
};
|
|
25038
|
+
|
|
24931
25039
|
const controller = {
|
|
24932
25040
|
controlType,
|
|
24933
25041
|
parentUIStateController,
|
|
@@ -24998,16 +25106,7 @@ const useUIStateController = (
|
|
|
24998
25106
|
}
|
|
24999
25107
|
// Trigger uiAction/command side effects without changing UI state.
|
|
25000
25108
|
const currentUIState = controller.uiState;
|
|
25001
|
-
|
|
25002
|
-
// prop). Setting it re-renders and re-syncs via state_prop_change, but
|
|
25003
|
-
// with the same value → guarded as a no-op, so no loop. For a
|
|
25004
|
-
// checkbox/radio the signal holds the boolean checked state.
|
|
25005
|
-
const boundSignal = s.controlInfo?.signal;
|
|
25006
|
-
if (boundSignal) {
|
|
25007
|
-
boundSignal.value = s.controlInfo.signalHoldsChecked
|
|
25008
|
-
? currentUIState !== undefined
|
|
25009
|
-
: currentUIState;
|
|
25010
|
-
}
|
|
25109
|
+
writeBoundSignal(currentUIState);
|
|
25011
25110
|
s.uiActionInternal?.(currentUIState, e);
|
|
25012
25111
|
if (s.uiAction) {
|
|
25013
25112
|
debugUIState(`calling uiAction for ${controlType}`, currentUIState);
|
|
@@ -25167,6 +25266,11 @@ const useUIStateController = (
|
|
|
25167
25266
|
}
|
|
25168
25267
|
}
|
|
25169
25268
|
if (isInternalEvent(e)) {
|
|
25269
|
+
if (isPropagateDownEvent(e)) {
|
|
25270
|
+
// A bound signal mirrors what the control holds, and what it
|
|
25271
|
+
// holds just changed — see isPropagateDownEvent.
|
|
25272
|
+
writeBoundSignal(newUIState);
|
|
25273
|
+
}
|
|
25170
25274
|
if (e.type === "facade_child_mount_sync") {
|
|
25171
25275
|
const wasEmptyString =
|
|
25172
25276
|
currentUIState === "" && newUIState === undefined;
|
|
@@ -25827,12 +25931,12 @@ const useUIGroupStateController = (
|
|
|
25827
25931
|
// makes from its own setUIState (see useUIStateController's boundSignal),
|
|
25828
25932
|
// for a group whose value is its children's put together.
|
|
25829
25933
|
//
|
|
25830
|
-
// Called from
|
|
25831
|
-
// the change is notified outward, syncInternalState when
|
|
25832
|
-
// brings itself up to date
|
|
25833
|
-
//
|
|
25834
|
-
//
|
|
25835
|
-
//
|
|
25934
|
+
// Called from every path where what the group holds really moves:
|
|
25935
|
+
// applyState when the change is notified outward, syncInternalState when
|
|
25936
|
+
// the group only brings itself up to date, and the value arriving from
|
|
25937
|
+
// above (see isPropagateDownEvent). Which one it is gets decided at each
|
|
25938
|
+
// call site rather than guessed at here — the initial push and the
|
|
25939
|
+
// mount/unmount syncs leave the signal alone.
|
|
25836
25940
|
const writeBoundSignal = (newUIState) => {
|
|
25837
25941
|
const boundSignal = s.props?.signal;
|
|
25838
25942
|
if (boundSignal) {
|
|
@@ -25935,6 +26039,9 @@ const useUIGroupStateController = (
|
|
|
25935
26039
|
return;
|
|
25936
26040
|
}
|
|
25937
26041
|
applyState(groupUIState, e, { internalBehavior: true });
|
|
26042
|
+
if (isPropagateDownEvent(e)) {
|
|
26043
|
+
writeBoundSignal(groupUIState);
|
|
26044
|
+
}
|
|
25938
26045
|
},
|
|
25939
26046
|
syncInternalState: (newUIState) => {
|
|
25940
26047
|
const currentUIState = controller.uiState;
|
|
@@ -26537,6 +26644,27 @@ const isInternalEvent = (e) => {
|
|
|
26537
26644
|
return INTERNAL_EVENT_SET.has(e.type);
|
|
26538
26645
|
};
|
|
26539
26646
|
|
|
26647
|
+
/**
|
|
26648
|
+
* A value handed DOWN to a control by whoever owns it: a picker filling its
|
|
26649
|
+
* popup (on open, and again when Escape puts back what it held), a group
|
|
26650
|
+
* placing its children, a reset cascading through them.
|
|
26651
|
+
*
|
|
26652
|
+
* Internal, so no reaction fires — nobody acted. But the control's state really
|
|
26653
|
+
* did move, and a bound `signal` is that state's mirror rather than a reaction
|
|
26654
|
+
* to it: leaving it behind makes the app and the control disagree about what is
|
|
26655
|
+
* on screen, which is how a popup reopens on the tab the user cancelled out of.
|
|
26656
|
+
* The way UP is deliberately not part of this: a picker's own signal is written
|
|
26657
|
+
* when the picker commits, not while its popup is being played with.
|
|
26658
|
+
*/
|
|
26659
|
+
const PROPAGATE_DOWN_EVENT_SET = new Set([
|
|
26660
|
+
"propagate_down_set_ui_state",
|
|
26661
|
+
"propagate_down_reset_ui_state",
|
|
26662
|
+
"propagate_down_clear_ui_state",
|
|
26663
|
+
]);
|
|
26664
|
+
const isPropagateDownEvent = (e) => {
|
|
26665
|
+
return PROPAGATE_DOWN_EVENT_SET.has(e.type);
|
|
26666
|
+
};
|
|
26667
|
+
|
|
26540
26668
|
/**
|
|
26541
26669
|
* The synthetic "input" event is how the new state reaches the outside world
|
|
26542
26670
|
* (`uiAction` is called from the input handler it triggers). It carries what
|
|
@@ -52100,8 +52228,8 @@ const causeOfEvent = event => {
|
|
|
52100
52228
|
const readArea = slideElement => slideElement.getAttribute("data-slide-area") || slideElement.id || "";
|
|
52101
52229
|
|
|
52102
52230
|
/**
|
|
52103
|
-
* The slide shown can be driven from outside (`
|
|
52104
|
-
* left to the container, which then answers the
|
|
52231
|
+
* The slide shown can be driven from outside (a `signal`, or `current` +
|
|
52232
|
+
* `onCurrentChange`) or left to the container, which then answers the
|
|
52105
52233
|
* --navi-left/--navi-right/--navi-up/--navi-down commands sent from anything
|
|
52106
52234
|
* inside it.
|
|
52107
52235
|
*
|
|
@@ -52134,6 +52262,15 @@ const readArea = slideElement => slideElement.getAttribute("data-slide-area") ||
|
|
|
52134
52262
|
* written is simply not there.
|
|
52135
52263
|
* @param {string} [props.current] - area (or id) of the slide being shown; omit
|
|
52136
52264
|
* to keep it here and drive it by command.
|
|
52265
|
+
* @param {import("@preact/signals").Signal<string>} [props.signal] - the same
|
|
52266
|
+
* thing said the way every navi control says it: the container shows the area
|
|
52267
|
+
* the signal holds, and writes into it the area it travels to. One binding
|
|
52268
|
+
* instead of `current` + `onCurrentChange`, and the state stays where the app
|
|
52269
|
+
* put it — which is what lets something else read where the slides are (a
|
|
52270
|
+
* field carrying the current tab into a form, see
|
|
52271
|
+
* docs/control_object.md#a-settings-sheet) or move them by writing it.
|
|
52272
|
+
* Excludes `current`; `onCurrentChange` still fires, for the `cause` and for
|
|
52273
|
+
* the right to refuse.
|
|
52137
52274
|
* @param {string} [props.defaultCurrent] - which slide to open on, when the
|
|
52138
52275
|
* travel is left to the container. Mount-only, like every other `default*`:
|
|
52139
52276
|
* it says where one starts, not where one is — say `current` for that.
|
|
@@ -52205,6 +52342,7 @@ const readArea = slideElement => slideElement.getAttribute("data-slide-area") ||
|
|
|
52205
52342
|
const SlideContainer = ({
|
|
52206
52343
|
layout = "row",
|
|
52207
52344
|
current: currentProp,
|
|
52345
|
+
signal: currentSignal,
|
|
52208
52346
|
defaultCurrent,
|
|
52209
52347
|
onCurrentChange,
|
|
52210
52348
|
commit = "now",
|
|
@@ -52303,7 +52441,8 @@ const SlideContainer = ({
|
|
|
52303
52441
|
// draw in CSS alone, at the pace of the travel and under the finger, with
|
|
52304
52442
|
// nothing measured per frame.
|
|
52305
52443
|
const followerElementsRef = useRef([]);
|
|
52306
|
-
const
|
|
52444
|
+
const currentFromCaller = currentSignal ? currentSignal.value : currentProp;
|
|
52445
|
+
const current = rollingArea ?? provisionalArea ?? currentFromCaller ?? currentAreaState;
|
|
52307
52446
|
const vertical = layout === "column";
|
|
52308
52447
|
// What the map has, and what each way of asking is allowed to use of it.
|
|
52309
52448
|
const mapAxes = travelAxesOf(layout);
|
|
@@ -52338,11 +52477,11 @@ const SlideContainer = ({
|
|
|
52338
52477
|
if (provisionalArea === null) {
|
|
52339
52478
|
return;
|
|
52340
52479
|
}
|
|
52341
|
-
const heldOutside =
|
|
52480
|
+
const heldOutside = currentFromCaller ?? currentAreaState;
|
|
52342
52481
|
if (heldOutside === provisionalArea) {
|
|
52343
52482
|
setProvisionalArea(null);
|
|
52344
52483
|
}
|
|
52345
|
-
}, [provisionalArea,
|
|
52484
|
+
}, [provisionalArea, currentFromCaller, currentAreaState]);
|
|
52346
52485
|
|
|
52347
52486
|
// The travel is given back as soon as the picture it must not animate has
|
|
52348
52487
|
// been painted: one frame with it off is all it takes.
|
|
@@ -52519,10 +52658,10 @@ const SlideContainer = ({
|
|
|
52519
52658
|
const commitAtRest = commitAtRestRef.current;
|
|
52520
52659
|
if (commitAtRest && commitAtRest.area === currentArea) {
|
|
52521
52660
|
commitAtRestRef.current = null;
|
|
52522
|
-
|
|
52661
|
+
tellCurrentChange(commitAtRest.area, {
|
|
52523
52662
|
cause: commitAtRest.cause,
|
|
52524
52663
|
event: commitAtRest.event
|
|
52525
|
-
}
|
|
52664
|
+
}, commitAtRest.leftArea);
|
|
52526
52665
|
}
|
|
52527
52666
|
};
|
|
52528
52667
|
|
|
@@ -52896,7 +53035,7 @@ const SlideContainer = ({
|
|
|
52896
53035
|
}
|
|
52897
53036
|
const leftArea = readArea(currentElement);
|
|
52898
53037
|
setCurrentAreaState(area);
|
|
52899
|
-
if (!onCurrentChange) {
|
|
53038
|
+
if (!onCurrentChange && !currentSignal) {
|
|
52900
53039
|
return true;
|
|
52901
53040
|
}
|
|
52902
53041
|
// What asked for this, read off the interaction rather than carried down
|
|
@@ -52920,13 +53059,26 @@ const SlideContainer = ({
|
|
|
52920
53059
|
};
|
|
52921
53060
|
return true;
|
|
52922
53061
|
}
|
|
52923
|
-
|
|
53062
|
+
tellCurrentChange(area, {
|
|
52924
53063
|
cause,
|
|
52925
53064
|
event
|
|
52926
|
-
}
|
|
53065
|
+
}, leftArea);
|
|
52927
53066
|
return true;
|
|
52928
53067
|
};
|
|
52929
53068
|
|
|
53069
|
+
// The caller learns where the container went: the bound signal is written and
|
|
53070
|
+
// `onCurrentChange` is called, in that order, so a caller reading the signal
|
|
53071
|
+
// from inside its own handler reads where it now is.
|
|
53072
|
+
const tellCurrentChange = (area, detail, leftArea) => {
|
|
53073
|
+
if (currentSignal) {
|
|
53074
|
+
currentSignal.value = area;
|
|
53075
|
+
}
|
|
53076
|
+
if (!onCurrentChange) {
|
|
53077
|
+
return;
|
|
53078
|
+
}
|
|
53079
|
+
answerCurrentChange(onCurrentChange(area, detail), leftArea);
|
|
53080
|
+
};
|
|
53081
|
+
|
|
52930
53082
|
// What a caller says back about a change it was told about: nothing, or a
|
|
52931
53083
|
// refusal. `false` refuses it — a guard that says no, a session that is gone —
|
|
52932
53084
|
// and a promise refuses it late, once whatever it had to ask has answered. A
|
|
@@ -52948,6 +53100,9 @@ const SlideContainer = ({
|
|
|
52948
53100
|
const goBackToRefusedArea = leftArea => {
|
|
52949
53101
|
setProvisionalArea(null);
|
|
52950
53102
|
setCurrentAreaState(leftArea);
|
|
53103
|
+
if (currentSignal) {
|
|
53104
|
+
currentSignal.value = leftArea;
|
|
53105
|
+
}
|
|
52951
53106
|
};
|
|
52952
53107
|
|
|
52953
53108
|
// The press kept during a roll, taken once the window rests and the travel is
|
|
@@ -75208,5 +75363,5 @@ const UserSvg = () => jsx("svg", {
|
|
|
75208
75363
|
})
|
|
75209
75364
|
});
|
|
75210
75365
|
|
|
75211
|
-
export { ActionRenderer, ActiveKeyboardShortcuts, Address, Badge, BadgeCount, BadgeList, Binder, Box, Button, ButtonCopyToClipboard, Caption, CardLayout, CheckSvg, CheckboxGroup, CloseSvg, Code, Col, Colgroup, Color, ConstructionSvg, ControlGroup, DaySpin, Details, Dialog, Editable, ErrorBoundary, ErrorBoundaryContext, ExclamationSvg, EyeClosedSvg, EyeSvg, Field, FixedBar, Form, Group, Head, HeartSvg, HomeSvg, Icon, Image, Input, InputDuration, Interpolate, Label, Link, LinkAnchorSvg, LinkBlankTargetSvg, LinkCurrentSvg, List, ListItem, ListItemGroup, ListItems, Loading, LoadingDotsSvg, LoadingIndicator, LoadingIndicatorFluid, LoadingOutline, MessageBox, Meter, Nav, NaviDebug, NumberSpin, 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, SummaryMarker, Svg, Table, TableCell, Tbody, Text, TextBox, Textarea, TextareaCharCount, Thead, Time, TimeRangeSpin, TimeSpin, Title, Tr, UITransition, Unit, UserSvg, ViewportLayout, Wheel, WheelGroup, WheelItem, actionRunEffect, anyMatchingRouteSignal, applySearch, arraySignalMembership, coarsePointerSignal, compareTwoJsValues, createAction, createAvailableConstraint, createI18n, createRequestCanceller, createSearch, createSelectionKeyboardShortcuts, createSlot, defineInteractionDetector, defineNaviConfirmPopupOptions, defineRouteDefaultTransition, defineRouteTransition, detectHorizontalOverflow, enableDebugActions, enableDebugOnDocumentLoading, ensureDocumentStartViewTransition, errorIsDisplayed, filterTableSelection, formatDatetime, formatDay, formatDayRelative, formatMonth, formatNumber, formatTime, formatTimeRelative, getNowHours, getNowHoursRoundedToStep, interpolateText, isCellSelected, isColumnSelected, isRowSelected, isScrolling, isToday, languagesSignal, localStorageSignal, markErrorAsDisplayedBy, moveArrayItemByIndex, navBack, navForward, navIntegratedVia, navTo, naviI18n, openCallout, rawUrlPart, registerGlobalConstraint, reload, rerunActions, resource, route, routeAction, scrollActivitySignal, setBaseUrl, setPreferredLanguage, setSupportedLanguages, setUrlTargetOptions, setupRoutes, smallTouchScreenSignal, stateSignal, stopLoad, stringifyTableSelectionValue, swapArrayItemByIndex, syncOwnedResourceToSignals, syncResourceToSignals, triggerNaviCommand, updateActions, useActionStatus, useArraySignalMembership, useAsyncData, useCalloutRequestClose, useCancelPrevious, useCellGridFromRows, useConstraintValidityState, useDependenciesDiff, useDisplayedLayoutEffect, useDocumentResource, useDocumentState, useDocumentUrl, useEditionController, useFocusGroup, useInputGroup, useKeyboardShortcuts, useNavState, useOrderedColumns, usePopupMode, useRouteStatus, useRunOnMount, useSearchText, useSelectableElement, useSelectionController, useSignalSync, useSlideValue, useStateArray, useTitleLevel, useUrlSearchParam, useUrlTargetId, valueInLocalStorage, windowWidthSignal };
|
|
75366
|
+
export { ActionRenderer, ActiveKeyboardShortcuts, Address, Badge, BadgeCount, BadgeList, Binder, Box, Button, ButtonCopyToClipboard, Caption, CardLayout, CheckSvg, CheckboxGroup, CloseSvg, Code, Col, Colgroup, Color, ConstructionSvg, ControlGroup, DaySpin, Details, Dialog, Editable, ErrorBoundary, ErrorBoundaryContext, ExclamationSvg, EyeClosedSvg, EyeSvg, Field, FixedBar, Form, Group, Head, HeartSvg, HomeSvg, Icon, Image, Input, InputDuration, Interpolate, Label, Link, LinkAnchorSvg, LinkBlankTargetSvg, LinkCurrentSvg, List, ListItem, ListItemGroup, ListItems, Loading, LoadingDotsSvg, LoadingIndicator, LoadingIndicatorFluid, LoadingOutline, MessageBox, Meter, Nav, NaviDebug, NumberSpin, 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, SummaryMarker, Svg, Table, TableCell, Tbody, Text, TextBox, Textarea, TextareaCharCount, Thead, Time, TimeRangeSpin, TimeSpin, Title, Tr, UITransition, Unit, UserSvg, ViewportLayout, Wheel, WheelGroup, WheelItem, actionRunEffect, anyMatchingRouteSignal, applySearch, arraySignalMembership, canNavBackSignal, canNavForwardSignal, coarsePointerSignal, compareTwoJsValues, createAction, createAvailableConstraint, createI18n, createRequestCanceller, createSearch, createSelectionKeyboardShortcuts, createSlot, defineInteractionDetector, defineNaviConfirmPopupOptions, defineRouteDefaultTransition, defineRouteTransition, detectHorizontalOverflow, enableDebugActions, enableDebugOnDocumentLoading, ensureDocumentStartViewTransition, errorIsDisplayed, filterTableSelection, formatDatetime, formatDay, formatDayRelative, formatMonth, formatNumber, formatTime, formatTimeRelative, getNowHours, getNowHoursRoundedToStep, interpolateText, isCellSelected, isColumnSelected, isRowSelected, isScrolling, isToday, languagesSignal, localStorageSignal, markErrorAsDisplayedBy, moveArrayItemByIndex, navBack, navForward, navIntegratedVia, navTo, naviI18n, openCallout, rawUrlPart, registerGlobalConstraint, reload, rerunActions, resource, route, routeAction, scrollActivitySignal, setBaseUrl, setPreferredLanguage, setSupportedLanguages, setUrlTargetOptions, setupRoutes, smallTouchScreenSignal, stateSignal, stopLoad, stringifyTableSelectionValue, swapArrayItemByIndex, syncOwnedResourceToSignals, syncResourceToSignals, triggerNaviCommand, updateActions, useActionStatus, useArraySignalMembership, useAsyncData, useCalloutRequestClose, useCanNavBack, useCanNavForward, useCancelPrevious, useCellGridFromRows, useConstraintValidityState, useDependenciesDiff, useDisplayedLayoutEffect, useDocumentResource, useDocumentState, useDocumentUrl, useEditionController, useFocusGroup, useInputGroup, useKeyboardShortcuts, useNavState, useOrderedColumns, usePopupMode, useRouteStatus, useRunOnMount, useSearchText, useSelectableElement, useSelectionController, useSignalSync, useSlideValue, useStateArray, useTitleLevel, useUrlSearchParam, useUrlTargetId, valueInLocalStorage, windowWidthSignal };
|
|
75212
75367
|
//# sourceMappingURL=jsenv_navi.js.map
|