@jsenv/navi 0.29.216 → 0.29.218
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 +128 -130
- package/dist/dev/jsenv_navi.js.map +10 -10
- package/dist/jsenv_navi.js +128 -130
- package/dist/jsenv_navi.js.map +10 -10
- package/package.json +1 -1
package/dist/dev/jsenv_navi.js
CHANGED
|
@@ -26510,9 +26510,10 @@ const setupBrowserIntegrationViaHistory = ({
|
|
|
26510
26510
|
const {
|
|
26511
26511
|
reason,
|
|
26512
26512
|
navigationType, // "load", "reload", "replace", "push", "traverse"
|
|
26513
|
-
state,
|
|
26514
26513
|
redirected,
|
|
26514
|
+
landOn,
|
|
26515
26515
|
} = options;
|
|
26516
|
+
let { state } = options;
|
|
26516
26517
|
|
|
26517
26518
|
// Where the entry being reached stands in this document's own stack —
|
|
26518
26519
|
// decided before the state that carries it is built (see
|
|
@@ -26540,7 +26541,22 @@ const setupBrowserIntegrationViaHistory = ({
|
|
|
26540
26541
|
} else {
|
|
26541
26542
|
// traverse / reload: state comes from the history entry, no push/replace needed.
|
|
26542
26543
|
markUrlAsVisited(url);
|
|
26543
|
-
if (
|
|
26544
|
+
if (landOn) {
|
|
26545
|
+
// The entry the back landed on, written over where it stands with
|
|
26546
|
+
// what must outlive the popped one (see navBack's `landOn`) — before
|
|
26547
|
+
// the routes read anything, so the only address they ever see is the
|
|
26548
|
+
// one being kept.
|
|
26549
|
+
state = resolveEffectiveDocumentState(landOn.state, {
|
|
26550
|
+
navigationType: "replace",
|
|
26551
|
+
currentState: state,
|
|
26552
|
+
sharedState: {
|
|
26553
|
+
jsenv_visited_urls: Array.from(visitedUrlSet),
|
|
26554
|
+
[NAV_DEPTH_STATE_KEY]: getNavDepth(),
|
|
26555
|
+
},
|
|
26556
|
+
});
|
|
26557
|
+
window.history.replaceState(state, null, url);
|
|
26558
|
+
rememberEntryIsOfThisDocument();
|
|
26559
|
+
} else if (redirected) {
|
|
26544
26560
|
// The entry the browser is on names an address that only sends
|
|
26545
26561
|
// elsewhere — a cold load on it, or a back into it. Written over where
|
|
26546
26562
|
// it stands (the entry keeps its place in the stack, hence its state
|
|
@@ -26704,6 +26720,17 @@ const setupBrowserIntegrationViaHistory = ({
|
|
|
26704
26720
|
window.addEventListener("popstate", (popstateEvent) => {
|
|
26705
26721
|
const url = window.location.href;
|
|
26706
26722
|
const state = popstateEvent.state;
|
|
26723
|
+
const landOn = landOnPending;
|
|
26724
|
+
landOnPending = null;
|
|
26725
|
+
if (landOn) {
|
|
26726
|
+
handleRoutingTask(landOn.url, {
|
|
26727
|
+
reason: `"popstate" event for ${url}, landing on ${landOn.url}`,
|
|
26728
|
+
navigationType: "traverse",
|
|
26729
|
+
state,
|
|
26730
|
+
landOn,
|
|
26731
|
+
});
|
|
26732
|
+
return;
|
|
26733
|
+
}
|
|
26707
26734
|
handleRoutingTask(url, {
|
|
26708
26735
|
reason: `"popstate" event for ${url}`,
|
|
26709
26736
|
navigationType: "traverse",
|
|
@@ -26745,7 +26772,11 @@ const setupBrowserIntegrationViaHistory = ({
|
|
|
26745
26772
|
});
|
|
26746
26773
|
};
|
|
26747
26774
|
|
|
26748
|
-
|
|
26775
|
+
// What the next "popstate" writes over the entry it lands on, when a back
|
|
26776
|
+
// asked for it (see navBack's `landOn`). Read by the popstate listener,
|
|
26777
|
+
// which is the one place the landing is applied.
|
|
26778
|
+
let landOnPending = null;
|
|
26779
|
+
const navBack = ({ fallback, landOn } = {}) => {
|
|
26749
26780
|
if (canNavBackSignal.peek()) {
|
|
26750
26781
|
// Resolved once the back has landed: the "popstate" it is answered with
|
|
26751
26782
|
// reaches the routing listener first (registered at setup, before this
|
|
@@ -26756,6 +26787,7 @@ const setupBrowserIntegrationViaHistory = ({
|
|
|
26756
26787
|
once: true,
|
|
26757
26788
|
});
|
|
26758
26789
|
});
|
|
26790
|
+
landOnPending = landOn || null;
|
|
26759
26791
|
window.history.back();
|
|
26760
26792
|
return landedPromise;
|
|
26761
26793
|
}
|
|
@@ -26958,6 +26990,12 @@ const reload = browserIntegration.reload;
|
|
|
26958
26990
|
* Where to land when there is nothing of this document behind. It takes the
|
|
26959
26991
|
* place of the current entry rather than stacking on it. Without it, a
|
|
26960
26992
|
* navBack() with nowhere to go does nothing.
|
|
26993
|
+
* @param {{ url: string, state?: object }} [options.landOn]
|
|
26994
|
+
* What the entry the back lands on reads once landed: its url, and its state
|
|
26995
|
+
* (`undefined` keeps the state it has). Written over that entry within the
|
|
26996
|
+
* back's own navigation, so the routes never see the entry as it was — the
|
|
26997
|
+
* way a screen closed over a url keeps what was written to the url while it
|
|
26998
|
+
* was open (see useNavState's leave()).
|
|
26961
26999
|
* @returns {Promise<boolean>|undefined}
|
|
26962
27000
|
* When there is something to go back to: a promise resolved once the back
|
|
26963
27001
|
* has landed and been applied (`true` — the document url and state say
|
|
@@ -27086,10 +27124,13 @@ const useNavStateBasic = (
|
|
|
27086
27124
|
// Both push-mode closes pop the pushed entry. A keep-close that merely
|
|
27087
27125
|
// rewrote it in place would leave two entries describing the same closed
|
|
27088
27126
|
// screen — same url, same state — and the next back press would appear to do
|
|
27089
|
-
// nothing. So the keep path goes back like the cancel does,
|
|
27090
|
-
//
|
|
27091
|
-
//
|
|
27092
|
-
//
|
|
27127
|
+
// nothing. So the keep path goes back like the cancel does, with what must
|
|
27128
|
+
// be kept written onto the entry the back lands on, in the same navigation:
|
|
27129
|
+
// a route param written while the state was entered is in the url being
|
|
27130
|
+
// kept, and a routing pass reading the entry behind as it was would take
|
|
27131
|
+
// that param for gone. Only with nothing of this document behind (the state
|
|
27132
|
+
// was entered on a cold-loaded url, navBack has nowhere to go) does it
|
|
27133
|
+
// rewrite in place.
|
|
27093
27134
|
const leave = ({ isBack } = {}) => {
|
|
27094
27135
|
enteredRef.current = false;
|
|
27095
27136
|
const currentStateCopy = browserIntegration.getDocumentState() || {};
|
|
@@ -27101,13 +27142,9 @@ const useNavStateBasic = (
|
|
|
27101
27142
|
browserIntegration.navBack();
|
|
27102
27143
|
return;
|
|
27103
27144
|
}
|
|
27104
|
-
const urlToKeep = window.location.href;
|
|
27105
27145
|
delete currentStateCopy[id];
|
|
27106
|
-
browserIntegration.navBack(
|
|
27107
|
-
|
|
27108
|
-
return;
|
|
27109
|
-
}
|
|
27110
|
-
navTo(urlToKeep, { replace: true, state: currentStateCopy });
|
|
27146
|
+
browserIntegration.navBack({
|
|
27147
|
+
landOn: { url: window.location.href, state: currentStateCopy },
|
|
27111
27148
|
});
|
|
27112
27149
|
return;
|
|
27113
27150
|
}
|
|
@@ -45579,16 +45616,7 @@ const writeOpenedInSignal = (signal, opened, event) => {
|
|
|
45579
45616
|
return;
|
|
45580
45617
|
}
|
|
45581
45618
|
writeInSignal(signal, false, { history: "replace" });
|
|
45582
|
-
|
|
45583
|
-
navBack().then((landed) => {
|
|
45584
|
-
if (!landed) {
|
|
45585
|
-
return;
|
|
45586
|
-
}
|
|
45587
|
-
// Often nothing at all: with no other write made while the popup was
|
|
45588
|
-
// open, the entry landed on already reads urlToKeep and navTo skips
|
|
45589
|
-
// the navigation entirely.
|
|
45590
|
-
navTo(urlToKeep, { replace: true });
|
|
45591
|
-
});
|
|
45619
|
+
navBack({ landOn: { url: window.location.href } });
|
|
45592
45620
|
return;
|
|
45593
45621
|
}
|
|
45594
45622
|
writeInSignal(signal, false, { history: "replace" });
|
|
@@ -57163,8 +57191,7 @@ const getAvailableWidth = (layer, element) => {
|
|
|
57163
57191
|
* so any consumer can override it per-instance from CSS (or via the
|
|
57164
57192
|
* `animationDuration` prop, wired to --popup-animation-duration through
|
|
57165
57193
|
* Box's styleCSSVars) without touching this file: `--popup-animation-duration`,
|
|
57166
|
-
* `--popup-scale-from`, `--popup-
|
|
57167
|
-
* `slide-from-*`'s own
|
|
57194
|
+
* `--popup-scale-from`, `--popup-border-radius`. `slide-from-*`'s own
|
|
57168
57195
|
* 100%-of-own-size distance is hardcoded for now rather than exposed as a
|
|
57169
57196
|
* variable — fine to revisit if a consumer ever needs to override it.
|
|
57170
57197
|
*
|
|
@@ -57202,21 +57229,23 @@ const getAvailableWidth = (layer, element) => {
|
|
|
57202
57229
|
* so it slides in instead. The word names *where it comes from*: placed
|
|
57203
57230
|
* "top" (a point/corner), it slides in from the top.
|
|
57204
57231
|
*
|
|
57205
|
-
* `
|
|
57206
|
-
*
|
|
57207
|
-
*
|
|
57208
|
-
*
|
|
57209
|
-
*
|
|
57210
|
-
*
|
|
57211
|
-
*
|
|
57212
|
-
*
|
|
57213
|
-
*
|
|
57214
|
-
*
|
|
57215
|
-
*
|
|
57216
|
-
*
|
|
57217
|
-
*
|
|
57218
|
-
*
|
|
57219
|
-
*
|
|
57232
|
+
* The cut is a `clip-path`, and a `clip-path` is painted by the main thread
|
|
57233
|
+
* while the `transform` it has to keep pace with runs on the compositor. Two
|
|
57234
|
+
* clocks: a busy frame — the one that mounts a full-screen panel's content is
|
|
57235
|
+
* exactly that — lets the box travel while the cut stands still, and the
|
|
57236
|
+
* popup is then revealed from the WRONG edge once the thread catches up
|
|
57237
|
+
* (measured by wematch, 2026-09-06: no panel at all for 120ms, then a panel
|
|
57238
|
+
* with its head missing, then the head arriving from below). So the cut is
|
|
57239
|
+
* taken only where it hides something the screen would otherwise show — the
|
|
57240
|
+
* band of glass beside an app narrowed with --navi-app-max-width — and is a
|
|
57241
|
+
* constant everywhere else: at layer="top" the viewport's own edge cuts the
|
|
57242
|
+
* travel on the compositor for free, and at layer="local" the clip wrapper
|
|
57243
|
+
* (a static ancestor, overflow: hidden) does. Where a band exists the cut
|
|
57244
|
+
* still animates and still can drift under load; the full answer there is a
|
|
57245
|
+
* static frame clipped at the band with the travel on an inner element, which
|
|
57246
|
+
* is a restructuring of the popup's box (the visual box, the shadow, the
|
|
57247
|
+
* placement translate, the swipe all move to the inner element), not taken.
|
|
57248
|
+
* See .agents/skills/animations/SKILL.md, "One clock per movement".
|
|
57220
57249
|
*
|
|
57221
57250
|
* `animation="expand-*"` (a real anchor only, explicit opt-in — "scaling"
|
|
57222
57251
|
* reads better overall, see popover.jsx's top comment): grows out of the
|
|
@@ -57243,7 +57272,6 @@ const popupCss = /* css */ `
|
|
|
57243
57272
|
.navi_dialog {
|
|
57244
57273
|
--popup-animation-duration: 0.18s;
|
|
57245
57274
|
--popup-scale-from: 0.9;
|
|
57246
|
-
--popup-cover-travel: 24px;
|
|
57247
57275
|
|
|
57248
57276
|
--popup-opacity-duration: var(--popup-animation-duration);
|
|
57249
57277
|
--popup-translate-duration: var(--popup-animation-duration);
|
|
@@ -57260,11 +57288,11 @@ const popupCss = /* css */ `
|
|
|
57260
57288
|
(no shared transition-property to clobber, no propertyName to filter).
|
|
57261
57289
|
What moves here is transform, which composes under it. */
|
|
57262
57290
|
&[navi-animation] {
|
|
57263
|
-
/* clip-path takes the translate's own duration
|
|
57264
|
-
|
|
57265
|
-
|
|
57266
|
-
|
|
57267
|
-
|
|
57291
|
+
/* clip-path takes the translate's own duration, for the one cut that
|
|
57292
|
+
still moves (a band of glass beside the app — see this file's top
|
|
57293
|
+
comment for why every other cut is a constant). A constant cut, or a
|
|
57294
|
+
kind that sets none, has the same value on both sides of the change,
|
|
57295
|
+
which costs nothing. */
|
|
57268
57296
|
transition-property:
|
|
57269
57297
|
display, overlay, opacity, transform, scale, box-shadow, clip-path;
|
|
57270
57298
|
transition-duration:
|
|
@@ -57274,31 +57302,46 @@ const popupCss = /* css */ `
|
|
|
57274
57302
|
var(--popup-translate-duration);
|
|
57275
57303
|
transition-timing-function: ease;
|
|
57276
57304
|
transition-behavior: allow-discrete;
|
|
57305
|
+
}
|
|
57277
57306
|
|
|
57278
|
-
|
|
57279
|
-
|
|
57280
|
-
|
|
57281
|
-
|
|
57282
|
-
|
|
57283
|
-
|
|
57284
|
-
|
|
57285
|
-
|
|
57286
|
-
|
|
57287
|
-
|
|
57288
|
-
|
|
57289
|
-
|
|
57290
|
-
|
|
57291
|
-
|
|
57292
|
-
|
|
57293
|
-
|
|
57294
|
-
|
|
57295
|
-
|
|
57296
|
-
|
|
57297
|
-
|
|
57298
|
-
)
|
|
57299
|
-
|
|
57300
|
-
|
|
57301
|
-
|
|
57307
|
+
/* Where a travel may be cut, per side, in the popup's own coordinates.
|
|
57308
|
+
--container-position-room-* is how far past each of its own edges the
|
|
57309
|
+
popup may still paint before reaching the edge of the area it was placed
|
|
57310
|
+
in (applyNewPosition in @jsenv/dom), so the negated value puts a cut ON
|
|
57311
|
+
that edge; the rooms floor at 0, so the popup itself is never cut. Read
|
|
57312
|
+
by the slide family below and by swipe_to_close.js.
|
|
57313
|
+
|
|
57314
|
+
The cut is taken only where that edge is NOT the window's own: past the
|
|
57315
|
+
area lies a band of glass (an app narrowed with --navi-app-max-width, a
|
|
57316
|
+
keyboard — layout/safe_area.js), and the band is what the cut hides.
|
|
57317
|
+
Where the band is 0 the window's edge already hides the travel, on the
|
|
57318
|
+
compositor, and the cut is pushed 100vmax out instead: the min() term is
|
|
57319
|
+
0 for a 0 band and 100vmax for any other, a step written without a
|
|
57320
|
+
branch. See this file's top comment for why an animated cut has to be
|
|
57321
|
+
that rare. */
|
|
57322
|
+
--x-popup-cut-top-at-area: calc(
|
|
57323
|
+
-1 * var(--container-position-room-top, 100vmax) - 100vmax +
|
|
57324
|
+
min(100vmax, var(--navi-app-inset-top, 0px) * 1000000)
|
|
57325
|
+
);
|
|
57326
|
+
--x-popup-cut-right-at-area: calc(
|
|
57327
|
+
-1 * var(--container-position-room-right, 100vmax) - 100vmax +
|
|
57328
|
+
min(100vmax, var(--navi-app-inset-right, 0px) * 1000000)
|
|
57329
|
+
);
|
|
57330
|
+
--x-popup-cut-bottom-at-area: calc(
|
|
57331
|
+
-1 * var(--container-position-room-bottom, 100vmax) - 100vmax +
|
|
57332
|
+
min(100vmax, var(--navi-app-inset-bottom, 0px) * 1000000)
|
|
57333
|
+
);
|
|
57334
|
+
--x-popup-cut-left-at-area: calc(
|
|
57335
|
+
-1 * var(--container-position-room-left, 100vmax) - 100vmax +
|
|
57336
|
+
min(100vmax, var(--navi-app-inset-left, 0px) * 1000000)
|
|
57337
|
+
);
|
|
57338
|
+
/* A local popup is clipped by its clip wrapper (a static ancestor sized to
|
|
57339
|
+
the container, overflow: hidden): nothing is left for a cut to hide. */
|
|
57340
|
+
&[data-layer="local"] {
|
|
57341
|
+
--x-popup-cut-top-at-area: -100vmax;
|
|
57342
|
+
--x-popup-cut-right-at-area: -100vmax;
|
|
57343
|
+
--x-popup-cut-bottom-at-area: -100vmax;
|
|
57344
|
+
--x-popup-cut-left-at-area: -100vmax;
|
|
57302
57345
|
}
|
|
57303
57346
|
|
|
57304
57347
|
/* box-shadow fades in/out alongside any animation kind, instead of
|
|
@@ -57422,39 +57465,6 @@ const popupCss = /* css */ `
|
|
|
57422
57465
|
}
|
|
57423
57466
|
}
|
|
57424
57467
|
|
|
57425
|
-
/* cover — a top-docked popup unrolling from the top edge of its area (see
|
|
57426
|
-
this file's top comment): the cut does the reveal, the box travels
|
|
57427
|
-
--popup-cover-travel, a length. The far cut sits where the
|
|
57428
|
-
popup's shadow ends (--navi-popup-box-shadow reaches about 50px) or
|
|
57429
|
-
where the room does, whichever is nearer, so the reveal finishes on
|
|
57430
|
-
the box and its shadow at the pace of the box's own settle. On the
|
|
57431
|
-
box's own edge it would shave the shadow off for good; on a distant
|
|
57432
|
-
container edge it would run far ahead of the box. */
|
|
57433
|
-
&[navi-animation="cover-from-top"] {
|
|
57434
|
-
opacity: 1;
|
|
57435
|
-
--x-popup-cut-top: var(--x-popup-cut-top-at-area);
|
|
57436
|
-
--x-popup-cut-bottom: max(var(--x-popup-cut-bottom-at-area), -60px);
|
|
57437
|
-
--x-popup-travel-y: calc(-1 * var(--popup-cover-travel));
|
|
57438
|
-
clip-path: inset(
|
|
57439
|
-
var(--x-popup-cut-top) -100vmax var(--x-popup-cut-bottom) -100vmax
|
|
57440
|
-
);
|
|
57441
|
-
|
|
57442
|
-
transform: translate(0px, 0px);
|
|
57443
|
-
|
|
57444
|
-
&[aria-expanded="false"] {
|
|
57445
|
-
/* The near cut follows the travel, so it holds the area's top line at
|
|
57446
|
-
every instant (the slide family's arithmetic); the far cut starts on
|
|
57447
|
-
that same line and descends to its open place. What is on screen is
|
|
57448
|
-
the descending curtain a full slide draws, holding the top of the
|
|
57449
|
-
popup instead of its tail. */
|
|
57450
|
-
clip-path: inset(
|
|
57451
|
-
calc(var(--x-popup-cut-top) - var(--x-popup-travel-y)) -100vmax
|
|
57452
|
-
calc(100% + var(--x-popup-travel-y) - var(--x-popup-cut-top))
|
|
57453
|
-
-100vmax
|
|
57454
|
-
);
|
|
57455
|
-
transform: translate(0px, var(--x-popup-travel-y));
|
|
57456
|
-
}
|
|
57457
|
-
}
|
|
57458
57468
|
}
|
|
57459
57469
|
|
|
57460
57470
|
.navi_popover {
|
|
@@ -57703,13 +57713,6 @@ const createSwipeToClose = (side, { grip } = {}) => {
|
|
|
57703
57713
|
travelTo(sizeOf(panelEl, axis) * closeDirection, 0, restore);
|
|
57704
57714
|
return;
|
|
57705
57715
|
}
|
|
57706
|
-
// The closed style is rendered once while transitions are still off.
|
|
57707
|
-
// Where the release travel left the panel and where its closed style
|
|
57708
|
-
// puts it are the same point only for a kind that travels the panel's
|
|
57709
|
-
// full size (popup_css.js, slide-from-*); a cover kind rests a fraction
|
|
57710
|
-
// in, and handing the styles back before this frame would transition
|
|
57711
|
-
// the panel from one to the other in plain view.
|
|
57712
|
-
panelEl.getBoundingClientRect();
|
|
57713
57716
|
restore();
|
|
57714
57717
|
};
|
|
57715
57718
|
|
|
@@ -57769,16 +57772,19 @@ const translateOf = (axis, distance) =>
|
|
|
57769
57772
|
: `translate(0px, ${distance}px)`;
|
|
57770
57773
|
// The same cut the entry/exit animation makes (popup_css.js), at a distance the
|
|
57771
57774
|
// finger decides instead of a transition: the edge the popup is pushed back
|
|
57772
|
-
// through
|
|
57773
|
-
//
|
|
57775
|
+
// through, as popup_css.js placed it (--x-popup-cut-*-at-area — on the area's
|
|
57776
|
+
// edge where a band of glass lies past it, 100vmax out where the window's own
|
|
57777
|
+
// edge does the cutting), plus what has been pulled, so the cut holds that line
|
|
57774
57778
|
// while the box travels under it. The three other sides are left far outside
|
|
57775
57779
|
// the box — the pull never takes the popup past them, and cutting there would
|
|
57776
|
-
// only shave what it legitimately paints outside its own box.
|
|
57777
|
-
//
|
|
57780
|
+
// only shave what it legitimately paints outside its own box. Reading the
|
|
57781
|
+
// policy from popup_css.js rather than the rooms keeps the release travel
|
|
57782
|
+
// (a Web Animation on transform AND clip-path, two clocks) from animating a
|
|
57783
|
+
// cut the entrance would not.
|
|
57778
57784
|
const UNCUT = "-100vmax";
|
|
57779
57785
|
const clipOf = (side, distance) => {
|
|
57780
57786
|
const pulled = distance < 0 ? -distance : distance;
|
|
57781
|
-
const cut = `calc(
|
|
57787
|
+
const cut = `calc(var(--x-popup-cut-${side}-at-area, ${UNCUT}) + ${pulled}px)`;
|
|
57782
57788
|
if (side === "top") {
|
|
57783
57789
|
return `inset(${cut} ${UNCUT} ${UNCUT} ${UNCUT})`;
|
|
57784
57790
|
}
|
|
@@ -58529,7 +58535,7 @@ const css$E = /* css */`
|
|
|
58529
58535
|
* scroll while open (its backdrop only covers the scrollport, so scrolling
|
|
58530
58536
|
* there would reveal uncovered content); this prop extends the lock to the
|
|
58531
58537
|
* whole page. Defaults to `true` for a dialog docked by `dockedOnSmallTouchScreen`.
|
|
58532
|
-
* @param {boolean|"auto"|"fading"|"scaling"|"sliding"|"growing"|`slide-from-${string}
|
|
58538
|
+
* @param {boolean|"auto"|"fading"|"scaling"|"sliding"|"growing"|`slide-from-${string}`} [props.animation]
|
|
58533
58539
|
* - `true`/`"auto"` resolves to `"scaling"` for a centered `positionArea`,
|
|
58534
58540
|
* or a concrete `"slide-from-*"` direction otherwise. Any other explicit
|
|
58535
58541
|
* value is used as-is. `"growing"` is the odd one out: every other kind
|
|
@@ -60137,7 +60143,7 @@ const css$D = /* css */`
|
|
|
60137
60143
|
* popover so the page/container behind it can't scroll while it's open.
|
|
60138
60144
|
* @param {boolean} [props.focusCapture] - Traps Tab navigation inside the
|
|
60139
60145
|
* popover (see `focus_trap.js`).
|
|
60140
|
-
* @param {boolean|"auto"|"fading"|"scaling"|"sliding"|`slide-from-${string}
|
|
60146
|
+
* @param {boolean|"auto"|"fading"|"scaling"|"sliding"|`slide-from-${string}`} [props.animation]
|
|
60141
60147
|
* - `true`/`"auto"` resolves to a concrete `"slide-from-*"` direction
|
|
60142
60148
|
* based on `positionArea`. Any other explicit value is used as-is.
|
|
60143
60149
|
* @param {string} [props.animationDuration] - Maps to
|
|
@@ -61477,7 +61483,7 @@ const css$C = /* css */`@layer navi {
|
|
|
61477
61483
|
* identically): the wash the backdrop paints over what is behind.
|
|
61478
61484
|
* @param {string} [props.backdropFilter] - Forwarded as-is: what that wash
|
|
61479
61485
|
* does to the picture underneath, `"blur(4px)"` and the like.
|
|
61480
|
-
* @param {boolean|"auto"|"fading"|"scaling"|"sliding"|"expanding"|`slide-from-${string}
|
|
61486
|
+
* @param {boolean|"auto"|"fading"|"scaling"|"sliding"|"expanding"|`slide-from-${string}`|`expand-${string}`} [props.animation]
|
|
61481
61487
|
* - Forwarded as-is.
|
|
61482
61488
|
* @param {string} [props.animationDuration] - Forwarded as-is.
|
|
61483
61489
|
* @param {string} [props.maxWidth] - Forwarded as-is to both; also read
|
|
@@ -83177,12 +83183,6 @@ const ViewportLayout = props => {
|
|
|
83177
83183
|
};
|
|
83178
83184
|
|
|
83179
83185
|
installImportMetaCssBuild(import.meta);
|
|
83180
|
-
const ANIMATION_BY_SIDE = {
|
|
83181
|
-
left: "slide-from-left",
|
|
83182
|
-
right: "slide-from-right",
|
|
83183
|
-
top: "cover-from-top",
|
|
83184
|
-
bottom: "slide-from-bottom"
|
|
83185
|
-
};
|
|
83186
83186
|
const css = /* css */`.navi_side_panel {
|
|
83187
83187
|
--popup-border-radius: 0px;
|
|
83188
83188
|
--popup-animation-duration: .3s;
|
|
@@ -83350,11 +83350,9 @@ const css = /* css */`.navi_side_panel {
|
|
|
83350
83350
|
* @param {boolean|"fading"} [props.animation] - Off by default (unlike
|
|
83351
83351
|
* `Dialog`/`Popover` themselves) — SidePanel is commonly toggled instead
|
|
83352
83352
|
* of opened/closed as a one-off, where a slide transition is more often
|
|
83353
|
-
* undesired noise than not. `true`
|
|
83354
|
-
* `
|
|
83355
|
-
*
|
|
83356
|
-
* why the top differs. `"fading"` is the other common choice. Other values
|
|
83357
|
-
* are forwarded as-is but not a documented/encouraged part of this
|
|
83353
|
+
* undesired noise than not. `true` slides in from `side`
|
|
83354
|
+
* (`slide-from-<side>`); `"fading"` is the other common choice. Other
|
|
83355
|
+
* values are forwarded as-is but not a documented/encouraged part of this
|
|
83358
83356
|
* component's own API.
|
|
83359
83357
|
* @param {boolean} [props.closeOnClickOutside=false] - `false` (default):
|
|
83360
83358
|
* maps to `pointerInteractionOutsideEffect="none"` — in popover mode, no
|
|
@@ -83425,7 +83423,7 @@ const SidePanel = ({
|
|
|
83425
83423
|
// Dialog's own default gap with the container.
|
|
83426
83424
|
,
|
|
83427
83425
|
marginWithContainer: 0,
|
|
83428
|
-
animation: animation === true ?
|
|
83426
|
+
animation: animation === true ? `slide-from-${side}` : animation,
|
|
83429
83427
|
pointerInteractionOutsideEffect: closeOnClickOutside ? "close" : "none",
|
|
83430
83428
|
focusCapture: closeOnClickOutside,
|
|
83431
83429
|
minWidth: toCssLength(minWidth),
|