gov-layout 1.2.0 → 1.2.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.
package/dist/index.d.mts CHANGED
@@ -47,9 +47,11 @@ interface StaffSidebarProps {
47
47
  isOpen?: boolean;
48
48
  /** callback เมื่อกดเปิด/ปิด */
49
49
  onToggle?: () => void;
50
+ /** callback เมื่อกดเมนูที่มี children ขณะ sidebar ย่อ — ใช้สั่งกาง sidebar */
51
+ onExpandRequest?: () => void;
50
52
  }
51
53
 
52
- declare function StaffSidebar({ orgLogo, orgName, orgSubtitle, menuItems, bottomMenuItems, user, roleLabel, onNavigate, onLogout, currentPath, width, className, collapsible, isOpen: controlledIsOpen, onToggle, }: StaffSidebarProps): react_jsx_runtime.JSX.Element;
54
+ declare function StaffSidebar({ orgLogo, orgName, orgSubtitle, menuItems, bottomMenuItems, user, roleLabel, onNavigate, onLogout, currentPath, width, className, collapsible, isOpen: controlledIsOpen, onToggle, onExpandRequest, }: StaffSidebarProps): react_jsx_runtime.JSX.Element;
53
55
 
54
56
  interface SidebarHeaderProps {
55
57
  orgLogo?: string;
@@ -64,8 +66,9 @@ interface SidebarMenuProps {
64
66
  onItemClick: (path: string) => void;
65
67
  currentPath?: string;
66
68
  collapsed?: boolean;
69
+ onExpandRequest?: () => void;
67
70
  }
68
- declare function SidebarMenu({ menuItems, onItemClick, currentPath, collapsed }: SidebarMenuProps): react_jsx_runtime.JSX.Element;
71
+ declare function SidebarMenu({ menuItems, onItemClick, currentPath, collapsed, onExpandRequest }: SidebarMenuProps): react_jsx_runtime.JSX.Element;
69
72
 
70
73
  interface SidebarUserProfileProps {
71
74
  user: User | null;
package/dist/index.d.ts CHANGED
@@ -47,9 +47,11 @@ interface StaffSidebarProps {
47
47
  isOpen?: boolean;
48
48
  /** callback เมื่อกดเปิด/ปิด */
49
49
  onToggle?: () => void;
50
+ /** callback เมื่อกดเมนูที่มี children ขณะ sidebar ย่อ — ใช้สั่งกาง sidebar */
51
+ onExpandRequest?: () => void;
50
52
  }
51
53
 
52
- declare function StaffSidebar({ orgLogo, orgName, orgSubtitle, menuItems, bottomMenuItems, user, roleLabel, onNavigate, onLogout, currentPath, width, className, collapsible, isOpen: controlledIsOpen, onToggle, }: StaffSidebarProps): react_jsx_runtime.JSX.Element;
54
+ declare function StaffSidebar({ orgLogo, orgName, orgSubtitle, menuItems, bottomMenuItems, user, roleLabel, onNavigate, onLogout, currentPath, width, className, collapsible, isOpen: controlledIsOpen, onToggle, onExpandRequest, }: StaffSidebarProps): react_jsx_runtime.JSX.Element;
53
55
 
54
56
  interface SidebarHeaderProps {
55
57
  orgLogo?: string;
@@ -64,8 +66,9 @@ interface SidebarMenuProps {
64
66
  onItemClick: (path: string) => void;
65
67
  currentPath?: string;
66
68
  collapsed?: boolean;
69
+ onExpandRequest?: () => void;
67
70
  }
68
- declare function SidebarMenu({ menuItems, onItemClick, currentPath, collapsed }: SidebarMenuProps): react_jsx_runtime.JSX.Element;
71
+ declare function SidebarMenu({ menuItems, onItemClick, currentPath, collapsed, onExpandRequest }: SidebarMenuProps): react_jsx_runtime.JSX.Element;
69
72
 
70
73
  interface SidebarUserProfileProps {
71
74
  user: User | null;
package/dist/index.js CHANGED
@@ -417,7 +417,8 @@ function MenuItemComponent({
417
417
  onItemClick,
418
418
  currentPath,
419
419
  depth = 0,
420
- collapsed = false
420
+ collapsed = false,
421
+ onExpandRequest
421
422
  }) {
422
423
  const hasChildren = item.children && item.children.length > 0;
423
424
  const isActive = item.path ? currentPath === item.path : false;
@@ -428,8 +429,12 @@ function MenuItemComponent({
428
429
  const expanded = userToggled ? isOpen : isOpen || isChildActive;
429
430
  const handleClick = () => {
430
431
  if (hasChildren) {
431
- setUserToggled(true);
432
- setIsOpen(!expanded);
432
+ if (collapsed) {
433
+ onExpandRequest?.();
434
+ } else {
435
+ setUserToggled(true);
436
+ setIsOpen(!expanded);
437
+ }
433
438
  } else if (item.path) {
434
439
  onItemClick(item.path);
435
440
  }
@@ -538,7 +543,7 @@ function MenuItemComponent({
538
543
  } }) })
539
544
  ] });
540
545
  }
541
- function SidebarMenu({ menuItems, onItemClick, currentPath, collapsed }) {
546
+ function SidebarMenu({ menuItems, onItemClick, currentPath, collapsed, onExpandRequest }) {
542
547
  return /* @__PURE__ */ jsxRuntime.jsx("nav", { style: {
543
548
  padding: collapsed ? "8px 8px" : "8px 12px",
544
549
  overflowY: "auto"
@@ -555,7 +560,8 @@ function SidebarMenu({ menuItems, onItemClick, currentPath, collapsed }) {
555
560
  item,
556
561
  onItemClick,
557
562
  currentPath,
558
- collapsed
563
+ collapsed,
564
+ onExpandRequest
559
565
  },
560
566
  item.id
561
567
  )) }) });
@@ -813,7 +819,8 @@ function StaffSidebar({
813
819
  className,
814
820
  collapsible = false,
815
821
  isOpen: controlledIsOpen,
816
- onToggle
822
+ onToggle,
823
+ onExpandRequest
817
824
  }) {
818
825
  const [internalOpen, setInternalOpen] = react.useState(true);
819
826
  const sidebarOpen = controlledIsOpen !== void 0 ? controlledIsOpen : internalOpen;
@@ -828,6 +835,17 @@ function StaffSidebar({
828
835
  setInternalOpen(!internalOpen);
829
836
  }
830
837
  };
838
+ const handleExpandRequest = () => {
839
+ if (onExpandRequest) {
840
+ onExpandRequest();
841
+ } else {
842
+ if (onToggle) {
843
+ onToggle();
844
+ } else {
845
+ setInternalOpen(true);
846
+ }
847
+ }
848
+ };
831
849
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
832
850
  /* @__PURE__ */ jsxRuntime.jsxs(
833
851
  "aside",
@@ -857,34 +875,44 @@ function StaffSidebar({
857
875
  collapsed
858
876
  }
859
877
  ),
860
- /* @__PURE__ */ jsxRuntime.jsx(
878
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { flex: 1, overflowY: "auto", minHeight: 0 }, children: /* @__PURE__ */ jsxRuntime.jsx(
861
879
  SidebarMenu,
862
880
  {
863
881
  menuItems,
864
882
  onItemClick: onNavigate,
865
883
  currentPath,
866
- collapsed
867
- }
868
- ),
869
- resolvedBottomMenu && resolvedBottomMenu.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
870
- SidebarMenu,
871
- {
872
- menuItems: resolvedBottomMenu,
873
- onItemClick: onNavigate,
874
- currentPath,
875
- collapsed
876
- }
877
- ),
878
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { flex: 1 } }),
879
- /* @__PURE__ */ jsxRuntime.jsx(
880
- SidebarUserProfile,
881
- {
882
- user,
883
- roleLabel,
884
- onLogout,
885
- collapsed
884
+ collapsed,
885
+ onExpandRequest: handleExpandRequest
886
886
  }
887
- )
887
+ ) }),
888
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { flexShrink: 0 }, children: [
889
+ resolvedBottomMenu && resolvedBottomMenu.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
890
+ /* @__PURE__ */ jsxRuntime.jsx("hr", { style: {
891
+ border: "none",
892
+ borderTop: "1px solid var(--color-border-colors-neutral, #c8cedd)",
893
+ margin: "4px 12px"
894
+ } }),
895
+ /* @__PURE__ */ jsxRuntime.jsx(
896
+ SidebarMenu,
897
+ {
898
+ menuItems: resolvedBottomMenu,
899
+ onItemClick: onNavigate,
900
+ currentPath,
901
+ collapsed,
902
+ onExpandRequest: handleExpandRequest
903
+ }
904
+ )
905
+ ] }),
906
+ /* @__PURE__ */ jsxRuntime.jsx(
907
+ SidebarUserProfile,
908
+ {
909
+ user,
910
+ roleLabel,
911
+ onLogout,
912
+ collapsed
913
+ }
914
+ )
915
+ ] })
888
916
  ]
889
917
  }
890
918
  ),