@capillarytech/creatives-library 8.0.242-alpha.0 → 8.0.242-alpha.2
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/assets/Android.png +0 -0
- package/assets/iOS.png +0 -0
- package/constants/unified.js +2 -1
- package/initialReducer.js +2 -0
- package/package.json +1 -1
- package/sagas/__tests__/assetPolling.test.js +74 -3
- package/sagas/assetPolling.js +8 -1
- package/services/api.js +10 -5
- package/services/tests/api.test.js +18 -0
- package/translations/en.json +0 -1
- package/utils/common.js +5 -0
- package/utils/commonUtils.js +14 -1
- package/utils/tests/commonUtil.test.js +224 -0
- package/utils/transformTemplateConfig.js +0 -10
- package/utils/transformerUtils.js +0 -42
- package/v2Components/CapDeviceContent/index.js +61 -56
- package/v2Components/CapImageUpload/constants.js +0 -2
- package/v2Components/CapImageUpload/index.js +14 -54
- package/v2Components/CapImageUpload/index.scss +1 -4
- package/v2Components/CapImageUpload/messages.js +0 -4
- package/v2Components/CapTagList/index.js +6 -1
- package/v2Components/CapTagListWithInput/index.js +5 -1
- package/v2Components/CapTagListWithInput/messages.js +1 -1
- package/v2Components/CapWhatsappCTA/tests/index.test.js +5 -0
- package/v2Components/ErrorInfoNote/index.js +412 -72
- package/v2Components/ErrorInfoNote/messages.js +22 -0
- package/v2Components/ErrorInfoNote/style.scss +279 -2
- package/v2Components/HtmlEditor/HTMLEditor.js +217 -90
- package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +1132 -133
- package/v2Components/HtmlEditor/__tests__/index.lazy.test.js +17 -12
- package/v2Components/HtmlEditor/_htmlEditor.scss +15 -23
- package/v2Components/HtmlEditor/_index.lazy.scss +1 -1
- package/v2Components/HtmlEditor/components/CodeEditorPane/_codeEditorPane.scss +13 -101
- package/v2Components/HtmlEditor/components/CodeEditorPane/index.js +148 -139
- package/v2Components/HtmlEditor/components/DeviceToggle/_deviceToggle.scss +2 -1
- package/v2Components/HtmlEditor/components/DeviceToggle/index.js +3 -3
- package/v2Components/HtmlEditor/components/EditorToolbar/_editorToolbar.scss +1 -0
- package/v2Components/HtmlEditor/components/EditorToolbar/index.js +1 -1
- package/v2Components/HtmlEditor/components/FullscreenModal/_fullscreenModal.scss +1 -0
- package/v2Components/HtmlEditor/components/InAppPreviewPane/DeviceFrame.js +4 -7
- package/v2Components/HtmlEditor/components/InAppPreviewPane/__tests__/DeviceFrame.test.js +35 -45
- package/v2Components/HtmlEditor/components/InAppPreviewPane/_inAppPreviewPane.scss +1 -3
- package/v2Components/HtmlEditor/components/InAppPreviewPane/constants.js +33 -33
- package/v2Components/HtmlEditor/components/InAppPreviewPane/index.js +7 -6
- package/v2Components/HtmlEditor/components/PreviewPane/_previewPane.scss +3 -6
- package/v2Components/HtmlEditor/components/PreviewPane/index.js +10 -11
- package/v2Components/HtmlEditor/components/SplitContainer/_splitContainer.scss +1 -1
- package/v2Components/HtmlEditor/components/ValidationErrorDisplay/__tests__/index.test.js +87 -62
- package/v2Components/HtmlEditor/components/ValidationErrorDisplay/index.js +49 -31
- package/v2Components/HtmlEditor/components/ValidationTabs/_validationTabs.scss +254 -0
- package/v2Components/HtmlEditor/components/ValidationTabs/index.js +362 -0
- package/v2Components/HtmlEditor/components/ValidationTabs/messages.js +51 -0
- package/v2Components/HtmlEditor/constants.js +29 -20
- package/v2Components/HtmlEditor/hooks/__tests__/useInAppContent.test.js +373 -16
- package/v2Components/HtmlEditor/hooks/useEditorContent.js +5 -2
- package/v2Components/HtmlEditor/hooks/useInAppContent.js +88 -146
- package/v2Components/HtmlEditor/index.js +1 -1
- package/v2Components/HtmlEditor/messages.js +95 -85
- package/v2Components/HtmlEditor/utils/liquidTemplateSupport.js +99 -101
- package/v2Components/HtmlEditor/utils/properSyntaxHighlighting.js +23 -25
- package/v2Components/HtmlEditor/utils/validationAdapter.js +34 -41
- package/v2Components/MobilePushPreviewV2/index.js +32 -7
- package/v2Components/TemplatePreview/_templatePreview.scss +44 -24
- package/v2Components/TemplatePreview/index.js +47 -32
- package/v2Components/TemplatePreview/messages.js +4 -0
- package/v2Components/TestAndPreviewSlidebox/index.js +31 -25
- package/v2Containers/App/constants.js +0 -5
- package/v2Containers/BeeEditor/index.js +82 -80
- package/v2Containers/BeePopupEditor/constants.js +10 -0
- package/v2Containers/BeePopupEditor/index.js +193 -0
- package/v2Containers/BeePopupEditor/tests/index.test.js +627 -0
- package/v2Containers/Cap/tests/__snapshots__/index.test.js.snap +0 -1
- package/v2Containers/CreativesContainer/SlideBoxContent.js +148 -120
- package/v2Containers/CreativesContainer/SlideBoxFooter.js +9 -3
- package/v2Containers/CreativesContainer/SlideBoxHeader.js +2 -2
- package/v2Containers/CreativesContainer/constants.js +1 -2
- package/v2Containers/CreativesContainer/index.js +173 -193
- package/v2Containers/CreativesContainer/messages.js +4 -4
- package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +38 -50
- package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +36 -0
- package/v2Containers/Email/actions.js +7 -0
- package/v2Containers/Email/constants.js +5 -1
- package/v2Containers/Email/index.js +13 -0
- package/v2Containers/Email/messages.js +32 -0
- package/v2Containers/Email/reducer.js +12 -1
- package/v2Containers/Email/sagas.js +41 -6
- package/v2Containers/Email/tests/__snapshots__/reducer.test.js.snap +2 -0
- package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +1046 -0
- package/v2Containers/EmailWrapper/components/EmailWrapperView.js +193 -7
- package/v2Containers/EmailWrapper/components/HTMLEditorTesting.js +40 -74
- package/v2Containers/EmailWrapper/components/__tests__/HTMLEditorTesting.test.js +2 -67
- package/v2Containers/EmailWrapper/constants.js +2 -0
- package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +436 -67
- package/v2Containers/EmailWrapper/index.js +99 -23
- package/v2Containers/EmailWrapper/messages.js +61 -1
- package/v2Containers/EmailWrapper/tests/EmailWrapperView.test.js +26 -1
- package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +111 -77
- package/v2Containers/InApp/__tests__/InAppHTMLEditor.test.js +376 -0
- package/v2Containers/InApp/__tests__/sagas.test.js +363 -0
- package/v2Containers/InApp/actions.js +7 -0
- package/v2Containers/InApp/constants.js +20 -4
- package/v2Containers/InApp/index.js +800 -357
- package/v2Containers/InApp/index.scss +4 -3
- package/v2Containers/InApp/messages.js +7 -3
- package/v2Containers/InApp/reducer.js +21 -3
- package/v2Containers/InApp/sagas.js +29 -9
- package/v2Containers/InApp/selectors.js +25 -5
- package/v2Containers/InApp/tests/index.test.js +154 -50
- package/v2Containers/InApp/tests/reducer.test.js +34 -0
- package/v2Containers/InApp/tests/sagas.test.js +61 -9
- package/v2Containers/InApp/tests/selectors.test.js +612 -0
- package/v2Containers/InAppWrapper/components/InAppWrapperView.js +162 -0
- package/v2Containers/InAppWrapper/components/__tests__/InAppWrapperView.test.js +267 -0
- package/v2Containers/InAppWrapper/components/inAppWrapperView.scss +9 -0
- package/v2Containers/InAppWrapper/constants.js +16 -0
- package/v2Containers/InAppWrapper/hooks/__tests__/useInAppWrapper.test.js +473 -0
- package/v2Containers/InAppWrapper/hooks/useInAppWrapper.js +198 -0
- package/v2Containers/InAppWrapper/index.js +148 -0
- package/v2Containers/InAppWrapper/messages.js +49 -0
- package/v2Containers/InappAdvance/index.js +1099 -0
- package/v2Containers/InappAdvance/index.scss +10 -0
- package/v2Containers/InappAdvance/tests/index.test.js +448 -0
- package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +3 -3
- package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +2 -2
- package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +2 -25
- package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +9 -18
- package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +12 -46
- package/v2Containers/SmsTrai/Create/tests/__snapshots__/index.test.js.snap +0 -4
- package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +4 -8
- package/v2Containers/TagList/index.js +67 -1
- package/v2Containers/Templates/ChannelTypeIllustration.js +1 -13
- package/v2Containers/Templates/_templates.scss +56 -200
- package/v2Containers/Templates/actions.js +1 -2
- package/v2Containers/Templates/constants.js +0 -1
- package/v2Containers/Templates/index.js +124 -277
- package/v2Containers/Templates/messages.js +4 -24
- package/v2Containers/Templates/reducer.js +0 -2
- package/v2Containers/Templates/tests/index.test.js +0 -10
- package/v2Containers/TemplatesV2/index.js +2 -3
- package/v2Containers/TemplatesV2/messages.js +0 -4
- package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +35 -132
- package/v2Components/CapImageUrlUpload/constants.js +0 -19
- package/v2Components/CapImageUrlUpload/index.js +0 -455
- package/v2Components/CapImageUrlUpload/index.scss +0 -35
- package/v2Components/CapImageUrlUpload/messages.js +0 -47
- package/v2Containers/WebPush/Create/components/ButtonForm.js +0 -175
- package/v2Containers/WebPush/Create/components/ButtonItem.js +0 -101
- package/v2Containers/WebPush/Create/components/ButtonList.js +0 -144
- package/v2Containers/WebPush/Create/components/_buttons.scss +0 -246
- package/v2Containers/WebPush/Create/components/tests/ButtonForm.test.js +0 -554
- package/v2Containers/WebPush/Create/components/tests/ButtonItem.test.js +0 -607
- package/v2Containers/WebPush/Create/components/tests/ButtonList.test.js +0 -633
- package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonForm.test.js.snap +0 -666
- package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonItem.test.js.snap +0 -74
- package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonList.test.js.snap +0 -80
- package/v2Containers/WebPush/Create/index.js +0 -1755
- package/v2Containers/WebPush/Create/index.scss +0 -123
- package/v2Containers/WebPush/Create/messages.js +0 -199
- package/v2Containers/WebPush/Create/preview/DevicePreviewContent.js +0 -241
- package/v2Containers/WebPush/Create/preview/NotificationContainer.js +0 -290
- package/v2Containers/WebPush/Create/preview/PreviewContent.js +0 -81
- package/v2Containers/WebPush/Create/preview/PreviewControls.js +0 -240
- package/v2Containers/WebPush/Create/preview/PreviewDisclaimer.js +0 -23
- package/v2Containers/WebPush/Create/preview/WebPushPreview.js +0 -144
- package/v2Containers/WebPush/Create/preview/assets/Light.svg +0 -53
- package/v2Containers/WebPush/Create/preview/assets/Top.svg +0 -5
- package/v2Containers/WebPush/Create/preview/assets/chrome-icon.png +0 -0
- package/v2Containers/WebPush/Create/preview/assets/edge-icon.png +0 -0
- package/v2Containers/WebPush/Create/preview/assets/firefox-icon.svg +0 -106
- package/v2Containers/WebPush/Create/preview/assets/iOS.svg +0 -26
- package/v2Containers/WebPush/Create/preview/assets/opera-icon.svg +0 -18
- package/v2Containers/WebPush/Create/preview/assets/safari-icon.svg +0 -29
- package/v2Containers/WebPush/Create/preview/components/AndroidMobileChromeHeader.js +0 -44
- package/v2Containers/WebPush/Create/preview/components/AndroidMobileExpanded.js +0 -110
- package/v2Containers/WebPush/Create/preview/components/IOSHeader.js +0 -45
- package/v2Containers/WebPush/Create/preview/components/NotificationExpandedContent.js +0 -72
- package/v2Containers/WebPush/Create/preview/components/NotificationHeader.js +0 -55
- package/v2Containers/WebPush/Create/preview/components/WindowsChromeExpanded.js +0 -70
- package/v2Containers/WebPush/Create/preview/components/tests/AndroidMobileExpanded.test.js +0 -512
- package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/AndroidMobileExpanded.test.js.snap +0 -77
- package/v2Containers/WebPush/Create/preview/config/notificationMappings.js +0 -527
- package/v2Containers/WebPush/Create/preview/constants.js +0 -162
- package/v2Containers/WebPush/Create/preview/notification-container.scss +0 -104
- package/v2Containers/WebPush/Create/preview/preview.scss +0 -409
- package/v2Containers/WebPush/Create/preview/styles/_android-mobile-chrome.scss +0 -300
- package/v2Containers/WebPush/Create/preview/styles/_android-mobile-edge.scss +0 -12
- package/v2Containers/WebPush/Create/preview/styles/_android-mobile-firefox.scss +0 -12
- package/v2Containers/WebPush/Create/preview/styles/_android-mobile-opera.scss +0 -12
- package/v2Containers/WebPush/Create/preview/styles/_android-tablet-chrome.scss +0 -303
- package/v2Containers/WebPush/Create/preview/styles/_android-tablet-edge.scss +0 -11
- package/v2Containers/WebPush/Create/preview/styles/_android-tablet-firefox.scss +0 -11
- package/v2Containers/WebPush/Create/preview/styles/_android-tablet-opera.scss +0 -11
- package/v2Containers/WebPush/Create/preview/styles/_base.scss +0 -188
- package/v2Containers/WebPush/Create/preview/styles/_ios.scss +0 -106
- package/v2Containers/WebPush/Create/preview/styles/_ipados.scss +0 -107
- package/v2Containers/WebPush/Create/preview/styles/_macos-chrome.scss +0 -75
- package/v2Containers/WebPush/Create/preview/styles/_windows-chrome.scss +0 -174
- package/v2Containers/WebPush/Create/preview/tests/DevicePreviewContent.test.js +0 -909
- package/v2Containers/WebPush/Create/preview/tests/NotificationContainer.test.js +0 -1077
- package/v2Containers/WebPush/Create/preview/tests/PreviewControls.test.js +0 -723
- package/v2Containers/WebPush/Create/preview/tests/WebPushPreview.test.js +0 -943
- package/v2Containers/WebPush/Create/preview/tests/__snapshots__/DevicePreviewContent.test.js.snap +0 -128
- package/v2Containers/WebPush/Create/preview/tests/__snapshots__/NotificationContainer.test.js.snap +0 -121
- package/v2Containers/WebPush/Create/preview/tests/__snapshots__/PreviewControls.test.js.snap +0 -144
- package/v2Containers/WebPush/Create/preview/tests/__snapshots__/WebPushPreview.test.js.snap +0 -127
- package/v2Containers/WebPush/Create/utils/urlValidation.js +0 -116
- package/v2Containers/WebPush/Create/utils/urlValidation.test.js +0 -449
- package/v2Containers/WebPush/actions.js +0 -60
- package/v2Containers/WebPush/constants.js +0 -108
- package/v2Containers/WebPush/index.js +0 -2
- package/v2Containers/WebPush/reducer.js +0 -104
- package/v2Containers/WebPush/sagas.js +0 -119
- package/v2Containers/WebPush/selectors.js +0 -65
- package/v2Containers/WebPush/tests/reducer.test.js +0 -863
- package/v2Containers/WebPush/tests/sagas.test.js +0 -566
- package/v2Containers/WebPush/tests/selectors.test.js +0 -960
|
@@ -9,13 +9,13 @@ import { render, screen } from '@testing-library/react';
|
|
|
9
9
|
import '@testing-library/jest-dom';
|
|
10
10
|
import { DEVICE_TYPES } from '../../../constants';
|
|
11
11
|
|
|
12
|
+
// Import after mocking
|
|
13
|
+
import DeviceFrame from '../DeviceFrame';
|
|
14
|
+
|
|
12
15
|
// Mock the entire DeviceFrame module to bypass image import issues
|
|
13
16
|
jest.mock('../../../../assets/Android.png', () => 'mocked-android-frame.png');
|
|
14
17
|
jest.mock('../../../../assets/iOS.png', () => 'mocked-ios-frame.png');
|
|
15
18
|
|
|
16
|
-
// Import after mocking
|
|
17
|
-
import DeviceFrame from '../DeviceFrame';
|
|
18
|
-
|
|
19
19
|
describe('DeviceFrame', () => {
|
|
20
20
|
describe('Basic Rendering', () => {
|
|
21
21
|
it('renders without crashing', () => {
|
|
@@ -26,7 +26,7 @@ describe('DeviceFrame', () => {
|
|
|
26
26
|
it('renders with default props', () => {
|
|
27
27
|
const { container } = render(<DeviceFrame />);
|
|
28
28
|
const frame = container.firstChild;
|
|
29
|
-
|
|
29
|
+
|
|
30
30
|
expect(frame).toHaveClass('device-frame');
|
|
31
31
|
expect(frame).toHaveClass('device-frame--android'); // Default device
|
|
32
32
|
});
|
|
@@ -37,7 +37,7 @@ describe('DeviceFrame', () => {
|
|
|
37
37
|
<div data-testid="child-content">Test Content</div>
|
|
38
38
|
</DeviceFrame>
|
|
39
39
|
);
|
|
40
|
-
|
|
40
|
+
|
|
41
41
|
expect(screen.getByTestId('child-content')).toBeInTheDocument();
|
|
42
42
|
expect(screen.getByTestId('child-content')).toHaveTextContent('Test Content');
|
|
43
43
|
});
|
|
@@ -50,7 +50,7 @@ describe('DeviceFrame', () => {
|
|
|
50
50
|
<div data-testid="child-3">Child 3</div>
|
|
51
51
|
</DeviceFrame>
|
|
52
52
|
);
|
|
53
|
-
|
|
53
|
+
|
|
54
54
|
expect(screen.getByTestId('child-1')).toBeInTheDocument();
|
|
55
55
|
expect(screen.getByTestId('child-2')).toBeInTheDocument();
|
|
56
56
|
expect(screen.getByTestId('child-3')).toBeInTheDocument();
|
|
@@ -61,7 +61,7 @@ describe('DeviceFrame', () => {
|
|
|
61
61
|
it('renders Android frame correctly', () => {
|
|
62
62
|
const { container } = render(<DeviceFrame device={DEVICE_TYPES.ANDROID} />);
|
|
63
63
|
const frame = container.firstChild;
|
|
64
|
-
|
|
64
|
+
|
|
65
65
|
expect(frame).toHaveClass('device-frame--android');
|
|
66
66
|
expect(frame.style.backgroundImage).toBeTruthy();
|
|
67
67
|
expect(frame.style.backgroundImage).toMatch(/url\(/);
|
|
@@ -70,7 +70,7 @@ describe('DeviceFrame', () => {
|
|
|
70
70
|
it('renders iOS frame correctly', () => {
|
|
71
71
|
const { container } = render(<DeviceFrame device={DEVICE_TYPES.IOS} />);
|
|
72
72
|
const frame = container.firstChild;
|
|
73
|
-
|
|
73
|
+
|
|
74
74
|
expect(frame).toHaveClass('device-frame--ios');
|
|
75
75
|
expect(frame.style.backgroundImage).toBeTruthy();
|
|
76
76
|
expect(frame.style.backgroundImage).toMatch(/url\(/);
|
|
@@ -79,7 +79,7 @@ describe('DeviceFrame', () => {
|
|
|
79
79
|
it('defaults to Android when no device specified', () => {
|
|
80
80
|
const { container } = render(<DeviceFrame />);
|
|
81
81
|
const frame = container.firstChild;
|
|
82
|
-
|
|
82
|
+
|
|
83
83
|
expect(frame).toHaveClass('device-frame--android');
|
|
84
84
|
expect(frame.style.backgroundImage).toBeTruthy();
|
|
85
85
|
expect(frame.style.backgroundImage).toMatch(/url\(/);
|
|
@@ -102,7 +102,7 @@ describe('DeviceFrame', () => {
|
|
|
102
102
|
it('applies correct dimensions', () => {
|
|
103
103
|
const { container } = render(<DeviceFrame />);
|
|
104
104
|
const frame = container.firstChild;
|
|
105
|
-
|
|
105
|
+
|
|
106
106
|
expect(frame.style.width).toBe('450px');
|
|
107
107
|
expect(frame.style.height).toBe('920px');
|
|
108
108
|
});
|
|
@@ -117,7 +117,7 @@ describe('DeviceFrame', () => {
|
|
|
117
117
|
<DeviceFrame device={DEVICE_TYPES.IOS} />
|
|
118
118
|
);
|
|
119
119
|
const iosFrame = iosContainer.firstChild;
|
|
120
|
-
|
|
120
|
+
|
|
121
121
|
expect(androidFrame.style.width).toBe(iosFrame.style.width);
|
|
122
122
|
expect(androidFrame.style.height).toBe(iosFrame.style.height);
|
|
123
123
|
});
|
|
@@ -125,7 +125,7 @@ describe('DeviceFrame', () => {
|
|
|
125
125
|
it('applies background styles correctly', () => {
|
|
126
126
|
const { container } = render(<DeviceFrame />);
|
|
127
127
|
const frame = container.firstChild;
|
|
128
|
-
|
|
128
|
+
|
|
129
129
|
expect(frame.style.position).toBe('relative');
|
|
130
130
|
expect(frame.style.display).toBe('inline-block');
|
|
131
131
|
expect(frame.style.backgroundRepeat).toBe('no-repeat');
|
|
@@ -133,19 +133,10 @@ describe('DeviceFrame', () => {
|
|
|
133
133
|
expect(frame.style.backgroundSize).toBe('contain');
|
|
134
134
|
});
|
|
135
135
|
|
|
136
|
-
it('applies drop-shadow filter', () => {
|
|
137
|
-
const { container } = render(<DeviceFrame />);
|
|
138
|
-
const frame = container.firstChild;
|
|
139
|
-
|
|
140
|
-
expect(frame.style.filter).toContain('drop-shadow');
|
|
141
|
-
expect(frame.style.filter).toContain('brightness');
|
|
142
|
-
expect(frame.style.filter).toContain('contrast');
|
|
143
|
-
});
|
|
144
|
-
|
|
145
136
|
it('sets correct background image for Android', () => {
|
|
146
137
|
const { container } = render(<DeviceFrame device={DEVICE_TYPES.ANDROID} />);
|
|
147
138
|
const frame = container.firstChild;
|
|
148
|
-
|
|
139
|
+
|
|
149
140
|
// Verify background image is set (actual mock value may vary)
|
|
150
141
|
expect(frame.style.backgroundImage).toBeTruthy();
|
|
151
142
|
expect(frame.style.backgroundImage).toMatch(/^url\(.+\)$/);
|
|
@@ -154,7 +145,7 @@ describe('DeviceFrame', () => {
|
|
|
154
145
|
it('sets correct background image for iOS', () => {
|
|
155
146
|
const { container } = render(<DeviceFrame device={DEVICE_TYPES.IOS} />);
|
|
156
147
|
const frame = container.firstChild;
|
|
157
|
-
|
|
148
|
+
|
|
158
149
|
// Verify background image is set (actual mock value may vary)
|
|
159
150
|
expect(frame.style.backgroundImage).toBeTruthy();
|
|
160
151
|
expect(frame.style.backgroundImage).toMatch(/^url\(.+\)$/);
|
|
@@ -165,7 +156,7 @@ describe('DeviceFrame', () => {
|
|
|
165
156
|
it('accepts and applies custom className', () => {
|
|
166
157
|
const { container } = render(<DeviceFrame className="custom-frame" />);
|
|
167
158
|
const frame = container.firstChild;
|
|
168
|
-
|
|
159
|
+
|
|
169
160
|
expect(frame).toHaveClass('custom-frame');
|
|
170
161
|
expect(frame).toHaveClass('device-frame'); // Base class still present
|
|
171
162
|
});
|
|
@@ -175,7 +166,7 @@ describe('DeviceFrame', () => {
|
|
|
175
166
|
<DeviceFrame className="custom-class another-class" />
|
|
176
167
|
);
|
|
177
168
|
const frame = container.firstChild;
|
|
178
|
-
|
|
169
|
+
|
|
179
170
|
expect(frame).toHaveClass('custom-class');
|
|
180
171
|
expect(frame).toHaveClass('another-class');
|
|
181
172
|
expect(frame).toHaveClass('device-frame');
|
|
@@ -186,7 +177,7 @@ describe('DeviceFrame', () => {
|
|
|
186
177
|
<DeviceFrame data-testid="custom-frame" aria-label="Device Preview" />
|
|
187
178
|
);
|
|
188
179
|
const frame = container.firstChild;
|
|
189
|
-
|
|
180
|
+
|
|
190
181
|
expect(frame).toHaveAttribute('data-testid', 'custom-frame');
|
|
191
182
|
expect(frame).toHaveAttribute('aria-label', 'Device Preview');
|
|
192
183
|
});
|
|
@@ -195,7 +186,7 @@ describe('DeviceFrame', () => {
|
|
|
195
186
|
const handleClick = jest.fn();
|
|
196
187
|
const { container } = render(<DeviceFrame onClick={handleClick} />);
|
|
197
188
|
const frame = container.firstChild;
|
|
198
|
-
|
|
189
|
+
|
|
199
190
|
frame.click();
|
|
200
191
|
expect(handleClick).toHaveBeenCalledTimes(1);
|
|
201
192
|
});
|
|
@@ -204,7 +195,7 @@ describe('DeviceFrame', () => {
|
|
|
204
195
|
const customStyle = { border: '2px solid red' };
|
|
205
196
|
const { container } = render(<DeviceFrame style={customStyle} />);
|
|
206
197
|
const frame = container.firstChild;
|
|
207
|
-
|
|
198
|
+
|
|
208
199
|
// Note: inline styles from props override component styles
|
|
209
200
|
expect(frame.style.border).toBe('2px solid red');
|
|
210
201
|
});
|
|
@@ -270,7 +261,7 @@ describe('DeviceFrame', () => {
|
|
|
270
261
|
it('renders with empty string className', () => {
|
|
271
262
|
const { container } = render(<DeviceFrame className="" />);
|
|
272
263
|
const frame = container.firstChild;
|
|
273
|
-
|
|
264
|
+
|
|
274
265
|
expect(frame).toHaveClass('device-frame');
|
|
275
266
|
});
|
|
276
267
|
|
|
@@ -283,7 +274,7 @@ describe('DeviceFrame', () => {
|
|
|
283
274
|
</>
|
|
284
275
|
</DeviceFrame>
|
|
285
276
|
);
|
|
286
|
-
|
|
277
|
+
|
|
287
278
|
expect(screen.getByTestId('fragment-child-1')).toBeInTheDocument();
|
|
288
279
|
expect(screen.getByTestId('fragment-child-2')).toBeInTheDocument();
|
|
289
280
|
});
|
|
@@ -298,7 +289,7 @@ describe('DeviceFrame', () => {
|
|
|
298
289
|
</div>
|
|
299
290
|
</DeviceFrame>
|
|
300
291
|
);
|
|
301
|
-
|
|
292
|
+
|
|
302
293
|
expect(screen.getByTestId('nested-child')).toBeInTheDocument();
|
|
303
294
|
});
|
|
304
295
|
});
|
|
@@ -306,7 +297,7 @@ describe('DeviceFrame', () => {
|
|
|
306
297
|
describe('Component Structure', () => {
|
|
307
298
|
it('renders a single root div element', () => {
|
|
308
299
|
const { container } = render(<DeviceFrame />);
|
|
309
|
-
|
|
300
|
+
|
|
310
301
|
expect(container.firstChild.tagName).toBe('DIV');
|
|
311
302
|
expect(container.children).toHaveLength(1);
|
|
312
303
|
});
|
|
@@ -316,8 +307,8 @@ describe('DeviceFrame', () => {
|
|
|
316
307
|
<DeviceFrame device={DEVICE_TYPES.ANDROID} className="custom" />
|
|
317
308
|
);
|
|
318
309
|
const androidFrame = androidContainer.firstChild;
|
|
319
|
-
|
|
320
|
-
const classes = androidFrame.className.split(' ').filter(c => c);
|
|
310
|
+
|
|
311
|
+
const classes = androidFrame.className.split(' ').filter((c) => c);
|
|
321
312
|
expect(classes).toContain('device-frame');
|
|
322
313
|
expect(classes).toContain('device-frame--android');
|
|
323
314
|
expect(classes).toContain('custom');
|
|
@@ -326,7 +317,7 @@ describe('DeviceFrame', () => {
|
|
|
326
317
|
it('applies styles as inline styles object', () => {
|
|
327
318
|
const { container } = render(<DeviceFrame />);
|
|
328
319
|
const frame = container.firstChild;
|
|
329
|
-
|
|
320
|
+
|
|
330
321
|
// Verify style is an object
|
|
331
322
|
expect(typeof frame.style).toBe('object');
|
|
332
323
|
expect(frame.style).not.toBeNull();
|
|
@@ -343,7 +334,7 @@ describe('DeviceFrame', () => {
|
|
|
343
334
|
/>
|
|
344
335
|
);
|
|
345
336
|
const frame = container.firstChild;
|
|
346
|
-
|
|
337
|
+
|
|
347
338
|
expect(frame).toHaveAttribute('role', 'img');
|
|
348
339
|
expect(frame).toHaveAttribute('aria-label', 'Mobile Device Preview');
|
|
349
340
|
expect(frame).toHaveAttribute('aria-describedby', 'device-description');
|
|
@@ -358,7 +349,7 @@ describe('DeviceFrame', () => {
|
|
|
358
349
|
/>
|
|
359
350
|
);
|
|
360
351
|
const frame = container.firstChild;
|
|
361
|
-
|
|
352
|
+
|
|
362
353
|
expect(frame).toHaveAttribute('data-device', 'android');
|
|
363
354
|
expect(frame).toHaveAttribute('data-testid', 'device-frame');
|
|
364
355
|
expect(frame).toHaveAttribute('data-analytics', 'preview-frame');
|
|
@@ -378,7 +369,7 @@ describe('DeviceFrame', () => {
|
|
|
378
369
|
</div>
|
|
379
370
|
</DeviceFrame>
|
|
380
371
|
);
|
|
381
|
-
|
|
372
|
+
|
|
382
373
|
expect(screen.getByTestId('preview-iframe')).toBeInTheDocument();
|
|
383
374
|
});
|
|
384
375
|
|
|
@@ -388,16 +379,16 @@ describe('DeviceFrame', () => {
|
|
|
388
379
|
<div data-testid="content">Content</div>
|
|
389
380
|
</DeviceFrame>
|
|
390
381
|
);
|
|
391
|
-
|
|
382
|
+
|
|
392
383
|
expect(container.firstChild).toHaveClass('device-frame--android');
|
|
393
384
|
expect(screen.getByTestId('content')).toBeInTheDocument();
|
|
394
|
-
|
|
385
|
+
|
|
395
386
|
rerender(
|
|
396
387
|
<DeviceFrame device={DEVICE_TYPES.IOS}>
|
|
397
388
|
<div data-testid="content">Content</div>
|
|
398
389
|
</DeviceFrame>
|
|
399
390
|
);
|
|
400
|
-
|
|
391
|
+
|
|
401
392
|
expect(container.firstChild).toHaveClass('device-frame--ios');
|
|
402
393
|
expect(screen.getByTestId('content')).toBeInTheDocument();
|
|
403
394
|
});
|
|
@@ -408,17 +399,16 @@ describe('DeviceFrame', () => {
|
|
|
408
399
|
<div data-testid="dynamic-content">Initial</div>
|
|
409
400
|
</DeviceFrame>
|
|
410
401
|
);
|
|
411
|
-
|
|
402
|
+
|
|
412
403
|
expect(screen.getByTestId('dynamic-content')).toHaveTextContent('Initial');
|
|
413
|
-
|
|
404
|
+
|
|
414
405
|
rerender(
|
|
415
406
|
<DeviceFrame>
|
|
416
407
|
<div data-testid="dynamic-content">Updated</div>
|
|
417
408
|
</DeviceFrame>
|
|
418
409
|
);
|
|
419
|
-
|
|
410
|
+
|
|
420
411
|
expect(screen.getByTestId('dynamic-content')).toHaveTextContent('Updated');
|
|
421
412
|
});
|
|
422
413
|
});
|
|
423
414
|
});
|
|
424
|
-
|
|
@@ -24,7 +24,7 @@ $empty-state-meta-opacity: 0.7;
|
|
|
24
24
|
.inapp-preview-pane {
|
|
25
25
|
height: 100%;
|
|
26
26
|
position: relative;
|
|
27
|
-
background-color: $
|
|
27
|
+
background-color: $CAP_G07;
|
|
28
28
|
background-image: radial-gradient(circle at 50% 50%, rgba($CAP_WHITE, 0.1) 0%, transparent 70%);
|
|
29
29
|
display: flex;
|
|
30
30
|
flex-direction: column;
|
|
@@ -123,11 +123,9 @@ $empty-state-meta-opacity: 0.7;
|
|
|
123
123
|
.device-frame {
|
|
124
124
|
position: relative;
|
|
125
125
|
display: inline-block;
|
|
126
|
-
filter: drop-shadow(0 0.75rem 3rem rgba($CAP_G01, 0.25));
|
|
127
126
|
transition: all 0.3s ease-in-out;
|
|
128
127
|
|
|
129
128
|
&:hover {
|
|
130
|
-
filter: drop-shadow(0 1rem 3.5rem rgba($CAP_G01, 0.3));
|
|
131
129
|
transform: translateY(-0.125rem);
|
|
132
130
|
}
|
|
133
131
|
|
|
@@ -6,55 +6,55 @@ export const LAYOUT_TYPES = {
|
|
|
6
6
|
MODAL: 'POPUP',
|
|
7
7
|
HEADER: 'HEADER',
|
|
8
8
|
FOOTER: 'FOOTER',
|
|
9
|
-
FULLSCREEN: 'FULLSCREEN'
|
|
9
|
+
FULLSCREEN: 'FULLSCREEN',
|
|
10
10
|
};
|
|
11
11
|
|
|
12
12
|
export const LAYOUT_OPTIONS = [
|
|
13
13
|
{
|
|
14
14
|
value: LAYOUT_TYPES.MODAL,
|
|
15
15
|
label: 'Modal',
|
|
16
|
-
description: 'Content displayed in center like a modal dialog'
|
|
16
|
+
description: 'Content displayed in center like a modal dialog',
|
|
17
17
|
},
|
|
18
18
|
{
|
|
19
19
|
value: LAYOUT_TYPES.HEADER,
|
|
20
20
|
label: 'Top Banner',
|
|
21
|
-
description: 'Content displayed at the top of the screen'
|
|
21
|
+
description: 'Content displayed at the top of the screen',
|
|
22
22
|
},
|
|
23
23
|
{
|
|
24
24
|
value: LAYOUT_TYPES.FOOTER,
|
|
25
25
|
label: 'Bottom Banner',
|
|
26
|
-
description: 'Content displayed at the bottom of the screen'
|
|
26
|
+
description: 'Content displayed at the bottom of the screen',
|
|
27
27
|
},
|
|
28
28
|
{
|
|
29
29
|
value: LAYOUT_TYPES.FULLSCREEN,
|
|
30
30
|
label: 'Fullscreen',
|
|
31
|
-
description: 'Content covers the entire screen'
|
|
32
|
-
}
|
|
31
|
+
description: 'Content covers the entire screen',
|
|
32
|
+
},
|
|
33
33
|
];
|
|
34
34
|
|
|
35
35
|
export const COMPONENT_SIZES = ['small', 'middle', 'large'];
|
|
36
36
|
|
|
37
37
|
export const DEVICE_FRAMES = {
|
|
38
38
|
ANDROID: 'android-frame.svg',
|
|
39
|
-
IOS: 'ios-frame.svg'
|
|
39
|
+
IOS: 'ios-frame.svg',
|
|
40
40
|
};
|
|
41
41
|
|
|
42
42
|
// Screen area dimensions within device frames (accounting for PNG bezels)
|
|
43
43
|
export const DEVICE_SCREEN_AREAS = {
|
|
44
44
|
IOS: {
|
|
45
45
|
// iOS screen area within 450x920 frame - accurate values for PNG asset
|
|
46
|
-
top: '85px',
|
|
47
|
-
left: '35px',
|
|
48
|
-
width: '380px',
|
|
49
|
-
height: '710px'
|
|
46
|
+
top: '85px', // Top bezel including notch area
|
|
47
|
+
left: '35px', // Side bezel width
|
|
48
|
+
width: '380px', // Actual screen width within bezels
|
|
49
|
+
height: '710px', // Actual screen height within bezels
|
|
50
50
|
},
|
|
51
51
|
ANDROID: {
|
|
52
52
|
// Android screen area within 450x920 frame - accurate values for PNG asset
|
|
53
|
-
top: '85px',
|
|
54
|
-
left: '35px',
|
|
55
|
-
width: '380px',
|
|
56
|
-
height: '710px'
|
|
57
|
-
}
|
|
53
|
+
top: '85px', // Top bezel including status bar
|
|
54
|
+
left: '35px', // Side bezel width (same as iOS for consistency)
|
|
55
|
+
width: '380px', // Actual screen width within bezels
|
|
56
|
+
height: '710px', // Actual screen height within bezels
|
|
57
|
+
},
|
|
58
58
|
};
|
|
59
59
|
|
|
60
60
|
// Content positioning configurations within the screen area (not the full frame)
|
|
@@ -63,42 +63,42 @@ export const LAYOUT_POSITIONS = {
|
|
|
63
63
|
top: '50%',
|
|
64
64
|
left: '50%',
|
|
65
65
|
transform: 'translate(-50%, -50%)',
|
|
66
|
-
width: '85%',
|
|
67
|
-
height: '55%',
|
|
66
|
+
width: '85%', // Reduced to ensure content stays within screen
|
|
67
|
+
height: '55%', // Reduced to ensure content stays within screen
|
|
68
68
|
maxWidth: '320px', // Adjusted for screen area
|
|
69
69
|
maxHeight: '380px',
|
|
70
|
-
minHeight: '180px'
|
|
70
|
+
minHeight: '180px',
|
|
71
71
|
},
|
|
72
72
|
[LAYOUT_TYPES.HEADER]: {
|
|
73
|
-
top: '2%',
|
|
73
|
+
top: '2%', // More margin from top of screen
|
|
74
74
|
left: '50%',
|
|
75
75
|
transform: 'translateX(-50%)',
|
|
76
|
-
width: '90%',
|
|
76
|
+
width: '90%', // Reduced to stay within screen bounds
|
|
77
77
|
height: '22%',
|
|
78
78
|
maxHeight: '160px',
|
|
79
|
-
minHeight: '100px'
|
|
79
|
+
minHeight: '100px',
|
|
80
80
|
},
|
|
81
81
|
[LAYOUT_TYPES.FOOTER]: {
|
|
82
|
-
bottom: '2%',
|
|
82
|
+
bottom: '2%', // More margin from bottom of screen
|
|
83
83
|
left: '50%',
|
|
84
84
|
transform: 'translateX(-50%)',
|
|
85
|
-
width: '90%',
|
|
85
|
+
width: '90%', // Reduced to stay within screen bounds
|
|
86
86
|
height: '22%',
|
|
87
87
|
maxHeight: '160px',
|
|
88
|
-
minHeight: '100px'
|
|
88
|
+
minHeight: '100px',
|
|
89
89
|
},
|
|
90
90
|
[LAYOUT_TYPES.FULLSCREEN]: {
|
|
91
|
-
top: '2%',
|
|
91
|
+
top: '2%', // Small margin to account for screen bounds
|
|
92
92
|
left: '2%',
|
|
93
|
-
width: '96%',
|
|
94
|
-
height: '96%'
|
|
95
|
-
}
|
|
93
|
+
width: '96%', // Slightly smaller to ensure it stays within screen
|
|
94
|
+
height: '96%',
|
|
95
|
+
},
|
|
96
96
|
};
|
|
97
97
|
|
|
98
98
|
// Scroll position multipliers for adaptive scrolling in InAppPreviewPane
|
|
99
99
|
export const SCROLL_POSITION_MULTIPLIERS = {
|
|
100
|
-
[LAYOUT_TYPES.HEADER]: 0.0,
|
|
101
|
-
[LAYOUT_TYPES.FOOTER]: 1.0,
|
|
102
|
-
[LAYOUT_TYPES.MODAL]: 0.4,
|
|
103
|
-
[LAYOUT_TYPES.FULLSCREEN]: 0.3
|
|
100
|
+
[LAYOUT_TYPES.HEADER]: 0.0, // Top of screen
|
|
101
|
+
[LAYOUT_TYPES.FOOTER]: 1.0, // Bottom of screen
|
|
102
|
+
[LAYOUT_TYPES.MODAL]: 0.4, // Center-ish position
|
|
103
|
+
[LAYOUT_TYPES.FULLSCREEN]: 0.3, // Slightly above center
|
|
104
104
|
};
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
* InAppPreviewPane - Complete InApp preview with device frames and dynamic positioning
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import React, {
|
|
5
|
+
import React, {
|
|
6
|
+
useMemo, useRef, useEffect, useCallback,
|
|
7
|
+
} from 'react';
|
|
6
8
|
import PropTypes from 'prop-types';
|
|
7
9
|
import { injectIntl, intlShape } from 'react-intl';
|
|
8
10
|
|
|
@@ -16,7 +18,6 @@ import ContentOverlay from './ContentOverlay';
|
|
|
16
18
|
import { useEditorContext } from '../common/EditorContext';
|
|
17
19
|
|
|
18
20
|
// Constants
|
|
19
|
-
import { DEVICE_TYPES } from '../../constants';
|
|
20
21
|
import { LAYOUT_TYPES, SCROLL_POSITION_MULTIPLIERS } from './constants';
|
|
21
22
|
|
|
22
23
|
// Styles
|
|
@@ -27,14 +28,14 @@ const InAppPreviewPane = ({
|
|
|
27
28
|
className = '',
|
|
28
29
|
isFullscreenMode = false,
|
|
29
30
|
isModalContext = false,
|
|
30
|
-
layoutType: propLayoutType = LAYOUT_TYPES.MODAL
|
|
31
|
+
layoutType: propLayoutType = LAYOUT_TYPES.MODAL,
|
|
31
32
|
}) => {
|
|
32
33
|
const {
|
|
33
34
|
content,
|
|
34
35
|
activeDevice,
|
|
35
36
|
getDeviceContent,
|
|
36
37
|
layoutType: contextLayoutType,
|
|
37
|
-
isFullscreenMode: contextIsFullscreenMode
|
|
38
|
+
isFullscreenMode: contextIsFullscreenMode,
|
|
38
39
|
} = useEditorContext();
|
|
39
40
|
|
|
40
41
|
// Refs for adaptive scrolling
|
|
@@ -83,7 +84,7 @@ const InAppPreviewPane = ({
|
|
|
83
84
|
requestAnimationFrame(() => {
|
|
84
85
|
container.scrollTo({
|
|
85
86
|
top: targetScrollTop,
|
|
86
|
-
behavior: 'smooth'
|
|
87
|
+
behavior: 'smooth',
|
|
87
88
|
});
|
|
88
89
|
});
|
|
89
90
|
} catch (error) {
|
|
@@ -173,7 +174,7 @@ InAppPreviewPane.propTypes = {
|
|
|
173
174
|
className: PropTypes.string,
|
|
174
175
|
isFullscreenMode: PropTypes.bool,
|
|
175
176
|
isModalContext: PropTypes.bool,
|
|
176
|
-
layoutType: PropTypes.oneOf(Object.values(LAYOUT_TYPES))
|
|
177
|
+
layoutType: PropTypes.oneOf(Object.values(LAYOUT_TYPES)),
|
|
177
178
|
};
|
|
178
179
|
|
|
179
180
|
export default injectIntl(InAppPreviewPane);
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
|
|
15
15
|
&__mode-controls {
|
|
16
16
|
position: absolute;
|
|
17
|
-
top:
|
|
18
|
-
right:
|
|
17
|
+
top: 1.5rem;
|
|
18
|
+
right: 2rem;
|
|
19
19
|
z-index: 10;
|
|
20
20
|
background-color: $CAP_G07;
|
|
21
21
|
border-radius: 0.5rem;
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
|
|
60
60
|
&:hover,
|
|
61
61
|
&.preview-mode-group__btn--active {
|
|
62
|
-
background-color:
|
|
62
|
+
background-color: $CAP_WHITE;
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
}
|
|
@@ -191,9 +191,6 @@
|
|
|
191
191
|
height: calc(100% - 2rem);
|
|
192
192
|
color: $CAP_G10;
|
|
193
193
|
text-align: center;
|
|
194
|
-
background-color: $CAP_WHITE;
|
|
195
|
-
border-radius: 0.25rem;
|
|
196
|
-
box-shadow: 0 0.0625rem 0.1875rem rgba($CAP_G01, 0.1);
|
|
197
194
|
margin: 0;
|
|
198
195
|
width: 100%;
|
|
199
196
|
|
|
@@ -55,7 +55,7 @@ const PreviewPane = ({
|
|
|
55
55
|
className = '',
|
|
56
56
|
isFullscreenMode = false,
|
|
57
57
|
isModalContext = false,
|
|
58
|
-
layoutType = LAYOUT_TYPES.MODAL
|
|
58
|
+
layoutType = LAYOUT_TYPES.MODAL,
|
|
59
59
|
}) => {
|
|
60
60
|
const { content, layout, variant } = useEditorContext();
|
|
61
61
|
|
|
@@ -124,13 +124,11 @@ const PreviewPane = ({
|
|
|
124
124
|
}, [combinedContent]);
|
|
125
125
|
|
|
126
126
|
// Cleanup blob URL on unmount
|
|
127
|
-
useEffect(() => {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
}
|
|
133
|
-
};
|
|
127
|
+
useEffect(() => () => {
|
|
128
|
+
if (blobUrlRef.current) {
|
|
129
|
+
URL.revokeObjectURL(blobUrlRef.current);
|
|
130
|
+
blobUrlRef.current = null;
|
|
131
|
+
}
|
|
134
132
|
}, []);
|
|
135
133
|
|
|
136
134
|
// Generate CSS classes based on view mode
|
|
@@ -173,10 +171,11 @@ const PreviewPane = ({
|
|
|
173
171
|
const renderEmptyState = () => (
|
|
174
172
|
<div className="preview-empty">
|
|
175
173
|
<div className="empty-content">
|
|
176
|
-
<div className="empty-icon">📝</div>
|
|
177
174
|
<p>{intl.formatMessage(messages.startTypingHtml)}</p>
|
|
178
175
|
<p className="preview-mode-info">
|
|
179
|
-
{intl.formatMessage(messages.previewMode)}
|
|
176
|
+
{intl.formatMessage(messages.previewMode)}
|
|
177
|
+
:
|
|
178
|
+
{
|
|
180
179
|
viewMode === PREVIEW_MODES.DESKTOP
|
|
181
180
|
? intl.formatMessage(messages.desktop)
|
|
182
181
|
: viewMode === PREVIEW_MODES.MOBILE
|
|
@@ -223,7 +222,7 @@ PreviewPane.propTypes = {
|
|
|
223
222
|
className: PropTypes.string,
|
|
224
223
|
isFullscreenMode: PropTypes.bool,
|
|
225
224
|
isModalContext: PropTypes.bool,
|
|
226
|
-
layoutType: PropTypes.oneOf(Object.values(LAYOUT_TYPES))
|
|
225
|
+
layoutType: PropTypes.oneOf(Object.values(LAYOUT_TYPES)),
|
|
227
226
|
};
|
|
228
227
|
|
|
229
228
|
export default injectIntl(PreviewPane);
|