@cardenelabs/dragon 0.12.0 → 0.13.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.cjs CHANGED
@@ -675,7 +675,1087 @@ function checkValueExpression(expression, name) {
675
675
  return issues;
676
676
  }
677
677
 
678
+ // src/v05/readout-table.generated.ts
679
+ var \u90E8\u54C1\u306E\u8868 = {
680
+ "activity-feed": {
681
+ \u5FC5\u9808: ["source"],
682
+ \u6B04: {
683
+ source: "\u6587\u5B57\u5217",
684
+ max: "\u6570",
685
+ color: "\u6587\u5B57\u5217",
686
+ label: "\u6587\u5B57\u5217"
687
+ }
688
+ },
689
+ "alert-banner": {
690
+ \u5FC5\u9808: ["source"],
691
+ \u6B04: {
692
+ source: "\u6587\u5B57\u5217",
693
+ label: "\u6587\u5B57\u5217"
694
+ }
695
+ },
696
+ "array-bar": {
697
+ \u5FC5\u9808: ["source", "min", "max"],
698
+ \u6B04: {
699
+ source: "\u6587\u5B57\u5217",
700
+ min: "\u6570",
701
+ max: "\u6570",
702
+ color: "\u6587\u5B57\u5217",
703
+ label: "\u6587\u5B57\u5217"
704
+ }
705
+ },
706
+ "array-list": {
707
+ \u5FC5\u9808: ["source"],
708
+ \u6B04: {
709
+ source: "\u6587\u5B57\u5217",
710
+ itemTemplate: "\u6587\u5B57\u5217",
711
+ max: "\u6570",
712
+ label: "\u6587\u5B57\u5217"
713
+ }
714
+ },
715
+ "article-preview": {
716
+ \u5FC5\u9808: ["source"],
717
+ \u6B04: {
718
+ source: "\u6587\u5B57\u5217",
719
+ colorAccent: "\u6587\u5B57\u5217",
720
+ label: "\u6587\u5B57\u5217"
721
+ }
722
+ },
723
+ "attendance-grid": {
724
+ \u5FC5\u9808: ["source", "membersSource"],
725
+ \u6B04: {
726
+ source: "\u6587\u5B57\u5217",
727
+ membersSource: "\u6587\u5B57\u5217",
728
+ color: "\u6587\u5B57\u5217",
729
+ label: "\u6587\u5B57\u5217"
730
+ }
731
+ },
732
+ avatar: {
733
+ \u5FC5\u9808: ["source"],
734
+ \u6B04: {
735
+ source: "\u6587\u5B57\u5217",
736
+ size: "\u6570",
737
+ color: "\u6587\u5B57\u5217",
738
+ label: "\u6587\u5B57\u5217"
739
+ }
740
+ },
741
+ badge: {
742
+ \u5FC5\u9808: ["source"],
743
+ \u6B04: {
744
+ source: "\u6587\u5B57\u5217",
745
+ colorSource: "\u6587\u5B57\u5217",
746
+ map: "\u7D44\u306E\u4E26\u3073",
747
+ label: "\u6587\u5B57\u5217"
748
+ }
749
+ },
750
+ bar: {
751
+ \u5FC5\u9808: ["source", "min", "max"],
752
+ \u6B04: {
753
+ source: "\u6587\u5B57\u5217",
754
+ min: "\u6570",
755
+ max: "\u6570",
756
+ color: "\u6587\u5B57\u5217",
757
+ label: "\u6587\u5B57\u5217"
758
+ }
759
+ },
760
+ breadcrumb: {
761
+ \u5FC5\u9808: ["source"],
762
+ \u6B04: {
763
+ source: "\u6587\u5B57\u5217",
764
+ currentSource: "\u6587\u5B57\u5217",
765
+ color: "\u6587\u5B57\u5217",
766
+ label: "\u6587\u5B57\u5217"
767
+ }
768
+ },
769
+ "bubble-chart": {
770
+ \u5FC5\u9808: ["source", "xMin", "xMax", "yMin", "yMax", "rMin", "rMax"],
771
+ \u6B04: {
772
+ source: "\u6587\u5B57\u5217",
773
+ xMin: "\u6570",
774
+ xMax: "\u6570",
775
+ yMin: "\u6570",
776
+ yMax: "\u6570",
777
+ rMin: "\u6570",
778
+ rMax: "\u6570",
779
+ viewW: "\u6570",
780
+ viewH: "\u6570",
781
+ color: "\u6587\u5B57\u5217",
782
+ label: "\u6587\u5B57\u5217"
783
+ }
784
+ },
785
+ "bullet-chart": {
786
+ \u5FC5\u9808: ["source", "targetSource", "max"],
787
+ \u6B04: {
788
+ source: "\u6587\u5B57\u5217",
789
+ targetSource: "\u6587\u5B57\u5217",
790
+ max: "\u6570",
791
+ rangeBad: "\u6570",
792
+ rangeAvg: "\u6570",
793
+ viewW: "\u6570",
794
+ viewH: "\u6570",
795
+ colorActual: "\u6587\u5B57\u5217",
796
+ label: "\u6587\u5B57\u5217"
797
+ }
798
+ },
799
+ "calendar-heatmap": {
800
+ \u5FC5\u9808: ["source", "max"],
801
+ \u6B04: {
802
+ source: "\u6587\u5B57\u5217",
803
+ max: "\u6570",
804
+ cellSize: "\u6570",
805
+ cellGap: "\u6570",
806
+ colors: "\u6587\u5B57\u5217\u306E\u4E26\u3073",
807
+ label: "\u6587\u5B57\u5217"
808
+ }
809
+ },
810
+ "calendar-month": {
811
+ \u5FC5\u9808: ["source"],
812
+ \u6B04: {
813
+ source: "\u6587\u5B57\u5217",
814
+ monthName: "\u6587\u5B57\u5217",
815
+ color: "\u6587\u5B57\u5217",
816
+ label: "\u6587\u5B57\u5217"
817
+ }
818
+ },
819
+ "calendar-week": {
820
+ \u5FC5\u9808: ["source"],
821
+ \u6B04: {
822
+ source: "\u6587\u5B57\u5217",
823
+ cellSize: "\u6570",
824
+ color: "\u6587\u5B57\u5217",
825
+ label: "\u6587\u5B57\u5217"
826
+ }
827
+ },
828
+ candlestick: {
829
+ \u5FC5\u9808: ["source", "min", "max"],
830
+ \u6B04: {
831
+ source: "\u6587\u5B57\u5217",
832
+ min: "\u6570",
833
+ max: "\u6570",
834
+ viewW: "\u6570",
835
+ viewH: "\u6570",
836
+ colorUp: "\u6587\u5B57\u5217",
837
+ colorDown: "\u6587\u5B57\u5217",
838
+ label: "\u6587\u5B57\u5217"
839
+ }
840
+ },
841
+ "cart-summary": {
842
+ \u5FC5\u9808: ["source"],
843
+ \u6B04: {
844
+ source: "\u6587\u5B57\u5217",
845
+ currency: "\u6587\u5B57\u5217",
846
+ colorTotal: "\u6587\u5B57\u5217",
847
+ label: "\u6587\u5B57\u5217"
848
+ }
849
+ },
850
+ "chat-bubble": {
851
+ \u5FC5\u9808: ["source"],
852
+ \u6B04: {
853
+ source: "\u6587\u5B57\u5217",
854
+ max: "\u6570",
855
+ colorSelf: "\u6587\u5B57\u5217",
856
+ colorOther: "\u6587\u5B57\u5217",
857
+ label: "\u6587\u5B57\u5217"
858
+ }
859
+ },
860
+ checklist: {
861
+ \u5FC5\u9808: ["source"],
862
+ \u6B04: {
863
+ source: "\u6587\u5B57\u5217",
864
+ color: "\u6587\u5B57\u5217",
865
+ label: "\u6587\u5B57\u5217"
866
+ }
867
+ },
868
+ "chess-board": {
869
+ \u5FC5\u9808: ["source"],
870
+ \u6B04: {
871
+ source: "\u6587\u5B57\u5217",
872
+ cellSize: "\u6570",
873
+ label: "\u6587\u5B57\u5217"
874
+ }
875
+ },
876
+ "circular-gauge": {
877
+ \u5FC5\u9808: ["source", "min", "max"],
878
+ \u6B04: {
879
+ source: "\u6587\u5B57\u5217",
880
+ min: "\u6570",
881
+ max: "\u6570",
882
+ viewW: "\u6570",
883
+ viewH: "\u6570",
884
+ color: "\u6587\u5B57\u5217",
885
+ unit: "\u6587\u5B57\u5217",
886
+ label: "\u6587\u5B57\u5217"
887
+ }
888
+ },
889
+ "commit-list": {
890
+ \u5FC5\u9808: ["source"],
891
+ \u6B04: {
892
+ source: "\u6587\u5B57\u5217",
893
+ max: "\u6570",
894
+ color: "\u6587\u5B57\u5217",
895
+ label: "\u6587\u5B57\u5217"
896
+ }
897
+ },
898
+ "confidence-meter": {
899
+ \u5FC5\u9808: ["source"],
900
+ \u6B04: {
901
+ source: "\u6587\u5B57\u5217",
902
+ lowThreshold: "\u6570",
903
+ highThreshold: "\u6570",
904
+ viewW: "\u6570",
905
+ viewH: "\u6570",
906
+ label: "\u6587\u5B57\u5217"
907
+ }
908
+ },
909
+ countup: {
910
+ \u5FC5\u9808: ["source"],
911
+ \u6B04: {
912
+ source: "\u6587\u5B57\u5217",
913
+ durationMs: "\u6570",
914
+ decimals: "\u6570",
915
+ unit: "\u6587\u5B57\u5217",
916
+ label: "\u6587\u5B57\u5217"
917
+ }
918
+ },
919
+ "coupon-code": {
920
+ \u5FC5\u9808: ["source"],
921
+ \u6B04: {
922
+ source: "\u6587\u5B57\u5217",
923
+ colorApplied: "\u6587\u5B57\u5217",
924
+ label: "\u6587\u5B57\u5217"
925
+ }
926
+ },
927
+ delta: {
928
+ \u5FC5\u9808: ["source"],
929
+ \u6B04: {
930
+ source: "\u6587\u5B57\u5217",
931
+ decimals: "\u6570",
932
+ unit: "\u6587\u5B57\u5217",
933
+ label: "\u6587\u5B57\u5217"
934
+ }
935
+ },
936
+ "diff-counter": {
937
+ \u5FC5\u9808: ["additionsSource", "deletionsSource"],
938
+ \u6B04: {
939
+ additionsSource: "\u6587\u5B57\u5217",
940
+ deletionsSource: "\u6587\u5B57\u5217",
941
+ colorAdd: "\u6587\u5B57\u5217",
942
+ colorDel: "\u6587\u5B57\u5217",
943
+ label: "\u6587\u5B57\u5217"
944
+ }
945
+ },
946
+ donut: {
947
+ \u5FC5\u9808: ["source"],
948
+ \u6B04: {
949
+ source: "\u6587\u5B57\u5217",
950
+ viewW: "\u6570",
951
+ viewH: "\u6570",
952
+ colors: "\u6587\u5B57\u5217\u306E\u4E26\u3073",
953
+ innerRatio: "\u6570",
954
+ label: "\u6587\u5B57\u5217"
955
+ }
956
+ },
957
+ "event-log": {
958
+ \u5FC5\u9808: ["source"],
959
+ \u6B04: {
960
+ source: "\u6587\u5B57\u5217",
961
+ max: "\u6570",
962
+ label: "\u6587\u5B57\u5217"
963
+ }
964
+ },
965
+ "file-dropzone": {
966
+ \u5FC5\u9808: ["source"],
967
+ \u6B04: {
968
+ source: "\u6587\u5B57\u5217",
969
+ colorActive: "\u6587\u5B57\u5217",
970
+ label: "\u6587\u5B57\u5217"
971
+ }
972
+ },
973
+ "form-summary": {
974
+ \u5FC5\u9808: ["source"],
975
+ \u6B04: {
976
+ source: "\u6587\u5B57\u5217",
977
+ color: "\u6587\u5B57\u5217",
978
+ label: "\u6587\u5B57\u5217"
979
+ }
980
+ },
981
+ "fuel-bar": {
982
+ \u5FC5\u9808: ["source"],
983
+ \u6B04: {
984
+ source: "\u6587\u5B57\u5217",
985
+ segments: "\u6570",
986
+ lowThreshold: "\u6570",
987
+ highThreshold: "\u6570",
988
+ viewW: "\u6570",
989
+ viewH: "\u6570",
990
+ label: "\u6587\u5B57\u5217"
991
+ }
992
+ },
993
+ funnel: {
994
+ \u5FC5\u9808: ["source"],
995
+ \u6B04: {
996
+ source: "\u6587\u5B57\u5217",
997
+ viewW: "\u6570",
998
+ viewH: "\u6570",
999
+ colorTop: "\u6587\u5B57\u5217",
1000
+ colorBottom: "\u6587\u5B57\u5217",
1001
+ label: "\u6587\u5B57\u5217"
1002
+ }
1003
+ },
1004
+ gantt: {
1005
+ \u5FC5\u9808: ["source", "min", "max"],
1006
+ \u6B04: {
1007
+ source: "\u6587\u5B57\u5217",
1008
+ min: "\u6570",
1009
+ max: "\u6570",
1010
+ viewW: "\u6570",
1011
+ viewH: "\u6570",
1012
+ color: "\u6587\u5B57\u5217",
1013
+ label: "\u6587\u5B57\u5217"
1014
+ }
1015
+ },
1016
+ gauge: {
1017
+ \u5FC5\u9808: ["source", "min", "max"],
1018
+ \u6B04: {
1019
+ source: "\u6587\u5B57\u5217",
1020
+ min: "\u6570",
1021
+ max: "\u6570",
1022
+ color: "\u6587\u5B57\u5217",
1023
+ label: "\u6587\u5B57\u5217"
1024
+ }
1025
+ },
1026
+ grade: {
1027
+ \u5FC5\u9808: ["source"],
1028
+ \u6B04: {
1029
+ source: "\u6587\u5B57\u5217",
1030
+ max: "\u6570",
1031
+ label: "\u6587\u5B57\u5217"
1032
+ }
1033
+ },
1034
+ "heat-cell": {
1035
+ \u5FC5\u9808: ["source", "min", "max"],
1036
+ \u6B04: {
1037
+ source: "\u6587\u5B57\u5217",
1038
+ min: "\u6570",
1039
+ max: "\u6570",
1040
+ colors: "\u6587\u5B57\u5217\u306E\u4E26\u3073",
1041
+ label: "\u6587\u5B57\u5217"
1042
+ }
1043
+ },
1044
+ "icon-tile": {
1045
+ \u5FC5\u9808: ["source"],
1046
+ \u6B04: {
1047
+ source: "\u6587\u5B57\u5217",
1048
+ color: "\u6587\u5B57\u5217",
1049
+ label: "\u6587\u5B57\u5217"
1050
+ }
1051
+ },
1052
+ "kanban-board": {
1053
+ \u5FC5\u9808: ["source"],
1054
+ \u6B04: {
1055
+ source: "\u6587\u5B57\u5217",
1056
+ columnWidth: "\u6570",
1057
+ max: "\u6570",
1058
+ label: "\u6587\u5B57\u5217"
1059
+ }
1060
+ },
1061
+ "kpi-card": {
1062
+ \u5FC5\u9808: ["source", "historySource", "comparisonSource"],
1063
+ \u6B04: {
1064
+ source: "\u6587\u5B57\u5217",
1065
+ historySource: "\u6587\u5B57\u5217",
1066
+ comparisonSource: "\u6587\u5B57\u5217",
1067
+ unit: "\u6587\u5B57\u5217",
1068
+ colorPos: "\u6587\u5B57\u5217",
1069
+ colorNeg: "\u6587\u5B57\u5217",
1070
+ label: "\u6587\u5B57\u5217"
1071
+ }
1072
+ },
1073
+ "kpi-comparison": {
1074
+ \u5FC5\u9808: ["source"],
1075
+ \u6B04: {
1076
+ source: "\u6587\u5B57\u5217",
1077
+ max: "\u6570",
1078
+ colorA: "\u6587\u5B57\u5217",
1079
+ colorB: "\u6587\u5B57\u5217",
1080
+ label: "\u6587\u5B57\u5217"
1081
+ }
1082
+ },
1083
+ "kpi-trend-tile": {
1084
+ \u5FC5\u9808: ["source", "prevSource", "historySource"],
1085
+ \u6B04: {
1086
+ source: "\u6587\u5B57\u5217",
1087
+ prevSource: "\u6587\u5B57\u5217",
1088
+ historySource: "\u6587\u5B57\u5217",
1089
+ unit: "\u6587\u5B57\u5217",
1090
+ colorPos: "\u6587\u5B57\u5217",
1091
+ colorNeg: "\u6587\u5B57\u5217",
1092
+ label: "\u6587\u5B57\u5217"
1093
+ }
1094
+ },
1095
+ leaderboard: {
1096
+ \u5FC5\u9808: ["source"],
1097
+ \u6B04: {
1098
+ source: "\u6587\u5B57\u5217",
1099
+ max: "\u6570",
1100
+ color: "\u6587\u5B57\u5217",
1101
+ label: "\u6587\u5B57\u5217"
1102
+ }
1103
+ },
1104
+ "line-chart": {
1105
+ \u5FC5\u9808: ["source", "min", "max"],
1106
+ \u6B04: {
1107
+ source: "\u6587\u5B57\u5217",
1108
+ min: "\u6570",
1109
+ max: "\u6570",
1110
+ viewW: "\u6570",
1111
+ viewH: "\u6570",
1112
+ color: "\u6587\u5B57\u5217",
1113
+ fill: "\u771F\u507D",
1114
+ label: "\u6587\u5B57\u5217"
1115
+ }
1116
+ },
1117
+ "log-stream": {
1118
+ \u5FC5\u9808: ["source"],
1119
+ \u6B04: {
1120
+ source: "\u6587\u5B57\u5217",
1121
+ label: "\u6587\u5B57\u5217"
1122
+ }
1123
+ },
1124
+ "map-pin": {
1125
+ \u5FC5\u9808: ["source", "xMin", "xMax", "yMin", "yMax"],
1126
+ \u6B04: {
1127
+ source: "\u6587\u5B57\u5217",
1128
+ xMin: "\u6570",
1129
+ xMax: "\u6570",
1130
+ yMin: "\u6570",
1131
+ yMax: "\u6570",
1132
+ viewW: "\u6570",
1133
+ viewH: "\u6570",
1134
+ color: "\u6587\u5B57\u5217",
1135
+ label: "\u6587\u5B57\u5217"
1136
+ }
1137
+ },
1138
+ matrix: {
1139
+ \u5FC5\u9808: ["source", "min", "max"],
1140
+ \u6B04: {
1141
+ source: "\u6587\u5B57\u5217",
1142
+ min: "\u6570",
1143
+ max: "\u6570",
1144
+ cellSize: "\u6570",
1145
+ colors: "\u6587\u5B57\u5217\u306E\u4E26\u3073",
1146
+ showValue: "\u771F\u507D",
1147
+ label: "\u6587\u5B57\u5217"
1148
+ }
1149
+ },
1150
+ "media-player": {
1151
+ \u5FC5\u9808: ["source", "durationSource", "playingSource"],
1152
+ \u6B04: {
1153
+ source: "\u6587\u5B57\u5217",
1154
+ durationSource: "\u6587\u5B57\u5217",
1155
+ playingSource: "\u6587\u5B57\u5217",
1156
+ color: "\u6587\u5B57\u5217",
1157
+ viewW: "\u6570",
1158
+ label: "\u6587\u5B57\u5217"
1159
+ }
1160
+ },
1161
+ "metrics-grid": {
1162
+ \u5FC5\u9808: ["source"],
1163
+ \u6B04: {
1164
+ source: "\u6587\u5B57\u5217",
1165
+ color: "\u6587\u5B57\u5217",
1166
+ label: "\u6587\u5B57\u5217"
1167
+ }
1168
+ },
1169
+ "mini-map": {
1170
+ \u5FC5\u9808: ["source", "canvasW", "canvasH"],
1171
+ \u6B04: {
1172
+ source: "\u6587\u5B57\u5217",
1173
+ canvasW: "\u6570",
1174
+ canvasH: "\u6570",
1175
+ viewW: "\u6570",
1176
+ viewH: "\u6570",
1177
+ color: "\u6587\u5B57\u5217",
1178
+ label: "\u6587\u5B57\u5217"
1179
+ }
1180
+ },
1181
+ notification: {
1182
+ \u5FC5\u9808: ["kindSource", "titleSource"],
1183
+ \u6B04: {
1184
+ kindSource: "\u6587\u5B57\u5217",
1185
+ titleSource: "\u6587\u5B57\u5217",
1186
+ bodySource: "\u6587\u5B57\u5217",
1187
+ label: "\u6587\u5B57\u5217"
1188
+ }
1189
+ },
1190
+ "number-board": {
1191
+ \u5FC5\u9808: ["source"],
1192
+ \u6B04: {
1193
+ source: "\u6587\u5B57\u5217",
1194
+ prefix: "\u6587\u5B57\u5217",
1195
+ suffix: "\u6587\u5B57\u5217",
1196
+ size: "\u6570",
1197
+ color: "\u6587\u5B57\u5217",
1198
+ caption: "\u6587\u5B57\u5217",
1199
+ label: "\u6587\u5B57\u5217"
1200
+ }
1201
+ },
1202
+ "order-status": {
1203
+ \u5FC5\u9808: ["source", "stepsSource"],
1204
+ \u6B04: {
1205
+ source: "\u6587\u5B57\u5217",
1206
+ stepsSource: "\u6587\u5B57\u5217",
1207
+ color: "\u6587\u5B57\u5217",
1208
+ label: "\u6587\u5B57\u5217"
1209
+ }
1210
+ },
1211
+ "org-chart-mini": {
1212
+ \u5FC5\u9808: ["source"],
1213
+ \u6B04: {
1214
+ source: "\u6587\u5B57\u5217",
1215
+ color: "\u6587\u5B57\u5217",
1216
+ label: "\u6587\u5B57\u5217"
1217
+ }
1218
+ },
1219
+ "otp-input": {
1220
+ \u5FC5\u9808: ["source"],
1221
+ \u6B04: {
1222
+ source: "\u6587\u5B57\u5217",
1223
+ colorFocus: "\u6587\u5B57\u5217",
1224
+ label: "\u6587\u5B57\u5217"
1225
+ }
1226
+ },
1227
+ "password-strength": {
1228
+ \u5FC5\u9808: ["source"],
1229
+ \u6B04: {
1230
+ source: "\u6587\u5B57\u5217",
1231
+ colorStrong: "\u6587\u5B57\u5217",
1232
+ colorWeak: "\u6587\u5B57\u5217",
1233
+ label: "\u6587\u5B57\u5217"
1234
+ }
1235
+ },
1236
+ "path-progress": {
1237
+ \u5FC5\u9808: ["source", "pathD"],
1238
+ \u6B04: {
1239
+ source: "\u6587\u5B57\u5217",
1240
+ pathD: "\u6587\u5B57\u5217",
1241
+ viewW: "\u6570",
1242
+ viewH: "\u6570",
1243
+ strokeWidth: "\u6570",
1244
+ color: "\u6587\u5B57\u5217",
1245
+ max: "\u6570",
1246
+ label: "\u6587\u5B57\u5217"
1247
+ }
1248
+ },
1249
+ "percent-ring": {
1250
+ \u5FC5\u9808: ["source", "max"],
1251
+ \u6B04: {
1252
+ source: "\u6587\u5B57\u5217",
1253
+ max: "\u6570",
1254
+ color: "\u6587\u5B57\u5217",
1255
+ label: "\u6587\u5B57\u5217"
1256
+ }
1257
+ },
1258
+ "pill-group": {
1259
+ \u5FC5\u9808: ["source"],
1260
+ \u6B04: {
1261
+ source: "\u6587\u5B57\u5217",
1262
+ color: "\u6587\u5B57\u5217",
1263
+ label: "\u6587\u5B57\u5217"
1264
+ }
1265
+ },
1266
+ podium: {
1267
+ \u5FC5\u9808: ["source"],
1268
+ \u6B04: {
1269
+ source: "\u6587\u5B57\u5217",
1270
+ viewW: "\u6570",
1271
+ viewH: "\u6570",
1272
+ label: "\u6587\u5B57\u5217"
1273
+ }
1274
+ },
1275
+ "polar-area": {
1276
+ \u5FC5\u9808: ["source", "max"],
1277
+ \u6B04: {
1278
+ source: "\u6587\u5B57\u5217",
1279
+ max: "\u6570",
1280
+ viewW: "\u6570",
1281
+ viewH: "\u6570",
1282
+ colors: "\u6587\u5B57\u5217\u306E\u4E26\u3073",
1283
+ labelSource: "\u6587\u5B57\u5217",
1284
+ label: "\u6587\u5B57\u5217"
1285
+ }
1286
+ },
1287
+ "poll-bar": {
1288
+ \u5FC5\u9808: ["source"],
1289
+ \u6B04: {
1290
+ source: "\u6587\u5B57\u5217",
1291
+ color: "\u6587\u5B57\u5217",
1292
+ colorWinner: "\u6587\u5B57\u5217",
1293
+ label: "\u6587\u5B57\u5217"
1294
+ }
1295
+ },
1296
+ "price-tag": {
1297
+ \u5FC5\u9808: ["oldSource", "newSource"],
1298
+ \u6B04: {
1299
+ oldSource: "\u6587\u5B57\u5217",
1300
+ newSource: "\u6587\u5B57\u5217",
1301
+ currency: "\u6587\u5B57\u5217",
1302
+ colorNew: "\u6587\u5B57\u5217",
1303
+ colorOld: "\u6587\u5B57\u5217",
1304
+ colorDiscount: "\u6587\u5B57\u5217",
1305
+ label: "\u6587\u5B57\u5217"
1306
+ }
1307
+ },
1308
+ "pricing-tier": {
1309
+ \u5FC5\u9808: ["source"],
1310
+ \u6B04: {
1311
+ source: "\u6587\u5B57\u5217",
1312
+ colorAccent: "\u6587\u5B57\u5217",
1313
+ currency: "\u6587\u5B57\u5217",
1314
+ label: "\u6587\u5B57\u5217"
1315
+ }
1316
+ },
1317
+ "priority-badge": {
1318
+ \u5FC5\u9808: ["source"],
1319
+ \u6B04: {
1320
+ source: "\u6587\u5B57\u5217",
1321
+ textSource: "\u6587\u5B57\u5217",
1322
+ label: "\u6587\u5B57\u5217"
1323
+ }
1324
+ },
1325
+ "progress-group": {
1326
+ \u5FC5\u9808: ["source", "max"],
1327
+ \u6B04: {
1328
+ source: "\u6587\u5B57\u5217",
1329
+ max: "\u6570",
1330
+ labelSource: "\u6587\u5B57\u5217",
1331
+ color: "\u6587\u5B57\u5217",
1332
+ label: "\u6587\u5B57\u5217"
1333
+ }
1334
+ },
1335
+ "quick-poll-emoji": {
1336
+ \u5FC5\u9808: ["source"],
1337
+ \u6B04: {
1338
+ source: "\u6587\u5B57\u5217",
1339
+ colorWinner: "\u6587\u5B57\u5217",
1340
+ label: "\u6587\u5B57\u5217"
1341
+ }
1342
+ },
1343
+ radar: {
1344
+ \u5FC5\u9808: ["source", "max"],
1345
+ \u6B04: {
1346
+ source: "\u6587\u5B57\u5217",
1347
+ max: "\u6570",
1348
+ viewW: "\u6570",
1349
+ viewH: "\u6570",
1350
+ color: "\u6587\u5B57\u5217",
1351
+ labelSource: "\u6587\u5B57\u5217",
1352
+ label: "\u6587\u5B57\u5217"
1353
+ }
1354
+ },
1355
+ rating: {
1356
+ \u5FC5\u9808: ["source"],
1357
+ \u6B04: {
1358
+ source: "\u6587\u5B57\u5217",
1359
+ count: "\u6570",
1360
+ color: "\u6587\u5B57\u5217",
1361
+ label: "\u6587\u5B57\u5217"
1362
+ }
1363
+ },
1364
+ "rating-thumb": {
1365
+ \u5FC5\u9808: ["source"],
1366
+ \u6B04: {
1367
+ source: "\u6587\u5B57\u5217",
1368
+ colorUp: "\u6587\u5B57\u5217",
1369
+ colorDown: "\u6587\u5B57\u5217",
1370
+ label: "\u6587\u5B57\u5217"
1371
+ }
1372
+ },
1373
+ "reaction-bar": {
1374
+ \u5FC5\u9808: ["source"],
1375
+ \u6B04: {
1376
+ source: "\u6587\u5B57\u5217",
1377
+ color: "\u6587\u5B57\u5217",
1378
+ label: "\u6587\u5B57\u5217"
1379
+ }
1380
+ },
1381
+ "read-receipt": {
1382
+ \u5FC5\u9808: ["source"],
1383
+ \u6B04: {
1384
+ source: "\u6587\u5B57\u5217",
1385
+ colorRead: "\u6587\u5B57\u5217",
1386
+ colorPending: "\u6587\u5B57\u5217",
1387
+ label: "\u6587\u5B57\u5217"
1388
+ }
1389
+ },
1390
+ roadmap: {
1391
+ \u5FC5\u9808: ["source"],
1392
+ \u6B04: {
1393
+ source: "\u6587\u5B57\u5217",
1394
+ viewW: "\u6570",
1395
+ viewH: "\u6570",
1396
+ label: "\u6587\u5B57\u5217"
1397
+ }
1398
+ },
1399
+ sankey: {
1400
+ \u5FC5\u9808: ["source"],
1401
+ \u6B04: {
1402
+ source: "\u6587\u5B57\u5217",
1403
+ viewW: "\u6570",
1404
+ viewH: "\u6570",
1405
+ colors: "\u6587\u5B57\u5217\u306E\u4E26\u3073",
1406
+ label: "\u6587\u5B57\u5217"
1407
+ }
1408
+ },
1409
+ "search-result": {
1410
+ \u5FC5\u9808: ["source"],
1411
+ \u6B04: {
1412
+ source: "\u6587\u5B57\u5217",
1413
+ max: "\u6570",
1414
+ color: "\u6587\u5B57\u5217",
1415
+ label: "\u6587\u5B57\u5217"
1416
+ }
1417
+ },
1418
+ "sequence-timeline": {
1419
+ \u5FC5\u9808: ["source", "min", "max"],
1420
+ \u6B04: {
1421
+ source: "\u6587\u5B57\u5217",
1422
+ min: "\u6570",
1423
+ max: "\u6570",
1424
+ viewW: "\u6570",
1425
+ viewH: "\u6570",
1426
+ color: "\u6587\u5B57\u5217",
1427
+ label: "\u6587\u5B57\u5217"
1428
+ }
1429
+ },
1430
+ "service-health": {
1431
+ \u5FC5\u9808: ["source"],
1432
+ \u6B04: {
1433
+ source: "\u6587\u5B57\u5217",
1434
+ label: "\u6587\u5B57\u5217"
1435
+ }
1436
+ },
1437
+ "share-buttons": {
1438
+ \u5FC5\u9808: ["source"],
1439
+ \u6B04: {
1440
+ source: "\u6587\u5B57\u5217",
1441
+ label: "\u6587\u5B57\u5217"
1442
+ }
1443
+ },
1444
+ slope: {
1445
+ \u5FC5\u9808: ["source", "min", "max"],
1446
+ \u6B04: {
1447
+ source: "\u6587\u5B57\u5217",
1448
+ min: "\u6570",
1449
+ max: "\u6570",
1450
+ viewW: "\u6570",
1451
+ viewH: "\u6570",
1452
+ colorUp: "\u6587\u5B57\u5217",
1453
+ colorDown: "\u6587\u5B57\u5217",
1454
+ label: "\u6587\u5B57\u5217"
1455
+ }
1456
+ },
1457
+ "song-queue": {
1458
+ \u5FC5\u9808: ["source"],
1459
+ \u6B04: {
1460
+ source: "\u6587\u5B57\u5217",
1461
+ currentSource: "\u6587\u5B57\u5217",
1462
+ max: "\u6570",
1463
+ color: "\u6587\u5B57\u5217",
1464
+ label: "\u6587\u5B57\u5217"
1465
+ }
1466
+ },
1467
+ sparkline: {
1468
+ \u5FC5\u9808: ["source"],
1469
+ \u6B04: {
1470
+ source: "\u6587\u5B57\u5217",
1471
+ history: "\u6570",
1472
+ color: "\u6587\u5B57\u5217",
1473
+ label: "\u6587\u5B57\u5217"
1474
+ }
1475
+ },
1476
+ spinner: {
1477
+ \u5FC5\u9808: ["source", "textSource"],
1478
+ \u6B04: {
1479
+ source: "\u6587\u5B57\u5217",
1480
+ textSource: "\u6587\u5B57\u5217",
1481
+ color: "\u6587\u5B57\u5217",
1482
+ label: "\u6587\u5B57\u5217"
1483
+ }
1484
+ },
1485
+ "stacked-bar": {
1486
+ \u5FC5\u9808: ["sourceA", "sourceB", "min", "max"],
1487
+ \u6B04: {
1488
+ sourceA: "\u6587\u5B57\u5217",
1489
+ sourceB: "\u6587\u5B57\u5217",
1490
+ min: "\u6570",
1491
+ max: "\u6570",
1492
+ colorA: "\u6587\u5B57\u5217",
1493
+ colorB: "\u6587\u5B57\u5217",
1494
+ label: "\u6587\u5B57\u5217"
1495
+ }
1496
+ },
1497
+ stat: {
1498
+ \u5FC5\u9808: ["source"],
1499
+ \u6B04: {
1500
+ source: "\u6587\u5B57\u5217",
1501
+ caption: "\u6587\u5B57\u5217",
1502
+ unit: "\u6587\u5B57\u5217",
1503
+ label: "\u6587\u5B57\u5217"
1504
+ }
1505
+ },
1506
+ "status-dot": {
1507
+ \u5FC5\u9808: ["source", "map"],
1508
+ \u6B04: {
1509
+ source: "\u6587\u5B57\u5217",
1510
+ map: "\u7D44\u306E\u4E26\u3073",
1511
+ label: "\u6587\u5B57\u5217"
1512
+ }
1513
+ },
1514
+ "status-timeline": {
1515
+ \u5FC5\u9808: ["source"],
1516
+ \u6B04: {
1517
+ source: "\u6587\u5B57\u5217",
1518
+ colorMap: "\u7D44\u306E\u4E26\u3073",
1519
+ max: "\u6570",
1520
+ label: "\u6587\u5B57\u5217"
1521
+ }
1522
+ },
1523
+ "step-indicator": {
1524
+ \u5FC5\u9808: ["source", "stepsSource"],
1525
+ \u6B04: {
1526
+ source: "\u6587\u5B57\u5217",
1527
+ stepsSource: "\u6587\u5B57\u5217",
1528
+ viewW: "\u6570",
1529
+ viewH: "\u6570",
1530
+ colorActive: "\u6587\u5B57\u5217",
1531
+ colorPending: "\u6587\u5B57\u5217",
1532
+ label: "\u6587\u5B57\u5217"
1533
+ }
1534
+ },
1535
+ "step-progress": {
1536
+ \u5FC5\u9808: ["source", "stepsSource"],
1537
+ \u6B04: {
1538
+ source: "\u6587\u5B57\u5217",
1539
+ stepsSource: "\u6587\u5B57\u5217",
1540
+ color: "\u6587\u5B57\u5217",
1541
+ label: "\u6587\u5B57\u5217"
1542
+ }
1543
+ },
1544
+ stopwatch: {
1545
+ \u5FC5\u9808: ["source"],
1546
+ \u6B04: {
1547
+ source: "\u6587\u5B57\u5217",
1548
+ runningSource: "\u6587\u5B57\u5217",
1549
+ size: "\u6570",
1550
+ color: "\u6587\u5B57\u5217",
1551
+ label: "\u6587\u5B57\u5217"
1552
+ }
1553
+ },
1554
+ "tag-cloud": {
1555
+ \u5FC5\u9808: ["source"],
1556
+ \u6B04: {
1557
+ source: "\u6587\u5B57\u5217",
1558
+ minSize: "\u6570",
1559
+ maxSize: "\u6570",
1560
+ colors: "\u6587\u5B57\u5217\u306E\u4E26\u3073",
1561
+ label: "\u6587\u5B57\u5217"
1562
+ }
1563
+ },
1564
+ terminal: {
1565
+ \u5FC5\u9808: ["source"],
1566
+ \u6B04: {
1567
+ source: "\u6587\u5B57\u5217",
1568
+ max: "\u6570",
1569
+ color: "\u6587\u5B57\u5217",
1570
+ label: "\u6587\u5B57\u5217"
1571
+ }
1572
+ },
1573
+ thermometer: {
1574
+ \u5FC5\u9808: ["source", "min", "max"],
1575
+ \u6B04: {
1576
+ source: "\u6587\u5B57\u5217",
1577
+ min: "\u6570",
1578
+ max: "\u6570",
1579
+ viewW: "\u6570",
1580
+ viewH: "\u6570",
1581
+ color: "\u6587\u5B57\u5217",
1582
+ unit: "\u6587\u5B57\u5217",
1583
+ label: "\u6587\u5B57\u5217"
1584
+ }
1585
+ },
1586
+ "thread-summary": {
1587
+ \u5FC5\u9808: ["source"],
1588
+ \u6B04: {
1589
+ source: "\u6587\u5B57\u5217",
1590
+ colorUnread: "\u6587\u5B57\u5217",
1591
+ label: "\u6587\u5B57\u5217"
1592
+ }
1593
+ },
1594
+ "timeline-vertical": {
1595
+ \u5FC5\u9808: ["source"],
1596
+ \u6B04: {
1597
+ source: "\u6587\u5B57\u5217",
1598
+ color: "\u6587\u5B57\u5217",
1599
+ max: "\u6570",
1600
+ label: "\u6587\u5B57\u5217"
1601
+ }
1602
+ },
1603
+ "timezone-clock": {
1604
+ \u5FC5\u9808: ["source"],
1605
+ \u6B04: {
1606
+ source: "\u6587\u5B57\u5217",
1607
+ color: "\u6587\u5B57\u5217",
1608
+ label: "\u6587\u5B57\u5217"
1609
+ }
1610
+ },
1611
+ "toc-nav": {
1612
+ \u5FC5\u9808: ["source"],
1613
+ \u6B04: {
1614
+ source: "\u6587\u5B57\u5217",
1615
+ colorActive: "\u6587\u5B57\u5217",
1616
+ label: "\u6587\u5B57\u5217"
1617
+ }
1618
+ },
1619
+ "token-list": {
1620
+ \u5FC5\u9808: ["source"],
1621
+ \u6B04: {
1622
+ source: "\u6587\u5B57\u5217",
1623
+ colorUp: "\u6587\u5B57\u5217",
1624
+ colorDown: "\u6587\u5B57\u5217",
1625
+ label: "\u6587\u5B57\u5217"
1626
+ }
1627
+ },
1628
+ "traffic-light": {
1629
+ \u5FC5\u9808: ["source"],
1630
+ \u6B04: {
1631
+ source: "\u6587\u5B57\u5217",
1632
+ viewW: "\u6570",
1633
+ viewH: "\u6570",
1634
+ label: "\u6587\u5B57\u5217"
1635
+ }
1636
+ },
1637
+ treemap: {
1638
+ \u5FC5\u9808: ["source"],
1639
+ \u6B04: {
1640
+ source: "\u6587\u5B57\u5217",
1641
+ viewW: "\u6570",
1642
+ viewH: "\u6570",
1643
+ colors: "\u6587\u5B57\u5217\u306E\u4E26\u3073",
1644
+ label: "\u6587\u5B57\u5217"
1645
+ }
1646
+ },
1647
+ typewriter: {
1648
+ \u5FC5\u9808: ["source"],
1649
+ \u6B04: {
1650
+ source: "\u6587\u5B57\u5217",
1651
+ charMs: "\u6570",
1652
+ label: "\u6587\u5B57\u5217"
1653
+ }
1654
+ },
1655
+ "user-presence": {
1656
+ \u5FC5\u9808: ["source"],
1657
+ \u6B04: {
1658
+ source: "\u6587\u5B57\u5217",
1659
+ max: "\u6570",
1660
+ label: "\u6587\u5B57\u5217"
1661
+ }
1662
+ },
1663
+ "user-stack": {
1664
+ \u5FC5\u9808: ["source"],
1665
+ \u6B04: {
1666
+ source: "\u6587\u5B57\u5217",
1667
+ max: "\u6570",
1668
+ size: "\u6570",
1669
+ label: "\u6587\u5B57\u5217"
1670
+ }
1671
+ },
1672
+ venn: {
1673
+ \u5FC5\u9808: ["source"],
1674
+ \u6B04: {
1675
+ source: "\u6587\u5B57\u5217",
1676
+ viewW: "\u6570",
1677
+ viewH: "\u6570",
1678
+ colorA: "\u6587\u5B57\u5217",
1679
+ colorB: "\u6587\u5B57\u5217",
1680
+ labelA: "\u6587\u5B57\u5217",
1681
+ labelB: "\u6587\u5B57\u5217",
1682
+ label: "\u6587\u5B57\u5217"
1683
+ }
1684
+ },
1685
+ "video-card": {
1686
+ \u5FC5\u9808: ["source"],
1687
+ \u6B04: {
1688
+ source: "\u6587\u5B57\u5217",
1689
+ max: "\u6570",
1690
+ color: "\u6587\u5B57\u5217",
1691
+ label: "\u6587\u5B57\u5217"
1692
+ }
1693
+ },
1694
+ "voice-message": {
1695
+ \u5FC5\u9808: ["source"],
1696
+ \u6B04: {
1697
+ source: "\u6587\u5B57\u5217",
1698
+ progressSource: "\u6587\u5B57\u5217",
1699
+ duration: "\u6570",
1700
+ colorPlay: "\u6587\u5B57\u5217",
1701
+ colorBar: "\u6587\u5B57\u5217",
1702
+ label: "\u6587\u5B57\u5217"
1703
+ }
1704
+ },
1705
+ waterfall: {
1706
+ \u5FC5\u9808: ["source", "min", "max"],
1707
+ \u6B04: {
1708
+ source: "\u6587\u5B57\u5217",
1709
+ min: "\u6570",
1710
+ max: "\u6570",
1711
+ viewW: "\u6570",
1712
+ viewH: "\u6570",
1713
+ colorPos: "\u6587\u5B57\u5217",
1714
+ colorNeg: "\u6587\u5B57\u5217",
1715
+ label: "\u6587\u5B57\u5217"
1716
+ }
1717
+ },
1718
+ "weather-forecast": {
1719
+ \u5FC5\u9808: ["source"],
1720
+ \u6B04: {
1721
+ source: "\u6587\u5B57\u5217",
1722
+ label: "\u6587\u5B57\u5217"
1723
+ }
1724
+ }
1725
+ };
1726
+ var \u90E8\u54C1\u306E\u7D44\u306E\u8868 = {
1727
+ badge: {
1728
+ map: {
1729
+ \u5FC5\u9808: ["value", "color"],
1730
+ \u6B04: {
1731
+ value: "\u6587\u5B57\u5217",
1732
+ color: "\u6587\u5B57\u5217"
1733
+ }
1734
+ }
1735
+ },
1736
+ "status-dot": {
1737
+ map: {
1738
+ \u5FC5\u9808: ["value", "color"],
1739
+ \u6B04: {
1740
+ value: "\u6587\u5B57\u5217",
1741
+ color: "\u6587\u5B57\u5217",
1742
+ label: "\u6587\u5B57\u5217"
1743
+ }
1744
+ }
1745
+ },
1746
+ "status-timeline": {
1747
+ colorMap: {
1748
+ \u5FC5\u9808: ["status", "color"],
1749
+ \u6B04: {
1750
+ status: "\u6587\u5B57\u5217",
1751
+ color: "\u6587\u5B57\u5217"
1752
+ }
1753
+ }
1754
+ }
1755
+ };
1756
+
678
1757
  // src/v05/parser.ts
1758
+ var EDGE_SIDE_VALUES = ["top", "right", "bottom", "left"];
679
1759
  var TOP_LEVEL_KEYS = [
680
1760
  "title",
681
1761
  "type",
@@ -690,9 +1770,46 @@ var TOP_LEVEL_KEYS = [
690
1770
  // 図全体を 1 箱にする図種で、 その箱の上に出す小見出し (#1247)
691
1771
  "eyebrow",
692
1772
  // 2 軸で仕分ける図の軸の名前 (#1251)
693
- "axes"
1773
+ "axes",
1774
+ // 値を見せる部品 (#1374)
1775
+ "readouts"
694
1776
  ];
695
1777
  var LANE_ID_ENTRY = /^([\p{L}\p{N}_-]+)\s*:\s*\{([^}]*)\}\s*$/u;
1778
+ function \u540D\u524D\u3068\u4E2D\u62EC\u5F27\u306B\u5272\u308B(\u884C) {
1779
+ const t = \u884C.trim();
1780
+ const c = t.indexOf(":");
1781
+ if (c < 0) return void 0;
1782
+ const \u540D\u524D = t.slice(0, c).trim();
1783
+ if (!/^[\p{L}\p{N}_-]+$/u.test(\u540D\u524D)) return void 0;
1784
+ const \u6B8B\u308A = t.slice(c + 1).trim();
1785
+ if (!\u6B8B\u308A.startsWith("{")) return void 0;
1786
+ let \u6DF1\u3055 = 0;
1787
+ let \u5F15\u7528 = null;
1788
+ let \u76F4\u524D = null;
1789
+ for (let i = 0; i < \u6B8B\u308A.length; i += 1) {
1790
+ const ch = \u6B8B\u308A[i];
1791
+ if (\u5F15\u7528 !== null) {
1792
+ if (\u5F15\u7528 === '"' && ch === "\\" && i + 1 < \u6B8B\u308A.length) {
1793
+ i += 1;
1794
+ continue;
1795
+ }
1796
+ if (ch === \u5F15\u7528) \u5F15\u7528 = null;
1797
+ continue;
1798
+ }
1799
+ if ((ch === '"' || ch === "'") && (\u76F4\u524D === null || ":,{[".includes(\u76F4\u524D))) {
1800
+ \u5F15\u7528 = ch;
1801
+ \u76F4\u524D = ch;
1802
+ continue;
1803
+ }
1804
+ if (ch === "{") \u6DF1\u3055 += 1;
1805
+ else if (ch === "}") {
1806
+ \u6DF1\u3055 -= 1;
1807
+ if (\u6DF1\u3055 === 0) return i === \u6B8B\u308A.length - 1 ? [\u540D\u524D, \u6B8B\u308A.slice(1, i)] : void 0;
1808
+ }
1809
+ if (!/\s/u.test(ch)) \u76F4\u524D = ch;
1810
+ }
1811
+ return void 0;
1812
+ }
696
1813
  function isTopLevelKey(key) {
697
1814
  return TOP_LEVEL_KEYS.includes(key);
698
1815
  }
@@ -785,6 +1902,7 @@ function parseTextDslV05(src) {
785
1902
  const values = [];
786
1903
  let viewport = void 0;
787
1904
  let lanesMap = void 0;
1905
+ let readoutsList = void 0;
788
1906
  let groupsMap = void 0;
789
1907
  let i = 0;
790
1908
  while (i < lines.length) {
@@ -1016,6 +2134,34 @@ function parseTextDslV05(src) {
1016
2134
  i = next;
1017
2135
  continue;
1018
2136
  }
2137
+ if (head.key === "readouts") {
2138
+ if (head.value !== null && head.value.trim() !== "") {
2139
+ errors.push({
2140
+ line: line.no,
2141
+ message: "readouts \u306F 1 \u884C\u306B\u307E\u3068\u3081\u3066\u66F8\u3051\u306A\u3044",
2142
+ hint: "\u6B21\u306E\u884C\u304B\u3089\u5B57\u4E0B\u3052\u3057\u3066 `id: { kind: percent-ring, source: total, max: 100 }` \u306E\u5F62\u3067\u4E26\u3079\u308B"
2143
+ });
2144
+ i += 1;
2145
+ continue;
2146
+ }
2147
+ const { items, next } = collectIndentedRaw(lines, i + 1, line.indent);
2148
+ readoutsList = [];
2149
+ for (const it of items) {
2150
+ const m = \u540D\u524D\u3068\u4E2D\u62EC\u5F27\u306B\u5272\u308B(it.trimmed);
2151
+ if (m) {
2152
+ const \u8AAD\u3081\u305F = \u90E8\u54C1\u3068\u3057\u3066\u8AAD\u3080(m[0], m[1], it.no, errors);
2153
+ if (\u8AAD\u3081\u305F) readoutsList.push(\u8AAD\u3081\u305F);
2154
+ } else {
2155
+ errors.push({
2156
+ line: it.no,
2157
+ message: `invalid readout entry: "${it.trimmed}"`,
2158
+ hint: "use `id: { kind: percent-ring, source: total, max: 500 }`"
2159
+ });
2160
+ }
2161
+ }
2162
+ i = next;
2163
+ continue;
2164
+ }
1019
2165
  if (head.key === "groups") {
1020
2166
  const { items, next } = collectIndentedList(lines, i + 1, line.indent);
1021
2167
  groupsMap = {};
@@ -1066,6 +2212,7 @@ function parseTextDslV05(src) {
1066
2212
  ...values.length > 0 ? { values } : {},
1067
2213
  viewport,
1068
2214
  lanes: lanesMap,
2215
+ readouts: readoutsList,
1069
2216
  groups: groupsMap,
1070
2217
  pos: { line: 1 }
1071
2218
  }
@@ -1261,6 +2408,253 @@ var LANE_VALUE_KINDS = {
1261
2408
  contain: "\u771F\u507D",
1262
2409
  lifeline: "\u771F\u507D"
1263
2410
  };
2411
+ var \u56F3\u5F62\u306E\u8868 = {
2412
+ rect: {
2413
+ \u5FC5\u9808: ["source", "fillMax"],
2414
+ \u6B04: {
2415
+ source: "\u6570\u304B\u6587\u5B57\u5217",
2416
+ fillMax: "\u6570",
2417
+ orient: "\u5411\u304D",
2418
+ fill: "\u6587\u5B57\u5217",
2419
+ stroke: "\u6587\u5B57\u5217",
2420
+ radius: "\u6570"
2421
+ }
2422
+ },
2423
+ circle: {
2424
+ \u5FC5\u9808: [],
2425
+ \u6B04: { radius: "\u6570\u304B\u6587\u5B57\u5217", fillProgress: "\u6570\u304B\u6587\u5B57\u5217", fill: "\u6587\u5B57\u5217", stroke: "\u6587\u5B57\u5217" }
2426
+ },
2427
+ arc: {
2428
+ \u5FC5\u9808: ["angle"],
2429
+ \u6B04: {
2430
+ innerRadius: "\u6570",
2431
+ outerRadius: "\u6570",
2432
+ startAngle: "\u6570",
2433
+ angle: "\u6570\u304B\u6587\u5B57\u5217",
2434
+ sweepMax: "\u6570",
2435
+ fill: "\u6587\u5B57\u5217",
2436
+ stroke: "\u6587\u5B57\u5217"
2437
+ }
2438
+ },
2439
+ wave: {
2440
+ \u5FC5\u9808: ["level", "amplitude"],
2441
+ \u6B04: {
2442
+ level: "\u6570\u304B\u6587\u5B57\u5217",
2443
+ amplitude: "\u6570",
2444
+ frequency: "\u6570",
2445
+ waveHeight: "\u6570",
2446
+ fill: "\u6587\u5B57\u5217",
2447
+ stroke: "\u6587\u5B57\u5217"
2448
+ }
2449
+ },
2450
+ polygon: {
2451
+ \u5FC5\u9808: ["sides"],
2452
+ \u6B04: {
2453
+ sides: "\u6570",
2454
+ radius: "\u6570\u304B\u6587\u5B57\u5217",
2455
+ rotation: "\u6570\u304B\u6587\u5B57\u5217",
2456
+ fill: "\u6587\u5B57\u5217",
2457
+ stroke: "\u6587\u5B57\u5217"
2458
+ }
2459
+ }
2460
+ };
2461
+ function \u4E26\u3073\u3068\u3057\u3066\u8AAD\u3080(raw) {
2462
+ return raw.replace(/^\[|\]$/g, "").split(/,(?![^[]*\])/).map((x) => stripQuotes(x.trim())).filter((x) => x !== "");
2463
+ }
2464
+ function \u7D44\u306E\u4E26\u3073\u3068\u3057\u3066\u8AAD\u3080(raw) {
2465
+ const \u4E2D\u8EAB = raw.trim();
2466
+ if (!\u4E2D\u8EAB.startsWith("[") || !\u4E2D\u8EAB.endsWith("]")) return void 0;
2467
+ const \u672C\u4F53 = \u4E2D\u8EAB.slice(1, -1);
2468
+ const \u584A = [];
2469
+ let i = 0;
2470
+ let \u6B21\u306F\u7D44 = true;
2471
+ while (i < \u672C\u4F53.length) {
2472
+ while (i < \u672C\u4F53.length && /\s/u.test(\u672C\u4F53[i])) i += 1;
2473
+ if (i >= \u672C\u4F53.length) break;
2474
+ if (!\u6B21\u306F\u7D44) {
2475
+ if (\u672C\u4F53[i] !== ",") return void 0;
2476
+ \u6B21\u306F\u7D44 = true;
2477
+ i += 1;
2478
+ continue;
2479
+ }
2480
+ if (\u672C\u4F53[i] !== "{") return void 0;
2481
+ const \u59CB\u307E\u308A = i + 1;
2482
+ let \u5F15\u7528 = null;
2483
+ let \u76F4\u524D = "{";
2484
+ i += 1;
2485
+ for (; i < \u672C\u4F53.length; i += 1) {
2486
+ const c = \u672C\u4F53[i];
2487
+ if (\u5F15\u7528 !== null) {
2488
+ if (\u5F15\u7528 === '"' && c === "\\" && i + 1 < \u672C\u4F53.length) {
2489
+ i += 1;
2490
+ continue;
2491
+ }
2492
+ if (c === \u5F15\u7528) \u5F15\u7528 = null;
2493
+ continue;
2494
+ }
2495
+ if ((c === '"' || c === "'") && (\u76F4\u524D === null || ":,{[".includes(\u76F4\u524D))) {
2496
+ \u5F15\u7528 = c;
2497
+ \u76F4\u524D = c;
2498
+ continue;
2499
+ }
2500
+ if (c === "{") return void 0;
2501
+ if (c === "}") {
2502
+ \u584A.push(\u672C\u4F53.slice(\u59CB\u307E\u308A, i));
2503
+ i += 1;
2504
+ \u6B21\u306F\u7D44 = false;
2505
+ break;
2506
+ }
2507
+ if (!/\s/u.test(c)) \u76F4\u524D = c;
2508
+ }
2509
+ if (\u6B21\u306F\u7D44) return void 0;
2510
+ }
2511
+ if (\u6B21\u306F\u7D44 && \u584A.length > 0) return void 0;
2512
+ if (\u584A.length === 0) return void 0;
2513
+ const \u51FA = [];
2514
+ for (const t of \u584A) {
2515
+ const \u7D44 = parseInlineMapping(t);
2516
+ if (Object.keys(\u7D44).length === 0) return void 0;
2517
+ \u51FA.push(\u7D44);
2518
+ }
2519
+ return \u51FA;
2520
+ }
2521
+ function \u90E8\u54C1\u306E\u7D44\u3092\u691C\u67FB\u3059\u308B(kind, \u8AAD\u3081\u305F, line, errors) {
2522
+ for (const [\u6B04, \u5B9A\u7FA9] of Object.entries(\u90E8\u54C1\u306E\u7D44\u306E\u8868[kind] ?? {})) {
2523
+ const \u4E26\u3073 = \u8AAD\u3081\u305F[\u6B04];
2524
+ if (!Array.isArray(\u4E26\u3073)) continue;
2525
+ \u4E26\u3073.forEach((\u7D44, i) => {
2526
+ const o = \u7D44;
2527
+ for (const k of Object.keys(o)) {
2528
+ if (k in \u5B9A\u7FA9.\u6B04) continue;
2529
+ errors.push({
2530
+ line,
2531
+ message: `\u90E8\u54C1\u306E ${\u6B04}[${i}] \u306E\u9805\u76EE\u540D\u304C\u8AAD\u3081\u307E\u305B\u3093: "${k}"`,
2532
+ hint: `\u4F7F\u3048\u308B\u9805\u76EE = ${Object.keys(\u5B9A\u7FA9.\u6B04).join(", ")}`
2533
+ });
2534
+ }
2535
+ for (const k of \u5B9A\u7FA9.\u5FC5\u9808) {
2536
+ if (o[k] !== void 0) continue;
2537
+ errors.push({
2538
+ line,
2539
+ message: `\u90E8\u54C1\u306E ${\u6B04}[${i}].${k} \u306F\u5FC5\u305A\u66F8\u304D\u307E\u3059`,
2540
+ hint: `\u5FC5\u9808\u306E\u9805\u76EE = ${\u5B9A\u7FA9.\u5FC5\u9808.join(", ")}`
2541
+ });
2542
+ }
2543
+ });
2544
+ }
2545
+ }
2546
+ function \u8868\u306B\u5F93\u3063\u3066\u8AAD\u3080(\u5B9A\u7FA9, opts, \u63A5\u982D, line, errors) {
2547
+ const out = {};
2548
+ for (const [\u6B04, \u5024] of Object.entries(opts)) {
2549
+ if (\u6B04 === "kind") continue;
2550
+ const \u5F62 = \u5B9A\u7FA9.\u6B04[\u6B04];
2551
+ if (\u5F62 === void 0) {
2552
+ errors.push({
2553
+ line,
2554
+ message: `${\u63A5\u982D}\u306E\u9805\u76EE\u540D\u304C\u8AAD\u3081\u307E\u305B\u3093: "${\u6B04}"`,
2555
+ hint: `\u4F7F\u3048\u308B\u9805\u76EE = ${Object.keys(\u5B9A\u7FA9.\u6B04).join(", ")}`
2556
+ });
2557
+ continue;
2558
+ }
2559
+ if (\u5024 === "" && \u5F62 !== "\u6587\u5B57\u5217") continue;
2560
+ if (\u5F62 === "\u6570") {
2561
+ const n = \u6570\u3068\u3057\u3066\u8AAD\u3080(\u5024, `${\u63A5\u982D}${\u6B04}`, line, errors);
2562
+ if (n !== void 0) out[\u6B04] = n;
2563
+ } else if (\u5F62 === "\u6570\u304B\u6587\u5B57\u5217") {
2564
+ const n = numberOrUndef(\u5024);
2565
+ out[\u6B04] = n !== void 0 ? n : \u5024;
2566
+ } else if (\u5F62 === "\u6587\u5B57\u5217\u306E\u4E26\u3073") {
2567
+ out[\u6B04] = \u4E26\u3073\u3068\u3057\u3066\u8AAD\u3080(\u5024);
2568
+ } else if (\u5F62 === "\u7D44\u306E\u4E26\u3073") {
2569
+ const \u7D44 = \u7D44\u306E\u4E26\u3073\u3068\u3057\u3066\u8AAD\u3080(\u5024);
2570
+ if (\u7D44 !== void 0) out[\u6B04] = \u7D44;
2571
+ else {
2572
+ errors.push({
2573
+ line,
2574
+ message: `${\u63A5\u982D}${\u6B04} \u306E\u4E26\u3073\u304C\u8AAD\u3081\u307E\u305B\u3093: "${\u5024}"`,
2575
+ hint: '`[{ value: "online", color: "#22c55e" }]` \u306E\u5F62\u3067\u66F8\u304F'
2576
+ });
2577
+ }
2578
+ } else if (\u5F62 === "\u771F\u507D") {
2579
+ if (\u5024 === "true" || \u5024 === "false") out[\u6B04] = \u5024 === "true";
2580
+ else {
2581
+ errors.push({
2582
+ line,
2583
+ message: `${\u63A5\u982D}${\u6B04} \u306E\u771F\u507D\u304C\u8AAD\u3081\u307E\u305B\u3093: "${\u5024}"`,
2584
+ hint: "\u4F7F\u3048\u308B\u5024 = true, false"
2585
+ });
2586
+ }
2587
+ } else if (\u5F62 === "\u5411\u304D") {
2588
+ if (["up", "down", "left", "right"].includes(\u5024)) out[\u6B04] = \u5024;
2589
+ else {
2590
+ errors.push({
2591
+ line,
2592
+ message: `${\u63A5\u982D}${\u6B04} \u306E\u5411\u304D\u304C\u8AAD\u3081\u307E\u305B\u3093: "${\u5024}"`,
2593
+ hint: "\u4F7F\u3048\u308B\u5024 = up, down, left, right"
2594
+ });
2595
+ }
2596
+ } else {
2597
+ out[\u6B04] = \u5024;
2598
+ }
2599
+ }
2600
+ for (const \u6B04 of \u5B9A\u7FA9.\u5FC5\u9808) {
2601
+ if (out[\u6B04] === void 0) {
2602
+ errors.push({
2603
+ line,
2604
+ message: `${\u63A5\u982D}${\u6B04} \u306F\u5FC5\u305A\u66F8\u304D\u307E\u3059`,
2605
+ hint: `\u5FC5\u9808\u306E\u9805\u76EE = ${\u5B9A\u7FA9.\u5FC5\u9808.join(", ")}`
2606
+ });
2607
+ }
2608
+ }
2609
+ return out;
2610
+ }
2611
+ function \u51FA\u3059\u6761\u4EF6\u3068\u3057\u3066\u8AAD\u3080(raw, line, errors) {
2612
+ if (raw === void 0) return void 0;
2613
+ const \u5024 = raw.trim();
2614
+ if (\u5024 === "") {
2615
+ errors.push({
2616
+ line,
2617
+ message: "\u7BB1\u306E visibleIf \u304C\u7A7A\u3067\u3059",
2618
+ hint: '`visibleIf: "{flag}"` \u306E\u3088\u3046\u306B\u6761\u4EF6\u3092\u66F8\u304F\u3002 \u5E38\u306B\u96A0\u3059\u306A\u3089 `visibleIf: "0"`'
2619
+ });
2620
+ return void 0;
2621
+ }
2622
+ return \u5024;
2623
+ }
2624
+ function \u56F3\u5F62\u3068\u3057\u3066\u8AAD\u3080(raw, line, errors) {
2625
+ const \u4E2D\u8EAB = raw.trim().replace(/^\{|\}$/g, "");
2626
+ const opts = parseInlineMapping(\u4E2D\u8EAB);
2627
+ const kind = (opts.kind ?? "").toLowerCase();
2628
+ const \u5B9A\u7FA9 = \u56F3\u5F62\u306E\u8868[kind];
2629
+ if (\u5B9A\u7FA9 === void 0) {
2630
+ errors.push({
2631
+ line,
2632
+ message: `\u56F3\u5F62\u306E\u7A2E\u985E\u304C\u8AAD\u3081\u307E\u305B\u3093: "${opts.kind ?? ""}"`,
2633
+ hint: `\u4F7F\u3048\u308B\u7A2E\u985E = ${Object.keys(\u56F3\u5F62\u306E\u8868).join(", ")}`
2634
+ });
2635
+ return void 0;
2636
+ }
2637
+ const \u8AAD\u3081\u305F = \u8868\u306B\u5F93\u3063\u3066\u8AAD\u3080(\u5B9A\u7FA9, opts, `\u56F3\u5F62\u306E `, line, errors);
2638
+ for (const \u6B04 of \u5B9A\u7FA9.\u5FC5\u9808) if (\u8AAD\u3081\u305F[\u6B04] === void 0) return void 0;
2639
+ return { kind, ...\u8AAD\u3081\u305F };
2640
+ }
2641
+ function \u90E8\u54C1\u3068\u3057\u3066\u8AAD\u3080(id, raw, line, errors) {
2642
+ const opts = parseInlineMapping(raw);
2643
+ const kind = (opts.kind ?? "").toLowerCase();
2644
+ const \u5B9A\u7FA9 = \u90E8\u54C1\u306E\u8868[kind];
2645
+ if (\u5B9A\u7FA9 === void 0) {
2646
+ errors.push({
2647
+ line,
2648
+ message: `\u90E8\u54C1\u306E\u7A2E\u985E\u304C\u8AAD\u3081\u307E\u305B\u3093: "${opts.kind ?? ""}"`,
2649
+ hint: `\u4F7F\u3048\u308B\u7A2E\u985E = ${Object.keys(\u90E8\u54C1\u306E\u8868).join(", ")}`
2650
+ });
2651
+ return void 0;
2652
+ }
2653
+ const \u8AAD\u3081\u305F = \u8868\u306B\u5F93\u3063\u3066\u8AAD\u3080(\u5B9A\u7FA9, opts, `\u90E8\u54C1 ${id} \u306E `, line, errors);
2654
+ \u90E8\u54C1\u306E\u7D44\u3092\u691C\u67FB\u3059\u308B(kind, \u8AAD\u3081\u305F, line, errors);
2655
+ for (const \u6B04 of \u5B9A\u7FA9.\u5FC5\u9808) if (\u8AAD\u3081\u305F[\u6B04] === void 0) return void 0;
2656
+ return { id, kind, ...\u8AAD\u3081\u305F };
2657
+ }
1264
2658
  var ACTOR_NODE_VALUE_KINDS = {
1265
2659
  posX: "\u6570",
1266
2660
  posY: "\u6570",
@@ -1295,19 +2689,38 @@ function matchActorInlineMapping(raw) {
1295
2689
  const name = raw.slice(0, colonIdx);
1296
2690
  const rest = raw.slice(colonIdx + 1).trim();
1297
2691
  if (!rest.startsWith("{")) return null;
1298
- let depth = 0;
1299
- let endIdx = -1;
1300
- for (let i = 0; i < rest.length; i += 1) {
1301
- const c = rest[i];
1302
- if (c === "{") depth += 1;
1303
- else if (c === "}") {
1304
- depth -= 1;
1305
- if (depth === 0) {
1306
- endIdx = i;
1307
- break;
2692
+ const \u7D42\u308F\u308A\u3092\u63A2\u3059 = (\u5F15\u7528\u7B26\u3092\u898B\u308B) => {
2693
+ let depth = 0;
2694
+ let \u5F15\u7528\u7B26 = null;
2695
+ let \u76F4\u524D = null;
2696
+ for (let i = 0; i < rest.length; i += 1) {
2697
+ const c = rest[i];
2698
+ if (\u5F15\u7528\u7B26\u3092\u898B\u308B) {
2699
+ if (\u5F15\u7528\u7B26 !== null) {
2700
+ if (\u5F15\u7528\u7B26 === '"' && c === "\\" && i + 1 < rest.length) {
2701
+ i += 1;
2702
+ continue;
2703
+ }
2704
+ if (c === \u5F15\u7528\u7B26) \u5F15\u7528\u7B26 = null;
2705
+ continue;
2706
+ }
2707
+ if ((c === '"' || c === "'") && (\u76F4\u524D === null || ":,{[".includes(\u76F4\u524D))) {
2708
+ \u5F15\u7528\u7B26 = c;
2709
+ \u76F4\u524D = c;
2710
+ continue;
2711
+ }
1308
2712
  }
2713
+ if (c === "{") depth += 1;
2714
+ else if (c === "}") {
2715
+ depth -= 1;
2716
+ if (depth === 0) return i;
2717
+ }
2718
+ if (!/\s/u.test(c)) \u76F4\u524D = c;
1309
2719
  }
1310
- }
2720
+ return -1;
2721
+ };
2722
+ let endIdx = \u7D42\u308F\u308A\u3092\u63A2\u3059(true);
2723
+ if (endIdx < 0) endIdx = \u7D42\u308F\u308A\u3092\u63A2\u3059(false);
1311
2724
  if (endIdx < 0) return null;
1312
2725
  const inner = rest.slice(1, endIdx);
1313
2726
  return { name, inner };
@@ -1480,6 +2893,18 @@ function applyContinuationLines(actor, rest, errors) {
1480
2893
  case "\u5024":
1481
2894
  out.value = stripQuotes(raw);
1482
2895
  break;
2896
+ case "shape":
2897
+ case "\u56F3\u5F62":
2898
+ out.shape = \u56F3\u5F62\u3068\u3057\u3066\u8AAD\u3080(raw, ln.no, errors);
2899
+ break;
2900
+ case "visibleIf":
2901
+ case "\u51FA\u3059\u6761\u4EF6":
2902
+ out.visibleIf = \u51FA\u3059\u6761\u4EF6\u3068\u3057\u3066\u8AAD\u3080(stripQuotes(raw), ln.no, errors);
2903
+ break;
2904
+ case "title":
2905
+ case "\u984C":
2906
+ out.title = stripQuotes(raw);
2907
+ break;
1483
2908
  case "rows":
1484
2909
  case "\u884C":
1485
2910
  out.rows = raw.replace(/^\[|\]$/g, "").split(/,(?![^[]*\])/).map((x) => stripQuotes(x.trim())).filter(Boolean);
@@ -1551,11 +2976,7 @@ function applyContinuationLines(actor, rest, errors) {
1551
2976
  }
1552
2977
  }
1553
2978
  if (scaleWritten.size > 0) {
1554
- const s = resolveScale(
1555
- scaleWritten,
1556
- (key) => scaleLines.get(key) ?? actor.pos.line,
1557
- errors
1558
- );
2979
+ const s = resolveScale(scaleWritten, (key) => scaleLines.get(key) ?? actor.pos.line, errors);
1559
2980
  out.scale = s.scale;
1560
2981
  out.scaleKeys = [.../* @__PURE__ */ new Set([...actor.scaleKeys ?? [], ...s.keys])];
1561
2982
  }
@@ -1593,6 +3014,15 @@ var ACTOR_ITEM_KEYS = /* @__PURE__ */ new Set([
1593
3014
  "\u5024",
1594
3015
  "rows",
1595
3016
  "\u884C",
3017
+ // 箱の中に描く図形 (#1374)
3018
+ "shape",
3019
+ "\u56F3\u5F62",
3020
+ // その箱を出すかどうかの条件 (#1381)
3021
+ "visibleIf",
3022
+ "\u51FA\u3059\u6761\u4EF6",
3023
+ // 箱に出す題 (#1381)
3024
+ "title",
3025
+ "\u984C",
1596
3026
  "\u4F4D\u7F6E",
1597
3027
  "pos",
1598
3028
  "posX",
@@ -1838,6 +3268,12 @@ var INLINE_ACTOR_KEYS = /* @__PURE__ */ new Set([
1838
3268
  "posY",
1839
3269
  "posW",
1840
3270
  "posH",
3271
+ // 箱の中に描く図形 (#1374)
3272
+ "shape",
3273
+ // その箱を出すかどうかの条件 (#1381)
3274
+ "visibleIf",
3275
+ // 箱に出す題 (#1381)。 名前と切り離して書ける
3276
+ "title",
1841
3277
  // 倍率は別経路 (`reportScaleOnNonPart`) が知らせる。 ここでも読める扱いにしないと
1842
3278
  // 同じ名前で 2 度知らせることになる
1843
3279
  "scale",
@@ -1849,6 +3285,8 @@ var FLOW_INLINE_READERS = {
1849
3285
  sub: (v) => v,
1850
3286
  guard: (v) => v,
1851
3287
  cardinality: (v) => v,
3288
+ // 矢印がどの辺から出るか (#1385)。 描画側は 4 方向を取り、書かなければ自動で選ぶ
3289
+ side: (v) => v !== void 0 && EDGE_SIDE_VALUES.includes(v) ? v : void 0,
1852
3290
  // 数と真偽の欄は `FLOW_INLINE_VALUE_KINDS` の表が読む (#1306)。 ここでは名前だけを持つ =
1853
3291
  // 読める欄の一覧 (`FLOW_INLINE_KEYS`) は本表から導くため、載せないと欄ごと消える
1854
3292
  labelOffsetX: null,
@@ -1908,6 +3346,12 @@ function parseActor2(line, errors) {
1908
3346
  value: opts.value,
1909
3347
  rows: opts.rows ? opts.rows.replace(/^\[|\]$/g, "").split(/,(?![^[]*\])/).map((x) => stripQuotes(x.trim())).filter(Boolean) : void 0,
1910
3348
  lane: opts.lane,
3349
+ // 箱の中に描く図形 (#1374)。 パーツでは状態の上書きとして意味を持つため横取りしない
3350
+ shape: isPart || opts.shape === void 0 ? void 0 : \u56F3\u5F62\u3068\u3057\u3066\u8AAD\u3080(opts.shape, line.no, errors),
3351
+ // 出す条件 (#1381)。 パーツでは状態の上書きとして意味を持つため横取りしない
3352
+ visibleIf: isPart ? void 0 : \u51FA\u3059\u6761\u4EF6\u3068\u3057\u3066\u8AAD\u3080(opts.visibleIf, line.no, errors),
3353
+ // 箱に出す題 (#1381)。 空文字も意味を持つ (題を出さない箱) ため undefined と分ける
3354
+ title: isPart ? void 0 : opts.title,
1911
3355
  ...\u8868\u3067\u8AAD\u3080(ACTOR_INLINE_VALUE_KINDS, opts, "\u7BB1\u306E ", line.no, errors),
1912
3356
  // parts では `tone` を状態の上書きとして従来から使えるため、 色として横取りしない
1913
3357
  tone: isPart ? void 0 : resolveTone(opts.tone),
@@ -1971,8 +3415,16 @@ function parseFlowStep(line, no, errors) {
1971
3415
  if (mapMatch) {
1972
3416
  const opts = parseInlineMapping(mapMatch[1]);
1973
3417
  for (const k of FLOW_INLINE_KEYS) {
1974
- if (FLOW_INLINE_READERS[k] === null) continue;
1975
- \u4E2D\u62EC\u5F27[k] = opts[k];
3418
+ const \u8AAD\u307F\u624B = FLOW_INLINE_READERS[k];
3419
+ if (\u8AAD\u307F\u624B === null) continue;
3420
+ \u4E2D\u62EC\u5F27[k] = \u8AAD\u307F\u624B(opts[k]);
3421
+ }
3422
+ if (opts.side !== void 0 && \u4E2D\u62EC\u5F27.side === void 0) {
3423
+ errors.push({
3424
+ line: line.no,
3425
+ message: `\u77E2\u5370\u306E side \u304C\u8AAD\u3081\u307E\u305B\u3093: "${opts.side}"`,
3426
+ hint: `\u4F7F\u3048\u308B\u5024 = ${EDGE_SIDE_VALUES.join(", ")}`
3427
+ });
1976
3428
  }
1977
3429
  \u6570\u3068\u771F\u507D = \u8868\u3067\u8AAD\u3080(FLOW_INLINE_VALUE_KINDS, opts, "\u77E2\u5370\u306E ", line.no, errors);
1978
3430
  rest = rest.slice(0, mapMatch.index ?? 0).trim();
@@ -1980,6 +3432,7 @@ function parseFlowStep(line, no, errors) {
1980
3432
  const sub = \u4E2D\u62EC\u5F27.sub;
1981
3433
  const guard = \u4E2D\u62EC\u5F27.guard;
1982
3434
  const cardinality = \u4E2D\u62EC\u5F27.cardinality;
3435
+ const side = \u4E2D\u62EC\u5F27.side;
1983
3436
  const labelOffsetX = \u6570\u3068\u771F\u507D?.labelOffsetX;
1984
3437
  const labelOffsetY = \u6570\u3068\u771F\u507D?.labelOffsetY;
1985
3438
  const overlay = \u6570\u3068\u771F\u507D?.overlay;
@@ -2030,6 +3483,7 @@ function parseFlowStep(line, no, errors) {
2030
3483
  sub,
2031
3484
  guard,
2032
3485
  cardinality,
3486
+ side,
2033
3487
  labelOffsetX,
2034
3488
  labelOffsetY,
2035
3489
  overlay,
@@ -2115,7 +3569,15 @@ function ensureAnimate(a, lineNo) {
2115
3569
  if (a) return a;
2116
3570
  return { states: [], phases: [], pos: { line: lineNo } };
2117
3571
  }
2118
- var PHASE_ITEM_WORDS = ["focus", "badge", "body", "description", "tween", "set", "draw"];
3572
+ var PHASE_ITEM_WORDS = [
3573
+ "focus",
3574
+ "badge",
3575
+ "body",
3576
+ "description",
3577
+ "tween",
3578
+ "set",
3579
+ "draw"
3580
+ ];
2119
3581
  var \u6BB5\u306E\u9805\u76EE\u306E\u82F1\u8A9E = PHASE_ITEM_WORDS;
2120
3582
  var \u6BB5\u306E\u9805\u76EE\u306E\u96C6\u5408 = new Set(PHASE_ITEM_WORDS);
2121
3583
  function parsePhase(block, errors) {
@@ -2619,7 +4081,9 @@ function countDocElements(doc) {
2619
4081
  (acc, p) => acc + (p.highlight?.length ?? 0) + (p.tweens?.length ?? 0) + (p.sets?.length ?? 0),
2620
4082
  0
2621
4083
  );
2622
- return doc.actors.length + doc.flow.length + phases.length + phaseChildren + (doc.animate?.states.length ?? 0) + (doc.values?.length ?? 0) + (doc.groups ? Object.keys(doc.groups).length : 0) + (doc.lanes ? Object.keys(doc.lanes).length : 0);
4084
+ return doc.actors.length + doc.flow.length + phases.length + phaseChildren + (doc.animate?.states.length ?? 0) + (doc.values?.length ?? 0) + // 値を見せる部品も描画時に 1 widget ずつ展開される (#1374)。 数えないと、 actors
4085
+ // 少ないまま readouts だけを大量に並べた入力が組み立て前の上限をすり抜ける。
4086
+ (doc.readouts?.length ?? 0) + (doc.groups ? Object.keys(doc.groups).length : 0) + (doc.lanes ? Object.keys(doc.lanes).length : 0);
2623
4087
  }
2624
4088
  function countDiagramElements(diagram2) {
2625
4089
  const phases = Array.isArray(diagram2.phases) ? diagram2.phases : [];
@@ -2759,7 +4223,14 @@ function compileToCdl(doc, opts) {
2759
4223
  \u8A9E\u306E\u72B6\u614B\u3092\u56F3\u306E\u8A9E\u3078\u76F4\u3059(merged);
2760
4224
  const \u7573\u3093\u3060\u304D\u3063\u304B\u3051 = foldValueTriggers(merged, doc, opts?.onNotice);
2761
4225
  attachDerivedValues(merged, doc, opts?.onNotice, inheritedDerivedSourceLines, \u7573\u3093\u3060\u304D\u3063\u304B\u3051);
2762
- for (const dropped of stripExternalPaint(merged)) {
4226
+ if (doc.readouts && doc.readouts.length > 0) {
4227
+ const ownReadouts = doc.readouts.map(
4228
+ (readout) => deepRewriteStrings(readout, (value) => value)
4229
+ );
4230
+ merged.readouts = [...merged.readouts ?? [], ...ownReadouts];
4231
+ }
4232
+ const \u5916\u3057\u305F\u90E8\u54C1\u306E\u914D\u8272 = stripExternalReadoutPalettes(merged);
4233
+ for (const dropped of [...stripExternalPaint(merged), ...\u5916\u3057\u305F\u90E8\u54C1\u306E\u914D\u8272]) {
2763
4234
  opts?.onNotice?.({
2764
4235
  kind: "external-paint-dropped",
2765
4236
  actor: dropped.path,
@@ -2771,6 +4242,22 @@ function compileToCdl(doc, opts) {
2771
4242
  restoreActorNames(merged, \u5206\u3051\u305F.\u5143\u306E\u540D\u524D, \u4F5C\u308A\u66FF\u3048\u305F\u5BFE\u8C61);
2772
4243
  return merged;
2773
4244
  }
4245
+ function stripExternalReadoutPalettes(diagram2) {
4246
+ const stripped = [];
4247
+ for (let i = 0; i < (diagram2.readouts?.length ?? 0); i += 1) {
4248
+ const readout = diagram2.readouts?.[i];
4249
+ if (!readout?.colors) continue;
4250
+ const colors = [...readout.colors];
4251
+ for (let j = 0; j < colors.length; j += 1) {
4252
+ const color = colors[j];
4253
+ if (color === void 0 || !pointsOutside(color)) continue;
4254
+ colors[j] = "none";
4255
+ stripped.push({ path: `readouts[${i}].colors[${j}]`, value: color });
4256
+ }
4257
+ readout.colors = colors;
4258
+ }
4259
+ return stripped;
4260
+ }
2774
4261
  function materializeStates(diagram2, doc) {
2775
4262
  const \u8F09\u3063\u3066\u3044\u308B = new Set(diagram2.states.map((s) => s.id));
2776
4263
  for (const st of doc.animate?.states ?? []) {
@@ -3051,7 +4538,9 @@ function disambiguateActorIds(doc, onNotice) {
3051
4538
  for (const \u5F62 of id\u306B\u306A\u308B\u5F62(a.name)) \u4F7F\u3046\u5F62.add(\u5F62);
3052
4539
  }
3053
4540
  const \u65B0\u3057\u3044\u540D\u524D = /* @__PURE__ */ new Map();
3054
- for (const a of [...\u4F5C\u308A\u66FF\u3048\u308B].sort((x, y) => x.name < y.name ? -1 : x.name > y.name ? 1 : 0)) {
4541
+ for (const a of [...\u4F5C\u308A\u66FF\u3048\u308B].sort(
4542
+ (x, y) => x.name < y.name ? -1 : x.name > y.name ? 1 : 0
4543
+ )) {
3055
4544
  const \u5C3E = \u540D\u524D\u306E\u5C3E(a.name);
3056
4545
  const \u4F59\u5730 = ID_MAX - (\u5C3E.length + 1);
3057
4546
  const \u57FA\u5E95 = a.name.slice(0, \u4F59\u5730);
@@ -3773,7 +5262,9 @@ function mergePartsFromActors(target, doc, partsCatalog, onNotice, derivedSource
3773
5262
  const part = found;
3774
5263
  if (!part) {
3775
5264
  if (typeof console !== "undefined" && console.warn) {
3776
- console.warn(`[dragon] parts kind "${partId}" not found in partsCatalog (actor: ${actor.name})`);
5265
+ console.warn(
5266
+ `[dragon] parts kind "${partId}" not found in partsCatalog (actor: ${actor.name})`
5267
+ );
3777
5268
  }
3778
5269
  continue;
3779
5270
  }
@@ -3820,7 +5311,8 @@ function mergePartsFromActors(target, doc, partsCatalog, onNotice, derivedSource
3820
5311
  }
3821
5312
  function resolveStateOverride(original, override) {
3822
5313
  if (override === void 0) return { initial: original, rejected: false };
3823
- if (isColorValue(original) && !isColorValue(override)) return { initial: original, rejected: true };
5314
+ if (isColorValue(original) && !isColorValue(override))
5315
+ return { initial: original, rejected: true };
3824
5316
  return { initial: override, rejected: false };
3825
5317
  }
3826
5318
  function applyColorHex(part, colorHex, stateOverride) {
@@ -3981,7 +5473,10 @@ function mergePartIntoDiagram(target, part, alias, stateOverride, laneMapping, o
3981
5473
  });
3982
5474
  }
3983
5475
  for (const stateOrig of part.states) {
3984
- const { initial, rejected } = resolveStateOverride(stateOrig.initial, stateOverride[stateOrig.id]);
5476
+ const { initial, rejected } = resolveStateOverride(
5477
+ stateOrig.initial,
5478
+ stateOverride[stateOrig.id]
5479
+ );
3985
5480
  if (rejected) {
3986
5481
  onNotice?.({
3987
5482
  kind: "state-override-rejected",
@@ -4013,7 +5508,10 @@ function mergePartIntoDiagram(target, part, alias, stateOverride, laneMapping, o
4013
5508
  if (part.readouts && part.readouts.length > 0) {
4014
5509
  if (!target.readouts) target.readouts = [];
4015
5510
  for (const readoutOrig of part.readouts) {
4016
- const rewritten = deepRewriteStrings(readoutOrig, rewriteTemplate);
5511
+ const rewritten = deepRewriteStrings(
5512
+ readoutOrig,
5513
+ rewriteTemplate
5514
+ );
4017
5515
  target.readouts.push({
4018
5516
  ...rewritten,
4019
5517
  id: prefix(rewritten.id)
@@ -4043,8 +5541,14 @@ function mergePartIntoDiagram(target, part, alias, stateOverride, laneMapping, o
4043
5541
  const partPhase = part.phases[i];
4044
5542
  targetPhase.duration = Math.max(targetPhase.duration, partPhase.duration);
4045
5543
  targetPhase.activate = [...targetPhase.activate, ...partPhase.activate.map(prefix)];
4046
- targetPhase.tweens = [...targetPhase.tweens, ...partPhase.tweens.map((t) => ({ ...t, stateId: valuePrefix(t.stateId) }))];
4047
- targetPhase.sets = [...targetPhase.sets, ...partPhase.sets.map((s) => ({ ...s, stateId: valuePrefix(s.stateId) }))];
5544
+ targetPhase.tweens = [
5545
+ ...targetPhase.tweens,
5546
+ ...partPhase.tweens.map((t) => ({ ...t, stateId: valuePrefix(t.stateId) }))
5547
+ ];
5548
+ targetPhase.sets = [
5549
+ ...targetPhase.sets,
5550
+ ...partPhase.sets.map((s) => ({ ...s, stateId: valuePrefix(s.stateId) }))
5551
+ ];
4048
5552
  }
4049
5553
  for (let i = commonLen; i < partsLen; i++) {
4050
5554
  const phaseOrig = part.phases[i];
@@ -4112,6 +5616,7 @@ function \u77E2\u5370\u3078\u66F8\u304D\u5199\u3059(target, s, doc) {
4112
5616
  target.label = target.label ? `${target.label} (${s.cardinality})` : `(${s.cardinality})`;
4113
5617
  }
4114
5618
  }
5619
+ if (s.side !== void 0) target.side = s.side;
4115
5620
  if (s.labelOffsetX !== void 0) target.labelOffsetX = s.labelOffsetX;
4116
5621
  if (s.labelOffsetY !== void 0) target.labelOffsetY = s.labelOffsetY;
4117
5622
  if (s.overlay !== void 0) target.overlay = s.overlay;
@@ -4148,7 +5653,8 @@ function \u5F0F\u306B\u66F8\u304F\u6570(n) {
4148
5653
  const decimalAt = whole.length + Number(exponentText);
4149
5654
  let expanded;
4150
5655
  if (decimalAt <= 0) expanded = `0.${"0".repeat(-decimalAt)}${digits}`;
4151
- else if (decimalAt >= digits.length) expanded = `${digits}${"0".repeat(decimalAt - digits.length)}`;
5656
+ else if (decimalAt >= digits.length)
5657
+ expanded = `${digits}${"0".repeat(decimalAt - digits.length)}`;
4152
5658
  else expanded = `${digits.slice(0, decimalAt)}.${digits.slice(decimalAt)}`;
4153
5659
  return negative ? `-${expanded}` : expanded;
4154
5660
  }
@@ -4204,7 +5710,13 @@ function foldValueTriggers(diagram2, doc, onNotice) {
4204
5710
  const \u89E3\u3051\u306A\u3044 = /* @__PURE__ */ new Set();
4205
5711
  const \u89E3\u6C7A\u4E2D = /* @__PURE__ */ new Set();
4206
5712
  const \u77E5\u3089\u305B\u308B = (v, message, hint) => {
4207
- onNotice?.({ kind: "value-trigger-unresolved", actor: v.name, line: v.pos?.line ?? 0, message, hint });
5713
+ onNotice?.({
5714
+ kind: "value-trigger-unresolved",
5715
+ actor: v.name,
5716
+ line: v.pos?.line ?? 0,
5717
+ message,
5718
+ hint
5719
+ });
4208
5720
  };
4209
5721
  const \u89E3\u304F = (name) => {
4210
5722
  const \u65E2\u51FA = \u89E3\u3051\u305F.get(name);
@@ -4214,7 +5726,11 @@ function foldValueTriggers(diagram2, doc, onNotice) {
4214
5726
  if (!v || !v.trigger) return null;
4215
5727
  if (\u89E3\u6C7A\u4E2D.has(name)) {
4216
5728
  \u89E3\u3051\u306A\u3044.add(name);
4217
- \u77E5\u3089\u305B\u308B(v, `"${name}" \u306E\u304D\u3063\u304B\u3051\u304C\u4E00\u5468\u3057\u3066\u3044\u307E\u3059`, "\u3069\u308C\u304B 1 \u3064\u3092 `trigger: step ...` \u306B\u5909\u3048\u308B");
5729
+ \u77E5\u3089\u305B\u308B(
5730
+ v,
5731
+ `"${name}" \u306E\u304D\u3063\u304B\u3051\u304C\u4E00\u5468\u3057\u3066\u3044\u307E\u3059`,
5732
+ "\u3069\u308C\u304B 1 \u3064\u3092 `trigger: step ...` \u306B\u5909\u3048\u308B"
5733
+ );
4218
5734
  return null;
4219
5735
  }
4220
5736
  \u89E3\u6C7A\u4E2D.add(name);
@@ -4237,7 +5753,11 @@ function foldValueTriggers(diagram2, doc, onNotice) {
4237
5753
  if (trigger.kind === "step") {
4238
5754
  const idx = \u6BB5\u306E\u756A\u53F7.get(trigger.step);
4239
5755
  if (idx === void 0) {
4240
- \u77E5\u3089\u305B\u308B(v, `"${trigger.step}" \u3068\u3044\u3046\u6BB5\u304C\u3042\u308A\u307E\u305B\u3093`, "`animation:` \u306B\u305D\u306E\u540D\u524D\u306E\u6BB5\u3092\u66F8\u304F\u304B\u3001 \u6BB5\u306E\u540D\u524D\u306B\u5408\u308F\u305B\u308B");
5756
+ \u77E5\u3089\u305B\u308B(
5757
+ v,
5758
+ `"${trigger.step}" \u3068\u3044\u3046\u6BB5\u304C\u3042\u308A\u307E\u305B\u3093`,
5759
+ "`animation:` \u306B\u305D\u306E\u540D\u524D\u306E\u6BB5\u3092\u66F8\u304F\u304B\u3001 \u6BB5\u306E\u540D\u524D\u306B\u5408\u308F\u305B\u308B"
5760
+ );
4241
5761
  return null;
4242
5762
  }
4243
5763
  \u6BB5 = idx;
@@ -4290,7 +5810,8 @@ function foldValueTriggers(diagram2, doc, onNotice) {
4290
5810
  \u6BB5\u3054\u3068\u306E\u6642\u8A08.set(\u6BB5, \u540D\u524D);
4291
5811
  diagram2.states.push({ id: \u540D\u524D, initial: 0 });
4292
5812
  const \u6BB5\u306E\u4E2D\u8EAB = diagram2.phases[\u6BB5];
4293
- if (\u6BB5\u306E\u4E2D\u8EAB) \u6BB5\u306E\u4E2D\u8EAB.tweens = [...\u6BB5\u306E\u4E2D\u8EAB.tweens, { stateId: \u540D\u524D, from: 0, to: \u6BB5\u306E\u4E2D\u8EAB.duration }];
5813
+ if (\u6BB5\u306E\u4E2D\u8EAB)
5814
+ \u6BB5\u306E\u4E2D\u8EAB.tweens = [...\u6BB5\u306E\u4E2D\u8EAB.tweens, { stateId: \u540D\u524D, from: 0, to: \u6BB5\u306E\u4E2D\u8EAB.duration }];
4294
5815
  return \u540D\u524D;
4295
5816
  };
4296
5817
  for (const [name, \u533A\u9593] of \u89E3\u3051\u305F) {
@@ -4639,6 +6160,7 @@ function compileGantt(doc) {
4639
6160
  if (!\u76EE\u76DB\u308A.includes(label)) \u76EE\u76DB\u308A.push(label);
4640
6161
  \u30BF\u30B9\u30AF.push({
4641
6162
  name: a.name,
6163
+ title: \u7BB1\u306E\u984C(a),
4642
6164
  label,
4643
6165
  ...a.tone !== void 0 ? { tone: a.tone } : {},
4644
6166
  ...a.owner !== void 0 ? { owner: a.owner } : {},
@@ -4692,7 +6214,7 @@ function compileGantt(doc) {
4692
6214
  const \u7D42\u308F\u308A = \u7D42\u308F\u308B\u4F4D\u7F6E(t.end, idx, \u76EE\u76DB\u308A, t.name, \u9006\u5411\u304D\u3092\u4F1D\u3048\u308B, doc);
4693
6215
  return {
4694
6216
  id: slugify(t.name),
4695
- title: t.name,
6217
+ title: t.title,
4696
6218
  startIdx: idx,
4697
6219
  endIdx: \u7D42\u308F\u308A.idx,
4698
6220
  startLabel: t.label,
@@ -4718,7 +6240,7 @@ function compileClass(doc) {
4718
6240
  lane: laneId,
4719
6241
  stack: 0,
4720
6242
  kind: "storage",
4721
- title: a.name,
6243
+ title: \u7BB1\u306E\u984C(a),
4722
6244
  w: CLASS_W
4723
6245
  });
4724
6246
  });
@@ -4728,6 +6250,7 @@ function compileClass(doc) {
4728
6250
  b.edge(fromId, toId, {
4729
6251
  label: s.label,
4730
6252
  ...s.sub ? { sub: s.sub } : {},
6253
+ ...s.side ? { side: s.side } : {},
4731
6254
  ...s.tone ? { tone: s.tone } : {},
4732
6255
  ...s.style ? { style: s.style } : {}
4733
6256
  });
@@ -4780,7 +6303,7 @@ function compileValueChart(doc, \u578B, kind, onNotice) {
4780
6303
  \u672A\u5BA3\u8A00.push(a.name);
4781
6304
  continue;
4782
6305
  }
4783
- data.push({ label: a.name, value, ...a.tone !== void 0 ? { tone: a.tone } : {} });
6306
+ data.push({ label: \u7BB1\u306E\u984C(a), value, ...a.tone !== void 0 ? { tone: a.tone } : {} });
4784
6307
  }
4785
6308
  const \u8A9E = \u578B === "pie" ? { \u91CF: "\u5272\u5408", \u56F3: "\u5186", \u4F8B: '"45%"' } : \u578B === "bar" ? { \u91CF: "\u5024", \u56F3: "\u68D2", \u4F8B: '"420"' } : { \u91CF: "\u5024", \u56F3: "\u6298\u308C\u7DDA", \u4F8B: '"180"' };
4786
6309
  const \u4F1D\u3048\u308B = (\u7A2E\u985E, \u540D\u524D, message, line = 0) => {
@@ -4932,7 +6455,7 @@ function compileFunnel(doc, onNotice) {
4932
6455
  \u672A\u5BA3\u8A00.push(a.name);
4933
6456
  continue;
4934
6457
  }
4935
- data.push({ id: slugify(a.name), title: a.name, count: v });
6458
+ data.push({ id: slugify(a.name), title: \u7BB1\u306E\u984C(a), count: v });
4936
6459
  }
4937
6460
  if (\u672A\u5BA3\u8A00.length > 0) {
4938
6461
  const m3 = `type: funnel \u3067\u6570\u306B\u306A\u3089\u306A\u3044\u5024\u3092\u53C2\u7167\u3057\u305F\u9805\u76EE\u304C\u3042\u308A\u307E\u3059 (\u6BB5\u306B\u8F09\u305B\u307E\u305B\u3093): ${\u672A\u5BA3\u8A00.join(", ")}\u3002 \`states:\` \u306B\u305D\u306E\u540D\u524D\u3092\u6570\u3067\u66F8\u3044\u3066\u304F\u3060\u3055\u3044`;
@@ -4946,7 +6469,12 @@ function compileFunnel(doc, onNotice) {
4946
6469
  }
4947
6470
  if (doc.flow.length > 0) {
4948
6471
  const m2 = `type: funnel \u3067\u306F\u77E2\u5370\u3092\u63CF\u3051\u307E\u305B\u3093 (${doc.flow.length} \u672C\u3092\u7121\u8996\u3057\u307E\u3057\u305F)\u3002 \u95A2\u4FC2\u3092\u63CF\u304F\u306A\u3089 type: flow \u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044`;
4949
- onNotice?.({ kind: "chart-edge-dropped", actor: doc.flow[0]?.from ?? "", line: doc.flow[0]?.pos?.line ?? 0, message: m2 });
6472
+ onNotice?.({
6473
+ kind: "chart-edge-dropped",
6474
+ actor: doc.flow[0]?.from ?? "",
6475
+ line: doc.flow[0]?.pos?.line ?? 0,
6476
+ message: m2
6477
+ });
4950
6478
  if (typeof console !== "undefined" && console.warn) console.warn(`[dragon] ${m2}`);
4951
6479
  }
4952
6480
  b.node(`${slugify(doc.title)}-chart`, {
@@ -4967,11 +6495,19 @@ function \u77E2\u5370\u304B\u3089\u89AA\u3092\u6C7A\u3081\u308B(doc, \u56F3\u7A2
4967
6495
  const \u5B50 = slugify(f.to);
4968
6496
  const \u89AA\u540D = slugify(f.from);
4969
6497
  if (!\u540D\u524D.has(\u89AA\u540D)) {
4970
- \u4F1D\u3048\u308B(f.from, `type: ${\u56F3\u7A2E} \u3067\u66F8\u3044\u3066\u3044\u306A\u3044\u540D\u524D\u3092\u89AA\u306B\u3057\u3066\u3044\u307E\u3059: ${f.from} -> ${f.to}`, f.pos?.line ?? 0);
6498
+ \u4F1D\u3048\u308B(
6499
+ f.from,
6500
+ `type: ${\u56F3\u7A2E} \u3067\u66F8\u3044\u3066\u3044\u306A\u3044\u540D\u524D\u3092\u89AA\u306B\u3057\u3066\u3044\u307E\u3059: ${f.from} -> ${f.to}`,
6501
+ f.pos?.line ?? 0
6502
+ );
4971
6503
  continue;
4972
6504
  }
4973
6505
  if (!\u540D\u524D.has(\u5B50)) {
4974
- \u4F1D\u3048\u308B(f.to, `type: ${\u56F3\u7A2E} \u3067\u66F8\u3044\u3066\u3044\u306A\u3044\u540D\u524D\u3092\u5B50\u306B\u3057\u3066\u3044\u307E\u3059: ${f.from} -> ${f.to}`, f.pos?.line ?? 0);
6506
+ \u4F1D\u3048\u308B(
6507
+ f.to,
6508
+ `type: ${\u56F3\u7A2E} \u3067\u66F8\u3044\u3066\u3044\u306A\u3044\u540D\u524D\u3092\u5B50\u306B\u3057\u3066\u3044\u307E\u3059: ${f.from} -> ${f.to}`,
6509
+ f.pos?.line ?? 0
6510
+ );
4975
6511
  continue;
4976
6512
  }
4977
6513
  if (\u5B50 === \u89AA\u540D) {
@@ -4980,7 +6516,11 @@ function \u77E2\u5370\u304B\u3089\u89AA\u3092\u6C7A\u3081\u308B(doc, \u56F3\u7A2
4980
6516
  }
4981
6517
  const \u65E2\u5B58 = \u89AA.get(\u5B50);
4982
6518
  if (\u65E2\u5B58 !== void 0 && \u65E2\u5B58 !== \u89AA\u540D) {
4983
- \u4F1D\u3048\u308B(f.to, `type: ${\u56F3\u7A2E} \u3067 ${f.to} \u306B\u89AA\u304C 2 \u3064\u3042\u308A\u307E\u3059 (\u5F8C\u306E ${f.from} \u306F\u4F7F\u3044\u307E\u305B\u3093)`, f.pos?.line ?? 0);
6519
+ \u4F1D\u3048\u308B(
6520
+ f.to,
6521
+ `type: ${\u56F3\u7A2E} \u3067 ${f.to} \u306B\u89AA\u304C 2 \u3064\u3042\u308A\u307E\u3059 (\u5F8C\u306E ${f.from} \u306F\u4F7F\u3044\u307E\u305B\u3093)`,
6522
+ f.pos?.line ?? 0
6523
+ );
4984
6524
  continue;
4985
6525
  }
4986
6526
  \u89AA.set(\u5B50, \u89AA\u540D);
@@ -5016,7 +6556,10 @@ function compileTree(doc, onNotice) {
5016
6556
  };
5017
6557
  for (const [k, \u7FA4] of slug\u5225) {
5018
6558
  if (\u7FA4.length > 1) {
5019
- \u4F1D\u3048\u308B(\u7FA4[0], `type: tree \u3067 ${\u7FA4.join(" / ")} \u304C\u540C\u3058 id (${k}) \u306B\u306A\u308A\u307E\u3059\u3002 \u540D\u524D\u3092\u5909\u3048\u3066\u304F\u3060\u3055\u3044`);
6559
+ \u4F1D\u3048\u308B(
6560
+ \u7FA4[0],
6561
+ `type: tree \u3067 ${\u7FA4.join(" / ")} \u304C\u540C\u3058 id (${k}) \u306B\u306A\u308A\u307E\u3059\u3002 \u540D\u524D\u3092\u5909\u3048\u3066\u304F\u3060\u3055\u3044`
6562
+ );
5020
6563
  }
5021
6564
  }
5022
6565
  const \u89AA = \u77E2\u5370\u304B\u3089\u89AA\u3092\u6C7A\u3081\u308B(doc, "tree", \u540D\u524D, \u4F1D\u3048\u308B);
@@ -5052,10 +6595,7 @@ function reportChartFieldsNotHonored(doc, onNotice) {
5052
6595
  ...a.touchpoint !== void 0 ? ["touchpoint"] : [],
5053
6596
  ...a.opportunity !== void 0 ? ["opportunity"] : []
5054
6597
  ];
5055
- const \u5DE5\u7A0B = doc.type === "gantt" ? [] : [
5056
- ...a.owner !== void 0 ? ["owner"] : [],
5057
- ...a.end !== void 0 ? ["end"] : []
5058
- ];
6598
+ const \u5DE5\u7A0B = doc.type === "gantt" ? [] : [...a.owner !== void 0 ? ["owner"] : [], ...a.end !== void 0 ? ["end"] : []];
5059
6599
  if (\u9053\u7B4B.length > 0) {
5060
6600
  onNotice({
5061
6601
  kind: "chart-value-unreadable",
@@ -5091,7 +6631,7 @@ function compileJourney(doc, onNotice) {
5091
6631
  \u8AAD\u3081\u306A\u3044.push(a.name);
5092
6632
  continue;
5093
6633
  }
5094
- data.push({ id: slugify(a.name), title: a.name, emotion: \u8A9E, ...\u9053\u7B4B\u306E\u6B04(a) });
6634
+ data.push({ id: slugify(a.name), title: \u7BB1\u306E\u984C(a), emotion: \u8A9E, ...\u9053\u7B4B\u306E\u6B04(a) });
5095
6635
  continue;
5096
6636
  }
5097
6637
  const e = \u6C17\u6301\u3061.get(\u8A9E);
@@ -5099,7 +6639,7 @@ function compileJourney(doc, onNotice) {
5099
6639
  \u8AAD\u3081\u306A\u3044.push(a.name);
5100
6640
  continue;
5101
6641
  }
5102
- data.push({ id: slugify(a.name), title: a.name, emotion: e, ...\u9053\u7B4B\u306E\u6B04(a) });
6642
+ data.push({ id: slugify(a.name), title: \u7BB1\u306E\u984C(a), emotion: e, ...\u9053\u7B4B\u306E\u6B04(a) });
5103
6643
  }
5104
6644
  if (\u8AAD\u3081\u306A\u3044.length > 0) {
5105
6645
  const m = `type: journey \u3067\u6C17\u6301\u3061\u3092\u8AAD\u3081\u306A\u3044\u9805\u76EE\u304C\u3042\u308A\u307E\u3059 (\u9053\u7B4B\u306B\u8F09\u305B\u307E\u305B\u3093): ${\u8AAD\u3081\u306A\u3044.join(", ")}\u3002 \`- \u767B\u9332: "\u4E0D\u6E80"\` \u306E\u5F62\u3067\u3001 ${[...\u6C17\u6301\u3061.keys()].join(" / ")} \u306E\u3069\u308C\u304B\u3092\u66F8\u3044\u3066\u304F\u3060\u3055\u3044`;
@@ -5108,7 +6648,12 @@ function compileJourney(doc, onNotice) {
5108
6648
  }
5109
6649
  if (doc.flow.length > 0) {
5110
6650
  const m2 = `type: journey \u3067\u306F\u77E2\u5370\u3092\u63CF\u3051\u307E\u305B\u3093 (${doc.flow.length} \u672C\u3092\u7121\u8996\u3057\u307E\u3057\u305F)\u3002 \u95A2\u4FC2\u3092\u63CF\u304F\u306A\u3089 type: flow \u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044`;
5111
- onNotice?.({ kind: "chart-edge-dropped", actor: doc.flow[0]?.from ?? "", line: doc.flow[0]?.pos?.line ?? 0, message: m2 });
6651
+ onNotice?.({
6652
+ kind: "chart-edge-dropped",
6653
+ actor: doc.flow[0]?.from ?? "",
6654
+ line: doc.flow[0]?.pos?.line ?? 0,
6655
+ message: m2
6656
+ });
5112
6657
  if (typeof console !== "undefined" && console.warn) console.warn(`[dragon] ${m2}`);
5113
6658
  }
5114
6659
  b.node(`${slugify(doc.title)}-chart`, {
@@ -5172,7 +6717,7 @@ function compileQuadrant(doc, onNotice) {
5172
6717
  \u8AAD\u3081\u306A\u3044.push(a.name);
5173
6718
  continue;
5174
6719
  }
5175
- items.push({ id: slugify(a.name), title: a.name, quadrant: \u8A9E });
6720
+ items.push({ id: slugify(a.name), title: \u7BB1\u306E\u984C(a), quadrant: \u8A9E });
5176
6721
  continue;
5177
6722
  }
5178
6723
  const q = \u533A\u753B.get(\u8A9E);
@@ -5180,7 +6725,7 @@ function compileQuadrant(doc, onNotice) {
5180
6725
  \u8AAD\u3081\u306A\u3044.push(a.name);
5181
6726
  continue;
5182
6727
  }
5183
- items.push({ id: slugify(a.name), title: a.name, quadrant: q });
6728
+ items.push({ id: slugify(a.name), title: \u7BB1\u306E\u984C(a), quadrant: q });
5184
6729
  }
5185
6730
  if (\u8AAD\u3081\u306A\u3044.length > 0) {
5186
6731
  const m = `type: quadrant \u3067\u533A\u753B\u3092\u8AAD\u3081\u306A\u3044\u9805\u76EE\u304C\u3042\u308A\u307E\u3059 (\u56F3\u306B\u8F09\u305B\u307E\u305B\u3093): ${\u8AAD\u3081\u306A\u3044.join(", ")}\u3002 \`- \u91CD\u8907\u524A\u9664: "\u5DE6\u4E0A"\` \u306E\u5F62\u3067\u3001 ${[...\u533A\u753B.keys()].join(" / ")} \u306E\u3069\u308C\u304B\u3092\u66F8\u3044\u3066\u304F\u3060\u3055\u3044`;
@@ -5189,7 +6734,12 @@ function compileQuadrant(doc, onNotice) {
5189
6734
  }
5190
6735
  if (doc.flow.length > 0) {
5191
6736
  const m2 = `type: quadrant \u3067\u306F\u77E2\u5370\u3092\u63CF\u3051\u307E\u305B\u3093 (${doc.flow.length} \u672C\u3092\u7121\u8996\u3057\u307E\u3057\u305F)\u3002 \u95A2\u4FC2\u3092\u63CF\u304F\u306A\u3089 type: flow \u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044`;
5192
- onNotice?.({ kind: "chart-edge-dropped", actor: doc.flow[0]?.from ?? "", line: doc.flow[0]?.pos?.line ?? 0, message: m2 });
6737
+ onNotice?.({
6738
+ kind: "chart-edge-dropped",
6739
+ actor: doc.flow[0]?.from ?? "",
6740
+ line: doc.flow[0]?.pos?.line ?? 0,
6741
+ message: m2
6742
+ });
5193
6743
  if (typeof console !== "undefined" && console.warn) console.warn(`[dragon] ${m2}`);
5194
6744
  }
5195
6745
  b.node(`${slugify(doc.title)}-chart`, {
@@ -5249,12 +6799,16 @@ function compileC4(doc) {
5249
6799
  b.edge(fromId, toId, {
5250
6800
  label: s.label,
5251
6801
  ...s.sub ? { sub: s.sub } : {},
6802
+ ...s.side ? { side: s.side } : {},
5252
6803
  ...s.tone ? { tone: s.tone } : {},
5253
6804
  ...s.style ? { style: s.style } : {}
5254
6805
  });
5255
6806
  }
5256
6807
  return b.build();
5257
6808
  }
6809
+ function \u7BB1\u306E\u984C(a) {
6810
+ return a.title ?? a.name;
6811
+ }
5258
6812
  var \u653E\u5C04\u3067\u63CF\u3051\u306A\u3044\u6B04\u306E\u540D\u524D = {
5259
6813
  kind: "\u7A2E\u985E",
5260
6814
  eyebrow: "\u4E0A\u306E\u5C0F\u898B\u51FA\u3057",
@@ -5278,7 +6832,9 @@ var \u653E\u5C04\u3067\u63CF\u3051\u306A\u3044\u6B04\u306E\u540D\u524D = {
5278
6832
  scaleKeys: "\u500D\u7387",
5279
6833
  posRel: "\u4F4D\u7F6E (\u76F8\u5BFE)",
5280
6834
  nodes: "\u4E2D\u306E\u7BB1\u3054\u3068\u306E\u6307\u5B9A",
5281
- layoutPos: "\u914D\u7F6E\u306E\u305A\u3089\u3057"
6835
+ layoutPos: "\u914D\u7F6E\u306E\u305A\u3089\u3057",
6836
+ shape: "\u7BB1\u306E\u4E2D\u306E\u56F3\u5F62",
6837
+ visibleIf: "\u51FA\u3059\u6761\u4EF6"
5282
6838
  };
5283
6839
  function \u653E\u5C04\u3067\u63CF\u3051\u306A\u3044\u6B04\u3092\u66F8\u3044\u305F\u304B(a, \u6B04) {
5284
6840
  if (\u6B04 === "kind") return a.kindWritten === true;
@@ -5288,7 +6844,7 @@ function \u653E\u5C04\u3067\u63CF\u3051\u306A\u3044\u6B04\u3092\u66F8\u3044\u305
5288
6844
  }
5289
6845
  function \u653E\u5C04\u306B\u51FA\u3059\u6587\u5B57(a) {
5290
6846
  const \u7D9A\u304D = [a.subtitle, a.value].map((x) => x?.trim()).filter((x) => !!x);
5291
- return { title: a.name, ...\u7D9A\u304D.length > 0 ? { subtitle: \u7D9A\u304D.join(" ") } : {} };
6847
+ return { title: \u7BB1\u306E\u984C(a), ...\u7D9A\u304D.length > 0 ? { subtitle: \u7D9A\u304D.join(" ") } : {} };
5292
6848
  }
5293
6849
  function compileMind(doc, onNotice) {
5294
6850
  const b = cdl.diagram(slugify(doc.title), { topic: doc.title });
@@ -5364,7 +6920,8 @@ function compileMind(doc, onNotice) {
5364
6920
  const branches = [];
5365
6921
  const \u4F7F\u3063\u305F = /* @__PURE__ */ new Set([rootId]);
5366
6922
  \u8A18\u9332\u3059\u308B(root);
5367
- if (root.tone) \u6D88\u3048\u305F\u6B04.set(root.name, [...\u6D88\u3048\u305F\u6B04.get(root.name) ?? [], "\u8272 (\u4E2D\u5FC3\u306F\u6301\u3066\u306A\u3044)"]);
6923
+ if (root.tone)
6924
+ \u6D88\u3048\u305F\u6B04.set(root.name, [...\u6D88\u3048\u305F\u6B04.get(root.name) ?? [], "\u8272 (\u4E2D\u5FC3\u306F\u6301\u3066\u306A\u3044)"]);
5368
6925
  \u898B\u672C\u3067\u306A\u3044.slice(1).forEach((a, i) => {
5369
6926
  const id = slugify(a.name);
5370
6927
  if (\u4F7F\u3063\u305F.has(id)) {
@@ -5466,6 +7023,18 @@ function applyV05Extensions(diagram2, doc, \u8FFD\u52A0\u3057\u305F\u7E26\u5217o
5466
7023
  primaryNodes = diagram2.nodes.filter((n) => n.id === dragonSlug);
5467
7024
  }
5468
7025
  for (const node of primaryNodes) {
7026
+ if (a.title !== void 0) {
7027
+ node.title = a.title;
7028
+ if (isSeqLike) {
7029
+ const footer = diagram2.nodes.find((n) => n.id === `${node.lane}-footer`);
7030
+ if (footer) footer.title = a.title;
7031
+ if (a.posW === void 0) {
7032
+ const titleW = Math.max(140, a.title.length * 22 + 52);
7033
+ node.w = titleW;
7034
+ if (footer) footer.w = titleW;
7035
+ }
7036
+ }
7037
+ }
5469
7038
  const \u8AAC\u660E = doc.type === "c4" ? \u6BB5\u3092\u8AAD\u307F\u53D6\u308B(a.subtitle).\u8AAC\u660E : a.subtitle;
5470
7039
  if (\u8AAC\u660E !== void 0) node.subtitle = \u8AAC\u660E;
5471
7040
  if (a.eyebrow !== void 0) node.eyebrow = a.eyebrow;
@@ -5491,6 +7060,25 @@ function applyV05Extensions(diagram2, doc, \u8FFD\u52A0\u3057\u305F\u7E26\u5217o
5491
7060
  const footer = diagram2.nodes.find((n) => n.id === `${node.lane}-footer`);
5492
7061
  if (footer && a.posW !== void 0) footer.w = a.posW;
5493
7062
  }
7063
+ if (a.shape !== void 0) {
7064
+ const dynamicKind = `dyn-${a.shape.kind}`;
7065
+ node.kind = dynamicKind;
7066
+ node.shape = { ...a.shape };
7067
+ if (isSeqLike) {
7068
+ const footer = diagram2.nodes.find((n) => n.id === `${node.lane}-footer`);
7069
+ if (footer) {
7070
+ footer.kind = dynamicKind;
7071
+ footer.shape = { ...a.shape };
7072
+ }
7073
+ }
7074
+ }
7075
+ if (a.visibleIf !== void 0) {
7076
+ node.visibleIf = a.visibleIf;
7077
+ if (isSeqLike) {
7078
+ const footer = diagram2.nodes.find((n) => n.id === `${node.lane}-footer`);
7079
+ if (footer) footer.visibleIf = a.visibleIf;
7080
+ }
7081
+ }
5494
7082
  }
5495
7083
  }
5496
7084
  alignSeqHeaderHeights(diagram2, doc);
@@ -5611,6 +7199,7 @@ function compileSequence(doc) {
5611
7199
  to: s.to,
5612
7200
  label: s.label,
5613
7201
  ...s.sub ? { sub: s.sub } : {},
7202
+ ...s.side ? { side: s.side } : {},
5614
7203
  ...s.tone ? { tone: s.tone } : {},
5615
7204
  ...s.style ? { style: s.style } : {}
5616
7205
  });
@@ -5634,8 +7223,8 @@ function compileSequenceWithAnimate(doc) {
5634
7223
  }
5635
7224
  b.lane(id, laneOpts);
5636
7225
  const headerId = `${id}-header`;
5637
- const actorW = Math.max(140, a.name.length * 22 + 52);
5638
- b.node(headerId, { lane: id, stack: 0, kind: "card", title: a.name, w: actorW, h: 72 });
7226
+ const actorW = Math.max(140, \u7BB1\u306E\u984C(a).length * 22 + 52);
7227
+ b.node(headerId, { lane: id, stack: 0, kind: "card", title: \u7BB1\u306E\u984C(a), w: actorW, h: 72 });
5639
7228
  const spacerId = `${id}-spacer`;
5640
7229
  b.node(spacerId, { lane: id, stack: 1, kind: "card", title: "", w: 2, h: 40 });
5641
7230
  });
@@ -5655,6 +7244,7 @@ function compileSequenceWithAnimate(doc) {
5655
7244
  id: edgeId,
5656
7245
  label: s.label,
5657
7246
  ...s.sub ? { sub: s.sub } : {},
7247
+ ...s.side ? { side: s.side } : {},
5658
7248
  ...s.tone ? { tone: s.tone } : {},
5659
7249
  ...s.style ? { style: s.style } : {}
5660
7250
  });
@@ -5663,12 +7253,12 @@ function compileSequenceWithAnimate(doc) {
5663
7253
  doc.actors.forEach((a) => {
5664
7254
  const laneId = actorIds.get(a.name) ?? slugify(a.name);
5665
7255
  const footerId = `${laneId}-footer`;
5666
- const actorW = Math.max(140, a.name.length * 22 + 52);
7256
+ const actorW = Math.max(140, \u7BB1\u306E\u984C(a).length * 22 + 52);
5667
7257
  b.node(footerId, {
5668
7258
  lane: laneId,
5669
7259
  stack: footerStack,
5670
7260
  kind: "card",
5671
- title: a.name,
7261
+ title: \u7BB1\u306E\u984C(a),
5672
7262
  w: actorW,
5673
7263
  h: 72,
5674
7264
  role: "lifeline-footer"
@@ -5774,7 +7364,7 @@ function compileFlow(doc) {
5774
7364
  {
5775
7365
  id: slugify(a.name),
5776
7366
  kind: a.kind,
5777
- title: a.name
7367
+ title: \u7BB1\u306E\u984C(a)
5778
7368
  },
5779
7369
  edgeLabel
5780
7370
  );
@@ -5815,6 +7405,7 @@ function compileSwimlane(doc) {
5815
7405
  id: `e${edgeIdx++}-${fromId}-${toId}`,
5816
7406
  label: s.label,
5817
7407
  ...s.sub ? { sub: s.sub } : {},
7408
+ ...s.side ? { side: s.side } : {},
5818
7409
  ...s.tone ? { tone: s.tone } : {},
5819
7410
  ...s.style ? { style: s.style } : {}
5820
7411
  });
@@ -5825,7 +7416,7 @@ function compileSwimlane(doc) {
5825
7416
  lane: swim.laneId(a.name),
5826
7417
  stack: 0,
5827
7418
  kind: a.kind ?? "actor",
5828
- title: a.name
7419
+ title: \u7BB1\u306E\u984C(a)
5829
7420
  });
5830
7421
  });
5831
7422
  }
@@ -5842,7 +7433,7 @@ function compileEr(doc) {
5842
7433
  for (const a of doc.actors) {
5843
7434
  erBuilder.entity({
5844
7435
  id: slugify(a.name),
5845
- title: a.name,
7436
+ title: \u7BB1\u306E\u984C(a),
5846
7437
  rows: []
5847
7438
  // v0.2 では rows なし
5848
7439
  });
@@ -5881,7 +7472,7 @@ function compileState(doc) {
5881
7472
  const final = \u6C7A\u3081\u65B9.\u7D42\u308F\u308A(a, i);
5882
7473
  fsm.state({
5883
7474
  id: slugify(a.name),
5884
- title: a.name,
7475
+ title: \u7BB1\u306E\u984C(a),
5885
7476
  ...initial ? { initial: true } : {},
5886
7477
  ...final ? { final: true } : {}
5887
7478
  });
@@ -5914,13 +7505,14 @@ function compileTopology(doc) {
5914
7505
  groupBuilder.add({
5915
7506
  id: slugify(a.name),
5916
7507
  kind: a.kind,
5917
- title: a.name
7508
+ title: \u7BB1\u306E\u984C(a)
5918
7509
  });
5919
7510
  }
5920
7511
  for (const s of doc.flow) {
5921
7512
  topo.connect(slugify(s.from), slugify(s.to), {
5922
7513
  label: s.label,
5923
7514
  ...s.sub ? { sub: s.sub } : {},
7515
+ ...s.side ? { side: s.side } : {},
5924
7516
  ...s.tone ? { tone: s.tone } : {},
5925
7517
  ...s.style ? { style: s.style } : {}
5926
7518
  });
@@ -5960,15 +7552,19 @@ function compileGenericWithAnimate(doc, opts) {
5960
7552
  const lid = a.lane;
5961
7553
  const stack = \u7A4D\u3093\u3060\u6570.get(lid) ?? 0;
5962
7554
  \u7A4D\u3093\u3060\u6570.set(lid, stack + 1);
5963
- b.node(id, { lane: lid, stack, kind: a.kind, title: a.name });
7555
+ b.node(id, { lane: lid, stack, kind: a.kind, title: \u7BB1\u306E\u984C(a) });
5964
7556
  });
5965
7557
  } else if (kind === "flow" || kind === "topology") {
5966
7558
  const lid = opts.laneId ?? "main";
5967
- b.lane(lid, { width: laneWidth, label: doc.title, ...kind === "topology" ? { contain: true } : {} });
7559
+ b.lane(lid, {
7560
+ width: laneWidth,
7561
+ label: doc.title,
7562
+ ...kind === "topology" ? { contain: true } : {}
7563
+ });
5968
7564
  doc.actors.forEach((a, idx) => {
5969
7565
  const id = slugify(a.name);
5970
7566
  actorToNodeId.set(a.name, id);
5971
- b.node(id, { lane: lid, stack: idx, kind: a.kind, title: a.name });
7567
+ b.node(id, { lane: lid, stack: idx, kind: a.kind, title: \u7BB1\u306E\u984C(a) });
5972
7568
  });
5973
7569
  } else {
5974
7570
  const \u898B\u51FA\u3057\u3092\u4ED8\u3051\u308B = kind === "swimlane";
@@ -5984,7 +7580,7 @@ function compileGenericWithAnimate(doc, opts) {
5984
7580
  lane: lid,
5985
7581
  stack: 0,
5986
7582
  kind: a.kind,
5987
- title: a.name,
7583
+ title: \u7BB1\u306E\u984C(a),
5988
7584
  ...isInitial ? { eyebrow: "\u521D\u671F" } : {},
5989
7585
  ...isFinal ? { eyebrow: "\u6700\u7D42" } : {}
5990
7586
  });
@@ -6003,6 +7599,7 @@ function compileGenericWithAnimate(doc, opts) {
6003
7599
  label: labelWithCard,
6004
7600
  ...\u5F8C\u308D\u3078\u623B\u308B\u77E2\u5370\u304B(kind, fromId, toId, \u7BB1\u306E\u4E26\u3073) ? { routing: "back-detour" } : {},
6005
7601
  ...s.sub ? { sub: s.sub } : {},
7602
+ ...s.side ? { side: s.side } : {},
6006
7603
  ...s.tone ? { tone: s.tone } : {},
6007
7604
  ...s.style ? { style: s.style } : {}
6008
7605
  });
@@ -6689,7 +8286,9 @@ var ACCEPTED_KEYS = {
6689
8286
  "animation",
6690
8287
  "viewport",
6691
8288
  "lanes",
6692
- "groups"
8289
+ "groups",
8290
+ // 値を見せる部品 (#1374)
8291
+ "readouts"
6693
8292
  ],
6694
8293
  actor: [
6695
8294
  "name",
@@ -6715,13 +8314,21 @@ var ACCEPTED_KEYS = {
6715
8314
  "nodes",
6716
8315
  "scale",
6717
8316
  "state",
6718
- "pos"
8317
+ "pos",
8318
+ // 箱の中に描く図形 (#1374)
8319
+ "shape",
8320
+ // その箱を出すかどうかの条件 (#1381)
8321
+ "visibleIf",
8322
+ // 箱に出す題 (#1381)
8323
+ "title"
6719
8324
  ],
6720
8325
  step: [
6721
8326
  "from",
6722
8327
  "to",
6723
8328
  "label",
6724
8329
  "sub",
8330
+ // 矢印がどの辺から出るか (#1385)
8331
+ "side",
6725
8332
  "tone",
6726
8333
  "style",
6727
8334
  "guard",
@@ -6754,7 +8361,9 @@ var \u6B04\u306E\u578B\u8868 = {
6754
8361
  animation: "\u4E26\u3073",
6755
8362
  viewport: "object",
6756
8363
  lanes: "object",
6757
- groups: "object"
8364
+ groups: "object",
8365
+ // 値を見せる部品 (#1374)。 中身は下の検査が種類ごとに見る
8366
+ readouts: "\u4E26\u3073"
6758
8367
  },
6759
8368
  actor: {
6760
8369
  name: "\u5FC5\u9808\u306E\u975E\u7A7A\u6587\u5B57\u5217",
@@ -6780,13 +8389,21 @@ var \u6B04\u306E\u578B\u8868 = {
6780
8389
  nodes: "object",
6781
8390
  scale: "\u6570",
6782
8391
  state: "object",
6783
- pos: "object"
8392
+ pos: "object",
8393
+ // 箱の中に描く図形 (#1374)。 中身は下の検査が種類ごとに見る
8394
+ shape: "object",
8395
+ // その箱を出すかどうかの条件 (#1381)
8396
+ visibleIf: "\u6587\u5B57\u5217",
8397
+ // 箱に出す題 (#1381)
8398
+ title: "\u6587\u5B57\u5217"
6784
8399
  },
6785
8400
  step: {
6786
8401
  from: "\u5FC5\u9808\u306E\u6587\u5B57\u5217",
6787
8402
  to: "\u5FC5\u9808\u306E\u6587\u5B57\u5217",
6788
8403
  label: "\u5FC5\u9808\u306E\u6587\u5B57\u5217",
6789
8404
  sub: "\u6587\u5B57\u5217",
8405
+ // 矢印がどの辺から出るか (#1385)
8406
+ side: "\u8FBA",
6790
8407
  tone: "\u8272",
6791
8408
  style: "\u7DDA\u7A2E",
6792
8409
  guard: "\u6587\u5B57\u5217",
@@ -6836,13 +8453,22 @@ var \u8272\u756A\u53F7\u306E\u5F62 = /^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-f
6836
8453
  function JSON\u306E\u8272\u540D\u304B(v) {
6837
8454
  return \u66F8\u3051\u308B\u8272\u540D().includes(v);
6838
8455
  }
6839
- var \u898B\u672C\u306B\u3057\u304B\u52B9\u304B\u306A\u3044\u6B04 = ["state", "scale"];
8456
+ var \u898B\u672C\u306B\u3057\u304B\u52B9\u304B\u306A\u3044\u6B04 = [
8457
+ "state",
8458
+ "scale"
8459
+ ];
6840
8460
  var \u898B\u672C\u306B\u52B9\u304B\u306A\u3044\u6B04 = [
6841
8461
  "tone",
6842
8462
  "owner",
6843
8463
  "end",
6844
8464
  "touchpoint",
6845
- "opportunity"
8465
+ "opportunity",
8466
+ // 箱の中に描く図形 (#1374)。 見本は自分の形を持つため、外から図形を差し替えられない
8467
+ "shape",
8468
+ // その箱を出すかどうかの条件 (#1381)。 見本は自分の出方を持つ
8469
+ "visibleIf",
8470
+ // 箱に出す題 (#1381)。 見本は自分の題を持つ
8471
+ "title"
6846
8472
  ];
6847
8473
  function \u5024\u3092\u691C\u67FB(v, \u578B, path, \u540D\u524D, errors) {
6848
8474
  const \u578B\u9055\u3044 = (\u671F\u5F85, \u88DC\u8DB3) => {
@@ -6925,6 +8551,16 @@ function \u5024\u3092\u691C\u67FB(v, \u578B, path, \u540D\u524D, errors) {
6925
8551
  });
6926
8552
  }
6927
8553
  return;
8554
+ case "\u8FBA":
8555
+ if (v === void 0) return;
8556
+ if (typeof v !== "string" || !EDGE_SIDE_VALUES.includes(v)) {
8557
+ errors.push({
8558
+ path,
8559
+ message: `${\u540D\u524D} must be one of: ${EDGE_SIDE_VALUES.join(", ")}`,
8560
+ hint: typeof v === "string" ? `got "${v}"` : `got ${typeof v}`
8561
+ });
8562
+ }
8563
+ return;
6928
8564
  case "\u63CF\u304F\u3082\u306E":
6929
8565
  if (v === void 0) return;
6930
8566
  if (typeof v !== "string" || !DRAW_WORDS.has(v)) {
@@ -7062,6 +8698,123 @@ function validateViewport(v, errors) {
7062
8698
  checkUnknownKeys(v, "viewport", "$.viewport", errors);
7063
8699
  \u8868\u3067\u691C\u67FB(v, "viewport", "$.viewport", "viewport", errors);
7064
8700
  }
8701
+ function \u8868\u3067\u4E2D\u8EAB\u3092\u691C\u67FB\u3059\u308B(o, \u8868, path, \u4F55, errors) {
8702
+ const kind = typeof o.kind === "string" ? o.kind : "";
8703
+ const \u5B9A\u7FA9 = \u8868[kind];
8704
+ if (\u5B9A\u7FA9 === void 0) {
8705
+ errors.push({
8706
+ path: `${path}.kind`,
8707
+ // **文字列でない値をそのまま文にしない**。 object を混ぜると `[object Object]` になり、
8708
+ // 何を書いたのかが読み手に届かない
8709
+ message: `unknown ${\u4F55} kind ${typeof o.kind === "string" ? `"${o.kind}"` : JSON.stringify(o.kind ?? null)}`,
8710
+ hint: `\u4F7F\u3048\u308B\u7A2E\u985E = ${Object.keys(\u8868).join(", ")}`
8711
+ });
8712
+ return;
8713
+ }
8714
+ for (const [\u6B04, \u5024] of Object.entries(o)) {
8715
+ if (\u6B04 === "kind" || \u6B04 === "id") continue;
8716
+ const \u5F62 = \u5B9A\u7FA9.\u6B04[\u6B04];
8717
+ if (\u5F62 === void 0) {
8718
+ errors.push({
8719
+ path: `${path}.${\u6B04}`,
8720
+ message: `unknown key "${\u6B04}"`,
8721
+ hint: `\u4F7F\u3048\u308B\u9805\u76EE = ${Object.keys(\u5B9A\u7FA9.\u6B04).join(", ")}`
8722
+ });
8723
+ continue;
8724
+ }
8725
+ const \u578B\u304C\u5408\u3046 = \u5F62 === "\u6570" ? typeof \u5024 === "number" && Number.isFinite(\u5024) : \u5F62 === "\u6570\u304B\u6587\u5B57\u5217" ? typeof \u5024 === "number" && Number.isFinite(\u5024) || typeof \u5024 === "string" : \u5F62 === "\u6587\u5B57\u5217\u306E\u4E26\u3073" ? Array.isArray(\u5024) && \u5024.every((x) => typeof x === "string") : \u5F62 === "\u771F\u507D" ? typeof \u5024 === "boolean" : \u5F62 === "\u7D44\u306E\u4E26\u3073" ? Array.isArray(\u5024) && \u5024.length > 0 && \u5024.every(
8726
+ (x) => typeof x === "object" && x !== null && !Array.isArray(x) && Object.keys(x).length > 0 && Object.values(x).every(
8727
+ (y) => typeof y === "string" || typeof y === "number" && Number.isFinite(y)
8728
+ )
8729
+ ) : \u5F62 === "\u5411\u304D" ? typeof \u5024 === "string" && ["up", "down", "left", "right"].includes(\u5024) : typeof \u5024 === "string";
8730
+ if (!\u578B\u304C\u5408\u3046) {
8731
+ errors.push({
8732
+ path: `${path}.${\u6B04}`,
8733
+ message: `${\u6B04} must be ${\u5F62}`,
8734
+ hint: `got ${Array.isArray(\u5024) ? "array" : \u5024 === null ? "null" : typeof \u5024}`
8735
+ });
8736
+ }
8737
+ }
8738
+ for (const \u6B04 of \u5B9A\u7FA9.\u5FC5\u9808) {
8739
+ if (o[\u6B04] === void 0) {
8740
+ errors.push({
8741
+ path: `${path}.${\u6B04}`,
8742
+ message: `${\u6B04} is required for ${\u4F55} kind "${kind}"`,
8743
+ hint: `\u5FC5\u9808\u306E\u9805\u76EE = ${\u5B9A\u7FA9.\u5FC5\u9808.join(", ")}`
8744
+ });
8745
+ }
8746
+ }
8747
+ }
8748
+ function validateReadouts(v, errors) {
8749
+ if (v === void 0) return;
8750
+ if (!Array.isArray(v)) {
8751
+ errors.push({
8752
+ path: "$.readouts",
8753
+ message: "readouts must be an array of readout objects",
8754
+ hint: `got ${v === null ? "null" : typeof v}`
8755
+ });
8756
+ return;
8757
+ }
8758
+ v.forEach((r, i) => {
8759
+ const path = `$.readouts[${i}]`;
8760
+ if (!r || typeof r !== "object" || Array.isArray(r)) {
8761
+ errors.push({ path, message: "readout must be a plain object", hint: `got ${typeof r}` });
8762
+ return;
8763
+ }
8764
+ const o = r;
8765
+ if (typeof o.id !== "string" || o.id === "") {
8766
+ errors.push({ path: `${path}.id`, message: "id is required", hint: "\u7A7A\u3067\u306A\u3044\u6587\u5B57\u5217\u3067\u66F8\u304F" });
8767
+ }
8768
+ \u8868\u3067\u4E2D\u8EAB\u3092\u691C\u67FB\u3059\u308B(o, \u90E8\u54C1\u306E\u8868, path, "readout", errors);
8769
+ const \u7D44\u306E\u5B9A\u7FA9 = \u90E8\u54C1\u306E\u7D44\u306E\u8868[String(o.kind)];
8770
+ for (const [\u6B04\u540D, \u5B9A\u7FA9] of Object.entries(\u7D44\u306E\u5B9A\u7FA9 ?? {})) {
8771
+ if (!Array.isArray(o[\u6B04\u540D])) continue;
8772
+ o[\u6B04\u540D].forEach((entry, j) => {
8773
+ const entryPath = `${path}.${\u6B04\u540D}[${j}]`;
8774
+ if (!entry || typeof entry !== "object" || Array.isArray(entry)) return;
8775
+ const item = entry;
8776
+ for (const key of Object.keys(item)) {
8777
+ if (key in \u5B9A\u7FA9.\u6B04) continue;
8778
+ errors.push({
8779
+ path: `${entryPath}.${key}`,
8780
+ message: `${key} is not allowed for readout kind "${String(o.kind)}"`,
8781
+ hint: `\u4F7F\u3048\u308B\u9805\u76EE = ${Object.keys(\u5B9A\u7FA9.\u6B04).join(", ")}`
8782
+ });
8783
+ }
8784
+ for (const key of \u5B9A\u7FA9.\u5FC5\u9808) {
8785
+ if (item[key] !== void 0) continue;
8786
+ errors.push({
8787
+ path: `${entryPath}.${key}`,
8788
+ message: `${key} is required for readout kind "${String(o.kind)}"`
8789
+ });
8790
+ }
8791
+ for (const [key, \u5F62] of Object.entries(\u5B9A\u7FA9.\u6B04)) {
8792
+ const \u5024 = item[key];
8793
+ if (\u5024 === void 0) continue;
8794
+ const \u5408\u3046 = \u5F62 === "\u6570" ? typeof \u5024 === "number" && Number.isFinite(\u5024) : typeof \u5024 === "string";
8795
+ if (\u5408\u3046) continue;
8796
+ errors.push({
8797
+ path: `${entryPath}.${key}`,
8798
+ message: `${key} must be ${\u5F62}`,
8799
+ hint: `got ${Array.isArray(\u5024) ? "array" : \u5024 === null ? "null" : typeof \u5024}`
8800
+ });
8801
+ }
8802
+ });
8803
+ }
8804
+ });
8805
+ }
8806
+ function validateActorShape(v, path, errors) {
8807
+ if (v === void 0) return;
8808
+ if (!v || typeof v !== "object" || Array.isArray(v)) {
8809
+ errors.push({
8810
+ path,
8811
+ message: "shape must be a plain object",
8812
+ hint: `got ${v === null ? "null" : Array.isArray(v) ? "array" : typeof v}`
8813
+ });
8814
+ return;
8815
+ }
8816
+ \u8868\u3067\u4E2D\u8EAB\u3092\u691C\u67FB\u3059\u308B(v, \u56F3\u5F62\u306E\u8868, path, "shape", errors);
8817
+ }
7065
8818
  function validateIdMap(v, \u6B04, \u5C64, errors, \u4E2D\u8EAB\u3092\u898B\u308B) {
7066
8819
  if (v === void 0) return;
7067
8820
  const path = `$.${\u6B04}`;
@@ -7223,6 +8976,7 @@ function validateJson(json) {
7223
8976
  if (!\u5199\u3057.ok) return { ok: false, errors: [\u5199\u3057.error] };
7224
8977
  const j = \u5199\u3057.value;
7225
8978
  checkUnknownKeys(j, "root", "$", errors);
8979
+ validateReadouts(j.readouts, errors);
7226
8980
  \u8868\u3067\u691C\u67FB(j, "root", "$", "", errors);
7227
8981
  if (!Array.isArray(j.actors) || j.actors.length === 0) {
7228
8982
  errors.push({ path: "$.actors", message: "actors must be a non-empty array" });
@@ -7236,6 +8990,7 @@ function validateJson(json) {
7236
8990
  const ao = a;
7237
8991
  checkUnknownKeys(ao, "actor", `$.actors[${i}]`, errors);
7238
8992
  \u8868\u3067\u691C\u67FB(ao, "actor", `$.actors[${i}]`, "actor", errors);
8993
+ validateActorShape(ao.shape, `$.actors[${i}].shape`, errors);
7239
8994
  const \u898B\u672C\u304B = \u898B\u672C\u306E\u540D\u524D\u304B(ao.kind);
7240
8995
  const \u4EE3\u308F\u308A\u306B\u4F7F\u3046\u6B04 = {
7241
8996
  state: "\u7BB1\u306E\u898B\u305F\u76EE\u3092\u5909\u3048\u308B\u306A\u3089 tone / color \u3092\u4F7F\u3046",
@@ -7454,6 +9209,10 @@ function jsonToDoc(json) {
7454
9209
  stack: a.stack,
7455
9210
  initial: a.initial,
7456
9211
  final: a.final,
9212
+ // 箱の中に描く図形 (#1374)。 見本では状態の上書きが効くため、通常の箱にだけ渡す
9213
+ shape: isPart ? void 0 : a.shape,
9214
+ visibleIf: isPart ? void 0 : a.visibleIf,
9215
+ title: isPart ? void 0 : a.title,
7457
9216
  // 普通の箱にしか効かない欄は見本では落とす。 落とす欄の一覧は `見本に効かない欄` が
7458
9217
  // 唯一の出どころで、検査 (#1308) も同じ表を見る = 「検査は通すが組み立てが捨てる」
7459
9218
  // 状態が作れない
@@ -7494,6 +9253,7 @@ function jsonToDoc(json) {
7494
9253
  to: s.to,
7495
9254
  label: s.label,
7496
9255
  sub: s.sub,
9256
+ side: s.side,
7497
9257
  // 箱と同じ読み替えを通す (#1304)。 通さないと `tone: "成功"` が色名として解決されないまま
7498
9258
  // 図に届き、同じ値が箱では色になり矢印では色にならない
7499
9259
  tone: resolveTone(s.tone),
@@ -7507,6 +9267,7 @@ function jsonToDoc(json) {
7507
9267
  layoutPos: s.pos,
7508
9268
  pos: p0
7509
9269
  }));
9270
+ const readouts = json.readouts ? [...json.readouts] : void 0;
7510
9271
  const states = Object.entries(json.states ?? {}).map(([name, initial]) => ({
7511
9272
  name,
7512
9273
  initial,
@@ -7563,6 +9324,7 @@ function jsonToDoc(json) {
7563
9324
  { id, label: g.label, lanes: g.lanes, pos: p0 }
7564
9325
  ])
7565
9326
  ) : void 0,
9327
+ readouts,
7566
9328
  pos: p0
7567
9329
  };
7568
9330
  }
@@ -7724,14 +9486,40 @@ var diagram_default = {
7724
9486
  tone: {
7725
9487
  type: "string",
7726
9488
  description: "\u7BB1\u306E\u8272\u8ABF\u3002 success / warning \u7B49\u306E\u5225\u540D\u3082\u4F7F\u3048\u308B\u3002",
7727
- enum: ["accent", "teal", "success", "error", "warning", "info", "\u6210\u529F", "\u5931\u6557", "\u8B66\u544A", "\u60C5\u5831", "\u4E2D\u7ACB", "neutral"]
9489
+ enum: [
9490
+ "accent",
9491
+ "teal",
9492
+ "success",
9493
+ "error",
9494
+ "warning",
9495
+ "info",
9496
+ "\u6210\u529F",
9497
+ "\u5931\u6557",
9498
+ "\u8B66\u544A",
9499
+ "\u60C5\u5831",
9500
+ "\u4E2D\u7ACB",
9501
+ "neutral"
9502
+ ]
7728
9503
  },
7729
9504
  color: {
7730
9505
  type: "string",
7731
9506
  description: "\u7BB1\u306E\u8272\u540D\u3001\u307E\u305F\u306F # \u3067\u59CB\u307E\u308B parts \u306E\u8272\u756A\u53F7\u3002",
7732
9507
  anyOf: [
7733
9508
  {
7734
- enum: ["accent", "teal", "success", "error", "warning", "info", "\u6210\u529F", "\u5931\u6557", "\u8B66\u544A", "\u60C5\u5831", "\u4E2D\u7ACB", "neutral"]
9509
+ enum: [
9510
+ "accent",
9511
+ "teal",
9512
+ "success",
9513
+ "error",
9514
+ "warning",
9515
+ "info",
9516
+ "\u6210\u529F",
9517
+ "\u5931\u6557",
9518
+ "\u8B66\u544A",
9519
+ "\u60C5\u5831",
9520
+ "\u4E2D\u7ACB",
9521
+ "neutral"
9522
+ ]
7735
9523
  },
7736
9524
  {
7737
9525
  pattern: "^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$"
@@ -7809,54 +9597,188 @@ var diagram_default = {
7809
9597
  type: "number"
7810
9598
  }
7811
9599
  }
7812
- }
7813
- }
7814
- }
7815
- ]
7816
- }
7817
- },
7818
- flow: {
7819
- type: "array",
7820
- description: "step \u306E\u914D\u5217 (\u77E2\u5370\u3067 actor \u9593\u3092\u7E4B\u3050)\u3002 sequence \u3067\u306F\u9806\u5E8F\u304C\u610F\u5473\u3092\u6301\u3064\u3002",
7821
- items: {
7822
- type: "object",
7823
- required: ["from", "to", "label"],
7824
- additionalProperties: false,
7825
- properties: {
7826
- from: {
7827
- type: "string",
7828
- description: "\u8D77\u70B9 actor \u540D"
7829
- },
7830
- to: {
7831
- type: "string",
7832
- description: "\u7D42\u70B9 actor \u540D"
7833
- },
7834
- label: {
7835
- type: "string",
7836
- description: "\u77E2\u5370\u4E0A\u306E\u30E9\u30D9\u30EB (\u95A2\u6570\u547C\u51FA\u3057\u540D / \u30E1\u30C3\u30BB\u30FC\u30B8\u7B49)"
7837
- },
7838
- sub: {
7839
- type: "string",
7840
- description: "\u30E9\u30D9\u30EB\u4E0B\u306E\u88DC\u8DB3"
7841
- },
7842
- tone: {
7843
- type: "string",
7844
- enum: ["accent", "teal", "success", "error", "warning", "info", "\u6210\u529F", "\u5931\u6557", "\u8B66\u544A", "\u60C5\u5831", "\u4E2D\u7ACB", "neutral"],
7845
- description: "\u77E2\u5370\u306E\u8272\u8ABF\u3002 success / \u6210\u529F \u7B49\u306E\u5225\u540D\u3082\u4F7F\u3048\u308B\u3002"
7846
- },
7847
- style: {
7848
- type: "string",
7849
- enum: ["solid", "dotted-flow"],
7850
- description: "\u77E2\u5370\u306E\u7DDA\u7A2E"
7851
- },
7852
- guard: {
7853
- type: "string",
9600
+ },
9601
+ visibleIf: {
9602
+ type: "string",
9603
+ description: '\u305D\u306E\u7BB1\u3092\u51FA\u3059\u304B\u3069\u3046\u304B\u306E\u6761\u4EF6\u3002 \u72B6\u614B\u3092\u5DEE\u3057\u8FBC\u3081\u308B\u6587\u5B57\u5217\u3067\u3001"0" / "false" / \u7A7A\u6587\u5B57\u304C\u507D\u3001\u305D\u308C\u4EE5\u5916\u306F\u771F\u3002'
9604
+ },
9605
+ title: {
9606
+ type: "string",
9607
+ description: "\u7BB1\u306B\u51FA\u3059\u984C\u3002 \u66F8\u304B\u306A\u3051\u308C\u3070 name \u304C\u305D\u306E\u307E\u307E\u984C\u306B\u306A\u308B\u3002 name \u306F\u56F3\u306E\u4E2D\u3067 1 \u3064\u306B\u6C7A\u307E\u308B\u5FC5\u8981\u304C\u3042\u308B\u304C\u3001\u984C\u306F\u91CD\u306A\u3063\u3066\u3088\u3044\u3002"
9608
+ },
9609
+ shape: {
9610
+ type: "object",
9611
+ description: "\u7BB1\u306E\u4E2D\u306B\u63CF\u304F\u56F3\u5F62\u3002 \u6C34\u4F4D / \u89D2\u5EA6 / \u534A\u5F84\u3092\u72B6\u614B\u3067\u52D5\u304B\u305B\u308B\u3002 kind \u3054\u3068\u306B\u66F8\u3051\u308B\u6B04\u304C\u9055\u3046 (rect / circle / arc / wave / polygon)\u3002",
9612
+ required: ["kind"],
9613
+ properties: {
9614
+ kind: {
9615
+ type: "string",
9616
+ enum: ["rect", "circle", "arc", "wave", "polygon"]
9617
+ },
9618
+ source: {
9619
+ type: ["number", "string"]
9620
+ },
9621
+ fillMax: {
9622
+ type: "number"
9623
+ },
9624
+ orient: {
9625
+ type: "string",
9626
+ enum: ["up", "down", "left", "right"]
9627
+ },
9628
+ radius: {
9629
+ type: ["number", "string"]
9630
+ },
9631
+ fillProgress: {
9632
+ type: ["number", "string"]
9633
+ },
9634
+ innerRadius: {
9635
+ type: "number"
9636
+ },
9637
+ outerRadius: {
9638
+ type: "number"
9639
+ },
9640
+ startAngle: {
9641
+ type: "number"
9642
+ },
9643
+ angle: {
9644
+ type: ["number", "string"]
9645
+ },
9646
+ sweepMax: {
9647
+ type: "number"
9648
+ },
9649
+ level: {
9650
+ type: ["number", "string"]
9651
+ },
9652
+ amplitude: {
9653
+ type: "number"
9654
+ },
9655
+ frequency: {
9656
+ type: "number"
9657
+ },
9658
+ waveHeight: {
9659
+ type: "number"
9660
+ },
9661
+ sides: {
9662
+ type: "number"
9663
+ },
9664
+ rotation: {
9665
+ type: ["number", "string"]
9666
+ },
9667
+ fill: {
9668
+ type: "string"
9669
+ },
9670
+ stroke: {
9671
+ type: "string"
9672
+ }
9673
+ },
9674
+ additionalProperties: false,
9675
+ oneOf: [
9676
+ {
9677
+ properties: {
9678
+ kind: {
9679
+ enum: ["rect"]
9680
+ }
9681
+ },
9682
+ required: ["source", "fillMax"]
9683
+ },
9684
+ {
9685
+ properties: {
9686
+ kind: {
9687
+ enum: ["circle"]
9688
+ }
9689
+ }
9690
+ },
9691
+ {
9692
+ properties: {
9693
+ kind: {
9694
+ enum: ["arc"]
9695
+ }
9696
+ },
9697
+ required: ["angle"]
9698
+ },
9699
+ {
9700
+ properties: {
9701
+ kind: {
9702
+ enum: ["wave"]
9703
+ }
9704
+ },
9705
+ required: ["level", "amplitude"]
9706
+ },
9707
+ {
9708
+ properties: {
9709
+ kind: {
9710
+ enum: ["polygon"]
9711
+ }
9712
+ },
9713
+ required: ["sides"]
9714
+ }
9715
+ ]
9716
+ }
9717
+ }
9718
+ }
9719
+ ]
9720
+ }
9721
+ },
9722
+ flow: {
9723
+ type: "array",
9724
+ description: "step \u306E\u914D\u5217 (\u77E2\u5370\u3067 actor \u9593\u3092\u7E4B\u3050)\u3002 sequence \u3067\u306F\u9806\u5E8F\u304C\u610F\u5473\u3092\u6301\u3064\u3002",
9725
+ items: {
9726
+ type: "object",
9727
+ required: ["from", "to", "label"],
9728
+ additionalProperties: false,
9729
+ properties: {
9730
+ from: {
9731
+ type: "string",
9732
+ description: "\u8D77\u70B9 actor \u540D"
9733
+ },
9734
+ to: {
9735
+ type: "string",
9736
+ description: "\u7D42\u70B9 actor \u540D"
9737
+ },
9738
+ label: {
9739
+ type: "string",
9740
+ description: "\u77E2\u5370\u4E0A\u306E\u30E9\u30D9\u30EB (\u95A2\u6570\u547C\u51FA\u3057\u540D / \u30E1\u30C3\u30BB\u30FC\u30B8\u7B49)"
9741
+ },
9742
+ sub: {
9743
+ type: "string",
9744
+ description: "\u30E9\u30D9\u30EB\u4E0B\u306E\u88DC\u8DB3"
9745
+ },
9746
+ tone: {
9747
+ type: "string",
9748
+ enum: [
9749
+ "accent",
9750
+ "teal",
9751
+ "success",
9752
+ "error",
9753
+ "warning",
9754
+ "info",
9755
+ "\u6210\u529F",
9756
+ "\u5931\u6557",
9757
+ "\u8B66\u544A",
9758
+ "\u60C5\u5831",
9759
+ "\u4E2D\u7ACB",
9760
+ "neutral"
9761
+ ],
9762
+ description: "\u77E2\u5370\u306E\u8272\u8ABF\u3002 success / \u6210\u529F \u7B49\u306E\u5225\u540D\u3082\u4F7F\u3048\u308B\u3002"
9763
+ },
9764
+ style: {
9765
+ type: "string",
9766
+ enum: ["solid", "dotted-flow"],
9767
+ description: "\u77E2\u5370\u306E\u7DDA\u7A2E"
9768
+ },
9769
+ guard: {
9770
+ type: "string",
7854
9771
  description: "state \u9077\u79FB\u306E\u6761\u4EF6 (kind: state \u7528)"
7855
9772
  },
7856
9773
  cardinality: {
7857
9774
  type: "string",
7858
9775
  description: "ER \u306E\u591A\u91CD\u5EA6 (1..N \u7B49\u3001 kind: er \u7528)"
7859
9776
  },
9777
+ side: {
9778
+ type: "string",
9779
+ enum: ["top", "right", "bottom", "left"],
9780
+ description: "\u77E2\u5370\u304C\u3069\u306E\u8FBA\u304B\u3089\u51FA\u308B\u304B\u3002 \u66F8\u304B\u306A\u3051\u308C\u3070\u63CF\u753B\u5074\u304C\u81EA\u52D5\u3067\u9078\u3076\u3002"
9781
+ },
7860
9782
  labelOffsetX: {
7861
9783
  type: "number",
7862
9784
  description: "\u30E9\u30D9\u30EB\u4F4D\u7F6E x \u8ABF\u6574"
@@ -8086,6 +10008,828 @@ var diagram_default = {
8086
10008
  }
8087
10009
  }
8088
10010
  }
10011
+ },
10012
+ readouts: {
10013
+ type: "array",
10014
+ description: "\u5024\u3092\u898B\u305B\u308B\u90E8\u54C1\u3002 \u72B6\u614B\u306E\u5024\u3092\u5272\u5408\u306E\u8F2A / \u6570\u3048\u4E0A\u3052 / \u76EE\u76DB\u308A\u3067\u51FA\u3059\u3002 \u7BB1\u3067\u306F\u306A\u3044\u306E\u3067\u7E26\u5217\u306B\u8F09\u3089\u305A\u3001\u56F3\u5168\u4F53\u306B 1 \u3064\u306E\u4E26\u3073\u3068\u3057\u3066\u6301\u3064\u3002",
10015
+ items: {
10016
+ type: "object",
10017
+ required: ["id", "kind"],
10018
+ additionalProperties: false,
10019
+ properties: {
10020
+ id: {
10021
+ type: "string",
10022
+ minLength: 1
10023
+ },
10024
+ kind: {
10025
+ type: "string",
10026
+ enum: [
10027
+ "activity-feed",
10028
+ "alert-banner",
10029
+ "array-bar",
10030
+ "array-list",
10031
+ "article-preview",
10032
+ "attendance-grid",
10033
+ "avatar",
10034
+ "badge",
10035
+ "bar",
10036
+ "breadcrumb",
10037
+ "bubble-chart",
10038
+ "bullet-chart",
10039
+ "calendar-heatmap",
10040
+ "calendar-month",
10041
+ "calendar-week",
10042
+ "candlestick",
10043
+ "cart-summary",
10044
+ "chat-bubble",
10045
+ "checklist",
10046
+ "chess-board",
10047
+ "circular-gauge",
10048
+ "commit-list",
10049
+ "confidence-meter",
10050
+ "countup",
10051
+ "coupon-code",
10052
+ "delta",
10053
+ "diff-counter",
10054
+ "donut",
10055
+ "event-log",
10056
+ "file-dropzone",
10057
+ "form-summary",
10058
+ "fuel-bar",
10059
+ "funnel",
10060
+ "gantt",
10061
+ "gauge",
10062
+ "grade",
10063
+ "heat-cell",
10064
+ "icon-tile",
10065
+ "kanban-board",
10066
+ "kpi-card",
10067
+ "kpi-comparison",
10068
+ "kpi-trend-tile",
10069
+ "leaderboard",
10070
+ "line-chart",
10071
+ "log-stream",
10072
+ "map-pin",
10073
+ "matrix",
10074
+ "media-player",
10075
+ "metrics-grid",
10076
+ "mini-map",
10077
+ "notification",
10078
+ "number-board",
10079
+ "order-status",
10080
+ "org-chart-mini",
10081
+ "otp-input",
10082
+ "password-strength",
10083
+ "path-progress",
10084
+ "percent-ring",
10085
+ "pill-group",
10086
+ "podium",
10087
+ "polar-area",
10088
+ "poll-bar",
10089
+ "price-tag",
10090
+ "pricing-tier",
10091
+ "priority-badge",
10092
+ "progress-group",
10093
+ "quick-poll-emoji",
10094
+ "radar",
10095
+ "rating",
10096
+ "rating-thumb",
10097
+ "reaction-bar",
10098
+ "read-receipt",
10099
+ "roadmap",
10100
+ "sankey",
10101
+ "search-result",
10102
+ "sequence-timeline",
10103
+ "service-health",
10104
+ "share-buttons",
10105
+ "slope",
10106
+ "song-queue",
10107
+ "sparkline",
10108
+ "spinner",
10109
+ "stacked-bar",
10110
+ "stat",
10111
+ "status-dot",
10112
+ "status-timeline",
10113
+ "step-indicator",
10114
+ "step-progress",
10115
+ "stopwatch",
10116
+ "tag-cloud",
10117
+ "terminal",
10118
+ "thermometer",
10119
+ "thread-summary",
10120
+ "timeline-vertical",
10121
+ "timezone-clock",
10122
+ "toc-nav",
10123
+ "token-list",
10124
+ "traffic-light",
10125
+ "treemap",
10126
+ "typewriter",
10127
+ "user-presence",
10128
+ "user-stack",
10129
+ "venn",
10130
+ "video-card",
10131
+ "voice-message",
10132
+ "waterfall",
10133
+ "weather-forecast"
10134
+ ]
10135
+ },
10136
+ additionsSource: {
10137
+ type: "string"
10138
+ },
10139
+ bodySource: {
10140
+ type: "string"
10141
+ },
10142
+ canvasH: {
10143
+ type: "number"
10144
+ },
10145
+ canvasW: {
10146
+ type: "number"
10147
+ },
10148
+ caption: {
10149
+ type: "string"
10150
+ },
10151
+ cellGap: {
10152
+ type: "number"
10153
+ },
10154
+ cellSize: {
10155
+ type: "number"
10156
+ },
10157
+ charMs: {
10158
+ type: "number"
10159
+ },
10160
+ color: {
10161
+ type: "string"
10162
+ },
10163
+ colorA: {
10164
+ type: "string"
10165
+ },
10166
+ colorAccent: {
10167
+ type: "string"
10168
+ },
10169
+ colorActive: {
10170
+ type: "string"
10171
+ },
10172
+ colorActual: {
10173
+ type: "string"
10174
+ },
10175
+ colorAdd: {
10176
+ type: "string"
10177
+ },
10178
+ colorApplied: {
10179
+ type: "string"
10180
+ },
10181
+ colorB: {
10182
+ type: "string"
10183
+ },
10184
+ colorBar: {
10185
+ type: "string"
10186
+ },
10187
+ colorBottom: {
10188
+ type: "string"
10189
+ },
10190
+ colorDel: {
10191
+ type: "string"
10192
+ },
10193
+ colorDiscount: {
10194
+ type: "string"
10195
+ },
10196
+ colorDown: {
10197
+ type: "string"
10198
+ },
10199
+ colorFocus: {
10200
+ type: "string"
10201
+ },
10202
+ colorMap: {
10203
+ type: "array",
10204
+ minItems: 1,
10205
+ items: {
10206
+ type: "object",
10207
+ required: ["status", "color"],
10208
+ additionalProperties: false,
10209
+ properties: {
10210
+ status: {
10211
+ type: "string"
10212
+ },
10213
+ color: {
10214
+ type: "string"
10215
+ }
10216
+ }
10217
+ }
10218
+ },
10219
+ colorNeg: {
10220
+ type: "string"
10221
+ },
10222
+ colorNew: {
10223
+ type: "string"
10224
+ },
10225
+ colorOld: {
10226
+ type: "string"
10227
+ },
10228
+ colorOther: {
10229
+ type: "string"
10230
+ },
10231
+ colorPending: {
10232
+ type: "string"
10233
+ },
10234
+ colorPlay: {
10235
+ type: "string"
10236
+ },
10237
+ colorPos: {
10238
+ type: "string"
10239
+ },
10240
+ colorRead: {
10241
+ type: "string"
10242
+ },
10243
+ colorSelf: {
10244
+ type: "string"
10245
+ },
10246
+ colorSource: {
10247
+ type: "string"
10248
+ },
10249
+ colorStrong: {
10250
+ type: "string"
10251
+ },
10252
+ colorTop: {
10253
+ type: "string"
10254
+ },
10255
+ colorTotal: {
10256
+ type: "string"
10257
+ },
10258
+ colorUnread: {
10259
+ type: "string"
10260
+ },
10261
+ colorUp: {
10262
+ type: "string"
10263
+ },
10264
+ colorWeak: {
10265
+ type: "string"
10266
+ },
10267
+ colorWinner: {
10268
+ type: "string"
10269
+ },
10270
+ colors: {
10271
+ type: "array",
10272
+ items: {
10273
+ type: "string"
10274
+ }
10275
+ },
10276
+ columnWidth: {
10277
+ type: "number"
10278
+ },
10279
+ comparisonSource: {
10280
+ type: "string"
10281
+ },
10282
+ count: {
10283
+ type: "number"
10284
+ },
10285
+ currency: {
10286
+ type: "string"
10287
+ },
10288
+ currentSource: {
10289
+ type: "string"
10290
+ },
10291
+ decimals: {
10292
+ type: "number"
10293
+ },
10294
+ deletionsSource: {
10295
+ type: "string"
10296
+ },
10297
+ duration: {
10298
+ type: "number"
10299
+ },
10300
+ durationMs: {
10301
+ type: "number"
10302
+ },
10303
+ durationSource: {
10304
+ type: "string"
10305
+ },
10306
+ fill: {
10307
+ type: "boolean"
10308
+ },
10309
+ highThreshold: {
10310
+ type: "number"
10311
+ },
10312
+ history: {
10313
+ type: "number"
10314
+ },
10315
+ historySource: {
10316
+ type: "string"
10317
+ },
10318
+ innerRatio: {
10319
+ type: "number"
10320
+ },
10321
+ itemTemplate: {
10322
+ type: "string"
10323
+ },
10324
+ kindSource: {
10325
+ type: "string"
10326
+ },
10327
+ label: {
10328
+ type: "string"
10329
+ },
10330
+ labelA: {
10331
+ type: "string"
10332
+ },
10333
+ labelB: {
10334
+ type: "string"
10335
+ },
10336
+ labelSource: {
10337
+ type: "string"
10338
+ },
10339
+ lowThreshold: {
10340
+ type: "number"
10341
+ },
10342
+ map: {
10343
+ type: "array",
10344
+ minItems: 1,
10345
+ items: {
10346
+ type: "object",
10347
+ required: ["value", "color"],
10348
+ additionalProperties: false,
10349
+ properties: {
10350
+ value: {
10351
+ type: "string"
10352
+ },
10353
+ color: {
10354
+ type: "string"
10355
+ },
10356
+ label: {
10357
+ type: "string"
10358
+ }
10359
+ }
10360
+ }
10361
+ },
10362
+ max: {
10363
+ type: "number"
10364
+ },
10365
+ maxSize: {
10366
+ type: "number"
10367
+ },
10368
+ membersSource: {
10369
+ type: "string"
10370
+ },
10371
+ min: {
10372
+ type: "number"
10373
+ },
10374
+ minSize: {
10375
+ type: "number"
10376
+ },
10377
+ monthName: {
10378
+ type: "string"
10379
+ },
10380
+ newSource: {
10381
+ type: "string"
10382
+ },
10383
+ oldSource: {
10384
+ type: "string"
10385
+ },
10386
+ pathD: {
10387
+ type: "string"
10388
+ },
10389
+ playingSource: {
10390
+ type: "string"
10391
+ },
10392
+ prefix: {
10393
+ type: "string"
10394
+ },
10395
+ prevSource: {
10396
+ type: "string"
10397
+ },
10398
+ progressSource: {
10399
+ type: "string"
10400
+ },
10401
+ rMax: {
10402
+ type: "number"
10403
+ },
10404
+ rMin: {
10405
+ type: "number"
10406
+ },
10407
+ rangeAvg: {
10408
+ type: "number"
10409
+ },
10410
+ rangeBad: {
10411
+ type: "number"
10412
+ },
10413
+ runningSource: {
10414
+ type: "string"
10415
+ },
10416
+ segments: {
10417
+ type: "number"
10418
+ },
10419
+ showValue: {
10420
+ type: "boolean"
10421
+ },
10422
+ size: {
10423
+ type: "number"
10424
+ },
10425
+ source: {
10426
+ type: "string"
10427
+ },
10428
+ sourceA: {
10429
+ type: "string"
10430
+ },
10431
+ sourceB: {
10432
+ type: "string"
10433
+ },
10434
+ stepsSource: {
10435
+ type: "string"
10436
+ },
10437
+ strokeWidth: {
10438
+ type: "number"
10439
+ },
10440
+ suffix: {
10441
+ type: "string"
10442
+ },
10443
+ targetSource: {
10444
+ type: "string"
10445
+ },
10446
+ textSource: {
10447
+ type: "string"
10448
+ },
10449
+ titleSource: {
10450
+ type: "string"
10451
+ },
10452
+ unit: {
10453
+ type: "string"
10454
+ },
10455
+ viewH: {
10456
+ type: "number"
10457
+ },
10458
+ viewW: {
10459
+ type: "number"
10460
+ },
10461
+ xMax: {
10462
+ type: "number"
10463
+ },
10464
+ xMin: {
10465
+ type: "number"
10466
+ },
10467
+ yMax: {
10468
+ type: "number"
10469
+ },
10470
+ yMin: {
10471
+ type: "number"
10472
+ }
10473
+ },
10474
+ oneOf: [
10475
+ {
10476
+ properties: {
10477
+ kind: {
10478
+ enum: ["bar"]
10479
+ }
10480
+ },
10481
+ required: ["source", "min", "max"]
10482
+ },
10483
+ {
10484
+ properties: {
10485
+ kind: {
10486
+ enum: ["gauge"]
10487
+ }
10488
+ },
10489
+ required: ["source", "min", "max"]
10490
+ },
10491
+ {
10492
+ properties: {
10493
+ kind: {
10494
+ enum: ["stat"]
10495
+ }
10496
+ },
10497
+ required: ["source"]
10498
+ },
10499
+ {
10500
+ properties: {
10501
+ kind: {
10502
+ enum: ["sparkline"]
10503
+ }
10504
+ },
10505
+ required: ["source"]
10506
+ },
10507
+ {
10508
+ properties: {
10509
+ kind: {
10510
+ enum: ["countup"]
10511
+ }
10512
+ },
10513
+ required: ["source"]
10514
+ },
10515
+ {
10516
+ properties: {
10517
+ kind: {
10518
+ enum: ["typewriter"]
10519
+ }
10520
+ },
10521
+ required: ["source"]
10522
+ },
10523
+ {
10524
+ properties: {
10525
+ kind: {
10526
+ enum: ["delta"]
10527
+ }
10528
+ },
10529
+ required: ["source"]
10530
+ },
10531
+ {
10532
+ properties: {
10533
+ kind: {
10534
+ enum: ["percent-ring"]
10535
+ }
10536
+ },
10537
+ required: ["source", "max"]
10538
+ },
10539
+ {
10540
+ properties: {
10541
+ kind: {
10542
+ enum: ["heat-cell"]
10543
+ }
10544
+ },
10545
+ required: ["source", "min", "max"]
10546
+ },
10547
+ {
10548
+ properties: {
10549
+ kind: {
10550
+ enum: ["donut"]
10551
+ }
10552
+ },
10553
+ required: ["source"]
10554
+ },
10555
+ {
10556
+ properties: {
10557
+ kind: {
10558
+ enum: ["radar"]
10559
+ }
10560
+ },
10561
+ required: ["source", "max"]
10562
+ },
10563
+ {
10564
+ properties: {
10565
+ kind: {
10566
+ enum: ["step-progress"]
10567
+ }
10568
+ },
10569
+ required: ["source", "stepsSource"]
10570
+ },
10571
+ {
10572
+ properties: {
10573
+ kind: {
10574
+ enum: ["status-dot"]
10575
+ }
10576
+ },
10577
+ required: ["source", "map"]
10578
+ },
10579
+ {
10580
+ properties: {
10581
+ kind: {
10582
+ enum: ["notification"]
10583
+ }
10584
+ },
10585
+ required: ["kindSource", "titleSource"]
10586
+ },
10587
+ {
10588
+ properties: {
10589
+ kind: {
10590
+ enum: ["kpi-card"]
10591
+ }
10592
+ },
10593
+ required: ["source", "historySource", "comparisonSource"]
10594
+ },
10595
+ {
10596
+ properties: {
10597
+ kind: {
10598
+ enum: ["status-timeline"]
10599
+ }
10600
+ },
10601
+ required: ["source"]
10602
+ },
10603
+ {
10604
+ properties: {
10605
+ kind: {
10606
+ enum: [
10607
+ "activity-feed",
10608
+ "alert-banner",
10609
+ "array-list",
10610
+ "article-preview",
10611
+ "avatar",
10612
+ "breadcrumb",
10613
+ "calendar-month",
10614
+ "calendar-week",
10615
+ "cart-summary",
10616
+ "chat-bubble",
10617
+ "checklist",
10618
+ "chess-board",
10619
+ "commit-list",
10620
+ "confidence-meter",
10621
+ "coupon-code",
10622
+ "event-log",
10623
+ "file-dropzone",
10624
+ "form-summary",
10625
+ "fuel-bar",
10626
+ "funnel",
10627
+ "grade",
10628
+ "icon-tile",
10629
+ "kanban-board",
10630
+ "kpi-comparison",
10631
+ "leaderboard",
10632
+ "log-stream",
10633
+ "metrics-grid",
10634
+ "number-board",
10635
+ "org-chart-mini",
10636
+ "otp-input",
10637
+ "password-strength",
10638
+ "pill-group",
10639
+ "podium",
10640
+ "poll-bar",
10641
+ "pricing-tier",
10642
+ "priority-badge",
10643
+ "quick-poll-emoji",
10644
+ "rating",
10645
+ "rating-thumb",
10646
+ "reaction-bar",
10647
+ "read-receipt",
10648
+ "roadmap",
10649
+ "sankey",
10650
+ "search-result",
10651
+ "service-health",
10652
+ "share-buttons",
10653
+ "song-queue",
10654
+ "stopwatch",
10655
+ "tag-cloud",
10656
+ "terminal",
10657
+ "thread-summary",
10658
+ "timeline-vertical",
10659
+ "timezone-clock",
10660
+ "toc-nav",
10661
+ "token-list",
10662
+ "traffic-light",
10663
+ "treemap",
10664
+ "user-presence",
10665
+ "user-stack",
10666
+ "venn",
10667
+ "video-card",
10668
+ "voice-message",
10669
+ "weather-forecast"
10670
+ ]
10671
+ }
10672
+ },
10673
+ required: ["source"]
10674
+ },
10675
+ {
10676
+ properties: {
10677
+ kind: {
10678
+ enum: ["badge"]
10679
+ },
10680
+ map: {
10681
+ type: "array",
10682
+ minItems: 1,
10683
+ items: {
10684
+ type: "object",
10685
+ required: ["value", "color"],
10686
+ additionalProperties: false,
10687
+ properties: {
10688
+ value: {
10689
+ type: "string"
10690
+ },
10691
+ color: {
10692
+ type: "string"
10693
+ }
10694
+ }
10695
+ }
10696
+ }
10697
+ },
10698
+ required: ["source"]
10699
+ },
10700
+ {
10701
+ properties: {
10702
+ kind: {
10703
+ enum: [
10704
+ "array-bar",
10705
+ "candlestick",
10706
+ "circular-gauge",
10707
+ "gantt",
10708
+ "line-chart",
10709
+ "matrix",
10710
+ "sequence-timeline",
10711
+ "slope",
10712
+ "thermometer",
10713
+ "waterfall"
10714
+ ]
10715
+ }
10716
+ },
10717
+ required: ["source", "min", "max"]
10718
+ },
10719
+ {
10720
+ properties: {
10721
+ kind: {
10722
+ enum: ["attendance-grid"]
10723
+ }
10724
+ },
10725
+ required: ["source", "membersSource"]
10726
+ },
10727
+ {
10728
+ properties: {
10729
+ kind: {
10730
+ enum: ["bubble-chart"]
10731
+ }
10732
+ },
10733
+ required: ["source", "xMin", "xMax", "yMin", "yMax", "rMin", "rMax"]
10734
+ },
10735
+ {
10736
+ properties: {
10737
+ kind: {
10738
+ enum: ["bullet-chart"]
10739
+ }
10740
+ },
10741
+ required: ["source", "targetSource", "max"]
10742
+ },
10743
+ {
10744
+ properties: {
10745
+ kind: {
10746
+ enum: ["calendar-heatmap", "polar-area", "progress-group"]
10747
+ }
10748
+ },
10749
+ required: ["source", "max"]
10750
+ },
10751
+ {
10752
+ properties: {
10753
+ kind: {
10754
+ enum: ["diff-counter"]
10755
+ }
10756
+ },
10757
+ required: ["additionsSource", "deletionsSource"]
10758
+ },
10759
+ {
10760
+ properties: {
10761
+ kind: {
10762
+ enum: ["kpi-trend-tile"]
10763
+ }
10764
+ },
10765
+ required: ["source", "prevSource", "historySource"]
10766
+ },
10767
+ {
10768
+ properties: {
10769
+ kind: {
10770
+ enum: ["map-pin"]
10771
+ }
10772
+ },
10773
+ required: ["source", "xMin", "xMax", "yMin", "yMax"]
10774
+ },
10775
+ {
10776
+ properties: {
10777
+ kind: {
10778
+ enum: ["media-player"]
10779
+ }
10780
+ },
10781
+ required: ["source", "durationSource", "playingSource"]
10782
+ },
10783
+ {
10784
+ properties: {
10785
+ kind: {
10786
+ enum: ["mini-map"]
10787
+ }
10788
+ },
10789
+ required: ["source", "canvasW", "canvasH"]
10790
+ },
10791
+ {
10792
+ properties: {
10793
+ kind: {
10794
+ enum: ["order-status", "step-indicator"]
10795
+ }
10796
+ },
10797
+ required: ["source", "stepsSource"]
10798
+ },
10799
+ {
10800
+ properties: {
10801
+ kind: {
10802
+ enum: ["path-progress"]
10803
+ }
10804
+ },
10805
+ required: ["source", "pathD"]
10806
+ },
10807
+ {
10808
+ properties: {
10809
+ kind: {
10810
+ enum: ["price-tag"]
10811
+ }
10812
+ },
10813
+ required: ["oldSource", "newSource"]
10814
+ },
10815
+ {
10816
+ properties: {
10817
+ kind: {
10818
+ enum: ["spinner"]
10819
+ }
10820
+ },
10821
+ required: ["source", "textSource"]
10822
+ },
10823
+ {
10824
+ properties: {
10825
+ kind: {
10826
+ enum: ["stacked-bar"]
10827
+ }
10828
+ },
10829
+ required: ["sourceA", "sourceB", "min", "max"]
10830
+ }
10831
+ ]
10832
+ }
8089
10833
  }
8090
10834
  }
8091
10835
  };