From bef84797bf4ffc451217cb24aa061f30ce5e064a Mon Sep 17 00:00:00 2001 From: Mohamadzadeh <7796733@gmail.com> Date: Thu, 20 Aug 2026 11:10:49 +0330 Subject: [PATCH] fix sidebar --- dist/layout.js | 201 ++++++++++++++++++++++++----------------- src/layout/Sidebar.jsx | 39 +++++++- 2 files changed, 153 insertions(+), 87 deletions(-) diff --git a/dist/layout.js b/dist/layout.js index 5ae9f3f..494698e 100644 --- a/dist/layout.js +++ b/dist/layout.js @@ -1,12 +1,11 @@ import { jsx as e, jsxs as g, Fragment as F } from "react/jsx-runtime"; -import { Box as c, HStack as u, VStack as C, Image as j, Text as s, useDisclosure as J, Stack as K, Tooltip as T, IconButton as Z, Icon as d, Drawer as q, DrawerOverlay as $, DrawerContent as _, DrawerCloseButton as AA, DrawerHeader as eA, DrawerBody as oA, SimpleGrid as nA, Link as tA } from "@chakra-ui/react"; -import { useRef as rA, Children as gA, isValidElement as lA, forwardRef as aA } from "react"; -import { IoExit as iA, IoEllipsisHorizontal as IA } from "react-icons/io5"; -import { u as cA, l as sA } from "./chunks/permission-DL7ciWwc.js"; -const dA = "data:image/webp;base64,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MCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE4LTA4LTEzVDE0OjI1OjUzKzA0OjMwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE4LTA4LTEzVDE0OjI1OjUzKzA0OjMwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxOC0wOC0xM1QxNDoyNTo1MyswNDozMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOC0wOC0xM1QxNDoyNTo1MyswNDozMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDoxMDU3ZjgxNy03YTEzLThiNGEtODc1Ni1lYWM1MWEyZDRiYTY8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTgtMDgtMTNUMTQ6MjU6NTMrMDQ6MzA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6MDZjNmM4ODYtZDY2My1jMzQzLTkwZTUtNjQ4ZWJlYTkxYzgxPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjEwNTdmODE3LTdhMTMtOGI0YS04NzU2LWVhYzUxYTJkNGJhNjwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD5hZG9iZTpkb2NpZDpwaG90b3Nob3A6NWI3ZmJlNDgtMDc0ZS01NzRhLWFlNTctN2RmYjA4NmI1N2Q3PC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjA2YzZjODg2LWQ2NjMtYzM0My05MGU1LTY0OGViZWE5MWM4MTwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHBob3Rvc2hvcDpJQ0NQcm9maWxlPnNSR0IgSUVDNjE5NjYtMi4xPC9waG90b3Nob3A6SUNDUHJvZmlsZT4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHBob3Rvc2hvcDpEb2N1bWVudEFuY2VzdG9ycz4KICAgICAgICAgICAgPHJkZjpCYWc+CiAgICAgICAgICAgICAgIDxyZGY6bGk+YWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOmEwYjgxNWMzLTkzYjMtODU0MC04NmY0LTA0OTEyZTY5Y2Y4NTwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpCYWc+CiAgICAgICAgIDwvcGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4K"; -function CA({ children: o, ...A }) { +import { Box as s, HStack as u, VStack as C, Image as j, Text as I, useDisclosure as J, Stack as K, Tooltip as T, IconButton as Z, Icon as d, Drawer as q, DrawerOverlay as $, DrawerContent as _, DrawerCloseButton as ee, DrawerHeader as oe, DrawerBody as Ae, SimpleGrid as ne, Link as te } from "@chakra-ui/react"; +import { useRef as re, Children as ge, isValidElement as le, forwardRef as ae } from "react"; +import { u as ie, l as ce } from "./chunks/permission-DL7ciWwc.js"; +const se = "data:image/webp;base64,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MCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE4LTA4LTEzVDE0OjI1OjUzKzA0OjMwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE4LTA4LTEzVDE0OjI1OjUzKzA0OjMwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxOC0wOC0xM1QxNDoyNTo1MyswNDozMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOC0wOC0xM1QxNDoyNTo1MyswNDozMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDoxMDU3ZjgxNy03YTEzLThiNGEtODc1Ni1lYWM1MWEyZDRiYTY8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTgtMDgtMTNUMTQ6MjU6NTMrMDQ6MzA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6MDZjNmM4ODYtZDY2My1jMzQzLTkwZTUtNjQ4ZWJlYTkxYzgxPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjEwNTdmODE3LTdhMTMtOGI0YS04NzU2LWVhYzUxYTJkNGJhNjwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD5hZG9iZTpkb2NpZDpwaG90b3Nob3A6NWI3ZmJlNDgtMDc0ZS01NzRhLWFlNTctN2RmYjA4NmI1N2Q3PC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjA2YzZjODg2LWQ2NjMtYzM0My05MGU1LTY0OGViZWE5MWM4MTwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHBob3Rvc2hvcDpJQ0NQcm9maWxlPnNSR0IgSUVDNjE5NjYtMi4xPC9waG90b3Nob3A6SUNDUHJvZmlsZT4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHBob3Rvc2hvcDpEb2N1bWVudEFuY2VzdG9ycz4KICAgICAgICAgICAgPHJkZjpCYWc+CiAgICAgICAgICAgICAgIDxyZGY6bGk+YWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOmEwYjgxNWMzLTkzYjMtODU0MC04NmY0LTA0OTEyZTY5Y2Y4NTwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpCYWc+CiAgICAgICAgIDwvcGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4K"; +function Ie({ children: o, ...A }) { return /* @__PURE__ */ e( - c, + s, { as: "header", w: "100%", @@ -32,7 +31,7 @@ function CA({ children: o, ...A }) { } ); } -function bA({ children: o, ...A }) { +function de({ children: o, ...A }) { return /* @__PURE__ */ e( u, { @@ -47,7 +46,7 @@ function bA({ children: o, ...A }) { } ); } -function pA(o) { +function Ce(o) { return /* @__PURE__ */ e( j, { @@ -62,7 +61,7 @@ function pA(o) { } ); } -function hA({ children: o, ...A }) { +function pe({ children: o, ...A }) { return /* @__PURE__ */ e( C, { @@ -77,9 +76,9 @@ function hA({ children: o, ...A }) { } ); } -function uA({ children: o, ...A }) { +function be({ children: o, ...A }) { return /* @__PURE__ */ e( - s, + I, { w: "100%", fontWeight: "bold", @@ -91,9 +90,9 @@ function uA({ children: o, ...A }) { } ); } -function xA({ children: o, ...A }) { +function he({ children: o, ...A }) { return /* @__PURE__ */ e( - s, + I, { w: "100%", fontSize: { base: "10px", sm: "11px", lg: "16px" }, @@ -104,7 +103,7 @@ function xA({ children: o, ...A }) { } ); } -function mA({ logoSrc: o = dA, ...A }) { +function ue({ logoSrc: o = se, ...A }) { return /* @__PURE__ */ g( C, { @@ -128,7 +127,7 @@ function mA({ logoSrc: o = dA, ...A }) { } ), /* @__PURE__ */ e( - s, + I, { display: { base: "none", lg: "block" }, fontSize: "xs", @@ -142,26 +141,60 @@ function mA({ logoSrc: o = dA, ...A }) { } ); } -const WA = Object.assign(CA, { - BrandSection: bA, - Logo: pA, - Brand: hA, - Title: uA, - Description: xA, - Bi: mA -}), N = (o = "") => { +const Ge = Object.assign(Ie, { + BrandSection: de, + Logo: Ce, + Brand: pe, + Title: be, + Description: he, + Bi: ue +}), xe = (o) => /* @__PURE__ */ g( + "svg", + { + xmlns: "http://www.w3.org/2000/svg", + viewBox: "0 0 24 24", + fill: "none", + stroke: "currentColor", + strokeWidth: "2", + strokeLinecap: "round", + strokeLinejoin: "round", + ...o, + children: [ + /* @__PURE__ */ e("circle", { cx: "12", cy: "12", r: "1" }), + /* @__PURE__ */ e("circle", { cx: "19", cy: "12", r: "1" }), + /* @__PURE__ */ e("circle", { cx: "5", cy: "12", r: "1" }) + ] + } +), we = (o) => /* @__PURE__ */ g( + "svg", + { + xmlns: "http://www.w3.org/2000/svg", + viewBox: "0 0 24 24", + fill: "none", + stroke: "currentColor", + strokeWidth: "2", + strokeLinecap: "round", + strokeLinejoin: "round", + ...o, + children: [ + /* @__PURE__ */ e("path", { d: "m16 17 5-5-5-5" }), + /* @__PURE__ */ e("path", { d: "M21 12H9" }), + /* @__PURE__ */ e("path", { d: "M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4" }) + ] + } +), N = (o = "") => { const A = String(o).split(/[?#]/)[0] || ""; return !A || A === "/" ? A || "/" : A.replace(/\/+$/, ""); -}, P = (o, A) => { +}, B = (o, A) => { const t = N(o); return [A == null ? void 0 : A.path, ...(A == null ? void 0 : A.aliases) || []].filter(Boolean).map(N).some( (l) => t === l || t.startsWith(`${l}/`) ); -}, SA = (o = [], A) => o.find((t) => P(A, t)), G = aA( - ({ linkComponent: o, href: A, children: t, ...r }, l) => /* @__PURE__ */ e(tA, { ref: l, href: A, ...o ? { as: o } : {}, ...r, children: t }) +}, We = (o = [], A) => o.find((t) => B(A, t)), v = ae( + ({ linkComponent: o, href: A, children: t, ...r }, l) => /* @__PURE__ */ e(te, { ref: l, href: A, ...o ? { as: o } : {}, ...r, children: t }) ); -G.displayName = "SidebarLink"; -const RA = ({ +v.displayName = "SidebarLink"; +const me = ({ item: o, isActive: A, isDisabled: t, @@ -195,9 +228,9 @@ const RA = ({ "aria-label": o.title, "aria-current": A ? "page" : void 0 }; - let b; + let p; if (t || A) - b = /* @__PURE__ */ e( + p = /* @__PURE__ */ e( Z, { ...a, @@ -207,7 +240,7 @@ const RA = ({ ); else { const x = r ? { as: r, href: o.path } : { as: "a", href: o.path }; - b = /* @__PURE__ */ e(Z, { ...a, ...x, onClick: l }); + p = /* @__PURE__ */ e(Z, { ...a, ...x, onClick: l }); } return /* @__PURE__ */ e( T, @@ -220,10 +253,10 @@ const RA = ({ px: 4, fontWeight: "bold", closeDelay: 150, - children: /* @__PURE__ */ e(c, { as: "span", children: b }) + children: /* @__PURE__ */ e(s, { as: "span", children: p }) } ); -}, fA = ({ +}, Re = ({ item: o, isActive: A, isDisabled: t, @@ -247,7 +280,7 @@ const RA = ({ children: [ /* @__PURE__ */ e(d, { as: o.icon, boxSize: 5 }), /* @__PURE__ */ e( - s, + I, { as: "span", w: "full", @@ -263,7 +296,7 @@ const RA = ({ } ); return t || A ? /* @__PURE__ */ e( - c, + s, { flex: "1", minW: 0, @@ -274,7 +307,7 @@ const RA = ({ children: a } ) : /* @__PURE__ */ e( - G, + v, { linkComponent: r, href: o.path, @@ -288,25 +321,25 @@ const RA = ({ children: a } ); -}, B = () => null, wA = ({ +}, P = () => null, fe = ({ items: o = [], currentPath: A, linkComponent: t, onNavigate: r, children: l, primaryMobileCount: a = 4, - moreTitle: b = "بیشتر", + moreTitle: p = "بیشتر", moreDrawerTitle: x = "سایر بخش‌های سامانه", desktopProps: Q, - mobileProps: O + mobileProps: L }) => { - var k, Y; - const { isOpen: L, onOpen: V, onClose: m } = J(), v = rA(), { cannot: U } = cA(), I = gA.toArray(l).find( - (n) => lA(n) && n.type === B - ), R = !!I, f = ((k = I == null ? void 0 : I.props) == null ? void 0 : k.title) || "خروج", W = ((Y = I == null ? void 0 : I.props) == null ? void 0 : Y.icon) || iA, H = A ?? (typeof window < "u" ? `${window.location.pathname}${window.location.search}` : ""), X = o.slice(0, a), w = o.slice(a), y = (n) => (Array.isArray(n == null ? void 0 : n.perm) ? n.perm : [n == null ? void 0 : n.perm]).filter(Boolean).some((i) => U(i)), p = (n) => P(H, n), D = w.some(p), S = w.length > 0 || R, z = (n) => { - r == null || r(n), m(); - }, M = () => { - m(), sA(); + var z, Y; + const { isOpen: O, onOpen: V, onClose: w } = J(), G = re(), { cannot: U } = ie(), c = ge.toArray(l).find( + (n) => le(n) && n.type === P + ), m = !!c, R = ((z = c == null ? void 0 : c.props) == null ? void 0 : z.title) || "خروج", W = ((Y = c == null ? void 0 : c.props) == null ? void 0 : Y.icon) || we, H = A ?? (typeof window < "u" ? `${window.location.pathname}${window.location.search}` : ""), X = o.slice(0, a), f = o.slice(a), y = (n) => (Array.isArray(n == null ? void 0 : n.perm) ? n.perm : [n == null ? void 0 : n.perm]).filter(Boolean).some((i) => U(i)), b = (n) => B(H, n), D = f.some(b), S = f.length > 0 || m, M = (n) => { + r == null || r(n), w(); + }, k = () => { + w(), ce(); }; return /* @__PURE__ */ g(F, { children: [ /* @__PURE__ */ e( @@ -329,20 +362,20 @@ const RA = ({ ...Q, children: /* @__PURE__ */ g(C, { spacing: 2, children: [ o.map((n) => /* @__PURE__ */ e( - RA, + me, { item: n, isDisabled: y(n), - isActive: p(n), + isActive: b(n), linkComponent: t, onNavigate: () => r == null ? void 0 : r(n) }, n.path )), - R && /* @__PURE__ */ e( + m && /* @__PURE__ */ e( T, { - label: f, + label: R, placement: "left-start", hasArrow: !0, rounded: "md", @@ -357,8 +390,8 @@ const RA = ({ icon: /* @__PURE__ */ e(d, { as: W }), fontSize: "xl", size: { base: "sm", lg: "lg" }, - "aria-label": f, - onClick: M + "aria-label": R, + onClick: k } ) } @@ -367,7 +400,7 @@ const RA = ({ } ), /* @__PURE__ */ e( - c, + s, { as: "nav", "aria-label": "ناوبری اصلی موبایل", @@ -381,24 +414,24 @@ const RA = ({ borderColor: "gray.200", boxShadow: "0 -6px 18px rgba(0, 0, 0, 0.08)", pb: "env(safe-area-inset-bottom)", - ...O, + ...L, children: /* @__PURE__ */ g(u, { h: "56px", px: 1.5, spacing: 1, align: "stretch", children: [ X.map((n) => /* @__PURE__ */ e( - fA, + Re, { item: n, isDisabled: y(n), - isActive: p(n), + isActive: b(n), linkComponent: t, - onNavigate: () => z(n) + onNavigate: () => M(n) }, n.path )), S && /* @__PURE__ */ e( - c, + s, { as: "button", - ref: v, + ref: G, type: "button", flex: "1", minW: 0, @@ -424,14 +457,14 @@ const RA = ({ color: D ? "blue.600" : "gray.600", bg: D ? "blue.50" : "transparent", children: [ - /* @__PURE__ */ e(d, { as: IA, boxSize: 5 }), + /* @__PURE__ */ e(d, { as: xe, boxSize: 5 }), /* @__PURE__ */ e( - s, + I, { fontSize: "10px", fontWeight: D ? "bold" : "medium", lineHeight: "short", - children: b + children: p } ) ] @@ -445,10 +478,10 @@ const RA = ({ S && /* @__PURE__ */ g( q, { - isOpen: L, + isOpen: O, placement: "bottom", - onClose: m, - finalFocusRef: v, + onClose: w, + finalFocusRef: G, children: [ /* @__PURE__ */ e($, {}), /* @__PURE__ */ g( @@ -458,11 +491,11 @@ const RA = ({ maxH: "min(78dvh, 620px)", pb: "env(safe-area-inset-bottom)", children: [ - /* @__PURE__ */ e(AA, { insetInlineEnd: 3, insetInlineStart: "auto" }), - /* @__PURE__ */ e(eA, { borderBottomWidth: "1px", fontSize: "md", children: x }), - /* @__PURE__ */ g(oA, { py: 4, overflowY: "auto", children: [ - /* @__PURE__ */ e(nA, { columns: 4, spacing: 2, children: w.map((n) => { - const h = y(n), i = p(n), E = /* @__PURE__ */ g( + /* @__PURE__ */ e(ee, { insetInlineEnd: 3, insetInlineStart: "auto" }), + /* @__PURE__ */ e(oe, { borderBottomWidth: "1px", fontSize: "md", children: x }), + /* @__PURE__ */ g(Ae, { py: 4, overflowY: "auto", children: [ + /* @__PURE__ */ e(ne, { columns: 4, spacing: 2, children: f.map((n) => { + const h = y(n), i = b(n), E = /* @__PURE__ */ g( C, { h: "70px", @@ -479,7 +512,7 @@ const RA = ({ children: [ /* @__PURE__ */ e(d, { as: n.icon, boxSize: 5, flexShrink: 0 }), /* @__PURE__ */ e( - s, + I, { w: "full", fontSize: "10px", @@ -494,7 +527,7 @@ const RA = ({ } ); return h || i ? /* @__PURE__ */ e( - c, + s, { "aria-disabled": h ? "true" : void 0, "aria-current": i ? "page" : void 0, @@ -502,19 +535,19 @@ const RA = ({ }, n.path ) : /* @__PURE__ */ e( - G, + v, { linkComponent: t, href: n.path, _hover: { textDecoration: "none" }, - onClick: () => z(n), + onClick: () => M(n), "aria-current": i ? "page" : void 0, children: E }, n.path ); }) }), - R && /* @__PURE__ */ e(c, { mt: 4, pt: 4, borderTopWidth: "1px", borderColor: "gray.200", children: /* @__PURE__ */ g( + m && /* @__PURE__ */ e(s, { mt: 4, pt: 4, borderTopWidth: "1px", borderColor: "gray.200", children: /* @__PURE__ */ g( u, { as: "button", @@ -527,10 +560,10 @@ const RA = ({ color: "red.600", bg: "red.50", cursor: "pointer", - onClick: M, + onClick: k, children: [ /* @__PURE__ */ e(d, { as: W, boxSize: 5 }), - /* @__PURE__ */ e(s, { fontWeight: "bold", children: f }) + /* @__PURE__ */ e(I, { fontWeight: "bold", children: R }) ] } ) }) @@ -542,12 +575,12 @@ const RA = ({ } ) ] }); -}, zA = Object.assign(wA, { - Exit: B +}, Se = Object.assign(fe, { + Exit: P }); export { - WA as Header, - zA as Sidebar, - SA as getActiveSidebarItem, - P as isSidebarPathActive + Ge as Header, + Se as Sidebar, + We as getActiveSidebarItem, + B as isSidebarPathActive }; diff --git a/src/layout/Sidebar.jsx b/src/layout/Sidebar.jsx index ab0e8d9..06f0973 100644 --- a/src/layout/Sidebar.jsx +++ b/src/layout/Sidebar.jsx @@ -20,10 +20,43 @@ import { useDisclosure, } from "@chakra-ui/react"; import { Children, forwardRef, isValidElement, useRef } from "react"; -import { IoEllipsisHorizontal, IoExit } from "react-icons/io5"; import { logoutKeycloak } from "../core/keycloak.jsx"; import { usePermission } from "../core/permission.jsx"; +const EllipsisIcon = (props) => ( + + + + + +); + +const LogOutIcon = (props) => ( + + + + + +); + const normalizeSidebarPath = (value = "") => { const path = String(value).split(/[?#]/)[0] || ""; @@ -227,7 +260,7 @@ const SidebarRoot = ({ ); const hasExit = Boolean(exitElement); const logoutTitle = exitElement?.props?.title || "خروج"; - const logoutIcon = exitElement?.props?.icon || IoExit; + const logoutIcon = exitElement?.props?.icon || LogOutIcon; const resolvedCurrentPath = currentPath ?? @@ -368,7 +401,7 @@ const SidebarRoot = ({ color={isSecondaryItemActive ? "blue.600" : "gray.600"} bg={isSecondaryItemActive ? "blue.50" : "transparent"} > - +