@jsenv/navi 0.29.77 → 0.29.78

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.
@@ -57395,6 +57395,28 @@ const css$w = /* css */`
57395
57395
  the corners would visually overflow the rounded corners during scroll. */
57396
57396
  overflow: hidden;
57397
57397
 
57398
+ /* overflow="visible" asks for the exact opposite of the clipping above: the
57399
+ content must be free to paint outside the list's box and to overflow into
57400
+ whatever scroll container is around it. Setting it on the inner scroll
57401
+ element alone changes nothing visible — this frame would clip it right
57402
+ back — so the frame has to let go of it too, and with it of the rounded
57403
+ corners it was clipping to. The two cannot both be true.
57404
+ An axis asked to be visible pairs with "clip" on the other one rather
57405
+ than "hidden": mixing visible with a scrollport value makes the browser
57406
+ compute the visible one to "auto" (a scrollport again), while
57407
+ visible/clip is the one pairing it keeps as written. */
57408
+ &[data-overflow-visible="both"] {
57409
+ overflow: visible;
57410
+ }
57411
+ &[data-overflow-visible="x"] {
57412
+ overflow-x: visible;
57413
+ overflow-y: clip;
57414
+ }
57415
+ &[data-overflow-visible="y"] {
57416
+ overflow-x: clip;
57417
+ overflow-y: visible;
57418
+ }
57419
+
57398
57420
  .navi_list_scroll_container {
57399
57421
  /* The ask stops here: this element is inside the list's frame, so a row
57400
57422
  or a control it holds is not at the surface's corner. */
@@ -58135,6 +58157,7 @@ const ListUI = props => {
58135
58157
  popover: popover,
58136
58158
  "data-horizontal": horizontal ? "" : undefined,
58137
58159
  "data-scroller": getScrollerAttribute(scroller),
58160
+ "data-overflow-visible": getOverflowVisibleAttribute(overflow, overflowX, overflowY),
58138
58161
  "navi-hover-while-scrolling": hoverWhileScrolling ? "" : undefined,
58139
58162
  "data-expand-x": expandX || expand ? "" : undefined,
58140
58163
  "data-expand-y": expandY || expand ? "" : undefined,
@@ -59413,6 +59436,27 @@ const getScrollerAttribute = scroller => {
59413
59436
  return "parent";
59414
59437
  };
59415
59438
 
59439
+ // overflow lands as an inline style on the inner scroll element, which is
59440
+ // enough for every value but "visible": that one only means anything once the
59441
+ // frame around it stops clipping too. Reading the per-axis props over the
59442
+ // shorthand mirrors how CSS itself resolves them.
59443
+ const getOverflowVisibleAttribute = (overflow, overflowX, overflowY) => {
59444
+ const x = overflowX === undefined ? overflow : overflowX;
59445
+ const y = overflowY === undefined ? overflow : overflowY;
59446
+ const xVisible = x === "visible";
59447
+ const yVisible = y === "visible";
59448
+ if (xVisible && yVisible) {
59449
+ return "both";
59450
+ }
59451
+ if (xVisible) {
59452
+ return "x";
59453
+ }
59454
+ if (yVisible) {
59455
+ return "y";
59456
+ }
59457
+ return undefined;
59458
+ };
59459
+
59416
59460
  // scroller="parent": the list virtualizes against the scroll box it lives in
59417
59461
  // instead of one of its own. Which box that is can only be measured, and a
59418
59462
  // measurement holds for the geometry it was taken on — see resolveScroller in