@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.
@@ -19076,7 +19076,22 @@ const TYPO_PROPS = {
19076
19076
  }
19077
19077
  return lineClampStyles(value);
19078
19078
  },
19079
- textAlign: PASS_THROUGH,
19079
+ /* A sized inline Box (a Text with a width) is a flex row the caller did not
19080
+ ask for, where the text runs are one anonymous item sized to their content:
19081
+ text-align alone moves nothing, the item is placed by justify-content. A
19082
+ flex row asked for keeps the two apart (Picker: textAlign is the text in
19083
+ the value slot, justify-content the slots). alignX, when given, wins. */
19084
+ textAlign: (value, { flexFromSize, remainingProps }) => {
19085
+ if (
19086
+ flexFromSize &&
19087
+ value !== "justify" &&
19088
+ remainingProps.alignX === undefined &&
19089
+ remainingProps.align === undefined
19090
+ ) {
19091
+ return { textAlign: value, justifyContent: value };
19092
+ }
19093
+ return { textAlign: value };
19094
+ },
19080
19095
  textBox: PASS_THROUGH,
19081
19096
  textBoxTrim: PASS_THROUGH,
19082
19097
  textBoxEdge: PASS_THROUGH,
@@ -21654,8 +21669,12 @@ const computeBox = (props, parentBoxFlow) => {
21654
21669
  block = true;
21655
21670
  }
21656
21671
  }
21672
+ // An inline box ignores width/height, so a sized one becomes a flex row the
21673
+ // caller never asked for; textAlign reads that (see box_style_util.js).
21674
+ let flexFromSize = false;
21657
21675
  if (inline && (rest.width !== undefined || rest.height !== undefined) && flex === undefined) {
21658
21676
  flex = "x";
21677
+ flexFromSize = true;
21659
21678
  }
21660
21679
  let boxFlow;
21661
21680
  if (inline) {
@@ -21749,6 +21768,7 @@ const computeBox = (props, parentBoxFlow) => {
21749
21768
  const styleContext = {
21750
21769
  parentBoxFlow,
21751
21770
  boxFlow,
21771
+ flexFromSize,
21752
21772
  styleCSSVars,
21753
21773
  pseudoState: innerPseudoState,
21754
21774
  pseudoClasses,
@@ -66525,6 +66545,7 @@ const css$x = /* css */`@layer navi {
66525
66545
 
66526
66546
  &[data-scroller="document"] {
66527
66547
  --x-list-group-label-top: var(--navi-safe-area-inset-top);
66548
+ --x-list-group-label-left: var(--navi-safe-area-inset-left);
66528
66549
  }
66529
66550
 
66530
66551
  &[data-expand-x] {
@@ -66790,7 +66811,6 @@ const css$x = /* css */`@layer navi {
66790
66811
 
66791
66812
  & .navi_list_item {
66792
66813
  scroll-margin-top: calc(var(--x-list-scroll-spacing-top) + var(--list-group-label-height, 0px));
66793
- scroll-margin-left: calc(var(--x-list-scroll-spacing-left) + var(--list-group-label-width, 0px));
66794
66814
  }
66795
66815
  }
66796
66816
 
@@ -66799,6 +66819,21 @@ const css$x = /* css */`@layer navi {
66799
66819
  }
66800
66820
  }
66801
66821
 
66822
+ .navi_list_container[data-horizontal] > .navi_list_scroll_container > .navi_list > .navi_list_item_group {
66823
+ min-width: auto;
66824
+ max-width: none;
66825
+
66826
+ & > .navi_list_item_group_label {
66827
+ top: auto;
66828
+ left: var(--list-group-label-left, var(--x-list-group-label-left, 0px));
66829
+ }
66830
+
66831
+ & > .navi_list_item_group_list {
66832
+ flex-direction: row;
66833
+ width: auto;
66834
+ }
66835
+ }
66836
+
66802
66837
  @supports (view-transition-group: contain) {
66803
66838
  :root:not([data-navi-route-transition], [data-navi-route-travel]) .navi_list_container[data-item-transition] {
66804
66839
  view-transition-name: match-element;
@@ -68348,18 +68383,13 @@ const useDuplicateHeaderWarning = ref => {
68348
68383
  // fraction short of it, and without this slack it reads as being at rest: a
68349
68384
  // bug that shows up on one machine and not the next.
68350
68385
  const STUCK_SLACK = 1;
68351
- // Which edge a part sticks to. The header and the footer stick along whichever
68352
- // axis the list scrolls their rules declare both insets (top/left, and
68353
- // bottom/right) so the same markup works either way; a group label always caps
68354
- // its group from the top.
68386
+ // Which edge a part sticks to: the edge the list scrolls FROM for the header
68387
+ // and a group label, the one it scrolls toward for the footer.
68355
68388
  const getStickyEdge = (partEl, horizontal) => {
68356
68389
  if (partEl.classList.contains("navi_list_item_footer")) {
68357
68390
  return horizontal ? "right" : "bottom";
68358
68391
  }
68359
- if (partEl.classList.contains("navi_list_item_header")) {
68360
- return horizontal ? "left" : "top";
68361
- }
68362
- return "top";
68392
+ return horizontal ? "left" : "top";
68363
68393
  };
68364
68394
  // A sticky inset is measured from the scrollport — the padding box of the
68365
68395
  // scroller, or the viewport when the page scrolls. getScrollerViewportRect
@@ -70718,9 +70748,10 @@ const ListItemGroup = ({
70718
70748
  if (!groupEl) {
70719
70749
  return;
70720
70750
  }
70721
- const rect = labelEl.getBoundingClientRect();
70722
- groupEl.style.setProperty("--list-group-label-height", `${rect.height}px`);
70723
- groupEl.style.setProperty("--list-group-label-width", `${rect.width}px`);
70751
+ const {
70752
+ height
70753
+ } = labelEl.getBoundingClientRect();
70754
+ groupEl.style.setProperty("--list-group-label-height", `${height}px`);
70724
70755
  }, []);
70725
70756
  const {
70726
70757
  className: labelClassName,