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