@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.
Files changed (96) hide show
  1. package/dist/admin/components/LeftMenu.js +13 -15
  2. package/dist/admin/components/LeftMenu.js.map +1 -1
  3. package/dist/admin/components/LeftMenu.mjs +14 -16
  4. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  5. package/dist/admin/components/Widgets.js +15 -10
  6. package/dist/admin/components/Widgets.js.map +1 -1
  7. package/dist/admin/components/Widgets.mjs +16 -11
  8. package/dist/admin/components/Widgets.mjs.map +1 -1
  9. package/dist/admin/pages/EditView/EditViewPage.js +12 -19
  10. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  11. package/dist/admin/pages/EditView/EditViewPage.mjs +13 -20
  12. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  13. package/dist/admin/pages/EditView/components/Blocker.js +18 -0
  14. package/dist/admin/pages/EditView/components/Blocker.js.map +1 -0
  15. package/dist/admin/pages/EditView/components/Blocker.mjs +16 -0
  16. package/dist/admin/pages/EditView/components/Blocker.mjs.map +1 -0
  17. package/dist/admin/pages/EditView/components/DocumentActions.js +16 -1
  18. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  19. package/dist/admin/pages/EditView/components/DocumentActions.mjs +17 -2
  20. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  21. package/dist/admin/pages/EditView/components/InputRenderer.js +15 -5
  22. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  23. package/dist/admin/pages/EditView/components/InputRenderer.mjs +15 -5
  24. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  25. package/dist/admin/pages/EditView/utils/data.js +33 -8
  26. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  27. package/dist/admin/pages/EditView/utils/data.mjs +33 -8
  28. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  29. package/dist/admin/pages/ListView/ListViewPage.js +8 -8
  30. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  31. package/dist/admin/pages/ListView/ListViewPage.mjs +8 -8
  32. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  33. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +12 -2
  34. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
  35. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +12 -2
  36. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
  37. package/dist/admin/preview/components/InputPopover.js +73 -0
  38. package/dist/admin/preview/components/InputPopover.js.map +1 -0
  39. package/dist/admin/preview/components/InputPopover.mjs +70 -0
  40. package/dist/admin/preview/components/InputPopover.mjs.map +1 -0
  41. package/dist/admin/preview/hooks/usePreviewInputManager.js +67 -0
  42. package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -0
  43. package/dist/admin/preview/hooks/usePreviewInputManager.mjs +46 -0
  44. package/dist/admin/preview/hooks/usePreviewInputManager.mjs.map +1 -0
  45. package/dist/admin/preview/pages/Preview.js +136 -100
  46. package/dist/admin/preview/pages/Preview.js.map +1 -1
  47. package/dist/admin/preview/pages/Preview.mjs +137 -101
  48. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  49. package/dist/admin/preview/utils/constants.js +22 -0
  50. package/dist/admin/preview/utils/constants.js.map +1 -0
  51. package/dist/admin/preview/utils/constants.mjs +19 -0
  52. package/dist/admin/preview/utils/constants.mjs.map +1 -0
  53. package/dist/admin/preview/utils/getSendMessage.js +22 -0
  54. package/dist/admin/preview/utils/getSendMessage.js.map +1 -0
  55. package/dist/admin/preview/utils/getSendMessage.mjs +20 -0
  56. package/dist/admin/preview/utils/getSendMessage.mjs.map +1 -0
  57. package/dist/admin/preview/utils/previewScript.js +296 -0
  58. package/dist/admin/preview/utils/previewScript.js.map +1 -0
  59. package/dist/admin/preview/utils/previewScript.mjs +294 -0
  60. package/dist/admin/preview/utils/previewScript.mjs.map +1 -0
  61. package/dist/admin/services/api.js +2 -1
  62. package/dist/admin/services/api.js.map +1 -1
  63. package/dist/admin/services/api.mjs +2 -1
  64. package/dist/admin/services/api.mjs.map +1 -1
  65. package/dist/admin/services/documents.js +22 -12
  66. package/dist/admin/services/documents.js.map +1 -1
  67. package/dist/admin/services/documents.mjs +22 -12
  68. package/dist/admin/services/documents.mjs.map +1 -1
  69. package/dist/admin/services/homepage.js +2 -11
  70. package/dist/admin/services/homepage.js.map +1 -1
  71. package/dist/admin/services/homepage.mjs +3 -11
  72. package/dist/admin/services/homepage.mjs.map +1 -1
  73. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  74. package/dist/admin/src/pages/EditView/components/Blocker.d.ts +5 -0
  75. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
  76. package/dist/admin/src/preview/components/InputPopover.d.ts +6 -0
  77. package/dist/admin/src/preview/hooks/usePreviewInputManager.d.ts +4 -0
  78. package/dist/admin/src/preview/pages/Preview.d.ts +8 -0
  79. package/dist/admin/src/preview/services/preview.d.ts +1 -1
  80. package/dist/admin/src/preview/utils/constants.d.ts +20 -0
  81. package/dist/admin/src/preview/utils/getSendMessage.d.ts +11 -0
  82. package/dist/admin/src/preview/utils/previewScript.d.ts +22 -0
  83. package/dist/admin/src/services/api.d.ts +1 -1
  84. package/dist/admin/src/services/components.d.ts +2 -2
  85. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  86. package/dist/admin/src/services/documents.d.ts +16 -16
  87. package/dist/admin/src/services/homepage.d.ts +2 -6
  88. package/dist/admin/src/services/init.d.ts +1 -1
  89. package/dist/admin/src/services/relations.d.ts +2 -2
  90. package/dist/admin/src/services/uid.d.ts +3 -3
  91. package/dist/server/homepage/services/homepage.js +2 -2
  92. package/dist/server/homepage/services/homepage.js.map +1 -1
  93. package/dist/server/homepage/services/homepage.mjs +2 -2
  94. package/dist/server/homepage/services/homepage.mjs.map +1 -1
  95. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
  96. 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: ({ resetForm })=>/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
186
- direction: "column",
187
- height: "100%",
188
- alignItems: "stretch",
189
- children: [
190
- /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Blocker, {
191
- onProceed: resetForm
192
- }),
193
- /*#__PURE__*/ jsxRuntime.jsx(PreviewHeader.PreviewHeader, {}),
194
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
195
- flex: 1,
196
- overflow: "auto",
197
- alignItems: "stretch",
198
- children: [
199
- hasAdvancedPreview && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
200
- overflow: "auto",
201
- width: isSideEditorOpen ? '50%' : 0,
202
- borderWidth: "0 1px 0 0",
203
- borderColor: "neutral150",
204
- paddingTop: 6,
205
- paddingBottom: 6,
206
- // Remove horizontal padding when the editor is closed or it won't fully disappear
207
- paddingLeft: isSideEditorOpen ? 6 : 0,
208
- paddingRight: isSideEditorOpen ? 6 : 0,
209
- transition: "all 0.2s ease-in-out",
210
- children: /*#__PURE__*/ jsxRuntime.jsx(FormLayout.FormLayout, {
211
- layout: documentLayoutResponse.edit.layout,
212
- document: documentResponse,
213
- hasBackground: false
214
- })
215
- }),
216
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
217
- direction: "column",
218
- alignItems: "stretch",
219
- flex: 1,
220
- height: "100%",
221
- overflow: "hidden",
222
- children: [
223
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
224
- direction: "row",
225
- background: "neutral0",
226
- padding: 2,
227
- borderWidth: "0 0 1px 0",
228
- borderColor: "neutral150",
229
- children: [
230
- hasAdvancedPreview && /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
231
- variant: "ghost",
232
- label: formatMessage(isSideEditorOpen ? {
233
- id: 'content-manager.preview.content.close-editor',
234
- defaultMessage: 'Close editor'
235
- } : {
236
- id: 'content-manager.preview.content.open-editor',
237
- defaultMessage: 'Open editor'
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
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
245
- justifyContent: "center",
246
- flex: 1,
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
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
263
- direction: "column",
264
- justifyContent: "center",
265
- background: "neutral0",
266
- flex: 1,
267
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
268
- "data-testid": "preview-iframe",
269
- ref: iframeRef,
270
- src: previewUrl,
271
- title: formatMessage({
272
- id: 'content-manager.preview.panel.title',
273
- defaultMessage: 'Preview'
274
- }),
275
- width: device.width,
276
- height: device.height,
277
- borderWidth: 0,
278
- tag: "iframe"
279
- }, previewUrl)
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
  ]