@capillarytech/creatives-library 8.0.246-alpha.0 → 8.0.246
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 +1 -2
- package/initialReducer.js +0 -2
- package/package.json +1 -1
- package/services/api.js +0 -10
- package/services/tests/api.test.js +0 -18
- package/utils/common.js +0 -5
- package/utils/commonUtils.js +5 -28
- package/utils/tests/commonUtil.test.js +0 -224
- package/utils/transformTemplateConfig.js +10 -0
- package/v2Components/CapDeviceContent/index.js +56 -61
- package/v2Components/CapTagList/index.js +1 -6
- package/v2Components/CapTagListWithInput/index.js +1 -5
- package/v2Components/CapTagListWithInput/messages.js +1 -1
- package/v2Components/CapWhatsappCTA/tests/index.test.js +0 -5
- package/v2Components/ErrorInfoNote/index.js +72 -447
- package/v2Components/ErrorInfoNote/messages.js +0 -22
- package/v2Components/ErrorInfoNote/style.scss +4 -280
- package/v2Components/FormBuilder/tests/index.test.js +4 -13
- package/v2Components/HtmlEditor/HTMLEditor.js +94 -642
- package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +133 -1135
- package/v2Components/HtmlEditor/__tests__/index.lazy.test.js +16 -27
- package/v2Components/HtmlEditor/_htmlEditor.scss +45 -108
- package/v2Components/HtmlEditor/_index.lazy.scss +1 -1
- package/v2Components/HtmlEditor/components/CodeEditorPane/_codeEditorPane.scss +101 -13
- package/v2Components/HtmlEditor/components/CodeEditorPane/index.js +139 -148
- package/v2Components/HtmlEditor/components/DeviceToggle/_deviceToggle.scss +1 -2
- package/v2Components/HtmlEditor/components/DeviceToggle/index.js +3 -3
- package/v2Components/HtmlEditor/components/EditorToolbar/_editorToolbar.scss +0 -9
- package/v2Components/HtmlEditor/components/EditorToolbar/index.js +1 -1
- package/v2Components/HtmlEditor/components/FullscreenModal/_fullscreenModal.scss +0 -22
- package/v2Components/HtmlEditor/components/InAppPreviewPane/DeviceFrame.js +7 -4
- package/v2Components/HtmlEditor/components/InAppPreviewPane/__tests__/DeviceFrame.test.js +45 -35
- package/v2Components/HtmlEditor/components/InAppPreviewPane/_inAppPreviewPane.scss +3 -1
- package/v2Components/HtmlEditor/components/InAppPreviewPane/constants.js +33 -33
- package/v2Components/HtmlEditor/components/InAppPreviewPane/index.js +6 -7
- package/v2Components/HtmlEditor/components/PreviewPane/_previewPane.scss +6 -3
- package/v2Components/HtmlEditor/components/PreviewPane/index.js +13 -11
- package/v2Components/HtmlEditor/components/SplitContainer/_splitContainer.scss +1 -1
- package/v2Components/HtmlEditor/components/ValidationErrorDisplay/__tests__/index.test.js +152 -0
- package/v2Components/HtmlEditor/components/ValidationErrorDisplay/index.js +31 -49
- package/v2Components/HtmlEditor/constants.js +20 -29
- package/v2Components/HtmlEditor/hooks/__tests__/useInAppContent.test.js +16 -373
- package/v2Components/HtmlEditor/hooks/useEditorContent.js +2 -5
- package/v2Components/HtmlEditor/hooks/useInAppContent.js +146 -88
- package/v2Components/HtmlEditor/hooks/useValidation.js +45 -150
- package/v2Components/HtmlEditor/index.js +1 -1
- package/v2Components/HtmlEditor/messages.js +85 -95
- package/v2Components/HtmlEditor/utils/liquidTemplateSupport.js +102 -134
- package/v2Components/HtmlEditor/utils/properSyntaxHighlighting.js +25 -23
- package/v2Components/HtmlEditor/utils/validationAdapter.js +41 -66
- package/v2Components/MobilePushPreviewV2/index.js +7 -32
- package/v2Components/TemplatePreview/_templatePreview.scss +24 -44
- package/v2Components/TemplatePreview/index.js +32 -47
- package/v2Components/TemplatePreview/messages.js +0 -4
- package/v2Components/TestAndPreviewSlidebox/_testAndPreviewSlidebox.scss +0 -1
- package/v2Components/TestAndPreviewSlidebox/index.js +25 -31
- package/v2Containers/BeeEditor/index.js +90 -172
- package/v2Containers/CreativesContainer/SlideBoxContent.js +51 -128
- package/v2Containers/CreativesContainer/SlideBoxFooter.js +12 -113
- package/v2Containers/CreativesContainer/SlideBoxHeader.js +1 -2
- package/v2Containers/CreativesContainer/constants.js +0 -1
- package/v2Containers/CreativesContainer/index.js +46 -238
- package/v2Containers/CreativesContainer/messages.js +0 -8
- package/v2Containers/CreativesContainer/tests/SlideBoxFooter.test.js +2 -11
- package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +50 -38
- package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +0 -91
- package/v2Containers/Email/actions.js +0 -7
- package/v2Containers/Email/constants.js +1 -5
- package/v2Containers/Email/index.js +30 -229
- package/v2Containers/Email/messages.js +0 -32
- package/v2Containers/Email/reducer.js +1 -12
- package/v2Containers/Email/sagas.js +7 -61
- package/v2Containers/Email/tests/__snapshots__/reducer.test.js.snap +0 -2
- package/v2Containers/Email/tests/sagas.test.js +1 -1
- package/v2Containers/EmailWrapper/components/EmailWrapperView.js +15 -210
- package/v2Containers/EmailWrapper/components/HTMLEditorTesting.js +74 -40
- package/v2Containers/EmailWrapper/components/__tests__/HTMLEditorTesting.test.js +67 -2
- package/v2Containers/EmailWrapper/constants.js +0 -2
- package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +77 -629
- package/v2Containers/EmailWrapper/index.js +23 -103
- package/v2Containers/EmailWrapper/messages.js +1 -61
- package/v2Containers/EmailWrapper/tests/EmailWrapperView.test.js +214 -0
- package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +77 -509
- package/v2Containers/InApp/actions.js +0 -7
- package/v2Containers/InApp/constants.js +4 -20
- package/v2Containers/InApp/index.js +357 -801
- package/v2Containers/InApp/index.scss +3 -4
- package/v2Containers/InApp/messages.js +3 -7
- package/v2Containers/InApp/reducer.js +3 -21
- package/v2Containers/InApp/sagas.js +9 -29
- package/v2Containers/InApp/selectors.js +5 -25
- package/v2Containers/InApp/tests/index.test.js +50 -154
- package/v2Containers/InApp/tests/reducer.test.js +0 -34
- package/v2Containers/InApp/tests/sagas.test.js +9 -61
- package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +0 -3
- package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +0 -2
- package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +0 -2
- package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +0 -9
- package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +0 -12
- package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +0 -4
- package/v2Containers/TagList/index.js +19 -62
- package/v2Containers/Templates/_templates.scss +1 -60
- package/v2Containers/Templates/index.js +4 -89
- package/v2Containers/Templates/messages.js +0 -4
- package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +0 -35
- package/v2Components/HtmlEditor/__tests__/HTMLEditor.apiErrors.test.js +0 -874
- package/v2Components/HtmlEditor/components/ValidationTabs/_validationTabs.scss +0 -254
- package/v2Components/HtmlEditor/components/ValidationTabs/index.js +0 -363
- package/v2Components/HtmlEditor/components/ValidationTabs/messages.js +0 -51
- package/v2Components/HtmlEditor/hooks/__tests__/useValidation.apiErrors.test.js +0 -630
- package/v2Containers/BeePopupEditor/constants.js +0 -10
- package/v2Containers/BeePopupEditor/index.js +0 -193
- package/v2Containers/BeePopupEditor/tests/index.test.js +0 -627
- package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +0 -1317
- package/v2Containers/EmailWrapper/components/__tests__/EmailHTMLEditor.test.js +0 -1605
- package/v2Containers/EmailWrapper/components/__tests__/EmailWrapperView.test.js +0 -520
- package/v2Containers/EmailWrapper/tests/useEmailWrapper.edgeCases.test.js +0 -643
- package/v2Containers/InApp/__tests__/InAppHTMLEditor.test.js +0 -376
- package/v2Containers/InApp/__tests__/sagas.test.js +0 -363
- package/v2Containers/InApp/tests/selectors.test.js +0 -612
- package/v2Containers/InAppWrapper/components/InAppWrapperView.js +0 -162
- package/v2Containers/InAppWrapper/components/__tests__/InAppWrapperView.test.js +0 -267
- package/v2Containers/InAppWrapper/components/inAppWrapperView.scss +0 -9
- package/v2Containers/InAppWrapper/constants.js +0 -16
- package/v2Containers/InAppWrapper/hooks/__tests__/useInAppWrapper.test.js +0 -473
- package/v2Containers/InAppWrapper/hooks/useInAppWrapper.js +0 -198
- package/v2Containers/InAppWrapper/index.js +0 -148
- package/v2Containers/InAppWrapper/messages.js +0 -49
- package/v2Containers/InappAdvance/index.js +0 -1099
- package/v2Containers/InappAdvance/index.scss +0 -10
- package/v2Containers/InappAdvance/tests/index.test.js +0 -448
|
@@ -5,31 +5,23 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import React from 'react';
|
|
8
|
-
import {
|
|
9
|
-
render, screen, waitFor, act,
|
|
10
|
-
} from '@testing-library/react';
|
|
8
|
+
import { render, screen, waitFor } from '@testing-library/react';
|
|
11
9
|
import '@testing-library/jest-dom';
|
|
12
10
|
|
|
13
11
|
// Mock CapSpin before importing the component
|
|
14
|
-
jest.mock('@capillarytech/cap-ui-library/CapSpin', () =>
|
|
15
|
-
return
|
|
12
|
+
jest.mock('@capillarytech/cap-ui-library/CapSpin', () => {
|
|
13
|
+
return function MockCapSpin({ size }) {
|
|
14
|
+
return <div data-testid="cap-spin" data-size={size}>Loading...</div>;
|
|
15
|
+
};
|
|
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
|
|
21
19
|
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
|
-
};
|
|
30
20
|
return {
|
|
31
21
|
__esModule: true,
|
|
32
|
-
default: MockHTMLEditor
|
|
22
|
+
default: function MockHTMLEditor(props) {
|
|
23
|
+
return <div data-testid="html-editor">Mock HTML Editor - {props.variant}</div>;
|
|
24
|
+
}
|
|
33
25
|
};
|
|
34
26
|
});
|
|
35
27
|
|
|
@@ -114,17 +106,14 @@ describe('index.lazy.js', () => {
|
|
|
114
106
|
it('renders the lazy loaded component', async () => {
|
|
115
107
|
const HTMLEditorLazy = (await import('../index.lazy')).default;
|
|
116
108
|
|
|
117
|
-
|
|
118
|
-
render(<HTMLEditorLazy variant="email" />);
|
|
119
|
-
});
|
|
109
|
+
render(<HTMLEditorLazy variant="email" />);
|
|
120
110
|
|
|
121
|
-
// Wait for lazy component to load
|
|
111
|
+
// Wait for lazy component to load
|
|
122
112
|
await waitFor(() => {
|
|
123
113
|
expect(screen.getByTestId('html-editor')).toBeInTheDocument();
|
|
124
|
-
}
|
|
114
|
+
});
|
|
125
115
|
|
|
126
|
-
|
|
127
|
-
expect(editor.textContent).toBe('Mock HTML Editor -email');
|
|
116
|
+
expect(screen.getByText(/Mock HTML Editor - email/)).toBeInTheDocument();
|
|
128
117
|
});
|
|
129
118
|
|
|
130
119
|
it('shows fallback while loading', async () => {
|
|
@@ -145,7 +134,7 @@ describe('index.lazy.js', () => {
|
|
|
145
134
|
<HTMLEditorLazy
|
|
146
135
|
variant="inapp"
|
|
147
136
|
onSave={mockOnSave}
|
|
148
|
-
readOnly
|
|
137
|
+
readOnly={true}
|
|
149
138
|
className="custom-class"
|
|
150
139
|
/>
|
|
151
140
|
);
|
|
@@ -154,8 +143,7 @@ describe('index.lazy.js', () => {
|
|
|
154
143
|
expect(screen.getByTestId('html-editor')).toBeInTheDocument();
|
|
155
144
|
});
|
|
156
145
|
|
|
157
|
-
|
|
158
|
-
expect(editor.textContent).toBe('Mock HTML Editor -inapp');
|
|
146
|
+
expect(screen.getByText(/Mock HTML Editor - inapp/)).toBeInTheDocument();
|
|
159
147
|
});
|
|
160
148
|
|
|
161
149
|
it('has correct display name', async () => {
|
|
@@ -227,7 +215,7 @@ describe('index.lazy.js', () => {
|
|
|
227
215
|
render(
|
|
228
216
|
<HTMLEditorLazy
|
|
229
217
|
className="custom-editor"
|
|
230
|
-
readOnly
|
|
218
|
+
readOnly={true}
|
|
231
219
|
showFullscreenButton={false}
|
|
232
220
|
autoSave={false}
|
|
233
221
|
autoSaveInterval={60000}
|
|
@@ -541,3 +529,4 @@ describe('index.lazy.js', () => {
|
|
|
541
529
|
});
|
|
542
530
|
});
|
|
543
531
|
});
|
|
532
|
+
|
|
@@ -5,71 +5,38 @@
|
|
|
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
|
-
|
|
18
|
-
border-bottom: 0.0625rem solid $CAP_G08;
|
|
19
|
-
padding-right: 1rem;
|
|
20
|
-
|
|
21
|
-
// Device toggle takes available space
|
|
22
|
-
.device-toggle {
|
|
23
|
-
flex: 1;
|
|
24
|
-
}
|
|
25
|
-
|
|
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;
|
|
12
|
+
.html-editor__header--fullscreen {
|
|
13
|
+
display: flex;
|
|
14
|
+
align-items: center;
|
|
15
|
+
background-color: $CAP_G10;
|
|
16
|
+
border-bottom: 0.0625rem solid $CAP_G08;
|
|
17
|
+
padding-right: 1rem;
|
|
34
18
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
}
|
|
19
|
+
// Device toggle takes available space
|
|
20
|
+
.device-toggle {
|
|
21
|
+
flex: 1;
|
|
40
22
|
}
|
|
41
23
|
|
|
42
|
-
//
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
24
|
+
// Toolbar styling in fullscreen mode
|
|
25
|
+
.editor-toolbar {
|
|
26
|
+
background-color: transparent;
|
|
27
|
+
border-bottom: none;
|
|
28
|
+
padding: 0;
|
|
29
|
+
min-height: 3.25rem;
|
|
30
|
+
height: 3.25rem;
|
|
31
|
+
|
|
32
|
+
// Right-align toolbar actions
|
|
33
|
+
&__right {
|
|
34
|
+
margin-left: auto;
|
|
51
35
|
}
|
|
52
36
|
}
|
|
53
37
|
}
|
|
54
38
|
}
|
|
55
39
|
|
|
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
|
-
|
|
73
40
|
.html-editor {
|
|
74
41
|
height: 37.5rem; // Fixed height instead of 100vh (600px = 37.5rem)
|
|
75
42
|
max-height: 80vh; // Responsive maximum height
|
|
@@ -81,23 +48,6 @@
|
|
|
81
48
|
border-radius: 0.25rem;
|
|
82
49
|
overflow: hidden;
|
|
83
50
|
|
|
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 - 50%);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
iframe {
|
|
95
|
-
height: calc(95vh - 5%); // Same as editor pane - maximize to full available height
|
|
96
|
-
max-height: calc(95vh - 50%);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
51
|
&.fullscreen {
|
|
102
52
|
position: fixed;
|
|
103
53
|
top: 0;
|
|
@@ -133,6 +83,19 @@
|
|
|
133
83
|
flex-direction: column;
|
|
134
84
|
}
|
|
135
85
|
|
|
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
|
+
|
|
136
99
|
// Split container - integrated design
|
|
137
100
|
&-split-container {
|
|
138
101
|
flex: 1;
|
|
@@ -165,7 +128,6 @@
|
|
|
165
128
|
padding: 0;
|
|
166
129
|
min-height: 3.25rem; // 52px = 3.25rem
|
|
167
130
|
height: 3.25rem;
|
|
168
|
-
position: relative;
|
|
169
131
|
|
|
170
132
|
// Right-align toolbar actions
|
|
171
133
|
&__right {
|
|
@@ -173,20 +135,9 @@
|
|
|
173
135
|
}
|
|
174
136
|
}
|
|
175
137
|
}
|
|
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
138
|
}
|
|
189
139
|
|
|
140
|
+
|
|
190
141
|
// Responsive design
|
|
191
142
|
@media (max-width: 768px) {
|
|
192
143
|
height: 31.25rem; // 500px = 31.25rem - Smaller height on tablets
|
|
@@ -268,47 +219,29 @@
|
|
|
268
219
|
.code-editor-pane {
|
|
269
220
|
.codemirror-wrapper {
|
|
270
221
|
height: 100%;
|
|
271
|
-
max-height:
|
|
222
|
+
max-height: 70vh; // Larger height in fullscreen
|
|
272
223
|
}
|
|
273
224
|
|
|
274
225
|
&__content {
|
|
275
|
-
max-height:
|
|
226
|
+
max-height: 70vh; // Larger height in fullscreen
|
|
276
227
|
}
|
|
277
228
|
}
|
|
278
229
|
|
|
279
230
|
.preview-pane {
|
|
280
|
-
max-height:
|
|
231
|
+
max-height: 70vh; // Larger height in fullscreen
|
|
281
232
|
|
|
282
233
|
&__content {
|
|
283
|
-
height:
|
|
284
|
-
max-height: calc(95vh - 50%);
|
|
234
|
+
max-height: 65vh; // Account for modal header
|
|
285
235
|
}
|
|
286
236
|
|
|
287
237
|
iframe {
|
|
288
|
-
height:
|
|
289
|
-
max-height:
|
|
238
|
+
height: 60vh; // Larger iframe in fullscreen
|
|
239
|
+
max-height: 60vh;
|
|
290
240
|
}
|
|
291
241
|
}
|
|
292
242
|
}
|
|
293
243
|
}
|
|
294
244
|
|
|
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 - 50%);
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
iframe {
|
|
306
|
-
height: calc(95vh - 5%); // Same as editor pane - maximize to full available height
|
|
307
|
-
max-height: calc(95vh - 50%);
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
|
|
312
245
|
// Animation classes for smooth transitions
|
|
313
246
|
.html-editor-transition {
|
|
314
247
|
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
@@ -334,6 +267,10 @@
|
|
|
334
267
|
|
|
335
268
|
// Focus states and accessibility
|
|
336
269
|
.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
|
+
}
|
|
337
274
|
|
|
338
275
|
// High contrast mode support
|
|
339
276
|
@media (prefers-contrast: high) {
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
align-items: center;
|
|
14
14
|
min-height: 25rem; // 400px = 25rem
|
|
15
15
|
background: $CAP_G11; // Light background similar to #fafbfc
|
|
16
|
-
|
|
16
|
+
border: 0.0625rem solid $CAP_G07; // 1px border similar to #dfe2e7
|
|
17
17
|
border-radius: 0.5rem; // 8px = 0.5rem
|
|
18
18
|
flex-direction: column;
|
|
19
19
|
gap: 1rem; // 16px = 1rem
|
|
@@ -31,6 +31,79 @@
|
|
|
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
|
+
}
|
|
34
107
|
}
|
|
35
108
|
|
|
36
109
|
&__content {
|
|
@@ -40,7 +113,7 @@
|
|
|
40
113
|
overflow: auto;
|
|
41
114
|
position: relative;
|
|
42
115
|
height: 100%;
|
|
43
|
-
max-height:
|
|
116
|
+
max-height: 31.25rem;
|
|
44
117
|
background-color: $CAP_G01;
|
|
45
118
|
}
|
|
46
119
|
|
|
@@ -57,17 +130,6 @@
|
|
|
57
130
|
}
|
|
58
131
|
}
|
|
59
132
|
|
|
60
|
-
// Add Label button visibility: 50% opacity while typing, 100% on hover
|
|
61
|
-
.code-editor-pane__actions {
|
|
62
|
-
opacity: 0.5; // 50% transparent while typing
|
|
63
|
-
pointer-events: auto; // Always clickable
|
|
64
|
-
transition: opacity 0.2s ease;
|
|
65
|
-
|
|
66
|
-
&:hover {
|
|
67
|
-
opacity: 1; // Fully visible on hover
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
133
|
.cm-foldGutter {
|
|
72
134
|
width: 1rem;
|
|
73
135
|
|
|
@@ -161,7 +223,7 @@
|
|
|
161
223
|
.codemirror-wrapper {
|
|
162
224
|
position: relative;
|
|
163
225
|
height: 100%;
|
|
164
|
-
max-height:
|
|
226
|
+
max-height: 31.25rem;
|
|
165
227
|
background-color: $CAP_G01;
|
|
166
228
|
border-radius: 0;
|
|
167
229
|
overflow: hidden;
|
|
@@ -172,6 +234,31 @@
|
|
|
172
234
|
top: 0.5rem;
|
|
173
235
|
right: 0.5rem;
|
|
174
236
|
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
|
+
}
|
|
175
262
|
}
|
|
176
263
|
|
|
177
264
|
.codemirror-editor {
|
|
@@ -209,6 +296,7 @@
|
|
|
209
296
|
}
|
|
210
297
|
|
|
211
298
|
.cm-gutters {
|
|
299
|
+
background-color: var(--editor-gutter-bg, $CAP_G02);
|
|
212
300
|
border-right: 0.0625rem solid var(--editor-border, $CAP_G04);
|
|
213
301
|
color: var(--editor-gutter-foreground, $FONT_COLOR_02);
|
|
214
302
|
}
|