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.mjs CHANGED
@@ -8860,6 +8860,10 @@ var TooltipComponent = forwardRef16(function Tooltip({
8860
8860
  };
8861
8861
  }
8862
8862
  }, [trigger, onClickOutside]);
8863
+ useEffect12(() => {
8864
+ if (!disabled) return;
8865
+ closeTooltip();
8866
+ }, [disabled]);
8863
8867
  useImperativeHandle3(
8864
8868
  ref,
8865
8869
  () => {
@@ -9365,8 +9369,17 @@ Foldable2.box = FoldableComponent.box;
9365
9369
  var Foldable_default = Foldable2;
9366
9370
 
9367
9371
  // src/components/SideMenu.tsx
9368
- import { memo as memo27, useCallback as useCallback16, useEffect as useEffect15, useMemo as useMemo12 } from "react";
9372
+ import { createContext as createContext2, memo as memo27, useCallback as useCallback16, useContext as useContext2, useEffect as useEffect15, useMemo as useMemo12, useState as useState14 } from "react";
9369
9373
  import { Fragment as Fragment8, jsx as jsx27, jsxs as jsxs23 } from "react/jsx-runtime";
9374
+ var sideMenuContext = createContext2(void 0);
9375
+ var SideMenuContextProvider = sideMenuContext.Provider;
9376
+ var useSideMenuContext = () => {
9377
+ const context = useContext2(sideMenuContext);
9378
+ if (!context) {
9379
+ throw new Error("`useSideMenuContext` must be used within a `<SideMenuContextProvider>` component");
9380
+ }
9381
+ return context;
9382
+ };
9370
9383
  var MenuItemComponent = memo27(function MenuItemComponent2({ item, backgroundColor, onClick }) {
9371
9384
  const reactRouterDomPlugin2 = usePlugin("react-router-dom");
9372
9385
  if (!reactRouterDomPlugin2) {
@@ -9379,10 +9392,12 @@ var MenuItemComponent = memo27(function MenuItemComponent2({ item, backgroundCol
9379
9392
  const mediaQuery = useMediaQuery();
9380
9393
  const location = reactRouterDomPluginConfig.useLocation();
9381
9394
  const { colorTheme, components, sideMenuIsCollapsed, setSideMenuIsCollapsed } = useBetterHtmlContextInternal();
9395
+ const { activeItem, setActiveItem } = useSideMenuContext();
9382
9396
  const [isOpened, setIsOpened] = useBooleanState();
9383
9397
  const isCollapsed = sideMenuIsCollapsed && !mediaQuery.size1000;
9384
9398
  const onClickElement = useCallback16(() => {
9385
9399
  if (item.disabled) return;
9400
+ setActiveItem(void 0);
9386
9401
  if (item.children) {
9387
9402
  setSideMenuIsCollapsed.setFalse();
9388
9403
  if (isCollapsed) setTimeout(setIsOpened.setTrue, 0.1 * 1e3);
@@ -9392,7 +9407,7 @@ var MenuItemComponent = memo27(function MenuItemComponent2({ item, backgroundCol
9392
9407
  item.onClick?.(item);
9393
9408
  }
9394
9409
  }, [onClick, item, isCollapsed]);
9395
- const isActive = item.href ? location.pathname === "/" ? location.pathname === item.href : location.pathname.startsWith(item.href) && item.href !== "/" : false;
9410
+ const isActive = activeItem && item.href && activeItem.href === item.href;
9396
9411
  const readyBackgroundColor = backgroundColor ?? theme2.colors.backgroundContent;
9397
9412
  const iconSize = 16;
9398
9413
  const paddingBlock = theme2.styles.gap;
@@ -9404,7 +9419,10 @@ var MenuItemComponent = memo27(function MenuItemComponent2({ item, backgroundCol
9404
9419
  const content = /* @__PURE__ */ jsx27(
9405
9420
  Tooltip_default,
9406
9421
  {
9407
- content: /* @__PURE__ */ jsx27(Text_default, { whiteSpace: "nowrap", children: item.text }),
9422
+ content: /* @__PURE__ */ jsxs23(Div_default.row, { alignItems: "center", gap: theme2.styles.gap, children: [
9423
+ /* @__PURE__ */ jsx27(Text_default, { whiteSpace: "nowrap", children: item.text }),
9424
+ item.children && /* @__PURE__ */ jsx27(Icon_default, { name: "chevronDown", color: theme2.colors.textSecondary, size: 14 })
9425
+ ] }),
9408
9426
  contentPointerEvents: "none",
9409
9427
  withArrow: true,
9410
9428
  childrenWrapperWidth: "100%",
@@ -9454,6 +9472,17 @@ var MenuItemComponent = memo27(function MenuItemComponent2({ item, backgroundCol
9454
9472
  )
9455
9473
  }
9456
9474
  );
9475
+ useEffect15(() => {
9476
+ if (!item.href) return;
9477
+ const isActive2 = location.pathname === "/" ? location.pathname === item.href : location.pathname.startsWith(item.href) && item.href !== "/";
9478
+ if (!isActive2) return;
9479
+ setActiveItem(
9480
+ (oldValue) => item.href ? oldValue && oldValue.length > item.href.length ? oldValue : {
9481
+ href: item.href,
9482
+ length: item.href.length
9483
+ } : void 0
9484
+ );
9485
+ }, [location.pathname]);
9457
9486
  useEffect15(() => {
9458
9487
  if (!item.children) return;
9459
9488
  const toBeOpened = item.children.some(
@@ -9461,6 +9490,10 @@ var MenuItemComponent = memo27(function MenuItemComponent2({ item, backgroundCol
9461
9490
  );
9462
9491
  setIsOpened.setState(toBeOpened);
9463
9492
  }, [item]);
9493
+ useEffect15(() => {
9494
+ if (!isCollapsed) return;
9495
+ setIsOpened.setFalse();
9496
+ }, [isCollapsed]);
9464
9497
  const LinkComponentTag = components.button?.tagReplacement?.linkComponent ?? "a";
9465
9498
  return /* @__PURE__ */ jsxs23(Div_default, { width: "100%", children: [
9466
9499
  item.href ? /* @__PURE__ */ jsx27(LinkComponentTag, { to: item.href, href: item.href, onClick: onClickElement, children: content }) : content,
@@ -9547,11 +9580,19 @@ var SideMenuComponent = function SideMenu({
9547
9580
  const theme2 = useTheme();
9548
9581
  const mediaQuery = useMediaQuery();
9549
9582
  const { components, sideMenuIsCollapsed, setSideMenuIsCollapsed, sideMenuIsOpenMobile, setSideMenuIsOpenMobile } = useBetterHtmlContextInternal();
9583
+ const [activeItem, setActiveItem] = useState14();
9550
9584
  const onClickXButton = useCallback16(() => {
9551
9585
  setSideMenuIsOpenMobile.setFalse();
9552
9586
  }, []);
9553
9587
  const readyItems = useMemo12(() => items.filter((item) => !item.hidden), [items]);
9554
9588
  const readyBottomItems = useMemo12(() => bottomItems?.filter((item) => !item.hidden), [bottomItems]);
9589
+ const contextValue = useMemo12(
9590
+ () => ({
9591
+ activeItem,
9592
+ setActiveItem
9593
+ }),
9594
+ [activeItem]
9595
+ );
9555
9596
  const isCollapsable = collapsable && !mediaQuery.size1000;
9556
9597
  const isCollapsed = sideMenuIsCollapsed && !mediaQuery.size1000;
9557
9598
  const LinkComponentTag = components.button?.tagReplacement?.linkComponent ?? "a";
@@ -9559,7 +9600,7 @@ var SideMenuComponent = function SideMenu({
9559
9600
  const sideMenuCollapsedWidth = theme2.styles.space + theme2.styles.space * 2 + 16 + theme2.styles.space;
9560
9601
  const readyBackgroundColor = backgroundColor ?? theme2.colors.backgroundContent;
9561
9602
  const logoSize = sideMenuCollapsedWidth - theme2.styles.space * 2;
9562
- return /* @__PURE__ */ jsxs23(
9603
+ return /* @__PURE__ */ jsx27(SideMenuContextProvider, { value: contextValue, children: /* @__PURE__ */ jsxs23(
9563
9604
  Div_default.column,
9564
9605
  {
9565
9606
  position: "fixed",
@@ -9724,7 +9765,7 @@ var SideMenuComponent = function SideMenu({
9724
9765
  absoluteComponent && /* @__PURE__ */ jsx27(Div_default, { position: "absolute", top: 0, left: 0, pointerEvents: "none", zIndex: 2, children: /* @__PURE__ */ jsx27(Div_default, { pointerEvents: "all", children: absoluteComponent }) })
9725
9766
  ]
9726
9767
  }
9727
- );
9768
+ ) });
9728
9769
  };
9729
9770
  SideMenuComponent.pageHolder = function SideMenuPageHolder({ outsideComponent, ...props }) {
9730
9771
  const theme2 = useTheme();