@strapi/content-manager 5.33.4 → 5.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/dist/admin/components/ActionsDrawer.js +204 -0
  2. package/dist/admin/components/ActionsDrawer.js.map +1 -0
  3. package/dist/admin/components/ActionsDrawer.mjs +183 -0
  4. package/dist/admin/components/ActionsDrawer.mjs.map +1 -0
  5. package/dist/admin/components/LeftMenu.js +13 -8
  6. package/dist/admin/components/LeftMenu.js.map +1 -1
  7. package/dist/admin/components/LeftMenu.mjs +13 -8
  8. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  9. package/dist/admin/history/components/VersionContent.js +22 -9
  10. package/dist/admin/history/components/VersionContent.js.map +1 -1
  11. package/dist/admin/history/components/VersionContent.mjs +23 -10
  12. package/dist/admin/history/components/VersionContent.mjs.map +1 -1
  13. package/dist/admin/history/components/VersionHeader.js +1 -0
  14. package/dist/admin/history/components/VersionHeader.js.map +1 -1
  15. package/dist/admin/history/components/VersionHeader.mjs +1 -0
  16. package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
  17. package/dist/admin/pages/EditView/EditViewPage.js +92 -63
  18. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  19. package/dist/admin/pages/EditView/EditViewPage.mjs +95 -66
  20. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  21. package/dist/admin/pages/EditView/components/DocumentActions.js +64 -48
  22. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  23. package/dist/admin/pages/EditView/components/DocumentActions.mjs +67 -51
  24. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  25. package/dist/admin/pages/EditView/components/EditorToolbarObserver.js +63 -31
  26. package/dist/admin/pages/EditView/components/EditorToolbarObserver.js.map +1 -1
  27. package/dist/admin/pages/EditView/components/EditorToolbarObserver.mjs +64 -32
  28. package/dist/admin/pages/EditView/components/EditorToolbarObserver.mjs.map +1 -1
  29. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.js +30 -6
  30. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.js.map +1 -1
  31. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.mjs +30 -6
  32. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.mjs.map +1 -1
  33. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js +20 -5
  34. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js.map +1 -1
  35. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs +20 -5
  36. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs.map +1 -1
  37. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +22 -12
  38. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  39. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +22 -12
  40. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +6 -1
  42. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +7 -2
  44. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +151 -10
  46. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +152 -11
  48. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.js +52 -5
  50. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.js.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.mjs +53 -6
  52. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.mjs.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +6 -1
  54. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs +6 -1
  56. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +1 -0
  58. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +1 -0
  60. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js +21 -1
  62. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.mjs +24 -4
  64. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.mjs.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js +21 -9
  66. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.mjs +21 -9
  68. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.mjs.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.js +4 -0
  70. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.js.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.mjs +4 -0
  72. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.mjs.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +30 -13
  74. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +32 -16
  76. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
  77. package/dist/admin/pages/EditView/components/Header.js +91 -44
  78. package/dist/admin/pages/EditView/components/Header.js.map +1 -1
  79. package/dist/admin/pages/EditView/components/Header.mjs +92 -45
  80. package/dist/admin/pages/EditView/components/Header.mjs.map +1 -1
  81. package/dist/admin/pages/EditView/components/Panels.js +67 -15
  82. package/dist/admin/pages/EditView/components/Panels.js.map +1 -1
  83. package/dist/admin/pages/EditView/components/Panels.mjs +67 -18
  84. package/dist/admin/pages/EditView/components/Panels.mjs.map +1 -1
  85. package/dist/admin/pages/ListView/ListViewPage.js +8 -6
  86. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  87. package/dist/admin/pages/ListView/ListViewPage.mjs +8 -6
  88. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  89. package/dist/admin/preview/index.js +9 -3
  90. package/dist/admin/preview/index.js.map +1 -1
  91. package/dist/admin/preview/index.mjs +9 -3
  92. package/dist/admin/preview/index.mjs.map +1 -1
  93. package/dist/admin/src/components/ActionsDrawer.d.ts +19 -0
  94. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.d.ts +7 -2
  95. package/dist/admin/src/pages/EditView/components/Panels.d.ts +14 -2
  96. package/dist/admin/translations/de.json.js +165 -32
  97. package/dist/admin/translations/de.json.js.map +1 -1
  98. package/dist/admin/translations/de.json.mjs +165 -32
  99. package/dist/admin/translations/de.json.mjs.map +1 -1
  100. package/dist/admin/translations/en.json.js +5 -1
  101. package/dist/admin/translations/en.json.js.map +1 -1
  102. package/dist/admin/translations/en.json.mjs +5 -1
  103. package/dist/admin/translations/en.json.mjs.map +1 -1
  104. package/dist/admin/translations/es.json.js +3 -1
  105. package/dist/admin/translations/es.json.js.map +1 -1
  106. package/dist/admin/translations/es.json.mjs +3 -1
  107. package/dist/admin/translations/es.json.mjs.map +1 -1
  108. package/dist/admin/translations/fr.json.js +3 -1
  109. package/dist/admin/translations/fr.json.js.map +1 -1
  110. package/dist/admin/translations/fr.json.mjs +3 -1
  111. package/dist/admin/translations/fr.json.mjs.map +1 -1
  112. package/dist/admin/translations/zh-Hans.json.js +0 -44
  113. package/dist/admin/translations/zh-Hans.json.js.map +1 -1
  114. package/dist/admin/translations/zh-Hans.json.mjs +0 -44
  115. package/dist/admin/translations/zh-Hans.json.mjs.map +1 -1
  116. package/dist/server/controllers/collection-types.js +16 -13
  117. package/dist/server/controllers/collection-types.js.map +1 -1
  118. package/dist/server/controllers/collection-types.mjs +16 -13
  119. package/dist/server/controllers/collection-types.mjs.map +1 -1
  120. package/dist/server/controllers/relations.js +5 -2
  121. package/dist/server/controllers/relations.js.map +1 -1
  122. package/dist/server/controllers/relations.mjs +5 -2
  123. package/dist/server/controllers/relations.mjs.map +1 -1
  124. package/dist/server/controllers/utils/document-status.js +28 -0
  125. package/dist/server/controllers/utils/document-status.js.map +1 -0
  126. package/dist/server/controllers/utils/document-status.mjs +26 -0
  127. package/dist/server/controllers/utils/document-status.mjs.map +1 -0
  128. package/dist/server/services/components.js +68 -20
  129. package/dist/server/services/components.js.map +1 -1
  130. package/dist/server/services/components.mjs +69 -21
  131. package/dist/server/services/components.mjs.map +1 -1
  132. package/dist/server/services/permission-checker.js +23 -0
  133. package/dist/server/services/permission-checker.js.map +1 -1
  134. package/dist/server/services/permission-checker.mjs +23 -0
  135. package/dist/server/services/permission-checker.mjs.map +1 -1
  136. package/dist/server/services/utils/store.js +51 -4
  137. package/dist/server/services/utils/store.js.map +1 -1
  138. package/dist/server/services/utils/store.mjs +51 -4
  139. package/dist/server/services/utils/store.mjs.map +1 -1
  140. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  141. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  142. package/dist/server/src/controllers/utils/document-status.d.ts +10 -0
  143. package/dist/server/src/controllers/utils/document-status.d.ts.map +1 -0
  144. package/dist/server/src/index.d.ts +1 -0
  145. package/dist/server/src/index.d.ts.map +1 -1
  146. package/dist/server/src/services/components.d.ts +6 -0
  147. package/dist/server/src/services/components.d.ts.map +1 -1
  148. package/dist/server/src/services/index.d.ts +1 -0
  149. package/dist/server/src/services/index.d.ts.map +1 -1
  150. package/dist/server/src/services/permission-checker.d.ts +1 -0
  151. package/dist/server/src/services/permission-checker.d.ts.map +1 -1
  152. package/dist/server/src/services/utils/store.d.ts +5 -1
  153. package/dist/server/src/services/utils/store.d.ts.map +1 -1
  154. package/package.json +5 -5
@@ -0,0 +1,204 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
+ var strapiAdmin = require('@strapi/admin/strapi-admin');
6
+ var designSystem = require('@strapi/design-system');
7
+ var Icons = require('@strapi/icons');
8
+ var reactIntl = require('react-intl');
9
+ var styledComponents = require('styled-components');
10
+
11
+ function _interopNamespaceDefault(e) {
12
+ var n = Object.create(null);
13
+ if (e) {
14
+ Object.keys(e).forEach(function (k) {
15
+ if (k !== 'default') {
16
+ var d = Object.getOwnPropertyDescriptor(e, k);
17
+ Object.defineProperty(n, k, d.get ? d : {
18
+ enumerable: true,
19
+ get: function () { return e[k]; }
20
+ });
21
+ }
22
+ });
23
+ }
24
+ n.default = e;
25
+ return Object.freeze(n);
26
+ }
27
+
28
+ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
29
+
30
+ const [ActionsDrawerProvider, useActionsDrawer] = strapiAdmin.createContext('ActionsDrawer', null);
31
+ /* -------------------------------------------------------------------------------------------------
32
+ * Styled Components
33
+ * -----------------------------------------------------------------------------------------------*/ const DrawerContainer = styledComponents.styled(designSystem.Portal)`
34
+ position: fixed;
35
+ left: 0;
36
+ right: 0;
37
+ bottom: 0;
38
+ z-index: 10;
39
+ display: flex;
40
+ flex-direction: column;
41
+ align-items: stretch;
42
+ justify-content: flex-end;
43
+
44
+ ${({ theme })=>theme.breakpoints.medium} {
45
+ left: ${({ $hasSideNav })=>$hasSideNav ? strapiAdmin.WIDTH_SIDE_NAVIGATION : 0};
46
+ }
47
+ `;
48
+ const DrawerOverlay = styledComponents.styled(designSystem.Box)`
49
+ position: fixed;
50
+ left: 0;
51
+ top: 0;
52
+ right: 0;
53
+ bottom: 0;
54
+ background-color: rgba(0, 0, 0, 0.5);
55
+ transition: opacity ${(props)=>props.theme.motion.timings['200']}
56
+ ${(props)=>props.theme.motion.easings.easeInOutQuad};
57
+ opacity: ${({ $isOpen })=>$isOpen ? 1 : 0};
58
+ pointer-events: ${({ $isOpen })=>$isOpen ? 'auto' : 'none'};
59
+
60
+ ${({ theme })=>theme.breakpoints.medium} {
61
+ left: ${({ $hasSideNav })=>$hasSideNav ? strapiAdmin.WIDTH_SIDE_NAVIGATION : 0};
62
+ }
63
+ `;
64
+ const ToggleButton = styledComponents.styled(designSystem.IconButton)`
65
+ padding: 0;
66
+ border: none;
67
+ background: ${({ theme })=>theme.colors.neutral200};
68
+ width: 3.2rem;
69
+ height: 3.2rem;
70
+ border-radius: 1.6rem;
71
+ display: flex;
72
+ align-items: center;
73
+ justify-content: center;
74
+ `;
75
+ const DrawerContent = styledComponents.styled(designSystem.Flex)`
76
+ flex-direction: column;
77
+ align-items: stretch;
78
+ position: relative;
79
+ z-index: 1;
80
+ pointer-events: auto;
81
+ `;
82
+ const DrawerContentInner = styledComponents.styled(designSystem.ScrollArea)`
83
+ max-height: ${({ $isOpen })=>$isOpen ? 'calc(100vh - 25rem)' // 25rem is arbitrary, to be able to see a bit of the content behind (navigation and header)
84
+ : '0'};
85
+ overflow: hidden;
86
+ transition: max-height ${(props)=>props.theme.motion.timings['200']}
87
+ ${(props)=>props.theme.motion.easings.easeInOutQuad};
88
+ z-index: 1;
89
+ pointer-events: auto;
90
+ `;
91
+ const Root = ({ children, hasContent = false, hasSideNav = false })=>{
92
+ const [isOpen, setIsOpen] = React__namespace.useState(false);
93
+ // Close drawer when there's no content
94
+ React__namespace.useEffect(()=>{
95
+ if (!hasContent) {
96
+ setIsOpen(false);
97
+ }
98
+ }, [
99
+ hasContent
100
+ ]);
101
+ return /*#__PURE__*/ jsxRuntime.jsx(ActionsDrawerProvider, {
102
+ isOpen: isOpen,
103
+ setIsOpen: setIsOpen,
104
+ hasContent: hasContent,
105
+ hasSideNav: hasSideNav,
106
+ children: /*#__PURE__*/ jsxRuntime.jsx(DrawerContainer, {
107
+ $hasSideNav: hasSideNav,
108
+ children: children
109
+ })
110
+ });
111
+ };
112
+ /* -------------------------------------------------------------------------------------------------
113
+ * Overlay
114
+ * -----------------------------------------------------------------------------------------------*/ const Overlay = ()=>{
115
+ const ctx = useActionsDrawer('ActionsDrawer.Overlay', (s)=>s, false);
116
+ const isOpen = ctx?.isOpen ?? false;
117
+ const hasContent = ctx?.hasContent ?? false;
118
+ const hasSideNav = ctx?.hasSideNav ?? false;
119
+ const setIsOpen = ctx?.setIsOpen;
120
+ if (!hasContent) {
121
+ return null;
122
+ }
123
+ return /*#__PURE__*/ jsxRuntime.jsx(DrawerOverlay, {
124
+ $isOpen: isOpen,
125
+ $hasSideNav: hasSideNav,
126
+ onClick: ()=>setIsOpen?.(false),
127
+ "data-testid": "actions-drawer-overlay"
128
+ });
129
+ };
130
+ const Header = ({ children })=>{
131
+ const ctx = useActionsDrawer('ActionsDrawer.Header', (s)=>s, false);
132
+ const isOpen = ctx?.isOpen ?? false;
133
+ const hasContent = ctx?.hasContent ?? false;
134
+ const setIsOpen = ctx?.setIsOpen;
135
+ const { formatMessage } = reactIntl.useIntl();
136
+ const toggleOpen = ()=>{
137
+ setIsOpen?.((prev)=>!prev);
138
+ };
139
+ return /*#__PURE__*/ jsxRuntime.jsx(DrawerContent, {
140
+ background: "neutral0",
141
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
142
+ paddingTop: 3,
143
+ paddingBottom: 3,
144
+ paddingLeft: 4,
145
+ paddingRight: 4,
146
+ gap: 3,
147
+ borderStyle: "solid",
148
+ borderWidth: isOpen ? '1px 0' : '1px 0 0 0',
149
+ borderColor: "neutral150",
150
+ children: [
151
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
152
+ flex: 1,
153
+ gap: 2,
154
+ alignItems: "center",
155
+ children: children
156
+ }),
157
+ hasContent && /*#__PURE__*/ jsxRuntime.jsx(ToggleButton, {
158
+ onClick: toggleOpen,
159
+ label: isOpen ? formatMessage({
160
+ id: 'content-manager.actions-drawer.close',
161
+ defaultMessage: 'Close more actions'
162
+ }) : formatMessage({
163
+ id: 'content-manager.actions-drawer.open',
164
+ defaultMessage: 'Open more actions'
165
+ }),
166
+ children: isOpen ? /*#__PURE__*/ jsxRuntime.jsx(Icons.CaretUp, {
167
+ fill: "neutral600"
168
+ }) : /*#__PURE__*/ jsxRuntime.jsx(Icons.CaretDown, {
169
+ fill: "neutral600"
170
+ })
171
+ })
172
+ ]
173
+ })
174
+ });
175
+ };
176
+ const Content = ({ children })=>{
177
+ const ctx = useActionsDrawer('ActionsDrawer.Content', (s)=>s, false);
178
+ const isOpen = ctx?.isOpen ?? false;
179
+ return /*#__PURE__*/ jsxRuntime.jsx(DrawerContentInner, {
180
+ $isOpen: isOpen,
181
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
182
+ direction: "column",
183
+ alignItems: "stretch",
184
+ justifyContent: "flex-start",
185
+ padding: {
186
+ initial: 4,
187
+ large: 0
188
+ },
189
+ background: "neutral0",
190
+ children: children
191
+ })
192
+ });
193
+ };
194
+ /* -------------------------------------------------------------------------------------------------
195
+ * ActionsDrawer
196
+ * -----------------------------------------------------------------------------------------------*/ const ActionsDrawer = {
197
+ Root,
198
+ Overlay,
199
+ Header,
200
+ Content
201
+ };
202
+
203
+ exports.ActionsDrawer = ActionsDrawer;
204
+ //# sourceMappingURL=ActionsDrawer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActionsDrawer.js","sources":["../../../admin/src/components/ActionsDrawer.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { WIDTH_SIDE_NAVIGATION, createContext } from '@strapi/admin/strapi-admin';\nimport { Portal, Flex, Box, ScrollArea, IconButton } from '@strapi/design-system';\nimport { CaretDown, CaretUp } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\n/**\n * ActionsDrawer is a component used in the content manager edit view page and content history page.\n * It's a sticky banner that can expand to reveal more actions. It's used only in mobile and tablet.\n *\n * A similar component is currently in development in the design-system but it's not ready yet.\n * Using the Panels for the edit view page brought some complexity and for the moment, we decided to go with this custom implementation.\n *\n * @TODO: Replace this component with the one in the design-system when it's ready.\n */\n\n/* -------------------------------------------------------------------------------------------------\n * ActionsDrawer Context\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ActionsDrawerContextValue {\n isOpen: boolean;\n setIsOpen: React.Dispatch<React.SetStateAction<boolean>>;\n hasContent: boolean;\n hasSideNav: boolean;\n}\n\nconst [ActionsDrawerProvider, useActionsDrawer] = createContext<ActionsDrawerContextValue | null>(\n 'ActionsDrawer',\n null\n);\n\n/* -------------------------------------------------------------------------------------------------\n * Styled Components\n * -----------------------------------------------------------------------------------------------*/\n\nconst DrawerContainer = styled(Portal)<{ $hasSideNav: boolean }>`\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 10;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n justify-content: flex-end;\n\n ${({ theme }) => theme.breakpoints.medium} {\n left: ${({ $hasSideNav }) => ($hasSideNav ? WIDTH_SIDE_NAVIGATION : 0)};\n }\n`;\n\nconst DrawerOverlay = styled(Box)<{ $isOpen: boolean; $hasSideNav: boolean }>`\n position: fixed;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n transition: opacity ${(props) => props.theme.motion.timings['200']}\n ${(props) => props.theme.motion.easings.easeInOutQuad};\n opacity: ${({ $isOpen }) => ($isOpen ? 1 : 0)};\n pointer-events: ${({ $isOpen }) => ($isOpen ? 'auto' : 'none')};\n\n ${({ theme }) => theme.breakpoints.medium} {\n left: ${({ $hasSideNav }) => ($hasSideNav ? WIDTH_SIDE_NAVIGATION : 0)};\n }\n`;\n\nconst ToggleButton = styled(IconButton)`\n padding: 0;\n border: none;\n background: ${({ theme }) => theme.colors.neutral200};\n width: 3.2rem;\n height: 3.2rem;\n border-radius: 1.6rem;\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nconst DrawerContent = styled(Flex)`\n flex-direction: column;\n align-items: stretch;\n position: relative;\n z-index: 1;\n pointer-events: auto;\n`;\n\nconst DrawerContentInner = styled(ScrollArea)<{ $isOpen: boolean }>`\n max-height: ${({ $isOpen }) =>\n $isOpen\n ? 'calc(100vh - 25rem)' // 25rem is arbitrary, to be able to see a bit of the content behind (navigation and header)\n : '0'};\n overflow: hidden;\n transition: max-height ${(props) => props.theme.motion.timings['200']}\n ${(props) => props.theme.motion.easings.easeInOutQuad};\n z-index: 1;\n pointer-events: auto;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RootProps {\n children: React.ReactNode;\n hasContent?: boolean;\n hasSideNav?: boolean;\n}\n\nconst Root = ({ children, hasContent = false, hasSideNav = false }: RootProps) => {\n const [isOpen, setIsOpen] = React.useState(false);\n\n // Close drawer when there's no content\n React.useEffect(() => {\n if (!hasContent) {\n setIsOpen(false);\n }\n }, [hasContent]);\n\n return (\n <ActionsDrawerProvider\n isOpen={isOpen}\n setIsOpen={setIsOpen}\n hasContent={hasContent}\n hasSideNav={hasSideNav}\n >\n <DrawerContainer $hasSideNav={hasSideNav}>{children}</DrawerContainer>\n </ActionsDrawerProvider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Overlay\n * -----------------------------------------------------------------------------------------------*/\n\nconst Overlay = () => {\n const ctx = useActionsDrawer('ActionsDrawer.Overlay', (s) => s, false);\n const isOpen = ctx?.isOpen ?? false;\n const hasContent = ctx?.hasContent ?? false;\n const hasSideNav = ctx?.hasSideNav ?? false;\n const setIsOpen = ctx?.setIsOpen;\n\n if (!hasContent) {\n return null;\n }\n\n return (\n <DrawerOverlay\n $isOpen={isOpen}\n $hasSideNav={hasSideNav}\n onClick={() => setIsOpen?.(false)}\n data-testid=\"actions-drawer-overlay\"\n />\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Header\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderProps {\n children: React.ReactNode;\n}\n\nconst Header = ({ children }: HeaderProps) => {\n const ctx = useActionsDrawer('ActionsDrawer.Header', (s) => s, false);\n const isOpen = ctx?.isOpen ?? false;\n const hasContent = ctx?.hasContent ?? false;\n const setIsOpen = ctx?.setIsOpen;\n const { formatMessage } = useIntl();\n\n const toggleOpen = () => {\n setIsOpen?.((prev: boolean) => !prev);\n };\n\n return (\n <DrawerContent background=\"neutral0\">\n <Flex\n paddingTop={3}\n paddingBottom={3}\n paddingLeft={4}\n paddingRight={4}\n gap={3}\n borderStyle=\"solid\"\n borderWidth={isOpen ? '1px 0' : '1px 0 0 0'}\n borderColor=\"neutral150\"\n >\n <Flex flex={1} gap={2} alignItems=\"center\">\n {children}\n </Flex>\n {hasContent && (\n <ToggleButton\n onClick={toggleOpen}\n label={\n isOpen\n ? formatMessage({\n id: 'content-manager.actions-drawer.close',\n defaultMessage: 'Close more actions',\n })\n : formatMessage({\n id: 'content-manager.actions-drawer.open',\n defaultMessage: 'Open more actions',\n })\n }\n >\n {isOpen ? <CaretUp fill=\"neutral600\" /> : <CaretDown fill=\"neutral600\" />}\n </ToggleButton>\n )}\n </Flex>\n </DrawerContent>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Content\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ContentProps {\n children: React.ReactNode;\n}\n\nconst Content = ({ children }: ContentProps) => {\n const ctx = useActionsDrawer('ActionsDrawer.Content', (s) => s, false);\n const isOpen = ctx?.isOpen ?? false;\n\n return (\n <DrawerContentInner $isOpen={isOpen}>\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n justifyContent=\"flex-start\"\n padding={{ initial: 4, large: 0 }}\n background=\"neutral0\"\n >\n {children}\n </Flex>\n </DrawerContentInner>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ActionsDrawer\n * -----------------------------------------------------------------------------------------------*/\n\nconst ActionsDrawer = {\n Root,\n Overlay,\n Header,\n Content,\n};\n\nexport { ActionsDrawer };\n"],"names":["ActionsDrawerProvider","useActionsDrawer","createContext","DrawerContainer","styled","Portal","theme","breakpoints","medium","$hasSideNav","WIDTH_SIDE_NAVIGATION","DrawerOverlay","Box","props","motion","timings","easings","easeInOutQuad","$isOpen","ToggleButton","IconButton","colors","neutral200","DrawerContent","Flex","DrawerContentInner","ScrollArea","Root","children","hasContent","hasSideNav","isOpen","setIsOpen","React","useState","useEffect","_jsx","Overlay","ctx","s","onClick","data-testid","Header","formatMessage","useIntl","toggleOpen","prev","background","_jsxs","paddingTop","paddingBottom","paddingLeft","paddingRight","gap","borderStyle","borderWidth","borderColor","flex","alignItems","label","id","defaultMessage","CaretUp","fill","CaretDown","Content","direction","justifyContent","padding","initial","large","ActionsDrawer"],"mappings":"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"}
@@ -0,0 +1,183 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { createContext, WIDTH_SIDE_NAVIGATION } from '@strapi/admin/strapi-admin';
4
+ import { Portal, Box, IconButton, Flex, ScrollArea } from '@strapi/design-system';
5
+ import { CaretUp, CaretDown } from '@strapi/icons';
6
+ import { useIntl } from 'react-intl';
7
+ import { styled } from 'styled-components';
8
+
9
+ const [ActionsDrawerProvider, useActionsDrawer] = createContext('ActionsDrawer', null);
10
+ /* -------------------------------------------------------------------------------------------------
11
+ * Styled Components
12
+ * -----------------------------------------------------------------------------------------------*/ const DrawerContainer = styled(Portal)`
13
+ position: fixed;
14
+ left: 0;
15
+ right: 0;
16
+ bottom: 0;
17
+ z-index: 10;
18
+ display: flex;
19
+ flex-direction: column;
20
+ align-items: stretch;
21
+ justify-content: flex-end;
22
+
23
+ ${({ theme })=>theme.breakpoints.medium} {
24
+ left: ${({ $hasSideNav })=>$hasSideNav ? WIDTH_SIDE_NAVIGATION : 0};
25
+ }
26
+ `;
27
+ const DrawerOverlay = styled(Box)`
28
+ position: fixed;
29
+ left: 0;
30
+ top: 0;
31
+ right: 0;
32
+ bottom: 0;
33
+ background-color: rgba(0, 0, 0, 0.5);
34
+ transition: opacity ${(props)=>props.theme.motion.timings['200']}
35
+ ${(props)=>props.theme.motion.easings.easeInOutQuad};
36
+ opacity: ${({ $isOpen })=>$isOpen ? 1 : 0};
37
+ pointer-events: ${({ $isOpen })=>$isOpen ? 'auto' : 'none'};
38
+
39
+ ${({ theme })=>theme.breakpoints.medium} {
40
+ left: ${({ $hasSideNav })=>$hasSideNav ? WIDTH_SIDE_NAVIGATION : 0};
41
+ }
42
+ `;
43
+ const ToggleButton = styled(IconButton)`
44
+ padding: 0;
45
+ border: none;
46
+ background: ${({ theme })=>theme.colors.neutral200};
47
+ width: 3.2rem;
48
+ height: 3.2rem;
49
+ border-radius: 1.6rem;
50
+ display: flex;
51
+ align-items: center;
52
+ justify-content: center;
53
+ `;
54
+ const DrawerContent = styled(Flex)`
55
+ flex-direction: column;
56
+ align-items: stretch;
57
+ position: relative;
58
+ z-index: 1;
59
+ pointer-events: auto;
60
+ `;
61
+ const DrawerContentInner = styled(ScrollArea)`
62
+ max-height: ${({ $isOpen })=>$isOpen ? 'calc(100vh - 25rem)' // 25rem is arbitrary, to be able to see a bit of the content behind (navigation and header)
63
+ : '0'};
64
+ overflow: hidden;
65
+ transition: max-height ${(props)=>props.theme.motion.timings['200']}
66
+ ${(props)=>props.theme.motion.easings.easeInOutQuad};
67
+ z-index: 1;
68
+ pointer-events: auto;
69
+ `;
70
+ const Root = ({ children, hasContent = false, hasSideNav = false })=>{
71
+ const [isOpen, setIsOpen] = React.useState(false);
72
+ // Close drawer when there's no content
73
+ React.useEffect(()=>{
74
+ if (!hasContent) {
75
+ setIsOpen(false);
76
+ }
77
+ }, [
78
+ hasContent
79
+ ]);
80
+ return /*#__PURE__*/ jsx(ActionsDrawerProvider, {
81
+ isOpen: isOpen,
82
+ setIsOpen: setIsOpen,
83
+ hasContent: hasContent,
84
+ hasSideNav: hasSideNav,
85
+ children: /*#__PURE__*/ jsx(DrawerContainer, {
86
+ $hasSideNav: hasSideNav,
87
+ children: children
88
+ })
89
+ });
90
+ };
91
+ /* -------------------------------------------------------------------------------------------------
92
+ * Overlay
93
+ * -----------------------------------------------------------------------------------------------*/ const Overlay = ()=>{
94
+ const ctx = useActionsDrawer('ActionsDrawer.Overlay', (s)=>s, false);
95
+ const isOpen = ctx?.isOpen ?? false;
96
+ const hasContent = ctx?.hasContent ?? false;
97
+ const hasSideNav = ctx?.hasSideNav ?? false;
98
+ const setIsOpen = ctx?.setIsOpen;
99
+ if (!hasContent) {
100
+ return null;
101
+ }
102
+ return /*#__PURE__*/ jsx(DrawerOverlay, {
103
+ $isOpen: isOpen,
104
+ $hasSideNav: hasSideNav,
105
+ onClick: ()=>setIsOpen?.(false),
106
+ "data-testid": "actions-drawer-overlay"
107
+ });
108
+ };
109
+ const Header = ({ children })=>{
110
+ const ctx = useActionsDrawer('ActionsDrawer.Header', (s)=>s, false);
111
+ const isOpen = ctx?.isOpen ?? false;
112
+ const hasContent = ctx?.hasContent ?? false;
113
+ const setIsOpen = ctx?.setIsOpen;
114
+ const { formatMessage } = useIntl();
115
+ const toggleOpen = ()=>{
116
+ setIsOpen?.((prev)=>!prev);
117
+ };
118
+ return /*#__PURE__*/ jsx(DrawerContent, {
119
+ background: "neutral0",
120
+ children: /*#__PURE__*/ jsxs(Flex, {
121
+ paddingTop: 3,
122
+ paddingBottom: 3,
123
+ paddingLeft: 4,
124
+ paddingRight: 4,
125
+ gap: 3,
126
+ borderStyle: "solid",
127
+ borderWidth: isOpen ? '1px 0' : '1px 0 0 0',
128
+ borderColor: "neutral150",
129
+ children: [
130
+ /*#__PURE__*/ jsx(Flex, {
131
+ flex: 1,
132
+ gap: 2,
133
+ alignItems: "center",
134
+ children: children
135
+ }),
136
+ hasContent && /*#__PURE__*/ jsx(ToggleButton, {
137
+ onClick: toggleOpen,
138
+ label: isOpen ? formatMessage({
139
+ id: 'content-manager.actions-drawer.close',
140
+ defaultMessage: 'Close more actions'
141
+ }) : formatMessage({
142
+ id: 'content-manager.actions-drawer.open',
143
+ defaultMessage: 'Open more actions'
144
+ }),
145
+ children: isOpen ? /*#__PURE__*/ jsx(CaretUp, {
146
+ fill: "neutral600"
147
+ }) : /*#__PURE__*/ jsx(CaretDown, {
148
+ fill: "neutral600"
149
+ })
150
+ })
151
+ ]
152
+ })
153
+ });
154
+ };
155
+ const Content = ({ children })=>{
156
+ const ctx = useActionsDrawer('ActionsDrawer.Content', (s)=>s, false);
157
+ const isOpen = ctx?.isOpen ?? false;
158
+ return /*#__PURE__*/ jsx(DrawerContentInner, {
159
+ $isOpen: isOpen,
160
+ children: /*#__PURE__*/ jsx(Flex, {
161
+ direction: "column",
162
+ alignItems: "stretch",
163
+ justifyContent: "flex-start",
164
+ padding: {
165
+ initial: 4,
166
+ large: 0
167
+ },
168
+ background: "neutral0",
169
+ children: children
170
+ })
171
+ });
172
+ };
173
+ /* -------------------------------------------------------------------------------------------------
174
+ * ActionsDrawer
175
+ * -----------------------------------------------------------------------------------------------*/ const ActionsDrawer = {
176
+ Root,
177
+ Overlay,
178
+ Header,
179
+ Content
180
+ };
181
+
182
+ export { ActionsDrawer };
183
+ //# sourceMappingURL=ActionsDrawer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActionsDrawer.mjs","sources":["../../../admin/src/components/ActionsDrawer.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { WIDTH_SIDE_NAVIGATION, createContext } from '@strapi/admin/strapi-admin';\nimport { Portal, Flex, Box, ScrollArea, IconButton } from '@strapi/design-system';\nimport { CaretDown, CaretUp } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\n/**\n * ActionsDrawer is a component used in the content manager edit view page and content history page.\n * It's a sticky banner that can expand to reveal more actions. It's used only in mobile and tablet.\n *\n * A similar component is currently in development in the design-system but it's not ready yet.\n * Using the Panels for the edit view page brought some complexity and for the moment, we decided to go with this custom implementation.\n *\n * @TODO: Replace this component with the one in the design-system when it's ready.\n */\n\n/* -------------------------------------------------------------------------------------------------\n * ActionsDrawer Context\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ActionsDrawerContextValue {\n isOpen: boolean;\n setIsOpen: React.Dispatch<React.SetStateAction<boolean>>;\n hasContent: boolean;\n hasSideNav: boolean;\n}\n\nconst [ActionsDrawerProvider, useActionsDrawer] = createContext<ActionsDrawerContextValue | null>(\n 'ActionsDrawer',\n null\n);\n\n/* -------------------------------------------------------------------------------------------------\n * Styled Components\n * -----------------------------------------------------------------------------------------------*/\n\nconst DrawerContainer = styled(Portal)<{ $hasSideNav: boolean }>`\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 10;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n justify-content: flex-end;\n\n ${({ theme }) => theme.breakpoints.medium} {\n left: ${({ $hasSideNav }) => ($hasSideNav ? WIDTH_SIDE_NAVIGATION : 0)};\n }\n`;\n\nconst DrawerOverlay = styled(Box)<{ $isOpen: boolean; $hasSideNav: boolean }>`\n position: fixed;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n transition: opacity ${(props) => props.theme.motion.timings['200']}\n ${(props) => props.theme.motion.easings.easeInOutQuad};\n opacity: ${({ $isOpen }) => ($isOpen ? 1 : 0)};\n pointer-events: ${({ $isOpen }) => ($isOpen ? 'auto' : 'none')};\n\n ${({ theme }) => theme.breakpoints.medium} {\n left: ${({ $hasSideNav }) => ($hasSideNav ? WIDTH_SIDE_NAVIGATION : 0)};\n }\n`;\n\nconst ToggleButton = styled(IconButton)`\n padding: 0;\n border: none;\n background: ${({ theme }) => theme.colors.neutral200};\n width: 3.2rem;\n height: 3.2rem;\n border-radius: 1.6rem;\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nconst DrawerContent = styled(Flex)`\n flex-direction: column;\n align-items: stretch;\n position: relative;\n z-index: 1;\n pointer-events: auto;\n`;\n\nconst DrawerContentInner = styled(ScrollArea)<{ $isOpen: boolean }>`\n max-height: ${({ $isOpen }) =>\n $isOpen\n ? 'calc(100vh - 25rem)' // 25rem is arbitrary, to be able to see a bit of the content behind (navigation and header)\n : '0'};\n overflow: hidden;\n transition: max-height ${(props) => props.theme.motion.timings['200']}\n ${(props) => props.theme.motion.easings.easeInOutQuad};\n z-index: 1;\n pointer-events: auto;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RootProps {\n children: React.ReactNode;\n hasContent?: boolean;\n hasSideNav?: boolean;\n}\n\nconst Root = ({ children, hasContent = false, hasSideNav = false }: RootProps) => {\n const [isOpen, setIsOpen] = React.useState(false);\n\n // Close drawer when there's no content\n React.useEffect(() => {\n if (!hasContent) {\n setIsOpen(false);\n }\n }, [hasContent]);\n\n return (\n <ActionsDrawerProvider\n isOpen={isOpen}\n setIsOpen={setIsOpen}\n hasContent={hasContent}\n hasSideNav={hasSideNav}\n >\n <DrawerContainer $hasSideNav={hasSideNav}>{children}</DrawerContainer>\n </ActionsDrawerProvider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Overlay\n * -----------------------------------------------------------------------------------------------*/\n\nconst Overlay = () => {\n const ctx = useActionsDrawer('ActionsDrawer.Overlay', (s) => s, false);\n const isOpen = ctx?.isOpen ?? false;\n const hasContent = ctx?.hasContent ?? false;\n const hasSideNav = ctx?.hasSideNav ?? false;\n const setIsOpen = ctx?.setIsOpen;\n\n if (!hasContent) {\n return null;\n }\n\n return (\n <DrawerOverlay\n $isOpen={isOpen}\n $hasSideNav={hasSideNav}\n onClick={() => setIsOpen?.(false)}\n data-testid=\"actions-drawer-overlay\"\n />\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Header\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderProps {\n children: React.ReactNode;\n}\n\nconst Header = ({ children }: HeaderProps) => {\n const ctx = useActionsDrawer('ActionsDrawer.Header', (s) => s, false);\n const isOpen = ctx?.isOpen ?? false;\n const hasContent = ctx?.hasContent ?? false;\n const setIsOpen = ctx?.setIsOpen;\n const { formatMessage } = useIntl();\n\n const toggleOpen = () => {\n setIsOpen?.((prev: boolean) => !prev);\n };\n\n return (\n <DrawerContent background=\"neutral0\">\n <Flex\n paddingTop={3}\n paddingBottom={3}\n paddingLeft={4}\n paddingRight={4}\n gap={3}\n borderStyle=\"solid\"\n borderWidth={isOpen ? '1px 0' : '1px 0 0 0'}\n borderColor=\"neutral150\"\n >\n <Flex flex={1} gap={2} alignItems=\"center\">\n {children}\n </Flex>\n {hasContent && (\n <ToggleButton\n onClick={toggleOpen}\n label={\n isOpen\n ? formatMessage({\n id: 'content-manager.actions-drawer.close',\n defaultMessage: 'Close more actions',\n })\n : formatMessage({\n id: 'content-manager.actions-drawer.open',\n defaultMessage: 'Open more actions',\n })\n }\n >\n {isOpen ? <CaretUp fill=\"neutral600\" /> : <CaretDown fill=\"neutral600\" />}\n </ToggleButton>\n )}\n </Flex>\n </DrawerContent>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Content\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ContentProps {\n children: React.ReactNode;\n}\n\nconst Content = ({ children }: ContentProps) => {\n const ctx = useActionsDrawer('ActionsDrawer.Content', (s) => s, false);\n const isOpen = ctx?.isOpen ?? false;\n\n return (\n <DrawerContentInner $isOpen={isOpen}>\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n justifyContent=\"flex-start\"\n padding={{ initial: 4, large: 0 }}\n background=\"neutral0\"\n >\n {children}\n </Flex>\n </DrawerContentInner>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ActionsDrawer\n * -----------------------------------------------------------------------------------------------*/\n\nconst ActionsDrawer = {\n Root,\n Overlay,\n Header,\n Content,\n};\n\nexport { ActionsDrawer };\n"],"names":["ActionsDrawerProvider","useActionsDrawer","createContext","DrawerContainer","styled","Portal","theme","breakpoints","medium","$hasSideNav","WIDTH_SIDE_NAVIGATION","DrawerOverlay","Box","props","motion","timings","easings","easeInOutQuad","$isOpen","ToggleButton","IconButton","colors","neutral200","DrawerContent","Flex","DrawerContentInner","ScrollArea","Root","children","hasContent","hasSideNav","isOpen","setIsOpen","React","useState","useEffect","_jsx","Overlay","ctx","s","onClick","data-testid","Header","formatMessage","useIntl","toggleOpen","prev","background","_jsxs","paddingTop","paddingBottom","paddingLeft","paddingRight","gap","borderStyle","borderWidth","borderColor","flex","alignItems","label","id","defaultMessage","CaretUp","fill","CaretDown","Content","direction","justifyContent","padding","initial","large","ActionsDrawer"],"mappings":"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"}
@@ -148,23 +148,28 @@ const LeftMenu = ({ isFullPage = false })=>{
148
148
  }),
149
149
  /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.SubNav.Content, {
150
150
  children: [
151
- isFullPage && /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.SubNav.Header, {
152
- label: label
151
+ isFullPage && /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
152
+ children: [
153
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.SubNav.Header, {
154
+ label: label
155
+ }),
156
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Divider, {})
157
+ ]
153
158
  }),
154
159
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
155
160
  paddingLeft: {
156
- initial: 4,
161
+ initial: 3,
157
162
  large: 5
158
163
  },
159
164
  paddingRight: {
160
- initial: 4,
165
+ initial: 3,
161
166
  large: 5
162
167
  },
163
- paddingTop: isFullPage ? 0 : {
164
- initial: 4,
165
- large: 5
168
+ paddingTop: 5,
169
+ paddingBottom: {
170
+ initial: 1,
171
+ large: 0
166
172
  },
167
- paddingBottom: 0,
168
173
  gap: 3,
169
174
  direction: "column",
170
175
  alignItems: "stretch",
@@ -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 { Flex, Searchbar, useCollator, useFilter, Divider, Loader } from '@strapi/design-system';\nimport { parse, stringify } from 'qs';\nimport { useIntl } from 'react-intl';\n\nimport { useContentManagerInitData } from '../hooks/useContentManagerInitData';\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 = ({ isFullPage = false }: { isFullPage?: boolean }) => {\n const [search, setSearch] = React.useState('');\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n const { formatMessage, locale } = useIntl();\n\n // Initialize Content Manager data to ensure links are available\n const { isLoading } = useContentManagerInitData();\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 { contains } = 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) => contains(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, contains, 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 // Show loading state while data is being fetched\n if (isLoading) {\n return (\n <SubNav.Main aria-label={label}>\n <SubNav.Header label={label} />\n <Divider />\n <Flex padding={4} justifyContent=\"center\">\n <Loader />\n </Flex>\n </SubNav.Main>\n );\n }\n\n return (\n <SubNav.Main aria-label={label}>\n {!isFullPage && (\n <>\n <SubNav.Header label={label} />\n <Divider />\n </>\n )}\n <SubNav.Content>\n {isFullPage && <SubNav.Header label={label} />}\n <Flex\n paddingLeft={{\n initial: 4,\n large: 5,\n }}\n paddingRight={{\n initial: 4,\n large: 5,\n }}\n paddingTop={\n isFullPage\n ? 0\n : {\n initial: 4,\n large: 5,\n }\n }\n paddingBottom={0}\n gap={3}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <Searchbar\n value={search}\n onChange={handleChangeSearch}\n onClear={handleClear}\n placeholder={formatMessage({\n id: 'search.placeholder',\n defaultMessage: 'Search',\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\n key={section.id}\n label={section.title}\n badgeLabel={section.links.length.toString()}\n >\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.Content>\n </SubNav.Main>\n );\n};\n\nexport { LeftMenu };\n"],"names":["LeftMenu","isFullPage","search","setSearch","React","useState","query","useQueryParams","formatMessage","locale","useIntl","isLoading","useContentManagerInitData","collectionTypeLinks","useTypedSelector","state","app","singleTypeLinks","schemas","useContentTypeSchema","contains","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","Flex","padding","justifyContent","Loader","_Fragment","Content","paddingLeft","initial","large","paddingRight","paddingTop","paddingBottom","gap","direction","alignItems","Searchbar","onChange","onClear","placeholder","size","children","undefined","name","clearLabel","Sections","Section","badgeLabel","length","toString","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 { Flex, Searchbar, useCollator, useFilter, Divider, Loader } from '@strapi/design-system';\nimport { parse, stringify } from 'qs';\nimport { useIntl } from 'react-intl';\n\nimport { useContentManagerInitData } from '../hooks/useContentManagerInitData';\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 = ({ isFullPage = false }: { isFullPage?: boolean }) => {\n const [search, setSearch] = React.useState('');\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n const { formatMessage, locale } = useIntl();\n\n // Initialize Content Manager data to ensure links are available\n const { isLoading } = useContentManagerInitData();\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 { contains } = 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) => contains(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, contains, 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 // Show loading state while data is being fetched\n if (isLoading) {\n return (\n <SubNav.Main aria-label={label}>\n <SubNav.Header label={label} />\n <Divider />\n <Flex padding={4} justifyContent=\"center\">\n <Loader />\n </Flex>\n </SubNav.Main>\n );\n }\n\n return (\n <SubNav.Main aria-label={label}>\n {!isFullPage && (\n <>\n <SubNav.Header label={label} />\n <Divider />\n </>\n )}\n <SubNav.Content>\n {isFullPage && (\n <>\n <SubNav.Header label={label} />\n <Divider />\n </>\n )}\n <Flex\n paddingLeft={{\n initial: 3,\n large: 5,\n }}\n paddingRight={{\n initial: 3,\n large: 5,\n }}\n paddingTop={5}\n paddingBottom={{ initial: 1, large: 0 }}\n gap={3}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <Searchbar\n value={search}\n onChange={handleChangeSearch}\n onClear={handleClear}\n placeholder={formatMessage({\n id: 'search.placeholder',\n defaultMessage: 'Search',\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\n key={section.id}\n label={section.title}\n badgeLabel={section.links.length.toString()}\n >\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.Content>\n </SubNav.Main>\n );\n};\n\nexport { LeftMenu };\n"],"names":["LeftMenu","isFullPage","search","setSearch","React","useState","query","useQueryParams","formatMessage","locale","useIntl","isLoading","useContentManagerInitData","collectionTypeLinks","useTypedSelector","state","app","singleTypeLinks","schemas","useContentTypeSchema","contains","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","Flex","padding","justifyContent","Loader","_Fragment","Content","paddingLeft","initial","large","paddingRight","paddingTop","paddingBottom","gap","direction","alignItems","Searchbar","onChange","onClear","placeholder","size","children","undefined","name","clearLabel","Sections","Section","badgeLabel","length","toString","Link","to","pathname","stringify","parse"],"mappings":"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"}
@@ -127,23 +127,28 @@ const LeftMenu = ({ isFullPage = false })=>{
127
127
  }),
128
128
  /*#__PURE__*/ jsxs(SubNav.Content, {
129
129
  children: [
130
- isFullPage && /*#__PURE__*/ jsx(SubNav.Header, {
131
- label: label
130
+ isFullPage && /*#__PURE__*/ jsxs(Fragment, {
131
+ children: [
132
+ /*#__PURE__*/ jsx(SubNav.Header, {
133
+ label: label
134
+ }),
135
+ /*#__PURE__*/ jsx(Divider, {})
136
+ ]
132
137
  }),
133
138
  /*#__PURE__*/ jsx(Flex, {
134
139
  paddingLeft: {
135
- initial: 4,
140
+ initial: 3,
136
141
  large: 5
137
142
  },
138
143
  paddingRight: {
139
- initial: 4,
144
+ initial: 3,
140
145
  large: 5
141
146
  },
142
- paddingTop: isFullPage ? 0 : {
143
- initial: 4,
144
- large: 5
147
+ paddingTop: 5,
148
+ paddingBottom: {
149
+ initial: 1,
150
+ large: 0
145
151
  },
146
- paddingBottom: 0,
147
152
  gap: 3,
148
153
  direction: "column",
149
154
  alignItems: "stretch",