@strapi/admin 5.46.1 → 5.47.0
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/admin/admin/src/components/Layouts/HeaderLayout.js +51 -8
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.js.map +1 -1
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs +52 -9
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs.map +1 -1
- package/dist/admin/admin/src/components/Layouts/utils/getMatchingDocLink.js +167 -0
- package/dist/admin/admin/src/components/Layouts/utils/getMatchingDocLink.js.map +1 -0
- package/dist/admin/admin/src/components/Layouts/utils/getMatchingDocLink.mjs +165 -0
- package/dist/admin/admin/src/components/Layouts/utils/getMatchingDocLink.mjs.map +1 -0
- package/dist/admin/admin/src/constants.js +8 -11
- package/dist/admin/admin/src/constants.js.map +1 -1
- package/dist/admin/admin/src/constants.mjs +8 -11
- package/dist/admin/admin/src/constants.mjs.map +1 -1
- package/dist/admin/admin/src/features/Auth.js +25 -0
- package/dist/admin/admin/src/features/Auth.js.map +1 -1
- package/dist/admin/admin/src/features/Auth.mjs +26 -1
- package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
- package/dist/admin/admin/src/features/Tracking.js.map +1 -1
- package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useIdleSessionLogout.js +62 -0
- package/dist/admin/admin/src/hooks/useIdleSessionLogout.js.map +1 -0
- package/dist/admin/admin/src/hooks/useIdleSessionLogout.mjs +40 -0
- package/dist/admin/admin/src/hooks/useIdleSessionLogout.mjs.map +1 -0
- package/dist/admin/admin/src/pages/Settings/constants.js +1 -2
- package/dist/admin/admin/src/pages/Settings/constants.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/constants.mjs +1 -2
- package/dist/admin/admin/src/pages/Settings/constants.mjs.map +1 -1
- package/dist/admin/admin/src/render.js +2 -1
- package/dist/admin/admin/src/render.js.map +1 -1
- package/dist/admin/admin/src/render.mjs +2 -1
- package/dist/admin/admin/src/render.mjs.map +1 -1
- package/dist/admin/admin/src/translations/en.json.js +1 -0
- package/dist/admin/admin/src/translations/en.json.js.map +1 -1
- package/dist/admin/admin/src/translations/en.json.mjs +1 -0
- package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/sk.json.js +446 -42
- package/dist/admin/admin/src/translations/sk.json.js.map +1 -1
- package/dist/admin/admin/src/translations/sk.json.mjs +445 -43
- package/dist/admin/admin/src/translations/sk.json.mjs.map +1 -1
- package/dist/admin/admin/src/utils/baseQuery.js +5 -0
- package/dist/admin/admin/src/utils/baseQuery.js.map +1 -1
- package/dist/admin/admin/src/utils/baseQuery.mjs +6 -1
- package/dist/admin/admin/src/utils/baseQuery.mjs.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.js +24 -0
- package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.mjs +23 -1
- package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
- package/dist/admin/admin/src/utils/jwt.js +37 -0
- package/dist/admin/admin/src/utils/jwt.js.map +1 -0
- package/dist/admin/admin/src/utils/jwt.mjs +35 -0
- package/dist/admin/admin/src/utils/jwt.mjs.map +1 -0
- package/dist/admin/index.js +2 -0
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/src/components/Layouts/HeaderLayout.d.ts +2 -0
- package/dist/admin/src/components/Layouts/utils/getMatchingDocLink.d.ts +6 -0
- package/dist/admin/src/features/Tracking.d.ts +8 -1
- package/dist/admin/src/hooks/useAdminRoles.d.ts +1 -1
- package/dist/admin/src/hooks/useIdleSessionLogout.d.ts +33 -0
- package/dist/admin/src/services/admin.d.ts +6 -6
- package/dist/admin/src/services/contentApi.d.ts +1 -1
- package/dist/admin/src/services/users.d.ts +8 -8
- package/dist/admin/src/utils/getFetchClient.d.ts +15 -1
- package/dist/admin/src/utils/jwt.d.ts +15 -0
- package/dist/server/server/src/bootstrap.js +3 -2
- package/dist/server/server/src/bootstrap.js.map +1 -1
- package/dist/server/server/src/bootstrap.mjs +4 -3
- package/dist/server/server/src/bootstrap.mjs.map +1 -1
- package/dist/server/server/src/policies/index.js +0 -2
- package/dist/server/server/src/policies/index.js.map +1 -1
- package/dist/server/server/src/policies/index.mjs +0 -2
- package/dist/server/server/src/policies/index.mjs.map +1 -1
- package/dist/server/server/src/register.js +1 -1
- package/dist/server/server/src/register.js.map +1 -1
- package/dist/server/server/src/routes/admin-tokens.js +0 -7
- package/dist/server/server/src/routes/admin-tokens.js.map +1 -1
- package/dist/server/server/src/routes/admin-tokens.mjs +0 -7
- package/dist/server/server/src/routes/admin-tokens.mjs.map +1 -1
- package/dist/server/server/src/routes/serve-admin-panel.js +8 -1
- package/dist/server/server/src/routes/serve-admin-panel.js.map +1 -1
- package/dist/server/server/src/routes/serve-admin-panel.mjs +6 -2
- package/dist/server/server/src/routes/serve-admin-panel.mjs.map +1 -1
- package/dist/server/server/src/services/api-token.js +71 -1
- package/dist/server/server/src/services/api-token.js.map +1 -1
- package/dist/server/server/src/services/api-token.mjs +71 -2
- package/dist/server/server/src/services/api-token.mjs.map +1 -1
- package/dist/server/server/src/services/token.js +11 -0
- package/dist/server/server/src/services/token.js.map +1 -1
- package/dist/server/server/src/services/token.mjs +11 -1
- package/dist/server/server/src/services/token.mjs.map +1 -1
- package/dist/server/server/src/strategies/admin-token.js +5 -63
- package/dist/server/server/src/strategies/admin-token.js.map +1 -1
- package/dist/server/server/src/strategies/admin-token.mjs +6 -64
- package/dist/server/server/src/strategies/admin-token.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +0 -5
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/policies/index.d.ts +0 -5
- package/dist/server/src/policies/index.d.ts.map +1 -1
- package/dist/server/src/routes/admin-tokens.d.ts.map +1 -1
- package/dist/server/src/routes/serve-admin-panel.d.ts +2 -0
- package/dist/server/src/routes/serve-admin-panel.d.ts.map +1 -1
- package/dist/server/src/services/api-token.d.ts +15 -1
- package/dist/server/src/services/api-token.d.ts.map +1 -1
- package/dist/server/src/services/token.d.ts +7 -1
- package/dist/server/src/services/token.d.ts.map +1 -1
- package/dist/server/src/strategies/admin-token.d.ts +12 -22
- package/dist/server/src/strategies/admin-token.d.ts.map +1 -1
- package/package.json +8 -8
- package/dist/server/server/src/policies/isAdminTokensEnabled.js +0 -16
- package/dist/server/server/src/policies/isAdminTokensEnabled.js.map +0 -1
- package/dist/server/server/src/policies/isAdminTokensEnabled.mjs +0 -14
- package/dist/server/server/src/policies/isAdminTokensEnabled.mjs.map +0 -1
- package/dist/server/src/policies/isAdminTokensEnabled.d.ts +0 -7
- package/dist/server/src/policies/isAdminTokensEnabled.d.ts.map +0 -1
|
@@ -3,10 +3,15 @@
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
var React = require('react');
|
|
5
5
|
var designSystem = require('@strapi/design-system');
|
|
6
|
+
var icons = require('@strapi/icons');
|
|
7
|
+
var reactIntl = require('react-intl');
|
|
8
|
+
var reactRouterDom = require('react-router-dom');
|
|
6
9
|
var theme = require('../../constants/theme.js');
|
|
10
|
+
var Tracking = require('../../features/Tracking.js');
|
|
7
11
|
var useDeviceType = require('../../hooks/useDeviceType.js');
|
|
8
12
|
var useElementOnScreen = require('../../hooks/useElementOnScreen.js');
|
|
9
13
|
var useMediaQuery = require('../../hooks/useMediaQuery.js');
|
|
14
|
+
var getMatchingDocLink = require('./utils/getMatchingDocLink.js');
|
|
10
15
|
|
|
11
16
|
function _interopNamespaceDefault(e) {
|
|
12
17
|
var n = Object.create(null);
|
|
@@ -27,9 +32,26 @@ function _interopNamespaceDefault(e) {
|
|
|
27
32
|
|
|
28
33
|
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
29
34
|
|
|
30
|
-
const BaseHeaderLayout = /*#__PURE__*/ React__namespace.forwardRef(({ navigationAction, primaryAction, secondaryAction, subtitle, title, sticky, width, ...props }, ref)=>{
|
|
35
|
+
const BaseHeaderLayout = /*#__PURE__*/ React__namespace.forwardRef(({ navigationAction, primaryAction, secondaryAction, subtitle, title, sticky, width, docLink, ...props }, ref)=>{
|
|
31
36
|
const isMobile = useMediaQuery.useIsMobile();
|
|
32
37
|
const isSubtitleString = typeof subtitle === 'string';
|
|
38
|
+
const { formatMessage } = reactIntl.useIntl();
|
|
39
|
+
const { trackUsage } = Tracking.useTracking();
|
|
40
|
+
const docLinkButton = docLink ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
|
|
41
|
+
onClick: ()=>trackUsage('didClickOnDocLink', {
|
|
42
|
+
from: docLink.path,
|
|
43
|
+
to: docLink.link
|
|
44
|
+
}),
|
|
45
|
+
size: "S",
|
|
46
|
+
label: formatMessage({
|
|
47
|
+
id: 'app.HeaderLayout.docLink.label',
|
|
48
|
+
defaultMessage: 'Learn more on our documentation'
|
|
49
|
+
}),
|
|
50
|
+
to: docLink.link,
|
|
51
|
+
tag: reactRouterDom.Link,
|
|
52
|
+
target: "_blank",
|
|
53
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(icons.Question, {})
|
|
54
|
+
}) : null;
|
|
33
55
|
if (sticky) {
|
|
34
56
|
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
35
57
|
display: "flex",
|
|
@@ -53,6 +75,7 @@ const BaseHeaderLayout = /*#__PURE__*/ React__namespace.forwardRef(({ navigation
|
|
|
53
75
|
justifyContent: "space-between",
|
|
54
76
|
wrap: "wrap",
|
|
55
77
|
width: "100%",
|
|
78
|
+
gap: 2,
|
|
56
79
|
children: [
|
|
57
80
|
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
58
81
|
children: [
|
|
@@ -82,9 +105,12 @@ const BaseHeaderLayout = /*#__PURE__*/ React__namespace.forwardRef(({ navigation
|
|
|
82
105
|
]
|
|
83
106
|
}),
|
|
84
107
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
85
|
-
children: primaryAction ? /*#__PURE__*/ jsxRuntime.
|
|
86
|
-
|
|
87
|
-
children:
|
|
108
|
+
children: primaryAction ? /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
109
|
+
gap: 2,
|
|
110
|
+
children: [
|
|
111
|
+
docLinkButton,
|
|
112
|
+
primaryAction
|
|
113
|
+
]
|
|
88
114
|
}) : undefined
|
|
89
115
|
})
|
|
90
116
|
]
|
|
@@ -141,7 +167,13 @@ const BaseHeaderLayout = /*#__PURE__*/ React__namespace.forwardRef(({ navigation
|
|
|
141
167
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
142
168
|
paddingLeft: 4,
|
|
143
169
|
marginLeft: "auto",
|
|
144
|
-
children:
|
|
170
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
171
|
+
gap: 2,
|
|
172
|
+
children: [
|
|
173
|
+
docLinkButton,
|
|
174
|
+
primaryAction
|
|
175
|
+
]
|
|
176
|
+
})
|
|
145
177
|
})
|
|
146
178
|
]
|
|
147
179
|
}),
|
|
@@ -175,6 +207,7 @@ const BaseHeaderLayout = /*#__PURE__*/ React__namespace.forwardRef(({ navigation
|
|
|
175
207
|
gap: 3,
|
|
176
208
|
children: [
|
|
177
209
|
secondaryAction,
|
|
210
|
+
docLinkButton,
|
|
178
211
|
primaryAction
|
|
179
212
|
]
|
|
180
213
|
})
|
|
@@ -189,6 +222,13 @@ const HeaderLayout = (props)=>{
|
|
|
189
222
|
const [headerSize, setHeaderSize] = React__namespace.useState(null);
|
|
190
223
|
const [isVisible, setIsVisible] = React__namespace.useState(true);
|
|
191
224
|
const deviceType = useDeviceType.useDeviceType();
|
|
225
|
+
const location = reactRouterDom.useLocation();
|
|
226
|
+
const docLink = React__namespace.useMemo(()=>{
|
|
227
|
+
if (window.strapi.flags.docLinks === false) return null;
|
|
228
|
+
return getMatchingDocLink.getMatchingDocLink(location.pathname);
|
|
229
|
+
}, [
|
|
230
|
+
location
|
|
231
|
+
]);
|
|
192
232
|
const containerRef = useElementOnScreen.useElementOnScreen(setIsVisible, {
|
|
193
233
|
root: null,
|
|
194
234
|
rootMargin: '0px',
|
|
@@ -220,7 +260,8 @@ const HeaderLayout = (props)=>{
|
|
|
220
260
|
]);
|
|
221
261
|
if (deviceType === 'mobile') {
|
|
222
262
|
return /*#__PURE__*/ jsxRuntime.jsx(BaseHeaderLayout, {
|
|
223
|
-
...props
|
|
263
|
+
...props,
|
|
264
|
+
docLink: docLink
|
|
224
265
|
});
|
|
225
266
|
}
|
|
226
267
|
return /*#__PURE__*/ jsxRuntime.jsxs("div", {
|
|
@@ -232,13 +273,15 @@ const HeaderLayout = (props)=>{
|
|
|
232
273
|
},
|
|
233
274
|
children: isVisible && /*#__PURE__*/ jsxRuntime.jsx(BaseHeaderLayout, {
|
|
234
275
|
ref: baseHeaderLayoutRef,
|
|
235
|
-
...props
|
|
276
|
+
...props,
|
|
277
|
+
docLink: docLink
|
|
236
278
|
})
|
|
237
279
|
}),
|
|
238
280
|
!isVisible && /*#__PURE__*/ jsxRuntime.jsx(BaseHeaderLayout, {
|
|
239
281
|
...props,
|
|
240
282
|
sticky: true,
|
|
241
|
-
width: headerSize?.width
|
|
283
|
+
width: headerSize?.width,
|
|
284
|
+
docLink: docLink
|
|
242
285
|
})
|
|
243
286
|
]
|
|
244
287
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeaderLayout.js","sources":["../../../../../../admin/src/components/Layouts/HeaderLayout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Flex, Typography, TypographyProps, useCallbackRef } from '@strapi/design-system';\n\nimport {\n HEIGHT_TOP_NAVIGATION,\n HEIGHT_TOP_NAVIGATION_MEDIUM,\n RESPONSIVE_DEFAULT_SPACING,\n} from '../../constants/theme';\nimport { useDeviceType } from '../../hooks/useDeviceType';\nimport { useElementOnScreen } from '../../hooks/useElementOnScreen';\nimport { useIsMobile } from '../../hooks/useMediaQuery';\n\n/* -------------------------------------------------------------------------------------------------\n * BaseHeaderLayout\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BaseHeaderLayoutProps extends Omit<TypographyProps<'div'>, 'tag'> {\n navigationAction?: React.ReactNode;\n primaryAction?: React.ReactNode;\n secondaryAction?: React.ReactNode;\n subtitle?: React.ReactNode;\n sticky?: boolean;\n width?: number;\n}\n\nconst BaseHeaderLayout = React.forwardRef<HTMLDivElement, BaseHeaderLayoutProps>(\n (\n { navigationAction, primaryAction, secondaryAction, subtitle, title, sticky, width, ...props },\n ref\n ) => {\n const isMobile = useIsMobile();\n const isSubtitleString = typeof subtitle === 'string';\n\n if (sticky) {\n return (\n <Box\n display=\"flex\"\n paddingLeft={6}\n paddingRight={6}\n paddingTop={2}\n paddingBottom={2}\n position=\"fixed\"\n top={0}\n background=\"neutral0\"\n shadow=\"tableShadow\"\n width={`${width}px`}\n zIndex={2}\n minHeight={{\n initial: HEIGHT_TOP_NAVIGATION,\n medium: HEIGHT_TOP_NAVIGATION_MEDIUM,\n }}\n data-strapi-header-sticky\n >\n <Flex alignItems=\"center\" justifyContent=\"space-between\" wrap=\"wrap\" width=\"100%\">\n <Flex>\n {navigationAction && <Box paddingRight={3}>{navigationAction}</Box>}\n <Box>\n <Typography variant=\"beta\" tag=\"h1\" {...props}>\n {title}\n </Typography>\n {isSubtitleString ? (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n </Box>\n {secondaryAction ? <Box paddingLeft={4}>{secondaryAction}</Box> : null}\n </Flex>\n <Flex>{primaryAction ? <Box paddingLeft={2}>{primaryAction}</Box> : undefined}</Flex>\n </Flex>\n </Box>\n );\n }\n\n return (\n <Box\n ref={ref}\n paddingLeft={RESPONSIVE_DEFAULT_SPACING}\n paddingRight={RESPONSIVE_DEFAULT_SPACING}\n paddingBottom={{\n initial: 4,\n large: 8,\n }}\n paddingTop={{\n initial: 4,\n large: navigationAction ? 6 : 8,\n }}\n background=\"neutral100\"\n data-strapi-header\n >\n <Flex direction=\"column\" alignItems=\"initial\" gap={3}>\n {navigationAction}\n {!isMobile ? (\n <>\n <Flex justifyContent=\"space-between\" wrap=\"wrap\" gap={4}>\n <Flex minWidth={0}>\n <Typography\n tag=\"h1\"\n variant=\"alpha\"\n {...props}\n style={{\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n maxWidth: '100%',\n }}\n >\n {title}\n </Typography>\n {secondaryAction && <Box paddingLeft={4}>{secondaryAction}</Box>}\n </Flex>\n <Box paddingLeft={4} marginLeft=\"auto\">\n {primaryAction}\n </Box>\n </Flex>\n {isSubtitleString ? (\n <Typography variant=\"epsilon\" textColor=\"neutral600\" tag=\"p\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n </>\n ) : (\n <>\n <Typography\n tag=\"h1\"\n variant=\"alpha\"\n {...props}\n style={{\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n maxWidth: '100%',\n }}\n >\n {title}\n </Typography>\n {isSubtitleString ? (\n <Typography variant=\"epsilon\" textColor=\"neutral600\" tag=\"p\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n {(primaryAction || secondaryAction) && (\n <Flex gap={3}>\n {secondaryAction}\n {primaryAction}\n </Flex>\n )}\n </>\n )}\n </Flex>\n </Box>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderLayout\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderLayoutProps extends BaseHeaderLayoutProps {}\n\nconst HeaderLayout = (props: HeaderLayoutProps) => {\n const baseHeaderLayoutRef = React.useRef<HTMLDivElement>(null);\n const [headerSize, setHeaderSize] = React.useState<DOMRect | null>(null);\n const [isVisible, setIsVisible] = React.useState(true);\n const deviceType = useDeviceType();\n\n const containerRef = useElementOnScreen<HTMLDivElement>(setIsVisible, {\n root: null,\n rootMargin: '0px',\n threshold: 0,\n });\n\n useResizeObserver([containerRef, baseHeaderLayoutRef], () => {\n const headerContainer = baseHeaderLayoutRef.current ?? containerRef.current;\n\n if (headerContainer) {\n const newSize = headerContainer.getBoundingClientRect();\n\n setHeaderSize((prevSize) => {\n // Only update if size actually changed\n if (!prevSize || prevSize.height !== newSize.height || prevSize.width !== newSize.width) {\n return newSize;\n }\n return prevSize;\n });\n }\n });\n\n React.useEffect(() => {\n if (baseHeaderLayoutRef.current || containerRef.current) {\n const headerContainer = baseHeaderLayoutRef.current ?? containerRef.current;\n setHeaderSize(headerContainer?.getBoundingClientRect() ?? null);\n }\n }, [containerRef]);\n\n if (deviceType === 'mobile') {\n return <BaseHeaderLayout {...props} />;\n }\n\n return (\n <div ref={containerRef}>\n <div style={{ height: headerSize?.height }}>\n {isVisible && <BaseHeaderLayout ref={baseHeaderLayoutRef} {...props} />}\n </div>\n\n {!isVisible && <BaseHeaderLayout {...props} sticky width={headerSize?.width} />}\n </div>\n );\n};\n\nHeaderLayout.displayName = 'HeaderLayout';\n\n/**\n * useResizeObserver: hook that observes the size of an element and calls a callback when it changes.\n */\nconst useResizeObserver = (\n sources: React.RefObject<HTMLElement> | React.RefObject<HTMLElement>[],\n onResize: ResizeObserverCallback\n) => {\n const handleResize = useCallbackRef(onResize);\n\n React.useLayoutEffect(() => {\n const resizeObs = new ResizeObserver(handleResize);\n\n if (Array.isArray(sources)) {\n sources.forEach((source) => {\n if (source.current) {\n resizeObs.observe(source.current);\n }\n });\n } else if (sources.current) {\n resizeObs.observe(sources.current);\n }\n\n return () => {\n resizeObs.disconnect();\n };\n }, [sources, handleResize]);\n};\n\nexport type { HeaderLayoutProps, BaseHeaderLayoutProps };\nexport { HeaderLayout, BaseHeaderLayout };\n"],"names":["BaseHeaderLayout","React","forwardRef","navigationAction","primaryAction","secondaryAction","subtitle","title","sticky","width","props","ref","isMobile","useIsMobile","isSubtitleString","_jsx","Box","display","paddingLeft","paddingRight","paddingTop","paddingBottom","position","top","background","shadow","zIndex","minHeight","initial","HEIGHT_TOP_NAVIGATION","medium","HEIGHT_TOP_NAVIGATION_MEDIUM","data-strapi-header-sticky","_jsxs","Flex","alignItems","justifyContent","wrap","Typography","variant","tag","textColor","undefined","RESPONSIVE_DEFAULT_SPACING","large","data-strapi-header","direction","gap","_Fragment","minWidth","style","wordBreak","overflowWrap","maxWidth","marginLeft","HeaderLayout","baseHeaderLayoutRef","useRef","headerSize","setHeaderSize","useState","isVisible","setIsVisible","deviceType","useDeviceType","containerRef","useElementOnScreen","root","rootMargin","threshold","useResizeObserver","headerContainer","current","newSize","getBoundingClientRect","prevSize","height","useEffect","div","displayName","sources","onResize","handleResize","useCallbackRef","useLayoutEffect","resizeObs","ResizeObserver","Array","isArray","forEach","source","observe","disconnect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HeaderLayout.js","sources":["../../../../../../admin/src/components/Layouts/HeaderLayout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Flex,\n Typography,\n TypographyProps,\n useCallbackRef,\n IconButton,\n} from '@strapi/design-system';\nimport { Question } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useLocation, Link } from 'react-router-dom';\n\nimport {\n HEIGHT_TOP_NAVIGATION,\n HEIGHT_TOP_NAVIGATION_MEDIUM,\n RESPONSIVE_DEFAULT_SPACING,\n} from '../../constants/theme';\nimport { useTracking } from '../../features/Tracking';\nimport { useDeviceType } from '../../hooks/useDeviceType';\nimport { useElementOnScreen } from '../../hooks/useElementOnScreen';\nimport { useIsMobile } from '../../hooks/useMediaQuery';\n\nimport { getMatchingDocLink, type DocLink } from './utils/getMatchingDocLink';\n\n/* -------------------------------------------------------------------------------------------------\n * BaseHeaderLayout\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BaseHeaderLayoutProps extends Omit<TypographyProps<'div'>, 'tag'> {\n navigationAction?: React.ReactNode;\n primaryAction?: React.ReactNode;\n secondaryAction?: React.ReactNode;\n subtitle?: React.ReactNode;\n sticky?: boolean;\n width?: number;\n docLink?: DocLink | null;\n}\n\nconst BaseHeaderLayout = React.forwardRef<HTMLDivElement, BaseHeaderLayoutProps>(\n (\n {\n navigationAction,\n primaryAction,\n secondaryAction,\n subtitle,\n title,\n sticky,\n width,\n docLink,\n ...props\n },\n ref\n ) => {\n const isMobile = useIsMobile();\n const isSubtitleString = typeof subtitle === 'string';\n\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const docLinkButton = docLink ? (\n <IconButton\n onClick={() => trackUsage('didClickOnDocLink', { from: docLink.path, to: docLink.link })}\n size=\"S\"\n label={formatMessage({\n id: 'app.HeaderLayout.docLink.label',\n defaultMessage: 'Learn more on our documentation',\n })}\n to={docLink.link}\n tag={Link}\n target=\"_blank\"\n >\n <Question />\n </IconButton>\n ) : null;\n\n if (sticky) {\n return (\n <Box\n display=\"flex\"\n paddingLeft={6}\n paddingRight={6}\n paddingTop={2}\n paddingBottom={2}\n position=\"fixed\"\n top={0}\n background=\"neutral0\"\n shadow=\"tableShadow\"\n width={`${width}px`}\n zIndex={2}\n minHeight={{\n initial: HEIGHT_TOP_NAVIGATION,\n medium: HEIGHT_TOP_NAVIGATION_MEDIUM,\n }}\n data-strapi-header-sticky\n >\n <Flex alignItems=\"center\" justifyContent=\"space-between\" wrap=\"wrap\" width=\"100%\" gap={2}>\n <Flex>\n {navigationAction && <Box paddingRight={3}>{navigationAction}</Box>}\n <Box>\n <Typography variant=\"beta\" tag=\"h1\" {...props}>\n {title}\n </Typography>\n {isSubtitleString ? (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n </Box>\n {secondaryAction ? <Box paddingLeft={4}>{secondaryAction}</Box> : null}\n </Flex>\n <Flex>\n {primaryAction ? (\n <Flex gap={2}>\n {docLinkButton}\n {primaryAction}\n </Flex>\n ) : undefined}\n </Flex>\n </Flex>\n </Box>\n );\n }\n\n return (\n <Box\n ref={ref}\n paddingLeft={RESPONSIVE_DEFAULT_SPACING}\n paddingRight={RESPONSIVE_DEFAULT_SPACING}\n paddingBottom={{\n initial: 4,\n large: 8,\n }}\n paddingTop={{\n initial: 4,\n large: navigationAction ? 6 : 8,\n }}\n background=\"neutral100\"\n data-strapi-header\n >\n <Flex direction=\"column\" alignItems=\"initial\" gap={3}>\n {navigationAction}\n {!isMobile ? (\n <>\n <Flex justifyContent=\"space-between\" wrap=\"wrap\" gap={4}>\n <Flex minWidth={0}>\n <Typography\n tag=\"h1\"\n variant=\"alpha\"\n {...props}\n style={{\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n maxWidth: '100%',\n }}\n >\n {title}\n </Typography>\n {secondaryAction && <Box paddingLeft={4}>{secondaryAction}</Box>}\n </Flex>\n <Box paddingLeft={4} marginLeft=\"auto\">\n <Flex gap={2}>\n {docLinkButton}\n {primaryAction}\n </Flex>\n </Box>\n </Flex>\n {isSubtitleString ? (\n <Typography variant=\"epsilon\" textColor=\"neutral600\" tag=\"p\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n </>\n ) : (\n <>\n <Typography\n tag=\"h1\"\n variant=\"alpha\"\n {...props}\n style={{\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n maxWidth: '100%',\n }}\n >\n {title}\n </Typography>\n {isSubtitleString ? (\n <Typography variant=\"epsilon\" textColor=\"neutral600\" tag=\"p\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n {(primaryAction || secondaryAction) && (\n <Flex gap={3}>\n {secondaryAction}\n {docLinkButton}\n {primaryAction}\n </Flex>\n )}\n </>\n )}\n </Flex>\n </Box>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderLayout\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderLayoutProps extends BaseHeaderLayoutProps {}\n\nconst HeaderLayout = (props: HeaderLayoutProps) => {\n const baseHeaderLayoutRef = React.useRef<HTMLDivElement>(null);\n const [headerSize, setHeaderSize] = React.useState<DOMRect | null>(null);\n const [isVisible, setIsVisible] = React.useState(true);\n const deviceType = useDeviceType();\n const location = useLocation();\n const docLink = React.useMemo(() => {\n if (window.strapi.flags.docLinks === false) return null;\n return getMatchingDocLink(location.pathname);\n }, [location]);\n\n const containerRef = useElementOnScreen<HTMLDivElement>(setIsVisible, {\n root: null,\n rootMargin: '0px',\n threshold: 0,\n });\n\n useResizeObserver([containerRef, baseHeaderLayoutRef], () => {\n const headerContainer = baseHeaderLayoutRef.current ?? containerRef.current;\n\n if (headerContainer) {\n const newSize = headerContainer.getBoundingClientRect();\n\n setHeaderSize((prevSize) => {\n // Only update if size actually changed\n if (!prevSize || prevSize.height !== newSize.height || prevSize.width !== newSize.width) {\n return newSize;\n }\n return prevSize;\n });\n }\n });\n\n React.useEffect(() => {\n if (baseHeaderLayoutRef.current || containerRef.current) {\n const headerContainer = baseHeaderLayoutRef.current ?? containerRef.current;\n setHeaderSize(headerContainer?.getBoundingClientRect() ?? null);\n }\n }, [containerRef]);\n\n if (deviceType === 'mobile') {\n return <BaseHeaderLayout {...props} docLink={docLink} />;\n }\n\n return (\n <div ref={containerRef}>\n <div style={{ height: headerSize?.height }}>\n {isVisible && <BaseHeaderLayout ref={baseHeaderLayoutRef} {...props} docLink={docLink} />}\n </div>\n\n {!isVisible && (\n <BaseHeaderLayout {...props} sticky width={headerSize?.width} docLink={docLink} />\n )}\n </div>\n );\n};\n\nHeaderLayout.displayName = 'HeaderLayout';\n\n/**\n * useResizeObserver: hook that observes the size of an element and calls a callback when it changes.\n */\nconst useResizeObserver = (\n sources: React.RefObject<HTMLElement> | React.RefObject<HTMLElement>[],\n onResize: ResizeObserverCallback\n) => {\n const handleResize = useCallbackRef(onResize);\n\n React.useLayoutEffect(() => {\n const resizeObs = new ResizeObserver(handleResize);\n\n if (Array.isArray(sources)) {\n sources.forEach((source) => {\n if (source.current) {\n resizeObs.observe(source.current);\n }\n });\n } else if (sources.current) {\n resizeObs.observe(sources.current);\n }\n\n return () => {\n resizeObs.disconnect();\n };\n }, [sources, handleResize]);\n};\n\nexport type { HeaderLayoutProps, BaseHeaderLayoutProps };\nexport { HeaderLayout, BaseHeaderLayout };\n"],"names":["BaseHeaderLayout","React","forwardRef","navigationAction","primaryAction","secondaryAction","subtitle","title","sticky","width","docLink","props","ref","isMobile","useIsMobile","isSubtitleString","formatMessage","useIntl","trackUsage","useTracking","docLinkButton","_jsx","IconButton","onClick","from","path","to","link","size","label","id","defaultMessage","tag","Link","target","Question","Box","display","paddingLeft","paddingRight","paddingTop","paddingBottom","position","top","background","shadow","zIndex","minHeight","initial","HEIGHT_TOP_NAVIGATION","medium","HEIGHT_TOP_NAVIGATION_MEDIUM","data-strapi-header-sticky","_jsxs","Flex","alignItems","justifyContent","wrap","gap","Typography","variant","textColor","undefined","RESPONSIVE_DEFAULT_SPACING","large","data-strapi-header","direction","_Fragment","minWidth","style","wordBreak","overflowWrap","maxWidth","marginLeft","HeaderLayout","baseHeaderLayoutRef","useRef","headerSize","setHeaderSize","useState","isVisible","setIsVisible","deviceType","useDeviceType","location","useLocation","useMemo","window","strapi","flags","docLinks","getMatchingDocLink","pathname","containerRef","useElementOnScreen","root","rootMargin","threshold","useResizeObserver","headerContainer","current","newSize","getBoundingClientRect","prevSize","height","useEffect","div","displayName","sources","onResize","handleResize","useCallbackRef","useLayoutEffect","resizeObs","ResizeObserver","Array","isArray","forEach","source","observe","disconnect"],"mappings":"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"}
|
|
@@ -1,14 +1,36 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import { Box, Flex, Typography, useCallbackRef } from '@strapi/design-system';
|
|
3
|
+
import { IconButton, Box, Flex, Typography, useCallbackRef } from '@strapi/design-system';
|
|
4
|
+
import { Question } from '@strapi/icons';
|
|
5
|
+
import { useIntl } from 'react-intl';
|
|
6
|
+
import { Link, useLocation } from 'react-router-dom';
|
|
4
7
|
import { HEIGHT_TOP_NAVIGATION_MEDIUM, HEIGHT_TOP_NAVIGATION, RESPONSIVE_DEFAULT_SPACING } from '../../constants/theme.mjs';
|
|
8
|
+
import { useTracking } from '../../features/Tracking.mjs';
|
|
5
9
|
import { useDeviceType } from '../../hooks/useDeviceType.mjs';
|
|
6
10
|
import { useElementOnScreen } from '../../hooks/useElementOnScreen.mjs';
|
|
7
11
|
import { useIsMobile } from '../../hooks/useMediaQuery.mjs';
|
|
12
|
+
import { getMatchingDocLink } from './utils/getMatchingDocLink.mjs';
|
|
8
13
|
|
|
9
|
-
const BaseHeaderLayout = /*#__PURE__*/ React.forwardRef(({ navigationAction, primaryAction, secondaryAction, subtitle, title, sticky, width, ...props }, ref)=>{
|
|
14
|
+
const BaseHeaderLayout = /*#__PURE__*/ React.forwardRef(({ navigationAction, primaryAction, secondaryAction, subtitle, title, sticky, width, docLink, ...props }, ref)=>{
|
|
10
15
|
const isMobile = useIsMobile();
|
|
11
16
|
const isSubtitleString = typeof subtitle === 'string';
|
|
17
|
+
const { formatMessage } = useIntl();
|
|
18
|
+
const { trackUsage } = useTracking();
|
|
19
|
+
const docLinkButton = docLink ? /*#__PURE__*/ jsx(IconButton, {
|
|
20
|
+
onClick: ()=>trackUsage('didClickOnDocLink', {
|
|
21
|
+
from: docLink.path,
|
|
22
|
+
to: docLink.link
|
|
23
|
+
}),
|
|
24
|
+
size: "S",
|
|
25
|
+
label: formatMessage({
|
|
26
|
+
id: 'app.HeaderLayout.docLink.label',
|
|
27
|
+
defaultMessage: 'Learn more on our documentation'
|
|
28
|
+
}),
|
|
29
|
+
to: docLink.link,
|
|
30
|
+
tag: Link,
|
|
31
|
+
target: "_blank",
|
|
32
|
+
children: /*#__PURE__*/ jsx(Question, {})
|
|
33
|
+
}) : null;
|
|
12
34
|
if (sticky) {
|
|
13
35
|
return /*#__PURE__*/ jsx(Box, {
|
|
14
36
|
display: "flex",
|
|
@@ -32,6 +54,7 @@ const BaseHeaderLayout = /*#__PURE__*/ React.forwardRef(({ navigationAction, pri
|
|
|
32
54
|
justifyContent: "space-between",
|
|
33
55
|
wrap: "wrap",
|
|
34
56
|
width: "100%",
|
|
57
|
+
gap: 2,
|
|
35
58
|
children: [
|
|
36
59
|
/*#__PURE__*/ jsxs(Flex, {
|
|
37
60
|
children: [
|
|
@@ -61,9 +84,12 @@ const BaseHeaderLayout = /*#__PURE__*/ React.forwardRef(({ navigationAction, pri
|
|
|
61
84
|
]
|
|
62
85
|
}),
|
|
63
86
|
/*#__PURE__*/ jsx(Flex, {
|
|
64
|
-
children: primaryAction ? /*#__PURE__*/
|
|
65
|
-
|
|
66
|
-
children:
|
|
87
|
+
children: primaryAction ? /*#__PURE__*/ jsxs(Flex, {
|
|
88
|
+
gap: 2,
|
|
89
|
+
children: [
|
|
90
|
+
docLinkButton,
|
|
91
|
+
primaryAction
|
|
92
|
+
]
|
|
67
93
|
}) : undefined
|
|
68
94
|
})
|
|
69
95
|
]
|
|
@@ -120,7 +146,13 @@ const BaseHeaderLayout = /*#__PURE__*/ React.forwardRef(({ navigationAction, pri
|
|
|
120
146
|
/*#__PURE__*/ jsx(Box, {
|
|
121
147
|
paddingLeft: 4,
|
|
122
148
|
marginLeft: "auto",
|
|
123
|
-
children:
|
|
149
|
+
children: /*#__PURE__*/ jsxs(Flex, {
|
|
150
|
+
gap: 2,
|
|
151
|
+
children: [
|
|
152
|
+
docLinkButton,
|
|
153
|
+
primaryAction
|
|
154
|
+
]
|
|
155
|
+
})
|
|
124
156
|
})
|
|
125
157
|
]
|
|
126
158
|
}),
|
|
@@ -154,6 +186,7 @@ const BaseHeaderLayout = /*#__PURE__*/ React.forwardRef(({ navigationAction, pri
|
|
|
154
186
|
gap: 3,
|
|
155
187
|
children: [
|
|
156
188
|
secondaryAction,
|
|
189
|
+
docLinkButton,
|
|
157
190
|
primaryAction
|
|
158
191
|
]
|
|
159
192
|
})
|
|
@@ -168,6 +201,13 @@ const HeaderLayout = (props)=>{
|
|
|
168
201
|
const [headerSize, setHeaderSize] = React.useState(null);
|
|
169
202
|
const [isVisible, setIsVisible] = React.useState(true);
|
|
170
203
|
const deviceType = useDeviceType();
|
|
204
|
+
const location = useLocation();
|
|
205
|
+
const docLink = React.useMemo(()=>{
|
|
206
|
+
if (window.strapi.flags.docLinks === false) return null;
|
|
207
|
+
return getMatchingDocLink(location.pathname);
|
|
208
|
+
}, [
|
|
209
|
+
location
|
|
210
|
+
]);
|
|
171
211
|
const containerRef = useElementOnScreen(setIsVisible, {
|
|
172
212
|
root: null,
|
|
173
213
|
rootMargin: '0px',
|
|
@@ -199,7 +239,8 @@ const HeaderLayout = (props)=>{
|
|
|
199
239
|
]);
|
|
200
240
|
if (deviceType === 'mobile') {
|
|
201
241
|
return /*#__PURE__*/ jsx(BaseHeaderLayout, {
|
|
202
|
-
...props
|
|
242
|
+
...props,
|
|
243
|
+
docLink: docLink
|
|
203
244
|
});
|
|
204
245
|
}
|
|
205
246
|
return /*#__PURE__*/ jsxs("div", {
|
|
@@ -211,13 +252,15 @@ const HeaderLayout = (props)=>{
|
|
|
211
252
|
},
|
|
212
253
|
children: isVisible && /*#__PURE__*/ jsx(BaseHeaderLayout, {
|
|
213
254
|
ref: baseHeaderLayoutRef,
|
|
214
|
-
...props
|
|
255
|
+
...props,
|
|
256
|
+
docLink: docLink
|
|
215
257
|
})
|
|
216
258
|
}),
|
|
217
259
|
!isVisible && /*#__PURE__*/ jsx(BaseHeaderLayout, {
|
|
218
260
|
...props,
|
|
219
261
|
sticky: true,
|
|
220
|
-
width: headerSize?.width
|
|
262
|
+
width: headerSize?.width,
|
|
263
|
+
docLink: docLink
|
|
221
264
|
})
|
|
222
265
|
]
|
|
223
266
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeaderLayout.mjs","sources":["../../../../../../admin/src/components/Layouts/HeaderLayout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Flex, Typography, TypographyProps, useCallbackRef } from '@strapi/design-system';\n\nimport {\n HEIGHT_TOP_NAVIGATION,\n HEIGHT_TOP_NAVIGATION_MEDIUM,\n RESPONSIVE_DEFAULT_SPACING,\n} from '../../constants/theme';\nimport { useDeviceType } from '../../hooks/useDeviceType';\nimport { useElementOnScreen } from '../../hooks/useElementOnScreen';\nimport { useIsMobile } from '../../hooks/useMediaQuery';\n\n/* -------------------------------------------------------------------------------------------------\n * BaseHeaderLayout\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BaseHeaderLayoutProps extends Omit<TypographyProps<'div'>, 'tag'> {\n navigationAction?: React.ReactNode;\n primaryAction?: React.ReactNode;\n secondaryAction?: React.ReactNode;\n subtitle?: React.ReactNode;\n sticky?: boolean;\n width?: number;\n}\n\nconst BaseHeaderLayout = React.forwardRef<HTMLDivElement, BaseHeaderLayoutProps>(\n (\n { navigationAction, primaryAction, secondaryAction, subtitle, title, sticky, width, ...props },\n ref\n ) => {\n const isMobile = useIsMobile();\n const isSubtitleString = typeof subtitle === 'string';\n\n if (sticky) {\n return (\n <Box\n display=\"flex\"\n paddingLeft={6}\n paddingRight={6}\n paddingTop={2}\n paddingBottom={2}\n position=\"fixed\"\n top={0}\n background=\"neutral0\"\n shadow=\"tableShadow\"\n width={`${width}px`}\n zIndex={2}\n minHeight={{\n initial: HEIGHT_TOP_NAVIGATION,\n medium: HEIGHT_TOP_NAVIGATION_MEDIUM,\n }}\n data-strapi-header-sticky\n >\n <Flex alignItems=\"center\" justifyContent=\"space-between\" wrap=\"wrap\" width=\"100%\">\n <Flex>\n {navigationAction && <Box paddingRight={3}>{navigationAction}</Box>}\n <Box>\n <Typography variant=\"beta\" tag=\"h1\" {...props}>\n {title}\n </Typography>\n {isSubtitleString ? (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n </Box>\n {secondaryAction ? <Box paddingLeft={4}>{secondaryAction}</Box> : null}\n </Flex>\n <Flex>{primaryAction ? <Box paddingLeft={2}>{primaryAction}</Box> : undefined}</Flex>\n </Flex>\n </Box>\n );\n }\n\n return (\n <Box\n ref={ref}\n paddingLeft={RESPONSIVE_DEFAULT_SPACING}\n paddingRight={RESPONSIVE_DEFAULT_SPACING}\n paddingBottom={{\n initial: 4,\n large: 8,\n }}\n paddingTop={{\n initial: 4,\n large: navigationAction ? 6 : 8,\n }}\n background=\"neutral100\"\n data-strapi-header\n >\n <Flex direction=\"column\" alignItems=\"initial\" gap={3}>\n {navigationAction}\n {!isMobile ? (\n <>\n <Flex justifyContent=\"space-between\" wrap=\"wrap\" gap={4}>\n <Flex minWidth={0}>\n <Typography\n tag=\"h1\"\n variant=\"alpha\"\n {...props}\n style={{\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n maxWidth: '100%',\n }}\n >\n {title}\n </Typography>\n {secondaryAction && <Box paddingLeft={4}>{secondaryAction}</Box>}\n </Flex>\n <Box paddingLeft={4} marginLeft=\"auto\">\n {primaryAction}\n </Box>\n </Flex>\n {isSubtitleString ? (\n <Typography variant=\"epsilon\" textColor=\"neutral600\" tag=\"p\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n </>\n ) : (\n <>\n <Typography\n tag=\"h1\"\n variant=\"alpha\"\n {...props}\n style={{\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n maxWidth: '100%',\n }}\n >\n {title}\n </Typography>\n {isSubtitleString ? (\n <Typography variant=\"epsilon\" textColor=\"neutral600\" tag=\"p\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n {(primaryAction || secondaryAction) && (\n <Flex gap={3}>\n {secondaryAction}\n {primaryAction}\n </Flex>\n )}\n </>\n )}\n </Flex>\n </Box>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderLayout\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderLayoutProps extends BaseHeaderLayoutProps {}\n\nconst HeaderLayout = (props: HeaderLayoutProps) => {\n const baseHeaderLayoutRef = React.useRef<HTMLDivElement>(null);\n const [headerSize, setHeaderSize] = React.useState<DOMRect | null>(null);\n const [isVisible, setIsVisible] = React.useState(true);\n const deviceType = useDeviceType();\n\n const containerRef = useElementOnScreen<HTMLDivElement>(setIsVisible, {\n root: null,\n rootMargin: '0px',\n threshold: 0,\n });\n\n useResizeObserver([containerRef, baseHeaderLayoutRef], () => {\n const headerContainer = baseHeaderLayoutRef.current ?? containerRef.current;\n\n if (headerContainer) {\n const newSize = headerContainer.getBoundingClientRect();\n\n setHeaderSize((prevSize) => {\n // Only update if size actually changed\n if (!prevSize || prevSize.height !== newSize.height || prevSize.width !== newSize.width) {\n return newSize;\n }\n return prevSize;\n });\n }\n });\n\n React.useEffect(() => {\n if (baseHeaderLayoutRef.current || containerRef.current) {\n const headerContainer = baseHeaderLayoutRef.current ?? containerRef.current;\n setHeaderSize(headerContainer?.getBoundingClientRect() ?? null);\n }\n }, [containerRef]);\n\n if (deviceType === 'mobile') {\n return <BaseHeaderLayout {...props} />;\n }\n\n return (\n <div ref={containerRef}>\n <div style={{ height: headerSize?.height }}>\n {isVisible && <BaseHeaderLayout ref={baseHeaderLayoutRef} {...props} />}\n </div>\n\n {!isVisible && <BaseHeaderLayout {...props} sticky width={headerSize?.width} />}\n </div>\n );\n};\n\nHeaderLayout.displayName = 'HeaderLayout';\n\n/**\n * useResizeObserver: hook that observes the size of an element and calls a callback when it changes.\n */\nconst useResizeObserver = (\n sources: React.RefObject<HTMLElement> | React.RefObject<HTMLElement>[],\n onResize: ResizeObserverCallback\n) => {\n const handleResize = useCallbackRef(onResize);\n\n React.useLayoutEffect(() => {\n const resizeObs = new ResizeObserver(handleResize);\n\n if (Array.isArray(sources)) {\n sources.forEach((source) => {\n if (source.current) {\n resizeObs.observe(source.current);\n }\n });\n } else if (sources.current) {\n resizeObs.observe(sources.current);\n }\n\n return () => {\n resizeObs.disconnect();\n };\n }, [sources, handleResize]);\n};\n\nexport type { HeaderLayoutProps, BaseHeaderLayoutProps };\nexport { HeaderLayout, BaseHeaderLayout };\n"],"names":["BaseHeaderLayout","React","forwardRef","navigationAction","primaryAction","secondaryAction","subtitle","title","sticky","width","props","ref","isMobile","useIsMobile","isSubtitleString","_jsx","Box","display","paddingLeft","paddingRight","paddingTop","paddingBottom","position","top","background","shadow","zIndex","minHeight","initial","HEIGHT_TOP_NAVIGATION","medium","HEIGHT_TOP_NAVIGATION_MEDIUM","data-strapi-header-sticky","_jsxs","Flex","alignItems","justifyContent","wrap","Typography","variant","tag","textColor","undefined","RESPONSIVE_DEFAULT_SPACING","large","data-strapi-header","direction","gap","_Fragment","minWidth","style","wordBreak","overflowWrap","maxWidth","marginLeft","HeaderLayout","baseHeaderLayoutRef","useRef","headerSize","setHeaderSize","useState","isVisible","setIsVisible","deviceType","useDeviceType","containerRef","useElementOnScreen","root","rootMargin","threshold","useResizeObserver","headerContainer","current","newSize","getBoundingClientRect","prevSize","height","useEffect","div","displayName","sources","onResize","handleResize","useCallbackRef","useLayoutEffect","resizeObs","ResizeObserver","Array","isArray","forEach","source","observe","disconnect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HeaderLayout.mjs","sources":["../../../../../../admin/src/components/Layouts/HeaderLayout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Flex,\n Typography,\n TypographyProps,\n useCallbackRef,\n IconButton,\n} from '@strapi/design-system';\nimport { Question } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useLocation, Link } from 'react-router-dom';\n\nimport {\n HEIGHT_TOP_NAVIGATION,\n HEIGHT_TOP_NAVIGATION_MEDIUM,\n RESPONSIVE_DEFAULT_SPACING,\n} from '../../constants/theme';\nimport { useTracking } from '../../features/Tracking';\nimport { useDeviceType } from '../../hooks/useDeviceType';\nimport { useElementOnScreen } from '../../hooks/useElementOnScreen';\nimport { useIsMobile } from '../../hooks/useMediaQuery';\n\nimport { getMatchingDocLink, type DocLink } from './utils/getMatchingDocLink';\n\n/* -------------------------------------------------------------------------------------------------\n * BaseHeaderLayout\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BaseHeaderLayoutProps extends Omit<TypographyProps<'div'>, 'tag'> {\n navigationAction?: React.ReactNode;\n primaryAction?: React.ReactNode;\n secondaryAction?: React.ReactNode;\n subtitle?: React.ReactNode;\n sticky?: boolean;\n width?: number;\n docLink?: DocLink | null;\n}\n\nconst BaseHeaderLayout = React.forwardRef<HTMLDivElement, BaseHeaderLayoutProps>(\n (\n {\n navigationAction,\n primaryAction,\n secondaryAction,\n subtitle,\n title,\n sticky,\n width,\n docLink,\n ...props\n },\n ref\n ) => {\n const isMobile = useIsMobile();\n const isSubtitleString = typeof subtitle === 'string';\n\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const docLinkButton = docLink ? (\n <IconButton\n onClick={() => trackUsage('didClickOnDocLink', { from: docLink.path, to: docLink.link })}\n size=\"S\"\n label={formatMessage({\n id: 'app.HeaderLayout.docLink.label',\n defaultMessage: 'Learn more on our documentation',\n })}\n to={docLink.link}\n tag={Link}\n target=\"_blank\"\n >\n <Question />\n </IconButton>\n ) : null;\n\n if (sticky) {\n return (\n <Box\n display=\"flex\"\n paddingLeft={6}\n paddingRight={6}\n paddingTop={2}\n paddingBottom={2}\n position=\"fixed\"\n top={0}\n background=\"neutral0\"\n shadow=\"tableShadow\"\n width={`${width}px`}\n zIndex={2}\n minHeight={{\n initial: HEIGHT_TOP_NAVIGATION,\n medium: HEIGHT_TOP_NAVIGATION_MEDIUM,\n }}\n data-strapi-header-sticky\n >\n <Flex alignItems=\"center\" justifyContent=\"space-between\" wrap=\"wrap\" width=\"100%\" gap={2}>\n <Flex>\n {navigationAction && <Box paddingRight={3}>{navigationAction}</Box>}\n <Box>\n <Typography variant=\"beta\" tag=\"h1\" {...props}>\n {title}\n </Typography>\n {isSubtitleString ? (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n </Box>\n {secondaryAction ? <Box paddingLeft={4}>{secondaryAction}</Box> : null}\n </Flex>\n <Flex>\n {primaryAction ? (\n <Flex gap={2}>\n {docLinkButton}\n {primaryAction}\n </Flex>\n ) : undefined}\n </Flex>\n </Flex>\n </Box>\n );\n }\n\n return (\n <Box\n ref={ref}\n paddingLeft={RESPONSIVE_DEFAULT_SPACING}\n paddingRight={RESPONSIVE_DEFAULT_SPACING}\n paddingBottom={{\n initial: 4,\n large: 8,\n }}\n paddingTop={{\n initial: 4,\n large: navigationAction ? 6 : 8,\n }}\n background=\"neutral100\"\n data-strapi-header\n >\n <Flex direction=\"column\" alignItems=\"initial\" gap={3}>\n {navigationAction}\n {!isMobile ? (\n <>\n <Flex justifyContent=\"space-between\" wrap=\"wrap\" gap={4}>\n <Flex minWidth={0}>\n <Typography\n tag=\"h1\"\n variant=\"alpha\"\n {...props}\n style={{\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n maxWidth: '100%',\n }}\n >\n {title}\n </Typography>\n {secondaryAction && <Box paddingLeft={4}>{secondaryAction}</Box>}\n </Flex>\n <Box paddingLeft={4} marginLeft=\"auto\">\n <Flex gap={2}>\n {docLinkButton}\n {primaryAction}\n </Flex>\n </Box>\n </Flex>\n {isSubtitleString ? (\n <Typography variant=\"epsilon\" textColor=\"neutral600\" tag=\"p\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n </>\n ) : (\n <>\n <Typography\n tag=\"h1\"\n variant=\"alpha\"\n {...props}\n style={{\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n maxWidth: '100%',\n }}\n >\n {title}\n </Typography>\n {isSubtitleString ? (\n <Typography variant=\"epsilon\" textColor=\"neutral600\" tag=\"p\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n {(primaryAction || secondaryAction) && (\n <Flex gap={3}>\n {secondaryAction}\n {docLinkButton}\n {primaryAction}\n </Flex>\n )}\n </>\n )}\n </Flex>\n </Box>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderLayout\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderLayoutProps extends BaseHeaderLayoutProps {}\n\nconst HeaderLayout = (props: HeaderLayoutProps) => {\n const baseHeaderLayoutRef = React.useRef<HTMLDivElement>(null);\n const [headerSize, setHeaderSize] = React.useState<DOMRect | null>(null);\n const [isVisible, setIsVisible] = React.useState(true);\n const deviceType = useDeviceType();\n const location = useLocation();\n const docLink = React.useMemo(() => {\n if (window.strapi.flags.docLinks === false) return null;\n return getMatchingDocLink(location.pathname);\n }, [location]);\n\n const containerRef = useElementOnScreen<HTMLDivElement>(setIsVisible, {\n root: null,\n rootMargin: '0px',\n threshold: 0,\n });\n\n useResizeObserver([containerRef, baseHeaderLayoutRef], () => {\n const headerContainer = baseHeaderLayoutRef.current ?? containerRef.current;\n\n if (headerContainer) {\n const newSize = headerContainer.getBoundingClientRect();\n\n setHeaderSize((prevSize) => {\n // Only update if size actually changed\n if (!prevSize || prevSize.height !== newSize.height || prevSize.width !== newSize.width) {\n return newSize;\n }\n return prevSize;\n });\n }\n });\n\n React.useEffect(() => {\n if (baseHeaderLayoutRef.current || containerRef.current) {\n const headerContainer = baseHeaderLayoutRef.current ?? containerRef.current;\n setHeaderSize(headerContainer?.getBoundingClientRect() ?? null);\n }\n }, [containerRef]);\n\n if (deviceType === 'mobile') {\n return <BaseHeaderLayout {...props} docLink={docLink} />;\n }\n\n return (\n <div ref={containerRef}>\n <div style={{ height: headerSize?.height }}>\n {isVisible && <BaseHeaderLayout ref={baseHeaderLayoutRef} {...props} docLink={docLink} />}\n </div>\n\n {!isVisible && (\n <BaseHeaderLayout {...props} sticky width={headerSize?.width} docLink={docLink} />\n )}\n </div>\n );\n};\n\nHeaderLayout.displayName = 'HeaderLayout';\n\n/**\n * useResizeObserver: hook that observes the size of an element and calls a callback when it changes.\n */\nconst useResizeObserver = (\n sources: React.RefObject<HTMLElement> | React.RefObject<HTMLElement>[],\n onResize: ResizeObserverCallback\n) => {\n const handleResize = useCallbackRef(onResize);\n\n React.useLayoutEffect(() => {\n const resizeObs = new ResizeObserver(handleResize);\n\n if (Array.isArray(sources)) {\n sources.forEach((source) => {\n if (source.current) {\n resizeObs.observe(source.current);\n }\n });\n } else if (sources.current) {\n resizeObs.observe(sources.current);\n }\n\n return () => {\n resizeObs.disconnect();\n };\n }, [sources, handleResize]);\n};\n\nexport type { HeaderLayoutProps, BaseHeaderLayoutProps };\nexport { HeaderLayout, BaseHeaderLayout };\n"],"names":["BaseHeaderLayout","React","forwardRef","navigationAction","primaryAction","secondaryAction","subtitle","title","sticky","width","docLink","props","ref","isMobile","useIsMobile","isSubtitleString","formatMessage","useIntl","trackUsage","useTracking","docLinkButton","_jsx","IconButton","onClick","from","path","to","link","size","label","id","defaultMessage","tag","Link","target","Question","Box","display","paddingLeft","paddingRight","paddingTop","paddingBottom","position","top","background","shadow","zIndex","minHeight","initial","HEIGHT_TOP_NAVIGATION","medium","HEIGHT_TOP_NAVIGATION_MEDIUM","data-strapi-header-sticky","_jsxs","Flex","alignItems","justifyContent","wrap","gap","Typography","variant","textColor","undefined","RESPONSIVE_DEFAULT_SPACING","large","data-strapi-header","direction","_Fragment","minWidth","style","wordBreak","overflowWrap","maxWidth","marginLeft","HeaderLayout","baseHeaderLayoutRef","useRef","headerSize","setHeaderSize","useState","isVisible","setIsVisible","deviceType","useDeviceType","location","useLocation","useMemo","window","strapi","flags","docLinks","getMatchingDocLink","pathname","containerRef","useElementOnScreen","root","rootMargin","threshold","useResizeObserver","headerContainer","current","newSize","getBoundingClientRect","prevSize","height","useEffect","div","displayName","sources","onResize","handleResize","useCallbackRef","useLayoutEffect","resizeObs","ResizeObserver","Array","isArray","forEach","source","observe","disconnect"],"mappings":"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"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var reactRouterDom = require('react-router-dom');
|
|
4
|
+
|
|
5
|
+
const matchingLinks = [
|
|
6
|
+
{
|
|
7
|
+
path: '/content-manager/*',
|
|
8
|
+
link: 'https://docs.strapi.io/cms/features/content-manager',
|
|
9
|
+
title: 'Content Manager'
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
path: '/plugins/content-type-builder/*',
|
|
13
|
+
link: 'https://docs.strapi.io/cms/features/content-type-builder',
|
|
14
|
+
title: 'Content-Type Builder'
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
path: '/plugins/upload/*',
|
|
18
|
+
link: 'https://docs.strapi.io/cms/features/media-library',
|
|
19
|
+
title: 'Media Library'
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
path: '/plugins/content-releases/*',
|
|
23
|
+
link: 'https://docs.strapi.io/cms/features/releases',
|
|
24
|
+
title: 'Releases'
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
path: '/settings/purchase-content-releases/*',
|
|
28
|
+
link: 'https://docs.strapi.io/cms/features/releases',
|
|
29
|
+
title: 'Releases'
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
path: '/plugins/documentation/*',
|
|
33
|
+
link: 'https://docs.strapi.io/cms/plugins/documentation',
|
|
34
|
+
title: 'Documentation plugin'
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
path: '/settings/list-plugins/*',
|
|
38
|
+
link: 'https://docs.strapi.io/cms/plugins-development/developing-plugins',
|
|
39
|
+
title: 'Plugins'
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
path: '/settings/application-infos/*',
|
|
43
|
+
link: 'https://docs.strapi.io/cms/features/admin-panel',
|
|
44
|
+
title: 'General settings'
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
path: '/settings/api-tokens/*',
|
|
48
|
+
link: 'https://docs.strapi.io/cms/features/api-tokens',
|
|
49
|
+
title: 'API Tokens settings'
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
path: '/settings/documentation/*',
|
|
53
|
+
link: 'https://docs.strapi.io/cms/plugins/documentation',
|
|
54
|
+
title: 'Documentation plugin settings'
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
path: '/settings/internationalization/*',
|
|
58
|
+
link: 'https://docs.strapi.io/cms/features/internationalization#settings',
|
|
59
|
+
title: 'Internationalization settings (i18n)'
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
path: '/settings/media-library/*',
|
|
63
|
+
link: 'https://docs.strapi.io/cms/features/media-library#configuration',
|
|
64
|
+
title: 'Media Library settings'
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
path: '/settings/review-workflows/*',
|
|
68
|
+
link: 'https://docs.strapi.io/cms/features/review-workflows',
|
|
69
|
+
title: 'Review Workflows settings'
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
path: '/settings/purchase-review-workflows/*',
|
|
73
|
+
link: 'https://docs.strapi.io/cms/features/review-workflows',
|
|
74
|
+
title: 'Review Workflows settings'
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
path: '/settings/single-sign-on/*',
|
|
78
|
+
link: 'https://docs.strapi.io/cms/features/sso',
|
|
79
|
+
title: 'SSO settings'
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
path: '/settings/purchase-single-sign-on/*',
|
|
83
|
+
link: 'https://docs.strapi.io/cms/features/sso',
|
|
84
|
+
title: 'SSO settings'
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
path: '/settings/purchase-content-history/*',
|
|
88
|
+
link: 'https://docs.strapi.io/cms/features/content-history',
|
|
89
|
+
title: 'Content History'
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
path: '/settings/transfer-tokens/*',
|
|
93
|
+
link: 'https://docs.strapi.io/cms/features/data-management',
|
|
94
|
+
title: 'Transfer Tokens'
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
path: '/settings/webhooks/*',
|
|
98
|
+
link: 'https://docs.strapi.io/cms/backend-customization/webhooks',
|
|
99
|
+
title: 'Webhooks'
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
path: '/settings/roles/*',
|
|
103
|
+
link: 'https://docs.strapi.io/cms/features/rbac#configuration',
|
|
104
|
+
title: 'Users & Permissions'
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
path: '/settings/users/*',
|
|
108
|
+
link: 'https://docs.strapi.io/cms/features/rbac#usage',
|
|
109
|
+
title: 'Users & Permissions'
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
path: '/settings/audit-logs/*',
|
|
113
|
+
link: 'https://docs.strapi.io/cms/features/audit-logs',
|
|
114
|
+
title: 'Audit Logs'
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
path: '/settings/purchase-audit-logs/*',
|
|
118
|
+
link: 'https://docs.strapi.io/cms/features/audit-logs',
|
|
119
|
+
title: 'Audit Logs'
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
path: '/settings/email/*',
|
|
123
|
+
link: 'https://docs.strapi.io/cms/features/email',
|
|
124
|
+
title: 'Email plugin'
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
path: '/settings/users-permissions/roles/*',
|
|
128
|
+
link: 'https://docs.strapi.io/cms/features/users-permissions',
|
|
129
|
+
title: 'End-users roles'
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
path: '/settings/users-permissions/providers/*',
|
|
133
|
+
link: 'https://docs.strapi.io/cms/features/users-permissions#providers',
|
|
134
|
+
title: 'Providers'
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
path: '/settings/users-permissions/email-templates/*',
|
|
138
|
+
link: 'https://docs.strapi.io/cms/features/users-permissions#email-templates',
|
|
139
|
+
title: 'Email Templates'
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
path: '/settings/users-permissions/advanced-settings/*',
|
|
143
|
+
link: 'https://docs.strapi.io/cms/features/users-permissions#advanced-settings',
|
|
144
|
+
title: 'U&P Advanced settings'
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
path: '/me/*',
|
|
148
|
+
link: 'https://docs.strapi.io/cms/features/admin-panel#modifying-profile-information-name-email-username',
|
|
149
|
+
title: 'Administrator profile'
|
|
150
|
+
}
|
|
151
|
+
];
|
|
152
|
+
function getMatchingDocLink(pathname) {
|
|
153
|
+
const matches = reactRouterDom.matchRoutes(matchingLinks, pathname);
|
|
154
|
+
const match = matches?.[0];
|
|
155
|
+
if (!match) {
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
const { link, title } = match.route;
|
|
159
|
+
return {
|
|
160
|
+
path: match.pathnameBase,
|
|
161
|
+
link,
|
|
162
|
+
title
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
exports.getMatchingDocLink = getMatchingDocLink;
|
|
167
|
+
//# sourceMappingURL=getMatchingDocLink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getMatchingDocLink.js","sources":["../../../../../../../admin/src/components/Layouts/utils/getMatchingDocLink.ts"],"sourcesContent":["import { matchRoutes, RouteObject } from 'react-router-dom';\n\nexport interface DocLink {\n link: string;\n title: string;\n path: string;\n}\n\ntype DocRoute = RouteObject & { link: string; title: string };\n\nconst matchingLinks: DocRoute[] = [\n {\n path: '/content-manager/*',\n link: 'https://docs.strapi.io/cms/features/content-manager',\n title: 'Content Manager',\n },\n {\n path: '/plugins/content-type-builder/*',\n link: 'https://docs.strapi.io/cms/features/content-type-builder',\n title: 'Content-Type Builder',\n },\n {\n path: '/plugins/upload/*',\n link: 'https://docs.strapi.io/cms/features/media-library',\n title: 'Media Library',\n },\n {\n path: '/plugins/content-releases/*',\n link: 'https://docs.strapi.io/cms/features/releases',\n title: 'Releases',\n },\n {\n path: '/settings/purchase-content-releases/*',\n link: 'https://docs.strapi.io/cms/features/releases',\n title: 'Releases',\n },\n {\n path: '/plugins/documentation/*',\n link: 'https://docs.strapi.io/cms/plugins/documentation',\n title: 'Documentation plugin',\n },\n {\n path: '/settings/list-plugins/*',\n link: 'https://docs.strapi.io/cms/plugins-development/developing-plugins',\n title: 'Plugins',\n },\n {\n path: '/settings/application-infos/*',\n link: 'https://docs.strapi.io/cms/features/admin-panel',\n title: 'General settings',\n },\n {\n path: '/settings/api-tokens/*',\n link: 'https://docs.strapi.io/cms/features/api-tokens',\n title: 'API Tokens settings',\n },\n {\n path: '/settings/documentation/*',\n link: 'https://docs.strapi.io/cms/plugins/documentation',\n title: 'Documentation plugin settings',\n },\n {\n path: '/settings/internationalization/*',\n link: 'https://docs.strapi.io/cms/features/internationalization#settings',\n title: 'Internationalization settings (i18n)',\n },\n {\n path: '/settings/media-library/*',\n link: 'https://docs.strapi.io/cms/features/media-library#configuration',\n title: 'Media Library settings',\n },\n {\n path: '/settings/review-workflows/*',\n link: 'https://docs.strapi.io/cms/features/review-workflows',\n title: 'Review Workflows settings',\n },\n {\n path: '/settings/purchase-review-workflows/*',\n link: 'https://docs.strapi.io/cms/features/review-workflows',\n title: 'Review Workflows settings',\n },\n {\n path: '/settings/single-sign-on/*',\n link: 'https://docs.strapi.io/cms/features/sso',\n title: 'SSO settings',\n },\n {\n path: '/settings/purchase-single-sign-on/*',\n link: 'https://docs.strapi.io/cms/features/sso',\n title: 'SSO settings',\n },\n {\n path: '/settings/purchase-content-history/*',\n link: 'https://docs.strapi.io/cms/features/content-history',\n title: 'Content History',\n },\n {\n path: '/settings/transfer-tokens/*',\n link: 'https://docs.strapi.io/cms/features/data-management',\n title: 'Transfer Tokens',\n },\n {\n path: '/settings/webhooks/*',\n link: 'https://docs.strapi.io/cms/backend-customization/webhooks',\n title: 'Webhooks',\n },\n {\n path: '/settings/roles/*',\n link: 'https://docs.strapi.io/cms/features/rbac#configuration',\n title: 'Users & Permissions',\n },\n {\n path: '/settings/users/*',\n link: 'https://docs.strapi.io/cms/features/rbac#usage',\n title: 'Users & Permissions',\n },\n {\n path: '/settings/audit-logs/*',\n link: 'https://docs.strapi.io/cms/features/audit-logs',\n title: 'Audit Logs',\n },\n {\n path: '/settings/purchase-audit-logs/*',\n link: 'https://docs.strapi.io/cms/features/audit-logs',\n title: 'Audit Logs',\n },\n {\n path: '/settings/email/*',\n link: 'https://docs.strapi.io/cms/features/email',\n title: 'Email plugin',\n },\n {\n path: '/settings/users-permissions/roles/*',\n link: 'https://docs.strapi.io/cms/features/users-permissions',\n title: 'End-users roles',\n },\n {\n path: '/settings/users-permissions/providers/*',\n link: 'https://docs.strapi.io/cms/features/users-permissions#providers',\n title: 'Providers',\n },\n {\n path: '/settings/users-permissions/email-templates/*',\n link: 'https://docs.strapi.io/cms/features/users-permissions#email-templates',\n title: 'Email Templates',\n },\n {\n path: '/settings/users-permissions/advanced-settings/*',\n link: 'https://docs.strapi.io/cms/features/users-permissions#advanced-settings',\n title: 'U&P Advanced settings',\n },\n {\n path: '/me/*',\n link: 'https://docs.strapi.io/cms/features/admin-panel#modifying-profile-information-name-email-username',\n title: 'Administrator profile',\n },\n];\n\nexport function getMatchingDocLink(pathname: string): DocLink | null {\n const matches = matchRoutes(matchingLinks, pathname);\n const match = matches?.[0];\n\n if (!match) {\n return null;\n }\n\n const { link, title } = match.route;\n return { path: match.pathnameBase, link, title };\n}\n"],"names":["matchingLinks","path","link","title","getMatchingDocLink","pathname","matches","matchRoutes","match","route","pathnameBase"],"mappings":"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"}
|