@visns-studio/visns-components 5.15.10 → 5.15.12

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.
@@ -0,0 +1,321 @@
1
+ .multiCheckbox {
2
+ width: 100%;
3
+ border: 1px solid #e2e8f0;
4
+ border-radius: 8px;
5
+ padding: 16px;
6
+ background: white;
7
+ min-height: 100px;
8
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
9
+
10
+ .searchContainer {
11
+ display: flex;
12
+ align-items: center;
13
+ margin-bottom: 12px;
14
+ position: relative;
15
+
16
+ .searchIcon {
17
+ position: absolute;
18
+ right: 12px;
19
+ top: 50%;
20
+ transform: translateY(-50%);
21
+ color: #6b7280;
22
+ z-index: 1;
23
+ pointer-events: none;
24
+ }
25
+
26
+ .searchInput {
27
+ width: 100%;
28
+ padding: 12px 45px 12px 16px;
29
+ border: 1px solid #d1d5db;
30
+ border-radius: 8px;
31
+ font-size: 14px;
32
+ background: #f8fafc;
33
+ transition: all 0.2s ease;
34
+
35
+ &:focus {
36
+ outline: none;
37
+ border-color: #3b82f6;
38
+ box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
39
+ background: white;
40
+ }
41
+
42
+ &::placeholder {
43
+ color: #94a3b8;
44
+ }
45
+ }
46
+ }
47
+
48
+ .createSection {
49
+ margin-bottom: 12px;
50
+
51
+ .createButton {
52
+ display: flex;
53
+ align-items: center;
54
+ gap: 8px;
55
+ padding: 12px 16px;
56
+ background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
57
+ border: 2px dashed #cbd5e1;
58
+ border-radius: 8px;
59
+ color: #475569;
60
+ cursor: pointer;
61
+ transition: all 0.2s ease;
62
+ font-size: 14px;
63
+ font-weight: 600;
64
+ width: 100%;
65
+ justify-content: center;
66
+
67
+ &:hover {
68
+ background: linear-gradient(135deg, #e2e8f0 0%, #cbd5e1 100%);
69
+ border-color: #3b82f6;
70
+ color: #3b82f6;
71
+ transform: translateY(-1px);
72
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
73
+ }
74
+ }
75
+
76
+ .createForm {
77
+ display: flex;
78
+ gap: 8px;
79
+ align-items: center;
80
+
81
+ .createInput {
82
+ flex: 1;
83
+ padding: 10px 12px;
84
+ border: 1px solid #d1d5db;
85
+ border-radius: 6px;
86
+ font-size: 14px;
87
+ transition: all 0.2s ease;
88
+
89
+ &:focus {
90
+ outline: none;
91
+ border-color: #3b82f6;
92
+ box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
93
+ }
94
+ }
95
+ }
96
+ }
97
+
98
+ .checkboxGrid {
99
+ display: grid;
100
+ gap: 8px;
101
+ margin-bottom: 12px;
102
+
103
+ .checkboxItem {
104
+ .checkboxLabel {
105
+ display: flex;
106
+ align-items: center;
107
+ gap: 10px;
108
+ padding: 10px 12px;
109
+ border: 1px solid #e2e8f0;
110
+ border-radius: 6px;
111
+ cursor: pointer;
112
+ transition: all 0.2s ease;
113
+ position: relative;
114
+ background: #fafbfc;
115
+
116
+ &:hover {
117
+ background: #f1f5f9;
118
+ border-color: #3b82f6;
119
+ transform: translateY(-1px);
120
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
121
+
122
+ .editButton {
123
+ opacity: 1;
124
+ }
125
+ }
126
+
127
+ .checkbox {
128
+ margin: 0;
129
+ cursor: pointer;
130
+ width: 18px;
131
+ height: 18px;
132
+ accent-color: #3b82f6;
133
+
134
+ &:checked + .labelText {
135
+ font-weight: 600;
136
+ color: #1e40af;
137
+ }
138
+ }
139
+
140
+ .labelText {
141
+ flex: 1;
142
+ font-size: 14px;
143
+ color: #374151;
144
+ user-select: none;
145
+ line-height: 1.4;
146
+ font-weight: 500;
147
+ }
148
+
149
+ .editButton {
150
+ opacity: 0;
151
+ padding: 6px;
152
+ background: none;
153
+ border: none;
154
+ color: #6b7280;
155
+ cursor: pointer;
156
+ border-radius: 6px;
157
+ transition: all 0.2s ease;
158
+
159
+ &:hover {
160
+ background: #e2e8f0;
161
+ color: #374151;
162
+ transform: scale(1.1);
163
+ }
164
+ }
165
+ }
166
+
167
+ .editForm {
168
+ display: flex;
169
+ gap: 6px;
170
+ align-items: center;
171
+
172
+ .editInput {
173
+ flex: 1;
174
+ padding: 8px 12px;
175
+ border: 1px solid #d1d5db;
176
+ border-radius: 6px;
177
+ font-size: 14px;
178
+ transition: all 0.2s ease;
179
+
180
+ &:focus {
181
+ outline: none;
182
+ border-color: #3b82f6;
183
+ box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
184
+ }
185
+ }
186
+ }
187
+ }
188
+ }
189
+
190
+ .saveButton {
191
+ padding: 8px;
192
+ background: #3b82f6;
193
+ color: white;
194
+ border: none;
195
+ border-radius: 6px;
196
+ cursor: pointer;
197
+ transition: all 0.2s ease;
198
+ display: flex;
199
+ align-items: center;
200
+ justify-content: center;
201
+ min-width: 32px;
202
+ height: 32px;
203
+
204
+ &:hover:not(:disabled) {
205
+ background: #2563eb;
206
+ transform: scale(1.05);
207
+ }
208
+
209
+ &:disabled {
210
+ background: #9ca3af;
211
+ cursor: not-allowed;
212
+ opacity: 0.6;
213
+ }
214
+ }
215
+
216
+ .cancelButton {
217
+ padding: 8px;
218
+ background: #f1f5f9;
219
+ color: #64748b;
220
+ border: none;
221
+ border-radius: 6px;
222
+ cursor: pointer;
223
+ transition: all 0.2s ease;
224
+ display: flex;
225
+ align-items: center;
226
+ justify-content: center;
227
+
228
+ &:hover {
229
+ background: #e2e8f0;
230
+ color: #475569;
231
+ }
232
+ }
233
+
234
+ .noOptions {
235
+ text-align: center;
236
+ padding: 24px 20px;
237
+ color: #64748b;
238
+ font-size: 14px;
239
+ background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
240
+ border-radius: 8px;
241
+ border: 2px dashed #cbd5e1;
242
+ margin: 12px 0;
243
+ line-height: 1.5;
244
+
245
+ .createFromSearch {
246
+ display: block;
247
+ margin: 16px auto 0;
248
+ padding: 10px 20px;
249
+ background: #3b82f6;
250
+ color: white;
251
+ border: none;
252
+ border-radius: 6px;
253
+ font-size: 13px;
254
+ font-weight: 600;
255
+ cursor: pointer;
256
+ transition: all 0.2s ease;
257
+ box-shadow: 0 2px 4px rgba(59, 130, 246, 0.2);
258
+ max-width: fit-content;
259
+
260
+ &:hover {
261
+ background: #2563eb;
262
+ transform: translateY(-1px);
263
+ box-shadow: 0 4px 8px rgba(59, 130, 246, 0.3);
264
+ }
265
+ }
266
+ }
267
+
268
+ .selectedCount {
269
+ padding: 10px 16px;
270
+ background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 100%);
271
+ border: 2px solid #3b82f6;
272
+ border-radius: 8px;
273
+ color: #1e40af;
274
+ font-size: 13px;
275
+ font-weight: 600;
276
+ text-align: center;
277
+ margin-top: 12px;
278
+ box-shadow: 0 2px 4px rgba(59, 130, 246, 0.1);
279
+ position: relative;
280
+
281
+ &::before {
282
+ content: "✓";
283
+ display: inline-block;
284
+ margin-right: 6px;
285
+ color: #3b82f6;
286
+ font-weight: bold;
287
+ }
288
+ }
289
+ }
290
+
291
+ // Responsive adjustments
292
+ @media (max-width: 768px) {
293
+ .multiCheckbox {
294
+ .checkboxGrid {
295
+ grid-template-columns: 1fr !important;
296
+ }
297
+
298
+ .createForm {
299
+ flex-direction: column;
300
+ align-items: stretch;
301
+
302
+ .createInput {
303
+ margin-bottom: 8px;
304
+ }
305
+
306
+ .saveButton, .cancelButton {
307
+ align-self: stretch;
308
+ justify-content: center;
309
+ }
310
+ }
311
+
312
+ .editForm {
313
+ flex-direction: column;
314
+ align-items: stretch;
315
+
316
+ .editInput {
317
+ margin-bottom: 6px;
318
+ }
319
+ }
320
+ }
321
+ }
@@ -0,0 +1,143 @@
1
+ .connectionStatus {
2
+ padding: 12px;
3
+ border-radius: 8px;
4
+ border: 1px solid #e9ecef;
5
+ background: #f8f9fa;
6
+
7
+ &.connected {
8
+ border-color: #28a745;
9
+ background: #d4edda;
10
+ }
11
+
12
+ &.expired {
13
+ border-color: #ffc107;
14
+ background: #fff3cd;
15
+ }
16
+
17
+ &.error {
18
+ border-color: #dc3545;
19
+ background: #f8d7da;
20
+ }
21
+
22
+ &.disconnected {
23
+ border-color: #6c757d;
24
+ background: #e9ecef;
25
+ }
26
+
27
+ .statusHeader {
28
+ display: flex;
29
+ align-items: center;
30
+ gap: 8px;
31
+
32
+ .icon {
33
+ font-size: 1.2rem;
34
+ }
35
+
36
+ .message {
37
+ font-weight: 500;
38
+ color: #333;
39
+ }
40
+ }
41
+
42
+ .statusDetails {
43
+ margin-top: 12px;
44
+ font-size: 0.9rem;
45
+
46
+ .detail {
47
+ display: flex;
48
+ justify-content: space-between;
49
+ align-items: center;
50
+ margin-bottom: 6px;
51
+
52
+ &:last-child {
53
+ margin-bottom: 0;
54
+ }
55
+
56
+ .label {
57
+ color: #666;
58
+ font-weight: 500;
59
+ }
60
+
61
+ .value {
62
+ color: #333;
63
+
64
+ &.pending {
65
+ color: #6c757d;
66
+ }
67
+
68
+ &.syncing {
69
+ color: #007bff;
70
+ font-weight: 500;
71
+ }
72
+
73
+ &.completed {
74
+ color: #28a745;
75
+ }
76
+
77
+ &.error {
78
+ color: #dc3545;
79
+ }
80
+ }
81
+ }
82
+ }
83
+
84
+ // Compact version
85
+ &.compact {
86
+ padding: 8px 12px;
87
+ display: flex;
88
+ align-items: center;
89
+ gap: 12px;
90
+ background: white;
91
+ border-radius: 6px;
92
+
93
+ .icon {
94
+ font-size: 1rem;
95
+ }
96
+
97
+ .provider {
98
+ font-weight: 500;
99
+ color: #333;
100
+ min-width: 120px;
101
+ }
102
+
103
+ .status {
104
+ color: #666;
105
+ font-size: 0.85rem;
106
+ }
107
+
108
+ &.connected .status {
109
+ color: #28a745;
110
+ }
111
+
112
+ &.expired .status {
113
+ color: #ffc107;
114
+ }
115
+
116
+ &.error .status {
117
+ color: #dc3545;
118
+ }
119
+ }
120
+ }
121
+
122
+ // Responsive design
123
+ @media (max-width: 768px) {
124
+ .connectionStatus {
125
+ &.compact {
126
+ flex-direction: column;
127
+ align-items: flex-start;
128
+ gap: 4px;
129
+
130
+ .provider {
131
+ min-width: auto;
132
+ }
133
+ }
134
+
135
+ .statusDetails {
136
+ .detail {
137
+ flex-direction: column;
138
+ align-items: flex-start;
139
+ gap: 2px;
140
+ }
141
+ }
142
+ }
143
+ }
@@ -0,0 +1,119 @@
1
+ .oauthManager {
2
+ max-width: 1200px;
3
+ margin: 0 auto;
4
+ padding: 0;
5
+
6
+ .header {
7
+ margin-bottom: 30px;
8
+ text-align: center;
9
+
10
+ h2 {
11
+ font-size: 2rem;
12
+ margin-bottom: 10px;
13
+ color: #333;
14
+ }
15
+
16
+ p {
17
+ color: #666;
18
+ font-size: 1.1rem;
19
+ }
20
+ }
21
+
22
+ .loading, .error, .empty {
23
+ text-align: center;
24
+ padding: 60px 20px;
25
+ color: #666;
26
+
27
+ .spinner {
28
+ width: 40px;
29
+ height: 40px;
30
+ border: 3px solid #f3f3f3;
31
+ border-top: 3px solid #007bff;
32
+ border-radius: 50%;
33
+ animation: spin 1s linear infinite;
34
+ margin: 0 auto 20px;
35
+ }
36
+
37
+ .retryButton {
38
+ margin-top: 20px;
39
+ padding: 10px 20px;
40
+ background: #007bff;
41
+ color: white;
42
+ border: none;
43
+ border-radius: 5px;
44
+ cursor: pointer;
45
+ font-size: 1rem;
46
+
47
+ &:hover {
48
+ background: #0056b3;
49
+ }
50
+ }
51
+ }
52
+
53
+ .providersGrid {
54
+ display: grid;
55
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
56
+ gap: 16px;
57
+ margin-bottom: 20px;
58
+
59
+ // Responsive grid adjustments
60
+ @media (min-width: 768px) {
61
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
62
+ gap: 20px;
63
+ }
64
+
65
+ @media (min-width: 1200px) {
66
+ grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
67
+ }
68
+
69
+ @media (min-width: 1600px) {
70
+ grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));
71
+ }
72
+ }
73
+
74
+ .statusOverview {
75
+ margin-top: 40px;
76
+ padding: 20px;
77
+ background: #f8f9fa;
78
+ border-radius: 8px;
79
+
80
+ h3 {
81
+ margin-bottom: 20px;
82
+ color: #333;
83
+ font-size: 1.3rem;
84
+ }
85
+
86
+ .statusList {
87
+ display: flex;
88
+ flex-direction: column;
89
+ gap: 10px;
90
+ }
91
+ }
92
+ }
93
+
94
+ @keyframes spin {
95
+ 0% { transform: rotate(0deg); }
96
+ 100% { transform: rotate(360deg); }
97
+ }
98
+
99
+ // Responsive design
100
+ @media (max-width: 768px) {
101
+ .oauthManager {
102
+ padding: 15px;
103
+
104
+ .providersGrid {
105
+ grid-template-columns: 1fr;
106
+ gap: 15px;
107
+ }
108
+
109
+ .header {
110
+ h2 {
111
+ font-size: 1.5rem;
112
+ }
113
+
114
+ p {
115
+ font-size: 1rem;
116
+ }
117
+ }
118
+ }
119
+ }