@visns-studio/visns-components 5.11.5 → 5.11.7

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.
@@ -1,3 +1,243 @@
1
+ /* Proposal System Styles (backward compatible) */
2
+ .proposalControls {
3
+ background: #f8f9fa;
4
+ border: 1px solid #e9ecef;
5
+ border-radius: 8px;
6
+ padding: 20px;
7
+ margin: 20px 0;
8
+ }
9
+
10
+ .proposalToggle {
11
+ display: flex;
12
+ justify-content: center;
13
+ margin-bottom: 20px;
14
+ }
15
+
16
+ .modeToggle {
17
+ background: #fff;
18
+ border: 2px solid #dee2e6;
19
+ border-radius: 25px;
20
+ padding: 10px 20px;
21
+ font-size: 14px;
22
+ font-weight: 600;
23
+ cursor: pointer;
24
+ transition: all 0.3s ease;
25
+ display: flex;
26
+ align-items: center;
27
+ gap: 8px;
28
+
29
+ &:hover {
30
+ border-color: #007bff;
31
+ color: #007bff;
32
+ }
33
+
34
+ &.proposalMode {
35
+ background: #007bff;
36
+ color: white;
37
+ border-color: #007bff;
38
+ }
39
+
40
+ &.quoteMode {
41
+ background: #28a745;
42
+ color: white;
43
+ border-color: #28a745;
44
+ }
45
+
46
+ &:disabled {
47
+ opacity: 0.6;
48
+ cursor: not-allowed;
49
+ }
50
+ }
51
+
52
+ .proposalSettings {
53
+ border-top: 1px solid #e9ecef;
54
+ padding-top: 20px;
55
+ }
56
+
57
+ .proposalSelectors {
58
+ display: flex;
59
+ gap: 20px;
60
+ align-items: end;
61
+ flex-wrap: wrap;
62
+ }
63
+
64
+ .selectorGroup {
65
+ flex: 1;
66
+ min-width: 200px;
67
+
68
+ label {
69
+ display: block;
70
+ font-weight: 600;
71
+ margin-bottom: 5px;
72
+ color: #495057;
73
+ }
74
+ }
75
+
76
+ .proposalSelect {
77
+ width: 100%;
78
+ padding: 8px 12px;
79
+ border: 1px solid #ced4da;
80
+ border-radius: 4px;
81
+ font-size: 14px;
82
+ background: white;
83
+
84
+ &:focus {
85
+ outline: none;
86
+ border-color: #007bff;
87
+ box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
88
+ }
89
+
90
+ &:disabled {
91
+ background: #e9ecef;
92
+ cursor: not-allowed;
93
+ }
94
+ }
95
+
96
+ .proposalActions {
97
+ display: flex;
98
+ gap: 10px;
99
+ flex-shrink: 0;
100
+ }
101
+
102
+ .previewButton, .pdfButton {
103
+ padding: 8px 16px;
104
+ border: none;
105
+ border-radius: 4px;
106
+ font-size: 14px;
107
+ font-weight: 500;
108
+ cursor: pointer;
109
+ transition: all 0.2s ease;
110
+ display: flex;
111
+ align-items: center;
112
+ gap: 6px;
113
+
114
+ &:disabled {
115
+ opacity: 0.6;
116
+ cursor: not-allowed;
117
+ }
118
+ }
119
+
120
+ .previewButton {
121
+ background: #17a2b8;
122
+ color: white;
123
+
124
+ &:hover:not(:disabled) {
125
+ background: #138496;
126
+ }
127
+ }
128
+
129
+ .pdfButton {
130
+ background: #dc3545;
131
+ color: white;
132
+
133
+ &:hover:not(:disabled) {
134
+ background: #c82333;
135
+ }
136
+ }
137
+
138
+ .proposalPreviewContainer {
139
+ margin: 20px 0;
140
+ border: 1px solid #e9ecef;
141
+ border-radius: 8px;
142
+ background: white;
143
+ max-height: 600px;
144
+ overflow: hidden;
145
+ }
146
+
147
+ .proposalPreviewHeader {
148
+ display: flex;
149
+ justify-content: space-between;
150
+ align-items: center;
151
+ padding: 15px 20px;
152
+ background: #f8f9fa;
153
+ border-bottom: 1px solid #e9ecef;
154
+
155
+ h3 {
156
+ margin: 0;
157
+ font-size: 16px;
158
+ color: #495057;
159
+ }
160
+ }
161
+
162
+ .closePreview {
163
+ background: none;
164
+ border: none;
165
+ font-size: 18px;
166
+ cursor: pointer;
167
+ color: #6c757d;
168
+ padding: 5px;
169
+
170
+ &:hover {
171
+ color: #495057;
172
+ }
173
+ }
174
+
175
+ .proposalPreview {
176
+ padding: 20px;
177
+ overflow-y: auto;
178
+ max-height: 500px;
179
+
180
+ // Style the preview content
181
+ h1, h2, h3, h4, h5, h6 {
182
+ margin-top: 0;
183
+ margin-bottom: 10px;
184
+ }
185
+
186
+ table {
187
+ width: 100%;
188
+ border-collapse: collapse;
189
+ margin: 10px 0;
190
+
191
+ th, td {
192
+ padding: 8px;
193
+ border: 1px solid #dee2e6;
194
+ text-align: left;
195
+ }
196
+
197
+ th {
198
+ background: #f8f9fa;
199
+ font-weight: 600;
200
+ }
201
+ }
202
+ }
203
+
204
+ /* Compact HTML content styling for proposal preview */
205
+ .proposalPreview h1,
206
+ .proposalPreview h2,
207
+ .proposalPreview h3,
208
+ .proposalPreview h4,
209
+ .proposalPreview h5,
210
+ .proposalPreview h6 {
211
+ font-size: 0.95rem !important;
212
+ line-height: 1.2 !important;
213
+ margin: 0 0 0.5rem 0 !important;
214
+ font-weight: 600;
215
+ color: #374151 !important;
216
+ }
217
+
218
+ .proposalPreview p {
219
+ font-size: 0.875rem !important;
220
+ line-height: 1.4 !important;
221
+ margin: 0 0 0.5rem 0 !important;
222
+ color: #374151 !important;
223
+ }
224
+
225
+ .proposalPreview ul,
226
+ .proposalPreview ol {
227
+ font-size: 0.875rem !important;
228
+ line-height: 1.4 !important;
229
+ margin: 0 0 0.5rem 1rem !important;
230
+ padding: 0;
231
+ color: #374151 !important;
232
+ }
233
+
234
+ .proposalPreview li {
235
+ margin: 0 !important;
236
+ padding: 0 !important;
237
+ font-size: 0.875rem !important;
238
+ line-height: 1.4 !important;
239
+ }
240
+
1
241
  .grid {
2
242
  width: 100%;
3
243
  display: flex;
@@ -0,0 +1,438 @@
1
+ /* Proposal Template Preview Styles */
2
+ .proposal-preview-container {
3
+ display: flex;
4
+ flex-direction: column;
5
+ gap: 1.5rem;
6
+ }
7
+
8
+ .proposal-preview-controls {
9
+ display: flex;
10
+ align-items: center;
11
+ justify-content: space-between;
12
+ padding: 1.5rem;
13
+ background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
14
+ border: 1px solid #e2e8f0;
15
+ border-radius: 12px;
16
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.02);
17
+ }
18
+
19
+ .proposal-preview-branding-section {
20
+ display: flex;
21
+ align-items: center;
22
+ gap: 1rem;
23
+ }
24
+
25
+ .proposal-preview-branding-label {
26
+ display: block;
27
+ font-size: 0.875rem;
28
+ font-weight: 600;
29
+ color: #374151;
30
+ margin-bottom: 0.5rem;
31
+ }
32
+
33
+ .proposal-preview-branding-select {
34
+ padding: 0.75rem 1rem;
35
+ border: 1px solid #d1d5db;
36
+ border-radius: 8px;
37
+ font-size: 0.875rem;
38
+ background: white;
39
+ transition: all 0.2s;
40
+ min-width: 12rem;
41
+ }
42
+
43
+ .proposal-preview-branding-select:focus {
44
+ outline: none;
45
+ border-color: #3cbf7d;
46
+ box-shadow: 0 0 0 3px rgba(60, 191, 125, 0.1);
47
+ }
48
+
49
+ .proposal-preview-actions {
50
+ display: flex;
51
+ align-items: center;
52
+ gap: 0.75rem;
53
+ }
54
+
55
+ .proposal-preview-btn {
56
+ display: inline-flex;
57
+ align-items: center;
58
+ gap: 0.5rem;
59
+ padding: 0.75rem 1.25rem;
60
+ font-size: 0.875rem;
61
+ font-weight: 600;
62
+ border-radius: 8px;
63
+ cursor: pointer;
64
+ transition: all 0.2s ease-in-out;
65
+ text-decoration: none;
66
+ border: none;
67
+ }
68
+
69
+ .proposal-preview-btn:disabled {
70
+ opacity: 0.5;
71
+ cursor: not-allowed;
72
+ }
73
+
74
+ .proposal-preview-btn.secondary {
75
+ background: white;
76
+ color: #6b7280;
77
+ border: 1px solid #d1d5db;
78
+ }
79
+
80
+ .proposal-preview-btn.secondary:hover:not(:disabled) {
81
+ background: #f9fafb;
82
+ border-color: #9ca3af;
83
+ }
84
+
85
+ .proposal-preview-btn.outline {
86
+ background: #f0fdf4;
87
+ color: #3cbf7d;
88
+ border: 1px solid #3cbf7d;
89
+ }
90
+
91
+ .proposal-preview-btn.outline:hover:not(:disabled) {
92
+ background: #dcfce7;
93
+ border-color: #1b3933;
94
+ color: #1b3933;
95
+ }
96
+
97
+ .proposal-preview-btn.primary {
98
+ background: linear-gradient(135deg, #3cbf7d 0%, #2da967 100%);
99
+ color: white;
100
+ border: 1px solid #3cbf7d;
101
+ box-shadow: 0 2px 4px rgba(60, 191, 125, 0.2);
102
+ }
103
+
104
+ .proposal-preview-btn.primary:hover:not(:disabled) {
105
+ background: linear-gradient(135deg, #2da967 0%, #1b3933 100%);
106
+ border-color: #1b3933;
107
+ box-shadow: 0 4px 8px rgba(27, 57, 51, 0.3);
108
+ transform: translateY(-1px);
109
+ }
110
+
111
+ .proposal-preview-btn.primary:active {
112
+ transform: translateY(0);
113
+ }
114
+
115
+ .proposal-preview-content {
116
+ border: 1px solid #e5e7eb;
117
+ border-radius: 12px;
118
+ overflow: hidden;
119
+ background: white;
120
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.05);
121
+ }
122
+
123
+ .proposal-preview-loading {
124
+ display: flex;
125
+ align-items: center;
126
+ justify-content: center;
127
+ padding: 6rem 1rem;
128
+ }
129
+
130
+ .proposal-preview-loading-content {
131
+ text-align: center;
132
+ }
133
+
134
+ .proposal-preview-loading-icon {
135
+ margin: 0 auto 1rem auto;
136
+ color: #6b7280;
137
+ animation: spin 1s linear infinite;
138
+ }
139
+
140
+ @keyframes spin {
141
+ from { transform: rotate(0deg); }
142
+ to { transform: rotate(360deg); }
143
+ }
144
+
145
+ .proposal-preview-loading-text {
146
+ color: #6b7280;
147
+ font-size: 0.875rem;
148
+ }
149
+
150
+ .proposal-preview-error {
151
+ display: flex;
152
+ align-items: center;
153
+ justify-content: center;
154
+ padding: 6rem 1rem;
155
+ }
156
+
157
+ .proposal-preview-error-content {
158
+ text-align: center;
159
+ }
160
+
161
+ .proposal-preview-error-icon {
162
+ font-size: 2rem;
163
+ margin-bottom: 1rem;
164
+ }
165
+
166
+ .proposal-preview-error-title {
167
+ font-size: 1.125rem;
168
+ font-weight: 500;
169
+ color: #1f2937;
170
+ margin-bottom: 0.5rem;
171
+ }
172
+
173
+ .proposal-preview-error-message {
174
+ color: #6b7280;
175
+ margin-bottom: 1rem;
176
+ }
177
+
178
+ .proposal-preview-header {
179
+ padding: 1.5rem;
180
+ border-bottom: 1px solid #e5e7eb;
181
+ background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
182
+ }
183
+
184
+ .proposal-preview-header-content {
185
+ display: flex;
186
+ align-items: center;
187
+ justify-content: space-between;
188
+ }
189
+
190
+ .proposal-preview-header-info h3 {
191
+ font-size: 1rem;
192
+ font-weight: 600;
193
+ color: #1f2937;
194
+ margin: 0 0 0.25rem 0;
195
+ }
196
+
197
+ .proposal-preview-header-meta {
198
+ font-size: 0.875rem;
199
+ color: #6b7280;
200
+ margin: 0;
201
+ }
202
+
203
+ .proposal-preview-header-timestamp {
204
+ font-size: 0.875rem;
205
+ color: #6b7280;
206
+ }
207
+
208
+ .proposal-preview-body {
209
+ max-height: 32rem;
210
+ overflow-y: auto;
211
+ }
212
+
213
+ .proposal-preview-prose {
214
+ padding: 2rem;
215
+ max-width: none;
216
+ font-size: 0.875rem;
217
+ line-height: 1.6;
218
+ color: #374151;
219
+ }
220
+
221
+ /* Compact HTML content styling for proposal previews */
222
+ .proposal-preview-prose h1,
223
+ .proposal-preview-prose h2,
224
+ .proposal-preview-prose h3,
225
+ .proposal-preview-prose h4,
226
+ .proposal-preview-prose h5,
227
+ .proposal-preview-prose h6 {
228
+ font-size: 0.95rem !important;
229
+ line-height: 1.2 !important;
230
+ margin: 0 0 0.5rem 0 !important;
231
+ font-weight: 600;
232
+ color: #374151 !important;
233
+ }
234
+
235
+ .proposal-preview-prose p {
236
+ font-size: 0.875rem !important;
237
+ line-height: 1.4 !important;
238
+ margin: 0 0 0.5rem 0 !important;
239
+ color: #374151 !important;
240
+ }
241
+
242
+ .proposal-preview-prose ul,
243
+ .proposal-preview-prose ol {
244
+ font-size: 0.875rem !important;
245
+ line-height: 1.4 !important;
246
+ margin: 0 0 0.5rem 1rem !important;
247
+ padding: 0;
248
+ color: #374151 !important;
249
+ }
250
+
251
+ .proposal-preview-prose li {
252
+ margin: 0 !important;
253
+ padding: 0 !important;
254
+ font-size: 0.875rem !important;
255
+ line-height: 1.4 !important;
256
+ }
257
+
258
+ .proposal-preview-section {
259
+ border-bottom: 1px solid #f3f4f6;
260
+ padding-bottom: 1.5rem;
261
+ margin-bottom: 1.5rem;
262
+ }
263
+
264
+ .proposal-preview-section:last-child {
265
+ border-bottom: none;
266
+ margin-bottom: 0;
267
+ padding-bottom: 0;
268
+ }
269
+
270
+ .proposal-preview-section-title {
271
+ font-size: 1.125rem;
272
+ font-weight: 600;
273
+ color: #1f2937;
274
+ margin: 0 0 0.75rem 0;
275
+ }
276
+
277
+ .proposal-preview-section-content {
278
+ color: #4b5563;
279
+ line-height: 1.6;
280
+ }
281
+
282
+ /* Compact HTML content styling for individual section content */
283
+ .proposal-preview-section-content h1,
284
+ .proposal-preview-section-content h2,
285
+ .proposal-preview-section-content h3,
286
+ .proposal-preview-section-content h4,
287
+ .proposal-preview-section-content h5,
288
+ .proposal-preview-section-content h6 {
289
+ font-size: 0.95rem !important;
290
+ line-height: 1.2 !important;
291
+ margin: 0 0 0.5rem 0 !important;
292
+ font-weight: 600;
293
+ color: #4b5563 !important;
294
+ }
295
+
296
+ .proposal-preview-section-content p {
297
+ font-size: 0.875rem !important;
298
+ line-height: 1.4 !important;
299
+ margin: 0 0 0.5rem 0 !important;
300
+ color: #4b5563 !important;
301
+ }
302
+
303
+ .proposal-preview-section-content ul,
304
+ .proposal-preview-section-content ol {
305
+ font-size: 0.875rem !important;
306
+ line-height: 1.4 !important;
307
+ margin: 0 0 0.5rem 1rem !important;
308
+ padding: 0;
309
+ color: #4b5563 !important;
310
+ }
311
+
312
+ .proposal-preview-section-content li {
313
+ margin: 0 !important;
314
+ padding: 0 !important;
315
+ font-size: 0.875rem !important;
316
+ line-height: 1.4 !important;
317
+ }
318
+
319
+ .proposal-preview-empty {
320
+ text-align: center;
321
+ padding: 3rem 1rem;
322
+ color: #9ca3af;
323
+ }
324
+
325
+ .proposal-preview-footer {
326
+ padding: 1.5rem;
327
+ border-top: 1px solid #e5e7eb;
328
+ background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
329
+ }
330
+
331
+ .proposal-preview-footer-tags {
332
+ display: flex;
333
+ flex-wrap: wrap;
334
+ gap: 0.5rem;
335
+ }
336
+
337
+ .proposal-preview-section-tag {
338
+ padding: 0.375rem 0.75rem;
339
+ font-size: 0.75rem;
340
+ font-weight: 500;
341
+ background: #f3f4f6;
342
+ color: #4b5563;
343
+ border-radius: 20px;
344
+ border: 1px solid #d1d5db;
345
+ }
346
+
347
+ .proposal-preview-variables {
348
+ background: linear-gradient(135deg, #f0fdf4 0%, #dcfce7 100%);
349
+ border: 1px solid #bbf7d0;
350
+ border-radius: 12px;
351
+ padding: 1.5rem;
352
+ box-shadow: 0 2px 4px rgba(34, 197, 94, 0.1);
353
+ }
354
+
355
+ .proposal-preview-variables-title {
356
+ font-size: 1rem;
357
+ font-weight: 600;
358
+ color: #3cbf7d;
359
+ margin: 0 0 0.75rem 0;
360
+ }
361
+
362
+ .proposal-preview-variables-list {
363
+ display: flex;
364
+ flex-wrap: wrap;
365
+ gap: 0.5rem;
366
+ }
367
+
368
+ .proposal-preview-variable-tag {
369
+ padding: 0.375rem 0.75rem;
370
+ font-size: 0.75rem;
371
+ font-weight: 500;
372
+ background: #bbf7d0;
373
+ color: #1b3933;
374
+ border-radius: 20px;
375
+ border: 1px solid #86efac;
376
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
377
+ }
378
+
379
+ .proposal-preview-no-template {
380
+ text-align: center;
381
+ padding: 3rem 1rem;
382
+ }
383
+
384
+ .proposal-preview-no-template-icon {
385
+ margin: 0 auto 1rem auto;
386
+ color: #d1d5db;
387
+ }
388
+
389
+ .proposal-preview-no-template-title {
390
+ font-size: 1.125rem;
391
+ font-weight: 500;
392
+ color: #6b7280;
393
+ margin: 0 0 0.5rem 0;
394
+ }
395
+
396
+ .proposal-preview-no-template-text {
397
+ color: #9ca3af;
398
+ margin: 0;
399
+ }
400
+
401
+ /* Responsive Design */
402
+ @media (max-width: 768px) {
403
+ .proposal-preview-controls {
404
+ flex-direction: column;
405
+ align-items: stretch;
406
+ gap: 1rem;
407
+ padding: 1rem;
408
+ }
409
+
410
+ .proposal-preview-branding-section {
411
+ justify-content: center;
412
+ }
413
+
414
+ .proposal-preview-actions {
415
+ justify-content: center;
416
+ flex-wrap: wrap;
417
+ }
418
+
419
+ .proposal-preview-btn {
420
+ flex: 1;
421
+ justify-content: center;
422
+ min-width: auto;
423
+ }
424
+
425
+ .proposal-preview-header-content {
426
+ flex-direction: column;
427
+ align-items: flex-start;
428
+ gap: 0.5rem;
429
+ }
430
+
431
+ .proposal-preview-prose {
432
+ padding: 1rem;
433
+ }
434
+
435
+ .proposal-preview-variables {
436
+ padding: 1rem;
437
+ }
438
+ }