react-better-html 1.1.198 → 1.1.201-beta

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.
package/dist/index.js CHANGED
@@ -8947,6 +8947,10 @@ var TooltipComponent = (0, import_react27.forwardRef)(function Tooltip({
8947
8947
  };
8948
8948
  }
8949
8949
  }, [trigger, onClickOutside]);
8950
+ (0, import_react27.useEffect)(() => {
8951
+ if (!disabled) return;
8952
+ closeTooltip();
8953
+ }, [disabled]);
8950
8954
  (0, import_react27.useImperativeHandle)(
8951
8955
  ref,
8952
8956
  () => {
@@ -9454,6 +9458,15 @@ var Foldable_default = Foldable2;
9454
9458
  // src/components/SideMenu.tsx
9455
9459
  var import_react30 = require("react");
9456
9460
  var import_jsx_runtime28 = require("react/jsx-runtime");
9461
+ var sideMenuContext = (0, import_react30.createContext)(void 0);
9462
+ var SideMenuContextProvider = sideMenuContext.Provider;
9463
+ var useSideMenuContext = () => {
9464
+ const context = (0, import_react30.useContext)(sideMenuContext);
9465
+ if (!context) {
9466
+ throw new Error("`useSideMenuContext` must be used within a `<SideMenuContextProvider>` component");
9467
+ }
9468
+ return context;
9469
+ };
9457
9470
  var MenuItemComponent = (0, import_react30.memo)(function MenuItemComponent2({ item, backgroundColor, onClick }) {
9458
9471
  const reactRouterDomPlugin2 = usePlugin("react-router-dom");
9459
9472
  if (!reactRouterDomPlugin2) {
@@ -9466,10 +9479,12 @@ var MenuItemComponent = (0, import_react30.memo)(function MenuItemComponent2({ i
9466
9479
  const mediaQuery = useMediaQuery();
9467
9480
  const location = reactRouterDomPluginConfig.useLocation();
9468
9481
  const { colorTheme, components, sideMenuIsCollapsed, setSideMenuIsCollapsed } = useBetterHtmlContextInternal();
9482
+ const { activeItem, setActiveItem } = useSideMenuContext();
9469
9483
  const [isOpened, setIsOpened] = useBooleanState();
9470
9484
  const isCollapsed = sideMenuIsCollapsed && !mediaQuery.size1000;
9471
9485
  const onClickElement = (0, import_react30.useCallback)(() => {
9472
9486
  if (item.disabled) return;
9487
+ setActiveItem(void 0);
9473
9488
  if (item.children) {
9474
9489
  setSideMenuIsCollapsed.setFalse();
9475
9490
  if (isCollapsed) setTimeout(setIsOpened.setTrue, 0.1 * 1e3);
@@ -9479,7 +9494,7 @@ var MenuItemComponent = (0, import_react30.memo)(function MenuItemComponent2({ i
9479
9494
  item.onClick?.(item);
9480
9495
  }
9481
9496
  }, [onClick, item, isCollapsed]);
9482
- const isActive = item.href ? location.pathname === "/" ? location.pathname === item.href : location.pathname.startsWith(item.href) && item.href !== "/" : false;
9497
+ const isActive = activeItem && item.href && activeItem.href === item.href;
9483
9498
  const readyBackgroundColor = backgroundColor ?? theme2.colors.backgroundContent;
9484
9499
  const iconSize = 16;
9485
9500
  const paddingBlock = theme2.styles.gap;
@@ -9491,7 +9506,10 @@ var MenuItemComponent = (0, import_react30.memo)(function MenuItemComponent2({ i
9491
9506
  const content = /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
9492
9507
  Tooltip_default,
9493
9508
  {
9494
- content: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Text_default, { whiteSpace: "nowrap", children: item.text }),
9509
+ content: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(Div_default.row, { alignItems: "center", gap: theme2.styles.gap, children: [
9510
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Text_default, { whiteSpace: "nowrap", children: item.text }),
9511
+ item.children && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Icon_default, { name: "chevronDown", color: theme2.colors.textSecondary, size: 14 })
9512
+ ] }),
9495
9513
  contentPointerEvents: "none",
9496
9514
  withArrow: true,
9497
9515
  childrenWrapperWidth: "100%",
@@ -9541,6 +9559,17 @@ var MenuItemComponent = (0, import_react30.memo)(function MenuItemComponent2({ i
9541
9559
  )
9542
9560
  }
9543
9561
  );
9562
+ (0, import_react30.useEffect)(() => {
9563
+ if (!item.href) return;
9564
+ const isActive2 = location.pathname === "/" ? location.pathname === item.href : location.pathname.startsWith(item.href) && item.href !== "/";
9565
+ if (!isActive2) return;
9566
+ setActiveItem(
9567
+ (oldValue) => item.href ? oldValue && oldValue.length > item.href.length ? oldValue : {
9568
+ href: item.href,
9569
+ length: item.href.length
9570
+ } : void 0
9571
+ );
9572
+ }, [location.pathname]);
9544
9573
  (0, import_react30.useEffect)(() => {
9545
9574
  if (!item.children) return;
9546
9575
  const toBeOpened = item.children.some(
@@ -9548,6 +9577,10 @@ var MenuItemComponent = (0, import_react30.memo)(function MenuItemComponent2({ i
9548
9577
  );
9549
9578
  setIsOpened.setState(toBeOpened);
9550
9579
  }, [item]);
9580
+ (0, import_react30.useEffect)(() => {
9581
+ if (!isCollapsed) return;
9582
+ setIsOpened.setFalse();
9583
+ }, [isCollapsed]);
9551
9584
  const LinkComponentTag = components.button?.tagReplacement?.linkComponent ?? "a";
9552
9585
  return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(Div_default, { width: "100%", children: [
9553
9586
  item.href ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(LinkComponentTag, { to: item.href, href: item.href, onClick: onClickElement, children: content }) : content,
@@ -9634,11 +9667,19 @@ var SideMenuComponent = function SideMenu({
9634
9667
  const theme2 = useTheme();
9635
9668
  const mediaQuery = useMediaQuery();
9636
9669
  const { components, sideMenuIsCollapsed, setSideMenuIsCollapsed, sideMenuIsOpenMobile, setSideMenuIsOpenMobile } = useBetterHtmlContextInternal();
9670
+ const [activeItem, setActiveItem] = (0, import_react30.useState)();
9637
9671
  const onClickXButton = (0, import_react30.useCallback)(() => {
9638
9672
  setSideMenuIsOpenMobile.setFalse();
9639
9673
  }, []);
9640
9674
  const readyItems = (0, import_react30.useMemo)(() => items.filter((item) => !item.hidden), [items]);
9641
9675
  const readyBottomItems = (0, import_react30.useMemo)(() => bottomItems?.filter((item) => !item.hidden), [bottomItems]);
9676
+ const contextValue = (0, import_react30.useMemo)(
9677
+ () => ({
9678
+ activeItem,
9679
+ setActiveItem
9680
+ }),
9681
+ [activeItem]
9682
+ );
9642
9683
  const isCollapsable = collapsable && !mediaQuery.size1000;
9643
9684
  const isCollapsed = sideMenuIsCollapsed && !mediaQuery.size1000;
9644
9685
  const LinkComponentTag = components.button?.tagReplacement?.linkComponent ?? "a";
@@ -9646,7 +9687,7 @@ var SideMenuComponent = function SideMenu({
9646
9687
  const sideMenuCollapsedWidth = theme2.styles.space + theme2.styles.space * 2 + 16 + theme2.styles.space;
9647
9688
  const readyBackgroundColor = backgroundColor ?? theme2.colors.backgroundContent;
9648
9689
  const logoSize = sideMenuCollapsedWidth - theme2.styles.space * 2;
9649
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
9690
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(SideMenuContextProvider, { value: contextValue, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
9650
9691
  Div_default.column,
9651
9692
  {
9652
9693
  position: "fixed",
@@ -9811,7 +9852,7 @@ var SideMenuComponent = function SideMenu({
9811
9852
  absoluteComponent && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Div_default, { position: "absolute", top: 0, left: 0, pointerEvents: "none", zIndex: 2, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Div_default, { pointerEvents: "all", children: absoluteComponent }) })
9812
9853
  ]
9813
9854
  }
9814
- );
9855
+ ) });
9815
9856
  };
9816
9857
  SideMenuComponent.pageHolder = function SideMenuPageHolder({ outsideComponent, ...props }) {
9817
9858
  const theme2 = useTheme();