@jsenv/navi 0.29.351 → 0.29.353

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.
@@ -19680,7 +19680,22 @@ const TYPO_PROPS = {
19680
19680
  }
19681
19681
  return lineClampStyles(value);
19682
19682
  },
19683
- textAlign: PASS_THROUGH,
19683
+ /* A sized inline Box (a Text with a width) is a flex row the caller did not
19684
+ ask for, where the text runs are one anonymous item sized to their content:
19685
+ text-align alone moves nothing, the item is placed by justify-content. A
19686
+ flex row asked for keeps the two apart (Picker: textAlign is the text in
19687
+ the value slot, justify-content the slots). alignX, when given, wins. */
19688
+ textAlign: (value, { flexFromSize, remainingProps }) => {
19689
+ if (
19690
+ flexFromSize &&
19691
+ value !== "justify" &&
19692
+ remainingProps.alignX === undefined &&
19693
+ remainingProps.align === undefined
19694
+ ) {
19695
+ return { textAlign: value, justifyContent: value };
19696
+ }
19697
+ return { textAlign: value };
19698
+ },
19684
19699
  textBox: PASS_THROUGH,
19685
19700
  textBoxTrim: PASS_THROUGH,
19686
19701
  textBoxEdge: PASS_THROUGH,
@@ -22294,8 +22309,12 @@ const computeBox = (props, parentBoxFlow) => {
22294
22309
  block = true;
22295
22310
  }
22296
22311
  }
22312
+ // An inline box ignores width/height, so a sized one becomes a flex row the
22313
+ // caller never asked for; textAlign reads that (see box_style_util.js).
22314
+ let flexFromSize = false;
22297
22315
  if (inline && (rest.width !== undefined || rest.height !== undefined) && flex === undefined) {
22298
22316
  flex = "x";
22317
+ flexFromSize = true;
22299
22318
  }
22300
22319
  let boxFlow;
22301
22320
  if (inline) {
@@ -22389,6 +22408,7 @@ const computeBox = (props, parentBoxFlow) => {
22389
22408
  const styleContext = {
22390
22409
  parentBoxFlow,
22391
22410
  boxFlow,
22411
+ flexFromSize,
22392
22412
  styleCSSVars,
22393
22413
  pseudoState: innerPseudoState,
22394
22414
  pseudoClasses,
@@ -67812,6 +67832,7 @@ const css$x = /* css */`@layer navi {
67812
67832
 
67813
67833
  &[data-scroller="document"] {
67814
67834
  --x-list-group-label-top: var(--navi-safe-area-inset-top);
67835
+ --x-list-group-label-left: var(--navi-safe-area-inset-left);
67815
67836
  }
67816
67837
 
67817
67838
  &[data-expand-x] {
@@ -68077,7 +68098,6 @@ const css$x = /* css */`@layer navi {
68077
68098
 
68078
68099
  & .navi_list_item {
68079
68100
  scroll-margin-top: calc(var(--x-list-scroll-spacing-top) + var(--list-group-label-height, 0px));
68080
- scroll-margin-left: calc(var(--x-list-scroll-spacing-left) + var(--list-group-label-width, 0px));
68081
68101
  }
68082
68102
  }
68083
68103
 
@@ -68086,6 +68106,21 @@ const css$x = /* css */`@layer navi {
68086
68106
  }
68087
68107
  }
68088
68108
 
68109
+ .navi_list_container[data-horizontal] > .navi_list_scroll_container > .navi_list > .navi_list_item_group {
68110
+ min-width: auto;
68111
+ max-width: none;
68112
+
68113
+ & > .navi_list_item_group_label {
68114
+ top: auto;
68115
+ left: var(--list-group-label-left, var(--x-list-group-label-left, 0px));
68116
+ }
68117
+
68118
+ & > .navi_list_item_group_list {
68119
+ flex-direction: row;
68120
+ width: auto;
68121
+ }
68122
+ }
68123
+
68089
68124
  @supports (view-transition-group: contain) {
68090
68125
  :root:not([data-navi-route-transition], [data-navi-route-travel]) .navi_list_container[data-item-transition] {
68091
68126
  view-transition-name: match-element;
@@ -69705,18 +69740,13 @@ const useDuplicateHeaderWarning = ref => {
69705
69740
  // fraction short of it, and without this slack it reads as being at rest: a
69706
69741
  // bug that shows up on one machine and not the next.
69707
69742
  const STUCK_SLACK = 1;
69708
- // Which edge a part sticks to. The header and the footer stick along whichever
69709
- // axis the list scrolls their rules declare both insets (top/left, and
69710
- // bottom/right) so the same markup works either way; a group label always caps
69711
- // its group from the top.
69743
+ // Which edge a part sticks to: the edge the list scrolls FROM for the header
69744
+ // and a group label, the one it scrolls toward for the footer.
69712
69745
  const getStickyEdge = (partEl, horizontal) => {
69713
69746
  if (partEl.classList.contains("navi_list_item_footer")) {
69714
69747
  return horizontal ? "right" : "bottom";
69715
69748
  }
69716
- if (partEl.classList.contains("navi_list_item_header")) {
69717
- return horizontal ? "left" : "top";
69718
- }
69719
- return "top";
69749
+ return horizontal ? "left" : "top";
69720
69750
  };
69721
69751
  // A sticky inset is measured from the scrollport — the padding box of the
69722
69752
  // scroller, or the viewport when the page scrolls. getScrollerViewportRect
@@ -72113,9 +72143,10 @@ const ListItemGroup = ({
72113
72143
  if (!groupEl) {
72114
72144
  return;
72115
72145
  }
72116
- const rect = labelEl.getBoundingClientRect();
72117
- groupEl.style.setProperty("--list-group-label-height", `${rect.height}px`);
72118
- groupEl.style.setProperty("--list-group-label-width", `${rect.width}px`);
72146
+ const {
72147
+ height
72148
+ } = labelEl.getBoundingClientRect();
72149
+ groupEl.style.setProperty("--list-group-label-height", `${height}px`);
72119
72150
  }, []);
72120
72151
  const {
72121
72152
  className: labelClassName,