@strapi/content-manager 5.22.0 → 5.23.1

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 (86) 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 -7
  6. package/dist/admin/components/Widgets.js.map +1 -1
  7. package/dist/admin/components/Widgets.mjs +15 -7
  8. package/dist/admin/components/Widgets.mjs.map +1 -1
  9. package/dist/admin/pages/EditView/EditViewPage.js +11 -16
  10. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  11. package/dist/admin/pages/EditView/EditViewPage.mjs +12 -17
  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 +26 -7
  26. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  27. package/dist/admin/pages/EditView/utils/data.mjs +26 -7
  28. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  29. package/dist/admin/pages/ListView/ListViewPage.js +6 -2
  30. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  31. package/dist/admin/pages/ListView/ListViewPage.mjs +6 -2
  32. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  33. package/dist/admin/preview/components/InputPopover.js +73 -0
  34. package/dist/admin/preview/components/InputPopover.js.map +1 -0
  35. package/dist/admin/preview/components/InputPopover.mjs +70 -0
  36. package/dist/admin/preview/components/InputPopover.mjs.map +1 -0
  37. package/dist/admin/preview/hooks/usePreviewInputManager.js +67 -0
  38. package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -0
  39. package/dist/admin/preview/hooks/usePreviewInputManager.mjs +46 -0
  40. package/dist/admin/preview/hooks/usePreviewInputManager.mjs.map +1 -0
  41. package/dist/admin/preview/pages/Preview.js +119 -118
  42. package/dist/admin/preview/pages/Preview.js.map +1 -1
  43. package/dist/admin/preview/pages/Preview.mjs +120 -119
  44. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  45. package/dist/admin/preview/utils/constants.js +2 -1
  46. package/dist/admin/preview/utils/constants.js.map +1 -1
  47. package/dist/admin/preview/utils/constants.mjs +2 -2
  48. package/dist/admin/preview/utils/constants.mjs.map +1 -1
  49. package/dist/admin/preview/utils/getSendMessage.js +22 -0
  50. package/dist/admin/preview/utils/getSendMessage.js.map +1 -0
  51. package/dist/admin/preview/utils/getSendMessage.mjs +20 -0
  52. package/dist/admin/preview/utils/getSendMessage.mjs.map +1 -0
  53. package/dist/admin/preview/utils/previewScript.js +272 -4
  54. package/dist/admin/preview/utils/previewScript.js.map +1 -1
  55. package/dist/admin/preview/utils/previewScript.mjs +272 -4
  56. package/dist/admin/preview/utils/previewScript.mjs.map +1 -1
  57. package/dist/admin/services/documents.js +0 -1
  58. package/dist/admin/services/documents.js.map +1 -1
  59. package/dist/admin/services/documents.mjs +0 -1
  60. package/dist/admin/services/documents.mjs.map +1 -1
  61. package/dist/admin/src/pages/EditView/components/Blocker.d.ts +5 -0
  62. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
  63. package/dist/admin/src/preview/components/InputPopover.d.ts +6 -0
  64. package/dist/admin/src/preview/hooks/usePreviewInputManager.d.ts +4 -0
  65. package/dist/admin/src/preview/pages/Preview.d.ts +8 -0
  66. package/dist/admin/src/preview/utils/constants.d.ts +4 -1
  67. package/dist/admin/src/preview/utils/getSendMessage.d.ts +11 -0
  68. package/dist/admin/src/preview/utils/previewScript.d.ts +7 -1
  69. package/dist/admin/translations/en.json.js +1 -0
  70. package/dist/admin/translations/en.json.js.map +1 -1
  71. package/dist/admin/translations/en.json.mjs +1 -0
  72. package/dist/admin/translations/en.json.mjs.map +1 -1
  73. package/dist/admin/translations/es.json.js +1 -0
  74. package/dist/admin/translations/es.json.js.map +1 -1
  75. package/dist/admin/translations/es.json.mjs +1 -0
  76. package/dist/admin/translations/es.json.mjs.map +1 -1
  77. package/dist/admin/translations/fr.json.js +1 -0
  78. package/dist/admin/translations/fr.json.js.map +1 -1
  79. package/dist/admin/translations/fr.json.mjs +1 -0
  80. package/dist/admin/translations/fr.json.mjs.map +1 -1
  81. package/dist/server/homepage/services/homepage.js +2 -2
  82. package/dist/server/homepage/services/homepage.js.map +1 -1
  83. package/dist/server/homepage/services/homepage.mjs +2 -2
  84. package/dist/server/homepage/services/homepage.mjs.map +1 -1
  85. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
  86. package/package.json +5 -5
@@ -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,13 +12,16 @@ 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');
21
23
  var constants = require('../utils/constants.js');
24
+ var getSendMessage = require('../utils/getSendMessage.js');
22
25
  var previewScript = require('../utils/previewScript.js');
23
26
 
24
27
  function _interopNamespaceDefault(e) {
@@ -70,28 +73,12 @@ const [PreviewProvider, usePreviewContext] = strapiAdmin.createContext('PreviewP
70
73
  rotate: ${(props)=>props.$isSideEditorOpen ? '0deg' : '180deg'};
71
74
  transition: rotate 0.2s ease-in-out;
72
75
  `;
73
- /**
74
- * A function factory so we can generate a new sendMessage everytime we need one.
75
- * We can't store and reuse a single sendMessage because it needs to have a stable identity
76
- * as it used in a useEffect function. And we can't rely on useCallback because we need the
77
- * up-to-date iframe ref, and this would make it stale (refs don't trigger callback reevaluations).
78
- */ function getSendMessage(iframe) {
79
- return (type, payload)=>{
80
- if (!iframe.current) return;
81
- const { origin } = new URL(iframe.current.src);
82
- iframe.current.contentWindow?.postMessage({
83
- type,
84
- ...payload !== undefined && {
85
- payload
86
- }
87
- }, origin);
88
- };
89
- }
90
76
  const PreviewPage = ()=>{
91
77
  const location = reactRouterDom.useLocation();
92
78
  const { formatMessage } = reactIntl.useIntl();
93
79
  const iframeRef = React__namespace.useRef(null);
94
80
  const [isSideEditorOpen, setIsSideEditorOpen] = React__namespace.useState(true);
81
+ const [popoverField, setPopoverField] = React__namespace.useState(null);
95
82
  // Read all the necessary data from the URL to find the right preview URL
96
83
  const { slug: model, id: documentId, collectionType } = reactRouterDom.useParams();
97
84
  const [{ query }] = strapiAdmin.useQueryParams();
@@ -103,13 +90,23 @@ const PreviewPage = ()=>{
103
90
  // Listen for ready message from iframe before injecting script
104
91
  React__namespace.useEffect(()=>{
105
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
+ }
106
100
  if (event.data?.type === constants.PUBLIC_EVENTS.PREVIEW_READY) {
107
101
  const script = `(${previewScript.previewScript.toString()})()`;
108
- const sendMessage = getSendMessage(iframeRef);
102
+ const sendMessage = getSendMessage.getSendMessage(iframeRef);
109
103
  sendMessage(constants.PUBLIC_EVENTS.STRAPI_SCRIPT, {
110
104
  script
111
105
  });
112
106
  }
107
+ if (event.data?.type === constants.INTERNAL_EVENTS.STRAPI_FIELD_FOCUS_INTENT) {
108
+ setPopoverField?.(event.data.payload);
109
+ }
113
110
  };
114
111
  window.addEventListener('message', handleMessage);
115
112
  return ()=>{
@@ -196,6 +193,9 @@ const PreviewPage = ()=>{
196
193
  schema: documentResponse.schema,
197
194
  layout: documentLayoutResponse.edit,
198
195
  onPreview: onPreview,
196
+ iframeRef: iframeRef,
197
+ popoverField: popoverField,
198
+ setPopoverField: setPopoverField,
199
199
  children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Form, {
200
200
  method: "PUT",
201
201
  disabled: query.status === 'published' && documentResponse && documentResponse.document.status !== 'draft',
@@ -217,108 +217,109 @@ const PreviewPage = ()=>{
217
217
  abortEarly: false
218
218
  });
219
219
  },
220
- children: ({ resetForm })=>/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
221
- direction: "column",
222
- height: "100%",
223
- alignItems: "stretch",
224
- children: [
225
- /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Blocker, {
226
- onProceed: resetForm
227
- }),
228
- /*#__PURE__*/ jsxRuntime.jsx(PreviewHeader.PreviewHeader, {}),
229
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
230
- flex: 1,
231
- overflow: "auto",
232
- alignItems: "stretch",
233
- children: [
234
- hasAdvancedPreview && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
235
- overflow: "auto",
236
- width: isSideEditorOpen ? '50%' : 0,
237
- borderWidth: "0 1px 0 0",
238
- borderColor: "neutral150",
239
- paddingTop: 6,
240
- paddingBottom: 6,
241
- // Remove horizontal padding when the editor is closed or it won't fully disappear
242
- paddingLeft: isSideEditorOpen ? 6 : 0,
243
- paddingRight: isSideEditorOpen ? 6 : 0,
244
- transition: "all 0.2s ease-in-out",
245
- children: /*#__PURE__*/ jsxRuntime.jsx(FormLayout.FormLayout, {
246
- layout: documentLayoutResponse.edit.layout,
247
- document: documentResponse,
248
- hasBackground: false
249
- })
250
- }),
251
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
252
- direction: "column",
253
- alignItems: "stretch",
254
- flex: 1,
255
- height: "100%",
256
- overflow: "hidden",
257
- children: [
258
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
259
- direction: "row",
260
- background: "neutral0",
261
- padding: 2,
262
- borderWidth: "0 0 1px 0",
263
- borderColor: "neutral150",
264
- children: [
265
- hasAdvancedPreview && /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
266
- variant: "ghost",
267
- label: formatMessage(isSideEditorOpen ? {
268
- id: 'content-manager.preview.content.close-editor',
269
- defaultMessage: 'Close editor'
270
- } : {
271
- id: 'content-manager.preview.content.open-editor',
272
- defaultMessage: 'Open editor'
273
- }),
274
- onClick: ()=>setIsSideEditorOpen((prev)=>!prev),
275
- children: /*#__PURE__*/ jsxRuntime.jsx(AnimatedArrow, {
276
- $isSideEditorOpen: isSideEditorOpen
277
- })
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'
278
274
  }),
279
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
280
- justifyContent: "center",
281
- flex: 1,
282
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelect, {
283
- value: deviceName,
284
- onChange: (name)=>setDeviceName(name.toString()),
285
- "aria-label": formatMessage({
286
- id: 'content-manager.preview.device.select',
287
- defaultMessage: 'Select device type'
288
- }),
289
- children: DEVICES.map((deviceOption)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelectOption, {
290
- value: deviceOption.name,
291
- children: formatMessage(deviceOption.label)
292
- }, deviceOption.name))
293
- })
275
+ onClick: ()=>setIsSideEditorOpen((prev)=>!prev),
276
+ children: /*#__PURE__*/ jsxRuntime.jsx(AnimatedArrow, {
277
+ $isSideEditorOpen: isSideEditorOpen
294
278
  })
295
- ]
296
- }),
297
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
298
- direction: "column",
299
- justifyContent: "center",
300
- background: "neutral0",
301
- flex: 1,
302
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
303
- "data-testid": "preview-iframe",
304
- ref: iframeRef,
305
- src: previewUrl,
306
- title: formatMessage({
307
- id: 'content-manager.preview.panel.title',
308
- defaultMessage: 'Preview'
309
- }),
310
- width: device.width,
311
- height: device.height,
312
- borderWidth: 0,
313
- tag: "iframe"
314
- }, previewUrl)
315
- })
316
- ]
317
- })
318
- ]
319
- })
320
- ]
321
- })
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
+ })
322
323
  })
323
324
  })
324
325
  ]