@strapi/admin 5.34.0 → 5.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/admin/admin/src/components/Layouts/HeaderLayout.js +4 -1
  2. package/dist/admin/admin/src/components/Layouts/HeaderLayout.js.map +1 -1
  3. package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs +5 -2
  4. package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/NpsSurvey.js +2 -0
  6. package/dist/admin/admin/src/components/NpsSurvey.js.map +1 -1
  7. package/dist/admin/admin/src/components/NpsSurvey.mjs +2 -0
  8. package/dist/admin/admin/src/components/NpsSurvey.mjs.map +1 -1
  9. package/dist/admin/admin/src/components/SubNav.js +2 -2
  10. package/dist/admin/admin/src/components/SubNav.js.map +1 -1
  11. package/dist/admin/admin/src/components/SubNav.mjs +3 -3
  12. package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
  13. package/dist/admin/admin/src/constants/theme.js +2 -0
  14. package/dist/admin/admin/src/constants/theme.js.map +1 -1
  15. package/dist/admin/admin/src/constants/theme.mjs +2 -1
  16. package/dist/admin/admin/src/constants/theme.mjs.map +1 -1
  17. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
  18. package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.map +1 -1
  19. package/dist/admin/admin/src/pages/Auth/components/Register.js +51 -11
  20. package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
  21. package/dist/admin/admin/src/pages/Auth/components/Register.mjs +51 -11
  22. package/dist/admin/admin/src/pages/Auth/components/Register.mjs.map +1 -1
  23. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js +12 -3
  24. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js.map +1 -1
  25. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.mjs +12 -3
  26. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.mjs.map +1 -1
  27. package/dist/admin/admin/src/pages/Settings/pages/Users/utils/validation.js +12 -3
  28. package/dist/admin/admin/src/pages/Settings/pages/Users/utils/validation.js.map +1 -1
  29. package/dist/admin/admin/src/pages/Settings/pages/Users/utils/validation.mjs +12 -3
  30. package/dist/admin/admin/src/pages/Settings/pages/Users/utils/validation.mjs.map +1 -1
  31. package/dist/admin/admin/src/translations/ko.json.js +430 -96
  32. package/dist/admin/admin/src/translations/ko.json.js.map +1 -1
  33. package/dist/admin/admin/src/translations/ko.json.mjs +427 -97
  34. package/dist/admin/admin/src/translations/ko.json.mjs.map +1 -1
  35. package/dist/admin/index.js +3 -0
  36. package/dist/admin/index.js.map +1 -1
  37. package/dist/admin/index.mjs +1 -1
  38. package/dist/admin/src/constants/theme.d.ts +2 -1
  39. package/dist/admin/src/index.d.ts +1 -1
  40. package/package.json +7 -7
@@ -43,7 +43,10 @@ const BaseHeaderLayout = /*#__PURE__*/ React__namespace.forwardRef(({ navigation
43
43
  shadow: "tableShadow",
44
44
  width: `${width}px`,
45
45
  zIndex: 2,
46
- minHeight: theme.HEIGHT_TOP_NAVIGATION,
46
+ minHeight: {
47
+ initial: theme.HEIGHT_TOP_NAVIGATION,
48
+ medium: theme.HEIGHT_TOP_NAVIGATION_MEDIUM
49
+ },
47
50
  "data-strapi-header-sticky": true,
48
51
  children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
49
52
  alignItems: "center",
@@ -1 +1 @@
1
- {"version":3,"file":"HeaderLayout.js","sources":["../../../../../../admin/src/components/Layouts/HeaderLayout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Flex, Typography, TypographyProps, useCallbackRef } from '@strapi/design-system';\n\nimport { HEIGHT_TOP_NAVIGATION, RESPONSIVE_DEFAULT_SPACING } from '../../constants/theme';\nimport { useDeviceType } from '../../hooks/useDeviceType';\nimport { useElementOnScreen } from '../../hooks/useElementOnScreen';\nimport { useIsMobile } from '../../hooks/useMediaQuery';\n\n/* -------------------------------------------------------------------------------------------------\n * BaseHeaderLayout\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BaseHeaderLayoutProps extends Omit<TypographyProps<'div'>, 'tag'> {\n navigationAction?: React.ReactNode;\n primaryAction?: React.ReactNode;\n secondaryAction?: React.ReactNode;\n subtitle?: React.ReactNode;\n sticky?: boolean;\n width?: number;\n}\n\nconst BaseHeaderLayout = React.forwardRef<HTMLDivElement, BaseHeaderLayoutProps>(\n (\n { navigationAction, primaryAction, secondaryAction, subtitle, title, sticky, width, ...props },\n ref\n ) => {\n const isMobile = useIsMobile();\n const isSubtitleString = typeof subtitle === 'string';\n\n if (sticky) {\n return (\n <Box\n display=\"flex\"\n paddingLeft={6}\n paddingRight={6}\n paddingTop={2}\n paddingBottom={2}\n position=\"fixed\"\n top={0}\n background=\"neutral0\"\n shadow=\"tableShadow\"\n width={`${width}px`}\n zIndex={2}\n minHeight={HEIGHT_TOP_NAVIGATION}\n data-strapi-header-sticky\n >\n <Flex alignItems=\"center\" justifyContent=\"space-between\" wrap=\"wrap\" width=\"100%\">\n <Flex>\n {navigationAction && <Box paddingRight={3}>{navigationAction}</Box>}\n <Box>\n <Typography variant=\"beta\" tag=\"h1\" {...props}>\n {title}\n </Typography>\n {isSubtitleString ? (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n </Box>\n {secondaryAction ? <Box paddingLeft={4}>{secondaryAction}</Box> : null}\n </Flex>\n <Flex>{primaryAction ? <Box paddingLeft={2}>{primaryAction}</Box> : undefined}</Flex>\n </Flex>\n </Box>\n );\n }\n\n return (\n <Box\n ref={ref}\n paddingLeft={RESPONSIVE_DEFAULT_SPACING}\n paddingRight={RESPONSIVE_DEFAULT_SPACING}\n paddingBottom={{\n initial: 4,\n large: 8,\n }}\n paddingTop={{\n initial: 4,\n large: navigationAction ? 6 : 8,\n }}\n background=\"neutral100\"\n data-strapi-header\n >\n <Flex direction=\"column\" alignItems=\"initial\" gap={3}>\n {navigationAction}\n {!isMobile ? (\n <>\n <Flex justifyContent=\"space-between\" wrap=\"wrap\" gap={4}>\n <Flex minWidth={0}>\n <Typography\n tag=\"h1\"\n variant=\"alpha\"\n {...props}\n style={{\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n maxWidth: '100%',\n }}\n >\n {title}\n </Typography>\n {secondaryAction && <Box paddingLeft={4}>{secondaryAction}</Box>}\n </Flex>\n <Box paddingLeft={4} marginLeft=\"auto\">\n {primaryAction}\n </Box>\n </Flex>\n {isSubtitleString ? (\n <Typography variant=\"epsilon\" textColor=\"neutral600\" tag=\"p\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n </>\n ) : (\n <>\n <Typography\n tag=\"h1\"\n variant=\"alpha\"\n {...props}\n style={{\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n maxWidth: '100%',\n }}\n >\n {title}\n </Typography>\n {isSubtitleString ? (\n <Typography variant=\"epsilon\" textColor=\"neutral600\" tag=\"p\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n {(primaryAction || secondaryAction) && (\n <Flex gap={3}>\n {secondaryAction}\n {primaryAction}\n </Flex>\n )}\n </>\n )}\n </Flex>\n </Box>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderLayout\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderLayoutProps extends BaseHeaderLayoutProps {}\n\nconst HeaderLayout = (props: HeaderLayoutProps) => {\n const baseHeaderLayoutRef = React.useRef<HTMLDivElement>(null);\n const [headerSize, setHeaderSize] = React.useState<DOMRect | null>(null);\n const [isVisible, setIsVisible] = React.useState(true);\n const deviceType = useDeviceType();\n\n const containerRef = useElementOnScreen<HTMLDivElement>(setIsVisible, {\n root: null,\n rootMargin: '0px',\n threshold: 0,\n });\n\n useResizeObserver([containerRef, baseHeaderLayoutRef], () => {\n const headerContainer = baseHeaderLayoutRef.current ?? containerRef.current;\n\n if (headerContainer) {\n const newSize = headerContainer.getBoundingClientRect();\n\n setHeaderSize((prevSize) => {\n // Only update if size actually changed\n if (!prevSize || prevSize.height !== newSize.height || prevSize.width !== newSize.width) {\n return newSize;\n }\n return prevSize;\n });\n }\n });\n\n React.useEffect(() => {\n if (baseHeaderLayoutRef.current || containerRef.current) {\n const headerContainer = baseHeaderLayoutRef.current ?? containerRef.current;\n setHeaderSize(headerContainer?.getBoundingClientRect() ?? null);\n }\n }, [containerRef]);\n\n if (deviceType === 'mobile') {\n return <BaseHeaderLayout {...props} />;\n }\n\n return (\n <div ref={containerRef}>\n <div style={{ height: headerSize?.height }}>\n {isVisible && <BaseHeaderLayout ref={baseHeaderLayoutRef} {...props} />}\n </div>\n\n {!isVisible && <BaseHeaderLayout {...props} sticky width={headerSize?.width} />}\n </div>\n );\n};\n\nHeaderLayout.displayName = 'HeaderLayout';\n\n/**\n * useResizeObserver: hook that observes the size of an element and calls a callback when it changes.\n */\nconst useResizeObserver = (\n sources: React.RefObject<HTMLElement> | React.RefObject<HTMLElement>[],\n onResize: ResizeObserverCallback\n) => {\n const handleResize = useCallbackRef(onResize);\n\n React.useLayoutEffect(() => {\n const resizeObs = new ResizeObserver(handleResize);\n\n if (Array.isArray(sources)) {\n sources.forEach((source) => {\n if (source.current) {\n resizeObs.observe(source.current);\n }\n });\n } else if (sources.current) {\n resizeObs.observe(sources.current);\n }\n\n return () => {\n resizeObs.disconnect();\n };\n }, [sources, handleResize]);\n};\n\nexport type { HeaderLayoutProps, BaseHeaderLayoutProps };\nexport { HeaderLayout, BaseHeaderLayout };\n"],"names":["BaseHeaderLayout","React","forwardRef","navigationAction","primaryAction","secondaryAction","subtitle","title","sticky","width","props","ref","isMobile","useIsMobile","isSubtitleString","_jsx","Box","display","paddingLeft","paddingRight","paddingTop","paddingBottom","position","top","background","shadow","zIndex","minHeight","HEIGHT_TOP_NAVIGATION","data-strapi-header-sticky","_jsxs","Flex","alignItems","justifyContent","wrap","Typography","variant","tag","textColor","undefined","RESPONSIVE_DEFAULT_SPACING","initial","large","data-strapi-header","direction","gap","_Fragment","minWidth","style","wordBreak","overflowWrap","maxWidth","marginLeft","HeaderLayout","baseHeaderLayoutRef","useRef","headerSize","setHeaderSize","useState","isVisible","setIsVisible","deviceType","useDeviceType","containerRef","useElementOnScreen","root","rootMargin","threshold","useResizeObserver","headerContainer","current","newSize","getBoundingClientRect","prevSize","height","useEffect","div","displayName","sources","onResize","handleResize","useCallbackRef","useLayoutEffect","resizeObs","ResizeObserver","Array","isArray","forEach","source","observe","disconnect"],"mappings":"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"}
1
+ {"version":3,"file":"HeaderLayout.js","sources":["../../../../../../admin/src/components/Layouts/HeaderLayout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Flex, Typography, TypographyProps, useCallbackRef } from '@strapi/design-system';\n\nimport {\n HEIGHT_TOP_NAVIGATION,\n HEIGHT_TOP_NAVIGATION_MEDIUM,\n RESPONSIVE_DEFAULT_SPACING,\n} from '../../constants/theme';\nimport { useDeviceType } from '../../hooks/useDeviceType';\nimport { useElementOnScreen } from '../../hooks/useElementOnScreen';\nimport { useIsMobile } from '../../hooks/useMediaQuery';\n\n/* -------------------------------------------------------------------------------------------------\n * BaseHeaderLayout\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BaseHeaderLayoutProps extends Omit<TypographyProps<'div'>, 'tag'> {\n navigationAction?: React.ReactNode;\n primaryAction?: React.ReactNode;\n secondaryAction?: React.ReactNode;\n subtitle?: React.ReactNode;\n sticky?: boolean;\n width?: number;\n}\n\nconst BaseHeaderLayout = React.forwardRef<HTMLDivElement, BaseHeaderLayoutProps>(\n (\n { navigationAction, primaryAction, secondaryAction, subtitle, title, sticky, width, ...props },\n ref\n ) => {\n const isMobile = useIsMobile();\n const isSubtitleString = typeof subtitle === 'string';\n\n if (sticky) {\n return (\n <Box\n display=\"flex\"\n paddingLeft={6}\n paddingRight={6}\n paddingTop={2}\n paddingBottom={2}\n position=\"fixed\"\n top={0}\n background=\"neutral0\"\n shadow=\"tableShadow\"\n width={`${width}px`}\n zIndex={2}\n minHeight={{\n initial: HEIGHT_TOP_NAVIGATION,\n medium: HEIGHT_TOP_NAVIGATION_MEDIUM,\n }}\n data-strapi-header-sticky\n >\n <Flex alignItems=\"center\" justifyContent=\"space-between\" wrap=\"wrap\" width=\"100%\">\n <Flex>\n {navigationAction && <Box paddingRight={3}>{navigationAction}</Box>}\n <Box>\n <Typography variant=\"beta\" tag=\"h1\" {...props}>\n {title}\n </Typography>\n {isSubtitleString ? (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n </Box>\n {secondaryAction ? <Box paddingLeft={4}>{secondaryAction}</Box> : null}\n </Flex>\n <Flex>{primaryAction ? <Box paddingLeft={2}>{primaryAction}</Box> : undefined}</Flex>\n </Flex>\n </Box>\n );\n }\n\n return (\n <Box\n ref={ref}\n paddingLeft={RESPONSIVE_DEFAULT_SPACING}\n paddingRight={RESPONSIVE_DEFAULT_SPACING}\n paddingBottom={{\n initial: 4,\n large: 8,\n }}\n paddingTop={{\n initial: 4,\n large: navigationAction ? 6 : 8,\n }}\n background=\"neutral100\"\n data-strapi-header\n >\n <Flex direction=\"column\" alignItems=\"initial\" gap={3}>\n {navigationAction}\n {!isMobile ? (\n <>\n <Flex justifyContent=\"space-between\" wrap=\"wrap\" gap={4}>\n <Flex minWidth={0}>\n <Typography\n tag=\"h1\"\n variant=\"alpha\"\n {...props}\n style={{\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n maxWidth: '100%',\n }}\n >\n {title}\n </Typography>\n {secondaryAction && <Box paddingLeft={4}>{secondaryAction}</Box>}\n </Flex>\n <Box paddingLeft={4} marginLeft=\"auto\">\n {primaryAction}\n </Box>\n </Flex>\n {isSubtitleString ? (\n <Typography variant=\"epsilon\" textColor=\"neutral600\" tag=\"p\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n </>\n ) : (\n <>\n <Typography\n tag=\"h1\"\n variant=\"alpha\"\n {...props}\n style={{\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n maxWidth: '100%',\n }}\n >\n {title}\n </Typography>\n {isSubtitleString ? (\n <Typography variant=\"epsilon\" textColor=\"neutral600\" tag=\"p\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n {(primaryAction || secondaryAction) && (\n <Flex gap={3}>\n {secondaryAction}\n {primaryAction}\n </Flex>\n )}\n </>\n )}\n </Flex>\n </Box>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderLayout\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderLayoutProps extends BaseHeaderLayoutProps {}\n\nconst HeaderLayout = (props: HeaderLayoutProps) => {\n const baseHeaderLayoutRef = React.useRef<HTMLDivElement>(null);\n const [headerSize, setHeaderSize] = React.useState<DOMRect | null>(null);\n const [isVisible, setIsVisible] = React.useState(true);\n const deviceType = useDeviceType();\n\n const containerRef = useElementOnScreen<HTMLDivElement>(setIsVisible, {\n root: null,\n rootMargin: '0px',\n threshold: 0,\n });\n\n useResizeObserver([containerRef, baseHeaderLayoutRef], () => {\n const headerContainer = baseHeaderLayoutRef.current ?? containerRef.current;\n\n if (headerContainer) {\n const newSize = headerContainer.getBoundingClientRect();\n\n setHeaderSize((prevSize) => {\n // Only update if size actually changed\n if (!prevSize || prevSize.height !== newSize.height || prevSize.width !== newSize.width) {\n return newSize;\n }\n return prevSize;\n });\n }\n });\n\n React.useEffect(() => {\n if (baseHeaderLayoutRef.current || containerRef.current) {\n const headerContainer = baseHeaderLayoutRef.current ?? containerRef.current;\n setHeaderSize(headerContainer?.getBoundingClientRect() ?? null);\n }\n }, [containerRef]);\n\n if (deviceType === 'mobile') {\n return <BaseHeaderLayout {...props} />;\n }\n\n return (\n <div ref={containerRef}>\n <div style={{ height: headerSize?.height }}>\n {isVisible && <BaseHeaderLayout ref={baseHeaderLayoutRef} {...props} />}\n </div>\n\n {!isVisible && <BaseHeaderLayout {...props} sticky width={headerSize?.width} />}\n </div>\n );\n};\n\nHeaderLayout.displayName = 'HeaderLayout';\n\n/**\n * useResizeObserver: hook that observes the size of an element and calls a callback when it changes.\n */\nconst useResizeObserver = (\n sources: React.RefObject<HTMLElement> | React.RefObject<HTMLElement>[],\n onResize: ResizeObserverCallback\n) => {\n const handleResize = useCallbackRef(onResize);\n\n React.useLayoutEffect(() => {\n const resizeObs = new ResizeObserver(handleResize);\n\n if (Array.isArray(sources)) {\n sources.forEach((source) => {\n if (source.current) {\n resizeObs.observe(source.current);\n }\n });\n } else if (sources.current) {\n resizeObs.observe(sources.current);\n }\n\n return () => {\n resizeObs.disconnect();\n };\n }, [sources, handleResize]);\n};\n\nexport type { HeaderLayoutProps, BaseHeaderLayoutProps };\nexport { HeaderLayout, BaseHeaderLayout };\n"],"names":["BaseHeaderLayout","React","forwardRef","navigationAction","primaryAction","secondaryAction","subtitle","title","sticky","width","props","ref","isMobile","useIsMobile","isSubtitleString","_jsx","Box","display","paddingLeft","paddingRight","paddingTop","paddingBottom","position","top","background","shadow","zIndex","minHeight","initial","HEIGHT_TOP_NAVIGATION","medium","HEIGHT_TOP_NAVIGATION_MEDIUM","data-strapi-header-sticky","_jsxs","Flex","alignItems","justifyContent","wrap","Typography","variant","tag","textColor","undefined","RESPONSIVE_DEFAULT_SPACING","large","data-strapi-header","direction","gap","_Fragment","minWidth","style","wordBreak","overflowWrap","maxWidth","marginLeft","HeaderLayout","baseHeaderLayoutRef","useRef","headerSize","setHeaderSize","useState","isVisible","setIsVisible","deviceType","useDeviceType","containerRef","useElementOnScreen","root","rootMargin","threshold","useResizeObserver","headerContainer","current","newSize","getBoundingClientRect","prevSize","height","useEffect","div","displayName","sources","onResize","handleResize","useCallbackRef","useLayoutEffect","resizeObs","ResizeObserver","Array","isArray","forEach","source","observe","disconnect"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
  import { Box, Flex, Typography, useCallbackRef } from '@strapi/design-system';
4
- import { HEIGHT_TOP_NAVIGATION, RESPONSIVE_DEFAULT_SPACING } from '../../constants/theme.mjs';
4
+ import { HEIGHT_TOP_NAVIGATION, HEIGHT_TOP_NAVIGATION_MEDIUM, RESPONSIVE_DEFAULT_SPACING } from '../../constants/theme.mjs';
5
5
  import { useDeviceType } from '../../hooks/useDeviceType.mjs';
6
6
  import { useElementOnScreen } from '../../hooks/useElementOnScreen.mjs';
7
7
  import { useIsMobile } from '../../hooks/useMediaQuery.mjs';
@@ -22,7 +22,10 @@ const BaseHeaderLayout = /*#__PURE__*/ React.forwardRef(({ navigationAction, pri
22
22
  shadow: "tableShadow",
23
23
  width: `${width}px`,
24
24
  zIndex: 2,
25
- minHeight: HEIGHT_TOP_NAVIGATION,
25
+ minHeight: {
26
+ initial: HEIGHT_TOP_NAVIGATION,
27
+ medium: HEIGHT_TOP_NAVIGATION_MEDIUM
28
+ },
26
29
  "data-strapi-header-sticky": true,
27
30
  children: /*#__PURE__*/ jsxs(Flex, {
28
31
  alignItems: "center",
@@ -1 +1 @@
1
- {"version":3,"file":"HeaderLayout.mjs","sources":["../../../../../../admin/src/components/Layouts/HeaderLayout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Flex, Typography, TypographyProps, useCallbackRef } from '@strapi/design-system';\n\nimport { HEIGHT_TOP_NAVIGATION, RESPONSIVE_DEFAULT_SPACING } from '../../constants/theme';\nimport { useDeviceType } from '../../hooks/useDeviceType';\nimport { useElementOnScreen } from '../../hooks/useElementOnScreen';\nimport { useIsMobile } from '../../hooks/useMediaQuery';\n\n/* -------------------------------------------------------------------------------------------------\n * BaseHeaderLayout\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BaseHeaderLayoutProps extends Omit<TypographyProps<'div'>, 'tag'> {\n navigationAction?: React.ReactNode;\n primaryAction?: React.ReactNode;\n secondaryAction?: React.ReactNode;\n subtitle?: React.ReactNode;\n sticky?: boolean;\n width?: number;\n}\n\nconst BaseHeaderLayout = React.forwardRef<HTMLDivElement, BaseHeaderLayoutProps>(\n (\n { navigationAction, primaryAction, secondaryAction, subtitle, title, sticky, width, ...props },\n ref\n ) => {\n const isMobile = useIsMobile();\n const isSubtitleString = typeof subtitle === 'string';\n\n if (sticky) {\n return (\n <Box\n display=\"flex\"\n paddingLeft={6}\n paddingRight={6}\n paddingTop={2}\n paddingBottom={2}\n position=\"fixed\"\n top={0}\n background=\"neutral0\"\n shadow=\"tableShadow\"\n width={`${width}px`}\n zIndex={2}\n minHeight={HEIGHT_TOP_NAVIGATION}\n data-strapi-header-sticky\n >\n <Flex alignItems=\"center\" justifyContent=\"space-between\" wrap=\"wrap\" width=\"100%\">\n <Flex>\n {navigationAction && <Box paddingRight={3}>{navigationAction}</Box>}\n <Box>\n <Typography variant=\"beta\" tag=\"h1\" {...props}>\n {title}\n </Typography>\n {isSubtitleString ? (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n </Box>\n {secondaryAction ? <Box paddingLeft={4}>{secondaryAction}</Box> : null}\n </Flex>\n <Flex>{primaryAction ? <Box paddingLeft={2}>{primaryAction}</Box> : undefined}</Flex>\n </Flex>\n </Box>\n );\n }\n\n return (\n <Box\n ref={ref}\n paddingLeft={RESPONSIVE_DEFAULT_SPACING}\n paddingRight={RESPONSIVE_DEFAULT_SPACING}\n paddingBottom={{\n initial: 4,\n large: 8,\n }}\n paddingTop={{\n initial: 4,\n large: navigationAction ? 6 : 8,\n }}\n background=\"neutral100\"\n data-strapi-header\n >\n <Flex direction=\"column\" alignItems=\"initial\" gap={3}>\n {navigationAction}\n {!isMobile ? (\n <>\n <Flex justifyContent=\"space-between\" wrap=\"wrap\" gap={4}>\n <Flex minWidth={0}>\n <Typography\n tag=\"h1\"\n variant=\"alpha\"\n {...props}\n style={{\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n maxWidth: '100%',\n }}\n >\n {title}\n </Typography>\n {secondaryAction && <Box paddingLeft={4}>{secondaryAction}</Box>}\n </Flex>\n <Box paddingLeft={4} marginLeft=\"auto\">\n {primaryAction}\n </Box>\n </Flex>\n {isSubtitleString ? (\n <Typography variant=\"epsilon\" textColor=\"neutral600\" tag=\"p\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n </>\n ) : (\n <>\n <Typography\n tag=\"h1\"\n variant=\"alpha\"\n {...props}\n style={{\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n maxWidth: '100%',\n }}\n >\n {title}\n </Typography>\n {isSubtitleString ? (\n <Typography variant=\"epsilon\" textColor=\"neutral600\" tag=\"p\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n {(primaryAction || secondaryAction) && (\n <Flex gap={3}>\n {secondaryAction}\n {primaryAction}\n </Flex>\n )}\n </>\n )}\n </Flex>\n </Box>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderLayout\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderLayoutProps extends BaseHeaderLayoutProps {}\n\nconst HeaderLayout = (props: HeaderLayoutProps) => {\n const baseHeaderLayoutRef = React.useRef<HTMLDivElement>(null);\n const [headerSize, setHeaderSize] = React.useState<DOMRect | null>(null);\n const [isVisible, setIsVisible] = React.useState(true);\n const deviceType = useDeviceType();\n\n const containerRef = useElementOnScreen<HTMLDivElement>(setIsVisible, {\n root: null,\n rootMargin: '0px',\n threshold: 0,\n });\n\n useResizeObserver([containerRef, baseHeaderLayoutRef], () => {\n const headerContainer = baseHeaderLayoutRef.current ?? containerRef.current;\n\n if (headerContainer) {\n const newSize = headerContainer.getBoundingClientRect();\n\n setHeaderSize((prevSize) => {\n // Only update if size actually changed\n if (!prevSize || prevSize.height !== newSize.height || prevSize.width !== newSize.width) {\n return newSize;\n }\n return prevSize;\n });\n }\n });\n\n React.useEffect(() => {\n if (baseHeaderLayoutRef.current || containerRef.current) {\n const headerContainer = baseHeaderLayoutRef.current ?? containerRef.current;\n setHeaderSize(headerContainer?.getBoundingClientRect() ?? null);\n }\n }, [containerRef]);\n\n if (deviceType === 'mobile') {\n return <BaseHeaderLayout {...props} />;\n }\n\n return (\n <div ref={containerRef}>\n <div style={{ height: headerSize?.height }}>\n {isVisible && <BaseHeaderLayout ref={baseHeaderLayoutRef} {...props} />}\n </div>\n\n {!isVisible && <BaseHeaderLayout {...props} sticky width={headerSize?.width} />}\n </div>\n );\n};\n\nHeaderLayout.displayName = 'HeaderLayout';\n\n/**\n * useResizeObserver: hook that observes the size of an element and calls a callback when it changes.\n */\nconst useResizeObserver = (\n sources: React.RefObject<HTMLElement> | React.RefObject<HTMLElement>[],\n onResize: ResizeObserverCallback\n) => {\n const handleResize = useCallbackRef(onResize);\n\n React.useLayoutEffect(() => {\n const resizeObs = new ResizeObserver(handleResize);\n\n if (Array.isArray(sources)) {\n sources.forEach((source) => {\n if (source.current) {\n resizeObs.observe(source.current);\n }\n });\n } else if (sources.current) {\n resizeObs.observe(sources.current);\n }\n\n return () => {\n resizeObs.disconnect();\n };\n }, [sources, handleResize]);\n};\n\nexport type { HeaderLayoutProps, BaseHeaderLayoutProps };\nexport { HeaderLayout, BaseHeaderLayout };\n"],"names":["BaseHeaderLayout","React","forwardRef","navigationAction","primaryAction","secondaryAction","subtitle","title","sticky","width","props","ref","isMobile","useIsMobile","isSubtitleString","_jsx","Box","display","paddingLeft","paddingRight","paddingTop","paddingBottom","position","top","background","shadow","zIndex","minHeight","HEIGHT_TOP_NAVIGATION","data-strapi-header-sticky","_jsxs","Flex","alignItems","justifyContent","wrap","Typography","variant","tag","textColor","undefined","RESPONSIVE_DEFAULT_SPACING","initial","large","data-strapi-header","direction","gap","_Fragment","minWidth","style","wordBreak","overflowWrap","maxWidth","marginLeft","HeaderLayout","baseHeaderLayoutRef","useRef","headerSize","setHeaderSize","useState","isVisible","setIsVisible","deviceType","useDeviceType","containerRef","useElementOnScreen","root","rootMargin","threshold","useResizeObserver","headerContainer","current","newSize","getBoundingClientRect","prevSize","height","useEffect","div","displayName","sources","onResize","handleResize","useCallbackRef","useLayoutEffect","resizeObs","ResizeObserver","Array","isArray","forEach","source","observe","disconnect"],"mappings":";;;;;;;;AAsBMA,MAAAA,gBAAAA,iBAAmBC,MAAMC,UAAU,CACvC,CACE,EAAEC,gBAAgB,EAAEC,aAAa,EAAEC,eAAe,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,MAAM,EAAEC,KAAK,EAAE,GAAGC,KAAAA,EAAO,EAC9FC,GAAAA,GAAAA;AAEA,IAAA,MAAMC,QAAWC,GAAAA,WAAAA,EAAAA;IACjB,MAAMC,gBAAAA,GAAmB,OAAOR,QAAa,KAAA,QAAA;AAE7C,IAAA,IAAIE,MAAQ,EAAA;AACV,QAAA,qBACEO,GAACC,CAAAA,GAAAA,EAAAA;YACCC,OAAQ,EAAA,MAAA;YACRC,WAAa,EAAA,CAAA;YACbC,YAAc,EAAA,CAAA;YACdC,UAAY,EAAA,CAAA;YACZC,aAAe,EAAA,CAAA;YACfC,QAAS,EAAA,OAAA;YACTC,GAAK,EAAA,CAAA;YACLC,UAAW,EAAA,UAAA;YACXC,MAAO,EAAA,aAAA;YACPhB,KAAO,EAAA,CAAA,EAAGA,KAAM,CAAA,EAAE,CAAC;YACnBiB,MAAQ,EAAA,CAAA;YACRC,SAAWC,EAAAA,qBAAAA;YACXC,2BAAyB,EAAA,IAAA;AAEzB,YAAA,QAAA,gBAAAC,IAACC,CAAAA,IAAAA,EAAAA;gBAAKC,UAAW,EAAA,QAAA;gBAASC,cAAe,EAAA,eAAA;gBAAgBC,IAAK,EAAA,MAAA;gBAAOzB,KAAM,EAAA,MAAA;;kCACzEqB,IAACC,CAAAA,IAAAA,EAAAA;;AACE5B,4BAAAA,gBAAAA,kBAAoBY,GAACC,CAAAA,GAAAA,EAAAA;gCAAIG,YAAc,EAAA,CAAA;AAAIhB,gCAAAA,QAAAA,EAAAA;;0CAC5C2B,IAACd,CAAAA,GAAAA,EAAAA;;kDACCD,GAACoB,CAAAA,UAAAA,EAAAA;wCAAWC,OAAQ,EAAA,MAAA;wCAAOC,GAAI,EAAA,IAAA;AAAM,wCAAA,GAAG3B,KAAK;AAC1CH,wCAAAA,QAAAA,EAAAA;;AAEFO,oCAAAA,gBAAAA,iBACCC,GAACoB,CAAAA,UAAAA,EAAAA;wCAAWC,OAAQ,EAAA,IAAA;wCAAKE,SAAU,EAAA,YAAA;AAChChC,wCAAAA,QAAAA,EAAAA;AAGHA,qCAAAA,CAAAA,GAAAA;;;AAGHD,4BAAAA,eAAAA,iBAAkBU,GAACC,CAAAA,GAAAA,EAAAA;gCAAIE,WAAa,EAAA,CAAA;AAAIb,gCAAAA,QAAAA,EAAAA;AAAyB,6BAAA,CAAA,GAAA;;;kCAEpEU,GAACgB,CAAAA,IAAAA,EAAAA;AAAM3B,wBAAAA,QAAAA,EAAAA,aAAAA,iBAAgBW,GAACC,CAAAA,GAAAA,EAAAA;4BAAIE,WAAa,EAAA,CAAA;AAAId,4BAAAA,QAAAA,EAAAA;AAAuBmC,yBAAAA,CAAAA,GAAAA;;;;;AAI5E;AAEA,IAAA,qBACExB,GAACC,CAAAA,GAAAA,EAAAA;QACCL,GAAKA,EAAAA,GAAAA;QACLO,WAAasB,EAAAA,0BAAAA;QACbrB,YAAcqB,EAAAA,0BAAAA;QACdnB,aAAe,EAAA;YACboB,OAAS,EAAA,CAAA;YACTC,KAAO,EAAA;AACT,SAAA;QACAtB,UAAY,EAAA;YACVqB,OAAS,EAAA,CAAA;AACTC,YAAAA,KAAAA,EAAOvC,mBAAmB,CAAI,GAAA;AAChC,SAAA;QACAqB,UAAW,EAAA,YAAA;QACXmB,oBAAkB,EAAA,IAAA;AAElB,QAAA,QAAA,gBAAAb,IAACC,CAAAA,IAAAA,EAAAA;YAAKa,SAAU,EAAA,QAAA;YAASZ,UAAW,EAAA,SAAA;YAAUa,GAAK,EAAA,CAAA;;AAChD1C,gBAAAA,gBAAAA;AACA,gBAAA,CAACS,QACA,iBAAAkB,IAAA,CAAAgB,QAAA,EAAA;;sCACEhB,IAACC,CAAAA,IAAAA,EAAAA;4BAAKE,cAAe,EAAA,eAAA;4BAAgBC,IAAK,EAAA,MAAA;4BAAOW,GAAK,EAAA,CAAA;;8CACpDf,IAACC,CAAAA,IAAAA,EAAAA;oCAAKgB,QAAU,EAAA,CAAA;;sDACdhC,GAACoB,CAAAA,UAAAA,EAAAA;4CACCE,GAAI,EAAA,IAAA;4CACJD,OAAQ,EAAA,OAAA;AACP,4CAAA,GAAG1B,KAAK;4CACTsC,KAAO,EAAA;gDACLC,SAAW,EAAA,YAAA;gDACXC,YAAc,EAAA,YAAA;gDACdC,QAAU,EAAA;AACZ,6CAAA;AAEC5C,4CAAAA,QAAAA,EAAAA;;AAEFF,wCAAAA,eAAAA,kBAAmBU,GAACC,CAAAA,GAAAA,EAAAA;4CAAIE,WAAa,EAAA,CAAA;AAAIb,4CAAAA,QAAAA,EAAAA;;;;8CAE5CU,GAACC,CAAAA,GAAAA,EAAAA;oCAAIE,WAAa,EAAA,CAAA;oCAAGkC,UAAW,EAAA,MAAA;AAC7BhD,oCAAAA,QAAAA,EAAAA;;;;AAGJU,wBAAAA,gBAAAA,iBACCC,GAACoB,CAAAA,UAAAA,EAAAA;4BAAWC,OAAQ,EAAA,SAAA;4BAAUE,SAAU,EAAA,YAAA;4BAAaD,GAAI,EAAA,GAAA;AACtD/B,4BAAAA,QAAAA,EAAAA;AAGHA,yBAAAA,CAAAA,GAAAA;;AAIJ,iBAAA,CAAA,iBAAAwB,IAAA,CAAAgB,QAAA,EAAA;;sCACE/B,GAACoB,CAAAA,UAAAA,EAAAA;4BACCE,GAAI,EAAA,IAAA;4BACJD,OAAQ,EAAA,OAAA;AACP,4BAAA,GAAG1B,KAAK;4BACTsC,KAAO,EAAA;gCACLC,SAAW,EAAA,YAAA;gCACXC,YAAc,EAAA,YAAA;gCACdC,QAAU,EAAA;AACZ,6BAAA;AAEC5C,4BAAAA,QAAAA,EAAAA;;AAEFO,wBAAAA,gBAAAA,iBACCC,GAACoB,CAAAA,UAAAA,EAAAA;4BAAWC,OAAQ,EAAA,SAAA;4BAAUE,SAAU,EAAA,YAAA;4BAAaD,GAAI,EAAA,GAAA;AACtD/B,4BAAAA,QAAAA,EAAAA;AAGHA,yBAAAA,CAAAA,GAAAA,QAAAA;wBAEAF,CAAAA,aAAAA,IAAiBC,eAAc,mBAC/ByB,IAACC,CAAAA,IAAAA,EAAAA;4BAAKc,GAAK,EAAA,CAAA;;AACRxC,gCAAAA,eAAAA;AACAD,gCAAAA;;;;;;;;AAQjB,CAAA;AASF,MAAMiD,eAAe,CAAC3C,KAAAA,GAAAA;IACpB,MAAM4C,mBAAAA,GAAsBrD,KAAMsD,CAAAA,MAAM,CAAiB,IAAA,CAAA;AACzD,IAAA,MAAM,CAACC,UAAYC,EAAAA,aAAAA,CAAc,GAAGxD,KAAAA,CAAMyD,QAAQ,CAAiB,IAAA,CAAA;AACnE,IAAA,MAAM,CAACC,SAAWC,EAAAA,YAAAA,CAAa,GAAG3D,KAAAA,CAAMyD,QAAQ,CAAC,IAAA,CAAA;AACjD,IAAA,MAAMG,UAAaC,GAAAA,aAAAA,EAAAA;IAEnB,MAAMC,YAAAA,GAAeC,mBAAmCJ,YAAc,EAAA;QACpEK,IAAM,EAAA,IAAA;QACNC,UAAY,EAAA,KAAA;QACZC,SAAW,EAAA;AACb,KAAA,CAAA;IAEAC,iBAAkB,CAAA;AAACL,QAAAA,YAAAA;AAAcT,QAAAA;KAAoB,EAAE,IAAA;AACrD,QAAA,MAAMe,eAAkBf,GAAAA,mBAAAA,CAAoBgB,OAAO,IAAIP,aAAaO,OAAO;AAE3E,QAAA,IAAID,eAAiB,EAAA;YACnB,MAAME,OAAAA,GAAUF,gBAAgBG,qBAAqB,EAAA;AAErDf,YAAAA,aAAAA,CAAc,CAACgB,QAAAA,GAAAA;;AAEb,gBAAA,IAAI,CAACA,QAAAA,IAAYA,QAASC,CAAAA,MAAM,KAAKH,OAAAA,CAAQG,MAAM,IAAID,QAAShE,CAAAA,KAAK,KAAK8D,OAAAA,CAAQ9D,KAAK,EAAE;oBACvF,OAAO8D,OAAAA;AACT;gBACA,OAAOE,QAAAA;AACT,aAAA,CAAA;AACF;AACF,KAAA,CAAA;AAEAxE,IAAAA,KAAAA,CAAM0E,SAAS,CAAC,IAAA;AACd,QAAA,IAAIrB,mBAAoBgB,CAAAA,OAAO,IAAIP,YAAAA,CAAaO,OAAO,EAAE;AACvD,YAAA,MAAMD,eAAkBf,GAAAA,mBAAAA,CAAoBgB,OAAO,IAAIP,aAAaO,OAAO;AAC3Eb,YAAAA,aAAAA,CAAcY,iBAAiBG,qBAA2B,EAAA,IAAA,IAAA,CAAA;AAC5D;KACC,EAAA;AAACT,QAAAA;AAAa,KAAA,CAAA;AAEjB,IAAA,IAAIF,eAAe,QAAU,EAAA;AAC3B,QAAA,qBAAO9C,GAACf,CAAAA,gBAAAA,EAAAA;AAAkB,YAAA,GAAGU;;AAC/B;AAEA,IAAA,qBACEoB,IAAC8C,CAAAA,KAAAA,EAAAA;QAAIjE,GAAKoD,EAAAA,YAAAA;;0BACRhD,GAAC6D,CAAAA,KAAAA,EAAAA;gBAAI5B,KAAO,EAAA;AAAE0B,oBAAAA,MAAAA,EAAQlB,UAAYkB,EAAAA;AAAO,iBAAA;AACtCf,gBAAAA,QAAAA,EAAAA,SAAAA,kBAAa5C,GAACf,CAAAA,gBAAAA,EAAAA;oBAAiBW,GAAK2C,EAAAA,mBAAAA;AAAsB,oBAAA,GAAG5C;;;AAG/D,YAAA,CAACiD,2BAAa5C,GAACf,CAAAA,gBAAAA,EAAAA;AAAkB,gBAAA,GAAGU,KAAK;gBAAEF,MAAM,EAAA,IAAA;AAACC,gBAAAA,KAAAA,EAAO+C,UAAY/C,EAAAA;;;;AAG5E;AAEA4C,YAAAA,CAAawB,WAAW,GAAG,cAAA;AAE3B;;IAGA,MAAMT,iBAAoB,GAAA,CACxBU,OACAC,EAAAA,QAAAA,GAAAA;AAEA,IAAA,MAAMC,eAAeC,cAAeF,CAAAA,QAAAA,CAAAA;AAEpC9E,IAAAA,KAAAA,CAAMiF,eAAe,CAAC,IAAA;QACpB,MAAMC,SAAAA,GAAY,IAAIC,cAAeJ,CAAAA,YAAAA,CAAAA;QAErC,IAAIK,KAAAA,CAAMC,OAAO,CAACR,OAAU,CAAA,EAAA;YAC1BA,OAAQS,CAAAA,OAAO,CAAC,CAACC,MAAAA,GAAAA;gBACf,IAAIA,MAAAA,CAAOlB,OAAO,EAAE;oBAClBa,SAAUM,CAAAA,OAAO,CAACD,MAAAA,CAAOlB,OAAO,CAAA;AAClC;AACF,aAAA,CAAA;SACK,MAAA,IAAIQ,OAAQR,CAAAA,OAAO,EAAE;YAC1Ba,SAAUM,CAAAA,OAAO,CAACX,OAAAA,CAAQR,OAAO,CAAA;AACnC;QAEA,OAAO,IAAA;AACLa,YAAAA,SAAAA,CAAUO,UAAU,EAAA;AACtB,SAAA;KACC,EAAA;AAACZ,QAAAA,OAAAA;AAASE,QAAAA;AAAa,KAAA,CAAA;AAC5B,CAAA;;;;"}
1
+ {"version":3,"file":"HeaderLayout.mjs","sources":["../../../../../../admin/src/components/Layouts/HeaderLayout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Flex, Typography, TypographyProps, useCallbackRef } from '@strapi/design-system';\n\nimport {\n HEIGHT_TOP_NAVIGATION,\n HEIGHT_TOP_NAVIGATION_MEDIUM,\n RESPONSIVE_DEFAULT_SPACING,\n} from '../../constants/theme';\nimport { useDeviceType } from '../../hooks/useDeviceType';\nimport { useElementOnScreen } from '../../hooks/useElementOnScreen';\nimport { useIsMobile } from '../../hooks/useMediaQuery';\n\n/* -------------------------------------------------------------------------------------------------\n * BaseHeaderLayout\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BaseHeaderLayoutProps extends Omit<TypographyProps<'div'>, 'tag'> {\n navigationAction?: React.ReactNode;\n primaryAction?: React.ReactNode;\n secondaryAction?: React.ReactNode;\n subtitle?: React.ReactNode;\n sticky?: boolean;\n width?: number;\n}\n\nconst BaseHeaderLayout = React.forwardRef<HTMLDivElement, BaseHeaderLayoutProps>(\n (\n { navigationAction, primaryAction, secondaryAction, subtitle, title, sticky, width, ...props },\n ref\n ) => {\n const isMobile = useIsMobile();\n const isSubtitleString = typeof subtitle === 'string';\n\n if (sticky) {\n return (\n <Box\n display=\"flex\"\n paddingLeft={6}\n paddingRight={6}\n paddingTop={2}\n paddingBottom={2}\n position=\"fixed\"\n top={0}\n background=\"neutral0\"\n shadow=\"tableShadow\"\n width={`${width}px`}\n zIndex={2}\n minHeight={{\n initial: HEIGHT_TOP_NAVIGATION,\n medium: HEIGHT_TOP_NAVIGATION_MEDIUM,\n }}\n data-strapi-header-sticky\n >\n <Flex alignItems=\"center\" justifyContent=\"space-between\" wrap=\"wrap\" width=\"100%\">\n <Flex>\n {navigationAction && <Box paddingRight={3}>{navigationAction}</Box>}\n <Box>\n <Typography variant=\"beta\" tag=\"h1\" {...props}>\n {title}\n </Typography>\n {isSubtitleString ? (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n </Box>\n {secondaryAction ? <Box paddingLeft={4}>{secondaryAction}</Box> : null}\n </Flex>\n <Flex>{primaryAction ? <Box paddingLeft={2}>{primaryAction}</Box> : undefined}</Flex>\n </Flex>\n </Box>\n );\n }\n\n return (\n <Box\n ref={ref}\n paddingLeft={RESPONSIVE_DEFAULT_SPACING}\n paddingRight={RESPONSIVE_DEFAULT_SPACING}\n paddingBottom={{\n initial: 4,\n large: 8,\n }}\n paddingTop={{\n initial: 4,\n large: navigationAction ? 6 : 8,\n }}\n background=\"neutral100\"\n data-strapi-header\n >\n <Flex direction=\"column\" alignItems=\"initial\" gap={3}>\n {navigationAction}\n {!isMobile ? (\n <>\n <Flex justifyContent=\"space-between\" wrap=\"wrap\" gap={4}>\n <Flex minWidth={0}>\n <Typography\n tag=\"h1\"\n variant=\"alpha\"\n {...props}\n style={{\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n maxWidth: '100%',\n }}\n >\n {title}\n </Typography>\n {secondaryAction && <Box paddingLeft={4}>{secondaryAction}</Box>}\n </Flex>\n <Box paddingLeft={4} marginLeft=\"auto\">\n {primaryAction}\n </Box>\n </Flex>\n {isSubtitleString ? (\n <Typography variant=\"epsilon\" textColor=\"neutral600\" tag=\"p\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n </>\n ) : (\n <>\n <Typography\n tag=\"h1\"\n variant=\"alpha\"\n {...props}\n style={{\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n maxWidth: '100%',\n }}\n >\n {title}\n </Typography>\n {isSubtitleString ? (\n <Typography variant=\"epsilon\" textColor=\"neutral600\" tag=\"p\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n {(primaryAction || secondaryAction) && (\n <Flex gap={3}>\n {secondaryAction}\n {primaryAction}\n </Flex>\n )}\n </>\n )}\n </Flex>\n </Box>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderLayout\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderLayoutProps extends BaseHeaderLayoutProps {}\n\nconst HeaderLayout = (props: HeaderLayoutProps) => {\n const baseHeaderLayoutRef = React.useRef<HTMLDivElement>(null);\n const [headerSize, setHeaderSize] = React.useState<DOMRect | null>(null);\n const [isVisible, setIsVisible] = React.useState(true);\n const deviceType = useDeviceType();\n\n const containerRef = useElementOnScreen<HTMLDivElement>(setIsVisible, {\n root: null,\n rootMargin: '0px',\n threshold: 0,\n });\n\n useResizeObserver([containerRef, baseHeaderLayoutRef], () => {\n const headerContainer = baseHeaderLayoutRef.current ?? containerRef.current;\n\n if (headerContainer) {\n const newSize = headerContainer.getBoundingClientRect();\n\n setHeaderSize((prevSize) => {\n // Only update if size actually changed\n if (!prevSize || prevSize.height !== newSize.height || prevSize.width !== newSize.width) {\n return newSize;\n }\n return prevSize;\n });\n }\n });\n\n React.useEffect(() => {\n if (baseHeaderLayoutRef.current || containerRef.current) {\n const headerContainer = baseHeaderLayoutRef.current ?? containerRef.current;\n setHeaderSize(headerContainer?.getBoundingClientRect() ?? null);\n }\n }, [containerRef]);\n\n if (deviceType === 'mobile') {\n return <BaseHeaderLayout {...props} />;\n }\n\n return (\n <div ref={containerRef}>\n <div style={{ height: headerSize?.height }}>\n {isVisible && <BaseHeaderLayout ref={baseHeaderLayoutRef} {...props} />}\n </div>\n\n {!isVisible && <BaseHeaderLayout {...props} sticky width={headerSize?.width} />}\n </div>\n );\n};\n\nHeaderLayout.displayName = 'HeaderLayout';\n\n/**\n * useResizeObserver: hook that observes the size of an element and calls a callback when it changes.\n */\nconst useResizeObserver = (\n sources: React.RefObject<HTMLElement> | React.RefObject<HTMLElement>[],\n onResize: ResizeObserverCallback\n) => {\n const handleResize = useCallbackRef(onResize);\n\n React.useLayoutEffect(() => {\n const resizeObs = new ResizeObserver(handleResize);\n\n if (Array.isArray(sources)) {\n sources.forEach((source) => {\n if (source.current) {\n resizeObs.observe(source.current);\n }\n });\n } else if (sources.current) {\n resizeObs.observe(sources.current);\n }\n\n return () => {\n resizeObs.disconnect();\n };\n }, [sources, handleResize]);\n};\n\nexport type { HeaderLayoutProps, BaseHeaderLayoutProps };\nexport { HeaderLayout, BaseHeaderLayout };\n"],"names":["BaseHeaderLayout","React","forwardRef","navigationAction","primaryAction","secondaryAction","subtitle","title","sticky","width","props","ref","isMobile","useIsMobile","isSubtitleString","_jsx","Box","display","paddingLeft","paddingRight","paddingTop","paddingBottom","position","top","background","shadow","zIndex","minHeight","initial","HEIGHT_TOP_NAVIGATION","medium","HEIGHT_TOP_NAVIGATION_MEDIUM","data-strapi-header-sticky","_jsxs","Flex","alignItems","justifyContent","wrap","Typography","variant","tag","textColor","undefined","RESPONSIVE_DEFAULT_SPACING","large","data-strapi-header","direction","gap","_Fragment","minWidth","style","wordBreak","overflowWrap","maxWidth","marginLeft","HeaderLayout","baseHeaderLayoutRef","useRef","headerSize","setHeaderSize","useState","isVisible","setIsVisible","deviceType","useDeviceType","containerRef","useElementOnScreen","root","rootMargin","threshold","useResizeObserver","headerContainer","current","newSize","getBoundingClientRect","prevSize","height","useEffect","div","displayName","sources","onResize","handleResize","useCallbackRef","useLayoutEffect","resizeObs","ResizeObserver","Array","isArray","forEach","source","observe","disconnect"],"mappings":"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"}
@@ -37,6 +37,8 @@ var yup__namespace = /*#__PURE__*/_interopNamespaceDefault(yup);
37
37
  const FieldWrapper = styled.styled(designSystem.Field.Root)`
38
38
  height: 3.2rem;
39
39
  width: 3.2rem;
40
+ align-items: center;
41
+ justify-content: center;
40
42
 
41
43
  > label,
42
44
  ~ input {
@@ -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 };\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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"}
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 align-items: center;\n justify-content: center;\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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"}
@@ -15,6 +15,8 @@ import { usePersistentState } from '../hooks/usePersistentState.mjs';
15
15
  const FieldWrapper = styled(Field.Root)`
16
16
  height: 3.2rem;
17
17
  width: 3.2rem;
18
+ align-items: center;
19
+ justify-content: center;
18
20
 
19
21
  > label,
20
22
  ~ input {
@@ -1 +1 @@
1
- {"version":3,"file":"NpsSurvey.mjs","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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"}
1
+ {"version":3,"file":"NpsSurvey.mjs","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 align-items: center;\n justify-content: center;\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":";;;;;;;;;;;;;;AA2BA,MAAMA,YAAeC,GAAAA,MAAAA,CAAOC,KAAMC,CAAAA,IAAI,CAAC;;;;;;;;;;;;;;;;;;;aAmB1B,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAAC,CAAA,CAAE,CAAC;;;;;;;sBAOxB,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAME,CAAAA,MAAM,CAACC,QAAQ,CAAC;;;;;WAKlD,EAAE,CAAC,EAAEH,KAAK,EAAE,GAAKA,KAAME,CAAAA,MAAM,CAACE,UAAU,CAAC;sBAC9B,EAAE,CAAC,EAAEJ,KAAK,EAAE,GAAKA,KAAME,CAAAA,MAAM,CAACC,QAAQ,CAAC;kBAC3C,EAAE,CAAC,EAAEH,KAAK,EAAE,GAAKA,KAAME,CAAAA,MAAM,CAACE,UAAU,CAAC;;AAE3D,CAAC;AAED,MAAMC,MAAS,GAAA;IACbC,YAAc,EAAA,EAAA,GAAK,EAAK,GAAA,EAAA,GAAK,EAAK,GAAA,IAAA;IAClCC,kBAAoB,EAAA,EAAA,GAAK,EAAK,GAAA,EAAA,GAAK,EAAK,GAAA,IAAA;IACxCC,uBAAyB,EAAA,EAAA,GAAK,EAAK,GAAA,EAAA,GAAK,EAAK,GAAA,IAAA;AAC7CC,IAAAA,OAAAA,EAAS,KAAK,EAAK,GAAA;AACrB,CAAA;AAEA,MAAMC,WAAc,GAAA;AAAIC,IAAAA,GAAAA,KAAAA,CAAM,IAAIC,IAAI;AAAG,CAAA;AAEzC,MAAMC,0BAA0B,CAACC,QAAAA,GAAAA;IAC/B,MAAM,EAAEC,OAAO,EAAEC,gBAAgB,EAAEC,kBAAkB,EAAEC,iBAAiB,EAAE,GAAGJ,QAAAA;;;;;;;;;;;;;AAgB7E,IAAA,IAAIK,OAAOC,MAAM,CAACC,KAAK,CAACC,GAAG,KAAK,KAAO,EAAA;QACrC,OAAO,KAAA;AACT;;AAGA,IAAA,IAAIP,YAAY,KAAO,EAAA;QACrB,OAAO,KAAA;AACT;;AAGA,IAAA,IAAIC,gBAAkB,EAAA;AACpB,QAAA,MAAMO,wBAAwBC,IAAKC,CAAAA,GAAG,KAAK,IAAID,IAAAA,CAAKR,kBAAkBU,OAAO,EAAA;QAE7E,IAAIH,qBAAAA,IAAyBlB,MAAOC,CAAAA,YAAY,EAAE;YAChD,OAAO,IAAA;AACT;QAEA,OAAO,KAAA;AACT;;AAGA,IAAA,IAAIY,iBAAmB,EAAA;AACrB,QAAA,MAAMS,yBAAyBH,IAAKC,CAAAA,GAAG,KAAK,IAAID,IAAAA,CAAKN,mBAAmBQ,OAAO,EAAA;QAE/E,IAAIC,sBAAAA,IAA0BtB,MAAOG,CAAAA,uBAAuB,EAAE;YAC5D,OAAO,IAAA;AACT;QAEA,OAAO,KAAA;AACT;;AAGA,IAAA,IAAIS,kBAAoB,EAAA;AACtB,QAAA,MAAMW,0BAA0BJ,IAAKC,CAAAA,GAAG,KAAK,IAAID,IAAAA,CAAKP,oBAAoBS,OAAO,EAAA;QAEjF,IAAIE,uBAAAA,IAA2BvB,MAAOE,CAAAA,kBAAkB,EAAE;YACxD,OAAO,IAAA;AACT;QAEA,OAAO,KAAA;AACT;;IAGA,OAAO,IAAA;AACT,CAAA;AAEA,MAAMsB,SAAY,GAAA,IAAA;AAChB,IAAA,MAAMC,QAAWC,GAAAA,WAAAA,EAAAA;IACjB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAEC,iBAAiB,EAAEC,oBAAoB,EAAE,GAAGC,oBAAAA,EAAAA;AACpD,IAAA,MAAM,CAACC,kBAAoBC,EAAAA,qBAAAA,CAAsB,GAAGC,KAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;IACnE,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;AAC/B,IAAA,MAAMC,qBAAqBC,UAAW,CAAA,WAAA,EAAa,CAACC,KAAAA,GAAUA,MAAMF,kBAAkB,CAAA;AACtF,IAAA,MAAMG,gBAAgBF,UAAW,CAAA,WAAA,EAAa,CAACC,KAAAA,GAAUA,MAAMC,aAAa,CAAA;;AAY5E,IAAA,MAAM,CAACC,aAAeC,EAAAA,gBAAAA,CAAiB,GAAGT,KAAMC,CAAAA,QAAQ,CACtD3B,uBAAwBqB,CAAAA,iBAAAA,CAAAA,CAAAA;;AAI1B,IAAA,MAAM,CAACe,aAAeC,EAAAA,gBAAAA,CAAiB,GAAGX,KAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;AAEzDD,IAAAA,KAAAA,CAAMY,SAAS,CAAC,IAAA;AACd,QAAA,MAAMC,cAAcC,UAAW,CAAA,IAAA;YAC7BH,gBAAiB,CAAA,IAAA,CAAA;AACnB,SAAA,EAAG7C,OAAOI,OAAO,CAAA;QAEjB,OAAO,IAAA;YACL6C,YAAaF,CAAAA,WAAAA,CAAAA;AACf,SAAA;AACF,KAAA,EAAG,EAAE,CAAA;AAEL,IAAA,MAAM,EAAEG,IAAI,EAAE,GAAGC,OAAQ,CAAA,WAAA,EAAa,CAACC,IAASA,GAAAA,IAAAA,CAAAA;AAEhD,IAAA,IAAI,CAACR,aAAe,EAAA;QAClB,OAAO,IAAA;AACT;AAEA,IAAA,IAAI,CAACF,aAAe,EAAA;QAClB,OAAO,IAAA;AACT;AAEA,IAAA,MAAMW,uBAAuB,OAAO,EAClCC,eAAe,EACfC,iBAAiB,EAIlB,GAAA;QACC,IAAI;AACF,YAAA,MAAMC,IAAO,GAAA;gBACXC,KAAO,EAAA,OAAOP,SAAS,QAAYA,IAAAA,IAAAA,CAAKO,KAAK,GAAGP,IAAAA,CAAKO,KAAK,GAAG,EAAA;gBAC7DC,MAAQJ,EAAAA,eAAAA;gBACRK,OAASJ,EAAAA,iBAAAA;gBACTK,WAAatB,EAAAA,kBAAAA;AACbuB,gBAAAA,OAAAA,EAASpB,aAAiBqB,IAAAA,SAAAA;gBAC1BC,OAASjD,EAAAA,MAAAA,CAAOC,MAAM,CAACiD,WAAW;AAClCC,gBAAAA,qBAAAA,EAAuBC,OAAQC,CAAAA,GAAG,CAACC,cAAc,KAAK;AACxD,aAAA;AACA,YAAA,MAAMC,GAAM,GAAA,MAAMC,KAChB,CAAA,CAAA,EAAGJ,OAAQC,CAAAA,GAAG,CAACI,oBAAoB,IAAI,6BAAA,CAA8B,WAAW,CAAC,EACjF;gBACEC,MAAQ,EAAA,MAAA;gBACRC,OAAS,EAAA;oBACP,cAAgB,EAAA;AAClB,iBAAA;gBACAjB,IAAMkB,EAAAA,IAAAA,CAAKC,SAAS,CAACnB,IAAAA;AACvB,aAAA,CAAA;YAGF,IAAI,CAACa,GAAIO,CAAAA,EAAE,EAAE;AACX,gBAAA,MAAM,IAAIC,KAAM,CAAA,6BAAA,CAAA;AAClB;YAEA/C,oBAAqB,CAAA,CAACrB,YAAc;AAClC,oBAAA,GAAGA,QAAQ;oBACXE,gBAAkB,EAAA,IAAIQ,OAAO2D,QAAQ,EAAA;oBACrClE,kBAAoB,EAAA,IAAA;oBACpBC,iBAAmB,EAAA;iBACrB,CAAA,CAAA;YACAoB,qBAAsB,CAAA,IAAA,CAAA;;YAEtBe,UAAW,CAAA,IAAA;gBACTL,gBAAiB,CAAA,KAAA,CAAA;aAChB,EAAA,IAAA,CAAA;AACL,SAAA,CAAE,OAAOoC,GAAK,EAAA;YACZ3C,kBAAmB,CAAA;gBACjB4C,IAAM,EAAA,QAAA;AACNC,gBAAAA,OAAAA,EAAStD,aAAc,CAAA;oBAAEuD,EAAI,EAAA,oBAAA;oBAAsBC,cAAgB,EAAA;AAAoB,iBAAA;AACzF,aAAA,CAAA;AACF;AACF,KAAA;AAEA,IAAA,MAAMC,aAAgB,GAAA,IAAA;AACpBtD,QAAAA,oBAAAA,CAAqB,CAACrB,QAAAA,GAAAA;AACpB,YAAA,MAAM4E,YAAe,GAAA;AACnB,gBAAA,GAAG5E,QAAQ;gBACXE,gBAAkB,EAAA;AACpB,aAAA;YAEA,IAAIF,QAAAA,CAASG,kBAAkB,EAAE;;AAE/ByE,gBAAAA,YAAAA,CAAaxE,iBAAiB,GAAG,IAAIM,IAAAA,EAAAA,CAAO2D,QAAQ,EAAA;aAC/C,MAAA;;AAELO,gBAAAA,YAAAA,CAAazE,kBAAkB,GAAG,IAAIO,IAAAA,EAAAA,CAAO2D,QAAQ,EAAA;AACvD;YAEA,OAAOO,YAAAA;AACT,SAAA,CAAA;QAEA1C,gBAAiB,CAAA,KAAA,CAAA;AACnB,KAAA;AAEA,IAAA,qBACE2C,GAACC,CAAAA,MAAAA,EAAAA;AACC,QAAA,QAAA,gBAAAD,GAACE,CAAAA,MAAAA,EAAAA;YACCC,aAAe,EAAA;gBAAElC,iBAAmB,EAAA,EAAA;gBAAID,eAAiB,EAAA;AAAK,aAAA;YAC9DoC,QAAUrC,EAAAA,oBAAAA;YACVsC,gBAAkBC,EAAAA,GAAAA,CAAIC,MAAM,CAAC;AAC3BtC,gBAAAA,iBAAAA,EAAmBqC,IAAIE,MAAM,EAAA;gBAC7BxC,eAAiBsC,EAAAA,GAAAA,CAAIG,MAAM,EAAA,CAAGC,QAAQ;AACxC,aAAA,CAAA;sBAEC,CAAC,EAAEC,MAAM,EAAEC,YAAY,EAAEC,aAAa,EAAEC,YAAY,EAAE,iBACrDd,GAACe,CAAAA,IAAAA,EAAAA;oBAAKC,IAAK,EAAA,eAAA;AACT,oBAAA,QAAA,gBAAAhB,GAACiB,CAAAA,GAAAA,EAAAA;wBACCC,OAAS,EAAA,CAAA;wBACTC,QAAS,EAAA,OAAA;wBACTC,MAAQ,EAAA,CAAA;wBACRC,IAAK,EAAA,KAAA;wBACLC,SAAU,EAAA,kBAAA;wBACVC,MAAO,EAAA,KAAA;wBACPC,QAAU,EAAA;4BAAEC,OAAS,EAAA,MAAA;4BAAQC,MAAQ,EAAA;AAAM,yBAAA;AAE3C,wBAAA,QAAA,gBAAA1B,GAAC2B,CAAAA,IAAAA,EAAAA;4BACCC,SAAS,EAAA,IAAA;4BACTC,SAAU,EAAA,QAAA;4BACVX,OAAS,EAAA,CAAA;4BACTY,WAAY,EAAA,YAAA;4BACZC,UAAW,EAAA,UAAA;4BACXC,MAAO,EAAA,aAAA;4BACPC,IAAK,EAAA,MAAA;AAEJvF,4BAAAA,QAAAA,EAAAA,kBAAAA,iBACCsD,GAACkC,CAAAA,UAAAA,EAAAA;gCAAWC,UAAW,EAAA,UAAA;0CACpB9F,aAAc,CAAA;oCACbuD,EAAI,EAAA,4CAAA;oCACJC,cAAgB,EAAA;AAClB,iCAAA;+CAGFuC,IAACnB,CAAAA,GAAAA,EAAAA;gCAAIoB,GAAI,EAAA,UAAA;gCAAWC,KAAM,EAAA,MAAA;gCAAOC,WAAa,EAAA,CAAA;;kDAC5CH,IAACT,CAAAA,IAAAA,EAAAA;wCAAKa,cAAe,EAAA,eAAA;wCAAgBF,KAAM,EAAA,MAAA;wCAAOG,GAAK,EAAA,CAAA;;0DACrDzC,GAACiB,CAAAA,GAAAA,EAAAA;gDAAIyB,UAAW,EAAA,MAAA;gDAAOC,WAAY,EAAA,MAAA;AACjC,gDAAA,QAAA,gBAAA3C,GAACkC,CAAAA,UAAAA,EAAAA;oDAAWC,UAAW,EAAA,UAAA;oDAAWE,GAAI,EAAA,QAAA;8DACnChG,aAAc,CAAA;wDACbuD,EAAI,EAAA,uCAAA;wDACJC,cACE,EAAA;AACJ,qDAAA;;;0DAGJG,GAAC4C,CAAAA,UAAAA,EAAAA;gDACCC,OAAS/C,EAAAA,aAAAA;gDACTgD,WAAa,EAAA,KAAA;AACbC,gDAAAA,KAAAA,EAAO1G,aAAc,CAAA;oDACnBuD,EAAI,EAAA,+CAAA;oDACJC,cAAgB,EAAA;AAClB,iDAAA,CAAA;gDACAH,IAAK,EAAA,QAAA;AAEL,gDAAA,QAAA,gBAAAM,GAACgD,CAAAA,KAAAA,EAAAA,EAAAA;;;;AAGJ7G,oCAAAA,QAAAA,iBACC6D,GAACiB,CAAAA,GAAAA,EAAAA;wCAAIgC,SAAW,EAAA,CAAA;AACd,wCAAA,QAAA,gBAAAjD,GAACkD,CAAAA,YAAAA,EAAAA;AACCC,4CAAAA,WAAAA,EAAa9G,aAAc,CAAA;gDACzBuD,EAAI,EAAA,wCAAA;gDACJC,cAAgB,EAAA;AAClB,6CAAA,CAAA;AACAuD,4CAAAA,QAAAA,EAAU,CAACC,KAAAA,GAAAA;AACTxC,gDAAAA,aAAAA,CAAc,iBAAmByC,EAAAA,QAAAA,CAASD,KAAM7D,CAAAA,QAAQ,EAAI,EAAA,EAAA,CAAA,CAAA;AAC9D,6CAAA;AACA6D,4CAAAA,KAAAA,EAAO1C,OAAO3C,eAAe;sDAE5BjD,WACEwI,CAAAA,IAAI,CAAC,CAACC,CAAAA,EAAGC,IAAMA,CAAID,GAAAA,CAAAA,CAAAA,CACnBE,GAAG,CAAC,CAACjD,MAAAA,GAAAA;gDACJ,MAAMkD,aAAAA,GACJlD,MAAW,KAAA,CAAA,GACPpE,aAAc,CAAA;oDACZuD,EAAI,EAAA,4CAAA;oDACJC,cAAgB,EAAA;iDAElBY,CAAAA,GAAAA,MAAAA,KAAW,KACTpE,aAAc,CAAA;oDACZuD,EAAI,EAAA,6CAAA;oDACJC,cAAgB,EAAA;iDAElB,CAAA,GAAA,EAAA;AACR,gDAAA,qBACEuC,IAACwB,CAAAA,kBAAAA,EAAAA;oDAAgCP,KAAO5C,EAAAA,MAAAA;;AACrCA,wDAAAA,MAAAA;AAAO,wDAAA,GAAA;AAAEkD,wDAAAA,aAAAA,IAAiB,CAAC,CAAC,EAAEA,aAAAA,CAAc,CAAC;;AADvBlD,iDAAAA,EAAAA,MAAAA,CAAAA;AAI7B,6CAAA;;uDAIN2B,IAACT,CAAAA,IAAAA,EAAAA;wCAAKc,GAAK,EAAA,CAAA;wCAAGQ,SAAW,EAAA,CAAA;wCAAGY,YAAc,EAAA,CAAA;wCAAGrB,cAAe,EAAA,QAAA;;0DAC1DxC,GAACkC,CAAAA,UAAAA,EAAAA;gDAAW4B,OAAQ,EAAA,IAAA;gDAAKC,SAAU,EAAA,YAAA;0DAChC1H,aAAc,CAAA;oDACbuD,EAAI,EAAA,4CAAA;oDACJC,cAAgB,EAAA;AAClB,iDAAA;;4CAED9E,WAAY2I,CAAAA,GAAG,CAAC,CAACjD,MAAAA,GAAAA;AAChB,gDAAA,qBACET,GAAC/F,CAAAA,YAAAA,EAAAA;oDAEC+G,IAAK,EAAA,iBAAA;AACLgD,oDAAAA,SAAAA,EAAWrD,MAAO3C,CAAAA,eAAe,KAAKyC,MAAAA,GAAS,UAAajC,GAAAA,SAAAA;oDAC5DoD,SAAS,EAAA,IAAA;oDACTG,UAAW,EAAA,YAAA;oDACXD,WAAY,EAAA,YAAA;oDACZmC,KAAM,EAAA,YAAA;oDACN9C,QAAS,EAAA,UAAA;oDACT+C,MAAO,EAAA,SAAA;4EAEP9B,IAAA,CAACjI,MAAMgK,KAAK,EAAA;;0EACVnE,GAACoE,CAAAA,cAAAA,EAAAA;wFACCpE,GAAA,CAAC7F,MAAMkK,KAAK,EAAA;oEACV3E,IAAK,EAAA,OAAA;oEACL4E,OAAS3D,EAAAA,MAAAA,CAAO3C,eAAe,KAAKyC,MAAAA;oEACpC2C,QAAU,EAAA,CAACmB,IACT1D,aAAc,CAAA,iBAAA,EAAmByC,SAASiB,CAAEC,CAAAA,MAAM,CAACnB,KAAK,EAAE,EAAA,CAAA,CAAA;oEAE5DA,KAAO5C,EAAAA;;;AAGVA,4DAAAA;;;AArBEA,iDAAAA,EAAAA,MAAAA,CAAAA;AAyBX,6CAAA,CAAA;0DACAT,GAACkC,CAAAA,UAAAA,EAAAA;gDAAW4B,OAAQ,EAAA,IAAA;gDAAKC,SAAU,EAAA,YAAA;0DAChC1H,aAAc,CAAA;oDACbuD,EAAI,EAAA,6CAAA;oDACJC,cAAgB,EAAA;AAClB,iDAAA;;;;oCAILc,MAAO3C,CAAAA,eAAe,KAAK,IAAA,kBAC1BoE,IAACT,CAAAA,IAAAA,EAAAA;wCAAKE,SAAU,EAAA,QAAA;wCAAS4C,UAAW,EAAA,SAAA;;0DAClCzE,GAACiB,CAAAA,GAAAA,EAAAA;gDAAIgC,SAAW,EAAA,CAAA;wEACdjD,GAAA,CAAC7F,MAAMgK,KAAK,EAAA;oDAAChC,UAAW,EAAA,UAAA;oDAAWuC,QAAU,EAAA,CAAA;8DAC1CrI,aAAc,CAAA;wDACbuD,EAAI,EAAA,4CAAA;wDACJC,cAAgB,EAAA;AAClB,qDAAA;;;0DAGJG,GAACiB,CAAAA,GAAAA,EAAAA;gDAAIgC,SAAW,EAAA,CAAA;gDAAGY,YAAc,EAAA,CAAA;gDAAGvB,KAAM,EAAA,MAAA;AACxC,gDAAA,QAAA,gBAAAtC,GAAC2E,CAAAA,QAAAA,EAAAA;oDACC/E,EAAG,EAAA,mBAAA;oDACH0C,KAAM,EAAA,MAAA;oDACNc,QAAUxC,EAAAA,YAAAA;AACVyC,oDAAAA,KAAAA,EAAO1C,OAAO1C;;;0DAGlB+B,GAACiB,CAAAA,GAAAA,EAAAA;AACC,gDAAA,QAAA,gBAAAjB,GAAC4E,CAAAA,MAAAA,EAAAA;oDAAOf,YAAc,EAAA,CAAA;oDAAGnE,IAAK,EAAA,QAAA;oDAASmF,OAAS/D,EAAAA,YAAAA;8DAC7CzE,aAAc,CAAA;wDACbuD,EAAI,EAAA,0CAAA;wDACJC,cAAgB,EAAA;AAClB,qDAAA;;;;;;;;;;;;AAc5B;AASA;;;AAGC,IACD,SAASpD,oBAAAA,GAAAA;AACP,IAAA,MAAM,CAACF,iBAAAA,EAAmBC,oBAAqB,CAAA,GAAGsI,mBAChD,4BACA,EAAA;QACE1J,OAAS,EAAA,IAAA;QACTC,gBAAkB,EAAA,IAAA;QAClBC,kBAAoB,EAAA,IAAA;QACpBC,iBAAmB,EAAA;AACrB,KAAA,CAAA;AAGF;;AAEC,MACD,OAAO;AAAEgB,QAAAA,iBAAAA;AAAmBC,QAAAA;AAAqB,KAAA;AACnD;;;;"}
@@ -24,7 +24,7 @@ const MainSubNav = styled.styled(designSystem.SubNav)`
24
24
  z-index: 2;
25
25
 
26
26
  ${({ theme })=>theme.breakpoints.medium} {
27
- width: 23.2rem;
27
+ width: ${theme.WIDTH_SIDE_NAVIGATION};
28
28
  position: sticky;
29
29
  top: 0;
30
30
  border-right: 1px solid ${({ theme })=>theme.colors.neutral150};
@@ -166,7 +166,7 @@ const Sections = ({ children, ...props })=>{
166
166
  },
167
167
  maxWidth: {
168
168
  initial: '100%',
169
- medium: '23.2rem'
169
+ medium: theme.WIDTH_SIDE_NAVIGATION
170
170
  },
171
171
  children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
172
172
  tag: "ul",