@strapi/admin 5.33.2 → 5.33.4

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 (89) hide show
  1. package/dist/admin/admin/src/components/LeftMenu.js +3 -1
  2. package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
  3. package/dist/admin/admin/src/components/LeftMenu.mjs +3 -1
  4. package/dist/admin/admin/src/components/LeftMenu.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/MainNav/MainNavLinks.js +31 -30
  6. package/dist/admin/admin/src/components/MainNav/MainNavLinks.js.map +1 -1
  7. package/dist/admin/admin/src/components/MainNav/MainNavLinks.mjs +31 -30
  8. package/dist/admin/admin/src/components/MainNav/MainNavLinks.mjs.map +1 -1
  9. package/dist/admin/admin/src/components/MainNav/NavBrand.js +38 -31
  10. package/dist/admin/admin/src/components/MainNav/NavBrand.js.map +1 -1
  11. package/dist/admin/admin/src/components/MainNav/NavBrand.mjs +38 -31
  12. package/dist/admin/admin/src/components/MainNav/NavBrand.mjs.map +1 -1
  13. package/dist/admin/admin/src/components/MainNav/NavBurgerMenu.js +14 -3
  14. package/dist/admin/admin/src/components/MainNav/NavBurgerMenu.js.map +1 -1
  15. package/dist/admin/admin/src/components/MainNav/NavBurgerMenu.mjs +15 -4
  16. package/dist/admin/admin/src/components/MainNav/NavBurgerMenu.mjs.map +1 -1
  17. package/dist/admin/admin/src/components/MainNav/NavLink.js +18 -2
  18. package/dist/admin/admin/src/components/MainNav/NavLink.js.map +1 -1
  19. package/dist/admin/admin/src/components/MainNav/NavLink.mjs +18 -2
  20. package/dist/admin/admin/src/components/MainNav/NavLink.mjs.map +1 -1
  21. package/dist/admin/admin/src/components/NpsSurvey.js +1 -2
  22. package/dist/admin/admin/src/components/NpsSurvey.js.map +1 -1
  23. package/dist/admin/admin/src/components/NpsSurvey.mjs +1 -2
  24. package/dist/admin/admin/src/components/NpsSurvey.mjs.map +1 -1
  25. package/dist/admin/admin/src/components/SubNav.js +5 -0
  26. package/dist/admin/admin/src/components/SubNav.js.map +1 -1
  27. package/dist/admin/admin/src/components/SubNav.mjs +6 -1
  28. package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
  29. package/dist/admin/admin/src/constants/theme.js +3 -1
  30. package/dist/admin/admin/src/constants/theme.js.map +1 -1
  31. package/dist/admin/admin/src/constants/theme.mjs +3 -2
  32. package/dist/admin/admin/src/constants/theme.mjs.map +1 -1
  33. package/dist/admin/admin/src/features/Auth.js +14 -0
  34. package/dist/admin/admin/src/features/Auth.js.map +1 -1
  35. package/dist/admin/admin/src/features/Auth.mjs +15 -1
  36. package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
  37. package/dist/admin/admin/src/features/Tracking.js +1 -2
  38. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  39. package/dist/admin/admin/src/features/Tracking.mjs +1 -2
  40. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  41. package/dist/admin/admin/src/render.js +0 -1
  42. package/dist/admin/admin/src/render.js.map +1 -1
  43. package/dist/admin/admin/src/render.mjs +0 -1
  44. package/dist/admin/admin/src/render.mjs.map +1 -1
  45. package/dist/admin/admin/src/utils/baseQuery.js +7 -37
  46. package/dist/admin/admin/src/utils/baseQuery.js.map +1 -1
  47. package/dist/admin/admin/src/utils/baseQuery.mjs +8 -38
  48. package/dist/admin/admin/src/utils/baseQuery.mjs.map +1 -1
  49. package/dist/admin/admin/src/utils/getFetchClient.js +206 -67
  50. package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
  51. package/dist/admin/admin/src/utils/getFetchClient.mjs +205 -69
  52. package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
  53. package/dist/admin/index.js +3 -0
  54. package/dist/admin/index.js.map +1 -1
  55. package/dist/admin/index.mjs +1 -1
  56. package/dist/admin/src/components/MainNav/NavLink.d.ts +1 -0
  57. package/dist/admin/src/constants/theme.d.ts +3 -2
  58. package/dist/admin/src/features/Tracking.d.ts +0 -1
  59. package/dist/admin/src/services/admin.d.ts +0 -1
  60. package/dist/admin/src/services/contentApi.d.ts +1 -1
  61. package/dist/admin/src/utils/getFetchClient.d.ts +34 -1
  62. package/dist/ee/server/src/controllers/admin.d.ts +0 -1
  63. package/dist/ee/server/src/controllers/admin.d.ts.map +1 -1
  64. package/dist/ee/server/src/controllers/index.d.ts +0 -1
  65. package/dist/ee/server/src/controllers/index.d.ts.map +1 -1
  66. package/dist/ee/server/src/index.d.ts +0 -1
  67. package/dist/ee/server/src/index.d.ts.map +1 -1
  68. package/dist/server/ee/server/src/controllers/admin.js +0 -1
  69. package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
  70. package/dist/server/ee/server/src/controllers/admin.mjs +0 -1
  71. package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
  72. package/dist/server/server/src/controllers/admin.js +0 -2
  73. package/dist/server/server/src/controllers/admin.js.map +1 -1
  74. package/dist/server/server/src/controllers/admin.mjs +0 -2
  75. package/dist/server/server/src/controllers/admin.mjs.map +1 -1
  76. package/dist/server/server/src/controllers/authenticated-user.js +6 -0
  77. package/dist/server/server/src/controllers/authenticated-user.js.map +1 -1
  78. package/dist/server/server/src/controllers/authenticated-user.mjs +6 -0
  79. package/dist/server/server/src/controllers/authenticated-user.mjs.map +1 -1
  80. package/dist/server/src/controllers/admin.d.ts +0 -1
  81. package/dist/server/src/controllers/admin.d.ts.map +1 -1
  82. package/dist/server/src/controllers/authenticated-user.d.ts.map +1 -1
  83. package/dist/server/src/controllers/index.d.ts +0 -1
  84. package/dist/server/src/controllers/index.d.ts.map +1 -1
  85. package/dist/server/src/index.d.ts +0 -1
  86. package/dist/server/src/index.d.ts.map +1 -1
  87. package/dist/shared/contracts/admin.d.ts +0 -1
  88. package/dist/shared/contracts/admin.d.ts.map +1 -1
  89. package/package.json +12 -12
@@ -16,40 +16,47 @@ const BrandIconWrapper = styled(Flex)`
16
16
  const NavBrand = ()=>{
17
17
  const { formatMessage } = useIntl();
18
18
  const { logos: { menu } } = useConfiguration('LeftMenu');
19
- return /*#__PURE__*/ jsx(Box, {
19
+ return /*#__PURE__*/ jsx(Flex, {
20
+ alignItems: "center",
20
21
  padding: 3,
21
- children: /*#__PURE__*/ jsxs(BrandIconWrapper, {
22
- direction: "column",
23
- justifyContent: "center",
24
- width: "3.2rem",
25
- height: "3.2rem",
26
- children: [
27
- /*#__PURE__*/ jsx("img", {
28
- src: menu.custom?.url || menu.default,
29
- alt: formatMessage({
30
- id: 'app.components.LeftMenu.logo.alt',
31
- defaultMessage: 'Application logo'
32
- }),
33
- width: "100%",
34
- height: "100%"
35
- }),
36
- /*#__PURE__*/ jsxs(VisuallyHidden, {
37
- children: [
38
- /*#__PURE__*/ jsx("span", {
39
- children: formatMessage({
40
- id: 'app.components.LeftMenu.navbrand.title',
41
- defaultMessage: 'Strapi Dashboard'
42
- })
22
+ children: /*#__PURE__*/ jsx(Box, {
23
+ padding: {
24
+ initial: 1,
25
+ medium: 0
26
+ },
27
+ children: /*#__PURE__*/ jsxs(BrandIconWrapper, {
28
+ direction: "column",
29
+ justifyContent: "center",
30
+ width: "3.2rem",
31
+ height: "3.2rem",
32
+ children: [
33
+ /*#__PURE__*/ jsx("img", {
34
+ src: menu.custom?.url || menu.default,
35
+ alt: formatMessage({
36
+ id: 'app.components.LeftMenu.logo.alt',
37
+ defaultMessage: 'Application logo'
43
38
  }),
44
- /*#__PURE__*/ jsx("span", {
45
- children: formatMessage({
46
- id: 'app.components.LeftMenu.navbrand.workplace',
47
- defaultMessage: 'Workplace'
39
+ width: "100%",
40
+ height: "100%"
41
+ }),
42
+ /*#__PURE__*/ jsxs(VisuallyHidden, {
43
+ children: [
44
+ /*#__PURE__*/ jsx("span", {
45
+ children: formatMessage({
46
+ id: 'app.components.LeftMenu.navbrand.title',
47
+ defaultMessage: 'Strapi Dashboard'
48
+ })
49
+ }),
50
+ /*#__PURE__*/ jsx("span", {
51
+ children: formatMessage({
52
+ id: 'app.components.LeftMenu.navbrand.workplace',
53
+ defaultMessage: 'Workplace'
54
+ })
48
55
  })
49
- })
50
- ]
51
- })
52
- ]
56
+ ]
57
+ })
58
+ ]
59
+ })
53
60
  })
54
61
  });
55
62
  };
@@ -1 +1 @@
1
- {"version":3,"file":"NavBrand.mjs","sources":["../../../../../../admin/src/components/MainNav/NavBrand.tsx"],"sourcesContent":["import { Box, Flex, type FlexComponent, VisuallyHidden } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useConfiguration } from '../../features/Configuration';\n\nconst BrandIconWrapper = styled<FlexComponent>(Flex)`\n svg,\n img {\n border-radius: ${({ theme }) => theme.borderRadius};\n object-fit: contain;\n height: 2.4rem;\n width: 2.4rem;\n }\n`;\n\nexport const NavBrand = () => {\n const { formatMessage } = useIntl();\n const {\n logos: { menu },\n } = useConfiguration('LeftMenu');\n return (\n <Box padding={3}>\n <BrandIconWrapper direction=\"column\" justifyContent=\"center\" width=\"3.2rem\" height=\"3.2rem\">\n <img\n src={menu.custom?.url || menu.default}\n alt={formatMessage({\n id: 'app.components.LeftMenu.logo.alt',\n defaultMessage: 'Application logo',\n })}\n width=\"100%\"\n height=\"100%\"\n />\n <VisuallyHidden>\n <span>\n {formatMessage({\n id: 'app.components.LeftMenu.navbrand.title',\n defaultMessage: 'Strapi Dashboard',\n })}\n </span>\n <span>\n {formatMessage({\n id: 'app.components.LeftMenu.navbrand.workplace',\n defaultMessage: 'Workplace',\n })}\n </span>\n </VisuallyHidden>\n </BrandIconWrapper>\n </Box>\n );\n};\n"],"names":["BrandIconWrapper","styled","Flex","theme","borderRadius","NavBrand","formatMessage","useIntl","logos","menu","useConfiguration","_jsx","Box","padding","_jsxs","direction","justifyContent","width","height","img","src","custom","url","default","alt","id","defaultMessage","VisuallyHidden","span"],"mappings":";;;;;;AAMA,MAAMA,gBAAAA,GAAmBC,MAAsBC,CAAAA,IAAAA,CAAK;;;AAGjC,mBAAA,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAAA,CAAMC,YAAY,CAAC;;;;;AAKvD,CAAC;MAEYC,QAAW,GAAA,IAAA;IACtB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,EACJC,KAAO,EAAA,EAAEC,IAAI,EAAE,EAChB,GAAGC,gBAAiB,CAAA,UAAA,CAAA;AACrB,IAAA,qBACEC,GAACC,CAAAA,GAAAA,EAAAA;QAAIC,OAAS,EAAA,CAAA;AACZ,QAAA,QAAA,gBAAAC,IAACd,CAAAA,gBAAAA,EAAAA;YAAiBe,SAAU,EAAA,QAAA;YAASC,cAAe,EAAA,QAAA;YAASC,KAAM,EAAA,QAAA;YAASC,MAAO,EAAA,QAAA;;8BACjFP,GAACQ,CAAAA,KAAAA,EAAAA;AACCC,oBAAAA,GAAAA,EAAKX,IAAKY,CAAAA,MAAM,EAAEC,GAAAA,IAAOb,KAAKc,OAAO;AACrCC,oBAAAA,GAAAA,EAAKlB,aAAc,CAAA;wBACjBmB,EAAI,EAAA,kCAAA;wBACJC,cAAgB,EAAA;AAClB,qBAAA,CAAA;oBACAT,KAAM,EAAA,MAAA;oBACNC,MAAO,EAAA;;8BAETJ,IAACa,CAAAA,cAAAA,EAAAA;;sCACChB,GAACiB,CAAAA,MAAAA,EAAAA;sCACEtB,aAAc,CAAA;gCACbmB,EAAI,EAAA,wCAAA;gCACJC,cAAgB,EAAA;AAClB,6BAAA;;sCAEFf,GAACiB,CAAAA,MAAAA,EAAAA;sCACEtB,aAAc,CAAA;gCACbmB,EAAI,EAAA,4CAAA;gCACJC,cAAgB,EAAA;AAClB,6BAAA;;;;;;;AAMZ;;;;"}
1
+ {"version":3,"file":"NavBrand.mjs","sources":["../../../../../../admin/src/components/MainNav/NavBrand.tsx"],"sourcesContent":["import { Box, Flex, type FlexComponent, VisuallyHidden } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useConfiguration } from '../../features/Configuration';\n\nconst BrandIconWrapper = styled<FlexComponent>(Flex)`\n svg,\n img {\n border-radius: ${({ theme }) => theme.borderRadius};\n object-fit: contain;\n height: 2.4rem;\n width: 2.4rem;\n }\n`;\n\nexport const NavBrand = () => {\n const { formatMessage } = useIntl();\n const {\n logos: { menu },\n } = useConfiguration('LeftMenu');\n return (\n <Flex alignItems=\"center\" padding={3}>\n <Box padding={{ initial: 1, medium: 0 }}>\n <BrandIconWrapper direction=\"column\" justifyContent=\"center\" width=\"3.2rem\" height=\"3.2rem\">\n <img\n src={menu.custom?.url || menu.default}\n alt={formatMessage({\n id: 'app.components.LeftMenu.logo.alt',\n defaultMessage: 'Application logo',\n })}\n width=\"100%\"\n height=\"100%\"\n />\n <VisuallyHidden>\n <span>\n {formatMessage({\n id: 'app.components.LeftMenu.navbrand.title',\n defaultMessage: 'Strapi Dashboard',\n })}\n </span>\n <span>\n {formatMessage({\n id: 'app.components.LeftMenu.navbrand.workplace',\n defaultMessage: 'Workplace',\n })}\n </span>\n </VisuallyHidden>\n </BrandIconWrapper>\n </Box>\n </Flex>\n );\n};\n"],"names":["BrandIconWrapper","styled","Flex","theme","borderRadius","NavBrand","formatMessage","useIntl","logos","menu","useConfiguration","_jsx","alignItems","padding","Box","initial","medium","_jsxs","direction","justifyContent","width","height","img","src","custom","url","default","alt","id","defaultMessage","VisuallyHidden","span"],"mappings":";;;;;;AAMA,MAAMA,gBAAAA,GAAmBC,MAAsBC,CAAAA,IAAAA,CAAK;;;AAGjC,mBAAA,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAAA,CAAMC,YAAY,CAAC;;;;;AAKvD,CAAC;MAEYC,QAAW,GAAA,IAAA;IACtB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,EACJC,KAAO,EAAA,EAAEC,IAAI,EAAE,EAChB,GAAGC,gBAAiB,CAAA,UAAA,CAAA;AACrB,IAAA,qBACEC,GAACT,CAAAA,IAAAA,EAAAA;QAAKU,UAAW,EAAA,QAAA;QAASC,OAAS,EAAA,CAAA;AACjC,QAAA,QAAA,gBAAAF,GAACG,CAAAA,GAAAA,EAAAA;YAAID,OAAS,EAAA;gBAAEE,OAAS,EAAA,CAAA;gBAAGC,MAAQ,EAAA;AAAE,aAAA;AACpC,YAAA,QAAA,gBAAAC,IAACjB,CAAAA,gBAAAA,EAAAA;gBAAiBkB,SAAU,EAAA,QAAA;gBAASC,cAAe,EAAA,QAAA;gBAASC,KAAM,EAAA,QAAA;gBAASC,MAAO,EAAA,QAAA;;kCACjFV,GAACW,CAAAA,KAAAA,EAAAA;AACCC,wBAAAA,GAAAA,EAAKd,IAAKe,CAAAA,MAAM,EAAEC,GAAAA,IAAOhB,KAAKiB,OAAO;AACrCC,wBAAAA,GAAAA,EAAKrB,aAAc,CAAA;4BACjBsB,EAAI,EAAA,kCAAA;4BACJC,cAAgB,EAAA;AAClB,yBAAA,CAAA;wBACAT,KAAM,EAAA,MAAA;wBACNC,MAAO,EAAA;;kCAETJ,IAACa,CAAAA,cAAAA,EAAAA;;0CACCnB,GAACoB,CAAAA,MAAAA,EAAAA;0CACEzB,aAAc,CAAA;oCACbsB,EAAI,EAAA,wCAAA;oCACJC,cAAgB,EAAA;AAClB,iCAAA;;0CAEFlB,GAACoB,CAAAA,MAAAA,EAAAA;0CACEzB,aAAc,CAAA;oCACbsB,EAAI,EAAA,4CAAA;oCACJC,cAAgB,EAAA;AAClB,iCAAA;;;;;;;;AAOd;;;;"}
@@ -48,8 +48,11 @@ const NavBurgerMenu = ({ isShown, handleClickOnLink, onClose, listLinks })=>{
48
48
  id: "burger-menu",
49
49
  children: /*#__PURE__*/ jsxRuntime.jsx(Surface, {
50
50
  children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.ScrollArea, {
51
- children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Box, {
51
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
52
52
  tag: "ul",
53
+ direction: "column",
54
+ alignItems: "stretch",
55
+ width: "100%",
53
56
  paddingLeft: {
54
57
  initial: 4,
55
58
  medium: 6
@@ -59,20 +62,28 @@ const NavBurgerMenu = ({ isShown, handleClickOnLink, onClose, listLinks })=>{
59
62
  medium: 6
60
63
  },
61
64
  paddingTop: {
62
- initial: 1,
65
+ initial: 4,
63
66
  medium: 3
64
67
  },
65
68
  paddingBottom: {
66
69
  initial: 4,
67
70
  medium: 6
68
71
  },
72
+ gap: 3,
69
73
  children: [
70
74
  /*#__PURE__*/ jsxRuntime.jsx(MainNavLinks.MainNavBurgerMenuLinks, {
71
75
  listLinks: listLinks,
72
76
  handleClickOnLink: handleClickOnLink
73
77
  }),
74
78
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
75
- paddingTop: 4,
79
+ tag: "li",
80
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Divider, {})
81
+ }),
82
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
83
+ paddingLeft: 2,
84
+ paddingRight: 2,
85
+ paddingTop: 1,
86
+ paddingBottom: 1,
76
87
  tag: "li",
77
88
  children: /*#__PURE__*/ jsxRuntime.jsx(NavUser.NavUser, {
78
89
  showDisplayName: true
@@ -1 +1 @@
1
- {"version":3,"file":"NavBurgerMenu.js","sources":["../../../../../../admin/src/components/MainNav/NavBurgerMenu.tsx"],"sourcesContent":["import { Box, FocusTrap, Portal, ScrollArea } from '@strapi/design-system';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { styled } from 'styled-components';\n\nimport { HEIGHT_TOP_NAVIGATION } from '../../constants/theme';\nimport { MenuItem } from '../../core/apis/router';\n\nimport { MainNavBurgerMenuLinks } from './MainNavLinks';\nimport { NavUser } from './NavUser';\n\ninterface NavBurgerMenuProps {\n isShown: boolean;\n listLinks: MenuItem[];\n handleClickOnLink: (value: string) => void;\n mobile?: boolean;\n onClose: () => void;\n}\n\nconst MotionLayer = styled(motion.div)`\n position: fixed;\n top: calc(${HEIGHT_TOP_NAVIGATION} + 1px);\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 3;\n\n ${({ theme }) => theme.breakpoints.large} {\n display: none;\n }\n`;\n\nconst Surface = styled(Box)`\n height: 100%;\n background-color: ${({ theme }) => theme.colors.neutral0};\n`;\n\nexport const NavBurgerMenu = ({\n isShown,\n handleClickOnLink,\n onClose,\n listLinks,\n}: NavBurgerMenuProps) => {\n return (\n <Portal>\n <AnimatePresence>\n {isShown && (\n <FocusTrap onEscape={onClose}>\n <MotionLayer\n key=\"burger\"\n role=\"dialog\"\n aria-modal=\"true\"\n initial={{ y: '-100%' }}\n animate={{ y: 0 }}\n exit={{ y: '-100%' }}\n transition={{ duration: 0.2, ease: 'easeInOut' }}\n id=\"burger-menu\"\n >\n <Surface>\n <ScrollArea>\n <Box\n tag=\"ul\"\n paddingLeft={{ initial: 4, medium: 6 }}\n paddingRight={{ initial: 4, medium: 6 }}\n paddingTop={{ initial: 1, medium: 3 }}\n paddingBottom={{ initial: 4, medium: 6 }}\n >\n <MainNavBurgerMenuLinks\n listLinks={listLinks}\n handleClickOnLink={handleClickOnLink}\n />\n <Box paddingTop={4} tag=\"li\">\n <NavUser showDisplayName />\n </Box>\n </Box>\n </ScrollArea>\n </Surface>\n </MotionLayer>\n </FocusTrap>\n )}\n </AnimatePresence>\n </Portal>\n );\n};\n"],"names":["MotionLayer","styled","motion","div","HEIGHT_TOP_NAVIGATION","theme","breakpoints","large","Surface","Box","colors","neutral0","NavBurgerMenu","isShown","handleClickOnLink","onClose","listLinks","_jsx","Portal","AnimatePresence","FocusTrap","onEscape","role","aria-modal","initial","y","animate","exit","transition","duration","ease","id","ScrollArea","_jsxs","tag","paddingLeft","medium","paddingRight","paddingTop","paddingBottom","MainNavBurgerMenuLinks","NavUser","showDisplayName"],"mappings":";;;;;;;;;;AAkBA,MAAMA,WAAcC,GAAAA,aAAAA,CAAOC,YAAOC,CAAAA,GAAG,CAAC;;AAE1B,YAAA,EAAEC,2BAAsB,CAAA;;;;;;EAMlC,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAMC,CAAAA,WAAW,CAACC,KAAK,CAAC;;;AAG3C,CAAC;AAED,MAAMC,OAAAA,GAAUP,aAAOQ,CAAAA,gBAAAA,CAAI;;oBAEP,EAAE,CAAC,EAAEJ,KAAK,EAAE,GAAKA,KAAMK,CAAAA,MAAM,CAACC,QAAQ,CAAC;AAC3D,CAAC;AAEM,MAAMC,aAAgB,GAAA,CAAC,EAC5BC,OAAO,EACPC,iBAAiB,EACjBC,OAAO,EACPC,SAAS,EACU,GAAA;AACnB,IAAA,qBACEC,cAACC,CAAAA,mBAAAA,EAAAA;AACC,QAAA,QAAA,gBAAAD,cAACE,CAAAA,qBAAAA,EAAAA;AACEN,YAAAA,QAAAA,EAAAA,OAAAA,kBACCI,cAACG,CAAAA,sBAAAA,EAAAA;gBAAUC,QAAUN,EAAAA,OAAAA;AACnB,gBAAA,QAAA,gBAAAE,cAACjB,CAAAA,WAAAA,EAAAA;oBAECsB,IAAK,EAAA,QAAA;oBACLC,YAAW,EAAA,MAAA;oBACXC,OAAS,EAAA;wBAAEC,CAAG,EAAA;AAAQ,qBAAA;oBACtBC,OAAS,EAAA;wBAAED,CAAG,EAAA;AAAE,qBAAA;oBAChBE,IAAM,EAAA;wBAAEF,CAAG,EAAA;AAAQ,qBAAA;oBACnBG,UAAY,EAAA;wBAAEC,QAAU,EAAA,GAAA;wBAAKC,IAAM,EAAA;AAAY,qBAAA;oBAC/CC,EAAG,EAAA,aAAA;AAEH,oBAAA,QAAA,gBAAAd,cAACT,CAAAA,OAAAA,EAAAA;AACC,wBAAA,QAAA,gBAAAS,cAACe,CAAAA,uBAAAA,EAAAA;AACC,4BAAA,QAAA,gBAAAC,eAACxB,CAAAA,gBAAAA,EAAAA;gCACCyB,GAAI,EAAA,IAAA;gCACJC,WAAa,EAAA;oCAAEX,OAAS,EAAA,CAAA;oCAAGY,MAAQ,EAAA;AAAE,iCAAA;gCACrCC,YAAc,EAAA;oCAAEb,OAAS,EAAA,CAAA;oCAAGY,MAAQ,EAAA;AAAE,iCAAA;gCACtCE,UAAY,EAAA;oCAAEd,OAAS,EAAA,CAAA;oCAAGY,MAAQ,EAAA;AAAE,iCAAA;gCACpCG,aAAe,EAAA;oCAAEf,OAAS,EAAA,CAAA;oCAAGY,MAAQ,EAAA;AAAE,iCAAA;;kDAEvCnB,cAACuB,CAAAA,mCAAAA,EAAAA;wCACCxB,SAAWA,EAAAA,SAAAA;wCACXF,iBAAmBA,EAAAA;;kDAErBG,cAACR,CAAAA,gBAAAA,EAAAA;wCAAI6B,UAAY,EAAA,CAAA;wCAAGJ,GAAI,EAAA,IAAA;AACtB,wCAAA,QAAA,gBAAAjB,cAACwB,CAAAA,eAAAA,EAAAA;4CAAQC,eAAe,EAAA;;;;;;;AAvB5B,iBAAA,EAAA,QAAA;;;;AAkClB;;;;"}
1
+ {"version":3,"file":"NavBurgerMenu.js","sources":["../../../../../../admin/src/components/MainNav/NavBurgerMenu.tsx"],"sourcesContent":["import { Box, FocusTrap, Portal, ScrollArea, Flex, Divider } from '@strapi/design-system';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { styled } from 'styled-components';\n\nimport { HEIGHT_TOP_NAVIGATION } from '../../constants/theme';\nimport { MenuItem } from '../../core/apis/router';\n\nimport { MainNavBurgerMenuLinks } from './MainNavLinks';\nimport { NavUser } from './NavUser';\n\ninterface NavBurgerMenuProps {\n isShown: boolean;\n listLinks: MenuItem[];\n handleClickOnLink: (value: string) => void;\n mobile?: boolean;\n onClose: () => void;\n}\n\nconst MotionLayer = styled(motion.div)`\n position: fixed;\n top: calc(${HEIGHT_TOP_NAVIGATION} + 1px);\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 3;\n\n ${({ theme }) => theme.breakpoints.large} {\n display: none;\n }\n`;\n\nconst Surface = styled(Box)`\n height: 100%;\n background-color: ${({ theme }) => theme.colors.neutral0};\n`;\n\nexport const NavBurgerMenu = ({\n isShown,\n handleClickOnLink,\n onClose,\n listLinks,\n}: NavBurgerMenuProps) => {\n return (\n <Portal>\n <AnimatePresence>\n {isShown && (\n <FocusTrap onEscape={onClose}>\n <MotionLayer\n key=\"burger\"\n role=\"dialog\"\n aria-modal=\"true\"\n initial={{ y: '-100%' }}\n animate={{ y: 0 }}\n exit={{ y: '-100%' }}\n transition={{ duration: 0.2, ease: 'easeInOut' }}\n id=\"burger-menu\"\n >\n <Surface>\n <ScrollArea>\n <Flex\n tag=\"ul\"\n direction=\"column\"\n alignItems=\"stretch\"\n width=\"100%\"\n paddingLeft={{ initial: 4, medium: 6 }}\n paddingRight={{ initial: 4, medium: 6 }}\n paddingTop={{ initial: 4, medium: 3 }}\n paddingBottom={{ initial: 4, medium: 6 }}\n gap={3}\n >\n <MainNavBurgerMenuLinks\n listLinks={listLinks}\n handleClickOnLink={handleClickOnLink}\n />\n <Box tag=\"li\">\n <Divider />\n </Box>\n <Box paddingLeft={2} paddingRight={2} paddingTop={1} paddingBottom={1} tag=\"li\">\n <NavUser showDisplayName />\n </Box>\n </Flex>\n </ScrollArea>\n </Surface>\n </MotionLayer>\n </FocusTrap>\n )}\n </AnimatePresence>\n </Portal>\n );\n};\n"],"names":["MotionLayer","styled","motion","div","HEIGHT_TOP_NAVIGATION","theme","breakpoints","large","Surface","Box","colors","neutral0","NavBurgerMenu","isShown","handleClickOnLink","onClose","listLinks","_jsx","Portal","AnimatePresence","FocusTrap","onEscape","role","aria-modal","initial","y","animate","exit","transition","duration","ease","id","ScrollArea","_jsxs","Flex","tag","direction","alignItems","width","paddingLeft","medium","paddingRight","paddingTop","paddingBottom","gap","MainNavBurgerMenuLinks","Divider","NavUser","showDisplayName"],"mappings":";;;;;;;;;;AAkBA,MAAMA,WAAcC,GAAAA,aAAAA,CAAOC,YAAOC,CAAAA,GAAG,CAAC;;AAE1B,YAAA,EAAEC,2BAAsB,CAAA;;;;;;EAMlC,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAMC,CAAAA,WAAW,CAACC,KAAK,CAAC;;;AAG3C,CAAC;AAED,MAAMC,OAAAA,GAAUP,aAAOQ,CAAAA,gBAAAA,CAAI;;oBAEP,EAAE,CAAC,EAAEJ,KAAK,EAAE,GAAKA,KAAMK,CAAAA,MAAM,CAACC,QAAQ,CAAC;AAC3D,CAAC;AAEM,MAAMC,aAAgB,GAAA,CAAC,EAC5BC,OAAO,EACPC,iBAAiB,EACjBC,OAAO,EACPC,SAAS,EACU,GAAA;AACnB,IAAA,qBACEC,cAACC,CAAAA,mBAAAA,EAAAA;AACC,QAAA,QAAA,gBAAAD,cAACE,CAAAA,qBAAAA,EAAAA;AACEN,YAAAA,QAAAA,EAAAA,OAAAA,kBACCI,cAACG,CAAAA,sBAAAA,EAAAA;gBAAUC,QAAUN,EAAAA,OAAAA;AACnB,gBAAA,QAAA,gBAAAE,cAACjB,CAAAA,WAAAA,EAAAA;oBAECsB,IAAK,EAAA,QAAA;oBACLC,YAAW,EAAA,MAAA;oBACXC,OAAS,EAAA;wBAAEC,CAAG,EAAA;AAAQ,qBAAA;oBACtBC,OAAS,EAAA;wBAAED,CAAG,EAAA;AAAE,qBAAA;oBAChBE,IAAM,EAAA;wBAAEF,CAAG,EAAA;AAAQ,qBAAA;oBACnBG,UAAY,EAAA;wBAAEC,QAAU,EAAA,GAAA;wBAAKC,IAAM,EAAA;AAAY,qBAAA;oBAC/CC,EAAG,EAAA,aAAA;AAEH,oBAAA,QAAA,gBAAAd,cAACT,CAAAA,OAAAA,EAAAA;AACC,wBAAA,QAAA,gBAAAS,cAACe,CAAAA,uBAAAA,EAAAA;AACC,4BAAA,QAAA,gBAAAC,eAACC,CAAAA,iBAAAA,EAAAA;gCACCC,GAAI,EAAA,IAAA;gCACJC,SAAU,EAAA,QAAA;gCACVC,UAAW,EAAA,SAAA;gCACXC,KAAM,EAAA,MAAA;gCACNC,WAAa,EAAA;oCAAEf,OAAS,EAAA,CAAA;oCAAGgB,MAAQ,EAAA;AAAE,iCAAA;gCACrCC,YAAc,EAAA;oCAAEjB,OAAS,EAAA,CAAA;oCAAGgB,MAAQ,EAAA;AAAE,iCAAA;gCACtCE,UAAY,EAAA;oCAAElB,OAAS,EAAA,CAAA;oCAAGgB,MAAQ,EAAA;AAAE,iCAAA;gCACpCG,aAAe,EAAA;oCAAEnB,OAAS,EAAA,CAAA;oCAAGgB,MAAQ,EAAA;AAAE,iCAAA;gCACvCI,GAAK,EAAA,CAAA;;kDAEL3B,cAAC4B,CAAAA,mCAAAA,EAAAA;wCACC7B,SAAWA,EAAAA,SAAAA;wCACXF,iBAAmBA,EAAAA;;kDAErBG,cAACR,CAAAA,gBAAAA,EAAAA;wCAAI0B,GAAI,EAAA,IAAA;AACP,wCAAA,QAAA,gBAAAlB,cAAC6B,CAAAA,oBAAAA,EAAAA,EAAAA;;kDAEH7B,cAACR,CAAAA,gBAAAA,EAAAA;wCAAI8B,WAAa,EAAA,CAAA;wCAAGE,YAAc,EAAA,CAAA;wCAAGC,UAAY,EAAA,CAAA;wCAAGC,aAAe,EAAA,CAAA;wCAAGR,GAAI,EAAA,IAAA;AACzE,wCAAA,QAAA,gBAAAlB,cAAC8B,CAAAA,eAAAA,EAAAA;4CAAQC,eAAe,EAAA;;;;;;;AA9B5B,iBAAA,EAAA,QAAA;;;;AAyClB;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { Box, Portal, FocusTrap, ScrollArea } from '@strapi/design-system';
2
+ import { Box, Portal, FocusTrap, ScrollArea, Flex, Divider } from '@strapi/design-system';
3
3
  import { motion, AnimatePresence } from 'motion/react';
4
4
  import { styled } from 'styled-components';
5
5
  import { HEIGHT_TOP_NAVIGATION } from '../../constants/theme.mjs';
@@ -46,8 +46,11 @@ const NavBurgerMenu = ({ isShown, handleClickOnLink, onClose, listLinks })=>{
46
46
  id: "burger-menu",
47
47
  children: /*#__PURE__*/ jsx(Surface, {
48
48
  children: /*#__PURE__*/ jsx(ScrollArea, {
49
- children: /*#__PURE__*/ jsxs(Box, {
49
+ children: /*#__PURE__*/ jsxs(Flex, {
50
50
  tag: "ul",
51
+ direction: "column",
52
+ alignItems: "stretch",
53
+ width: "100%",
51
54
  paddingLeft: {
52
55
  initial: 4,
53
56
  medium: 6
@@ -57,20 +60,28 @@ const NavBurgerMenu = ({ isShown, handleClickOnLink, onClose, listLinks })=>{
57
60
  medium: 6
58
61
  },
59
62
  paddingTop: {
60
- initial: 1,
63
+ initial: 4,
61
64
  medium: 3
62
65
  },
63
66
  paddingBottom: {
64
67
  initial: 4,
65
68
  medium: 6
66
69
  },
70
+ gap: 3,
67
71
  children: [
68
72
  /*#__PURE__*/ jsx(MainNavBurgerMenuLinks, {
69
73
  listLinks: listLinks,
70
74
  handleClickOnLink: handleClickOnLink
71
75
  }),
72
76
  /*#__PURE__*/ jsx(Box, {
73
- paddingTop: 4,
77
+ tag: "li",
78
+ children: /*#__PURE__*/ jsx(Divider, {})
79
+ }),
80
+ /*#__PURE__*/ jsx(Box, {
81
+ paddingLeft: 2,
82
+ paddingRight: 2,
83
+ paddingTop: 1,
84
+ paddingBottom: 1,
74
85
  tag: "li",
75
86
  children: /*#__PURE__*/ jsx(NavUser, {
76
87
  showDisplayName: true
@@ -1 +1 @@
1
- {"version":3,"file":"NavBurgerMenu.mjs","sources":["../../../../../../admin/src/components/MainNav/NavBurgerMenu.tsx"],"sourcesContent":["import { Box, FocusTrap, Portal, ScrollArea } from '@strapi/design-system';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { styled } from 'styled-components';\n\nimport { HEIGHT_TOP_NAVIGATION } from '../../constants/theme';\nimport { MenuItem } from '../../core/apis/router';\n\nimport { MainNavBurgerMenuLinks } from './MainNavLinks';\nimport { NavUser } from './NavUser';\n\ninterface NavBurgerMenuProps {\n isShown: boolean;\n listLinks: MenuItem[];\n handleClickOnLink: (value: string) => void;\n mobile?: boolean;\n onClose: () => void;\n}\n\nconst MotionLayer = styled(motion.div)`\n position: fixed;\n top: calc(${HEIGHT_TOP_NAVIGATION} + 1px);\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 3;\n\n ${({ theme }) => theme.breakpoints.large} {\n display: none;\n }\n`;\n\nconst Surface = styled(Box)`\n height: 100%;\n background-color: ${({ theme }) => theme.colors.neutral0};\n`;\n\nexport const NavBurgerMenu = ({\n isShown,\n handleClickOnLink,\n onClose,\n listLinks,\n}: NavBurgerMenuProps) => {\n return (\n <Portal>\n <AnimatePresence>\n {isShown && (\n <FocusTrap onEscape={onClose}>\n <MotionLayer\n key=\"burger\"\n role=\"dialog\"\n aria-modal=\"true\"\n initial={{ y: '-100%' }}\n animate={{ y: 0 }}\n exit={{ y: '-100%' }}\n transition={{ duration: 0.2, ease: 'easeInOut' }}\n id=\"burger-menu\"\n >\n <Surface>\n <ScrollArea>\n <Box\n tag=\"ul\"\n paddingLeft={{ initial: 4, medium: 6 }}\n paddingRight={{ initial: 4, medium: 6 }}\n paddingTop={{ initial: 1, medium: 3 }}\n paddingBottom={{ initial: 4, medium: 6 }}\n >\n <MainNavBurgerMenuLinks\n listLinks={listLinks}\n handleClickOnLink={handleClickOnLink}\n />\n <Box paddingTop={4} tag=\"li\">\n <NavUser showDisplayName />\n </Box>\n </Box>\n </ScrollArea>\n </Surface>\n </MotionLayer>\n </FocusTrap>\n )}\n </AnimatePresence>\n </Portal>\n );\n};\n"],"names":["MotionLayer","styled","motion","div","HEIGHT_TOP_NAVIGATION","theme","breakpoints","large","Surface","Box","colors","neutral0","NavBurgerMenu","isShown","handleClickOnLink","onClose","listLinks","_jsx","Portal","AnimatePresence","FocusTrap","onEscape","role","aria-modal","initial","y","animate","exit","transition","duration","ease","id","ScrollArea","_jsxs","tag","paddingLeft","medium","paddingRight","paddingTop","paddingBottom","MainNavBurgerMenuLinks","NavUser","showDisplayName"],"mappings":";;;;;;;;AAkBA,MAAMA,WAAcC,GAAAA,MAAAA,CAAOC,MAAOC,CAAAA,GAAG,CAAC;;AAE1B,YAAA,EAAEC,qBAAsB,CAAA;;;;;;EAMlC,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAMC,CAAAA,WAAW,CAACC,KAAK,CAAC;;;AAG3C,CAAC;AAED,MAAMC,OAAAA,GAAUP,MAAOQ,CAAAA,GAAAA,CAAI;;oBAEP,EAAE,CAAC,EAAEJ,KAAK,EAAE,GAAKA,KAAMK,CAAAA,MAAM,CAACC,QAAQ,CAAC;AAC3D,CAAC;AAEM,MAAMC,aAAgB,GAAA,CAAC,EAC5BC,OAAO,EACPC,iBAAiB,EACjBC,OAAO,EACPC,SAAS,EACU,GAAA;AACnB,IAAA,qBACEC,GAACC,CAAAA,MAAAA,EAAAA;AACC,QAAA,QAAA,gBAAAD,GAACE,CAAAA,eAAAA,EAAAA;AACEN,YAAAA,QAAAA,EAAAA,OAAAA,kBACCI,GAACG,CAAAA,SAAAA,EAAAA;gBAAUC,QAAUN,EAAAA,OAAAA;AACnB,gBAAA,QAAA,gBAAAE,GAACjB,CAAAA,WAAAA,EAAAA;oBAECsB,IAAK,EAAA,QAAA;oBACLC,YAAW,EAAA,MAAA;oBACXC,OAAS,EAAA;wBAAEC,CAAG,EAAA;AAAQ,qBAAA;oBACtBC,OAAS,EAAA;wBAAED,CAAG,EAAA;AAAE,qBAAA;oBAChBE,IAAM,EAAA;wBAAEF,CAAG,EAAA;AAAQ,qBAAA;oBACnBG,UAAY,EAAA;wBAAEC,QAAU,EAAA,GAAA;wBAAKC,IAAM,EAAA;AAAY,qBAAA;oBAC/CC,EAAG,EAAA,aAAA;AAEH,oBAAA,QAAA,gBAAAd,GAACT,CAAAA,OAAAA,EAAAA;AACC,wBAAA,QAAA,gBAAAS,GAACe,CAAAA,UAAAA,EAAAA;AACC,4BAAA,QAAA,gBAAAC,IAACxB,CAAAA,GAAAA,EAAAA;gCACCyB,GAAI,EAAA,IAAA;gCACJC,WAAa,EAAA;oCAAEX,OAAS,EAAA,CAAA;oCAAGY,MAAQ,EAAA;AAAE,iCAAA;gCACrCC,YAAc,EAAA;oCAAEb,OAAS,EAAA,CAAA;oCAAGY,MAAQ,EAAA;AAAE,iCAAA;gCACtCE,UAAY,EAAA;oCAAEd,OAAS,EAAA,CAAA;oCAAGY,MAAQ,EAAA;AAAE,iCAAA;gCACpCG,aAAe,EAAA;oCAAEf,OAAS,EAAA,CAAA;oCAAGY,MAAQ,EAAA;AAAE,iCAAA;;kDAEvCnB,GAACuB,CAAAA,sBAAAA,EAAAA;wCACCxB,SAAWA,EAAAA,SAAAA;wCACXF,iBAAmBA,EAAAA;;kDAErBG,GAACR,CAAAA,GAAAA,EAAAA;wCAAI6B,UAAY,EAAA,CAAA;wCAAGJ,GAAI,EAAA,IAAA;AACtB,wCAAA,QAAA,gBAAAjB,GAACwB,CAAAA,OAAAA,EAAAA;4CAAQC,eAAe,EAAA;;;;;;;AAvB5B,iBAAA,EAAA,QAAA;;;;AAkClB;;;;"}
1
+ {"version":3,"file":"NavBurgerMenu.mjs","sources":["../../../../../../admin/src/components/MainNav/NavBurgerMenu.tsx"],"sourcesContent":["import { Box, FocusTrap, Portal, ScrollArea, Flex, Divider } from '@strapi/design-system';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { styled } from 'styled-components';\n\nimport { HEIGHT_TOP_NAVIGATION } from '../../constants/theme';\nimport { MenuItem } from '../../core/apis/router';\n\nimport { MainNavBurgerMenuLinks } from './MainNavLinks';\nimport { NavUser } from './NavUser';\n\ninterface NavBurgerMenuProps {\n isShown: boolean;\n listLinks: MenuItem[];\n handleClickOnLink: (value: string) => void;\n mobile?: boolean;\n onClose: () => void;\n}\n\nconst MotionLayer = styled(motion.div)`\n position: fixed;\n top: calc(${HEIGHT_TOP_NAVIGATION} + 1px);\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 3;\n\n ${({ theme }) => theme.breakpoints.large} {\n display: none;\n }\n`;\n\nconst Surface = styled(Box)`\n height: 100%;\n background-color: ${({ theme }) => theme.colors.neutral0};\n`;\n\nexport const NavBurgerMenu = ({\n isShown,\n handleClickOnLink,\n onClose,\n listLinks,\n}: NavBurgerMenuProps) => {\n return (\n <Portal>\n <AnimatePresence>\n {isShown && (\n <FocusTrap onEscape={onClose}>\n <MotionLayer\n key=\"burger\"\n role=\"dialog\"\n aria-modal=\"true\"\n initial={{ y: '-100%' }}\n animate={{ y: 0 }}\n exit={{ y: '-100%' }}\n transition={{ duration: 0.2, ease: 'easeInOut' }}\n id=\"burger-menu\"\n >\n <Surface>\n <ScrollArea>\n <Flex\n tag=\"ul\"\n direction=\"column\"\n alignItems=\"stretch\"\n width=\"100%\"\n paddingLeft={{ initial: 4, medium: 6 }}\n paddingRight={{ initial: 4, medium: 6 }}\n paddingTop={{ initial: 4, medium: 3 }}\n paddingBottom={{ initial: 4, medium: 6 }}\n gap={3}\n >\n <MainNavBurgerMenuLinks\n listLinks={listLinks}\n handleClickOnLink={handleClickOnLink}\n />\n <Box tag=\"li\">\n <Divider />\n </Box>\n <Box paddingLeft={2} paddingRight={2} paddingTop={1} paddingBottom={1} tag=\"li\">\n <NavUser showDisplayName />\n </Box>\n </Flex>\n </ScrollArea>\n </Surface>\n </MotionLayer>\n </FocusTrap>\n )}\n </AnimatePresence>\n </Portal>\n );\n};\n"],"names":["MotionLayer","styled","motion","div","HEIGHT_TOP_NAVIGATION","theme","breakpoints","large","Surface","Box","colors","neutral0","NavBurgerMenu","isShown","handleClickOnLink","onClose","listLinks","_jsx","Portal","AnimatePresence","FocusTrap","onEscape","role","aria-modal","initial","y","animate","exit","transition","duration","ease","id","ScrollArea","_jsxs","Flex","tag","direction","alignItems","width","paddingLeft","medium","paddingRight","paddingTop","paddingBottom","gap","MainNavBurgerMenuLinks","Divider","NavUser","showDisplayName"],"mappings":";;;;;;;;AAkBA,MAAMA,WAAcC,GAAAA,MAAAA,CAAOC,MAAOC,CAAAA,GAAG,CAAC;;AAE1B,YAAA,EAAEC,qBAAsB,CAAA;;;;;;EAMlC,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAMC,CAAAA,WAAW,CAACC,KAAK,CAAC;;;AAG3C,CAAC;AAED,MAAMC,OAAAA,GAAUP,MAAOQ,CAAAA,GAAAA,CAAI;;oBAEP,EAAE,CAAC,EAAEJ,KAAK,EAAE,GAAKA,KAAMK,CAAAA,MAAM,CAACC,QAAQ,CAAC;AAC3D,CAAC;AAEM,MAAMC,aAAgB,GAAA,CAAC,EAC5BC,OAAO,EACPC,iBAAiB,EACjBC,OAAO,EACPC,SAAS,EACU,GAAA;AACnB,IAAA,qBACEC,GAACC,CAAAA,MAAAA,EAAAA;AACC,QAAA,QAAA,gBAAAD,GAACE,CAAAA,eAAAA,EAAAA;AACEN,YAAAA,QAAAA,EAAAA,OAAAA,kBACCI,GAACG,CAAAA,SAAAA,EAAAA;gBAAUC,QAAUN,EAAAA,OAAAA;AACnB,gBAAA,QAAA,gBAAAE,GAACjB,CAAAA,WAAAA,EAAAA;oBAECsB,IAAK,EAAA,QAAA;oBACLC,YAAW,EAAA,MAAA;oBACXC,OAAS,EAAA;wBAAEC,CAAG,EAAA;AAAQ,qBAAA;oBACtBC,OAAS,EAAA;wBAAED,CAAG,EAAA;AAAE,qBAAA;oBAChBE,IAAM,EAAA;wBAAEF,CAAG,EAAA;AAAQ,qBAAA;oBACnBG,UAAY,EAAA;wBAAEC,QAAU,EAAA,GAAA;wBAAKC,IAAM,EAAA;AAAY,qBAAA;oBAC/CC,EAAG,EAAA,aAAA;AAEH,oBAAA,QAAA,gBAAAd,GAACT,CAAAA,OAAAA,EAAAA;AACC,wBAAA,QAAA,gBAAAS,GAACe,CAAAA,UAAAA,EAAAA;AACC,4BAAA,QAAA,gBAAAC,IAACC,CAAAA,IAAAA,EAAAA;gCACCC,GAAI,EAAA,IAAA;gCACJC,SAAU,EAAA,QAAA;gCACVC,UAAW,EAAA,SAAA;gCACXC,KAAM,EAAA,MAAA;gCACNC,WAAa,EAAA;oCAAEf,OAAS,EAAA,CAAA;oCAAGgB,MAAQ,EAAA;AAAE,iCAAA;gCACrCC,YAAc,EAAA;oCAAEjB,OAAS,EAAA,CAAA;oCAAGgB,MAAQ,EAAA;AAAE,iCAAA;gCACtCE,UAAY,EAAA;oCAAElB,OAAS,EAAA,CAAA;oCAAGgB,MAAQ,EAAA;AAAE,iCAAA;gCACpCG,aAAe,EAAA;oCAAEnB,OAAS,EAAA,CAAA;oCAAGgB,MAAQ,EAAA;AAAE,iCAAA;gCACvCI,GAAK,EAAA,CAAA;;kDAEL3B,GAAC4B,CAAAA,sBAAAA,EAAAA;wCACC7B,SAAWA,EAAAA,SAAAA;wCACXF,iBAAmBA,EAAAA;;kDAErBG,GAACR,CAAAA,GAAAA,EAAAA;wCAAI0B,GAAI,EAAA,IAAA;AACP,wCAAA,QAAA,gBAAAlB,GAAC6B,CAAAA,OAAAA,EAAAA,EAAAA;;kDAEH7B,GAACR,CAAAA,GAAAA,EAAAA;wCAAI8B,WAAa,EAAA,CAAA;wCAAGE,YAAc,EAAA,CAAA;wCAAGC,UAAY,EAAA,CAAA;wCAAGC,aAAe,EAAA,CAAA;wCAAGR,GAAI,EAAA,IAAA;AACzE,wCAAA,QAAA,gBAAAlB,GAAC8B,CAAAA,OAAAA,EAAAA;4CAAQC,eAAe,EAAA;;;;;;;AA9B5B,iBAAA,EAAA,QAAA;;;;AAyClB;;;;"}
@@ -17,8 +17,13 @@ var styled = require('styled-components');
17
17
  color: ${({ theme })=>theme.colors.neutral500};
18
18
  position: relative;
19
19
  width: 100%;
20
- padding-block: 0.6rem;
21
- padding-inline: 0.6rem;
20
+ padding-block: 0.4rem;
21
+ padding-inline: 1.2rem;
22
+
23
+ ${({ theme })=>theme.breakpoints.medium} {
24
+ padding-block: 0.6rem;
25
+ padding-inline: 0.6rem;
26
+ }
22
27
 
23
28
  &:hover {
24
29
  svg path {
@@ -34,10 +39,20 @@ var styled = require('styled-components');
34
39
  background: ${({ theme })=>theme.colors.primary100};
35
40
  }
36
41
  `;
42
+ /**
43
+ * Padding is tuned to visually match a LinkButton size L.
44
+ */ const MainNavButtonWrapper = styled.styled(MainNavLinkWrapper)`
45
+ padding-block: 1rem;
46
+ padding-inline: 1rem;
47
+ `;
37
48
  const LinkImpl = ({ children, ...props })=>/*#__PURE__*/ jsxRuntime.jsx(MainNavLinkWrapper, {
38
49
  ...props,
39
50
  children: children
40
51
  });
52
+ const NavButtonImpl = ({ children, ...props })=>/*#__PURE__*/ jsxRuntime.jsx(MainNavButtonWrapper, {
53
+ ...props,
54
+ children: children
55
+ });
41
56
  /* -------------------------------------------------------------------------------------------------
42
57
  * Tooltip
43
58
  * -----------------------------------------------------------------------------------------------*/ const TooltipImpl = ({ children, label, position = 'right' })=>{
@@ -86,6 +101,7 @@ const BadgeImpl = ({ children, label, ...props })=>{
86
101
  * EXPORTS
87
102
  * -----------------------------------------------------------------------------------------------*/ const NavLink = {
88
103
  Link: LinkImpl,
104
+ NavButton: NavButtonImpl,
89
105
  Tooltip: TooltipImpl,
90
106
  Icon: IconImpl,
91
107
  Badge: BadgeImpl
@@ -1 +1 @@
1
- {"version":3,"file":"NavLink.js","sources":["../../../../../../admin/src/components/MainNav/NavLink.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Tooltip,\n TooltipProps as DSTooltipProps,\n Badge,\n BadgeProps,\n AccessibleIcon,\n} from '@strapi/design-system';\nimport { NavLink as RouterLink, LinkProps } from 'react-router-dom';\nimport { styled } from 'styled-components';\n/* -------------------------------------------------------------------------------------------------\n * Link\n * -----------------------------------------------------------------------------------------------*/\nconst MainNavLinkWrapper = styled(RouterLink)`\n text-decoration: none;\n display: flex;\n align-items: center;\n border-radius: ${({ theme }) => theme.borderRadius};\n background: ${({ theme }) => theme.colors.neutral0};\n color: ${({ theme }) => theme.colors.neutral500};\n position: relative;\n width: 100%;\n padding-block: 0.6rem;\n padding-inline: 0.6rem;\n\n &:hover {\n svg path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n background: ${({ theme }) => theme.colors.neutral100};\n }\n\n &.active {\n svg path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n background: ${({ theme }) => theme.colors.primary100};\n }\n`;\n\nconst LinkImpl = ({ children, ...props }: LinkProps) => (\n <MainNavLinkWrapper {...props}>{children}</MainNavLinkWrapper>\n);\n/* -------------------------------------------------------------------------------------------------\n * Tooltip\n * -----------------------------------------------------------------------------------------------*/\nconst TooltipImpl = ({ children, label, position = 'right' }: NavLink.TooltipProps) => {\n return (\n <Tooltip side={position} label={label} delayDuration={0}>\n <span>{children}</span>\n </Tooltip>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Icon\n * -----------------------------------------------------------------------------------------------*/\nconst IconImpl = ({ label, children }: { label: string; children: React.ReactNode }) => {\n if (!children) {\n return null;\n }\n return <AccessibleIcon label={label}>{children}</AccessibleIcon>;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Badge\n * -----------------------------------------------------------------------------------------------*/\nconst CustomBadge = styled(Badge)`\n /* override default badge styles to change the border radius of the Base element in the Design System */\n border-radius: ${({ theme }) => theme.spaces[10]};\n height: 2rem;\n`;\n\nconst BadgeImpl = ({ children, label, ...props }: NavLink.NavBadgeProps) => {\n if (!children) {\n return null;\n }\n return (\n <CustomBadge\n position=\"absolute\"\n top=\"-0.8rem\"\n left=\"1.7rem\"\n aria-label={label}\n active={false}\n {...props}\n >\n {children}\n </CustomBadge>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EXPORTS\n * -----------------------------------------------------------------------------------------------*/\n\nconst NavLink = {\n Link: LinkImpl,\n Tooltip: TooltipImpl,\n Icon: IconImpl,\n Badge: BadgeImpl,\n};\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace NavLink {\n export interface NavBadgeProps extends BadgeProps {\n children: React.ReactNode;\n label: string;\n }\n\n export interface TooltipProps {\n children: React.ReactNode;\n label?: string;\n position?: DSTooltipProps['side'];\n }\n}\n\nexport { NavLink };\n"],"names":["MainNavLinkWrapper","styled","RouterLink","theme","borderRadius","colors","neutral0","neutral500","neutral600","neutral100","primary600","primary100","LinkImpl","children","props","_jsx","TooltipImpl","label","position","Tooltip","side","delayDuration","span","IconImpl","AccessibleIcon","CustomBadge","Badge","spaces","BadgeImpl","top","left","aria-label","active","NavLink","Link","Icon"],"mappings":";;;;;;;;AAWA;;AAEkG,qGAClG,MAAMA,kBAAAA,GAAqBC,aAAOC,CAAAA,sBAAAA,CAAW;;;;AAI5B,iBAAA,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAAA,CAAMC,YAAY,CAAC;cACvC,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAME,CAAAA,MAAM,CAACC,QAAQ,CAAC;SAC5C,EAAE,CAAC,EAAEH,KAAK,EAAE,GAAKA,KAAME,CAAAA,MAAM,CAACE,UAAU,CAAC;;;;;;;;YAQtC,EAAE,CAAC,EAAEJ,KAAK,EAAE,GAAKA,KAAME,CAAAA,MAAM,CAACG,UAAU,CAAC;;gBAErC,EAAE,CAAC,EAAEL,KAAK,EAAE,GAAKA,KAAME,CAAAA,MAAM,CAACI,UAAU,CAAC;;;;;YAK7C,EAAE,CAAC,EAAEN,KAAK,EAAE,GAAKA,KAAME,CAAAA,MAAM,CAACK,UAAU,CAAC;;gBAErC,EAAE,CAAC,EAAEP,KAAK,EAAE,GAAKA,KAAME,CAAAA,MAAM,CAACM,UAAU,CAAC;;AAEzD,CAAC;AAED,MAAMC,QAAAA,GAAW,CAAC,EAAEC,QAAQ,EAAE,GAAGC,KAAAA,EAAkB,iBACjDC,cAACf,CAAAA,kBAAAA,EAAAA;AAAoB,QAAA,GAAGc,KAAK;AAAGD,QAAAA,QAAAA,EAAAA;;AAElC;;qGAGA,MAAMG,WAAc,GAAA,CAAC,EAAEH,QAAQ,EAAEI,KAAK,EAAEC,QAAW,GAAA,OAAO,EAAwB,GAAA;AAChF,IAAA,qBACEH,cAACI,CAAAA,oBAAAA,EAAAA;QAAQC,IAAMF,EAAAA,QAAAA;QAAUD,KAAOA,EAAAA,KAAAA;QAAOI,aAAe,EAAA,CAAA;AACpD,QAAA,QAAA,gBAAAN,cAACO,CAAAA,MAAAA,EAAAA;AAAMT,YAAAA,QAAAA,EAAAA;;;AAGb,CAAA;AAEA;;AAEkG,qGAClG,MAAMU,QAAW,GAAA,CAAC,EAAEN,KAAK,EAAEJ,QAAQ,EAAgD,GAAA;AACjF,IAAA,IAAI,CAACA,QAAU,EAAA;QACb,OAAO,IAAA;AACT;AACA,IAAA,qBAAOE,cAACS,CAAAA,2BAAAA,EAAAA;QAAeP,KAAOA,EAAAA,KAAAA;AAAQJ,QAAAA,QAAAA,EAAAA;;AACxC,CAAA;AAEA;;AAEkG,qGAClG,MAAMY,WAAAA,GAAcxB,aAAOyB,CAAAA,kBAAAA,CAAM;;iBAEhB,EAAE,CAAC,EAAEvB,KAAK,EAAE,GAAKA,KAAMwB,CAAAA,MAAM,CAAC,EAAA,CAAG,CAAC;;AAEnD,CAAC;AAED,MAAMC,SAAAA,GAAY,CAAC,EAAEf,QAAQ,EAAEI,KAAK,EAAE,GAAGH,KAA8B,EAAA,GAAA;AACrE,IAAA,IAAI,CAACD,QAAU,EAAA;QACb,OAAO,IAAA;AACT;AACA,IAAA,qBACEE,cAACU,CAAAA,WAAAA,EAAAA;QACCP,QAAS,EAAA,UAAA;QACTW,GAAI,EAAA,SAAA;QACJC,IAAK,EAAA,QAAA;QACLC,YAAYd,EAAAA,KAAAA;QACZe,MAAQ,EAAA,KAAA;AACP,QAAA,GAAGlB,KAAK;AAERD,QAAAA,QAAAA,EAAAA;;AAGP,CAAA;AAEA;;AAEkG,2GAE5FoB,OAAU,GAAA;IACdC,IAAMtB,EAAAA,QAAAA;IACNO,OAASH,EAAAA,WAAAA;IACTmB,IAAMZ,EAAAA,QAAAA;IACNG,KAAOE,EAAAA;AACT;;;;"}
1
+ {"version":3,"file":"NavLink.js","sources":["../../../../../../admin/src/components/MainNav/NavLink.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Tooltip,\n TooltipProps as DSTooltipProps,\n Badge,\n BadgeProps,\n AccessibleIcon,\n} from '@strapi/design-system';\nimport { NavLink as RouterLink, LinkProps } from 'react-router-dom';\nimport { styled } from 'styled-components';\n/* -------------------------------------------------------------------------------------------------\n * Link\n * -----------------------------------------------------------------------------------------------*/\nconst MainNavLinkWrapper = styled(RouterLink)`\n text-decoration: none;\n display: flex;\n align-items: center;\n border-radius: ${({ theme }) => theme.borderRadius};\n background: ${({ theme }) => theme.colors.neutral0};\n color: ${({ theme }) => theme.colors.neutral500};\n position: relative;\n width: 100%;\n padding-block: 0.4rem;\n padding-inline: 1.2rem;\n\n ${({ theme }) => theme.breakpoints.medium} {\n padding-block: 0.6rem;\n padding-inline: 0.6rem;\n }\n\n &:hover {\n svg path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n background: ${({ theme }) => theme.colors.neutral100};\n }\n\n &.active {\n svg path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n background: ${({ theme }) => theme.colors.primary100};\n }\n`;\n\n/**\n * Padding is tuned to visually match a LinkButton size L.\n */\nconst MainNavButtonWrapper = styled(MainNavLinkWrapper)`\n padding-block: 1rem;\n padding-inline: 1rem;\n`;\n\nconst LinkImpl = ({ children, ...props }: LinkProps) => (\n <MainNavLinkWrapper {...props}>{children}</MainNavLinkWrapper>\n);\n\nconst NavButtonImpl = ({ children, ...props }: LinkProps) => (\n <MainNavButtonWrapper {...props}>{children}</MainNavButtonWrapper>\n);\n/* -------------------------------------------------------------------------------------------------\n * Tooltip\n * -----------------------------------------------------------------------------------------------*/\nconst TooltipImpl = ({ children, label, position = 'right' }: NavLink.TooltipProps) => {\n return (\n <Tooltip side={position} label={label} delayDuration={0}>\n <span>{children}</span>\n </Tooltip>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Icon\n * -----------------------------------------------------------------------------------------------*/\nconst IconImpl = ({ label, children }: { label: string; children: React.ReactNode }) => {\n if (!children) {\n return null;\n }\n return <AccessibleIcon label={label}>{children}</AccessibleIcon>;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Badge\n * -----------------------------------------------------------------------------------------------*/\nconst CustomBadge = styled(Badge)`\n /* override default badge styles to change the border radius of the Base element in the Design System */\n border-radius: ${({ theme }) => theme.spaces[10]};\n height: 2rem;\n`;\n\nconst BadgeImpl = ({ children, label, ...props }: NavLink.NavBadgeProps) => {\n if (!children) {\n return null;\n }\n return (\n <CustomBadge\n position=\"absolute\"\n top=\"-0.8rem\"\n left=\"1.7rem\"\n aria-label={label}\n active={false}\n {...props}\n >\n {children}\n </CustomBadge>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EXPORTS\n * -----------------------------------------------------------------------------------------------*/\n\nconst NavLink = {\n Link: LinkImpl,\n NavButton: NavButtonImpl,\n Tooltip: TooltipImpl,\n Icon: IconImpl,\n Badge: BadgeImpl,\n};\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace NavLink {\n export interface NavBadgeProps extends BadgeProps {\n children: React.ReactNode;\n label: string;\n }\n\n export interface TooltipProps {\n children: React.ReactNode;\n label?: string;\n position?: DSTooltipProps['side'];\n }\n}\n\nexport { NavLink };\n"],"names":["MainNavLinkWrapper","styled","RouterLink","theme","borderRadius","colors","neutral0","neutral500","breakpoints","medium","neutral600","neutral100","primary600","primary100","MainNavButtonWrapper","LinkImpl","children","props","_jsx","NavButtonImpl","TooltipImpl","label","position","Tooltip","side","delayDuration","span","IconImpl","AccessibleIcon","CustomBadge","Badge","spaces","BadgeImpl","top","left","aria-label","active","NavLink","Link","NavButton","Icon"],"mappings":"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"}
@@ -15,8 +15,13 @@ import { styled } from 'styled-components';
15
15
  color: ${({ theme })=>theme.colors.neutral500};
16
16
  position: relative;
17
17
  width: 100%;
18
- padding-block: 0.6rem;
19
- padding-inline: 0.6rem;
18
+ padding-block: 0.4rem;
19
+ padding-inline: 1.2rem;
20
+
21
+ ${({ theme })=>theme.breakpoints.medium} {
22
+ padding-block: 0.6rem;
23
+ padding-inline: 0.6rem;
24
+ }
20
25
 
21
26
  &:hover {
22
27
  svg path {
@@ -32,10 +37,20 @@ import { styled } from 'styled-components';
32
37
  background: ${({ theme })=>theme.colors.primary100};
33
38
  }
34
39
  `;
40
+ /**
41
+ * Padding is tuned to visually match a LinkButton size L.
42
+ */ const MainNavButtonWrapper = styled(MainNavLinkWrapper)`
43
+ padding-block: 1rem;
44
+ padding-inline: 1rem;
45
+ `;
35
46
  const LinkImpl = ({ children, ...props })=>/*#__PURE__*/ jsx(MainNavLinkWrapper, {
36
47
  ...props,
37
48
  children: children
38
49
  });
50
+ const NavButtonImpl = ({ children, ...props })=>/*#__PURE__*/ jsx(MainNavButtonWrapper, {
51
+ ...props,
52
+ children: children
53
+ });
39
54
  /* -------------------------------------------------------------------------------------------------
40
55
  * Tooltip
41
56
  * -----------------------------------------------------------------------------------------------*/ const TooltipImpl = ({ children, label, position = 'right' })=>{
@@ -84,6 +99,7 @@ const BadgeImpl = ({ children, label, ...props })=>{
84
99
  * EXPORTS
85
100
  * -----------------------------------------------------------------------------------------------*/ const NavLink = {
86
101
  Link: LinkImpl,
102
+ NavButton: NavButtonImpl,
87
103
  Tooltip: TooltipImpl,
88
104
  Icon: IconImpl,
89
105
  Badge: BadgeImpl
@@ -1 +1 @@
1
- {"version":3,"file":"NavLink.mjs","sources":["../../../../../../admin/src/components/MainNav/NavLink.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Tooltip,\n TooltipProps as DSTooltipProps,\n Badge,\n BadgeProps,\n AccessibleIcon,\n} from '@strapi/design-system';\nimport { NavLink as RouterLink, LinkProps } from 'react-router-dom';\nimport { styled } from 'styled-components';\n/* -------------------------------------------------------------------------------------------------\n * Link\n * -----------------------------------------------------------------------------------------------*/\nconst MainNavLinkWrapper = styled(RouterLink)`\n text-decoration: none;\n display: flex;\n align-items: center;\n border-radius: ${({ theme }) => theme.borderRadius};\n background: ${({ theme }) => theme.colors.neutral0};\n color: ${({ theme }) => theme.colors.neutral500};\n position: relative;\n width: 100%;\n padding-block: 0.6rem;\n padding-inline: 0.6rem;\n\n &:hover {\n svg path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n background: ${({ theme }) => theme.colors.neutral100};\n }\n\n &.active {\n svg path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n background: ${({ theme }) => theme.colors.primary100};\n }\n`;\n\nconst LinkImpl = ({ children, ...props }: LinkProps) => (\n <MainNavLinkWrapper {...props}>{children}</MainNavLinkWrapper>\n);\n/* -------------------------------------------------------------------------------------------------\n * Tooltip\n * -----------------------------------------------------------------------------------------------*/\nconst TooltipImpl = ({ children, label, position = 'right' }: NavLink.TooltipProps) => {\n return (\n <Tooltip side={position} label={label} delayDuration={0}>\n <span>{children}</span>\n </Tooltip>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Icon\n * -----------------------------------------------------------------------------------------------*/\nconst IconImpl = ({ label, children }: { label: string; children: React.ReactNode }) => {\n if (!children) {\n return null;\n }\n return <AccessibleIcon label={label}>{children}</AccessibleIcon>;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Badge\n * -----------------------------------------------------------------------------------------------*/\nconst CustomBadge = styled(Badge)`\n /* override default badge styles to change the border radius of the Base element in the Design System */\n border-radius: ${({ theme }) => theme.spaces[10]};\n height: 2rem;\n`;\n\nconst BadgeImpl = ({ children, label, ...props }: NavLink.NavBadgeProps) => {\n if (!children) {\n return null;\n }\n return (\n <CustomBadge\n position=\"absolute\"\n top=\"-0.8rem\"\n left=\"1.7rem\"\n aria-label={label}\n active={false}\n {...props}\n >\n {children}\n </CustomBadge>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EXPORTS\n * -----------------------------------------------------------------------------------------------*/\n\nconst NavLink = {\n Link: LinkImpl,\n Tooltip: TooltipImpl,\n Icon: IconImpl,\n Badge: BadgeImpl,\n};\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace NavLink {\n export interface NavBadgeProps extends BadgeProps {\n children: React.ReactNode;\n label: string;\n }\n\n export interface TooltipProps {\n children: React.ReactNode;\n label?: string;\n position?: DSTooltipProps['side'];\n }\n}\n\nexport { NavLink };\n"],"names":["MainNavLinkWrapper","styled","RouterLink","theme","borderRadius","colors","neutral0","neutral500","neutral600","neutral100","primary600","primary100","LinkImpl","children","props","_jsx","TooltipImpl","label","position","Tooltip","side","delayDuration","span","IconImpl","AccessibleIcon","CustomBadge","Badge","spaces","BadgeImpl","top","left","aria-label","active","NavLink","Link","Icon"],"mappings":";;;;;;AAWA;;AAEkG,qGAClG,MAAMA,kBAAAA,GAAqBC,MAAOC,CAAAA,SAAAA,CAAW;;;;AAI5B,iBAAA,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAAA,CAAMC,YAAY,CAAC;cACvC,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAME,CAAAA,MAAM,CAACC,QAAQ,CAAC;SAC5C,EAAE,CAAC,EAAEH,KAAK,EAAE,GAAKA,KAAME,CAAAA,MAAM,CAACE,UAAU,CAAC;;;;;;;;YAQtC,EAAE,CAAC,EAAEJ,KAAK,EAAE,GAAKA,KAAME,CAAAA,MAAM,CAACG,UAAU,CAAC;;gBAErC,EAAE,CAAC,EAAEL,KAAK,EAAE,GAAKA,KAAME,CAAAA,MAAM,CAACI,UAAU,CAAC;;;;;YAK7C,EAAE,CAAC,EAAEN,KAAK,EAAE,GAAKA,KAAME,CAAAA,MAAM,CAACK,UAAU,CAAC;;gBAErC,EAAE,CAAC,EAAEP,KAAK,EAAE,GAAKA,KAAME,CAAAA,MAAM,CAACM,UAAU,CAAC;;AAEzD,CAAC;AAED,MAAMC,QAAAA,GAAW,CAAC,EAAEC,QAAQ,EAAE,GAAGC,KAAAA,EAAkB,iBACjDC,GAACf,CAAAA,kBAAAA,EAAAA;AAAoB,QAAA,GAAGc,KAAK;AAAGD,QAAAA,QAAAA,EAAAA;;AAElC;;qGAGA,MAAMG,WAAc,GAAA,CAAC,EAAEH,QAAQ,EAAEI,KAAK,EAAEC,QAAW,GAAA,OAAO,EAAwB,GAAA;AAChF,IAAA,qBACEH,GAACI,CAAAA,OAAAA,EAAAA;QAAQC,IAAMF,EAAAA,QAAAA;QAAUD,KAAOA,EAAAA,KAAAA;QAAOI,aAAe,EAAA,CAAA;AACpD,QAAA,QAAA,gBAAAN,GAACO,CAAAA,MAAAA,EAAAA;AAAMT,YAAAA,QAAAA,EAAAA;;;AAGb,CAAA;AAEA;;AAEkG,qGAClG,MAAMU,QAAW,GAAA,CAAC,EAAEN,KAAK,EAAEJ,QAAQ,EAAgD,GAAA;AACjF,IAAA,IAAI,CAACA,QAAU,EAAA;QACb,OAAO,IAAA;AACT;AACA,IAAA,qBAAOE,GAACS,CAAAA,cAAAA,EAAAA;QAAeP,KAAOA,EAAAA,KAAAA;AAAQJ,QAAAA,QAAAA,EAAAA;;AACxC,CAAA;AAEA;;AAEkG,qGAClG,MAAMY,WAAAA,GAAcxB,MAAOyB,CAAAA,KAAAA,CAAM;;iBAEhB,EAAE,CAAC,EAAEvB,KAAK,EAAE,GAAKA,KAAMwB,CAAAA,MAAM,CAAC,EAAA,CAAG,CAAC;;AAEnD,CAAC;AAED,MAAMC,SAAAA,GAAY,CAAC,EAAEf,QAAQ,EAAEI,KAAK,EAAE,GAAGH,KAA8B,EAAA,GAAA;AACrE,IAAA,IAAI,CAACD,QAAU,EAAA;QACb,OAAO,IAAA;AACT;AACA,IAAA,qBACEE,GAACU,CAAAA,WAAAA,EAAAA;QACCP,QAAS,EAAA,UAAA;QACTW,GAAI,EAAA,SAAA;QACJC,IAAK,EAAA,QAAA;QACLC,YAAYd,EAAAA,KAAAA;QACZe,MAAQ,EAAA,KAAA;AACP,QAAA,GAAGlB,KAAK;AAERD,QAAAA,QAAAA,EAAAA;;AAGP,CAAA;AAEA;;AAEkG,2GAE5FoB,OAAU,GAAA;IACdC,IAAMtB,EAAAA,QAAAA;IACNO,OAASH,EAAAA,WAAAA;IACTmB,IAAMZ,EAAAA,QAAAA;IACNG,KAAOE,EAAAA;AACT;;;;"}
1
+ {"version":3,"file":"NavLink.mjs","sources":["../../../../../../admin/src/components/MainNav/NavLink.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Tooltip,\n TooltipProps as DSTooltipProps,\n Badge,\n BadgeProps,\n AccessibleIcon,\n} from '@strapi/design-system';\nimport { NavLink as RouterLink, LinkProps } from 'react-router-dom';\nimport { styled } from 'styled-components';\n/* -------------------------------------------------------------------------------------------------\n * Link\n * -----------------------------------------------------------------------------------------------*/\nconst MainNavLinkWrapper = styled(RouterLink)`\n text-decoration: none;\n display: flex;\n align-items: center;\n border-radius: ${({ theme }) => theme.borderRadius};\n background: ${({ theme }) => theme.colors.neutral0};\n color: ${({ theme }) => theme.colors.neutral500};\n position: relative;\n width: 100%;\n padding-block: 0.4rem;\n padding-inline: 1.2rem;\n\n ${({ theme }) => theme.breakpoints.medium} {\n padding-block: 0.6rem;\n padding-inline: 0.6rem;\n }\n\n &:hover {\n svg path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n background: ${({ theme }) => theme.colors.neutral100};\n }\n\n &.active {\n svg path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n background: ${({ theme }) => theme.colors.primary100};\n }\n`;\n\n/**\n * Padding is tuned to visually match a LinkButton size L.\n */\nconst MainNavButtonWrapper = styled(MainNavLinkWrapper)`\n padding-block: 1rem;\n padding-inline: 1rem;\n`;\n\nconst LinkImpl = ({ children, ...props }: LinkProps) => (\n <MainNavLinkWrapper {...props}>{children}</MainNavLinkWrapper>\n);\n\nconst NavButtonImpl = ({ children, ...props }: LinkProps) => (\n <MainNavButtonWrapper {...props}>{children}</MainNavButtonWrapper>\n);\n/* -------------------------------------------------------------------------------------------------\n * Tooltip\n * -----------------------------------------------------------------------------------------------*/\nconst TooltipImpl = ({ children, label, position = 'right' }: NavLink.TooltipProps) => {\n return (\n <Tooltip side={position} label={label} delayDuration={0}>\n <span>{children}</span>\n </Tooltip>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Icon\n * -----------------------------------------------------------------------------------------------*/\nconst IconImpl = ({ label, children }: { label: string; children: React.ReactNode }) => {\n if (!children) {\n return null;\n }\n return <AccessibleIcon label={label}>{children}</AccessibleIcon>;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Badge\n * -----------------------------------------------------------------------------------------------*/\nconst CustomBadge = styled(Badge)`\n /* override default badge styles to change the border radius of the Base element in the Design System */\n border-radius: ${({ theme }) => theme.spaces[10]};\n height: 2rem;\n`;\n\nconst BadgeImpl = ({ children, label, ...props }: NavLink.NavBadgeProps) => {\n if (!children) {\n return null;\n }\n return (\n <CustomBadge\n position=\"absolute\"\n top=\"-0.8rem\"\n left=\"1.7rem\"\n aria-label={label}\n active={false}\n {...props}\n >\n {children}\n </CustomBadge>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EXPORTS\n * -----------------------------------------------------------------------------------------------*/\n\nconst NavLink = {\n Link: LinkImpl,\n NavButton: NavButtonImpl,\n Tooltip: TooltipImpl,\n Icon: IconImpl,\n Badge: BadgeImpl,\n};\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace NavLink {\n export interface NavBadgeProps extends BadgeProps {\n children: React.ReactNode;\n label: string;\n }\n\n export interface TooltipProps {\n children: React.ReactNode;\n label?: string;\n position?: DSTooltipProps['side'];\n }\n}\n\nexport { NavLink };\n"],"names":["MainNavLinkWrapper","styled","RouterLink","theme","borderRadius","colors","neutral0","neutral500","breakpoints","medium","neutral600","neutral100","primary600","primary100","MainNavButtonWrapper","LinkImpl","children","props","_jsx","NavButtonImpl","TooltipImpl","label","position","Tooltip","side","delayDuration","span","IconImpl","AccessibleIcon","CustomBadge","Badge","spaces","BadgeImpl","top","left","aria-label","active","NavLink","Link","NavButton","Icon"],"mappings":"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"}
@@ -161,8 +161,7 @@ const NpsSurvey = ()=>{
161
161
  environment: currentEnvironment,
162
162
  version: strapiVersion ?? undefined,
163
163
  license: window.strapi.projectType,
164
- isHostedOnStrapiCloud: process.env.STRAPI_HOSTING === 'strapi.cloud',
165
- aiLicenseKey: process.env.STRAPI_ADMIN_AI_LICENSE
164
+ isHostedOnStrapiCloud: process.env.STRAPI_HOSTING === 'strapi.cloud'
166
165
  };
167
166
  const res = await fetch(`${process.env.STRAPI_ANALYTICS_URL || 'https://analytics.strapi.io'}/submit-nps`, {
168
167
  method: 'POST',
@@ -1 +1 @@
1
- {"version":3,"file":"NpsSurvey.js","sources":["../../../../../admin/src/components/NpsSurvey.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Flex,\n IconButton,\n Button,\n Typography,\n Textarea,\n Portal,\n Field,\n VisuallyHidden,\n SingleSelect,\n SingleSelectOption,\n} from '@strapi/design-system';\nimport { Cross } from '@strapi/icons';\nimport { Formik, Form } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\nimport * as yup from 'yup';\n\nimport { useAppInfo } from '../features/AppInfo';\nimport { useAuth } from '../features/Auth';\nimport { useNotification } from '../features/Notifications';\nimport { useIsMobile } from '../hooks/useMediaQuery';\nimport { usePersistentState } from '../hooks/usePersistentState';\n\nconst FieldWrapper = styled(Field.Root)`\n height: 3.2rem;\n width: 3.2rem;\n\n > label,\n ~ input {\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n\n > label {\n color: inherit;\n cursor: pointer;\n padding: ${({ theme }) => theme.spaces[2]};\n text-align: center;\n vertical-align: middle;\n }\n\n &:hover,\n &:focus-within {\n background-color: ${({ theme }) => theme.colors.neutral0};\n }\n\n &:active,\n &.selected {\n color: ${({ theme }) => theme.colors.primary700};\n background-color: ${({ theme }) => theme.colors.neutral0};\n border-color: ${({ theme }) => theme.colors.primary700};\n }\n`;\n\nconst delays = {\n postResponse: 90 * 24 * 60 * 60 * 1000, // 90 days in ms\n postFirstDismissal: 14 * 24 * 60 * 60 * 1000, // 14 days in ms\n postSubsequentDismissal: 90 * 24 * 60 * 60 * 1000, // 90 days in ms\n display: 30 * 60 * 1000, // 30 minutes in ms\n};\n\nconst ratingArray = [...Array(11).keys()];\n\nconst checkIfShouldShowSurvey = (settings: NpsSurveySettings) => {\n const { enabled, lastResponseDate, firstDismissalDate, lastDismissalDate } = settings;\n\n // This function goes through all the cases where we'd want to not show the survey:\n // 1. If the survey is disabled by strapi, abort mission, don't bother checking the other settings.\n // 2. If the survey is disabled by user, abort mission, don't bother checking the other settings.\n // 3. If the user has already responded to the survey, check if enough time has passed since the last response.\n // 4. If the user has dismissed the survey twice or more before, check if enough time has passed since the last dismissal.\n // 5. If the user has only dismissed the survey once before, check if enough time has passed since the first dismissal.\n // If none of these cases check out, then we show the survey.\n // Note that submitting a response resets the dismissal counts.\n // Checks 4 and 5 should not be reversed, since the first dismissal will also exist if the user has dismissed the survey twice or more before.\n\n // For users who had created an account before the NPS feature was introduced,\n // we assume that they would have enabled the NPS feature if they had the chance.\n\n // Global strapi disable for NSP.\n if (window.strapi.flags.nps === false) {\n return false;\n }\n\n // User chose not to enable the NPS feature when signing up\n if (enabled === false) {\n return false;\n }\n\n // The user has already responded to the survey\n if (lastResponseDate) {\n const timeSinceLastResponse = Date.now() - new Date(lastResponseDate).getTime();\n\n if (timeSinceLastResponse >= delays.postResponse) {\n return true;\n }\n\n return false;\n }\n\n // The user has dismissed the survey twice or more before\n if (lastDismissalDate) {\n const timeSinceLastDismissal = Date.now() - new Date(lastDismissalDate).getTime();\n\n if (timeSinceLastDismissal >= delays.postSubsequentDismissal) {\n return true;\n }\n\n return false;\n }\n\n // The user has only dismissed the survey once before\n if (firstDismissalDate) {\n const timeSinceFirstDismissal = Date.now() - new Date(firstDismissalDate).getTime();\n\n if (timeSinceFirstDismissal >= delays.postFirstDismissal) {\n return true;\n }\n\n return false;\n }\n\n // The user has not interacted with the survey before\n return true;\n};\n\nconst NpsSurvey = () => {\n const isMobile = useIsMobile();\n const { formatMessage } = useIntl();\n const { npsSurveySettings, setNpsSurveySettings } = useNpsSurveySettings();\n const [isFeedbackResponse, setIsFeedbackResponse] = React.useState(false);\n const { toggleNotification } = useNotification();\n const currentEnvironment = useAppInfo('NpsSurvey', (state) => state.currentEnvironment);\n const strapiVersion = useAppInfo('NpsSurvey', (state) => state.strapiVersion);\n\n interface NpsSurveyMutationBody {\n email: string;\n rating: number | null;\n comment: string;\n environment?: string;\n version?: string;\n license: 'Enterprise' | 'Community';\n }\n\n // Only check on first render if the survey should be shown\n const [surveyIsShown, setSurveyIsShown] = React.useState(\n checkIfShouldShowSurvey(npsSurveySettings)\n );\n\n // Set a cooldown to show the survey when session begins\n const [displaySurvey, setDisplaySurvey] = React.useState(false);\n\n React.useEffect(() => {\n const displayTime = setTimeout(() => {\n setDisplaySurvey(true);\n }, delays.display);\n\n return () => {\n clearTimeout(displayTime);\n };\n }, []);\n\n const { user } = useAuth('NpsSurvey', (auth) => auth);\n\n if (!displaySurvey) {\n return null;\n }\n\n if (!surveyIsShown) {\n return null;\n }\n\n const handleSubmitResponse = async ({\n npsSurveyRating,\n npsSurveyFeedback,\n }: {\n npsSurveyRating: NpsSurveyMutationBody['rating'];\n npsSurveyFeedback: NpsSurveyMutationBody['comment'];\n }) => {\n try {\n const body = {\n email: typeof user === 'object' && user.email ? user.email : '',\n rating: npsSurveyRating,\n comment: npsSurveyFeedback,\n environment: currentEnvironment,\n version: strapiVersion ?? undefined,\n license: window.strapi.projectType,\n isHostedOnStrapiCloud: process.env.STRAPI_HOSTING === 'strapi.cloud',\n aiLicenseKey: process.env.STRAPI_ADMIN_AI_LICENSE,\n };\n const res = await fetch(\n `${process.env.STRAPI_ANALYTICS_URL || 'https://analytics.strapi.io'}/submit-nps`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(body),\n }\n );\n\n if (!res.ok) {\n throw new Error('Failed to submit NPS survey');\n }\n\n setNpsSurveySettings((settings) => ({\n ...settings,\n lastResponseDate: new Date().toString(),\n firstDismissalDate: null,\n lastDismissalDate: null,\n }));\n setIsFeedbackResponse(true);\n // Thank you message displayed in the banner should disappear after few seconds.\n setTimeout(() => {\n setSurveyIsShown(false);\n }, 3000);\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n const handleDismiss = () => {\n setNpsSurveySettings((settings) => {\n const nextSettings = {\n ...settings,\n lastResponseDate: null,\n };\n\n if (settings.firstDismissalDate) {\n // If the user dismisses the survey for the second time\n nextSettings.lastDismissalDate = new Date().toString();\n } else {\n // If the user dismisses the survey for the first time\n nextSettings.firstDismissalDate = new Date().toString();\n }\n\n return nextSettings;\n });\n\n setSurveyIsShown(false);\n };\n\n return (\n <Portal>\n <Formik\n initialValues={{ npsSurveyFeedback: '', npsSurveyRating: null }}\n onSubmit={handleSubmitResponse}\n validationSchema={yup.object({\n npsSurveyFeedback: yup.string(),\n npsSurveyRating: yup.number().required(),\n })}\n >\n {({ values, handleChange, setFieldValue, isSubmitting }) => (\n <Form name=\"npsSurveyForm\">\n <Box\n padding={4}\n position=\"fixed\"\n bottom={0}\n left=\"50%\"\n transform=\"translateX(-50%)\"\n zIndex=\"200\"\n minWidth={{ initial: '100%', medium: '50%' }}\n >\n <Flex\n hasRadius\n direction=\"column\"\n padding={4}\n borderColor=\"primary200\"\n background=\"neutral0\"\n shadow=\"popupShadow\"\n wrap=\"wrap\"\n >\n {isFeedbackResponse ? (\n <Typography fontWeight=\"semiBold\">\n {formatMessage({\n id: 'app.components.NpsSurvey.feedback-response',\n defaultMessage: 'Thank you very much for your feedback!',\n })}\n </Typography>\n ) : (\n <Box tag=\"fieldset\" width=\"100%\" borderWidth={0}>\n <Flex justifyContent=\"space-between\" width=\"100%\" gap={2}>\n <Box marginLeft=\"auto\" marginRight=\"auto\">\n <Typography fontWeight=\"semiBold\" tag=\"legend\">\n {formatMessage({\n id: 'app.components.NpsSurvey.banner-title',\n defaultMessage:\n 'How likely are you to recommend Strapi to a friend or colleague?',\n })}\n </Typography>\n </Box>\n <IconButton\n onClick={handleDismiss}\n withTooltip={false}\n label={formatMessage({\n id: 'app.components.NpsSurvey.dismiss-survey-label',\n defaultMessage: 'Dismiss survey',\n })}\n type=\"button\"\n >\n <Cross />\n </IconButton>\n </Flex>\n {isMobile ? (\n <Box marginTop={2}>\n <SingleSelect\n placeholder={formatMessage({\n id: 'app.components.NpsSurvey.select-rating',\n defaultMessage: 'Select rating',\n })}\n onChange={(value) => {\n setFieldValue('npsSurveyRating', parseInt(value.toString(), 10));\n }}\n value={values.npsSurveyRating}\n >\n {ratingArray\n .sort((a, b) => b - a)\n .map((number) => {\n const suffixMessage =\n number === 0\n ? formatMessage({\n id: 'app.components.NpsSurvey.no-recommendation',\n defaultMessage: 'Not at all likely',\n })\n : number === 10\n ? formatMessage({\n id: 'app.components.NpsSurvey.happy-to-recommend',\n defaultMessage: 'Extremely likely',\n })\n : '';\n return (\n <SingleSelectOption key={number} value={number}>\n {number} {suffixMessage && `(${suffixMessage})`}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </Box>\n ) : (\n <Flex gap={2} marginTop={2} marginBottom={2} justifyContent=\"center\">\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'app.components.NpsSurvey.no-recommendation',\n defaultMessage: 'Not at all likely',\n })}\n </Typography>\n {ratingArray.map((number) => {\n return (\n <FieldWrapper\n key={number}\n name=\"npsSurveyRating\"\n className={values.npsSurveyRating === number ? 'selected' : undefined} // \"selected\" class added when child radio button is checked\n hasRadius\n background=\"primary100\"\n borderColor=\"primary200\"\n color=\"primary600\"\n position=\"relative\"\n cursor=\"pointer\"\n >\n <Field.Label>\n <VisuallyHidden>\n <Field.Input\n type=\"radio\"\n checked={values.npsSurveyRating === number}\n onChange={(e) =>\n setFieldValue('npsSurveyRating', parseInt(e.target.value, 10))\n }\n value={number}\n />\n </VisuallyHidden>\n {number}\n </Field.Label>\n </FieldWrapper>\n );\n })}\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'app.components.NpsSurvey.happy-to-recommend',\n defaultMessage: 'Extremely likely',\n })}\n </Typography>\n </Flex>\n )}\n {values.npsSurveyRating !== null && (\n <Flex direction=\"column\" alignItems=\"stretch\">\n <Box marginTop={2}>\n <Field.Label fontWeight=\"semiBold\" fontSize={2}>\n {formatMessage({\n id: 'app.components.NpsSurvey.feedback-question',\n defaultMessage: 'Do you have any suggestion for improvements?',\n })}\n </Field.Label>\n </Box>\n <Box marginTop={3} marginBottom={4} width=\"100%\">\n <Textarea\n id=\"npsSurveyFeedback\" // formik element attribute \"id\" should be same as the values key to work\n width=\"100%\"\n onChange={handleChange}\n value={values.npsSurveyFeedback}\n />\n </Box>\n <Box>\n <Button marginBottom={2} type=\"submit\" loading={isSubmitting}>\n {formatMessage({\n id: 'app.components.NpsSurvey.submit-feedback',\n defaultMessage: 'Submit Feedback',\n })}\n </Button>\n </Box>\n </Flex>\n )}\n </Box>\n )}\n </Flex>\n </Box>\n </Form>\n )}\n </Formik>\n </Portal>\n );\n};\n\ninterface NpsSurveySettings {\n enabled: boolean;\n lastResponseDate: string | null;\n firstDismissalDate: string | null;\n lastDismissalDate: string | null;\n}\n\n/**\n * We exported to make it available during admin user registration.\n * Because we only enable the NPS for users who subscribe to the newsletter when signing up\n */\nfunction useNpsSurveySettings() {\n const [npsSurveySettings, setNpsSurveySettings] = usePersistentState<NpsSurveySettings>(\n 'STRAPI_NPS_SURVEY_SETTINGS',\n {\n enabled: true,\n lastResponseDate: null,\n firstDismissalDate: null,\n lastDismissalDate: null,\n }\n );\n\n /**\n * TODO: should this just be an array so we can alias the `usePersistentState` hook?\n */\n return { npsSurveySettings, setNpsSurveySettings };\n}\n\nexport { NpsSurvey, useNpsSurveySettings };\n"],"names":["FieldWrapper","styled","Field","Root","theme","spaces","colors","neutral0","primary700","delays","postResponse","postFirstDismissal","postSubsequentDismissal","display","ratingArray","Array","keys","checkIfShouldShowSurvey","settings","enabled","lastResponseDate","firstDismissalDate","lastDismissalDate","window","strapi","flags","nps","timeSinceLastResponse","Date","now","getTime","timeSinceLastDismissal","timeSinceFirstDismissal","NpsSurvey","isMobile","useIsMobile","formatMessage","useIntl","npsSurveySettings","setNpsSurveySettings","useNpsSurveySettings","isFeedbackResponse","setIsFeedbackResponse","React","useState","toggleNotification","useNotification","currentEnvironment","useAppInfo","state","strapiVersion","surveyIsShown","setSurveyIsShown","displaySurvey","setDisplaySurvey","useEffect","displayTime","setTimeout","clearTimeout","user","useAuth","auth","handleSubmitResponse","npsSurveyRating","npsSurveyFeedback","body","email","rating","comment","environment","version","undefined","license","projectType","isHostedOnStrapiCloud","process","env","STRAPI_HOSTING","aiLicenseKey","STRAPI_ADMIN_AI_LICENSE","res","fetch","STRAPI_ANALYTICS_URL","method","headers","JSON","stringify","ok","Error","toString","err","type","message","id","defaultMessage","handleDismiss","nextSettings","_jsx","Portal","Formik","initialValues","onSubmit","validationSchema","yup","object","string","number","required","values","handleChange","setFieldValue","isSubmitting","Form","name","Box","padding","position","bottom","left","transform","zIndex","minWidth","initial","medium","Flex","hasRadius","direction","borderColor","background","shadow","wrap","Typography","fontWeight","_jsxs","tag","width","borderWidth","justifyContent","gap","marginLeft","marginRight","IconButton","onClick","withTooltip","label","Cross","marginTop","SingleSelect","placeholder","onChange","value","parseInt","sort","a","b","map","suffixMessage","SingleSelectOption","marginBottom","variant","textColor","className","color","cursor","Label","VisuallyHidden","Input","checked","e","target","alignItems","fontSize","Textarea","Button","loading","usePersistentState"],"mappings":"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"}
1
+ {"version":3,"file":"NpsSurvey.js","sources":["../../../../../admin/src/components/NpsSurvey.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Flex,\n IconButton,\n Button,\n Typography,\n Textarea,\n Portal,\n Field,\n VisuallyHidden,\n SingleSelect,\n SingleSelectOption,\n} from '@strapi/design-system';\nimport { Cross } from '@strapi/icons';\nimport { Formik, Form } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\nimport * as yup from 'yup';\n\nimport { useAppInfo } from '../features/AppInfo';\nimport { useAuth } from '../features/Auth';\nimport { useNotification } from '../features/Notifications';\nimport { useIsMobile } from '../hooks/useMediaQuery';\nimport { usePersistentState } from '../hooks/usePersistentState';\n\nconst FieldWrapper = styled(Field.Root)`\n height: 3.2rem;\n width: 3.2rem;\n\n > label,\n ~ input {\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n\n > label {\n color: inherit;\n cursor: pointer;\n padding: ${({ theme }) => theme.spaces[2]};\n text-align: center;\n vertical-align: middle;\n }\n\n &:hover,\n &:focus-within {\n background-color: ${({ theme }) => theme.colors.neutral0};\n }\n\n &:active,\n &.selected {\n color: ${({ theme }) => theme.colors.primary700};\n background-color: ${({ theme }) => theme.colors.neutral0};\n border-color: ${({ theme }) => theme.colors.primary700};\n }\n`;\n\nconst delays = {\n postResponse: 90 * 24 * 60 * 60 * 1000, // 90 days in ms\n postFirstDismissal: 14 * 24 * 60 * 60 * 1000, // 14 days in ms\n postSubsequentDismissal: 90 * 24 * 60 * 60 * 1000, // 90 days in ms\n display: 30 * 60 * 1000, // 30 minutes in ms\n};\n\nconst ratingArray = [...Array(11).keys()];\n\nconst checkIfShouldShowSurvey = (settings: NpsSurveySettings) => {\n const { enabled, lastResponseDate, firstDismissalDate, lastDismissalDate } = settings;\n\n // This function goes through all the cases where we'd want to not show the survey:\n // 1. If the survey is disabled by strapi, abort mission, don't bother checking the other settings.\n // 2. If the survey is disabled by user, abort mission, don't bother checking the other settings.\n // 3. If the user has already responded to the survey, check if enough time has passed since the last response.\n // 4. If the user has dismissed the survey twice or more before, check if enough time has passed since the last dismissal.\n // 5. If the user has only dismissed the survey once before, check if enough time has passed since the first dismissal.\n // If none of these cases check out, then we show the survey.\n // Note that submitting a response resets the dismissal counts.\n // Checks 4 and 5 should not be reversed, since the first dismissal will also exist if the user has dismissed the survey twice or more before.\n\n // For users who had created an account before the NPS feature was introduced,\n // we assume that they would have enabled the NPS feature if they had the chance.\n\n // Global strapi disable for NSP.\n if (window.strapi.flags.nps === false) {\n return false;\n }\n\n // User chose not to enable the NPS feature when signing up\n if (enabled === false) {\n return false;\n }\n\n // The user has already responded to the survey\n if (lastResponseDate) {\n const timeSinceLastResponse = Date.now() - new Date(lastResponseDate).getTime();\n\n if (timeSinceLastResponse >= delays.postResponse) {\n return true;\n }\n\n return false;\n }\n\n // The user has dismissed the survey twice or more before\n if (lastDismissalDate) {\n const timeSinceLastDismissal = Date.now() - new Date(lastDismissalDate).getTime();\n\n if (timeSinceLastDismissal >= delays.postSubsequentDismissal) {\n return true;\n }\n\n return false;\n }\n\n // The user has only dismissed the survey once before\n if (firstDismissalDate) {\n const timeSinceFirstDismissal = Date.now() - new Date(firstDismissalDate).getTime();\n\n if (timeSinceFirstDismissal >= delays.postFirstDismissal) {\n return true;\n }\n\n return false;\n }\n\n // The user has not interacted with the survey before\n return true;\n};\n\nconst NpsSurvey = () => {\n const isMobile = useIsMobile();\n const { formatMessage } = useIntl();\n const { npsSurveySettings, setNpsSurveySettings } = useNpsSurveySettings();\n const [isFeedbackResponse, setIsFeedbackResponse] = React.useState(false);\n const { toggleNotification } = useNotification();\n const currentEnvironment = useAppInfo('NpsSurvey', (state) => state.currentEnvironment);\n const strapiVersion = useAppInfo('NpsSurvey', (state) => state.strapiVersion);\n\n interface NpsSurveyMutationBody {\n email: string;\n rating: number | null;\n comment: string;\n environment?: string;\n version?: string;\n license: 'Enterprise' | 'Community';\n }\n\n // Only check on first render if the survey should be shown\n const [surveyIsShown, setSurveyIsShown] = React.useState(\n checkIfShouldShowSurvey(npsSurveySettings)\n );\n\n // Set a cooldown to show the survey when session begins\n const [displaySurvey, setDisplaySurvey] = React.useState(false);\n\n React.useEffect(() => {\n const displayTime = setTimeout(() => {\n setDisplaySurvey(true);\n }, delays.display);\n\n return () => {\n clearTimeout(displayTime);\n };\n }, []);\n\n const { user } = useAuth('NpsSurvey', (auth) => auth);\n\n if (!displaySurvey) {\n return null;\n }\n\n if (!surveyIsShown) {\n return null;\n }\n\n const handleSubmitResponse = async ({\n npsSurveyRating,\n npsSurveyFeedback,\n }: {\n npsSurveyRating: NpsSurveyMutationBody['rating'];\n npsSurveyFeedback: NpsSurveyMutationBody['comment'];\n }) => {\n try {\n const body = {\n email: typeof user === 'object' && user.email ? user.email : '',\n rating: npsSurveyRating,\n comment: npsSurveyFeedback,\n environment: currentEnvironment,\n version: strapiVersion ?? undefined,\n license: window.strapi.projectType,\n isHostedOnStrapiCloud: process.env.STRAPI_HOSTING === 'strapi.cloud',\n };\n const res = await fetch(\n `${process.env.STRAPI_ANALYTICS_URL || 'https://analytics.strapi.io'}/submit-nps`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(body),\n }\n );\n\n if (!res.ok) {\n throw new Error('Failed to submit NPS survey');\n }\n\n setNpsSurveySettings((settings) => ({\n ...settings,\n lastResponseDate: new Date().toString(),\n firstDismissalDate: null,\n lastDismissalDate: null,\n }));\n setIsFeedbackResponse(true);\n // Thank you message displayed in the banner should disappear after few seconds.\n setTimeout(() => {\n setSurveyIsShown(false);\n }, 3000);\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n const handleDismiss = () => {\n setNpsSurveySettings((settings) => {\n const nextSettings = {\n ...settings,\n lastResponseDate: null,\n };\n\n if (settings.firstDismissalDate) {\n // If the user dismisses the survey for the second time\n nextSettings.lastDismissalDate = new Date().toString();\n } else {\n // If the user dismisses the survey for the first time\n nextSettings.firstDismissalDate = new Date().toString();\n }\n\n return nextSettings;\n });\n\n setSurveyIsShown(false);\n };\n\n return (\n <Portal>\n <Formik\n initialValues={{ npsSurveyFeedback: '', npsSurveyRating: null }}\n onSubmit={handleSubmitResponse}\n validationSchema={yup.object({\n npsSurveyFeedback: yup.string(),\n npsSurveyRating: yup.number().required(),\n })}\n >\n {({ values, handleChange, setFieldValue, isSubmitting }) => (\n <Form name=\"npsSurveyForm\">\n <Box\n padding={4}\n position=\"fixed\"\n bottom={0}\n left=\"50%\"\n transform=\"translateX(-50%)\"\n zIndex=\"200\"\n minWidth={{ initial: '100%', medium: '50%' }}\n >\n <Flex\n hasRadius\n direction=\"column\"\n padding={4}\n borderColor=\"primary200\"\n background=\"neutral0\"\n shadow=\"popupShadow\"\n wrap=\"wrap\"\n >\n {isFeedbackResponse ? (\n <Typography fontWeight=\"semiBold\">\n {formatMessage({\n id: 'app.components.NpsSurvey.feedback-response',\n defaultMessage: 'Thank you very much for your feedback!',\n })}\n </Typography>\n ) : (\n <Box tag=\"fieldset\" width=\"100%\" borderWidth={0}>\n <Flex justifyContent=\"space-between\" width=\"100%\" gap={2}>\n <Box marginLeft=\"auto\" marginRight=\"auto\">\n <Typography fontWeight=\"semiBold\" tag=\"legend\">\n {formatMessage({\n id: 'app.components.NpsSurvey.banner-title',\n defaultMessage:\n 'How likely are you to recommend Strapi to a friend or colleague?',\n })}\n </Typography>\n </Box>\n <IconButton\n onClick={handleDismiss}\n withTooltip={false}\n label={formatMessage({\n id: 'app.components.NpsSurvey.dismiss-survey-label',\n defaultMessage: 'Dismiss survey',\n })}\n type=\"button\"\n >\n <Cross />\n </IconButton>\n </Flex>\n {isMobile ? (\n <Box marginTop={2}>\n <SingleSelect\n placeholder={formatMessage({\n id: 'app.components.NpsSurvey.select-rating',\n defaultMessage: 'Select rating',\n })}\n onChange={(value) => {\n setFieldValue('npsSurveyRating', parseInt(value.toString(), 10));\n }}\n value={values.npsSurveyRating}\n >\n {ratingArray\n .sort((a, b) => b - a)\n .map((number) => {\n const suffixMessage =\n number === 0\n ? formatMessage({\n id: 'app.components.NpsSurvey.no-recommendation',\n defaultMessage: 'Not at all likely',\n })\n : number === 10\n ? formatMessage({\n id: 'app.components.NpsSurvey.happy-to-recommend',\n defaultMessage: 'Extremely likely',\n })\n : '';\n return (\n <SingleSelectOption key={number} value={number}>\n {number} {suffixMessage && `(${suffixMessage})`}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </Box>\n ) : (\n <Flex gap={2} marginTop={2} marginBottom={2} justifyContent=\"center\">\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'app.components.NpsSurvey.no-recommendation',\n defaultMessage: 'Not at all likely',\n })}\n </Typography>\n {ratingArray.map((number) => {\n return (\n <FieldWrapper\n key={number}\n name=\"npsSurveyRating\"\n className={values.npsSurveyRating === number ? 'selected' : undefined} // \"selected\" class added when child radio button is checked\n hasRadius\n background=\"primary100\"\n borderColor=\"primary200\"\n color=\"primary600\"\n position=\"relative\"\n cursor=\"pointer\"\n >\n <Field.Label>\n <VisuallyHidden>\n <Field.Input\n type=\"radio\"\n checked={values.npsSurveyRating === number}\n onChange={(e) =>\n setFieldValue('npsSurveyRating', parseInt(e.target.value, 10))\n }\n value={number}\n />\n </VisuallyHidden>\n {number}\n </Field.Label>\n </FieldWrapper>\n );\n })}\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'app.components.NpsSurvey.happy-to-recommend',\n defaultMessage: 'Extremely likely',\n })}\n </Typography>\n </Flex>\n )}\n {values.npsSurveyRating !== null && (\n <Flex direction=\"column\" alignItems=\"stretch\">\n <Box marginTop={2}>\n <Field.Label fontWeight=\"semiBold\" fontSize={2}>\n {formatMessage({\n id: 'app.components.NpsSurvey.feedback-question',\n defaultMessage: 'Do you have any suggestion for improvements?',\n })}\n </Field.Label>\n </Box>\n <Box marginTop={3} marginBottom={4} width=\"100%\">\n <Textarea\n id=\"npsSurveyFeedback\" // formik element attribute \"id\" should be same as the values key to work\n width=\"100%\"\n onChange={handleChange}\n value={values.npsSurveyFeedback}\n />\n </Box>\n <Box>\n <Button marginBottom={2} type=\"submit\" loading={isSubmitting}>\n {formatMessage({\n id: 'app.components.NpsSurvey.submit-feedback',\n defaultMessage: 'Submit Feedback',\n })}\n </Button>\n </Box>\n </Flex>\n )}\n </Box>\n )}\n </Flex>\n </Box>\n </Form>\n )}\n </Formik>\n </Portal>\n );\n};\n\ninterface NpsSurveySettings {\n enabled: boolean;\n lastResponseDate: string | null;\n firstDismissalDate: string | null;\n lastDismissalDate: string | null;\n}\n\n/**\n * We exported to make it available during admin user registration.\n * Because we only enable the NPS for users who subscribe to the newsletter when signing up\n */\nfunction useNpsSurveySettings() {\n const [npsSurveySettings, setNpsSurveySettings] = usePersistentState<NpsSurveySettings>(\n 'STRAPI_NPS_SURVEY_SETTINGS',\n {\n enabled: true,\n lastResponseDate: null,\n firstDismissalDate: null,\n lastDismissalDate: null,\n }\n );\n\n /**\n * TODO: should this just be an array so we can alias the `usePersistentState` hook?\n */\n return { npsSurveySettings, setNpsSurveySettings };\n}\n\nexport { NpsSurvey, useNpsSurveySettings };\n"],"names":["FieldWrapper","styled","Field","Root","theme","spaces","colors","neutral0","primary700","delays","postResponse","postFirstDismissal","postSubsequentDismissal","display","ratingArray","Array","keys","checkIfShouldShowSurvey","settings","enabled","lastResponseDate","firstDismissalDate","lastDismissalDate","window","strapi","flags","nps","timeSinceLastResponse","Date","now","getTime","timeSinceLastDismissal","timeSinceFirstDismissal","NpsSurvey","isMobile","useIsMobile","formatMessage","useIntl","npsSurveySettings","setNpsSurveySettings","useNpsSurveySettings","isFeedbackResponse","setIsFeedbackResponse","React","useState","toggleNotification","useNotification","currentEnvironment","useAppInfo","state","strapiVersion","surveyIsShown","setSurveyIsShown","displaySurvey","setDisplaySurvey","useEffect","displayTime","setTimeout","clearTimeout","user","useAuth","auth","handleSubmitResponse","npsSurveyRating","npsSurveyFeedback","body","email","rating","comment","environment","version","undefined","license","projectType","isHostedOnStrapiCloud","process","env","STRAPI_HOSTING","res","fetch","STRAPI_ANALYTICS_URL","method","headers","JSON","stringify","ok","Error","toString","err","type","message","id","defaultMessage","handleDismiss","nextSettings","_jsx","Portal","Formik","initialValues","onSubmit","validationSchema","yup","object","string","number","required","values","handleChange","setFieldValue","isSubmitting","Form","name","Box","padding","position","bottom","left","transform","zIndex","minWidth","initial","medium","Flex","hasRadius","direction","borderColor","background","shadow","wrap","Typography","fontWeight","_jsxs","tag","width","borderWidth","justifyContent","gap","marginLeft","marginRight","IconButton","onClick","withTooltip","label","Cross","marginTop","SingleSelect","placeholder","onChange","value","parseInt","sort","a","b","map","suffixMessage","SingleSelectOption","marginBottom","variant","textColor","className","color","cursor","Label","VisuallyHidden","Input","checked","e","target","alignItems","fontSize","Textarea","Button","loading","usePersistentState"],"mappings":"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"}
@@ -139,8 +139,7 @@ const NpsSurvey = ()=>{
139
139
  environment: currentEnvironment,
140
140
  version: strapiVersion ?? undefined,
141
141
  license: window.strapi.projectType,
142
- isHostedOnStrapiCloud: process.env.STRAPI_HOSTING === 'strapi.cloud',
143
- aiLicenseKey: process.env.STRAPI_ADMIN_AI_LICENSE
142
+ isHostedOnStrapiCloud: process.env.STRAPI_HOSTING === 'strapi.cloud'
144
143
  };
145
144
  const res = await fetch(`${process.env.STRAPI_ANALYTICS_URL || 'https://analytics.strapi.io'}/submit-nps`, {
146
145
  method: 'POST',