@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/jsenv_navi.js
CHANGED
|
@@ -26152,9 +26152,10 @@ const setupBrowserIntegrationViaHistory = ({
|
|
|
26152
26152
|
const {
|
|
26153
26153
|
reason,
|
|
26154
26154
|
navigationType, // "load", "reload", "replace", "push", "traverse"
|
|
26155
|
-
state,
|
|
26156
26155
|
redirected,
|
|
26156
|
+
landOn,
|
|
26157
26157
|
} = options;
|
|
26158
|
+
let { state } = options;
|
|
26158
26159
|
|
|
26159
26160
|
// Where the entry being reached stands in this document's own stack —
|
|
26160
26161
|
// decided before the state that carries it is built (see
|
|
@@ -26182,7 +26183,22 @@ const setupBrowserIntegrationViaHistory = ({
|
|
|
26182
26183
|
} else {
|
|
26183
26184
|
// traverse / reload: state comes from the history entry, no push/replace needed.
|
|
26184
26185
|
markUrlAsVisited(url);
|
|
26185
|
-
if (
|
|
26186
|
+
if (landOn) {
|
|
26187
|
+
// The entry the back landed on, written over where it stands with
|
|
26188
|
+
// what must outlive the popped one (see navBack's `landOn`) — before
|
|
26189
|
+
// the routes read anything, so the only address they ever see is the
|
|
26190
|
+
// one being kept.
|
|
26191
|
+
state = resolveEffectiveDocumentState(landOn.state, {
|
|
26192
|
+
navigationType: "replace",
|
|
26193
|
+
currentState: state,
|
|
26194
|
+
sharedState: {
|
|
26195
|
+
jsenv_visited_urls: Array.from(visitedUrlSet),
|
|
26196
|
+
[NAV_DEPTH_STATE_KEY]: getNavDepth(),
|
|
26197
|
+
},
|
|
26198
|
+
});
|
|
26199
|
+
window.history.replaceState(state, null, url);
|
|
26200
|
+
rememberEntryIsOfThisDocument();
|
|
26201
|
+
} else if (redirected) {
|
|
26186
26202
|
// The entry the browser is on names an address that only sends
|
|
26187
26203
|
// elsewhere — a cold load on it, or a back into it. Written over where
|
|
26188
26204
|
// it stands (the entry keeps its place in the stack, hence its state
|
|
@@ -26346,6 +26362,17 @@ const setupBrowserIntegrationViaHistory = ({
|
|
|
26346
26362
|
window.addEventListener("popstate", (popstateEvent) => {
|
|
26347
26363
|
const url = window.location.href;
|
|
26348
26364
|
const state = popstateEvent.state;
|
|
26365
|
+
const landOn = landOnPending;
|
|
26366
|
+
landOnPending = null;
|
|
26367
|
+
if (landOn) {
|
|
26368
|
+
handleRoutingTask(landOn.url, {
|
|
26369
|
+
reason: `"popstate" event for ${url}, landing on ${landOn.url}`,
|
|
26370
|
+
navigationType: "traverse",
|
|
26371
|
+
state,
|
|
26372
|
+
landOn,
|
|
26373
|
+
});
|
|
26374
|
+
return;
|
|
26375
|
+
}
|
|
26349
26376
|
handleRoutingTask(url, {
|
|
26350
26377
|
reason: `"popstate" event for ${url}`,
|
|
26351
26378
|
navigationType: "traverse",
|
|
@@ -26387,7 +26414,11 @@ const setupBrowserIntegrationViaHistory = ({
|
|
|
26387
26414
|
});
|
|
26388
26415
|
};
|
|
26389
26416
|
|
|
26390
|
-
|
|
26417
|
+
// What the next "popstate" writes over the entry it lands on, when a back
|
|
26418
|
+
// asked for it (see navBack's `landOn`). Read by the popstate listener,
|
|
26419
|
+
// which is the one place the landing is applied.
|
|
26420
|
+
let landOnPending = null;
|
|
26421
|
+
const navBack = ({ fallback, landOn } = {}) => {
|
|
26391
26422
|
if (canNavBackSignal.peek()) {
|
|
26392
26423
|
// Resolved once the back has landed: the "popstate" it is answered with
|
|
26393
26424
|
// reaches the routing listener first (registered at setup, before this
|
|
@@ -26398,6 +26429,7 @@ const setupBrowserIntegrationViaHistory = ({
|
|
|
26398
26429
|
once: true,
|
|
26399
26430
|
});
|
|
26400
26431
|
});
|
|
26432
|
+
landOnPending = landOn || null;
|
|
26401
26433
|
window.history.back();
|
|
26402
26434
|
return landedPromise;
|
|
26403
26435
|
}
|
|
@@ -26600,6 +26632,12 @@ const reload = browserIntegration.reload;
|
|
|
26600
26632
|
* Where to land when there is nothing of this document behind. It takes the
|
|
26601
26633
|
* place of the current entry rather than stacking on it. Without it, a
|
|
26602
26634
|
* navBack() with nowhere to go does nothing.
|
|
26635
|
+
* @param {{ url: string, state?: object }} [options.landOn]
|
|
26636
|
+
* What the entry the back lands on reads once landed: its url, and its state
|
|
26637
|
+
* (`undefined` keeps the state it has). Written over that entry within the
|
|
26638
|
+
* back's own navigation, so the routes never see the entry as it was — the
|
|
26639
|
+
* way a screen closed over a url keeps what was written to the url while it
|
|
26640
|
+
* was open (see useNavState's leave()).
|
|
26603
26641
|
* @returns {Promise<boolean>|undefined}
|
|
26604
26642
|
* When there is something to go back to: a promise resolved once the back
|
|
26605
26643
|
* has landed and been applied (`true` — the document url and state say
|
|
@@ -26691,10 +26729,13 @@ const useNavStateBasic = (
|
|
|
26691
26729
|
// Both push-mode closes pop the pushed entry. A keep-close that merely
|
|
26692
26730
|
// rewrote it in place would leave two entries describing the same closed
|
|
26693
26731
|
// screen — same url, same state — and the next back press would appear to do
|
|
26694
|
-
// nothing. So the keep path goes back like the cancel does,
|
|
26695
|
-
//
|
|
26696
|
-
//
|
|
26697
|
-
//
|
|
26732
|
+
// nothing. So the keep path goes back like the cancel does, with what must
|
|
26733
|
+
// be kept written onto the entry the back lands on, in the same navigation:
|
|
26734
|
+
// a route param written while the state was entered is in the url being
|
|
26735
|
+
// kept, and a routing pass reading the entry behind as it was would take
|
|
26736
|
+
// that param for gone. Only with nothing of this document behind (the state
|
|
26737
|
+
// was entered on a cold-loaded url, navBack has nowhere to go) does it
|
|
26738
|
+
// rewrite in place.
|
|
26698
26739
|
const leave = ({ isBack } = {}) => {
|
|
26699
26740
|
enteredRef.current = false;
|
|
26700
26741
|
const currentStateCopy = browserIntegration.getDocumentState() || {};
|
|
@@ -26706,13 +26747,9 @@ const useNavStateBasic = (
|
|
|
26706
26747
|
browserIntegration.navBack();
|
|
26707
26748
|
return;
|
|
26708
26749
|
}
|
|
26709
|
-
const urlToKeep = window.location.href;
|
|
26710
26750
|
delete currentStateCopy[id];
|
|
26711
|
-
browserIntegration.navBack(
|
|
26712
|
-
|
|
26713
|
-
return;
|
|
26714
|
-
}
|
|
26715
|
-
navTo(urlToKeep, { replace: true, state: currentStateCopy });
|
|
26751
|
+
browserIntegration.navBack({
|
|
26752
|
+
landOn: { url: window.location.href, state: currentStateCopy },
|
|
26716
26753
|
});
|
|
26717
26754
|
return;
|
|
26718
26755
|
}
|
|
@@ -45007,16 +45044,7 @@ const writeOpenedInSignal = (signal, opened, event) => {
|
|
|
45007
45044
|
return;
|
|
45008
45045
|
}
|
|
45009
45046
|
writeInSignal(signal, false, { history: "replace" });
|
|
45010
|
-
|
|
45011
|
-
navBack().then((landed) => {
|
|
45012
|
-
if (!landed) {
|
|
45013
|
-
return;
|
|
45014
|
-
}
|
|
45015
|
-
// Often nothing at all: with no other write made while the popup was
|
|
45016
|
-
// open, the entry landed on already reads urlToKeep and navTo skips
|
|
45017
|
-
// the navigation entirely.
|
|
45018
|
-
navTo(urlToKeep, { replace: true });
|
|
45019
|
-
});
|
|
45047
|
+
navBack({ landOn: { url: window.location.href } });
|
|
45020
45048
|
return;
|
|
45021
45049
|
}
|
|
45022
45050
|
writeInSignal(signal, false, { history: "replace" });
|
|
@@ -56485,8 +56513,7 @@ const getAvailableWidth = (layer, element) => {
|
|
|
56485
56513
|
* so any consumer can override it per-instance from CSS (or via the
|
|
56486
56514
|
* `animationDuration` prop, wired to --popup-animation-duration through
|
|
56487
56515
|
* Box's styleCSSVars) without touching this file: `--popup-animation-duration`,
|
|
56488
|
-
* `--popup-scale-from`, `--popup-
|
|
56489
|
-
* `slide-from-*`'s own
|
|
56516
|
+
* `--popup-scale-from`, `--popup-border-radius`. `slide-from-*`'s own
|
|
56490
56517
|
* 100%-of-own-size distance is hardcoded for now rather than exposed as a
|
|
56491
56518
|
* variable — fine to revisit if a consumer ever needs to override it.
|
|
56492
56519
|
*
|
|
@@ -56524,21 +56551,23 @@ const getAvailableWidth = (layer, element) => {
|
|
|
56524
56551
|
* so it slides in instead. The word names *where it comes from*: placed
|
|
56525
56552
|
* "top" (a point/corner), it slides in from the top.
|
|
56526
56553
|
*
|
|
56527
|
-
* `
|
|
56528
|
-
*
|
|
56529
|
-
*
|
|
56530
|
-
*
|
|
56531
|
-
*
|
|
56532
|
-
*
|
|
56533
|
-
*
|
|
56534
|
-
*
|
|
56535
|
-
*
|
|
56536
|
-
*
|
|
56537
|
-
*
|
|
56538
|
-
*
|
|
56539
|
-
*
|
|
56540
|
-
*
|
|
56541
|
-
*
|
|
56554
|
+
* The cut is a `clip-path`, and a `clip-path` is painted by the main thread
|
|
56555
|
+
* while the `transform` it has to keep pace with runs on the compositor. Two
|
|
56556
|
+
* clocks: a busy frame — the one that mounts a full-screen panel's content is
|
|
56557
|
+
* exactly that — lets the box travel while the cut stands still, and the
|
|
56558
|
+
* popup is then revealed from the WRONG edge once the thread catches up
|
|
56559
|
+
* (measured by wematch, 2026-09-06: no panel at all for 120ms, then a panel
|
|
56560
|
+
* with its head missing, then the head arriving from below). So the cut is
|
|
56561
|
+
* taken only where it hides something the screen would otherwise show — the
|
|
56562
|
+
* band of glass beside an app narrowed with --navi-app-max-width — and is a
|
|
56563
|
+
* constant everywhere else: at layer="top" the viewport's own edge cuts the
|
|
56564
|
+
* travel on the compositor for free, and at layer="local" the clip wrapper
|
|
56565
|
+
* (a static ancestor, overflow: hidden) does. Where a band exists the cut
|
|
56566
|
+
* still animates and still can drift under load; the full answer there is a
|
|
56567
|
+
* static frame clipped at the band with the travel on an inner element, which
|
|
56568
|
+
* is a restructuring of the popup's box (the visual box, the shadow, the
|
|
56569
|
+
* placement translate, the swipe all move to the inner element), not taken.
|
|
56570
|
+
* See .agents/skills/animations/SKILL.md, "One clock per movement".
|
|
56542
56571
|
*
|
|
56543
56572
|
* `animation="expand-*"` (a real anchor only, explicit opt-in — "scaling"
|
|
56544
56573
|
* reads better overall, see popover.jsx's top comment): grows out of the
|
|
@@ -56565,7 +56594,6 @@ const popupCss = /* css */ `
|
|
|
56565
56594
|
.navi_dialog {
|
|
56566
56595
|
--popup-animation-duration: 0.18s;
|
|
56567
56596
|
--popup-scale-from: 0.9;
|
|
56568
|
-
--popup-cover-travel: 24px;
|
|
56569
56597
|
|
|
56570
56598
|
--popup-opacity-duration: var(--popup-animation-duration);
|
|
56571
56599
|
--popup-translate-duration: var(--popup-animation-duration);
|
|
@@ -56582,11 +56610,11 @@ const popupCss = /* css */ `
|
|
|
56582
56610
|
(no shared transition-property to clobber, no propertyName to filter).
|
|
56583
56611
|
What moves here is transform, which composes under it. */
|
|
56584
56612
|
&[navi-animation] {
|
|
56585
|
-
/* clip-path takes the translate's own duration
|
|
56586
|
-
|
|
56587
|
-
|
|
56588
|
-
|
|
56589
|
-
|
|
56613
|
+
/* clip-path takes the translate's own duration, for the one cut that
|
|
56614
|
+
still moves (a band of glass beside the app — see this file's top
|
|
56615
|
+
comment for why every other cut is a constant). A constant cut, or a
|
|
56616
|
+
kind that sets none, has the same value on both sides of the change,
|
|
56617
|
+
which costs nothing. */
|
|
56590
56618
|
transition-property:
|
|
56591
56619
|
display, overlay, opacity, transform, scale, box-shadow, clip-path;
|
|
56592
56620
|
transition-duration:
|
|
@@ -56596,31 +56624,46 @@ const popupCss = /* css */ `
|
|
|
56596
56624
|
var(--popup-translate-duration);
|
|
56597
56625
|
transition-timing-function: ease;
|
|
56598
56626
|
transition-behavior: allow-discrete;
|
|
56627
|
+
}
|
|
56599
56628
|
|
|
56600
|
-
|
|
56601
|
-
|
|
56602
|
-
|
|
56603
|
-
|
|
56604
|
-
|
|
56605
|
-
|
|
56606
|
-
|
|
56607
|
-
|
|
56608
|
-
|
|
56609
|
-
|
|
56610
|
-
|
|
56611
|
-
|
|
56612
|
-
|
|
56613
|
-
|
|
56614
|
-
|
|
56615
|
-
|
|
56616
|
-
|
|
56617
|
-
|
|
56618
|
-
|
|
56619
|
-
|
|
56620
|
-
)
|
|
56621
|
-
|
|
56622
|
-
|
|
56623
|
-
|
|
56629
|
+
/* Where a travel may be cut, per side, in the popup's own coordinates.
|
|
56630
|
+
--container-position-room-* is how far past each of its own edges the
|
|
56631
|
+
popup may still paint before reaching the edge of the area it was placed
|
|
56632
|
+
in (applyNewPosition in @jsenv/dom), so the negated value puts a cut ON
|
|
56633
|
+
that edge; the rooms floor at 0, so the popup itself is never cut. Read
|
|
56634
|
+
by the slide family below and by swipe_to_close.js.
|
|
56635
|
+
|
|
56636
|
+
The cut is taken only where that edge is NOT the window's own: past the
|
|
56637
|
+
area lies a band of glass (an app narrowed with --navi-app-max-width, a
|
|
56638
|
+
keyboard — layout/safe_area.js), and the band is what the cut hides.
|
|
56639
|
+
Where the band is 0 the window's edge already hides the travel, on the
|
|
56640
|
+
compositor, and the cut is pushed 100vmax out instead: the min() term is
|
|
56641
|
+
0 for a 0 band and 100vmax for any other, a step written without a
|
|
56642
|
+
branch. See this file's top comment for why an animated cut has to be
|
|
56643
|
+
that rare. */
|
|
56644
|
+
--x-popup-cut-top-at-area: calc(
|
|
56645
|
+
-1 * var(--container-position-room-top, 100vmax) - 100vmax +
|
|
56646
|
+
min(100vmax, var(--navi-app-inset-top, 0px) * 1000000)
|
|
56647
|
+
);
|
|
56648
|
+
--x-popup-cut-right-at-area: calc(
|
|
56649
|
+
-1 * var(--container-position-room-right, 100vmax) - 100vmax +
|
|
56650
|
+
min(100vmax, var(--navi-app-inset-right, 0px) * 1000000)
|
|
56651
|
+
);
|
|
56652
|
+
--x-popup-cut-bottom-at-area: calc(
|
|
56653
|
+
-1 * var(--container-position-room-bottom, 100vmax) - 100vmax +
|
|
56654
|
+
min(100vmax, var(--navi-app-inset-bottom, 0px) * 1000000)
|
|
56655
|
+
);
|
|
56656
|
+
--x-popup-cut-left-at-area: calc(
|
|
56657
|
+
-1 * var(--container-position-room-left, 100vmax) - 100vmax +
|
|
56658
|
+
min(100vmax, var(--navi-app-inset-left, 0px) * 1000000)
|
|
56659
|
+
);
|
|
56660
|
+
/* A local popup is clipped by its clip wrapper (a static ancestor sized to
|
|
56661
|
+
the container, overflow: hidden): nothing is left for a cut to hide. */
|
|
56662
|
+
&[data-layer="local"] {
|
|
56663
|
+
--x-popup-cut-top-at-area: -100vmax;
|
|
56664
|
+
--x-popup-cut-right-at-area: -100vmax;
|
|
56665
|
+
--x-popup-cut-bottom-at-area: -100vmax;
|
|
56666
|
+
--x-popup-cut-left-at-area: -100vmax;
|
|
56624
56667
|
}
|
|
56625
56668
|
|
|
56626
56669
|
/* box-shadow fades in/out alongside any animation kind, instead of
|
|
@@ -56744,39 +56787,6 @@ const popupCss = /* css */ `
|
|
|
56744
56787
|
}
|
|
56745
56788
|
}
|
|
56746
56789
|
|
|
56747
|
-
/* cover — a top-docked popup unrolling from the top edge of its area (see
|
|
56748
|
-
this file's top comment): the cut does the reveal, the box travels
|
|
56749
|
-
--popup-cover-travel, a length. The far cut sits where the
|
|
56750
|
-
popup's shadow ends (--navi-popup-box-shadow reaches about 50px) or
|
|
56751
|
-
where the room does, whichever is nearer, so the reveal finishes on
|
|
56752
|
-
the box and its shadow at the pace of the box's own settle. On the
|
|
56753
|
-
box's own edge it would shave the shadow off for good; on a distant
|
|
56754
|
-
container edge it would run far ahead of the box. */
|
|
56755
|
-
&[navi-animation="cover-from-top"] {
|
|
56756
|
-
opacity: 1;
|
|
56757
|
-
--x-popup-cut-top: var(--x-popup-cut-top-at-area);
|
|
56758
|
-
--x-popup-cut-bottom: max(var(--x-popup-cut-bottom-at-area), -60px);
|
|
56759
|
-
--x-popup-travel-y: calc(-1 * var(--popup-cover-travel));
|
|
56760
|
-
clip-path: inset(
|
|
56761
|
-
var(--x-popup-cut-top) -100vmax var(--x-popup-cut-bottom) -100vmax
|
|
56762
|
-
);
|
|
56763
|
-
|
|
56764
|
-
transform: translate(0px, 0px);
|
|
56765
|
-
|
|
56766
|
-
&[aria-expanded="false"] {
|
|
56767
|
-
/* The near cut follows the travel, so it holds the area's top line at
|
|
56768
|
-
every instant (the slide family's arithmetic); the far cut starts on
|
|
56769
|
-
that same line and descends to its open place. What is on screen is
|
|
56770
|
-
the descending curtain a full slide draws, holding the top of the
|
|
56771
|
-
popup instead of its tail. */
|
|
56772
|
-
clip-path: inset(
|
|
56773
|
-
calc(var(--x-popup-cut-top) - var(--x-popup-travel-y)) -100vmax
|
|
56774
|
-
calc(100% + var(--x-popup-travel-y) - var(--x-popup-cut-top))
|
|
56775
|
-
-100vmax
|
|
56776
|
-
);
|
|
56777
|
-
transform: translate(0px, var(--x-popup-travel-y));
|
|
56778
|
-
}
|
|
56779
|
-
}
|
|
56780
56790
|
}
|
|
56781
56791
|
|
|
56782
56792
|
.navi_popover {
|
|
@@ -57025,13 +57035,6 @@ const createSwipeToClose = (side, { grip } = {}) => {
|
|
|
57025
57035
|
travelTo(sizeOf(panelEl, axis) * closeDirection, 0, restore);
|
|
57026
57036
|
return;
|
|
57027
57037
|
}
|
|
57028
|
-
// The closed style is rendered once while transitions are still off.
|
|
57029
|
-
// Where the release travel left the panel and where its closed style
|
|
57030
|
-
// puts it are the same point only for a kind that travels the panel's
|
|
57031
|
-
// full size (popup_css.js, slide-from-*); a cover kind rests a fraction
|
|
57032
|
-
// in, and handing the styles back before this frame would transition
|
|
57033
|
-
// the panel from one to the other in plain view.
|
|
57034
|
-
panelEl.getBoundingClientRect();
|
|
57035
57038
|
restore();
|
|
57036
57039
|
};
|
|
57037
57040
|
|
|
@@ -57091,16 +57094,19 @@ const translateOf = (axis, distance) =>
|
|
|
57091
57094
|
: `translate(0px, ${distance}px)`;
|
|
57092
57095
|
// The same cut the entry/exit animation makes (popup_css.js), at a distance the
|
|
57093
57096
|
// finger decides instead of a transition: the edge the popup is pushed back
|
|
57094
|
-
// through
|
|
57095
|
-
//
|
|
57097
|
+
// through, as popup_css.js placed it (--x-popup-cut-*-at-area — on the area's
|
|
57098
|
+
// edge where a band of glass lies past it, 100vmax out where the window's own
|
|
57099
|
+
// edge does the cutting), plus what has been pulled, so the cut holds that line
|
|
57096
57100
|
// while the box travels under it. The three other sides are left far outside
|
|
57097
57101
|
// the box — the pull never takes the popup past them, and cutting there would
|
|
57098
|
-
// only shave what it legitimately paints outside its own box.
|
|
57099
|
-
//
|
|
57102
|
+
// only shave what it legitimately paints outside its own box. Reading the
|
|
57103
|
+
// policy from popup_css.js rather than the rooms keeps the release travel
|
|
57104
|
+
// (a Web Animation on transform AND clip-path, two clocks) from animating a
|
|
57105
|
+
// cut the entrance would not.
|
|
57100
57106
|
const UNCUT = "-100vmax";
|
|
57101
57107
|
const clipOf = (side, distance) => {
|
|
57102
57108
|
const pulled = distance < 0 ? -distance : distance;
|
|
57103
|
-
const cut = `calc(
|
|
57109
|
+
const cut = `calc(var(--x-popup-cut-${side}-at-area, ${UNCUT}) + ${pulled}px)`;
|
|
57104
57110
|
if (side === "top") {
|
|
57105
57111
|
return `inset(${cut} ${UNCUT} ${UNCUT} ${UNCUT})`;
|
|
57106
57112
|
}
|
|
@@ -57851,7 +57857,7 @@ const css$E = /* css */`
|
|
|
57851
57857
|
* scroll while open (its backdrop only covers the scrollport, so scrolling
|
|
57852
57858
|
* there would reveal uncovered content); this prop extends the lock to the
|
|
57853
57859
|
* whole page. Defaults to `true` for a dialog docked by `dockedOnSmallTouchScreen`.
|
|
57854
|
-
* @param {boolean|"auto"|"fading"|"scaling"|"sliding"|"growing"|`slide-from-${string}
|
|
57860
|
+
* @param {boolean|"auto"|"fading"|"scaling"|"sliding"|"growing"|`slide-from-${string}`} [props.animation]
|
|
57855
57861
|
* - `true`/`"auto"` resolves to `"scaling"` for a centered `positionArea`,
|
|
57856
57862
|
* or a concrete `"slide-from-*"` direction otherwise. Any other explicit
|
|
57857
57863
|
* value is used as-is. `"growing"` is the odd one out: every other kind
|
|
@@ -59450,7 +59456,7 @@ const css$D = /* css */`
|
|
|
59450
59456
|
* popover so the page/container behind it can't scroll while it's open.
|
|
59451
59457
|
* @param {boolean} [props.focusCapture] - Traps Tab navigation inside the
|
|
59452
59458
|
* popover (see `focus_trap.js`).
|
|
59453
|
-
* @param {boolean|"auto"|"fading"|"scaling"|"sliding"|`slide-from-${string}
|
|
59459
|
+
* @param {boolean|"auto"|"fading"|"scaling"|"sliding"|`slide-from-${string}`} [props.animation]
|
|
59454
59460
|
* - `true`/`"auto"` resolves to a concrete `"slide-from-*"` direction
|
|
59455
59461
|
* based on `positionArea`. Any other explicit value is used as-is.
|
|
59456
59462
|
* @param {string} [props.animationDuration] - Maps to
|
|
@@ -60784,7 +60790,7 @@ const css$C = /* css */`@layer navi {
|
|
|
60784
60790
|
* identically): the wash the backdrop paints over what is behind.
|
|
60785
60791
|
* @param {string} [props.backdropFilter] - Forwarded as-is: what that wash
|
|
60786
60792
|
* does to the picture underneath, `"blur(4px)"` and the like.
|
|
60787
|
-
* @param {boolean|"auto"|"fading"|"scaling"|"sliding"|"expanding"|`slide-from-${string}
|
|
60793
|
+
* @param {boolean|"auto"|"fading"|"scaling"|"sliding"|"expanding"|`slide-from-${string}`|`expand-${string}`} [props.animation]
|
|
60788
60794
|
* - Forwarded as-is.
|
|
60789
60795
|
* @param {string} [props.animationDuration] - Forwarded as-is.
|
|
60790
60796
|
* @param {string} [props.maxWidth] - Forwarded as-is to both; also read
|
|
@@ -81959,12 +81965,6 @@ const ViewportLayout = props => {
|
|
|
81959
81965
|
};
|
|
81960
81966
|
|
|
81961
81967
|
installImportMetaCssBuild(import.meta);
|
|
81962
|
-
const ANIMATION_BY_SIDE = {
|
|
81963
|
-
left: "slide-from-left",
|
|
81964
|
-
right: "slide-from-right",
|
|
81965
|
-
top: "cover-from-top",
|
|
81966
|
-
bottom: "slide-from-bottom"
|
|
81967
|
-
};
|
|
81968
81968
|
const css = /* css */`.navi_side_panel {
|
|
81969
81969
|
--popup-border-radius: 0px;
|
|
81970
81970
|
--popup-animation-duration: .3s;
|
|
@@ -82132,11 +82132,9 @@ const css = /* css */`.navi_side_panel {
|
|
|
82132
82132
|
* @param {boolean|"fading"} [props.animation] - Off by default (unlike
|
|
82133
82133
|
* `Dialog`/`Popover` themselves) — SidePanel is commonly toggled instead
|
|
82134
82134
|
* of opened/closed as a one-off, where a slide transition is more often
|
|
82135
|
-
* undesired noise than not. `true`
|
|
82136
|
-
* `
|
|
82137
|
-
*
|
|
82138
|
-
* why the top differs. `"fading"` is the other common choice. Other values
|
|
82139
|
-
* are forwarded as-is but not a documented/encouraged part of this
|
|
82135
|
+
* undesired noise than not. `true` slides in from `side`
|
|
82136
|
+
* (`slide-from-<side>`); `"fading"` is the other common choice. Other
|
|
82137
|
+
* values are forwarded as-is but not a documented/encouraged part of this
|
|
82140
82138
|
* component's own API.
|
|
82141
82139
|
* @param {boolean} [props.closeOnClickOutside=false] - `false` (default):
|
|
82142
82140
|
* maps to `pointerInteractionOutsideEffect="none"` — in popover mode, no
|
|
@@ -82207,7 +82205,7 @@ const SidePanel = ({
|
|
|
82207
82205
|
// Dialog's own default gap with the container.
|
|
82208
82206
|
,
|
|
82209
82207
|
marginWithContainer: 0,
|
|
82210
|
-
animation: animation === true ?
|
|
82208
|
+
animation: animation === true ? `slide-from-${side}` : animation,
|
|
82211
82209
|
pointerInteractionOutsideEffect: closeOnClickOutside ? "close" : "none",
|
|
82212
82210
|
focusCapture: closeOnClickOutside,
|
|
82213
82211
|
minWidth: toCssLength(minWidth),
|