@strapi/content-manager 0.0.0-next.9c7149630dabd4c43f44cf68ed4ce6d7562607e8 → 0.0.0-next.9c8de92874cc9e5ffb105e4f613c1d2fff7b3207

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 (185) hide show
  1. package/dist/admin/components/LeftMenu.js +13 -15
  2. package/dist/admin/components/LeftMenu.js.map +1 -1
  3. package/dist/admin/components/LeftMenu.mjs +14 -16
  4. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  5. package/dist/admin/components/Widgets.js +269 -9
  6. package/dist/admin/components/Widgets.js.map +1 -1
  7. package/dist/admin/components/Widgets.mjs +252 -12
  8. package/dist/admin/components/Widgets.mjs.map +1 -1
  9. package/dist/admin/hooks/useDocumentActions.js +0 -3
  10. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  11. package/dist/admin/hooks/useDocumentActions.mjs +1 -4
  12. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  13. package/dist/admin/index.js +47 -8
  14. package/dist/admin/index.js.map +1 -1
  15. package/dist/admin/index.mjs +47 -9
  16. package/dist/admin/index.mjs.map +1 -1
  17. package/dist/admin/layout.js +1 -27
  18. package/dist/admin/layout.js.map +1 -1
  19. package/dist/admin/layout.mjs +2 -9
  20. package/dist/admin/layout.mjs.map +1 -1
  21. package/dist/admin/pages/EditView/EditViewPage.js +14 -16
  22. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  23. package/dist/admin/pages/EditView/EditViewPage.mjs +16 -18
  24. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  25. package/dist/admin/pages/EditView/components/Blocker.js +18 -0
  26. package/dist/admin/pages/EditView/components/Blocker.js.map +1 -0
  27. package/dist/admin/pages/EditView/components/Blocker.mjs +16 -0
  28. package/dist/admin/pages/EditView/components/Blocker.mjs.map +1 -0
  29. package/dist/admin/pages/EditView/components/DocumentActions.js +18 -3
  30. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  31. package/dist/admin/pages/EditView/components/DocumentActions.mjs +19 -4
  32. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  33. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +1 -0
  34. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  35. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +1 -0
  36. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  37. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +4 -1
  38. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  39. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +4 -1
  40. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  41. package/dist/admin/pages/EditView/components/InputRenderer.js +15 -5
  42. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  43. package/dist/admin/pages/EditView/components/InputRenderer.mjs +15 -5
  44. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  45. package/dist/admin/pages/EditView/utils/data.js +33 -8
  46. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  47. package/dist/admin/pages/EditView/utils/data.mjs +33 -8
  48. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  49. package/dist/admin/pages/ListView/ListViewPage.js +152 -143
  50. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  51. package/dist/admin/pages/ListView/ListViewPage.mjs +153 -144
  52. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  53. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +12 -2
  54. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
  55. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +12 -2
  56. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
  57. package/dist/admin/pages/ListView/components/Filters.js +3 -1
  58. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  59. package/dist/admin/pages/ListView/components/Filters.mjs +3 -1
  60. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  61. package/dist/admin/preview/components/InputPopover.js +73 -0
  62. package/dist/admin/preview/components/InputPopover.js.map +1 -0
  63. package/dist/admin/preview/components/InputPopover.mjs +70 -0
  64. package/dist/admin/preview/components/InputPopover.mjs.map +1 -0
  65. package/dist/admin/preview/components/PreviewSidePanel.js +31 -4
  66. package/dist/admin/preview/components/PreviewSidePanel.js.map +1 -1
  67. package/dist/admin/preview/components/PreviewSidePanel.mjs +32 -5
  68. package/dist/admin/preview/components/PreviewSidePanel.mjs.map +1 -1
  69. package/dist/admin/preview/hooks/usePreviewInputManager.js +67 -0
  70. package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -0
  71. package/dist/admin/preview/hooks/usePreviewInputManager.mjs +46 -0
  72. package/dist/admin/preview/hooks/usePreviewInputManager.mjs.map +1 -0
  73. package/dist/admin/preview/pages/Preview.js +170 -68
  74. package/dist/admin/preview/pages/Preview.js.map +1 -1
  75. package/dist/admin/preview/pages/Preview.mjs +172 -70
  76. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  77. package/dist/admin/preview/utils/constants.js +22 -0
  78. package/dist/admin/preview/utils/constants.js.map +1 -0
  79. package/dist/admin/preview/utils/constants.mjs +19 -0
  80. package/dist/admin/preview/utils/constants.mjs.map +1 -0
  81. package/dist/admin/preview/utils/getSendMessage.js +22 -0
  82. package/dist/admin/preview/utils/getSendMessage.js.map +1 -0
  83. package/dist/admin/preview/utils/getSendMessage.mjs +20 -0
  84. package/dist/admin/preview/utils/getSendMessage.mjs.map +1 -0
  85. package/dist/admin/preview/utils/previewScript.js +450 -0
  86. package/dist/admin/preview/utils/previewScript.js.map +1 -0
  87. package/dist/admin/preview/utils/previewScript.mjs +448 -0
  88. package/dist/admin/preview/utils/previewScript.mjs.map +1 -0
  89. package/dist/admin/services/api.js +3 -1
  90. package/dist/admin/services/api.js.map +1 -1
  91. package/dist/admin/services/api.mjs +3 -1
  92. package/dist/admin/services/api.mjs.map +1 -1
  93. package/dist/admin/services/documents.js +39 -14
  94. package/dist/admin/services/documents.js.map +1 -1
  95. package/dist/admin/services/documents.mjs +39 -14
  96. package/dist/admin/services/documents.mjs.map +1 -1
  97. package/dist/admin/src/components/Widgets.d.ts +2 -1
  98. package/dist/admin/src/exports.d.ts +1 -0
  99. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  100. package/dist/admin/src/pages/EditView/components/Blocker.d.ts +5 -0
  101. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
  102. package/dist/admin/src/preview/components/InputPopover.d.ts +6 -0
  103. package/dist/admin/src/preview/hooks/usePreviewInputManager.d.ts +4 -0
  104. package/dist/admin/src/preview/pages/Preview.d.ts +8 -0
  105. package/dist/admin/src/preview/services/preview.d.ts +1 -1
  106. package/dist/admin/src/preview/utils/constants.d.ts +20 -0
  107. package/dist/admin/src/preview/utils/getSendMessage.d.ts +11 -0
  108. package/dist/admin/src/preview/utils/previewScript.d.ts +23 -0
  109. package/dist/admin/src/services/api.d.ts +1 -1
  110. package/dist/admin/src/services/components.d.ts +2 -2
  111. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  112. package/dist/admin/src/services/documents.d.ts +16 -16
  113. package/dist/admin/src/services/homepage.d.ts +1 -1
  114. package/dist/admin/src/services/init.d.ts +1 -1
  115. package/dist/admin/src/services/relations.d.ts +2 -2
  116. package/dist/admin/src/services/uid.d.ts +3 -3
  117. package/dist/admin/src/utils/api.d.ts +1 -1
  118. package/dist/admin/translations/en.json.js +7 -0
  119. package/dist/admin/translations/en.json.js.map +1 -1
  120. package/dist/admin/translations/en.json.mjs +7 -0
  121. package/dist/admin/translations/en.json.mjs.map +1 -1
  122. package/dist/admin/translations/es.json.js +6 -2
  123. package/dist/admin/translations/es.json.js.map +1 -1
  124. package/dist/admin/translations/es.json.mjs +6 -2
  125. package/dist/admin/translations/es.json.mjs.map +1 -1
  126. package/dist/admin/translations/fr.json.js +5 -1
  127. package/dist/admin/translations/fr.json.js.map +1 -1
  128. package/dist/admin/translations/fr.json.mjs +5 -1
  129. package/dist/admin/translations/fr.json.mjs.map +1 -1
  130. package/dist/admin/utils/api.js +1 -1
  131. package/dist/admin/utils/api.js.map +1 -1
  132. package/dist/admin/utils/api.mjs +1 -1
  133. package/dist/admin/utils/api.mjs.map +1 -1
  134. package/dist/admin/utils/validation.js +2 -1
  135. package/dist/admin/utils/validation.js.map +1 -1
  136. package/dist/admin/utils/validation.mjs +2 -1
  137. package/dist/admin/utils/validation.mjs.map +1 -1
  138. package/dist/server/history/services/lifecycles.js +20 -19
  139. package/dist/server/history/services/lifecycles.js.map +1 -1
  140. package/dist/server/history/services/lifecycles.mjs +20 -19
  141. package/dist/server/history/services/lifecycles.mjs.map +1 -1
  142. package/dist/server/homepage/controllers/homepage.js +5 -0
  143. package/dist/server/homepage/controllers/homepage.js.map +1 -1
  144. package/dist/server/homepage/controllers/homepage.mjs +5 -0
  145. package/dist/server/homepage/controllers/homepage.mjs.map +1 -1
  146. package/dist/server/homepage/routes/homepage.js +11 -0
  147. package/dist/server/homepage/routes/homepage.js.map +1 -1
  148. package/dist/server/homepage/routes/homepage.mjs +11 -0
  149. package/dist/server/homepage/routes/homepage.mjs.map +1 -1
  150. package/dist/server/homepage/services/homepage.js +86 -46
  151. package/dist/server/homepage/services/homepage.js.map +1 -1
  152. package/dist/server/homepage/services/homepage.mjs +86 -46
  153. package/dist/server/homepage/services/homepage.mjs.map +1 -1
  154. package/dist/server/preview/services/preview-config.js +5 -1
  155. package/dist/server/preview/services/preview-config.js.map +1 -1
  156. package/dist/server/preview/services/preview-config.mjs +5 -1
  157. package/dist/server/preview/services/preview-config.mjs.map +1 -1
  158. package/dist/server/preview/services/preview.js +4 -0
  159. package/dist/server/preview/services/preview.js.map +1 -1
  160. package/dist/server/preview/services/preview.mjs +4 -0
  161. package/dist/server/preview/services/preview.mjs.map +1 -1
  162. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  163. package/dist/server/src/homepage/controllers/homepage.d.ts +2 -1
  164. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -1
  165. package/dist/server/src/homepage/index.d.ts +7 -0
  166. package/dist/server/src/homepage/index.d.ts.map +1 -1
  167. package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -1
  168. package/dist/server/src/homepage/services/homepage.d.ts +4 -1
  169. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
  170. package/dist/server/src/homepage/services/index.d.ts +7 -0
  171. package/dist/server/src/homepage/services/index.d.ts.map +1 -1
  172. package/dist/server/src/index.d.ts +7 -0
  173. package/dist/server/src/index.d.ts.map +1 -1
  174. package/dist/server/src/preview/services/index.d.ts +1 -0
  175. package/dist/server/src/preview/services/index.d.ts.map +1 -1
  176. package/dist/server/src/preview/services/preview-config.d.ts +1 -0
  177. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
  178. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  179. package/dist/server/src/preview/utils.d.ts +1 -0
  180. package/dist/server/src/preview/utils.d.ts.map +1 -1
  181. package/dist/server/src/services/index.d.ts +7 -0
  182. package/dist/server/src/services/index.d.ts.map +1 -1
  183. package/dist/shared/contracts/homepage.d.ts +13 -0
  184. package/dist/shared/contracts/homepage.d.ts.map +1 -1
  185. package/package.json +7 -8
@@ -4,7 +4,6 @@ var jsxRuntime = require('react/jsx-runtime');
4
4
  var React = require('react');
5
5
  var strapiAdmin = require('@strapi/admin/strapi-admin');
6
6
  var designSystem = require('@strapi/design-system');
7
- var Icons = require('@strapi/icons');
8
7
  var qs = require('qs');
9
8
  var reactIntl = require('react-intl');
10
9
  var useContentTypeSchema = require('../hooks/useContentTypeSchema.js');
@@ -66,7 +65,7 @@ const LeftMenu = ()=>{
66
65
  ...section,
67
66
  links: section.links/**
68
67
  * Filter by the search value
69
- */ .filter((link)=>startsWith(link.title, search))/**
68
+ */ .filter((link)=>startsWith(link.title, search.trim()))/**
70
69
  * Sort correctly using the language
71
70
  */ .sort((a, b)=>formatter.compare(a.title, b.title))/**
72
71
  * Apply the formated strings to the links from react-intl
@@ -90,8 +89,8 @@ const LeftMenu = ()=>{
90
89
  const handleClear = ()=>{
91
90
  setSearch('');
92
91
  };
93
- const handleChangeSearch = ({ target: { value } })=>{
94
- setSearch(value);
92
+ const handleChangeSearch = (event)=>{
93
+ setSearch(event.target.value);
95
94
  };
96
95
  const label = formatMessage({
97
96
  id: translations.getTranslation('header.name'),
@@ -130,23 +129,22 @@ const LeftMenu = ()=>{
130
129
  gap: 3,
131
130
  direction: 'column',
132
131
  alignItems: 'stretch',
133
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.TextInput, {
134
- startAction: /*#__PURE__*/ jsxRuntime.jsx(Icons.Search, {
135
- fill: "neutral500"
136
- }),
132
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Searchbar, {
137
133
  value: search,
138
134
  onChange: handleChangeSearch,
139
- "aria-label": "Search",
135
+ onClear: handleClear,
140
136
  placeholder: formatMessage({
141
137
  id: 'content-manager.components.LeftMenu.Search.label',
142
138
  defaultMessage: 'Search for a content type'
143
139
  }),
144
- endAction: /*#__PURE__*/ jsxRuntime.jsx(Icons.Cross, {
145
- onClick: handleClear,
146
- fill: "neutral500",
147
- cursor: "pointer"
148
- }),
149
- size: "S"
140
+ size: "S",
141
+ // eslint-disable-next-line react/no-children-prop
142
+ children: undefined,
143
+ name: 'search_contentType',
144
+ clearLabel: formatMessage({
145
+ id: 'clearLabel',
146
+ defaultMessage: 'Clear'
147
+ })
150
148
  })
151
149
  }),
152
150
  /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.SubNav.Sections, {
@@ -1 +1 @@
1
- {"version":3,"file":"LeftMenu.js","sources":["../../../admin/src/components/LeftMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, SubNav } from '@strapi/admin/strapi-admin';\nimport { Divider, Flex, TextInput, useCollator, useFilter } from '@strapi/design-system';\nimport { Cross, Search } from '@strapi/icons';\nimport { parse, stringify } from 'qs';\nimport { useIntl } from 'react-intl';\n\nimport { useContentTypeSchema } from '../hooks/useContentTypeSchema';\nimport { useTypedSelector } from '../modules/hooks';\nimport { getTranslation } from '../utils/translations';\n\nimport type { ContentManagerLink } from '../hooks/useContentManagerInitData';\n\nconst LeftMenu = () => {\n const [search, setSearch] = React.useState('');\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n const { formatMessage, locale } = useIntl();\n\n const collectionTypeLinks = useTypedSelector(\n (state) => state['content-manager'].app.collectionTypeLinks\n );\n\n const singleTypeLinks = useTypedSelector((state) => state['content-manager'].app.singleTypeLinks);\n const { schemas } = useContentTypeSchema();\n\n const { startsWith } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const menu = React.useMemo(\n () =>\n [\n {\n id: 'collectionTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.collection-types'),\n defaultMessage: 'Collection Types',\n }),\n searchable: true,\n links: collectionTypeLinks,\n },\n {\n id: 'singleTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.single-types'),\n defaultMessage: 'Single Types',\n }),\n searchable: true,\n links: singleTypeLinks,\n },\n ].map((section) => ({\n ...section,\n links: section.links\n /**\n * Filter by the search value\n */\n .filter((link) => startsWith(link.title, search))\n /**\n * Sort correctly using the language\n */\n .sort((a, b) => formatter.compare(a.title, b.title))\n /**\n * Apply the formated strings to the links from react-intl\n */\n .map((link) => {\n return {\n ...link,\n title: formatMessage({ id: link.title, defaultMessage: link.title }),\n };\n }),\n })),\n [collectionTypeLinks, search, singleTypeLinks, startsWith, formatMessage, formatter]\n );\n\n const handleClear = () => {\n setSearch('');\n };\n\n const handleChangeSearch = ({ target: { value } }: { target: { value: string } }) => {\n setSearch(value);\n };\n\n const label = formatMessage({\n id: getTranslation('header.name'),\n defaultMessage: 'Content Manager',\n });\n\n const getPluginsParamsForLink = (link: ContentManagerLink) => {\n const schema = schemas.find((schema) => schema.uid === link.uid);\n const isI18nEnabled = Boolean((schema?.pluginOptions?.i18n as any)?.localized);\n\n // The search params have the i18n plugin\n if (query.plugins && 'i18n' in query.plugins) {\n // Prepare removal of i18n from the plugins search params\n const { i18n, ...restPlugins } = query.plugins;\n\n // i18n is not enabled, remove it from the plugins search params\n if (!isI18nEnabled) {\n return restPlugins;\n }\n\n // i18n is enabled, put the plugins search params back together\n return { i18n, ...restPlugins };\n }\n\n return query.plugins;\n };\n\n return (\n <SubNav.Main aria-label={label}>\n <SubNav.Header label={label} />\n <Divider background=\"neutral150\" />\n <Flex padding={5} gap={3} direction={'column'} alignItems={'stretch'}>\n <TextInput\n startAction={<Search fill=\"neutral500\" />}\n value={search}\n onChange={handleChangeSearch}\n aria-label=\"Search\"\n placeholder={formatMessage({\n id: 'content-manager.components.LeftMenu.Search.label',\n defaultMessage: 'Search for a content type',\n })}\n endAction={<Cross onClick={handleClear} fill=\"neutral500\" cursor=\"pointer\" />}\n size=\"S\"\n />\n </Flex>\n <SubNav.Sections>\n {menu.map((section) => {\n return (\n <SubNav.Section key={section.id} label={section.title}>\n {section.links.map((link) => {\n return (\n <SubNav.Link\n key={link.uid}\n to={{\n pathname: link.to,\n search: stringify({\n ...parse(link.search ?? ''),\n plugins: getPluginsParamsForLink(link),\n }),\n }}\n label={link.title}\n />\n );\n })}\n </SubNav.Section>\n );\n })}\n </SubNav.Sections>\n </SubNav.Main>\n );\n};\n\nexport { LeftMenu };\n"],"names":["LeftMenu","search","setSearch","React","useState","query","useQueryParams","formatMessage","locale","useIntl","collectionTypeLinks","useTypedSelector","state","app","singleTypeLinks","schemas","useContentTypeSchema","startsWith","useFilter","sensitivity","formatter","useCollator","menu","useMemo","id","title","getTranslation","defaultMessage","searchable","links","map","section","filter","link","sort","a","b","compare","handleClear","handleChangeSearch","target","value","label","getPluginsParamsForLink","schema","find","uid","isI18nEnabled","Boolean","pluginOptions","i18n","localized","plugins","restPlugins","_jsxs","SubNav","Main","aria-label","_jsx","Header","Divider","background","Flex","padding","gap","direction","alignItems","TextInput","startAction","Search","fill","onChange","placeholder","endAction","Cross","onClick","cursor","size","Sections","Section","Link","to","pathname","stringify","parse"],"mappings":"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"}
1
+ {"version":3,"file":"LeftMenu.js","sources":["../../../admin/src/components/LeftMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, SubNav } from '@strapi/admin/strapi-admin';\nimport { Divider, Flex, Searchbar, useCollator, useFilter } from '@strapi/design-system';\nimport { parse, stringify } from 'qs';\nimport { useIntl } from 'react-intl';\n\nimport { useContentTypeSchema } from '../hooks/useContentTypeSchema';\nimport { useTypedSelector } from '../modules/hooks';\nimport { getTranslation } from '../utils/translations';\n\nimport type { ContentManagerLink } from '../hooks/useContentManagerInitData';\n\nconst LeftMenu = () => {\n const [search, setSearch] = React.useState('');\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n const { formatMessage, locale } = useIntl();\n\n const collectionTypeLinks = useTypedSelector(\n (state) => state['content-manager'].app.collectionTypeLinks\n );\n\n const singleTypeLinks = useTypedSelector((state) => state['content-manager'].app.singleTypeLinks);\n const { schemas } = useContentTypeSchema();\n\n const { startsWith } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const menu = React.useMemo(\n () =>\n [\n {\n id: 'collectionTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.collection-types'),\n defaultMessage: 'Collection Types',\n }),\n searchable: true,\n links: collectionTypeLinks,\n },\n {\n id: 'singleTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.single-types'),\n defaultMessage: 'Single Types',\n }),\n searchable: true,\n links: singleTypeLinks,\n },\n ].map((section) => ({\n ...section,\n links: section.links\n /**\n * Filter by the search value\n */\n .filter((link) => startsWith(link.title, search.trim()))\n /**\n * Sort correctly using the language\n */\n .sort((a, b) => formatter.compare(a.title, b.title))\n /**\n * Apply the formated strings to the links from react-intl\n */\n .map((link) => {\n return {\n ...link,\n title: formatMessage({ id: link.title, defaultMessage: link.title }),\n };\n }),\n })),\n [collectionTypeLinks, search, singleTypeLinks, startsWith, formatMessage, formatter]\n );\n\n const handleClear = () => {\n setSearch('');\n };\n\n const handleChangeSearch = (event: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(event.target.value);\n };\n\n const label = formatMessage({\n id: getTranslation('header.name'),\n defaultMessage: 'Content Manager',\n });\n\n const getPluginsParamsForLink = (link: ContentManagerLink) => {\n const schema = schemas.find((schema) => schema.uid === link.uid);\n const isI18nEnabled = Boolean((schema?.pluginOptions?.i18n as any)?.localized);\n\n // The search params have the i18n plugin\n if (query.plugins && 'i18n' in query.plugins) {\n // Prepare removal of i18n from the plugins search params\n const { i18n, ...restPlugins } = query.plugins;\n\n // i18n is not enabled, remove it from the plugins search params\n if (!isI18nEnabled) {\n return restPlugins;\n }\n\n // i18n is enabled, put the plugins search params back together\n return { i18n, ...restPlugins };\n }\n\n return query.plugins;\n };\n\n return (\n <SubNav.Main aria-label={label}>\n <SubNav.Header label={label} />\n <Divider background=\"neutral150\" />\n <Flex padding={5} gap={3} direction={'column'} alignItems={'stretch'}>\n <Searchbar\n value={search}\n onChange={handleChangeSearch}\n onClear={handleClear}\n placeholder={formatMessage({\n id: 'content-manager.components.LeftMenu.Search.label',\n defaultMessage: 'Search for a content type',\n })}\n size=\"S\"\n // eslint-disable-next-line react/no-children-prop\n children={undefined}\n name={'search_contentType'}\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n />\n </Flex>\n <SubNav.Sections>\n {menu.map((section) => {\n return (\n <SubNav.Section key={section.id} label={section.title}>\n {section.links.map((link) => {\n return (\n <SubNav.Link\n key={link.uid}\n to={{\n pathname: link.to,\n search: stringify({\n ...parse(link.search ?? ''),\n plugins: getPluginsParamsForLink(link),\n }),\n }}\n label={link.title}\n />\n );\n })}\n </SubNav.Section>\n );\n })}\n </SubNav.Sections>\n </SubNav.Main>\n );\n};\n\nexport { LeftMenu };\n"],"names":["LeftMenu","search","setSearch","React","useState","query","useQueryParams","formatMessage","locale","useIntl","collectionTypeLinks","useTypedSelector","state","app","singleTypeLinks","schemas","useContentTypeSchema","startsWith","useFilter","sensitivity","formatter","useCollator","menu","useMemo","id","title","getTranslation","defaultMessage","searchable","links","map","section","filter","link","trim","sort","a","b","compare","handleClear","handleChangeSearch","event","target","value","label","getPluginsParamsForLink","schema","find","uid","isI18nEnabled","Boolean","pluginOptions","i18n","localized","plugins","restPlugins","_jsxs","SubNav","Main","aria-label","_jsx","Header","Divider","background","Flex","padding","gap","direction","alignItems","Searchbar","onChange","onClear","placeholder","size","children","undefined","name","clearLabel","Sections","Section","Link","to","pathname","stringify","parse"],"mappings":"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"}
@@ -1,8 +1,7 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
  import { useQueryParams, SubNav } from '@strapi/admin/strapi-admin';
4
- import { useFilter, useCollator, Divider, Flex, TextInput } from '@strapi/design-system';
5
- import { Search, Cross } from '@strapi/icons';
4
+ import { useFilter, useCollator, Divider, Flex, Searchbar } from '@strapi/design-system';
6
5
  import { stringify, parse } from 'qs';
7
6
  import { useIntl } from 'react-intl';
8
7
  import { useContentTypeSchema } from '../hooks/useContentTypeSchema.mjs';
@@ -45,7 +44,7 @@ const LeftMenu = ()=>{
45
44
  ...section,
46
45
  links: section.links/**
47
46
  * Filter by the search value
48
- */ .filter((link)=>startsWith(link.title, search))/**
47
+ */ .filter((link)=>startsWith(link.title, search.trim()))/**
49
48
  * Sort correctly using the language
50
49
  */ .sort((a, b)=>formatter.compare(a.title, b.title))/**
51
50
  * Apply the formated strings to the links from react-intl
@@ -69,8 +68,8 @@ const LeftMenu = ()=>{
69
68
  const handleClear = ()=>{
70
69
  setSearch('');
71
70
  };
72
- const handleChangeSearch = ({ target: { value } })=>{
73
- setSearch(value);
71
+ const handleChangeSearch = (event)=>{
72
+ setSearch(event.target.value);
74
73
  };
75
74
  const label = formatMessage({
76
75
  id: getTranslation('header.name'),
@@ -109,23 +108,22 @@ const LeftMenu = ()=>{
109
108
  gap: 3,
110
109
  direction: 'column',
111
110
  alignItems: 'stretch',
112
- children: /*#__PURE__*/ jsx(TextInput, {
113
- startAction: /*#__PURE__*/ jsx(Search, {
114
- fill: "neutral500"
115
- }),
111
+ children: /*#__PURE__*/ jsx(Searchbar, {
116
112
  value: search,
117
113
  onChange: handleChangeSearch,
118
- "aria-label": "Search",
114
+ onClear: handleClear,
119
115
  placeholder: formatMessage({
120
116
  id: 'content-manager.components.LeftMenu.Search.label',
121
117
  defaultMessage: 'Search for a content type'
122
118
  }),
123
- endAction: /*#__PURE__*/ jsx(Cross, {
124
- onClick: handleClear,
125
- fill: "neutral500",
126
- cursor: "pointer"
127
- }),
128
- size: "S"
119
+ size: "S",
120
+ // eslint-disable-next-line react/no-children-prop
121
+ children: undefined,
122
+ name: 'search_contentType',
123
+ clearLabel: formatMessage({
124
+ id: 'clearLabel',
125
+ defaultMessage: 'Clear'
126
+ })
129
127
  })
130
128
  }),
131
129
  /*#__PURE__*/ jsx(SubNav.Sections, {
@@ -1 +1 @@
1
- {"version":3,"file":"LeftMenu.mjs","sources":["../../../admin/src/components/LeftMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, SubNav } from '@strapi/admin/strapi-admin';\nimport { Divider, Flex, TextInput, useCollator, useFilter } from '@strapi/design-system';\nimport { Cross, Search } from '@strapi/icons';\nimport { parse, stringify } from 'qs';\nimport { useIntl } from 'react-intl';\n\nimport { useContentTypeSchema } from '../hooks/useContentTypeSchema';\nimport { useTypedSelector } from '../modules/hooks';\nimport { getTranslation } from '../utils/translations';\n\nimport type { ContentManagerLink } from '../hooks/useContentManagerInitData';\n\nconst LeftMenu = () => {\n const [search, setSearch] = React.useState('');\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n const { formatMessage, locale } = useIntl();\n\n const collectionTypeLinks = useTypedSelector(\n (state) => state['content-manager'].app.collectionTypeLinks\n );\n\n const singleTypeLinks = useTypedSelector((state) => state['content-manager'].app.singleTypeLinks);\n const { schemas } = useContentTypeSchema();\n\n const { startsWith } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const menu = React.useMemo(\n () =>\n [\n {\n id: 'collectionTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.collection-types'),\n defaultMessage: 'Collection Types',\n }),\n searchable: true,\n links: collectionTypeLinks,\n },\n {\n id: 'singleTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.single-types'),\n defaultMessage: 'Single Types',\n }),\n searchable: true,\n links: singleTypeLinks,\n },\n ].map((section) => ({\n ...section,\n links: section.links\n /**\n * Filter by the search value\n */\n .filter((link) => startsWith(link.title, search))\n /**\n * Sort correctly using the language\n */\n .sort((a, b) => formatter.compare(a.title, b.title))\n /**\n * Apply the formated strings to the links from react-intl\n */\n .map((link) => {\n return {\n ...link,\n title: formatMessage({ id: link.title, defaultMessage: link.title }),\n };\n }),\n })),\n [collectionTypeLinks, search, singleTypeLinks, startsWith, formatMessage, formatter]\n );\n\n const handleClear = () => {\n setSearch('');\n };\n\n const handleChangeSearch = ({ target: { value } }: { target: { value: string } }) => {\n setSearch(value);\n };\n\n const label = formatMessage({\n id: getTranslation('header.name'),\n defaultMessage: 'Content Manager',\n });\n\n const getPluginsParamsForLink = (link: ContentManagerLink) => {\n const schema = schemas.find((schema) => schema.uid === link.uid);\n const isI18nEnabled = Boolean((schema?.pluginOptions?.i18n as any)?.localized);\n\n // The search params have the i18n plugin\n if (query.plugins && 'i18n' in query.plugins) {\n // Prepare removal of i18n from the plugins search params\n const { i18n, ...restPlugins } = query.plugins;\n\n // i18n is not enabled, remove it from the plugins search params\n if (!isI18nEnabled) {\n return restPlugins;\n }\n\n // i18n is enabled, put the plugins search params back together\n return { i18n, ...restPlugins };\n }\n\n return query.plugins;\n };\n\n return (\n <SubNav.Main aria-label={label}>\n <SubNav.Header label={label} />\n <Divider background=\"neutral150\" />\n <Flex padding={5} gap={3} direction={'column'} alignItems={'stretch'}>\n <TextInput\n startAction={<Search fill=\"neutral500\" />}\n value={search}\n onChange={handleChangeSearch}\n aria-label=\"Search\"\n placeholder={formatMessage({\n id: 'content-manager.components.LeftMenu.Search.label',\n defaultMessage: 'Search for a content type',\n })}\n endAction={<Cross onClick={handleClear} fill=\"neutral500\" cursor=\"pointer\" />}\n size=\"S\"\n />\n </Flex>\n <SubNav.Sections>\n {menu.map((section) => {\n return (\n <SubNav.Section key={section.id} label={section.title}>\n {section.links.map((link) => {\n return (\n <SubNav.Link\n key={link.uid}\n to={{\n pathname: link.to,\n search: stringify({\n ...parse(link.search ?? ''),\n plugins: getPluginsParamsForLink(link),\n }),\n }}\n label={link.title}\n />\n );\n })}\n </SubNav.Section>\n );\n })}\n </SubNav.Sections>\n </SubNav.Main>\n );\n};\n\nexport { LeftMenu };\n"],"names":["LeftMenu","search","setSearch","React","useState","query","useQueryParams","formatMessage","locale","useIntl","collectionTypeLinks","useTypedSelector","state","app","singleTypeLinks","schemas","useContentTypeSchema","startsWith","useFilter","sensitivity","formatter","useCollator","menu","useMemo","id","title","getTranslation","defaultMessage","searchable","links","map","section","filter","link","sort","a","b","compare","handleClear","handleChangeSearch","target","value","label","getPluginsParamsForLink","schema","find","uid","isI18nEnabled","Boolean","pluginOptions","i18n","localized","plugins","restPlugins","_jsxs","SubNav","Main","aria-label","_jsx","Header","Divider","background","Flex","padding","gap","direction","alignItems","TextInput","startAction","Search","fill","onChange","placeholder","endAction","Cross","onClick","cursor","size","Sections","Section","Link","to","pathname","stringify","parse"],"mappings":"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"}
1
+ {"version":3,"file":"LeftMenu.mjs","sources":["../../../admin/src/components/LeftMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, SubNav } from '@strapi/admin/strapi-admin';\nimport { Divider, Flex, Searchbar, useCollator, useFilter } from '@strapi/design-system';\nimport { parse, stringify } from 'qs';\nimport { useIntl } from 'react-intl';\n\nimport { useContentTypeSchema } from '../hooks/useContentTypeSchema';\nimport { useTypedSelector } from '../modules/hooks';\nimport { getTranslation } from '../utils/translations';\n\nimport type { ContentManagerLink } from '../hooks/useContentManagerInitData';\n\nconst LeftMenu = () => {\n const [search, setSearch] = React.useState('');\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n const { formatMessage, locale } = useIntl();\n\n const collectionTypeLinks = useTypedSelector(\n (state) => state['content-manager'].app.collectionTypeLinks\n );\n\n const singleTypeLinks = useTypedSelector((state) => state['content-manager'].app.singleTypeLinks);\n const { schemas } = useContentTypeSchema();\n\n const { startsWith } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const menu = React.useMemo(\n () =>\n [\n {\n id: 'collectionTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.collection-types'),\n defaultMessage: 'Collection Types',\n }),\n searchable: true,\n links: collectionTypeLinks,\n },\n {\n id: 'singleTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.single-types'),\n defaultMessage: 'Single Types',\n }),\n searchable: true,\n links: singleTypeLinks,\n },\n ].map((section) => ({\n ...section,\n links: section.links\n /**\n * Filter by the search value\n */\n .filter((link) => startsWith(link.title, search.trim()))\n /**\n * Sort correctly using the language\n */\n .sort((a, b) => formatter.compare(a.title, b.title))\n /**\n * Apply the formated strings to the links from react-intl\n */\n .map((link) => {\n return {\n ...link,\n title: formatMessage({ id: link.title, defaultMessage: link.title }),\n };\n }),\n })),\n [collectionTypeLinks, search, singleTypeLinks, startsWith, formatMessage, formatter]\n );\n\n const handleClear = () => {\n setSearch('');\n };\n\n const handleChangeSearch = (event: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(event.target.value);\n };\n\n const label = formatMessage({\n id: getTranslation('header.name'),\n defaultMessage: 'Content Manager',\n });\n\n const getPluginsParamsForLink = (link: ContentManagerLink) => {\n const schema = schemas.find((schema) => schema.uid === link.uid);\n const isI18nEnabled = Boolean((schema?.pluginOptions?.i18n as any)?.localized);\n\n // The search params have the i18n plugin\n if (query.plugins && 'i18n' in query.plugins) {\n // Prepare removal of i18n from the plugins search params\n const { i18n, ...restPlugins } = query.plugins;\n\n // i18n is not enabled, remove it from the plugins search params\n if (!isI18nEnabled) {\n return restPlugins;\n }\n\n // i18n is enabled, put the plugins search params back together\n return { i18n, ...restPlugins };\n }\n\n return query.plugins;\n };\n\n return (\n <SubNav.Main aria-label={label}>\n <SubNav.Header label={label} />\n <Divider background=\"neutral150\" />\n <Flex padding={5} gap={3} direction={'column'} alignItems={'stretch'}>\n <Searchbar\n value={search}\n onChange={handleChangeSearch}\n onClear={handleClear}\n placeholder={formatMessage({\n id: 'content-manager.components.LeftMenu.Search.label',\n defaultMessage: 'Search for a content type',\n })}\n size=\"S\"\n // eslint-disable-next-line react/no-children-prop\n children={undefined}\n name={'search_contentType'}\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n />\n </Flex>\n <SubNav.Sections>\n {menu.map((section) => {\n return (\n <SubNav.Section key={section.id} label={section.title}>\n {section.links.map((link) => {\n return (\n <SubNav.Link\n key={link.uid}\n to={{\n pathname: link.to,\n search: stringify({\n ...parse(link.search ?? ''),\n plugins: getPluginsParamsForLink(link),\n }),\n }}\n label={link.title}\n />\n );\n })}\n </SubNav.Section>\n );\n })}\n </SubNav.Sections>\n </SubNav.Main>\n );\n};\n\nexport { LeftMenu };\n"],"names":["LeftMenu","search","setSearch","React","useState","query","useQueryParams","formatMessage","locale","useIntl","collectionTypeLinks","useTypedSelector","state","app","singleTypeLinks","schemas","useContentTypeSchema","startsWith","useFilter","sensitivity","formatter","useCollator","menu","useMemo","id","title","getTranslation","defaultMessage","searchable","links","map","section","filter","link","trim","sort","a","b","compare","handleClear","handleChangeSearch","event","target","value","label","getPluginsParamsForLink","schema","find","uid","isI18nEnabled","Boolean","pluginOptions","i18n","localized","plugins","restPlugins","_jsxs","SubNav","Main","aria-label","_jsx","Header","Divider","background","Flex","padding","gap","direction","alignItems","Searchbar","onChange","onClear","placeholder","size","children","undefined","name","clearLabel","Sections","Section","Link","to","pathname","stringify","parse"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
4
5
  var strapiAdmin = require('@strapi/admin/strapi-admin');
5
6
  var designSystem = require('@strapi/design-system');
6
7
  var Icons = require('@strapi/icons');
@@ -11,15 +12,33 @@ var DocumentStatus = require('../pages/EditView/components/DocumentStatus.js');
11
12
  var homepage = require('../services/homepage.js');
12
13
  var RelativeTime = require('./RelativeTime.js');
13
14
 
14
- const CellTypography = styledComponents.styled(designSystem.Typography).attrs({
15
- maxWidth: '14.4rem',
16
- display: 'block'
17
- })`
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 CellTypography = styledComponents.styled(designSystem.Typography)`
35
+ display: block;
36
+ max-width: 14.4rem;
18
37
  overflow: hidden;
19
38
  text-overflow: ellipsis;
20
39
  white-space: nowrap;
21
40
  `;
22
- const RecentDocumentsTable = ({ documents })=>{
41
+ const RecentDocumentsTable = ({ documents, type })=>{
23
42
  const { formatMessage } = reactIntl.useIntl();
24
43
  const { trackUsage } = strapiAdmin.useTracking();
25
44
  const navigate = reactRouterDom.useNavigate();
@@ -30,7 +49,9 @@ const RecentDocumentsTable = ({ documents })=>{
30
49
  return `/content-manager/${kindPath}/${document.contentTypeUid}${isSingleType ? '' : '/' + document.documentId}${queryParams}`;
31
50
  };
32
51
  const handleRowClick = (document)=>()=>{
33
- trackUsage('willEditEntryFromHome');
52
+ trackUsage('willEditEntryFromHome', {
53
+ entryType: type
54
+ });
34
55
  const link = getEditViewLink(document);
35
56
  navigate(link);
36
57
  };
@@ -90,7 +111,9 @@ const RecentDocumentsTable = ({ documents })=>{
90
111
  children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
91
112
  tag: reactRouterDom.Link,
92
113
  to: getEditViewLink(document),
93
- onClick: ()=>trackUsage('willEditEntryFromHome'),
114
+ onClick: ()=>trackUsage('willEditEntryFromHome', {
115
+ type
116
+ }),
94
117
  label: formatMessage({
95
118
  id: 'content-manager.actions.edit.label',
96
119
  defaultMessage: 'Edit'
@@ -127,7 +150,8 @@ const RecentDocumentsTable = ({ documents })=>{
127
150
  });
128
151
  }
129
152
  return /*#__PURE__*/ jsxRuntime.jsx(RecentDocumentsTable, {
130
- documents: data
153
+ documents: data,
154
+ type: "edited"
131
155
  });
132
156
  };
133
157
  /* -------------------------------------------------------------------------------------------------
@@ -152,10 +176,246 @@ const RecentDocumentsTable = ({ documents })=>{
152
176
  });
153
177
  }
154
178
  return /*#__PURE__*/ jsxRuntime.jsx(RecentDocumentsTable, {
155
- documents: data
179
+ documents: data,
180
+ type: "published"
181
+ });
182
+ };
183
+ /* -------------------------------------------------------------------------------------------------
184
+ * ChartEntriesWidget
185
+ * -----------------------------------------------------------------------------------------------*/ const RADIUS = 80;
186
+ const STROKE = 10;
187
+ const CIRCUMFERENCE = 2 * Math.PI * (RADIUS - STROKE / 2);
188
+ const ArcChart = styledComponents.styled.circle`
189
+ stroke: ${({ theme, $arcColor })=>theme.colors[$arcColor]};
190
+ `;
191
+ const TextChart = styledComponents.styled.tspan`
192
+ text-transform: lowercase;
193
+ fill: ${({ theme, $textColor })=>theme.colors[$textColor]};
194
+ `;
195
+ const KeyChartItem = styledComponents.styled(designSystem.Flex)`
196
+ width: 100%;
197
+
198
+ ${({ theme })=>theme.breakpoints.small} {
199
+ width: auto;
200
+ }
201
+ `;
202
+ const DonutChartSVG = ({ data })=>{
203
+ const { locale } = reactIntl.useIntl();
204
+ const { formatMessage } = reactIntl.useIntl();
205
+ const total = data.reduce((acc, curr)=>acc + curr.count, 0);
206
+ const [tooltip, setTooltip] = React__namespace.useState({
207
+ visible: false,
208
+ x: 0,
209
+ y: 0,
210
+ value: null
211
+ });
212
+ let cumulativePercent = 0;
213
+ const handleMouseOver = (e, value)=>{
214
+ setTooltip({
215
+ visible: true,
216
+ x: e.clientX,
217
+ y: e.clientY,
218
+ value
219
+ });
220
+ };
221
+ const handleMouseOut = ()=>{
222
+ setTooltip((t)=>({
223
+ ...t,
224
+ visible: false
225
+ }));
226
+ };
227
+ const handleFocus = (e, value)=>{
228
+ setTooltip({
229
+ visible: true,
230
+ x: e.currentTarget.getBoundingClientRect().width / 2 + e.currentTarget.getBoundingClientRect().left,
231
+ y: e.currentTarget.getBoundingClientRect().height + e.currentTarget.getBoundingClientRect().top,
232
+ value
233
+ });
234
+ };
235
+ return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
236
+ direction: "column",
237
+ gap: 6,
238
+ margin: "auto",
239
+ children: [
240
+ /*#__PURE__*/ jsxRuntime.jsxs("svg", {
241
+ width: RADIUS * 2,
242
+ height: RADIUS * 2,
243
+ viewBox: `0 0 ${RADIUS * 2} ${RADIUS * 2}`,
244
+ style: {
245
+ position: 'relative',
246
+ zIndex: 1
247
+ },
248
+ children: [
249
+ /*#__PURE__*/ jsxRuntime.jsx("g", {
250
+ transform: `rotate(-90 ${RADIUS} ${RADIUS})`,
251
+ children: data.map((value)=>{
252
+ const percent = value.count / total * 100;
253
+ const arcLength = percent / 100 * CIRCUMFERENCE;
254
+ const dashArray = `${arcLength} ${CIRCUMFERENCE - arcLength}`;
255
+ const dashOffset = CIRCUMFERENCE * (1 - cumulativePercent / 100);
256
+ const el = /*#__PURE__*/ jsxRuntime.jsx(ArcChart, {
257
+ cx: RADIUS,
258
+ cy: RADIUS,
259
+ r: RADIUS - STROKE / 2,
260
+ fill: "none",
261
+ strokeWidth: STROKE,
262
+ strokeDasharray: dashArray,
263
+ strokeDashoffset: dashOffset,
264
+ style: {
265
+ transition: 'stroke-dashoffset 0.3s',
266
+ cursor: 'pointer'
267
+ },
268
+ tabIndex: 0,
269
+ "aria-describedby": tooltip.visible ? 'chart-tooltip' : undefined,
270
+ onFocus: (e)=>handleFocus(e, value),
271
+ onBlur: handleMouseOut,
272
+ onMouseMove: (e)=>handleMouseOver(e, value),
273
+ onMouseLeave: handleMouseOut,
274
+ $arcColor: value.color
275
+ }, value.label);
276
+ cumulativePercent += percent;
277
+ return el;
278
+ })
279
+ }),
280
+ /*#__PURE__*/ jsxRuntime.jsxs("text", {
281
+ x: RADIUS,
282
+ y: RADIUS,
283
+ textAnchor: "middle",
284
+ fontSize: "2.4rem",
285
+ fontWeight: "bold",
286
+ children: [
287
+ /*#__PURE__*/ jsxRuntime.jsx(TextChart, {
288
+ x: RADIUS,
289
+ dy: "0",
290
+ $textColor: "neutral800",
291
+ children: new Intl.NumberFormat(locale, {
292
+ notation: 'compact',
293
+ maximumFractionDigits: 1
294
+ }).format(total)
295
+ }),
296
+ /*#__PURE__*/ jsxRuntime.jsx(TextChart, {
297
+ x: RADIUS,
298
+ dy: "1.4em",
299
+ fontSize: "1.4rem",
300
+ fontWeight: "normal",
301
+ $textColor: "neutral600",
302
+ children: formatMessage({
303
+ id: 'content-manager.widget.chart-entries.count.label',
304
+ defaultMessage: '{count, plural, =0 {entries} one {entry} other {entries}}'
305
+ }, {
306
+ count: total
307
+ })
308
+ })
309
+ ]
310
+ })
311
+ ]
312
+ }),
313
+ tooltip.visible && tooltip.value && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Portal, {
314
+ style: {
315
+ position: 'fixed',
316
+ left: 16,
317
+ top: 16,
318
+ zIndex: 2,
319
+ transform: `translate(${tooltip.x}px, ${tooltip.y}px)`
320
+ },
321
+ "data-testid": "entries-chart-tooltip",
322
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
323
+ background: "neutral900",
324
+ padding: 2,
325
+ borderRadius: 1,
326
+ textAlign: "center",
327
+ role: "tooltip",
328
+ "aria-live": "polite",
329
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
330
+ textColor: "neutral0",
331
+ children: formatMessage({
332
+ id: 'content-manager.widget.chart-entries.tooltip',
333
+ defaultMessage: '{count} items'
334
+ }, {
335
+ count: tooltip.value.count,
336
+ label: tooltip.value.label
337
+ })
338
+ })
339
+ })
340
+ }),
341
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
342
+ gap: 4,
343
+ wrap: "wrap",
344
+ children: data.map((value)=>value.count > 0 && /*#__PURE__*/ jsxRuntime.jsxs(KeyChartItem, {
345
+ gap: 1,
346
+ children: [
347
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
348
+ background: value.color,
349
+ padding: 2,
350
+ borderRadius: 1
351
+ }),
352
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
353
+ variant: "pi",
354
+ children: value.label
355
+ })
356
+ ]
357
+ }, value.label))
358
+ })
359
+ ]
360
+ });
361
+ };
362
+ const ChartEntriesWidget = ()=>{
363
+ const { formatMessage } = reactIntl.useIntl();
364
+ const { data: countDocuments, isLoading, error } = strapiAdmin.useGetCountDocumentsQuery();
365
+ if (isLoading) {
366
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Widget.Loading, {});
367
+ }
368
+ if (error) {
369
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Widget.Error, {});
370
+ }
371
+ const { draft, published, modified } = countDocuments ?? {
372
+ draft: 0,
373
+ published: 0,
374
+ modified: 0
375
+ };
376
+ const total = draft + published + modified;
377
+ if (!total) {
378
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Widget.NoData, {
379
+ children: formatMessage({
380
+ id: 'content-manager.widget.last-published.no-data',
381
+ defaultMessage: 'No published entries'
382
+ })
383
+ });
384
+ }
385
+ return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
386
+ minHeight: "100%",
387
+ children: /*#__PURE__*/ jsxRuntime.jsx(DonutChartSVG, {
388
+ data: [
389
+ {
390
+ label: formatMessage({
391
+ id: 'content-manager.containers.List.draft',
392
+ defaultMessage: 'Draft'
393
+ }),
394
+ count: draft,
395
+ color: 'secondary500'
396
+ },
397
+ {
398
+ label: formatMessage({
399
+ id: 'content-manager.containers.List.modified',
400
+ defaultMessage: 'Modified'
401
+ }),
402
+ count: modified,
403
+ color: 'alternative500'
404
+ },
405
+ {
406
+ label: formatMessage({
407
+ id: 'content-manager.containers.List.published',
408
+ defaultMessage: 'Published'
409
+ }),
410
+ count: published,
411
+ color: 'success500'
412
+ }
413
+ ]
414
+ })
156
415
  });
157
416
  };
158
417
 
418
+ exports.ChartEntriesWidget = ChartEntriesWidget;
159
419
  exports.LastEditedWidget = LastEditedWidget;
160
420
  exports.LastPublishedWidget = LastPublishedWidget;
161
421
  //# sourceMappingURL=Widgets.js.map