@strapi/admin 5.13.1 → 5.14.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/SubNav.js +269 -0
- package/dist/admin/admin/src/components/SubNav.js.map +1 -0
- package/dist/admin/admin/src/components/SubNav.mjs +267 -0
- package/dist/admin/admin/src/components/SubNav.mjs.map +1 -0
- package/dist/admin/admin/src/features/Auth.js +8 -2
- package/dist/admin/admin/src/features/Auth.js.map +1 -1
- package/dist/admin/admin/src/features/Auth.mjs +8 -2
- package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useQueryParams.js +7 -1
- package/dist/admin/admin/src/hooks/useQueryParams.js.map +1 -1
- package/dist/admin/admin/src/hooks/useQueryParams.mjs +8 -2
- package/dist/admin/admin/src/hooks/useQueryParams.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js +30 -29
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs +33 -32
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs.map +1 -1
- package/dist/admin/index.js +2 -0
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +1 -0
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/src/components/SubNav.d.ts +33 -0
- package/dist/admin/src/index.d.ts +1 -0
- package/dist/server/src/validation/project-settings.d.ts +4 -4
- package/package.json +10 -10
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var designSystem = require('@strapi/design-system');
|
|
6
|
+
var icons = require('@strapi/icons');
|
|
7
|
+
var reactRouterDom = require('react-router-dom');
|
|
8
|
+
var styledComponents = require('styled-components');
|
|
9
|
+
|
|
10
|
+
const Main = styledComponents.styled(designSystem.SubNav)`
|
|
11
|
+
background-color: ${({ theme })=>theme.colors.neutral0};
|
|
12
|
+
border-right: 1px solid ${({ theme })=>theme.colors.neutral150};
|
|
13
|
+
|
|
14
|
+
scrollbar-width: none;
|
|
15
|
+
-ms-overflow-style: none;
|
|
16
|
+
|
|
17
|
+
&::-webkit-scrollbar {
|
|
18
|
+
display: none;
|
|
19
|
+
}
|
|
20
|
+
`;
|
|
21
|
+
const StyledLink = styledComponents.styled(reactRouterDom.NavLink)`
|
|
22
|
+
display: flex;
|
|
23
|
+
align-items: center;
|
|
24
|
+
justify-content: space-between;
|
|
25
|
+
text-decoration: none;
|
|
26
|
+
height: 32px;
|
|
27
|
+
|
|
28
|
+
color: ${({ theme })=>theme.colors.neutral800};
|
|
29
|
+
|
|
30
|
+
&.active > div {
|
|
31
|
+
${({ theme })=>{
|
|
32
|
+
return `
|
|
33
|
+
background-color: ${theme.colors.primary100};
|
|
34
|
+
color: ${theme.colors.primary700};
|
|
35
|
+
font-weight: 500;
|
|
36
|
+
`;
|
|
37
|
+
}}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
&:hover.active > div {
|
|
41
|
+
${({ theme })=>{
|
|
42
|
+
return `
|
|
43
|
+
background-color: ${theme.colors.primary100};
|
|
44
|
+
`;
|
|
45
|
+
}}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
&:hover > div {
|
|
49
|
+
${({ theme })=>{
|
|
50
|
+
return `
|
|
51
|
+
background-color: ${theme.colors.neutral100};
|
|
52
|
+
`;
|
|
53
|
+
}}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
&:focus-visible {
|
|
57
|
+
outline-offset: -2px;
|
|
58
|
+
}
|
|
59
|
+
`;
|
|
60
|
+
const Link = (props)=>{
|
|
61
|
+
const { label, endAction, ...rest } = props;
|
|
62
|
+
return /*#__PURE__*/ jsxRuntime.jsx(StyledLink, {
|
|
63
|
+
...rest,
|
|
64
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
65
|
+
width: '100%',
|
|
66
|
+
paddingLeft: 3,
|
|
67
|
+
paddingRight: 3,
|
|
68
|
+
borderRadius: 1,
|
|
69
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
70
|
+
justifyContent: "space-between",
|
|
71
|
+
width: "100%",
|
|
72
|
+
gap: 1,
|
|
73
|
+
children: [
|
|
74
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
75
|
+
tag: "div",
|
|
76
|
+
lineHeight: "32px",
|
|
77
|
+
width: "100%",
|
|
78
|
+
overflow: "hidden",
|
|
79
|
+
style: {
|
|
80
|
+
textOverflow: 'ellipsis',
|
|
81
|
+
whiteSpace: 'nowrap'
|
|
82
|
+
},
|
|
83
|
+
children: label
|
|
84
|
+
}),
|
|
85
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
86
|
+
gap: 2,
|
|
87
|
+
children: endAction
|
|
88
|
+
})
|
|
89
|
+
]
|
|
90
|
+
})
|
|
91
|
+
})
|
|
92
|
+
});
|
|
93
|
+
};
|
|
94
|
+
const StyledHeader = styledComponents.styled(designSystem.Box)`
|
|
95
|
+
height: 56px;
|
|
96
|
+
display: flex;
|
|
97
|
+
align-items: center;
|
|
98
|
+
padding-left: ${({ theme })=>theme.spaces[5]};
|
|
99
|
+
`;
|
|
100
|
+
const Header = ({ label })=>{
|
|
101
|
+
return /*#__PURE__*/ jsxRuntime.jsx(StyledHeader, {
|
|
102
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
103
|
+
variant: "beta",
|
|
104
|
+
tag: "h2",
|
|
105
|
+
children: label
|
|
106
|
+
})
|
|
107
|
+
});
|
|
108
|
+
};
|
|
109
|
+
const Sections = ({ children, ...props })=>{
|
|
110
|
+
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
111
|
+
paddingBottom: 4,
|
|
112
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
113
|
+
tag: "ol",
|
|
114
|
+
gap: "5",
|
|
115
|
+
direction: "column",
|
|
116
|
+
alignItems: "stretch",
|
|
117
|
+
...props,
|
|
118
|
+
children: children.map((child, index)=>{
|
|
119
|
+
return /*#__PURE__*/ jsxRuntime.jsx("li", {
|
|
120
|
+
children: child
|
|
121
|
+
}, index);
|
|
122
|
+
})
|
|
123
|
+
})
|
|
124
|
+
});
|
|
125
|
+
};
|
|
126
|
+
const Section = ({ label, children, link })=>{
|
|
127
|
+
const listId = React.useId();
|
|
128
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
129
|
+
direction: "column",
|
|
130
|
+
alignItems: "stretch",
|
|
131
|
+
gap: 2,
|
|
132
|
+
children: [
|
|
133
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
134
|
+
paddingLeft: 5,
|
|
135
|
+
paddingRight: 5,
|
|
136
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
137
|
+
position: "relative",
|
|
138
|
+
justifyContent: "space-between",
|
|
139
|
+
children: [
|
|
140
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
141
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
142
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
143
|
+
variant: "sigma",
|
|
144
|
+
textColor: "neutral600",
|
|
145
|
+
children: label
|
|
146
|
+
})
|
|
147
|
+
})
|
|
148
|
+
}),
|
|
149
|
+
link && /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
|
|
150
|
+
label: link.label,
|
|
151
|
+
variant: "ghost",
|
|
152
|
+
withTooltip: true,
|
|
153
|
+
onClick: link.onClik,
|
|
154
|
+
size: "XS",
|
|
155
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(icons.Plus, {})
|
|
156
|
+
})
|
|
157
|
+
]
|
|
158
|
+
})
|
|
159
|
+
}),
|
|
160
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
161
|
+
tag: "ol",
|
|
162
|
+
id: listId,
|
|
163
|
+
direction: "column",
|
|
164
|
+
gap: "2px",
|
|
165
|
+
alignItems: 'stretch',
|
|
166
|
+
marginLeft: 2,
|
|
167
|
+
marginRight: 2,
|
|
168
|
+
children: children.map((child, index)=>{
|
|
169
|
+
return /*#__PURE__*/ jsxRuntime.jsx("li", {
|
|
170
|
+
children: child
|
|
171
|
+
}, index);
|
|
172
|
+
})
|
|
173
|
+
})
|
|
174
|
+
]
|
|
175
|
+
});
|
|
176
|
+
};
|
|
177
|
+
const SubSectionHeader = styledComponents.styled.button`
|
|
178
|
+
cursor: pointer;
|
|
179
|
+
width: 100%;
|
|
180
|
+
border: none;
|
|
181
|
+
padding: 0;
|
|
182
|
+
background: transparent;
|
|
183
|
+
display: flex;
|
|
184
|
+
align-items: center;
|
|
185
|
+
|
|
186
|
+
height: 32px;
|
|
187
|
+
|
|
188
|
+
border-radius: ${({ theme })=>theme.borderRadius};
|
|
189
|
+
|
|
190
|
+
padding-left: ${({ theme })=>theme.spaces[3]};
|
|
191
|
+
padding-right: ${({ theme })=>theme.spaces[3]};
|
|
192
|
+
padding-top: ${({ theme })=>theme.spaces[2]};
|
|
193
|
+
padding-bottom: ${({ theme })=>theme.spaces[2]};
|
|
194
|
+
|
|
195
|
+
&:hover {
|
|
196
|
+
background-color: ${({ theme })=>theme.colors.neutral100};
|
|
197
|
+
}
|
|
198
|
+
`;
|
|
199
|
+
const SubSectionLinkWrapper = styledComponents.styled.li`
|
|
200
|
+
${StyledLink} > div {
|
|
201
|
+
padding-left: 36px;
|
|
202
|
+
}
|
|
203
|
+
`;
|
|
204
|
+
const SubSection = ({ label, children })=>{
|
|
205
|
+
const [isOpen, setOpenLinks] = React.useState(true);
|
|
206
|
+
const listId = React.useId();
|
|
207
|
+
const handleClick = ()=>{
|
|
208
|
+
setOpenLinks((prev)=>!prev);
|
|
209
|
+
};
|
|
210
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Box, {
|
|
211
|
+
children: [
|
|
212
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
213
|
+
justifyContent: "space-between",
|
|
214
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(SubSectionHeader, {
|
|
215
|
+
onClick: handleClick,
|
|
216
|
+
"aria-expanded": isOpen,
|
|
217
|
+
"aria-controls": listId,
|
|
218
|
+
children: [
|
|
219
|
+
/*#__PURE__*/ jsxRuntime.jsx(icons.ChevronDown, {
|
|
220
|
+
"aria-hidden": true,
|
|
221
|
+
fill: "neutral500",
|
|
222
|
+
style: {
|
|
223
|
+
transform: `rotate(${isOpen ? '0deg' : '-90deg'})`,
|
|
224
|
+
transition: 'transform 0.5s'
|
|
225
|
+
}
|
|
226
|
+
}),
|
|
227
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
228
|
+
paddingLeft: 2,
|
|
229
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
230
|
+
tag: "span",
|
|
231
|
+
fontWeight: "semiBold",
|
|
232
|
+
textColor: "neutral800",
|
|
233
|
+
children: label
|
|
234
|
+
})
|
|
235
|
+
})
|
|
236
|
+
]
|
|
237
|
+
})
|
|
238
|
+
}),
|
|
239
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
240
|
+
tag: "ul",
|
|
241
|
+
id: listId,
|
|
242
|
+
direction: "column",
|
|
243
|
+
gap: "2px",
|
|
244
|
+
alignItems: 'stretch',
|
|
245
|
+
style: {
|
|
246
|
+
maxHeight: isOpen ? '1000px' : 0,
|
|
247
|
+
overflow: 'hidden',
|
|
248
|
+
transition: isOpen ? 'max-height 1s ease-in-out' : 'max-height 0.5s cubic-bezier(0, 1, 0, 1)'
|
|
249
|
+
},
|
|
250
|
+
children: children.map((child, index)=>{
|
|
251
|
+
return /*#__PURE__*/ jsxRuntime.jsx(SubSectionLinkWrapper, {
|
|
252
|
+
children: child
|
|
253
|
+
}, index);
|
|
254
|
+
})
|
|
255
|
+
})
|
|
256
|
+
]
|
|
257
|
+
});
|
|
258
|
+
};
|
|
259
|
+
const SubNav = {
|
|
260
|
+
Main,
|
|
261
|
+
Header,
|
|
262
|
+
Link,
|
|
263
|
+
Sections,
|
|
264
|
+
Section,
|
|
265
|
+
SubSection
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
exports.SubNav = SubNav;
|
|
269
|
+
//# sourceMappingURL=SubNav.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubNav.js","sources":["../../../../../admin/src/components/SubNav.tsx"],"sourcesContent":["import { useId, useState } from 'react';\n\nimport { Box, SubNav as DSSubNav, Flex, Typography, IconButton } from '@strapi/design-system';\nimport { ChevronDown, Plus } from '@strapi/icons';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nconst Main = styled(DSSubNav)`\n background-color: ${({ theme }) => theme.colors.neutral0};\n border-right: 1px solid ${({ theme }) => theme.colors.neutral150};\n\n scrollbar-width: none;\n -ms-overflow-style: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n`;\n\nconst StyledLink = styled(NavLink)`\n display: flex;\n align-items: center;\n justify-content: space-between;\n text-decoration: none;\n height: 32px;\n\n color: ${({ theme }) => theme.colors.neutral800};\n\n &.active > div {\n ${({ theme }) => {\n return `\n background-color: ${theme.colors.primary100};\n color: ${theme.colors.primary700};\n font-weight: 500;\n `;\n }}\n }\n\n &:hover.active > div {\n ${({ theme }) => {\n return `\n background-color: ${theme.colors.primary100};\n `;\n }}\n }\n\n &:hover > div {\n ${({ theme }) => {\n return `\n background-color: ${theme.colors.neutral100};\n `;\n }}\n }\n\n &:focus-visible {\n outline-offset: -2px;\n }\n`;\n\nconst Link = (\n props: Omit<React.ComponentProps<typeof StyledLink>, 'label'> & {\n label: React.ReactNode;\n endAction?: React.ReactNode;\n }\n) => {\n const { label, endAction, ...rest } = props;\n return (\n <StyledLink {...rest}>\n <Box width={'100%'} paddingLeft={3} paddingRight={3} borderRadius={1}>\n <Flex justifyContent=\"space-between\" width=\"100%\" gap={1}>\n <Typography\n tag=\"div\"\n lineHeight=\"32px\"\n width=\"100%\"\n overflow=\"hidden\"\n style={{ textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}\n >\n {label}\n </Typography>\n <Flex gap={2}>{endAction}</Flex>\n </Flex>\n </Box>\n </StyledLink>\n );\n};\n\nconst StyledHeader = styled(Box)`\n height: 56px;\n display: flex;\n align-items: center;\n padding-left: ${({ theme }) => theme.spaces[5]};\n`;\n\nconst Header = ({ label }: { label: string }) => {\n return (\n <StyledHeader>\n <Typography variant=\"beta\" tag=\"h2\">\n {label}\n </Typography>\n </StyledHeader>\n );\n};\n\nconst Sections = ({ children, ...props }: { children: React.ReactNode[]; [key: string]: any }) => {\n return (\n <Box paddingBottom={4}>\n <Flex tag=\"ol\" gap=\"5\" direction=\"column\" alignItems=\"stretch\" {...props}>\n {children.map((child, index) => {\n return <li key={index}>{child}</li>;\n })}\n </Flex>\n </Box>\n );\n};\n\nconst Section = ({\n label,\n children,\n link,\n}: {\n label: string;\n children: React.ReactNode[];\n link?: { label: string; onClik: () => void };\n}) => {\n const listId = useId();\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Box paddingLeft={5} paddingRight={5}>\n <Flex position=\"relative\" justifyContent=\"space-between\">\n <Flex>\n <Box>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {label}\n </Typography>\n </Box>\n </Flex>\n {link && (\n <IconButton\n label={link.label}\n variant=\"ghost\"\n withTooltip\n onClick={link.onClik}\n size=\"XS\"\n >\n <Plus />\n </IconButton>\n )}\n </Flex>\n </Box>\n <Flex\n tag=\"ol\"\n id={listId}\n direction=\"column\"\n gap=\"2px\"\n alignItems={'stretch'}\n marginLeft={2}\n marginRight={2}\n >\n {children.map((child, index) => {\n return <li key={index}>{child}</li>;\n })}\n </Flex>\n </Flex>\n );\n};\n\nconst SubSectionHeader = styled.button`\n cursor: pointer;\n width: 100%;\n border: none;\n padding: 0;\n background: transparent;\n display: flex;\n align-items: center;\n\n height: 32px;\n\n border-radius: ${({ theme }) => theme.borderRadius};\n\n padding-left: ${({ theme }) => theme.spaces[3]};\n padding-right: ${({ theme }) => theme.spaces[3]};\n padding-top: ${({ theme }) => theme.spaces[2]};\n padding-bottom: ${({ theme }) => theme.spaces[2]};\n\n &:hover {\n background-color: ${({ theme }) => theme.colors.neutral100};\n }\n`;\n\nconst SubSectionLinkWrapper = styled.li`\n ${StyledLink} > div {\n padding-left: 36px;\n }\n`;\n\nconst SubSection = ({ label, children }: { label: string; children: React.ReactNode[] }) => {\n const [isOpen, setOpenLinks] = useState(true);\n const listId = useId();\n\n const handleClick = () => {\n setOpenLinks((prev) => !prev);\n };\n\n return (\n <Box>\n <Flex justifyContent=\"space-between\">\n <SubSectionHeader onClick={handleClick} aria-expanded={isOpen} aria-controls={listId}>\n <ChevronDown\n aria-hidden\n fill=\"neutral500\"\n style={{\n transform: `rotate(${isOpen ? '0deg' : '-90deg'})`,\n transition: 'transform 0.5s',\n }}\n />\n <Box paddingLeft={2}>\n <Typography tag=\"span\" fontWeight=\"semiBold\" textColor=\"neutral800\">\n {label}\n </Typography>\n </Box>\n </SubSectionHeader>\n </Flex>\n {\n <Flex\n tag=\"ul\"\n id={listId}\n direction=\"column\"\n gap=\"2px\"\n alignItems={'stretch'}\n style={{\n maxHeight: isOpen ? '1000px' : 0,\n overflow: 'hidden',\n transition: isOpen\n ? 'max-height 1s ease-in-out'\n : 'max-height 0.5s cubic-bezier(0, 1, 0, 1)',\n }}\n >\n {children.map((child, index) => {\n return <SubSectionLinkWrapper key={index}>{child}</SubSectionLinkWrapper>;\n })}\n </Flex>\n }\n </Box>\n );\n};\n\nexport const SubNav = {\n Main,\n Header,\n Link,\n Sections,\n Section,\n SubSection,\n};\n"],"names":["Main","styled","DSSubNav","theme","colors","neutral0","neutral150","StyledLink","NavLink","neutral800","primary100","primary700","neutral100","Link","props","label","endAction","rest","_jsx","Box","width","paddingLeft","paddingRight","borderRadius","_jsxs","Flex","justifyContent","gap","Typography","tag","lineHeight","overflow","style","textOverflow","whiteSpace","StyledHeader","spaces","Header","variant","Sections","children","paddingBottom","direction","alignItems","map","child","index","li","Section","link","listId","useId","position","textColor","IconButton","withTooltip","onClick","onClik","size","Plus","id","marginLeft","marginRight","SubSectionHeader","button","SubSectionLinkWrapper","SubSection","isOpen","setOpenLinks","useState","handleClick","prev","aria-expanded","aria-controls","ChevronDown","aria-hidden","fill","transform","transition","fontWeight","maxHeight","SubNav"],"mappings":"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"}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { useId, useState } from 'react';
|
|
3
|
+
import { SubNav as SubNav$1, Box, Flex, Typography, IconButton } from '@strapi/design-system';
|
|
4
|
+
import { Plus, ChevronDown } from '@strapi/icons';
|
|
5
|
+
import { NavLink } from 'react-router-dom';
|
|
6
|
+
import { styled } from 'styled-components';
|
|
7
|
+
|
|
8
|
+
const Main = styled(SubNav$1)`
|
|
9
|
+
background-color: ${({ theme })=>theme.colors.neutral0};
|
|
10
|
+
border-right: 1px solid ${({ theme })=>theme.colors.neutral150};
|
|
11
|
+
|
|
12
|
+
scrollbar-width: none;
|
|
13
|
+
-ms-overflow-style: none;
|
|
14
|
+
|
|
15
|
+
&::-webkit-scrollbar {
|
|
16
|
+
display: none;
|
|
17
|
+
}
|
|
18
|
+
`;
|
|
19
|
+
const StyledLink = styled(NavLink)`
|
|
20
|
+
display: flex;
|
|
21
|
+
align-items: center;
|
|
22
|
+
justify-content: space-between;
|
|
23
|
+
text-decoration: none;
|
|
24
|
+
height: 32px;
|
|
25
|
+
|
|
26
|
+
color: ${({ theme })=>theme.colors.neutral800};
|
|
27
|
+
|
|
28
|
+
&.active > div {
|
|
29
|
+
${({ theme })=>{
|
|
30
|
+
return `
|
|
31
|
+
background-color: ${theme.colors.primary100};
|
|
32
|
+
color: ${theme.colors.primary700};
|
|
33
|
+
font-weight: 500;
|
|
34
|
+
`;
|
|
35
|
+
}}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
&:hover.active > div {
|
|
39
|
+
${({ theme })=>{
|
|
40
|
+
return `
|
|
41
|
+
background-color: ${theme.colors.primary100};
|
|
42
|
+
`;
|
|
43
|
+
}}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
&:hover > div {
|
|
47
|
+
${({ theme })=>{
|
|
48
|
+
return `
|
|
49
|
+
background-color: ${theme.colors.neutral100};
|
|
50
|
+
`;
|
|
51
|
+
}}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
&:focus-visible {
|
|
55
|
+
outline-offset: -2px;
|
|
56
|
+
}
|
|
57
|
+
`;
|
|
58
|
+
const Link = (props)=>{
|
|
59
|
+
const { label, endAction, ...rest } = props;
|
|
60
|
+
return /*#__PURE__*/ jsx(StyledLink, {
|
|
61
|
+
...rest,
|
|
62
|
+
children: /*#__PURE__*/ jsx(Box, {
|
|
63
|
+
width: '100%',
|
|
64
|
+
paddingLeft: 3,
|
|
65
|
+
paddingRight: 3,
|
|
66
|
+
borderRadius: 1,
|
|
67
|
+
children: /*#__PURE__*/ jsxs(Flex, {
|
|
68
|
+
justifyContent: "space-between",
|
|
69
|
+
width: "100%",
|
|
70
|
+
gap: 1,
|
|
71
|
+
children: [
|
|
72
|
+
/*#__PURE__*/ jsx(Typography, {
|
|
73
|
+
tag: "div",
|
|
74
|
+
lineHeight: "32px",
|
|
75
|
+
width: "100%",
|
|
76
|
+
overflow: "hidden",
|
|
77
|
+
style: {
|
|
78
|
+
textOverflow: 'ellipsis',
|
|
79
|
+
whiteSpace: 'nowrap'
|
|
80
|
+
},
|
|
81
|
+
children: label
|
|
82
|
+
}),
|
|
83
|
+
/*#__PURE__*/ jsx(Flex, {
|
|
84
|
+
gap: 2,
|
|
85
|
+
children: endAction
|
|
86
|
+
})
|
|
87
|
+
]
|
|
88
|
+
})
|
|
89
|
+
})
|
|
90
|
+
});
|
|
91
|
+
};
|
|
92
|
+
const StyledHeader = styled(Box)`
|
|
93
|
+
height: 56px;
|
|
94
|
+
display: flex;
|
|
95
|
+
align-items: center;
|
|
96
|
+
padding-left: ${({ theme })=>theme.spaces[5]};
|
|
97
|
+
`;
|
|
98
|
+
const Header = ({ label })=>{
|
|
99
|
+
return /*#__PURE__*/ jsx(StyledHeader, {
|
|
100
|
+
children: /*#__PURE__*/ jsx(Typography, {
|
|
101
|
+
variant: "beta",
|
|
102
|
+
tag: "h2",
|
|
103
|
+
children: label
|
|
104
|
+
})
|
|
105
|
+
});
|
|
106
|
+
};
|
|
107
|
+
const Sections = ({ children, ...props })=>{
|
|
108
|
+
return /*#__PURE__*/ jsx(Box, {
|
|
109
|
+
paddingBottom: 4,
|
|
110
|
+
children: /*#__PURE__*/ jsx(Flex, {
|
|
111
|
+
tag: "ol",
|
|
112
|
+
gap: "5",
|
|
113
|
+
direction: "column",
|
|
114
|
+
alignItems: "stretch",
|
|
115
|
+
...props,
|
|
116
|
+
children: children.map((child, index)=>{
|
|
117
|
+
return /*#__PURE__*/ jsx("li", {
|
|
118
|
+
children: child
|
|
119
|
+
}, index);
|
|
120
|
+
})
|
|
121
|
+
})
|
|
122
|
+
});
|
|
123
|
+
};
|
|
124
|
+
const Section = ({ label, children, link })=>{
|
|
125
|
+
const listId = useId();
|
|
126
|
+
return /*#__PURE__*/ jsxs(Flex, {
|
|
127
|
+
direction: "column",
|
|
128
|
+
alignItems: "stretch",
|
|
129
|
+
gap: 2,
|
|
130
|
+
children: [
|
|
131
|
+
/*#__PURE__*/ jsx(Box, {
|
|
132
|
+
paddingLeft: 5,
|
|
133
|
+
paddingRight: 5,
|
|
134
|
+
children: /*#__PURE__*/ jsxs(Flex, {
|
|
135
|
+
position: "relative",
|
|
136
|
+
justifyContent: "space-between",
|
|
137
|
+
children: [
|
|
138
|
+
/*#__PURE__*/ jsx(Flex, {
|
|
139
|
+
children: /*#__PURE__*/ jsx(Box, {
|
|
140
|
+
children: /*#__PURE__*/ jsx(Typography, {
|
|
141
|
+
variant: "sigma",
|
|
142
|
+
textColor: "neutral600",
|
|
143
|
+
children: label
|
|
144
|
+
})
|
|
145
|
+
})
|
|
146
|
+
}),
|
|
147
|
+
link && /*#__PURE__*/ jsx(IconButton, {
|
|
148
|
+
label: link.label,
|
|
149
|
+
variant: "ghost",
|
|
150
|
+
withTooltip: true,
|
|
151
|
+
onClick: link.onClik,
|
|
152
|
+
size: "XS",
|
|
153
|
+
children: /*#__PURE__*/ jsx(Plus, {})
|
|
154
|
+
})
|
|
155
|
+
]
|
|
156
|
+
})
|
|
157
|
+
}),
|
|
158
|
+
/*#__PURE__*/ jsx(Flex, {
|
|
159
|
+
tag: "ol",
|
|
160
|
+
id: listId,
|
|
161
|
+
direction: "column",
|
|
162
|
+
gap: "2px",
|
|
163
|
+
alignItems: 'stretch',
|
|
164
|
+
marginLeft: 2,
|
|
165
|
+
marginRight: 2,
|
|
166
|
+
children: children.map((child, index)=>{
|
|
167
|
+
return /*#__PURE__*/ jsx("li", {
|
|
168
|
+
children: child
|
|
169
|
+
}, index);
|
|
170
|
+
})
|
|
171
|
+
})
|
|
172
|
+
]
|
|
173
|
+
});
|
|
174
|
+
};
|
|
175
|
+
const SubSectionHeader = styled.button`
|
|
176
|
+
cursor: pointer;
|
|
177
|
+
width: 100%;
|
|
178
|
+
border: none;
|
|
179
|
+
padding: 0;
|
|
180
|
+
background: transparent;
|
|
181
|
+
display: flex;
|
|
182
|
+
align-items: center;
|
|
183
|
+
|
|
184
|
+
height: 32px;
|
|
185
|
+
|
|
186
|
+
border-radius: ${({ theme })=>theme.borderRadius};
|
|
187
|
+
|
|
188
|
+
padding-left: ${({ theme })=>theme.spaces[3]};
|
|
189
|
+
padding-right: ${({ theme })=>theme.spaces[3]};
|
|
190
|
+
padding-top: ${({ theme })=>theme.spaces[2]};
|
|
191
|
+
padding-bottom: ${({ theme })=>theme.spaces[2]};
|
|
192
|
+
|
|
193
|
+
&:hover {
|
|
194
|
+
background-color: ${({ theme })=>theme.colors.neutral100};
|
|
195
|
+
}
|
|
196
|
+
`;
|
|
197
|
+
const SubSectionLinkWrapper = styled.li`
|
|
198
|
+
${StyledLink} > div {
|
|
199
|
+
padding-left: 36px;
|
|
200
|
+
}
|
|
201
|
+
`;
|
|
202
|
+
const SubSection = ({ label, children })=>{
|
|
203
|
+
const [isOpen, setOpenLinks] = useState(true);
|
|
204
|
+
const listId = useId();
|
|
205
|
+
const handleClick = ()=>{
|
|
206
|
+
setOpenLinks((prev)=>!prev);
|
|
207
|
+
};
|
|
208
|
+
return /*#__PURE__*/ jsxs(Box, {
|
|
209
|
+
children: [
|
|
210
|
+
/*#__PURE__*/ jsx(Flex, {
|
|
211
|
+
justifyContent: "space-between",
|
|
212
|
+
children: /*#__PURE__*/ jsxs(SubSectionHeader, {
|
|
213
|
+
onClick: handleClick,
|
|
214
|
+
"aria-expanded": isOpen,
|
|
215
|
+
"aria-controls": listId,
|
|
216
|
+
children: [
|
|
217
|
+
/*#__PURE__*/ jsx(ChevronDown, {
|
|
218
|
+
"aria-hidden": true,
|
|
219
|
+
fill: "neutral500",
|
|
220
|
+
style: {
|
|
221
|
+
transform: `rotate(${isOpen ? '0deg' : '-90deg'})`,
|
|
222
|
+
transition: 'transform 0.5s'
|
|
223
|
+
}
|
|
224
|
+
}),
|
|
225
|
+
/*#__PURE__*/ jsx(Box, {
|
|
226
|
+
paddingLeft: 2,
|
|
227
|
+
children: /*#__PURE__*/ jsx(Typography, {
|
|
228
|
+
tag: "span",
|
|
229
|
+
fontWeight: "semiBold",
|
|
230
|
+
textColor: "neutral800",
|
|
231
|
+
children: label
|
|
232
|
+
})
|
|
233
|
+
})
|
|
234
|
+
]
|
|
235
|
+
})
|
|
236
|
+
}),
|
|
237
|
+
/*#__PURE__*/ jsx(Flex, {
|
|
238
|
+
tag: "ul",
|
|
239
|
+
id: listId,
|
|
240
|
+
direction: "column",
|
|
241
|
+
gap: "2px",
|
|
242
|
+
alignItems: 'stretch',
|
|
243
|
+
style: {
|
|
244
|
+
maxHeight: isOpen ? '1000px' : 0,
|
|
245
|
+
overflow: 'hidden',
|
|
246
|
+
transition: isOpen ? 'max-height 1s ease-in-out' : 'max-height 0.5s cubic-bezier(0, 1, 0, 1)'
|
|
247
|
+
},
|
|
248
|
+
children: children.map((child, index)=>{
|
|
249
|
+
return /*#__PURE__*/ jsx(SubSectionLinkWrapper, {
|
|
250
|
+
children: child
|
|
251
|
+
}, index);
|
|
252
|
+
})
|
|
253
|
+
})
|
|
254
|
+
]
|
|
255
|
+
});
|
|
256
|
+
};
|
|
257
|
+
const SubNav = {
|
|
258
|
+
Main,
|
|
259
|
+
Header,
|
|
260
|
+
Link,
|
|
261
|
+
Sections,
|
|
262
|
+
Section,
|
|
263
|
+
SubSection
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
export { SubNav };
|
|
267
|
+
//# sourceMappingURL=SubNav.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubNav.mjs","sources":["../../../../../admin/src/components/SubNav.tsx"],"sourcesContent":["import { useId, useState } from 'react';\n\nimport { Box, SubNav as DSSubNav, Flex, Typography, IconButton } from '@strapi/design-system';\nimport { ChevronDown, Plus } from '@strapi/icons';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nconst Main = styled(DSSubNav)`\n background-color: ${({ theme }) => theme.colors.neutral0};\n border-right: 1px solid ${({ theme }) => theme.colors.neutral150};\n\n scrollbar-width: none;\n -ms-overflow-style: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n`;\n\nconst StyledLink = styled(NavLink)`\n display: flex;\n align-items: center;\n justify-content: space-between;\n text-decoration: none;\n height: 32px;\n\n color: ${({ theme }) => theme.colors.neutral800};\n\n &.active > div {\n ${({ theme }) => {\n return `\n background-color: ${theme.colors.primary100};\n color: ${theme.colors.primary700};\n font-weight: 500;\n `;\n }}\n }\n\n &:hover.active > div {\n ${({ theme }) => {\n return `\n background-color: ${theme.colors.primary100};\n `;\n }}\n }\n\n &:hover > div {\n ${({ theme }) => {\n return `\n background-color: ${theme.colors.neutral100};\n `;\n }}\n }\n\n &:focus-visible {\n outline-offset: -2px;\n }\n`;\n\nconst Link = (\n props: Omit<React.ComponentProps<typeof StyledLink>, 'label'> & {\n label: React.ReactNode;\n endAction?: React.ReactNode;\n }\n) => {\n const { label, endAction, ...rest } = props;\n return (\n <StyledLink {...rest}>\n <Box width={'100%'} paddingLeft={3} paddingRight={3} borderRadius={1}>\n <Flex justifyContent=\"space-between\" width=\"100%\" gap={1}>\n <Typography\n tag=\"div\"\n lineHeight=\"32px\"\n width=\"100%\"\n overflow=\"hidden\"\n style={{ textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}\n >\n {label}\n </Typography>\n <Flex gap={2}>{endAction}</Flex>\n </Flex>\n </Box>\n </StyledLink>\n );\n};\n\nconst StyledHeader = styled(Box)`\n height: 56px;\n display: flex;\n align-items: center;\n padding-left: ${({ theme }) => theme.spaces[5]};\n`;\n\nconst Header = ({ label }: { label: string }) => {\n return (\n <StyledHeader>\n <Typography variant=\"beta\" tag=\"h2\">\n {label}\n </Typography>\n </StyledHeader>\n );\n};\n\nconst Sections = ({ children, ...props }: { children: React.ReactNode[]; [key: string]: any }) => {\n return (\n <Box paddingBottom={4}>\n <Flex tag=\"ol\" gap=\"5\" direction=\"column\" alignItems=\"stretch\" {...props}>\n {children.map((child, index) => {\n return <li key={index}>{child}</li>;\n })}\n </Flex>\n </Box>\n );\n};\n\nconst Section = ({\n label,\n children,\n link,\n}: {\n label: string;\n children: React.ReactNode[];\n link?: { label: string; onClik: () => void };\n}) => {\n const listId = useId();\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Box paddingLeft={5} paddingRight={5}>\n <Flex position=\"relative\" justifyContent=\"space-between\">\n <Flex>\n <Box>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {label}\n </Typography>\n </Box>\n </Flex>\n {link && (\n <IconButton\n label={link.label}\n variant=\"ghost\"\n withTooltip\n onClick={link.onClik}\n size=\"XS\"\n >\n <Plus />\n </IconButton>\n )}\n </Flex>\n </Box>\n <Flex\n tag=\"ol\"\n id={listId}\n direction=\"column\"\n gap=\"2px\"\n alignItems={'stretch'}\n marginLeft={2}\n marginRight={2}\n >\n {children.map((child, index) => {\n return <li key={index}>{child}</li>;\n })}\n </Flex>\n </Flex>\n );\n};\n\nconst SubSectionHeader = styled.button`\n cursor: pointer;\n width: 100%;\n border: none;\n padding: 0;\n background: transparent;\n display: flex;\n align-items: center;\n\n height: 32px;\n\n border-radius: ${({ theme }) => theme.borderRadius};\n\n padding-left: ${({ theme }) => theme.spaces[3]};\n padding-right: ${({ theme }) => theme.spaces[3]};\n padding-top: ${({ theme }) => theme.spaces[2]};\n padding-bottom: ${({ theme }) => theme.spaces[2]};\n\n &:hover {\n background-color: ${({ theme }) => theme.colors.neutral100};\n }\n`;\n\nconst SubSectionLinkWrapper = styled.li`\n ${StyledLink} > div {\n padding-left: 36px;\n }\n`;\n\nconst SubSection = ({ label, children }: { label: string; children: React.ReactNode[] }) => {\n const [isOpen, setOpenLinks] = useState(true);\n const listId = useId();\n\n const handleClick = () => {\n setOpenLinks((prev) => !prev);\n };\n\n return (\n <Box>\n <Flex justifyContent=\"space-between\">\n <SubSectionHeader onClick={handleClick} aria-expanded={isOpen} aria-controls={listId}>\n <ChevronDown\n aria-hidden\n fill=\"neutral500\"\n style={{\n transform: `rotate(${isOpen ? '0deg' : '-90deg'})`,\n transition: 'transform 0.5s',\n }}\n />\n <Box paddingLeft={2}>\n <Typography tag=\"span\" fontWeight=\"semiBold\" textColor=\"neutral800\">\n {label}\n </Typography>\n </Box>\n </SubSectionHeader>\n </Flex>\n {\n <Flex\n tag=\"ul\"\n id={listId}\n direction=\"column\"\n gap=\"2px\"\n alignItems={'stretch'}\n style={{\n maxHeight: isOpen ? '1000px' : 0,\n overflow: 'hidden',\n transition: isOpen\n ? 'max-height 1s ease-in-out'\n : 'max-height 0.5s cubic-bezier(0, 1, 0, 1)',\n }}\n >\n {children.map((child, index) => {\n return <SubSectionLinkWrapper key={index}>{child}</SubSectionLinkWrapper>;\n })}\n </Flex>\n }\n </Box>\n );\n};\n\nexport const SubNav = {\n Main,\n Header,\n Link,\n Sections,\n Section,\n SubSection,\n};\n"],"names":["Main","styled","DSSubNav","theme","colors","neutral0","neutral150","StyledLink","NavLink","neutral800","primary100","primary700","neutral100","Link","props","label","endAction","rest","_jsx","Box","width","paddingLeft","paddingRight","borderRadius","_jsxs","Flex","justifyContent","gap","Typography","tag","lineHeight","overflow","style","textOverflow","whiteSpace","StyledHeader","spaces","Header","variant","Sections","children","paddingBottom","direction","alignItems","map","child","index","li","Section","link","listId","useId","position","textColor","IconButton","withTooltip","onClick","onClik","size","Plus","id","marginLeft","marginRight","SubSectionHeader","button","SubSectionLinkWrapper","SubSection","isOpen","setOpenLinks","useState","handleClick","prev","aria-expanded","aria-controls","ChevronDown","aria-hidden","fill","transform","transition","fontWeight","maxHeight","SubNav"],"mappings":"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"}
|
|
@@ -40,6 +40,13 @@ const AuthProvider = ({ children, _defaultPermissions = [], _disableRenewToken =
|
|
|
40
40
|
const runRbacMiddleware = StrapiApp.useStrapiApp('AuthProvider', (state)=>state.rbac.run);
|
|
41
41
|
const location = reactRouterDom.useLocation();
|
|
42
42
|
const [{ rawQuery }] = useQueryParams.useQueryParams();
|
|
43
|
+
const locationRef = React__namespace.useRef(location);
|
|
44
|
+
// Update ref without causing re-render
|
|
45
|
+
React__namespace.useEffect(()=>{
|
|
46
|
+
locationRef.current = location;
|
|
47
|
+
}, [
|
|
48
|
+
location
|
|
49
|
+
]);
|
|
43
50
|
const token = hooks.useTypedSelector((state)=>state.admin_app.token ?? null);
|
|
44
51
|
const { data: user, isLoading: isLoadingUser } = auth.useGetMeQuery(undefined, {
|
|
45
52
|
/**
|
|
@@ -174,7 +181,7 @@ const AuthProvider = ({ children, _defaultPermissions = [], _disableRenewToken =
|
|
|
174
181
|
const middlewaredPermissions = await runRbacMiddleware({
|
|
175
182
|
user,
|
|
176
183
|
permissions: userPermissions,
|
|
177
|
-
pathname:
|
|
184
|
+
pathname: locationRef.current.pathname,
|
|
178
185
|
search: (rawQueryContext || rawQuery).split('?')[1] ?? ''
|
|
179
186
|
}, matchingPermissions);
|
|
180
187
|
const shouldCheckConditions = middlewaredPermissions.some((perm)=>Array.isArray(perm.conditions) && perm.conditions.length > 0);
|
|
@@ -194,7 +201,6 @@ const AuthProvider = ({ children, _defaultPermissions = [], _disableRenewToken =
|
|
|
194
201
|
}
|
|
195
202
|
}, [
|
|
196
203
|
checkPermissions,
|
|
197
|
-
location.pathname,
|
|
198
204
|
rawQuery,
|
|
199
205
|
runRbacMiddleware,
|
|
200
206
|
user,
|