react-ui-basics 0.0.204 → 0.0.205

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.
package/bundle.css CHANGED
@@ -293,15 +293,6 @@
293
293
  position: absolute;
294
294
  }
295
295
 
296
- .animated {
297
- transition: opacity 250ms ease;
298
- opacity: 0;
299
- }
300
-
301
- .animated.mounting, .animated.mounted {
302
- opacity: 1;
303
- }
304
-
305
296
  .Checkbox {
306
297
  position: relative;
307
298
  white-space: pre;
@@ -369,48 +360,6 @@
369
360
  background: rgba(0, 0, 0, 0.26);
370
361
  }
371
362
 
372
- .DialogModal {
373
- overflow: hidden;
374
- }
375
-
376
- .DialogModal .content {
377
- top: 20vh;
378
- }
379
-
380
- .Dialog {
381
- background-color: white;
382
- min-width: 460px;
383
- max-width: 40vw;
384
- padding: 15px;
385
- }
386
-
387
- .Dialog .title {
388
- margin-bottom: 15px;
389
- padding: 20px 50px 0px 30px;
390
- font-size: 1.25rem;
391
- line-height: 2rem;
392
- font-weight: 400;
393
- letter-spacing: 0.0125em;
394
- }
395
-
396
- .Dialog .description {
397
- color: rgba(0, 0, 0, 0.54);
398
- font-size: 1rem;
399
- line-height: 1.5rem;
400
- font-weight: 400;
401
- letter-spacing: 0.03125em;
402
- margin-top: 20px;
403
- padding: 0 24px 24px;
404
- }
405
-
406
- .Dialog > div.row {
407
- margin-bottom: 15px;
408
- }
409
-
410
- .Dialog > div.row:last-child {
411
- margin-bottom: 0;
412
- }
413
-
414
363
  .Button {
415
364
  position: relative;
416
365
  min-width: 64px;
@@ -577,19 +526,6 @@
577
526
  border: 0;
578
527
  }
579
528
 
580
- .CircleProgress {
581
- width: 48px;
582
- height: 48px;
583
- }
584
-
585
- .CircleProgress .line {
586
- stroke-width: 2px;
587
- stroke: black;
588
- stroke-linecap: square;
589
- fill: none;
590
- transition: stroke-dashoffset 0.2s ease;
591
- }
592
-
593
529
  .FilteredList {
594
530
  max-height: 250px;
595
531
  position: relative;
@@ -675,31 +611,115 @@
675
611
  margin-bottom: 8px;
676
612
  }
677
613
 
678
- .DropFileInput {
679
- flex-grow: 1;
614
+ .DialogModal {
615
+ overflow: hidden;
680
616
  }
681
617
 
682
- .DropFileInput .Dropzone {
683
- border: 1px dashed #808080;
684
- padding: 12px;
618
+ .DialogModal .content {
619
+ top: 20vh;
620
+ }
621
+
622
+ .Dialog {
623
+ background-color: white;
624
+ min-width: 460px;
625
+ max-width: 40vw;
626
+ padding: 15px;
627
+ }
628
+
629
+ .Dialog .title {
630
+ margin-bottom: 15px;
631
+ padding: 20px 50px 0px 30px;
632
+ font-size: 1.25rem;
633
+ line-height: 2rem;
634
+ font-weight: 400;
635
+ letter-spacing: 0.0125em;
636
+ }
637
+
638
+ .Dialog .description {
639
+ color: rgba(0, 0, 0, 0.54);
640
+ font-size: 1rem;
641
+ line-height: 1.5rem;
642
+ font-weight: 400;
643
+ letter-spacing: 0.03125em;
644
+ margin-top: 20px;
645
+ padding: 0 24px 24px;
646
+ }
647
+
648
+ .Dialog > div.row {
649
+ margin-bottom: 15px;
650
+ }
651
+
652
+ .Dialog > div.row:last-child {
653
+ margin-bottom: 0;
654
+ }
655
+
656
+ .FormUploadProgress {
657
+ position: absolute;
658
+ left: 0;
659
+ right: 0;
660
+ top: 0;
661
+ bottom: 0;
662
+ background-color: rgba(255, 255, 255, 0.6);
663
+ z-index: 2;
664
+ }
665
+
666
+ .FormUploadProgress.animated.mounting, .FormUploadProgress.animated.mounted {
667
+ transition-delay: 500ms;
668
+ }
669
+
670
+ .FormUploadProgress .wrapper {
671
+ position: sticky;
672
+ top: 40%;
673
+ margin-top: 40%;
674
+ margin-left: 50%;
675
+ transform: translateX(-50%);
685
676
  display: flex;
686
- flex-flow: row nowrap;
677
+ flex-flow: column;
687
678
  justify-content: center;
688
679
  align-items: center;
689
- color: gray;
690
- cursor: pointer;
691
- border-radius: 3px;
692
- font-weight: normal;
693
- line-height: 22px;
694
- font-size: 14px;
695
- color: #7E7E7E;
696
- max-width: 100%;
697
- word-break: break-all;
698
- word-break: break-word;
699
680
  }
700
681
 
701
- .DropFileInput .Dropzone .icon.withText {
702
- margin-right: 10px;
682
+ .FormUploadProgress .wrapper .CircleProgress, .FormUploadProgress .wrapper .SpinningProgress {
683
+ position: absolute;
684
+ width: 107px;
685
+ height: 107px;
686
+ top: 0;
687
+ left: 0;
688
+ }
689
+
690
+ .FormUploadProgress .wrapper .CircleProgress .line, .FormUploadProgress .wrapper .SpinningProgress .line {
691
+ stroke: #2196F3;
692
+ }
693
+
694
+ .FormUploadProgress .wrapper > .progress {
695
+ width: 107px;
696
+ height: 107px;
697
+ min-height: 107px;
698
+ display: flex;
699
+ justify-content: center;
700
+ align-items: center;
701
+ box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.25);
702
+ border-radius: 50%;
703
+ background: white;
704
+ position: relative;
705
+ }
706
+
707
+ .FormUploadProgress .wrapper > .progress > .value {
708
+ display: inline-block;
709
+ margin-top: 5px;
710
+ font-weight: bold;
711
+ line-height: 16px;
712
+ font-size: 13px;
713
+ text-align: center;
714
+ color: #818181;
715
+ }
716
+
717
+ .FormUploadProgress .wrapper .cancel {
718
+ min-width: 107px;
719
+ margin-top: 20px;
720
+ background-color: white;
721
+ color: #F96B5C;
722
+ box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.25);
703
723
  }
704
724
 
705
725
  .Button.FloatingActionButton {
@@ -726,6 +746,19 @@
726
746
  bottom: -100px;
727
747
  }
728
748
 
749
+ .CircleProgress {
750
+ width: 48px;
751
+ height: 48px;
752
+ }
753
+
754
+ .CircleProgress .line {
755
+ stroke-width: 2px;
756
+ stroke: black;
757
+ stroke-linecap: square;
758
+ fill: none;
759
+ transition: stroke-dashoffset 0.2s ease;
760
+ }
761
+
729
762
  .Scrollable {
730
763
  max-height: 250px;
731
764
  max-width: 250px;
@@ -821,343 +854,205 @@
821
854
  will-change: left;
822
855
  }
823
856
 
824
- .FormUploadProgress {
825
- position: absolute;
826
- left: 0;
827
- right: 0;
828
- top: 0;
829
- bottom: 0;
830
- background-color: rgba(255, 255, 255, 0.6);
831
- z-index: 2;
857
+ .TextField {
858
+ position: relative;
859
+ width: 100%;
832
860
  }
833
861
 
834
- .FormUploadProgress.animated.mounting, .FormUploadProgress.animated.mounted {
835
- transition-delay: 500ms;
862
+ .TextField > label {
863
+ font-family: Roboto, sans-serif;
864
+ color: rgba(0, 0, 0, 0.3);
865
+ font-size: 16px;
866
+ position: absolute;
867
+ left: 0px;
868
+ top: 16px;
869
+ margin-top: -16px;
870
+ transition: all 0.2s ease;
871
+ user-select: none;
872
+ cursor: text;
836
873
  }
837
874
 
838
- .FormUploadProgress .wrapper {
839
- position: sticky;
840
- top: 40%;
841
- margin-top: 40%;
842
- margin-left: 50%;
843
- transform: translateX(-50%);
844
- display: flex;
845
- flex-flow: column;
846
- justify-content: center;
847
- align-items: center;
875
+ .TextField > input {
876
+ font-family: Roboto, sans-serif;
877
+ color: #1e252d;
878
+ height: 19px;
879
+ font-size: 16px;
880
+ width: 100%;
881
+ border: 0px;
882
+ padding-bottom: 4px;
883
+ padding-top: 0;
884
+ outline-color: rgba(0, 0, 0, 0);
848
885
  }
849
886
 
850
- .FormUploadProgress .wrapper .CircleProgress, .FormUploadProgress .wrapper .SpinningProgress {
851
- position: absolute;
852
- width: 107px;
853
- height: 107px;
854
- top: 0;
855
- left: 0;
887
+ .TextField > input:focus {
888
+ outline: none;
856
889
  }
857
890
 
858
- .FormUploadProgress .wrapper .CircleProgress .line, .FormUploadProgress .wrapper .SpinningProgress .line {
859
- stroke: #2196F3;
891
+ .TextField > input:disabled {
892
+ color: gray;
893
+ background-color: white;
860
894
  }
861
895
 
862
- .FormUploadProgress .wrapper > .progress {
863
- width: 107px;
864
- height: 107px;
865
- min-height: 107px;
866
- display: flex;
867
- justify-content: center;
868
- align-items: center;
869
- box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.25);
870
- border-radius: 50%;
871
- background: white;
872
- position: relative;
873
- }
874
-
875
- .FormUploadProgress .wrapper > .progress > .value {
876
- display: inline-block;
877
- margin-top: 5px;
878
- font-weight: bold;
879
- line-height: 16px;
880
- font-size: 13px;
881
- text-align: center;
882
- color: #818181;
896
+ .TextField > input:disabled + .border {
897
+ height: 0px;
898
+ border-bottom: 2px dotted rgb(224, 224, 224);
883
899
  }
884
900
 
885
- .FormUploadProgress .wrapper .cancel {
886
- min-width: 107px;
887
- margin-top: 20px;
888
- background-color: white;
889
- color: #F96B5C;
890
- box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.25);
901
+ .TextField > input::placeholder {
902
+ font-family: Roboto, sans-serif;
903
+ color: rgba(0, 0, 0, 0.3);
904
+ opacity: 1;
891
905
  }
892
906
 
893
- .Dropzone {
907
+ .TextField > .border {
908
+ border-bottom: 1px solid rgb(224, 224, 224);
909
+ height: 1px;
894
910
  position: relative;
895
911
  }
896
912
 
897
- .Dropzone > .overlay {
913
+ .TextField > .border .line {
914
+ left: 50%;
915
+ width: 0;
916
+ height: 2px;
917
+ min-height: 2px;
918
+ background-color: rgb(0, 188, 212);
919
+ transition: all 0.2s ease;
898
920
  position: absolute;
899
- left: 0;
900
- right: 0;
901
- top: 0;
902
- bottom: 0;
903
- background-color: #38ADC4;
904
- z-index: 1;
921
+ }
922
+
923
+ .TextField > .error {
924
+ text-align: left;
925
+ font-size: 10px;
926
+ min-height: 0;
927
+ line-height: 14px;
928
+ color: rgb(244, 67, 54);
929
+ visibility: hidden;
905
930
  opacity: 0;
906
931
  transition: all 0.2s ease;
907
- transition-delay: 100ms;
908
- visibility: hidden;
909
- display: flex;
910
- justify-content: center;
911
- align-items: center;
912
932
  }
913
933
 
914
- .Dropzone > .overlay .drop {
915
- border-radius: 4px;
916
- border: 1px dashed #FFFFFF;
917
- position: absolute;
918
- top: 18px;
919
- left: 18px;
920
- right: 18px;
921
- bottom: 18px;
922
- display: flex;
923
- justify-content: center;
924
- align-items: center;
925
- font-weight: 500;
926
- font-size: 18px;
927
- color: #FFFFFF;
934
+ .TextField.focused > label, .TextField.withValue > label {
935
+ top: 4px;
936
+ font-size: 12px;
937
+ line-height: 14px;
928
938
  }
929
939
 
930
- .Dropzone.dragging > .overlay {
931
- opacity: 0.7;
940
+ .TextField.errored > .error {
932
941
  visibility: visible;
933
- transition-delay: 0s;
942
+ opacity: 1;
934
943
  }
935
944
 
936
- .Dropzone.dragging > * {
937
- pointer-events: none;
945
+ .TextField.errored > .border {
946
+ border-bottom-color: rgb(244, 67, 54);
938
947
  }
939
948
 
940
- .Dropzone > input.file {
941
- position: absolute;
949
+ .TextField.errored > label {
950
+ color: rgb(244, 67, 54);
951
+ }
952
+
953
+ .TextField.focused > label {
954
+ color: rgb(0, 188, 212);
955
+ }
956
+
957
+ .TextField.focused > .border .line {
942
958
  left: 0;
943
- right: 0;
944
- top: 0;
945
- bottom: 0;
946
959
  width: 100%;
947
- height: 100%;
948
- opacity: 0;
949
- cursor: pointer;
950
- z-index: 1;
951
960
  }
952
961
 
953
- .Snackbar {
954
- transform: translateX(-50%);
955
- overflow: hidden;
956
- background-color: #323232;
957
- padding: 14px 24px 14px 24px;
958
- color: #fff;
959
- min-width: 288px;
960
- max-width: 568px;
961
- position: fixed;
962
- bottom: -50px;
963
- left: 50%;
964
- display: flex;
965
- flex-wrap: nowrap;
966
- align-items: center;
967
- opacity: 0;
968
- transition: bottom 0.25s ease, opacity 0.2s ease;
969
- border-radius: 4px;
970
- box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);
962
+ .TextField.disabled label, .TextField.disabled input {
963
+ cursor: not-allowed;
971
964
  }
972
965
 
973
- .Snackbar.shown {
974
- bottom: 15px;
975
- opacity: 1;
966
+ .TextField.withLabel {
967
+ margin-top: 15px;
976
968
  }
977
969
 
978
- .Snackbar .message {
979
- overflow: hidden;
980
- line-height: 1.2em;
981
- min-height: 1.2em;
982
- max-height: 2.4em;
983
- flex: 1;
970
+ .TextField input::-webkit-contacts-auto-fill-button {
971
+ visibility: hidden;
972
+ display: none !important;
973
+ pointer-events: none;
974
+ position: absolute;
975
+ right: 0;
984
976
  }
985
977
 
986
- .Snackbar .action {
987
- text-transform: uppercase;
988
- font-weight: bold;
989
- margin-left: 48px;
990
- color: #bf3727;
978
+ .TextField input:-webkit-autofill {
979
+ -webkit-box-shadow: inset 0 0 0px 9999px white;
991
980
  }
992
981
 
993
- .Snackbar .action a {
994
- text-decoration: none;
995
- color: #bf3727;
982
+ @keyframes shake {
983
+ 0%, 100% {
984
+ transform: translateX(0);
985
+ }
986
+ 20%, 60% {
987
+ transform: translateX(-5px);
988
+ }
989
+ 40%, 80% {
990
+ transform: translateX(5px);
991
+ }
992
+ }
993
+ .TextField .shake {
994
+ animation-duration: 0.5s;
995
+ animation-fill-mode: both;
996
+ animation-timing-function: ease-in-out;
997
+ animation-name: shake;
996
998
  }
997
999
 
998
- .Modal {
999
- display: block;
1000
+ .ImageGallery {
1000
1001
  position: fixed;
1001
1002
  top: 0;
1002
1003
  left: 0;
1004
+ bottom: 0;
1003
1005
  right: 0;
1004
- bottom: 100%;
1005
- overflow-y: scroll;
1006
- transition: bottom 0ms linear;
1007
- transition-delay: 0.2s;
1006
+ z-index: 1000;
1007
+ background-color: rgba(0, 0, 0, 0.01);
1008
+ user-select: none;
1008
1009
  }
1009
1010
 
1010
- .Modal.show {
1011
- transition-delay: 0s;
1012
- bottom: 0;
1011
+ .ImageGallery:focus {
1012
+ outline-width: 0px;
1013
1013
  }
1014
1014
 
1015
- .Modal > .overlay {
1016
- position: fixed;
1017
- top: 0;
1018
- bottom: 100%;
1019
- left: 0;
1020
- right: 0;
1021
- transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1);
1022
- opacity: 0;
1023
- background-color: black;
1024
- pointer-events: none;
1015
+ .ImageGallery.animated {
1016
+ transition: background-color 0.25s ease;
1017
+ opacity: 1;
1025
1018
  }
1026
1019
 
1027
- .Modal > .overlay.show {
1028
- opacity: 0.5;
1029
- bottom: 0;
1020
+ .ImageGallery.mounting, .ImageGallery.mounted {
1021
+ background-color: rgba(0, 0, 0, 0.8);
1030
1022
  }
1031
1023
 
1032
- .Modal > .content {
1033
- left: 50%;
1034
- top: 10vh;
1035
- margin-bottom: 10vh;
1036
- font-size: 16px;
1037
- padding: 0;
1038
- opacity: 0;
1039
- transition: opacity 0.25s ease, transform 0.25s ease;
1040
- transform: scaleY(0) translateY(-200px) translateX(-50%);
1041
- transform-origin: top;
1024
+ .ImageGallery .image {
1042
1025
  position: absolute;
1043
- border-radius: 2px;
1044
- box-shadow: 0px 10px 20px rgba(0, 0, 0, 0.3);
1026
+ cursor: grab;
1045
1027
  }
1046
1028
 
1047
- .Modal > .content.show {
1048
- opacity: 1;
1049
- transform: scaleY(1) translateY(0px) translateX(-50%);
1029
+ .ImageGallery .image .counter {
1030
+ display: none;
1050
1031
  }
1051
1032
 
1052
- .Modal > .content > .Scrollable {
1053
- overflow: visible;
1054
- max-height: 80vh;
1033
+ .ImageGallery .image img {
1034
+ border-radius: 4px;
1035
+ max-width: 100%;
1036
+ min-width: 100%;
1055
1037
  }
1056
1038
 
1057
- .Modal > .content > .Scrollable > .viewport {
1058
- min-width: 10px;
1059
- min-height: 10px;
1039
+ .ImageGallery .image.animated {
1040
+ transition: top 0.25s ease, left 0.25s ease, width 0.25s ease, height 0.25s ease, opacity 0.25s ease;
1041
+ will-change: top, left, width, height, opacity;
1060
1042
  }
1061
1043
 
1062
- .Modal > .content > .Button.close {
1063
- top: 10px;
1064
- right: 10px;
1065
- position: absolute;
1044
+ .ImageGallery .image.animated.mounting, .ImageGallery .image.animated.mounted, .ImageGallery .image.animated.unmounting {
1045
+ opacity: 1;
1066
1046
  }
1067
1047
 
1068
- .ModalMenu {
1069
- position: absolute;
1070
- top: 10px;
1071
- right: 50px;
1048
+ .ImageGallery .image.zoomed {
1049
+ text-align: center;
1050
+ overflow: hidden;
1072
1051
  }
1073
1052
 
1074
- .ModalMenu .material-icons {
1075
- color: #818181;
1076
- }
1077
-
1078
- .ModalMenu .Button.animated {
1079
- position: absolute;
1080
- transition: opacity 150ms ease-in, right 200ms ease-in;
1081
- opacity: 0;
1082
- right: 0;
1083
- top: 0;
1084
- }
1085
-
1086
- .ModalMenu .Button.animated.mounting, .ModalMenu .Button.animated.mounted {
1087
- opacity: 1;
1088
- }
1089
-
1090
- .ModalMenu .Button.animated.unmounting {
1091
- transition: opacity 100ms ease-out, right 200ms ease-out;
1092
- }
1093
-
1094
- .ModalMenu .Button.active {
1095
- background: #EBEBEB;
1096
- }
1097
-
1098
- .ModalMenu .separator {
1099
- height: 24px;
1100
- width: 1px;
1101
- background-color: #D9D9D9;
1102
- margin-left: 4px;
1103
- }
1104
-
1105
- .ImageGallery {
1106
- position: fixed;
1107
- top: 0;
1108
- left: 0;
1109
- bottom: 0;
1110
- right: 0;
1111
- z-index: 1000;
1112
- background-color: rgba(0, 0, 0, 0.01);
1113
- user-select: none;
1114
- }
1115
-
1116
- .ImageGallery:focus {
1117
- outline-width: 0px;
1118
- }
1119
-
1120
- .ImageGallery.animated {
1121
- transition: background-color 0.25s ease;
1122
- opacity: 1;
1123
- }
1124
-
1125
- .ImageGallery.mounting, .ImageGallery.mounted {
1126
- background-color: rgba(0, 0, 0, 0.8);
1127
- }
1128
-
1129
- .ImageGallery .image {
1130
- position: absolute;
1131
- cursor: grab;
1132
- }
1133
-
1134
- .ImageGallery .image .counter {
1135
- display: none;
1136
- }
1137
-
1138
- .ImageGallery .image img {
1139
- border-radius: 4px;
1140
- max-width: 100%;
1141
- min-width: 100%;
1142
- }
1143
-
1144
- .ImageGallery .image.animated {
1145
- transition: top 0.25s ease, left 0.25s ease, width 0.25s ease, height 0.25s ease, opacity 0.25s ease;
1146
- will-change: top, left, width, height, opacity;
1147
- }
1148
-
1149
- .ImageGallery .image.animated.mounting, .ImageGallery .image.animated.mounted, .ImageGallery .image.animated.unmounting {
1150
- opacity: 1;
1151
- }
1152
-
1153
- .ImageGallery .image.zoomed {
1154
- text-align: center;
1155
- overflow: hidden;
1156
- }
1157
-
1158
- .ImageGallery .image.dragging {
1159
- transition: none;
1160
- cursor: move;
1053
+ .ImageGallery .image.dragging {
1054
+ transition: none;
1055
+ cursor: move;
1161
1056
  }
1162
1057
 
1163
1058
  .ImageGallery .image .close {
@@ -1337,229 +1232,143 @@
1337
1232
  font-size: 24px;
1338
1233
  }
1339
1234
 
1340
- .Switch {
1341
- display: inline-flex;
1342
- padding-top: 5px;
1343
- }
1344
-
1345
- .Switch .switch-input {
1346
- display: none;
1347
- }
1348
-
1349
- .Switch .switch-label {
1350
- position: relative;
1351
- display: inline-flex;
1352
- align-items: center;
1353
- min-width: 38px;
1354
- height: 24px;
1355
- cursor: pointer;
1356
- font-weight: 500;
1357
- text-align: left;
1358
- user-select: none;
1359
- margin: 0;
1360
- padding: 0;
1361
- padding-left: 44px;
1362
- box-sizing: border-box;
1363
- }
1364
-
1365
- .Switch .switch-label:before, .Switch .switch-label:after {
1366
- content: "";
1367
- box-sizing: border-box;
1368
- position: absolute;
1369
- margin: 0;
1370
- outline: 0;
1371
- top: 50%;
1372
- transform: translate(0, -50%);
1373
- transition: all 0.3s ease;
1235
+ .animated {
1236
+ transition: opacity 250ms ease;
1237
+ opacity: 0;
1374
1238
  }
1375
1239
 
1376
- .Switch .switch-label:before {
1377
- left: 1px;
1378
- width: 34px;
1379
- height: 14px;
1380
- background-color: #9E9E9E;
1381
- border-radius: 8px;
1240
+ .animated.mounting, .animated.mounted {
1241
+ opacity: 1;
1382
1242
  }
1383
1243
 
1384
- .Switch .switch-label:after {
1244
+ .Modal {
1245
+ display: block;
1246
+ position: fixed;
1247
+ top: 0;
1385
1248
  left: 0;
1386
- width: 20px;
1387
- height: 20px;
1388
- background-color: #FAFAFA;
1389
- border-radius: 50%;
1390
- box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.14), 0 2px 2px 0 rgba(0, 0, 0, 0.098), 0 1px 5px 0 rgba(0, 0, 0, 0.084);
1391
- }
1392
-
1393
- .Switch .switch-label .toggle--on {
1394
- display: none;
1395
- }
1396
-
1397
- .Switch .switch-label .toggle--off {
1398
- display: inline-block;
1399
- }
1400
-
1401
- .Switch .switch-label .label {
1402
- margin-right: 5px;
1403
- }
1404
-
1405
- .Switch .switch-input:checked + .switch-label:before {
1406
- background-color: #A5D6A7;
1407
- }
1408
-
1409
- .Switch .switch-input:checked + .switch-label:after {
1410
- background-color: #4CAF50;
1411
- transform: translate(80%, -50%);
1249
+ right: 0;
1250
+ bottom: 100%;
1251
+ overflow-y: scroll;
1252
+ transition: bottom 0ms linear;
1253
+ transition-delay: 0.2s;
1412
1254
  }
1413
1255
 
1414
- .Switch .switch-input:checked + .switch-label .toggle--on {
1415
- display: inline-block;
1256
+ .Modal.show {
1257
+ transition-delay: 0s;
1258
+ bottom: 0;
1416
1259
  }
1417
1260
 
1418
- .Switch .switch-input:checked + .switch-label .toggle--off {
1419
- display: none;
1261
+ .Modal > .overlay {
1262
+ position: fixed;
1263
+ top: 0;
1264
+ bottom: 100%;
1265
+ left: 0;
1266
+ right: 0;
1267
+ transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1);
1268
+ opacity: 0;
1269
+ background-color: black;
1270
+ pointer-events: none;
1420
1271
  }
1421
1272
 
1422
- .TextField {
1423
- position: relative;
1424
- width: 100%;
1273
+ .Modal > .overlay.show {
1274
+ opacity: 0.5;
1275
+ bottom: 0;
1425
1276
  }
1426
1277
 
1427
- .TextField > label {
1428
- font-family: Roboto, sans-serif;
1429
- color: rgba(0, 0, 0, 0.3);
1278
+ .Modal > .content {
1279
+ left: 50%;
1280
+ top: 10vh;
1281
+ margin-bottom: 10vh;
1430
1282
  font-size: 16px;
1283
+ padding: 0;
1284
+ opacity: 0;
1285
+ transition: opacity 0.25s ease, transform 0.25s ease;
1286
+ transform: scaleY(0) translateY(-200px) translateX(-50%);
1287
+ transform-origin: top;
1431
1288
  position: absolute;
1432
- left: 0px;
1433
- top: 16px;
1434
- margin-top: -16px;
1435
- transition: all 0.2s ease;
1436
- user-select: none;
1437
- cursor: text;
1438
- }
1439
-
1440
- .TextField > input {
1441
- font-family: Roboto, sans-serif;
1442
- color: #1e252d;
1443
- height: 19px;
1444
- font-size: 16px;
1445
- width: 100%;
1446
- border: 0px;
1447
- padding-bottom: 4px;
1448
- padding-top: 0;
1449
- outline-color: rgba(0, 0, 0, 0);
1289
+ border-radius: 2px;
1290
+ box-shadow: 0px 10px 20px rgba(0, 0, 0, 0.3);
1450
1291
  }
1451
1292
 
1452
- .TextField > input:focus {
1453
- outline: none;
1293
+ .Modal > .content.show {
1294
+ opacity: 1;
1295
+ transform: scaleY(1) translateY(0px) translateX(-50%);
1454
1296
  }
1455
1297
 
1456
- .TextField > input:disabled {
1457
- color: gray;
1458
- background-color: white;
1298
+ .Modal > .content > .Scrollable {
1299
+ overflow: visible;
1300
+ max-height: 80vh;
1459
1301
  }
1460
1302
 
1461
- .TextField > input:disabled + .border {
1462
- height: 0px;
1463
- border-bottom: 2px dotted rgb(224, 224, 224);
1303
+ .Modal > .content > .Scrollable > .viewport {
1304
+ min-width: 10px;
1305
+ min-height: 10px;
1464
1306
  }
1465
1307
 
1466
- .TextField > input::placeholder {
1467
- font-family: Roboto, sans-serif;
1468
- color: rgba(0, 0, 0, 0.3);
1469
- opacity: 1;
1308
+ .Modal > .content > .Button.close {
1309
+ top: 10px;
1310
+ right: 10px;
1311
+ position: absolute;
1470
1312
  }
1471
1313
 
1472
- .TextField > .border {
1473
- border-bottom: 1px solid rgb(224, 224, 224);
1474
- height: 1px;
1314
+ .Dropzone {
1475
1315
  position: relative;
1476
1316
  }
1477
1317
 
1478
- .TextField > .border .line {
1479
- left: 50%;
1480
- width: 0;
1481
- height: 2px;
1482
- min-height: 2px;
1483
- background-color: rgb(0, 188, 212);
1484
- transition: all 0.2s ease;
1318
+ .Dropzone > .overlay {
1485
1319
  position: absolute;
1486
- }
1487
-
1488
- .TextField > .error {
1489
- text-align: left;
1490
- font-size: 10px;
1491
- min-height: 0;
1492
- line-height: 14px;
1493
- color: rgb(244, 67, 54);
1494
- visibility: hidden;
1320
+ left: 0;
1321
+ right: 0;
1322
+ top: 0;
1323
+ bottom: 0;
1324
+ background-color: #38ADC4;
1325
+ z-index: 1;
1495
1326
  opacity: 0;
1496
1327
  transition: all 0.2s ease;
1328
+ transition-delay: 100ms;
1329
+ visibility: hidden;
1330
+ display: flex;
1331
+ justify-content: center;
1332
+ align-items: center;
1497
1333
  }
1498
1334
 
1499
- .TextField.focused > label, .TextField.withValue > label {
1500
- top: 4px;
1501
- font-size: 12px;
1502
- line-height: 14px;
1335
+ .Dropzone > .overlay .drop {
1336
+ border-radius: 4px;
1337
+ border: 1px dashed #FFFFFF;
1338
+ position: absolute;
1339
+ top: 18px;
1340
+ left: 18px;
1341
+ right: 18px;
1342
+ bottom: 18px;
1343
+ display: flex;
1344
+ justify-content: center;
1345
+ align-items: center;
1346
+ font-weight: 500;
1347
+ font-size: 18px;
1348
+ color: #FFFFFF;
1503
1349
  }
1504
1350
 
1505
- .TextField.errored > .error {
1351
+ .Dropzone.dragging > .overlay {
1352
+ opacity: 0.7;
1506
1353
  visibility: visible;
1507
- opacity: 1;
1508
- }
1509
-
1510
- .TextField.errored > .border {
1511
- border-bottom-color: rgb(244, 67, 54);
1512
- }
1513
-
1514
- .TextField.errored > label {
1515
- color: rgb(244, 67, 54);
1516
- }
1517
-
1518
- .TextField.focused > label {
1519
- color: rgb(0, 188, 212);
1520
- }
1521
-
1522
- .TextField.focused > .border .line {
1523
- left: 0;
1524
- width: 100%;
1525
- }
1526
-
1527
- .TextField.disabled label, .TextField.disabled input {
1528
- cursor: not-allowed;
1354
+ transition-delay: 0s;
1529
1355
  }
1530
1356
 
1531
- .TextField.withLabel {
1532
- margin-top: 15px;
1357
+ .Dropzone.dragging > * {
1358
+ pointer-events: none;
1533
1359
  }
1534
1360
 
1535
- .TextField input::-webkit-contacts-auto-fill-button {
1536
- visibility: hidden;
1537
- display: none !important;
1538
- pointer-events: none;
1361
+ .Dropzone > input.file {
1539
1362
  position: absolute;
1363
+ left: 0;
1540
1364
  right: 0;
1541
- }
1542
-
1543
- .TextField input:-webkit-autofill {
1544
- -webkit-box-shadow: inset 0 0 0px 9999px white;
1545
- }
1546
-
1547
- @keyframes shake {
1548
- 0%, 100% {
1549
- transform: translateX(0);
1550
- }
1551
- 20%, 60% {
1552
- transform: translateX(-5px);
1553
- }
1554
- 40%, 80% {
1555
- transform: translateX(5px);
1556
- }
1557
- }
1558
- .TextField .shake {
1559
- animation-duration: 0.5s;
1560
- animation-fill-mode: both;
1561
- animation-timing-function: ease-in-out;
1562
- animation-name: shake;
1365
+ top: 0;
1366
+ bottom: 0;
1367
+ width: 100%;
1368
+ height: 100%;
1369
+ opacity: 0;
1370
+ cursor: pointer;
1371
+ z-index: 1;
1563
1372
  }
1564
1373
 
1565
1374
  .SpinningProgress {
@@ -1615,6 +1424,197 @@
1615
1424
  stroke-dashoffset: -53px;
1616
1425
  }
1617
1426
  }
1427
+ .Snackbar {
1428
+ transform: translateX(-50%);
1429
+ overflow: hidden;
1430
+ background-color: #323232;
1431
+ padding: 14px 24px 14px 24px;
1432
+ color: #fff;
1433
+ min-width: 288px;
1434
+ max-width: 568px;
1435
+ position: fixed;
1436
+ bottom: -50px;
1437
+ left: 50%;
1438
+ display: flex;
1439
+ flex-wrap: nowrap;
1440
+ align-items: center;
1441
+ opacity: 0;
1442
+ transition: bottom 0.25s ease, opacity 0.2s ease;
1443
+ border-radius: 4px;
1444
+ box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);
1445
+ }
1446
+
1447
+ .Snackbar.shown {
1448
+ bottom: 15px;
1449
+ opacity: 1;
1450
+ }
1451
+
1452
+ .Snackbar .message {
1453
+ overflow: hidden;
1454
+ line-height: 1.2em;
1455
+ min-height: 1.2em;
1456
+ max-height: 2.4em;
1457
+ flex: 1;
1458
+ }
1459
+
1460
+ .Snackbar .action {
1461
+ text-transform: uppercase;
1462
+ font-weight: bold;
1463
+ margin-left: 48px;
1464
+ color: #bf3727;
1465
+ }
1466
+
1467
+ .Snackbar .action a {
1468
+ text-decoration: none;
1469
+ color: #bf3727;
1470
+ }
1471
+
1472
+ .ModalMenu {
1473
+ position: absolute;
1474
+ top: 10px;
1475
+ right: 50px;
1476
+ }
1477
+
1478
+ .ModalMenu .material-icons {
1479
+ color: #818181;
1480
+ }
1481
+
1482
+ .ModalMenu .Button.animated {
1483
+ position: absolute;
1484
+ transition: opacity 150ms ease-in, right 200ms ease-in;
1485
+ opacity: 0;
1486
+ right: 0;
1487
+ top: 0;
1488
+ }
1489
+
1490
+ .ModalMenu .Button.animated.mounting, .ModalMenu .Button.animated.mounted {
1491
+ opacity: 1;
1492
+ }
1493
+
1494
+ .ModalMenu .Button.animated.unmounting {
1495
+ transition: opacity 100ms ease-out, right 200ms ease-out;
1496
+ }
1497
+
1498
+ .ModalMenu .Button.active {
1499
+ background: #EBEBEB;
1500
+ }
1501
+
1502
+ .ModalMenu .separator {
1503
+ height: 24px;
1504
+ width: 1px;
1505
+ background-color: #D9D9D9;
1506
+ margin-left: 4px;
1507
+ }
1508
+
1509
+ .DropFileInput {
1510
+ flex-grow: 1;
1511
+ }
1512
+
1513
+ .DropFileInput .Dropzone {
1514
+ border: 1px dashed #808080;
1515
+ padding: 12px;
1516
+ display: flex;
1517
+ flex-flow: row nowrap;
1518
+ justify-content: center;
1519
+ align-items: center;
1520
+ color: gray;
1521
+ cursor: pointer;
1522
+ border-radius: 3px;
1523
+ font-weight: normal;
1524
+ line-height: 22px;
1525
+ font-size: 14px;
1526
+ color: #7E7E7E;
1527
+ max-width: 100%;
1528
+ word-break: break-all;
1529
+ word-break: break-word;
1530
+ }
1531
+
1532
+ .DropFileInput .Dropzone .icon.withText {
1533
+ margin-right: 10px;
1534
+ }
1535
+
1536
+ .Switch {
1537
+ display: inline-flex;
1538
+ padding-top: 5px;
1539
+ }
1540
+
1541
+ .Switch .switch-input {
1542
+ display: none;
1543
+ }
1544
+
1545
+ .Switch .switch-label {
1546
+ position: relative;
1547
+ display: inline-flex;
1548
+ align-items: center;
1549
+ min-width: 38px;
1550
+ height: 24px;
1551
+ cursor: pointer;
1552
+ font-weight: 500;
1553
+ text-align: left;
1554
+ user-select: none;
1555
+ margin: 0;
1556
+ padding: 0;
1557
+ padding-left: 44px;
1558
+ box-sizing: border-box;
1559
+ }
1560
+
1561
+ .Switch .switch-label:before, .Switch .switch-label:after {
1562
+ content: "";
1563
+ box-sizing: border-box;
1564
+ position: absolute;
1565
+ margin: 0;
1566
+ outline: 0;
1567
+ top: 50%;
1568
+ transform: translate(0, -50%);
1569
+ transition: all 0.3s ease;
1570
+ }
1571
+
1572
+ .Switch .switch-label:before {
1573
+ left: 1px;
1574
+ width: 34px;
1575
+ height: 14px;
1576
+ background-color: #9E9E9E;
1577
+ border-radius: 8px;
1578
+ }
1579
+
1580
+ .Switch .switch-label:after {
1581
+ left: 0;
1582
+ width: 20px;
1583
+ height: 20px;
1584
+ background-color: #FAFAFA;
1585
+ border-radius: 50%;
1586
+ box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.14), 0 2px 2px 0 rgba(0, 0, 0, 0.098), 0 1px 5px 0 rgba(0, 0, 0, 0.084);
1587
+ }
1588
+
1589
+ .Switch .switch-label .toggle--on {
1590
+ display: none;
1591
+ }
1592
+
1593
+ .Switch .switch-label .toggle--off {
1594
+ display: inline-block;
1595
+ }
1596
+
1597
+ .Switch .switch-label .label {
1598
+ margin-right: 5px;
1599
+ }
1600
+
1601
+ .Switch .switch-input:checked + .switch-label:before {
1602
+ background-color: #A5D6A7;
1603
+ }
1604
+
1605
+ .Switch .switch-input:checked + .switch-label:after {
1606
+ background-color: #4CAF50;
1607
+ transform: translate(80%, -50%);
1608
+ }
1609
+
1610
+ .Switch .switch-input:checked + .switch-label .toggle--on {
1611
+ display: inline-block;
1612
+ }
1613
+
1614
+ .Switch .switch-input:checked + .switch-label .toggle--off {
1615
+ display: none;
1616
+ }
1617
+
1618
1618
  .DNDContainer .DroppableList .Draggable {
1619
1619
  transform: unset;
1620
1620
  transition: unset;
@@ -1658,36 +1658,12 @@
1658
1658
  height: 100%;
1659
1659
  }
1660
1660
 
1661
- .DNDContainer {
1662
- position: relative;
1663
- }
1664
-
1665
- .DNDContainer .Draggable[draggable=true], .DNDContainer .Draggable [draggable=true] {
1666
- cursor: pointer;
1667
- }
1668
-
1669
- .DNDContainer .Draggable.placeholder {
1670
- opacity: 0.2;
1671
- }
1672
-
1673
- .DNDContainer .Draggable.copy {
1674
- position: absolute;
1675
- box-sizing: border-box;
1676
- will-change: transform;
1677
- opacity: 0;
1678
- }
1679
-
1680
- .DNDContainer .Draggable.dragged {
1681
- z-index: 10;
1661
+ .ScrollableTable .Scrollable .scrollbar {
1662
+ top: 56px;
1682
1663
  }
1683
1664
 
1684
- .DNDContainer .overlay {
1685
- position: absolute;
1686
- top: 0;
1687
- left: 0;
1688
- right: 0;
1689
- bottom: 0;
1690
- pointer-events: none;
1665
+ .ScrollableTable .Table {
1666
+ position: static;
1691
1667
  }
1692
1668
 
1693
1669
  .DatePicker {
@@ -1929,10 +1905,34 @@
1929
1905
  margin: 0;
1930
1906
  }
1931
1907
 
1932
- .ScrollableTable .Scrollable .scrollbar {
1933
- top: 56px;
1908
+ .DNDContainer {
1909
+ position: relative;
1934
1910
  }
1935
1911
 
1936
- .ScrollableTable .Table {
1937
- position: static;
1912
+ .DNDContainer .Draggable[draggable=true], .DNDContainer .Draggable [draggable=true] {
1913
+ cursor: pointer;
1914
+ }
1915
+
1916
+ .DNDContainer .Draggable.placeholder {
1917
+ opacity: 0.2;
1918
+ }
1919
+
1920
+ .DNDContainer .Draggable.copy {
1921
+ position: absolute;
1922
+ box-sizing: border-box;
1923
+ will-change: transform;
1924
+ opacity: 0;
1925
+ }
1926
+
1927
+ .DNDContainer .Draggable.dragged {
1928
+ z-index: 10;
1929
+ }
1930
+
1931
+ .DNDContainer .overlay {
1932
+ position: absolute;
1933
+ top: 0;
1934
+ left: 0;
1935
+ right: 0;
1936
+ bottom: 0;
1937
+ pointer-events: none;
1938
1938
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-ui-basics",
3
- "version": "0.0.204",
3
+ "version": "0.0.205",
4
4
  "description": "",
5
5
  "module": "index.js",
6
6
  "_main": "index.cjs.js",
@@ -77,15 +77,16 @@ export function useStore<T, R>(store: Store<T>, selector?: Selector<T, R>): R {
77
77
 
78
78
  const [state, setState] = useState(selector(store.get()))
79
79
 
80
- const updateState = () => {
81
- setState(selector(store.get()))
82
- };
83
-
84
80
  useEffect(() => {
85
- updateState()
81
+ const updateState = () => {
82
+ setState(selector(store.get()))
83
+ };
84
+
86
85
  store.subscribe(updateState)
87
- return () => store.unsubscribe(updateState)
88
- })
86
+ return () => {
87
+ store.unsubscribe(updateState);
88
+ }
89
+ }, [selector])
89
90
 
90
91
  return state
91
92
  }
package/store/Store.js CHANGED
@@ -48,14 +48,15 @@ function useStore(store, selector) {
48
48
  if (!selector)
49
49
  selector = defaultSelector;
50
50
  const [state, setState] = useState(selector(store.get()));
51
- const updateState = () => {
52
- setState(selector(store.get()));
53
- };
54
51
  useEffect(() => {
55
- updateState();
52
+ const updateState = () => {
53
+ setState(selector(store.get()));
54
+ };
56
55
  store.subscribe(updateState);
57
- return () => store.unsubscribe(updateState);
58
- });
56
+ return () => {
57
+ store.unsubscribe(updateState);
58
+ };
59
+ }, [selector]);
59
60
  return state;
60
61
  }
61
62
 
@@ -1 +1 @@
1
- {"version":3,"file":"Store.js","sources":["../src/store/Store.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Store.js","sources":["../src/store/Store.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAOA,IAAI,MAAM,GAAW,EAAE,CAAA;AACvB,IAAI,OAAO,GAAG,CAAC,CAAA;MAEF,KAAK,CAAA;IAMd,WAAY,CAAA,YAAe,EAAE,IAAa,EAAA;QAJlC,IAAS,CAAA,SAAA,GAAsB,EAAE,CAAA;QAazC,IAAG,CAAA,GAAA,GAAG,MAAS,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AACjC,QAAA,IAAA,CAAA,GAAG,GAAG,CAAC,OAAkC,KAAI;YACzC,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9C,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9B,YAAA,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,KAAK;gBAC3B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;;AAEjC,gBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,CAAA;AAE/B,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;AACtC,SAAC,CAAA;QAED,IAAK,CAAA,KAAA,GAAG,MAAK;YACT,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,YAAY,CAAA;AAC1C,SAAC,CAAA;AAED,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,EAAc,KAAI;AAC3B,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAC3B,SAAC,CAAA;AAED,QAAA,IAAA,CAAA,WAAW,GAAG,CAAC,EAAc,KAAI;AAC7B,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;AACzD,SAAC,CAAA;AAED,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAc,IAAI,CAAC,IAAI,CAAC;QAhC/B,IAAI,IAAI,GAAG,IAAI,CAAC;AAChB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACjC,QAAA,MAAM,KAAK,GAAG,OAAO,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,CAAA;KAC/B;AA2BJ,CAAA;SAIe,cAAc,GAAA;AAC1B,IAAA,OAAO,MAAM,CAAA;AACjB,CAAC;SAEe,gBAAgB,GAAA;IAC5B,MAAM,GAAG,EAAE,CAAA;AACf,CAAC;AAEK,SAAU,kBAAkB,CAAC,KAAK,EAAA;IACpC,MAAM,GAAG,KAAK,CAAA;AAClB,CAAC;AAKY,MAAA,eAAe,GAAG,CAAI,KAAQ,KAAQ,MAAM;AAIzC,SAAA,QAAQ,CAAO,KAAe,EAAE,QAAyB,EAAA;AACrE,IAAA,IAAI,CAAC,QAAQ;QACT,QAAQ,GAAI,eAAkC,CAAA;AAElD,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IAEzD,SAAS,CAAC,MAAK;QACX,MAAM,WAAW,GAAG,MAAK;YACrB,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;AACnC,SAAC,CAAC;AAEF,QAAA,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;AAC5B,QAAA,OAAO,MAAK;AACR,YAAA,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AACnC,SAAC,CAAA;AACL,KAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;AAEd,IAAA,OAAO,KAAK,CAAA;AAChB;;;;"}