@c2n/framework-types 0.0.7 → 0.0.9

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://raw.githubusercontent.com/JetBrains/web-types/master/schema/web-types.json",
3
3
  "name": "@c2n/framework-types",
4
- "version": "0.0.7",
4
+ "version": "0.0.9",
5
5
  "description": "GENERATED by @c2n/framework-types. Do not edit by hand.",
6
6
  "description-markup": "markdown",
7
7
  "contributions": {
@@ -549,6 +549,42 @@
549
549
  "type": "AvatarStatus | undefined",
550
550
  "kind": "expression"
551
551
  }
552
+ },
553
+ {
554
+ "name": "editable",
555
+ "description": "Allows the avatar to open an image picker and exposes a remove action for the current image.",
556
+ "default": "false",
557
+ "value": {
558
+ "type": "boolean",
559
+ "kind": "expression"
560
+ }
561
+ },
562
+ {
563
+ "name": "disabled",
564
+ "description": "Disables editable avatar actions.",
565
+ "default": "false",
566
+ "value": {
567
+ "type": "boolean",
568
+ "kind": "expression"
569
+ }
570
+ },
571
+ {
572
+ "name": "accept",
573
+ "description": "Accepted image MIME types or file extensions, using native file-input syntax.",
574
+ "default": "'image/*'",
575
+ "value": {
576
+ "type": "string",
577
+ "kind": "expression"
578
+ }
579
+ },
580
+ {
581
+ "name": "max-size",
582
+ "description": "Maximum accepted image size in bytes. Zero means unlimited.",
583
+ "default": "0",
584
+ "value": {
585
+ "type": "number",
586
+ "kind": "expression"
587
+ }
552
588
  }
553
589
  ],
554
590
  "js": {
@@ -568,9 +604,25 @@
568
604
  "type": "boolean",
569
605
  "kind": "expression"
570
606
  }
607
+ },
608
+ {
609
+ "name": "maxSize",
610
+ "description": "Maximum accepted image size in bytes. Zero means unlimited.",
611
+ "value": {
612
+ "type": "number",
613
+ "kind": "expression"
614
+ }
571
615
  }
572
616
  ],
573
617
  "events": [
618
+ {
619
+ "name": "avatar-remove",
620
+ "description": "Fired after the current local preview or `src` image is removed.",
621
+ "value": {
622
+ "type": "CustomEvent<AvatarRemoveDetail>",
623
+ "kind": "expression"
624
+ }
625
+ },
574
626
  {
575
627
  "name": "error",
576
628
  "description": "Fired when the `src` image fails to load; the initials are shown instead.",
@@ -578,6 +630,22 @@
578
630
  "type": "Event",
579
631
  "kind": "expression"
580
632
  }
633
+ },
634
+ {
635
+ "name": "file-reject",
636
+ "description": "Fired when an editable avatar rejects a file by type or size.",
637
+ "value": {
638
+ "type": "CustomEvent<AvatarFileRejection>",
639
+ "kind": "expression"
640
+ }
641
+ },
642
+ {
643
+ "name": "avatar-change",
644
+ "description": "Fired after an editable avatar accepts a local image. Upload `detail.file` and use `detail.previewUrl` for the immediate preview.",
645
+ "value": {
646
+ "type": "CustomEvent<AvatarChangeDetail>",
647
+ "kind": "expression"
648
+ }
581
649
  }
582
650
  ]
583
651
  }
@@ -765,7 +833,7 @@
765
833
  },
766
834
  {
767
835
  "name": "c2-button-group",
768
- "description": "Attaches related buttons into one control: shared borders, outside corners only, a divider between items. Children\nare `c2-button` or `c2-icon-button` elements (any element works for layout). With `selection=\"single\"` the group is\na segmented control that keeps one item pressed; with `selection=\"multiple\"` each item toggles independently. The\npressed items carry `selected` (and `aria-pressed`), the group reports them in `value` and fires `change`.\n\n`@c2n/button-group`",
836
+ "description": "Attaches related buttons into one control: shared borders, outside corners only, a divider between items. Children\nare `c2-button` or `c2-icon-button` elements (any element works for layout). With `selection=\"single\"` the group is\na segmented control that keeps one item pressed; with `selection=\"multiple\"` each item toggles independently. Set\n`orientation=\"vertical\"` to stack either appearance and use Up/Down keyboard navigation. The\npressed items carry `selected` (and `aria-pressed`), the group reports them in `value` and fires `change`.\n\n`@c2n/button-group`",
769
837
  "attributes": [
770
838
  {
771
839
  "name": "selection",
@@ -803,6 +871,33 @@
803
871
  "kind": "expression"
804
872
  }
805
873
  },
874
+ {
875
+ "name": "appearance",
876
+ "description": "`segmented` adds an inset track and sliding selected surface and always uses single selection.",
877
+ "default": "'joined'",
878
+ "value": {
879
+ "type": "ButtonGroupAppearance",
880
+ "kind": "expression"
881
+ }
882
+ },
883
+ {
884
+ "name": "size",
885
+ "description": "Segmented control size.",
886
+ "default": "'m'",
887
+ "value": {
888
+ "type": "ButtonGroupSize",
889
+ "kind": "expression"
890
+ }
891
+ },
892
+ {
893
+ "name": "stretched",
894
+ "description": "Makes the group and every item share the available width.",
895
+ "default": "false",
896
+ "value": {
897
+ "type": "boolean",
898
+ "kind": "expression"
899
+ }
900
+ },
806
901
  {
807
902
  "name": "aria-label",
808
903
  "description": "Accessible name of the group.",
@@ -891,115 +986,30 @@
891
986
  }
892
987
  },
893
988
  {
894
- "name": "c2-area-chart",
895
- "description": "A line chart with the region under each line filled an area chart *is* a line chart plus a fill, so it\nextends `c2-line-chart` and every one of its attributes (`curve`, `points`, `zoom`, the axis bounds)\nmeans the same thing here.\n\n`@c2n/chart`",
989
+ "name": "c2-cascader",
990
+ "description": "Hierarchical single-value picker that opens every active level in one floating panel. Supply nested `options`, then\nread the selected value path from `value`. Branches open another column; choosing a leaf commits the path.\n\n`@c2n/cascader`",
896
991
  "attributes": [
897
992
  {
898
- "name": "fill-opacity",
899
- "description": "Opacity of the fill under each line. Falls back to `--c2-chart__area--opacity`.",
900
- "value": {
901
- "type": "number | undefined",
902
- "kind": "expression"
903
- }
904
- },
905
- {
906
- "name": "curve",
907
- "description": "Interpolation between points.",
908
- "default": "'linear'",
909
- "value": {
910
- "type": "'linear' | 'smooth' | 'step'",
911
- "kind": "expression"
912
- }
913
- },
914
- {
915
- "name": "points",
916
- "description": "When point markers are drawn. `auto` lets uPlot show them once points are far enough apart.",
917
- "default": "'auto'",
918
- "value": {
919
- "type": "'auto' | 'always' | 'none'",
920
- "kind": "expression"
921
- }
922
- },
923
- {
924
- "name": "grid",
925
- "description": "Which grid lines are drawn. A string rather than a boolean because a boolean attribute reads as `true`\nwhenever it is present — `grid=\"false\"` in markup would turn the grid *on*, and there would be no way to\nturn it off from HTML at all. `y` (the default) draws the horizontal lines, matching `axes`' shape.",
926
- "default": "'y'",
927
- "value": {
928
- "type": "'both' | 'x' | 'y' | 'none'",
929
- "kind": "expression"
930
- }
931
- },
932
- {
933
- "name": "axes",
934
- "description": "Which axes are drawn.",
935
- "default": "'both'",
936
- "value": {
937
- "type": "'both' | 'x' | 'y' | 'none'",
938
- "kind": "expression"
939
- }
940
- },
941
- {
942
- "name": "y-min",
943
- "description": "Lower bound of the y scale. Auto-ranged when unset.",
944
- "value": {
945
- "type": "number | undefined",
946
- "kind": "expression"
947
- }
948
- },
949
- {
950
- "name": "y-max",
951
- "description": "Upper bound of the y scale. Auto-ranged when unset.",
952
- "value": {
953
- "type": "number | undefined",
954
- "kind": "expression"
955
- }
956
- },
957
- {
958
- "name": "zoom",
959
- "description": "Lets the user drag horizontally to zoom the x scale.",
960
- "default": "false",
961
- "value": {
962
- "type": "boolean",
963
- "kind": "expression"
964
- }
965
- },
966
- {
967
- "name": "cursor",
968
- "description": "The cursor crosshair.",
969
- "default": "'x'",
970
- "value": {
971
- "type": "'x' | 'none'",
972
- "kind": "expression"
973
- }
974
- },
975
- {
976
- "name": "data",
977
- "description": "The data to plot. Row objects, a bare `number[]`, columnar `[xs, ys…]`, or an already-normalised\nframe. Compared by identity: replace the array, or bump `revision` after mutating it in place.",
978
- "value": {
979
- "type": "ChartInput | undefined",
980
- "kind": "expression"
981
- }
982
- },
983
- {
984
- "name": "revision",
985
- "description": "Bump after mutating `data` in place. The cheap escape hatch for a large buffer you own.",
986
- "default": "0",
993
+ "name": "options",
994
+ "description": "Nested hierarchy shown in the floating panel. In markup this is a JSON array.",
995
+ "default": "[]",
987
996
  "value": {
988
- "type": "number",
997
+ "type": "CascaderOption[]",
989
998
  "kind": "expression"
990
999
  }
991
1000
  },
992
1001
  {
993
- "name": "series",
994
- "description": "Series definitions, as an alternative to `c2-chart-series` children. Children win when both are set.",
1002
+ "name": "value",
1003
+ "description": "Selected value path. In markup, separate levels with semicolons.",
1004
+ "default": "[]",
995
1005
  "value": {
996
- "type": "ChartSeriesConfig[] | undefined",
1006
+ "type": "string[]",
997
1007
  "kind": "expression"
998
1008
  }
999
1009
  },
1000
1010
  {
1001
- "name": "x-field",
1002
- "description": "Row field holding the x value; may be a dotted path. Defaults to the row index.",
1011
+ "name": "name",
1012
+ "description": "Name used when the cascader participates in a form.",
1003
1013
  "default": "''",
1004
1014
  "value": {
1005
1015
  "type": "string",
@@ -1007,61 +1017,44 @@
1007
1017
  }
1008
1018
  },
1009
1019
  {
1010
- "name": "label-field",
1011
- "description": "Row field holding the category label, for charts that name their slices.",
1012
- "default": "''",
1020
+ "name": "placeholder",
1021
+ "description": "Text shown before a path is selected.",
1022
+ "default": "'Please select'",
1013
1023
  "value": {
1014
1024
  "type": "string",
1015
1025
  "kind": "expression"
1016
1026
  }
1017
1027
  },
1018
1028
  {
1019
- "name": "x-type",
1020
- "description": "How x values are interpreted, which decides the axis and the tooltip format.",
1021
- "default": "'linear'",
1022
- "value": {
1023
- "type": "'time' | 'linear' | 'category'",
1024
- "kind": "expression"
1025
- }
1026
- },
1027
- {
1028
- "name": "legend",
1029
- "description": "Where the legend sits, or `none` to hide it. Shown by default: a chart with more than one series is\nunreadable without one, and a single-series chart simply renders a one-entry legend.",
1030
- "default": "'bottom'",
1029
+ "name": "separator",
1030
+ "description": "String placed between selected labels in the trigger.",
1031
+ "default": "' / '",
1031
1032
  "value": {
1032
- "type": "'none' | 'top' | 'bottom' | 'start' | 'end'",
1033
- "kind": "expression"
1034
- }
1035
- },
1036
- {
1037
- "name": "tooltip",
1038
- "description": "Whether the tooltip follows the whole x position or only the hovered datum.",
1039
- "default": "'axis'",
1040
- "value": {
1041
- "type": "'none' | 'item' | 'axis'",
1033
+ "type": "string",
1042
1034
  "kind": "expression"
1043
1035
  }
1044
1036
  },
1045
1037
  {
1046
- "name": "animation",
1047
- "description": "Whether the engine animates entry and updates. `none` by default: a chart fed by a live source should\nnot animate every tick. Named `animation` rather than `animate` because `HTMLElement.animate()` is a\nmethod every element already has, and shadowing it breaks the Web Animations API on the host.",
1048
- "default": "'none'",
1038
+ "name": "aria-label",
1039
+ "description": "Accessible name forwarded to the trigger and option tree.",
1040
+ "default": "null",
1049
1041
  "value": {
1050
- "type": "'none' | 'auto'",
1042
+ "type": "string | null",
1051
1043
  "kind": "expression"
1052
1044
  }
1053
1045
  },
1054
1046
  {
1055
- "name": "locale",
1056
- "description": "BCP 47 locale for the axis and tooltip formatting. Defaults to the browser locale.",
1047
+ "name": "open",
1048
+ "description": "Whether the floating panel is open.",
1049
+ "default": "false",
1057
1050
  "value": {
1058
- "type": "string | undefined",
1051
+ "type": "boolean",
1059
1052
  "kind": "expression"
1060
1053
  }
1061
1054
  },
1062
1055
  {
1063
- "name": "loading",
1064
- "description": "Shows the loading state instead of the plot.",
1056
+ "name": "disabled",
1057
+ "description": "Disables opening, selection and form submission.",
1065
1058
  "default": "false",
1066
1059
  "value": {
1067
1060
  "type": "boolean",
@@ -1069,38 +1062,38 @@
1069
1062
  }
1070
1063
  },
1071
1064
  {
1072
- "name": "error",
1073
- "description": "Shows an error message instead of the plot.",
1074
- "default": "''",
1065
+ "name": "readonly",
1066
+ "description": "Displays the selected path without allowing changes.",
1067
+ "default": "false",
1075
1068
  "value": {
1076
- "type": "string",
1069
+ "type": "boolean",
1077
1070
  "kind": "expression"
1078
1071
  }
1079
1072
  },
1080
1073
  {
1081
- "name": "empty-message",
1082
- "description": "Replaces the built-in \"no data\" text.",
1083
- "default": "'No data'",
1074
+ "name": "required",
1075
+ "description": "Requires a committed path for native form validation.",
1076
+ "default": "false",
1084
1077
  "value": {
1085
- "type": "string",
1078
+ "type": "boolean",
1086
1079
  "kind": "expression"
1087
1080
  }
1088
1081
  },
1089
1082
  {
1090
- "name": "max-points",
1091
- "description": "Caps how many points a streaming chart keeps; older points fall off the front. `0` keeps everything.",
1092
- "default": "0",
1083
+ "name": "change-on-select",
1084
+ "description": "Commit branch values as they are chosen instead of waiting for a leaf.",
1085
+ "default": "false",
1093
1086
  "value": {
1094
- "type": "number",
1087
+ "type": "boolean",
1095
1088
  "kind": "expression"
1096
1089
  }
1097
1090
  },
1098
1091
  {
1099
- "name": "lazy-render",
1100
- "description": "Defers loading the engine until the host first scrolls into view.",
1101
- "default": "false",
1092
+ "name": "expand-trigger",
1093
+ "description": "Open child columns on pointer hover instead of click.",
1094
+ "default": "'click'",
1102
1095
  "value": {
1103
- "type": "boolean",
1096
+ "type": "'click' | 'hover'",
1104
1097
  "kind": "expression"
1105
1098
  }
1106
1099
  }
@@ -1108,124 +1101,60 @@
1108
1101
  "js": {
1109
1102
  "properties": [
1110
1103
  {
1111
- "name": "fillOpacity",
1112
- "description": "Opacity of the fill under each line. Falls back to `--c2-chart__area--opacity`.",
1113
- "value": {
1114
- "type": "number | undefined",
1115
- "kind": "expression"
1116
- }
1117
- },
1118
- {
1119
- "name": "yMin",
1120
- "description": "Lower bound of the y scale. Auto-ranged when unset.",
1121
- "value": {
1122
- "type": "number | undefined",
1123
- "kind": "expression"
1124
- }
1125
- },
1126
- {
1127
- "name": "yMax",
1128
- "description": "Upper bound of the y scale. Auto-ranged when unset.",
1129
- "value": {
1130
- "type": "number | undefined",
1131
- "kind": "expression"
1132
- }
1133
- },
1134
- {
1135
- "name": "xField",
1136
- "description": "Row field holding the x value; may be a dotted path. Defaults to the row index.",
1137
- "value": {
1138
- "type": "string",
1139
- "kind": "expression"
1140
- }
1141
- },
1142
- {
1143
- "name": "labelField",
1144
- "description": "Row field holding the category label, for charts that name their slices.",
1145
- "value": {
1146
- "type": "string",
1147
- "kind": "expression"
1148
- }
1149
- },
1150
- {
1151
- "name": "xType",
1152
- "description": "How x values are interpreted, which decides the axis and the tooltip format.",
1153
- "value": {
1154
- "type": "'time' | 'linear' | 'category'",
1155
- "kind": "expression"
1156
- }
1157
- },
1158
- {
1159
- "name": "emptyMessage",
1160
- "description": "Replaces the built-in \"no data\" text.",
1104
+ "name": "ariaLabel",
1105
+ "description": "Accessible name forwarded to the trigger and option tree.",
1161
1106
  "value": {
1162
- "type": "string",
1107
+ "type": "string | null",
1163
1108
  "kind": "expression"
1164
1109
  }
1165
1110
  },
1166
1111
  {
1167
- "name": "maxPoints",
1168
- "description": "Caps how many points a streaming chart keeps; older points fall off the front. `0` keeps everything.",
1112
+ "name": "changeOnSelect",
1113
+ "description": "Commit branch values as they are chosen instead of waiting for a leaf.",
1169
1114
  "value": {
1170
- "type": "number",
1115
+ "type": "boolean",
1171
1116
  "kind": "expression"
1172
1117
  }
1173
1118
  },
1174
1119
  {
1175
- "name": "lazyRender",
1176
- "description": "Defers loading the engine until the host first scrolls into view.",
1120
+ "name": "expandTrigger",
1121
+ "description": "Open child columns on pointer hover instead of click.",
1177
1122
  "value": {
1178
- "type": "boolean",
1123
+ "type": "'click' | 'hover'",
1179
1124
  "kind": "expression"
1180
1125
  }
1181
1126
  }
1182
1127
  ],
1183
1128
  "events": [
1184
1129
  {
1185
- "name": "series-toggle",
1186
- "description": "Fired when a legend entry is toggled. Does not bubble.",
1187
- "value": {
1188
- "type": "CustomEvent<ChartSeriesToggleEventDetail>",
1189
- "kind": "expression"
1190
- }
1191
- },
1192
- {
1193
- "name": "range-change",
1194
- "description": "Fired after the user zooms or brushes. `detail.min` and `detail.max` are the new x bounds. Does not bubble.",
1130
+ "name": "open-change",
1131
+ "description": "Fired when the floating panel opens or closes.",
1195
1132
  "value": {
1196
- "type": "CustomEvent<ChartRangeEventDetail>",
1133
+ "type": "CustomEvent<{ open: boolean }>",
1197
1134
  "kind": "expression"
1198
1135
  }
1199
1136
  },
1200
1137
  {
1201
- "name": "chart-ready",
1202
- "description": "Fired after the engine has loaded and drawn for the first time. The host also gains `data-chart-ready`, which is what a test should wait on.",
1138
+ "name": "cascader-change",
1139
+ "description": "Fired when a leaf, or a branch with `change-on-select`, is committed. Detail contains value, label and option paths plus whether the last option is a leaf.",
1203
1140
  "value": {
1204
- "type": "CustomEvent<{ engine: string }>",
1141
+ "type": "CustomEvent<CascaderChangeEventDetail>",
1205
1142
  "kind": "expression"
1206
1143
  }
1207
1144
  },
1208
1145
  {
1209
- "name": "chart-error",
1210
- "description": "Fired when the engine fails to load or to draw. `detail.error` is the underlying failure.",
1211
- "value": {
1212
- "type": "CustomEvent<{ error: unknown }>",
1213
- "kind": "expression"
1214
- }
1215
- },
1216
- {
1217
- "name": "point-hover",
1218
- "description": "Fired as the pointer moves between data points, and with a `null` detail when it leaves the plot. Does not bubble.",
1146
+ "name": "input",
1147
+ "description": "Fired after `value` changes through user interaction.",
1219
1148
  "value": {
1220
- "type": "CustomEvent<ChartPointEventDetail>",
1149
+ "type": "Event",
1221
1150
  "kind": "expression"
1222
1151
  }
1223
1152
  },
1224
1153
  {
1225
- "name": "point-click",
1226
- "description": "Fired when a datum is clicked. Does not bubble: several components fire point events, so a listener belongs on the element itself.",
1154
+ "name": "change",
1155
+ "description": "Fired after `value` changes through user interaction.",
1227
1156
  "value": {
1228
- "type": "CustomEvent<ChartPointEventDetail>",
1157
+ "type": "Event",
1229
1158
  "kind": "expression"
1230
1159
  }
1231
1160
  }
@@ -1233,24 +1162,32 @@
1233
1162
  }
1234
1163
  },
1235
1164
  {
1236
- "name": "c2-bar-chart",
1237
- "description": "A bar chart drawn by uPlot's bars path builder, for categorical or time-bucketed values. Several series\nare drawn side by side within each band.\n\n`@c2n/chart`",
1165
+ "name": "c2-area-chart",
1166
+ "description": "A line chart with the region under each line filled an area chart *is* a line chart plus a fill, so it\nextends `c2-line-chart` and every one of its attributes (`curve`, `points`, `zoom`, the axis bounds)\nmeans the same thing here.\n\n`@c2n/chart`",
1238
1167
  "attributes": [
1239
1168
  {
1240
- "name": "bar-width",
1241
- "description": "Share of each band a bar group occupies, from 0 to 1.",
1242
- "default": "0.6",
1169
+ "name": "fill-opacity",
1170
+ "description": "Opacity of the fill under each line. Falls back to `--c2-chart__area--opacity`.",
1243
1171
  "value": {
1244
- "type": "number",
1172
+ "type": "number | undefined",
1245
1173
  "kind": "expression"
1246
1174
  }
1247
1175
  },
1248
1176
  {
1249
- "name": "bar-gap",
1250
- "description": "Share of the group taken by the gaps between grouped bars, from 0 to 1.",
1251
- "default": "0.1",
1177
+ "name": "curve",
1178
+ "description": "Interpolation between points.",
1179
+ "default": "'linear'",
1252
1180
  "value": {
1253
- "type": "number",
1181
+ "type": "'linear' | 'smooth' | 'step'",
1182
+ "kind": "expression"
1183
+ }
1184
+ },
1185
+ {
1186
+ "name": "points",
1187
+ "description": "When point markers are drawn. `auto` lets uPlot show them once points are far enough apart.",
1188
+ "default": "'auto'",
1189
+ "value": {
1190
+ "type": "'auto' | 'always' | 'none'",
1254
1191
  "kind": "expression"
1255
1192
  }
1256
1193
  },
@@ -1378,8 +1315,8 @@
1378
1315
  },
1379
1316
  {
1380
1317
  "name": "animation",
1381
- "description": "Whether the engine animates entry and updates. `none` by default: a chart fed by a live source should\nnot animate every tick. Named `animation` rather than `animate` because `HTMLElement.animate()` is a\nmethod every element already has, and shadowing it breaks the Web Animations API on the host.",
1382
- "default": "'none'",
1318
+ "description": "Whether the chart animates its initial draw. ECharts uses its native shape animation and uPlot uses a\nlightweight plot reveal; subsequent data updates stay immediate so a live source does not animate\nevery tick. Named `animation` rather than `animate` because `HTMLElement.animate()` is a method every\nelement already has, and shadowing it breaks the Web Animations API on the host.",
1319
+ "default": "'auto'",
1383
1320
  "value": {
1384
1321
  "type": "'none' | 'auto'",
1385
1322
  "kind": "expression"
@@ -1442,18 +1379,10 @@
1442
1379
  "js": {
1443
1380
  "properties": [
1444
1381
  {
1445
- "name": "barWidth",
1446
- "description": "Share of each band a bar group occupies, from 0 to 1.",
1447
- "value": {
1448
- "type": "number",
1449
- "kind": "expression"
1450
- }
1451
- },
1452
- {
1453
- "name": "barGap",
1454
- "description": "Share of the group taken by the gaps between grouped bars, from 0 to 1.",
1382
+ "name": "fillOpacity",
1383
+ "description": "Opacity of the fill under each line. Falls back to `--c2-chart__area--opacity`.",
1455
1384
  "value": {
1456
- "type": "number",
1385
+ "type": "number | undefined",
1457
1386
  "kind": "expression"
1458
1387
  }
1459
1388
  },
@@ -1523,6 +1452,14 @@
1523
1452
  }
1524
1453
  ],
1525
1454
  "events": [
1455
+ {
1456
+ "name": "tooltip-change",
1457
+ "description": "Fired with the complete tooltip model as the pointer moves, and with `null` when it leaves. Used by `c2-chart-tooltip`.",
1458
+ "value": {
1459
+ "type": "CustomEvent<ChartTooltipContext | null>",
1460
+ "kind": "expression"
1461
+ }
1462
+ },
1526
1463
  {
1527
1464
  "name": "series-toggle",
1528
1465
  "description": "Fired when a legend entry is toggled. Does not bubble.",
@@ -1531,6 +1468,14 @@
1531
1468
  "kind": "expression"
1532
1469
  }
1533
1470
  },
1471
+ {
1472
+ "name": "legend-change",
1473
+ "description": "Fired when legend entries or visibility change. Used by `c2-chart-legend`.",
1474
+ "value": {
1475
+ "type": "CustomEvent<ChartLegendChangeEventDetail>",
1476
+ "kind": "expression"
1477
+ }
1478
+ },
1534
1479
  {
1535
1480
  "name": "range-change",
1536
1481
  "description": "Fired after the user zooms or brushes. `detail.min` and `detail.max` are the new x bounds. Does not bubble.",
@@ -1559,7 +1504,7 @@
1559
1504
  "name": "point-hover",
1560
1505
  "description": "Fired as the pointer moves between data points, and with a `null` detail when it leaves the plot. Does not bubble.",
1561
1506
  "value": {
1562
- "type": "CustomEvent<ChartPointEventDetail>",
1507
+ "type": "CustomEvent<ChartPointEventDetail | null>",
1563
1508
  "kind": "expression"
1564
1509
  }
1565
1510
  },
@@ -1575,119 +1520,24 @@
1575
1520
  }
1576
1521
  },
1577
1522
  {
1578
- "name": "c2-chart-series",
1579
- "description": "One series of a chart, declared as a light-DOM child. The element renders nothing: it is a definition\nthe chart reads, the same way `c2-table` reads its `c2-table-column` children. Everything it exposes as\nan attribute can also be set as a property, and `format` is property-only.\n\n`@c2n/chart`",
1580
- "attributes": [
1581
- {
1582
- "name": "field",
1583
- "description": "Key of the value in the row object; may be a dotted path such as `stats.cpu`.",
1584
- "default": "''",
1585
- "value": {
1586
- "type": "string",
1587
- "kind": "expression"
1588
- }
1589
- },
1590
- {
1591
- "name": "label",
1592
- "description": "Legend and tooltip label. Falls back to the field name.",
1593
- "value": {
1594
- "type": "string | undefined",
1595
- "kind": "expression"
1596
- }
1597
- },
1598
- {
1599
- "name": "color",
1600
- "description": "Explicit colour. Falls back to this series' slot in the chart's palette.",
1601
- "value": {
1602
- "type": "string | undefined",
1603
- "kind": "expression"
1604
- }
1605
- },
1606
- {
1607
- "name": "line-width",
1608
- "description": "Stroke width in pixels. Falls back to `--c2-chart__line--width`.",
1609
- "value": {
1610
- "type": "number | undefined",
1611
- "kind": "expression"
1612
- }
1613
- },
1614
- {
1615
- "name": "axis",
1616
- "description": "Which y axis the series is drawn against.",
1617
- "default": "'left'",
1618
- "value": {
1619
- "type": "'left' | 'right'",
1620
- "kind": "expression"
1621
- }
1622
- },
1623
- {
1624
- "name": "span-gaps",
1625
- "description": "Joins across gaps instead of breaking the line.",
1626
- "default": "false",
1627
- "value": {
1628
- "type": "boolean",
1629
- "kind": "expression"
1630
- }
1631
- },
1632
- {
1633
- "name": "hidden",
1634
- "description": "Leaves the series out of the chart without removing the definition.",
1635
- "default": "false",
1636
- "value": {
1637
- "type": "boolean",
1638
- "kind": "expression"
1639
- }
1640
- }
1641
- ],
1642
- "js": {
1643
- "properties": [
1644
- {
1645
- "name": "lineWidth",
1646
- "description": "Stroke width in pixels. Falls back to `--c2-chart__line--width`.",
1647
- "value": {
1648
- "type": "number | undefined",
1649
- "kind": "expression"
1650
- }
1651
- },
1652
- {
1653
- "name": "spanGaps",
1654
- "description": "Joins across gaps instead of breaking the line.",
1655
- "value": {
1656
- "type": "boolean",
1657
- "kind": "expression"
1658
- }
1659
- }
1660
- ],
1661
- "events": [
1662
- {
1663
- "name": "SERIES_CHANGE_EVENT",
1664
- "value": {
1665
- "type": "CustomEvent",
1666
- "kind": "expression"
1667
- }
1668
- }
1669
- ]
1670
- }
1671
- },
1672
- {
1673
- "name": "c2-line-chart",
1674
- "description": "A line chart over a time or numeric x axis, drawn on canvas by uPlot.\n\n`@c2n/chart`",
1523
+ "name": "c2-bar-chart",
1524
+ "description": "A bar chart drawn by uPlot's bars path builder, for categorical or time-bucketed values. Several series\nare drawn side by side within each band.\n\n`@c2n/chart`",
1675
1525
  "attributes": [
1676
1526
  {
1677
- "name": "curve",
1678
- "description": "Interpolation between points.",
1679
- "default": "'linear'",
1527
+ "name": "bar-width",
1528
+ "description": "Share of each band a bar group occupies, from 0 to 1.",
1529
+ "default": "0.6",
1680
1530
  "value": {
1681
- "type": "'linear' | 'smooth' | 'step'",
1531
+ "type": "number",
1682
1532
  "kind": "expression"
1683
1533
  }
1684
1534
  },
1685
1535
  {
1686
- "name": "points",
1687
- "description": "When point markers are drawn. `auto` lets uPlot show them once points are far enough apart.",
1688
- "default": "'auto'",
1536
+ "name": "bar-gap",
1537
+ "description": "Share of the group taken by the gaps between grouped bars, from 0 to 1.",
1538
+ "default": "0.1",
1689
1539
  "value": {
1690
- "type": "'auto' | 'always' | 'none'",
1540
+ "type": "number",
1691
1541
  "kind": "expression"
1692
1542
  }
1693
1543
  },
@@ -1815,8 +1665,8 @@
1815
1665
  },
1816
1666
  {
1817
1667
  "name": "animation",
1818
- "description": "Whether the engine animates entry and updates. `none` by default: a chart fed by a live source should\nnot animate every tick. Named `animation` rather than `animate` because `HTMLElement.animate()` is a\nmethod every element already has, and shadowing it breaks the Web Animations API on the host.",
1819
- "default": "'none'",
1668
+ "description": "Whether the chart animates its initial draw. ECharts uses its native shape animation and uPlot uses a\nlightweight plot reveal; subsequent data updates stay immediate so a live source does not animate\nevery tick. Named `animation` rather than `animate` because `HTMLElement.animate()` is a method every\nelement already has, and shadowing it breaks the Web Animations API on the host.",
1669
+ "default": "'auto'",
1820
1670
  "value": {
1821
1671
  "type": "'none' | 'auto'",
1822
1672
  "kind": "expression"
@@ -1878,6 +1728,22 @@
1878
1728
  ],
1879
1729
  "js": {
1880
1730
  "properties": [
1731
+ {
1732
+ "name": "barWidth",
1733
+ "description": "Share of each band a bar group occupies, from 0 to 1.",
1734
+ "value": {
1735
+ "type": "number",
1736
+ "kind": "expression"
1737
+ }
1738
+ },
1739
+ {
1740
+ "name": "barGap",
1741
+ "description": "Share of the group taken by the gaps between grouped bars, from 0 to 1.",
1742
+ "value": {
1743
+ "type": "number",
1744
+ "kind": "expression"
1745
+ }
1746
+ },
1881
1747
  {
1882
1748
  "name": "yMin",
1883
1749
  "description": "Lower bound of the y scale. Auto-ranged when unset.",
@@ -1944,6 +1810,14 @@
1944
1810
  }
1945
1811
  ],
1946
1812
  "events": [
1813
+ {
1814
+ "name": "tooltip-change",
1815
+ "description": "Fired with the complete tooltip model as the pointer moves, and with `null` when it leaves. Used by `c2-chart-tooltip`.",
1816
+ "value": {
1817
+ "type": "CustomEvent<ChartTooltipContext | null>",
1818
+ "kind": "expression"
1819
+ }
1820
+ },
1947
1821
  {
1948
1822
  "name": "series-toggle",
1949
1823
  "description": "Fired when a legend entry is toggled. Does not bubble.",
@@ -1952,6 +1826,14 @@
1952
1826
  "kind": "expression"
1953
1827
  }
1954
1828
  },
1829
+ {
1830
+ "name": "legend-change",
1831
+ "description": "Fired when legend entries or visibility change. Used by `c2-chart-legend`.",
1832
+ "value": {
1833
+ "type": "CustomEvent<ChartLegendChangeEventDetail>",
1834
+ "kind": "expression"
1835
+ }
1836
+ },
1955
1837
  {
1956
1838
  "name": "range-change",
1957
1839
  "description": "Fired after the user zooms or brushes. `detail.min` and `detail.max` are the new x bounds. Does not bubble.",
@@ -1980,7 +1862,7 @@
1980
1862
  "name": "point-hover",
1981
1863
  "description": "Fired as the pointer moves between data points, and with a `null` detail when it leaves the plot. Does not bubble.",
1982
1864
  "value": {
1983
- "type": "CustomEvent<ChartPointEventDetail>",
1865
+ "type": "CustomEvent<ChartPointEventDetail | null>",
1984
1866
  "kind": "expression"
1985
1867
  }
1986
1868
  },
@@ -1996,51 +1878,51 @@
1996
1878
  }
1997
1879
  },
1998
1880
  {
1999
- "name": "c2-pie-chart",
2000
- "description": "A pie or donut chart, drawn by ECharts. `label-field` names each slice and the single series supplies\nits value, so one row is one slice.\n\n`@c2n/chart`",
1881
+ "name": "c2-candlestick-chart",
1882
+ "description": "An OHLC candlestick chart drawn by ECharts. With no series children it reads the `open`, `close`, `low`\nand `high` fields; the four `*-field` attributes rename that convention. Four explicit series children\ncan instead supply those columns in the same order.\n\n`@c2n/chart`",
2001
1883
  "attributes": [
2002
1884
  {
2003
- "name": "inner-radius",
2004
- "description": "Hole in the middle, from 0 (a full pie) to 1. Anything above 0 makes it a donut.",
2005
- "default": "0",
1885
+ "name": "open-field",
1886
+ "description": "Row field containing the opening value.",
1887
+ "default": "'open'",
2006
1888
  "value": {
2007
- "type": "number",
1889
+ "type": "string",
2008
1890
  "kind": "expression"
2009
1891
  }
2010
1892
  },
2011
1893
  {
2012
- "name": "outer-radius",
2013
- "description": "Outer edge as a share of the available box, from 0 to 1.",
2014
- "default": "0.75",
1894
+ "name": "close-field",
1895
+ "description": "Row field containing the closing value.",
1896
+ "default": "'close'",
2015
1897
  "value": {
2016
- "type": "number",
1898
+ "type": "string",
2017
1899
  "kind": "expression"
2018
1900
  }
2019
1901
  },
2020
1902
  {
2021
- "name": "start-angle",
2022
- "description": "Angle the first slice starts at, in degrees, counter-clockwise from three o'clock.",
2023
- "default": "90",
1903
+ "name": "low-field",
1904
+ "description": "Row field containing the lowest value.",
1905
+ "default": "'low'",
2024
1906
  "value": {
2025
- "type": "number",
1907
+ "type": "string",
2026
1908
  "kind": "expression"
2027
1909
  }
2028
1910
  },
2029
1911
  {
2030
- "name": "labels",
2031
- "description": "Where the slice labels are drawn, or `none` to leave them off.",
2032
- "default": "'none'",
1912
+ "name": "high-field",
1913
+ "description": "Row field containing the highest value.",
1914
+ "default": "'high'",
2033
1915
  "value": {
2034
- "type": "'none' | 'inside' | 'outside'",
1916
+ "type": "string",
2035
1917
  "kind": "expression"
2036
1918
  }
2037
1919
  },
2038
1920
  {
2039
- "name": "sort",
2040
- "description": "Orders the slices by value rather than keeping the data order.",
2041
- "default": "'none'",
1921
+ "name": "name",
1922
+ "description": "Name shown by an enabled legend for the complete OHLC series.",
1923
+ "default": "'Price'",
2042
1924
  "value": {
2043
- "type": "'none' | 'asc' | 'desc'",
1925
+ "type": "string",
2044
1926
  "kind": "expression"
2045
1927
  }
2046
1928
  },
@@ -2125,8 +2007,8 @@
2125
2007
  },
2126
2008
  {
2127
2009
  "name": "animation",
2128
- "description": "Whether the engine animates entry and updates. `none` by default: a chart fed by a live source should\nnot animate every tick. Named `animation` rather than `animate` because `HTMLElement.animate()` is a\nmethod every element already has, and shadowing it breaks the Web Animations API on the host.",
2129
- "default": "'none'",
2010
+ "description": "Whether the chart animates its initial draw. ECharts uses its native shape animation and uPlot uses a\nlightweight plot reveal; subsequent data updates stay immediate so a live source does not animate\nevery tick. Named `animation` rather than `animate` because `HTMLElement.animate()` is a method every\nelement already has, and shadowing it breaks the Web Animations API on the host.",
2011
+ "default": "'auto'",
2130
2012
  "value": {
2131
2013
  "type": "'none' | 'auto'",
2132
2014
  "kind": "expression"
@@ -2189,26 +2071,34 @@
2189
2071
  "js": {
2190
2072
  "properties": [
2191
2073
  {
2192
- "name": "innerRadius",
2193
- "description": "Hole in the middle, from 0 (a full pie) to 1. Anything above 0 makes it a donut.",
2074
+ "name": "openField",
2075
+ "description": "Row field containing the opening value.",
2194
2076
  "value": {
2195
- "type": "number",
2077
+ "type": "string",
2196
2078
  "kind": "expression"
2197
2079
  }
2198
2080
  },
2199
2081
  {
2200
- "name": "outerRadius",
2201
- "description": "Outer edge as a share of the available box, from 0 to 1.",
2082
+ "name": "closeField",
2083
+ "description": "Row field containing the closing value.",
2202
2084
  "value": {
2203
- "type": "number",
2085
+ "type": "string",
2204
2086
  "kind": "expression"
2205
2087
  }
2206
2088
  },
2207
2089
  {
2208
- "name": "startAngle",
2209
- "description": "Angle the first slice starts at, in degrees, counter-clockwise from three o'clock.",
2090
+ "name": "lowField",
2091
+ "description": "Row field containing the lowest value.",
2210
2092
  "value": {
2211
- "type": "number",
2093
+ "type": "string",
2094
+ "kind": "expression"
2095
+ }
2096
+ },
2097
+ {
2098
+ "name": "highField",
2099
+ "description": "Row field containing the highest value.",
2100
+ "value": {
2101
+ "type": "string",
2212
2102
  "kind": "expression"
2213
2103
  }
2214
2104
  },
@@ -2262,6 +2152,14 @@
2262
2152
  }
2263
2153
  ],
2264
2154
  "events": [
2155
+ {
2156
+ "name": "tooltip-change",
2157
+ "description": "Fired with the complete tooltip model as the pointer moves, and with `null` when it leaves. Used by `c2-chart-tooltip`.",
2158
+ "value": {
2159
+ "type": "CustomEvent<ChartTooltipContext | null>",
2160
+ "kind": "expression"
2161
+ }
2162
+ },
2265
2163
  {
2266
2164
  "name": "series-toggle",
2267
2165
  "description": "Fired when a legend entry is toggled. Does not bubble.",
@@ -2270,6 +2168,14 @@
2270
2168
  "kind": "expression"
2271
2169
  }
2272
2170
  },
2171
+ {
2172
+ "name": "legend-change",
2173
+ "description": "Fired when legend entries or visibility change. Used by `c2-chart-legend`.",
2174
+ "value": {
2175
+ "type": "CustomEvent<ChartLegendChangeEventDetail>",
2176
+ "kind": "expression"
2177
+ }
2178
+ },
2273
2179
  {
2274
2180
  "name": "range-change",
2275
2181
  "description": "Fired after the user zooms or brushes. `detail.min` and `detail.max` are the new x bounds. Does not bubble.",
@@ -2298,7 +2204,7 @@
2298
2204
  "name": "point-hover",
2299
2205
  "description": "Fired as the pointer moves between data points, and with a `null` detail when it leaves the plot. Does not bubble.",
2300
2206
  "value": {
2301
- "type": "CustomEvent<ChartPointEventDetail>",
2207
+ "type": "CustomEvent<ChartPointEventDetail | null>",
2302
2208
  "kind": "expression"
2303
2209
  }
2304
2210
  },
@@ -2314,64 +2220,73 @@
2314
2220
  }
2315
2221
  },
2316
2222
  {
2317
- "name": "c2-sparkline",
2318
- "description": "A chromeless trend line sized for a table cell, a list row or the `trend` slot of a `c2-stat`: no axes,\nno grid, no legend and no tooltip, so the whole box is the data.\n\n`@c2n/chart`",
2223
+ "name": "c2-chart-legend",
2224
+ "description": "A legend linked to a chart by id. Place it anywhere in the document to control the legend's layout\nindependently from the chart.\n\n`@c2n/chart`",
2319
2225
  "attributes": [
2320
2226
  {
2321
- "name": "type",
2322
- "description": "How the line is drawn.",
2323
- "default": "'line'",
2227
+ "name": "for",
2228
+ "description": "Id of the chart this element presents.",
2229
+ "default": "''",
2324
2230
  "value": {
2325
- "type": "'line' | 'area'",
2231
+ "type": "string",
2326
2232
  "kind": "expression"
2327
2233
  }
2328
- },
2234
+ }
2235
+ ],
2236
+ "js": {
2237
+ "properties": [],
2238
+ "events": []
2239
+ }
2240
+ },
2241
+ {
2242
+ "name": "c2-chart-series",
2243
+ "description": "One series of a chart, declared as a light-DOM child. The element renders nothing: it is a definition\nthe chart reads, the same way `c2-table` reads its `c2-table-column` children. Everything it exposes as\nan attribute can also be set as a property, and `format` is property-only.\n\n`@c2n/chart`",
2244
+ "attributes": [
2329
2245
  {
2330
- "name": "tone",
2331
- "description": "Colours the line by direction. `auto` compares the last value with the first and uses the positive or\nnegative tone; `neutral` keeps the palette colour.",
2332
- "default": "'neutral'",
2246
+ "name": "field",
2247
+ "description": "Key of the value in the row object; may be a dotted path such as `stats.cpu`.",
2248
+ "default": "''",
2333
2249
  "value": {
2334
- "type": "'auto' | 'positive' | 'negative' | 'neutral'",
2250
+ "type": "string",
2335
2251
  "kind": "expression"
2336
2252
  }
2337
2253
  },
2338
2254
  {
2339
- "name": "grid",
2340
- "description": "Which grid lines are drawn. A string rather than a boolean because a boolean attribute reads as `true`\nwhenever it is present — `grid=\"false\"` in markup would turn the grid *on*, and there would be no way to\nturn it off from HTML at all. `y` (the default) draws the horizontal lines, matching `axes`' shape.",
2341
- "default": "'y'",
2255
+ "name": "label",
2256
+ "description": "Legend and tooltip label. Falls back to the field name.",
2342
2257
  "value": {
2343
- "type": "'both' | 'x' | 'y' | 'none'",
2258
+ "type": "string | undefined",
2344
2259
  "kind": "expression"
2345
2260
  }
2346
2261
  },
2347
2262
  {
2348
- "name": "axes",
2349
- "description": "Which axes are drawn.",
2350
- "default": "'both'",
2263
+ "name": "color",
2264
+ "description": "Explicit colour. Falls back to this series' slot in the chart's palette.",
2351
2265
  "value": {
2352
- "type": "'both' | 'x' | 'y' | 'none'",
2266
+ "type": "string | undefined",
2353
2267
  "kind": "expression"
2354
2268
  }
2355
2269
  },
2356
2270
  {
2357
- "name": "y-min",
2358
- "description": "Lower bound of the y scale. Auto-ranged when unset.",
2271
+ "name": "line-width",
2272
+ "description": "Stroke width in pixels. Falls back to `--c2-chart__line--width`.",
2359
2273
  "value": {
2360
2274
  "type": "number | undefined",
2361
2275
  "kind": "expression"
2362
2276
  }
2363
2277
  },
2364
2278
  {
2365
- "name": "y-max",
2366
- "description": "Upper bound of the y scale. Auto-ranged when unset.",
2279
+ "name": "axis",
2280
+ "description": "Which y axis the series is drawn against.",
2281
+ "default": "'left'",
2367
2282
  "value": {
2368
- "type": "number | undefined",
2283
+ "type": "'left' | 'right'",
2369
2284
  "kind": "expression"
2370
2285
  }
2371
2286
  },
2372
2287
  {
2373
- "name": "zoom",
2374
- "description": "Lets the user drag horizontally to zoom the x scale.",
2288
+ "name": "span-gaps",
2289
+ "description": "Joins across gaps instead of breaking the line.",
2375
2290
  "default": "false",
2376
2291
  "value": {
2377
2292
  "type": "boolean",
@@ -2379,11 +2294,182 @@
2379
2294
  }
2380
2295
  },
2381
2296
  {
2382
- "name": "cursor",
2383
- "description": "The cursor crosshair.",
2384
- "default": "'x'",
2297
+ "name": "hidden",
2298
+ "description": "Leaves the series out of the chart without removing the definition.",
2299
+ "default": "false",
2385
2300
  "value": {
2386
- "type": "'x' | 'none'",
2301
+ "type": "boolean",
2302
+ "kind": "expression"
2303
+ }
2304
+ }
2305
+ ],
2306
+ "js": {
2307
+ "properties": [
2308
+ {
2309
+ "name": "lineWidth",
2310
+ "description": "Stroke width in pixels. Falls back to `--c2-chart__line--width`.",
2311
+ "value": {
2312
+ "type": "number | undefined",
2313
+ "kind": "expression"
2314
+ }
2315
+ },
2316
+ {
2317
+ "name": "spanGaps",
2318
+ "description": "Joins across gaps instead of breaking the line.",
2319
+ "value": {
2320
+ "type": "boolean",
2321
+ "kind": "expression"
2322
+ }
2323
+ }
2324
+ ],
2325
+ "events": [
2326
+ {
2327
+ "name": "SERIES_CHANGE_EVENT",
2328
+ "value": {
2329
+ "type": "CustomEvent",
2330
+ "kind": "expression"
2331
+ }
2332
+ }
2333
+ ]
2334
+ }
2335
+ },
2336
+ {
2337
+ "name": "c2-chart-tooltip",
2338
+ "description": "A tooltip linked to a chart by id. It can float beside the hovered point or render inline wherever it is\nplaced in the document.\n\n`@c2n/chart`",
2339
+ "attributes": [
2340
+ {
2341
+ "name": "position",
2342
+ "description": "Whether the tooltip follows the hovered point or occupies its authored HTML position.",
2343
+ "default": "'floating'",
2344
+ "value": {
2345
+ "type": "'floating' | 'inline'",
2346
+ "kind": "expression"
2347
+ }
2348
+ },
2349
+ {
2350
+ "name": "placement",
2351
+ "description": "Preferred side of the hovered point when `position=\"floating\"`. Flips at viewport edges.",
2352
+ "default": "'top'",
2353
+ "value": {
2354
+ "type": "'top' | 'bottom' | 'start' | 'end'",
2355
+ "kind": "expression"
2356
+ }
2357
+ },
2358
+ {
2359
+ "name": "for",
2360
+ "description": "Id of the chart this element presents.",
2361
+ "default": "''",
2362
+ "value": {
2363
+ "type": "string",
2364
+ "kind": "expression"
2365
+ }
2366
+ }
2367
+ ],
2368
+ "js": {
2369
+ "properties": [],
2370
+ "events": []
2371
+ }
2372
+ },
2373
+ {
2374
+ "name": "c2-gauge-chart",
2375
+ "description": "A radial gauge drawn by ECharts. Use one row and one series for a current value; `label-field` names it.\n\n`@c2n/chart`",
2376
+ "attributes": [
2377
+ {
2378
+ "name": "min",
2379
+ "description": "Lowest value on the gauge scale.",
2380
+ "default": "0",
2381
+ "value": {
2382
+ "type": "number",
2383
+ "kind": "expression"
2384
+ }
2385
+ },
2386
+ {
2387
+ "name": "max",
2388
+ "description": "Highest value on the gauge scale.",
2389
+ "default": "100",
2390
+ "value": {
2391
+ "type": "number",
2392
+ "kind": "expression"
2393
+ }
2394
+ },
2395
+ {
2396
+ "name": "start-angle",
2397
+ "description": "Angle where the arc starts, in degrees counter-clockwise from three o'clock.",
2398
+ "default": "225",
2399
+ "value": {
2400
+ "type": "number",
2401
+ "kind": "expression"
2402
+ }
2403
+ },
2404
+ {
2405
+ "name": "end-angle",
2406
+ "description": "Angle where the arc ends, in degrees counter-clockwise from three o'clock.",
2407
+ "default": "-45",
2408
+ "value": {
2409
+ "type": "number",
2410
+ "kind": "expression"
2411
+ }
2412
+ },
2413
+ {
2414
+ "name": "split-number",
2415
+ "description": "Number of labelled divisions around the arc.",
2416
+ "default": "5",
2417
+ "value": {
2418
+ "type": "number",
2419
+ "kind": "expression"
2420
+ }
2421
+ },
2422
+ {
2423
+ "name": "precision",
2424
+ "description": "Maximum number of decimal places shown in the current value.",
2425
+ "default": "0",
2426
+ "value": {
2427
+ "type": "number",
2428
+ "kind": "expression"
2429
+ }
2430
+ },
2431
+ {
2432
+ "name": "value-suffix",
2433
+ "description": "Text appended to the current value and scale labels, such as `%`.",
2434
+ "default": "''",
2435
+ "value": {
2436
+ "type": "string",
2437
+ "kind": "expression"
2438
+ }
2439
+ },
2440
+ {
2441
+ "name": "progress",
2442
+ "description": "Whether to draw the filled progress arc up to the current value.",
2443
+ "default": "'show'",
2444
+ "value": {
2445
+ "type": "'show' | 'none'",
2446
+ "kind": "expression"
2447
+ }
2448
+ },
2449
+ {
2450
+ "name": "pointer",
2451
+ "description": "Whether to draw the radial pointer.",
2452
+ "default": "'show'",
2453
+ "value": {
2454
+ "type": "'show' | 'none'",
2455
+ "kind": "expression"
2456
+ }
2457
+ },
2458
+ {
2459
+ "name": "marks",
2460
+ "description": "Whether to draw the small axis ticks and division lines around the arc.",
2461
+ "default": "'show'",
2462
+ "value": {
2463
+ "type": "'show' | 'none'",
2464
+ "kind": "expression"
2465
+ }
2466
+ },
2467
+ {
2468
+ "name": "renderer",
2469
+ "description": "Which ECharts renderer to use. SVG prints and scales crisply; canvas is faster with many marks.",
2470
+ "default": "'canvas'",
2471
+ "value": {
2472
+ "type": "'canvas' | 'svg'",
2387
2473
  "kind": "expression"
2388
2474
  }
2389
2475
  },
@@ -2459,8 +2545,366 @@
2459
2545
  },
2460
2546
  {
2461
2547
  "name": "animation",
2462
- "description": "Whether the engine animates entry and updates. `none` by default: a chart fed by a live source should\nnot animate every tick. Named `animation` rather than `animate` because `HTMLElement.animate()` is a\nmethod every element already has, and shadowing it breaks the Web Animations API on the host.",
2463
- "default": "'none'",
2548
+ "description": "Whether the chart animates its initial draw. ECharts uses its native shape animation and uPlot uses a\nlightweight plot reveal; subsequent data updates stay immediate so a live source does not animate\nevery tick. Named `animation` rather than `animate` because `HTMLElement.animate()` is a method every\nelement already has, and shadowing it breaks the Web Animations API on the host.",
2549
+ "default": "'auto'",
2550
+ "value": {
2551
+ "type": "'none' | 'auto'",
2552
+ "kind": "expression"
2553
+ }
2554
+ },
2555
+ {
2556
+ "name": "locale",
2557
+ "description": "BCP 47 locale for the axis and tooltip formatting. Defaults to the browser locale.",
2558
+ "value": {
2559
+ "type": "string | undefined",
2560
+ "kind": "expression"
2561
+ }
2562
+ },
2563
+ {
2564
+ "name": "loading",
2565
+ "description": "Shows the loading state instead of the plot.",
2566
+ "default": "false",
2567
+ "value": {
2568
+ "type": "boolean",
2569
+ "kind": "expression"
2570
+ }
2571
+ },
2572
+ {
2573
+ "name": "error",
2574
+ "description": "Shows an error message instead of the plot.",
2575
+ "default": "''",
2576
+ "value": {
2577
+ "type": "string",
2578
+ "kind": "expression"
2579
+ }
2580
+ },
2581
+ {
2582
+ "name": "empty-message",
2583
+ "description": "Replaces the built-in \"no data\" text.",
2584
+ "default": "'No data'",
2585
+ "value": {
2586
+ "type": "string",
2587
+ "kind": "expression"
2588
+ }
2589
+ },
2590
+ {
2591
+ "name": "max-points",
2592
+ "description": "Caps how many points a streaming chart keeps; older points fall off the front. `0` keeps everything.",
2593
+ "default": "0",
2594
+ "value": {
2595
+ "type": "number",
2596
+ "kind": "expression"
2597
+ }
2598
+ },
2599
+ {
2600
+ "name": "lazy-render",
2601
+ "description": "Defers loading the engine until the host first scrolls into view.",
2602
+ "default": "false",
2603
+ "value": {
2604
+ "type": "boolean",
2605
+ "kind": "expression"
2606
+ }
2607
+ }
2608
+ ],
2609
+ "js": {
2610
+ "properties": [
2611
+ {
2612
+ "name": "startAngle",
2613
+ "description": "Angle where the arc starts, in degrees counter-clockwise from three o'clock.",
2614
+ "value": {
2615
+ "type": "number",
2616
+ "kind": "expression"
2617
+ }
2618
+ },
2619
+ {
2620
+ "name": "endAngle",
2621
+ "description": "Angle where the arc ends, in degrees counter-clockwise from three o'clock.",
2622
+ "value": {
2623
+ "type": "number",
2624
+ "kind": "expression"
2625
+ }
2626
+ },
2627
+ {
2628
+ "name": "splitNumber",
2629
+ "description": "Number of labelled divisions around the arc.",
2630
+ "value": {
2631
+ "type": "number",
2632
+ "kind": "expression"
2633
+ }
2634
+ },
2635
+ {
2636
+ "name": "valueSuffix",
2637
+ "description": "Text appended to the current value and scale labels, such as `%`.",
2638
+ "value": {
2639
+ "type": "string",
2640
+ "kind": "expression"
2641
+ }
2642
+ },
2643
+ {
2644
+ "name": "xField",
2645
+ "description": "Row field holding the x value; may be a dotted path. Defaults to the row index.",
2646
+ "value": {
2647
+ "type": "string",
2648
+ "kind": "expression"
2649
+ }
2650
+ },
2651
+ {
2652
+ "name": "labelField",
2653
+ "description": "Row field holding the category label, for charts that name their slices.",
2654
+ "value": {
2655
+ "type": "string",
2656
+ "kind": "expression"
2657
+ }
2658
+ },
2659
+ {
2660
+ "name": "xType",
2661
+ "description": "How x values are interpreted, which decides the axis and the tooltip format.",
2662
+ "value": {
2663
+ "type": "'time' | 'linear' | 'category'",
2664
+ "kind": "expression"
2665
+ }
2666
+ },
2667
+ {
2668
+ "name": "emptyMessage",
2669
+ "description": "Replaces the built-in \"no data\" text.",
2670
+ "value": {
2671
+ "type": "string",
2672
+ "kind": "expression"
2673
+ }
2674
+ },
2675
+ {
2676
+ "name": "maxPoints",
2677
+ "description": "Caps how many points a streaming chart keeps; older points fall off the front. `0` keeps everything.",
2678
+ "value": {
2679
+ "type": "number",
2680
+ "kind": "expression"
2681
+ }
2682
+ },
2683
+ {
2684
+ "name": "lazyRender",
2685
+ "description": "Defers loading the engine until the host first scrolls into view.",
2686
+ "value": {
2687
+ "type": "boolean",
2688
+ "kind": "expression"
2689
+ }
2690
+ }
2691
+ ],
2692
+ "events": [
2693
+ {
2694
+ "name": "tooltip-change",
2695
+ "description": "Fired with the complete tooltip model as the pointer moves, and with `null` when it leaves. Used by `c2-chart-tooltip`.",
2696
+ "value": {
2697
+ "type": "CustomEvent<ChartTooltipContext | null>",
2698
+ "kind": "expression"
2699
+ }
2700
+ },
2701
+ {
2702
+ "name": "series-toggle",
2703
+ "description": "Fired when a legend entry is toggled. Does not bubble.",
2704
+ "value": {
2705
+ "type": "CustomEvent<ChartSeriesToggleEventDetail>",
2706
+ "kind": "expression"
2707
+ }
2708
+ },
2709
+ {
2710
+ "name": "legend-change",
2711
+ "description": "Fired when legend entries or visibility change. Used by `c2-chart-legend`.",
2712
+ "value": {
2713
+ "type": "CustomEvent<ChartLegendChangeEventDetail>",
2714
+ "kind": "expression"
2715
+ }
2716
+ },
2717
+ {
2718
+ "name": "range-change",
2719
+ "description": "Fired after the user zooms or brushes. `detail.min` and `detail.max` are the new x bounds. Does not bubble.",
2720
+ "value": {
2721
+ "type": "CustomEvent<ChartRangeEventDetail>",
2722
+ "kind": "expression"
2723
+ }
2724
+ },
2725
+ {
2726
+ "name": "chart-ready",
2727
+ "description": "Fired after the engine has loaded and drawn for the first time. The host also gains `data-chart-ready`, which is what a test should wait on.",
2728
+ "value": {
2729
+ "type": "CustomEvent<{ engine: string }>",
2730
+ "kind": "expression"
2731
+ }
2732
+ },
2733
+ {
2734
+ "name": "chart-error",
2735
+ "description": "Fired when the engine fails to load or to draw. `detail.error` is the underlying failure.",
2736
+ "value": {
2737
+ "type": "CustomEvent<{ error: unknown }>",
2738
+ "kind": "expression"
2739
+ }
2740
+ },
2741
+ {
2742
+ "name": "point-hover",
2743
+ "description": "Fired as the pointer moves between data points, and with a `null` detail when it leaves the plot. Does not bubble.",
2744
+ "value": {
2745
+ "type": "CustomEvent<ChartPointEventDetail | null>",
2746
+ "kind": "expression"
2747
+ }
2748
+ },
2749
+ {
2750
+ "name": "point-click",
2751
+ "description": "Fired when a datum is clicked. Does not bubble: several components fire point events, so a listener belongs on the element itself.",
2752
+ "value": {
2753
+ "type": "CustomEvent<ChartPointEventDetail>",
2754
+ "kind": "expression"
2755
+ }
2756
+ }
2757
+ ]
2758
+ }
2759
+ },
2760
+ {
2761
+ "name": "c2-line-chart",
2762
+ "description": "A line chart over a time or numeric x axis, drawn on canvas by uPlot.\n\n`@c2n/chart`",
2763
+ "attributes": [
2764
+ {
2765
+ "name": "curve",
2766
+ "description": "Interpolation between points.",
2767
+ "default": "'linear'",
2768
+ "value": {
2769
+ "type": "'linear' | 'smooth' | 'step'",
2770
+ "kind": "expression"
2771
+ }
2772
+ },
2773
+ {
2774
+ "name": "points",
2775
+ "description": "When point markers are drawn. `auto` lets uPlot show them once points are far enough apart.",
2776
+ "default": "'auto'",
2777
+ "value": {
2778
+ "type": "'auto' | 'always' | 'none'",
2779
+ "kind": "expression"
2780
+ }
2781
+ },
2782
+ {
2783
+ "name": "grid",
2784
+ "description": "Which grid lines are drawn. A string rather than a boolean because a boolean attribute reads as `true`\nwhenever it is present — `grid=\"false\"` in markup would turn the grid *on*, and there would be no way to\nturn it off from HTML at all. `y` (the default) draws the horizontal lines, matching `axes`' shape.",
2785
+ "default": "'y'",
2786
+ "value": {
2787
+ "type": "'both' | 'x' | 'y' | 'none'",
2788
+ "kind": "expression"
2789
+ }
2790
+ },
2791
+ {
2792
+ "name": "axes",
2793
+ "description": "Which axes are drawn.",
2794
+ "default": "'both'",
2795
+ "value": {
2796
+ "type": "'both' | 'x' | 'y' | 'none'",
2797
+ "kind": "expression"
2798
+ }
2799
+ },
2800
+ {
2801
+ "name": "y-min",
2802
+ "description": "Lower bound of the y scale. Auto-ranged when unset.",
2803
+ "value": {
2804
+ "type": "number | undefined",
2805
+ "kind": "expression"
2806
+ }
2807
+ },
2808
+ {
2809
+ "name": "y-max",
2810
+ "description": "Upper bound of the y scale. Auto-ranged when unset.",
2811
+ "value": {
2812
+ "type": "number | undefined",
2813
+ "kind": "expression"
2814
+ }
2815
+ },
2816
+ {
2817
+ "name": "zoom",
2818
+ "description": "Lets the user drag horizontally to zoom the x scale.",
2819
+ "default": "false",
2820
+ "value": {
2821
+ "type": "boolean",
2822
+ "kind": "expression"
2823
+ }
2824
+ },
2825
+ {
2826
+ "name": "cursor",
2827
+ "description": "The cursor crosshair.",
2828
+ "default": "'x'",
2829
+ "value": {
2830
+ "type": "'x' | 'none'",
2831
+ "kind": "expression"
2832
+ }
2833
+ },
2834
+ {
2835
+ "name": "data",
2836
+ "description": "The data to plot. Row objects, a bare `number[]`, columnar `[xs, ys…]`, or an already-normalised\nframe. Compared by identity: replace the array, or bump `revision` after mutating it in place.",
2837
+ "value": {
2838
+ "type": "ChartInput | undefined",
2839
+ "kind": "expression"
2840
+ }
2841
+ },
2842
+ {
2843
+ "name": "revision",
2844
+ "description": "Bump after mutating `data` in place. The cheap escape hatch for a large buffer you own.",
2845
+ "default": "0",
2846
+ "value": {
2847
+ "type": "number",
2848
+ "kind": "expression"
2849
+ }
2850
+ },
2851
+ {
2852
+ "name": "series",
2853
+ "description": "Series definitions, as an alternative to `c2-chart-series` children. Children win when both are set.",
2854
+ "value": {
2855
+ "type": "ChartSeriesConfig[] | undefined",
2856
+ "kind": "expression"
2857
+ }
2858
+ },
2859
+ {
2860
+ "name": "x-field",
2861
+ "description": "Row field holding the x value; may be a dotted path. Defaults to the row index.",
2862
+ "default": "''",
2863
+ "value": {
2864
+ "type": "string",
2865
+ "kind": "expression"
2866
+ }
2867
+ },
2868
+ {
2869
+ "name": "label-field",
2870
+ "description": "Row field holding the category label, for charts that name their slices.",
2871
+ "default": "''",
2872
+ "value": {
2873
+ "type": "string",
2874
+ "kind": "expression"
2875
+ }
2876
+ },
2877
+ {
2878
+ "name": "x-type",
2879
+ "description": "How x values are interpreted, which decides the axis and the tooltip format.",
2880
+ "default": "'linear'",
2881
+ "value": {
2882
+ "type": "'time' | 'linear' | 'category'",
2883
+ "kind": "expression"
2884
+ }
2885
+ },
2886
+ {
2887
+ "name": "legend",
2888
+ "description": "Where the legend sits, or `none` to hide it. Shown by default: a chart with more than one series is\nunreadable without one, and a single-series chart simply renders a one-entry legend.",
2889
+ "default": "'bottom'",
2890
+ "value": {
2891
+ "type": "'none' | 'top' | 'bottom' | 'start' | 'end'",
2892
+ "kind": "expression"
2893
+ }
2894
+ },
2895
+ {
2896
+ "name": "tooltip",
2897
+ "description": "Whether the tooltip follows the whole x position or only the hovered datum.",
2898
+ "default": "'axis'",
2899
+ "value": {
2900
+ "type": "'none' | 'item' | 'axis'",
2901
+ "kind": "expression"
2902
+ }
2903
+ },
2904
+ {
2905
+ "name": "animation",
2906
+ "description": "Whether the chart animates its initial draw. ECharts uses its native shape animation and uPlot uses a\nlightweight plot reveal; subsequent data updates stay immediate so a live source does not animate\nevery tick. Named `animation` rather than `animate` because `HTMLElement.animate()` is a method every\nelement already has, and shadowing it breaks the Web Animations API on the host.",
2907
+ "default": "'auto'",
2464
2908
  "value": {
2465
2909
  "type": "'none' | 'auto'",
2466
2910
  "kind": "expression"
@@ -2588,6 +3032,14 @@
2588
3032
  }
2589
3033
  ],
2590
3034
  "events": [
3035
+ {
3036
+ "name": "tooltip-change",
3037
+ "description": "Fired with the complete tooltip model as the pointer moves, and with `null` when it leaves. Used by `c2-chart-tooltip`.",
3038
+ "value": {
3039
+ "type": "CustomEvent<ChartTooltipContext | null>",
3040
+ "kind": "expression"
3041
+ }
3042
+ },
2591
3043
  {
2592
3044
  "name": "series-toggle",
2593
3045
  "description": "Fired when a legend entry is toggled. Does not bubble.",
@@ -2596,6 +3048,14 @@
2596
3048
  "kind": "expression"
2597
3049
  }
2598
3050
  },
3051
+ {
3052
+ "name": "legend-change",
3053
+ "description": "Fired when legend entries or visibility change. Used by `c2-chart-legend`.",
3054
+ "value": {
3055
+ "type": "CustomEvent<ChartLegendChangeEventDetail>",
3056
+ "kind": "expression"
3057
+ }
3058
+ },
2599
3059
  {
2600
3060
  "name": "range-change",
2601
3061
  "description": "Fired after the user zooms or brushes. `detail.min` and `detail.max` are the new x bounds. Does not bubble.",
@@ -2623,10 +3083,1370 @@
2623
3083
  {
2624
3084
  "name": "point-hover",
2625
3085
  "description": "Fired as the pointer moves between data points, and with a `null` detail when it leaves the plot. Does not bubble.",
3086
+ "value": {
3087
+ "type": "CustomEvent<ChartPointEventDetail | null>",
3088
+ "kind": "expression"
3089
+ }
3090
+ },
3091
+ {
3092
+ "name": "point-click",
3093
+ "description": "Fired when a datum is clicked. Does not bubble: several components fire point events, so a listener belongs on the element itself.",
2626
3094
  "value": {
2627
3095
  "type": "CustomEvent<ChartPointEventDetail>",
2628
3096
  "kind": "expression"
2629
3097
  }
3098
+ }
3099
+ ]
3100
+ }
3101
+ },
3102
+ {
3103
+ "name": "c2-pie-chart",
3104
+ "description": "A pie or donut chart, drawn by ECharts. `label-field` names each slice and the single series supplies\nits value, so one row is one slice.\n\n`@c2n/chart`",
3105
+ "attributes": [
3106
+ {
3107
+ "name": "inner-radius",
3108
+ "description": "Hole in the middle, from 0 (a full pie) to 1. Anything above 0 makes it a donut.",
3109
+ "default": "0",
3110
+ "value": {
3111
+ "type": "number",
3112
+ "kind": "expression"
3113
+ }
3114
+ },
3115
+ {
3116
+ "name": "outer-radius",
3117
+ "description": "Outer edge as a share of the available box, from 0 to 1.",
3118
+ "default": "0.75",
3119
+ "value": {
3120
+ "type": "number",
3121
+ "kind": "expression"
3122
+ }
3123
+ },
3124
+ {
3125
+ "name": "start-angle",
3126
+ "description": "Angle the first slice starts at, in degrees, counter-clockwise from three o'clock.",
3127
+ "default": "90",
3128
+ "value": {
3129
+ "type": "number",
3130
+ "kind": "expression"
3131
+ }
3132
+ },
3133
+ {
3134
+ "name": "labels",
3135
+ "description": "Where the slice labels are drawn, or `none` to leave them off.",
3136
+ "default": "'none'",
3137
+ "value": {
3138
+ "type": "'none' | 'inside' | 'outside'",
3139
+ "kind": "expression"
3140
+ }
3141
+ },
3142
+ {
3143
+ "name": "label-content",
3144
+ "description": "Content shown by visible slice labels.",
3145
+ "default": "'name'",
3146
+ "value": {
3147
+ "type": "'name' | 'value' | 'percent' | 'name-percent'",
3148
+ "kind": "expression"
3149
+ }
3150
+ },
3151
+ {
3152
+ "name": "sort",
3153
+ "description": "Orders the slices by value rather than keeping the data order.",
3154
+ "default": "'none'",
3155
+ "value": {
3156
+ "type": "'none' | 'asc' | 'desc'",
3157
+ "kind": "expression"
3158
+ }
3159
+ },
3160
+ {
3161
+ "name": "renderer",
3162
+ "description": "Which ECharts renderer to use. SVG prints and scales crisply; canvas is faster with many marks.",
3163
+ "default": "'canvas'",
3164
+ "value": {
3165
+ "type": "'canvas' | 'svg'",
3166
+ "kind": "expression"
3167
+ }
3168
+ },
3169
+ {
3170
+ "name": "data",
3171
+ "description": "The data to plot. Row objects, a bare `number[]`, columnar `[xs, ys…]`, or an already-normalised\nframe. Compared by identity: replace the array, or bump `revision` after mutating it in place.",
3172
+ "value": {
3173
+ "type": "ChartInput | undefined",
3174
+ "kind": "expression"
3175
+ }
3176
+ },
3177
+ {
3178
+ "name": "revision",
3179
+ "description": "Bump after mutating `data` in place. The cheap escape hatch for a large buffer you own.",
3180
+ "default": "0",
3181
+ "value": {
3182
+ "type": "number",
3183
+ "kind": "expression"
3184
+ }
3185
+ },
3186
+ {
3187
+ "name": "series",
3188
+ "description": "Series definitions, as an alternative to `c2-chart-series` children. Children win when both are set.",
3189
+ "value": {
3190
+ "type": "ChartSeriesConfig[] | undefined",
3191
+ "kind": "expression"
3192
+ }
3193
+ },
3194
+ {
3195
+ "name": "x-field",
3196
+ "description": "Row field holding the x value; may be a dotted path. Defaults to the row index.",
3197
+ "default": "''",
3198
+ "value": {
3199
+ "type": "string",
3200
+ "kind": "expression"
3201
+ }
3202
+ },
3203
+ {
3204
+ "name": "label-field",
3205
+ "description": "Row field holding the category label, for charts that name their slices.",
3206
+ "default": "''",
3207
+ "value": {
3208
+ "type": "string",
3209
+ "kind": "expression"
3210
+ }
3211
+ },
3212
+ {
3213
+ "name": "x-type",
3214
+ "description": "How x values are interpreted, which decides the axis and the tooltip format.",
3215
+ "default": "'linear'",
3216
+ "value": {
3217
+ "type": "'time' | 'linear' | 'category'",
3218
+ "kind": "expression"
3219
+ }
3220
+ },
3221
+ {
3222
+ "name": "legend",
3223
+ "description": "Where the legend sits, or `none` to hide it. Shown by default: a chart with more than one series is\nunreadable without one, and a single-series chart simply renders a one-entry legend.",
3224
+ "default": "'bottom'",
3225
+ "value": {
3226
+ "type": "'none' | 'top' | 'bottom' | 'start' | 'end'",
3227
+ "kind": "expression"
3228
+ }
3229
+ },
3230
+ {
3231
+ "name": "tooltip",
3232
+ "description": "Whether the tooltip follows the whole x position or only the hovered datum.",
3233
+ "default": "'axis'",
3234
+ "value": {
3235
+ "type": "'none' | 'item' | 'axis'",
3236
+ "kind": "expression"
3237
+ }
3238
+ },
3239
+ {
3240
+ "name": "animation",
3241
+ "description": "Whether the chart animates its initial draw. ECharts uses its native shape animation and uPlot uses a\nlightweight plot reveal; subsequent data updates stay immediate so a live source does not animate\nevery tick. Named `animation` rather than `animate` because `HTMLElement.animate()` is a method every\nelement already has, and shadowing it breaks the Web Animations API on the host.",
3242
+ "default": "'auto'",
3243
+ "value": {
3244
+ "type": "'none' | 'auto'",
3245
+ "kind": "expression"
3246
+ }
3247
+ },
3248
+ {
3249
+ "name": "locale",
3250
+ "description": "BCP 47 locale for the axis and tooltip formatting. Defaults to the browser locale.",
3251
+ "value": {
3252
+ "type": "string | undefined",
3253
+ "kind": "expression"
3254
+ }
3255
+ },
3256
+ {
3257
+ "name": "loading",
3258
+ "description": "Shows the loading state instead of the plot.",
3259
+ "default": "false",
3260
+ "value": {
3261
+ "type": "boolean",
3262
+ "kind": "expression"
3263
+ }
3264
+ },
3265
+ {
3266
+ "name": "error",
3267
+ "description": "Shows an error message instead of the plot.",
3268
+ "default": "''",
3269
+ "value": {
3270
+ "type": "string",
3271
+ "kind": "expression"
3272
+ }
3273
+ },
3274
+ {
3275
+ "name": "empty-message",
3276
+ "description": "Replaces the built-in \"no data\" text.",
3277
+ "default": "'No data'",
3278
+ "value": {
3279
+ "type": "string",
3280
+ "kind": "expression"
3281
+ }
3282
+ },
3283
+ {
3284
+ "name": "max-points",
3285
+ "description": "Caps how many points a streaming chart keeps; older points fall off the front. `0` keeps everything.",
3286
+ "default": "0",
3287
+ "value": {
3288
+ "type": "number",
3289
+ "kind": "expression"
3290
+ }
3291
+ },
3292
+ {
3293
+ "name": "lazy-render",
3294
+ "description": "Defers loading the engine until the host first scrolls into view.",
3295
+ "default": "false",
3296
+ "value": {
3297
+ "type": "boolean",
3298
+ "kind": "expression"
3299
+ }
3300
+ }
3301
+ ],
3302
+ "js": {
3303
+ "properties": [
3304
+ {
3305
+ "name": "innerRadius",
3306
+ "description": "Hole in the middle, from 0 (a full pie) to 1. Anything above 0 makes it a donut.",
3307
+ "value": {
3308
+ "type": "number",
3309
+ "kind": "expression"
3310
+ }
3311
+ },
3312
+ {
3313
+ "name": "outerRadius",
3314
+ "description": "Outer edge as a share of the available box, from 0 to 1.",
3315
+ "value": {
3316
+ "type": "number",
3317
+ "kind": "expression"
3318
+ }
3319
+ },
3320
+ {
3321
+ "name": "startAngle",
3322
+ "description": "Angle the first slice starts at, in degrees, counter-clockwise from three o'clock.",
3323
+ "value": {
3324
+ "type": "number",
3325
+ "kind": "expression"
3326
+ }
3327
+ },
3328
+ {
3329
+ "name": "labelContent",
3330
+ "description": "Content shown by visible slice labels.",
3331
+ "value": {
3332
+ "type": "'name' | 'value' | 'percent' | 'name-percent'",
3333
+ "kind": "expression"
3334
+ }
3335
+ },
3336
+ {
3337
+ "name": "xField",
3338
+ "description": "Row field holding the x value; may be a dotted path. Defaults to the row index.",
3339
+ "value": {
3340
+ "type": "string",
3341
+ "kind": "expression"
3342
+ }
3343
+ },
3344
+ {
3345
+ "name": "labelField",
3346
+ "description": "Row field holding the category label, for charts that name their slices.",
3347
+ "value": {
3348
+ "type": "string",
3349
+ "kind": "expression"
3350
+ }
3351
+ },
3352
+ {
3353
+ "name": "xType",
3354
+ "description": "How x values are interpreted, which decides the axis and the tooltip format.",
3355
+ "value": {
3356
+ "type": "'time' | 'linear' | 'category'",
3357
+ "kind": "expression"
3358
+ }
3359
+ },
3360
+ {
3361
+ "name": "emptyMessage",
3362
+ "description": "Replaces the built-in \"no data\" text.",
3363
+ "value": {
3364
+ "type": "string",
3365
+ "kind": "expression"
3366
+ }
3367
+ },
3368
+ {
3369
+ "name": "maxPoints",
3370
+ "description": "Caps how many points a streaming chart keeps; older points fall off the front. `0` keeps everything.",
3371
+ "value": {
3372
+ "type": "number",
3373
+ "kind": "expression"
3374
+ }
3375
+ },
3376
+ {
3377
+ "name": "lazyRender",
3378
+ "description": "Defers loading the engine until the host first scrolls into view.",
3379
+ "value": {
3380
+ "type": "boolean",
3381
+ "kind": "expression"
3382
+ }
3383
+ }
3384
+ ],
3385
+ "events": [
3386
+ {
3387
+ "name": "tooltip-change",
3388
+ "description": "Fired with the complete tooltip model as the pointer moves, and with `null` when it leaves. Used by `c2-chart-tooltip`.",
3389
+ "value": {
3390
+ "type": "CustomEvent<ChartTooltipContext | null>",
3391
+ "kind": "expression"
3392
+ }
3393
+ },
3394
+ {
3395
+ "name": "series-toggle",
3396
+ "description": "Fired when a legend entry is toggled. Does not bubble.",
3397
+ "value": {
3398
+ "type": "CustomEvent<ChartSeriesToggleEventDetail>",
3399
+ "kind": "expression"
3400
+ }
3401
+ },
3402
+ {
3403
+ "name": "legend-change",
3404
+ "description": "Fired when legend entries or visibility change. Used by `c2-chart-legend`.",
3405
+ "value": {
3406
+ "type": "CustomEvent<ChartLegendChangeEventDetail>",
3407
+ "kind": "expression"
3408
+ }
3409
+ },
3410
+ {
3411
+ "name": "range-change",
3412
+ "description": "Fired after the user zooms or brushes. `detail.min` and `detail.max` are the new x bounds. Does not bubble.",
3413
+ "value": {
3414
+ "type": "CustomEvent<ChartRangeEventDetail>",
3415
+ "kind": "expression"
3416
+ }
3417
+ },
3418
+ {
3419
+ "name": "chart-ready",
3420
+ "description": "Fired after the engine has loaded and drawn for the first time. The host also gains `data-chart-ready`, which is what a test should wait on.",
3421
+ "value": {
3422
+ "type": "CustomEvent<{ engine: string }>",
3423
+ "kind": "expression"
3424
+ }
3425
+ },
3426
+ {
3427
+ "name": "chart-error",
3428
+ "description": "Fired when the engine fails to load or to draw. `detail.error` is the underlying failure.",
3429
+ "value": {
3430
+ "type": "CustomEvent<{ error: unknown }>",
3431
+ "kind": "expression"
3432
+ }
3433
+ },
3434
+ {
3435
+ "name": "point-hover",
3436
+ "description": "Fired as the pointer moves between data points, and with a `null` detail when it leaves the plot. Does not bubble.",
3437
+ "value": {
3438
+ "type": "CustomEvent<ChartPointEventDetail | null>",
3439
+ "kind": "expression"
3440
+ }
3441
+ },
3442
+ {
3443
+ "name": "point-click",
3444
+ "description": "Fired when a datum is clicked. Does not bubble: several components fire point events, so a listener belongs on the element itself.",
3445
+ "value": {
3446
+ "type": "CustomEvent<ChartPointEventDetail>",
3447
+ "kind": "expression"
3448
+ }
3449
+ }
3450
+ ]
3451
+ }
3452
+ },
3453
+ {
3454
+ "name": "c2-radar-chart",
3455
+ "description": "A radar chart drawn by ECharts. Each data row is an indicator named by `label-field`; each\n`c2-chart-series` is one comparable profile drawn across those indicators.\n\n`@c2n/chart`",
3456
+ "attributes": [
3457
+ {
3458
+ "name": "min",
3459
+ "description": "Lowest value shared by every indicator.",
3460
+ "default": "0",
3461
+ "value": {
3462
+ "type": "number",
3463
+ "kind": "expression"
3464
+ }
3465
+ },
3466
+ {
3467
+ "name": "max",
3468
+ "description": "Highest value shared by every indicator. Auto-ranged per indicator when unset.",
3469
+ "value": {
3470
+ "type": "number | undefined",
3471
+ "kind": "expression"
3472
+ }
3473
+ },
3474
+ {
3475
+ "name": "shape",
3476
+ "description": "Shape of the indicator grid.",
3477
+ "default": "'polygon'",
3478
+ "value": {
3479
+ "type": "'polygon' | 'circle'",
3480
+ "kind": "expression"
3481
+ }
3482
+ },
3483
+ {
3484
+ "name": "start-angle",
3485
+ "description": "Angle of the first indicator, in degrees counter-clockwise from three o'clock.",
3486
+ "default": "90",
3487
+ "value": {
3488
+ "type": "number",
3489
+ "kind": "expression"
3490
+ }
3491
+ },
3492
+ {
3493
+ "name": "split-number",
3494
+ "description": "Number of concentric divisions in the indicator grid.",
3495
+ "default": "5",
3496
+ "value": {
3497
+ "type": "number",
3498
+ "kind": "expression"
3499
+ }
3500
+ },
3501
+ {
3502
+ "name": "points",
3503
+ "description": "Whether to draw point markers at the indicator values.",
3504
+ "default": "'show'",
3505
+ "value": {
3506
+ "type": "'show' | 'none'",
3507
+ "kind": "expression"
3508
+ }
3509
+ },
3510
+ {
3511
+ "name": "fill-opacity",
3512
+ "description": "Opacity of each profile's fill. Falls back to `--c2-chart__area--opacity`.",
3513
+ "value": {
3514
+ "type": "number | undefined",
3515
+ "kind": "expression"
3516
+ }
3517
+ },
3518
+ {
3519
+ "name": "renderer",
3520
+ "description": "Which ECharts renderer to use. SVG prints and scales crisply; canvas is faster with many marks.",
3521
+ "default": "'canvas'",
3522
+ "value": {
3523
+ "type": "'canvas' | 'svg'",
3524
+ "kind": "expression"
3525
+ }
3526
+ },
3527
+ {
3528
+ "name": "data",
3529
+ "description": "The data to plot. Row objects, a bare `number[]`, columnar `[xs, ys…]`, or an already-normalised\nframe. Compared by identity: replace the array, or bump `revision` after mutating it in place.",
3530
+ "value": {
3531
+ "type": "ChartInput | undefined",
3532
+ "kind": "expression"
3533
+ }
3534
+ },
3535
+ {
3536
+ "name": "revision",
3537
+ "description": "Bump after mutating `data` in place. The cheap escape hatch for a large buffer you own.",
3538
+ "default": "0",
3539
+ "value": {
3540
+ "type": "number",
3541
+ "kind": "expression"
3542
+ }
3543
+ },
3544
+ {
3545
+ "name": "series",
3546
+ "description": "Series definitions, as an alternative to `c2-chart-series` children. Children win when both are set.",
3547
+ "value": {
3548
+ "type": "ChartSeriesConfig[] | undefined",
3549
+ "kind": "expression"
3550
+ }
3551
+ },
3552
+ {
3553
+ "name": "x-field",
3554
+ "description": "Row field holding the x value; may be a dotted path. Defaults to the row index.",
3555
+ "default": "''",
3556
+ "value": {
3557
+ "type": "string",
3558
+ "kind": "expression"
3559
+ }
3560
+ },
3561
+ {
3562
+ "name": "label-field",
3563
+ "description": "Row field holding the category label, for charts that name their slices.",
3564
+ "default": "''",
3565
+ "value": {
3566
+ "type": "string",
3567
+ "kind": "expression"
3568
+ }
3569
+ },
3570
+ {
3571
+ "name": "x-type",
3572
+ "description": "How x values are interpreted, which decides the axis and the tooltip format.",
3573
+ "default": "'linear'",
3574
+ "value": {
3575
+ "type": "'time' | 'linear' | 'category'",
3576
+ "kind": "expression"
3577
+ }
3578
+ },
3579
+ {
3580
+ "name": "legend",
3581
+ "description": "Where the legend sits, or `none` to hide it. Shown by default: a chart with more than one series is\nunreadable without one, and a single-series chart simply renders a one-entry legend.",
3582
+ "default": "'bottom'",
3583
+ "value": {
3584
+ "type": "'none' | 'top' | 'bottom' | 'start' | 'end'",
3585
+ "kind": "expression"
3586
+ }
3587
+ },
3588
+ {
3589
+ "name": "tooltip",
3590
+ "description": "Whether the tooltip follows the whole x position or only the hovered datum.",
3591
+ "default": "'axis'",
3592
+ "value": {
3593
+ "type": "'none' | 'item' | 'axis'",
3594
+ "kind": "expression"
3595
+ }
3596
+ },
3597
+ {
3598
+ "name": "animation",
3599
+ "description": "Whether the chart animates its initial draw. ECharts uses its native shape animation and uPlot uses a\nlightweight plot reveal; subsequent data updates stay immediate so a live source does not animate\nevery tick. Named `animation` rather than `animate` because `HTMLElement.animate()` is a method every\nelement already has, and shadowing it breaks the Web Animations API on the host.",
3600
+ "default": "'auto'",
3601
+ "value": {
3602
+ "type": "'none' | 'auto'",
3603
+ "kind": "expression"
3604
+ }
3605
+ },
3606
+ {
3607
+ "name": "locale",
3608
+ "description": "BCP 47 locale for the axis and tooltip formatting. Defaults to the browser locale.",
3609
+ "value": {
3610
+ "type": "string | undefined",
3611
+ "kind": "expression"
3612
+ }
3613
+ },
3614
+ {
3615
+ "name": "loading",
3616
+ "description": "Shows the loading state instead of the plot.",
3617
+ "default": "false",
3618
+ "value": {
3619
+ "type": "boolean",
3620
+ "kind": "expression"
3621
+ }
3622
+ },
3623
+ {
3624
+ "name": "error",
3625
+ "description": "Shows an error message instead of the plot.",
3626
+ "default": "''",
3627
+ "value": {
3628
+ "type": "string",
3629
+ "kind": "expression"
3630
+ }
3631
+ },
3632
+ {
3633
+ "name": "empty-message",
3634
+ "description": "Replaces the built-in \"no data\" text.",
3635
+ "default": "'No data'",
3636
+ "value": {
3637
+ "type": "string",
3638
+ "kind": "expression"
3639
+ }
3640
+ },
3641
+ {
3642
+ "name": "max-points",
3643
+ "description": "Caps how many points a streaming chart keeps; older points fall off the front. `0` keeps everything.",
3644
+ "default": "0",
3645
+ "value": {
3646
+ "type": "number",
3647
+ "kind": "expression"
3648
+ }
3649
+ },
3650
+ {
3651
+ "name": "lazy-render",
3652
+ "description": "Defers loading the engine until the host first scrolls into view.",
3653
+ "default": "false",
3654
+ "value": {
3655
+ "type": "boolean",
3656
+ "kind": "expression"
3657
+ }
3658
+ }
3659
+ ],
3660
+ "js": {
3661
+ "properties": [
3662
+ {
3663
+ "name": "startAngle",
3664
+ "description": "Angle of the first indicator, in degrees counter-clockwise from three o'clock.",
3665
+ "value": {
3666
+ "type": "number",
3667
+ "kind": "expression"
3668
+ }
3669
+ },
3670
+ {
3671
+ "name": "splitNumber",
3672
+ "description": "Number of concentric divisions in the indicator grid.",
3673
+ "value": {
3674
+ "type": "number",
3675
+ "kind": "expression"
3676
+ }
3677
+ },
3678
+ {
3679
+ "name": "fillOpacity",
3680
+ "description": "Opacity of each profile's fill. Falls back to `--c2-chart__area--opacity`.",
3681
+ "value": {
3682
+ "type": "number | undefined",
3683
+ "kind": "expression"
3684
+ }
3685
+ },
3686
+ {
3687
+ "name": "xField",
3688
+ "description": "Row field holding the x value; may be a dotted path. Defaults to the row index.",
3689
+ "value": {
3690
+ "type": "string",
3691
+ "kind": "expression"
3692
+ }
3693
+ },
3694
+ {
3695
+ "name": "labelField",
3696
+ "description": "Row field holding the category label, for charts that name their slices.",
3697
+ "value": {
3698
+ "type": "string",
3699
+ "kind": "expression"
3700
+ }
3701
+ },
3702
+ {
3703
+ "name": "xType",
3704
+ "description": "How x values are interpreted, which decides the axis and the tooltip format.",
3705
+ "value": {
3706
+ "type": "'time' | 'linear' | 'category'",
3707
+ "kind": "expression"
3708
+ }
3709
+ },
3710
+ {
3711
+ "name": "emptyMessage",
3712
+ "description": "Replaces the built-in \"no data\" text.",
3713
+ "value": {
3714
+ "type": "string",
3715
+ "kind": "expression"
3716
+ }
3717
+ },
3718
+ {
3719
+ "name": "maxPoints",
3720
+ "description": "Caps how many points a streaming chart keeps; older points fall off the front. `0` keeps everything.",
3721
+ "value": {
3722
+ "type": "number",
3723
+ "kind": "expression"
3724
+ }
3725
+ },
3726
+ {
3727
+ "name": "lazyRender",
3728
+ "description": "Defers loading the engine until the host first scrolls into view.",
3729
+ "value": {
3730
+ "type": "boolean",
3731
+ "kind": "expression"
3732
+ }
3733
+ }
3734
+ ],
3735
+ "events": [
3736
+ {
3737
+ "name": "tooltip-change",
3738
+ "description": "Fired with the complete tooltip model as the pointer moves, and with `null` when it leaves. Used by `c2-chart-tooltip`.",
3739
+ "value": {
3740
+ "type": "CustomEvent<ChartTooltipContext | null>",
3741
+ "kind": "expression"
3742
+ }
3743
+ },
3744
+ {
3745
+ "name": "series-toggle",
3746
+ "description": "Fired when a legend entry is toggled. Does not bubble.",
3747
+ "value": {
3748
+ "type": "CustomEvent<ChartSeriesToggleEventDetail>",
3749
+ "kind": "expression"
3750
+ }
3751
+ },
3752
+ {
3753
+ "name": "legend-change",
3754
+ "description": "Fired when legend entries or visibility change. Used by `c2-chart-legend`.",
3755
+ "value": {
3756
+ "type": "CustomEvent<ChartLegendChangeEventDetail>",
3757
+ "kind": "expression"
3758
+ }
3759
+ },
3760
+ {
3761
+ "name": "range-change",
3762
+ "description": "Fired after the user zooms or brushes. `detail.min` and `detail.max` are the new x bounds. Does not bubble.",
3763
+ "value": {
3764
+ "type": "CustomEvent<ChartRangeEventDetail>",
3765
+ "kind": "expression"
3766
+ }
3767
+ },
3768
+ {
3769
+ "name": "chart-ready",
3770
+ "description": "Fired after the engine has loaded and drawn for the first time. The host also gains `data-chart-ready`, which is what a test should wait on.",
3771
+ "value": {
3772
+ "type": "CustomEvent<{ engine: string }>",
3773
+ "kind": "expression"
3774
+ }
3775
+ },
3776
+ {
3777
+ "name": "chart-error",
3778
+ "description": "Fired when the engine fails to load or to draw. `detail.error` is the underlying failure.",
3779
+ "value": {
3780
+ "type": "CustomEvent<{ error: unknown }>",
3781
+ "kind": "expression"
3782
+ }
3783
+ },
3784
+ {
3785
+ "name": "point-hover",
3786
+ "description": "Fired as the pointer moves between data points, and with a `null` detail when it leaves the plot. Does not bubble.",
3787
+ "value": {
3788
+ "type": "CustomEvent<ChartPointEventDetail | null>",
3789
+ "kind": "expression"
3790
+ }
3791
+ },
3792
+ {
3793
+ "name": "point-click",
3794
+ "description": "Fired when a datum is clicked. Does not bubble: several components fire point events, so a listener belongs on the element itself.",
3795
+ "value": {
3796
+ "type": "CustomEvent<ChartPointEventDetail>",
3797
+ "kind": "expression"
3798
+ }
3799
+ }
3800
+ ]
3801
+ }
3802
+ },
3803
+ {
3804
+ "name": "c2-scatter-chart",
3805
+ "description": "A scatter plot drawn by ECharts. `x-field` supplies the shared horizontal value and every series supplies\none vertical measure, so several populations can be compared on the same axes.\n\n`@c2n/chart`",
3806
+ "attributes": [
3807
+ {
3808
+ "name": "symbol-size",
3809
+ "description": "Diameter of each point in CSS pixels.",
3810
+ "default": "10",
3811
+ "value": {
3812
+ "type": "number",
3813
+ "kind": "expression"
3814
+ }
3815
+ },
3816
+ {
3817
+ "name": "symbol",
3818
+ "description": "Shape used for points.",
3819
+ "default": "'circle'",
3820
+ "value": {
3821
+ "type": "'circle' | 'rect' | 'roundRect' | 'triangle' | 'diamond' | 'pin' | 'arrow'",
3822
+ "kind": "expression"
3823
+ }
3824
+ },
3825
+ {
3826
+ "name": "large",
3827
+ "description": "Enables ECharts' large-point rendering path.",
3828
+ "default": "false",
3829
+ "value": {
3830
+ "type": "boolean",
3831
+ "kind": "expression"
3832
+ }
3833
+ },
3834
+ {
3835
+ "name": "large-threshold",
3836
+ "description": "Point count at which the large rendering path takes effect.",
3837
+ "default": "2000",
3838
+ "value": {
3839
+ "type": "number",
3840
+ "kind": "expression"
3841
+ }
3842
+ },
3843
+ {
3844
+ "name": "renderer",
3845
+ "description": "Which ECharts renderer to use. SVG prints and scales crisply; canvas is faster with many marks.",
3846
+ "default": "'canvas'",
3847
+ "value": {
3848
+ "type": "'canvas' | 'svg'",
3849
+ "kind": "expression"
3850
+ }
3851
+ },
3852
+ {
3853
+ "name": "data",
3854
+ "description": "The data to plot. Row objects, a bare `number[]`, columnar `[xs, ys…]`, or an already-normalised\nframe. Compared by identity: replace the array, or bump `revision` after mutating it in place.",
3855
+ "value": {
3856
+ "type": "ChartInput | undefined",
3857
+ "kind": "expression"
3858
+ }
3859
+ },
3860
+ {
3861
+ "name": "revision",
3862
+ "description": "Bump after mutating `data` in place. The cheap escape hatch for a large buffer you own.",
3863
+ "default": "0",
3864
+ "value": {
3865
+ "type": "number",
3866
+ "kind": "expression"
3867
+ }
3868
+ },
3869
+ {
3870
+ "name": "series",
3871
+ "description": "Series definitions, as an alternative to `c2-chart-series` children. Children win when both are set.",
3872
+ "value": {
3873
+ "type": "ChartSeriesConfig[] | undefined",
3874
+ "kind": "expression"
3875
+ }
3876
+ },
3877
+ {
3878
+ "name": "x-field",
3879
+ "description": "Row field holding the x value; may be a dotted path. Defaults to the row index.",
3880
+ "default": "''",
3881
+ "value": {
3882
+ "type": "string",
3883
+ "kind": "expression"
3884
+ }
3885
+ },
3886
+ {
3887
+ "name": "label-field",
3888
+ "description": "Row field holding the category label, for charts that name their slices.",
3889
+ "default": "''",
3890
+ "value": {
3891
+ "type": "string",
3892
+ "kind": "expression"
3893
+ }
3894
+ },
3895
+ {
3896
+ "name": "x-type",
3897
+ "description": "How x values are interpreted, which decides the axis and the tooltip format.",
3898
+ "default": "'linear'",
3899
+ "value": {
3900
+ "type": "'time' | 'linear' | 'category'",
3901
+ "kind": "expression"
3902
+ }
3903
+ },
3904
+ {
3905
+ "name": "legend",
3906
+ "description": "Where the legend sits, or `none` to hide it. Shown by default: a chart with more than one series is\nunreadable without one, and a single-series chart simply renders a one-entry legend.",
3907
+ "default": "'bottom'",
3908
+ "value": {
3909
+ "type": "'none' | 'top' | 'bottom' | 'start' | 'end'",
3910
+ "kind": "expression"
3911
+ }
3912
+ },
3913
+ {
3914
+ "name": "tooltip",
3915
+ "description": "Whether the tooltip follows the whole x position or only the hovered datum.",
3916
+ "default": "'axis'",
3917
+ "value": {
3918
+ "type": "'none' | 'item' | 'axis'",
3919
+ "kind": "expression"
3920
+ }
3921
+ },
3922
+ {
3923
+ "name": "animation",
3924
+ "description": "Whether the chart animates its initial draw. ECharts uses its native shape animation and uPlot uses a\nlightweight plot reveal; subsequent data updates stay immediate so a live source does not animate\nevery tick. Named `animation` rather than `animate` because `HTMLElement.animate()` is a method every\nelement already has, and shadowing it breaks the Web Animations API on the host.",
3925
+ "default": "'auto'",
3926
+ "value": {
3927
+ "type": "'none' | 'auto'",
3928
+ "kind": "expression"
3929
+ }
3930
+ },
3931
+ {
3932
+ "name": "locale",
3933
+ "description": "BCP 47 locale for the axis and tooltip formatting. Defaults to the browser locale.",
3934
+ "value": {
3935
+ "type": "string | undefined",
3936
+ "kind": "expression"
3937
+ }
3938
+ },
3939
+ {
3940
+ "name": "loading",
3941
+ "description": "Shows the loading state instead of the plot.",
3942
+ "default": "false",
3943
+ "value": {
3944
+ "type": "boolean",
3945
+ "kind": "expression"
3946
+ }
3947
+ },
3948
+ {
3949
+ "name": "error",
3950
+ "description": "Shows an error message instead of the plot.",
3951
+ "default": "''",
3952
+ "value": {
3953
+ "type": "string",
3954
+ "kind": "expression"
3955
+ }
3956
+ },
3957
+ {
3958
+ "name": "empty-message",
3959
+ "description": "Replaces the built-in \"no data\" text.",
3960
+ "default": "'No data'",
3961
+ "value": {
3962
+ "type": "string",
3963
+ "kind": "expression"
3964
+ }
3965
+ },
3966
+ {
3967
+ "name": "max-points",
3968
+ "description": "Caps how many points a streaming chart keeps; older points fall off the front. `0` keeps everything.",
3969
+ "default": "0",
3970
+ "value": {
3971
+ "type": "number",
3972
+ "kind": "expression"
3973
+ }
3974
+ },
3975
+ {
3976
+ "name": "lazy-render",
3977
+ "description": "Defers loading the engine until the host first scrolls into view.",
3978
+ "default": "false",
3979
+ "value": {
3980
+ "type": "boolean",
3981
+ "kind": "expression"
3982
+ }
3983
+ }
3984
+ ],
3985
+ "js": {
3986
+ "properties": [
3987
+ {
3988
+ "name": "symbolSize",
3989
+ "description": "Diameter of each point in CSS pixels.",
3990
+ "value": {
3991
+ "type": "number",
3992
+ "kind": "expression"
3993
+ }
3994
+ },
3995
+ {
3996
+ "name": "largeThreshold",
3997
+ "description": "Point count at which the large rendering path takes effect.",
3998
+ "value": {
3999
+ "type": "number",
4000
+ "kind": "expression"
4001
+ }
4002
+ },
4003
+ {
4004
+ "name": "xField",
4005
+ "description": "Row field holding the x value; may be a dotted path. Defaults to the row index.",
4006
+ "value": {
4007
+ "type": "string",
4008
+ "kind": "expression"
4009
+ }
4010
+ },
4011
+ {
4012
+ "name": "labelField",
4013
+ "description": "Row field holding the category label, for charts that name their slices.",
4014
+ "value": {
4015
+ "type": "string",
4016
+ "kind": "expression"
4017
+ }
4018
+ },
4019
+ {
4020
+ "name": "xType",
4021
+ "description": "How x values are interpreted, which decides the axis and the tooltip format.",
4022
+ "value": {
4023
+ "type": "'time' | 'linear' | 'category'",
4024
+ "kind": "expression"
4025
+ }
4026
+ },
4027
+ {
4028
+ "name": "emptyMessage",
4029
+ "description": "Replaces the built-in \"no data\" text.",
4030
+ "value": {
4031
+ "type": "string",
4032
+ "kind": "expression"
4033
+ }
4034
+ },
4035
+ {
4036
+ "name": "maxPoints",
4037
+ "description": "Caps how many points a streaming chart keeps; older points fall off the front. `0` keeps everything.",
4038
+ "value": {
4039
+ "type": "number",
4040
+ "kind": "expression"
4041
+ }
4042
+ },
4043
+ {
4044
+ "name": "lazyRender",
4045
+ "description": "Defers loading the engine until the host first scrolls into view.",
4046
+ "value": {
4047
+ "type": "boolean",
4048
+ "kind": "expression"
4049
+ }
4050
+ }
4051
+ ],
4052
+ "events": [
4053
+ {
4054
+ "name": "tooltip-change",
4055
+ "description": "Fired with the complete tooltip model as the pointer moves, and with `null` when it leaves. Used by `c2-chart-tooltip`.",
4056
+ "value": {
4057
+ "type": "CustomEvent<ChartTooltipContext | null>",
4058
+ "kind": "expression"
4059
+ }
4060
+ },
4061
+ {
4062
+ "name": "series-toggle",
4063
+ "description": "Fired when a legend entry is toggled. Does not bubble.",
4064
+ "value": {
4065
+ "type": "CustomEvent<ChartSeriesToggleEventDetail>",
4066
+ "kind": "expression"
4067
+ }
4068
+ },
4069
+ {
4070
+ "name": "legend-change",
4071
+ "description": "Fired when legend entries or visibility change. Used by `c2-chart-legend`.",
4072
+ "value": {
4073
+ "type": "CustomEvent<ChartLegendChangeEventDetail>",
4074
+ "kind": "expression"
4075
+ }
4076
+ },
4077
+ {
4078
+ "name": "range-change",
4079
+ "description": "Fired after the user zooms or brushes. `detail.min` and `detail.max` are the new x bounds. Does not bubble.",
4080
+ "value": {
4081
+ "type": "CustomEvent<ChartRangeEventDetail>",
4082
+ "kind": "expression"
4083
+ }
4084
+ },
4085
+ {
4086
+ "name": "chart-ready",
4087
+ "description": "Fired after the engine has loaded and drawn for the first time. The host also gains `data-chart-ready`, which is what a test should wait on.",
4088
+ "value": {
4089
+ "type": "CustomEvent<{ engine: string }>",
4090
+ "kind": "expression"
4091
+ }
4092
+ },
4093
+ {
4094
+ "name": "chart-error",
4095
+ "description": "Fired when the engine fails to load or to draw. `detail.error` is the underlying failure.",
4096
+ "value": {
4097
+ "type": "CustomEvent<{ error: unknown }>",
4098
+ "kind": "expression"
4099
+ }
4100
+ },
4101
+ {
4102
+ "name": "point-hover",
4103
+ "description": "Fired as the pointer moves between data points, and with a `null` detail when it leaves the plot. Does not bubble.",
4104
+ "value": {
4105
+ "type": "CustomEvent<ChartPointEventDetail | null>",
4106
+ "kind": "expression"
4107
+ }
4108
+ },
4109
+ {
4110
+ "name": "point-click",
4111
+ "description": "Fired when a datum is clicked. Does not bubble: several components fire point events, so a listener belongs on the element itself.",
4112
+ "value": {
4113
+ "type": "CustomEvent<ChartPointEventDetail>",
4114
+ "kind": "expression"
4115
+ }
4116
+ }
4117
+ ]
4118
+ }
4119
+ },
4120
+ {
4121
+ "name": "c2-sparkline",
4122
+ "description": "A chromeless trend line sized for a table cell, a list row or the `trend` slot of a `c2-stat`: no axes,\nno grid, no legend and no tooltip, so the whole box is the data.\n\n`@c2n/chart`",
4123
+ "attributes": [
4124
+ {
4125
+ "name": "type",
4126
+ "description": "How the line is drawn.",
4127
+ "default": "'line'",
4128
+ "value": {
4129
+ "type": "'line' | 'area'",
4130
+ "kind": "expression"
4131
+ }
4132
+ },
4133
+ {
4134
+ "name": "tone",
4135
+ "description": "Colours the line by direction. `auto` compares the last value with the first and uses the positive or\nnegative tone; `neutral` keeps the palette colour.",
4136
+ "default": "'neutral'",
4137
+ "value": {
4138
+ "type": "'auto' | 'positive' | 'negative' | 'neutral'",
4139
+ "kind": "expression"
4140
+ }
4141
+ },
4142
+ {
4143
+ "name": "grid",
4144
+ "description": "Which grid lines are drawn. A string rather than a boolean because a boolean attribute reads as `true`\nwhenever it is present — `grid=\"false\"` in markup would turn the grid *on*, and there would be no way to\nturn it off from HTML at all. `y` (the default) draws the horizontal lines, matching `axes`' shape.",
4145
+ "default": "'y'",
4146
+ "value": {
4147
+ "type": "'both' | 'x' | 'y' | 'none'",
4148
+ "kind": "expression"
4149
+ }
4150
+ },
4151
+ {
4152
+ "name": "axes",
4153
+ "description": "Which axes are drawn.",
4154
+ "default": "'both'",
4155
+ "value": {
4156
+ "type": "'both' | 'x' | 'y' | 'none'",
4157
+ "kind": "expression"
4158
+ }
4159
+ },
4160
+ {
4161
+ "name": "y-min",
4162
+ "description": "Lower bound of the y scale. Auto-ranged when unset.",
4163
+ "value": {
4164
+ "type": "number | undefined",
4165
+ "kind": "expression"
4166
+ }
4167
+ },
4168
+ {
4169
+ "name": "y-max",
4170
+ "description": "Upper bound of the y scale. Auto-ranged when unset.",
4171
+ "value": {
4172
+ "type": "number | undefined",
4173
+ "kind": "expression"
4174
+ }
4175
+ },
4176
+ {
4177
+ "name": "zoom",
4178
+ "description": "Lets the user drag horizontally to zoom the x scale.",
4179
+ "default": "false",
4180
+ "value": {
4181
+ "type": "boolean",
4182
+ "kind": "expression"
4183
+ }
4184
+ },
4185
+ {
4186
+ "name": "cursor",
4187
+ "description": "The cursor crosshair.",
4188
+ "default": "'x'",
4189
+ "value": {
4190
+ "type": "'x' | 'none'",
4191
+ "kind": "expression"
4192
+ }
4193
+ },
4194
+ {
4195
+ "name": "data",
4196
+ "description": "The data to plot. Row objects, a bare `number[]`, columnar `[xs, ys…]`, or an already-normalised\nframe. Compared by identity: replace the array, or bump `revision` after mutating it in place.",
4197
+ "value": {
4198
+ "type": "ChartInput | undefined",
4199
+ "kind": "expression"
4200
+ }
4201
+ },
4202
+ {
4203
+ "name": "revision",
4204
+ "description": "Bump after mutating `data` in place. The cheap escape hatch for a large buffer you own.",
4205
+ "default": "0",
4206
+ "value": {
4207
+ "type": "number",
4208
+ "kind": "expression"
4209
+ }
4210
+ },
4211
+ {
4212
+ "name": "series",
4213
+ "description": "Series definitions, as an alternative to `c2-chart-series` children. Children win when both are set.",
4214
+ "value": {
4215
+ "type": "ChartSeriesConfig[] | undefined",
4216
+ "kind": "expression"
4217
+ }
4218
+ },
4219
+ {
4220
+ "name": "x-field",
4221
+ "description": "Row field holding the x value; may be a dotted path. Defaults to the row index.",
4222
+ "default": "''",
4223
+ "value": {
4224
+ "type": "string",
4225
+ "kind": "expression"
4226
+ }
4227
+ },
4228
+ {
4229
+ "name": "label-field",
4230
+ "description": "Row field holding the category label, for charts that name their slices.",
4231
+ "default": "''",
4232
+ "value": {
4233
+ "type": "string",
4234
+ "kind": "expression"
4235
+ }
4236
+ },
4237
+ {
4238
+ "name": "x-type",
4239
+ "description": "How x values are interpreted, which decides the axis and the tooltip format.",
4240
+ "default": "'linear'",
4241
+ "value": {
4242
+ "type": "'time' | 'linear' | 'category'",
4243
+ "kind": "expression"
4244
+ }
4245
+ },
4246
+ {
4247
+ "name": "legend",
4248
+ "description": "Where the legend sits, or `none` to hide it. Shown by default: a chart with more than one series is\nunreadable without one, and a single-series chart simply renders a one-entry legend.",
4249
+ "default": "'bottom'",
4250
+ "value": {
4251
+ "type": "'none' | 'top' | 'bottom' | 'start' | 'end'",
4252
+ "kind": "expression"
4253
+ }
4254
+ },
4255
+ {
4256
+ "name": "tooltip",
4257
+ "description": "Whether the tooltip follows the whole x position or only the hovered datum.",
4258
+ "default": "'axis'",
4259
+ "value": {
4260
+ "type": "'none' | 'item' | 'axis'",
4261
+ "kind": "expression"
4262
+ }
4263
+ },
4264
+ {
4265
+ "name": "animation",
4266
+ "description": "Whether the chart animates its initial draw. ECharts uses its native shape animation and uPlot uses a\nlightweight plot reveal; subsequent data updates stay immediate so a live source does not animate\nevery tick. Named `animation` rather than `animate` because `HTMLElement.animate()` is a method every\nelement already has, and shadowing it breaks the Web Animations API on the host.",
4267
+ "default": "'auto'",
4268
+ "value": {
4269
+ "type": "'none' | 'auto'",
4270
+ "kind": "expression"
4271
+ }
4272
+ },
4273
+ {
4274
+ "name": "locale",
4275
+ "description": "BCP 47 locale for the axis and tooltip formatting. Defaults to the browser locale.",
4276
+ "value": {
4277
+ "type": "string | undefined",
4278
+ "kind": "expression"
4279
+ }
4280
+ },
4281
+ {
4282
+ "name": "loading",
4283
+ "description": "Shows the loading state instead of the plot.",
4284
+ "default": "false",
4285
+ "value": {
4286
+ "type": "boolean",
4287
+ "kind": "expression"
4288
+ }
4289
+ },
4290
+ {
4291
+ "name": "error",
4292
+ "description": "Shows an error message instead of the plot.",
4293
+ "default": "''",
4294
+ "value": {
4295
+ "type": "string",
4296
+ "kind": "expression"
4297
+ }
4298
+ },
4299
+ {
4300
+ "name": "empty-message",
4301
+ "description": "Replaces the built-in \"no data\" text.",
4302
+ "default": "'No data'",
4303
+ "value": {
4304
+ "type": "string",
4305
+ "kind": "expression"
4306
+ }
4307
+ },
4308
+ {
4309
+ "name": "max-points",
4310
+ "description": "Caps how many points a streaming chart keeps; older points fall off the front. `0` keeps everything.",
4311
+ "default": "0",
4312
+ "value": {
4313
+ "type": "number",
4314
+ "kind": "expression"
4315
+ }
4316
+ },
4317
+ {
4318
+ "name": "lazy-render",
4319
+ "description": "Defers loading the engine until the host first scrolls into view.",
4320
+ "default": "false",
4321
+ "value": {
4322
+ "type": "boolean",
4323
+ "kind": "expression"
4324
+ }
4325
+ }
4326
+ ],
4327
+ "js": {
4328
+ "properties": [
4329
+ {
4330
+ "name": "yMin",
4331
+ "description": "Lower bound of the y scale. Auto-ranged when unset.",
4332
+ "value": {
4333
+ "type": "number | undefined",
4334
+ "kind": "expression"
4335
+ }
4336
+ },
4337
+ {
4338
+ "name": "yMax",
4339
+ "description": "Upper bound of the y scale. Auto-ranged when unset.",
4340
+ "value": {
4341
+ "type": "number | undefined",
4342
+ "kind": "expression"
4343
+ }
4344
+ },
4345
+ {
4346
+ "name": "xField",
4347
+ "description": "Row field holding the x value; may be a dotted path. Defaults to the row index.",
4348
+ "value": {
4349
+ "type": "string",
4350
+ "kind": "expression"
4351
+ }
4352
+ },
4353
+ {
4354
+ "name": "labelField",
4355
+ "description": "Row field holding the category label, for charts that name their slices.",
4356
+ "value": {
4357
+ "type": "string",
4358
+ "kind": "expression"
4359
+ }
4360
+ },
4361
+ {
4362
+ "name": "xType",
4363
+ "description": "How x values are interpreted, which decides the axis and the tooltip format.",
4364
+ "value": {
4365
+ "type": "'time' | 'linear' | 'category'",
4366
+ "kind": "expression"
4367
+ }
4368
+ },
4369
+ {
4370
+ "name": "emptyMessage",
4371
+ "description": "Replaces the built-in \"no data\" text.",
4372
+ "value": {
4373
+ "type": "string",
4374
+ "kind": "expression"
4375
+ }
4376
+ },
4377
+ {
4378
+ "name": "maxPoints",
4379
+ "description": "Caps how many points a streaming chart keeps; older points fall off the front. `0` keeps everything.",
4380
+ "value": {
4381
+ "type": "number",
4382
+ "kind": "expression"
4383
+ }
4384
+ },
4385
+ {
4386
+ "name": "lazyRender",
4387
+ "description": "Defers loading the engine until the host first scrolls into view.",
4388
+ "value": {
4389
+ "type": "boolean",
4390
+ "kind": "expression"
4391
+ }
4392
+ }
4393
+ ],
4394
+ "events": [
4395
+ {
4396
+ "name": "tooltip-change",
4397
+ "description": "Fired with the complete tooltip model as the pointer moves, and with `null` when it leaves. Used by `c2-chart-tooltip`.",
4398
+ "value": {
4399
+ "type": "CustomEvent<ChartTooltipContext | null>",
4400
+ "kind": "expression"
4401
+ }
4402
+ },
4403
+ {
4404
+ "name": "series-toggle",
4405
+ "description": "Fired when a legend entry is toggled. Does not bubble.",
4406
+ "value": {
4407
+ "type": "CustomEvent<ChartSeriesToggleEventDetail>",
4408
+ "kind": "expression"
4409
+ }
4410
+ },
4411
+ {
4412
+ "name": "legend-change",
4413
+ "description": "Fired when legend entries or visibility change. Used by `c2-chart-legend`.",
4414
+ "value": {
4415
+ "type": "CustomEvent<ChartLegendChangeEventDetail>",
4416
+ "kind": "expression"
4417
+ }
4418
+ },
4419
+ {
4420
+ "name": "range-change",
4421
+ "description": "Fired after the user zooms or brushes. `detail.min` and `detail.max` are the new x bounds. Does not bubble.",
4422
+ "value": {
4423
+ "type": "CustomEvent<ChartRangeEventDetail>",
4424
+ "kind": "expression"
4425
+ }
4426
+ },
4427
+ {
4428
+ "name": "chart-ready",
4429
+ "description": "Fired after the engine has loaded and drawn for the first time. The host also gains `data-chart-ready`, which is what a test should wait on.",
4430
+ "value": {
4431
+ "type": "CustomEvent<{ engine: string }>",
4432
+ "kind": "expression"
4433
+ }
4434
+ },
4435
+ {
4436
+ "name": "chart-error",
4437
+ "description": "Fired when the engine fails to load or to draw. `detail.error` is the underlying failure.",
4438
+ "value": {
4439
+ "type": "CustomEvent<{ error: unknown }>",
4440
+ "kind": "expression"
4441
+ }
4442
+ },
4443
+ {
4444
+ "name": "point-hover",
4445
+ "description": "Fired as the pointer moves between data points, and with a `null` detail when it leaves the plot. Does not bubble.",
4446
+ "value": {
4447
+ "type": "CustomEvent<ChartPointEventDetail | null>",
4448
+ "kind": "expression"
4449
+ }
2630
4450
  },
2631
4451
  {
2632
4452
  "name": "point-click",
@@ -3413,6 +5233,327 @@
3413
5233
  ]
3414
5234
  }
3415
5235
  },
5236
+ {
5237
+ "name": "c2-date-input",
5238
+ "description": "A form-associated single-date field backed by a native `<input type=\"date\">`. Values, `min` and `max` use local\ncalendar ISO strings (`YYYY-MM-DD`). The native picker and keyboard editing remain available while the component\nadds a consistent field, calendar affordance, helper text, error state and theming surface.\n\n`@c2n/date-input`",
5239
+ "attributes": [
5240
+ {
5241
+ "name": "value",
5242
+ "description": "Current date as a local-calendar `YYYY-MM-DD` string, or an empty string.",
5243
+ "default": "''",
5244
+ "value": {
5245
+ "type": "string",
5246
+ "kind": "expression"
5247
+ }
5248
+ },
5249
+ {
5250
+ "name": "min",
5251
+ "description": "Earliest selectable date as `YYYY-MM-DD`.",
5252
+ "default": "''",
5253
+ "value": {
5254
+ "type": "string",
5255
+ "kind": "expression"
5256
+ }
5257
+ },
5258
+ {
5259
+ "name": "max",
5260
+ "description": "Latest selectable date as `YYYY-MM-DD`.",
5261
+ "default": "''",
5262
+ "value": {
5263
+ "type": "string",
5264
+ "kind": "expression"
5265
+ }
5266
+ },
5267
+ {
5268
+ "name": "step",
5269
+ "description": "Number of days between valid dates.",
5270
+ "default": "1",
5271
+ "value": {
5272
+ "type": "number",
5273
+ "kind": "expression"
5274
+ }
5275
+ },
5276
+ {
5277
+ "name": "name",
5278
+ "description": "Form field name.",
5279
+ "default": "''",
5280
+ "value": {
5281
+ "type": "string",
5282
+ "kind": "expression"
5283
+ }
5284
+ },
5285
+ {
5286
+ "name": "autocomplete",
5287
+ "description": "Browser autocomplete hint, for example `bday`.",
5288
+ "default": "''",
5289
+ "value": {
5290
+ "type": "string",
5291
+ "kind": "expression"
5292
+ }
5293
+ },
5294
+ {
5295
+ "name": "required",
5296
+ "description": "Requires a date before the form can be submitted.",
5297
+ "default": "false",
5298
+ "value": {
5299
+ "type": "boolean",
5300
+ "kind": "expression"
5301
+ }
5302
+ },
5303
+ {
5304
+ "name": "readOnly",
5305
+ "description": "Prevents editing while keeping the value in form submission.",
5306
+ "default": "false",
5307
+ "value": {
5308
+ "type": "boolean",
5309
+ "kind": "expression"
5310
+ }
5311
+ },
5312
+ {
5313
+ "name": "disabled",
5314
+ "description": "Prevents interaction and excludes the value from form submission.",
5315
+ "default": "false",
5316
+ "value": {
5317
+ "type": "boolean",
5318
+ "kind": "expression"
5319
+ }
5320
+ },
5321
+ {
5322
+ "name": "error",
5323
+ "description": "Applies the visual error state and sets `aria-invalid`.",
5324
+ "default": "false",
5325
+ "value": {
5326
+ "type": "boolean",
5327
+ "kind": "expression"
5328
+ }
5329
+ },
5330
+ {
5331
+ "name": "help",
5332
+ "description": "Helper text shown below the field.",
5333
+ "default": "''",
5334
+ "value": {
5335
+ "type": "string",
5336
+ "kind": "expression"
5337
+ }
5338
+ },
5339
+ {
5340
+ "name": "error-text",
5341
+ "description": "Message shown below the field while `error` is set.",
5342
+ "default": "''",
5343
+ "value": {
5344
+ "type": "string",
5345
+ "kind": "expression"
5346
+ }
5347
+ },
5348
+ {
5349
+ "name": "aria-label",
5350
+ "description": "Accessible name forwarded to the native date input.",
5351
+ "default": "null",
5352
+ "value": {
5353
+ "type": "string | null",
5354
+ "kind": "expression"
5355
+ }
5356
+ }
5357
+ ],
5358
+ "js": {
5359
+ "properties": [
5360
+ {
5361
+ "name": "errorText",
5362
+ "description": "Message shown below the field while `error` is set.",
5363
+ "value": {
5364
+ "type": "string",
5365
+ "kind": "expression"
5366
+ }
5367
+ },
5368
+ {
5369
+ "name": "ariaLabel",
5370
+ "description": "Accessible name forwarded to the native date input.",
5371
+ "value": {
5372
+ "type": "string | null",
5373
+ "kind": "expression"
5374
+ }
5375
+ }
5376
+ ],
5377
+ "events": [
5378
+ {
5379
+ "name": "input",
5380
+ "description": "Re-dispatched from the inner date input whenever the value changes.",
5381
+ "value": {
5382
+ "type": "InputEvent",
5383
+ "kind": "expression"
5384
+ }
5385
+ },
5386
+ {
5387
+ "name": "change",
5388
+ "description": "Re-dispatched from the inner date input when the value is committed.",
5389
+ "value": {
5390
+ "type": "Event",
5391
+ "kind": "expression"
5392
+ }
5393
+ }
5394
+ ]
5395
+ }
5396
+ },
5397
+ {
5398
+ "name": "c2-date-selector",
5399
+ "description": "A keyboard-accessible date-range calendar inspired by travel booking pickers. It shows one or two consecutive\nmonths, starts a range on the first activation, completes it on the second, and starts over on the third. Dates are\nlocal-calendar ISO strings (`YYYY-MM-DD`), so they do not shift across time zones. Arrow keys move by day or week,\nHome/End move within the week, and Page Up/Page Down change month.\n\n`@c2n/date-selector`",
5400
+ "attributes": [
5401
+ {
5402
+ "name": "from",
5403
+ "description": "Start of the selected range as `YYYY-MM-DD`.",
5404
+ "default": "''",
5405
+ "value": {
5406
+ "type": "string",
5407
+ "kind": "expression"
5408
+ }
5409
+ },
5410
+ {
5411
+ "name": "to",
5412
+ "description": "End of the selected range as `YYYY-MM-DD`; empty while the range is incomplete.",
5413
+ "default": "''",
5414
+ "value": {
5415
+ "type": "string",
5416
+ "kind": "expression"
5417
+ }
5418
+ },
5419
+ {
5420
+ "name": "min",
5421
+ "description": "Earliest selectable date as `YYYY-MM-DD`.",
5422
+ "default": "''",
5423
+ "value": {
5424
+ "type": "string",
5425
+ "kind": "expression"
5426
+ }
5427
+ },
5428
+ {
5429
+ "name": "max",
5430
+ "description": "Latest selectable date as `YYYY-MM-DD`.",
5431
+ "default": "''",
5432
+ "value": {
5433
+ "type": "string",
5434
+ "kind": "expression"
5435
+ }
5436
+ },
5437
+ {
5438
+ "name": "locale",
5439
+ "description": "Locale used for month, weekday and accessible date labels. Defaults to the document language.",
5440
+ "default": "''",
5441
+ "value": {
5442
+ "type": "string",
5443
+ "kind": "expression"
5444
+ }
5445
+ },
5446
+ {
5447
+ "name": "week-start",
5448
+ "description": "First day of each calendar week.",
5449
+ "default": "'monday'",
5450
+ "value": {
5451
+ "type": "DateSelectorWeekStart",
5452
+ "kind": "expression"
5453
+ }
5454
+ },
5455
+ {
5456
+ "name": "months",
5457
+ "description": "Number of consecutive months shown; clamped to one or two.",
5458
+ "default": "2",
5459
+ "value": {
5460
+ "type": "number",
5461
+ "kind": "expression"
5462
+ }
5463
+ },
5464
+ {
5465
+ "name": "name",
5466
+ "description": "Form field name for the start date.",
5467
+ "default": "''",
5468
+ "value": {
5469
+ "type": "string",
5470
+ "kind": "expression"
5471
+ }
5472
+ },
5473
+ {
5474
+ "name": "end-name",
5475
+ "description": "Form field name for the end date. Defaults to `${name}-end`.",
5476
+ "default": "''",
5477
+ "value": {
5478
+ "type": "string",
5479
+ "kind": "expression"
5480
+ }
5481
+ },
5482
+ {
5483
+ "name": "required",
5484
+ "description": "Requires both endpoints when the selector participates in a form.",
5485
+ "default": "false",
5486
+ "value": {
5487
+ "type": "boolean",
5488
+ "kind": "expression"
5489
+ }
5490
+ },
5491
+ {
5492
+ "name": "disabled",
5493
+ "description": "Prevents navigation and selection and excludes the control from form submission.",
5494
+ "default": "false",
5495
+ "value": {
5496
+ "type": "boolean",
5497
+ "kind": "expression"
5498
+ }
5499
+ },
5500
+ {
5501
+ "name": "aria-label",
5502
+ "description": "Accessible name for the complete calendar.",
5503
+ "default": "'Choose a date range'",
5504
+ "value": {
5505
+ "type": "string | null",
5506
+ "kind": "expression"
5507
+ }
5508
+ }
5509
+ ],
5510
+ "js": {
5511
+ "properties": [
5512
+ {
5513
+ "name": "weekStart",
5514
+ "description": "First day of each calendar week.",
5515
+ "value": {
5516
+ "type": "DateSelectorWeekStart",
5517
+ "kind": "expression"
5518
+ }
5519
+ },
5520
+ {
5521
+ "name": "endName",
5522
+ "description": "Form field name for the end date. Defaults to `${name}-end`.",
5523
+ "value": {
5524
+ "type": "string",
5525
+ "kind": "expression"
5526
+ }
5527
+ },
5528
+ {
5529
+ "name": "ariaLabel",
5530
+ "description": "Accessible name for the complete calendar.",
5531
+ "value": {
5532
+ "type": "string | null",
5533
+ "kind": "expression"
5534
+ }
5535
+ }
5536
+ ],
5537
+ "events": [
5538
+ {
5539
+ "name": "input",
5540
+ "description": "Fired after either endpoint changes, with `from` and `to` already updated.",
5541
+ "value": {
5542
+ "type": "Event",
5543
+ "kind": "expression"
5544
+ }
5545
+ },
5546
+ {
5547
+ "name": "change",
5548
+ "description": "Fired with `input`; `detail` contains the ISO `from` and `to` values.",
5549
+ "value": {
5550
+ "type": "CustomEvent<DateRangeChangeDetail>",
5551
+ "kind": "expression"
5552
+ }
5553
+ }
5554
+ ]
5555
+ }
5556
+ },
3416
5557
  {
3417
5558
  "name": "c2-details",
3418
5559
  "description": "Collapsible disclosure built on native `<details>` / `<summary>`, so keyboard access, screen-reader semantics and\nfind-in-page auto-expand come from the browser. Panels that share a `name` form an exclusive accordion. Open and\nclose animate the content height (plus a fade) with the Web Animations API, so the motion is identical in every\nbrowser; the native `open` attribute is only removed once the close animation has finished.\n\n`@c2n/details`",
@@ -7282,6 +9423,191 @@
7282
9423
  "events": []
7283
9424
  }
7284
9425
  },
9426
+ {
9427
+ "name": "c2-number-input",
9428
+ "description": "A form-associated number field backed by a native `<input type=\"number\">`. It keeps native decimal parsing,\nvalidation and Arrow Up/Down behavior, replaces browser-specific spinners with themeable decrement/increment\ncontrols, and supports prefix/suffix adornments, helper text and an error state.\n\n`@c2n/number-input`",
9429
+ "attributes": [
9430
+ {
9431
+ "name": "value",
9432
+ "description": "Current numeric text, or an empty string. Use `valueAsNumber` for a parsed value.",
9433
+ "default": "''",
9434
+ "value": {
9435
+ "type": "string",
9436
+ "kind": "expression"
9437
+ }
9438
+ },
9439
+ {
9440
+ "name": "min",
9441
+ "description": "Minimum valid value.",
9442
+ "value": {
9443
+ "type": "number | undefined",
9444
+ "kind": "expression"
9445
+ }
9446
+ },
9447
+ {
9448
+ "name": "max",
9449
+ "description": "Maximum valid value.",
9450
+ "value": {
9451
+ "type": "number | undefined",
9452
+ "kind": "expression"
9453
+ }
9454
+ },
9455
+ {
9456
+ "name": "step",
9457
+ "description": "Increment used by Arrow keys and the step controls, or `any` to disable step controls.",
9458
+ "default": "'1'",
9459
+ "value": {
9460
+ "type": "string",
9461
+ "kind": "expression"
9462
+ }
9463
+ },
9464
+ {
9465
+ "name": "name",
9466
+ "description": "Form field name.",
9467
+ "default": "''",
9468
+ "value": {
9469
+ "type": "string",
9470
+ "kind": "expression"
9471
+ }
9472
+ },
9473
+ {
9474
+ "name": "autocomplete",
9475
+ "description": "Browser autocomplete hint.",
9476
+ "default": "''",
9477
+ "value": {
9478
+ "type": "string",
9479
+ "kind": "expression"
9480
+ }
9481
+ },
9482
+ {
9483
+ "name": "placeholder",
9484
+ "description": "Text shown while the field is empty.",
9485
+ "default": "''",
9486
+ "value": {
9487
+ "type": "string",
9488
+ "kind": "expression"
9489
+ }
9490
+ },
9491
+ {
9492
+ "name": "required",
9493
+ "description": "Requires a number before the form can be submitted.",
9494
+ "default": "false",
9495
+ "value": {
9496
+ "type": "boolean",
9497
+ "kind": "expression"
9498
+ }
9499
+ },
9500
+ {
9501
+ "name": "readOnly",
9502
+ "description": "Prevents editing while keeping the value in form submission.",
9503
+ "default": "false",
9504
+ "value": {
9505
+ "type": "boolean",
9506
+ "kind": "expression"
9507
+ }
9508
+ },
9509
+ {
9510
+ "name": "disabled",
9511
+ "description": "Prevents interaction and excludes the value from form submission.",
9512
+ "default": "false",
9513
+ "value": {
9514
+ "type": "boolean",
9515
+ "kind": "expression"
9516
+ }
9517
+ },
9518
+ {
9519
+ "name": "hide-steppers",
9520
+ "description": "Hides the decrement and increment controls.",
9521
+ "default": "false",
9522
+ "value": {
9523
+ "type": "boolean",
9524
+ "kind": "expression"
9525
+ }
9526
+ },
9527
+ {
9528
+ "name": "error",
9529
+ "description": "Applies the visual error state and sets `aria-invalid`.",
9530
+ "default": "false",
9531
+ "value": {
9532
+ "type": "boolean",
9533
+ "kind": "expression"
9534
+ }
9535
+ },
9536
+ {
9537
+ "name": "help",
9538
+ "description": "Helper text shown below the field.",
9539
+ "default": "''",
9540
+ "value": {
9541
+ "type": "string",
9542
+ "kind": "expression"
9543
+ }
9544
+ },
9545
+ {
9546
+ "name": "error-text",
9547
+ "description": "Message shown below the field while `error` is set.",
9548
+ "default": "''",
9549
+ "value": {
9550
+ "type": "string",
9551
+ "kind": "expression"
9552
+ }
9553
+ },
9554
+ {
9555
+ "name": "aria-label",
9556
+ "description": "Accessible name forwarded to the native number input.",
9557
+ "default": "null",
9558
+ "value": {
9559
+ "type": "string | null",
9560
+ "kind": "expression"
9561
+ }
9562
+ }
9563
+ ],
9564
+ "js": {
9565
+ "properties": [
9566
+ {
9567
+ "name": "hideSteppers",
9568
+ "description": "Hides the decrement and increment controls.",
9569
+ "value": {
9570
+ "type": "boolean",
9571
+ "kind": "expression"
9572
+ }
9573
+ },
9574
+ {
9575
+ "name": "errorText",
9576
+ "description": "Message shown below the field while `error` is set.",
9577
+ "value": {
9578
+ "type": "string",
9579
+ "kind": "expression"
9580
+ }
9581
+ },
9582
+ {
9583
+ "name": "ariaLabel",
9584
+ "description": "Accessible name forwarded to the native number input.",
9585
+ "value": {
9586
+ "type": "string | null",
9587
+ "kind": "expression"
9588
+ }
9589
+ }
9590
+ ],
9591
+ "events": [
9592
+ {
9593
+ "name": "input",
9594
+ "description": "Re-dispatched when typing or stepping changes the value.",
9595
+ "value": {
9596
+ "type": "InputEvent",
9597
+ "kind": "expression"
9598
+ }
9599
+ },
9600
+ {
9601
+ "name": "change",
9602
+ "description": "Re-dispatched when a typed value is committed or a step control changes the value.",
9603
+ "value": {
9604
+ "type": "Event",
9605
+ "kind": "expression"
9606
+ }
9607
+ }
9608
+ ]
9609
+ }
9610
+ },
7285
9611
  {
7286
9612
  "name": "c2-overlay",
7287
9613
  "description": "Anchored popup built on the browser Popover API: the element sits in the top layer, opens and light-dismisses\nnatively (Escape, click outside) and is positioned next to its anchor with floating-ui. The anchor is found in\nthis order: the `anchor` property (an element), the `anchor` attribute (an element id in the same tree), or the\nelement whose `popovertarget` points at this overlay's `id`. The overlay only positions itself; the content brings\nits own surface (background, border, shadow), so it fits menus, pickers and cards alike.\n\n`@c2n/overlay`",
@@ -36598,6 +38924,261 @@
36598
38924
  "events": []
36599
38925
  }
36600
38926
  },
38927
+ {
38928
+ "name": "c2-qr-code",
38929
+ "description": "Generates an accessible, themeable SVG QR code without sending its value to a remote service.\n\n`@c2n/qr-code`",
38930
+ "attributes": [
38931
+ {
38932
+ "name": "value",
38933
+ "description": "Text or URL encoded by the QR code.",
38934
+ "default": "''",
38935
+ "value": {
38936
+ "type": "string",
38937
+ "kind": "expression"
38938
+ }
38939
+ },
38940
+ {
38941
+ "name": "size",
38942
+ "description": "Rendered width and height in CSS pixels. Set to `0` to use `--c2-qr-code--size`.",
38943
+ "default": "200",
38944
+ "value": {
38945
+ "type": "number",
38946
+ "kind": "expression"
38947
+ }
38948
+ },
38949
+ {
38950
+ "name": "error-correction",
38951
+ "description": "Error correction level: L (7%), M (15%), Q (25%), or H (30%).",
38952
+ "default": "'M'",
38953
+ "value": {
38954
+ "type": "QrCodeErrorCorrection",
38955
+ "kind": "expression"
38956
+ }
38957
+ },
38958
+ {
38959
+ "name": "margin",
38960
+ "description": "Quiet-zone width measured in QR modules. Four is recommended for reliable scanning.",
38961
+ "default": "4",
38962
+ "value": {
38963
+ "type": "number",
38964
+ "kind": "expression"
38965
+ }
38966
+ },
38967
+ {
38968
+ "name": "boost-error-correction",
38969
+ "description": "Raises error correction when the encoded version has spare capacity.",
38970
+ "default": "false",
38971
+ "value": {
38972
+ "type": "boolean",
38973
+ "kind": "expression"
38974
+ }
38975
+ },
38976
+ {
38977
+ "name": "aria-label",
38978
+ "description": "Accessible name announced for the generated image. Defaults to `QR code`.",
38979
+ "default": "null",
38980
+ "value": {
38981
+ "type": "string | null",
38982
+ "kind": "expression"
38983
+ }
38984
+ }
38985
+ ],
38986
+ "js": {
38987
+ "properties": [
38988
+ {
38989
+ "name": "errorCorrection",
38990
+ "description": "Error correction level: L (7%), M (15%), Q (25%), or H (30%).",
38991
+ "value": {
38992
+ "type": "QrCodeErrorCorrection",
38993
+ "kind": "expression"
38994
+ }
38995
+ },
38996
+ {
38997
+ "name": "boostErrorCorrection",
38998
+ "description": "Raises error correction when the encoded version has spare capacity.",
38999
+ "value": {
39000
+ "type": "boolean",
39001
+ "kind": "expression"
39002
+ }
39003
+ },
39004
+ {
39005
+ "name": "ariaLabel",
39006
+ "description": "Accessible name announced for the generated image. Defaults to `QR code`.",
39007
+ "value": {
39008
+ "type": "string | null",
39009
+ "kind": "expression"
39010
+ }
39011
+ }
39012
+ ],
39013
+ "events": [
39014
+ {
39015
+ "name": "qr-code-error",
39016
+ "description": "Fired when the value cannot be encoded. `detail` contains the error and rejected value.",
39017
+ "value": {
39018
+ "type": "CustomEvent<QrCodeErrorEventDetail>",
39019
+ "kind": "expression"
39020
+ }
39021
+ }
39022
+ ]
39023
+ }
39024
+ },
39025
+ {
39026
+ "name": "c2-questionnaire",
39027
+ "description": "A complete multi-step questionnaire with single- and multiple-choice questions, optional free-text answers,\nvalidation, keyboard shortcuts and previous / skip / next navigation. Questions are supplied as an array through\nthe `questions` property or as JSON in the `questions` attribute. The component preserves answers between steps,\nemits progress events and submits the complete answer object as JSON when given a form `name`.\n\n`@c2n/questionnaire`",
39028
+ "attributes": [
39029
+ {
39030
+ "name": "questions",
39031
+ "description": "Questionnaire definition. Use `select` for one answer and `choice` for multiple answers (`single` / `multiple` remain aliases). May also be supplied as JSON.",
39032
+ "default": "[]",
39033
+ "value": {
39034
+ "type": "QuestionnaireQuestion[]",
39035
+ "kind": "expression"
39036
+ }
39037
+ },
39038
+ {
39039
+ "name": "current",
39040
+ "description": "Zero-based visible question index.",
39041
+ "default": "0",
39042
+ "value": {
39043
+ "type": "number",
39044
+ "kind": "expression"
39045
+ }
39046
+ },
39047
+ {
39048
+ "name": "completed",
39049
+ "description": "Shows the answer summary after successful completion.",
39050
+ "default": "false",
39051
+ "value": {
39052
+ "type": "boolean",
39053
+ "kind": "expression"
39054
+ }
39055
+ },
39056
+ {
39057
+ "name": "name",
39058
+ "description": "Form field name. Its submitted value is the answer object serialized as JSON.",
39059
+ "default": "''",
39060
+ "value": {
39061
+ "type": "string",
39062
+ "kind": "expression"
39063
+ }
39064
+ },
39065
+ {
39066
+ "name": "disabled",
39067
+ "description": "Disables options and navigation.",
39068
+ "default": "false",
39069
+ "value": {
39070
+ "type": "boolean",
39071
+ "kind": "expression"
39072
+ }
39073
+ },
39074
+ {
39075
+ "name": "next-label",
39076
+ "description": "Label of the forward action before the final question.",
39077
+ "default": "'Next'",
39078
+ "value": {
39079
+ "type": "string",
39080
+ "kind": "expression"
39081
+ }
39082
+ },
39083
+ {
39084
+ "name": "complete-label",
39085
+ "description": "Label of the forward action on the final question.",
39086
+ "default": "'Save'",
39087
+ "value": {
39088
+ "type": "string",
39089
+ "kind": "expression"
39090
+ }
39091
+ },
39092
+ {
39093
+ "name": "previous-label",
39094
+ "description": "Label of the backward action.",
39095
+ "default": "'Previous'",
39096
+ "value": {
39097
+ "type": "string",
39098
+ "kind": "expression"
39099
+ }
39100
+ },
39101
+ {
39102
+ "name": "skip-label",
39103
+ "description": "Label of the skip action.",
39104
+ "default": "'Skip'",
39105
+ "value": {
39106
+ "type": "string",
39107
+ "kind": "expression"
39108
+ }
39109
+ }
39110
+ ],
39111
+ "js": {
39112
+ "properties": [
39113
+ {
39114
+ "name": "nextLabel",
39115
+ "description": "Label of the forward action before the final question.",
39116
+ "value": {
39117
+ "type": "string",
39118
+ "kind": "expression"
39119
+ }
39120
+ },
39121
+ {
39122
+ "name": "completeLabel",
39123
+ "description": "Label of the forward action on the final question.",
39124
+ "value": {
39125
+ "type": "string",
39126
+ "kind": "expression"
39127
+ }
39128
+ },
39129
+ {
39130
+ "name": "previousLabel",
39131
+ "description": "Label of the backward action.",
39132
+ "value": {
39133
+ "type": "string",
39134
+ "kind": "expression"
39135
+ }
39136
+ },
39137
+ {
39138
+ "name": "skipLabel",
39139
+ "description": "Label of the skip action.",
39140
+ "value": {
39141
+ "type": "string",
39142
+ "kind": "expression"
39143
+ }
39144
+ }
39145
+ ],
39146
+ "events": [
39147
+ {
39148
+ "name": "complete",
39149
+ "description": "Fired from Next / Save on the last valid question.",
39150
+ "value": {
39151
+ "type": "CustomEvent<{ answers: QuestionnaireAnswers }>",
39152
+ "kind": "expression"
39153
+ }
39154
+ },
39155
+ {
39156
+ "name": "skip",
39157
+ "description": "Fired when a skippable question is skipped.",
39158
+ "value": {
39159
+ "type": "CustomEvent<{ index: number, questionId: string }>",
39160
+ "kind": "expression"
39161
+ }
39162
+ },
39163
+ {
39164
+ "name": "step-change",
39165
+ "description": "Fired after navigation changes the visible question.",
39166
+ "value": {
39167
+ "type": "CustomEvent<{ index: number, question: QuestionnaireQuestion }>",
39168
+ "kind": "expression"
39169
+ }
39170
+ },
39171
+ {
39172
+ "name": "answer-change",
39173
+ "description": "Fired whenever an answer changes.",
39174
+ "value": {
39175
+ "type": "CustomEvent<{ questionId: string, value: QuestionnaireAnswer, answers: QuestionnaireAnswers }>",
39176
+ "kind": "expression"
39177
+ }
39178
+ }
39179
+ ]
39180
+ }
39181
+ },
36601
39182
  {
36602
39183
  "name": "c2-radio",
36603
39184
  "description": "A single radio option built on a native `<input type=\"radio\">`, with its label and an optional description beside\nthe control. Put several in a `c2-radio-group` to get a single `value`, arrow-key navigation and a roving tab stop;\nstandalone radios that share a `name` in the same document or shadow root still uncheck each other. Theme the\ncontrol, the label and the whole row (`container`), which turns a radio into a selectable card. The indicator is\nnot tied to the ring: the `dot` slot swaps the inner mark, and `icon` / `checked-icon` replace the control with\nany icon per state.\n\n`@c2n/radio`",
@@ -36785,6 +39366,139 @@
36785
39366
  ]
36786
39367
  }
36787
39368
  },
39369
+ {
39370
+ "name": "c2-rate",
39371
+ "description": "Accessible star rating control with pointer preview, keyboard adjustment and optional half-star values.\n\n`@c2n/rate`",
39372
+ "attributes": [
39373
+ {
39374
+ "name": "value",
39375
+ "description": "Current rating and submitted form value.",
39376
+ "default": "0",
39377
+ "value": {
39378
+ "type": "number",
39379
+ "kind": "expression"
39380
+ }
39381
+ },
39382
+ {
39383
+ "name": "max",
39384
+ "description": "Number of rating icons.",
39385
+ "default": "5",
39386
+ "value": {
39387
+ "type": "number",
39388
+ "kind": "expression"
39389
+ }
39390
+ },
39391
+ {
39392
+ "name": "allow-half",
39393
+ "description": "Allow values in half-star steps.",
39394
+ "default": "false",
39395
+ "value": {
39396
+ "type": "boolean",
39397
+ "kind": "expression"
39398
+ }
39399
+ },
39400
+ {
39401
+ "name": "clearable",
39402
+ "description": "Clicking the committed rating again clears it to zero.",
39403
+ "default": "false",
39404
+ "value": {
39405
+ "type": "boolean",
39406
+ "kind": "expression"
39407
+ }
39408
+ },
39409
+ {
39410
+ "name": "readonly",
39411
+ "description": "Prevents changes while keeping the rating visually available.",
39412
+ "default": "false",
39413
+ "value": {
39414
+ "type": "boolean",
39415
+ "kind": "expression"
39416
+ }
39417
+ },
39418
+ {
39419
+ "name": "disabled",
39420
+ "description": "Disables interaction and form submission.",
39421
+ "default": "false",
39422
+ "value": {
39423
+ "type": "boolean",
39424
+ "kind": "expression"
39425
+ }
39426
+ },
39427
+ {
39428
+ "name": "required",
39429
+ "description": "Requires a rating greater than zero for native form validation.",
39430
+ "default": "false",
39431
+ "value": {
39432
+ "type": "boolean",
39433
+ "kind": "expression"
39434
+ }
39435
+ },
39436
+ {
39437
+ "name": "name",
39438
+ "description": "Name used when the rating participates in a form.",
39439
+ "default": "''",
39440
+ "value": {
39441
+ "type": "string",
39442
+ "kind": "expression"
39443
+ }
39444
+ },
39445
+ {
39446
+ "name": "aria-label",
39447
+ "description": "Accessible name of the rating control.",
39448
+ "default": "null",
39449
+ "value": {
39450
+ "type": "string | null",
39451
+ "kind": "expression"
39452
+ }
39453
+ }
39454
+ ],
39455
+ "js": {
39456
+ "properties": [
39457
+ {
39458
+ "name": "allowHalf",
39459
+ "description": "Allow values in half-star steps.",
39460
+ "value": {
39461
+ "type": "boolean",
39462
+ "kind": "expression"
39463
+ }
39464
+ },
39465
+ {
39466
+ "name": "ariaLabel",
39467
+ "description": "Accessible name of the rating control.",
39468
+ "value": {
39469
+ "type": "string | null",
39470
+ "kind": "expression"
39471
+ }
39472
+ }
39473
+ ],
39474
+ "events": [
39475
+ {
39476
+ "name": "rate-change",
39477
+ "description": "Fired after the user commits a rating. `detail.value` is the new value.",
39478
+ "value": {
39479
+ "type": "CustomEvent<RateChangeEventDetail>",
39480
+ "kind": "expression"
39481
+ }
39482
+ },
39483
+ {
39484
+ "name": "input",
39485
+ "description": "Fired with `rate-change` for form and framework bindings.",
39486
+ "value": {
39487
+ "type": "Event",
39488
+ "kind": "expression"
39489
+ }
39490
+ },
39491
+ {
39492
+ "name": "change",
39493
+ "description": "Fired with `rate-change` after the value is committed.",
39494
+ "value": {
39495
+ "type": "Event",
39496
+ "kind": "expression"
39497
+ }
39498
+ }
39499
+ ]
39500
+ }
39501
+ },
36788
39502
  {
36789
39503
  "name": "c2-reorder-list",
36790
39504
  "description": "`@c2n/reorder-list`",
@@ -37512,6 +40226,70 @@
37512
40226
  "events": []
37513
40227
  }
37514
40228
  },
40229
+ {
40230
+ "name": "c2-status-panel",
40231
+ "description": "Presents a meaningful application state with optional media, supporting copy, actions and additional content. Use it\nfor empty collections, completed operations, errors, unavailable pages and other places where the user needs a clear\nexplanation and next step.\n\n`@c2n/status-panel`",
40232
+ "attributes": [
40233
+ {
40234
+ "name": "status",
40235
+ "description": "Visual tone and default media icon.",
40236
+ "default": "'neutral'",
40237
+ "value": {
40238
+ "type": "StatusPanelStatus",
40239
+ "kind": "expression"
40240
+ }
40241
+ },
40242
+ {
40243
+ "name": "align",
40244
+ "description": "Centers the composition or aligns it to the inline start.",
40245
+ "default": "'center'",
40246
+ "value": {
40247
+ "type": "StatusPanelAlign",
40248
+ "kind": "expression"
40249
+ }
40250
+ },
40251
+ {
40252
+ "name": "heading",
40253
+ "description": "Plain-text title fallback. Use the `title` slot for rich content.",
40254
+ "default": "''",
40255
+ "value": {
40256
+ "type": "string",
40257
+ "kind": "expression"
40258
+ }
40259
+ },
40260
+ {
40261
+ "name": "description",
40262
+ "description": "Plain-text description fallback. Use the `description` slot for rich content.",
40263
+ "default": "''",
40264
+ "value": {
40265
+ "type": "string",
40266
+ "kind": "expression"
40267
+ }
40268
+ },
40269
+ {
40270
+ "name": "heading-level",
40271
+ "description": "Accessible heading level used by the title region.",
40272
+ "default": "2",
40273
+ "value": {
40274
+ "type": "number",
40275
+ "kind": "expression"
40276
+ }
40277
+ }
40278
+ ],
40279
+ "js": {
40280
+ "properties": [
40281
+ {
40282
+ "name": "headingLevel",
40283
+ "description": "Accessible heading level used by the title region.",
40284
+ "value": {
40285
+ "type": "number",
40286
+ "kind": "expression"
40287
+ }
40288
+ }
40289
+ ],
40290
+ "events": []
40291
+ }
40292
+ },
37515
40293
  {
37516
40294
  "name": "c2-switch",
37517
40295
  "description": "On/off toggle built on a native `<input type=\"checkbox\" role=\"switch\">`, so keyboard activation (Space), form value\nand the `switch` role come from the browser. The thumb can also be dragged: it follows the pointer and the side it is\nreleased on decides the state. The whole row is the label: text in the default slot and an optional `description`\nsit beside the track, and clicking them toggles it. Icons for either state can ride inside the thumb.\n\n`@c2n/switch`",
@@ -37736,6 +40514,42 @@
37736
40514
  "kind": "expression"
37737
40515
  }
37738
40516
  },
40517
+ {
40518
+ "name": "animate-updates",
40519
+ "description": "Smoothly interpolates changed finite numbers when `rows` is replaced. Rows are matched by `row-key`, or by index.",
40520
+ "default": "false",
40521
+ "value": {
40522
+ "type": "boolean",
40523
+ "kind": "expression"
40524
+ }
40525
+ },
40526
+ {
40527
+ "name": "update-duration",
40528
+ "description": "Duration of an animated rows update in milliseconds.",
40529
+ "default": "400",
40530
+ "value": {
40531
+ "type": "number",
40532
+ "kind": "expression"
40533
+ }
40534
+ },
40535
+ {
40536
+ "name": "highlight-updates",
40537
+ "description": "Pulses changed row backgrounds: green for additions/increases, red for removals/decreases, blue otherwise.",
40538
+ "default": "false",
40539
+ "value": {
40540
+ "type": "boolean",
40541
+ "kind": "expression"
40542
+ }
40543
+ },
40544
+ {
40545
+ "name": "update-highlight-field",
40546
+ "description": "Numeric field that determines whether a modified row highlights as increased or decreased. Defaults to its first changed number.",
40547
+ "default": "''",
40548
+ "value": {
40549
+ "type": "string",
40550
+ "kind": "expression"
40551
+ }
40552
+ },
37739
40553
  {
37740
40554
  "name": "virtual",
37741
40555
  "description": "`auto` virtualizes past `virtual-threshold` rows; `always` and `never` force it.",
@@ -37861,6 +40675,38 @@
37861
40675
  "kind": "expression"
37862
40676
  }
37863
40677
  },
40678
+ {
40679
+ "name": "animateUpdates",
40680
+ "description": "Smoothly interpolates changed finite numbers when `rows` is replaced. Rows are matched by `row-key`, or by index.",
40681
+ "value": {
40682
+ "type": "boolean",
40683
+ "kind": "expression"
40684
+ }
40685
+ },
40686
+ {
40687
+ "name": "updateDuration",
40688
+ "description": "Duration of an animated rows update in milliseconds.",
40689
+ "value": {
40690
+ "type": "number",
40691
+ "kind": "expression"
40692
+ }
40693
+ },
40694
+ {
40695
+ "name": "highlightUpdates",
40696
+ "description": "Pulses changed row backgrounds: green for additions/increases, red for removals/decreases, blue otherwise.",
40697
+ "value": {
40698
+ "type": "boolean",
40699
+ "kind": "expression"
40700
+ }
40701
+ },
40702
+ {
40703
+ "name": "updateHighlightField",
40704
+ "description": "Numeric field that determines whether a modified row highlights as increased or decreased. Defaults to its first changed number.",
40705
+ "value": {
40706
+ "type": "string",
40707
+ "kind": "expression"
40708
+ }
40709
+ },
37864
40710
  {
37865
40711
  "name": "rowHeight",
37866
40712
  "description": "Row height in pixels used before the first row has been measured.",
@@ -39244,6 +42090,532 @@
39244
42090
  ]
39245
42091
  }
39246
42092
  },
42093
+ {
42094
+ "name": "c2-tree",
42095
+ "description": "Hierarchical tree view with expansion, selection and lazy loading.\n\n`@c2n/tree`",
42096
+ "attributes": [
42097
+ {
42098
+ "name": "items",
42099
+ "description": "Nodes to render. Leave empty and nest `c2-tree-item` elements instead to author the tree in markup.",
42100
+ "default": "[]",
42101
+ "value": {
42102
+ "type": "TreeNode[]",
42103
+ "kind": "expression"
42104
+ }
42105
+ },
42106
+ {
42107
+ "name": "value",
42108
+ "description": "Values of the selected rows. Reflected as a `;`-separated attribute.",
42109
+ "default": "[]",
42110
+ "value": {
42111
+ "type": "string[]",
42112
+ "kind": "expression"
42113
+ }
42114
+ },
42115
+ {
42116
+ "name": "expanded-items",
42117
+ "description": "Values of the expanded rows. Reflected as a `;`-separated attribute.",
42118
+ "default": "[]",
42119
+ "value": {
42120
+ "type": "string[]",
42121
+ "kind": "expression"
42122
+ }
42123
+ },
42124
+ {
42125
+ "name": "selection",
42126
+ "description": "How many rows may be selected at once.",
42127
+ "default": "'single'",
42128
+ "value": {
42129
+ "type": "TreeSelectionMode",
42130
+ "kind": "expression"
42131
+ }
42132
+ },
42133
+ {
42134
+ "name": "checkbox-selection",
42135
+ "description": "Shows a checkbox on every row. Implies `selection=\"multiple\"`.",
42136
+ "default": "false",
42137
+ "value": {
42138
+ "type": "boolean",
42139
+ "kind": "expression"
42140
+ }
42141
+ },
42142
+ {
42143
+ "name": "selection-propagation",
42144
+ "description": "How a checkbox tick travels between a row and its relatives.",
42145
+ "default": "'both'",
42146
+ "value": {
42147
+ "type": "TreeSelectionPropagation",
42148
+ "kind": "expression"
42149
+ }
42150
+ },
42151
+ {
42152
+ "name": "children-outline",
42153
+ "description": "Draws a vertical rule per level of depth, marking which branch each row belongs to.",
42154
+ "default": "false",
42155
+ "value": {
42156
+ "type": "boolean",
42157
+ "kind": "expression"
42158
+ }
42159
+ },
42160
+ {
42161
+ "name": "disabled",
42162
+ "description": "Freezes the whole tree.",
42163
+ "default": "false",
42164
+ "value": {
42165
+ "type": "boolean",
42166
+ "kind": "expression"
42167
+ }
42168
+ },
42169
+ {
42170
+ "name": "expand-on-click",
42171
+ "description": "Expands a branch when its row is clicked — or activated with Enter or Space — not only when its toggle is.",
42172
+ "default": "false",
42173
+ "value": {
42174
+ "type": "boolean",
42175
+ "kind": "expression"
42176
+ }
42177
+ }
42178
+ ],
42179
+ "js": {
42180
+ "properties": [
42181
+ {
42182
+ "name": "expandedItems",
42183
+ "description": "Values of the expanded rows. Reflected as a `;`-separated attribute.",
42184
+ "value": {
42185
+ "type": "string[]",
42186
+ "kind": "expression"
42187
+ }
42188
+ },
42189
+ {
42190
+ "name": "checkboxSelection",
42191
+ "description": "Shows a checkbox on every row. Implies `selection=\"multiple\"`.",
42192
+ "value": {
42193
+ "type": "boolean",
42194
+ "kind": "expression"
42195
+ }
42196
+ },
42197
+ {
42198
+ "name": "selectionPropagation",
42199
+ "description": "How a checkbox tick travels between a row and its relatives.",
42200
+ "value": {
42201
+ "type": "TreeSelectionPropagation",
42202
+ "kind": "expression"
42203
+ }
42204
+ },
42205
+ {
42206
+ "name": "childrenOutline",
42207
+ "description": "Draws a vertical rule per level of depth, marking which branch each row belongs to.",
42208
+ "value": {
42209
+ "type": "boolean",
42210
+ "kind": "expression"
42211
+ }
42212
+ },
42213
+ {
42214
+ "name": "expandOnClick",
42215
+ "description": "Expands a branch when its row is clicked — or activated with Enter or Space — not only when its toggle is.",
42216
+ "value": {
42217
+ "type": "boolean",
42218
+ "kind": "expression"
42219
+ }
42220
+ }
42221
+ ],
42222
+ "events": [
42223
+ {
42224
+ "name": "expansion-change",
42225
+ "description": "Fired after a row is expanded or collapsed. Does not bubble.",
42226
+ "value": {
42227
+ "type": "CustomEvent<TreeExpansionChangeEventDetail>",
42228
+ "kind": "expression"
42229
+ }
42230
+ },
42231
+ {
42232
+ "name": "item-load-error",
42233
+ "description": "Fired when `loadChildren` rejects.",
42234
+ "value": {
42235
+ "type": "CustomEvent<TreeItemLoadErrorEventDetail>",
42236
+ "kind": "expression"
42237
+ }
42238
+ },
42239
+ {
42240
+ "name": "selection-change",
42241
+ "description": "Fired after the user changes the selection. Does not bubble: several components fire `selection-change`, so a listener belongs on the element itself.",
42242
+ "value": {
42243
+ "type": "CustomEvent<TreeSelectionChangeEventDetail>",
42244
+ "kind": "expression"
42245
+ }
42246
+ },
42247
+ {
42248
+ "name": "item-click",
42249
+ "description": "Fired when a row is clicked, selected or not.",
42250
+ "value": {
42251
+ "type": "CustomEvent<TreeItemClickEventDetail>",
42252
+ "kind": "expression"
42253
+ }
42254
+ },
42255
+ {
42256
+ "name": "item-expand",
42257
+ "description": "Fired when a row expands. Call `preventDefault()` to keep it closed. This is where a consumer authoring in markup appends children for a lazily loaded branch.",
42258
+ "value": {
42259
+ "type": "CustomEvent<TreeItemExpandEventDetail>",
42260
+ "kind": "expression"
42261
+ }
42262
+ }
42263
+ ]
42264
+ }
42265
+ },
42266
+ {
42267
+ "name": "c2-tree-item",
42268
+ "description": "One row of a https://github.com/code2nguyen/web-components | `c2-tree`.\n\n`@c2n/tree`",
42269
+ "attributes": [
42270
+ {
42271
+ "name": "value",
42272
+ "description": "Identity of the row. Selection and expansion are tracked by this value, so it must be unique in the tree.",
42273
+ "default": "''",
42274
+ "value": {
42275
+ "type": "string",
42276
+ "kind": "expression"
42277
+ }
42278
+ },
42279
+ {
42280
+ "name": "label",
42281
+ "description": "Text of the row. Ignored when the `label` slot is filled; falls back to `value` when empty.",
42282
+ "default": "''",
42283
+ "value": {
42284
+ "type": "string",
42285
+ "kind": "expression"
42286
+ }
42287
+ },
42288
+ {
42289
+ "name": "disabled",
42290
+ "description": "Blocks selection and expansion, and takes the row out of checkbox propagation.",
42291
+ "default": "false",
42292
+ "value": {
42293
+ "type": "boolean",
42294
+ "kind": "expression"
42295
+ }
42296
+ },
42297
+ {
42298
+ "name": "has-children",
42299
+ "description": "Marks a branch whose children load on demand: the toggle shows before any child exists.",
42300
+ "default": "false",
42301
+ "value": {
42302
+ "type": "boolean",
42303
+ "kind": "expression"
42304
+ }
42305
+ },
42306
+ {
42307
+ "name": "href",
42308
+ "description": "Turns the row into a link. The whole row becomes the click target; the toggle still only expands.",
42309
+ "default": "''",
42310
+ "value": {
42311
+ "type": "string",
42312
+ "kind": "expression"
42313
+ }
42314
+ },
42315
+ {
42316
+ "name": "target",
42317
+ "description": "Browsing context for `href`, e.g. `_blank`. A `_blank` row gets `rel=\"noopener noreferrer\"`.",
42318
+ "value": {
42319
+ "type": "string | undefined",
42320
+ "kind": "expression"
42321
+ }
42322
+ },
42323
+ {
42324
+ "name": "expanded",
42325
+ "description": "Whether the children are shown. Written by the parent `c2-tree`.",
42326
+ "default": "false",
42327
+ "value": {
42328
+ "type": "boolean",
42329
+ "kind": "expression"
42330
+ }
42331
+ },
42332
+ {
42333
+ "name": "selected",
42334
+ "description": "Whether the row is selected. Written by the parent `c2-tree`.",
42335
+ "default": "false",
42336
+ "value": {
42337
+ "type": "boolean",
42338
+ "kind": "expression"
42339
+ }
42340
+ },
42341
+ {
42342
+ "name": "indeterminate",
42343
+ "description": "Whether only part of the subtree is selected. Derived and written by the parent `c2-tree`.",
42344
+ "default": "false",
42345
+ "value": {
42346
+ "type": "boolean",
42347
+ "kind": "expression"
42348
+ }
42349
+ },
42350
+ {
42351
+ "name": "loading",
42352
+ "description": "Whether the children are being fetched. Written by the parent `c2-tree`.",
42353
+ "default": "false",
42354
+ "value": {
42355
+ "type": "boolean",
42356
+ "kind": "expression"
42357
+ }
42358
+ },
42359
+ {
42360
+ "name": "children-outline",
42361
+ "description": "Whether to draw the indent guides. Written by the parent `c2-tree`, and reflected because the rules are\ndrawn in CSS and the stylesheet has to see it.",
42362
+ "default": "false",
42363
+ "value": {
42364
+ "type": "boolean",
42365
+ "kind": "expression"
42366
+ }
42367
+ }
42368
+ ],
42369
+ "js": {
42370
+ "properties": [
42371
+ {
42372
+ "name": "hasChildren",
42373
+ "description": "Marks a branch whose children load on demand: the toggle shows before any child exists.",
42374
+ "value": {
42375
+ "type": "boolean",
42376
+ "kind": "expression"
42377
+ }
42378
+ },
42379
+ {
42380
+ "name": "childrenOutline",
42381
+ "description": "Whether to draw the indent guides. Written by the parent `c2-tree`, and reflected because the rules are\ndrawn in CSS and the stylesheet has to see it.",
42382
+ "value": {
42383
+ "type": "boolean",
42384
+ "kind": "expression"
42385
+ }
42386
+ }
42387
+ ],
42388
+ "events": [
42389
+ {
42390
+ "name": "TREE_ITEM_CHANGE_EVENT",
42391
+ "value": {
42392
+ "type": "CustomEvent",
42393
+ "kind": "expression"
42394
+ }
42395
+ },
42396
+ {
42397
+ "name": "TREE_ITEM_TOGGLE_EVENT",
42398
+ "value": {
42399
+ "type": "CustomEvent",
42400
+ "kind": "expression"
42401
+ }
42402
+ },
42403
+ {
42404
+ "name": "TREE_ITEM_CHECK_EVENT",
42405
+ "value": {
42406
+ "type": "CustomEvent",
42407
+ "kind": "expression"
42408
+ }
42409
+ }
42410
+ ]
42411
+ }
42412
+ },
42413
+ {
42414
+ "name": "c2-upload",
42415
+ "description": "Drag-and-drop file uploader with multiple selection, validation and an attachment-based upload queue. Set an async\n`uploadHandler(file, { signal, onProgress })` property to connect transport; the component owns progress, success,\nerror, retry, cancel and removal UI while leaving network policy to the application.\n\n`@c2n/upload`",
42416
+ "attributes": [
42417
+ {
42418
+ "name": "multiple",
42419
+ "description": "Accept several files in one browse or drop operation.",
42420
+ "default": "false",
42421
+ "value": {
42422
+ "type": "boolean",
42423
+ "kind": "expression"
42424
+ }
42425
+ },
42426
+ {
42427
+ "name": "variant",
42428
+ "description": "Dropzone provides drag-and-drop; compact renders only an upload button.",
42429
+ "default": "'dropzone'",
42430
+ "value": {
42431
+ "type": "UploadVariant",
42432
+ "kind": "expression"
42433
+ }
42434
+ },
42435
+ {
42436
+ "name": "accept",
42437
+ "description": "Comma-separated MIME types or file extensions, using the native file-input syntax.",
42438
+ "default": "''",
42439
+ "value": {
42440
+ "type": "string",
42441
+ "kind": "expression"
42442
+ }
42443
+ },
42444
+ {
42445
+ "name": "max-files",
42446
+ "description": "Maximum number of queued files. Zero means unlimited.",
42447
+ "default": "0",
42448
+ "value": {
42449
+ "type": "number",
42450
+ "kind": "expression"
42451
+ }
42452
+ },
42453
+ {
42454
+ "name": "max-size",
42455
+ "description": "Maximum size of each file in bytes. Zero means unlimited.",
42456
+ "default": "0",
42457
+ "value": {
42458
+ "type": "number",
42459
+ "kind": "expression"
42460
+ }
42461
+ },
42462
+ {
42463
+ "name": "auto-upload",
42464
+ "description": "Run `uploadHandler` immediately after files are accepted.",
42465
+ "default": "true",
42466
+ "value": {
42467
+ "type": "boolean",
42468
+ "kind": "expression"
42469
+ }
42470
+ },
42471
+ {
42472
+ "name": "disabled",
42473
+ "description": "Disables browsing, dropping and attachment actions.",
42474
+ "default": "false",
42475
+ "value": {
42476
+ "type": "boolean",
42477
+ "kind": "expression"
42478
+ }
42479
+ },
42480
+ {
42481
+ "name": "required",
42482
+ "description": "Requires at least one selected file for native form validation.",
42483
+ "default": "false",
42484
+ "value": {
42485
+ "type": "boolean",
42486
+ "kind": "expression"
42487
+ }
42488
+ },
42489
+ {
42490
+ "name": "name",
42491
+ "description": "Form field name. Each queued file is appended with this name.",
42492
+ "default": "''",
42493
+ "value": {
42494
+ "type": "string",
42495
+ "kind": "expression"
42496
+ }
42497
+ },
42498
+ {
42499
+ "name": "aria-label",
42500
+ "description": "Accessible name for the drop zone.",
42501
+ "default": "null",
42502
+ "value": {
42503
+ "type": "string | null",
42504
+ "kind": "expression"
42505
+ }
42506
+ }
42507
+ ],
42508
+ "js": {
42509
+ "properties": [
42510
+ {
42511
+ "name": "maxFiles",
42512
+ "description": "Maximum number of queued files. Zero means unlimited.",
42513
+ "value": {
42514
+ "type": "number",
42515
+ "kind": "expression"
42516
+ }
42517
+ },
42518
+ {
42519
+ "name": "maxSize",
42520
+ "description": "Maximum size of each file in bytes. Zero means unlimited.",
42521
+ "value": {
42522
+ "type": "number",
42523
+ "kind": "expression"
42524
+ }
42525
+ },
42526
+ {
42527
+ "name": "autoUpload",
42528
+ "description": "Run `uploadHandler` immediately after files are accepted.",
42529
+ "value": {
42530
+ "type": "boolean",
42531
+ "kind": "expression"
42532
+ }
42533
+ },
42534
+ {
42535
+ "name": "ariaLabel",
42536
+ "description": "Accessible name for the drop zone.",
42537
+ "value": {
42538
+ "type": "string | null",
42539
+ "kind": "expression"
42540
+ }
42541
+ }
42542
+ ],
42543
+ "events": [
42544
+ {
42545
+ "name": "input",
42546
+ "description": "Fired whenever the file value changes, for form and framework bindings.",
42547
+ "value": {
42548
+ "type": "Event",
42549
+ "kind": "expression"
42550
+ }
42551
+ },
42552
+ {
42553
+ "name": "change",
42554
+ "description": "Fired whenever files are added or removed, for form and framework bindings.",
42555
+ "value": {
42556
+ "type": "Event",
42557
+ "kind": "expression"
42558
+ }
42559
+ },
42560
+ {
42561
+ "name": "files-selected",
42562
+ "description": "Fired after valid files enter the queue through browse, drop or `addFiles()`.",
42563
+ "value": {
42564
+ "type": "CustomEvent<UploadFilesEventDetail>",
42565
+ "kind": "expression"
42566
+ }
42567
+ },
42568
+ {
42569
+ "name": "file-reject",
42570
+ "description": "Fired when type, size, count or single-file rules reject files.",
42571
+ "value": {
42572
+ "type": "CustomEvent<{ rejections: UploadRejection[] }>",
42573
+ "kind": "expression"
42574
+ }
42575
+ },
42576
+ {
42577
+ "name": "upload-start",
42578
+ "description": "Fired when an item begins uploading.",
42579
+ "value": {
42580
+ "type": "CustomEvent<{ item: UploadItem }>",
42581
+ "kind": "expression"
42582
+ }
42583
+ },
42584
+ {
42585
+ "name": "upload-progress",
42586
+ "description": "Fired when the upload handler reports progress.",
42587
+ "value": {
42588
+ "type": "CustomEvent<UploadProgressEventDetail>",
42589
+ "kind": "expression"
42590
+ }
42591
+ },
42592
+ {
42593
+ "name": "upload-success",
42594
+ "description": "Fired after an upload handler resolves; `item.result` contains its result.",
42595
+ "value": {
42596
+ "type": "CustomEvent<UploadResultEventDetail>",
42597
+ "kind": "expression"
42598
+ }
42599
+ },
42600
+ {
42601
+ "name": "upload-error",
42602
+ "description": "Fired after an upload handler rejects; `item.error` contains the error.",
42603
+ "value": {
42604
+ "type": "CustomEvent<UploadResultEventDetail>",
42605
+ "kind": "expression"
42606
+ }
42607
+ },
42608
+ {
42609
+ "name": "upload-remove",
42610
+ "description": "Fired after an item is removed or an active upload is cancelled.",
42611
+ "value": {
42612
+ "type": "CustomEvent<{ item: UploadItem }>",
42613
+ "kind": "expression"
42614
+ }
42615
+ }
42616
+ ]
42617
+ }
42618
+ },
39247
42619
  {
39248
42620
  "name": "c2-virtual-list",
39249
42621
  "description": "A long list that only renders what you can see. It windows `items` to the visible range plus an overscan margin with\nthe same `VirtualScrollController` the data grid uses, so 50 000 rows cost the same DOM as 20, and it renders every\nvisible row as a real `c2-list-item` — the same markup, slots, selection styling and theme as `c2-list`.\n\n`@c2n/virtual-list`",