@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.
Files changed (133) hide show
  1. package/assets/Android.png +0 -0
  2. package/assets/iOS.png +0 -0
  3. package/constants/unified.js +1 -2
  4. package/initialReducer.js +0 -2
  5. package/package.json +1 -1
  6. package/services/api.js +0 -10
  7. package/services/tests/api.test.js +0 -18
  8. package/utils/common.js +0 -5
  9. package/utils/commonUtils.js +5 -28
  10. package/utils/tests/commonUtil.test.js +0 -224
  11. package/utils/transformTemplateConfig.js +10 -0
  12. package/v2Components/CapDeviceContent/index.js +56 -61
  13. package/v2Components/CapTagList/index.js +1 -6
  14. package/v2Components/CapTagListWithInput/index.js +1 -5
  15. package/v2Components/CapTagListWithInput/messages.js +1 -1
  16. package/v2Components/CapWhatsappCTA/tests/index.test.js +0 -5
  17. package/v2Components/ErrorInfoNote/index.js +72 -447
  18. package/v2Components/ErrorInfoNote/messages.js +0 -22
  19. package/v2Components/ErrorInfoNote/style.scss +4 -280
  20. package/v2Components/FormBuilder/tests/index.test.js +4 -13
  21. package/v2Components/HtmlEditor/HTMLEditor.js +94 -642
  22. package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +133 -1135
  23. package/v2Components/HtmlEditor/__tests__/index.lazy.test.js +16 -27
  24. package/v2Components/HtmlEditor/_htmlEditor.scss +45 -108
  25. package/v2Components/HtmlEditor/_index.lazy.scss +1 -1
  26. package/v2Components/HtmlEditor/components/CodeEditorPane/_codeEditorPane.scss +101 -13
  27. package/v2Components/HtmlEditor/components/CodeEditorPane/index.js +139 -148
  28. package/v2Components/HtmlEditor/components/DeviceToggle/_deviceToggle.scss +1 -2
  29. package/v2Components/HtmlEditor/components/DeviceToggle/index.js +3 -3
  30. package/v2Components/HtmlEditor/components/EditorToolbar/_editorToolbar.scss +0 -9
  31. package/v2Components/HtmlEditor/components/EditorToolbar/index.js +1 -1
  32. package/v2Components/HtmlEditor/components/FullscreenModal/_fullscreenModal.scss +0 -22
  33. package/v2Components/HtmlEditor/components/InAppPreviewPane/DeviceFrame.js +7 -4
  34. package/v2Components/HtmlEditor/components/InAppPreviewPane/__tests__/DeviceFrame.test.js +45 -35
  35. package/v2Components/HtmlEditor/components/InAppPreviewPane/_inAppPreviewPane.scss +3 -1
  36. package/v2Components/HtmlEditor/components/InAppPreviewPane/constants.js +33 -33
  37. package/v2Components/HtmlEditor/components/InAppPreviewPane/index.js +6 -7
  38. package/v2Components/HtmlEditor/components/PreviewPane/_previewPane.scss +6 -3
  39. package/v2Components/HtmlEditor/components/PreviewPane/index.js +13 -11
  40. package/v2Components/HtmlEditor/components/SplitContainer/_splitContainer.scss +1 -1
  41. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/__tests__/index.test.js +152 -0
  42. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/index.js +31 -49
  43. package/v2Components/HtmlEditor/constants.js +20 -29
  44. package/v2Components/HtmlEditor/hooks/__tests__/useInAppContent.test.js +16 -373
  45. package/v2Components/HtmlEditor/hooks/useEditorContent.js +2 -5
  46. package/v2Components/HtmlEditor/hooks/useInAppContent.js +146 -88
  47. package/v2Components/HtmlEditor/hooks/useValidation.js +45 -150
  48. package/v2Components/HtmlEditor/index.js +1 -1
  49. package/v2Components/HtmlEditor/messages.js +85 -95
  50. package/v2Components/HtmlEditor/utils/liquidTemplateSupport.js +102 -134
  51. package/v2Components/HtmlEditor/utils/properSyntaxHighlighting.js +25 -23
  52. package/v2Components/HtmlEditor/utils/validationAdapter.js +41 -66
  53. package/v2Components/MobilePushPreviewV2/index.js +7 -32
  54. package/v2Components/TemplatePreview/_templatePreview.scss +24 -44
  55. package/v2Components/TemplatePreview/index.js +32 -47
  56. package/v2Components/TemplatePreview/messages.js +0 -4
  57. package/v2Components/TestAndPreviewSlidebox/_testAndPreviewSlidebox.scss +0 -1
  58. package/v2Components/TestAndPreviewSlidebox/index.js +25 -31
  59. package/v2Containers/BeeEditor/index.js +90 -172
  60. package/v2Containers/CreativesContainer/SlideBoxContent.js +51 -128
  61. package/v2Containers/CreativesContainer/SlideBoxFooter.js +12 -113
  62. package/v2Containers/CreativesContainer/SlideBoxHeader.js +1 -2
  63. package/v2Containers/CreativesContainer/constants.js +0 -1
  64. package/v2Containers/CreativesContainer/index.js +46 -238
  65. package/v2Containers/CreativesContainer/messages.js +0 -8
  66. package/v2Containers/CreativesContainer/tests/SlideBoxFooter.test.js +2 -11
  67. package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +50 -38
  68. package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +0 -91
  69. package/v2Containers/Email/actions.js +0 -7
  70. package/v2Containers/Email/constants.js +1 -5
  71. package/v2Containers/Email/index.js +30 -229
  72. package/v2Containers/Email/messages.js +0 -32
  73. package/v2Containers/Email/reducer.js +1 -12
  74. package/v2Containers/Email/sagas.js +7 -61
  75. package/v2Containers/Email/tests/__snapshots__/reducer.test.js.snap +0 -2
  76. package/v2Containers/Email/tests/sagas.test.js +1 -1
  77. package/v2Containers/EmailWrapper/components/EmailWrapperView.js +15 -210
  78. package/v2Containers/EmailWrapper/components/HTMLEditorTesting.js +74 -40
  79. package/v2Containers/EmailWrapper/components/__tests__/HTMLEditorTesting.test.js +67 -2
  80. package/v2Containers/EmailWrapper/constants.js +0 -2
  81. package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +77 -629
  82. package/v2Containers/EmailWrapper/index.js +23 -103
  83. package/v2Containers/EmailWrapper/messages.js +1 -61
  84. package/v2Containers/EmailWrapper/tests/EmailWrapperView.test.js +214 -0
  85. package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +77 -509
  86. package/v2Containers/InApp/actions.js +0 -7
  87. package/v2Containers/InApp/constants.js +4 -20
  88. package/v2Containers/InApp/index.js +357 -801
  89. package/v2Containers/InApp/index.scss +3 -4
  90. package/v2Containers/InApp/messages.js +3 -7
  91. package/v2Containers/InApp/reducer.js +3 -21
  92. package/v2Containers/InApp/sagas.js +9 -29
  93. package/v2Containers/InApp/selectors.js +5 -25
  94. package/v2Containers/InApp/tests/index.test.js +50 -154
  95. package/v2Containers/InApp/tests/reducer.test.js +0 -34
  96. package/v2Containers/InApp/tests/sagas.test.js +9 -61
  97. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +0 -3
  98. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +0 -2
  99. package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +0 -2
  100. package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +0 -9
  101. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +0 -12
  102. package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +0 -4
  103. package/v2Containers/TagList/index.js +19 -62
  104. package/v2Containers/Templates/_templates.scss +1 -60
  105. package/v2Containers/Templates/index.js +4 -89
  106. package/v2Containers/Templates/messages.js +0 -4
  107. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +0 -35
  108. package/v2Components/HtmlEditor/__tests__/HTMLEditor.apiErrors.test.js +0 -874
  109. package/v2Components/HtmlEditor/components/ValidationTabs/_validationTabs.scss +0 -254
  110. package/v2Components/HtmlEditor/components/ValidationTabs/index.js +0 -363
  111. package/v2Components/HtmlEditor/components/ValidationTabs/messages.js +0 -51
  112. package/v2Components/HtmlEditor/hooks/__tests__/useValidation.apiErrors.test.js +0 -630
  113. package/v2Containers/BeePopupEditor/constants.js +0 -10
  114. package/v2Containers/BeePopupEditor/index.js +0 -193
  115. package/v2Containers/BeePopupEditor/tests/index.test.js +0 -627
  116. package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +0 -1317
  117. package/v2Containers/EmailWrapper/components/__tests__/EmailHTMLEditor.test.js +0 -1605
  118. package/v2Containers/EmailWrapper/components/__tests__/EmailWrapperView.test.js +0 -520
  119. package/v2Containers/EmailWrapper/tests/useEmailWrapper.edgeCases.test.js +0 -643
  120. package/v2Containers/InApp/__tests__/InAppHTMLEditor.test.js +0 -376
  121. package/v2Containers/InApp/__tests__/sagas.test.js +0 -363
  122. package/v2Containers/InApp/tests/selectors.test.js +0 -612
  123. package/v2Containers/InAppWrapper/components/InAppWrapperView.js +0 -162
  124. package/v2Containers/InAppWrapper/components/__tests__/InAppWrapperView.test.js +0 -267
  125. package/v2Containers/InAppWrapper/components/inAppWrapperView.scss +0 -9
  126. package/v2Containers/InAppWrapper/constants.js +0 -16
  127. package/v2Containers/InAppWrapper/hooks/__tests__/useInAppWrapper.test.js +0 -473
  128. package/v2Containers/InAppWrapper/hooks/useInAppWrapper.js +0 -198
  129. package/v2Containers/InAppWrapper/index.js +0 -148
  130. package/v2Containers/InAppWrapper/messages.js +0 -49
  131. package/v2Containers/InappAdvance/index.js +0 -1099
  132. package/v2Containers/InappAdvance/index.scss +0 -10
  133. 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', () => function MockCapSpin({ size }) {
15
- return <div data-testid="cap-spin" data-size={size}>Loading...</div>;
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
- await act(async () => {
118
- render(<HTMLEditorLazy variant="email" />);
119
- });
109
+ render(<HTMLEditorLazy variant="email" />);
120
110
 
121
- // Wait for lazy component to load - increase timeout and wait for Suspense to resolve
111
+ // Wait for lazy component to load
122
112
  await waitFor(() => {
123
113
  expect(screen.getByTestId('html-editor')).toBeInTheDocument();
124
- }, { timeout: 3000 });
114
+ });
125
115
 
126
- const editor = screen.getByTestId('html-editor');
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
- const editor = screen.getByTestId('html-editor');
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 "~@capillarytech/cap-ui-library/styles/_variables.scss";
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
- // 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;
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
- // Right-align toolbar actions
36
- &__right {
37
- margin-left: auto;
38
- }
39
- }
19
+ // Device toggle takes available space
20
+ .device-toggle {
21
+ flex: 1;
40
22
  }
41
23
 
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
- }
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: calc(95vh - 5%); // 95% of viewport height with 5% gap
222
+ max-height: 70vh; // Larger height in fullscreen
272
223
  }
273
224
 
274
225
  &__content {
275
- max-height: calc(95vh - 5%); // 95% of viewport height with 5% gap
226
+ max-height: 70vh; // Larger height in fullscreen
276
227
  }
277
228
  }
278
229
 
279
230
  .preview-pane {
280
- max-height: calc(95vh - 5%); // Same as editor pane - 95% of viewport height with 5% gap
231
+ max-height: 70vh; // Larger height in fullscreen
281
232
 
282
233
  &__content {
283
- height: calc(95vh - 5%); // Same as editor pane - maximize to full available height
284
- max-height: calc(95vh - 50%);
234
+ max-height: 65vh; // Account for modal header
285
235
  }
286
236
 
287
237
  iframe {
288
- height: calc(95vh - 5%); // Same as editor pane - maximize to full available height
289
- max-height: calc(95vh - 50%);
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
- // border: 0.0625rem solid $CAP_G07; // 1px border similar to #dfe2e7
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: 34.25rem;
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: 34.25rem;
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
  }