@strapi/admin 5.46.0 → 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.
Files changed (132) hide show
  1. package/dist/admin/admin/src/StrapiApp.js +2 -1
  2. package/dist/admin/admin/src/StrapiApp.js.map +1 -1
  3. package/dist/admin/admin/src/StrapiApp.mjs +2 -1
  4. package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/FormInputs/Date.js +2 -0
  6. package/dist/admin/admin/src/components/FormInputs/Date.js.map +1 -1
  7. package/dist/admin/admin/src/components/FormInputs/Date.mjs +2 -0
  8. package/dist/admin/admin/src/components/FormInputs/Date.mjs.map +1 -1
  9. package/dist/admin/admin/src/components/FormInputs/DateTime.js +2 -0
  10. package/dist/admin/admin/src/components/FormInputs/DateTime.js.map +1 -1
  11. package/dist/admin/admin/src/components/FormInputs/DateTime.mjs +2 -0
  12. package/dist/admin/admin/src/components/FormInputs/DateTime.mjs.map +1 -1
  13. package/dist/admin/admin/src/components/Layouts/HeaderLayout.js +51 -8
  14. package/dist/admin/admin/src/components/Layouts/HeaderLayout.js.map +1 -1
  15. package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs +52 -9
  16. package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs.map +1 -1
  17. package/dist/admin/admin/src/components/Layouts/utils/getMatchingDocLink.js +167 -0
  18. package/dist/admin/admin/src/components/Layouts/utils/getMatchingDocLink.js.map +1 -0
  19. package/dist/admin/admin/src/components/Layouts/utils/getMatchingDocLink.mjs +165 -0
  20. package/dist/admin/admin/src/components/Layouts/utils/getMatchingDocLink.mjs.map +1 -0
  21. package/dist/admin/admin/src/constants.js +13 -11
  22. package/dist/admin/admin/src/constants.js.map +1 -1
  23. package/dist/admin/admin/src/constants.mjs +13 -11
  24. package/dist/admin/admin/src/constants.mjs.map +1 -1
  25. package/dist/admin/admin/src/features/Auth.js +25 -0
  26. package/dist/admin/admin/src/features/Auth.js.map +1 -1
  27. package/dist/admin/admin/src/features/Auth.mjs +26 -1
  28. package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
  29. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  30. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  31. package/dist/admin/admin/src/hooks/useIdleSessionLogout.js +62 -0
  32. package/dist/admin/admin/src/hooks/useIdleSessionLogout.js.map +1 -0
  33. package/dist/admin/admin/src/hooks/useIdleSessionLogout.mjs +40 -0
  34. package/dist/admin/admin/src/hooks/useIdleSessionLogout.mjs.map +1 -0
  35. package/dist/admin/admin/src/pages/Settings/constants.js +1 -2
  36. package/dist/admin/admin/src/pages/Settings/constants.js.map +1 -1
  37. package/dist/admin/admin/src/pages/Settings/constants.mjs +1 -2
  38. package/dist/admin/admin/src/pages/Settings/constants.mjs.map +1 -1
  39. package/dist/admin/admin/src/render.js +2 -1
  40. package/dist/admin/admin/src/render.js.map +1 -1
  41. package/dist/admin/admin/src/render.mjs +2 -1
  42. package/dist/admin/admin/src/render.mjs.map +1 -1
  43. package/dist/admin/admin/src/translations/en.json.js +1 -0
  44. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  45. package/dist/admin/admin/src/translations/en.json.mjs +1 -0
  46. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  47. package/dist/admin/admin/src/translations/sk.json.js +446 -42
  48. package/dist/admin/admin/src/translations/sk.json.js.map +1 -1
  49. package/dist/admin/admin/src/translations/sk.json.mjs +445 -43
  50. package/dist/admin/admin/src/translations/sk.json.mjs.map +1 -1
  51. package/dist/admin/admin/src/utils/baseQuery.js +5 -0
  52. package/dist/admin/admin/src/utils/baseQuery.js.map +1 -1
  53. package/dist/admin/admin/src/utils/baseQuery.mjs +6 -1
  54. package/dist/admin/admin/src/utils/baseQuery.mjs.map +1 -1
  55. package/dist/admin/admin/src/utils/getFetchClient.js +24 -0
  56. package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
  57. package/dist/admin/admin/src/utils/getFetchClient.mjs +23 -1
  58. package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
  59. package/dist/admin/admin/src/utils/jwt.js +37 -0
  60. package/dist/admin/admin/src/utils/jwt.js.map +1 -0
  61. package/dist/admin/admin/src/utils/jwt.mjs +35 -0
  62. package/dist/admin/admin/src/utils/jwt.mjs.map +1 -0
  63. package/dist/admin/index.js +2 -0
  64. package/dist/admin/index.js.map +1 -1
  65. package/dist/admin/index.mjs +1 -1
  66. package/dist/admin/src/components/Layouts/HeaderLayout.d.ts +2 -0
  67. package/dist/admin/src/components/Layouts/utils/getMatchingDocLink.d.ts +6 -0
  68. package/dist/admin/src/components/SubNav.d.ts +12 -4
  69. package/dist/admin/src/constants.d.ts +6 -0
  70. package/dist/admin/src/features/Tracking.d.ts +8 -1
  71. package/dist/admin/src/hooks/useAdminRoles.d.ts +1 -1
  72. package/dist/admin/src/hooks/useIdleSessionLogout.d.ts +33 -0
  73. package/dist/admin/src/layouts/UnauthenticatedLayout.d.ts +4 -2
  74. package/dist/admin/src/pages/Settings/pages/Roles/components/CollapseLabel.d.ts +7 -3
  75. package/dist/admin/src/pages/Settings/pages/Roles/components/ConditionsButton.d.ts +4 -2
  76. package/dist/admin/src/pages/Settings/pages/Roles/components/HiddenAction.d.ts +1 -1
  77. package/dist/admin/src/services/admin.d.ts +6 -6
  78. package/dist/admin/src/services/contentApi.d.ts +1 -1
  79. package/dist/admin/src/services/users.d.ts +8 -8
  80. package/dist/admin/src/utils/getFetchClient.d.ts +15 -1
  81. package/dist/admin/src/utils/jwt.d.ts +15 -0
  82. package/dist/server/server/src/bootstrap.js +3 -2
  83. package/dist/server/server/src/bootstrap.js.map +1 -1
  84. package/dist/server/server/src/bootstrap.mjs +4 -3
  85. package/dist/server/server/src/bootstrap.mjs.map +1 -1
  86. package/dist/server/server/src/policies/index.js +0 -2
  87. package/dist/server/server/src/policies/index.js.map +1 -1
  88. package/dist/server/server/src/policies/index.mjs +0 -2
  89. package/dist/server/server/src/policies/index.mjs.map +1 -1
  90. package/dist/server/server/src/register.js +1 -1
  91. package/dist/server/server/src/register.js.map +1 -1
  92. package/dist/server/server/src/routes/admin-tokens.js +0 -7
  93. package/dist/server/server/src/routes/admin-tokens.js.map +1 -1
  94. package/dist/server/server/src/routes/admin-tokens.mjs +0 -7
  95. package/dist/server/server/src/routes/admin-tokens.mjs.map +1 -1
  96. package/dist/server/server/src/routes/serve-admin-panel.js +8 -1
  97. package/dist/server/server/src/routes/serve-admin-panel.js.map +1 -1
  98. package/dist/server/server/src/routes/serve-admin-panel.mjs +6 -2
  99. package/dist/server/server/src/routes/serve-admin-panel.mjs.map +1 -1
  100. package/dist/server/server/src/services/api-token.js +71 -1
  101. package/dist/server/server/src/services/api-token.js.map +1 -1
  102. package/dist/server/server/src/services/api-token.mjs +71 -2
  103. package/dist/server/server/src/services/api-token.mjs.map +1 -1
  104. package/dist/server/server/src/services/token.js +11 -0
  105. package/dist/server/server/src/services/token.js.map +1 -1
  106. package/dist/server/server/src/services/token.mjs +11 -1
  107. package/dist/server/server/src/services/token.mjs.map +1 -1
  108. package/dist/server/server/src/strategies/admin-token.js +5 -63
  109. package/dist/server/server/src/strategies/admin-token.js.map +1 -1
  110. package/dist/server/server/src/strategies/admin-token.mjs +6 -64
  111. package/dist/server/server/src/strategies/admin-token.mjs.map +1 -1
  112. package/dist/server/src/bootstrap.d.ts.map +1 -1
  113. package/dist/server/src/index.d.ts +0 -5
  114. package/dist/server/src/index.d.ts.map +1 -1
  115. package/dist/server/src/policies/index.d.ts +0 -5
  116. package/dist/server/src/policies/index.d.ts.map +1 -1
  117. package/dist/server/src/routes/admin-tokens.d.ts.map +1 -1
  118. package/dist/server/src/routes/serve-admin-panel.d.ts +2 -0
  119. package/dist/server/src/routes/serve-admin-panel.d.ts.map +1 -1
  120. package/dist/server/src/services/api-token.d.ts +15 -1
  121. package/dist/server/src/services/api-token.d.ts.map +1 -1
  122. package/dist/server/src/services/token.d.ts +7 -1
  123. package/dist/server/src/services/token.d.ts.map +1 -1
  124. package/dist/server/src/strategies/admin-token.d.ts +12 -22
  125. package/dist/server/src/strategies/admin-token.d.ts.map +1 -1
  126. package/package.json +10 -10
  127. package/dist/server/server/src/policies/isAdminTokensEnabled.js +0 -16
  128. package/dist/server/server/src/policies/isAdminTokensEnabled.js.map +0 -1
  129. package/dist/server/server/src/policies/isAdminTokensEnabled.mjs +0 -14
  130. package/dist/server/server/src/policies/isAdminTokensEnabled.mjs.map +0 -1
  131. package/dist/server/src/policies/isAdminTokensEnabled.d.ts +0 -7
  132. 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.jsx(designSystem.Box, {
86
- paddingLeft: 2,
87
- children: primaryAction
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: primaryAction
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__*/ jsx(Box, {
65
- paddingLeft: 2,
66
- children: primaryAction
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: primaryAction
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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"}