@capillarytech/creatives-library 8.0.271 → 8.0.272
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/services/api.js +10 -0
- package/services/tests/api.test.js +34 -0
- package/tests/integration/TemplateCreation/TemplateCreation.integration.test.js +17 -35
- package/tests/integration/TemplateCreation/api-response.js +31 -1
- package/tests/integration/TemplateCreation/msw-handler.js +2 -0
- package/utils/common.js +5 -0
- package/utils/commonUtils.js +28 -5
- package/utils/tests/commonUtil.test.js +224 -0
- package/utils/transformTemplateConfig.js +0 -10
- package/v2Components/CapDeviceContent/index.js +61 -56
- 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/constants.js +1 -0
- package/v2Components/ErrorInfoNote/index.js +402 -72
- package/v2Components/ErrorInfoNote/messages.js +32 -6
- package/v2Components/ErrorInfoNote/style.scss +278 -6
- package/v2Components/FormBuilder/tests/index.test.js +13 -4
- package/v2Components/HtmlEditor/HTMLEditor.js +418 -99
- package/v2Components/HtmlEditor/__tests__/HTMLEditor.apiErrors.test.js +870 -0
- package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +1882 -133
- package/v2Components/HtmlEditor/__tests__/index.lazy.test.js +27 -16
- package/v2Components/HtmlEditor/_htmlEditor.scss +108 -45
- package/v2Components/HtmlEditor/_index.lazy.scss +0 -1
- package/v2Components/HtmlEditor/components/CodeEditorPane/_codeEditorPane.scss +23 -102
- package/v2Components/HtmlEditor/components/CodeEditorPane/index.js +148 -140
- 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 +9 -1
- package/v2Components/HtmlEditor/components/EditorToolbar/index.js +31 -6
- package/v2Components/HtmlEditor/components/FullscreenModal/_fullscreenModal.scss +22 -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 +7 -10
- package/v2Components/HtmlEditor/components/PreviewPane/index.js +22 -43
- package/v2Components/HtmlEditor/components/SplitContainer/_splitContainer.scss +1 -1
- package/v2Components/HtmlEditor/components/ValidationErrorDisplay/_validationErrorDisplay.scss +18 -0
- package/v2Components/HtmlEditor/components/ValidationErrorDisplay/index.js +36 -31
- package/v2Components/HtmlEditor/components/ValidationPanel/_validationPanel.scss +46 -34
- package/v2Components/HtmlEditor/components/ValidationPanel/constants.js +6 -0
- package/v2Components/HtmlEditor/components/ValidationPanel/index.js +52 -46
- package/v2Components/HtmlEditor/components/ValidationTabs/_validationTabs.scss +277 -0
- package/v2Components/HtmlEditor/components/ValidationTabs/index.js +295 -0
- package/v2Components/HtmlEditor/components/ValidationTabs/messages.js +51 -0
- package/v2Components/HtmlEditor/constants.js +45 -20
- package/v2Components/HtmlEditor/hooks/__tests__/useInAppContent.test.js +373 -16
- package/v2Components/HtmlEditor/hooks/__tests__/useValidation.test.js +351 -16
- package/v2Components/HtmlEditor/hooks/useEditorContent.js +5 -2
- package/v2Components/HtmlEditor/hooks/useInAppContent.js +88 -146
- package/v2Components/HtmlEditor/hooks/useValidation.js +213 -56
- package/v2Components/HtmlEditor/index.js +1 -1
- package/v2Components/HtmlEditor/messages.js +102 -94
- package/v2Components/HtmlEditor/utils/__tests__/htmlValidator.enhanced.test.js +214 -45
- package/v2Components/HtmlEditor/utils/__tests__/validationAdapter.test.js +134 -0
- package/v2Components/HtmlEditor/utils/contentSanitizer.js +40 -41
- package/v2Components/HtmlEditor/utils/htmlValidator.js +71 -72
- package/v2Components/HtmlEditor/utils/liquidTemplateSupport.js +158 -124
- package/v2Components/HtmlEditor/utils/properSyntaxHighlighting.js +23 -25
- package/v2Components/HtmlEditor/utils/validationAdapter.js +66 -41
- package/v2Components/HtmlEditor/utils/validationConstants.js +38 -0
- package/v2Components/MobilePushPreviewV2/constants.js +6 -0
- package/v2Components/MobilePushPreviewV2/index.js +33 -7
- package/v2Components/TemplatePreview/_templatePreview.scss +55 -24
- package/v2Components/TemplatePreview/index.js +47 -32
- package/v2Components/TemplatePreview/messages.js +4 -0
- package/v2Components/TestAndPreviewSlidebox/_testAndPreviewSlidebox.scss +1 -0
- package/v2Containers/BeeEditor/index.js +172 -90
- package/v2Containers/BeePopupEditor/_beePopupEditor.scss +14 -0
- package/v2Containers/BeePopupEditor/constants.js +10 -0
- package/v2Containers/BeePopupEditor/index.js +194 -0
- package/v2Containers/BeePopupEditor/tests/index.test.js +627 -0
- package/v2Containers/CreativesContainer/SlideBoxContent.js +127 -51
- package/v2Containers/CreativesContainer/SlideBoxFooter.js +156 -13
- package/v2Containers/CreativesContainer/SlideBoxHeader.js +2 -1
- package/v2Containers/CreativesContainer/constants.js +1 -0
- package/v2Containers/CreativesContainer/index.js +251 -47
- package/v2Containers/CreativesContainer/messages.js +8 -0
- package/v2Containers/CreativesContainer/tests/SlideBoxFooter.test.js +11 -2
- package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +38 -50
- package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +103 -0
- package/v2Containers/Email/actions.js +7 -0
- package/v2Containers/Email/constants.js +5 -1
- package/v2Containers/Email/index.js +234 -29
- package/v2Containers/Email/messages.js +32 -0
- package/v2Containers/Email/reducer.js +12 -1
- package/v2Containers/Email/sagas.js +61 -7
- package/v2Containers/Email/tests/__snapshots__/reducer.test.js.snap +2 -0
- package/v2Containers/Email/tests/reducer.test.js +46 -0
- package/v2Containers/Email/tests/sagas.test.js +320 -29
- package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +1246 -0
- package/v2Containers/EmailWrapper/components/EmailWrapperView.js +212 -21
- package/v2Containers/EmailWrapper/components/HTMLEditorTesting.js +40 -74
- package/v2Containers/EmailWrapper/components/__tests__/EmailHTMLEditor.test.js +2472 -0
- package/v2Containers/EmailWrapper/components/__tests__/EmailWrapperView.test.js +520 -0
- package/v2Containers/EmailWrapper/components/__tests__/HTMLEditorTesting.test.js +2 -67
- package/v2Containers/EmailWrapper/constants.js +2 -0
- package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +627 -79
- package/v2Containers/EmailWrapper/index.js +103 -23
- package/v2Containers/EmailWrapper/messages.js +65 -1
- package/v2Containers/EmailWrapper/tests/useEmailWrapper.edgeCases.test.js +955 -0
- package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +596 -82
- 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 +802 -360
- 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 +151 -0
- package/v2Containers/InAppWrapper/components/__tests__/InAppWrapperView.test.js +267 -0
- package/v2Containers/InAppWrapper/components/inAppWrapperView.scss +23 -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 -0
- package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +2 -0
- package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +2 -0
- package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +9 -0
- package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +12 -0
- package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +4 -0
- package/v2Containers/TagList/index.js +62 -19
- package/v2Containers/Templates/_templates.scss +60 -1
- package/v2Containers/Templates/index.js +89 -4
- package/v2Containers/Templates/messages.js +4 -0
- package/v2Containers/TemplatesV2/TemplatesV2.style.js +4 -2
- package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +34 -0
- package/v2Components/HtmlEditor/components/ValidationErrorDisplay/__tests__/index.test.js +0 -152
- package/v2Containers/EmailWrapper/tests/EmailWrapperView.test.js +0 -214
|
@@ -5,23 +5,31 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import React from 'react';
|
|
8
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
render, screen, waitFor, act,
|
|
10
|
+
} from '@testing-library/react';
|
|
9
11
|
import '@testing-library/jest-dom';
|
|
10
12
|
|
|
11
13
|
// Mock CapSpin before importing the component
|
|
12
|
-
jest.mock('@capillarytech/cap-ui-library/CapSpin', () => {
|
|
13
|
-
return
|
|
14
|
-
return <div data-testid="cap-spin" data-size={size}>Loading...</div>;
|
|
15
|
-
};
|
|
14
|
+
jest.mock('@capillarytech/cap-ui-library/CapSpin', () => function MockCapSpin({ size }) {
|
|
15
|
+
return <div data-testid="cap-spin" data-size={size}>Loading...</div>;
|
|
16
16
|
});
|
|
17
17
|
|
|
18
18
|
// Mock the HTMLEditor component
|
|
19
|
+
// Note: React.lazy() expects a function that returns a promise
|
|
20
|
+
// The mock needs to be set up before the lazy import happens
|
|
19
21
|
jest.mock('../HTMLEditor', () => {
|
|
22
|
+
const MockHTMLEditor = function MockHTMLEditor(props) {
|
|
23
|
+
return (
|
|
24
|
+
<div data-testid="html-editor">
|
|
25
|
+
Mock HTML Editor -
|
|
26
|
+
{props.variant}
|
|
27
|
+
</div>
|
|
28
|
+
);
|
|
29
|
+
};
|
|
20
30
|
return {
|
|
21
31
|
__esModule: true,
|
|
22
|
-
default:
|
|
23
|
-
return <div data-testid="html-editor">Mock HTML Editor - {props.variant}</div>;
|
|
24
|
-
}
|
|
32
|
+
default: MockHTMLEditor,
|
|
25
33
|
};
|
|
26
34
|
});
|
|
27
35
|
|
|
@@ -106,14 +114,17 @@ describe('index.lazy.js', () => {
|
|
|
106
114
|
it('renders the lazy loaded component', async () => {
|
|
107
115
|
const HTMLEditorLazy = (await import('../index.lazy')).default;
|
|
108
116
|
|
|
109
|
-
|
|
117
|
+
await act(async () => {
|
|
118
|
+
render(<HTMLEditorLazy variant="email" />);
|
|
119
|
+
});
|
|
110
120
|
|
|
111
|
-
// Wait for lazy component to load
|
|
121
|
+
// Wait for lazy component to load - increase timeout and wait for Suspense to resolve
|
|
112
122
|
await waitFor(() => {
|
|
113
123
|
expect(screen.getByTestId('html-editor')).toBeInTheDocument();
|
|
114
|
-
});
|
|
124
|
+
}, { timeout: 3000 });
|
|
115
125
|
|
|
116
|
-
|
|
126
|
+
const editor = screen.getByTestId('html-editor');
|
|
127
|
+
expect(editor.textContent).toBe('Mock HTML Editor -email');
|
|
117
128
|
});
|
|
118
129
|
|
|
119
130
|
it('shows fallback while loading', async () => {
|
|
@@ -134,7 +145,7 @@ describe('index.lazy.js', () => {
|
|
|
134
145
|
<HTMLEditorLazy
|
|
135
146
|
variant="inapp"
|
|
136
147
|
onSave={mockOnSave}
|
|
137
|
-
readOnly
|
|
148
|
+
readOnly
|
|
138
149
|
className="custom-class"
|
|
139
150
|
/>
|
|
140
151
|
);
|
|
@@ -143,7 +154,8 @@ describe('index.lazy.js', () => {
|
|
|
143
154
|
expect(screen.getByTestId('html-editor')).toBeInTheDocument();
|
|
144
155
|
});
|
|
145
156
|
|
|
146
|
-
|
|
157
|
+
const editor = screen.getByTestId('html-editor');
|
|
158
|
+
expect(editor.textContent).toBe('Mock HTML Editor -inapp');
|
|
147
159
|
});
|
|
148
160
|
|
|
149
161
|
it('has correct display name', async () => {
|
|
@@ -215,7 +227,7 @@ describe('index.lazy.js', () => {
|
|
|
215
227
|
render(
|
|
216
228
|
<HTMLEditorLazy
|
|
217
229
|
className="custom-editor"
|
|
218
|
-
readOnly
|
|
230
|
+
readOnly
|
|
219
231
|
showFullscreenButton={false}
|
|
220
232
|
autoSave={false}
|
|
221
233
|
autoSaveInterval={60000}
|
|
@@ -529,4 +541,3 @@ describe('index.lazy.js', () => {
|
|
|
529
541
|
});
|
|
530
542
|
});
|
|
531
543
|
});
|
|
532
|
-
|
|
@@ -5,38 +5,71 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
// Import Cap UI variables (correct path)
|
|
8
|
-
@import
|
|
8
|
+
@import "~@capillarytech/cap-ui-library/styles/_variables.scss";
|
|
9
9
|
|
|
10
10
|
// Fullscreen modal header styling - using proper CSS specificity instead of !important
|
|
11
11
|
.html-editor-fullscreen {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
// INAPP variant only: Fullscreen header styling
|
|
13
|
+
&--inapp {
|
|
14
|
+
.html-editor__header--fullscreen {
|
|
15
|
+
display: flex;
|
|
16
|
+
align-items: center;
|
|
17
|
+
background-color: $CAP_G10;
|
|
18
|
+
border-bottom: 0.0625rem solid $CAP_G08;
|
|
19
|
+
padding-right: 1rem;
|
|
18
20
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
// Device toggle takes available space
|
|
22
|
+
.device-toggle {
|
|
23
|
+
flex: 1;
|
|
24
|
+
}
|
|
23
25
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
// Toolbar styling in fullscreen mode - INAPP variant only
|
|
27
|
+
.editor-toolbar {
|
|
28
|
+
background-color: transparent;
|
|
29
|
+
border-bottom: none;
|
|
30
|
+
padding: 0;
|
|
31
|
+
min-height: 3.25rem;
|
|
32
|
+
height: 3.25rem;
|
|
33
|
+
position: relative;
|
|
31
34
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
+
// Right-align toolbar actions
|
|
36
|
+
&__right {
|
|
37
|
+
margin-left: auto;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Library mode: Position absolute for toolbar in fullscreen (INAPP variant only)
|
|
43
|
+
// Using higher specificity to override _fullscreenModal.scss styles
|
|
44
|
+
&.html-editor-fullscreen--library-mode {
|
|
45
|
+
.html-editor__header--fullscreen {
|
|
46
|
+
.editor-toolbar,
|
|
47
|
+
.editor-toolbar.editor-toolbar,
|
|
48
|
+
.ant-layout-header.editor-toolbar {
|
|
49
|
+
position: absolute;
|
|
50
|
+
}
|
|
35
51
|
}
|
|
36
52
|
}
|
|
37
53
|
}
|
|
38
54
|
}
|
|
39
55
|
|
|
56
|
+
// Additional library mode overrides for fullscreen with maximum specificity
|
|
57
|
+
// These match the high-specificity selectors in _fullscreenModal.scss
|
|
58
|
+
.html-editor-fullscreen--inapp.html-editor-fullscreen--library-mode .html-editor__header--fullscreen .editor-toolbar,
|
|
59
|
+
.html-editor-fullscreen--inapp.html-editor-fullscreen--library-mode .html-editor__header--fullscreen .editor-toolbar.editor-toolbar,
|
|
60
|
+
.html-editor-fullscreen--inapp.html-editor-fullscreen--library-mode .html-editor__header--fullscreen .ant-layout-header.editor-toolbar,
|
|
61
|
+
.html-editor.html-editor-fullscreen--inapp.html-editor-fullscreen--library-mode .html-editor__header--fullscreen .editor-toolbar,
|
|
62
|
+
.html-editor.html-editor-fullscreen--inapp.html-editor-fullscreen--library-mode .html-editor__header--fullscreen .editor-toolbar.editor-toolbar,
|
|
63
|
+
.html-editor.html-editor-fullscreen--inapp.html-editor-fullscreen--library-mode .html-editor__header--fullscreen .ant-layout-header.editor-toolbar,
|
|
64
|
+
.ant-modal .html-editor-fullscreen--inapp.html-editor-fullscreen--library-mode .html-editor__header--fullscreen .editor-toolbar,
|
|
65
|
+
.ant-modal .html-editor-fullscreen--inapp.html-editor-fullscreen--library-mode .html-editor__header--fullscreen .editor-toolbar.editor-toolbar,
|
|
66
|
+
.ant-modal .html-editor-fullscreen--inapp.html-editor-fullscreen--library-mode .html-editor__header--fullscreen .ant-layout-header.editor-toolbar,
|
|
67
|
+
.ant-modal-content .html-editor-fullscreen--inapp.html-editor-fullscreen--library-mode .html-editor__header--fullscreen .editor-toolbar,
|
|
68
|
+
.ant-modal-content .html-editor-fullscreen--inapp.html-editor-fullscreen--library-mode .html-editor__header--fullscreen .editor-toolbar.editor-toolbar,
|
|
69
|
+
.ant-modal-content .html-editor-fullscreen--inapp.html-editor-fullscreen--library-mode .html-editor__header--fullscreen .ant-layout-header.editor-toolbar {
|
|
70
|
+
position: absolute;
|
|
71
|
+
}
|
|
72
|
+
|
|
40
73
|
.html-editor {
|
|
41
74
|
height: 37.5rem; // Fixed height instead of 100vh (600px = 37.5rem)
|
|
42
75
|
max-height: 80vh; // Responsive maximum height
|
|
@@ -48,6 +81,23 @@
|
|
|
48
81
|
border-radius: 0.25rem;
|
|
49
82
|
overflow: hidden;
|
|
50
83
|
|
|
84
|
+
// Library mode: Apply specific styles when isFullMode is false
|
|
85
|
+
&.html-editor--library-mode {
|
|
86
|
+
.preview-pane {
|
|
87
|
+
max-height: calc(95vh - 5%);
|
|
88
|
+
|
|
89
|
+
&__content {
|
|
90
|
+
height: calc(95vh - 5%); // Same as editor pane - maximize to full available height
|
|
91
|
+
max-height: calc(95vh - 30%);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
iframe {
|
|
95
|
+
height: calc(95vh - 5%); // Same as editor pane - maximize to full available height
|
|
96
|
+
max-height: calc(95vh - 30%);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
51
101
|
&.fullscreen {
|
|
52
102
|
position: fixed;
|
|
53
103
|
top: 0;
|
|
@@ -83,19 +133,6 @@
|
|
|
83
133
|
flex-direction: column;
|
|
84
134
|
}
|
|
85
135
|
|
|
86
|
-
// Validation Error Display - Full Width Below Split Container
|
|
87
|
-
&-validation {
|
|
88
|
-
margin-top: 1rem; // 16px = 1rem
|
|
89
|
-
|
|
90
|
-
// Ensure ErrorInfoNote fits well in the editor layout
|
|
91
|
-
.error-container {
|
|
92
|
-
width: 100%; // Full width instead of max-content
|
|
93
|
-
margin-top: 0;
|
|
94
|
-
margin-bottom: 0;
|
|
95
|
-
border-radius: 0.25rem;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
136
|
// Split container - integrated design
|
|
100
137
|
&-split-container {
|
|
101
138
|
flex: 1;
|
|
@@ -128,6 +165,7 @@
|
|
|
128
165
|
padding: 0;
|
|
129
166
|
min-height: 3.25rem; // 52px = 3.25rem
|
|
130
167
|
height: 3.25rem;
|
|
168
|
+
position: relative;
|
|
131
169
|
|
|
132
170
|
// Right-align toolbar actions
|
|
133
171
|
&__right {
|
|
@@ -135,8 +173,19 @@
|
|
|
135
173
|
}
|
|
136
174
|
}
|
|
137
175
|
}
|
|
138
|
-
}
|
|
139
176
|
|
|
177
|
+
// Library mode: Position absolute for toolbar in InApp variant
|
|
178
|
+
// Using higher specificity to override default position: relative
|
|
179
|
+
&.html-editor--library-mode {
|
|
180
|
+
.html-editor__header {
|
|
181
|
+
.editor-toolbar,
|
|
182
|
+
.editor-toolbar.editor-toolbar,
|
|
183
|
+
.ant-layout-header.editor-toolbar {
|
|
184
|
+
position: absolute;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
140
189
|
|
|
141
190
|
// Responsive design
|
|
142
191
|
@media (max-width: 768px) {
|
|
@@ -219,29 +268,47 @@
|
|
|
219
268
|
.code-editor-pane {
|
|
220
269
|
.codemirror-wrapper {
|
|
221
270
|
height: 100%;
|
|
222
|
-
max-height:
|
|
271
|
+
max-height: calc(95vh - 5%); // 95% of viewport height with 5% gap
|
|
223
272
|
}
|
|
224
273
|
|
|
225
274
|
&__content {
|
|
226
|
-
max-height:
|
|
275
|
+
max-height: calc(95vh - 5%); // 95% of viewport height with 5% gap
|
|
227
276
|
}
|
|
228
277
|
}
|
|
229
278
|
|
|
230
279
|
.preview-pane {
|
|
231
|
-
max-height:
|
|
280
|
+
max-height: calc(95vh - 5%); // Same as editor pane - 95% of viewport height with 5% gap
|
|
232
281
|
|
|
233
282
|
&__content {
|
|
234
|
-
|
|
283
|
+
height: calc(95vh - 5%); // Same as editor pane - maximize to full available height
|
|
284
|
+
max-height: calc(95vh - 30%);
|
|
235
285
|
}
|
|
236
286
|
|
|
237
287
|
iframe {
|
|
238
|
-
height:
|
|
239
|
-
max-height:
|
|
288
|
+
height: calc(95vh - 5%); // Same as editor pane - maximize to full available height
|
|
289
|
+
max-height: calc(95vh - 30%);
|
|
240
290
|
}
|
|
241
291
|
}
|
|
242
292
|
}
|
|
243
293
|
}
|
|
244
294
|
|
|
295
|
+
// Fullscreen modal library mode styles (outside .html-editor block since fullscreen is a separate element)
|
|
296
|
+
.html-editor-fullscreen--library-mode {
|
|
297
|
+
.preview-pane {
|
|
298
|
+
max-height: calc(95vh - 5%);
|
|
299
|
+
|
|
300
|
+
&__content {
|
|
301
|
+
height: calc(95vh - 5%); // Same as editor pane - maximize to full available height
|
|
302
|
+
max-height: calc(95vh - 30%);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
iframe {
|
|
306
|
+
height: calc(95vh - 5%); // Same as editor pane - maximize to full available height
|
|
307
|
+
max-height: calc(95vh - 30%);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
|
|
245
312
|
// Animation classes for smooth transitions
|
|
246
313
|
.html-editor-transition {
|
|
247
314
|
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
@@ -267,10 +334,6 @@
|
|
|
267
334
|
|
|
268
335
|
// Focus states and accessibility
|
|
269
336
|
.html-editor {
|
|
270
|
-
&:focus-within {
|
|
271
|
-
outline: 0.125rem solid map-get($CAP_PRIMARY, base); // 2px = 0.125rem
|
|
272
|
-
outline-offset: -0.125rem; // -2px = -0.125rem
|
|
273
|
-
}
|
|
274
337
|
|
|
275
338
|
// High contrast mode support
|
|
276
339
|
@media (prefers-contrast: high) {
|
|
@@ -13,7 +13,6 @@
|
|
|
13
13
|
align-items: center;
|
|
14
14
|
min-height: 25rem; // 400px = 25rem
|
|
15
15
|
background: $CAP_G11; // Light background similar to #fafbfc
|
|
16
|
-
border: 0.0625rem solid $CAP_G07; // 1px border similar to #dfe2e7
|
|
17
16
|
border-radius: 0.5rem; // 8px = 0.5rem
|
|
18
17
|
flex-direction: column;
|
|
19
18
|
gap: 1rem; // 16px = 1rem
|
|
@@ -31,79 +31,6 @@
|
|
|
31
31
|
display: flex;
|
|
32
32
|
align-items: center;
|
|
33
33
|
gap: 0.5rem;
|
|
34
|
-
|
|
35
|
-
.cap-button,
|
|
36
|
-
.ant-btn,
|
|
37
|
-
button {
|
|
38
|
-
color: map-get($CAP_PRIMARY, base);
|
|
39
|
-
border: none;
|
|
40
|
-
background: $CAP_WHITE;
|
|
41
|
-
border-radius: 0.25rem;
|
|
42
|
-
padding: 0.375rem 0.5rem;
|
|
43
|
-
font-size: 0.875rem;
|
|
44
|
-
font-family: $FONT_FAMILY;
|
|
45
|
-
font-weight: 500;
|
|
46
|
-
height: auto;
|
|
47
|
-
min-width: 5.9375rem;
|
|
48
|
-
display: flex;
|
|
49
|
-
align-items: center;
|
|
50
|
-
gap: 0.25rem;
|
|
51
|
-
box-shadow: 0 0 0.0625rem 0 rgba(9, 30, 66, 0.31), 0 0.25rem 0.5rem -0.125rem rgba(9, 30, 66, 0.25);
|
|
52
|
-
line-height: 1.25rem;
|
|
53
|
-
text-align: left;
|
|
54
|
-
|
|
55
|
-
&:hover {
|
|
56
|
-
background: $CAP_G09;
|
|
57
|
-
box-shadow: 0 0 0.0625rem 0 rgba(9, 30, 66, 0.31), 0 0.375rem 0.75rem -0.125rem rgba(9, 30, 66, 0.25);
|
|
58
|
-
color: map-get($CAP_PRIMARY, base);
|
|
59
|
-
border: none;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
&:active,
|
|
63
|
-
&:focus {
|
|
64
|
-
background: $CAP_G08;
|
|
65
|
-
box-shadow: 0 0 0.0625rem 0 rgba(9, 30, 66, 0.31), 0 0.125rem 0.25rem -0.125rem rgba(9, 30, 66, 0.25);
|
|
66
|
-
color: map-get($CAP_PRIMARY, base);
|
|
67
|
-
border: none;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
.anticon,
|
|
71
|
-
.cap-icon {
|
|
72
|
-
font-size: 1rem;
|
|
73
|
-
color: map-get($CAP_PRIMARY, base);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
span {
|
|
77
|
-
font-size: 0.875rem;
|
|
78
|
-
font-weight: 500;
|
|
79
|
-
line-height: 1.25rem;
|
|
80
|
-
color: map-get($CAP_PRIMARY, base);
|
|
81
|
-
white-space: nowrap;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
&:before,
|
|
85
|
-
&:after {
|
|
86
|
-
display: none;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
.tooltip-add-label-container {
|
|
91
|
-
|
|
92
|
-
.cap-button,
|
|
93
|
-
.ant-btn {
|
|
94
|
-
color: map-get($CAP_PRIMARY, base);
|
|
95
|
-
background: $CAP_WHITE;
|
|
96
|
-
border: none;
|
|
97
|
-
box-shadow: 0 0 0.0625rem 0 rgba(9, 30, 66, 0.31), 0 0.25rem 0.5rem -0.125rem rgba(9, 30, 66, 0.25);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
.cap-button-flat,
|
|
102
|
-
.cap-button-add {
|
|
103
|
-
background: $CAP_WHITE;
|
|
104
|
-
color: map-get($CAP_PRIMARY, base);
|
|
105
|
-
border: none;
|
|
106
|
-
}
|
|
107
34
|
}
|
|
108
35
|
|
|
109
36
|
&__content {
|
|
@@ -113,13 +40,20 @@
|
|
|
113
40
|
overflow: auto;
|
|
114
41
|
position: relative;
|
|
115
42
|
height: 100%;
|
|
116
|
-
max-height:
|
|
43
|
+
max-height: 34.25rem;
|
|
117
44
|
background-color: $CAP_G01;
|
|
118
45
|
}
|
|
119
46
|
|
|
47
|
+
&__wrapper {
|
|
48
|
+
display: flex;
|
|
49
|
+
flex-direction: column;
|
|
50
|
+
height: 100%;
|
|
51
|
+
width: 100%;
|
|
52
|
+
}
|
|
53
|
+
|
|
120
54
|
&__validation {
|
|
121
55
|
border-top: 0.0625rem solid $CAP_G04;
|
|
122
|
-
background: $
|
|
56
|
+
background: $CAP_WHITE;
|
|
123
57
|
max-height: 12.5rem;
|
|
124
58
|
overflow-y: auto;
|
|
125
59
|
|
|
@@ -130,6 +64,17 @@
|
|
|
130
64
|
}
|
|
131
65
|
}
|
|
132
66
|
|
|
67
|
+
// Add Label button visibility: 50% opacity while typing, 100% on hover
|
|
68
|
+
.code-editor-pane__actions {
|
|
69
|
+
opacity: 0.8; // 80% transparent while typing
|
|
70
|
+
pointer-events: auto; // Always clickable
|
|
71
|
+
transition: opacity 0.2s ease;
|
|
72
|
+
|
|
73
|
+
&:hover {
|
|
74
|
+
opacity: 1; // Fully visible on hover
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
133
78
|
.cm-foldGutter {
|
|
134
79
|
width: 1rem;
|
|
135
80
|
|
|
@@ -223,42 +168,19 @@
|
|
|
223
168
|
.codemirror-wrapper {
|
|
224
169
|
position: relative;
|
|
225
170
|
height: 100%;
|
|
226
|
-
max-height:
|
|
171
|
+
max-height: 34.25rem;
|
|
227
172
|
background-color: $CAP_G01;
|
|
228
173
|
border-radius: 0;
|
|
229
174
|
overflow: hidden;
|
|
230
175
|
display: flex;
|
|
176
|
+
flex: 1 1 auto;
|
|
177
|
+
min-height: 0;
|
|
231
178
|
|
|
232
179
|
.code-editor-pane__actions {
|
|
233
180
|
position: absolute;
|
|
234
181
|
top: 0.5rem;
|
|
235
182
|
right: 0.5rem;
|
|
236
183
|
z-index: 20;
|
|
237
|
-
|
|
238
|
-
.cap-button,
|
|
239
|
-
.ant-btn,
|
|
240
|
-
button {
|
|
241
|
-
background: $CAP_WHITE;
|
|
242
|
-
color: map-get($CAP_PRIMARY, base);
|
|
243
|
-
border: none;
|
|
244
|
-
border-radius: 0.25rem;
|
|
245
|
-
padding: 0.375rem 0.5rem;
|
|
246
|
-
font-size: 0.875rem;
|
|
247
|
-
font-family: $FONT_FAMILY;
|
|
248
|
-
font-weight: 500;
|
|
249
|
-
min-width: 5.9375rem;
|
|
250
|
-
box-shadow: 0 0 0.0625rem 0 rgba(9, 30, 66, 0.31), 0 0.25rem 0.5rem -0.125rem rgba(9, 30, 66, 0.25);
|
|
251
|
-
|
|
252
|
-
&:hover {
|
|
253
|
-
background: $CAP_G09;
|
|
254
|
-
color: map-get($CAP_PRIMARY, base);
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
&:active {
|
|
258
|
-
background: $CAP_G08;
|
|
259
|
-
color: map-get($CAP_PRIMARY, base);
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
184
|
}
|
|
263
185
|
|
|
264
186
|
.codemirror-editor {
|
|
@@ -296,7 +218,6 @@
|
|
|
296
218
|
}
|
|
297
219
|
|
|
298
220
|
.cm-gutters {
|
|
299
|
-
background-color: var(--editor-gutter-bg, $CAP_G02);
|
|
300
221
|
border-right: 0.0625rem solid var(--editor-border, $CAP_G04);
|
|
301
222
|
color: var(--editor-gutter-foreground, $FONT_COLOR_02);
|
|
302
223
|
}
|