@jsenv/navi 0.29.133 → 0.29.134

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.
@@ -2229,6 +2229,17 @@ naviI18n.addAll({
2229
2229
  pt: "meia-noite",
2230
2230
  nl: "middernacht",
2231
2231
  },
2232
+ // What <TimeRange> writes between the two bounds of a span — "8h–10h",
2233
+ // "11 mai – 14 mai". An en dash, the mark for a span, not a hyphen.
2234
+ "time.range_separator": {
2235
+ en: "–",
2236
+ fr: "–",
2237
+ de: "–",
2238
+ es: "–",
2239
+ it: "–",
2240
+ pt: "–",
2241
+ nl: "–",
2242
+ },
2232
2243
  // Compact duration unit symbols used in "1h30", "45min", "2d", etc.
2233
2244
  "time.duration.year_symbol": {
2234
2245
  en: "y",
@@ -8082,27 +8093,35 @@ const formatTime = (date, lang) => {
8082
8093
  * "compact" uses our own notation that omits the minute symbol when hours are present.
8083
8094
  *
8084
8095
  * @param {number} minutes
8085
- * @param {{ lang?: string, format?: "long"|"short"|"narrow"|"compact", clockStyle?: boolean, forceUnit?: boolean }} [options]
8096
+ * @param {{ lang?: string, format?: "long"|"short"|"narrow"|"compact", clockStyle?: boolean, pad?: boolean, precision?: "hour"|"minute", forceUnit?: boolean }} [options]
8086
8097
  * @param {boolean} [options.forceUnit=false] - Keep the value in minutes
8087
8098
  * however big it gets ("2160 minutes" instead of "1 jour et 12 heures").
8088
8099
  * Past 24 hours the default promotes to days, which reads better but hides
8089
8100
  * the unit the caller works in.
8090
8101
  * @param {boolean} [options.clockStyle=false] - Set this when `minutes`
8091
8102
  * represents a time-of-day rather than a real duration (used by
8092
- * `<Time type="time">`, see time.jsx's own TimeTime) affects two
8093
- * things at once, both consequences of a clock's "0" being a meaningful
8094
- * hour rather than "no hours":
8095
- * - a zero-hours component is normally dropped entirely (a real 5-minute
8096
- * duration should print as "5 minutes", not "0 hours 5 minutes"); this
8097
- * keeps it instead (e.g. "0 h et 5 min"/"0h 5min"/"00h05") so midnight
8098
- * doesn't collapse to something indistinguishable from an actual
8099
- * 5-minute duration.
8100
- * - `format: "compact"` also zero-pads a single-digit hour to 2 digits
8101
- * (e.g. "5h30" → "05h30") and keeps a zero-valued minute (e.g. "10h" →
8102
- * "10h00"), so it reads closer to a "05:30"/"10:00" clock. The other
8103
- * formats spell out their units, so "10 heures"/"10h" reads fine there
8104
- * and only "compact" needs the clock shape.
8103
+ * `<Time type="time">`, see time.jsx's own TimeTime). A clock's "0" is a
8104
+ * meaningful hour rather than "no hours": a zero-hours component is
8105
+ * normally dropped entirely (a real 5-minute duration should print as
8106
+ * "5 minutes", not "0 hours 5 minutes"); this keeps it instead (e.g.
8107
+ * "0 h et 5 min"/"0h 5min"/"00h05") so midnight doesn't collapse to
8108
+ * something indistinguishable from an actual 5-minute duration.
8105
8109
  * Must not be set for plain duration formatting.
8110
+ * @param {boolean} [options.pad=true] - Zero-pad the hour to 2 digits
8111
+ * ("08h30" rather than "8h30"). `clockStyle` + `format: "compact"` only.
8112
+ * @param {"hour"|"minute"} [options.precision="minute"] - Whether a zero
8113
+ * minute is written: `"minute"` keeps it ("10h00"), `"hour"` drops it
8114
+ * ("10h"). `clockStyle` + `format: "compact"` only.
8115
+ *
8116
+ * These last two are the clock's two independent shape choices, and only
8117
+ * `format: "compact"` has to make them — the spelled-out formats put their
8118
+ * units in words, so "10 heures"/"10 h"/"10h" already reads as a time of
8119
+ * day whatever the padding, and they always write the hour bare and drop a
8120
+ * zero minute. Padded + minute ("08h00") is the column shape, where every
8121
+ * row occupies the same width; bare + hour ("8h", "8h30") is the shape a
8122
+ * person speaks. Bare + minute ("8h00") only ever makes sense next to a
8123
+ * partner that has minutes of its own — see `<TimeRange>`, which is the
8124
+ * only thing that asks for it.
8106
8125
  *
8107
8126
  * @example
8108
8127
  * formatMinuteDuration(90, { lang: "fr" }) // "1 heure 30 minutes" (long, default)
@@ -8113,6 +8132,9 @@ const formatTime = (date, lang) => {
8113
8132
  * formatMinuteDuration(5, { lang: "fr", format: "narrow", clockStyle: true }) // "0h 5min"
8114
8133
  * formatMinuteDuration(330, { lang: "fr", format: "compact", clockStyle: true }) // "05h30"
8115
8134
  * formatMinuteDuration(600, { lang: "fr", format: "compact", clockStyle: true }) // "10h00"
8135
+ * formatMinuteDuration(600, { lang: "fr", format: "compact", clockStyle: true, pad: false }) // "10h00"
8136
+ * formatMinuteDuration(600, { lang: "fr", format: "compact", clockStyle: true, pad: false, precision: "hour" }) // "10h"
8137
+ * formatMinuteDuration(510, { lang: "fr", format: "compact", clockStyle: true, pad: false, precision: "hour" }) // "8h30"
8116
8138
  * formatMinuteDuration(2160, { lang: "fr" }) // "1 jour et 12 heures"
8117
8139
  * formatMinuteDuration(2160, { lang: "fr", forceUnit: true }) // "2 160 minutes"
8118
8140
  */
@@ -8122,13 +8144,15 @@ const formatMinuteDuration = (
8122
8144
  lang = languagesSignal.value,
8123
8145
  format = "long",
8124
8146
  clockStyle = false,
8147
+ pad = true,
8148
+ precision = "minute",
8125
8149
  forceUnit = false,
8126
8150
  } = {},
8127
8151
  ) => {
8128
8152
  if (minutes < 0) {
8129
8153
  // the d/h/m split below only holds for a positive value; formatting the
8130
8154
  // magnitude and putting the sign back is the only reading that works
8131
- return `-${formatMinuteDuration(-minutes, { lang, format, clockStyle, forceUnit })}`;
8155
+ return `-${formatMinuteDuration(-minutes, { lang, format, clockStyle, pad, precision, forceUnit })}`;
8132
8156
  }
8133
8157
  if (forceUnit || (minutes === 0 && !clockStyle)) {
8134
8158
  // a zero has nothing to promote to, and rendering it as an empty string
@@ -8162,16 +8186,19 @@ const formatMinuteDuration = (
8162
8186
  const hSym = naviI18n("time.duration.hour_symbol", undefined, { lang });
8163
8187
  const mSym = naviI18n("time.duration.minute_symbol", undefined, { lang });
8164
8188
  const dStr = d > 0 ? `${formatCompactNumber(d, lang)}${dSym}` : "";
8165
- const hStr = clockStyle
8166
- ? String(h).padStart(2, "0")
8167
- : formatCompactNumber(h, lang);
8189
+ const hStr =
8190
+ clockStyle && pad
8191
+ ? String(h).padStart(2, "0")
8192
+ : formatCompactNumber(h, lang);
8168
8193
  if (d === 0 && h === 0 && !clockStyle) {
8169
8194
  return `${m}${mSym}`;
8170
8195
  }
8171
8196
  if (m === 0) {
8172
8197
  if (clockStyle) {
8173
- // "10h00" on a clock, "2h" for a real 2 hours duration
8174
- return `${hStr}${hSym}00`;
8198
+ // "10h00" on a clock, "2h" for a real 2 hours duration — except at
8199
+ // precision "hour", where a clock drops the zero minute too ("10h"),
8200
+ // the way one says it out loud
8201
+ return precision === "minute" ? `${hStr}${hSym}00` : `${hStr}${hSym}`;
8175
8202
  }
8176
8203
  return h === 0 ? dStr : `${dStr}${hStr}${hSym}`;
8177
8204
  }
@@ -29786,16 +29813,22 @@ const whilePageRenders = async (page, change, wait = armRouteRenderWait()) => {
29786
29813
  };
29787
29814
 
29788
29815
  // Whether the document's offset belongs to the tabs. The pages of a row scroll
29789
- // the document when nothing between the box and the viewport scrolls or clips:
29790
- // the tab on screen is then what makes the document tall, and the offset on it
29791
- // is that tab's — it has to be given back with the tab, and the browser's
29792
- // clamping of it while pages are swapped has to be ignored.
29816
+ // the document when nothing between the box and the viewport is a scroll
29817
+ // container: the tab on screen is then what makes the document tall, and the
29818
+ // offset on it is that tab's — it has to be given back with the tab, and the
29819
+ // browser's clamping of it while pages are swapped has to be ignored.
29793
29820
  //
29794
29821
  // A box that lives inside a scroller of its own — a frame in an article, a
29795
29822
  // panel beside other content — shares nothing with the document: the offset
29796
29823
  // there is the surrounding page's, the reader never left it, and a travel has
29797
29824
  // no business moving it. Each of its pages brings its own scrollport, which
29798
29825
  // goes away with the page and has nothing to restore.
29826
+ //
29827
+ // includeHidden, because an `overflow: hidden` ancestor is one of those
29828
+ // scrollers: it shows no scrollbar and still holds an offset of its own, and
29829
+ // what is under it never reaches the document. A wrapper that merely clips
29830
+ // (`overflow: clip`) holds nothing and is walked straight through — see
29831
+ // is_scrollable.js.
29799
29832
  const pagesScrollTheDocument = element => {
29800
29833
  const scrollContainer = getScrollContainer(element, {
29801
29834
  includeHidden: true
@@ -53120,6 +53153,8 @@ const TimeTime = ({
53120
53153
  children,
53121
53154
  lang = languagesSignal.value,
53122
53155
  format = "long",
53156
+ pad = true,
53157
+ precision = pad ? "minute" : "hour",
53123
53158
  ...props
53124
53159
  }) => {
53125
53160
  if (children === undefined) {
@@ -53128,13 +53163,7 @@ const TimeTime = ({
53128
53163
  children: "--:--"
53129
53164
  });
53130
53165
  }
53131
- const date = toDate(children, value => {
53132
- if (/^\d{2}:\d{2}(?::\d{2})?$/.test(value)) {
53133
- const d = new Date(`1970-01-01T${value}`);
53134
- return isNaN(d.getTime()) ? null : d;
53135
- }
53136
- return null;
53137
- });
53166
+ const date = toTimeOfDay(children);
53138
53167
  // toDate turns a non-finite number into an Invalid Date, which is an object
53139
53168
  if (!date || isNaN(date.getTime())) {
53140
53169
  return jsx(TimeText, {
@@ -53171,7 +53200,9 @@ const TimeTime = ({
53171
53200
  text = formatMinuteDuration(totalMinutes, {
53172
53201
  lang,
53173
53202
  format,
53174
- clockStyle: true
53203
+ clockStyle: true,
53204
+ pad,
53205
+ precision
53175
53206
  });
53176
53207
  } else if (format !== "long") {
53177
53208
  // short/narrow/compact: keep the "0 h"/"0h" hour part instead of
@@ -53181,7 +53212,9 @@ const TimeTime = ({
53181
53212
  text = formatMinuteDuration(totalMinutes, {
53182
53213
  lang,
53183
53214
  format,
53184
- clockStyle: true
53215
+ clockStyle: true,
53216
+ pad,
53217
+ precision
53185
53218
  });
53186
53219
  } else {
53187
53220
  const midnightWord = naviI18n("time.midnight", undefined, {
@@ -53472,6 +53505,111 @@ const TimeText = props => {
53472
53505
  ...props
53473
53506
  });
53474
53507
  };
53508
+
53509
+ /**
53510
+ * Displays a span between two instants — an opening slot, an availability
53511
+ * window — as the two `<time>` elements `<Time>` would render, around a
53512
+ * separator.
53513
+ *
53514
+ * On top of writing the separator, it makes the two bounds agree on how
53515
+ * precisely they are written, which is a property of the pair and of nothing
53516
+ * else: with `type="time" format="compact" pad={false}`, "08:00"–"10:00" reads
53517
+ * "8h–10h", but "11:30"–"14:00" reads "11h30–14h00" and not "11h30–14h", where
53518
+ * the eye stops on the difference of shape before it reads the hours. Any bound
53519
+ * with minutes gives minutes to both, zero included. The padded clock
53520
+ * (`pad` left at its default) already writes every bound at the same width, and
53521
+ * the spelled-out formats say their units in words, so neither needs the rule
53522
+ * and neither is touched by it.
53523
+ *
53524
+ * @param {Date|number|string} from
53525
+ * The start of the span, in whatever `<Time>` accepts for this `type`.
53526
+ * @param {Date|number|string} to
53527
+ * The end of the span. An undefined bound renders `<Time>`'s own placeholder.
53528
+ * @param {"date"|"month"|"datetime"|"time"|"hour"|"minute"|"second"} [type="time"]
53529
+ * Passed to both bounds. Only `"time"` gets the shared-precision rule; the
53530
+ * other types are written one after the other, with nothing factored out (a
53531
+ * date span reads "11 mai – 14 mai", never "du 11 au 14 mai").
53532
+ * @param {"hour"|"minute"} [precision]
53533
+ * Writes both bounds at this precision instead of the one the pair calls for
53534
+ * — `"minute"` to keep a zero minute on both ("8h00–10h00"), `"hour"` to drop
53535
+ * it on both ("8h–11h30", which is the shape the rule exists to avoid: set it
53536
+ * only when you mean it).
53537
+ * @param {string} [separator]
53538
+ * What goes between the two bounds. Defaults to the `"time.range_separator"`
53539
+ * navi text (an en dash), tightened against both bounds in `format="compact"`
53540
+ * — where the span is one short token — and spaced out otherwise.
53541
+ *
53542
+ * Every other prop is forwarded to both bounds; see `<Time>`.
53543
+ */
53544
+ const TimeRange = ({
53545
+ from,
53546
+ to,
53547
+ type = "time",
53548
+ format = "long",
53549
+ lang = languagesSignal.value,
53550
+ pad = true,
53551
+ precision,
53552
+ separator = naviI18n("time.range_separator", undefined, {
53553
+ lang
53554
+ }),
53555
+ ...props
53556
+ }) => {
53557
+ const boundProps = {
53558
+ type,
53559
+ format,
53560
+ lang
53561
+ };
53562
+ if (type === "time") {
53563
+ boundProps.pad = pad;
53564
+ boundProps.precision = precision ?? resolvePairPrecision(from, to, {
53565
+ format,
53566
+ pad
53567
+ });
53568
+ }
53569
+ // compact writes the whole span as one short token ("8h–10h"): nothing
53570
+ // around the separator, and no break inside it. The other formats are
53571
+ // phrases — they get room around the separator, and may wrap there.
53572
+ const tight = format === "compact";
53573
+ return jsxs(Text, {
53574
+ noWrap: tight,
53575
+ ...props,
53576
+ children: [jsx(Time, {
53577
+ ...boundProps,
53578
+ children: from
53579
+ }), tight ? separator : ` ${separator} `, jsx(Time, {
53580
+ ...boundProps,
53581
+ children: to
53582
+ })]
53583
+ });
53584
+ };
53585
+
53586
+ // The two bounds of a span are written to the same precision, decided by the
53587
+ // pair: "8h–10h" as long as neither has minutes, "11h30–14h00" as soon as one
53588
+ // of them does. Only ever a question for the unpadded compact clock — the
53589
+ // padded one always writes "08h00", and the spelled-out formats name their
53590
+ // units, leaving no shape for the eye to trip on.
53591
+ const resolvePairPrecision = (from, to, {
53592
+ format,
53593
+ pad
53594
+ }) => {
53595
+ if (pad || format !== "compact") {
53596
+ return "minute";
53597
+ }
53598
+ const hasMinutes = value => {
53599
+ const date = toTimeOfDay(value);
53600
+ return Boolean(date) && !isNaN(date.getTime()) && date.getMinutes() !== 0;
53601
+ };
53602
+ return hasMinutes(from) || hasMinutes(to) ? "minute" : "hour";
53603
+ };
53604
+ const toTimeOfDay = value => {
53605
+ return toDate(value, string => {
53606
+ if (/^\d{2}:\d{2}(?::\d{2})?$/.test(string)) {
53607
+ const d = new Date(`1970-01-01T${string}`);
53608
+ return isNaN(d.getTime()) ? null : d;
53609
+ }
53610
+ return null;
53611
+ });
53612
+ };
53475
53613
  const toDate = (value, parseString) => {
53476
53614
  if (value instanceof Date) {
53477
53615
  return value;
@@ -80875,5 +81013,5 @@ const UserSvg = () => jsx("svg", {
80875
81013
  })
80876
81014
  });
80877
81015
 
80878
- export { ActionRenderer, ActiveKeyboardShortcuts, Address, Badge, BadgeCount, BadgeList, Binder, Box, Button, ButtonCopyToClipboard, CalloutStatusIcon, Caption, CardLayout, CheckSvg, CheckboxGroup, CloseSvg, Code, Col, Colgroup, Color, ConstructionSvg, ControlGroup, 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, TimeRangeSpin, TimeRangeWheel, TimeSpin, TimeWheel, Title, Tr, UITransition, Unit, UserSvg, ViewportLayout, Wheel, WheelGroup, WheelItem, actionRunEffect, anyMatchingRouteSignal, applySearch, arraySignalMembership, canNavBackSignal, canNavForwardSignal, coarsePointerSignal, compareTwoJsValues, constraintFromValidityRule, createAction, createAvailableConstraint, createI18n, createRequestCanceller, createSearch, createSelectionKeyboardShortcuts, createSlot, defineInteractionDetector, defineRouteDefaultTransition, defineRouteTransition, detectHorizontalOverflow, enableDebugActions, enableDebugOnDocumentLoading, ensureDocumentStartViewTransition, errorIsDisplayed, filterTableSelection, formatDatetime, formatDay, formatDayRelative, formatMonth, formatNumber, formatTime, formatTimeRelative, getNowHours, getNowHoursRoundedToStep, interpolateText, isCellSelected, isColumnSelected, isOfflineError, isRowSelected, isScrolling, isToday, languagesSignal, localStorageSignal, markErrorAsDisplayedBy, moveArrayItemByIndex, 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, useRunOnMount, useSearchText, useSelectableElement, useSelectionController, useSignalSync, useSlideContainer, useSlideValue, useStateArray, useTitleLevel, useUrlSearchParam, useUrlTargetId, valueInLocalStorage, windowWidthSignal };
81016
+ export { ActionRenderer, ActiveKeyboardShortcuts, Address, Badge, BadgeCount, BadgeList, Binder, Box, Button, ButtonCopyToClipboard, CalloutStatusIcon, Caption, CardLayout, CheckSvg, CheckboxGroup, CloseSvg, Code, Col, Colgroup, Color, ConstructionSvg, ControlGroup, 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, createI18n, createRequestCanceller, createSearch, createSelectionKeyboardShortcuts, createSlot, defineInteractionDetector, defineRouteDefaultTransition, defineRouteTransition, detectHorizontalOverflow, enableDebugActions, enableDebugOnDocumentLoading, ensureDocumentStartViewTransition, errorIsDisplayed, filterTableSelection, formatDatetime, formatDay, formatDayRelative, formatMonth, formatNumber, formatTime, formatTimeRelative, getNowHours, getNowHoursRoundedToStep, interpolateText, isCellSelected, isColumnSelected, isOfflineError, isRowSelected, isScrolling, isToday, languagesSignal, localStorageSignal, markErrorAsDisplayedBy, moveArrayItemByIndex, 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, useRunOnMount, useSearchText, useSelectableElement, useSelectionController, useSignalSync, useSlideContainer, useSlideValue, useStateArray, useTitleLevel, useUrlSearchParam, useUrlTargetId, valueInLocalStorage, windowWidthSignal };
80879
81017
  //# sourceMappingURL=jsenv_navi.js.map