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