@visns-studio/visns-components 5.11.4 → 5.11.6

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,206 @@
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
+
1
204
  .grid {
2
205
  width: 100%;
3
206
  display: flex;
@@ -0,0 +1,364 @@
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
+ .proposal-preview-section {
222
+ border-bottom: 1px solid #f3f4f6;
223
+ padding-bottom: 1.5rem;
224
+ margin-bottom: 1.5rem;
225
+ }
226
+
227
+ .proposal-preview-section:last-child {
228
+ border-bottom: none;
229
+ margin-bottom: 0;
230
+ padding-bottom: 0;
231
+ }
232
+
233
+ .proposal-preview-section-title {
234
+ font-size: 1.125rem;
235
+ font-weight: 600;
236
+ color: #1f2937;
237
+ margin: 0 0 0.75rem 0;
238
+ }
239
+
240
+ .proposal-preview-section-content {
241
+ color: #4b5563;
242
+ line-height: 1.6;
243
+ }
244
+
245
+ .proposal-preview-empty {
246
+ text-align: center;
247
+ padding: 3rem 1rem;
248
+ color: #9ca3af;
249
+ }
250
+
251
+ .proposal-preview-footer {
252
+ padding: 1.5rem;
253
+ border-top: 1px solid #e5e7eb;
254
+ background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
255
+ }
256
+
257
+ .proposal-preview-footer-tags {
258
+ display: flex;
259
+ flex-wrap: wrap;
260
+ gap: 0.5rem;
261
+ }
262
+
263
+ .proposal-preview-section-tag {
264
+ padding: 0.375rem 0.75rem;
265
+ font-size: 0.75rem;
266
+ font-weight: 500;
267
+ background: #f3f4f6;
268
+ color: #4b5563;
269
+ border-radius: 20px;
270
+ border: 1px solid #d1d5db;
271
+ }
272
+
273
+ .proposal-preview-variables {
274
+ background: linear-gradient(135deg, #f0fdf4 0%, #dcfce7 100%);
275
+ border: 1px solid #bbf7d0;
276
+ border-radius: 12px;
277
+ padding: 1.5rem;
278
+ box-shadow: 0 2px 4px rgba(34, 197, 94, 0.1);
279
+ }
280
+
281
+ .proposal-preview-variables-title {
282
+ font-size: 1rem;
283
+ font-weight: 600;
284
+ color: #3cbf7d;
285
+ margin: 0 0 0.75rem 0;
286
+ }
287
+
288
+ .proposal-preview-variables-list {
289
+ display: flex;
290
+ flex-wrap: wrap;
291
+ gap: 0.5rem;
292
+ }
293
+
294
+ .proposal-preview-variable-tag {
295
+ padding: 0.375rem 0.75rem;
296
+ font-size: 0.75rem;
297
+ font-weight: 500;
298
+ background: #bbf7d0;
299
+ color: #1b3933;
300
+ border-radius: 20px;
301
+ border: 1px solid #86efac;
302
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
303
+ }
304
+
305
+ .proposal-preview-no-template {
306
+ text-align: center;
307
+ padding: 3rem 1rem;
308
+ }
309
+
310
+ .proposal-preview-no-template-icon {
311
+ margin: 0 auto 1rem auto;
312
+ color: #d1d5db;
313
+ }
314
+
315
+ .proposal-preview-no-template-title {
316
+ font-size: 1.125rem;
317
+ font-weight: 500;
318
+ color: #6b7280;
319
+ margin: 0 0 0.5rem 0;
320
+ }
321
+
322
+ .proposal-preview-no-template-text {
323
+ color: #9ca3af;
324
+ margin: 0;
325
+ }
326
+
327
+ /* Responsive Design */
328
+ @media (max-width: 768px) {
329
+ .proposal-preview-controls {
330
+ flex-direction: column;
331
+ align-items: stretch;
332
+ gap: 1rem;
333
+ padding: 1rem;
334
+ }
335
+
336
+ .proposal-preview-branding-section {
337
+ justify-content: center;
338
+ }
339
+
340
+ .proposal-preview-actions {
341
+ justify-content: center;
342
+ flex-wrap: wrap;
343
+ }
344
+
345
+ .proposal-preview-btn {
346
+ flex: 1;
347
+ justify-content: center;
348
+ min-width: auto;
349
+ }
350
+
351
+ .proposal-preview-header-content {
352
+ flex-direction: column;
353
+ align-items: flex-start;
354
+ gap: 0.5rem;
355
+ }
356
+
357
+ .proposal-preview-prose {
358
+ padding: 1rem;
359
+ }
360
+
361
+ .proposal-preview-variables {
362
+ padding: 1rem;
363
+ }
364
+ }