Files
pole-book/server/node_modules/.strapi/vite/deps/AuthenticatedLayout-ABFJXKPE.js

1238 lines
38 KiB
JavaScript

import {
PrivateRoute
} from "./chunk-XF3H6QJC.js";
import {
LAYOUT_DATA,
Number,
STATES,
VerticalDivider
} from "./chunk-7XW66K7Y.js";
import {
require_lt,
require_valid
} from "./chunk-WAJBRAZM.js";
import {
useOnce
} from "./chunk-AF2Z2UHO.js";
import {
HTML5Backend
} from "./chunk-SYWYLB7I.js";
import {
DndProvider
} from "./chunk-S3HPKOXW.js";
import {
NpsSurvey
} from "./chunk-JRLAXHTE.js";
import {
useGuidedTour
} from "./chunk-PFI4R5WA.js";
import {
useConfiguration
} from "./chunk-ERK7O2GM.js";
import {
require_cloneDeep
} from "./chunk-GGK2TLCV.js";
import "./chunk-PW7XKCYO.js";
import "./chunk-RMBEU7DO.js";
import "./chunk-RI2W2UZ6.js";
import "./chunk-XLSIZGJF.js";
import "./chunk-EGNP2T5O.js";
import {
AppInfoProvider,
useTracking
} from "./chunk-GSN7U3BK.js";
import {
useInformationQuery
} from "./chunk-T3B5F2LV.js";
import "./chunk-YXDCVYVT.js";
import {
getDisplayName,
hashAdminUserEmail
} from "./chunk-PVNXTKO6.js";
import "./chunk-CMLQV3Z2.js";
import "./chunk-PQINNV4N.js";
import "./chunk-VYSYYPOB.js";
import {
Page
} from "./chunk-5CAWUBTQ.js";
import {
useAuth,
useStrapiApp
} from "./chunk-W2TBR6J3.js";
import {
useTypedSelector
} from "./chunk-QEGMJR7H.js";
import {
require_get
} from "./chunk-LCL5TIBZ.js";
import "./chunk-WOQNBAGN.js";
import "./chunk-BHLYCXQ7.js";
import "./chunk-76QM3EFM.js";
import "./chunk-CE4VABH2.js";
import {
fn
} from "./chunk-5VODLFKF.js";
import "./chunk-N55RVBRV.js";
import {
AccessibleIcon,
Avatar,
Badge,
Box,
Button,
Divider,
Flex,
FocusTrap,
IconButton,
LinkButton,
Menu,
Portal$1,
SkipToContent,
TooltipImpl,
Typography,
VisuallyHidden,
useCollator,
useIntl
} from "./chunk-7XB6XSWQ.js";
import {
NavLink,
Outlet,
useLocation,
useNavigate
} from "./chunk-TUXTO2Z5.js";
import "./chunk-FOD4ENRR.js";
import {
ForwardRef$2N,
ForwardRef$2t,
ForwardRef$45,
ForwardRef$4d,
ForwardRef$5d,
ForwardRef$P
} from "./chunk-WRD5KPDH.js";
import {
require_jsx_runtime
} from "./chunk-NIAJZ5MX.js";
import {
dt
} from "./chunk-ACIMPXWY.js";
import {
require_react
} from "./chunk-MADUDGYZ.js";
import {
__toESM
} from "./chunk-PLDDJCW6.js";
// node_modules/@strapi/admin/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs
var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1);
var React3 = __toESM(require_react(), 1);
// node_modules/@strapi/admin/package.json
var package_default = {
name: "@strapi/admin",
version: "5.13.0",
description: "Strapi Admin",
repository: {
type: "git",
url: "git://github.com/strapi/strapi.git"
},
license: "SEE LICENSE IN LICENSE",
author: {
name: "Strapi Solutions SAS",
email: "hi@strapi.io",
url: "https://strapi.io"
},
maintainers: [
{
name: "Strapi Solutions SAS",
email: "hi@strapi.io",
url: "https://strapi.io"
}
],
exports: {
"./strapi-admin": {
types: "./dist/admin/src/index.d.ts",
source: "./admin/src/index.ts",
import: "./dist/admin/index.mjs",
require: "./dist/admin/index.js",
default: "./dist/admin/index.js"
},
"./strapi-admin/ee": {
types: "./dist/admin/src/ee.d.ts",
source: "./admin/src/ee.ts",
import: "./dist/admin/ee.mjs",
require: "./dist/admin/ee.js",
default: "./dist/admin/ee.js"
},
"./strapi-admin/test": {
types: "./dist/admin/tests/index.d.ts",
source: "./admin/tests/index.ts",
import: "./dist/admin/test.mjs",
require: "./dist/admin/test.js",
default: "./dist/admin/test.js"
},
"./_internal": {
types: "./dist/_internal/index.d.ts",
source: "./_internal/index.ts",
import: "./dist/_internal.mjs",
require: "./dist/_internal.js",
default: "./dist/_internal.js"
},
"./strapi-server": {
types: "./dist/server/src/index.d.ts",
source: "./server/src/index.js",
import: "./dist/server/index.mjs",
require: "./dist/server/index.js",
default: "./dist/server/index.js"
},
"./package.json": "./package.json"
},
files: [
"dist/"
],
scripts: {
build: "run -T npm-run-all clean --parallel build:code build:types",
"build:code": "run -T rollup -c",
"build:types": "run -T run-p build:types:server build:types:admin build:types:internals",
"build:types:internals": "run -T tsc -p tsconfig.build.json --emitDeclarationOnly",
"build:types:server": "run -T tsc -p server/tsconfig.build.json --emitDeclarationOnly",
"build:types:admin": "run -T tsc -p admin/tsconfig.build.json --emitDeclarationOnly",
clean: "run -T rimraf ./dist",
lint: "run -T eslint .",
"test:front": "run -T cross-env IS_EE=true jest --config ./jest.config.front.js",
"test:front:watch": "run -T cross-env IS_EE=true jest --config ./jest.config.front.js --watchAll",
"test:ts": "run -T tsc -p tsconfig.json",
"test:ts:back": "run -T tsc --noEmit -p server/tsconfig.json",
"test:ts:front": "run -T tsc -p admin/tsconfig.json && run -T tsc -p ee/admin/tsconfig.json",
"test:unit": "run -T jest",
"test:unit:watch": "run -T jest --watch",
watch: "run -T rollup -c -w"
},
dependencies: {
"@casl/ability": "6.5.0",
"@internationalized/date": "3.5.4",
"@radix-ui/react-context": "1.0.1",
"@radix-ui/react-toolbar": "1.0.4",
"@reduxjs/toolkit": "1.9.7",
"@strapi/design-system": "2.0.0-rc.23",
"@strapi/icons": "2.0.0-rc.23",
"@strapi/permissions": "5.13.0",
"@strapi/types": "5.13.0",
"@strapi/typescript-utils": "5.13.0",
"@strapi/utils": "5.13.0",
"@testing-library/dom": "10.1.0",
"@testing-library/react": "15.0.7",
"@testing-library/user-event": "14.5.2",
axios: "1.8.4",
bcryptjs: "2.4.3",
boxen: "5.1.2",
chalk: "^4.1.2",
codemirror5: "npm:codemirror@^5.65.11",
"cross-env": "^7.0.3",
"date-fns": "2.30.0",
execa: "5.1.1",
"fast-deep-equal": "3.1.3",
formik: "2.4.5",
"fractional-indexing": "3.2.0",
"fs-extra": "11.2.0",
"highlight.js": "^10.4.1",
immer: "9.0.21",
inquirer: "8.2.5",
invariant: "^2.2.4",
"is-localhost-ip": "2.0.0",
jsonwebtoken: "9.0.0",
koa: "2.15.4",
"koa-compose": "4.1.0",
"koa-passport": "6.0.0",
"koa-static": "5.0.0",
"koa2-ratelimit": "^1.1.3",
lodash: "4.17.21",
"node-schedule": "2.1.1",
ora: "5.4.1",
"p-map": "4.0.0",
"passport-local": "1.0.0",
pluralize: "8.0.0",
punycode: "2.3.1",
qs: "6.11.1",
"react-dnd": "16.0.1",
"react-dnd-html5-backend": "16.0.1",
"react-intl": "6.6.2",
"react-is": "^18.2.0",
"react-query": "3.39.3",
"react-redux": "8.1.3",
"react-select": "5.8.0",
"react-window": "1.8.10",
rimraf: "5.0.5",
"sanitize-html": "2.13.0",
scheduler: "0.23.0",
semver: "7.5.4",
sift: "16.0.1",
typescript: "5.4.4",
"use-context-selector": "1.4.1",
yup: "0.32.9",
zod: "^3.22.4"
},
devDependencies: {
"@strapi/admin-test-utils": "5.13.0",
"@strapi/data-transfer": "5.13.0",
"@types/codemirror5": "npm:@types/codemirror@^5.60.15",
"@types/fs-extra": "11.0.4",
"@types/invariant": "2.2.36",
"@types/jsonwebtoken": "9.0.3",
"@types/koa-passport": "6.0.1",
"@types/lodash": "^4.14.191",
"@types/markdown-it": "13.0.7",
"@types/markdown-it-container": "2.0.9",
"@types/markdown-it-emoji": "2.0.4",
"@types/markdown-it-footnote": "3.0.3",
"@types/passport-local": "1.0.36",
"@types/pluralize": "0.0.32",
"@types/punycode": "2.1.4",
"@types/react-window": "1.8.8",
"@types/sanitize-html": "2.13.0",
"@vitejs/plugin-react-swc": "3.6.0",
"koa-body": "6.0.1",
msw: "1.3.0",
react: "18.3.1",
"react-dom": "18.3.1",
"react-router-dom": "6.22.3",
"styled-components": "6.1.8",
vite: "5.4.17",
"vite-plugin-dts": "^4.3.0"
},
peerDependencies: {
"@strapi/data-transfer": "^5.0.0",
react: "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.0.0",
"styled-components": "^6.0.0"
},
engines: {
node: ">=18.0.0 <=22.x.x",
npm: ">=6.0.0"
},
nx: {
targets: {
build: {
outputs: [
"{projectRoot}/build"
]
}
}
}
};
// node_modules/@strapi/admin/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs
var import_lt = __toESM(require_lt(), 1);
var import_valid = __toESM(require_valid(), 1);
// node_modules/@strapi/admin/dist/admin/admin/src/components/GuidedTour/Modal.mjs
var import_jsx_runtime = __toESM(require_jsx_runtime(), 1);
var import_react = __toESM(require_react(), 1);
var import_get = __toESM(require_get(), 1);
var GuidedTourModal = () => {
const guidedTour = useGuidedTour("GuidedTourModal", (state) => state);
const { currentStep, guidedTourState, setCurrentStep, setStepState, isGuidedTourVisible, setSkipped } = guidedTour;
const { formatMessage } = useIntl();
const { trackUsage } = useTracking();
if (!currentStep || !isGuidedTourVisible) {
return null;
}
const stepData = (0, import_get.default)(LAYOUT_DATA, currentStep);
const sectionKeys = Object.keys(guidedTourState);
const [sectionName, stepName] = currentStep.split(".");
const sectionIndex = sectionKeys.indexOf(sectionName);
const stepIndex = Object.keys(guidedTourState[sectionName]).indexOf(stepName);
const hasSectionAfter = sectionIndex < sectionKeys.length - 1;
const hasStepAfter = stepIndex < Object.keys(guidedTourState[sectionName]).length - 1;
const handleCtaClick = () => {
setStepState(currentStep, true);
if (stepData) {
trackUsage(stepData.trackingEvent);
}
setCurrentStep(null);
};
const handleSkip = () => {
setSkipped(true);
setCurrentStep(null);
trackUsage("didSkipGuidedtour");
};
return (0, import_jsx_runtime.jsx)(Portal$1, {
children: (0, import_jsx_runtime.jsx)(ModalWrapper, {
onClick: handleCtaClick,
padding: 8,
justifyContent: "center",
children: (0, import_jsx_runtime.jsx)(FocusTrap, {
onEscape: handleCtaClick,
children: (0, import_jsx_runtime.jsxs)(Flex, {
direction: "column",
alignItems: "stretch",
background: "neutral0",
width: `66rem`,
shadow: "popupShadow",
hasRadius: true,
padding: 4,
gap: 8,
role: "dialog",
"aria-modal": true,
onClick: (e) => e.stopPropagation(),
children: [
(0, import_jsx_runtime.jsx)(Flex, {
justifyContent: "flex-end",
children: (0, import_jsx_runtime.jsx)(IconButton, {
onClick: handleCtaClick,
withTooltip: false,
label: formatMessage({
id: "app.utils.close-label",
defaultMessage: "Close"
}),
children: (0, import_jsx_runtime.jsx)(ForwardRef$45, {})
})
}),
(0, import_jsx_runtime.jsx)(Box, {
paddingLeft: 7,
paddingRight: 7,
paddingBottom: !hasStepAfter && !hasSectionAfter ? 8 : 0,
children: (0, import_jsx_runtime.jsx)(GuidedTourStepper, {
title: stepData && "title" in stepData ? stepData.title : void 0,
cta: stepData && "cta" in stepData ? stepData.cta : void 0,
onCtaClick: handleCtaClick,
sectionIndex,
stepIndex,
hasSectionAfter,
children: stepData && "content" in stepData && (0, import_jsx_runtime.jsx)(GuidedTourContent, {
...stepData.content
})
})
}),
!(!hasStepAfter && !hasSectionAfter) && (0, import_jsx_runtime.jsx)(Flex, {
justifyContent: "flex-end",
children: (0, import_jsx_runtime.jsx)(Button, {
variant: "tertiary",
onClick: handleSkip,
children: formatMessage({
id: "app.components.GuidedTour.skip",
defaultMessage: "Skip the tour"
})
})
})
]
})
})
})
});
};
var ModalWrapper = dt(Flex)`
position: fixed;
z-index: 4;
inset: 0;
/* this is theme.colors.neutral800 with opacity */
background: ${({ theme }) => `${theme.colors.neutral800}1F`};
`;
var GuidedTourStepper = ({ title, children, cta, onCtaClick, sectionIndex, stepIndex, hasSectionAfter }) => {
const { formatMessage } = useIntl();
const hasSectionBefore = sectionIndex > 0;
const hasStepsBefore = stepIndex > 0;
const nextSectionIndex = sectionIndex + 1;
return (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, {
children: [
(0, import_jsx_runtime.jsxs)(Flex, {
alignItems: "stretch",
children: [
(0, import_jsx_runtime.jsx)(Flex, {
marginRight: 8,
justifyContent: "center",
minWidth: `3rem`,
children: hasSectionBefore && (0, import_jsx_runtime.jsx)(VerticalDivider, {
state: STATES.IS_DONE,
minHeight: `2.4rem`
})
}),
(0, import_jsx_runtime.jsx)(Typography, {
variant: "sigma",
textColor: "primary600",
children: formatMessage({
id: "app.components.GuidedTour.title",
defaultMessage: "3 steps to get started"
})
})
]
}),
(0, import_jsx_runtime.jsxs)(Flex, {
children: [
(0, import_jsx_runtime.jsx)(Flex, {
marginRight: 8,
minWidth: `3rem`,
children: (0, import_jsx_runtime.jsx)(Number, {
state: hasStepsBefore ? STATES.IS_DONE : STATES.IS_ACTIVE,
paddingTop: 3,
paddingBottom: 3,
children: sectionIndex + 1
})
}),
title && (0, import_jsx_runtime.jsx)(Typography, {
variant: "alpha",
fontWeight: "bold",
textColor: "neutral800",
tag: "h3",
id: "title",
children: formatMessage(title)
})
]
}),
(0, import_jsx_runtime.jsxs)(Flex, {
alignItems: "stretch",
children: [
(0, import_jsx_runtime.jsx)(Flex, {
marginRight: 8,
direction: "column",
justifyContent: "center",
minWidth: `3rem`,
children: hasSectionAfter && (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, {
children: [
(0, import_jsx_runtime.jsx)(VerticalDivider, {
state: STATES.IS_DONE
}),
hasStepsBefore && (0, import_jsx_runtime.jsx)(Number, {
state: STATES.IS_ACTIVE,
paddingTop: 3,
children: nextSectionIndex + 1
})
]
})
}),
(0, import_jsx_runtime.jsxs)(Box, {
children: [
children,
cta && (cta.target ? (0, import_jsx_runtime.jsx)(LinkButton, {
tag: NavLink,
endIcon: (0, import_jsx_runtime.jsx)(ForwardRef$5d, {}),
onClick: onCtaClick,
to: cta.target,
children: formatMessage(cta.title)
}) : (0, import_jsx_runtime.jsx)(Button, {
endIcon: (0, import_jsx_runtime.jsx)(ForwardRef$5d, {}),
onClick: onCtaClick,
children: formatMessage(cta.title)
}))
]
})
]
}),
hasStepsBefore && hasSectionAfter && (0, import_jsx_runtime.jsx)(Box, {
paddingTop: 3,
children: (0, import_jsx_runtime.jsx)(Flex, {
marginRight: 8,
justifyContent: "center",
width: `3rem`,
children: (0, import_jsx_runtime.jsx)(VerticalDivider, {
state: STATES.IS_DONE,
minHeight: `2.4rem`
})
})
})
]
});
};
var GuidedTourContent = ({ id, defaultMessage }) => {
const { formatMessage } = useIntl();
return (0, import_jsx_runtime.jsx)(Flex, {
direction: "column",
alignItems: "stretch",
gap: 4,
paddingBottom: 6,
children: formatMessage({
id,
defaultMessage
}, {
documentationLink: DocumentationLink,
b: Bold,
p: Paragraph,
light: Light,
ul: List,
li: ListItem
})
});
};
var DocumentationLink = (children) => (0, import_jsx_runtime.jsx)(Typography, {
tag: "a",
textColor: "primary600",
target: "_blank",
rel: "noopener noreferrer",
href: "https://docs.strapi.io/developer-docs/latest/developer-resources/database-apis-reference/rest-api.html#api-parameters",
children
});
var Bold = (children) => (0, import_jsx_runtime.jsx)(Typography, {
fontWeight: "semiBold",
children
});
var Paragraph = (children) => (0, import_jsx_runtime.jsx)(Typography, {
children
});
var Light = (children) => (0, import_jsx_runtime.jsx)(Typography, {
textColor: "neutral600",
children
});
var List = (children) => (0, import_jsx_runtime.jsx)(Box, {
paddingLeft: 6,
children: (0, import_jsx_runtime.jsx)("ul", {
children
})
});
var LiStyled = dt.li`
list-style: disc;
&::marker {
color: ${({ theme }) => theme.colors.neutral800};
}
`;
var ListItem = (children) => (0, import_jsx_runtime.jsx)(LiStyled, {
children
});
// node_modules/@strapi/admin/dist/admin/admin/src/components/LeftMenu.mjs
var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1);
var import_react4 = __toESM(require_react(), 1);
// node_modules/@strapi/admin/dist/admin/admin/src/components/MainNav/MainNav.mjs
var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1);
var MainNavWrapper = dt(Flex)`
border-right: 1px solid ${({ theme }) => theme.colors.neutral150};
`;
var MainNav = (props) => (0, import_jsx_runtime2.jsx)(MainNavWrapper, {
alignItems: "normal",
tag: "nav",
background: "neutral0",
direction: "column",
height: "100vh",
position: "sticky",
top: 0,
zIndex: 2,
width: 10,
...props
});
// node_modules/@strapi/admin/dist/admin/admin/src/components/MainNav/NavBrand.mjs
var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1);
var BrandIconWrapper = dt(Flex)`
svg,
img {
border-radius: ${({ theme }) => theme.borderRadius};
object-fit: contain;
height: 2.4rem;
width: 2.4rem;
}
`;
var NavBrand = () => {
var _a;
const { formatMessage } = useIntl();
const { logos: { menu } } = useConfiguration("LeftMenu");
return (0, import_jsx_runtime3.jsx)(Box, {
padding: 3,
children: (0, import_jsx_runtime3.jsxs)(BrandIconWrapper, {
direction: "column",
justifyContent: "center",
width: "3.2rem",
height: "3.2rem",
children: [
(0, import_jsx_runtime3.jsx)("img", {
src: ((_a = menu.custom) == null ? void 0 : _a.url) || menu.default,
alt: formatMessage({
id: "app.components.LeftMenu.logo.alt",
defaultMessage: "Application logo"
}),
width: "100%",
height: "100%"
}),
(0, import_jsx_runtime3.jsxs)(VisuallyHidden, {
children: [
(0, import_jsx_runtime3.jsx)("span", {
children: formatMessage({
id: "app.components.LeftMenu.navbrand.title",
defaultMessage: "Strapi Dashboard"
})
}),
(0, import_jsx_runtime3.jsx)("span", {
children: formatMessage({
id: "app.components.LeftMenu.navbrand.workplace",
defaultMessage: "Workplace"
})
})
]
})
]
})
});
};
// node_modules/@strapi/admin/dist/admin/admin/src/components/MainNav/NavLink.mjs
var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1);
var import_react2 = __toESM(require_react(), 1);
var MainNavLinkWrapper = dt(NavLink)`
text-decoration: none;
display: flex;
border-radius: ${({ theme }) => theme.borderRadius};
background: ${({ theme }) => theme.colors.neutral0};
color: ${({ theme }) => theme.colors.neutral500};
position: relative;
width: fit-content;
padding-block: 0.6rem;
padding-inline: 0.6rem;
&:hover {
svg path {
fill: ${({ theme }) => theme.colors.neutral600};
}
background: ${({ theme }) => theme.colors.neutral100};
}
&.active {
svg path {
fill: ${({ theme }) => theme.colors.primary600};
}
background: ${({ theme }) => theme.colors.primary100};
}
`;
var LinkImpl = ({ children, ...props }) => {
return (0, import_jsx_runtime4.jsx)(MainNavLinkWrapper, {
...props,
children
});
};
var TooltipImpl2 = ({ children, label, position = "right" }) => {
return (0, import_jsx_runtime4.jsx)(TooltipImpl, {
side: position,
label,
delayDuration: 0,
children: (0, import_jsx_runtime4.jsx)("span", {
children
})
});
};
var IconImpl = ({ label, children }) => {
if (!children) {
return null;
}
return (0, import_jsx_runtime4.jsx)(AccessibleIcon, {
label,
children
});
};
var CustomBadge = dt(Badge)`
/* override default badge styles to change the border radius of the Base element in the Design System */
border-radius: ${({ theme }) => theme.spaces[10]};
height: 2rem;
`;
var BadgeImpl = ({ children, label, ...props }) => {
if (!children) {
return null;
}
return (0, import_jsx_runtime4.jsx)(CustomBadge, {
position: "absolute",
top: "-0.8rem",
left: "1.7rem",
"aria-label": label,
active: false,
...props,
children
});
};
var NavLink2 = {
Link: LinkImpl,
Tooltip: TooltipImpl2,
Icon: IconImpl,
Badge: BadgeImpl
};
// node_modules/@strapi/admin/dist/admin/admin/src/components/MainNav/NavUser.mjs
var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1);
var import_react3 = __toESM(require_react(), 1);
var MenuTrigger = dt(Menu.Trigger)`
height: ${({ theme }) => theme.spaces[7]};
width: ${({ theme }) => theme.spaces[7]};
border: none;
border-radius: 50%;
padding: 0;
overflow: hidden;
`;
var MenuContent = dt(Menu.Content)`
max-height: fit-content;
width: 200px;
`;
var UserInfo = dt(Flex)`
&& {
padding: ${({ theme }) => theme.spaces[3]};
}
align-items: flex-start;
`;
var BadgeWrapper = dt(Flex)`
display: flex;
flex-wrap: wrap;
gap: ${({ theme }) => theme.spaces[1]};
width: 100%;
`;
var StyledTypography = dt(Typography)`
margin-bottom: ${({ theme }) => theme.spaces[3]};
`;
var MenuItem = dt(Menu.Item)`
& > span {
width: 100%;
display: flex;
align-items: center;
gap: ${({ theme }) => theme.spaces[3]};
}
`;
var MenuItemDanger = dt(MenuItem)`
&:hover {
background: ${({ theme }) => theme.colors.danger100};
}
`;
var NavUser = ({ children, initials, ...props }) => {
var _a;
const { formatMessage } = useIntl();
const navigate = useNavigate();
const user = useAuth("User", (state) => state.user);
const logout = useAuth("Logout", (state) => state.logout);
const handleProfile = () => {
navigate("/me");
};
const handleLogout = () => {
logout();
navigate("/auth/login");
};
return (0, import_jsx_runtime5.jsx)(Flex, {
justifyContent: "center",
padding: 3,
borderStyle: "solid",
borderWidth: "1px 0 0 0",
borderColor: "neutral150",
...props,
children: (0, import_jsx_runtime5.jsxs)(Menu.Root, {
children: [
(0, import_jsx_runtime5.jsxs)(MenuTrigger, {
endIcon: null,
fullWidth: true,
justifyContent: "center",
children: [
(0, import_jsx_runtime5.jsx)(Avatar.Item, {
delayMs: 0,
fallback: initials
}),
(0, import_jsx_runtime5.jsx)(VisuallyHidden, {
tag: "span",
children
})
]
}),
(0, import_jsx_runtime5.jsxs)(MenuContent, {
popoverPlacement: "top-start",
zIndex: 3,
children: [
(0, import_jsx_runtime5.jsxs)(UserInfo, {
direction: "column",
gap: 0,
alignItems: "flex-start",
children: [
(0, import_jsx_runtime5.jsx)(Typography, {
variant: "omega",
fontWeight: "bold",
textTransform: "none",
children
}),
(0, import_jsx_runtime5.jsx)(StyledTypography, {
variant: "pi",
textColor: "neutral600",
children: user == null ? void 0 : user.email
}),
(0, import_jsx_runtime5.jsx)(BadgeWrapper, {
children: (_a = user == null ? void 0 : user.roles) == null ? void 0 : _a.map((role) => (0, import_jsx_runtime5.jsx)(Badge, {
children: role.name
}, role.id))
})
]
}),
(0, import_jsx_runtime5.jsx)(Menu.Separator, {}),
(0, import_jsx_runtime5.jsx)(MenuItem, {
onSelect: handleProfile,
children: formatMessage({
id: "global.profile",
defaultMessage: "Profile settings"
})
}),
(0, import_jsx_runtime5.jsx)(MenuItemDanger, {
onSelect: handleLogout,
color: "danger600",
children: formatMessage({
id: "app.components.LeftMenu.logout",
defaultMessage: "Log out"
})
})
]
})
]
})
});
};
// node_modules/@strapi/admin/dist/admin/admin/src/components/LeftMenu.mjs
var sortLinks = (links) => {
return links.sort((a, b) => {
const positionA = a.position ?? 6;
const positionB = b.position ?? 6;
if (positionA < positionB) {
return -1;
} else {
return 1;
}
});
};
var NavLinkBadgeCounter = dt(NavLink2.Badge)`
span {
color: ${({ theme }) => theme.colors.neutral0};
}
`;
var NavLinkBadgeLock = dt(NavLink2.Badge)`
background-color: transparent;
`;
var NavListWrapper = dt(Flex)`
overflow-y: auto;
`;
var LeftMenu = ({ generalSectionLinks, pluginsSectionLinks }) => {
const user = useAuth("AuthenticatedApp", (state) => state.user);
const { trackUsage } = useTracking();
const { pathname } = useLocation();
const userDisplayName = getDisplayName(user);
const { formatMessage, locale } = useIntl();
const formatter = useCollator(locale, {
sensitivity: "base"
});
const initials = userDisplayName.split(" ").map((name) => name.substring(0, 1)).join("").substring(0, 2);
const handleClickOnLink = (destination) => {
trackUsage("willNavigate", {
from: pathname,
to: destination
});
};
const listLinksAlphabeticallySorted = [
...pluginsSectionLinks,
...generalSectionLinks
].sort((a, b) => formatter.compare(formatMessage(a.intlLabel), formatMessage(b.intlLabel)));
const listLinks = sortLinks(listLinksAlphabeticallySorted);
return (0, import_jsx_runtime6.jsxs)(MainNav, {
children: [
(0, import_jsx_runtime6.jsx)(NavBrand, {}),
(0, import_jsx_runtime6.jsx)(Divider, {}),
(0, import_jsx_runtime6.jsx)(NavListWrapper, {
tag: "ul",
gap: 3,
direction: "column",
flex: 1,
paddingTop: 3,
paddingBottom: 3,
children: listLinks.length > 0 ? listLinks.map((link) => {
const LinkIcon = link.icon;
const badgeContentLock = (link == null ? void 0 : link.licenseOnly) ? (0, import_jsx_runtime6.jsx)(ForwardRef$2t, {
fill: "warning500"
}) : void 0;
const badgeContentNumeric = link.notificationsCount && link.notificationsCount > 0 ? link.notificationsCount.toString() : void 0;
const labelValue = formatMessage(link.intlLabel);
return (0, import_jsx_runtime6.jsx)(Flex, {
tag: "li",
children: (0, import_jsx_runtime6.jsx)(NavLink2.Tooltip, {
label: labelValue,
children: (0, import_jsx_runtime6.jsxs)(NavLink2.Link, {
to: link.to,
onClick: () => handleClickOnLink(link.to),
"aria-label": labelValue,
children: [
(0, import_jsx_runtime6.jsx)(NavLink2.Icon, {
label: labelValue,
children: (0, import_jsx_runtime6.jsx)(LinkIcon, {
width: "20",
height: "20",
fill: "neutral500"
})
}),
badgeContentLock ? (0, import_jsx_runtime6.jsx)(NavLinkBadgeLock, {
label: "locked",
textColor: "neutral500",
paddingLeft: 0,
paddingRight: 0,
children: badgeContentLock
}) : badgeContentNumeric ? (0, import_jsx_runtime6.jsx)(NavLinkBadgeCounter, {
label: badgeContentNumeric,
backgroundColor: "primary600",
width: "2.3rem",
color: "neutral0",
children: badgeContentNumeric
}) : null
]
})
})
}, link.to);
}) : null
}),
(0, import_jsx_runtime6.jsx)(NavUser, {
initials,
children: userDisplayName
})
]
});
};
// node_modules/@strapi/admin/dist/admin/admin/src/components/PluginsInitializer.mjs
var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1);
var React = __toESM(require_react(), 1);
var PluginsInitializer = ({ children }) => {
const appPlugins = useStrapiApp("PluginsInitializer", (state) => state.plugins);
const [{ plugins }, dispatch] = React.useReducer(reducer, initialState, () => init(appPlugins));
const setPlugin = React.useRef((pluginId) => {
dispatch({
type: "SET_PLUGIN_READY",
pluginId
});
});
const hasApluginNotReady = Object.keys(plugins).some((plugin) => plugins[plugin].isReady === false);
if (hasApluginNotReady) {
const initializers = Object.keys(plugins).reduce((acc, current) => {
const InitializerComponent = plugins[current].initializer;
if (InitializerComponent) {
const key = plugins[current].pluginId;
acc.push((0, import_jsx_runtime7.jsx)(InitializerComponent, {
setPlugin: setPlugin.current
}, key));
}
return acc;
}, []);
return (0, import_jsx_runtime7.jsxs)(import_jsx_runtime7.Fragment, {
children: [
initializers,
(0, import_jsx_runtime7.jsx)(Page.Loading, {})
]
});
}
return children;
};
var initialState = {
plugins: {}
};
var reducer = (state = initialState, action) => fn(state, (draftState) => {
switch (action.type) {
case "SET_PLUGIN_READY": {
draftState.plugins[action.pluginId].isReady = true;
break;
}
default:
return draftState;
}
});
var init = (plugins) => {
return {
plugins
};
};
// node_modules/@strapi/admin/dist/admin/admin/src/hooks/useMenu.mjs
var React2 = __toESM(require_react(), 1);
var import_cloneDeep = __toESM(require_cloneDeep(), 1);
var useMenu = (shouldUpdateStrapi) => {
var _a;
const checkUserHasPermissions = useAuth("useMenu", (state) => state.checkUserHasPermissions);
const menu = useStrapiApp("useMenu", (state) => state.menu);
const permissions = useTypedSelector((state) => state.admin_app.permissions);
const [menuWithUserPermissions, setMenuWithUserPermissions] = React2.useState({
generalSectionLinks: [
{
icon: ForwardRef$2N,
intlLabel: {
id: "global.home",
defaultMessage: "Home"
},
to: "/",
permissions: [],
position: 0
},
{
icon: ForwardRef$P,
intlLabel: {
id: "global.marketplace",
defaultMessage: "Marketplace"
},
to: "/marketplace",
permissions: ((_a = permissions.marketplace) == null ? void 0 : _a.main) ?? [],
position: 7
},
{
icon: ForwardRef$4d,
intlLabel: {
id: "global.settings",
defaultMessage: "Settings"
},
to: "/settings",
// Permissions of this link are retrieved in the init phase
// using the settings menu
permissions: [],
notificationsCount: 0,
position: 9
}
],
pluginsSectionLinks: [],
isLoading: true
});
const generalSectionLinksRef = React2.useRef(menuWithUserPermissions.generalSectionLinks);
React2.useEffect(() => {
async function applyMenuPermissions() {
const authorizedPluginSectionLinks = await getPluginSectionLinks(menu, checkUserHasPermissions);
const authorizedGeneralSectionLinks = await getGeneralLinks(generalSectionLinksRef.current, shouldUpdateStrapi, checkUserHasPermissions);
setMenuWithUserPermissions((state) => ({
...state,
generalSectionLinks: authorizedGeneralSectionLinks,
pluginsSectionLinks: authorizedPluginSectionLinks,
isLoading: false
}));
}
applyMenuPermissions();
}, [
setMenuWithUserPermissions,
generalSectionLinksRef,
menu,
permissions,
shouldUpdateStrapi,
checkUserHasPermissions
]);
return menuWithUserPermissions;
};
var getGeneralLinks = async (generalSectionRawLinks, shouldUpdateStrapi = false, checkUserHasPermissions) => {
const generalSectionLinksPermissions = await Promise.all(generalSectionRawLinks.map(({ permissions }) => checkUserHasPermissions(permissions)));
const authorizedGeneralSectionLinks = generalSectionRawLinks.filter((_, index) => generalSectionLinksPermissions[index].length > 0);
const settingsLinkIndex = authorizedGeneralSectionLinks.findIndex((obj) => obj.to === "/settings");
if (settingsLinkIndex === -1) {
return [];
}
const authorizedGeneralLinksClone = (0, import_cloneDeep.default)(authorizedGeneralSectionLinks);
authorizedGeneralLinksClone[settingsLinkIndex].notificationsCount = shouldUpdateStrapi ? 1 : 0;
return authorizedGeneralLinksClone;
};
var getPluginSectionLinks = async (pluginsSectionRawLinks, checkUserHasPermissions) => {
const pluginSectionLinksPermissions = await Promise.all(pluginsSectionRawLinks.map(({ permissions }) => checkUserHasPermissions(permissions)));
const authorizedPluginSectionLinks = pluginsSectionRawLinks.filter((_, index) => pluginSectionLinksPermissions[index].length > 0);
return authorizedPluginSectionLinks;
};
// node_modules/@strapi/admin/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs
var { version: strapiVersion } = package_default;
var AdminLayout = () => {
const setGuidedTourVisibility = useGuidedTour("AdminLayout", (state) => state.setGuidedTourVisibility);
const { formatMessage } = useIntl();
const userInfo = useAuth("AuthenticatedApp", (state) => state.user);
const [userId, setUserId] = React3.useState();
const { showReleaseNotification } = useConfiguration("AuthenticatedApp");
const { data: appInfo, isLoading: isLoadingAppInfo } = useInformationQuery();
const [tagName, setTagName] = React3.useState(strapiVersion);
React3.useEffect(() => {
if (showReleaseNotification) {
fetch("https://api.github.com/repos/strapi/strapi/releases/latest").then(async (res) => {
if (!res.ok) {
return;
}
const response = await res.json();
if (!response.tag_name) {
throw new Error();
}
setTagName(response.tag_name);
}).catch(() => {
});
}
}, [
showReleaseNotification
]);
const userRoles = useAuth("AuthenticatedApp", (state) => {
var _a;
return (_a = state.user) == null ? void 0 : _a.roles;
});
React3.useEffect(() => {
if (userRoles) {
const isUserSuperAdmin = userRoles.find(({ code }) => code === "strapi-super-admin");
if (isUserSuperAdmin && (appInfo == null ? void 0 : appInfo.autoReload)) {
setGuidedTourVisibility(true);
}
}
}, [
userRoles,
appInfo == null ? void 0 : appInfo.autoReload,
setGuidedTourVisibility
]);
React3.useEffect(() => {
hashAdminUserEmail(userInfo).then((id) => {
if (id) {
setUserId(id);
}
});
}, [
userInfo
]);
const { trackUsage } = useTracking();
const { isLoading: isLoadingMenu, generalSectionLinks, pluginsSectionLinks } = useMenu(checkLatestStrapiVersion(strapiVersion, tagName));
useOnce(() => {
trackUsage("didAccessAuthenticatedAdministration");
});
if (isLoadingMenu || isLoadingAppInfo) {
return (0, import_jsx_runtime8.jsx)(Page.Loading, {});
}
return (0, import_jsx_runtime8.jsxs)(AppInfoProvider, {
...appInfo,
userId,
latestStrapiReleaseTag: tagName,
shouldUpdateStrapi: checkLatestStrapiVersion(strapiVersion, tagName),
children: [
(0, import_jsx_runtime8.jsx)(NpsSurvey, {}),
(0, import_jsx_runtime8.jsx)(PluginsInitializer, {
children: (0, import_jsx_runtime8.jsx)(DndProvider, {
backend: HTML5Backend,
children: (0, import_jsx_runtime8.jsxs)(Box, {
background: "neutral100",
children: [
(0, import_jsx_runtime8.jsx)(SkipToContent, {
children: formatMessage({
id: "skipToContent",
defaultMessage: "Skip to content"
})
}),
(0, import_jsx_runtime8.jsxs)(Flex, {
alignItems: "flex-start",
children: [
(0, import_jsx_runtime8.jsx)(LeftMenu, {
generalSectionLinks,
pluginsSectionLinks
}),
(0, import_jsx_runtime8.jsxs)(Box, {
flex: 1,
children: [
(0, import_jsx_runtime8.jsx)(Outlet, {}),
(0, import_jsx_runtime8.jsx)(GuidedTourModal, {})
]
})
]
})
]
})
})
})
]
});
};
var PrivateAdminLayout = () => {
return (0, import_jsx_runtime8.jsx)(PrivateRoute, {
children: (0, import_jsx_runtime8.jsx)(AdminLayout, {})
});
};
var checkLatestStrapiVersion = (currentPackageVersion, latestPublishedVersion = "") => {
if (!(0, import_valid.default)(currentPackageVersion) || !(0, import_valid.default)(latestPublishedVersion)) {
return false;
}
return (0, import_lt.default)(currentPackageVersion, latestPublishedVersion);
};
export {
AdminLayout,
PrivateAdminLayout
};
//# sourceMappingURL=AuthenticatedLayout-ABFJXKPE.js.map