@jsenv/navi 0.29.452 → 0.29.453

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.
@@ -40077,27 +40077,34 @@ const TARGET_WAIT_MS = 1000;
40077
40077
  // covers is a render, not a fetch. Past it the popup's picture plays out on
40078
40078
  // its own.
40079
40079
  const LANDING_WAIT_MS = 300;
40080
- // The popup's own animation duration, published on the root because the
40081
- // ::view-transition tree hangs off it and inherits from nowhere else.
40080
+ // What the pictures are told — the popup's pace, the lifted card's paint, the
40081
+ // corners — is written on ::view-transition (transition_values.js), the root of
40082
+ // the pseudo-element tree they inherit from. Never on the document's root: a
40083
+ // custom property there is inherited by every element, and writing or removing
40084
+ // it restyles the whole document — at the press, again when the app reads
40085
+ // style before the first picture, and once more as the movement ends.
40086
+ //
40087
+ // The popup's own animation duration, for the pictures; the wall reads it off
40088
+ // the popup itself (dialog.jsx).
40082
40089
  const DURATION_PROPERTY = "--navi-popup-lift-duration";
40083
40090
  // The fixed bars (fixed_bar.jsx): the popup is placed in the room between
40084
40091
  // them, and the moving picture is clipped to that room on the way.
40085
40092
  const FIXED_BAR_SELECTOR = ".navi_fixed_bar";
40086
- // The paint of the lifted node, published the same way: the box wears the
40087
- // card's own background, so where it has grown past the picture it carries it
40088
- // is the card that has grown, not a picture fading into a bigger one. Read off
40089
- // the lifted node rather than the anchor: the anchor is often a bare trigger
40090
- // around the card, painting nothing of its own, while the lifted node IS the
40091
- // card — and a card does not change colour on the way.
40093
+ // The paint of the lifted node: the box wears the card's own background, so
40094
+ // where it has grown past the picture it carries it is the card that has
40095
+ // grown, not a picture fading into a bigger one. Read off the lifted node
40096
+ // rather than the anchor: the anchor is often a bare trigger around the card,
40097
+ // painting nothing of its own, while the lifted node IS the card — and a card
40098
+ // does not change colour on the way.
40092
40099
  const BACKGROUND_COLOR_PROPERTY = "--navi-popup-lift-background-color";
40093
40100
  const BACKGROUND_IMAGE_PROPERTY = "--navi-popup-lift-background-image";
40094
- // The corners of the box the movement starts from, published the same way —
40095
- // and, unlike the paint, not kept for the length of the movement: a corner is
40096
- // written per box, on purpose, the same card at two sizes not wanting the same
40097
- // round (a 6px corner stops showing on a big card). The moving box leaves with
40098
- // the corners of the box it leaves and arrives with those of the box it
40099
- // arrives on, the two authored values interpolated on the group's own clock
40100
- // (see animateMovingBox).
40101
+ // The corners of the box the movement starts from — and, unlike the paint, not
40102
+ // kept for the length of the movement: a corner is written per box, on
40103
+ // purpose, the same card at two sizes not wanting the same round (a 6px corner
40104
+ // stops showing on a big card). The moving box leaves with the corners of the
40105
+ // box it leaves and arrives with those of the box it arrives on, the two
40106
+ // authored values interpolated on the group's own clock (see
40107
+ // animateMovingBox).
40101
40108
  const BORDER_RADIUS_PROPERTY = "--navi-popup-lift-border-radius";
40102
40109
 
40103
40110
  let releaseLiftInProgress = null;
@@ -40158,11 +40165,9 @@ const liftPopupFromAnchor = (
40158
40165
  releaseLiftInProgress?.();
40159
40166
 
40160
40167
  const elementLeaving = opened ? resolveAnchor() : resolveLiftTarget(popupEl);
40161
- // Everything read about the leaving side, before the first write. A read
40162
- // brings the style up to date, and the writes below land on the root — an
40163
- // attribute or an unregistered custom property there invalidates the
40164
- // computed style of every element — so a read placed after any of them is
40165
- // the whole document's style over again. Nothing on the leaving side moves
40168
+ // Everything read about the leaving side, before the first write: a read
40169
+ // brings the style up to date, and one placed after the writes below would
40170
+ // pay for them on the spot, in the press. Nothing on the leaving side moves
40166
40171
  // before the movement, the page being held from here on.
40167
40172
  releaseScrollHold = trapScrollInside(popupEl, { backdrop: true });
40168
40173
  const duration = getComputedStyle(popupEl)
@@ -40180,9 +40185,9 @@ const liftPopupFromAnchor = (
40180
40185
  // Empty would substitute into `animation-duration:` as nothing at all,
40181
40186
  // which computes to 0s — a movement nobody sees rather than one at the
40182
40187
  // browser's own pace.
40183
- root.style.setProperty(DURATION_PROPERTY, duration);
40188
+ setTransitionValue(DURATION_PROPERTY, duration);
40184
40189
  }
40185
- root.style.setProperty(BORDER_RADIUS_PROPERTY, cornersLeaving);
40190
+ setTransitionValue(BORDER_RADIUS_PROPERTY, cornersLeaving);
40186
40191
  if (paintLeaving) {
40187
40192
  publishBoxPaint(paintLeaving);
40188
40193
  }
@@ -40209,10 +40214,10 @@ const liftPopupFromAnchor = (
40209
40214
  root.removeAttribute(ROOT_ATTRIBUTE);
40210
40215
  root.removeAttribute(KIND_ATTRIBUTE);
40211
40216
  root.removeAttribute(FIT_ATTRIBUTE);
40212
- root.style.removeProperty(DURATION_PROPERTY);
40213
- root.style.removeProperty(BORDER_RADIUS_PROPERTY);
40214
- root.style.removeProperty(BACKGROUND_COLOR_PROPERTY);
40215
- root.style.removeProperty(BACKGROUND_IMAGE_PROPERTY);
40217
+ removeTransitionValue(DURATION_PROPERTY);
40218
+ removeTransitionValue(BORDER_RADIUS_PROPERTY);
40219
+ removeTransitionValue(BACKGROUND_COLOR_PROPERTY);
40220
+ removeTransitionValue(BACKGROUND_IMAGE_PROPERTY);
40216
40221
  callLiftOverCallbacks();
40217
40222
  };
40218
40223
  releaseLiftInProgress = release;
@@ -40298,8 +40303,6 @@ const liftPopupFromAnchor = (
40298
40303
  if (lift === "box") {
40299
40304
  warnDrawingLiftedAsBox(target);
40300
40305
  }
40301
- // The last write before the transition: nothing reads between it and the
40302
- // style pass the browser makes on its own to take the first picture.
40303
40306
  publishBoxPaint(readBoxPaint(target));
40304
40307
  startMovement(reveal, () => target);
40305
40308
  };
@@ -40351,9 +40354,8 @@ const readBoxPaint = (liftedElement) => {
40351
40354
  };
40352
40355
 
40353
40356
  const publishBoxPaint = ({ backgroundColor, backgroundImage }) => {
40354
- const root = document.documentElement;
40355
- root.style.setProperty(BACKGROUND_COLOR_PROPERTY, backgroundColor);
40356
- root.style.setProperty(BACKGROUND_IMAGE_PROPERTY, backgroundImage);
40357
+ setTransitionValue(BACKGROUND_COLOR_PROPERTY, backgroundColor);
40358
+ setTransitionValue(BACKGROUND_IMAGE_PROPERTY, backgroundImage);
40357
40359
  };
40358
40360
 
40359
40361
  // The corners of a box: the first round found going down through children
@@ -66406,6 +66408,70 @@ const giveUpOnControlsHoldingPopup = (controlsHolding, reason) => {
66406
66408
  */
66407
66409
 
66408
66410
  const popupCss = /* css */ `
66411
+ /* Not inherited: what the placement writes on a popup (applyNewPosition in
66412
+ @jsenv/dom) and what the popup derives from it are read by the popup
66413
+ alone, for its own size and cut. Inherited, every element of its content
66414
+ carries a copy, and each placement restyles all of them before the first
66415
+ frame. A popup nested in another also stops reading the outer one's values
66416
+ where its own are unset. "*" keeps them untyped: var() substitutes them as
66417
+ it does an unregistered property. */
66418
+ @property --container-position-room-top {
66419
+ syntax: "*";
66420
+ inherits: false;
66421
+ }
66422
+ @property --container-position-room-right {
66423
+ syntax: "*";
66424
+ inherits: false;
66425
+ }
66426
+ @property --container-position-room-bottom {
66427
+ syntax: "*";
66428
+ inherits: false;
66429
+ }
66430
+ @property --container-position-room-left {
66431
+ syntax: "*";
66432
+ inherits: false;
66433
+ }
66434
+ @property --container-position-remaining-height {
66435
+ syntax: "*";
66436
+ inherits: false;
66437
+ }
66438
+ @property --container-position-remaining-width {
66439
+ syntax: "*";
66440
+ inherits: false;
66441
+ }
66442
+ @property --x-popup-cut-top-at-area {
66443
+ syntax: "*";
66444
+ inherits: false;
66445
+ }
66446
+ @property --x-popup-cut-right-at-area {
66447
+ syntax: "*";
66448
+ inherits: false;
66449
+ }
66450
+ @property --x-popup-cut-bottom-at-area {
66451
+ syntax: "*";
66452
+ inherits: false;
66453
+ }
66454
+ @property --x-popup-cut-left-at-area {
66455
+ syntax: "*";
66456
+ inherits: false;
66457
+ }
66458
+ @property --x-popup-cut-top {
66459
+ syntax: "*";
66460
+ inherits: false;
66461
+ }
66462
+ @property --x-popup-cut-right {
66463
+ syntax: "*";
66464
+ inherits: false;
66465
+ }
66466
+ @property --x-popup-cut-bottom {
66467
+ syntax: "*";
66468
+ inherits: false;
66469
+ }
66470
+ @property --x-popup-cut-left {
66471
+ syntax: "*";
66472
+ inherits: false;
66473
+ }
66474
+
66409
66475
  @layer navi {
66410
66476
  .navi_popover,
66411
66477
  .navi_dialog {
@@ -66420,29 +66486,6 @@ const popupCss = /* css */ `
66420
66486
 
66421
66487
  .navi_popover,
66422
66488
  .navi_dialog {
66423
- /* The translate property is deliberately absent from this list — it
66424
- carries where the popup stands, and applyNewPosition (visible_rect.js)
66425
- owns it and drives its own transition through the Web Animations API
66426
- instead of CSS, so it stays independent of whatever this list contains
66427
- (no shared transition-property to clobber, no propertyName to filter).
66428
- What moves here is transform, which composes under it. */
66429
- &[navi-animation] {
66430
- /* clip-path takes the translate's own duration, for the one cut that
66431
- still moves (a band of glass beside the app — see this file's top
66432
- comment for why every other cut is a constant). A constant cut, or a
66433
- kind that sets none, has the same value on both sides of the change,
66434
- which costs nothing. */
66435
- transition-property:
66436
- display, overlay, opacity, transform, scale, box-shadow, clip-path;
66437
- transition-duration:
66438
- var(--popup-animation-duration), var(--popup-animation-duration),
66439
- var(--popup-opacity-duration), var(--popup-translate-duration),
66440
- var(--popup-scale-duration), var(--popup-animation-duration),
66441
- var(--popup-translate-duration);
66442
- transition-timing-function: ease;
66443
- transition-behavior: allow-discrete;
66444
- }
66445
-
66446
66489
  /* Where a travel may be cut, per side, in the popup's own coordinates.
66447
66490
  --container-position-room-* is how far past each of its own edges the
66448
66491
  popup may still paint before reaching the edge of the area it was placed
@@ -66474,6 +66517,28 @@ const popupCss = /* css */ `
66474
66517
  -1 * var(--container-position-room-left, 100vmax) - 100vmax +
66475
66518
  min(100vmax, var(--navi-app-inset-left, 0px) * 1000000)
66476
66519
  );
66520
+ /* The translate property is deliberately absent from this list — it
66521
+ carries where the popup stands, and applyNewPosition (visible_rect.js)
66522
+ owns it and drives its own transition through the Web Animations API
66523
+ instead of CSS, so it stays independent of whatever this list contains
66524
+ (no shared transition-property to clobber, no propertyName to filter).
66525
+ What moves here is transform, which composes under it. */
66526
+ &[navi-animation] {
66527
+ /* clip-path takes the translate's own duration, for the one cut that
66528
+ still moves (a band of glass beside the app — see this file's top
66529
+ comment for why every other cut is a constant). A constant cut, or a
66530
+ kind that sets none, has the same value on both sides of the change,
66531
+ which costs nothing. */
66532
+ transition-property:
66533
+ display, overlay, opacity, transform, scale, box-shadow, clip-path;
66534
+ transition-duration:
66535
+ var(--popup-animation-duration), var(--popup-animation-duration),
66536
+ var(--popup-opacity-duration), var(--popup-translate-duration),
66537
+ var(--popup-scale-duration), var(--popup-animation-duration),
66538
+ var(--popup-translate-duration);
66539
+ transition-timing-function: ease;
66540
+ transition-behavior: allow-discrete;
66541
+ }
66477
66542
  /* A local popup is clipped by its clip wrapper (a static ancestor sized to
66478
66543
  the container, overflow: hidden): nothing is left for a cut to hide. */
66479
66544
  &[data-layer="local"] {
@@ -66603,7 +66668,6 @@ const popupCss = /* css */ `
66603
66668
  transform: translate(var(--x-popup-travel-x), var(--x-popup-travel-y));
66604
66669
  }
66605
66670
  }
66606
-
66607
66671
  }
66608
66672
 
66609
66673
  .navi_popover {
@@ -66968,6 +67032,62 @@ let openLocalDialogCount = 0;
66968
67032
  const css$E = /* css */`
66969
67033
  /* jsenv-css-opaque: popupCss overlaps these rules, own sheet = cascade
66970
67034
  order depending on which popup renders first. */
67035
+
67036
+ /* Not inherited: each is written on the dialog or derived there — by its
67037
+ placement (see popup_css.js for what inheriting would cost), by its
67038
+ opening (the anchor box under sizeFromAnchor, the stack order) or from the
67039
+ minWidth/maxWidth/minHeight/maxHeight props — and read by the dialog
67040
+ alone. Inherited, a dialog nested in this one would also open at this
67041
+ one's size. */
67042
+ @property --dialog-stack-order {
67043
+ syntax: "*";
67044
+ inherits: false;
67045
+ }
67046
+ @property --anchor-width {
67047
+ syntax: "*";
67048
+ inherits: false;
67049
+ }
67050
+ @property --anchor-height {
67051
+ syntax: "*";
67052
+ inherits: false;
67053
+ }
67054
+ @property --dialog-min-width {
67055
+ syntax: "*";
67056
+ inherits: false;
67057
+ }
67058
+ @property --dialog-max-width {
67059
+ syntax: "*";
67060
+ inherits: false;
67061
+ }
67062
+ @property --dialog-min-height {
67063
+ syntax: "*";
67064
+ inherits: false;
67065
+ }
67066
+ @property --dialog-max-height {
67067
+ syntax: "*";
67068
+ inherits: false;
67069
+ }
67070
+ @property --x-dialog-container-spacing {
67071
+ syntax: "*";
67072
+ inherits: false;
67073
+ }
67074
+ @property --dialog-maxmax-width {
67075
+ syntax: "*";
67076
+ inherits: false;
67077
+ }
67078
+ @property --dialog-maxmax-height {
67079
+ syntax: "*";
67080
+ inherits: false;
67081
+ }
67082
+ @property --x-dialog-max-width {
67083
+ syntax: "*";
67084
+ inherits: false;
67085
+ }
67086
+ @property --x-dialog-max-height {
67087
+ syntax: "*";
67088
+ inherits: false;
67089
+ }
67090
+
66971
67091
  @layer navi {
66972
67092
  .navi_dialog {
66973
67093
  /* Min gap between the dialog and the edges of its container. Written
@@ -67065,18 +67185,6 @@ const css$E = /* css */`
67065
67185
  --x-corner-bottom-right-radius: initial;
67066
67186
  --x-corner-bottom-left-radius: initial;
67067
67187
 
67068
- /* Sizing is per dialog: the anchor box (sizeFromAnchor) and the
67069
- minWidth/maxWidth/minHeight/maxHeight props are written inline on THIS
67070
- element, and an inline declaration wins over these resets. Without
67071
- them, a dialog nested in another dialog would inherit its parent's
67072
- inline values and open at the parent's size. */
67073
- --anchor-width: initial;
67074
- --anchor-height: initial;
67075
- --dialog-min-width: initial;
67076
- --dialog-max-width: initial;
67077
- --dialog-min-height: initial;
67078
- --dialog-max-height: initial;
67079
-
67080
67188
  /* Computed once, reused by both max-width itself and min-width's own
67081
67189
  clamp below (see its comment for why) — avoids repeating the same
67082
67190
  min(..., ...) expression twice. */
@@ -67331,7 +67439,7 @@ const css$E = /* css */`
67331
67439
  &[aria-expanded="true"]:not([navi-transitions-off])::backdrop {
67332
67440
  opacity: 1;
67333
67441
  transition-property: opacity;
67334
- transition-duration: var(--navi-popup-lift-duration, 0.25s);
67442
+ transition-duration: var(--popup-animation-duration, 0.18s);
67335
67443
  transition-timing-function: ease;
67336
67444
 
67337
67445
  @starting-style {
@@ -67514,7 +67622,7 @@ const css$E = /* css */`
67514
67622
  &[aria-expanded="true"] {
67515
67623
  opacity: 1;
67516
67624
  transition-property: opacity;
67517
- transition-duration: var(--navi-popup-lift-duration, 0.25s);
67625
+ transition-duration: var(--popup-animation-duration);
67518
67626
  transition-timing-function: ease;
67519
67627
  }
67520
67628
  }
@@ -67552,8 +67660,9 @@ const css$E = /* css */`
67552
67660
  and unpressable while the movement plays: under a modal wall at the
67553
67661
  opening, and for the popup's --popup-animation-duration at the closing. */
67554
67662
  :root[data-navi-popup-lift] {
67555
- /* The popup's own pace, published on the root by popup_lift.js because the
67556
- ::view-transition tree hangs off it and inherits from nowhere else. */
67663
+ /* The popup's own pace, published on ::view-transition by popup_lift.js:
67664
+ the pictures inherit from nowhere else. The wall reads it off the
67665
+ dialog itself (the [data-lifting] backdrop rules above). */
67557
67666
  &::view-transition-group(navi-popup-lift),
67558
67667
  &::view-transition-old(navi-popup-lift),
67559
67668
  &::view-transition-new(navi-popup-lift),
@@ -69381,6 +69490,58 @@ let openLocalPopoverCount = 0;
69381
69490
  const css$D = /* css */`
69382
69491
  /* jsenv-css-opaque: popupCss overlaps these rules, own sheet = cascade
69383
69492
  order depending on which popup renders first. */
69493
+
69494
+ /* Not inherited: each is written on the popover or derived there — by its
69495
+ placement (the anchor box included; see popup_css.js for what inheriting
69496
+ would cost), by its opening (the stack order, which the backdrop gets a
69497
+ copy of) or from the minWidth/maxWidth/minHeight/maxHeight props — and
69498
+ read by the popover alone. Inherited, a popover nested in another popup
69499
+ would also open at the outer one's size. */
69500
+ @property --popover-stack-order {
69501
+ syntax: "*";
69502
+ inherits: false;
69503
+ }
69504
+ @property --anchor-width {
69505
+ syntax: "*";
69506
+ inherits: false;
69507
+ }
69508
+ @property --anchor-height {
69509
+ syntax: "*";
69510
+ inherits: false;
69511
+ }
69512
+ @property --anchor-inner-width {
69513
+ syntax: "*";
69514
+ inherits: false;
69515
+ }
69516
+ @property --anchor-inner-height {
69517
+ syntax: "*";
69518
+ inherits: false;
69519
+ }
69520
+ @property --popover-min-width {
69521
+ syntax: "*";
69522
+ inherits: false;
69523
+ }
69524
+ @property --popover-max-width {
69525
+ syntax: "*";
69526
+ inherits: false;
69527
+ }
69528
+ @property --popover-min-height {
69529
+ syntax: "*";
69530
+ inherits: false;
69531
+ }
69532
+ @property --popover-max-height {
69533
+ syntax: "*";
69534
+ inherits: false;
69535
+ }
69536
+ @property --x-popover-max-width {
69537
+ syntax: "*";
69538
+ inherits: false;
69539
+ }
69540
+ @property --x-popover-max-height {
69541
+ syntax: "*";
69542
+ inherits: false;
69543
+ }
69544
+
69384
69545
  @layer navi {
69385
69546
  .navi_popover {
69386
69547
  /* soft: user-configurable preferred max-height. Kept as a *default*
@@ -69442,21 +69603,6 @@ const css$D = /* css */`
69442
69603
  --x-corner-bottom-right-radius: initial;
69443
69604
  --x-corner-bottom-left-radius: initial;
69444
69605
 
69445
- /* Sizing is per popover: the anchor box and the
69446
- minWidth/maxWidth/minHeight/maxHeight props are written inline on THIS
69447
- element, and an inline declaration wins over these resets. Without
69448
- them, a popover nested in another popup (or opened without an anchor
69449
- inside one sized from its own) would inherit the outer inline values
69450
- and open at the outer size. */
69451
- --anchor-width: initial;
69452
- --anchor-height: initial;
69453
- --anchor-inner-width: initial;
69454
- --anchor-inner-height: initial;
69455
- --popover-min-width: initial;
69456
- --popover-max-width: initial;
69457
- --popover-min-height: initial;
69458
- --popover-max-height: initial;
69459
-
69460
69606
  --x-popover-max-width: min(
69461
69607
  var(--popover-max-width, var(--popover-maxmax-width)),
69462
69608
  var(--container-position-remaining-width, var(--popover-maxmax-width)),
@@ -69585,10 +69731,8 @@ const css$D = /* css */`
69585
69731
  "position: absolute" above. */
69586
69732
  &[popover] {
69587
69733
  position: fixed;
69588
- /* The native top layer already gives "last shown wins" for free —
69589
- --popover-stack-order is only ever set by the custom renderer's own
69590
- openEffect, but reset here regardless in case a consumer sets the
69591
- var directly on an ancestor. */
69734
+ /* The native top layer already gives "last shown wins" for free: the
69735
+ custom renderer's stack order has no say here. */
69592
69736
  z-index: unset;
69593
69737
  padding: 0;
69594
69738