@jsenv/navi 0.29.83 → 0.29.85

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.
@@ -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
@@ -22764,7 +22827,15 @@ const setupBrowserIntegrationViaHistory = ({
22764
22827
  };
22765
22828
 
22766
22829
  let abortController = null;
22767
- const handleRoutingTask = (url, options) => {
22830
+ const handleRoutingTask = (target, options) => {
22831
+ // Everything below this line reasons on the URL as a whole: it is compared
22832
+ // to window.location.href, looked up in the history stack, written into the
22833
+ // document url signal and parsed there. A relative target ("/", "../x")
22834
+ // would silently lose every one of those — the browser would still resolve
22835
+ // it in pushState, but nothing else here would. So it is resolved once, at
22836
+ // the single door every navigation goes through, rather than by each caller
22837
+ // (navBack's fallback in particular arrives here raw).
22838
+ const url = new URL(target, window.location.href).href;
22768
22839
  // Decided before anything is announced: an elided push IS the traversal it
22769
22840
  // becomes, and the traversal will make its own announcements when the
22770
22841
  // browser answers — a before/after cycle here would be about a navigation
@@ -22815,6 +22886,11 @@ const setupBrowserIntegrationViaHistory = ({
22815
22886
  state,
22816
22887
  } = options;
22817
22888
 
22889
+ // Where the entry being reached stands in this document's own stack —
22890
+ // decided before the state that carries it is built (see
22891
+ // document_back_and_forward.js).
22892
+ applyNavigationToNavDepth(navigationType, state);
22893
+
22818
22894
  if (navigationType === "push" || navigationType === "replace") {
22819
22895
  markUrlAsVisited(url);
22820
22896
  // undefined → inherit current state (link click, neutral navigation)
@@ -22824,6 +22900,7 @@ const setupBrowserIntegrationViaHistory = ({
22824
22900
  let effectiveState;
22825
22901
  const sharedState = {
22826
22902
  jsenv_visited_urls: Array.from(visitedUrlSet),
22903
+ [NAV_DEPTH_STATE_KEY]: getNavDepth(),
22827
22904
  };
22828
22905
  if (state === undefined) {
22829
22906
  effectiveState = {
@@ -23026,8 +23103,18 @@ const setupBrowserIntegrationViaHistory = ({
23026
23103
  });
23027
23104
  };
23028
23105
 
23029
- const navBack = () => {
23030
- window.history.back();
23106
+ const navBack = ({ fallback } = {}) => {
23107
+ if (canNavBackSignal.peek()) {
23108
+ window.history.back();
23109
+ return;
23110
+ }
23111
+ if (fallback === undefined) {
23112
+ return;
23113
+ }
23114
+ // Replace, not push: pushing the fallback would put the screen just left
23115
+ // one press ahead, and the device's own back button would walk straight
23116
+ // back into it — a loop with no way out of the app.
23117
+ navTo(fallback, { replace: true });
23031
23118
  };
23032
23119
 
23033
23120
  const navForward = () => {
@@ -23238,6 +23325,21 @@ const stopLoad = (reason = "stopLoad() called") => {
23238
23325
  }
23239
23326
  };
23240
23327
  const reload = browserIntegration.reload;
23328
+ /**
23329
+ * Go back to the screen this document came from.
23330
+ *
23331
+ * Only ever within this document: at the bottom of the stack (a url opened
23332
+ * cold — a shared link, a bookmark, a notification), the entry underneath
23333
+ * belongs to whoever sent the reader here, and going back there would take
23334
+ * them out of the app. Ask `canNavBackSignal`/`useCanNavBack()` to know which
23335
+ * of the two cases the arrow is in.
23336
+ *
23337
+ * @param {object} [options]
23338
+ * @param {string} [options.fallback]
23339
+ * Where to land when there is nothing of this document behind. It takes the
23340
+ * place of the current entry rather than stacking on it. Without it, a
23341
+ * navBack() with nowhere to go does nothing.
23342
+ */
23241
23343
  const navBack = browserIntegration.navBack;
23242
23344
  const navForward = browserIntegration.navForward;
23243
23345
  const isVisited = browserIntegration.isVisited;
@@ -24928,6 +25030,20 @@ const useUIStateController = (
24928
25030
  })
24929
25031
  : ownUIStateSignal;
24930
25032
 
25033
+ // The two-way half of a bound `signal` prop: setting it re-renders and
25034
+ // re-syncs via state_prop_change, but with the same value → guarded as a
25035
+ // no-op, so no loop. For a checkbox/radio the signal holds the boolean
25036
+ // checked state.
25037
+ const writeBoundSignal = (uiState) => {
25038
+ const boundSignal = s.controlInfo?.signal;
25039
+ if (!boundSignal) {
25040
+ return;
25041
+ }
25042
+ boundSignal.value = s.controlInfo.signalHoldsChecked
25043
+ ? uiState !== undefined
25044
+ : uiState;
25045
+ };
25046
+
24931
25047
  const controller = {
24932
25048
  controlType,
24933
25049
  parentUIStateController,
@@ -24998,16 +25114,7 @@ const useUIStateController = (
24998
25114
  }
24999
25115
  // Trigger uiAction/command side effects without changing UI state.
25000
25116
  const currentUIState = controller.uiState;
25001
- // Write the new state back into a bound signal (the two-way `signal`
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
- }
25117
+ writeBoundSignal(currentUIState);
25011
25118
  s.uiActionInternal?.(currentUIState, e);
25012
25119
  if (s.uiAction) {
25013
25120
  debugUIState(`calling uiAction for ${controlType}`, currentUIState);
@@ -25167,6 +25274,11 @@ const useUIStateController = (
25167
25274
  }
25168
25275
  }
25169
25276
  if (isInternalEvent(e)) {
25277
+ if (isPropagateDownEvent(e)) {
25278
+ // A bound signal mirrors what the control holds, and what it
25279
+ // holds just changed — see isPropagateDownEvent.
25280
+ writeBoundSignal(newUIState);
25281
+ }
25170
25282
  if (e.type === "facade_child_mount_sync") {
25171
25283
  const wasEmptyString =
25172
25284
  currentUIState === "" && newUIState === undefined;
@@ -25827,12 +25939,12 @@ const useUIGroupStateController = (
25827
25939
  // makes from its own setUIState (see useUIStateController's boundSignal),
25828
25940
  // for a group whose value is its children's put together.
25829
25941
  //
25830
- // Called from both paths a user-driven change can take applyState when
25831
- // the change is notified outward, syncInternalState when the group only
25832
- // brings itself up to date because either one can be the user
25833
- // answering. The paths that are NOT the user (a value prop pushed down,
25834
- // the initial push, mount/unmount) are excluded at each call site rather
25835
- // than guessed at here.
25942
+ // Called from every path where what the group holds really moves:
25943
+ // applyState when the change is notified outward, syncInternalState when
25944
+ // the group only brings itself up to date, and the value arriving from
25945
+ // above (see isPropagateDownEvent). Which one it is gets decided at each
25946
+ // call site rather than guessed at here the initial push and the
25947
+ // mount/unmount syncs leave the signal alone.
25836
25948
  const writeBoundSignal = (newUIState) => {
25837
25949
  const boundSignal = s.props?.signal;
25838
25950
  if (boundSignal) {
@@ -25935,6 +26047,9 @@ const useUIGroupStateController = (
25935
26047
  return;
25936
26048
  }
25937
26049
  applyState(groupUIState, e, { internalBehavior: true });
26050
+ if (isPropagateDownEvent(e)) {
26051
+ writeBoundSignal(groupUIState);
26052
+ }
25938
26053
  },
25939
26054
  syncInternalState: (newUIState) => {
25940
26055
  const currentUIState = controller.uiState;
@@ -26537,6 +26652,27 @@ const isInternalEvent = (e) => {
26537
26652
  return INTERNAL_EVENT_SET.has(e.type);
26538
26653
  };
26539
26654
 
26655
+ /**
26656
+ * A value handed DOWN to a control by whoever owns it: a picker filling its
26657
+ * popup (on open, and again when Escape puts back what it held), a group
26658
+ * placing its children, a reset cascading through them.
26659
+ *
26660
+ * Internal, so no reaction fires — nobody acted. But the control's state really
26661
+ * did move, and a bound `signal` is that state's mirror rather than a reaction
26662
+ * to it: leaving it behind makes the app and the control disagree about what is
26663
+ * on screen, which is how a popup reopens on the tab the user cancelled out of.
26664
+ * The way UP is deliberately not part of this: a picker's own signal is written
26665
+ * when the picker commits, not while its popup is being played with.
26666
+ */
26667
+ const PROPAGATE_DOWN_EVENT_SET = new Set([
26668
+ "propagate_down_set_ui_state",
26669
+ "propagate_down_reset_ui_state",
26670
+ "propagate_down_clear_ui_state",
26671
+ ]);
26672
+ const isPropagateDownEvent = (e) => {
26673
+ return PROPAGATE_DOWN_EVENT_SET.has(e.type);
26674
+ };
26675
+
26540
26676
  /**
26541
26677
  * The synthetic "input" event is how the new state reaches the outside world
26542
26678
  * (`uiAction` is called from the input handler it triggers). It carries what
@@ -52100,8 +52236,8 @@ const causeOfEvent = event => {
52100
52236
  const readArea = slideElement => slideElement.getAttribute("data-slide-area") || slideElement.id || "";
52101
52237
 
52102
52238
  /**
52103
- * The slide shown can be driven from outside (`current` + `onCurrentChange`) or
52104
- * left to the container, which then answers the
52239
+ * The slide shown can be driven from outside (a `signal`, or `current` +
52240
+ * `onCurrentChange`) or left to the container, which then answers the
52105
52241
  * --navi-left/--navi-right/--navi-up/--navi-down commands sent from anything
52106
52242
  * inside it.
52107
52243
  *
@@ -52134,6 +52270,15 @@ const readArea = slideElement => slideElement.getAttribute("data-slide-area") ||
52134
52270
  * written is simply not there.
52135
52271
  * @param {string} [props.current] - area (or id) of the slide being shown; omit
52136
52272
  * to keep it here and drive it by command.
52273
+ * @param {import("@preact/signals").Signal<string>} [props.signal] - the same
52274
+ * thing said the way every navi control says it: the container shows the area
52275
+ * the signal holds, and writes into it the area it travels to. One binding
52276
+ * instead of `current` + `onCurrentChange`, and the state stays where the app
52277
+ * put it — which is what lets something else read where the slides are (a
52278
+ * field carrying the current tab into a form, see
52279
+ * docs/control_object.md#a-settings-sheet) or move them by writing it.
52280
+ * Excludes `current`; `onCurrentChange` still fires, for the `cause` and for
52281
+ * the right to refuse.
52137
52282
  * @param {string} [props.defaultCurrent] - which slide to open on, when the
52138
52283
  * travel is left to the container. Mount-only, like every other `default*`:
52139
52284
  * it says where one starts, not where one is — say `current` for that.
@@ -52205,6 +52350,7 @@ const readArea = slideElement => slideElement.getAttribute("data-slide-area") ||
52205
52350
  const SlideContainer = ({
52206
52351
  layout = "row",
52207
52352
  current: currentProp,
52353
+ signal: currentSignal,
52208
52354
  defaultCurrent,
52209
52355
  onCurrentChange,
52210
52356
  commit = "now",
@@ -52303,7 +52449,8 @@ const SlideContainer = ({
52303
52449
  // draw in CSS alone, at the pace of the travel and under the finger, with
52304
52450
  // nothing measured per frame.
52305
52451
  const followerElementsRef = useRef([]);
52306
- const current = rollingArea ?? provisionalArea ?? currentProp ?? currentAreaState;
52452
+ const currentFromCaller = currentSignal ? currentSignal.value : currentProp;
52453
+ const current = rollingArea ?? provisionalArea ?? currentFromCaller ?? currentAreaState;
52307
52454
  const vertical = layout === "column";
52308
52455
  // What the map has, and what each way of asking is allowed to use of it.
52309
52456
  const mapAxes = travelAxesOf(layout);
@@ -52338,11 +52485,11 @@ const SlideContainer = ({
52338
52485
  if (provisionalArea === null) {
52339
52486
  return;
52340
52487
  }
52341
- const heldOutside = currentProp ?? currentAreaState;
52488
+ const heldOutside = currentFromCaller ?? currentAreaState;
52342
52489
  if (heldOutside === provisionalArea) {
52343
52490
  setProvisionalArea(null);
52344
52491
  }
52345
- }, [provisionalArea, currentProp, currentAreaState]);
52492
+ }, [provisionalArea, currentFromCaller, currentAreaState]);
52346
52493
 
52347
52494
  // The travel is given back as soon as the picture it must not animate has
52348
52495
  // been painted: one frame with it off is all it takes.
@@ -52519,10 +52666,10 @@ const SlideContainer = ({
52519
52666
  const commitAtRest = commitAtRestRef.current;
52520
52667
  if (commitAtRest && commitAtRest.area === currentArea) {
52521
52668
  commitAtRestRef.current = null;
52522
- answerCurrentChange(onCurrentChange(commitAtRest.area, {
52669
+ tellCurrentChange(commitAtRest.area, {
52523
52670
  cause: commitAtRest.cause,
52524
52671
  event: commitAtRest.event
52525
- }), commitAtRest.leftArea);
52672
+ }, commitAtRest.leftArea);
52526
52673
  }
52527
52674
  };
52528
52675
 
@@ -52896,7 +53043,7 @@ const SlideContainer = ({
52896
53043
  }
52897
53044
  const leftArea = readArea(currentElement);
52898
53045
  setCurrentAreaState(area);
52899
- if (!onCurrentChange) {
53046
+ if (!onCurrentChange && !currentSignal) {
52900
53047
  return true;
52901
53048
  }
52902
53049
  // What asked for this, read off the interaction rather than carried down
@@ -52920,13 +53067,26 @@ const SlideContainer = ({
52920
53067
  };
52921
53068
  return true;
52922
53069
  }
52923
- answerCurrentChange(onCurrentChange(area, {
53070
+ tellCurrentChange(area, {
52924
53071
  cause,
52925
53072
  event
52926
- }), leftArea);
53073
+ }, leftArea);
52927
53074
  return true;
52928
53075
  };
52929
53076
 
53077
+ // The caller learns where the container went: the bound signal is written and
53078
+ // `onCurrentChange` is called, in that order, so a caller reading the signal
53079
+ // from inside its own handler reads where it now is.
53080
+ const tellCurrentChange = (area, detail, leftArea) => {
53081
+ if (currentSignal) {
53082
+ currentSignal.value = area;
53083
+ }
53084
+ if (!onCurrentChange) {
53085
+ return;
53086
+ }
53087
+ answerCurrentChange(onCurrentChange(area, detail), leftArea);
53088
+ };
53089
+
52930
53090
  // What a caller says back about a change it was told about: nothing, or a
52931
53091
  // refusal. `false` refuses it — a guard that says no, a session that is gone —
52932
53092
  // and a promise refuses it late, once whatever it had to ask has answered. A
@@ -52948,6 +53108,9 @@ const SlideContainer = ({
52948
53108
  const goBackToRefusedArea = leftArea => {
52949
53109
  setProvisionalArea(null);
52950
53110
  setCurrentAreaState(leftArea);
53111
+ if (currentSignal) {
53112
+ currentSignal.value = leftArea;
53113
+ }
52951
53114
  };
52952
53115
 
52953
53116
  // The press kept during a roll, taken once the window rests and the travel is
@@ -55253,7 +55416,12 @@ installImportMetaCssBuild(import.meta);const css$z = /* css */`
55253
55416
  /* The list scrolls inside the popover */
55254
55417
  .navi_list_container {
55255
55418
  width: 100%;
55256
- border-radius: max(
55419
+ /* The list's radius var, not border-radius itself: the longhands it
55420
+ feeds are what read the --x-corner-*-radius claims coming from
55421
+ outside (a header/footer covering a corner, a flush body — see
55422
+ box.jsx). Writing the shorthand here would flatten those four
55423
+ longhands back to one curve and square nothing. */
55424
+ --list-border-radius: max(
55257
55425
  0px,
55258
55426
  var(--picker-border-radius) - var(--picker-border-width)
55259
55427
  );
@@ -55319,7 +55487,9 @@ installImportMetaCssBuild(import.meta);const css$z = /* css */`
55319
55487
 
55320
55488
  .navi_list_container {
55321
55489
  width: 100%;
55322
- border-radius: max(
55490
+ /* See the popover block above: the var, not the shorthand, so the
55491
+ corner claims survive. */
55492
+ --list-border-radius: max(
55323
55493
  0px,
55324
55494
  var(--picker-border-radius) - var(--picker-border-width)
55325
55495
  );
@@ -75208,5 +75378,5 @@ const UserSvg = () => jsx("svg", {
75208
75378
  })
75209
75379
  });
75210
75380
 
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 };
75381
+ 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
75382
  //# sourceMappingURL=jsenv_navi.js.map