@c2n/framework-types 0.0.8 → 0.0.10

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.8",
4
+ "version": "0.0.10",
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,93 @@
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
+ }
649
+ }
650
+ ]
651
+ }
652
+ },
653
+ {
654
+ "name": "c2-avatar-group",
655
+ "description": "Responsive stack of `c2-avatar` elements. It observes its rendered width and each avatar's actual size, then hides\nthe avatars that no longer fit and replaces them with a count. The host fills the available inline space up to\n`--c2-avatar-group--max-width`, so it also reacts when its parent becomes narrower.\n\n`@c2n/avatar`",
656
+ "attributes": [
657
+ {
658
+ "name": "max-visible",
659
+ "description": "Optional hard cap in addition to the automatically calculated responsive limit. Zero means no hard cap.",
660
+ "default": "0",
661
+ "value": {
662
+ "type": "number",
663
+ "kind": "expression"
664
+ }
665
+ },
666
+ {
667
+ "name": "count-mode",
668
+ "description": "Whether the overflow indicator shows `+hidden` or the total number of avatars.",
669
+ "default": "'hidden'",
670
+ "value": {
671
+ "type": "AvatarGroupCountMode",
672
+ "kind": "expression"
673
+ }
674
+ },
675
+ {
676
+ "name": "aria-label",
677
+ "description": "Accessible name for the group.",
678
+ "default": "'Avatar group'",
679
+ "value": {
680
+ "type": "string",
681
+ "kind": "expression"
682
+ }
683
+ }
684
+ ],
685
+ "js": {
686
+ "properties": [
687
+ {
688
+ "name": "maxVisible",
689
+ "description": "Optional hard cap in addition to the automatically calculated responsive limit. Zero means no hard cap.",
690
+ "value": {
691
+ "type": "number",
692
+ "kind": "expression"
693
+ }
694
+ },
695
+ {
696
+ "name": "countMode",
697
+ "description": "Whether the overflow indicator shows `+hidden` or the total number of avatars.",
698
+ "value": {
699
+ "type": "AvatarGroupCountMode",
700
+ "kind": "expression"
701
+ }
702
+ },
703
+ {
704
+ "name": "ariaLabel",
705
+ "description": "Accessible name for the group.",
706
+ "value": {
707
+ "type": "string",
708
+ "kind": "expression"
709
+ }
710
+ }
711
+ ],
712
+ "events": [
713
+ {
714
+ "name": "overflow-change",
715
+ "description": "Fired when resizing changes the visible or hidden counts.",
716
+ "value": {
717
+ "type": "CustomEvent<AvatarGroupOverflowDetail>",
718
+ "kind": "expression"
719
+ }
581
720
  }
582
721
  ]
583
722
  }
@@ -673,6 +812,52 @@
673
812
  "events": []
674
813
  }
675
814
  },
815
+ {
816
+ "name": "c2-border-beam",
817
+ "description": "Decorative overlay that sends one or more soft highlights around the border of its containing block. Place it as\na direct child of a positioned container. The component inherits the container radius and uses a border mask, so\nthe highlight sits on the real border instead of drawing a second, offset outline.\n\n`@c2n/border-beam`",
818
+ "attributes": [
819
+ {
820
+ "name": "count",
821
+ "description": "Number of beams distributed evenly around the perimeter.",
822
+ "default": "1",
823
+ "value": {
824
+ "type": "number",
825
+ "kind": "expression"
826
+ }
827
+ },
828
+ {
829
+ "name": "side",
830
+ "description": "Border followed by the beam. `all` loops around the perimeter; one edge moves forward then backward.",
831
+ "default": "'all'",
832
+ "value": {
833
+ "type": "BorderBeamSide",
834
+ "kind": "expression"
835
+ }
836
+ },
837
+ {
838
+ "name": "reverse",
839
+ "description": "Sends the beams around the perimeter in the opposite direction.",
840
+ "default": "false",
841
+ "value": {
842
+ "type": "boolean",
843
+ "kind": "expression"
844
+ }
845
+ },
846
+ {
847
+ "name": "paused",
848
+ "description": "Freezes the beams at their current positions.",
849
+ "default": "false",
850
+ "value": {
851
+ "type": "boolean",
852
+ "kind": "expression"
853
+ }
854
+ }
855
+ ],
856
+ "js": {
857
+ "properties": [],
858
+ "events": []
859
+ }
860
+ },
676
861
  {
677
862
  "name": "c2-breadcrumb",
678
863
  "description": "Navigation trail. Every light-DOM child is one item, typically a `c2-link-button` with an `href`, and the last one\nis the current page: it is marked `aria-current=\"page\"` (through `selected` on a link button) and styled as text.\nA separator is drawn between items, a chevron by default or whatever is placed in the `separator` slot. The trail\nstays on one row: when the items do not fit the available width, some collapse behind an ellipsis, in priority\norder: the current page is always shown, then the first item, then the items closest to the current page while room\nremains. `max-items` caps how many are shown even when there is room. Clicking the ellipsis reveals every item\n(wrapping if needed).\n\n`@c2n/breadcrumb`",
@@ -765,7 +950,7 @@
765
950
  },
766
951
  {
767
952
  "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`",
953
+ "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
954
  "attributes": [
770
955
  {
771
956
  "name": "selection",
@@ -803,6 +988,33 @@
803
988
  "kind": "expression"
804
989
  }
805
990
  },
991
+ {
992
+ "name": "appearance",
993
+ "description": "`segmented` adds an inset track and sliding selected surface and always uses single selection.",
994
+ "default": "'joined'",
995
+ "value": {
996
+ "type": "ButtonGroupAppearance",
997
+ "kind": "expression"
998
+ }
999
+ },
1000
+ {
1001
+ "name": "size",
1002
+ "description": "Segmented control size.",
1003
+ "default": "'m'",
1004
+ "value": {
1005
+ "type": "ButtonGroupSize",
1006
+ "kind": "expression"
1007
+ }
1008
+ },
1009
+ {
1010
+ "name": "stretched",
1011
+ "description": "Makes the group and every item share the available width.",
1012
+ "default": "false",
1013
+ "value": {
1014
+ "type": "boolean",
1015
+ "kind": "expression"
1016
+ }
1017
+ },
806
1018
  {
807
1019
  "name": "aria-label",
808
1020
  "description": "Accessible name of the group.",
@@ -890,6 +1102,182 @@
890
1102
  "events": []
891
1103
  }
892
1104
  },
1105
+ {
1106
+ "name": "c2-cascader",
1107
+ "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`",
1108
+ "attributes": [
1109
+ {
1110
+ "name": "options",
1111
+ "description": "Nested hierarchy shown in the floating panel. In markup this is a JSON array.",
1112
+ "default": "[]",
1113
+ "value": {
1114
+ "type": "CascaderOption[]",
1115
+ "kind": "expression"
1116
+ }
1117
+ },
1118
+ {
1119
+ "name": "value",
1120
+ "description": "Selected value path. In markup, separate levels with semicolons.",
1121
+ "default": "[]",
1122
+ "value": {
1123
+ "type": "string[]",
1124
+ "kind": "expression"
1125
+ }
1126
+ },
1127
+ {
1128
+ "name": "name",
1129
+ "description": "Name used when the cascader participates in a form.",
1130
+ "default": "''",
1131
+ "value": {
1132
+ "type": "string",
1133
+ "kind": "expression"
1134
+ }
1135
+ },
1136
+ {
1137
+ "name": "placeholder",
1138
+ "description": "Text shown before a path is selected.",
1139
+ "default": "'Please select'",
1140
+ "value": {
1141
+ "type": "string",
1142
+ "kind": "expression"
1143
+ }
1144
+ },
1145
+ {
1146
+ "name": "separator",
1147
+ "description": "String placed between selected labels in the trigger.",
1148
+ "default": "' / '",
1149
+ "value": {
1150
+ "type": "string",
1151
+ "kind": "expression"
1152
+ }
1153
+ },
1154
+ {
1155
+ "name": "aria-label",
1156
+ "description": "Accessible name forwarded to the trigger and option tree.",
1157
+ "default": "null",
1158
+ "value": {
1159
+ "type": "string | null",
1160
+ "kind": "expression"
1161
+ }
1162
+ },
1163
+ {
1164
+ "name": "open",
1165
+ "description": "Whether the floating panel is open.",
1166
+ "default": "false",
1167
+ "value": {
1168
+ "type": "boolean",
1169
+ "kind": "expression"
1170
+ }
1171
+ },
1172
+ {
1173
+ "name": "disabled",
1174
+ "description": "Disables opening, selection and form submission.",
1175
+ "default": "false",
1176
+ "value": {
1177
+ "type": "boolean",
1178
+ "kind": "expression"
1179
+ }
1180
+ },
1181
+ {
1182
+ "name": "readonly",
1183
+ "description": "Displays the selected path without allowing changes.",
1184
+ "default": "false",
1185
+ "value": {
1186
+ "type": "boolean",
1187
+ "kind": "expression"
1188
+ }
1189
+ },
1190
+ {
1191
+ "name": "required",
1192
+ "description": "Requires a committed path for native form validation.",
1193
+ "default": "false",
1194
+ "value": {
1195
+ "type": "boolean",
1196
+ "kind": "expression"
1197
+ }
1198
+ },
1199
+ {
1200
+ "name": "change-on-select",
1201
+ "description": "Commit branch values as they are chosen instead of waiting for a leaf.",
1202
+ "default": "false",
1203
+ "value": {
1204
+ "type": "boolean",
1205
+ "kind": "expression"
1206
+ }
1207
+ },
1208
+ {
1209
+ "name": "expand-trigger",
1210
+ "description": "Open child columns on pointer hover instead of click.",
1211
+ "default": "'click'",
1212
+ "value": {
1213
+ "type": "'click' | 'hover'",
1214
+ "kind": "expression"
1215
+ }
1216
+ }
1217
+ ],
1218
+ "js": {
1219
+ "properties": [
1220
+ {
1221
+ "name": "ariaLabel",
1222
+ "description": "Accessible name forwarded to the trigger and option tree.",
1223
+ "value": {
1224
+ "type": "string | null",
1225
+ "kind": "expression"
1226
+ }
1227
+ },
1228
+ {
1229
+ "name": "changeOnSelect",
1230
+ "description": "Commit branch values as they are chosen instead of waiting for a leaf.",
1231
+ "value": {
1232
+ "type": "boolean",
1233
+ "kind": "expression"
1234
+ }
1235
+ },
1236
+ {
1237
+ "name": "expandTrigger",
1238
+ "description": "Open child columns on pointer hover instead of click.",
1239
+ "value": {
1240
+ "type": "'click' | 'hover'",
1241
+ "kind": "expression"
1242
+ }
1243
+ }
1244
+ ],
1245
+ "events": [
1246
+ {
1247
+ "name": "open-change",
1248
+ "description": "Fired when the floating panel opens or closes.",
1249
+ "value": {
1250
+ "type": "CustomEvent<{ open: boolean }>",
1251
+ "kind": "expression"
1252
+ }
1253
+ },
1254
+ {
1255
+ "name": "cascader-change",
1256
+ "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.",
1257
+ "value": {
1258
+ "type": "CustomEvent<CascaderChangeEventDetail>",
1259
+ "kind": "expression"
1260
+ }
1261
+ },
1262
+ {
1263
+ "name": "input",
1264
+ "description": "Fired after `value` changes through user interaction.",
1265
+ "value": {
1266
+ "type": "Event",
1267
+ "kind": "expression"
1268
+ }
1269
+ },
1270
+ {
1271
+ "name": "change",
1272
+ "description": "Fired after `value` changes through user interaction.",
1273
+ "value": {
1274
+ "type": "Event",
1275
+ "kind": "expression"
1276
+ }
1277
+ }
1278
+ ]
1279
+ }
1280
+ },
893
1281
  {
894
1282
  "name": "c2-area-chart",
895
1283
  "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`",
@@ -1044,8 +1432,8 @@
1044
1432
  },
1045
1433
  {
1046
1434
  "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'",
1435
+ "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.",
1436
+ "default": "'auto'",
1049
1437
  "value": {
1050
1438
  "type": "'none' | 'auto'",
1051
1439
  "kind": "expression"
@@ -1394,8 +1782,8 @@
1394
1782
  },
1395
1783
  {
1396
1784
  "name": "animation",
1397
- "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.",
1398
- "default": "'none'",
1785
+ "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.",
1786
+ "default": "'auto'",
1399
1787
  "value": {
1400
1788
  "type": "'none' | 'auto'",
1401
1789
  "kind": "expression"
@@ -1736,8 +2124,8 @@
1736
2124
  },
1737
2125
  {
1738
2126
  "name": "animation",
1739
- "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.",
1740
- "default": "'none'",
2127
+ "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.",
2128
+ "default": "'auto'",
1741
2129
  "value": {
1742
2130
  "type": "'none' | 'auto'",
1743
2131
  "kind": "expression"
@@ -2184,6 +2572,15 @@
2184
2572
  "kind": "expression"
2185
2573
  }
2186
2574
  },
2575
+ {
2576
+ "name": "marks",
2577
+ "description": "Whether to draw the small axis ticks and division lines around the arc.",
2578
+ "default": "'show'",
2579
+ "value": {
2580
+ "type": "'show' | 'none'",
2581
+ "kind": "expression"
2582
+ }
2583
+ },
2187
2584
  {
2188
2585
  "name": "renderer",
2189
2586
  "description": "Which ECharts renderer to use. SVG prints and scales crisply; canvas is faster with many marks.",
@@ -2265,8 +2662,8 @@
2265
2662
  },
2266
2663
  {
2267
2664
  "name": "animation",
2268
- "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.",
2269
- "default": "'none'",
2665
+ "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.",
2666
+ "default": "'auto'",
2270
2667
  "value": {
2271
2668
  "type": "'none' | 'auto'",
2272
2669
  "kind": "expression"
@@ -2623,8 +3020,8 @@
2623
3020
  },
2624
3021
  {
2625
3022
  "name": "animation",
2626
- "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.",
2627
- "default": "'none'",
3023
+ "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.",
3024
+ "default": "'auto'",
2628
3025
  "value": {
2629
3026
  "type": "'none' | 'auto'",
2630
3027
  "kind": "expression"
@@ -2859,6 +3256,15 @@
2859
3256
  "kind": "expression"
2860
3257
  }
2861
3258
  },
3259
+ {
3260
+ "name": "label-content",
3261
+ "description": "Content shown by visible slice labels.",
3262
+ "default": "'name'",
3263
+ "value": {
3264
+ "type": "'name' | 'value' | 'percent' | 'name-percent'",
3265
+ "kind": "expression"
3266
+ }
3267
+ },
2862
3268
  {
2863
3269
  "name": "sort",
2864
3270
  "description": "Orders the slices by value rather than keeping the data order.",
@@ -2949,8 +3355,8 @@
2949
3355
  },
2950
3356
  {
2951
3357
  "name": "animation",
2952
- "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.",
2953
- "default": "'none'",
3358
+ "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.",
3359
+ "default": "'auto'",
2954
3360
  "value": {
2955
3361
  "type": "'none' | 'auto'",
2956
3362
  "kind": "expression"
@@ -3037,319 +3443,677 @@
3037
3443
  }
3038
3444
  },
3039
3445
  {
3040
- "name": "xField",
3041
- "description": "Row field holding the x value; may be a dotted path. Defaults to the row index.",
3042
- "value": {
3043
- "type": "string",
3044
- "kind": "expression"
3045
- }
3046
- },
3047
- {
3048
- "name": "labelField",
3049
- "description": "Row field holding the category label, for charts that name their slices.",
3050
- "value": {
3051
- "type": "string",
3052
- "kind": "expression"
3053
- }
3054
- },
3055
- {
3056
- "name": "xType",
3057
- "description": "How x values are interpreted, which decides the axis and the tooltip format.",
3058
- "value": {
3059
- "type": "'time' | 'linear' | 'category'",
3060
- "kind": "expression"
3061
- }
3062
- },
3063
- {
3064
- "name": "emptyMessage",
3065
- "description": "Replaces the built-in \"no data\" text.",
3066
- "value": {
3067
- "type": "string",
3068
- "kind": "expression"
3069
- }
3070
- },
3071
- {
3072
- "name": "maxPoints",
3073
- "description": "Caps how many points a streaming chart keeps; older points fall off the front. `0` keeps everything.",
3074
- "value": {
3075
- "type": "number",
3076
- "kind": "expression"
3077
- }
3078
- },
3079
- {
3080
- "name": "lazyRender",
3081
- "description": "Defers loading the engine until the host first scrolls into view.",
3082
- "value": {
3083
- "type": "boolean",
3084
- "kind": "expression"
3085
- }
3086
- }
3087
- ],
3088
- "events": [
3089
- {
3090
- "name": "tooltip-change",
3091
- "description": "Fired with the complete tooltip model as the pointer moves, and with `null` when it leaves. Used by `c2-chart-tooltip`.",
3092
- "value": {
3093
- "type": "CustomEvent<ChartTooltipContext | null>",
3094
- "kind": "expression"
3095
- }
3096
- },
3097
- {
3098
- "name": "series-toggle",
3099
- "description": "Fired when a legend entry is toggled. Does not bubble.",
3446
+ "name": "labelContent",
3447
+ "description": "Content shown by visible slice labels.",
3100
3448
  "value": {
3101
- "type": "CustomEvent<ChartSeriesToggleEventDetail>",
3102
- "kind": "expression"
3103
- }
3104
- },
3105
- {
3106
- "name": "legend-change",
3107
- "description": "Fired when legend entries or visibility change. Used by `c2-chart-legend`.",
3108
- "value": {
3109
- "type": "CustomEvent<ChartLegendChangeEventDetail>",
3110
- "kind": "expression"
3111
- }
3112
- },
3113
- {
3114
- "name": "range-change",
3115
- "description": "Fired after the user zooms or brushes. `detail.min` and `detail.max` are the new x bounds. Does not bubble.",
3116
- "value": {
3117
- "type": "CustomEvent<ChartRangeEventDetail>",
3118
- "kind": "expression"
3119
- }
3120
- },
3121
- {
3122
- "name": "chart-ready",
3123
- "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.",
3124
- "value": {
3125
- "type": "CustomEvent<{ engine: string }>",
3126
- "kind": "expression"
3127
- }
3128
- },
3129
- {
3130
- "name": "chart-error",
3131
- "description": "Fired when the engine fails to load or to draw. `detail.error` is the underlying failure.",
3132
- "value": {
3133
- "type": "CustomEvent<{ error: unknown }>",
3134
- "kind": "expression"
3135
- }
3136
- },
3137
- {
3138
- "name": "point-hover",
3139
- "description": "Fired as the pointer moves between data points, and with a `null` detail when it leaves the plot. Does not bubble.",
3140
- "value": {
3141
- "type": "CustomEvent<ChartPointEventDetail | null>",
3142
- "kind": "expression"
3143
- }
3144
- },
3145
- {
3146
- "name": "point-click",
3147
- "description": "Fired when a datum is clicked. Does not bubble: several components fire point events, so a listener belongs on the element itself.",
3148
- "value": {
3149
- "type": "CustomEvent<ChartPointEventDetail>",
3150
- "kind": "expression"
3151
- }
3152
- }
3153
- ]
3154
- }
3155
- },
3156
- {
3157
- "name": "c2-scatter-chart",
3158
- "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`",
3159
- "attributes": [
3160
- {
3161
- "name": "symbol-size",
3162
- "description": "Diameter of each point in CSS pixels.",
3163
- "default": "10",
3164
- "value": {
3165
- "type": "number",
3166
- "kind": "expression"
3167
- }
3168
- },
3169
- {
3170
- "name": "symbol",
3171
- "description": "Shape used for points.",
3172
- "default": "'circle'",
3173
- "value": {
3174
- "type": "'circle' | 'rect' | 'roundRect' | 'triangle' | 'diamond' | 'pin' | 'arrow'",
3175
- "kind": "expression"
3176
- }
3177
- },
3178
- {
3179
- "name": "large",
3180
- "description": "Enables ECharts' large-point rendering path.",
3181
- "default": "false",
3182
- "value": {
3183
- "type": "boolean",
3184
- "kind": "expression"
3185
- }
3186
- },
3187
- {
3188
- "name": "large-threshold",
3189
- "description": "Point count at which the large rendering path takes effect.",
3190
- "default": "2000",
3191
- "value": {
3192
- "type": "number",
3193
- "kind": "expression"
3194
- }
3195
- },
3196
- {
3197
- "name": "renderer",
3198
- "description": "Which ECharts renderer to use. SVG prints and scales crisply; canvas is faster with many marks.",
3199
- "default": "'canvas'",
3200
- "value": {
3201
- "type": "'canvas' | 'svg'",
3202
- "kind": "expression"
3203
- }
3204
- },
3205
- {
3206
- "name": "data",
3207
- "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.",
3208
- "value": {
3209
- "type": "ChartInput | undefined",
3210
- "kind": "expression"
3211
- }
3212
- },
3213
- {
3214
- "name": "revision",
3215
- "description": "Bump after mutating `data` in place. The cheap escape hatch for a large buffer you own.",
3216
- "default": "0",
3217
- "value": {
3218
- "type": "number",
3219
- "kind": "expression"
3220
- }
3221
- },
3222
- {
3223
- "name": "series",
3224
- "description": "Series definitions, as an alternative to `c2-chart-series` children. Children win when both are set.",
3225
- "value": {
3226
- "type": "ChartSeriesConfig[] | undefined",
3227
- "kind": "expression"
3228
- }
3229
- },
3230
- {
3231
- "name": "x-field",
3232
- "description": "Row field holding the x value; may be a dotted path. Defaults to the row index.",
3233
- "default": "''",
3234
- "value": {
3235
- "type": "string",
3236
- "kind": "expression"
3237
- }
3238
- },
3239
- {
3240
- "name": "label-field",
3241
- "description": "Row field holding the category label, for charts that name their slices.",
3242
- "default": "''",
3243
- "value": {
3244
- "type": "string",
3245
- "kind": "expression"
3246
- }
3247
- },
3248
- {
3249
- "name": "x-type",
3250
- "description": "How x values are interpreted, which decides the axis and the tooltip format.",
3251
- "default": "'linear'",
3252
- "value": {
3253
- "type": "'time' | 'linear' | 'category'",
3254
- "kind": "expression"
3255
- }
3256
- },
3257
- {
3258
- "name": "legend",
3259
- "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.",
3260
- "default": "'bottom'",
3261
- "value": {
3262
- "type": "'none' | 'top' | 'bottom' | 'start' | 'end'",
3263
- "kind": "expression"
3264
- }
3265
- },
3266
- {
3267
- "name": "tooltip",
3268
- "description": "Whether the tooltip follows the whole x position or only the hovered datum.",
3269
- "default": "'axis'",
3270
- "value": {
3271
- "type": "'none' | 'item' | 'axis'",
3272
- "kind": "expression"
3273
- }
3274
- },
3275
- {
3276
- "name": "animation",
3277
- "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.",
3278
- "default": "'none'",
3279
- "value": {
3280
- "type": "'none' | 'auto'",
3281
- "kind": "expression"
3282
- }
3283
- },
3284
- {
3285
- "name": "locale",
3286
- "description": "BCP 47 locale for the axis and tooltip formatting. Defaults to the browser locale.",
3287
- "value": {
3288
- "type": "string | undefined",
3289
- "kind": "expression"
3290
- }
3291
- },
3292
- {
3293
- "name": "loading",
3294
- "description": "Shows the loading state instead of the plot.",
3295
- "default": "false",
3296
- "value": {
3297
- "type": "boolean",
3298
- "kind": "expression"
3299
- }
3300
- },
3301
- {
3302
- "name": "error",
3303
- "description": "Shows an error message instead of the plot.",
3304
- "default": "''",
3305
- "value": {
3306
- "type": "string",
3307
- "kind": "expression"
3308
- }
3309
- },
3310
- {
3311
- "name": "empty-message",
3312
- "description": "Replaces the built-in \"no data\" text.",
3313
- "default": "'No data'",
3314
- "value": {
3315
- "type": "string",
3316
- "kind": "expression"
3317
- }
3318
- },
3319
- {
3320
- "name": "max-points",
3321
- "description": "Caps how many points a streaming chart keeps; older points fall off the front. `0` keeps everything.",
3322
- "default": "0",
3323
- "value": {
3324
- "type": "number",
3325
- "kind": "expression"
3326
- }
3327
- },
3328
- {
3329
- "name": "lazy-render",
3330
- "description": "Defers loading the engine until the host first scrolls into view.",
3331
- "default": "false",
3332
- "value": {
3333
- "type": "boolean",
3334
- "kind": "expression"
3335
- }
3336
- }
3337
- ],
3338
- "js": {
3339
- "properties": [
3340
- {
3341
- "name": "symbolSize",
3342
- "description": "Diameter of each point in CSS pixels.",
3343
- "value": {
3344
- "type": "number",
3345
- "kind": "expression"
3346
- }
3347
- },
3348
- {
3349
- "name": "largeThreshold",
3350
- "description": "Point count at which the large rendering path takes effect.",
3351
- "value": {
3352
- "type": "number",
3449
+ "type": "'name' | 'value' | 'percent' | 'name-percent'",
3450
+ "kind": "expression"
3451
+ }
3452
+ },
3453
+ {
3454
+ "name": "xField",
3455
+ "description": "Row field holding the x value; may be a dotted path. Defaults to the row index.",
3456
+ "value": {
3457
+ "type": "string",
3458
+ "kind": "expression"
3459
+ }
3460
+ },
3461
+ {
3462
+ "name": "labelField",
3463
+ "description": "Row field holding the category label, for charts that name their slices.",
3464
+ "value": {
3465
+ "type": "string",
3466
+ "kind": "expression"
3467
+ }
3468
+ },
3469
+ {
3470
+ "name": "xType",
3471
+ "description": "How x values are interpreted, which decides the axis and the tooltip format.",
3472
+ "value": {
3473
+ "type": "'time' | 'linear' | 'category'",
3474
+ "kind": "expression"
3475
+ }
3476
+ },
3477
+ {
3478
+ "name": "emptyMessage",
3479
+ "description": "Replaces the built-in \"no data\" text.",
3480
+ "value": {
3481
+ "type": "string",
3482
+ "kind": "expression"
3483
+ }
3484
+ },
3485
+ {
3486
+ "name": "maxPoints",
3487
+ "description": "Caps how many points a streaming chart keeps; older points fall off the front. `0` keeps everything.",
3488
+ "value": {
3489
+ "type": "number",
3490
+ "kind": "expression"
3491
+ }
3492
+ },
3493
+ {
3494
+ "name": "lazyRender",
3495
+ "description": "Defers loading the engine until the host first scrolls into view.",
3496
+ "value": {
3497
+ "type": "boolean",
3498
+ "kind": "expression"
3499
+ }
3500
+ }
3501
+ ],
3502
+ "events": [
3503
+ {
3504
+ "name": "tooltip-change",
3505
+ "description": "Fired with the complete tooltip model as the pointer moves, and with `null` when it leaves. Used by `c2-chart-tooltip`.",
3506
+ "value": {
3507
+ "type": "CustomEvent<ChartTooltipContext | null>",
3508
+ "kind": "expression"
3509
+ }
3510
+ },
3511
+ {
3512
+ "name": "series-toggle",
3513
+ "description": "Fired when a legend entry is toggled. Does not bubble.",
3514
+ "value": {
3515
+ "type": "CustomEvent<ChartSeriesToggleEventDetail>",
3516
+ "kind": "expression"
3517
+ }
3518
+ },
3519
+ {
3520
+ "name": "legend-change",
3521
+ "description": "Fired when legend entries or visibility change. Used by `c2-chart-legend`.",
3522
+ "value": {
3523
+ "type": "CustomEvent<ChartLegendChangeEventDetail>",
3524
+ "kind": "expression"
3525
+ }
3526
+ },
3527
+ {
3528
+ "name": "range-change",
3529
+ "description": "Fired after the user zooms or brushes. `detail.min` and `detail.max` are the new x bounds. Does not bubble.",
3530
+ "value": {
3531
+ "type": "CustomEvent<ChartRangeEventDetail>",
3532
+ "kind": "expression"
3533
+ }
3534
+ },
3535
+ {
3536
+ "name": "chart-ready",
3537
+ "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.",
3538
+ "value": {
3539
+ "type": "CustomEvent<{ engine: string }>",
3540
+ "kind": "expression"
3541
+ }
3542
+ },
3543
+ {
3544
+ "name": "chart-error",
3545
+ "description": "Fired when the engine fails to load or to draw. `detail.error` is the underlying failure.",
3546
+ "value": {
3547
+ "type": "CustomEvent<{ error: unknown }>",
3548
+ "kind": "expression"
3549
+ }
3550
+ },
3551
+ {
3552
+ "name": "point-hover",
3553
+ "description": "Fired as the pointer moves between data points, and with a `null` detail when it leaves the plot. Does not bubble.",
3554
+ "value": {
3555
+ "type": "CustomEvent<ChartPointEventDetail | null>",
3556
+ "kind": "expression"
3557
+ }
3558
+ },
3559
+ {
3560
+ "name": "point-click",
3561
+ "description": "Fired when a datum is clicked. Does not bubble: several components fire point events, so a listener belongs on the element itself.",
3562
+ "value": {
3563
+ "type": "CustomEvent<ChartPointEventDetail>",
3564
+ "kind": "expression"
3565
+ }
3566
+ }
3567
+ ]
3568
+ }
3569
+ },
3570
+ {
3571
+ "name": "c2-radar-chart",
3572
+ "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`",
3573
+ "attributes": [
3574
+ {
3575
+ "name": "min",
3576
+ "description": "Lowest value shared by every indicator.",
3577
+ "default": "0",
3578
+ "value": {
3579
+ "type": "number",
3580
+ "kind": "expression"
3581
+ }
3582
+ },
3583
+ {
3584
+ "name": "max",
3585
+ "description": "Highest value shared by every indicator. Auto-ranged per indicator when unset.",
3586
+ "value": {
3587
+ "type": "number | undefined",
3588
+ "kind": "expression"
3589
+ }
3590
+ },
3591
+ {
3592
+ "name": "shape",
3593
+ "description": "Shape of the indicator grid.",
3594
+ "default": "'polygon'",
3595
+ "value": {
3596
+ "type": "'polygon' | 'circle'",
3597
+ "kind": "expression"
3598
+ }
3599
+ },
3600
+ {
3601
+ "name": "start-angle",
3602
+ "description": "Angle of the first indicator, in degrees counter-clockwise from three o'clock.",
3603
+ "default": "90",
3604
+ "value": {
3605
+ "type": "number",
3606
+ "kind": "expression"
3607
+ }
3608
+ },
3609
+ {
3610
+ "name": "split-number",
3611
+ "description": "Number of concentric divisions in the indicator grid.",
3612
+ "default": "5",
3613
+ "value": {
3614
+ "type": "number",
3615
+ "kind": "expression"
3616
+ }
3617
+ },
3618
+ {
3619
+ "name": "points",
3620
+ "description": "Whether to draw point markers at the indicator values.",
3621
+ "default": "'show'",
3622
+ "value": {
3623
+ "type": "'show' | 'none'",
3624
+ "kind": "expression"
3625
+ }
3626
+ },
3627
+ {
3628
+ "name": "fill-opacity",
3629
+ "description": "Opacity of each profile's fill. Falls back to `--c2-chart__area--opacity`.",
3630
+ "value": {
3631
+ "type": "number | undefined",
3632
+ "kind": "expression"
3633
+ }
3634
+ },
3635
+ {
3636
+ "name": "renderer",
3637
+ "description": "Which ECharts renderer to use. SVG prints and scales crisply; canvas is faster with many marks.",
3638
+ "default": "'canvas'",
3639
+ "value": {
3640
+ "type": "'canvas' | 'svg'",
3641
+ "kind": "expression"
3642
+ }
3643
+ },
3644
+ {
3645
+ "name": "data",
3646
+ "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.",
3647
+ "value": {
3648
+ "type": "ChartInput | undefined",
3649
+ "kind": "expression"
3650
+ }
3651
+ },
3652
+ {
3653
+ "name": "revision",
3654
+ "description": "Bump after mutating `data` in place. The cheap escape hatch for a large buffer you own.",
3655
+ "default": "0",
3656
+ "value": {
3657
+ "type": "number",
3658
+ "kind": "expression"
3659
+ }
3660
+ },
3661
+ {
3662
+ "name": "series",
3663
+ "description": "Series definitions, as an alternative to `c2-chart-series` children. Children win when both are set.",
3664
+ "value": {
3665
+ "type": "ChartSeriesConfig[] | undefined",
3666
+ "kind": "expression"
3667
+ }
3668
+ },
3669
+ {
3670
+ "name": "x-field",
3671
+ "description": "Row field holding the x value; may be a dotted path. Defaults to the row index.",
3672
+ "default": "''",
3673
+ "value": {
3674
+ "type": "string",
3675
+ "kind": "expression"
3676
+ }
3677
+ },
3678
+ {
3679
+ "name": "label-field",
3680
+ "description": "Row field holding the category label, for charts that name their slices.",
3681
+ "default": "''",
3682
+ "value": {
3683
+ "type": "string",
3684
+ "kind": "expression"
3685
+ }
3686
+ },
3687
+ {
3688
+ "name": "x-type",
3689
+ "description": "How x values are interpreted, which decides the axis and the tooltip format.",
3690
+ "default": "'linear'",
3691
+ "value": {
3692
+ "type": "'time' | 'linear' | 'category'",
3693
+ "kind": "expression"
3694
+ }
3695
+ },
3696
+ {
3697
+ "name": "legend",
3698
+ "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.",
3699
+ "default": "'bottom'",
3700
+ "value": {
3701
+ "type": "'none' | 'top' | 'bottom' | 'start' | 'end'",
3702
+ "kind": "expression"
3703
+ }
3704
+ },
3705
+ {
3706
+ "name": "tooltip",
3707
+ "description": "Whether the tooltip follows the whole x position or only the hovered datum.",
3708
+ "default": "'axis'",
3709
+ "value": {
3710
+ "type": "'none' | 'item' | 'axis'",
3711
+ "kind": "expression"
3712
+ }
3713
+ },
3714
+ {
3715
+ "name": "animation",
3716
+ "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.",
3717
+ "default": "'auto'",
3718
+ "value": {
3719
+ "type": "'none' | 'auto'",
3720
+ "kind": "expression"
3721
+ }
3722
+ },
3723
+ {
3724
+ "name": "locale",
3725
+ "description": "BCP 47 locale for the axis and tooltip formatting. Defaults to the browser locale.",
3726
+ "value": {
3727
+ "type": "string | undefined",
3728
+ "kind": "expression"
3729
+ }
3730
+ },
3731
+ {
3732
+ "name": "loading",
3733
+ "description": "Shows the loading state instead of the plot.",
3734
+ "default": "false",
3735
+ "value": {
3736
+ "type": "boolean",
3737
+ "kind": "expression"
3738
+ }
3739
+ },
3740
+ {
3741
+ "name": "error",
3742
+ "description": "Shows an error message instead of the plot.",
3743
+ "default": "''",
3744
+ "value": {
3745
+ "type": "string",
3746
+ "kind": "expression"
3747
+ }
3748
+ },
3749
+ {
3750
+ "name": "empty-message",
3751
+ "description": "Replaces the built-in \"no data\" text.",
3752
+ "default": "'No data'",
3753
+ "value": {
3754
+ "type": "string",
3755
+ "kind": "expression"
3756
+ }
3757
+ },
3758
+ {
3759
+ "name": "max-points",
3760
+ "description": "Caps how many points a streaming chart keeps; older points fall off the front. `0` keeps everything.",
3761
+ "default": "0",
3762
+ "value": {
3763
+ "type": "number",
3764
+ "kind": "expression"
3765
+ }
3766
+ },
3767
+ {
3768
+ "name": "lazy-render",
3769
+ "description": "Defers loading the engine until the host first scrolls into view.",
3770
+ "default": "false",
3771
+ "value": {
3772
+ "type": "boolean",
3773
+ "kind": "expression"
3774
+ }
3775
+ }
3776
+ ],
3777
+ "js": {
3778
+ "properties": [
3779
+ {
3780
+ "name": "startAngle",
3781
+ "description": "Angle of the first indicator, in degrees counter-clockwise from three o'clock.",
3782
+ "value": {
3783
+ "type": "number",
3784
+ "kind": "expression"
3785
+ }
3786
+ },
3787
+ {
3788
+ "name": "splitNumber",
3789
+ "description": "Number of concentric divisions in the indicator grid.",
3790
+ "value": {
3791
+ "type": "number",
3792
+ "kind": "expression"
3793
+ }
3794
+ },
3795
+ {
3796
+ "name": "fillOpacity",
3797
+ "description": "Opacity of each profile's fill. Falls back to `--c2-chart__area--opacity`.",
3798
+ "value": {
3799
+ "type": "number | undefined",
3800
+ "kind": "expression"
3801
+ }
3802
+ },
3803
+ {
3804
+ "name": "xField",
3805
+ "description": "Row field holding the x value; may be a dotted path. Defaults to the row index.",
3806
+ "value": {
3807
+ "type": "string",
3808
+ "kind": "expression"
3809
+ }
3810
+ },
3811
+ {
3812
+ "name": "labelField",
3813
+ "description": "Row field holding the category label, for charts that name their slices.",
3814
+ "value": {
3815
+ "type": "string",
3816
+ "kind": "expression"
3817
+ }
3818
+ },
3819
+ {
3820
+ "name": "xType",
3821
+ "description": "How x values are interpreted, which decides the axis and the tooltip format.",
3822
+ "value": {
3823
+ "type": "'time' | 'linear' | 'category'",
3824
+ "kind": "expression"
3825
+ }
3826
+ },
3827
+ {
3828
+ "name": "emptyMessage",
3829
+ "description": "Replaces the built-in \"no data\" text.",
3830
+ "value": {
3831
+ "type": "string",
3832
+ "kind": "expression"
3833
+ }
3834
+ },
3835
+ {
3836
+ "name": "maxPoints",
3837
+ "description": "Caps how many points a streaming chart keeps; older points fall off the front. `0` keeps everything.",
3838
+ "value": {
3839
+ "type": "number",
3840
+ "kind": "expression"
3841
+ }
3842
+ },
3843
+ {
3844
+ "name": "lazyRender",
3845
+ "description": "Defers loading the engine until the host first scrolls into view.",
3846
+ "value": {
3847
+ "type": "boolean",
3848
+ "kind": "expression"
3849
+ }
3850
+ }
3851
+ ],
3852
+ "events": [
3853
+ {
3854
+ "name": "tooltip-change",
3855
+ "description": "Fired with the complete tooltip model as the pointer moves, and with `null` when it leaves. Used by `c2-chart-tooltip`.",
3856
+ "value": {
3857
+ "type": "CustomEvent<ChartTooltipContext | null>",
3858
+ "kind": "expression"
3859
+ }
3860
+ },
3861
+ {
3862
+ "name": "series-toggle",
3863
+ "description": "Fired when a legend entry is toggled. Does not bubble.",
3864
+ "value": {
3865
+ "type": "CustomEvent<ChartSeriesToggleEventDetail>",
3866
+ "kind": "expression"
3867
+ }
3868
+ },
3869
+ {
3870
+ "name": "legend-change",
3871
+ "description": "Fired when legend entries or visibility change. Used by `c2-chart-legend`.",
3872
+ "value": {
3873
+ "type": "CustomEvent<ChartLegendChangeEventDetail>",
3874
+ "kind": "expression"
3875
+ }
3876
+ },
3877
+ {
3878
+ "name": "range-change",
3879
+ "description": "Fired after the user zooms or brushes. `detail.min` and `detail.max` are the new x bounds. Does not bubble.",
3880
+ "value": {
3881
+ "type": "CustomEvent<ChartRangeEventDetail>",
3882
+ "kind": "expression"
3883
+ }
3884
+ },
3885
+ {
3886
+ "name": "chart-ready",
3887
+ "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.",
3888
+ "value": {
3889
+ "type": "CustomEvent<{ engine: string }>",
3890
+ "kind": "expression"
3891
+ }
3892
+ },
3893
+ {
3894
+ "name": "chart-error",
3895
+ "description": "Fired when the engine fails to load or to draw. `detail.error` is the underlying failure.",
3896
+ "value": {
3897
+ "type": "CustomEvent<{ error: unknown }>",
3898
+ "kind": "expression"
3899
+ }
3900
+ },
3901
+ {
3902
+ "name": "point-hover",
3903
+ "description": "Fired as the pointer moves between data points, and with a `null` detail when it leaves the plot. Does not bubble.",
3904
+ "value": {
3905
+ "type": "CustomEvent<ChartPointEventDetail | null>",
3906
+ "kind": "expression"
3907
+ }
3908
+ },
3909
+ {
3910
+ "name": "point-click",
3911
+ "description": "Fired when a datum is clicked. Does not bubble: several components fire point events, so a listener belongs on the element itself.",
3912
+ "value": {
3913
+ "type": "CustomEvent<ChartPointEventDetail>",
3914
+ "kind": "expression"
3915
+ }
3916
+ }
3917
+ ]
3918
+ }
3919
+ },
3920
+ {
3921
+ "name": "c2-scatter-chart",
3922
+ "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`",
3923
+ "attributes": [
3924
+ {
3925
+ "name": "symbol-size",
3926
+ "description": "Diameter of each point in CSS pixels.",
3927
+ "default": "10",
3928
+ "value": {
3929
+ "type": "number",
3930
+ "kind": "expression"
3931
+ }
3932
+ },
3933
+ {
3934
+ "name": "symbol",
3935
+ "description": "Shape used for points.",
3936
+ "default": "'circle'",
3937
+ "value": {
3938
+ "type": "'circle' | 'rect' | 'roundRect' | 'triangle' | 'diamond' | 'pin' | 'arrow'",
3939
+ "kind": "expression"
3940
+ }
3941
+ },
3942
+ {
3943
+ "name": "large",
3944
+ "description": "Enables ECharts' large-point rendering path.",
3945
+ "default": "false",
3946
+ "value": {
3947
+ "type": "boolean",
3948
+ "kind": "expression"
3949
+ }
3950
+ },
3951
+ {
3952
+ "name": "large-threshold",
3953
+ "description": "Point count at which the large rendering path takes effect.",
3954
+ "default": "2000",
3955
+ "value": {
3956
+ "type": "number",
3957
+ "kind": "expression"
3958
+ }
3959
+ },
3960
+ {
3961
+ "name": "renderer",
3962
+ "description": "Which ECharts renderer to use. SVG prints and scales crisply; canvas is faster with many marks.",
3963
+ "default": "'canvas'",
3964
+ "value": {
3965
+ "type": "'canvas' | 'svg'",
3966
+ "kind": "expression"
3967
+ }
3968
+ },
3969
+ {
3970
+ "name": "data",
3971
+ "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.",
3972
+ "value": {
3973
+ "type": "ChartInput | undefined",
3974
+ "kind": "expression"
3975
+ }
3976
+ },
3977
+ {
3978
+ "name": "revision",
3979
+ "description": "Bump after mutating `data` in place. The cheap escape hatch for a large buffer you own.",
3980
+ "default": "0",
3981
+ "value": {
3982
+ "type": "number",
3983
+ "kind": "expression"
3984
+ }
3985
+ },
3986
+ {
3987
+ "name": "series",
3988
+ "description": "Series definitions, as an alternative to `c2-chart-series` children. Children win when both are set.",
3989
+ "value": {
3990
+ "type": "ChartSeriesConfig[] | undefined",
3991
+ "kind": "expression"
3992
+ }
3993
+ },
3994
+ {
3995
+ "name": "x-field",
3996
+ "description": "Row field holding the x value; may be a dotted path. Defaults to the row index.",
3997
+ "default": "''",
3998
+ "value": {
3999
+ "type": "string",
4000
+ "kind": "expression"
4001
+ }
4002
+ },
4003
+ {
4004
+ "name": "label-field",
4005
+ "description": "Row field holding the category label, for charts that name their slices.",
4006
+ "default": "''",
4007
+ "value": {
4008
+ "type": "string",
4009
+ "kind": "expression"
4010
+ }
4011
+ },
4012
+ {
4013
+ "name": "x-type",
4014
+ "description": "How x values are interpreted, which decides the axis and the tooltip format.",
4015
+ "default": "'linear'",
4016
+ "value": {
4017
+ "type": "'time' | 'linear' | 'category'",
4018
+ "kind": "expression"
4019
+ }
4020
+ },
4021
+ {
4022
+ "name": "legend",
4023
+ "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.",
4024
+ "default": "'bottom'",
4025
+ "value": {
4026
+ "type": "'none' | 'top' | 'bottom' | 'start' | 'end'",
4027
+ "kind": "expression"
4028
+ }
4029
+ },
4030
+ {
4031
+ "name": "tooltip",
4032
+ "description": "Whether the tooltip follows the whole x position or only the hovered datum.",
4033
+ "default": "'axis'",
4034
+ "value": {
4035
+ "type": "'none' | 'item' | 'axis'",
4036
+ "kind": "expression"
4037
+ }
4038
+ },
4039
+ {
4040
+ "name": "animation",
4041
+ "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.",
4042
+ "default": "'auto'",
4043
+ "value": {
4044
+ "type": "'none' | 'auto'",
4045
+ "kind": "expression"
4046
+ }
4047
+ },
4048
+ {
4049
+ "name": "locale",
4050
+ "description": "BCP 47 locale for the axis and tooltip formatting. Defaults to the browser locale.",
4051
+ "value": {
4052
+ "type": "string | undefined",
4053
+ "kind": "expression"
4054
+ }
4055
+ },
4056
+ {
4057
+ "name": "loading",
4058
+ "description": "Shows the loading state instead of the plot.",
4059
+ "default": "false",
4060
+ "value": {
4061
+ "type": "boolean",
4062
+ "kind": "expression"
4063
+ }
4064
+ },
4065
+ {
4066
+ "name": "error",
4067
+ "description": "Shows an error message instead of the plot.",
4068
+ "default": "''",
4069
+ "value": {
4070
+ "type": "string",
4071
+ "kind": "expression"
4072
+ }
4073
+ },
4074
+ {
4075
+ "name": "empty-message",
4076
+ "description": "Replaces the built-in \"no data\" text.",
4077
+ "default": "'No data'",
4078
+ "value": {
4079
+ "type": "string",
4080
+ "kind": "expression"
4081
+ }
4082
+ },
4083
+ {
4084
+ "name": "max-points",
4085
+ "description": "Caps how many points a streaming chart keeps; older points fall off the front. `0` keeps everything.",
4086
+ "default": "0",
4087
+ "value": {
4088
+ "type": "number",
4089
+ "kind": "expression"
4090
+ }
4091
+ },
4092
+ {
4093
+ "name": "lazy-render",
4094
+ "description": "Defers loading the engine until the host first scrolls into view.",
4095
+ "default": "false",
4096
+ "value": {
4097
+ "type": "boolean",
4098
+ "kind": "expression"
4099
+ }
4100
+ }
4101
+ ],
4102
+ "js": {
4103
+ "properties": [
4104
+ {
4105
+ "name": "symbolSize",
4106
+ "description": "Diameter of each point in CSS pixels.",
4107
+ "value": {
4108
+ "type": "number",
4109
+ "kind": "expression"
4110
+ }
4111
+ },
4112
+ {
4113
+ "name": "largeThreshold",
4114
+ "description": "Point count at which the large rendering path takes effect.",
4115
+ "value": {
4116
+ "type": "number",
3353
4117
  "kind": "expression"
3354
4118
  }
3355
4119
  },
@@ -3616,8 +4380,8 @@
3616
4380
  },
3617
4381
  {
3618
4382
  "name": "animation",
3619
- "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.",
3620
- "default": "'none'",
4383
+ "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.",
4384
+ "default": "'auto'",
3621
4385
  "value": {
3622
4386
  "type": "'none' | 'auto'",
3623
4387
  "kind": "expression"
@@ -4147,6 +4911,226 @@
4147
4911
  ]
4148
4912
  }
4149
4913
  },
4914
+ {
4915
+ "name": "c2-code-editor",
4916
+ "description": "Source-code field built on CodeMirror 6, which is an **optional peer dependency**: nothing is imported until an\neditor mounts, and when the peer is absent the element degrades to a plain `<textarea>` carrying the same value,\nthe same events and the same form behaviour — only without highlighting. Install what you need alongside it:\n\n`@c2n/code-editor`",
4917
+ "attributes": [
4918
+ {
4919
+ "name": "value",
4920
+ "description": "The source code. Assigning it replaces the document without losing scroll position or undo history.",
4921
+ "default": "''",
4922
+ "value": {
4923
+ "type": "string",
4924
+ "kind": "expression"
4925
+ }
4926
+ },
4927
+ {
4928
+ "name": "language",
4929
+ "description": "Language id: one of `BUILT_IN_LANGUAGES`, anything `languageLoader` resolves, or empty for no highlighting.",
4930
+ "default": "''",
4931
+ "value": {
4932
+ "type": "string",
4933
+ "kind": "expression"
4934
+ }
4935
+ },
4936
+ {
4937
+ "name": "name",
4938
+ "description": "Form field name.",
4939
+ "default": "''",
4940
+ "value": {
4941
+ "type": "string",
4942
+ "kind": "expression"
4943
+ }
4944
+ },
4945
+ {
4946
+ "name": "label",
4947
+ "description": "Label above the editor, when the `label` slot is empty.",
4948
+ "default": "''",
4949
+ "value": {
4950
+ "type": "string",
4951
+ "kind": "expression"
4952
+ }
4953
+ },
4954
+ {
4955
+ "name": "aria-label",
4956
+ "description": "Accessible name when nothing visible labels the editor.",
4957
+ "default": "null",
4958
+ "value": {
4959
+ "type": "string | null",
4960
+ "kind": "expression"
4961
+ }
4962
+ },
4963
+ {
4964
+ "name": "placeholder",
4965
+ "description": "Text shown while the document is empty.",
4966
+ "default": "''",
4967
+ "value": {
4968
+ "type": "string",
4969
+ "kind": "expression"
4970
+ }
4971
+ },
4972
+ {
4973
+ "name": "readonly",
4974
+ "description": "The document cannot be edited, but is still selectable and focusable.",
4975
+ "default": "false",
4976
+ "value": {
4977
+ "type": "boolean",
4978
+ "kind": "expression"
4979
+ }
4980
+ },
4981
+ {
4982
+ "name": "disabled",
4983
+ "description": "Blocks interaction entirely and dims the editor.",
4984
+ "default": "false",
4985
+ "value": {
4986
+ "type": "boolean",
4987
+ "kind": "expression"
4988
+ }
4989
+ },
4990
+ {
4991
+ "name": "required",
4992
+ "description": "The form is invalid while the value is empty.",
4993
+ "default": "false",
4994
+ "value": {
4995
+ "type": "boolean",
4996
+ "kind": "expression"
4997
+ }
4998
+ },
4999
+ {
5000
+ "name": "line-numbers",
5001
+ "description": "Show the line-number gutter.",
5002
+ "default": "false",
5003
+ "value": {
5004
+ "type": "boolean",
5005
+ "kind": "expression"
5006
+ }
5007
+ },
5008
+ {
5009
+ "name": "wrap",
5010
+ "description": "Wrap long lines instead of scrolling horizontally.",
5011
+ "default": "false",
5012
+ "value": {
5013
+ "type": "boolean",
5014
+ "kind": "expression"
5015
+ }
5016
+ },
5017
+ {
5018
+ "name": "autocomplete",
5019
+ "description": "Offer completions while typing (identifiers, and whatever the grammar contributes).",
5020
+ "default": "false",
5021
+ "value": {
5022
+ "type": "boolean",
5023
+ "kind": "expression"
5024
+ }
5025
+ },
5026
+ {
5027
+ "name": "tab-size",
5028
+ "description": "Width of a tab stop, in characters.",
5029
+ "default": "2",
5030
+ "value": {
5031
+ "type": "number",
5032
+ "kind": "expression"
5033
+ }
5034
+ },
5035
+ {
5036
+ "name": "error",
5037
+ "description": "Renders the error styling; `error-text` replaces the supporting text.",
5038
+ "default": "false",
5039
+ "value": {
5040
+ "type": "boolean",
5041
+ "kind": "expression"
5042
+ }
5043
+ },
5044
+ {
5045
+ "name": "error-text",
5046
+ "description": "Message shown in place of the supporting text while `error` is set.",
5047
+ "default": "''",
5048
+ "value": {
5049
+ "type": "string",
5050
+ "kind": "expression"
5051
+ }
5052
+ },
5053
+ {
5054
+ "name": "help",
5055
+ "description": "Help text under the editor, when the `supporting-text` slot is empty.",
5056
+ "default": "''",
5057
+ "value": {
5058
+ "type": "string",
5059
+ "kind": "expression"
5060
+ }
5061
+ }
5062
+ ],
5063
+ "js": {
5064
+ "properties": [
5065
+ {
5066
+ "name": "ariaLabel",
5067
+ "description": "Accessible name when nothing visible labels the editor.",
5068
+ "value": {
5069
+ "type": "string | null",
5070
+ "kind": "expression"
5071
+ }
5072
+ },
5073
+ {
5074
+ "name": "readOnly",
5075
+ "description": "The document cannot be edited, but is still selectable and focusable.",
5076
+ "value": {
5077
+ "type": "boolean",
5078
+ "kind": "expression"
5079
+ }
5080
+ },
5081
+ {
5082
+ "name": "lineNumbers",
5083
+ "description": "Show the line-number gutter.",
5084
+ "value": {
5085
+ "type": "boolean",
5086
+ "kind": "expression"
5087
+ }
5088
+ },
5089
+ {
5090
+ "name": "tabSize",
5091
+ "description": "Width of a tab stop, in characters.",
5092
+ "value": {
5093
+ "type": "number",
5094
+ "kind": "expression"
5095
+ }
5096
+ },
5097
+ {
5098
+ "name": "errorText",
5099
+ "description": "Message shown in place of the supporting text while `error` is set.",
5100
+ "value": {
5101
+ "type": "string",
5102
+ "kind": "expression"
5103
+ }
5104
+ }
5105
+ ],
5106
+ "events": [
5107
+ {
5108
+ "name": "ready",
5109
+ "description": "The engine settled, so tests and hosts can wait for it. Does not bubble.",
5110
+ "value": {
5111
+ "type": "CustomEvent<{ engine: 'codemirror' | 'basic' }>",
5112
+ "kind": "expression"
5113
+ }
5114
+ },
5115
+ {
5116
+ "name": "input",
5117
+ "description": "The document changed. Fires on every edit.",
5118
+ "value": {
5119
+ "type": "Event",
5120
+ "kind": "expression"
5121
+ }
5122
+ },
5123
+ {
5124
+ "name": "change",
5125
+ "description": "The value was committed: the editor lost focus after an edit, as a native control does.",
5126
+ "value": {
5127
+ "type": "Event",
5128
+ "kind": "expression"
5129
+ }
5130
+ }
5131
+ ]
5132
+ }
5133
+ },
4150
5134
  {
4151
5135
  "name": "c2-code-viewer",
4152
5136
  "description": "Syntax-highlighted source code powered by shiki. Grammars and themes are loaded on demand into one shared\nhighlighter, so many viewers on a page cost one engine. The raw code renders immediately as plain text (also on the\nserver) and is upgraded in place once highlighted.\n\n`@c2n/code-viewer`",
@@ -38277,6 +39261,261 @@
38277
39261
  "events": []
38278
39262
  }
38279
39263
  },
39264
+ {
39265
+ "name": "c2-qr-code",
39266
+ "description": "Generates an accessible, themeable SVG QR code without sending its value to a remote service.\n\n`@c2n/qr-code`",
39267
+ "attributes": [
39268
+ {
39269
+ "name": "value",
39270
+ "description": "Text or URL encoded by the QR code.",
39271
+ "default": "''",
39272
+ "value": {
39273
+ "type": "string",
39274
+ "kind": "expression"
39275
+ }
39276
+ },
39277
+ {
39278
+ "name": "size",
39279
+ "description": "Rendered width and height in CSS pixels. Set to `0` to use `--c2-qr-code--size`.",
39280
+ "default": "200",
39281
+ "value": {
39282
+ "type": "number",
39283
+ "kind": "expression"
39284
+ }
39285
+ },
39286
+ {
39287
+ "name": "error-correction",
39288
+ "description": "Error correction level: L (7%), M (15%), Q (25%), or H (30%).",
39289
+ "default": "'M'",
39290
+ "value": {
39291
+ "type": "QrCodeErrorCorrection",
39292
+ "kind": "expression"
39293
+ }
39294
+ },
39295
+ {
39296
+ "name": "margin",
39297
+ "description": "Quiet-zone width measured in QR modules. Four is recommended for reliable scanning.",
39298
+ "default": "4",
39299
+ "value": {
39300
+ "type": "number",
39301
+ "kind": "expression"
39302
+ }
39303
+ },
39304
+ {
39305
+ "name": "boost-error-correction",
39306
+ "description": "Raises error correction when the encoded version has spare capacity.",
39307
+ "default": "false",
39308
+ "value": {
39309
+ "type": "boolean",
39310
+ "kind": "expression"
39311
+ }
39312
+ },
39313
+ {
39314
+ "name": "aria-label",
39315
+ "description": "Accessible name announced for the generated image. Defaults to `QR code`.",
39316
+ "default": "null",
39317
+ "value": {
39318
+ "type": "string | null",
39319
+ "kind": "expression"
39320
+ }
39321
+ }
39322
+ ],
39323
+ "js": {
39324
+ "properties": [
39325
+ {
39326
+ "name": "errorCorrection",
39327
+ "description": "Error correction level: L (7%), M (15%), Q (25%), or H (30%).",
39328
+ "value": {
39329
+ "type": "QrCodeErrorCorrection",
39330
+ "kind": "expression"
39331
+ }
39332
+ },
39333
+ {
39334
+ "name": "boostErrorCorrection",
39335
+ "description": "Raises error correction when the encoded version has spare capacity.",
39336
+ "value": {
39337
+ "type": "boolean",
39338
+ "kind": "expression"
39339
+ }
39340
+ },
39341
+ {
39342
+ "name": "ariaLabel",
39343
+ "description": "Accessible name announced for the generated image. Defaults to `QR code`.",
39344
+ "value": {
39345
+ "type": "string | null",
39346
+ "kind": "expression"
39347
+ }
39348
+ }
39349
+ ],
39350
+ "events": [
39351
+ {
39352
+ "name": "qr-code-error",
39353
+ "description": "Fired when the value cannot be encoded. `detail` contains the error and rejected value.",
39354
+ "value": {
39355
+ "type": "CustomEvent<QrCodeErrorEventDetail>",
39356
+ "kind": "expression"
39357
+ }
39358
+ }
39359
+ ]
39360
+ }
39361
+ },
39362
+ {
39363
+ "name": "c2-questionnaire",
39364
+ "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`",
39365
+ "attributes": [
39366
+ {
39367
+ "name": "questions",
39368
+ "description": "Questionnaire definition. Use `select` for one answer and `choice` for multiple answers (`single` / `multiple` remain aliases). May also be supplied as JSON.",
39369
+ "default": "[]",
39370
+ "value": {
39371
+ "type": "QuestionnaireQuestion[]",
39372
+ "kind": "expression"
39373
+ }
39374
+ },
39375
+ {
39376
+ "name": "current",
39377
+ "description": "Zero-based visible question index.",
39378
+ "default": "0",
39379
+ "value": {
39380
+ "type": "number",
39381
+ "kind": "expression"
39382
+ }
39383
+ },
39384
+ {
39385
+ "name": "completed",
39386
+ "description": "Shows the answer summary after successful completion.",
39387
+ "default": "false",
39388
+ "value": {
39389
+ "type": "boolean",
39390
+ "kind": "expression"
39391
+ }
39392
+ },
39393
+ {
39394
+ "name": "name",
39395
+ "description": "Form field name. Its submitted value is the answer object serialized as JSON.",
39396
+ "default": "''",
39397
+ "value": {
39398
+ "type": "string",
39399
+ "kind": "expression"
39400
+ }
39401
+ },
39402
+ {
39403
+ "name": "disabled",
39404
+ "description": "Disables options and navigation.",
39405
+ "default": "false",
39406
+ "value": {
39407
+ "type": "boolean",
39408
+ "kind": "expression"
39409
+ }
39410
+ },
39411
+ {
39412
+ "name": "next-label",
39413
+ "description": "Label of the forward action before the final question.",
39414
+ "default": "'Next'",
39415
+ "value": {
39416
+ "type": "string",
39417
+ "kind": "expression"
39418
+ }
39419
+ },
39420
+ {
39421
+ "name": "complete-label",
39422
+ "description": "Label of the forward action on the final question.",
39423
+ "default": "'Save'",
39424
+ "value": {
39425
+ "type": "string",
39426
+ "kind": "expression"
39427
+ }
39428
+ },
39429
+ {
39430
+ "name": "previous-label",
39431
+ "description": "Label of the backward action.",
39432
+ "default": "'Previous'",
39433
+ "value": {
39434
+ "type": "string",
39435
+ "kind": "expression"
39436
+ }
39437
+ },
39438
+ {
39439
+ "name": "skip-label",
39440
+ "description": "Label of the skip action.",
39441
+ "default": "'Skip'",
39442
+ "value": {
39443
+ "type": "string",
39444
+ "kind": "expression"
39445
+ }
39446
+ }
39447
+ ],
39448
+ "js": {
39449
+ "properties": [
39450
+ {
39451
+ "name": "nextLabel",
39452
+ "description": "Label of the forward action before the final question.",
39453
+ "value": {
39454
+ "type": "string",
39455
+ "kind": "expression"
39456
+ }
39457
+ },
39458
+ {
39459
+ "name": "completeLabel",
39460
+ "description": "Label of the forward action on the final question.",
39461
+ "value": {
39462
+ "type": "string",
39463
+ "kind": "expression"
39464
+ }
39465
+ },
39466
+ {
39467
+ "name": "previousLabel",
39468
+ "description": "Label of the backward action.",
39469
+ "value": {
39470
+ "type": "string",
39471
+ "kind": "expression"
39472
+ }
39473
+ },
39474
+ {
39475
+ "name": "skipLabel",
39476
+ "description": "Label of the skip action.",
39477
+ "value": {
39478
+ "type": "string",
39479
+ "kind": "expression"
39480
+ }
39481
+ }
39482
+ ],
39483
+ "events": [
39484
+ {
39485
+ "name": "complete",
39486
+ "description": "Fired from Next / Save on the last valid question.",
39487
+ "value": {
39488
+ "type": "CustomEvent<{ answers: QuestionnaireAnswers }>",
39489
+ "kind": "expression"
39490
+ }
39491
+ },
39492
+ {
39493
+ "name": "skip",
39494
+ "description": "Fired when a skippable question is skipped.",
39495
+ "value": {
39496
+ "type": "CustomEvent<{ index: number, questionId: string }>",
39497
+ "kind": "expression"
39498
+ }
39499
+ },
39500
+ {
39501
+ "name": "step-change",
39502
+ "description": "Fired after navigation changes the visible question.",
39503
+ "value": {
39504
+ "type": "CustomEvent<{ index: number, question: QuestionnaireQuestion }>",
39505
+ "kind": "expression"
39506
+ }
39507
+ },
39508
+ {
39509
+ "name": "answer-change",
39510
+ "description": "Fired whenever an answer changes.",
39511
+ "value": {
39512
+ "type": "CustomEvent<{ questionId: string, value: QuestionnaireAnswer, answers: QuestionnaireAnswers }>",
39513
+ "kind": "expression"
39514
+ }
39515
+ }
39516
+ ]
39517
+ }
39518
+ },
38280
39519
  {
38281
39520
  "name": "c2-radio",
38282
39521
  "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`",
@@ -38464,6 +39703,139 @@
38464
39703
  ]
38465
39704
  }
38466
39705
  },
39706
+ {
39707
+ "name": "c2-rate",
39708
+ "description": "Accessible star rating control with pointer preview, keyboard adjustment and optional half-star values.\n\n`@c2n/rate`",
39709
+ "attributes": [
39710
+ {
39711
+ "name": "value",
39712
+ "description": "Current rating and submitted form value.",
39713
+ "default": "0",
39714
+ "value": {
39715
+ "type": "number",
39716
+ "kind": "expression"
39717
+ }
39718
+ },
39719
+ {
39720
+ "name": "max",
39721
+ "description": "Number of rating icons.",
39722
+ "default": "5",
39723
+ "value": {
39724
+ "type": "number",
39725
+ "kind": "expression"
39726
+ }
39727
+ },
39728
+ {
39729
+ "name": "allow-half",
39730
+ "description": "Allow values in half-star steps.",
39731
+ "default": "false",
39732
+ "value": {
39733
+ "type": "boolean",
39734
+ "kind": "expression"
39735
+ }
39736
+ },
39737
+ {
39738
+ "name": "clearable",
39739
+ "description": "Clicking the committed rating again clears it to zero.",
39740
+ "default": "false",
39741
+ "value": {
39742
+ "type": "boolean",
39743
+ "kind": "expression"
39744
+ }
39745
+ },
39746
+ {
39747
+ "name": "readonly",
39748
+ "description": "Prevents changes while keeping the rating visually available.",
39749
+ "default": "false",
39750
+ "value": {
39751
+ "type": "boolean",
39752
+ "kind": "expression"
39753
+ }
39754
+ },
39755
+ {
39756
+ "name": "disabled",
39757
+ "description": "Disables interaction and form submission.",
39758
+ "default": "false",
39759
+ "value": {
39760
+ "type": "boolean",
39761
+ "kind": "expression"
39762
+ }
39763
+ },
39764
+ {
39765
+ "name": "required",
39766
+ "description": "Requires a rating greater than zero for native form validation.",
39767
+ "default": "false",
39768
+ "value": {
39769
+ "type": "boolean",
39770
+ "kind": "expression"
39771
+ }
39772
+ },
39773
+ {
39774
+ "name": "name",
39775
+ "description": "Name used when the rating participates in a form.",
39776
+ "default": "''",
39777
+ "value": {
39778
+ "type": "string",
39779
+ "kind": "expression"
39780
+ }
39781
+ },
39782
+ {
39783
+ "name": "aria-label",
39784
+ "description": "Accessible name of the rating control.",
39785
+ "default": "null",
39786
+ "value": {
39787
+ "type": "string | null",
39788
+ "kind": "expression"
39789
+ }
39790
+ }
39791
+ ],
39792
+ "js": {
39793
+ "properties": [
39794
+ {
39795
+ "name": "allowHalf",
39796
+ "description": "Allow values in half-star steps.",
39797
+ "value": {
39798
+ "type": "boolean",
39799
+ "kind": "expression"
39800
+ }
39801
+ },
39802
+ {
39803
+ "name": "ariaLabel",
39804
+ "description": "Accessible name of the rating control.",
39805
+ "value": {
39806
+ "type": "string | null",
39807
+ "kind": "expression"
39808
+ }
39809
+ }
39810
+ ],
39811
+ "events": [
39812
+ {
39813
+ "name": "rate-change",
39814
+ "description": "Fired after the user commits a rating. `detail.value` is the new value.",
39815
+ "value": {
39816
+ "type": "CustomEvent<RateChangeEventDetail>",
39817
+ "kind": "expression"
39818
+ }
39819
+ },
39820
+ {
39821
+ "name": "input",
39822
+ "description": "Fired with `rate-change` for form and framework bindings.",
39823
+ "value": {
39824
+ "type": "Event",
39825
+ "kind": "expression"
39826
+ }
39827
+ },
39828
+ {
39829
+ "name": "change",
39830
+ "description": "Fired with `rate-change` after the value is committed.",
39831
+ "value": {
39832
+ "type": "Event",
39833
+ "kind": "expression"
39834
+ }
39835
+ }
39836
+ ]
39837
+ }
39838
+ },
38467
39839
  {
38468
39840
  "name": "c2-reorder-list",
38469
39841
  "description": "`@c2n/reorder-list`",
@@ -39191,6 +40563,198 @@
39191
40563
  "events": []
39192
40564
  }
39193
40565
  },
40566
+ {
40567
+ "name": "c2-status-panel",
40568
+ "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`",
40569
+ "attributes": [
40570
+ {
40571
+ "name": "status",
40572
+ "description": "Visual tone and default media icon.",
40573
+ "default": "'neutral'",
40574
+ "value": {
40575
+ "type": "StatusPanelStatus",
40576
+ "kind": "expression"
40577
+ }
40578
+ },
40579
+ {
40580
+ "name": "align",
40581
+ "description": "Centers the composition or aligns it to the inline start.",
40582
+ "default": "'center'",
40583
+ "value": {
40584
+ "type": "StatusPanelAlign",
40585
+ "kind": "expression"
40586
+ }
40587
+ },
40588
+ {
40589
+ "name": "heading",
40590
+ "description": "Plain-text title fallback. Use the `title` slot for rich content.",
40591
+ "default": "''",
40592
+ "value": {
40593
+ "type": "string",
40594
+ "kind": "expression"
40595
+ }
40596
+ },
40597
+ {
40598
+ "name": "description",
40599
+ "description": "Plain-text description fallback. Use the `description` slot for rich content.",
40600
+ "default": "''",
40601
+ "value": {
40602
+ "type": "string",
40603
+ "kind": "expression"
40604
+ }
40605
+ },
40606
+ {
40607
+ "name": "heading-level",
40608
+ "description": "Accessible heading level used by the title region.",
40609
+ "default": "2",
40610
+ "value": {
40611
+ "type": "number",
40612
+ "kind": "expression"
40613
+ }
40614
+ }
40615
+ ],
40616
+ "js": {
40617
+ "properties": [
40618
+ {
40619
+ "name": "headingLevel",
40620
+ "description": "Accessible heading level used by the title region.",
40621
+ "value": {
40622
+ "type": "number",
40623
+ "kind": "expression"
40624
+ }
40625
+ }
40626
+ ],
40627
+ "events": []
40628
+ }
40629
+ },
40630
+ {
40631
+ "name": "c2-step",
40632
+ "description": "One row of a Steps list: a marker, a label with optional dimmed `detail`, and `trailing` text at the end\nof the row — a duration, a count, a timestamp.\n\n`@c2n/steps`",
40633
+ "attributes": [
40634
+ {
40635
+ "name": "status",
40636
+ "description": "State of the step. Drives the marker glyph and the accent colour, and reopens a folded group.",
40637
+ "default": "'pending'",
40638
+ "value": {
40639
+ "type": "StepStatus",
40640
+ "kind": "expression"
40641
+ }
40642
+ },
40643
+ {
40644
+ "name": "label",
40645
+ "description": "Primary text, when the `label` slot is empty.",
40646
+ "default": "''",
40647
+ "value": {
40648
+ "type": "string",
40649
+ "kind": "expression"
40650
+ }
40651
+ },
40652
+ {
40653
+ "name": "detail",
40654
+ "description": "Dimmed secondary text beside the label, when the `detail` slot is empty.",
40655
+ "default": "''",
40656
+ "value": {
40657
+ "type": "string",
40658
+ "kind": "expression"
40659
+ }
40660
+ },
40661
+ {
40662
+ "name": "trailing",
40663
+ "description": "Text at the end of the row, when the `trailing` slot is empty.",
40664
+ "default": "''",
40665
+ "value": {
40666
+ "type": "string",
40667
+ "kind": "expression"
40668
+ }
40669
+ },
40670
+ {
40671
+ "name": "collapsed",
40672
+ "description": "Whether this group is folded away. A group is expanded by default — every step in the list is a row you can\nsee — and only the reader, the markup or a reopening status ever changes that.",
40673
+ "default": "false",
40674
+ "value": {
40675
+ "type": "boolean",
40676
+ "kind": "expression"
40677
+ }
40678
+ }
40679
+ ],
40680
+ "js": {
40681
+ "properties": [],
40682
+ "events": [
40683
+ {
40684
+ "name": "step-toggle",
40685
+ "description": "A group was folded away or brought back. Bubbles.",
40686
+ "value": {
40687
+ "type": "CustomEvent<StepToggleEventDetail>",
40688
+ "kind": "expression"
40689
+ }
40690
+ }
40691
+ ]
40692
+ }
40693
+ },
40694
+ {
40695
+ "name": "c2-steps",
40696
+ "description": "A vertical list of steps: the trace of a task as it runs, or a wizard's progress. Each row is a marker, a label,\nan optional dimmed `detail` beside it and `trailing` text at the end — a duration, a count, a timestamp.\n\n`@c2n/steps`",
40697
+ "attributes": [
40698
+ {
40699
+ "name": "marker",
40700
+ "description": "How each marker is drawn: a status glyph, the step's number, or nothing.",
40701
+ "default": "'icon'",
40702
+ "value": {
40703
+ "type": "StepsMarker",
40704
+ "kind": "expression"
40705
+ }
40706
+ },
40707
+ {
40708
+ "name": "current",
40709
+ "description": "Index of the active step, for a wizard. `-1` (the default) leaves every status alone; otherwise a top-level\nstep with neither an explicit `status` nor sub-steps becomes `success` before this index, `current` at it and\n`pending` after it.",
40710
+ "default": "-1",
40711
+ "value": {
40712
+ "type": "number",
40713
+ "kind": "expression"
40714
+ }
40715
+ },
40716
+ {
40717
+ "name": "steps",
40718
+ "description": "The steps as data, instead of `c2-step` children. Takes precedence over the slot.",
40719
+ "default": "undefined",
40720
+ "value": {
40721
+ "type": "StepNode[] | undefined",
40722
+ "kind": "expression"
40723
+ }
40724
+ },
40725
+ {
40726
+ "name": "aria-label",
40727
+ "description": "Accessible name for the list.",
40728
+ "default": "null",
40729
+ "value": {
40730
+ "type": "string | null",
40731
+ "kind": "expression"
40732
+ }
40733
+ }
40734
+ ],
40735
+ "js": {
40736
+ "properties": [
40737
+ {
40738
+ "name": "ariaLabel",
40739
+ "description": "Accessible name for the list.",
40740
+ "value": {
40741
+ "type": "string | null",
40742
+ "kind": "expression"
40743
+ }
40744
+ }
40745
+ ],
40746
+ "events": [
40747
+ {
40748
+ "name": "step-toggle",
40749
+ "description": "Fired by a `c2-step` when a group opens or closes, and bubbling to here. `event.target` is the step; `detail.path` says where it sits.",
40750
+ "value": {
40751
+ "type": "CustomEvent<StepToggleEventDetail>",
40752
+ "kind": "expression"
40753
+ }
40754
+ }
40755
+ ]
40756
+ }
40757
+ },
39194
40758
  {
39195
40759
  "name": "c2-switch",
39196
40760
  "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`",
@@ -40426,40 +41990,209 @@
40426
41990
  "description": "Native width hint, used when no CSS width is set.",
40427
41991
  "default": "20",
40428
41992
  "value": {
40429
- "type": "number",
41993
+ "type": "number",
41994
+ "kind": "expression"
41995
+ }
41996
+ },
41997
+ {
41998
+ "name": "resize",
41999
+ "description": "Allowed user resize directions.",
42000
+ "default": "'vertical'",
42001
+ "value": {
42002
+ "type": "'none' | 'vertical' | 'horizontal' | 'both'",
42003
+ "kind": "expression"
42004
+ }
42005
+ },
42006
+ {
42007
+ "name": "wrap",
42008
+ "description": "Native line wrapping mode.",
42009
+ "default": "'soft'",
42010
+ "value": {
42011
+ "type": "'soft' | 'hard' | 'off'",
42012
+ "kind": "expression"
42013
+ }
42014
+ },
42015
+ {
42016
+ "name": "autocomplete",
42017
+ "description": "Browser autocomplete hint.",
42018
+ "default": "''",
42019
+ "value": {
42020
+ "type": "string",
42021
+ "kind": "expression"
42022
+ }
42023
+ },
42024
+ {
42025
+ "name": "disabled",
42026
+ "description": "Prevents editing and removes the control from keyboard navigation.",
42027
+ "default": "false",
42028
+ "value": {
42029
+ "type": "boolean",
42030
+ "kind": "expression"
42031
+ }
42032
+ },
42033
+ {
42034
+ "name": "readOnly",
42035
+ "description": "Prevents editing while allowing selection.",
42036
+ "default": "false",
42037
+ "value": {
42038
+ "type": "boolean",
42039
+ "kind": "expression"
42040
+ }
42041
+ },
42042
+ {
42043
+ "name": "required",
42044
+ "description": "Requires a nonempty value for native validation.",
42045
+ "default": "false",
42046
+ "value": {
42047
+ "type": "boolean",
42048
+ "kind": "expression"
42049
+ }
42050
+ },
42051
+ {
42052
+ "name": "maxLength",
42053
+ "description": "Maximum character count; -1 means unlimited.",
42054
+ "default": "-1",
42055
+ "value": {
42056
+ "type": "number",
42057
+ "kind": "expression"
42058
+ }
42059
+ },
42060
+ {
42061
+ "name": "minLength",
42062
+ "description": "Minimum character count; -1 means no minimum.",
42063
+ "default": "-1",
42064
+ "value": {
42065
+ "type": "number",
42066
+ "kind": "expression"
42067
+ }
42068
+ },
42069
+ {
42070
+ "name": "error",
42071
+ "description": "Displays the error border and error text.",
42072
+ "default": "false",
42073
+ "value": {
42074
+ "type": "boolean",
42075
+ "kind": "expression"
42076
+ }
42077
+ },
42078
+ {
42079
+ "name": "error-text",
42080
+ "description": "Message displayed when error is true.",
42081
+ "default": "''",
42082
+ "value": {
42083
+ "type": "string",
42084
+ "kind": "expression"
42085
+ }
42086
+ },
42087
+ {
42088
+ "name": "help",
42089
+ "description": "Helper text below the control.",
42090
+ "default": "''",
42091
+ "value": {
42092
+ "type": "string",
42093
+ "kind": "expression"
42094
+ }
42095
+ }
42096
+ ],
42097
+ "js": {
42098
+ "properties": [
42099
+ {
42100
+ "name": "ariaLabel",
42101
+ "description": "Accessible name forwarded from the host.",
42102
+ "value": {
42103
+ "type": "string | null",
42104
+ "kind": "expression"
42105
+ }
42106
+ },
42107
+ {
42108
+ "name": "errorText",
42109
+ "description": "Message displayed when error is true.",
42110
+ "value": {
42111
+ "type": "string",
42112
+ "kind": "expression"
42113
+ }
42114
+ }
42115
+ ],
42116
+ "events": [
42117
+ {
42118
+ "name": "input",
42119
+ "description": "Fired on each edit, after value is updated.",
42120
+ "value": {
42121
+ "type": "InputEvent",
42122
+ "kind": "expression"
42123
+ }
42124
+ },
42125
+ {
42126
+ "name": "change",
42127
+ "description": "Fired when an edit is committed.",
42128
+ "value": {
42129
+ "type": "Event",
42130
+ "kind": "expression"
42131
+ }
42132
+ },
42133
+ {
42134
+ "name": "select",
42135
+ "description": "Fired when text is selected.",
42136
+ "value": {
42137
+ "type": "Event",
42138
+ "kind": "expression"
42139
+ }
42140
+ }
42141
+ ]
42142
+ }
42143
+ },
42144
+ {
42145
+ "name": "c2-theme-select",
42146
+ "description": "Colour-theme switcher. The trigger shows the icon of the mode currently in effect and clicking it steps to the next\none, wrapping around — a two-state control is therefore a plain light/dark toggle. With three or more modes the\ntrigger also opens a menu on hover (or focus, or ArrowDown) so any mode can be picked directly, while the click-to-\nadvance behaviour keeps working.\n\n`@c2n/theme-select`",
42147
+ "attributes": [
42148
+ {
42149
+ "name": "modes",
42150
+ "description": "The states to cycle through: `\"system,light,dark\"`, a JSON array, or objects from script.",
42151
+ "default": "['system', 'light', 'dark']",
42152
+ "value": {
42153
+ "type": "Array<string | ThemeSelectMode>",
42154
+ "kind": "expression"
42155
+ }
42156
+ },
42157
+ {
42158
+ "name": "value",
42159
+ "description": "The mode in effect. Assigning it selects that mode silently; `select()` and `next()` report the change.",
42160
+ "default": "''",
42161
+ "value": {
42162
+ "type": "string",
40430
42163
  "kind": "expression"
40431
42164
  }
40432
42165
  },
40433
42166
  {
40434
- "name": "resize",
40435
- "description": "Allowed user resize directions.",
40436
- "default": "'vertical'",
42167
+ "name": "menu",
42168
+ "description": "When to offer the dropdown: `auto` (three or more modes), `always`, or `never`.",
42169
+ "default": "'auto'",
40437
42170
  "value": {
40438
- "type": "'none' | 'vertical' | 'horizontal' | 'both'",
42171
+ "type": "'auto' | 'always' | 'never'",
40439
42172
  "kind": "expression"
40440
42173
  }
40441
42174
  },
40442
42175
  {
40443
- "name": "wrap",
40444
- "description": "Native line wrapping mode.",
40445
- "default": "'soft'",
42176
+ "name": "placement",
42177
+ "description": "Preferred placement of the menu (floating-ui names).",
42178
+ "default": "'bottom'",
40446
42179
  "value": {
40447
- "type": "'soft' | 'hard' | 'off'",
42180
+ "type": "Placement",
40448
42181
  "kind": "expression"
40449
42182
  }
40450
42183
  },
40451
42184
  {
40452
- "name": "autocomplete",
40453
- "description": "Browser autocomplete hint.",
40454
- "default": "''",
42185
+ "name": "show-label",
42186
+ "description": "Show the current mode's label beside its icon.",
42187
+ "default": "false",
40455
42188
  "value": {
40456
- "type": "string",
42189
+ "type": "boolean",
40457
42190
  "kind": "expression"
40458
42191
  }
40459
42192
  },
40460
42193
  {
40461
42194
  "name": "disabled",
40462
- "description": "Prevents editing and removes the control from keyboard navigation.",
42195
+ "description": "Blocks interaction and dims the control.",
40463
42196
  "default": "false",
40464
42197
  "value": {
40465
42198
  "type": "boolean",
@@ -40467,8 +42200,8 @@
40467
42200
  }
40468
42201
  },
40469
42202
  {
40470
- "name": "readOnly",
40471
- "description": "Prevents editing while allowing selection.",
42203
+ "name": "manual",
42204
+ "description": "Do not touch the document or storage; the host applies the theme itself from `theme-change`.",
40472
42205
  "default": "false",
40473
42206
  "value": {
40474
42207
  "type": "boolean",
@@ -40476,54 +42209,53 @@
40476
42209
  }
40477
42210
  },
40478
42211
  {
40479
- "name": "required",
40480
- "description": "Requires a nonempty value for native validation.",
40481
- "default": "false",
42212
+ "name": "target",
42213
+ "description": "Element the scheme is written to, or the id of one. Defaults to `<html>`.",
42214
+ "default": "undefined",
40482
42215
  "value": {
40483
- "type": "boolean",
42216
+ "type": "string | HTMLElement | undefined",
40484
42217
  "kind": "expression"
40485
42218
  }
40486
42219
  },
40487
42220
  {
40488
- "name": "maxLength",
40489
- "description": "Maximum character count; -1 means unlimited.",
40490
- "default": "-1",
42221
+ "name": "theme-attribute",
42222
+ "description": "Attribute written on the target, `data-theme` by default.",
42223
+ "default": "'data-theme'",
40491
42224
  "value": {
40492
- "type": "number",
42225
+ "type": "string",
40493
42226
  "kind": "expression"
40494
42227
  }
40495
42228
  },
40496
42229
  {
40497
- "name": "minLength",
40498
- "description": "Minimum character count; -1 means no minimum.",
40499
- "default": "-1",
42230
+ "name": "storage-key",
42231
+ "description": "`localStorage` key the chosen mode is remembered under. Empty disables persistence.",
42232
+ "default": "'c2n-theme'",
40500
42233
  "value": {
40501
- "type": "number",
42234
+ "type": "string",
40502
42235
  "kind": "expression"
40503
42236
  }
40504
42237
  },
40505
42238
  {
40506
- "name": "error",
40507
- "description": "Displays the error border and error text.",
40508
- "default": "false",
42239
+ "name": "open-delay",
42240
+ "description": "Milliseconds the pointer must rest on the trigger before the menu opens.",
42241
+ "default": "150",
40509
42242
  "value": {
40510
- "type": "boolean",
42243
+ "type": "number",
40511
42244
  "kind": "expression"
40512
42245
  }
40513
42246
  },
40514
42247
  {
40515
- "name": "error-text",
40516
- "description": "Message displayed when error is true.",
40517
- "default": "''",
42248
+ "name": "close-delay",
42249
+ "description": "Milliseconds the menu stays open after the pointer leaves, so it can be crossed into.",
42250
+ "default": "200",
40518
42251
  "value": {
40519
- "type": "string",
42252
+ "type": "number",
40520
42253
  "kind": "expression"
40521
42254
  }
40522
42255
  },
40523
42256
  {
40524
- "name": "help",
40525
- "description": "Helper text below the control.",
40526
- "default": "''",
42257
+ "name": "aria-label",
42258
+ "description": "Accessible name of the trigger. Defaults to `Theme: <current label>`.",
40527
42259
  "value": {
40528
42260
  "type": "string",
40529
42261
  "kind": "expression"
@@ -40533,44 +42265,60 @@
40533
42265
  "js": {
40534
42266
  "properties": [
40535
42267
  {
40536
- "name": "ariaLabel",
40537
- "description": "Accessible name forwarded from the host.",
42268
+ "name": "showLabel",
42269
+ "description": "Show the current mode's label beside its icon.",
40538
42270
  "value": {
40539
- "type": "string | null",
42271
+ "type": "boolean",
40540
42272
  "kind": "expression"
40541
42273
  }
40542
42274
  },
40543
42275
  {
40544
- "name": "errorText",
40545
- "description": "Message displayed when error is true.",
42276
+ "name": "themeAttribute",
42277
+ "description": "Attribute written on the target, `data-theme` by default.",
40546
42278
  "value": {
40547
42279
  "type": "string",
40548
42280
  "kind": "expression"
40549
42281
  }
40550
- }
40551
- ],
40552
- "events": [
42282
+ },
40553
42283
  {
40554
- "name": "input",
40555
- "description": "Fired on each edit, after value is updated.",
42284
+ "name": "storageKey",
42285
+ "description": "`localStorage` key the chosen mode is remembered under. Empty disables persistence.",
40556
42286
  "value": {
40557
- "type": "InputEvent",
42287
+ "type": "string",
40558
42288
  "kind": "expression"
40559
42289
  }
40560
42290
  },
40561
42291
  {
40562
- "name": "change",
40563
- "description": "Fired when an edit is committed.",
42292
+ "name": "openDelay",
42293
+ "description": "Milliseconds the pointer must rest on the trigger before the menu opens.",
40564
42294
  "value": {
40565
- "type": "Event",
42295
+ "type": "number",
40566
42296
  "kind": "expression"
40567
42297
  }
40568
42298
  },
40569
42299
  {
40570
- "name": "select",
40571
- "description": "Fired when text is selected.",
42300
+ "name": "closeDelay",
42301
+ "description": "Milliseconds the menu stays open after the pointer leaves, so it can be crossed into.",
40572
42302
  "value": {
40573
- "type": "Event",
42303
+ "type": "number",
42304
+ "kind": "expression"
42305
+ }
42306
+ },
42307
+ {
42308
+ "name": "ariaLabel",
42309
+ "description": "Accessible name of the trigger. Defaults to `Theme: <current label>`.",
42310
+ "value": {
42311
+ "type": "string",
42312
+ "kind": "expression"
42313
+ }
42314
+ }
42315
+ ],
42316
+ "events": [
42317
+ {
42318
+ "name": "theme-change",
42319
+ "description": "The scheme in effect changed: a mode was picked, or the OS preference moved while `system` was selected. `detail.value` is the mode, `detail.theme` the scheme it resolves to. Does not bubble; assigning `value` from script is silent.",
42320
+ "value": {
42321
+ "type": "CustomEvent<ThemeSelectChangeDetail>",
40574
42322
  "kind": "expression"
40575
42323
  }
40576
42324
  }
@@ -40991,6 +42739,532 @@
40991
42739
  ]
40992
42740
  }
40993
42741
  },
42742
+ {
42743
+ "name": "c2-tree",
42744
+ "description": "Hierarchical tree view with expansion, selection and lazy loading.\n\n`@c2n/tree`",
42745
+ "attributes": [
42746
+ {
42747
+ "name": "items",
42748
+ "description": "Nodes to render. Leave empty and nest `c2-tree-item` elements instead to author the tree in markup.",
42749
+ "default": "[]",
42750
+ "value": {
42751
+ "type": "TreeNode[]",
42752
+ "kind": "expression"
42753
+ }
42754
+ },
42755
+ {
42756
+ "name": "value",
42757
+ "description": "Values of the selected rows. Reflected as a `;`-separated attribute.",
42758
+ "default": "[]",
42759
+ "value": {
42760
+ "type": "string[]",
42761
+ "kind": "expression"
42762
+ }
42763
+ },
42764
+ {
42765
+ "name": "expanded-items",
42766
+ "description": "Values of the expanded rows. Reflected as a `;`-separated attribute.",
42767
+ "default": "[]",
42768
+ "value": {
42769
+ "type": "string[]",
42770
+ "kind": "expression"
42771
+ }
42772
+ },
42773
+ {
42774
+ "name": "selection",
42775
+ "description": "How many rows may be selected at once.",
42776
+ "default": "'single'",
42777
+ "value": {
42778
+ "type": "TreeSelectionMode",
42779
+ "kind": "expression"
42780
+ }
42781
+ },
42782
+ {
42783
+ "name": "checkbox-selection",
42784
+ "description": "Shows a checkbox on every row. Implies `selection=\"multiple\"`.",
42785
+ "default": "false",
42786
+ "value": {
42787
+ "type": "boolean",
42788
+ "kind": "expression"
42789
+ }
42790
+ },
42791
+ {
42792
+ "name": "selection-propagation",
42793
+ "description": "How a checkbox tick travels between a row and its relatives.",
42794
+ "default": "'both'",
42795
+ "value": {
42796
+ "type": "TreeSelectionPropagation",
42797
+ "kind": "expression"
42798
+ }
42799
+ },
42800
+ {
42801
+ "name": "children-outline",
42802
+ "description": "Draws a vertical rule per level of depth, marking which branch each row belongs to.",
42803
+ "default": "false",
42804
+ "value": {
42805
+ "type": "boolean",
42806
+ "kind": "expression"
42807
+ }
42808
+ },
42809
+ {
42810
+ "name": "disabled",
42811
+ "description": "Freezes the whole tree.",
42812
+ "default": "false",
42813
+ "value": {
42814
+ "type": "boolean",
42815
+ "kind": "expression"
42816
+ }
42817
+ },
42818
+ {
42819
+ "name": "expand-on-click",
42820
+ "description": "Expands a branch when its row is clicked — or activated with Enter or Space — not only when its toggle is.",
42821
+ "default": "false",
42822
+ "value": {
42823
+ "type": "boolean",
42824
+ "kind": "expression"
42825
+ }
42826
+ }
42827
+ ],
42828
+ "js": {
42829
+ "properties": [
42830
+ {
42831
+ "name": "expandedItems",
42832
+ "description": "Values of the expanded rows. Reflected as a `;`-separated attribute.",
42833
+ "value": {
42834
+ "type": "string[]",
42835
+ "kind": "expression"
42836
+ }
42837
+ },
42838
+ {
42839
+ "name": "checkboxSelection",
42840
+ "description": "Shows a checkbox on every row. Implies `selection=\"multiple\"`.",
42841
+ "value": {
42842
+ "type": "boolean",
42843
+ "kind": "expression"
42844
+ }
42845
+ },
42846
+ {
42847
+ "name": "selectionPropagation",
42848
+ "description": "How a checkbox tick travels between a row and its relatives.",
42849
+ "value": {
42850
+ "type": "TreeSelectionPropagation",
42851
+ "kind": "expression"
42852
+ }
42853
+ },
42854
+ {
42855
+ "name": "childrenOutline",
42856
+ "description": "Draws a vertical rule per level of depth, marking which branch each row belongs to.",
42857
+ "value": {
42858
+ "type": "boolean",
42859
+ "kind": "expression"
42860
+ }
42861
+ },
42862
+ {
42863
+ "name": "expandOnClick",
42864
+ "description": "Expands a branch when its row is clicked — or activated with Enter or Space — not only when its toggle is.",
42865
+ "value": {
42866
+ "type": "boolean",
42867
+ "kind": "expression"
42868
+ }
42869
+ }
42870
+ ],
42871
+ "events": [
42872
+ {
42873
+ "name": "expansion-change",
42874
+ "description": "Fired after a row is expanded or collapsed. Does not bubble.",
42875
+ "value": {
42876
+ "type": "CustomEvent<TreeExpansionChangeEventDetail>",
42877
+ "kind": "expression"
42878
+ }
42879
+ },
42880
+ {
42881
+ "name": "item-load-error",
42882
+ "description": "Fired when `loadChildren` rejects.",
42883
+ "value": {
42884
+ "type": "CustomEvent<TreeItemLoadErrorEventDetail>",
42885
+ "kind": "expression"
42886
+ }
42887
+ },
42888
+ {
42889
+ "name": "selection-change",
42890
+ "description": "Fired after the user changes the selection. Does not bubble: several components fire `selection-change`, so a listener belongs on the element itself.",
42891
+ "value": {
42892
+ "type": "CustomEvent<TreeSelectionChangeEventDetail>",
42893
+ "kind": "expression"
42894
+ }
42895
+ },
42896
+ {
42897
+ "name": "item-click",
42898
+ "description": "Fired when a row is clicked, selected or not.",
42899
+ "value": {
42900
+ "type": "CustomEvent<TreeItemClickEventDetail>",
42901
+ "kind": "expression"
42902
+ }
42903
+ },
42904
+ {
42905
+ "name": "item-expand",
42906
+ "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.",
42907
+ "value": {
42908
+ "type": "CustomEvent<TreeItemExpandEventDetail>",
42909
+ "kind": "expression"
42910
+ }
42911
+ }
42912
+ ]
42913
+ }
42914
+ },
42915
+ {
42916
+ "name": "c2-tree-item",
42917
+ "description": "One row of a https://github.com/code2nguyen/web-components | `c2-tree`.\n\n`@c2n/tree`",
42918
+ "attributes": [
42919
+ {
42920
+ "name": "value",
42921
+ "description": "Identity of the row. Selection and expansion are tracked by this value, so it must be unique in the tree.",
42922
+ "default": "''",
42923
+ "value": {
42924
+ "type": "string",
42925
+ "kind": "expression"
42926
+ }
42927
+ },
42928
+ {
42929
+ "name": "label",
42930
+ "description": "Text of the row. Ignored when the `label` slot is filled; falls back to `value` when empty.",
42931
+ "default": "''",
42932
+ "value": {
42933
+ "type": "string",
42934
+ "kind": "expression"
42935
+ }
42936
+ },
42937
+ {
42938
+ "name": "disabled",
42939
+ "description": "Blocks selection and expansion, and takes the row out of checkbox propagation.",
42940
+ "default": "false",
42941
+ "value": {
42942
+ "type": "boolean",
42943
+ "kind": "expression"
42944
+ }
42945
+ },
42946
+ {
42947
+ "name": "has-children",
42948
+ "description": "Marks a branch whose children load on demand: the toggle shows before any child exists.",
42949
+ "default": "false",
42950
+ "value": {
42951
+ "type": "boolean",
42952
+ "kind": "expression"
42953
+ }
42954
+ },
42955
+ {
42956
+ "name": "href",
42957
+ "description": "Turns the row into a link. The whole row becomes the click target; the toggle still only expands.",
42958
+ "default": "''",
42959
+ "value": {
42960
+ "type": "string",
42961
+ "kind": "expression"
42962
+ }
42963
+ },
42964
+ {
42965
+ "name": "target",
42966
+ "description": "Browsing context for `href`, e.g. `_blank`. A `_blank` row gets `rel=\"noopener noreferrer\"`.",
42967
+ "value": {
42968
+ "type": "string | undefined",
42969
+ "kind": "expression"
42970
+ }
42971
+ },
42972
+ {
42973
+ "name": "expanded",
42974
+ "description": "Whether the children are shown. Written by the parent `c2-tree`.",
42975
+ "default": "false",
42976
+ "value": {
42977
+ "type": "boolean",
42978
+ "kind": "expression"
42979
+ }
42980
+ },
42981
+ {
42982
+ "name": "selected",
42983
+ "description": "Whether the row is selected. Written by the parent `c2-tree`.",
42984
+ "default": "false",
42985
+ "value": {
42986
+ "type": "boolean",
42987
+ "kind": "expression"
42988
+ }
42989
+ },
42990
+ {
42991
+ "name": "indeterminate",
42992
+ "description": "Whether only part of the subtree is selected. Derived and written by the parent `c2-tree`.",
42993
+ "default": "false",
42994
+ "value": {
42995
+ "type": "boolean",
42996
+ "kind": "expression"
42997
+ }
42998
+ },
42999
+ {
43000
+ "name": "loading",
43001
+ "description": "Whether the children are being fetched. Written by the parent `c2-tree`.",
43002
+ "default": "false",
43003
+ "value": {
43004
+ "type": "boolean",
43005
+ "kind": "expression"
43006
+ }
43007
+ },
43008
+ {
43009
+ "name": "children-outline",
43010
+ "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.",
43011
+ "default": "false",
43012
+ "value": {
43013
+ "type": "boolean",
43014
+ "kind": "expression"
43015
+ }
43016
+ }
43017
+ ],
43018
+ "js": {
43019
+ "properties": [
43020
+ {
43021
+ "name": "hasChildren",
43022
+ "description": "Marks a branch whose children load on demand: the toggle shows before any child exists.",
43023
+ "value": {
43024
+ "type": "boolean",
43025
+ "kind": "expression"
43026
+ }
43027
+ },
43028
+ {
43029
+ "name": "childrenOutline",
43030
+ "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.",
43031
+ "value": {
43032
+ "type": "boolean",
43033
+ "kind": "expression"
43034
+ }
43035
+ }
43036
+ ],
43037
+ "events": [
43038
+ {
43039
+ "name": "TREE_ITEM_CHANGE_EVENT",
43040
+ "value": {
43041
+ "type": "CustomEvent",
43042
+ "kind": "expression"
43043
+ }
43044
+ },
43045
+ {
43046
+ "name": "TREE_ITEM_TOGGLE_EVENT",
43047
+ "value": {
43048
+ "type": "CustomEvent",
43049
+ "kind": "expression"
43050
+ }
43051
+ },
43052
+ {
43053
+ "name": "TREE_ITEM_CHECK_EVENT",
43054
+ "value": {
43055
+ "type": "CustomEvent",
43056
+ "kind": "expression"
43057
+ }
43058
+ }
43059
+ ]
43060
+ }
43061
+ },
43062
+ {
43063
+ "name": "c2-upload",
43064
+ "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`",
43065
+ "attributes": [
43066
+ {
43067
+ "name": "multiple",
43068
+ "description": "Accept several files in one browse or drop operation.",
43069
+ "default": "false",
43070
+ "value": {
43071
+ "type": "boolean",
43072
+ "kind": "expression"
43073
+ }
43074
+ },
43075
+ {
43076
+ "name": "variant",
43077
+ "description": "Dropzone provides drag-and-drop; compact renders only an upload button.",
43078
+ "default": "'dropzone'",
43079
+ "value": {
43080
+ "type": "UploadVariant",
43081
+ "kind": "expression"
43082
+ }
43083
+ },
43084
+ {
43085
+ "name": "accept",
43086
+ "description": "Comma-separated MIME types or file extensions, using the native file-input syntax.",
43087
+ "default": "''",
43088
+ "value": {
43089
+ "type": "string",
43090
+ "kind": "expression"
43091
+ }
43092
+ },
43093
+ {
43094
+ "name": "max-files",
43095
+ "description": "Maximum number of queued files. Zero means unlimited.",
43096
+ "default": "0",
43097
+ "value": {
43098
+ "type": "number",
43099
+ "kind": "expression"
43100
+ }
43101
+ },
43102
+ {
43103
+ "name": "max-size",
43104
+ "description": "Maximum size of each file in bytes. Zero means unlimited.",
43105
+ "default": "0",
43106
+ "value": {
43107
+ "type": "number",
43108
+ "kind": "expression"
43109
+ }
43110
+ },
43111
+ {
43112
+ "name": "auto-upload",
43113
+ "description": "Run `uploadHandler` immediately after files are accepted.",
43114
+ "default": "true",
43115
+ "value": {
43116
+ "type": "boolean",
43117
+ "kind": "expression"
43118
+ }
43119
+ },
43120
+ {
43121
+ "name": "disabled",
43122
+ "description": "Disables browsing, dropping and attachment actions.",
43123
+ "default": "false",
43124
+ "value": {
43125
+ "type": "boolean",
43126
+ "kind": "expression"
43127
+ }
43128
+ },
43129
+ {
43130
+ "name": "required",
43131
+ "description": "Requires at least one selected file for native form validation.",
43132
+ "default": "false",
43133
+ "value": {
43134
+ "type": "boolean",
43135
+ "kind": "expression"
43136
+ }
43137
+ },
43138
+ {
43139
+ "name": "name",
43140
+ "description": "Form field name. Each queued file is appended with this name.",
43141
+ "default": "''",
43142
+ "value": {
43143
+ "type": "string",
43144
+ "kind": "expression"
43145
+ }
43146
+ },
43147
+ {
43148
+ "name": "aria-label",
43149
+ "description": "Accessible name for the drop zone.",
43150
+ "default": "null",
43151
+ "value": {
43152
+ "type": "string | null",
43153
+ "kind": "expression"
43154
+ }
43155
+ }
43156
+ ],
43157
+ "js": {
43158
+ "properties": [
43159
+ {
43160
+ "name": "maxFiles",
43161
+ "description": "Maximum number of queued files. Zero means unlimited.",
43162
+ "value": {
43163
+ "type": "number",
43164
+ "kind": "expression"
43165
+ }
43166
+ },
43167
+ {
43168
+ "name": "maxSize",
43169
+ "description": "Maximum size of each file in bytes. Zero means unlimited.",
43170
+ "value": {
43171
+ "type": "number",
43172
+ "kind": "expression"
43173
+ }
43174
+ },
43175
+ {
43176
+ "name": "autoUpload",
43177
+ "description": "Run `uploadHandler` immediately after files are accepted.",
43178
+ "value": {
43179
+ "type": "boolean",
43180
+ "kind": "expression"
43181
+ }
43182
+ },
43183
+ {
43184
+ "name": "ariaLabel",
43185
+ "description": "Accessible name for the drop zone.",
43186
+ "value": {
43187
+ "type": "string | null",
43188
+ "kind": "expression"
43189
+ }
43190
+ }
43191
+ ],
43192
+ "events": [
43193
+ {
43194
+ "name": "input",
43195
+ "description": "Fired whenever the file value changes, for form and framework bindings.",
43196
+ "value": {
43197
+ "type": "Event",
43198
+ "kind": "expression"
43199
+ }
43200
+ },
43201
+ {
43202
+ "name": "change",
43203
+ "description": "Fired whenever files are added or removed, for form and framework bindings.",
43204
+ "value": {
43205
+ "type": "Event",
43206
+ "kind": "expression"
43207
+ }
43208
+ },
43209
+ {
43210
+ "name": "files-selected",
43211
+ "description": "Fired after valid files enter the queue through browse, drop or `addFiles()`.",
43212
+ "value": {
43213
+ "type": "CustomEvent<UploadFilesEventDetail>",
43214
+ "kind": "expression"
43215
+ }
43216
+ },
43217
+ {
43218
+ "name": "file-reject",
43219
+ "description": "Fired when type, size, count or single-file rules reject files.",
43220
+ "value": {
43221
+ "type": "CustomEvent<{ rejections: UploadRejection[] }>",
43222
+ "kind": "expression"
43223
+ }
43224
+ },
43225
+ {
43226
+ "name": "upload-start",
43227
+ "description": "Fired when an item begins uploading.",
43228
+ "value": {
43229
+ "type": "CustomEvent<{ item: UploadItem }>",
43230
+ "kind": "expression"
43231
+ }
43232
+ },
43233
+ {
43234
+ "name": "upload-progress",
43235
+ "description": "Fired when the upload handler reports progress.",
43236
+ "value": {
43237
+ "type": "CustomEvent<UploadProgressEventDetail>",
43238
+ "kind": "expression"
43239
+ }
43240
+ },
43241
+ {
43242
+ "name": "upload-success",
43243
+ "description": "Fired after an upload handler resolves; `item.result` contains its result.",
43244
+ "value": {
43245
+ "type": "CustomEvent<UploadResultEventDetail>",
43246
+ "kind": "expression"
43247
+ }
43248
+ },
43249
+ {
43250
+ "name": "upload-error",
43251
+ "description": "Fired after an upload handler rejects; `item.error` contains the error.",
43252
+ "value": {
43253
+ "type": "CustomEvent<UploadResultEventDetail>",
43254
+ "kind": "expression"
43255
+ }
43256
+ },
43257
+ {
43258
+ "name": "upload-remove",
43259
+ "description": "Fired after an item is removed or an active upload is cancelled.",
43260
+ "value": {
43261
+ "type": "CustomEvent<{ item: UploadItem }>",
43262
+ "kind": "expression"
43263
+ }
43264
+ }
43265
+ ]
43266
+ }
43267
+ },
40994
43268
  {
40995
43269
  "name": "c2-virtual-list",
40996
43270
  "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`",