@jsenv/navi 0.18.0 → 0.18.2

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.
@@ -17672,6 +17672,7 @@ const selectByTextStrings = (element, range, startText, endText) => {
17672
17672
  installImportMetaCss(import.meta);import.meta.css = /* css */`
17673
17673
  *[data-navi-space] {
17674
17674
  /* user-select: none; */
17675
+ min-width: 0.2em;
17675
17676
  }
17676
17677
 
17677
17678
  .navi_text {
@@ -17765,7 +17766,7 @@ const CustomWidthSpace = ({
17765
17766
  children: "\u200B"
17766
17767
  });
17767
17768
  };
17768
- const applySpacingOnTextChildren = (children, spacing) => {
17769
+ const applySpacingOnTextChildren = (children, spacing = REGULAR_SPACE) => {
17769
17770
  if (spacing === "pre" || spacing === "0" || spacing === 0) {
17770
17771
  return children;
17771
17772
  }
@@ -18033,6 +18034,7 @@ installImportMetaCss(import.meta);import.meta.css = /* css */`
18033
18034
  .navi_icon_foreground {
18034
18035
  position: absolute;
18035
18036
  inset: 0;
18037
+ display: inline-flex;
18036
18038
  }
18037
18039
  .navi_icon_foreground > .navi_text {
18038
18040
  display: flex;
@@ -20070,21 +20072,20 @@ installImportMetaCss(import.meta);import.meta.css = /* css */`
20070
20072
  height: 100%;
20071
20073
  padding-top: var(
20072
20074
  --button-padding-top,
20073
- var(--button-padding-y, var(--button-padding))
20075
+ var(--button-padding-y, var(--button-padding, unset))
20074
20076
  );
20075
20077
  padding-right: var(
20076
20078
  --button-padding-right,
20077
- var(--button-padding-x, var(--button-padding))
20079
+ var(--button-padding-x, var(--button-padding, unset))
20078
20080
  );
20079
20081
  padding-bottom: var(
20080
20082
  --button-padding-bottom,
20081
- var(--button-padding-y, var(--button-padding))
20083
+ var(--button-padding-y, var(--button-padding, unset))
20082
20084
  );
20083
20085
  padding-left: var(
20084
20086
  --button-padding-left,
20085
- var(--button-padding-x, var(--button-padding))
20087
+ var(--button-padding-x, var(--button-padding, unset))
20086
20088
  );
20087
- padding: var(--button-padding, unset);
20088
20089
  align-items: inherit;
20089
20090
  justify-content: inherit;
20090
20091
  color: var(--x-button-color);
@@ -20650,6 +20651,7 @@ installImportMetaCss(import.meta);import.meta.css = /* css */`
20650
20651
  --link-text-decoration-hover: var(--link-text-decoration);
20651
20652
  --link-cursor: pointer;
20652
20653
  --link-loading-outline-size: 1px;
20654
+ --link-color-current: var(--link-color);
20653
20655
  }
20654
20656
  }
20655
20657
 
@@ -21106,6 +21108,8 @@ const LinkWithAction = props => {
21106
21108
  });
21107
21109
  };
21108
21110
 
21111
+ const ReportSelectedOnTabContext = createContext();
21112
+
21109
21113
  const RouteLink = ({
21110
21114
  route,
21111
21115
  routeParams,
@@ -21115,13 +21119,16 @@ const RouteLink = ({
21115
21119
  if (!route) {
21116
21120
  throw new Error("route prop is required");
21117
21121
  }
21122
+ const url = route.buildUrl(routeParams);
21123
+ const reportSelectedOnTab = useContext(ReportSelectedOnTabContext);
21118
21124
  const {
21119
21125
  matching
21120
21126
  } = useRouteStatus(route);
21121
21127
  const paramsAreMatching = route.matchesParams(routeParams);
21122
- const url = route.buildUrl(routeParams);
21128
+ const linkMatching = matching && paramsAreMatching;
21129
+ reportSelectedOnTab?.(linkMatching);
21123
21130
  return jsx(Link, {
21124
- matching: matching && paramsAreMatching,
21131
+ matching: linkMatching,
21125
21132
  href: url,
21126
21133
  ...rest,
21127
21134
  children: children || route.buildRelativeUrl(routeParams)
@@ -21427,6 +21434,50 @@ const Tab = props => {
21427
21434
  });
21428
21435
  };
21429
21436
  TabList.Tab = Tab;
21437
+ const TabBasic = ({
21438
+ children,
21439
+ icon,
21440
+ selected,
21441
+ boldWhenSelected = !icon,
21442
+ onClick,
21443
+ ...props
21444
+ }) => {
21445
+ const tabListIndicator = useContext(TabListIndicatorContext);
21446
+ const tabListAlignX = useContext(TabListAlignXContext);
21447
+ const [selectedFromChild, setSelectedFromChild] = useState(false);
21448
+ const innerSelected = selected || selectedFromChild;
21449
+ return jsxs(Box, {
21450
+ role: "tab",
21451
+ "aria-selected": innerSelected ? "true" : "false",
21452
+ "data-interactive": onClick ? "" : undefined,
21453
+ "data-bold-when-selected": boldWhenSelected ? "" : undefined,
21454
+ onClick: onClick
21455
+ // Style system
21456
+ ,
21457
+ baseClassName: "navi_tab",
21458
+ styleCSSVars: TAB_STYLE_CSS_VARS,
21459
+ pseudoClasses: TAB_PSEUDO_CLASSES,
21460
+ pseudoElements: TAB_PSEUDO_ELEMENTS,
21461
+ basePseudoState: {
21462
+ ":-navi-tab-selected": innerSelected
21463
+ },
21464
+ selfAlignX: tabListAlignX,
21465
+ "data-align-x": tabListAlignX,
21466
+ ...props,
21467
+ children: [(tabListIndicator === "start" || tabListIndicator === "end") && jsx("span", {
21468
+ className: "navi_tab_indicator",
21469
+ "data-position": tabListIndicator
21470
+ }), jsx(ReportSelectedOnTabContext.Provider, {
21471
+ value: setSelectedFromChild,
21472
+ children: boldWhenSelected ? jsx(Text, {
21473
+ preventBoldLayoutShift: true
21474
+ // boldTransition
21475
+ ,
21476
+ children: children
21477
+ }) : children
21478
+ })]
21479
+ });
21480
+ };
21430
21481
  const TabRoute = ({
21431
21482
  circle,
21432
21483
  route,
@@ -21443,13 +21494,7 @@ const TabRoute = ({
21443
21494
  alignY,
21444
21495
  ...props
21445
21496
  }) => {
21446
- const {
21447
- matching
21448
- } = useRouteStatus(route);
21449
- const paramsAreMatching = route.matchesParams(routeParams);
21450
- const selected = matching && paramsAreMatching;
21451
21497
  return jsx(TabBasic, {
21452
- selected: selected,
21453
21498
  ...props,
21454
21499
  circle: circle,
21455
21500
  padding: "0",
@@ -21475,45 +21520,6 @@ const TabRoute = ({
21475
21520
  })
21476
21521
  });
21477
21522
  };
21478
- const TabBasic = ({
21479
- children,
21480
- icon,
21481
- selected,
21482
- boldWhenSelected = !icon,
21483
- onClick,
21484
- ...props
21485
- }) => {
21486
- const tabListIndicator = useContext(TabListIndicatorContext);
21487
- const tabListAlignX = useContext(TabListAlignXContext);
21488
- return jsxs(Box, {
21489
- role: "tab",
21490
- "aria-selected": selected ? "true" : "false",
21491
- "data-interactive": onClick ? "" : undefined,
21492
- "data-bold-when-selected": boldWhenSelected ? "" : undefined,
21493
- onClick: onClick
21494
- // Style system
21495
- ,
21496
- baseClassName: "navi_tab",
21497
- styleCSSVars: TAB_STYLE_CSS_VARS,
21498
- pseudoClasses: TAB_PSEUDO_CLASSES,
21499
- pseudoElements: TAB_PSEUDO_ELEMENTS,
21500
- basePseudoState: {
21501
- ":-navi-tab-selected": selected
21502
- },
21503
- selfAlignX: tabListAlignX,
21504
- "data-align-x": tabListAlignX,
21505
- ...props,
21506
- children: [(tabListIndicator === "start" || tabListIndicator === "end") && jsx("span", {
21507
- className: "navi_tab_indicator",
21508
- "data-position": tabListIndicator
21509
- }), boldWhenSelected ? jsx(Text, {
21510
- preventBoldLayoutShift: true
21511
- // boldTransition
21512
- ,
21513
- children: children
21514
- }) : children]
21515
- });
21516
- };
21517
21523
 
21518
21524
  const useFocusGroup = (
21519
21525
  elementRef,