@strapi/content-manager 0.0.0-next.8f0cdd4f9e4697ffed86c783465297fe532713f8 → 0.0.0-next.9243d2d1af29ab9842c7037bef47fdf1bc6efd8b
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.
- package/dist/admin/components/LeftMenu.js +13 -15
- package/dist/admin/components/LeftMenu.js.map +1 -1
- package/dist/admin/components/LeftMenu.mjs +14 -16
- package/dist/admin/components/LeftMenu.mjs.map +1 -1
- package/dist/admin/components/Widgets.js +15 -10
- package/dist/admin/components/Widgets.js.map +1 -1
- package/dist/admin/components/Widgets.mjs +16 -11
- package/dist/admin/components/Widgets.mjs.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.js +12 -19
- package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.mjs +13 -20
- package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/Blocker.js +18 -0
- package/dist/admin/pages/EditView/components/Blocker.js.map +1 -0
- package/dist/admin/pages/EditView/components/Blocker.mjs +16 -0
- package/dist/admin/pages/EditView/components/Blocker.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/DocumentActions.js +16 -1
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +17 -2
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js +15 -5
- package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.mjs +15 -5
- package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
- package/dist/admin/pages/EditView/utils/data.js +33 -8
- package/dist/admin/pages/EditView/utils/data.js.map +1 -1
- package/dist/admin/pages/EditView/utils/data.mjs +33 -8
- package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.js +8 -8
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs +8 -8
- package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +12 -2
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +12 -2
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
- package/dist/admin/preview/components/InputPopover.js +73 -0
- package/dist/admin/preview/components/InputPopover.js.map +1 -0
- package/dist/admin/preview/components/InputPopover.mjs +70 -0
- package/dist/admin/preview/components/InputPopover.mjs.map +1 -0
- package/dist/admin/preview/hooks/usePreviewInputManager.js +67 -0
- package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -0
- package/dist/admin/preview/hooks/usePreviewInputManager.mjs +46 -0
- package/dist/admin/preview/hooks/usePreviewInputManager.mjs.map +1 -0
- package/dist/admin/preview/pages/Preview.js +136 -100
- package/dist/admin/preview/pages/Preview.js.map +1 -1
- package/dist/admin/preview/pages/Preview.mjs +137 -101
- package/dist/admin/preview/pages/Preview.mjs.map +1 -1
- package/dist/admin/preview/utils/constants.js +22 -0
- package/dist/admin/preview/utils/constants.js.map +1 -0
- package/dist/admin/preview/utils/constants.mjs +19 -0
- package/dist/admin/preview/utils/constants.mjs.map +1 -0
- package/dist/admin/preview/utils/getSendMessage.js +22 -0
- package/dist/admin/preview/utils/getSendMessage.js.map +1 -0
- package/dist/admin/preview/utils/getSendMessage.mjs +20 -0
- package/dist/admin/preview/utils/getSendMessage.mjs.map +1 -0
- package/dist/admin/preview/utils/previewScript.js +296 -0
- package/dist/admin/preview/utils/previewScript.js.map +1 -0
- package/dist/admin/preview/utils/previewScript.mjs +294 -0
- package/dist/admin/preview/utils/previewScript.mjs.map +1 -0
- package/dist/admin/services/api.js +2 -1
- package/dist/admin/services/api.js.map +1 -1
- package/dist/admin/services/api.mjs +2 -1
- package/dist/admin/services/api.mjs.map +1 -1
- package/dist/admin/services/documents.js +22 -12
- package/dist/admin/services/documents.js.map +1 -1
- package/dist/admin/services/documents.mjs +22 -12
- package/dist/admin/services/documents.mjs.map +1 -1
- package/dist/admin/services/homepage.js +2 -11
- package/dist/admin/services/homepage.js.map +1 -1
- package/dist/admin/services/homepage.mjs +3 -11
- package/dist/admin/services/homepage.mjs.map +1 -1
- package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/Blocker.d.ts +5 -0
- package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
- package/dist/admin/src/preview/components/InputPopover.d.ts +6 -0
- package/dist/admin/src/preview/hooks/usePreviewInputManager.d.ts +4 -0
- package/dist/admin/src/preview/pages/Preview.d.ts +8 -0
- package/dist/admin/src/preview/services/preview.d.ts +1 -1
- package/dist/admin/src/preview/utils/constants.d.ts +20 -0
- package/dist/admin/src/preview/utils/getSendMessage.d.ts +11 -0
- package/dist/admin/src/preview/utils/previewScript.d.ts +22 -0
- package/dist/admin/src/services/api.d.ts +1 -1
- package/dist/admin/src/services/components.d.ts +2 -2
- package/dist/admin/src/services/contentTypes.d.ts +3 -3
- package/dist/admin/src/services/documents.d.ts +16 -16
- package/dist/admin/src/services/homepage.d.ts +2 -6
- package/dist/admin/src/services/init.d.ts +1 -1
- package/dist/admin/src/services/relations.d.ts +2 -2
- package/dist/admin/src/services/uid.d.ts +3 -3
- package/dist/server/homepage/services/homepage.js +2 -2
- package/dist/server/homepage/services/homepage.js.map +1 -1
- package/dist/server/homepage/services/homepage.mjs +2 -2
- package/dist/server/homepage/services/homepage.mjs.map +1 -1
- package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
require('react');
|
|
5
|
+
var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
6
|
+
var designSystem = require('@strapi/design-system');
|
|
7
|
+
var InputRenderer = require('../../pages/EditView/components/InputRenderer.js');
|
|
8
|
+
var Preview = require('../pages/Preview.js');
|
|
9
|
+
|
|
10
|
+
const [InputPopoverProvider, useInputPopoverContext] = strapiAdmin.createContext('InputPopover');
|
|
11
|
+
const InputPopover = ({ documentResponse })=>{
|
|
12
|
+
const iframeRef = Preview.usePreviewContext('VisualEditingPopover', (state)=>state.iframeRef);
|
|
13
|
+
const popoverField = Preview.usePreviewContext('VisualEditingPopover', (state)=>state.popoverField);
|
|
14
|
+
const setPopoverField = Preview.usePreviewContext('VisualEditingPopover', (state)=>state.setPopoverField);
|
|
15
|
+
if (!popoverField || !documentResponse.schema || !iframeRef.current) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
const iframeRect = iframeRef.current.getBoundingClientRect();
|
|
19
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
20
|
+
children: [
|
|
21
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
22
|
+
position: 'fixed',
|
|
23
|
+
top: iframeRect.top + 'px',
|
|
24
|
+
left: iframeRect.left + 'px',
|
|
25
|
+
width: iframeRect.width + 'px',
|
|
26
|
+
height: iframeRect.height + 'px',
|
|
27
|
+
zIndex: 4
|
|
28
|
+
}),
|
|
29
|
+
/*#__PURE__*/ jsxRuntime.jsx(InputPopoverProvider, {
|
|
30
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Popover.Root, {
|
|
31
|
+
open: true,
|
|
32
|
+
onOpenChange: (open)=>!open && setPopoverField(null),
|
|
33
|
+
children: [
|
|
34
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Popover.Trigger, {
|
|
35
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
36
|
+
position: "fixed",
|
|
37
|
+
width: popoverField.position.width + 'px',
|
|
38
|
+
height: popoverField.position.height + 'px',
|
|
39
|
+
top: 0,
|
|
40
|
+
left: 0,
|
|
41
|
+
transform: `translate(${iframeRect.left + popoverField.position.left}px, ${iframeRect.top + popoverField.position.top}px)`
|
|
42
|
+
})
|
|
43
|
+
}),
|
|
44
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Popover.Content, {
|
|
45
|
+
sideOffset: 4,
|
|
46
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
47
|
+
padding: 4,
|
|
48
|
+
width: "400px",
|
|
49
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(InputRenderer.InputRenderer, {
|
|
50
|
+
document: documentResponse,
|
|
51
|
+
attribute: documentResponse.schema.attributes[popoverField.path],
|
|
52
|
+
label: popoverField.path,
|
|
53
|
+
name: popoverField.path,
|
|
54
|
+
type: documentResponse.schema.attributes[popoverField.path].type,
|
|
55
|
+
visible: true
|
|
56
|
+
})
|
|
57
|
+
})
|
|
58
|
+
})
|
|
59
|
+
]
|
|
60
|
+
})
|
|
61
|
+
})
|
|
62
|
+
]
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
function useHasInputPopoverParent() {
|
|
66
|
+
const context = useInputPopoverContext('useHasInputPopoverParent', ()=>true, false);
|
|
67
|
+
// useContext will return undefined if the called is not wrapped in the provider
|
|
68
|
+
return context !== undefined;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
exports.InputPopover = InputPopover;
|
|
72
|
+
exports.useHasInputPopoverParent = useHasInputPopoverParent;
|
|
73
|
+
//# sourceMappingURL=InputPopover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputPopover.js","sources":["../../../../admin/src/preview/components/InputPopover.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { createContext } from '@strapi/admin/strapi-admin';\nimport { Box, Popover } from '@strapi/design-system';\n\nimport { type UseDocument } from '../../hooks/useDocument';\nimport { InputRenderer } from '../../pages/EditView/components/InputRenderer';\nimport { usePreviewContext } from '../pages/Preview';\n\n/**\n * No need for actual data in the context. It's just to let children check if they're rendered\n * inside of a preview InputPopover without relying on prop drilling.\n */\ninterface InputPopoverContextValue {}\n\nconst [InputPopoverProvider, useInputPopoverContext] =\n createContext<InputPopoverContextValue>('InputPopover');\n\nconst InputPopover = ({ documentResponse }: { documentResponse: ReturnType<UseDocument> }) => {\n const iframeRef = usePreviewContext('VisualEditingPopover', (state) => state.iframeRef);\n const popoverField = usePreviewContext('VisualEditingPopover', (state) => state.popoverField);\n const setPopoverField = usePreviewContext(\n 'VisualEditingPopover',\n (state) => state.setPopoverField\n );\n\n if (!popoverField || !documentResponse.schema || !iframeRef.current) {\n return null;\n }\n\n const iframeRect = iframeRef.current.getBoundingClientRect();\n\n return (\n <>\n {/**\n * Overlay an empty div on top of the iframe while the popover is open so it can\n * intercept clicks. Without it, we wouldn't be able to close the popover by clicking outside,\n * because the click would be detected by the iframe window, not by the admin.\n **/}\n <Box\n position={'fixed'}\n top={iframeRect.top + 'px'}\n left={iframeRect.left + 'px'}\n width={iframeRect.width + 'px'}\n height={iframeRect.height + 'px'}\n zIndex={4}\n />\n <InputPopoverProvider>\n <Popover.Root open={true} onOpenChange={(open) => !open && setPopoverField(null)}>\n <Popover.Trigger>\n <Box\n position=\"fixed\"\n width={popoverField.position.width + 'px'}\n height={popoverField.position.height + 'px'}\n top={0}\n left={0}\n transform={`translate(${iframeRect.left + popoverField.position.left}px, ${iframeRect.top + popoverField.position.top}px)`}\n />\n </Popover.Trigger>\n <Popover.Content sideOffset={4}>\n <Box padding={4} width=\"400px\">\n <InputRenderer\n document={documentResponse}\n attribute={documentResponse.schema.attributes[popoverField.path] as any}\n label={popoverField.path}\n name={popoverField.path}\n type={documentResponse.schema.attributes[popoverField.path].type}\n visible={true}\n />\n </Box>\n </Popover.Content>\n </Popover.Root>\n </InputPopoverProvider>\n </>\n );\n};\n\nfunction useHasInputPopoverParent() {\n const context = useInputPopoverContext('useHasInputPopoverParent', () => true, false);\n\n // useContext will return undefined if the called is not wrapped in the provider\n return context !== undefined;\n}\n\nexport { InputPopover, useHasInputPopoverParent };\n"],"names":["InputPopoverProvider","useInputPopoverContext","createContext","InputPopover","documentResponse","iframeRef","usePreviewContext","state","popoverField","setPopoverField","schema","current","iframeRect","getBoundingClientRect","_jsxs","_Fragment","_jsx","Box","position","top","left","width","height","zIndex","Popover","Root","open","onOpenChange","Trigger","transform","Content","sideOffset","padding","InputRenderer","document","attribute","attributes","path","label","name","type","visible","useHasInputPopoverParent","context","undefined"],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import 'react';
|
|
3
|
+
import { createContext } from '@strapi/admin/strapi-admin';
|
|
4
|
+
import { Box, Popover } from '@strapi/design-system';
|
|
5
|
+
import { InputRenderer as MemoizedInputRenderer } from '../../pages/EditView/components/InputRenderer.mjs';
|
|
6
|
+
import { usePreviewContext } from '../pages/Preview.mjs';
|
|
7
|
+
|
|
8
|
+
const [InputPopoverProvider, useInputPopoverContext] = createContext('InputPopover');
|
|
9
|
+
const InputPopover = ({ documentResponse })=>{
|
|
10
|
+
const iframeRef = usePreviewContext('VisualEditingPopover', (state)=>state.iframeRef);
|
|
11
|
+
const popoverField = usePreviewContext('VisualEditingPopover', (state)=>state.popoverField);
|
|
12
|
+
const setPopoverField = usePreviewContext('VisualEditingPopover', (state)=>state.setPopoverField);
|
|
13
|
+
if (!popoverField || !documentResponse.schema || !iframeRef.current) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
const iframeRect = iframeRef.current.getBoundingClientRect();
|
|
17
|
+
return /*#__PURE__*/ jsxs(Fragment, {
|
|
18
|
+
children: [
|
|
19
|
+
/*#__PURE__*/ jsx(Box, {
|
|
20
|
+
position: 'fixed',
|
|
21
|
+
top: iframeRect.top + 'px',
|
|
22
|
+
left: iframeRect.left + 'px',
|
|
23
|
+
width: iframeRect.width + 'px',
|
|
24
|
+
height: iframeRect.height + 'px',
|
|
25
|
+
zIndex: 4
|
|
26
|
+
}),
|
|
27
|
+
/*#__PURE__*/ jsx(InputPopoverProvider, {
|
|
28
|
+
children: /*#__PURE__*/ jsxs(Popover.Root, {
|
|
29
|
+
open: true,
|
|
30
|
+
onOpenChange: (open)=>!open && setPopoverField(null),
|
|
31
|
+
children: [
|
|
32
|
+
/*#__PURE__*/ jsx(Popover.Trigger, {
|
|
33
|
+
children: /*#__PURE__*/ jsx(Box, {
|
|
34
|
+
position: "fixed",
|
|
35
|
+
width: popoverField.position.width + 'px',
|
|
36
|
+
height: popoverField.position.height + 'px',
|
|
37
|
+
top: 0,
|
|
38
|
+
left: 0,
|
|
39
|
+
transform: `translate(${iframeRect.left + popoverField.position.left}px, ${iframeRect.top + popoverField.position.top}px)`
|
|
40
|
+
})
|
|
41
|
+
}),
|
|
42
|
+
/*#__PURE__*/ jsx(Popover.Content, {
|
|
43
|
+
sideOffset: 4,
|
|
44
|
+
children: /*#__PURE__*/ jsx(Box, {
|
|
45
|
+
padding: 4,
|
|
46
|
+
width: "400px",
|
|
47
|
+
children: /*#__PURE__*/ jsx(MemoizedInputRenderer, {
|
|
48
|
+
document: documentResponse,
|
|
49
|
+
attribute: documentResponse.schema.attributes[popoverField.path],
|
|
50
|
+
label: popoverField.path,
|
|
51
|
+
name: popoverField.path,
|
|
52
|
+
type: documentResponse.schema.attributes[popoverField.path].type,
|
|
53
|
+
visible: true
|
|
54
|
+
})
|
|
55
|
+
})
|
|
56
|
+
})
|
|
57
|
+
]
|
|
58
|
+
})
|
|
59
|
+
})
|
|
60
|
+
]
|
|
61
|
+
});
|
|
62
|
+
};
|
|
63
|
+
function useHasInputPopoverParent() {
|
|
64
|
+
const context = useInputPopoverContext('useHasInputPopoverParent', ()=>true, false);
|
|
65
|
+
// useContext will return undefined if the called is not wrapped in the provider
|
|
66
|
+
return context !== undefined;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export { InputPopover, useHasInputPopoverParent };
|
|
70
|
+
//# sourceMappingURL=InputPopover.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputPopover.mjs","sources":["../../../../admin/src/preview/components/InputPopover.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { createContext } from '@strapi/admin/strapi-admin';\nimport { Box, Popover } from '@strapi/design-system';\n\nimport { type UseDocument } from '../../hooks/useDocument';\nimport { InputRenderer } from '../../pages/EditView/components/InputRenderer';\nimport { usePreviewContext } from '../pages/Preview';\n\n/**\n * No need for actual data in the context. It's just to let children check if they're rendered\n * inside of a preview InputPopover without relying on prop drilling.\n */\ninterface InputPopoverContextValue {}\n\nconst [InputPopoverProvider, useInputPopoverContext] =\n createContext<InputPopoverContextValue>('InputPopover');\n\nconst InputPopover = ({ documentResponse }: { documentResponse: ReturnType<UseDocument> }) => {\n const iframeRef = usePreviewContext('VisualEditingPopover', (state) => state.iframeRef);\n const popoverField = usePreviewContext('VisualEditingPopover', (state) => state.popoverField);\n const setPopoverField = usePreviewContext(\n 'VisualEditingPopover',\n (state) => state.setPopoverField\n );\n\n if (!popoverField || !documentResponse.schema || !iframeRef.current) {\n return null;\n }\n\n const iframeRect = iframeRef.current.getBoundingClientRect();\n\n return (\n <>\n {/**\n * Overlay an empty div on top of the iframe while the popover is open so it can\n * intercept clicks. Without it, we wouldn't be able to close the popover by clicking outside,\n * because the click would be detected by the iframe window, not by the admin.\n **/}\n <Box\n position={'fixed'}\n top={iframeRect.top + 'px'}\n left={iframeRect.left + 'px'}\n width={iframeRect.width + 'px'}\n height={iframeRect.height + 'px'}\n zIndex={4}\n />\n <InputPopoverProvider>\n <Popover.Root open={true} onOpenChange={(open) => !open && setPopoverField(null)}>\n <Popover.Trigger>\n <Box\n position=\"fixed\"\n width={popoverField.position.width + 'px'}\n height={popoverField.position.height + 'px'}\n top={0}\n left={0}\n transform={`translate(${iframeRect.left + popoverField.position.left}px, ${iframeRect.top + popoverField.position.top}px)`}\n />\n </Popover.Trigger>\n <Popover.Content sideOffset={4}>\n <Box padding={4} width=\"400px\">\n <InputRenderer\n document={documentResponse}\n attribute={documentResponse.schema.attributes[popoverField.path] as any}\n label={popoverField.path}\n name={popoverField.path}\n type={documentResponse.schema.attributes[popoverField.path].type}\n visible={true}\n />\n </Box>\n </Popover.Content>\n </Popover.Root>\n </InputPopoverProvider>\n </>\n );\n};\n\nfunction useHasInputPopoverParent() {\n const context = useInputPopoverContext('useHasInputPopoverParent', () => true, false);\n\n // useContext will return undefined if the called is not wrapped in the provider\n return context !== undefined;\n}\n\nexport { InputPopover, useHasInputPopoverParent };\n"],"names":["InputPopoverProvider","useInputPopoverContext","createContext","InputPopover","documentResponse","iframeRef","usePreviewContext","state","popoverField","setPopoverField","schema","current","iframeRect","getBoundingClientRect","_jsxs","_Fragment","_jsx","Box","position","top","left","width","height","zIndex","Popover","Root","open","onOpenChange","Trigger","transform","Content","sideOffset","padding","InputRenderer","document","attribute","attributes","path","label","name","type","visible","useHasInputPopoverParent","context","undefined"],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
5
|
+
var InputPopover = require('../components/InputPopover.js');
|
|
6
|
+
var Preview = require('../pages/Preview.js');
|
|
7
|
+
var constants = require('../utils/constants.js');
|
|
8
|
+
var getSendMessage = require('../utils/getSendMessage.js');
|
|
9
|
+
|
|
10
|
+
function _interopNamespaceDefault(e) {
|
|
11
|
+
var n = Object.create(null);
|
|
12
|
+
if (e) {
|
|
13
|
+
Object.keys(e).forEach(function (k) {
|
|
14
|
+
if (k !== 'default') {
|
|
15
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
16
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
get: function () { return e[k]; }
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
n.default = e;
|
|
24
|
+
return Object.freeze(n);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
28
|
+
|
|
29
|
+
function usePreviewInputManager(name) {
|
|
30
|
+
const iframe = Preview.usePreviewContext('usePreviewInputManager', (state)=>state.iframeRef, false);
|
|
31
|
+
const setPopoverField = Preview.usePreviewContext('usePreviewInputManager', (state)=>state.setPopoverField, false);
|
|
32
|
+
const hasInputPopoverParent = InputPopover.useHasInputPopoverParent();
|
|
33
|
+
const { value } = strapiAdmin.useField(name);
|
|
34
|
+
React__namespace.useEffect(()=>{
|
|
35
|
+
if (!iframe) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const sendMessage = getSendMessage.getSendMessage(iframe);
|
|
39
|
+
sendMessage(constants.INTERNAL_EVENTS.STRAPI_FIELD_CHANGE, {
|
|
40
|
+
field: name,
|
|
41
|
+
value
|
|
42
|
+
});
|
|
43
|
+
}, [
|
|
44
|
+
name,
|
|
45
|
+
value,
|
|
46
|
+
iframe
|
|
47
|
+
]);
|
|
48
|
+
const sendMessage = getSendMessage.getSendMessage(iframe);
|
|
49
|
+
return {
|
|
50
|
+
onFocus: ()=>{
|
|
51
|
+
if (hasInputPopoverParent) return;
|
|
52
|
+
sendMessage(constants.INTERNAL_EVENTS.STRAPI_FIELD_FOCUS, {
|
|
53
|
+
field: name
|
|
54
|
+
});
|
|
55
|
+
},
|
|
56
|
+
onBlur: ()=>{
|
|
57
|
+
if (hasInputPopoverParent) return;
|
|
58
|
+
setPopoverField?.(null);
|
|
59
|
+
sendMessage(constants.INTERNAL_EVENTS.STRAPI_FIELD_BLUR, {
|
|
60
|
+
field: name
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
exports.usePreviewInputManager = usePreviewInputManager;
|
|
67
|
+
//# sourceMappingURL=usePreviewInputManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePreviewInputManager.js","sources":["../../../../admin/src/preview/hooks/usePreviewInputManager.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useField } from '@strapi/admin/strapi-admin';\n\nimport { useHasInputPopoverParent } from '../components/InputPopover';\nimport { usePreviewContext } from '../pages/Preview';\nimport { INTERNAL_EVENTS } from '../utils/constants';\nimport { getSendMessage } from '../utils/getSendMessage';\n\ntype PreviewInputProps = Pick<\n Required<React.InputHTMLAttributes<HTMLInputElement>>,\n 'onFocus' | 'onBlur'\n>;\n\nexport function usePreviewInputManager(name: string): PreviewInputProps {\n const iframe = usePreviewContext('usePreviewInputManager', (state) => state.iframeRef, false);\n const setPopoverField = usePreviewContext(\n 'usePreviewInputManager',\n (state) => state.setPopoverField,\n false\n );\n const hasInputPopoverParent = useHasInputPopoverParent();\n const { value } = useField(name);\n\n React.useEffect(() => {\n if (!iframe) {\n return;\n }\n\n const sendMessage = getSendMessage(iframe);\n sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_CHANGE, { field: name, value });\n }, [name, value, iframe]);\n\n const sendMessage = getSendMessage(iframe);\n\n return {\n onFocus: () => {\n if (hasInputPopoverParent) return;\n\n sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_FOCUS, { field: name });\n },\n onBlur: () => {\n if (hasInputPopoverParent) return;\n\n setPopoverField?.(null);\n sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_BLUR, { field: name });\n },\n };\n}\n"],"names":["usePreviewInputManager","name","iframe","usePreviewContext","state","iframeRef","setPopoverField","hasInputPopoverParent","useHasInputPopoverParent","value","useField","React","useEffect","sendMessage","getSendMessage","INTERNAL_EVENTS","STRAPI_FIELD_CHANGE","field","onFocus","STRAPI_FIELD_FOCUS","onBlur","STRAPI_FIELD_BLUR"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcO,SAASA,uBAAuBC,IAAY,EAAA;AACjD,IAAA,MAAMC,SAASC,yBAAkB,CAAA,wBAAA,EAA0B,CAACC,KAAUA,GAAAA,KAAAA,CAAMC,SAAS,EAAE,KAAA,CAAA;AACvF,IAAA,MAAMC,kBAAkBH,yBACtB,CAAA,wBAAA,EACA,CAACC,KAAUA,GAAAA,KAAAA,CAAME,eAAe,EAChC,KAAA,CAAA;AAEF,IAAA,MAAMC,qBAAwBC,GAAAA,qCAAAA,EAAAA;AAC9B,IAAA,MAAM,EAAEC,KAAK,EAAE,GAAGC,oBAAST,CAAAA,IAAAA,CAAAA;AAE3BU,IAAAA,gBAAAA,CAAMC,SAAS,CAAC,IAAA;AACd,QAAA,IAAI,CAACV,MAAQ,EAAA;AACX,YAAA;AACF;AAEA,QAAA,MAAMW,cAAcC,6BAAeZ,CAAAA,MAAAA,CAAAA;QACnCW,WAAYE,CAAAA,yBAAAA,CAAgBC,mBAAmB,EAAE;YAAEC,KAAOhB,EAAAA,IAAAA;AAAMQ,YAAAA;AAAM,SAAA,CAAA;KACrE,EAAA;AAACR,QAAAA,IAAAA;AAAMQ,QAAAA,KAAAA;AAAOP,QAAAA;AAAO,KAAA,CAAA;AAExB,IAAA,MAAMW,cAAcC,6BAAeZ,CAAAA,MAAAA,CAAAA;IAEnC,OAAO;QACLgB,OAAS,EAAA,IAAA;AACP,YAAA,IAAIX,qBAAuB,EAAA;YAE3BM,WAAYE,CAAAA,yBAAAA,CAAgBI,kBAAkB,EAAE;gBAAEF,KAAOhB,EAAAA;AAAK,aAAA,CAAA;AAChE,SAAA;QACAmB,MAAQ,EAAA,IAAA;AACN,YAAA,IAAIb,qBAAuB,EAAA;YAE3BD,eAAkB,GAAA,IAAA,CAAA;YAClBO,WAAYE,CAAAA,yBAAAA,CAAgBM,iBAAiB,EAAE;gBAAEJ,KAAOhB,EAAAA;AAAK,aAAA,CAAA;AAC/D;AACF,KAAA;AACF;;;;"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { useField } from '@strapi/admin/strapi-admin';
|
|
3
|
+
import { useHasInputPopoverParent } from '../components/InputPopover.mjs';
|
|
4
|
+
import { usePreviewContext } from '../pages/Preview.mjs';
|
|
5
|
+
import { INTERNAL_EVENTS } from '../utils/constants.mjs';
|
|
6
|
+
import { getSendMessage } from '../utils/getSendMessage.mjs';
|
|
7
|
+
|
|
8
|
+
function usePreviewInputManager(name) {
|
|
9
|
+
const iframe = usePreviewContext('usePreviewInputManager', (state)=>state.iframeRef, false);
|
|
10
|
+
const setPopoverField = usePreviewContext('usePreviewInputManager', (state)=>state.setPopoverField, false);
|
|
11
|
+
const hasInputPopoverParent = useHasInputPopoverParent();
|
|
12
|
+
const { value } = useField(name);
|
|
13
|
+
React.useEffect(()=>{
|
|
14
|
+
if (!iframe) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const sendMessage = getSendMessage(iframe);
|
|
18
|
+
sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_CHANGE, {
|
|
19
|
+
field: name,
|
|
20
|
+
value
|
|
21
|
+
});
|
|
22
|
+
}, [
|
|
23
|
+
name,
|
|
24
|
+
value,
|
|
25
|
+
iframe
|
|
26
|
+
]);
|
|
27
|
+
const sendMessage = getSendMessage(iframe);
|
|
28
|
+
return {
|
|
29
|
+
onFocus: ()=>{
|
|
30
|
+
if (hasInputPopoverParent) return;
|
|
31
|
+
sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_FOCUS, {
|
|
32
|
+
field: name
|
|
33
|
+
});
|
|
34
|
+
},
|
|
35
|
+
onBlur: ()=>{
|
|
36
|
+
if (hasInputPopoverParent) return;
|
|
37
|
+
setPopoverField?.(null);
|
|
38
|
+
sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_BLUR, {
|
|
39
|
+
field: name
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export { usePreviewInputManager };
|
|
46
|
+
//# sourceMappingURL=usePreviewInputManager.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePreviewInputManager.mjs","sources":["../../../../admin/src/preview/hooks/usePreviewInputManager.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useField } from '@strapi/admin/strapi-admin';\n\nimport { useHasInputPopoverParent } from '../components/InputPopover';\nimport { usePreviewContext } from '../pages/Preview';\nimport { INTERNAL_EVENTS } from '../utils/constants';\nimport { getSendMessage } from '../utils/getSendMessage';\n\ntype PreviewInputProps = Pick<\n Required<React.InputHTMLAttributes<HTMLInputElement>>,\n 'onFocus' | 'onBlur'\n>;\n\nexport function usePreviewInputManager(name: string): PreviewInputProps {\n const iframe = usePreviewContext('usePreviewInputManager', (state) => state.iframeRef, false);\n const setPopoverField = usePreviewContext(\n 'usePreviewInputManager',\n (state) => state.setPopoverField,\n false\n );\n const hasInputPopoverParent = useHasInputPopoverParent();\n const { value } = useField(name);\n\n React.useEffect(() => {\n if (!iframe) {\n return;\n }\n\n const sendMessage = getSendMessage(iframe);\n sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_CHANGE, { field: name, value });\n }, [name, value, iframe]);\n\n const sendMessage = getSendMessage(iframe);\n\n return {\n onFocus: () => {\n if (hasInputPopoverParent) return;\n\n sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_FOCUS, { field: name });\n },\n onBlur: () => {\n if (hasInputPopoverParent) return;\n\n setPopoverField?.(null);\n sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_BLUR, { field: name });\n },\n };\n}\n"],"names":["usePreviewInputManager","name","iframe","usePreviewContext","state","iframeRef","setPopoverField","hasInputPopoverParent","useHasInputPopoverParent","value","useField","React","useEffect","sendMessage","getSendMessage","INTERNAL_EVENTS","STRAPI_FIELD_CHANGE","field","onFocus","STRAPI_FIELD_FOCUS","onBlur","STRAPI_FIELD_BLUR"],"mappings":";;;;;;;AAcO,SAASA,uBAAuBC,IAAY,EAAA;AACjD,IAAA,MAAMC,SAASC,iBAAkB,CAAA,wBAAA,EAA0B,CAACC,KAAUA,GAAAA,KAAAA,CAAMC,SAAS,EAAE,KAAA,CAAA;AACvF,IAAA,MAAMC,kBAAkBH,iBACtB,CAAA,wBAAA,EACA,CAACC,KAAUA,GAAAA,KAAAA,CAAME,eAAe,EAChC,KAAA,CAAA;AAEF,IAAA,MAAMC,qBAAwBC,GAAAA,wBAAAA,EAAAA;AAC9B,IAAA,MAAM,EAAEC,KAAK,EAAE,GAAGC,QAAST,CAAAA,IAAAA,CAAAA;AAE3BU,IAAAA,KAAAA,CAAMC,SAAS,CAAC,IAAA;AACd,QAAA,IAAI,CAACV,MAAQ,EAAA;AACX,YAAA;AACF;AAEA,QAAA,MAAMW,cAAcC,cAAeZ,CAAAA,MAAAA,CAAAA;QACnCW,WAAYE,CAAAA,eAAAA,CAAgBC,mBAAmB,EAAE;YAAEC,KAAOhB,EAAAA,IAAAA;AAAMQ,YAAAA;AAAM,SAAA,CAAA;KACrE,EAAA;AAACR,QAAAA,IAAAA;AAAMQ,QAAAA,KAAAA;AAAOP,QAAAA;AAAO,KAAA,CAAA;AAExB,IAAA,MAAMW,cAAcC,cAAeZ,CAAAA,MAAAA,CAAAA;IAEnC,OAAO;QACLgB,OAAS,EAAA,IAAA;AACP,YAAA,IAAIX,qBAAuB,EAAA;YAE3BM,WAAYE,CAAAA,eAAAA,CAAgBI,kBAAkB,EAAE;gBAAEF,KAAOhB,EAAAA;AAAK,aAAA,CAAA;AAChE,SAAA;QACAmB,MAAQ,EAAA,IAAA;AACN,YAAA,IAAIb,qBAAuB,EAAA;YAE3BD,eAAkB,GAAA,IAAA,CAAA;YAClBO,WAAYE,CAAAA,eAAAA,CAAgBM,iBAAiB,EAAE;gBAAEJ,KAAOhB,EAAAA;AAAK,aAAA,CAAA;AAC/D;AACF,KAAA;AACF;;;;"}
|
|
@@ -12,12 +12,17 @@ var collections = require('../../constants/collections.js');
|
|
|
12
12
|
var DocumentRBAC = require('../../features/DocumentRBAC.js');
|
|
13
13
|
var useDocument = require('../../hooks/useDocument.js');
|
|
14
14
|
var useDocumentLayout = require('../../hooks/useDocumentLayout.js');
|
|
15
|
+
var Blocker = require('../../pages/EditView/components/Blocker.js');
|
|
15
16
|
var FormLayout = require('../../pages/EditView/components/FormLayout.js');
|
|
16
17
|
var data = require('../../pages/EditView/utils/data.js');
|
|
17
18
|
var api = require('../../utils/api.js');
|
|
18
19
|
var validation = require('../../utils/validation.js');
|
|
20
|
+
var InputPopover = require('../components/InputPopover.js');
|
|
19
21
|
var PreviewHeader = require('../components/PreviewHeader.js');
|
|
20
22
|
var preview = require('../services/preview.js');
|
|
23
|
+
var constants = require('../utils/constants.js');
|
|
24
|
+
var getSendMessage = require('../utils/getSendMessage.js');
|
|
25
|
+
var previewScript = require('../utils/previewScript.js');
|
|
21
26
|
|
|
22
27
|
function _interopNamespaceDefault(e) {
|
|
23
28
|
var n = Object.create(null);
|
|
@@ -73,6 +78,7 @@ const PreviewPage = ()=>{
|
|
|
73
78
|
const { formatMessage } = reactIntl.useIntl();
|
|
74
79
|
const iframeRef = React__namespace.useRef(null);
|
|
75
80
|
const [isSideEditorOpen, setIsSideEditorOpen] = React__namespace.useState(true);
|
|
81
|
+
const [popoverField, setPopoverField] = React__namespace.useState(null);
|
|
76
82
|
// Read all the necessary data from the URL to find the right preview URL
|
|
77
83
|
const { slug: model, id: documentId, collectionType } = reactRouterDom.useParams();
|
|
78
84
|
const [{ query }] = strapiAdmin.useQueryParams();
|
|
@@ -81,6 +87,32 @@ const PreviewPage = ()=>{
|
|
|
81
87
|
]);
|
|
82
88
|
const [deviceName, setDeviceName] = React__namespace.useState(DEVICES[0].name);
|
|
83
89
|
const device = DEVICES.find((d)=>d.name === deviceName) ?? DEVICES[0];
|
|
90
|
+
// Listen for ready message from iframe before injecting script
|
|
91
|
+
React__namespace.useEffect(()=>{
|
|
92
|
+
const handleMessage = (event)=>{
|
|
93
|
+
// Only listen to events from the preview iframe
|
|
94
|
+
if (iframeRef.current) {
|
|
95
|
+
const previewOrigin = new URL(iframeRef.current?.src).origin;
|
|
96
|
+
if (event.origin !== previewOrigin) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (event.data?.type === constants.PUBLIC_EVENTS.PREVIEW_READY) {
|
|
101
|
+
const script = `(${previewScript.previewScript.toString()})()`;
|
|
102
|
+
const sendMessage = getSendMessage.getSendMessage(iframeRef);
|
|
103
|
+
sendMessage(constants.PUBLIC_EVENTS.STRAPI_SCRIPT, {
|
|
104
|
+
script
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
if (event.data?.type === constants.INTERNAL_EVENTS.STRAPI_FIELD_FOCUS_INTENT) {
|
|
108
|
+
setPopoverField?.(event.data.payload);
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
window.addEventListener('message', handleMessage);
|
|
112
|
+
return ()=>{
|
|
113
|
+
window.removeEventListener('message', handleMessage);
|
|
114
|
+
};
|
|
115
|
+
}, []);
|
|
84
116
|
if (!collectionType) {
|
|
85
117
|
throw new Error('Could not find collectionType in url params');
|
|
86
118
|
}
|
|
@@ -161,6 +193,9 @@ const PreviewPage = ()=>{
|
|
|
161
193
|
schema: documentResponse.schema,
|
|
162
194
|
layout: documentLayoutResponse.edit,
|
|
163
195
|
onPreview: onPreview,
|
|
196
|
+
iframeRef: iframeRef,
|
|
197
|
+
popoverField: popoverField,
|
|
198
|
+
setPopoverField: setPopoverField,
|
|
164
199
|
children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Form, {
|
|
165
200
|
method: "PUT",
|
|
166
201
|
disabled: query.status === 'published' && documentResponse && documentResponse.document.status !== 'draft',
|
|
@@ -182,108 +217,109 @@ const PreviewPage = ()=>{
|
|
|
182
217
|
abortEarly: false
|
|
183
218
|
});
|
|
184
219
|
},
|
|
185
|
-
children:
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
})
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
onClick: ()=>setIsSideEditorOpen((prev)=>!prev),
|
|
240
|
-
children: /*#__PURE__*/ jsxRuntime.jsx(AnimatedArrow, {
|
|
241
|
-
$isSideEditorOpen: isSideEditorOpen
|
|
242
|
-
})
|
|
220
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
221
|
+
direction: "column",
|
|
222
|
+
height: "100%",
|
|
223
|
+
alignItems: "stretch",
|
|
224
|
+
children: [
|
|
225
|
+
/*#__PURE__*/ jsxRuntime.jsx(Blocker.Blocker, {}),
|
|
226
|
+
/*#__PURE__*/ jsxRuntime.jsx(PreviewHeader.PreviewHeader, {}),
|
|
227
|
+
/*#__PURE__*/ jsxRuntime.jsx(InputPopover.InputPopover, {
|
|
228
|
+
documentResponse: documentResponse
|
|
229
|
+
}),
|
|
230
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
231
|
+
flex: 1,
|
|
232
|
+
overflow: "auto",
|
|
233
|
+
alignItems: "stretch",
|
|
234
|
+
children: [
|
|
235
|
+
hasAdvancedPreview && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
236
|
+
overflow: "auto",
|
|
237
|
+
width: isSideEditorOpen ? '50%' : 0,
|
|
238
|
+
borderWidth: "0 1px 0 0",
|
|
239
|
+
borderColor: "neutral150",
|
|
240
|
+
paddingTop: 6,
|
|
241
|
+
paddingBottom: 6,
|
|
242
|
+
// Remove horizontal padding when the editor is closed or it won't fully disappear
|
|
243
|
+
paddingLeft: isSideEditorOpen ? 6 : 0,
|
|
244
|
+
paddingRight: isSideEditorOpen ? 6 : 0,
|
|
245
|
+
transition: "all 0.2s ease-in-out",
|
|
246
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(FormLayout.FormLayout, {
|
|
247
|
+
layout: documentLayoutResponse.edit.layout,
|
|
248
|
+
document: documentResponse,
|
|
249
|
+
hasBackground: false
|
|
250
|
+
})
|
|
251
|
+
}),
|
|
252
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
253
|
+
direction: "column",
|
|
254
|
+
alignItems: "stretch",
|
|
255
|
+
flex: 1,
|
|
256
|
+
height: "100%",
|
|
257
|
+
overflow: "hidden",
|
|
258
|
+
children: [
|
|
259
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
260
|
+
direction: "row",
|
|
261
|
+
background: "neutral0",
|
|
262
|
+
padding: 2,
|
|
263
|
+
borderWidth: "0 0 1px 0",
|
|
264
|
+
borderColor: "neutral150",
|
|
265
|
+
children: [
|
|
266
|
+
hasAdvancedPreview && /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
|
|
267
|
+
variant: "ghost",
|
|
268
|
+
label: formatMessage(isSideEditorOpen ? {
|
|
269
|
+
id: 'content-manager.preview.content.close-editor',
|
|
270
|
+
defaultMessage: 'Close editor'
|
|
271
|
+
} : {
|
|
272
|
+
id: 'content-manager.preview.content.open-editor',
|
|
273
|
+
defaultMessage: 'Open editor'
|
|
243
274
|
}),
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelect, {
|
|
248
|
-
value: deviceName,
|
|
249
|
-
onChange: (name)=>setDeviceName(name.toString()),
|
|
250
|
-
"aria-label": formatMessage({
|
|
251
|
-
id: 'content-manager.preview.device.select',
|
|
252
|
-
defaultMessage: 'Select device type'
|
|
253
|
-
}),
|
|
254
|
-
children: DEVICES.map((deviceOption)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelectOption, {
|
|
255
|
-
value: deviceOption.name,
|
|
256
|
-
children: formatMessage(deviceOption.label)
|
|
257
|
-
}, deviceOption.name))
|
|
258
|
-
})
|
|
275
|
+
onClick: ()=>setIsSideEditorOpen((prev)=>!prev),
|
|
276
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(AnimatedArrow, {
|
|
277
|
+
$isSideEditorOpen: isSideEditorOpen
|
|
259
278
|
})
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
279
|
+
}),
|
|
280
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
281
|
+
justifyContent: "center",
|
|
282
|
+
flex: 1,
|
|
283
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelect, {
|
|
284
|
+
value: deviceName,
|
|
285
|
+
onChange: (name)=>setDeviceName(name.toString()),
|
|
286
|
+
"aria-label": formatMessage({
|
|
287
|
+
id: 'content-manager.preview.device.select',
|
|
288
|
+
defaultMessage: 'Select device type'
|
|
289
|
+
}),
|
|
290
|
+
children: DEVICES.map((deviceOption)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelectOption, {
|
|
291
|
+
value: deviceOption.name,
|
|
292
|
+
children: formatMessage(deviceOption.label)
|
|
293
|
+
}, deviceOption.name))
|
|
294
|
+
})
|
|
295
|
+
})
|
|
296
|
+
]
|
|
297
|
+
}),
|
|
298
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
299
|
+
direction: "column",
|
|
300
|
+
justifyContent: "center",
|
|
301
|
+
background: "neutral0",
|
|
302
|
+
flex: 1,
|
|
303
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
304
|
+
"data-testid": "preview-iframe",
|
|
305
|
+
ref: iframeRef,
|
|
306
|
+
src: previewUrl,
|
|
307
|
+
title: formatMessage({
|
|
308
|
+
id: 'content-manager.preview.panel.title',
|
|
309
|
+
defaultMessage: 'Preview'
|
|
310
|
+
}),
|
|
311
|
+
width: device.width,
|
|
312
|
+
height: device.height,
|
|
313
|
+
borderWidth: 0,
|
|
314
|
+
tag: "iframe"
|
|
315
|
+
}, previewUrl)
|
|
316
|
+
})
|
|
317
|
+
]
|
|
318
|
+
})
|
|
319
|
+
]
|
|
320
|
+
})
|
|
321
|
+
]
|
|
322
|
+
})
|
|
287
323
|
})
|
|
288
324
|
})
|
|
289
325
|
]
|