react-ui-basics 0.0.167 → 0.0.170

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/Button.css CHANGED
@@ -13,6 +13,7 @@
13
13
  background: #dfdfdf;
14
14
  text-transform: uppercase;
15
15
  font-family: Roboto, sans-serif;
16
+ -webkit-tap-highlight-color: transparent;
16
17
  display: inline-flex;
17
18
  justify-content: center;
18
19
  align-items: center;
package/TextField.js CHANGED
@@ -7,7 +7,7 @@ import {inherits as __inherits} from "./_virtual/_rollupPluginBabelHelpers";
7
7
  import './TextField.css';
8
8
  import 'react';
9
9
  import ReactCreateElement from './ReactCreateElement.js';
10
- import { classNames, isUndefined, orNoop, addEventListener, getRandomId, createRef, setTimeout } from './Tools.js';
10
+ import { classNames, isUndefined, setTimeout, orNoop, addEventListener, getRandomId, createRef } from './Tools.js';
11
11
  import { stateGSs, render, componentDidMount, componentDidUpdate, propsGetter, PureComponent } from './ReactConstants.js';
12
12
  import PropTypes from 'prop-types';
13
13
 
@@ -110,7 +110,12 @@ var TextField = function (_PureComponent) {
110
110
  focused = _props3.focused,
111
111
  input = _props3.input,
112
112
  i = inputRef();
113
- isWithValue(!!__value(i));
113
+ var hasValue = !!__value(i);
114
+ isWithValue(hasValue);
115
+ !hasValue && setTimeout(function () {
116
+ var matches = i.matches(':-internal-autofill-selected');
117
+ matches && isWithValue(matches);
118
+ }, 100);
114
119
  focused && i.focus();
115
120
  orNoop(input)(i);
116
121
  };
package/bundle.css CHANGED
@@ -308,6 +308,7 @@
308
308
  background: #dfdfdf;
309
309
  text-transform: uppercase;
310
310
  font-family: Roboto, sans-serif;
311
+ -webkit-tap-highlight-color: transparent;
311
312
  display: inline-flex;
312
313
  justify-content: center;
313
314
  align-items: center;
@@ -458,15 +459,6 @@
458
459
  border: 0;
459
460
  }
460
461
 
461
- .animated {
462
- transition: opacity 250ms ease;
463
- opacity: 0;
464
- }
465
-
466
- .animated.mounting, .animated.mounted {
467
- opacity: 1;
468
- }
469
-
470
462
  .Checkbox {
471
463
  position: relative;
472
464
  white-space: pre;
@@ -579,48 +571,6 @@
579
571
  transition: stroke-dashoffset 0.2s ease;
580
572
  }
581
573
 
582
- .DialogModal {
583
- overflow: hidden;
584
- }
585
-
586
- .DialogModal .content {
587
- top: 20vh;
588
- }
589
-
590
- .Dialog {
591
- background-color: white;
592
- min-width: 460px;
593
- max-width: 40vw;
594
- padding: 15px;
595
- }
596
-
597
- .Dialog .title {
598
- margin-bottom: 15px;
599
- padding: 20px 50px 0px 30px;
600
- font-size: 1.25rem;
601
- line-height: 2rem;
602
- font-weight: 400;
603
- letter-spacing: 0.0125em;
604
- }
605
-
606
- .Dialog .description {
607
- color: rgba(0, 0, 0, 0.54);
608
- font-size: 1rem;
609
- line-height: 1.5rem;
610
- font-weight: 400;
611
- letter-spacing: 0.03125em;
612
- margin-top: 20px;
613
- padding: 0 24px 24px;
614
- }
615
-
616
- .Dialog > div.row {
617
- margin-bottom: 15px;
618
- }
619
-
620
- .Dialog > div.row:last-child {
621
- margin-bottom: 0;
622
- }
623
-
624
574
  .FormUploadProgress {
625
575
  position: absolute;
626
576
  left: 0;
@@ -717,160 +667,152 @@
717
667
  margin-right: 10px;
718
668
  }
719
669
 
720
- .Button.FloatingActionButton {
721
- position: absolute;
722
- right: 16px;
723
- bottom: 16px;
724
- width: 56px;
725
- height: 56px;
726
- padding: 16px;
727
- transition: bottom 0.2s cubic-bezier(0.4, 0, 0.2, 1);
728
- }
729
-
730
- .Button.FloatingActionButton.raised {
731
- transition: bottom 0.2s cubic-bezier(0.4, 0, 0.2, 1), color 0.2s ease-out, background-color 0.2s ease-out, box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);
732
- }
733
-
734
- .Button.FloatingActionButton.mini {
735
- width: 40px;
736
- height: 40px;
737
- padding: 8px;
738
- }
739
-
740
- .Button.FloatingActionButton.hidden {
741
- bottom: -100px;
670
+ .animated {
671
+ transition: opacity 250ms ease;
672
+ opacity: 0;
742
673
  }
743
674
 
744
- .ModalMenu {
745
- position: absolute;
746
- top: 10px;
747
- right: 50px;
675
+ .animated.mounting, .animated.mounted {
676
+ opacity: 1;
748
677
  }
749
678
 
750
- .ModalMenu .material-icons {
751
- color: #818181;
679
+ .Dropzone {
680
+ position: relative;
752
681
  }
753
682
 
754
- .ModalMenu .Button.animated {
683
+ .Dropzone > .overlay {
755
684
  position: absolute;
756
- transition: opacity 150ms ease-in, right 200ms ease-in;
757
- opacity: 0;
685
+ left: 0;
758
686
  right: 0;
759
687
  top: 0;
688
+ bottom: 0;
689
+ background-color: #38ADC4;
690
+ z-index: 1;
691
+ opacity: 0;
692
+ transition: all 0.2s ease;
693
+ transition-delay: 100ms;
694
+ visibility: hidden;
695
+ display: flex;
696
+ justify-content: center;
697
+ align-items: center;
760
698
  }
761
699
 
762
- .ModalMenu .Button.animated.mounting, .ModalMenu .Button.animated.mounted {
763
- opacity: 1;
700
+ .Dropzone > .overlay .drop {
701
+ border-radius: 4px;
702
+ border: 1px dashed #FFFFFF;
703
+ position: absolute;
704
+ top: 18px;
705
+ left: 18px;
706
+ right: 18px;
707
+ bottom: 18px;
708
+ display: flex;
709
+ justify-content: center;
710
+ align-items: center;
711
+ font-weight: 500;
712
+ font-size: 18px;
713
+ color: #FFFFFF;
764
714
  }
765
715
 
766
- .ModalMenu .Button.animated.unmounting {
767
- transition: opacity 100ms ease-out, right 200ms ease-out;
716
+ .Dropzone.dragging > .overlay {
717
+ opacity: 0.7;
718
+ visibility: visible;
719
+ transition-delay: 0s;
768
720
  }
769
721
 
770
- .ModalMenu .Button.active {
771
- background: #EBEBEB;
722
+ .Dropzone.dragging > * {
723
+ pointer-events: none;
772
724
  }
773
725
 
774
- .ModalMenu .separator {
775
- height: 24px;
776
- width: 1px;
777
- background-color: #D9D9D9;
778
- margin-left: 4px;
726
+ .Dropzone > input.file {
727
+ position: absolute;
728
+ left: 0;
729
+ right: 0;
730
+ top: 0;
731
+ bottom: 0;
732
+ width: 100%;
733
+ height: 100%;
734
+ opacity: 0;
735
+ cursor: pointer;
736
+ z-index: 1;
779
737
  }
780
738
 
781
- .Scrollable {
782
- max-height: 250px;
783
- max-width: 250px;
784
- padding-right: 5px;
785
- position: relative;
786
- display: flex;
787
- flex-flow: column;
788
- align-items: stretch;
739
+ .DialogModal {
789
740
  overflow: hidden;
790
741
  }
791
742
 
792
- .Scrollable:hover > .scrollbar.auto {
793
- transition-delay: 0s;
794
- opacity: 1;
795
- }
796
-
797
- .Scrollable .viewport {
798
- overflow-y: scroll;
799
- overflow-x: scroll;
800
- max-height: 100%;
801
- scroll-behavior: smooth;
802
- scrollbar-width: none;
743
+ .DialogModal .content {
744
+ top: 20vh;
803
745
  }
804
746
 
805
- .Scrollable .viewport::-webkit-scrollbar {
806
- display: none;
747
+ .Dialog {
748
+ background-color: white;
749
+ min-width: 460px;
750
+ max-width: 40vw;
751
+ padding: 15px;
807
752
  }
808
753
 
809
- .Scrollable.without-scroll-horizontal {
810
- max-width: unset;
754
+ .Dialog .title {
755
+ margin-bottom: 15px;
756
+ padding: 20px 50px 0px 30px;
757
+ font-size: 1.25rem;
758
+ line-height: 2rem;
759
+ font-weight: 400;
760
+ letter-spacing: 0.0125em;
811
761
  }
812
762
 
813
- .Scrollable.without-scroll {
814
- padding-right: 0;
815
- max-height: unset;
763
+ .Dialog .description {
764
+ color: rgba(0, 0, 0, 0.54);
765
+ font-size: 1rem;
766
+ line-height: 1.5rem;
767
+ font-weight: 400;
768
+ letter-spacing: 0.03125em;
769
+ margin-top: 20px;
770
+ padding: 0 24px 24px;
816
771
  }
817
772
 
818
- .Scrollable.without-scroll > .viewport {
819
- padding-right: 0;
820
- margin-right: 0;
773
+ .Dialog > div.row {
774
+ margin-bottom: 15px;
821
775
  }
822
776
 
823
- .Scrollable.without-scroll > .scrollbar {
824
- visibility: hidden;
777
+ .Dialog > div.row:last-child {
778
+ margin-bottom: 0;
825
779
  }
826
780
 
827
- .Scrollable .scrollbar {
781
+ .ModalMenu {
828
782
  position: absolute;
829
- right: 0px;
830
- top: 0px;
831
- width: 5px;
832
- transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1);
833
- transition-delay: 0.5s;
834
- z-index: 1;
783
+ top: 10px;
784
+ right: 50px;
835
785
  }
836
786
 
837
- .Scrollable .scrollbar.auto, .Scrollable .scrollbar.hidden {
838
- opacity: 0;
787
+ .ModalMenu .material-icons {
788
+ color: #818181;
839
789
  }
840
790
 
841
- .Scrollable .scrollbar .thumb {
842
- background-color: rgba(0, 0, 0, 0.3);
843
- width: 5px;
791
+ .ModalMenu .Button.animated {
844
792
  position: absolute;
845
- right: 0px;
846
- top: 0px;
847
- user-select: none;
848
- will-change: top;
849
- border-radius: 2px;
793
+ transition: opacity 150ms ease-in, right 200ms ease-in;
794
+ opacity: 0;
795
+ right: 0;
796
+ top: 0;
850
797
  }
851
798
 
852
- .Scrollable .scrollbar .thumb:hover {
853
- background-color: rgba(0, 0, 0, 0.5);
799
+ .ModalMenu .Button.animated.mounting, .ModalMenu .Button.animated.mounted {
800
+ opacity: 1;
854
801
  }
855
802
 
856
- .Scrollable .scrollbar .thumb:active {
857
- background-color: rgba(0, 0, 0, 0.7);
803
+ .ModalMenu .Button.animated.unmounting {
804
+ transition: opacity 100ms ease-out, right 200ms ease-out;
858
805
  }
859
806
 
860
- .Scrollable .scrollbar.horizontal {
861
- left: 0px;
862
- right: 0px;
863
- height: 5px;
864
- bottom: 0;
865
- width: unset;
866
- top: unset;
807
+ .ModalMenu .Button.active {
808
+ background: #EBEBEB;
867
809
  }
868
810
 
869
- .Scrollable .scrollbar.horizontal .thumb {
870
- height: 5px;
871
- left: 0px;
872
- bottom: 0px;
873
- will-change: left;
811
+ .ModalMenu .separator {
812
+ height: 24px;
813
+ width: 1px;
814
+ background-color: #D9D9D9;
815
+ margin-left: 4px;
874
816
  }
875
817
 
876
818
  .Modal {
@@ -943,64 +885,99 @@
943
885
  position: absolute;
944
886
  }
945
887
 
946
- .Dropzone {
888
+ .Scrollable {
889
+ max-height: 250px;
890
+ max-width: 250px;
891
+ padding-right: 5px;
947
892
  position: relative;
893
+ display: flex;
894
+ flex-flow: column;
895
+ align-items: stretch;
896
+ overflow: hidden;
948
897
  }
949
898
 
950
- .Dropzone > .overlay {
899
+ .Scrollable:hover > .scrollbar.auto {
900
+ transition-delay: 0s;
901
+ opacity: 1;
902
+ }
903
+
904
+ .Scrollable .viewport {
905
+ overflow-y: scroll;
906
+ overflow-x: scroll;
907
+ max-height: 100%;
908
+ scroll-behavior: smooth;
909
+ scrollbar-width: none;
910
+ }
911
+
912
+ .Scrollable .viewport::-webkit-scrollbar {
913
+ display: none;
914
+ }
915
+
916
+ .Scrollable.without-scroll-horizontal {
917
+ max-width: unset;
918
+ }
919
+
920
+ .Scrollable.without-scroll {
921
+ padding-right: 0;
922
+ max-height: unset;
923
+ }
924
+
925
+ .Scrollable.without-scroll > .viewport {
926
+ padding-right: 0;
927
+ margin-right: 0;
928
+ }
929
+
930
+ .Scrollable.without-scroll > .scrollbar {
931
+ visibility: hidden;
932
+ }
933
+
934
+ .Scrollable .scrollbar {
951
935
  position: absolute;
952
- left: 0;
953
- right: 0;
954
- top: 0;
955
- bottom: 0;
956
- background-color: #38ADC4;
936
+ right: 0px;
937
+ top: 0px;
938
+ width: 5px;
939
+ transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1);
940
+ transition-delay: 0.5s;
957
941
  z-index: 1;
942
+ }
943
+
944
+ .Scrollable .scrollbar.auto, .Scrollable .scrollbar.hidden {
958
945
  opacity: 0;
959
- transition: all 0.2s ease;
960
- transition-delay: 100ms;
961
- visibility: hidden;
962
- display: flex;
963
- justify-content: center;
964
- align-items: center;
965
946
  }
966
947
 
967
- .Dropzone > .overlay .drop {
968
- border-radius: 4px;
969
- border: 1px dashed #FFFFFF;
948
+ .Scrollable .scrollbar .thumb {
949
+ background-color: rgba(0, 0, 0, 0.3);
950
+ width: 5px;
970
951
  position: absolute;
971
- top: 18px;
972
- left: 18px;
973
- right: 18px;
974
- bottom: 18px;
975
- display: flex;
976
- justify-content: center;
977
- align-items: center;
978
- font-weight: 500;
979
- font-size: 18px;
980
- color: #FFFFFF;
952
+ right: 0px;
953
+ top: 0px;
954
+ user-select: none;
955
+ will-change: top;
956
+ border-radius: 2px;
981
957
  }
982
958
 
983
- .Dropzone.dragging > .overlay {
984
- opacity: 0.7;
985
- visibility: visible;
986
- transition-delay: 0s;
959
+ .Scrollable .scrollbar .thumb:hover {
960
+ background-color: rgba(0, 0, 0, 0.5);
987
961
  }
988
962
 
989
- .Dropzone.dragging > * {
990
- pointer-events: none;
963
+ .Scrollable .scrollbar .thumb:active {
964
+ background-color: rgba(0, 0, 0, 0.7);
991
965
  }
992
966
 
993
- .Dropzone > input.file {
994
- position: absolute;
995
- left: 0;
996
- right: 0;
997
- top: 0;
967
+ .Scrollable .scrollbar.horizontal {
968
+ left: 0px;
969
+ right: 0px;
970
+ height: 5px;
998
971
  bottom: 0;
999
- width: 100%;
1000
- height: 100%;
1001
- opacity: 0;
1002
- cursor: pointer;
1003
- z-index: 1;
972
+ width: unset;
973
+ top: unset;
974
+ }
975
+
976
+ .Scrollable .scrollbar.horizontal .thumb {
977
+ height: 5px;
978
+ left: 0px;
979
+ bottom: 0px;
980
+ will-change: left;
1004
981
  }
1005
982
 
1006
983
  .ImageGallery {
@@ -1238,59 +1215,75 @@
1238
1215
  font-size: 24px;
1239
1216
  }
1240
1217
 
1241
- .SpinningProgress {
1242
- width: 48px;
1243
- height: 48px;
1244
- position: relative;
1245
- margin: 0 auto;
1218
+ .Button.FloatingActionButton {
1219
+ position: absolute;
1220
+ right: 16px;
1221
+ bottom: 16px;
1222
+ width: 56px;
1223
+ height: 56px;
1224
+ padding: 16px;
1225
+ transition: bottom 0.2s cubic-bezier(0.4, 0, 0.2, 1);
1246
1226
  }
1247
1227
 
1248
- .SpinningProgress:before {
1249
- content: "";
1250
- display: block;
1251
- padding-top: 100%;
1228
+ .Button.FloatingActionButton.raised {
1229
+ transition: bottom 0.2s cubic-bezier(0.4, 0, 0.2, 1), color 0.2s ease-out, background-color 0.2s ease-out, box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);
1252
1230
  }
1253
1231
 
1254
- .SpinningProgress .circular {
1255
- animation: rotate 2s linear infinite;
1256
- height: 100%;
1257
- transform-origin: center center;
1258
- width: 100%;
1259
- position: absolute;
1260
- top: 0;
1261
- bottom: 0;
1262
- left: 0;
1263
- right: 0;
1264
- margin: auto;
1232
+ .Button.FloatingActionButton.mini {
1233
+ width: 40px;
1234
+ height: 40px;
1235
+ padding: 8px;
1265
1236
  }
1266
1237
 
1267
- .SpinningProgress .line {
1268
- stroke: black;
1269
- stroke-width: 2px;
1270
- stroke-dasharray: 1, 96;
1271
- stroke-dashoffset: 0;
1272
- animation: dash 1.5s ease-in-out infinite, color 6s ease-in-out infinite;
1238
+ .Button.FloatingActionButton.hidden {
1239
+ bottom: -100px;
1273
1240
  }
1274
1241
 
1275
- @keyframes rotate {
1276
- 100% {
1277
- transform: rotate(360deg);
1278
- }
1242
+ .Snackbar {
1243
+ transform: translateX(-50%);
1244
+ overflow: hidden;
1245
+ background-color: #323232;
1246
+ padding: 14px 24px 14px 24px;
1247
+ color: #fff;
1248
+ min-width: 288px;
1249
+ max-width: 568px;
1250
+ position: fixed;
1251
+ bottom: -50px;
1252
+ left: 50%;
1253
+ display: flex;
1254
+ flex-wrap: nowrap;
1255
+ align-items: center;
1256
+ opacity: 0;
1257
+ transition: bottom 0.25s ease, opacity 0.2s ease;
1258
+ border-radius: 4px;
1259
+ box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);
1279
1260
  }
1280
- @keyframes dash {
1281
- 0% {
1282
- stroke-dasharray: 1, 96;
1283
- stroke-dashoffset: 0;
1284
- }
1285
- 50% {
1286
- stroke-dasharray: 43, 96;
1287
- stroke-dashoffset: -17px;
1288
- }
1289
- 100% {
1290
- stroke-dasharray: 43, 96;
1291
- stroke-dashoffset: -53px;
1292
- }
1261
+
1262
+ .Snackbar.shown {
1263
+ bottom: 15px;
1264
+ opacity: 1;
1265
+ }
1266
+
1267
+ .Snackbar .message {
1268
+ overflow: hidden;
1269
+ line-height: 1.2em;
1270
+ min-height: 1.2em;
1271
+ max-height: 2.4em;
1272
+ flex: 1;
1273
+ }
1274
+
1275
+ .Snackbar .action {
1276
+ text-transform: uppercase;
1277
+ font-weight: bold;
1278
+ margin-left: 48px;
1279
+ color: #bf3727;
1280
+ }
1281
+
1282
+ .Snackbar .action a {
1283
+ text-decoration: none;
1284
+ color: #bf3727;
1293
1285
  }
1286
+
1294
1287
  .TextField {
1295
1288
  position: relative;
1296
1289
  width: 100%;
@@ -1516,51 +1509,59 @@
1516
1509
  display: none;
1517
1510
  }
1518
1511
 
1519
- .Snackbar {
1520
- transform: translateX(-50%);
1521
- overflow: hidden;
1522
- background-color: #323232;
1523
- padding: 14px 24px 14px 24px;
1524
- color: #fff;
1525
- min-width: 288px;
1526
- max-width: 568px;
1527
- position: fixed;
1528
- bottom: -50px;
1529
- left: 50%;
1530
- display: flex;
1531
- flex-wrap: nowrap;
1532
- align-items: center;
1533
- opacity: 0;
1534
- transition: bottom 0.25s ease, opacity 0.2s ease;
1535
- border-radius: 4px;
1536
- box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);
1512
+ .SpinningProgress {
1513
+ width: 48px;
1514
+ height: 48px;
1515
+ position: relative;
1516
+ margin: 0 auto;
1537
1517
  }
1538
1518
 
1539
- .Snackbar.shown {
1540
- bottom: 15px;
1541
- opacity: 1;
1519
+ .SpinningProgress:before {
1520
+ content: "";
1521
+ display: block;
1522
+ padding-top: 100%;
1542
1523
  }
1543
1524
 
1544
- .Snackbar .message {
1545
- overflow: hidden;
1546
- line-height: 1.2em;
1547
- min-height: 1.2em;
1548
- max-height: 2.4em;
1549
- flex: 1;
1525
+ .SpinningProgress .circular {
1526
+ animation: rotate 2s linear infinite;
1527
+ height: 100%;
1528
+ transform-origin: center center;
1529
+ width: 100%;
1530
+ position: absolute;
1531
+ top: 0;
1532
+ bottom: 0;
1533
+ left: 0;
1534
+ right: 0;
1535
+ margin: auto;
1550
1536
  }
1551
1537
 
1552
- .Snackbar .action {
1553
- text-transform: uppercase;
1554
- font-weight: bold;
1555
- margin-left: 48px;
1556
- color: #bf3727;
1538
+ .SpinningProgress .line {
1539
+ stroke: black;
1540
+ stroke-width: 2px;
1541
+ stroke-dasharray: 1, 96;
1542
+ stroke-dashoffset: 0;
1543
+ animation: dash 1.5s ease-in-out infinite, color 6s ease-in-out infinite;
1557
1544
  }
1558
1545
 
1559
- .Snackbar .action a {
1560
- text-decoration: none;
1561
- color: #bf3727;
1546
+ @keyframes rotate {
1547
+ 100% {
1548
+ transform: rotate(360deg);
1549
+ }
1550
+ }
1551
+ @keyframes dash {
1552
+ 0% {
1553
+ stroke-dasharray: 1, 96;
1554
+ stroke-dashoffset: 0;
1555
+ }
1556
+ 50% {
1557
+ stroke-dasharray: 43, 96;
1558
+ stroke-dashoffset: -17px;
1559
+ }
1560
+ 100% {
1561
+ stroke-dasharray: 43, 96;
1562
+ stroke-dashoffset: -53px;
1563
+ }
1562
1564
  }
1563
-
1564
1565
  .DNDContainer .DroppableList .Draggable {
1565
1566
  transform: unset;
1566
1567
  transition: unset;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-ui-basics",
3
- "version": "0.0.167",
3
+ "version": "0.0.170",
4
4
  "description": "",
5
5
  "module": "index.js",
6
6
  "_main": "index.cjs.js",
package/router/Route.js CHANGED
@@ -37,15 +37,15 @@ var createUrlMatcher = function createUrlMatcher(path) {
37
37
  };else if (variableNameIndex !== -1) {
38
38
  var variable = segment.substring(variableNameIndex + 1);
39
39
  var regex = null;
40
+ if (variable.indexOf('?') !== -1) variable = variable.substring(0, variable.indexOf('?'));
40
41
  if (variable.indexOf('(') !== -1) {
41
42
  var regexStart = variable.indexOf('(');
42
43
  regex = new RegExp(variable.substring(regexStart));
43
44
  variable = variable.substring(0, regexStart);
44
45
  }
45
- if (variable.indexOf('?') !== -1) variable = variable.substring(0, variable.indexOf('?'));
46
46
  var prefix = variableNameIndex && segment.substring(0, variableNameIndex);
47
47
  matcher = function matcher(p, params) {
48
- if (regex && !p.match(regex)) return false;
48
+ if (regex && !!p && !p.match(regex)) return false;
49
49
  if (!p && !optionals[i]) return false;
50
50
  if (prefix) {
51
51
  if (p.indexOf(prefix) === 0) p = p.substring(variableNameIndex);else return false;
@@ -1 +1 @@
1
- {"version":3,"file":"Route.js","sources":["../../../../src/react-ui-basics/router/Route.js"],"sourcesContent":["import React from 'react';\nimport ReactCreateElement from '../ReactCreateElement';\nimport PropTypes from 'prop-types';\nimport './HistoryTools'\nimport {allPropsExcept, isDifferent, orNoop, setOf, WINDOW, addEventListener, removeEventListener} from \"../Tools\";\nimport {componentDidUpdate, render, PureComponent, componentDidMount, componentWillUnmount, propsGetter, stateGSs, setState} from \"../ReactConstants\";\n\nconst historyEvents = ['popstate', 'pushState', 'replaceState'];\n\nconst cleanPath = (path) => {\n if (path.length > 1 && path.lastIndexOf('/') === path.length - 1)\n return path.substring(0, path.length - 1);\n\n return path;\n};\n\nconst createUrlMatcher = path => {\n let matcher;\n const segments = path.split('/');\n const optionals = segments.map(it => it === '*' || it.indexOf('?') === it.length - 1);\n const containsVariables = path.indexOf(':') !== -1;\n const containsAnySegment = path.indexOf('*') !== -1;\n const containsNot = path.indexOf('!') !== -1;\n\n if (!containsAnySegment && !containsVariables && !containsNot) {\n matcher = (p) => p === path\n } else {\n const endsWithAny = path.lastIndexOf('*') === path.length - 1;\n const matchers = segments.map((segment, i) => {\n let matcher;\n const variableNameIndex = segment.indexOf(':');\n if (segment === '*')\n matcher = () => true;\n else if (variableNameIndex !== -1) {\n let variable = segment.substring(variableNameIndex + 1);\n let regex = null\n if (variable.indexOf('(') !== -1) {\n let regexStart = variable.indexOf('(');\n regex = new RegExp(variable.substring(regexStart))\n variable = variable.substring(0, regexStart);\n }\n if (variable.indexOf('?') !== -1)\n variable = variable.substring(0, variable.indexOf('?'));\n\n const prefix = variableNameIndex && segment.substring(0, variableNameIndex);\n matcher = (p, params) => {\n if (regex && !p.match(regex))\n return false\n\n if (!p && !optionals[i])\n return false;\n if (prefix) {\n if (p.indexOf(prefix) === 0)\n p = p.substring(variableNameIndex);\n else\n return false;\n }\n\n params[variable] = p;\n return true;\n }\n } else if (segment.indexOf('!') === 0) {\n const not = segment.substring(1);\n matcher = (p) => p !== not;\n } else\n matcher = (p) => p === segment;\n return matcher;\n });\n\n matcher = (path, params) => {\n const segments = path.split('/');\n const length = Math.min(matchers.length, segments.length);\n\n // only exact match if mapping not ends with *\n if (!endsWithAny && matchers.length < segments.length)\n return false;\n\n // check that each segment matches\n for (let i = 0; i < length; i++) {\n if (!matchers[i](segments[i], params))\n return false;\n }\n\n // check that all other segments are optional\n for (let i = length; i < optionals.length; i++) {\n if (!optionals[i])\n return false;\n }\n\n return true;\n };\n }\n return matcher\n};\n\nconst createUrlMatchers = path => {\n if (Array.isArray(path)) {\n const matchers = path.map(it => createUrlMatcher(it));\n return (path, params) => {\n for (let i = 0; i < matchers.length; i++) {\n let props = {};\n if (matchers[i](path, props)) {\n Object.assign(params, props);\n return true;\n }\n }\n return false;\n }\n } else {\n return createUrlMatcher(path);\n }\n};\n\nconst selfProps = setOf([\n 'children',\n 'path',\n 'controller',\n 'onToggle',\n]);\n\nclass Route extends PureComponent {\n\n constructor(properties) {\n super(properties);\n const that = this;\n that.state = {};\n let matcher;\n\n const props = propsGetter(that);\n const [\n isRendering,\n paramsState,\n mergedPropsState,\n ] = stateGSs(that, 3);\n\n const process = () => {\n let params = {};\n let nextState = {};\n let isMatching = matcher(cleanPath(WINDOW.location.pathname), params);\n\n const toggle = isMatching !== isRendering();\n toggle && (nextState[isRendering] = isMatching);\n\n if (isDifferent(paramsState(), params)) {\n nextState[mergedPropsState] = Object.assign(allPropsExcept(props(), selfProps), params);\n nextState[paramsState] = params;\n }\n\n //set new state just once to avoid several renders\n setState(that, nextState, () => {\n toggle && orNoop(props().onToggle)(isMatching);\n })\n };\n\n that[componentDidUpdate] = (prevProps, prevState) => {\n if (props() !== prevProps) {\n let mergedProps = Object.assign(allPropsExcept(props(), selfProps), paramsState());\n if (isDifferent(mergedProps, mergedPropsState()))\n mergedPropsState(mergedProps);\n }\n };\n\n that[render] = () => {\n const {children, controller} = props();\n return (controller || DefaultController)(isRendering(), children, mergedPropsState());\n };\n\n that[componentDidMount] = () => {\n matcher = createUrlMatchers(props().path);\n\n historyEvents.forEach(it => {\n addEventListener(WINDOW, it, process);\n });\n process();\n };\n\n that[componentWillUnmount] = () => {\n historyEvents.forEach(it => {\n removeEventListener(WINDOW, it, process);\n });\n };\n }\n}\n\nif (window.isNotProductionEnvironment) {\n Route.propTypes = {\n path: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.string)\n ]).isRequired,\n controller: PropTypes.func,\n onToggle: PropTypes.func,\n };\n}\n\nconst DefaultController = (matches, children, props) => {\n if (!matches || !children) return null;\n if (Object.keys(props).length > 0) {\n return React.Children.map(children, child => React.cloneElement(child, props));\n }\n return children;\n};\n\nexport default Route;"],"names":["historyEvents","cleanPath","path","length","lastIndexOf","substring","createUrlMatcher","matcher","segments","split","optionals","map","it","indexOf","containsVariables","containsAnySegment","containsNot","p","endsWithAny","matchers","segment","i","variableNameIndex","variable","regex","regexStart","RegExp","prefix","params","match","not","Math","min","createUrlMatchers","Array","isArray","props","Object","assign","selfProps","setOf","Route","properties","that","state","propsGetter","stateGSs","isRendering","paramsState","mergedPropsState","process","nextState","isMatching","WINDOW","location","pathname","toggle","isDifferent","allPropsExcept","setState","orNoop","onToggle","componentDidUpdate","prevProps","prevState","mergedProps","render","children","controller","DefaultController","componentDidMount","forEach","addEventListener","componentWillUnmount","removeEventListener","PureComponent","window","isNotProductionEnvironment","propTypes","PropTypes","oneOfType","string","arrayOf","isRequired","func","matches","keys","React","Children","child","cloneElement"],"mappings":"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"}
1
+ {"version":3,"file":"Route.js","sources":["../../../../src/react-ui-basics/router/Route.js"],"sourcesContent":["import React from 'react';\nimport ReactCreateElement from '../ReactCreateElement';\nimport PropTypes from 'prop-types';\nimport './HistoryTools'\nimport {allPropsExcept, isDifferent, orNoop, setOf, WINDOW, addEventListener, removeEventListener} from \"../Tools\";\nimport {componentDidUpdate, render, PureComponent, componentDidMount, componentWillUnmount, propsGetter, stateGSs, setState} from \"../ReactConstants\";\n\nconst historyEvents = ['popstate', 'pushState', 'replaceState'];\n\nconst cleanPath = (path) => {\n if (path.length > 1 && path.lastIndexOf('/') === path.length - 1)\n return path.substring(0, path.length - 1);\n\n return path;\n};\n\nconst createUrlMatcher = path => {\n let matcher;\n const segments = path.split('/');\n const optionals = segments.map(it => it === '*' || it.indexOf('?') === it.length - 1);\n const containsVariables = path.indexOf(':') !== -1;\n const containsAnySegment = path.indexOf('*') !== -1;\n const containsNot = path.indexOf('!') !== -1;\n\n if (!containsAnySegment && !containsVariables && !containsNot) {\n matcher = (p) => p === path\n } else {\n const endsWithAny = path.lastIndexOf('*') === path.length - 1;\n const matchers = segments.map((segment, i) => {\n let matcher;\n const variableNameIndex = segment.indexOf(':');\n if (segment === '*')\n matcher = () => true;\n else if (variableNameIndex !== -1) {\n let variable = segment.substring(variableNameIndex + 1);\n let regex = null\n if (variable.indexOf('?') !== -1)\n variable = variable.substring(0, variable.indexOf('?'));\n if (variable.indexOf('(') !== -1) {\n let regexStart = variable.indexOf('(');\n regex = new RegExp(variable.substring(regexStart))\n variable = variable.substring(0, regexStart);\n }\n\n const prefix = variableNameIndex && segment.substring(0, variableNameIndex);\n matcher = (p, params) => {\n if (regex && !!p && !p.match(regex))\n return false\n\n if (!p && !optionals[i])\n return false;\n if (prefix) {\n if (p.indexOf(prefix) === 0)\n p = p.substring(variableNameIndex);\n else\n return false;\n }\n\n params[variable] = p;\n return true;\n }\n } else if (segment.indexOf('!') === 0) {\n const not = segment.substring(1);\n matcher = (p) => p !== not;\n } else\n matcher = (p) => p === segment;\n return matcher;\n });\n\n matcher = (path, params) => {\n const segments = path.split('/');\n const length = Math.min(matchers.length, segments.length);\n\n // only exact match if mapping not ends with *\n if (!endsWithAny && matchers.length < segments.length)\n return false;\n\n // check that each segment matches\n for (let i = 0; i < length; i++) {\n if (!matchers[i](segments[i], params))\n return false;\n }\n\n // check that all other segments are optional\n for (let i = length; i < optionals.length; i++) {\n if (!optionals[i])\n return false;\n }\n\n return true;\n };\n }\n return matcher\n};\n\nconst createUrlMatchers = path => {\n if (Array.isArray(path)) {\n const matchers = path.map(it => createUrlMatcher(it));\n return (path, params) => {\n for (let i = 0; i < matchers.length; i++) {\n let props = {};\n if (matchers[i](path, props)) {\n Object.assign(params, props);\n return true;\n }\n }\n return false;\n }\n } else {\n return createUrlMatcher(path);\n }\n};\n\nconst selfProps = setOf([\n 'children',\n 'path',\n 'controller',\n 'onToggle',\n]);\n\nclass Route extends PureComponent {\n\n constructor(properties) {\n super(properties);\n const that = this;\n that.state = {};\n let matcher;\n\n const props = propsGetter(that);\n const [\n isRendering,\n paramsState,\n mergedPropsState,\n ] = stateGSs(that, 3);\n\n const process = () => {\n let params = {};\n let nextState = {};\n let isMatching = matcher(cleanPath(WINDOW.location.pathname), params);\n\n const toggle = isMatching !== isRendering();\n toggle && (nextState[isRendering] = isMatching);\n\n if (isDifferent(paramsState(), params)) {\n nextState[mergedPropsState] = Object.assign(allPropsExcept(props(), selfProps), params);\n nextState[paramsState] = params;\n }\n\n //set new state just once to avoid several renders\n setState(that, nextState, () => {\n toggle && orNoop(props().onToggle)(isMatching);\n })\n };\n\n that[componentDidUpdate] = (prevProps, prevState) => {\n if (props() !== prevProps) {\n let mergedProps = Object.assign(allPropsExcept(props(), selfProps), paramsState());\n if (isDifferent(mergedProps, mergedPropsState()))\n mergedPropsState(mergedProps);\n }\n };\n\n that[render] = () => {\n const {children, controller} = props();\n return (controller || DefaultController)(isRendering(), children, mergedPropsState());\n };\n\n that[componentDidMount] = () => {\n matcher = createUrlMatchers(props().path);\n\n historyEvents.forEach(it => {\n addEventListener(WINDOW, it, process);\n });\n process();\n };\n\n that[componentWillUnmount] = () => {\n historyEvents.forEach(it => {\n removeEventListener(WINDOW, it, process);\n });\n };\n }\n}\n\nif (window.isNotProductionEnvironment) {\n Route.propTypes = {\n path: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.string)\n ]).isRequired,\n controller: PropTypes.func,\n onToggle: PropTypes.func,\n };\n}\n\nconst DefaultController = (matches, children, props) => {\n if (!matches || !children) return null;\n if (Object.keys(props).length > 0) {\n return React.Children.map(children, child => React.cloneElement(child, props));\n }\n return children;\n};\n\nexport default Route;"],"names":["historyEvents","cleanPath","path","length","lastIndexOf","substring","createUrlMatcher","matcher","segments","split","optionals","map","it","indexOf","containsVariables","containsAnySegment","containsNot","p","endsWithAny","matchers","segment","i","variableNameIndex","variable","regex","regexStart","RegExp","prefix","params","match","not","Math","min","createUrlMatchers","Array","isArray","props","Object","assign","selfProps","setOf","Route","properties","that","state","propsGetter","stateGSs","isRendering","paramsState","mergedPropsState","process","nextState","isMatching","WINDOW","location","pathname","toggle","isDifferent","allPropsExcept","setState","orNoop","onToggle","componentDidUpdate","prevProps","prevState","mergedProps","render","children","controller","DefaultController","componentDidMount","forEach","addEventListener","componentWillUnmount","removeEventListener","PureComponent","window","isNotProductionEnvironment","propTypes","PropTypes","oneOfType","string","arrayOf","isRequired","func","matches","keys","React","Children","child","cloneElement"],"mappings":"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"}
@@ -25,7 +25,7 @@ var createProxy = function createProxy(target) {
25
25
  if (!isChanged()) return target;
26
26
  if (changedValue && !innerProxies) return changedValue;
27
27
  if (innerProxies) {
28
- var result = changedValue || _objectSpread2({}, target);
28
+ var result = changedValue || (Array.isArray(target) ? _toConsumableArray(target) : _objectSpread2({}, target));
29
29
  for (var key in innerProxies) {
30
30
  result[key] = innerProxies[key].bake();
31
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ProxyTools.js","sources":["../../../../src/react-ui-basics/store/ProxyTools.js"],"sourcesContent":["import {UNDEFINED} from \"../Tools\";\n\nexport const createProxy = (target) => {\n if(!target)\n return target\n if (target.__isProxy)\n return target;\n\n let changedValue = UNDEFINED;\n let deletedKeys = UNDEFINED;\n let innerProxies = UNDEFINED\n const isChanged = () => changedValue || (innerProxies && Object.values(innerProxies).some(it => it.__changed));\n\n return new Proxy(target, {\n get: function (target, prop) {\n if (prop === '__isProxy')\n return true\n if (prop === '__changed')\n return isChanged();\n if (prop === 'bake')\n return () => {\n // console.log('bake', changedValue, innerProxies)\n if (!isChanged())\n return target\n\n if (changedValue && !innerProxies)\n return changedValue\n\n if (innerProxies) {\n const result = changedValue || {...target};\n\n for (let key in innerProxies) {\n result[key] = innerProxies[key].bake()\n }\n return result\n }\n\n throw new Error('state not implemented yet')\n }\n\n // console.log('get', {target, prop})\n const innerProxy = innerProxies && innerProxies[prop];\n if (innerProxy)\n return innerProxy\n\n const changed = changedValue && changedValue[prop]\n if (changed !== UNDEFINED)\n return changed\n\n if (deletedKeys && deletedKeys[prop])\n return null\n\n const value = target[prop];\n if (value && typeof value === 'object') {\n !innerProxies && (innerProxies = {})\n return innerProxies[prop] = createProxy(value)\n }\n\n return value;\n },\n set: function (target, prop, newval) {\n // console.log('set', {target, prop, newval})\n if (!changedValue) changedValue = Array.isArray(target) ? [...target] : {...target}\n\n if (newval && typeof newval === 'object') {\n !innerProxies && (innerProxies = {})\n innerProxies[prop] = newval = createProxy(newval)\n } else {\n innerProxies && (delete innerProxies[prop])\n }\n changedValue[prop] = newval\n // console.log('changedValue', changedValue)\n return true;\n },\n deleteProperty: function (target, prop) {\n // console.log('delete', {target, prop})\n !changedValue && (changedValue = Array.isArray(target) ? [...target] : {...target})\n\n if (!prop in changedValue)\n return false;\n\n delete changedValue[prop]\n innerProxies && delete innerProxies[prop]\n !deletedKeys && (deletedKeys = {})\n deletedKeys[prop] = true;\n return true;\n }\n })\n}\n"],"names":["createProxy","target","__isProxy","changedValue","UNDEFINED","deletedKeys","innerProxies","isChanged","Object","values","some","it","__changed","Proxy","get","prop","result","_objectSpread","key","bake","Error","innerProxy","changed","value","set","newval","Array","isArray","deleteProperty"],"mappings":"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"}
1
+ {"version":3,"file":"ProxyTools.js","sources":["../../../../src/react-ui-basics/store/ProxyTools.js"],"sourcesContent":["import {UNDEFINED} from \"../Tools\";\n\nexport const createProxy = (target) => {\n if(!target)\n return target\n if (target.__isProxy)\n return target;\n\n let changedValue = UNDEFINED;\n let deletedKeys = UNDEFINED;\n let innerProxies = UNDEFINED\n const isChanged = () => changedValue || (innerProxies && Object.values(innerProxies).some(it => it.__changed));\n\n return new Proxy(target, {\n get: function (target, prop) {\n if (prop === '__isProxy')\n return true\n if (prop === '__changed')\n return isChanged();\n if (prop === 'bake')\n return () => {\n // console.log('bake', changedValue, innerProxies)\n if (!isChanged())\n return target\n\n if (changedValue && !innerProxies)\n return changedValue\n\n if (innerProxies) {\n const result = changedValue || (Array.isArray(target) ? [...target] : {...target});\n\n for (let key in innerProxies) {\n result[key] = innerProxies[key].bake()\n }\n return result\n }\n\n throw new Error('state not implemented yet')\n }\n\n // console.log('get', {target, prop})\n const innerProxy = innerProxies && innerProxies[prop];\n if (innerProxy)\n return innerProxy\n\n const changed = changedValue && changedValue[prop]\n if (changed !== UNDEFINED)\n return changed\n\n if (deletedKeys && deletedKeys[prop])\n return null\n\n const value = target[prop];\n if (value && typeof value === 'object') {\n !innerProxies && (innerProxies = {})\n return innerProxies[prop] = createProxy(value)\n }\n\n return value;\n },\n set: function (target, prop, newval) {\n // console.log('set', {target, prop, newval})\n if (!changedValue) changedValue = Array.isArray(target) ? [...target] : {...target}\n\n if (newval && typeof newval === 'object') {\n !innerProxies && (innerProxies = {})\n innerProxies[prop] = newval = createProxy(newval)\n } else {\n innerProxies && (delete innerProxies[prop])\n }\n changedValue[prop] = newval\n // console.log('changedValue', changedValue)\n return true;\n },\n deleteProperty: function (target, prop) {\n // console.log('delete', {target, prop})\n !changedValue && (changedValue = Array.isArray(target) ? [...target] : {...target})\n\n if (!prop in changedValue)\n return false;\n\n delete changedValue[prop]\n innerProxies && delete innerProxies[prop]\n !deletedKeys && (deletedKeys = {})\n deletedKeys[prop] = true;\n return true;\n }\n })\n}\n"],"names":["createProxy","target","__isProxy","changedValue","UNDEFINED","deletedKeys","innerProxies","isChanged","Object","values","some","it","__changed","Proxy","get","prop","result","Array","isArray","key","bake","Error","innerProxy","changed","value","set","newval","_objectSpread","deleteProperty"],"mappings":"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"}