@visns-studio/visns-components 5.11.3 → 5.11.5

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.
@@ -126,6 +126,9 @@
126
126
  border: 1px solid rgba(var(--paragraph-color-rgb, 0, 0, 0), 0.1);
127
127
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
128
128
  margin-bottom: 1rem;
129
+ display: flex;
130
+ flex-direction: column;
131
+ gap: 0.5rem;
129
132
 
130
133
  p {
131
134
  margin: 0;
@@ -135,62 +138,91 @@
135
138
  }
136
139
  }
137
140
 
141
+ .autoCaptureToggle {
142
+ background: rgba(var(--paragraph-color-rgb, 0, 0, 0), 0.05);
143
+ color: var(--paragraph-color, #333);
144
+ border: 1px solid rgba(var(--paragraph-color-rgb, 0, 0, 0), 0.2);
145
+ border-radius: var(--br, 6px);
146
+ padding: 0.375rem 0.75rem;
147
+ font-size: 0.8rem;
148
+ font-weight: 600;
149
+ cursor: pointer;
150
+ transition: all 0.2s ease;
151
+ display: inline-flex;
152
+ align-items: center;
153
+ gap: 0.25rem;
154
+
155
+ &:hover {
156
+ background: rgba(var(--paragraph-color-rgb, 0, 0, 0), 0.1);
157
+ border-color: var(--primary-color, #007bff);
158
+ }
159
+
160
+ &.active {
161
+ background: var(--primary-color, #007bff);
162
+ color: white;
163
+ border-color: var(--primary-color, #007bff);
164
+
165
+ &:hover {
166
+ background: var(--primary-hover, #0056b3);
167
+ }
168
+ }
169
+ }
170
+
138
171
  .cameraControls {
139
172
  display: flex;
140
173
  flex-direction: column;
141
- gap: 1rem;
142
- padding: 1rem;
174
+ gap: 1.5rem;
175
+ padding: 1.5rem;
143
176
  }
144
177
 
145
178
  .captureButton {
146
179
  background: var(--primary-color, #007bff);
147
180
  color: white;
148
181
  border: none;
149
- border-radius: 50%;
150
- width: 80px;
151
- height: 80px;
182
+ border-radius: 12px;
183
+ padding: 1rem 1.5rem;
184
+ min-width: 120px;
185
+ height: 56px;
152
186
  display: flex;
153
- flex-direction: column;
154
187
  align-items: center;
155
188
  justify-content: center;
156
- gap: 0.25rem;
157
- font-size: 0.8rem;
189
+ gap: 0.5rem;
190
+ font-size: 0.9rem;
158
191
  font-weight: 600;
159
192
  cursor: pointer;
160
193
  transition: all 0.2s ease;
161
- box-shadow: 0 4px 12px rgba(var(--primary-color-rgb, 0, 123, 255), 0.3);
194
+ box-shadow: 0 4px 12px rgba(var(--primary-color-rgb, 0, 123, 255), 0.25);
195
+ position: relative;
162
196
 
163
197
  &:hover:not(:disabled) {
164
198
  background: var(--primary-hover, #0056b3);
165
- transform: scale(1.05);
166
- box-shadow: 0 6px 16px rgba(var(--primary-color-rgb, 0, 123, 255), 0.4);
199
+ transform: translateY(-2px);
200
+ box-shadow: 0 6px 20px rgba(var(--primary-color-rgb, 0, 123, 255), 0.35);
201
+ }
202
+
203
+ &:active {
204
+ transform: translateY(0);
205
+ transition: transform 0.1s ease;
167
206
  }
168
207
 
169
208
  &:disabled {
170
209
  opacity: 0.6;
171
210
  cursor: not-allowed;
211
+ transform: none;
212
+ box-shadow: 0 2px 8px rgba(var(--primary-color-rgb, 0, 123, 255), 0.15);
172
213
  }
173
214
 
174
215
  &.focusing {
175
- animation: pulse 1s infinite;
176
- }
177
- padding: 0.5rem 1.25rem;
178
- font-size: 0.9rem;
179
- font-weight: var(--h-weight, 600);
180
- cursor: pointer;
181
- display: flex;
182
- align-items: center;
183
- gap: 0.375rem;
184
- transition: all 0.2s cubic-bezier(0.85, 0, 0.15, 1);
185
-
186
- &:hover {
187
- background: var(--primary-color-dark, #0056b3);
188
- transform: translateY(-1px);
189
- box-shadow: 0 2px 8px rgba(var(--primary-color-rgb, 0, 123, 255), 0.25);
190
- }
191
-
192
- &:active {
193
- transform: translateY(0);
216
+ background: var(--primary-hover, #0056b3);
217
+
218
+ &::after {
219
+ content: '';
220
+ position: absolute;
221
+ inset: -2px;
222
+ border: 2px solid var(--primary-color, #007bff);
223
+ border-radius: 14px;
224
+ animation: focusPulse 1.5s ease-in-out infinite;
225
+ }
194
226
  }
195
227
  }
196
228
 
@@ -570,23 +602,35 @@
570
602
  }
571
603
 
572
604
  .secondaryButton {
573
- background: var(--highlight-color, #f8f9fa);
605
+ background: rgba(255, 255, 255, 0.95);
574
606
  color: var(--paragraph-color, #333);
575
- border: 1px solid rgba(var(--paragraph-color-rgb, 0, 0, 0), 0.2);
576
- border-radius: var(--br, 8px);
577
- padding: 0.5rem 1rem;
578
- font-size: 0.9rem;
579
- font-weight: var(--h-weight, 500);
580
- cursor: pointer;
607
+ border: 1px solid rgba(var(--paragraph-color-rgb, 0, 0, 0), 0.15);
608
+ border-radius: 12px;
609
+ padding: 0.75rem 1rem;
610
+ min-width: 100px;
611
+ height: 56px;
581
612
  display: flex;
582
613
  align-items: center;
583
- gap: 0.375rem;
584
- transition: all 0.2s cubic-bezier(0.85, 0, 0.15, 1);
585
-
614
+ justify-content: center;
615
+ gap: 0.5rem;
616
+ font-size: 0.85rem;
617
+ font-weight: 600;
618
+ cursor: pointer;
619
+ transition: all 0.2s ease;
620
+ backdrop-filter: blur(12px);
621
+ box-shadow: 0 3px 10px rgba(0, 0, 0, 0.1);
622
+
586
623
  &:hover {
587
- background: var(--bg-color, white);
624
+ background: rgba(255, 255, 255, 1);
588
625
  border-color: var(--primary-color, #007bff);
589
- box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);
626
+ color: var(--primary-color, #007bff);
627
+ transform: translateY(-2px);
628
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);
629
+ }
630
+
631
+ &:active {
632
+ transform: translateY(0);
633
+ transition: transform 0.1s ease;
590
634
  }
591
635
  }
592
636
 
@@ -605,16 +649,68 @@
605
649
  .cameraControls {
606
650
  flex-direction: column;
607
651
  width: 100%;
608
-
609
- button {
610
- width: 100%;
611
- justify-content: center;
612
- }
652
+ gap: 1.5rem;
653
+ }
654
+
655
+ .controlsTop {
656
+ padding: 0 0.5rem;
613
657
  }
614
658
 
615
659
  .captureButton {
616
- padding: 0.6rem 1.5rem;
617
- font-size: 1rem;
660
+ min-width: 100px;
661
+ height: 48px;
662
+ font-size: 0.8rem;
663
+ padding: 0.75rem 1rem;
664
+ }
665
+
666
+ .controlButton {
667
+ min-width: 44px;
668
+ height: 44px;
669
+ padding: 0.625rem;
670
+ }
671
+
672
+ .secondaryButton {
673
+ min-width: 90px;
674
+ height: 48px;
675
+ font-size: 0.8rem;
676
+ padding: 0.75rem 0.875rem;
677
+ }
678
+
679
+ .controlsBottom {
680
+ gap: 0.75rem;
681
+ padding: 0.75rem;
682
+ }
683
+
684
+ .countdownDisplay {
685
+ padding: 1rem;
686
+
687
+ .countdownNumber {
688
+ font-size: 2rem;
689
+ }
690
+
691
+ .countdownText {
692
+ font-size: 0.7rem;
693
+ }
694
+ }
695
+
696
+ .focusStatus {
697
+ min-width: 160px;
698
+ padding: 0.5rem 0.75rem;
699
+ bottom: -35px;
700
+
701
+ .focusText {
702
+ font-size: 0.65rem;
703
+ }
704
+ }
705
+
706
+ .autoCaptureToggle {
707
+ font-size: 0.75rem;
708
+ padding: 0.375rem 0.75rem;
709
+ }
710
+
711
+ .cameraControls {
712
+ gap: 1rem;
713
+ padding: 1rem;
618
714
  }
619
715
 
620
716
  .previewControls,
@@ -938,68 +1034,76 @@
938
1034
  // Enhanced Camera UI Styles
939
1035
  .focusFrame {
940
1036
  position: relative;
941
- width: 90%;
942
- max-width: 500px;
1037
+ width: 85%;
1038
+ max-width: 400px;
943
1039
  aspect-ratio: 1.6; // Business card ratio
944
- border: 2px solid rgba(255, 255, 255, 0.8);
945
- border-radius: 12px;
1040
+ border: 2px solid rgba(255, 255, 255, 0.4);
1041
+ border-radius: 16px;
946
1042
  background: rgba(0, 0, 0, 0.05);
947
1043
  display: flex;
948
1044
  align-items: center;
949
1045
  justify-content: center;
1046
+ transition: all 0.3s ease;
950
1047
 
951
- &::before {
952
- content: '';
953
- position: absolute;
954
- top: -2px;
955
- left: -2px;
956
- right: -2px;
957
- bottom: -2px;
958
- border: 1px solid rgba(255, 255, 255, 0.4);
959
- border-radius: 14px;
960
- opacity: 0;
961
- animation: pulse 2s infinite;
1048
+ &.focused {
1049
+ border-color: #22c55e;
1050
+ background: rgba(34, 197, 94, 0.1);
1051
+ box-shadow: 0 0 0 4px rgba(34, 197, 94, 0.2);
1052
+
1053
+ .focusCorner {
1054
+ border-color: #22c55e;
1055
+ }
1056
+ }
1057
+
1058
+ &.countingDown {
1059
+ border-color: #f59e0b;
1060
+ background: rgba(245, 158, 11, 0.1);
1061
+ box-shadow: 0 0 0 4px rgba(245, 158, 11, 0.2);
1062
+
1063
+ .focusCorner {
1064
+ border-color: #f59e0b;
1065
+ }
962
1066
  }
963
1067
  }
964
1068
 
965
1069
  .focusCorner {
966
1070
  position: absolute;
967
- width: 50px;
968
- height: 50px;
969
- border: 4px solid rgba(255, 255, 255, 0.9);
1071
+ width: 24px;
1072
+ height: 24px;
1073
+ border: 2px solid rgba(255, 255, 255, 0.6);
970
1074
  background: transparent;
971
- box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
1075
+ transition: all 0.3s ease;
972
1076
 
973
1077
  &.topLeft {
974
- top: -25px;
975
- left: -25px;
1078
+ top: -12px;
1079
+ left: -12px;
976
1080
  border-right: none;
977
1081
  border-bottom: none;
978
- border-radius: 16px 0 0 0;
1082
+ border-radius: 8px 0 0 0;
979
1083
  }
980
1084
 
981
1085
  &.topRight {
982
- top: -25px;
983
- right: -25px;
1086
+ top: -12px;
1087
+ right: -12px;
984
1088
  border-left: none;
985
1089
  border-bottom: none;
986
- border-radius: 0 16px 0 0;
1090
+ border-radius: 0 8px 0 0;
987
1091
  }
988
1092
 
989
1093
  &.bottomLeft {
990
- bottom: -25px;
991
- left: -25px;
1094
+ bottom: -12px;
1095
+ left: -12px;
992
1096
  border-right: none;
993
1097
  border-top: none;
994
- border-radius: 0 0 0 16px;
1098
+ border-radius: 0 0 0 8px;
995
1099
  }
996
1100
 
997
1101
  &.bottomRight {
998
- bottom: -25px;
999
- right: -25px;
1102
+ bottom: -12px;
1103
+ right: -12px;
1000
1104
  border-left: none;
1001
1105
  border-top: none;
1002
- border-radius: 0 0 16px 0;
1106
+ border-radius: 0 0 8px 0;
1003
1107
  }
1004
1108
  }
1005
1109
 
@@ -1046,57 +1150,221 @@
1046
1150
 
1047
1151
  .controlsTop {
1048
1152
  display: flex;
1049
- justify-content: space-between;
1153
+ justify-content: center;
1050
1154
  align-items: center;
1051
- padding: 0 1rem;
1155
+ gap: 1rem;
1156
+ padding: 0;
1052
1157
  }
1053
1158
 
1054
1159
  .controlsBottom {
1055
1160
  display: flex;
1056
- justify-content: space-between;
1161
+ justify-content: center;
1057
1162
  align-items: center;
1058
1163
  gap: 1rem;
1164
+ padding: 1rem;
1165
+ background: rgba(255, 255, 255, 0.05);
1166
+ border-radius: 16px;
1167
+ backdrop-filter: blur(10px);
1168
+ border: 1px solid rgba(255, 255, 255, 0.1);
1059
1169
  }
1060
1170
 
1061
1171
  .controlButton {
1062
- background: rgba(0, 0, 0, 0.6);
1063
- color: white;
1064
- border: none;
1065
- border-radius: 50%;
1066
- width: 48px;
1172
+ background: rgba(255, 255, 255, 0.9);
1173
+ color: var(--paragraph-color, #333);
1174
+ border: 1px solid rgba(var(--paragraph-color-rgb, 0, 0, 0), 0.15);
1175
+ border-radius: 8px;
1176
+ padding: 0.75rem;
1177
+ min-width: 48px;
1067
1178
  height: 48px;
1068
1179
  display: flex;
1069
1180
  align-items: center;
1070
1181
  justify-content: center;
1071
1182
  cursor: pointer;
1072
1183
  transition: all 0.2s ease;
1073
- backdrop-filter: blur(8px);
1184
+ backdrop-filter: blur(12px);
1185
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
1074
1186
 
1075
1187
  &:hover {
1076
- background: rgba(0, 0, 0, 0.8);
1077
- transform: scale(1.05);
1188
+ background: rgba(255, 255, 255, 1);
1189
+ border-color: var(--primary-color, #007bff);
1190
+ color: var(--primary-color, #007bff);
1191
+ transform: translateY(-1px);
1192
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
1193
+ }
1194
+
1195
+ &:active {
1196
+ transform: translateY(0);
1197
+ transition: transform 0.1s ease;
1078
1198
  }
1079
1199
 
1080
1200
  &.active {
1081
1201
  background: var(--primary-color, #007bff);
1202
+ border-color: var(--primary-color, #007bff);
1082
1203
  color: white;
1204
+ box-shadow: 0 3px 10px rgba(var(--primary-color-rgb, 0, 123, 255), 0.3);
1083
1205
 
1084
1206
  &:hover {
1085
1207
  background: var(--primary-hover, #0056b3);
1208
+ border-color: var(--primary-hover, #0056b3);
1209
+ color: white;
1210
+ box-shadow: 0 4px 14px rgba(var(--primary-color-rgb, 0, 123, 255), 0.4);
1086
1211
  }
1087
1212
  }
1088
1213
  }
1089
1214
 
1090
- .placeholder {
1091
- width: 48px; // Same as controlButton for balance
1092
- }
1215
+ // Remove placeholder - not needed with centered layout
1093
1216
 
1094
1217
  @keyframes pulse {
1095
1218
  0%, 100% { opacity: 0; transform: scale(1); }
1096
1219
  50% { opacity: 0.3; transform: scale(1.02); }
1097
1220
  }
1098
1221
 
1222
+ @keyframes focusPulse {
1223
+ 0%, 100% {
1224
+ transform: scale(1);
1225
+ box-shadow: 0 4px 20px rgba(var(--primary-color-rgb, 0, 123, 255), 0.4);
1226
+ }
1227
+ 50% {
1228
+ transform: scale(1.02);
1229
+ box-shadow: 0 6px 25px rgba(var(--primary-color-rgb, 0, 123, 255), 0.6);
1230
+ }
1231
+ }
1232
+
1233
+ @keyframes ringPulse {
1234
+ 0%, 100% {
1235
+ opacity: 0.3;
1236
+ transform: scale(1);
1237
+ }
1238
+ 50% {
1239
+ opacity: 0.8;
1240
+ transform: scale(1.1);
1241
+ }
1242
+ }
1243
+
1099
1244
  @keyframes spin {
1100
1245
  from { transform: rotate(0deg); }
1101
1246
  to { transform: rotate(360deg); }
1102
1247
  }
1248
+
1249
+ @keyframes focusedPulse {
1250
+ 0%, 100% {
1251
+ opacity: 0.8;
1252
+ transform: scale(1);
1253
+ }
1254
+ 50% {
1255
+ opacity: 1;
1256
+ transform: scale(1.02);
1257
+ }
1258
+ }
1259
+
1260
+ @keyframes countdownPulse {
1261
+ 0%, 100% {
1262
+ transform: scale(1);
1263
+ box-shadow: 0 0 0 0 rgba(255, 152, 0, 0.7);
1264
+ }
1265
+ 50% {
1266
+ transform: scale(1.02);
1267
+ box-shadow: 0 0 0 10px rgba(255, 152, 0, 0);
1268
+ }
1269
+ }
1270
+
1271
+ // Countdown Display
1272
+ .countdownDisplay {
1273
+ position: absolute;
1274
+ top: 50%;
1275
+ left: 50%;
1276
+ transform: translate(-50%, -50%);
1277
+ background: rgba(0, 0, 0, 0.9);
1278
+ color: white;
1279
+ border-radius: 16px;
1280
+ padding: 1.5rem;
1281
+ display: flex;
1282
+ flex-direction: column;
1283
+ align-items: center;
1284
+ justify-content: center;
1285
+ backdrop-filter: blur(10px);
1286
+ border: 2px solid #f59e0b;
1287
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
1288
+ z-index: 10;
1289
+ }
1290
+
1291
+ .countdownNumber {
1292
+ font-size: 2.5rem;
1293
+ font-weight: 700;
1294
+ line-height: 1;
1295
+ margin-bottom: 0.5rem;
1296
+ }
1297
+
1298
+ .countdownText {
1299
+ font-size: 0.75rem;
1300
+ font-weight: 500;
1301
+ text-transform: uppercase;
1302
+ letter-spacing: 0.5px;
1303
+ opacity: 0.8;
1304
+ }
1305
+
1306
+ @keyframes countdownScale {
1307
+ 0%, 100% { transform: translate(-50%, -50%) scale(1); }
1308
+ 50% { transform: translate(-50%, -50%) scale(1.05); }
1309
+ }
1310
+
1311
+ // Focus Status
1312
+ .focusStatus {
1313
+ position: absolute;
1314
+ bottom: -40px;
1315
+ left: 50%;
1316
+ transform: translateX(-50%);
1317
+ display: flex;
1318
+ flex-direction: column;
1319
+ align-items: center;
1320
+ gap: 0.5rem;
1321
+ background: rgba(0, 0, 0, 0.9);
1322
+ color: white;
1323
+ padding: 0.75rem 1rem;
1324
+ border-radius: 12px;
1325
+ backdrop-filter: blur(10px);
1326
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2);
1327
+ min-width: 180px;
1328
+ text-align: center;
1329
+ border: 1px solid rgba(255, 255, 255, 0.1);
1330
+ }
1331
+
1332
+ .focusBar {
1333
+ width: 100%;
1334
+ height: 4px;
1335
+ background: rgba(255, 255, 255, 0.2);
1336
+ border-radius: 2px;
1337
+ overflow: hidden;
1338
+
1339
+ &.good {
1340
+ background: rgba(34, 197, 94, 0.3);
1341
+ }
1342
+
1343
+ &.poor {
1344
+ background: rgba(239, 68, 68, 0.3);
1345
+ }
1346
+ }
1347
+
1348
+ .focusBarFill {
1349
+ height: 100%;
1350
+ background: #22c55e;
1351
+ border-radius: 2px;
1352
+ transition: width 0.3s ease;
1353
+
1354
+ .focusBar.poor & {
1355
+ background: #ef4444;
1356
+ }
1357
+ }
1358
+
1359
+ .focusText {
1360
+ font-size: 0.7rem;
1361
+ font-weight: 500;
1362
+
1363
+ .focusBar.good ~ & {
1364
+ color: #22c55e;
1365
+ }
1366
+
1367
+ .focusBar.poor ~ & {
1368
+ color: #f59e0b;
1369
+ }
1370
+ }