module-package-comp 1.5.0 → 2.3.0

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/dist/index.css CHANGED
@@ -562,6 +562,10 @@ video {
562
562
  visibility: visible;
563
563
  }
564
564
 
565
+ .fixed {
566
+ position: fixed;
567
+ }
568
+
565
569
  .absolute {
566
570
  position: absolute;
567
571
  }
@@ -570,11 +574,23 @@ video {
570
574
  position: relative;
571
575
  }
572
576
 
577
+ .inset-0 {
578
+ inset: 0px;
579
+ }
580
+
573
581
  .inset-y-0 {
574
582
  top: 0px;
575
583
  bottom: 0px;
576
584
  }
577
585
 
586
+ .-left-2 {
587
+ left: -0.5rem;
588
+ }
589
+
590
+ .-top-2 {
591
+ top: -0.5rem;
592
+ }
593
+
578
594
  .-top-3 {
579
595
  top: -0.75rem;
580
596
  }
@@ -599,6 +615,15 @@ video {
599
615
  z-index: 10;
600
616
  }
601
617
 
618
+ .z-50 {
619
+ z-index: 50;
620
+ }
621
+
622
+ .mx-4 {
623
+ margin-left: 1rem;
624
+ margin-right: 1rem;
625
+ }
626
+
602
627
  .my-6 {
603
628
  margin-top: 1.5rem;
604
629
  margin-bottom: 1.5rem;
@@ -621,6 +646,10 @@ video {
621
646
  margin-bottom: 1rem;
622
647
  }
623
648
 
649
+ .mb-6 {
650
+ margin-bottom: 1.5rem;
651
+ }
652
+
624
653
  .mb-8 {
625
654
  margin-bottom: 2rem;
626
655
  }
@@ -678,18 +707,54 @@ video {
678
707
  height: 50%;
679
708
  }
680
709
 
710
+ .h-2 {
711
+ height: 0.5rem;
712
+ }
713
+
714
+ .h-3 {
715
+ height: 0.75rem;
716
+ }
717
+
718
+ .h-4 {
719
+ height: 1rem;
720
+ }
721
+
681
722
  .h-5 {
682
723
  height: 1.25rem;
683
724
  }
684
725
 
726
+ .h-6 {
727
+ height: 1.5rem;
728
+ }
729
+
685
730
  .max-h-60 {
686
731
  max-height: 15rem;
687
732
  }
688
733
 
734
+ .max-h-\[90vh\] {
735
+ max-height: 90vh;
736
+ }
737
+
738
+ .w-2 {
739
+ width: 0.5rem;
740
+ }
741
+
742
+ .w-3 {
743
+ width: 0.75rem;
744
+ }
745
+
746
+ .w-4 {
747
+ width: 1rem;
748
+ }
749
+
689
750
  .w-5 {
690
751
  width: 1.25rem;
691
752
  }
692
753
 
754
+ .w-6 {
755
+ width: 1.5rem;
756
+ }
757
+
693
758
  .w-64 {
694
759
  width: 16rem;
695
760
  }
@@ -698,10 +763,32 @@ video {
698
763
  width: 100%;
699
764
  }
700
765
 
766
+ .min-w-0 {
767
+ min-width: 0px;
768
+ }
769
+
701
770
  .min-w-72 {
702
771
  min-width: 18rem;
703
772
  }
704
773
 
774
+ .max-w-3xl {
775
+ max-width: 48rem;
776
+ }
777
+
778
+ .flex-1 {
779
+ flex: 1 1 0%;
780
+ }
781
+
782
+ .flex-shrink {
783
+ flex-shrink: 1;
784
+ }
785
+
786
+ .scale-125 {
787
+ --tw-scale-x: 1.25;
788
+ --tw-scale-y: 1.25;
789
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
790
+ }
791
+
705
792
  .cursor-pointer {
706
793
  cursor: pointer;
707
794
  }
@@ -714,14 +801,34 @@ video {
714
801
  list-style-type: disc;
715
802
  }
716
803
 
804
+ .flex-col {
805
+ flex-direction: column;
806
+ }
807
+
808
+ .flex-wrap {
809
+ flex-wrap: wrap;
810
+ }
811
+
812
+ .items-start {
813
+ align-items: flex-start;
814
+ }
815
+
717
816
  .items-center {
718
817
  align-items: center;
719
818
  }
720
819
 
820
+ .justify-end {
821
+ justify-content: flex-end;
822
+ }
823
+
721
824
  .justify-center {
722
825
  justify-content: center;
723
826
  }
724
827
 
828
+ .justify-between {
829
+ justify-content: space-between;
830
+ }
831
+
725
832
  .gap-2 {
726
833
  gap: 0.5rem;
727
834
  }
@@ -736,6 +843,17 @@ video {
736
843
  margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));
737
844
  }
738
845
 
846
+ .divide-y > :not([hidden]) ~ :not([hidden]) {
847
+ --tw-divide-y-reverse: 0;
848
+ border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
849
+ border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
850
+ }
851
+
852
+ .divide-gray-100 > :not([hidden]) ~ :not([hidden]) {
853
+ --tw-divide-opacity: 1;
854
+ border-color: rgb(243 244 246 / var(--tw-divide-opacity));
855
+ }
856
+
739
857
  .self-end {
740
858
  align-self: flex-end;
741
859
  }
@@ -748,6 +866,12 @@ video {
748
866
  overflow-y: auto;
749
867
  }
750
868
 
869
+ .truncate {
870
+ overflow: hidden;
871
+ text-overflow: ellipsis;
872
+ white-space: nowrap;
873
+ }
874
+
751
875
  .rounded {
752
876
  border-radius: 0.25rem;
753
877
  }
@@ -788,6 +912,11 @@ video {
788
912
  border-top-width: 1px;
789
913
  }
790
914
 
915
+ .border-blue-500 {
916
+ --tw-border-opacity: 1;
917
+ border-color: rgb(59 130 246 / var(--tw-border-opacity));
918
+ }
919
+
791
920
  .border-gray-200 {
792
921
  --tw-border-opacity: 1;
793
922
  border-color: rgb(229 231 235 / var(--tw-border-opacity));
@@ -803,21 +932,65 @@ video {
803
932
  border-color: rgb(252 165 165 / var(--tw-border-opacity));
804
933
  }
805
934
 
935
+ .border-yellow-200 {
936
+ --tw-border-opacity: 1;
937
+ border-color: rgb(254 240 138 / var(--tw-border-opacity));
938
+ }
939
+
806
940
  .bg-\[\#0096DC\] {
807
941
  --tw-bg-opacity: 1;
808
942
  background-color: rgb(0 150 220 / var(--tw-bg-opacity));
809
943
  }
810
944
 
945
+ .bg-black\/50 {
946
+ background-color: rgb(0 0 0 / 0.5);
947
+ }
948
+
949
+ .bg-blue-300 {
950
+ --tw-bg-opacity: 1;
951
+ background-color: rgb(147 197 253 / var(--tw-bg-opacity));
952
+ }
953
+
954
+ .bg-blue-50 {
955
+ --tw-bg-opacity: 1;
956
+ background-color: rgb(239 246 255 / var(--tw-bg-opacity));
957
+ }
958
+
959
+ .bg-blue-500 {
960
+ --tw-bg-opacity: 1;
961
+ background-color: rgb(59 130 246 / var(--tw-bg-opacity));
962
+ }
963
+
964
+ .bg-blue-600 {
965
+ --tw-bg-opacity: 1;
966
+ background-color: rgb(37 99 235 / var(--tw-bg-opacity));
967
+ }
968
+
811
969
  .bg-blue-800 {
812
970
  --tw-bg-opacity: 1;
813
971
  background-color: rgb(30 64 175 / var(--tw-bg-opacity));
814
972
  }
815
973
 
974
+ .bg-gray-100 {
975
+ --tw-bg-opacity: 1;
976
+ background-color: rgb(243 244 246 / var(--tw-bg-opacity));
977
+ }
978
+
979
+ .bg-gray-300 {
980
+ --tw-bg-opacity: 1;
981
+ background-color: rgb(209 213 219 / var(--tw-bg-opacity));
982
+ }
983
+
816
984
  .bg-gray-50 {
817
985
  --tw-bg-opacity: 1;
818
986
  background-color: rgb(249 250 251 / var(--tw-bg-opacity));
819
987
  }
820
988
 
989
+ .bg-green-100 {
990
+ --tw-bg-opacity: 1;
991
+ background-color: rgb(220 252 231 / var(--tw-bg-opacity));
992
+ }
993
+
821
994
  .bg-red-50 {
822
995
  --tw-bg-opacity: 1;
823
996
  background-color: rgb(254 242 242 / var(--tw-bg-opacity));
@@ -833,6 +1006,20 @@ video {
833
1006
  background-color: rgb(255 255 255 / var(--tw-bg-opacity));
834
1007
  }
835
1008
 
1009
+ .bg-yellow-100 {
1010
+ --tw-bg-opacity: 1;
1011
+ background-color: rgb(254 249 195 / var(--tw-bg-opacity));
1012
+ }
1013
+
1014
+ .bg-yellow-50 {
1015
+ --tw-bg-opacity: 1;
1016
+ background-color: rgb(254 252 232 / var(--tw-bg-opacity));
1017
+ }
1018
+
1019
+ .bg-opacity-30 {
1020
+ --tw-bg-opacity: 0.3;
1021
+ }
1022
+
836
1023
  .bg-opacity-85 {
837
1024
  --tw-bg-opacity: 0.85;
838
1025
  }
@@ -855,6 +1042,20 @@ video {
855
1042
  padding: 1rem;
856
1043
  }
857
1044
 
1045
+ .p-6 {
1046
+ padding: 1.5rem;
1047
+ }
1048
+
1049
+ .px-1 {
1050
+ padding-left: 0.25rem;
1051
+ padding-right: 0.25rem;
1052
+ }
1053
+
1054
+ .px-1\.5 {
1055
+ padding-left: 0.375rem;
1056
+ padding-right: 0.375rem;
1057
+ }
1058
+
858
1059
  .px-2 {
859
1060
  padding-left: 0.5rem;
860
1061
  padding-right: 0.5rem;
@@ -870,11 +1071,26 @@ video {
870
1071
  padding-right: 1rem;
871
1072
  }
872
1073
 
1074
+ .px-6 {
1075
+ padding-left: 1.5rem;
1076
+ padding-right: 1.5rem;
1077
+ }
1078
+
873
1079
  .px-8 {
874
1080
  padding-left: 2rem;
875
1081
  padding-right: 2rem;
876
1082
  }
877
1083
 
1084
+ .py-0 {
1085
+ padding-top: 0px;
1086
+ padding-bottom: 0px;
1087
+ }
1088
+
1089
+ .py-0\.5 {
1090
+ padding-top: 0.125rem;
1091
+ padding-bottom: 0.125rem;
1092
+ }
1093
+
878
1094
  .py-1 {
879
1095
  padding-top: 0.25rem;
880
1096
  padding-bottom: 0.25rem;
@@ -890,6 +1106,25 @@ video {
890
1106
  padding-bottom: 0.5rem;
891
1107
  }
892
1108
 
1109
+ .py-3 {
1110
+ padding-top: 0.75rem;
1111
+ padding-bottom: 0.75rem;
1112
+ }
1113
+
1114
+ .py-4 {
1115
+ padding-top: 1rem;
1116
+ padding-bottom: 1rem;
1117
+ }
1118
+
1119
+ .py-8 {
1120
+ padding-top: 2rem;
1121
+ padding-bottom: 2rem;
1122
+ }
1123
+
1124
+ .pb-4 {
1125
+ padding-bottom: 1rem;
1126
+ }
1127
+
893
1128
  .pl-10 {
894
1129
  padding-left: 2.5rem;
895
1130
  }
@@ -922,6 +1157,16 @@ video {
922
1157
  line-height: 1.25rem;
923
1158
  }
924
1159
 
1160
+ .text-xl {
1161
+ font-size: 1.25rem;
1162
+ line-height: 1.75rem;
1163
+ }
1164
+
1165
+ .text-xs {
1166
+ font-size: 0.75rem;
1167
+ line-height: 1rem;
1168
+ }
1169
+
925
1170
  .font-bold {
926
1171
  font-weight: 700;
927
1172
  }
@@ -949,21 +1194,46 @@ video {
949
1194
  color: rgb(37 99 235 / var(--tw-text-opacity));
950
1195
  }
951
1196
 
1197
+ .text-blue-700 {
1198
+ --tw-text-opacity: 1;
1199
+ color: rgb(29 78 216 / var(--tw-text-opacity));
1200
+ }
1201
+
952
1202
  .text-blue-800 {
953
1203
  --tw-text-opacity: 1;
954
1204
  color: rgb(30 64 175 / var(--tw-text-opacity));
955
1205
  }
956
1206
 
1207
+ .text-gray-500 {
1208
+ --tw-text-opacity: 1;
1209
+ color: rgb(107 114 128 / var(--tw-text-opacity));
1210
+ }
1211
+
1212
+ .text-gray-600 {
1213
+ --tw-text-opacity: 1;
1214
+ color: rgb(75 85 99 / var(--tw-text-opacity));
1215
+ }
1216
+
957
1217
  .text-gray-700 {
958
1218
  --tw-text-opacity: 1;
959
1219
  color: rgb(55 65 81 / var(--tw-text-opacity));
960
1220
  }
961
1221
 
1222
+ .text-gray-800 {
1223
+ --tw-text-opacity: 1;
1224
+ color: rgb(31 41 55 / var(--tw-text-opacity));
1225
+ }
1226
+
962
1227
  .text-gray-900 {
963
1228
  --tw-text-opacity: 1;
964
1229
  color: rgb(17 24 39 / var(--tw-text-opacity));
965
1230
  }
966
1231
 
1232
+ .text-green-700 {
1233
+ --tw-text-opacity: 1;
1234
+ color: rgb(21 128 61 / var(--tw-text-opacity));
1235
+ }
1236
+
967
1237
  .text-red-500 {
968
1238
  --tw-text-opacity: 1;
969
1239
  color: rgb(239 68 68 / var(--tw-text-opacity));
@@ -979,6 +1249,21 @@ video {
979
1249
  color: rgb(255 255 255 / var(--tw-text-opacity));
980
1250
  }
981
1251
 
1252
+ .text-yellow-700 {
1253
+ --tw-text-opacity: 1;
1254
+ color: rgb(161 98 7 / var(--tw-text-opacity));
1255
+ }
1256
+
1257
+ .opacity-50 {
1258
+ opacity: 0.5;
1259
+ }
1260
+
1261
+ .shadow-2xl {
1262
+ --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);
1263
+ --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);
1264
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1265
+ }
1266
+
982
1267
  .shadow-md {
983
1268
  --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
984
1269
  --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
@@ -989,15 +1274,47 @@ video {
989
1274
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
990
1275
  }
991
1276
 
1277
+ .transition-all {
1278
+ transition-property: all;
1279
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1280
+ transition-duration: 150ms;
1281
+ }
1282
+
1283
+ .transition-colors {
1284
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
1285
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1286
+ transition-duration: 150ms;
1287
+ }
1288
+
992
1289
  .last\:border-b-0:last-child {
993
1290
  border-bottom-width: 0px;
994
1291
  }
995
1292
 
1293
+ .hover\:border-gray-300:hover {
1294
+ --tw-border-opacity: 1;
1295
+ border-color: rgb(209 213 219 / var(--tw-border-opacity));
1296
+ }
1297
+
1298
+ .hover\:bg-blue-700:hover {
1299
+ --tw-bg-opacity: 1;
1300
+ background-color: rgb(29 78 216 / var(--tw-bg-opacity));
1301
+ }
1302
+
996
1303
  .hover\:bg-blue-800:hover {
997
1304
  --tw-bg-opacity: 1;
998
1305
  background-color: rgb(30 64 175 / var(--tw-bg-opacity));
999
1306
  }
1000
1307
 
1308
+ .hover\:bg-gray-100:hover {
1309
+ --tw-bg-opacity: 1;
1310
+ background-color: rgb(243 244 246 / var(--tw-bg-opacity));
1311
+ }
1312
+
1313
+ .hover\:bg-gray-200:hover {
1314
+ --tw-bg-opacity: 1;
1315
+ background-color: rgb(229 231 235 / var(--tw-bg-opacity));
1316
+ }
1317
+
1001
1318
  .hover\:bg-gray-50:hover {
1002
1319
  --tw-bg-opacity: 1;
1003
1320
  background-color: rgb(249 250 251 / var(--tw-bg-opacity));
@@ -1012,6 +1329,16 @@ video {
1012
1329
  --tw-bg-opacity: 1;
1013
1330
  }
1014
1331
 
1332
+ .hover\:text-blue-700:hover {
1333
+ --tw-text-opacity: 1;
1334
+ color: rgb(29 78 216 / var(--tw-text-opacity));
1335
+ }
1336
+
1337
+ .hover\:text-gray-700:hover {
1338
+ --tw-text-opacity: 1;
1339
+ color: rgb(55 65 81 / var(--tw-text-opacity));
1340
+ }
1341
+
1015
1342
  .focus\:border-none:focus {
1016
1343
  border-style: none;
1017
1344
  }
package/dist/index.d.ts CHANGED
@@ -1,4 +1,7 @@
1
1
  import "./index.css";
2
2
  export * from "./component/ComponentDisplayer";
3
+ export * from "./component/RubricDisplayer";
4
+ export * from "./component/PdfExportModal";
3
5
  export * from "./component/ShowAttr";
4
6
  export * from "./util/type";
7
+ export * from "./util/rubricDisplayer";
package/dist/index.js CHANGED
@@ -1,5 +1,8 @@
1
1
  import "./index.css";
2
2
  export * from "./component/ComponentDisplayer";
3
+ export * from "./component/RubricDisplayer";
4
+ export * from "./component/PdfExportModal";
3
5
  export * from "./component/ShowAttr";
4
6
  export * from "./util/type";
7
+ export * from "./util/rubricDisplayer";
5
8
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAErB,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AAErC,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAErB,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AAErC,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { Component, Data, Permission, ComponentDataHistory, RubricDataValues } from "./type";
2
+ /**
3
+ * Get permission level for a specific component
4
+ */
5
+ export declare function getComponentPermission(permission: Permission | null, componentName: string): "read" | "write" | null;
6
+ /**
7
+ * Check if user can edit a component (has write permission)
8
+ */
9
+ export declare function canEditComponent(permission: Permission | null, componentName: string): boolean;
10
+ /**
11
+ * Groups data by component using INDEX-BASED mapping for first N items,
12
+ * then COMPONENT ID matching for historical items.
13
+ *
14
+ * Data structure expectation:
15
+ * - First N items in datas (where N = components.length) are the LATEST data for each component
16
+ * - datas[0] -> components[0], datas[1] -> components[1], etc.
17
+ * - Remaining items (index >= N) are historical data, matched by component._id
18
+ *
19
+ * Example: 3 components, 5 datas
20
+ * - datas[0] -> components[0] (by index)
21
+ * - datas[1] -> components[1] (by index)
22
+ * - datas[2] -> components[2] (by index)
23
+ * - datas[3] -> matched by datas[3].component._id (historical)
24
+ * - datas[4] -> matched by datas[4].component._id (historical)
25
+ */
26
+ export declare function groupDataByComponentIndex(components: Component[], datas: (Data | null)[]): Map<string, ComponentDataHistory>;
27
+ /**
28
+ * Extracts the latest data values from datas array for initializing the form.
29
+ * Maps component ID -> DataJSON (the value field from the latest Data entry)
30
+ */
31
+ export declare function extractLatestDataValues(components: Component[], datas: (Data | null)[]): RubricDataValues;
32
+ /**
33
+ * Get only the modified data values by comparing current values with original values.
34
+ *
35
+ * @param currentValues - The current form values (dataValues)
36
+ * @param components - The components array
37
+ * @param datas - The original datas from backend (used to extract original values)
38
+ * @returns Only the data values that have been modified
39
+ *
40
+ * Usage:
41
+ * - In creation mode (no datas): returns all currentValues
42
+ * - In modification mode (datas exist): returns only modified values
43
+ */
44
+ export declare function getModifiedDataValues(currentValues: RubricDataValues, components: Component[], datas: (Data | null)[]): RubricDataValues;
45
+ /**
46
+ * Check if any data has been modified
47
+ */
48
+ export declare function hasModifiedData(currentValues: RubricDataValues, components: Component[], datas: (Data | null)[]): boolean;
49
+ /**
50
+ * Format date for display in French locale
51
+ */
52
+ export declare function formatDate(dateString?: string): string;