@ixo/ui 0.0.34 → 0.0.36

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.
Files changed (51) hide show
  1. package/dist/.vite/manifest.json +31 -31
  2. package/dist/components/AppShellNavigation/components/MenuItem.d.ts +1 -0
  3. package/dist/components/AppShellNavigation/components/MenuItem.d.ts.map +1 -1
  4. package/dist/components/AppShellNavigation/index.d.ts.map +1 -1
  5. package/dist/{components-Bbc5HijA.js → components-B1a2iVqu.js} +89 -61
  6. package/dist/{components-Bbc5HijA.js.map → components-B1a2iVqu.js.map} +1 -1
  7. package/dist/{components-BpMWfEEt.cjs → components-DClyFU-M.cjs} +87 -59
  8. package/dist/{components-BpMWfEEt.cjs.map → components-DClyFU-M.cjs.map} +1 -1
  9. package/dist/export/components.cjs +1 -1
  10. package/dist/export/components.mjs +1 -1
  11. package/dist/{index-YrKDHLOm.cjs → index-B9pVBHoG.cjs} +3 -3
  12. package/dist/{index-YrKDHLOm.cjs.map → index-B9pVBHoG.cjs.map} +1 -1
  13. package/dist/{index-DthSPEUj.js → index-BBHzZvIm.js} +2 -2
  14. package/dist/{index-DthSPEUj.js.map → index-BBHzZvIm.js.map} +1 -1
  15. package/dist/{index-DYyekNVE.cjs → index-BCq1MsXT.cjs} +2 -2
  16. package/dist/{index-DYyekNVE.cjs.map → index-BCq1MsXT.cjs.map} +1 -1
  17. package/dist/{index-CJEzVPBB.cjs → index-BPMwSQiu.cjs} +2 -2
  18. package/dist/{index-CJEzVPBB.cjs.map → index-BPMwSQiu.cjs.map} +1 -1
  19. package/dist/{index-BYkENVo6.cjs → index-BSG0zFC9.cjs} +2 -2
  20. package/dist/{index-BYkENVo6.cjs.map → index-BSG0zFC9.cjs.map} +1 -1
  21. package/dist/{index-DiC6w4Dz.js → index-BUOaLr6a.js} +3 -3
  22. package/dist/{index-DiC6w4Dz.js.map → index-BUOaLr6a.js.map} +1 -1
  23. package/dist/{index-C5RwHoR5.cjs → index-BnNEw5sb.cjs} +2 -2
  24. package/dist/{index-C5RwHoR5.cjs.map → index-BnNEw5sb.cjs.map} +1 -1
  25. package/dist/{index-CcdgltF2.js → index-CHaUG4pj.js} +2 -2
  26. package/dist/{index-CcdgltF2.js.map → index-CHaUG4pj.js.map} +1 -1
  27. package/dist/{index-ChMy4OWq.cjs → index-CfGbTIXG.cjs} +3 -3
  28. package/dist/{index-ChMy4OWq.cjs.map → index-CfGbTIXG.cjs.map} +1 -1
  29. package/dist/{index-B91AEI-O.js → index-CgY82myI.js} +2 -2
  30. package/dist/{index-B91AEI-O.js.map → index-CgY82myI.js.map} +1 -1
  31. package/dist/{index-Cps8sTdh.js → index-CkY33lka.js} +3 -3
  32. package/dist/{index-Cps8sTdh.js.map → index-CkY33lka.js.map} +1 -1
  33. package/dist/{index-Dw-UB8QG.js → index-CrLkPKdH.js} +2 -2
  34. package/dist/{index-Dw-UB8QG.js.map → index-CrLkPKdH.js.map} +1 -1
  35. package/dist/{index-Tr9N7wIo.js → index-D0Hsuk8i.js} +2 -2
  36. package/dist/{index-Tr9N7wIo.js.map → index-D0Hsuk8i.js.map} +1 -1
  37. package/dist/{index-WpYDX7r4.js → index-D2vpQrea.js} +2 -2
  38. package/dist/{index-WpYDX7r4.js.map → index-D2vpQrea.js.map} +1 -1
  39. package/dist/{index-T_N7l0dY.cjs → index-DAeeijml.cjs} +2 -2
  40. package/dist/{index-T_N7l0dY.cjs.map → index-DAeeijml.cjs.map} +1 -1
  41. package/dist/{index-DmZxf_3K.cjs → index-DIjbP65y.cjs} +2 -2
  42. package/dist/{index-DmZxf_3K.cjs.map → index-DIjbP65y.cjs.map} +1 -1
  43. package/dist/{index-Cd9_EsL3.js → index-Dzht1xdr.js} +2 -2
  44. package/dist/{index-Cd9_EsL3.js.map → index-Dzht1xdr.js.map} +1 -1
  45. package/dist/{index-BJ_C_QL7.js → index-NInTEDOl.js} +2 -2
  46. package/dist/{index-BJ_C_QL7.js.map → index-NInTEDOl.js.map} +1 -1
  47. package/dist/{index-dOpxVj7U.cjs → index-cb7wQOdp.cjs} +2 -2
  48. package/dist/{index-dOpxVj7U.cjs.map → index-cb7wQOdp.cjs.map} +1 -1
  49. package/dist/{index-CrKmiIcJ.cjs → index-eldkvceu.cjs} +2 -2
  50. package/dist/{index-CrKmiIcJ.cjs.map → index-eldkvceu.cjs.map} +1 -1
  51. package/package.json +1 -1
@@ -797,8 +797,8 @@ function AccordionTable({
797
797
  }
798
798
  );
799
799
  }
800
- const Header$3 = react$1.lazy(() => Promise.resolve().then(() => require("./index-C5RwHoR5.cjs")));
801
- const Footer = react$1.lazy(() => Promise.resolve().then(() => require("./index-ChMy4OWq.cjs")));
800
+ const Header$3 = react$1.lazy(() => Promise.resolve().then(() => require("./index-BnNEw5sb.cjs")));
801
+ const Footer = react$1.lazy(() => Promise.resolve().then(() => require("./index-CfGbTIXG.cjs")));
802
802
  function ActionCard({ header, content, footer, useHoverMode = false }) {
803
803
  const hasContent = !!content || !!footer;
804
804
  const initialVisibility = footer?.startHidden !== true;
@@ -882,7 +882,7 @@ function Loader({ size, color = "primary" }) {
882
882
  }
883
883
  const CARD_WIDTH$1 = 350;
884
884
  const CARD_HEADER_HEIGHT = 158;
885
- const Header$2 = react$1.lazy(() => Promise.resolve().then(() => require("./index-BYkENVo6.cjs")));
885
+ const Header$2 = react$1.lazy(() => Promise.resolve().then(() => require("./index-BSG0zFC9.cjs")));
886
886
  function Card({ children, className, contentClassName, roundedBottom, noPadding = false, fullWidth = false, header, wrapperSx, onClick }) {
887
887
  const wrapperRef = react$1.useRef(null);
888
888
  const handleOnClick = react$1.useCallback(
@@ -1317,7 +1317,7 @@ function ModalSheet({ isOpen, children, hideHandler, zIndex, onRequestHide, onRe
1317
1317
  document.body
1318
1318
  );
1319
1319
  }
1320
- const Badge = react$1.lazy(() => Promise.resolve().then(() => require("./index-CrKmiIcJ.cjs")));
1320
+ const Badge = react$1.lazy(() => Promise.resolve().then(() => require("./index-eldkvceu.cjs")));
1321
1321
  function ActionSheet({ children, isOpen, header, navMenu = void 0, onRequestHide, onRequestShow }) {
1322
1322
  const shadowScrollRef = react$1.useRef(null);
1323
1323
  const wrapperContentAreaRef = react$1.useRef(null);
@@ -2430,19 +2430,70 @@ function RoomCategory({ category }) {
2430
2430
  !value && /* @__PURE__ */ jsxRuntime.jsx(core.Stack, { gap: 1, children: category.rooms.map((room) => /* @__PURE__ */ jsxRuntime.jsx(RoomItem, { room }, room.id)) })
2431
2431
  ] });
2432
2432
  }
2433
+ function hasActiveDescendant(children) {
2434
+ if (!children || children.length === 0) return false;
2435
+ return children.some((child) => child.isActive === true || hasActiveDescendant(child.children));
2436
+ }
2433
2437
  function MenuItem({ item, onMenuItemClick, depth = 0 }) {
2434
2438
  const { hovered, ref } = hooks.useHover();
2435
2439
  const theme = useUITheme.useUITheme();
2436
- const { value: isExpanded, toggle } = useToggle(false);
2437
2440
  const hasChildren = item.children && item.children.length > 0;
2441
+ const hasActiveChild = react$1.useMemo(() => hasActiveDescendant(item.children), [item.children]);
2442
+ const initialExpanded = item?.isActive === true || hasActiveChild;
2443
+ const { value: isExpanded, toggle, set: setIsExpanded } = useToggle(initialExpanded);
2444
+ const prevHasActiveChildRef = react$1.useRef(hasActiveChild);
2445
+ const manuallyToggledRef = react$1.useRef(false);
2446
+ react$1.useEffect(() => {
2447
+ if (item?.isActive !== void 0) {
2448
+ setIsExpanded(item.isActive);
2449
+ manuallyToggledRef.current = false;
2450
+ }
2451
+ }, [item?.isActive, setIsExpanded]);
2452
+ react$1.useEffect(() => {
2453
+ if (hasActiveChild && !prevHasActiveChildRef.current) {
2454
+ if (!manuallyToggledRef.current || isExpanded) {
2455
+ setIsExpanded(true);
2456
+ }
2457
+ }
2458
+ prevHasActiveChildRef.current = hasActiveChild;
2459
+ }, [hasActiveChild, isExpanded, setIsExpanded]);
2438
2460
  const handleItemClick = () => {
2439
2461
  if (!!item?.disabled) return;
2440
2462
  onMenuItemClick(item);
2441
2463
  };
2442
2464
  const handleToggleClick = (e) => {
2443
2465
  e.stopPropagation();
2466
+ manuallyToggledRef.current = true;
2444
2467
  toggle();
2445
2468
  };
2469
+ const shouldShowActiveStyle = item.isActive === true && !hasActiveChild;
2470
+ const renderIcon = () => {
2471
+ if (hasChildren && hovered) {
2472
+ return /* @__PURE__ */ jsxRuntime.jsx(
2473
+ core.Center,
2474
+ {
2475
+ onClick: handleToggleClick,
2476
+ p: 4,
2477
+ sx: {
2478
+ cursor: "pointer",
2479
+ borderRadius: 4,
2480
+ transform: isExpanded ? "rotate(-90deg)" : "rotate(0deg)",
2481
+ transition: "transform 0.2s ease",
2482
+ "&:hover": {
2483
+ backgroundColor: theme.neutral.transparent10
2484
+ }
2485
+ },
2486
+ children: /* @__PURE__ */ jsxRuntime.jsx(UsersSolid.AngleLeftSolid, { size: 12, color: "secondary" })
2487
+ }
2488
+ );
2489
+ } else {
2490
+ if (typeof item.icon === "string") {
2491
+ return /* @__PURE__ */ jsxRuntime.jsx(core.Image, { w: 20, h: 20, src: item.icon, radius: "50%" });
2492
+ } else {
2493
+ return /* @__PURE__ */ jsxRuntime.jsx(item.icon, { size: 20, color: shouldShowActiveStyle ? "overPicture" : "secondary" });
2494
+ }
2495
+ }
2496
+ };
2446
2497
  return /* @__PURE__ */ jsxRuntime.jsxs(core.Stack, { gap: 1, children: [
2447
2498
  /* @__PURE__ */ jsxRuntime.jsxs(
2448
2499
  Flex,
@@ -2457,50 +2508,31 @@ function MenuItem({ item, onMenuItemClick, depth = 0 }) {
2457
2508
  style: {
2458
2509
  cursor: "pointer",
2459
2510
  borderRadius: 8,
2460
- backgroundColor: item.isActive ? theme.neutral.transparent10 : hovered ? theme.neutral.transparent10 : "transparent",
2511
+ backgroundColor: shouldShowActiveStyle ? theme.neutral.transparent10 : hovered ? theme.neutral.transparent10 : "transparent",
2461
2512
  transform: hovered ? "translateX(4px)" : "translateX(0px)",
2462
2513
  transition: "all 0.2s ease"
2463
2514
  },
2464
2515
  onClick: handleItemClick,
2465
2516
  children: [
2466
2517
  /* @__PURE__ */ jsxRuntime.jsxs(Flex, { align: "center", gap: 8, children: [
2467
- typeof item.icon === "string" ? /* @__PURE__ */ jsxRuntime.jsx(core.Image, { w: 20, h: 20, src: item.icon, radius: "50%" }) : /* @__PURE__ */ jsxRuntime.jsx(item.icon, { size: 20, color: item.isActive ? "overPicture" : "secondary" }),
2468
- /* @__PURE__ */ jsxRuntime.jsx(core.Text, { fz: 14, fw: 500, c: item.isActive ? theme.neutral.lightGray : theme.text.secondary, style: { flex: 1 }, children: item.name }),
2518
+ renderIcon(),
2519
+ /* @__PURE__ */ jsxRuntime.jsx(core.Text, { fz: 14, fw: 500, c: shouldShowActiveStyle ? theme.neutral.lightGray : theme.text.secondary, style: { flex: 1 }, children: item.name }),
2469
2520
  item.badgeCount ? /* @__PURE__ */ jsxRuntime.jsx(core.Badge, { size: "xs", variant: "filled", ml: 4, style: { minWidth: "16px", height: "15px", padding: "0 4px", fontSize: "8px" }, children: item.badgeCount }) : null
2470
2521
  ] }),
2471
- /* @__PURE__ */ jsxRuntime.jsxs(Flex, { children: [
2472
- hasChildren && /* @__PURE__ */ jsxRuntime.jsx(
2473
- core.Center,
2474
- {
2475
- onClick: handleToggleClick,
2476
- p: 4,
2477
- sx: {
2478
- cursor: "pointer",
2479
- borderRadius: 4,
2480
- transform: isExpanded ? "rotate(-90deg)" : "rotate(0deg)",
2481
- transition: "transform 0.2s ease",
2482
- "&:hover": {
2483
- backgroundColor: theme.neutral.transparent10
2484
- }
2485
- },
2486
- children: /* @__PURE__ */ jsxRuntime.jsx(UsersSolid.AngleLeftSolid, { size: 12, color: "secondary" })
2487
- }
2488
- ),
2489
- item?.actions && item.actions.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
2490
- core.Center,
2491
- {
2492
- sx: {
2493
- cursor: "pointer",
2494
- borderRadius: 4,
2495
- transition: "transform 0.2s ease",
2496
- "&:hover": {
2497
- backgroundColor: theme.neutral.transparent10
2498
- }
2499
- },
2500
- children: /* @__PURE__ */ jsxRuntime.jsx(MoreMenu, { items: item.actions, controlColor: "secondary" })
2501
- }
2502
- )
2503
- ] })
2522
+ /* @__PURE__ */ jsxRuntime.jsx(Flex, { children: item?.actions && item.actions.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
2523
+ core.Center,
2524
+ {
2525
+ sx: {
2526
+ cursor: "pointer",
2527
+ borderRadius: 4,
2528
+ transition: "transform 0.2s ease",
2529
+ "&:hover": {
2530
+ backgroundColor: theme.neutral.transparent10
2531
+ }
2532
+ },
2533
+ children: /* @__PURE__ */ jsxRuntime.jsx(MoreMenu, { items: item.actions, controlColor: "secondary" })
2534
+ }
2535
+ ) })
2504
2536
  ]
2505
2537
  }
2506
2538
  ),
@@ -2618,7 +2650,6 @@ function AppShellNavigation({
2618
2650
  document.body.style.cursor = "col-resize";
2619
2651
  document.body.style.userSelect = "none";
2620
2652
  } else {
2621
- console.count("2");
2622
2653
  clearNavbarListeners();
2623
2654
  }
2624
2655
  return () => clearNavbarListeners();
@@ -2704,23 +2735,20 @@ function AppShellNavigation({
2704
2735
  /* @__PURE__ */ jsxRuntime.jsx(core.Divider, { w: 40, mx: 10, color: theme.neutral.transparent10 })
2705
2736
  ] }),
2706
2737
  /* @__PURE__ */ jsxRuntime.jsx(
2707
- core.Stack,
2738
+ core.ScrollArea,
2708
2739
  {
2709
- align: "center",
2710
- gap: 8,
2740
+ scrollbarSize: 0,
2711
2741
  style: {
2712
2742
  flex: 1,
2713
- overflowY: "auto",
2714
- maxHeight: "calc(100vh - 300px)",
2715
- scrollbarWidth: "none",
2716
- msOverflowStyle: "none"
2743
+ maxHeight: "calc(100vh - 360px)"
2717
2744
  },
2718
- sx: {
2719
- "&::-webkit-scrollbar": {
2720
- display: "none"
2745
+ viewportProps: {
2746
+ style: {
2747
+ paddingLeft: 8,
2748
+ paddingRight: 8
2721
2749
  }
2722
2750
  },
2723
- children: spaces.map(({ icon, id, name, onClick }) => /* @__PURE__ */ jsxRuntime.jsx(SpaceItem, { selectedSpace, icon, name, id, onClick }, id))
2751
+ children: /* @__PURE__ */ jsxRuntime.jsx(core.Stack, { align: "center", gap: 8, children: spaces.map(({ icon, id, name, onClick }) => /* @__PURE__ */ jsxRuntime.jsx(SpaceItem, { selectedSpace, icon, name, id, onClick }, id)) })
2724
2752
  }
2725
2753
  )
2726
2754
  ] }),
@@ -5786,13 +5814,13 @@ function ActionButton({ onClick, left, right }) {
5786
5814
  }
5787
5815
  );
5788
5816
  }
5789
- const MainAction = react$1.lazy(() => Promise.resolve().then(() => require("./index-DmZxf_3K.cjs")));
5790
- const Header$1 = react$1.lazy(() => Promise.resolve().then(() => require("./index-T_N7l0dY.cjs")));
5791
- const Content = react$1.lazy(() => Promise.resolve().then(() => require("./index-CJEzVPBB.cjs")));
5817
+ const MainAction = react$1.lazy(() => Promise.resolve().then(() => require("./index-DIjbP65y.cjs")));
5818
+ const Header$1 = react$1.lazy(() => Promise.resolve().then(() => require("./index-DAeeijml.cjs")));
5819
+ const Content = react$1.lazy(() => Promise.resolve().then(() => require("./index-BPMwSQiu.cjs")));
5792
5820
  const Map = react$1.lazy(() => Promise.resolve().then(() => require("./index-D4PsPquZ.cjs")));
5793
5821
  const CustomContent = react$1.lazy(() => Promise.resolve().then(() => require("./index-ByrCNpS2.cjs")));
5794
- const Assets = react$1.lazy(() => Promise.resolve().then(() => require("./index-DYyekNVE.cjs")));
5795
- const Actions = react$1.lazy(() => Promise.resolve().then(() => require("./index-YrKDHLOm.cjs")));
5822
+ const Assets = react$1.lazy(() => Promise.resolve().then(() => require("./index-BCq1MsXT.cjs")));
5823
+ const Actions = react$1.lazy(() => Promise.resolve().then(() => require("./index-B9pVBHoG.cjs")));
5796
5824
  const HOVER_BORDER_WIDTH = 1;
5797
5825
  function SodaCardCmp({ numSelected = 0, expanded = true, mainAction, header, content, map, customContent, customFooter, actions, assets, onClick }, ref) {
5798
5826
  const wrapperRef = react$1.useRef(null);
@@ -11105,4 +11133,4 @@ exports.UserMessage = UserMessage;
11105
11133
  exports.WorkspaceModal = WorkspaceModal;
11106
11134
  exports.cutText = cutText;
11107
11135
  exports.isValidClick = isValidClick;
11108
- //# sourceMappingURL=components-BpMWfEEt.cjs.map
11136
+ //# sourceMappingURL=components-DClyFU-M.cjs.map