@strapi/admin 5.27.0 → 5.29.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 (101) hide show
  1. package/dist/admin/admin/src/components/DragLayer.js +67 -0
  2. package/dist/admin/admin/src/components/DragLayer.js.map +1 -0
  3. package/dist/admin/admin/src/components/DragLayer.mjs +64 -0
  4. package/dist/admin/admin/src/components/DragLayer.mjs.map +1 -0
  5. package/dist/admin/admin/src/components/FormInputs/Json.js +1 -1
  6. package/dist/admin/admin/src/components/FormInputs/Json.js.map +1 -1
  7. package/dist/admin/admin/src/components/FormInputs/Json.mjs +1 -1
  8. package/dist/admin/admin/src/components/FormInputs/Json.mjs.map +1 -1
  9. package/dist/admin/admin/src/components/GapDropZone.js +292 -0
  10. package/dist/admin/admin/src/components/GapDropZone.js.map +1 -0
  11. package/dist/admin/admin/src/components/GapDropZone.mjs +268 -0
  12. package/dist/admin/admin/src/components/GapDropZone.mjs.map +1 -0
  13. package/dist/admin/admin/src/components/ResizeIndicator.js +353 -0
  14. package/dist/admin/admin/src/components/ResizeIndicator.js.map +1 -0
  15. package/dist/admin/admin/src/components/ResizeIndicator.mjs +332 -0
  16. package/dist/admin/admin/src/components/ResizeIndicator.mjs.map +1 -0
  17. package/dist/admin/admin/src/components/SubNav.js +9 -2
  18. package/dist/admin/admin/src/components/SubNav.js.map +1 -1
  19. package/dist/admin/admin/src/components/SubNav.mjs +9 -2
  20. package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
  21. package/dist/admin/admin/src/components/WidgetRoot.js +216 -0
  22. package/dist/admin/admin/src/components/WidgetRoot.js.map +1 -0
  23. package/dist/admin/admin/src/components/WidgetRoot.mjs +195 -0
  24. package/dist/admin/admin/src/components/WidgetRoot.mjs.map +1 -0
  25. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  26. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  27. package/dist/admin/admin/src/features/Widgets.js +276 -0
  28. package/dist/admin/admin/src/features/Widgets.js.map +1 -0
  29. package/dist/admin/admin/src/features/Widgets.mjs +255 -0
  30. package/dist/admin/admin/src/features/Widgets.mjs.map +1 -0
  31. package/dist/admin/admin/src/hooks/useAPIErrorHandler.js +1 -1
  32. package/dist/admin/admin/src/hooks/useAPIErrorHandler.js.map +1 -1
  33. package/dist/admin/admin/src/hooks/useAPIErrorHandler.mjs +1 -1
  34. package/dist/admin/admin/src/hooks/useAPIErrorHandler.mjs.map +1 -1
  35. package/dist/admin/admin/src/pages/Home/HomePage.js +160 -91
  36. package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
  37. package/dist/admin/admin/src/pages/Home/HomePage.mjs +162 -93
  38. package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
  39. package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.js +189 -0
  40. package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.js.map +1 -0
  41. package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.mjs +168 -0
  42. package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.mjs.map +1 -0
  43. package/dist/admin/admin/src/services/homepage.js +11 -4
  44. package/dist/admin/admin/src/services/homepage.js.map +1 -1
  45. package/dist/admin/admin/src/services/homepage.mjs +11 -4
  46. package/dist/admin/admin/src/services/homepage.mjs.map +1 -1
  47. package/dist/admin/admin/src/translations/en.json.js +8 -1
  48. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  49. package/dist/admin/admin/src/translations/en.json.mjs +8 -1
  50. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  51. package/dist/admin/admin/src/translations/uk.json.js +9 -9
  52. package/dist/admin/admin/src/translations/uk.json.mjs +9 -9
  53. package/dist/admin/admin/src/utils/resizeHandlers.js +109 -0
  54. package/dist/admin/admin/src/utils/resizeHandlers.js.map +1 -0
  55. package/dist/admin/admin/src/utils/resizeHandlers.mjs +100 -0
  56. package/dist/admin/admin/src/utils/resizeHandlers.mjs.map +1 -0
  57. package/dist/admin/admin/src/utils/widgetLayout.js +293 -0
  58. package/dist/admin/admin/src/utils/widgetLayout.js.map +1 -0
  59. package/dist/admin/admin/src/utils/widgetLayout.mjs +273 -0
  60. package/dist/admin/admin/src/utils/widgetLayout.mjs.map +1 -0
  61. package/dist/admin/src/components/DragLayer.d.ts +8 -4
  62. package/dist/admin/src/components/GapDropZone.d.ts +36 -0
  63. package/dist/admin/src/components/ResizeIndicator.d.ts +12 -0
  64. package/dist/admin/src/components/SubNav.d.ts +1 -1
  65. package/dist/admin/src/components/WidgetRoot.d.ts +14 -0
  66. package/dist/admin/src/features/Tracking.d.ts +1 -1
  67. package/dist/admin/src/features/Widgets.d.ts +29 -0
  68. package/dist/admin/src/pages/Home/HomePage.d.ts +4 -5
  69. package/dist/admin/src/pages/Home/components/AddWidgetModal.d.ts +10 -0
  70. package/dist/admin/src/services/homepage.d.ts +3 -3
  71. package/dist/admin/src/utils/resizeHandlers.d.ts +58 -0
  72. package/dist/admin/src/utils/widgetLayout.d.ts +78 -0
  73. package/dist/ee/server/src/controllers/authentication-utils/middlewares.d.ts.map +1 -1
  74. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js +4 -2
  75. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js.map +1 -1
  76. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.mjs +4 -2
  77. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.mjs.map +1 -1
  78. package/dist/server/server/src/bootstrap.js +5 -0
  79. package/dist/server/server/src/bootstrap.js.map +1 -1
  80. package/dist/server/server/src/bootstrap.mjs +5 -0
  81. package/dist/server/server/src/bootstrap.mjs.map +1 -1
  82. package/dist/server/server/src/controllers/authentication.js +6 -6
  83. package/dist/server/server/src/controllers/authentication.js.map +1 -1
  84. package/dist/server/server/src/controllers/authentication.mjs +6 -6
  85. package/dist/server/server/src/controllers/authentication.mjs.map +1 -1
  86. package/dist/server/server/src/register.js +2 -1
  87. package/dist/server/server/src/register.js.map +1 -1
  88. package/dist/server/server/src/register.mjs +2 -1
  89. package/dist/server/server/src/register.mjs.map +1 -1
  90. package/dist/server/shared/utils/session-auth.js +14 -5
  91. package/dist/server/shared/utils/session-auth.js.map +1 -1
  92. package/dist/server/shared/utils/session-auth.mjs +14 -5
  93. package/dist/server/shared/utils/session-auth.mjs.map +1 -1
  94. package/dist/server/src/bootstrap.d.ts.map +1 -1
  95. package/dist/server/src/controllers/authentication.d.ts.map +1 -1
  96. package/dist/server/src/register.d.ts.map +1 -1
  97. package/dist/shared/contracts/homepage.d.ts +8 -4
  98. package/dist/shared/contracts/homepage.d.ts.map +1 -1
  99. package/dist/shared/utils/session-auth.d.ts +2 -2
  100. package/dist/shared/utils/session-auth.d.ts.map +1 -1
  101. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"SubNav.mjs","sources":["../../../../../admin/src/components/SubNav.tsx"],"sourcesContent":["import { useId, useState } from 'react';\n\nimport {\n Box,\n SubNav as DSSubNav,\n Flex,\n Typography,\n IconButton,\n Badge,\n ScrollArea,\n} from '@strapi/design-system';\nimport { ChevronDown, Plus } from '@strapi/icons';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { HEIGHT_TOP_NAVIGATION } from '../constants/theme';\n\nimport { tours } from './GuidedTour/Tours';\n\nconst MainSubNav = styled(DSSubNav)`\n width: 100%;\n height: calc(100dvh - ${HEIGHT_TOP_NAVIGATION} - 1px);\n overflow: hidden;\n background-color: ${({ theme }) => theme.colors.neutral0};\n display: flex;\n flex-direction: column;\n border-right: 0;\n box-shadow: none;\n position: fixed;\n top: calc(${HEIGHT_TOP_NAVIGATION} + 1px);\n left: 0;\n z-index: 2;\n\n ${({ theme }) => theme.breakpoints.medium} {\n position: sticky;\n top: 0;\n border-right: 1px solid ${({ theme }) => theme.colors.neutral150};\n }\n ${({ theme }) => theme.breakpoints.large} {\n height: 100dvh;\n }\n`;\n\nconst Main = ({ children, ...props }: { children: React.ReactNode; isFullPage?: boolean }) => (\n <MainSubNav {...props}>{children}</MainSubNav>\n);\n\nconst StyledLink = styled(NavLink)`\n display: flex;\n align-items: center;\n justify-content: space-between;\n text-decoration: none;\n height: 32px;\n\n color: ${({ theme }) => theme.colors.neutral800};\n\n &.active > div {\n ${({ theme }) => {\n return `\n background-color: ${theme.colors.primary100};\n color: ${theme.colors.primary700};\n font-weight: 500;\n `;\n }}\n }\n\n &:hover.active > div {\n ${({ theme }) => {\n return `\n background-color: ${theme.colors.primary100};\n `;\n }}\n }\n\n &:hover > div {\n ${({ theme }) => {\n return `\n background-color: ${theme.colors.neutral100};\n `;\n }}\n }\n\n &:focus-visible {\n outline-offset: -2px;\n }\n`;\n\nconst Link = (\n props: Omit<React.ComponentProps<typeof StyledLink>, 'label'> & {\n label: React.ReactNode;\n endAction?: React.ReactNode;\n handleClick?: () => void;\n }\n) => {\n const { label, endAction, handleClick, ...rest } = props;\n\n return (\n <StyledLink {...rest} onClick={handleClick}>\n <Box width={'100%'} paddingLeft={3} paddingRight={3} borderRadius={1}>\n <Flex justifyContent=\"space-between\" width=\"100%\" gap={1}>\n <Typography\n tag=\"div\"\n lineHeight=\"32px\"\n width=\"100%\"\n overflow=\"hidden\"\n style={{ textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}\n >\n {label}\n </Typography>\n <Flex gap={2}>{endAction}</Flex>\n </Flex>\n </Box>\n </StyledLink>\n );\n};\n\nconst StyledHeader = styled(Flex)`\n flex: 0 0 ${HEIGHT_TOP_NAVIGATION};\n height: ${HEIGHT_TOP_NAVIGATION};\n`;\n\nconst Header = ({ label }: { label: string }) => {\n return (\n <StyledHeader\n justifyContent=\"space-between\"\n paddingLeft={{\n initial: 4,\n large: 5,\n }}\n paddingRight={{\n initial: 4,\n large: 5,\n }}\n >\n <Typography variant=\"beta\" tag=\"h2\">\n {label}\n </Typography>\n </StyledHeader>\n );\n};\n\nconst Sections = ({ children, ...props }: { children: React.ReactNode[]; [key: string]: any }) => {\n return (\n <Box paddingTop={4} paddingBottom={4}>\n <Flex tag=\"ol\" gap=\"5\" direction=\"column\" alignItems=\"stretch\" {...props}>\n {children.map((child, index) => {\n return <li key={index}>{child}</li>;\n })}\n </Flex>\n </Box>\n );\n};\n\n/**\n * TODO:\n * This would be better in the content-type-builder package directly but currently\n * the SubNav API does not expose a way to wrap the link, instead it wraps the link and the list\n */\nconst GuidedTourTooltip = ({\n sectionId,\n children,\n}: {\n sectionId?: string;\n children: React.ReactNode;\n}) => {\n switch (sectionId) {\n case 'models':\n return (\n <tours.contentTypeBuilder.CollectionTypes>\n <tours.contentTypeBuilder.YourTurn>{children}</tours.contentTypeBuilder.YourTurn>\n </tours.contentTypeBuilder.CollectionTypes>\n );\n case 'singleTypes':\n return (\n <tours.contentTypeBuilder.SingleTypes>{children}</tours.contentTypeBuilder.SingleTypes>\n );\n case 'components':\n return <tours.contentTypeBuilder.Components>{children}</tours.contentTypeBuilder.Components>;\n default:\n return children;\n }\n};\n\nconst Section = ({\n label,\n children,\n link,\n sectionId,\n badgeLabel,\n}: {\n label: string;\n children: React.ReactNode[];\n link?: { label: string; onClick: () => void };\n sectionId?: string;\n badgeLabel?: string;\n}) => {\n const listId = useId();\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Box\n paddingLeft={{\n initial: 4,\n large: 5,\n }}\n paddingRight={{\n initial: 4,\n large: 5,\n }}\n >\n <Flex position=\"relative\" justifyContent=\"space-between\" gap={2}>\n <Flex>\n <Box paddingRight={1}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {label}\n </Typography>\n </Box>\n </Flex>\n <Flex gap={1}>\n {badgeLabel && (\n <Badge backgroundColor=\"neutral150\" textColor=\"neutral600\">\n {badgeLabel}\n </Badge>\n )}\n {link && (\n <GuidedTourTooltip sectionId={sectionId}>\n <IconButton\n label={link.label}\n variant=\"ghost\"\n withTooltip\n onClick={link.onClick}\n size=\"XS\"\n >\n <Plus />\n </IconButton>\n </GuidedTourTooltip>\n )}\n </Flex>\n </Flex>\n </Box>\n <Flex\n tag=\"ol\"\n id={listId}\n direction=\"column\"\n gap=\"2px\"\n alignItems={'stretch'}\n marginLeft={{\n initial: 1,\n large: 2,\n }}\n marginRight={{\n initial: 1,\n large: 2,\n }}\n >\n {children.map((child, index) => {\n return <li key={index}>{child}</li>;\n })}\n </Flex>\n </Flex>\n );\n};\n\nconst SubSectionHeader = styled.button`\n cursor: pointer;\n width: 100%;\n border: none;\n padding: 0;\n background: transparent;\n display: flex;\n align-items: center;\n border-radius: ${({ theme }) => theme.borderRadius};\n padding-left: ${({ theme }) => theme.spaces[3]};\n padding-right: ${({ theme }) => theme.spaces[3]};\n padding-top: ${({ theme }) => theme.spaces[2]};\n padding-bottom: ${({ theme }) => theme.spaces[2]};\n\n &:hover {\n background-color: ${({ theme }) => theme.colors.neutral100};\n }\n`;\n\nconst SubSectionLinkWrapper = styled.li`\n ${StyledLink} > div {\n padding-left: 36px;\n }\n`;\n\nconst SubSection = ({ label, children }: { label: string; children: React.ReactNode[] }) => {\n const [isOpen, setOpenLinks] = useState(true);\n const listId = useId();\n\n const handleClick = () => {\n setOpenLinks((prev) => !prev);\n };\n\n return (\n <Box>\n <Flex justifyContent=\"space-between\">\n <SubSectionHeader onClick={handleClick} aria-expanded={isOpen} aria-controls={listId}>\n <ChevronDown\n aria-hidden\n fill=\"neutral500\"\n style={{\n transform: `rotate(${isOpen ? '0deg' : '-90deg'})`,\n transition: 'transform 0.5s',\n }}\n />\n <Box paddingLeft={2}>\n <Typography tag=\"span\" fontWeight=\"semiBold\" textColor=\"neutral800\">\n {label}\n </Typography>\n </Box>\n </SubSectionHeader>\n </Flex>\n {\n <Flex\n tag=\"ul\"\n id={listId}\n direction=\"column\"\n gap=\"2px\"\n alignItems={'stretch'}\n style={{\n maxHeight: isOpen ? '1000px' : 0,\n overflow: 'hidden',\n transition: isOpen\n ? 'max-height 1s ease-in-out'\n : 'max-height 0.5s cubic-bezier(0, 1, 0, 1)',\n }}\n >\n {children.map((child, index) => {\n return <SubSectionLinkWrapper key={index}>{child}</SubSectionLinkWrapper>;\n })}\n </Flex>\n }\n </Box>\n );\n};\n\nconst PageWrapper = styled(Box)`\n ${MainSubNav} {\n background-color: transparent;\n border-right: none;\n }\n\n ${({ theme }) => theme.breakpoints.medium} {\n ${MainSubNav} {\n top: 0;\n }\n }\n`;\n\nconst Content = ({ children }: { children: React.ReactNode }) => {\n return <ScrollArea>{children}</ScrollArea>;\n};\n\nexport const SubNav = {\n Main,\n Content,\n Header,\n Link,\n Sections,\n Section,\n SubSection,\n PageWrapper,\n};\n"],"names":["MainSubNav","styled","DSSubNav","HEIGHT_TOP_NAVIGATION","theme","colors","neutral0","breakpoints","medium","neutral150","large","Main","children","props","_jsx","StyledLink","NavLink","neutral800","primary100","primary700","neutral100","Link","label","endAction","handleClick","rest","onClick","Box","width","paddingLeft","paddingRight","borderRadius","_jsxs","Flex","justifyContent","gap","Typography","tag","lineHeight","overflow","style","textOverflow","whiteSpace","StyledHeader","Header","initial","variant","Sections","paddingTop","paddingBottom","direction","alignItems","map","child","index","li","GuidedTourTooltip","sectionId","tours","contentTypeBuilder","CollectionTypes","YourTurn","SingleTypes","Components","Section","link","badgeLabel","listId","useId","position","textColor","Badge","backgroundColor","IconButton","withTooltip","size","Plus","id","marginLeft","marginRight","SubSectionHeader","button","spaces","SubSectionLinkWrapper","SubSection","isOpen","setOpenLinks","useState","prev","aria-expanded","aria-controls","ChevronDown","aria-hidden","fill","transform","transition","fontWeight","maxHeight","PageWrapper","Content","ScrollArea","SubNav"],"mappings":"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"}
1
+ {"version":3,"file":"SubNav.mjs","sources":["../../../../../admin/src/components/SubNav.tsx"],"sourcesContent":["import { useId, useState } from 'react';\n\nimport {\n Box,\n SubNav as DSSubNav,\n Flex,\n Typography,\n IconButton,\n Badge,\n ScrollArea,\n} from '@strapi/design-system';\nimport { ChevronDown, Plus } from '@strapi/icons';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { HEIGHT_TOP_NAVIGATION } from '../constants/theme';\n\nimport { tours } from './GuidedTour/Tours';\n\nconst MainSubNav = styled(DSSubNav)`\n width: 100%;\n height: calc(100dvh - ${HEIGHT_TOP_NAVIGATION} - 1px);\n overflow: hidden;\n background-color: ${({ theme }) => theme.colors.neutral0};\n display: flex;\n flex-direction: column;\n border-right: 0;\n box-shadow: none;\n position: fixed;\n top: calc(${HEIGHT_TOP_NAVIGATION} + 1px);\n left: 0;\n z-index: 2;\n\n ${({ theme }) => theme.breakpoints.medium} {\n position: sticky;\n top: 0;\n border-right: 1px solid ${({ theme }) => theme.colors.neutral150};\n }\n ${({ theme }) => theme.breakpoints.large} {\n height: 100dvh;\n }\n`;\n\nconst Main = ({ children, ...props }: { children: React.ReactNode; isFullPage?: boolean }) => (\n <MainSubNav {...props}>{children}</MainSubNav>\n);\n\nconst StyledLink = styled(NavLink)`\n display: flex;\n align-items: center;\n justify-content: space-between;\n text-decoration: none;\n height: 32px;\n\n color: ${({ theme }) => theme.colors.neutral800};\n\n &.active > div {\n ${({ theme }) => {\n return `\n background-color: ${theme.colors.primary100};\n color: ${theme.colors.primary700};\n font-weight: 500;\n `;\n }}\n }\n\n &:hover.active > div {\n ${({ theme }) => {\n return `\n background-color: ${theme.colors.primary100};\n `;\n }}\n }\n\n &:hover > div {\n ${({ theme }) => {\n return `\n background-color: ${theme.colors.neutral100};\n `;\n }}\n }\n\n &:focus-visible {\n outline-offset: -2px;\n }\n`;\n\nconst Link = (\n props: Omit<React.ComponentProps<typeof StyledLink>, 'label'> & {\n label: React.ReactNode;\n endAction?: React.ReactNode;\n handleClick?: () => void;\n }\n) => {\n const { label, endAction, handleClick, ...rest } = props;\n\n return (\n <StyledLink {...rest} onClick={handleClick}>\n <Box width={'100%'} paddingLeft={3} paddingRight={3} borderRadius={1}>\n <Flex justifyContent=\"space-between\" width=\"100%\" gap={1}>\n <Typography\n tag=\"div\"\n lineHeight=\"32px\"\n width={{ initial: '80dvw', medium: '100%' }}\n overflow=\"hidden\"\n style={{ textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}\n >\n {label}\n </Typography>\n <Flex gap={2}>{endAction}</Flex>\n </Flex>\n </Box>\n </StyledLink>\n );\n};\n\nconst StyledHeader = styled(Flex)`\n flex: 0 0 ${HEIGHT_TOP_NAVIGATION};\n height: ${HEIGHT_TOP_NAVIGATION};\n`;\n\nconst Header = ({ label }: { label: string }) => {\n return (\n <StyledHeader\n justifyContent=\"space-between\"\n paddingLeft={{\n initial: 4,\n large: 5,\n }}\n paddingRight={{\n initial: 4,\n large: 5,\n }}\n >\n <Typography variant=\"beta\" tag=\"h2\">\n {label}\n </Typography>\n </StyledHeader>\n );\n};\n\nconst Sections = ({\n children,\n ...props\n}: {\n children: React.ReactNode[];\n [key: string]: unknown;\n}) => {\n return (\n <Box paddingTop={4} paddingBottom={4} maxWidth={{ initial: '100%', medium: '23.2rem' }}>\n <Flex tag=\"ul\" gap=\"5\" direction=\"column\" alignItems=\"stretch\" {...props}>\n {children.map((child, index) => {\n return <li key={index}>{child}</li>;\n })}\n </Flex>\n </Box>\n );\n};\n\n/**\n * TODO:\n * This would be better in the content-type-builder package directly but currently\n * the SubNav API does not expose a way to wrap the link, instead it wraps the link and the list\n */\nconst GuidedTourTooltip = ({\n sectionId,\n children,\n}: {\n sectionId?: string;\n children: React.ReactNode;\n}) => {\n switch (sectionId) {\n case 'models':\n return (\n <tours.contentTypeBuilder.CollectionTypes>\n <tours.contentTypeBuilder.YourTurn>{children}</tours.contentTypeBuilder.YourTurn>\n </tours.contentTypeBuilder.CollectionTypes>\n );\n case 'singleTypes':\n return (\n <tours.contentTypeBuilder.SingleTypes>{children}</tours.contentTypeBuilder.SingleTypes>\n );\n case 'components':\n return <tours.contentTypeBuilder.Components>{children}</tours.contentTypeBuilder.Components>;\n default:\n return children;\n }\n};\n\nconst Section = ({\n label,\n children,\n link,\n sectionId,\n badgeLabel,\n}: {\n label: string;\n children: React.ReactNode[];\n link?: { label: string; onClick: () => void };\n sectionId?: string;\n badgeLabel?: string;\n}) => {\n const listId = useId();\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Box\n paddingLeft={{\n initial: 4,\n large: 5,\n }}\n paddingRight={{\n initial: 4,\n large: 5,\n }}\n >\n <Flex position=\"relative\" justifyContent=\"space-between\" gap={2}>\n <Flex>\n <Box paddingRight={1}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {label}\n </Typography>\n </Box>\n </Flex>\n <Flex gap={1}>\n {badgeLabel && (\n <Badge backgroundColor=\"neutral150\" textColor=\"neutral600\">\n {badgeLabel}\n </Badge>\n )}\n {link && (\n <GuidedTourTooltip sectionId={sectionId}>\n <IconButton\n label={link.label}\n variant=\"ghost\"\n withTooltip\n onClick={link.onClick}\n size=\"XS\"\n >\n <Plus />\n </IconButton>\n </GuidedTourTooltip>\n )}\n </Flex>\n </Flex>\n </Box>\n <Flex\n tag=\"ol\"\n id={listId}\n direction=\"column\"\n gap=\"2px\"\n alignItems={'stretch'}\n marginLeft={{\n initial: 1,\n large: 2,\n }}\n marginRight={{\n initial: 1,\n large: 2,\n }}\n >\n {children.map((child, index) => {\n return <li key={index}>{child}</li>;\n })}\n </Flex>\n </Flex>\n );\n};\n\nconst SubSectionHeader = styled.button`\n cursor: pointer;\n width: 100%;\n border: none;\n padding: 0;\n background: transparent;\n display: flex;\n align-items: center;\n border-radius: ${({ theme }) => theme.borderRadius};\n padding-left: ${({ theme }) => theme.spaces[3]};\n padding-right: ${({ theme }) => theme.spaces[3]};\n padding-top: ${({ theme }) => theme.spaces[2]};\n padding-bottom: ${({ theme }) => theme.spaces[2]};\n\n &:hover {\n background-color: ${({ theme }) => theme.colors.neutral100};\n }\n`;\n\nconst SubSectionLinkWrapper = styled.li`\n ${StyledLink} > div {\n padding-left: 36px;\n }\n`;\n\nconst SubSection = ({ label, children }: { label: string; children: React.ReactNode[] }) => {\n const [isOpen, setOpenLinks] = useState(true);\n const listId = useId();\n\n const handleClick = () => {\n setOpenLinks((prev) => !prev);\n };\n\n return (\n <Box>\n <Flex justifyContent=\"space-between\">\n <SubSectionHeader onClick={handleClick} aria-expanded={isOpen} aria-controls={listId}>\n <ChevronDown\n aria-hidden\n fill=\"neutral500\"\n style={{\n transform: `rotate(${isOpen ? '0deg' : '-90deg'})`,\n transition: 'transform 0.5s',\n }}\n />\n <Box paddingLeft={2}>\n <Typography tag=\"span\" fontWeight=\"semiBold\" textColor=\"neutral800\">\n {label}\n </Typography>\n </Box>\n </SubSectionHeader>\n </Flex>\n <Flex\n tag=\"ul\"\n id={listId}\n direction=\"column\"\n gap=\"2px\"\n alignItems={'stretch'}\n style={{\n maxHeight: isOpen ? '1000px' : 0,\n overflow: 'hidden',\n transition: isOpen\n ? 'max-height 1s ease-in-out'\n : 'max-height 0.5s cubic-bezier(0, 1, 0, 1)',\n }}\n >\n {children.map((child, index) => {\n return <SubSectionLinkWrapper key={index}>{child}</SubSectionLinkWrapper>;\n })}\n </Flex>\n </Box>\n );\n};\n\nconst PageWrapper = styled(Box)`\n ${MainSubNav} {\n background-color: transparent;\n border-right: none;\n }\n\n ${({ theme }) => theme.breakpoints.medium} {\n ${MainSubNav} {\n top: 0;\n }\n }\n`;\n\nconst Content = ({ children }: { children: React.ReactNode }) => {\n return <ScrollArea>{children}</ScrollArea>;\n};\n\nexport const SubNav = {\n Main,\n Content,\n Header,\n Link,\n Sections,\n Section,\n SubSection,\n PageWrapper,\n};\n"],"names":["MainSubNav","styled","DSSubNav","HEIGHT_TOP_NAVIGATION","theme","colors","neutral0","breakpoints","medium","neutral150","large","Main","children","props","_jsx","StyledLink","NavLink","neutral800","primary100","primary700","neutral100","Link","label","endAction","handleClick","rest","onClick","Box","width","paddingLeft","paddingRight","borderRadius","_jsxs","Flex","justifyContent","gap","Typography","tag","lineHeight","initial","overflow","style","textOverflow","whiteSpace","StyledHeader","Header","variant","Sections","paddingTop","paddingBottom","maxWidth","direction","alignItems","map","child","index","li","GuidedTourTooltip","sectionId","tours","contentTypeBuilder","CollectionTypes","YourTurn","SingleTypes","Components","Section","link","badgeLabel","listId","useId","position","textColor","Badge","backgroundColor","IconButton","withTooltip","size","Plus","id","marginLeft","marginRight","SubSectionHeader","button","spaces","SubSectionLinkWrapper","SubSection","isOpen","setOpenLinks","useState","prev","aria-expanded","aria-controls","ChevronDown","aria-hidden","fill","transform","transition","fontWeight","maxHeight","PageWrapper","Content","ScrollArea","SubNav"],"mappings":"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"}
@@ -0,0 +1,216 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
+ var designSystem = require('@strapi/design-system');
6
+ var icons = require('@strapi/icons');
7
+ var reactDnd = require('react-dnd');
8
+ var reactDndHtml5Backend = require('react-dnd-html5-backend');
9
+ var reactIntl = require('react-intl');
10
+ var reactRouterDom = require('react-router-dom');
11
+ var styled = require('styled-components');
12
+ var Tracking = require('../features/Tracking.js');
13
+ var widgetLayout = require('../utils/widgetLayout.js');
14
+
15
+ function _interopNamespaceDefault(e) {
16
+ var n = Object.create(null);
17
+ if (e) {
18
+ Object.keys(e).forEach(function (k) {
19
+ if (k !== 'default') {
20
+ var d = Object.getOwnPropertyDescriptor(e, k);
21
+ Object.defineProperty(n, k, d.get ? d : {
22
+ enumerable: true,
23
+ get: function () { return e[k]; }
24
+ });
25
+ }
26
+ });
27
+ }
28
+ n.default = e;
29
+ return Object.freeze(n);
30
+ }
31
+
32
+ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
33
+
34
+ const WidgetActions = styled(designSystem.Flex)`
35
+ display: flex;
36
+
37
+ @media (hover: hover) and (pointer: fine) {
38
+ display: none;
39
+ }
40
+ `;
41
+ const DragIconButton = styled(designSystem.IconButton)`
42
+ display: none;
43
+
44
+ @media (hover: hover) and (pointer: fine) {
45
+ display: flex;
46
+ }
47
+ `;
48
+ const WidgetContainer = styled(designSystem.Flex)`
49
+ @media (hover: hover) and (pointer: fine) {
50
+ &:hover ${WidgetActions} {
51
+ display: flex;
52
+ }
53
+ }
54
+
55
+ &:focus-within ${WidgetActions} {
56
+ display: flex;
57
+ }
58
+
59
+ &:focus-within ${DragIconButton} {
60
+ pointer-events: none;
61
+
62
+ ${({ theme })=>theme.breakpoints.medium} {
63
+ pointer-events: auto;
64
+ }
65
+ }
66
+ `;
67
+ const WidgetRoot = ({ title, icon = icons.PuzzlePiece, children, link, uid, findWidget, deleteWidget, onDragStart, onDragEnd, component })=>{
68
+ const { trackUsage } = Tracking.useTracking();
69
+ const { formatMessage } = reactIntl.useIntl();
70
+ const Icon = icon;
71
+ const handleClickOnLink = ()=>{
72
+ trackUsage('didOpenHomeWidgetLink', {
73
+ widgetUID: uid
74
+ });
75
+ };
76
+ const handleDeleteWidget = ()=>{
77
+ deleteWidget?.(uid);
78
+ };
79
+ const [, drag, preview] = reactDnd.useDrag(()=>({
80
+ type: 'widget',
81
+ item: ()=>{
82
+ onDragStart?.(uid);
83
+ return {
84
+ id: uid,
85
+ originalIndex: findWidget?.(uid)?.index ?? 0,
86
+ title,
87
+ icon,
88
+ link,
89
+ component
90
+ };
91
+ },
92
+ collect: (monitor)=>({
93
+ isDragging: monitor.isDragging()
94
+ }),
95
+ end: ()=>{
96
+ onDragEnd?.();
97
+ }
98
+ }), [
99
+ uid,
100
+ findWidget,
101
+ onDragStart,
102
+ onDragEnd,
103
+ title,
104
+ icon,
105
+ link,
106
+ component
107
+ ]);
108
+ // Suppress default drag preview
109
+ React__namespace.useEffect(()=>{
110
+ preview(reactDndHtml5Backend.getEmptyImage(), {
111
+ captureDraggingState: true
112
+ });
113
+ }, [
114
+ preview
115
+ ]);
116
+ return /*#__PURE__*/ jsxRuntime.jsxs(WidgetContainer, {
117
+ width: "100%",
118
+ hasRadius: true,
119
+ direction: "column",
120
+ alignItems: "flex-start",
121
+ background: 'neutral0',
122
+ borderColor: 'neutral150',
123
+ shadow: "tableShadow",
124
+ tag: "section",
125
+ gap: 4,
126
+ padding: 6,
127
+ position: "relative",
128
+ "aria-labelledby": uid,
129
+ tabIndex: 0,
130
+ [widgetLayout.WIDGET_DATA_ATTRIBUTES.WIDGET_ID]: uid,
131
+ style: {
132
+ transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)'
133
+ },
134
+ children: [
135
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
136
+ direction: "row",
137
+ gap: 2,
138
+ width: "100%",
139
+ tag: "header",
140
+ alignItems: "center",
141
+ minHeight: "2.25rem",
142
+ children: [
143
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
144
+ gap: 2,
145
+ marginRight: "auto",
146
+ children: [
147
+ /*#__PURE__*/ jsxRuntime.jsx(Icon, {
148
+ fill: "neutral500",
149
+ "aria-hidden": true
150
+ }),
151
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
152
+ textColor: "neutral500",
153
+ variant: "sigma",
154
+ tag: "h2",
155
+ id: uid,
156
+ children: formatMessage(title)
157
+ })
158
+ ]
159
+ }),
160
+ link && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
161
+ tag: reactRouterDom.Link,
162
+ variant: "omega",
163
+ textColor: "primary600",
164
+ style: {
165
+ textDecoration: 'none'
166
+ },
167
+ textAlign: "right",
168
+ to: link.href,
169
+ onClick: handleClickOnLink,
170
+ children: formatMessage(link.label)
171
+ }),
172
+ /*#__PURE__*/ jsxRuntime.jsxs(WidgetActions, {
173
+ gap: 2,
174
+ children: [
175
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
176
+ variant: "danger-light",
177
+ size: "XS",
178
+ onClick: handleDeleteWidget,
179
+ label: formatMessage({
180
+ id: 'HomePage.widget.delete',
181
+ defaultMessage: 'Delete'
182
+ }),
183
+ cursor: "pointer",
184
+ children: /*#__PURE__*/ jsxRuntime.jsx(icons.Trash, {})
185
+ }),
186
+ /*#__PURE__*/ jsxRuntime.jsx(DragIconButton, {
187
+ variant: "tertiary",
188
+ size: "XS",
189
+ ref: drag,
190
+ tabIndex: -1,
191
+ label: formatMessage({
192
+ id: 'HomePage.widget.drag',
193
+ defaultMessage: 'Drag to move'
194
+ }),
195
+ cursor: "grab",
196
+ children: /*#__PURE__*/ jsxRuntime.jsx(icons.Drag, {})
197
+ })
198
+ ]
199
+ })
200
+ ]
201
+ }),
202
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.ScrollArea, {
203
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
204
+ width: "100%",
205
+ height: "261px",
206
+ overflow: "auto",
207
+ tag: "main",
208
+ children: children
209
+ })
210
+ })
211
+ ]
212
+ });
213
+ };
214
+
215
+ exports.WidgetRoot = WidgetRoot;
216
+ //# sourceMappingURL=WidgetRoot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WidgetRoot.js","sources":["../../../../../admin/src/components/WidgetRoot.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Flex, Typography, ScrollArea, IconButton } from '@strapi/design-system';\nimport { PuzzlePiece, Trash, Drag } from '@strapi/icons';\nimport { useDrag } from 'react-dnd';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { Link as ReactRouterLink } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { useTracking } from '../features/Tracking';\nimport { WIDGET_DATA_ATTRIBUTES } from '../utils/widgetLayout';\n\nimport type { FindWidgetFunction, WidgetIdFunction, DragEndFunction } from '../features/Widgets';\nimport type { WidgetType } from '@strapi/admin/strapi-admin';\n\nexport interface BaseWidgetProps\n extends Pick<WidgetType, 'title' | 'icon' | 'permissions' | 'link' | 'uid'> {\n findWidget?: FindWidgetFunction;\n deleteWidget?: WidgetIdFunction;\n onDragStart?: WidgetIdFunction;\n onDragEnd?: DragEndFunction;\n}\n\nexport interface WidgetRootProps extends BaseWidgetProps {\n children: React.ReactNode;\n component?: () => Promise<React.ComponentType>;\n}\n\nconst WidgetActions = styled(Flex)`\n display: flex;\n\n @media (hover: hover) and (pointer: fine) {\n display: none;\n }\n`;\n\nconst DragIconButton = styled(IconButton)`\n display: none;\n\n @media (hover: hover) and (pointer: fine) {\n display: flex;\n }\n`;\n\nconst WidgetContainer = styled(Flex)`\n @media (hover: hover) and (pointer: fine) {\n &:hover ${WidgetActions} {\n display: flex;\n }\n }\n\n &:focus-within ${WidgetActions} {\n display: flex;\n }\n\n &:focus-within ${DragIconButton} {\n pointer-events: none;\n\n ${({ theme }) => theme.breakpoints.medium} {\n pointer-events: auto;\n }\n }\n`;\n\nexport const WidgetRoot = ({\n title,\n icon = PuzzlePiece,\n children,\n link,\n uid,\n findWidget,\n deleteWidget,\n onDragStart,\n onDragEnd,\n component,\n}: WidgetRootProps) => {\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const Icon = icon;\n\n const handleClickOnLink = () => {\n trackUsage('didOpenHomeWidgetLink', { widgetUID: uid });\n };\n\n const handleDeleteWidget = () => {\n deleteWidget?.(uid);\n };\n\n const [, drag, preview] = useDrag(\n () => ({\n type: 'widget',\n item: () => {\n onDragStart?.(uid);\n return {\n id: uid,\n originalIndex: findWidget?.(uid)?.index ?? 0,\n title,\n icon,\n link,\n component,\n };\n },\n collect: (monitor) => ({\n isDragging: monitor.isDragging(),\n }),\n end: () => {\n onDragEnd?.();\n },\n }),\n [uid, findWidget, onDragStart, onDragEnd, title, icon, link, component]\n );\n\n // Suppress default drag preview\n React.useEffect(() => {\n preview(getEmptyImage(), { captureDraggingState: true });\n }, [preview]);\n\n return (\n <WidgetContainer\n width=\"100%\"\n hasRadius\n direction=\"column\"\n alignItems=\"flex-start\"\n background={'neutral0'}\n borderColor={'neutral150'}\n shadow=\"tableShadow\"\n tag=\"section\"\n gap={4}\n padding={6}\n position=\"relative\"\n aria-labelledby={uid}\n tabIndex={0}\n {...{ [WIDGET_DATA_ATTRIBUTES.WIDGET_ID]: uid }}\n style={{\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n }}\n >\n <Flex\n direction=\"row\"\n gap={2}\n width=\"100%\"\n tag=\"header\"\n alignItems=\"center\"\n minHeight=\"2.25rem\"\n >\n <Flex gap={2} marginRight=\"auto\">\n <Icon fill=\"neutral500\" aria-hidden />\n <Typography textColor=\"neutral500\" variant=\"sigma\" tag=\"h2\" id={uid}>\n {formatMessage(title)}\n </Typography>\n </Flex>\n {link && (\n <Typography\n tag={ReactRouterLink}\n variant=\"omega\"\n textColor=\"primary600\"\n style={{ textDecoration: 'none' }}\n textAlign=\"right\"\n to={link.href}\n onClick={handleClickOnLink}\n >\n {formatMessage(link.label)}\n </Typography>\n )}\n <WidgetActions gap={2}>\n <IconButton\n variant=\"danger-light\"\n size=\"XS\"\n onClick={handleDeleteWidget}\n label={formatMessage({\n id: 'HomePage.widget.delete',\n defaultMessage: 'Delete',\n })}\n cursor=\"pointer\"\n >\n <Trash />\n </IconButton>\n <DragIconButton\n variant=\"tertiary\"\n size=\"XS\"\n ref={drag}\n tabIndex={-1}\n label={formatMessage({\n id: 'HomePage.widget.drag',\n defaultMessage: 'Drag to move',\n })}\n cursor=\"grab\"\n >\n <Drag />\n </DragIconButton>\n </WidgetActions>\n </Flex>\n <ScrollArea>\n <Box width=\"100%\" height=\"261px\" overflow=\"auto\" tag=\"main\">\n {children}\n </Box>\n </ScrollArea>\n </WidgetContainer>\n );\n};\n"],"names":["WidgetActions","styled","Flex","DragIconButton","IconButton","WidgetContainer","theme","breakpoints","medium","WidgetRoot","title","icon","PuzzlePiece","children","link","uid","findWidget","deleteWidget","onDragStart","onDragEnd","component","trackUsage","useTracking","formatMessage","useIntl","Icon","handleClickOnLink","widgetUID","handleDeleteWidget","drag","preview","useDrag","type","item","id","originalIndex","index","collect","monitor","isDragging","end","React","useEffect","getEmptyImage","captureDraggingState","_jsxs","width","hasRadius","direction","alignItems","background","borderColor","shadow","tag","gap","padding","position","aria-labelledby","tabIndex","WIDGET_DATA_ATTRIBUTES","WIDGET_ID","style","transition","minHeight","marginRight","_jsx","fill","aria-hidden","Typography","textColor","variant","ReactRouterLink","textDecoration","textAlign","to","href","onClick","label","size","defaultMessage","cursor","Trash","ref","Drag","ScrollArea","Box","height","overflow"],"mappings":"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"}
@@ -0,0 +1,195 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { Flex, IconButton, Typography, ScrollArea, Box } from '@strapi/design-system';
4
+ import { Trash, Drag, PuzzlePiece } from '@strapi/icons';
5
+ import { useDrag } from 'react-dnd';
6
+ import { getEmptyImage } from 'react-dnd-html5-backend';
7
+ import { useIntl } from 'react-intl';
8
+ import { Link } from 'react-router-dom';
9
+ import styled from 'styled-components';
10
+ import { useTracking } from '../features/Tracking.mjs';
11
+ import { WIDGET_DATA_ATTRIBUTES } from '../utils/widgetLayout.mjs';
12
+
13
+ const WidgetActions = styled(Flex)`
14
+ display: flex;
15
+
16
+ @media (hover: hover) and (pointer: fine) {
17
+ display: none;
18
+ }
19
+ `;
20
+ const DragIconButton = styled(IconButton)`
21
+ display: none;
22
+
23
+ @media (hover: hover) and (pointer: fine) {
24
+ display: flex;
25
+ }
26
+ `;
27
+ const WidgetContainer = styled(Flex)`
28
+ @media (hover: hover) and (pointer: fine) {
29
+ &:hover ${WidgetActions} {
30
+ display: flex;
31
+ }
32
+ }
33
+
34
+ &:focus-within ${WidgetActions} {
35
+ display: flex;
36
+ }
37
+
38
+ &:focus-within ${DragIconButton} {
39
+ pointer-events: none;
40
+
41
+ ${({ theme })=>theme.breakpoints.medium} {
42
+ pointer-events: auto;
43
+ }
44
+ }
45
+ `;
46
+ const WidgetRoot = ({ title, icon = PuzzlePiece, children, link, uid, findWidget, deleteWidget, onDragStart, onDragEnd, component })=>{
47
+ const { trackUsage } = useTracking();
48
+ const { formatMessage } = useIntl();
49
+ const Icon = icon;
50
+ const handleClickOnLink = ()=>{
51
+ trackUsage('didOpenHomeWidgetLink', {
52
+ widgetUID: uid
53
+ });
54
+ };
55
+ const handleDeleteWidget = ()=>{
56
+ deleteWidget?.(uid);
57
+ };
58
+ const [, drag, preview] = useDrag(()=>({
59
+ type: 'widget',
60
+ item: ()=>{
61
+ onDragStart?.(uid);
62
+ return {
63
+ id: uid,
64
+ originalIndex: findWidget?.(uid)?.index ?? 0,
65
+ title,
66
+ icon,
67
+ link,
68
+ component
69
+ };
70
+ },
71
+ collect: (monitor)=>({
72
+ isDragging: monitor.isDragging()
73
+ }),
74
+ end: ()=>{
75
+ onDragEnd?.();
76
+ }
77
+ }), [
78
+ uid,
79
+ findWidget,
80
+ onDragStart,
81
+ onDragEnd,
82
+ title,
83
+ icon,
84
+ link,
85
+ component
86
+ ]);
87
+ // Suppress default drag preview
88
+ React.useEffect(()=>{
89
+ preview(getEmptyImage(), {
90
+ captureDraggingState: true
91
+ });
92
+ }, [
93
+ preview
94
+ ]);
95
+ return /*#__PURE__*/ jsxs(WidgetContainer, {
96
+ width: "100%",
97
+ hasRadius: true,
98
+ direction: "column",
99
+ alignItems: "flex-start",
100
+ background: 'neutral0',
101
+ borderColor: 'neutral150',
102
+ shadow: "tableShadow",
103
+ tag: "section",
104
+ gap: 4,
105
+ padding: 6,
106
+ position: "relative",
107
+ "aria-labelledby": uid,
108
+ tabIndex: 0,
109
+ [WIDGET_DATA_ATTRIBUTES.WIDGET_ID]: uid,
110
+ style: {
111
+ transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)'
112
+ },
113
+ children: [
114
+ /*#__PURE__*/ jsxs(Flex, {
115
+ direction: "row",
116
+ gap: 2,
117
+ width: "100%",
118
+ tag: "header",
119
+ alignItems: "center",
120
+ minHeight: "2.25rem",
121
+ children: [
122
+ /*#__PURE__*/ jsxs(Flex, {
123
+ gap: 2,
124
+ marginRight: "auto",
125
+ children: [
126
+ /*#__PURE__*/ jsx(Icon, {
127
+ fill: "neutral500",
128
+ "aria-hidden": true
129
+ }),
130
+ /*#__PURE__*/ jsx(Typography, {
131
+ textColor: "neutral500",
132
+ variant: "sigma",
133
+ tag: "h2",
134
+ id: uid,
135
+ children: formatMessage(title)
136
+ })
137
+ ]
138
+ }),
139
+ link && /*#__PURE__*/ jsx(Typography, {
140
+ tag: Link,
141
+ variant: "omega",
142
+ textColor: "primary600",
143
+ style: {
144
+ textDecoration: 'none'
145
+ },
146
+ textAlign: "right",
147
+ to: link.href,
148
+ onClick: handleClickOnLink,
149
+ children: formatMessage(link.label)
150
+ }),
151
+ /*#__PURE__*/ jsxs(WidgetActions, {
152
+ gap: 2,
153
+ children: [
154
+ /*#__PURE__*/ jsx(IconButton, {
155
+ variant: "danger-light",
156
+ size: "XS",
157
+ onClick: handleDeleteWidget,
158
+ label: formatMessage({
159
+ id: 'HomePage.widget.delete',
160
+ defaultMessage: 'Delete'
161
+ }),
162
+ cursor: "pointer",
163
+ children: /*#__PURE__*/ jsx(Trash, {})
164
+ }),
165
+ /*#__PURE__*/ jsx(DragIconButton, {
166
+ variant: "tertiary",
167
+ size: "XS",
168
+ ref: drag,
169
+ tabIndex: -1,
170
+ label: formatMessage({
171
+ id: 'HomePage.widget.drag',
172
+ defaultMessage: 'Drag to move'
173
+ }),
174
+ cursor: "grab",
175
+ children: /*#__PURE__*/ jsx(Drag, {})
176
+ })
177
+ ]
178
+ })
179
+ ]
180
+ }),
181
+ /*#__PURE__*/ jsx(ScrollArea, {
182
+ children: /*#__PURE__*/ jsx(Box, {
183
+ width: "100%",
184
+ height: "261px",
185
+ overflow: "auto",
186
+ tag: "main",
187
+ children: children
188
+ })
189
+ })
190
+ ]
191
+ });
192
+ };
193
+
194
+ export { WidgetRoot };
195
+ //# sourceMappingURL=WidgetRoot.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WidgetRoot.mjs","sources":["../../../../../admin/src/components/WidgetRoot.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Flex, Typography, ScrollArea, IconButton } from '@strapi/design-system';\nimport { PuzzlePiece, Trash, Drag } from '@strapi/icons';\nimport { useDrag } from 'react-dnd';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { Link as ReactRouterLink } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { useTracking } from '../features/Tracking';\nimport { WIDGET_DATA_ATTRIBUTES } from '../utils/widgetLayout';\n\nimport type { FindWidgetFunction, WidgetIdFunction, DragEndFunction } from '../features/Widgets';\nimport type { WidgetType } from '@strapi/admin/strapi-admin';\n\nexport interface BaseWidgetProps\n extends Pick<WidgetType, 'title' | 'icon' | 'permissions' | 'link' | 'uid'> {\n findWidget?: FindWidgetFunction;\n deleteWidget?: WidgetIdFunction;\n onDragStart?: WidgetIdFunction;\n onDragEnd?: DragEndFunction;\n}\n\nexport interface WidgetRootProps extends BaseWidgetProps {\n children: React.ReactNode;\n component?: () => Promise<React.ComponentType>;\n}\n\nconst WidgetActions = styled(Flex)`\n display: flex;\n\n @media (hover: hover) and (pointer: fine) {\n display: none;\n }\n`;\n\nconst DragIconButton = styled(IconButton)`\n display: none;\n\n @media (hover: hover) and (pointer: fine) {\n display: flex;\n }\n`;\n\nconst WidgetContainer = styled(Flex)`\n @media (hover: hover) and (pointer: fine) {\n &:hover ${WidgetActions} {\n display: flex;\n }\n }\n\n &:focus-within ${WidgetActions} {\n display: flex;\n }\n\n &:focus-within ${DragIconButton} {\n pointer-events: none;\n\n ${({ theme }) => theme.breakpoints.medium} {\n pointer-events: auto;\n }\n }\n`;\n\nexport const WidgetRoot = ({\n title,\n icon = PuzzlePiece,\n children,\n link,\n uid,\n findWidget,\n deleteWidget,\n onDragStart,\n onDragEnd,\n component,\n}: WidgetRootProps) => {\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const Icon = icon;\n\n const handleClickOnLink = () => {\n trackUsage('didOpenHomeWidgetLink', { widgetUID: uid });\n };\n\n const handleDeleteWidget = () => {\n deleteWidget?.(uid);\n };\n\n const [, drag, preview] = useDrag(\n () => ({\n type: 'widget',\n item: () => {\n onDragStart?.(uid);\n return {\n id: uid,\n originalIndex: findWidget?.(uid)?.index ?? 0,\n title,\n icon,\n link,\n component,\n };\n },\n collect: (monitor) => ({\n isDragging: monitor.isDragging(),\n }),\n end: () => {\n onDragEnd?.();\n },\n }),\n [uid, findWidget, onDragStart, onDragEnd, title, icon, link, component]\n );\n\n // Suppress default drag preview\n React.useEffect(() => {\n preview(getEmptyImage(), { captureDraggingState: true });\n }, [preview]);\n\n return (\n <WidgetContainer\n width=\"100%\"\n hasRadius\n direction=\"column\"\n alignItems=\"flex-start\"\n background={'neutral0'}\n borderColor={'neutral150'}\n shadow=\"tableShadow\"\n tag=\"section\"\n gap={4}\n padding={6}\n position=\"relative\"\n aria-labelledby={uid}\n tabIndex={0}\n {...{ [WIDGET_DATA_ATTRIBUTES.WIDGET_ID]: uid }}\n style={{\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n }}\n >\n <Flex\n direction=\"row\"\n gap={2}\n width=\"100%\"\n tag=\"header\"\n alignItems=\"center\"\n minHeight=\"2.25rem\"\n >\n <Flex gap={2} marginRight=\"auto\">\n <Icon fill=\"neutral500\" aria-hidden />\n <Typography textColor=\"neutral500\" variant=\"sigma\" tag=\"h2\" id={uid}>\n {formatMessage(title)}\n </Typography>\n </Flex>\n {link && (\n <Typography\n tag={ReactRouterLink}\n variant=\"omega\"\n textColor=\"primary600\"\n style={{ textDecoration: 'none' }}\n textAlign=\"right\"\n to={link.href}\n onClick={handleClickOnLink}\n >\n {formatMessage(link.label)}\n </Typography>\n )}\n <WidgetActions gap={2}>\n <IconButton\n variant=\"danger-light\"\n size=\"XS\"\n onClick={handleDeleteWidget}\n label={formatMessage({\n id: 'HomePage.widget.delete',\n defaultMessage: 'Delete',\n })}\n cursor=\"pointer\"\n >\n <Trash />\n </IconButton>\n <DragIconButton\n variant=\"tertiary\"\n size=\"XS\"\n ref={drag}\n tabIndex={-1}\n label={formatMessage({\n id: 'HomePage.widget.drag',\n defaultMessage: 'Drag to move',\n })}\n cursor=\"grab\"\n >\n <Drag />\n </DragIconButton>\n </WidgetActions>\n </Flex>\n <ScrollArea>\n <Box width=\"100%\" height=\"261px\" overflow=\"auto\" tag=\"main\">\n {children}\n </Box>\n </ScrollArea>\n </WidgetContainer>\n );\n};\n"],"names":["WidgetActions","styled","Flex","DragIconButton","IconButton","WidgetContainer","theme","breakpoints","medium","WidgetRoot","title","icon","PuzzlePiece","children","link","uid","findWidget","deleteWidget","onDragStart","onDragEnd","component","trackUsage","useTracking","formatMessage","useIntl","Icon","handleClickOnLink","widgetUID","handleDeleteWidget","drag","preview","useDrag","type","item","id","originalIndex","index","collect","monitor","isDragging","end","React","useEffect","getEmptyImage","captureDraggingState","_jsxs","width","hasRadius","direction","alignItems","background","borderColor","shadow","tag","gap","padding","position","aria-labelledby","tabIndex","WIDGET_DATA_ATTRIBUTES","WIDGET_ID","style","transition","minHeight","marginRight","_jsx","fill","aria-hidden","Typography","textColor","variant","ReactRouterLink","textDecoration","textAlign","to","href","onClick","label","size","defaultMessage","cursor","Trash","ref","Drag","ScrollArea","Box","height","overflow"],"mappings":"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"}