@cardenelabs/dragon 0.11.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
+ }
2710
+ }
2711
+ if (c === "{") depth += 1;
2712
+ else if (c === "}") {
2713
+ depth -= 1;
2714
+ if (depth === 0) return i;
1306
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 };
@@ -1333,22 +2746,49 @@ function writtenScaleFields(inner) {
1333
2746
  return out;
1334
2747
  }
1335
2748
  function splitInlineFields(inner) {
1336
- let depth = 0;
1337
- let buf = "";
1338
- const parts = [];
1339
- for (let i = 0; i < inner.length; i += 1) {
1340
- const c = inner[i];
1341
- if (c === "[" || c === "{") depth += 1;
1342
- else if (c === "]" || c === "}") depth -= 1;
1343
- if (c === "," && depth === 0) {
1344
- parts.push(buf);
1345
- buf = "";
1346
- continue;
2749
+ const \u5F15\u7528\u7B26\u3092\u898B\u3066\u5272\u308B = (\u898B\u308B) => {
2750
+ let depth = 0;
2751
+ let \u5F15\u7528\u7B26 = null;
2752
+ let \u76F4\u524D = null;
2753
+ let buf = "";
2754
+ const parts = [];
2755
+ for (let i = 0; i < inner.length; i += 1) {
2756
+ const c = inner[i];
2757
+ if (\u898B\u308B) {
2758
+ if (\u5F15\u7528\u7B26 !== null) {
2759
+ if (\u5F15\u7528\u7B26 === '"' && c === "\\" && i + 1 < inner.length) {
2760
+ buf += c;
2761
+ i += 1;
2762
+ buf += inner[i];
2763
+ continue;
2764
+ }
2765
+ if (c === \u5F15\u7528\u7B26) \u5F15\u7528\u7B26 = null;
2766
+ buf += c;
2767
+ continue;
2768
+ }
2769
+ if ((c === '"' || c === "'") && (\u76F4\u524D === null || ":,{[".includes(\u76F4\u524D))) {
2770
+ \u5F15\u7528\u7B26 = c;
2771
+ \u76F4\u524D = c;
2772
+ buf += c;
2773
+ continue;
2774
+ }
2775
+ }
2776
+ if (c === "[" || c === "{") depth += 1;
2777
+ else if (c === "]" || c === "}") depth -= 1;
2778
+ if (c === "," && depth === 0) {
2779
+ parts.push(buf);
2780
+ buf = "";
2781
+ \u76F4\u524D = c;
2782
+ continue;
2783
+ }
2784
+ buf += c;
2785
+ if (c !== " " && c !== " ") \u76F4\u524D = c;
1347
2786
  }
1348
- buf += c;
1349
- }
1350
- if (buf.trim()) parts.push(buf);
1351
- return parts;
2787
+ if (buf.trim()) parts.push(buf);
2788
+ return { parts, \u9589\u3058\u305F: \u5F15\u7528\u7B26 === null };
2789
+ };
2790
+ const \u898B\u305F = \u5F15\u7528\u7B26\u3092\u898B\u3066\u5272\u308B(true);
2791
+ return \u898B\u305F.\u9589\u3058\u305F ? \u898B\u305F.parts : \u5F15\u7528\u7B26\u3092\u898B\u3066\u5272\u308B(false).parts;
1352
2792
  }
1353
2793
  function collectIndentedList(lines, start, parentIndent) {
1354
2794
  const items = [];
@@ -1451,6 +2891,18 @@ function applyContinuationLines(actor, rest, errors) {
1451
2891
  case "\u5024":
1452
2892
  out.value = stripQuotes(raw);
1453
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;
1454
2906
  case "rows":
1455
2907
  case "\u884C":
1456
2908
  out.rows = raw.replace(/^\[|\]$/g, "").split(/,(?![^[]*\])/).map((x) => stripQuotes(x.trim())).filter(Boolean);
@@ -1522,11 +2974,7 @@ function applyContinuationLines(actor, rest, errors) {
1522
2974
  }
1523
2975
  }
1524
2976
  if (scaleWritten.size > 0) {
1525
- const s = resolveScale(
1526
- scaleWritten,
1527
- (key) => scaleLines.get(key) ?? actor.pos.line,
1528
- errors
1529
- );
2977
+ const s = resolveScale(scaleWritten, (key) => scaleLines.get(key) ?? actor.pos.line, errors);
1530
2978
  out.scale = s.scale;
1531
2979
  out.scaleKeys = [.../* @__PURE__ */ new Set([...actor.scaleKeys ?? [], ...s.keys])];
1532
2980
  }
@@ -1564,6 +3012,15 @@ var ACTOR_ITEM_KEYS = /* @__PURE__ */ new Set([
1564
3012
  "\u5024",
1565
3013
  "rows",
1566
3014
  "\u884C",
3015
+ // 箱の中に描く図形 (#1374)
3016
+ "shape",
3017
+ "\u56F3\u5F62",
3018
+ // その箱を出すかどうかの条件 (#1381)
3019
+ "visibleIf",
3020
+ "\u51FA\u3059\u6761\u4EF6",
3021
+ // 箱に出す題 (#1381)
3022
+ "title",
3023
+ "\u984C",
1567
3024
  "\u4F4D\u7F6E",
1568
3025
  "pos",
1569
3026
  "posX",
@@ -1809,6 +3266,12 @@ var INLINE_ACTOR_KEYS = /* @__PURE__ */ new Set([
1809
3266
  "posY",
1810
3267
  "posW",
1811
3268
  "posH",
3269
+ // 箱の中に描く図形 (#1374)
3270
+ "shape",
3271
+ // その箱を出すかどうかの条件 (#1381)
3272
+ "visibleIf",
3273
+ // 箱に出す題 (#1381)。 名前と切り離して書ける
3274
+ "title",
1812
3275
  // 倍率は別経路 (`reportScaleOnNonPart`) が知らせる。 ここでも読める扱いにしないと
1813
3276
  // 同じ名前で 2 度知らせることになる
1814
3277
  "scale",
@@ -1820,6 +3283,8 @@ var FLOW_INLINE_READERS = {
1820
3283
  sub: (v) => v,
1821
3284
  guard: (v) => v,
1822
3285
  cardinality: (v) => v,
3286
+ // 矢印がどの辺から出るか (#1385)。 描画側は 4 方向を取り、書かなければ自動で選ぶ
3287
+ side: (v) => v !== void 0 && EDGE_SIDE_VALUES.includes(v) ? v : void 0,
1823
3288
  // 数と真偽の欄は `FLOW_INLINE_VALUE_KINDS` の表が読む (#1306)。 ここでは名前だけを持つ =
1824
3289
  // 読める欄の一覧 (`FLOW_INLINE_KEYS`) は本表から導くため、載せないと欄ごと消える
1825
3290
  labelOffsetX: null,
@@ -1879,6 +3344,12 @@ function parseActor2(line, errors) {
1879
3344
  value: opts.value,
1880
3345
  rows: opts.rows ? opts.rows.replace(/^\[|\]$/g, "").split(/,(?![^[]*\])/).map((x) => stripQuotes(x.trim())).filter(Boolean) : void 0,
1881
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,
1882
3353
  ...\u8868\u3067\u8AAD\u3080(ACTOR_INLINE_VALUE_KINDS, opts, "\u7BB1\u306E ", line.no, errors),
1883
3354
  // parts では `tone` を状態の上書きとして従来から使えるため、 色として横取りしない
1884
3355
  tone: isPart ? void 0 : resolveTone(opts.tone),
@@ -1942,8 +3413,16 @@ function parseFlowStep(line, no, errors) {
1942
3413
  if (mapMatch) {
1943
3414
  const opts = parseInlineMapping(mapMatch[1]);
1944
3415
  for (const k of FLOW_INLINE_KEYS) {
1945
- if (FLOW_INLINE_READERS[k] === null) continue;
1946
- \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
+ });
1947
3426
  }
1948
3427
  \u6570\u3068\u771F\u507D = \u8868\u3067\u8AAD\u3080(FLOW_INLINE_VALUE_KINDS, opts, "\u77E2\u5370\u306E ", line.no, errors);
1949
3428
  rest = rest.slice(0, mapMatch.index ?? 0).trim();
@@ -1951,6 +3430,7 @@ function parseFlowStep(line, no, errors) {
1951
3430
  const sub = \u4E2D\u62EC\u5F27.sub;
1952
3431
  const guard = \u4E2D\u62EC\u5F27.guard;
1953
3432
  const cardinality = \u4E2D\u62EC\u5F27.cardinality;
3433
+ const side = \u4E2D\u62EC\u5F27.side;
1954
3434
  const labelOffsetX = \u6570\u3068\u771F\u507D?.labelOffsetX;
1955
3435
  const labelOffsetY = \u6570\u3068\u771F\u507D?.labelOffsetY;
1956
3436
  const overlay = \u6570\u3068\u771F\u507D?.overlay;
@@ -2001,6 +3481,7 @@ function parseFlowStep(line, no, errors) {
2001
3481
  sub,
2002
3482
  guard,
2003
3483
  cardinality,
3484
+ side,
2004
3485
  labelOffsetX,
2005
3486
  labelOffsetY,
2006
3487
  overlay,
@@ -2086,7 +3567,15 @@ function ensureAnimate(a, lineNo) {
2086
3567
  if (a) return a;
2087
3568
  return { states: [], phases: [], pos: { line: lineNo } };
2088
3569
  }
2089
- 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
+ ];
2090
3579
  var \u6BB5\u306E\u9805\u76EE\u306E\u82F1\u8A9E = PHASE_ITEM_WORDS;
2091
3580
  var \u6BB5\u306E\u9805\u76EE\u306E\u96C6\u5408 = new Set(PHASE_ITEM_WORDS);
2092
3581
  function parsePhase(block, errors) {
@@ -2590,7 +4079,9 @@ function countDocElements(doc) {
2590
4079
  (acc, p) => acc + (p.highlight?.length ?? 0) + (p.tweens?.length ?? 0) + (p.sets?.length ?? 0),
2591
4080
  0
2592
4081
  );
2593
- 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);
2594
4085
  }
2595
4086
  function countDiagramElements(diagram2) {
2596
4087
  const phases = Array.isArray(diagram2.phases) ? diagram2.phases : [];
@@ -2730,7 +4221,14 @@ function compileToCdl(doc, opts) {
2730
4221
  \u8A9E\u306E\u72B6\u614B\u3092\u56F3\u306E\u8A9E\u3078\u76F4\u3059(merged);
2731
4222
  const \u7573\u3093\u3060\u304D\u3063\u304B\u3051 = foldValueTriggers(merged, doc, opts?.onNotice);
2732
4223
  attachDerivedValues(merged, doc, opts?.onNotice, inheritedDerivedSourceLines, \u7573\u3093\u3060\u304D\u3063\u304B\u3051);
2733
- 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]) {
2734
4232
  opts?.onNotice?.({
2735
4233
  kind: "external-paint-dropped",
2736
4234
  actor: dropped.path,
@@ -2742,6 +4240,22 @@ function compileToCdl(doc, opts) {
2742
4240
  restoreActorNames(merged, \u5206\u3051\u305F.\u5143\u306E\u540D\u524D, \u4F5C\u308A\u66FF\u3048\u305F\u5BFE\u8C61);
2743
4241
  return merged;
2744
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
+ }
2745
4259
  function materializeStates(diagram2, doc) {
2746
4260
  const \u8F09\u3063\u3066\u3044\u308B = new Set(diagram2.states.map((s) => s.id));
2747
4261
  for (const st of doc.animate?.states ?? []) {
@@ -3022,7 +4536,9 @@ function disambiguateActorIds(doc, onNotice) {
3022
4536
  for (const \u5F62 of id\u306B\u306A\u308B\u5F62(a.name)) \u4F7F\u3046\u5F62.add(\u5F62);
3023
4537
  }
3024
4538
  const \u65B0\u3057\u3044\u540D\u524D = /* @__PURE__ */ new Map();
3025
- 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
+ )) {
3026
4542
  const \u5C3E = \u540D\u524D\u306E\u5C3E(a.name);
3027
4543
  const \u4F59\u5730 = ID_MAX - (\u5C3E.length + 1);
3028
4544
  const \u57FA\u5E95 = a.name.slice(0, \u4F59\u5730);
@@ -3744,7 +5260,9 @@ function mergePartsFromActors(target, doc, partsCatalog, onNotice, derivedSource
3744
5260
  const part = found;
3745
5261
  if (!part) {
3746
5262
  if (typeof console !== "undefined" && console.warn) {
3747
- 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
+ );
3748
5266
  }
3749
5267
  continue;
3750
5268
  }
@@ -3791,7 +5309,8 @@ function mergePartsFromActors(target, doc, partsCatalog, onNotice, derivedSource
3791
5309
  }
3792
5310
  function resolveStateOverride(original, override) {
3793
5311
  if (override === void 0) return { initial: original, rejected: false };
3794
- if (isColorValue(original) && !isColorValue(override)) return { initial: original, rejected: true };
5312
+ if (isColorValue(original) && !isColorValue(override))
5313
+ return { initial: original, rejected: true };
3795
5314
  return { initial: override, rejected: false };
3796
5315
  }
3797
5316
  function applyColorHex(part, colorHex, stateOverride) {
@@ -3952,7 +5471,10 @@ function mergePartIntoDiagram(target, part, alias, stateOverride, laneMapping, o
3952
5471
  });
3953
5472
  }
3954
5473
  for (const stateOrig of part.states) {
3955
- const { initial, rejected } = resolveStateOverride(stateOrig.initial, stateOverride[stateOrig.id]);
5474
+ const { initial, rejected } = resolveStateOverride(
5475
+ stateOrig.initial,
5476
+ stateOverride[stateOrig.id]
5477
+ );
3956
5478
  if (rejected) {
3957
5479
  onNotice?.({
3958
5480
  kind: "state-override-rejected",
@@ -3984,7 +5506,10 @@ function mergePartIntoDiagram(target, part, alias, stateOverride, laneMapping, o
3984
5506
  if (part.readouts && part.readouts.length > 0) {
3985
5507
  if (!target.readouts) target.readouts = [];
3986
5508
  for (const readoutOrig of part.readouts) {
3987
- const rewritten = deepRewriteStrings(readoutOrig, rewriteTemplate);
5509
+ const rewritten = deepRewriteStrings(
5510
+ readoutOrig,
5511
+ rewriteTemplate
5512
+ );
3988
5513
  target.readouts.push({
3989
5514
  ...rewritten,
3990
5515
  id: prefix(rewritten.id)
@@ -4014,8 +5539,14 @@ function mergePartIntoDiagram(target, part, alias, stateOverride, laneMapping, o
4014
5539
  const partPhase = part.phases[i];
4015
5540
  targetPhase.duration = Math.max(targetPhase.duration, partPhase.duration);
4016
5541
  targetPhase.activate = [...targetPhase.activate, ...partPhase.activate.map(prefix)];
4017
- targetPhase.tweens = [...targetPhase.tweens, ...partPhase.tweens.map((t) => ({ ...t, stateId: valuePrefix(t.stateId) }))];
4018
- 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
+ ];
4019
5550
  }
4020
5551
  for (let i = commonLen; i < partsLen; i++) {
4021
5552
  const phaseOrig = part.phases[i];
@@ -4083,6 +5614,7 @@ function \u77E2\u5370\u3078\u66F8\u304D\u5199\u3059(target, s, doc) {
4083
5614
  target.label = target.label ? `${target.label} (${s.cardinality})` : `(${s.cardinality})`;
4084
5615
  }
4085
5616
  }
5617
+ if (s.side !== void 0) target.side = s.side;
4086
5618
  if (s.labelOffsetX !== void 0) target.labelOffsetX = s.labelOffsetX;
4087
5619
  if (s.labelOffsetY !== void 0) target.labelOffsetY = s.labelOffsetY;
4088
5620
  if (s.overlay !== void 0) target.overlay = s.overlay;
@@ -4119,7 +5651,8 @@ function \u5F0F\u306B\u66F8\u304F\u6570(n) {
4119
5651
  const decimalAt = whole.length + Number(exponentText);
4120
5652
  let expanded;
4121
5653
  if (decimalAt <= 0) expanded = `0.${"0".repeat(-decimalAt)}${digits}`;
4122
- 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)}`;
4123
5656
  else expanded = `${digits.slice(0, decimalAt)}.${digits.slice(decimalAt)}`;
4124
5657
  return negative ? `-${expanded}` : expanded;
4125
5658
  }
@@ -4175,7 +5708,13 @@ function foldValueTriggers(diagram2, doc, onNotice) {
4175
5708
  const \u89E3\u3051\u306A\u3044 = /* @__PURE__ */ new Set();
4176
5709
  const \u89E3\u6C7A\u4E2D = /* @__PURE__ */ new Set();
4177
5710
  const \u77E5\u3089\u305B\u308B = (v, message, hint) => {
4178
- 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
+ });
4179
5718
  };
4180
5719
  const \u89E3\u304F = (name) => {
4181
5720
  const \u65E2\u51FA = \u89E3\u3051\u305F.get(name);
@@ -4185,7 +5724,11 @@ function foldValueTriggers(diagram2, doc, onNotice) {
4185
5724
  if (!v || !v.trigger) return null;
4186
5725
  if (\u89E3\u6C7A\u4E2D.has(name)) {
4187
5726
  \u89E3\u3051\u306A\u3044.add(name);
4188
- \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
+ );
4189
5732
  return null;
4190
5733
  }
4191
5734
  \u89E3\u6C7A\u4E2D.add(name);
@@ -4208,7 +5751,11 @@ function foldValueTriggers(diagram2, doc, onNotice) {
4208
5751
  if (trigger.kind === "step") {
4209
5752
  const idx = \u6BB5\u306E\u756A\u53F7.get(trigger.step);
4210
5753
  if (idx === void 0) {
4211
- \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
+ );
4212
5759
  return null;
4213
5760
  }
4214
5761
  \u6BB5 = idx;
@@ -4261,7 +5808,8 @@ function foldValueTriggers(diagram2, doc, onNotice) {
4261
5808
  \u6BB5\u3054\u3068\u306E\u6642\u8A08.set(\u6BB5, \u540D\u524D);
4262
5809
  diagram2.states.push({ id: \u540D\u524D, initial: 0 });
4263
5810
  const \u6BB5\u306E\u4E2D\u8EAB = diagram2.phases[\u6BB5];
4264
- 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 }];
4265
5813
  return \u540D\u524D;
4266
5814
  };
4267
5815
  for (const [name, \u533A\u9593] of \u89E3\u3051\u305F) {
@@ -4610,6 +6158,7 @@ function compileGantt(doc) {
4610
6158
  if (!\u76EE\u76DB\u308A.includes(label)) \u76EE\u76DB\u308A.push(label);
4611
6159
  \u30BF\u30B9\u30AF.push({
4612
6160
  name: a.name,
6161
+ title: \u7BB1\u306E\u984C(a),
4613
6162
  label,
4614
6163
  ...a.tone !== void 0 ? { tone: a.tone } : {},
4615
6164
  ...a.owner !== void 0 ? { owner: a.owner } : {},
@@ -4663,7 +6212,7 @@ function compileGantt(doc) {
4663
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);
4664
6213
  return {
4665
6214
  id: slugify(t.name),
4666
- title: t.name,
6215
+ title: t.title,
4667
6216
  startIdx: idx,
4668
6217
  endIdx: \u7D42\u308F\u308A.idx,
4669
6218
  startLabel: t.label,
@@ -4689,7 +6238,7 @@ function compileClass(doc) {
4689
6238
  lane: laneId,
4690
6239
  stack: 0,
4691
6240
  kind: "storage",
4692
- title: a.name,
6241
+ title: \u7BB1\u306E\u984C(a),
4693
6242
  w: CLASS_W
4694
6243
  });
4695
6244
  });
@@ -4699,6 +6248,7 @@ function compileClass(doc) {
4699
6248
  b.edge(fromId, toId, {
4700
6249
  label: s.label,
4701
6250
  ...s.sub ? { sub: s.sub } : {},
6251
+ ...s.side ? { side: s.side } : {},
4702
6252
  ...s.tone ? { tone: s.tone } : {},
4703
6253
  ...s.style ? { style: s.style } : {}
4704
6254
  });
@@ -4751,7 +6301,7 @@ function compileValueChart(doc, \u578B, kind, onNotice) {
4751
6301
  \u672A\u5BA3\u8A00.push(a.name);
4752
6302
  continue;
4753
6303
  }
4754
- 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 } : {} });
4755
6305
  }
4756
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"' };
4757
6307
  const \u4F1D\u3048\u308B = (\u7A2E\u985E, \u540D\u524D, message, line = 0) => {
@@ -4903,7 +6453,7 @@ function compileFunnel(doc, onNotice) {
4903
6453
  \u672A\u5BA3\u8A00.push(a.name);
4904
6454
  continue;
4905
6455
  }
4906
- 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 });
4907
6457
  }
4908
6458
  if (\u672A\u5BA3\u8A00.length > 0) {
4909
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`;
@@ -4917,7 +6467,12 @@ function compileFunnel(doc, onNotice) {
4917
6467
  }
4918
6468
  if (doc.flow.length > 0) {
4919
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`;
4920
- 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
+ });
4921
6476
  if (typeof console !== "undefined" && console.warn) console.warn(`[dragon] ${m2}`);
4922
6477
  }
4923
6478
  b.node(`${slugify(doc.title)}-chart`, {
@@ -4938,11 +6493,19 @@ function \u77E2\u5370\u304B\u3089\u89AA\u3092\u6C7A\u3081\u308B(doc, \u56F3\u7A2
4938
6493
  const \u5B50 = slugify(f.to);
4939
6494
  const \u89AA\u540D = slugify(f.from);
4940
6495
  if (!\u540D\u524D.has(\u89AA\u540D)) {
4941
- \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
+ );
4942
6501
  continue;
4943
6502
  }
4944
6503
  if (!\u540D\u524D.has(\u5B50)) {
4945
- \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
+ );
4946
6509
  continue;
4947
6510
  }
4948
6511
  if (\u5B50 === \u89AA\u540D) {
@@ -4951,7 +6514,11 @@ function \u77E2\u5370\u304B\u3089\u89AA\u3092\u6C7A\u3081\u308B(doc, \u56F3\u7A2
4951
6514
  }
4952
6515
  const \u65E2\u5B58 = \u89AA.get(\u5B50);
4953
6516
  if (\u65E2\u5B58 !== void 0 && \u65E2\u5B58 !== \u89AA\u540D) {
4954
- \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
+ );
4955
6522
  continue;
4956
6523
  }
4957
6524
  \u89AA.set(\u5B50, \u89AA\u540D);
@@ -4987,7 +6554,10 @@ function compileTree(doc, onNotice) {
4987
6554
  };
4988
6555
  for (const [k, \u7FA4] of slug\u5225) {
4989
6556
  if (\u7FA4.length > 1) {
4990
- \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
+ );
4991
6561
  }
4992
6562
  }
4993
6563
  const \u89AA = \u77E2\u5370\u304B\u3089\u89AA\u3092\u6C7A\u3081\u308B(doc, "tree", \u540D\u524D, \u4F1D\u3048\u308B);
@@ -5023,10 +6593,7 @@ function reportChartFieldsNotHonored(doc, onNotice) {
5023
6593
  ...a.touchpoint !== void 0 ? ["touchpoint"] : [],
5024
6594
  ...a.opportunity !== void 0 ? ["opportunity"] : []
5025
6595
  ];
5026
- const \u5DE5\u7A0B = doc.type === "gantt" ? [] : [
5027
- ...a.owner !== void 0 ? ["owner"] : [],
5028
- ...a.end !== void 0 ? ["end"] : []
5029
- ];
6596
+ const \u5DE5\u7A0B = doc.type === "gantt" ? [] : [...a.owner !== void 0 ? ["owner"] : [], ...a.end !== void 0 ? ["end"] : []];
5030
6597
  if (\u9053\u7B4B.length > 0) {
5031
6598
  onNotice({
5032
6599
  kind: "chart-value-unreadable",
@@ -5062,7 +6629,7 @@ function compileJourney(doc, onNotice) {
5062
6629
  \u8AAD\u3081\u306A\u3044.push(a.name);
5063
6630
  continue;
5064
6631
  }
5065
- 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) });
5066
6633
  continue;
5067
6634
  }
5068
6635
  const e = \u6C17\u6301\u3061.get(\u8A9E);
@@ -5070,7 +6637,7 @@ function compileJourney(doc, onNotice) {
5070
6637
  \u8AAD\u3081\u306A\u3044.push(a.name);
5071
6638
  continue;
5072
6639
  }
5073
- 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) });
5074
6641
  }
5075
6642
  if (\u8AAD\u3081\u306A\u3044.length > 0) {
5076
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`;
@@ -5079,7 +6646,12 @@ function compileJourney(doc, onNotice) {
5079
6646
  }
5080
6647
  if (doc.flow.length > 0) {
5081
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`;
5082
- 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
+ });
5083
6655
  if (typeof console !== "undefined" && console.warn) console.warn(`[dragon] ${m2}`);
5084
6656
  }
5085
6657
  b.node(`${slugify(doc.title)}-chart`, {
@@ -5143,7 +6715,7 @@ function compileQuadrant(doc, onNotice) {
5143
6715
  \u8AAD\u3081\u306A\u3044.push(a.name);
5144
6716
  continue;
5145
6717
  }
5146
- 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 });
5147
6719
  continue;
5148
6720
  }
5149
6721
  const q = \u533A\u753B.get(\u8A9E);
@@ -5151,7 +6723,7 @@ function compileQuadrant(doc, onNotice) {
5151
6723
  \u8AAD\u3081\u306A\u3044.push(a.name);
5152
6724
  continue;
5153
6725
  }
5154
- 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 });
5155
6727
  }
5156
6728
  if (\u8AAD\u3081\u306A\u3044.length > 0) {
5157
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`;
@@ -5160,7 +6732,12 @@ function compileQuadrant(doc, onNotice) {
5160
6732
  }
5161
6733
  if (doc.flow.length > 0) {
5162
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`;
5163
- 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
+ });
5164
6741
  if (typeof console !== "undefined" && console.warn) console.warn(`[dragon] ${m2}`);
5165
6742
  }
5166
6743
  b.node(`${slugify(doc.title)}-chart`, {
@@ -5220,12 +6797,16 @@ function compileC4(doc) {
5220
6797
  b.edge(fromId, toId, {
5221
6798
  label: s.label,
5222
6799
  ...s.sub ? { sub: s.sub } : {},
6800
+ ...s.side ? { side: s.side } : {},
5223
6801
  ...s.tone ? { tone: s.tone } : {},
5224
6802
  ...s.style ? { style: s.style } : {}
5225
6803
  });
5226
6804
  }
5227
6805
  return b.build();
5228
6806
  }
6807
+ function \u7BB1\u306E\u984C(a) {
6808
+ return a.title ?? a.name;
6809
+ }
5229
6810
  var \u653E\u5C04\u3067\u63CF\u3051\u306A\u3044\u6B04\u306E\u540D\u524D = {
5230
6811
  kind: "\u7A2E\u985E",
5231
6812
  eyebrow: "\u4E0A\u306E\u5C0F\u898B\u51FA\u3057",
@@ -5249,7 +6830,9 @@ var \u653E\u5C04\u3067\u63CF\u3051\u306A\u3044\u6B04\u306E\u540D\u524D = {
5249
6830
  scaleKeys: "\u500D\u7387",
5250
6831
  posRel: "\u4F4D\u7F6E (\u76F8\u5BFE)",
5251
6832
  nodes: "\u4E2D\u306E\u7BB1\u3054\u3068\u306E\u6307\u5B9A",
5252
- 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"
5253
6836
  };
5254
6837
  function \u653E\u5C04\u3067\u63CF\u3051\u306A\u3044\u6B04\u3092\u66F8\u3044\u305F\u304B(a, \u6B04) {
5255
6838
  if (\u6B04 === "kind") return a.kindWritten === true;
@@ -5259,7 +6842,7 @@ function \u653E\u5C04\u3067\u63CF\u3051\u306A\u3044\u6B04\u3092\u66F8\u3044\u305
5259
6842
  }
5260
6843
  function \u653E\u5C04\u306B\u51FA\u3059\u6587\u5B57(a) {
5261
6844
  const \u7D9A\u304D = [a.subtitle, a.value].map((x) => x?.trim()).filter((x) => !!x);
5262
- 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(" ") } : {} };
5263
6846
  }
5264
6847
  function compileMind(doc, onNotice) {
5265
6848
  const b = diagram(slugify(doc.title), { topic: doc.title });
@@ -5335,7 +6918,8 @@ function compileMind(doc, onNotice) {
5335
6918
  const branches = [];
5336
6919
  const \u4F7F\u3063\u305F = /* @__PURE__ */ new Set([rootId]);
5337
6920
  \u8A18\u9332\u3059\u308B(root);
5338
- 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)"]);
5339
6923
  \u898B\u672C\u3067\u306A\u3044.slice(1).forEach((a, i) => {
5340
6924
  const id = slugify(a.name);
5341
6925
  if (\u4F7F\u3063\u305F.has(id)) {
@@ -5437,6 +7021,18 @@ function applyV05Extensions(diagram2, doc, \u8FFD\u52A0\u3057\u305F\u7E26\u5217o
5437
7021
  primaryNodes = diagram2.nodes.filter((n) => n.id === dragonSlug);
5438
7022
  }
5439
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
+ }
5440
7036
  const \u8AAC\u660E = doc.type === "c4" ? \u6BB5\u3092\u8AAD\u307F\u53D6\u308B(a.subtitle).\u8AAC\u660E : a.subtitle;
5441
7037
  if (\u8AAC\u660E !== void 0) node.subtitle = \u8AAC\u660E;
5442
7038
  if (a.eyebrow !== void 0) node.eyebrow = a.eyebrow;
@@ -5462,6 +7058,25 @@ function applyV05Extensions(diagram2, doc, \u8FFD\u52A0\u3057\u305F\u7E26\u5217o
5462
7058
  const footer = diagram2.nodes.find((n) => n.id === `${node.lane}-footer`);
5463
7059
  if (footer && a.posW !== void 0) footer.w = a.posW;
5464
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
+ }
5465
7080
  }
5466
7081
  }
5467
7082
  alignSeqHeaderHeights(diagram2, doc);
@@ -5582,6 +7197,7 @@ function compileSequence(doc) {
5582
7197
  to: s.to,
5583
7198
  label: s.label,
5584
7199
  ...s.sub ? { sub: s.sub } : {},
7200
+ ...s.side ? { side: s.side } : {},
5585
7201
  ...s.tone ? { tone: s.tone } : {},
5586
7202
  ...s.style ? { style: s.style } : {}
5587
7203
  });
@@ -5605,8 +7221,8 @@ function compileSequenceWithAnimate(doc) {
5605
7221
  }
5606
7222
  b.lane(id, laneOpts);
5607
7223
  const headerId = `${id}-header`;
5608
- const actorW = Math.max(140, a.name.length * 22 + 52);
5609
- 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 });
5610
7226
  const spacerId = `${id}-spacer`;
5611
7227
  b.node(spacerId, { lane: id, stack: 1, kind: "card", title: "", w: 2, h: 40 });
5612
7228
  });
@@ -5626,6 +7242,7 @@ function compileSequenceWithAnimate(doc) {
5626
7242
  id: edgeId,
5627
7243
  label: s.label,
5628
7244
  ...s.sub ? { sub: s.sub } : {},
7245
+ ...s.side ? { side: s.side } : {},
5629
7246
  ...s.tone ? { tone: s.tone } : {},
5630
7247
  ...s.style ? { style: s.style } : {}
5631
7248
  });
@@ -5634,12 +7251,12 @@ function compileSequenceWithAnimate(doc) {
5634
7251
  doc.actors.forEach((a) => {
5635
7252
  const laneId = actorIds.get(a.name) ?? slugify(a.name);
5636
7253
  const footerId = `${laneId}-footer`;
5637
- const actorW = Math.max(140, a.name.length * 22 + 52);
7254
+ const actorW = Math.max(140, \u7BB1\u306E\u984C(a).length * 22 + 52);
5638
7255
  b.node(footerId, {
5639
7256
  lane: laneId,
5640
7257
  stack: footerStack,
5641
7258
  kind: "card",
5642
- title: a.name,
7259
+ title: \u7BB1\u306E\u984C(a),
5643
7260
  w: actorW,
5644
7261
  h: 72,
5645
7262
  role: "lifeline-footer"
@@ -5745,7 +7362,7 @@ function compileFlow(doc) {
5745
7362
  {
5746
7363
  id: slugify(a.name),
5747
7364
  kind: a.kind,
5748
- title: a.name
7365
+ title: \u7BB1\u306E\u984C(a)
5749
7366
  },
5750
7367
  edgeLabel
5751
7368
  );
@@ -5786,6 +7403,7 @@ function compileSwimlane(doc) {
5786
7403
  id: `e${edgeIdx++}-${fromId}-${toId}`,
5787
7404
  label: s.label,
5788
7405
  ...s.sub ? { sub: s.sub } : {},
7406
+ ...s.side ? { side: s.side } : {},
5789
7407
  ...s.tone ? { tone: s.tone } : {},
5790
7408
  ...s.style ? { style: s.style } : {}
5791
7409
  });
@@ -5796,7 +7414,7 @@ function compileSwimlane(doc) {
5796
7414
  lane: swim.laneId(a.name),
5797
7415
  stack: 0,
5798
7416
  kind: a.kind ?? "actor",
5799
- title: a.name
7417
+ title: \u7BB1\u306E\u984C(a)
5800
7418
  });
5801
7419
  });
5802
7420
  }
@@ -5813,7 +7431,7 @@ function compileEr(doc) {
5813
7431
  for (const a of doc.actors) {
5814
7432
  erBuilder.entity({
5815
7433
  id: slugify(a.name),
5816
- title: a.name,
7434
+ title: \u7BB1\u306E\u984C(a),
5817
7435
  rows: []
5818
7436
  // v0.2 では rows なし
5819
7437
  });
@@ -5852,7 +7470,7 @@ function compileState(doc) {
5852
7470
  const final = \u6C7A\u3081\u65B9.\u7D42\u308F\u308A(a, i);
5853
7471
  fsm.state({
5854
7472
  id: slugify(a.name),
5855
- title: a.name,
7473
+ title: \u7BB1\u306E\u984C(a),
5856
7474
  ...initial ? { initial: true } : {},
5857
7475
  ...final ? { final: true } : {}
5858
7476
  });
@@ -5885,13 +7503,14 @@ function compileTopology(doc) {
5885
7503
  groupBuilder.add({
5886
7504
  id: slugify(a.name),
5887
7505
  kind: a.kind,
5888
- title: a.name
7506
+ title: \u7BB1\u306E\u984C(a)
5889
7507
  });
5890
7508
  }
5891
7509
  for (const s of doc.flow) {
5892
7510
  topo.connect(slugify(s.from), slugify(s.to), {
5893
7511
  label: s.label,
5894
7512
  ...s.sub ? { sub: s.sub } : {},
7513
+ ...s.side ? { side: s.side } : {},
5895
7514
  ...s.tone ? { tone: s.tone } : {},
5896
7515
  ...s.style ? { style: s.style } : {}
5897
7516
  });
@@ -5931,15 +7550,19 @@ function compileGenericWithAnimate(doc, opts) {
5931
7550
  const lid = a.lane;
5932
7551
  const stack = \u7A4D\u3093\u3060\u6570.get(lid) ?? 0;
5933
7552
  \u7A4D\u3093\u3060\u6570.set(lid, stack + 1);
5934
- 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) });
5935
7554
  });
5936
7555
  } else if (kind === "flow" || kind === "topology") {
5937
7556
  const lid = opts.laneId ?? "main";
5938
- 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
+ });
5939
7562
  doc.actors.forEach((a, idx) => {
5940
7563
  const id = slugify(a.name);
5941
7564
  actorToNodeId.set(a.name, id);
5942
- 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) });
5943
7566
  });
5944
7567
  } else {
5945
7568
  const \u898B\u51FA\u3057\u3092\u4ED8\u3051\u308B = kind === "swimlane";
@@ -5955,7 +7578,7 @@ function compileGenericWithAnimate(doc, opts) {
5955
7578
  lane: lid,
5956
7579
  stack: 0,
5957
7580
  kind: a.kind,
5958
- title: a.name,
7581
+ title: \u7BB1\u306E\u984C(a),
5959
7582
  ...isInitial ? { eyebrow: "\u521D\u671F" } : {},
5960
7583
  ...isFinal ? { eyebrow: "\u6700\u7D42" } : {}
5961
7584
  });
@@ -5974,6 +7597,7 @@ function compileGenericWithAnimate(doc, opts) {
5974
7597
  label: labelWithCard,
5975
7598
  ...\u5F8C\u308D\u3078\u623B\u308B\u77E2\u5370\u304B(kind, fromId, toId, \u7BB1\u306E\u4E26\u3073) ? { routing: "back-detour" } : {},
5976
7599
  ...s.sub ? { sub: s.sub } : {},
7600
+ ...s.side ? { side: s.side } : {},
5977
7601
  ...s.tone ? { tone: s.tone } : {},
5978
7602
  ...s.style ? { style: s.style } : {}
5979
7603
  });
@@ -6660,7 +8284,9 @@ var ACCEPTED_KEYS = {
6660
8284
  "animation",
6661
8285
  "viewport",
6662
8286
  "lanes",
6663
- "groups"
8287
+ "groups",
8288
+ // 値を見せる部品 (#1374)
8289
+ "readouts"
6664
8290
  ],
6665
8291
  actor: [
6666
8292
  "name",
@@ -6686,13 +8312,21 @@ var ACCEPTED_KEYS = {
6686
8312
  "nodes",
6687
8313
  "scale",
6688
8314
  "state",
6689
- "pos"
8315
+ "pos",
8316
+ // 箱の中に描く図形 (#1374)
8317
+ "shape",
8318
+ // その箱を出すかどうかの条件 (#1381)
8319
+ "visibleIf",
8320
+ // 箱に出す題 (#1381)
8321
+ "title"
6690
8322
  ],
6691
8323
  step: [
6692
8324
  "from",
6693
8325
  "to",
6694
8326
  "label",
6695
8327
  "sub",
8328
+ // 矢印がどの辺から出るか (#1385)
8329
+ "side",
6696
8330
  "tone",
6697
8331
  "style",
6698
8332
  "guard",
@@ -6725,7 +8359,9 @@ var \u6B04\u306E\u578B\u8868 = {
6725
8359
  animation: "\u4E26\u3073",
6726
8360
  viewport: "object",
6727
8361
  lanes: "object",
6728
- groups: "object"
8362
+ groups: "object",
8363
+ // 値を見せる部品 (#1374)。 中身は下の検査が種類ごとに見る
8364
+ readouts: "\u4E26\u3073"
6729
8365
  },
6730
8366
  actor: {
6731
8367
  name: "\u5FC5\u9808\u306E\u975E\u7A7A\u6587\u5B57\u5217",
@@ -6751,13 +8387,21 @@ var \u6B04\u306E\u578B\u8868 = {
6751
8387
  nodes: "object",
6752
8388
  scale: "\u6570",
6753
8389
  state: "object",
6754
- pos: "object"
8390
+ pos: "object",
8391
+ // 箱の中に描く図形 (#1374)。 中身は下の検査が種類ごとに見る
8392
+ shape: "object",
8393
+ // その箱を出すかどうかの条件 (#1381)
8394
+ visibleIf: "\u6587\u5B57\u5217",
8395
+ // 箱に出す題 (#1381)
8396
+ title: "\u6587\u5B57\u5217"
6755
8397
  },
6756
8398
  step: {
6757
8399
  from: "\u5FC5\u9808\u306E\u6587\u5B57\u5217",
6758
8400
  to: "\u5FC5\u9808\u306E\u6587\u5B57\u5217",
6759
8401
  label: "\u5FC5\u9808\u306E\u6587\u5B57\u5217",
6760
8402
  sub: "\u6587\u5B57\u5217",
8403
+ // 矢印がどの辺から出るか (#1385)
8404
+ side: "\u8FBA",
6761
8405
  tone: "\u8272",
6762
8406
  style: "\u7DDA\u7A2E",
6763
8407
  guard: "\u6587\u5B57\u5217",
@@ -6807,13 +8451,22 @@ var \u8272\u756A\u53F7\u306E\u5F62 = /^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-f
6807
8451
  function JSON\u306E\u8272\u540D\u304B(v) {
6808
8452
  return \u66F8\u3051\u308B\u8272\u540D().includes(v);
6809
8453
  }
6810
- 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
+ ];
6811
8458
  var \u898B\u672C\u306B\u52B9\u304B\u306A\u3044\u6B04 = [
6812
8459
  "tone",
6813
8460
  "owner",
6814
8461
  "end",
6815
8462
  "touchpoint",
6816
- "opportunity"
8463
+ "opportunity",
8464
+ // 箱の中に描く図形 (#1374)。 見本は自分の形を持つため、外から図形を差し替えられない
8465
+ "shape",
8466
+ // その箱を出すかどうかの条件 (#1381)。 見本は自分の出方を持つ
8467
+ "visibleIf",
8468
+ // 箱に出す題 (#1381)。 見本は自分の題を持つ
8469
+ "title"
6817
8470
  ];
6818
8471
  function \u5024\u3092\u691C\u67FB(v, \u578B, path, \u540D\u524D, errors) {
6819
8472
  const \u578B\u9055\u3044 = (\u671F\u5F85, \u88DC\u8DB3) => {
@@ -6896,6 +8549,16 @@ function \u5024\u3092\u691C\u67FB(v, \u578B, path, \u540D\u524D, errors) {
6896
8549
  });
6897
8550
  }
6898
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;
6899
8562
  case "\u63CF\u304F\u3082\u306E":
6900
8563
  if (v === void 0) return;
6901
8564
  if (typeof v !== "string" || !DRAW_WORDS.has(v)) {
@@ -7033,6 +8696,123 @@ function validateViewport(v, errors) {
7033
8696
  checkUnknownKeys(v, "viewport", "$.viewport", errors);
7034
8697
  \u8868\u3067\u691C\u67FB(v, "viewport", "$.viewport", "viewport", errors);
7035
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
+ }
7036
8816
  function validateIdMap(v, \u6B04, \u5C64, errors, \u4E2D\u8EAB\u3092\u898B\u308B) {
7037
8817
  if (v === void 0) return;
7038
8818
  const path = `$.${\u6B04}`;
@@ -7194,6 +8974,7 @@ function validateJson(json) {
7194
8974
  if (!\u5199\u3057.ok) return { ok: false, errors: [\u5199\u3057.error] };
7195
8975
  const j = \u5199\u3057.value;
7196
8976
  checkUnknownKeys(j, "root", "$", errors);
8977
+ validateReadouts(j.readouts, errors);
7197
8978
  \u8868\u3067\u691C\u67FB(j, "root", "$", "", errors);
7198
8979
  if (!Array.isArray(j.actors) || j.actors.length === 0) {
7199
8980
  errors.push({ path: "$.actors", message: "actors must be a non-empty array" });
@@ -7207,6 +8988,7 @@ function validateJson(json) {
7207
8988
  const ao = a;
7208
8989
  checkUnknownKeys(ao, "actor", `$.actors[${i}]`, errors);
7209
8990
  \u8868\u3067\u691C\u67FB(ao, "actor", `$.actors[${i}]`, "actor", errors);
8991
+ validateActorShape(ao.shape, `$.actors[${i}].shape`, errors);
7210
8992
  const \u898B\u672C\u304B = \u898B\u672C\u306E\u540D\u524D\u304B(ao.kind);
7211
8993
  const \u4EE3\u308F\u308A\u306B\u4F7F\u3046\u6B04 = {
7212
8994
  state: "\u7BB1\u306E\u898B\u305F\u76EE\u3092\u5909\u3048\u308B\u306A\u3089 tone / color \u3092\u4F7F\u3046",
@@ -7425,6 +9207,10 @@ function jsonToDoc(json) {
7425
9207
  stack: a.stack,
7426
9208
  initial: a.initial,
7427
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,
7428
9214
  // 普通の箱にしか効かない欄は見本では落とす。 落とす欄の一覧は `見本に効かない欄` が
7429
9215
  // 唯一の出どころで、検査 (#1308) も同じ表を見る = 「検査は通すが組み立てが捨てる」
7430
9216
  // 状態が作れない
@@ -7465,6 +9251,7 @@ function jsonToDoc(json) {
7465
9251
  to: s.to,
7466
9252
  label: s.label,
7467
9253
  sub: s.sub,
9254
+ side: s.side,
7468
9255
  // 箱と同じ読み替えを通す (#1304)。 通さないと `tone: "成功"` が色名として解決されないまま
7469
9256
  // 図に届き、同じ値が箱では色になり矢印では色にならない
7470
9257
  tone: resolveTone(s.tone),
@@ -7478,6 +9265,7 @@ function jsonToDoc(json) {
7478
9265
  layoutPos: s.pos,
7479
9266
  pos: p0
7480
9267
  }));
9268
+ const readouts = json.readouts ? [...json.readouts] : void 0;
7481
9269
  const states = Object.entries(json.states ?? {}).map(([name, initial]) => ({
7482
9270
  name,
7483
9271
  initial,
@@ -7534,6 +9322,7 @@ function jsonToDoc(json) {
7534
9322
  { id, label: g.label, lanes: g.lanes, pos: p0 }
7535
9323
  ])
7536
9324
  ) : void 0,
9325
+ readouts,
7537
9326
  pos: p0
7538
9327
  };
7539
9328
  }
@@ -7695,14 +9484,40 @@ var diagram_default = {
7695
9484
  tone: {
7696
9485
  type: "string",
7697
9486
  description: "\u7BB1\u306E\u8272\u8ABF\u3002 success / warning \u7B49\u306E\u5225\u540D\u3082\u4F7F\u3048\u308B\u3002",
7698
- 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
+ ]
7699
9501
  },
7700
9502
  color: {
7701
9503
  type: "string",
7702
9504
  description: "\u7BB1\u306E\u8272\u540D\u3001\u307E\u305F\u306F # \u3067\u59CB\u307E\u308B parts \u306E\u8272\u756A\u53F7\u3002",
7703
9505
  anyOf: [
7704
9506
  {
7705
- 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
+ ]
7706
9521
  },
7707
9522
  {
7708
9523
  pattern: "^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$"
@@ -7780,39 +9595,168 @@ var diagram_default = {
7780
9595
  type: "number"
7781
9596
  }
7782
9597
  }
7783
- }
7784
- }
7785
- }
7786
- ]
7787
- }
7788
- },
7789
- flow: {
7790
- type: "array",
7791
- 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",
7792
- items: {
7793
- type: "object",
7794
- required: ["from", "to", "label"],
7795
- additionalProperties: false,
7796
- properties: {
7797
- from: {
7798
- type: "string",
7799
- description: "\u8D77\u70B9 actor \u540D"
7800
- },
7801
- to: {
7802
- type: "string",
7803
- description: "\u7D42\u70B9 actor \u540D"
7804
- },
7805
- label: {
7806
- type: "string",
7807
- description: "\u77E2\u5370\u4E0A\u306E\u30E9\u30D9\u30EB (\u95A2\u6570\u547C\u51FA\u3057\u540D / \u30E1\u30C3\u30BB\u30FC\u30B8\u7B49)"
7808
- },
7809
- sub: {
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: {
7810
9741
  type: "string",
7811
9742
  description: "\u30E9\u30D9\u30EB\u4E0B\u306E\u88DC\u8DB3"
7812
9743
  },
7813
9744
  tone: {
7814
9745
  type: "string",
7815
- enum: ["accent", "teal", "success", "error", "warning", "info", "\u6210\u529F", "\u5931\u6557", "\u8B66\u544A", "\u60C5\u5831", "\u4E2D\u7ACB", "neutral"],
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
+ ],
7816
9760
  description: "\u77E2\u5370\u306E\u8272\u8ABF\u3002 success / \u6210\u529F \u7B49\u306E\u5225\u540D\u3082\u4F7F\u3048\u308B\u3002"
7817
9761
  },
7818
9762
  style: {
@@ -7828,6 +9772,11 @@ var diagram_default = {
7828
9772
  type: "string",
7829
9773
  description: "ER \u306E\u591A\u91CD\u5EA6 (1..N \u7B49\u3001 kind: er \u7528)"
7830
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
+ },
7831
9780
  labelOffsetX: {
7832
9781
  type: "number",
7833
9782
  description: "\u30E9\u30D9\u30EB\u4F4D\u7F6E x \u8ABF\u6574"
@@ -8057,6 +10006,828 @@ var diagram_default = {
8057
10006
  }
8058
10007
  }
8059
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
+ }
8060
10831
  }
8061
10832
  }
8062
10833
  };