@fuaran-ui/conformance 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/corpus/lenient/lenient-transform-source-rowmajor.expected.json +1 -0
  2. package/corpus/lenient/lenient-transform-source-rowmajor.json +1 -0
  3. package/corpus/lenient/lenient-transform-source-state-rows.expected.json +1 -0
  4. package/corpus/lenient/lenient-transform-source-state-rows.json +1 -0
  5. package/corpus/manifest.json +311 -1
  6. package/corpus/nodes/badge-transform-live.json +1 -0
  7. package/corpus/nodes/button-setstate-valuefrom.json +1 -0
  8. package/corpus/nodes/chart-axis-titles.json +1 -0
  9. package/corpus/nodes/chart-data-labels.json +1 -0
  10. package/corpus/nodes/chart-legend-position.json +1 -0
  11. package/corpus/nodes/chart-temporal-x.json +1 -0
  12. package/corpus/nodes/chart-value-format.json +1 -0
  13. package/corpus/nodes/composite-root.json +1 -1
  14. package/corpus/nodes/composite-tabs-panels.json +1 -0
  15. package/corpus/nodes/controls-closure.json +1 -1
  16. package/corpus/nodes/controls-declarative.json +1 -1
  17. package/corpus/nodes/drawing-rotated-labels.json +1 -0
  18. package/corpus/nodes/drawing-tipped-shapes.json +1 -0
  19. package/corpus/nodes/empty-state-card.json +1 -0
  20. package/corpus/nodes/form-toggle.json +1 -0
  21. package/corpus/nodes/grid-bound-sort.json +1 -0
  22. package/corpus/nodes/grid-declared-edit.json +1 -0
  23. package/corpus/nodes/grid-paged-sorted.json +1 -0
  24. package/corpus/nodes/grid-paged.json +1 -0
  25. package/corpus/nodes/grid-sort-state-key.json +1 -0
  26. package/corpus/nodes/icon-1.json +1 -0
  27. package/corpus/nodes/link-protected-1.json +1 -0
  28. package/corpus/nodes/master-detail-multi-field.json +1 -0
  29. package/corpus/nodes/metric-duration-1.json +1 -0
  30. package/corpus/nodes/now-environment-binding.json +1 -0
  31. package/corpus/nodes/step-1.json +1 -1
  32. package/corpus/nodes/switch-on-selection.json +1 -0
  33. package/corpus/nodes/table-sortable-1.json +1 -0
  34. package/corpus/ops/op-replaceroot.json +1 -1
  35. package/corpus/reject/reject-nearmiss-column-readonly.json +1 -0
  36. package/corpus/reject/reject-nearmiss-grid-behaviour-record.json +1 -0
  37. package/corpus/reject/reject-nearmiss-grid-current-page.json +1 -0
  38. package/corpus/reject/reject-nearmiss-grid-sortable.json +1 -0
  39. package/corpus/reject/reject-setstate-value-and-valuefrom.json +1 -0
  40. package/corpus/reject/reject-transform-source-empty-wrapper.json +1 -0
  41. package/corpus/reject/reject-unknown-link-protection.json +1 -0
  42. package/corpus/reject/reject-unknown-static-sort-direction.json +1 -0
  43. package/corpus/reject/reject-wrongtype-grid-default-sort-column.json +1 -0
  44. package/corpus/reject/reject-wrongtype-grid-page-size-zero.json +1 -0
  45. package/corpus/reject/reject-wrongtype-static-sort-column.json +1 -0
  46. package/corpus/schema.json +411 -47
  47. package/package.json +3 -3
@@ -48,6 +48,12 @@
48
48
  "Lead"
49
49
  ]
50
50
  },
51
+ "LinkProtection": {
52
+ "type": "string",
53
+ "enum": [
54
+ "email"
55
+ ]
56
+ },
51
57
  "ImageVariant": {
52
58
  "type": "string",
53
59
  "enum": [
@@ -136,6 +142,29 @@
136
142
  "Heatmap"
137
143
  ]
138
144
  },
145
+ "ChartLegendPosition": {
146
+ "type": "string",
147
+ "enum": [
148
+ "Top",
149
+ "Right",
150
+ "Bottom",
151
+ "None"
152
+ ]
153
+ },
154
+ "ChartDataLabels": {
155
+ "type": "string",
156
+ "enum": [
157
+ "Off",
158
+ "Ends"
159
+ ]
160
+ },
161
+ "ChartXScale": {
162
+ "type": "string",
163
+ "enum": [
164
+ "Category",
165
+ "Temporal"
166
+ ]
167
+ },
139
168
  "LiveRegionKind": {
140
169
  "type": "string",
141
170
  "enum": [
@@ -173,6 +202,30 @@
173
202
  "Year"
174
203
  ]
175
204
  },
205
+ "DurationUnit": {
206
+ "type": "string",
207
+ "enum": [
208
+ "Seconds",
209
+ "Minutes",
210
+ "Hours"
211
+ ]
212
+ },
213
+ "DurationStyle": {
214
+ "type": "string",
215
+ "enum": [
216
+ "Compact",
217
+ "Clock",
218
+ "Long"
219
+ ]
220
+ },
221
+ "IconSize": {
222
+ "type": "string",
223
+ "enum": [
224
+ "Small",
225
+ "Medium",
226
+ "Large"
227
+ ]
228
+ },
176
229
  "FileReadEncoding": {
177
230
  "type": "string",
178
231
  "enum": [
@@ -350,6 +403,17 @@
350
403
  "fn"
351
404
  ]
352
405
  },
406
+ {
407
+ "type": "object",
408
+ "properties": {
409
+ "$type": {
410
+ "const": "Now"
411
+ }
412
+ },
413
+ "required": [
414
+ "$type"
415
+ ]
416
+ },
353
417
  {
354
418
  "type": "object",
355
419
  "properties": {
@@ -644,24 +708,44 @@
644
708
  ]
645
709
  },
646
710
  {
647
- "type": "object",
648
- "properties": {
649
- "$type": {
650
- "const": "SetState"
651
- },
652
- "key": {
653
- "type": "string"
711
+ "allOf": [
712
+ {
713
+ "type": "object",
714
+ "properties": {
715
+ "$type": {
716
+ "const": "SetState"
717
+ },
718
+ "key": {
719
+ "type": "string"
720
+ },
721
+ "value": {
722
+ "not": {
723
+ "type": "null"
724
+ }
725
+ },
726
+ "valueFrom": {
727
+ "$ref": "#/$defs/Binding"
728
+ }
729
+ },
730
+ "required": [
731
+ "$type",
732
+ "key"
733
+ ]
654
734
  },
655
- "value": {
656
- "not": {
657
- "type": "null"
658
- }
735
+ {
736
+ "oneOf": [
737
+ {
738
+ "required": [
739
+ "value"
740
+ ]
741
+ },
742
+ {
743
+ "required": [
744
+ "valueFrom"
745
+ ]
746
+ }
747
+ ]
659
748
  }
660
- },
661
- "required": [
662
- "$type",
663
- "key",
664
- "value"
665
749
  ]
666
750
  },
667
751
  {
@@ -866,6 +950,40 @@
866
950
  "format"
867
951
  ]
868
952
  },
953
+ {
954
+ "type": "object",
955
+ "properties": {
956
+ "$type": {
957
+ "const": "Duration"
958
+ },
959
+ "style": {
960
+ "$ref": "#/$defs/DurationStyle"
961
+ },
962
+ "unit": {
963
+ "$ref": "#/$defs/DurationUnit"
964
+ }
965
+ },
966
+ "required": [
967
+ "$type",
968
+ "style",
969
+ "unit"
970
+ ]
971
+ },
972
+ {
973
+ "type": "object",
974
+ "properties": {
975
+ "$type": {
976
+ "const": "RelativeTime"
977
+ },
978
+ "unit": {
979
+ "$ref": "#/$defs/RelativeTimeUnit"
980
+ }
981
+ },
982
+ "required": [
983
+ "$type",
984
+ "unit"
985
+ ]
986
+ },
869
987
  {
870
988
  "type": "object",
871
989
  "properties": {
@@ -1077,6 +1195,25 @@
1077
1195
  "$type",
1078
1196
  "unit"
1079
1197
  ]
1198
+ },
1199
+ {
1200
+ "type": "object",
1201
+ "properties": {
1202
+ "$type": {
1203
+ "const": "Duration"
1204
+ },
1205
+ "style": {
1206
+ "$ref": "#/$defs/DurationStyle"
1207
+ },
1208
+ "unit": {
1209
+ "$ref": "#/$defs/DurationUnit"
1210
+ }
1211
+ },
1212
+ "required": [
1213
+ "$type",
1214
+ "style",
1215
+ "unit"
1216
+ ]
1080
1217
  }
1081
1218
  ]
1082
1219
  },
@@ -1187,6 +1324,23 @@
1187
1324
  "$type"
1188
1325
  ]
1189
1326
  },
1327
+ {
1328
+ "type": "object",
1329
+ "properties": {
1330
+ "$type": {
1331
+ "const": "Toggle"
1332
+ },
1333
+ "onToggle": {
1334
+ "const": "<closure>"
1335
+ },
1336
+ "value": {
1337
+ "$ref": "#/$defs/Binding"
1338
+ }
1339
+ },
1340
+ "required": [
1341
+ "$type"
1342
+ ]
1343
+ },
1190
1344
  {
1191
1345
  "type": "object",
1192
1346
  "properties": {
@@ -1658,6 +1812,9 @@
1658
1812
  },
1659
1813
  "target": {
1660
1814
  "type": "string"
1815
+ },
1816
+ "protection": {
1817
+ "$ref": "#/$defs/LinkProtection"
1661
1818
  }
1662
1819
  },
1663
1820
  "required": [
@@ -1791,6 +1948,26 @@
1791
1948
  "rows"
1792
1949
  ]
1793
1950
  },
1951
+ "IconSpec": {
1952
+ "type": "object",
1953
+ "properties": {
1954
+ "icon": {
1955
+ "type": "string"
1956
+ },
1957
+ "label": {
1958
+ "type": "string"
1959
+ },
1960
+ "size": {
1961
+ "$ref": "#/$defs/IconSize"
1962
+ },
1963
+ "tone": {
1964
+ "$ref": "#/$defs/ToneVariant"
1965
+ }
1966
+ },
1967
+ "required": [
1968
+ "icon"
1969
+ ]
1970
+ },
1794
1971
  "CalloutSpec": {
1795
1972
  "type": "object",
1796
1973
  "properties": {
@@ -1963,6 +2140,12 @@
1963
2140
  },
1964
2141
  "markId": {
1965
2142
  "type": "string"
2143
+ },
2144
+ "rotation": {
2145
+ "type": "number"
2146
+ },
2147
+ "tip": {
2148
+ "$ref": "#/$defs/TextSource"
1966
2149
  }
1967
2150
  }
1968
2151
  },
@@ -2469,6 +2652,24 @@
2469
2652
  }
2470
2653
  ]
2471
2654
  },
2655
+ {
2656
+ "allOf": [
2657
+ {
2658
+ "type": "object",
2659
+ "properties": {
2660
+ "$type": {
2661
+ "const": "Icon"
2662
+ }
2663
+ },
2664
+ "required": [
2665
+ "$type"
2666
+ ]
2667
+ },
2668
+ {
2669
+ "$ref": "#/$defs/IconSpec"
2670
+ }
2671
+ ]
2672
+ },
2472
2673
  {
2473
2674
  "allOf": [
2474
2675
  {
@@ -2921,6 +3122,12 @@
2921
3122
  "field": {
2922
3123
  "type": "string"
2923
3124
  },
3125
+ "sortable": {
3126
+ "type": "boolean"
3127
+ },
3128
+ "editable": {
3129
+ "type": "boolean"
3130
+ },
2924
3131
  "width": {
2925
3132
  "$ref": "#/$defs/ColumnWidth"
2926
3133
  }
@@ -2928,6 +3135,15 @@
2928
3135
  "required": [
2929
3136
  "kind",
2930
3137
  "label"
3138
+ ],
3139
+ "allOf": [
3140
+ {
3141
+ "not": {
3142
+ "required": [
3143
+ "readOnly"
3144
+ ]
3145
+ }
3146
+ }
2931
3147
  ]
2932
3148
  },
2933
3149
  "GridSpec": {
@@ -2948,6 +3164,39 @@
2948
3164
  "rowKeyField": {
2949
3165
  "type": "string"
2950
3166
  },
3167
+ "sortStateKey": {
3168
+ "type": "string"
3169
+ },
3170
+ "pageSize": {
3171
+ "type": "integer",
3172
+ "minimum": 1
3173
+ },
3174
+ "pageStateKey": {
3175
+ "type": "string"
3176
+ },
3177
+ "editStateKey": {
3178
+ "type": "string"
3179
+ },
3180
+ "defaultSort": {
3181
+ "type": "object",
3182
+ "properties": {
3183
+ "column": {
3184
+ "type": "integer",
3185
+ "minimum": 0
3186
+ },
3187
+ "direction": {
3188
+ "type": "string",
3189
+ "enum": [
3190
+ "asc",
3191
+ "desc"
3192
+ ]
3193
+ }
3194
+ },
3195
+ "required": [
3196
+ "column",
3197
+ "direction"
3198
+ ]
3199
+ },
2951
3200
  "source": {
2952
3201
  "$ref": "#/$defs/Binding"
2953
3202
  },
@@ -2957,6 +3206,26 @@
2957
3206
  "staticRows": {
2958
3207
  "type": "object",
2959
3208
  "properties": {
3209
+ "defaultSort": {
3210
+ "type": "object",
3211
+ "properties": {
3212
+ "column": {
3213
+ "type": "integer",
3214
+ "minimum": 0
3215
+ },
3216
+ "direction": {
3217
+ "type": "string",
3218
+ "enum": [
3219
+ "asc",
3220
+ "desc"
3221
+ ]
3222
+ }
3223
+ },
3224
+ "required": [
3225
+ "column",
3226
+ "direction"
3227
+ ]
3228
+ },
2960
3229
  "headers": {
2961
3230
  "type": "array",
2962
3231
  "items": {
@@ -2971,6 +3240,9 @@
2971
3240
  "$ref": "#/$defs/TextSource"
2972
3241
  }
2973
3242
  }
3243
+ },
3244
+ "sortable": {
3245
+ "type": "boolean"
2974
3246
  }
2975
3247
  },
2976
3248
  "required": [
@@ -2982,6 +3254,57 @@
2982
3254
  "required": [
2983
3255
  "columns",
2984
3256
  "source"
3257
+ ],
3258
+ "allOf": [
3259
+ {
3260
+ "not": {
3261
+ "required": [
3262
+ "currentPage"
3263
+ ]
3264
+ }
3265
+ },
3266
+ {
3267
+ "not": {
3268
+ "required": [
3269
+ "page"
3270
+ ]
3271
+ }
3272
+ },
3273
+ {
3274
+ "not": {
3275
+ "required": [
3276
+ "pageIndex"
3277
+ ]
3278
+ }
3279
+ },
3280
+ {
3281
+ "not": {
3282
+ "required": [
3283
+ "sortable"
3284
+ ]
3285
+ }
3286
+ },
3287
+ {
3288
+ "not": {
3289
+ "required": [
3290
+ "onEdit"
3291
+ ]
3292
+ }
3293
+ },
3294
+ {
3295
+ "not": {
3296
+ "required": [
3297
+ "behaviour"
3298
+ ]
3299
+ }
3300
+ },
3301
+ {
3302
+ "not": {
3303
+ "required": [
3304
+ "behavior"
3305
+ ]
3306
+ }
3307
+ }
2985
3308
  ]
2986
3309
  },
2987
3310
  "ChartSpec": {
@@ -3008,6 +3331,27 @@
3008
3331
  "title": {
3009
3332
  "$ref": "#/$defs/TextSource"
3010
3333
  },
3334
+ "valueFormat": {
3335
+ "$ref": "#/$defs/Format"
3336
+ },
3337
+ "xTitle": {
3338
+ "$ref": "#/$defs/TextSource"
3339
+ },
3340
+ "yTitle": {
3341
+ "$ref": "#/$defs/TextSource"
3342
+ },
3343
+ "subtitle": {
3344
+ "$ref": "#/$defs/TextSource"
3345
+ },
3346
+ "legendPosition": {
3347
+ "$ref": "#/$defs/ChartLegendPosition"
3348
+ },
3349
+ "dataLabels": {
3350
+ "$ref": "#/$defs/ChartDataLabels"
3351
+ },
3352
+ "xScale": {
3353
+ "$ref": "#/$defs/ChartXScale"
3354
+ },
3011
3355
  "onPointClick": {
3012
3356
  "const": "<closure>"
3013
3357
  }
@@ -4012,41 +4356,61 @@
4012
4356
  ]
4013
4357
  },
4014
4358
  {
4015
- "type": "object",
4016
- "properties": {
4017
- "$type": {
4018
- "const": "Switch"
4019
- },
4020
- "cases": {
4021
- "type": "array",
4022
- "items": {
4023
- "type": "object",
4024
- "properties": {
4025
- "child": {
4026
- "$ref": "#/$defs/Node"
4027
- },
4028
- "match": {
4029
- "type": "string"
4359
+ "allOf": [
4360
+ {
4361
+ "type": "object",
4362
+ "properties": {
4363
+ "$type": {
4364
+ "const": "Switch"
4365
+ },
4366
+ "cases": {
4367
+ "type": "array",
4368
+ "items": {
4369
+ "type": "object",
4370
+ "properties": {
4371
+ "child": {
4372
+ "$ref": "#/$defs/Node"
4373
+ },
4374
+ "match": {
4375
+ "type": "string"
4376
+ }
4377
+ },
4378
+ "required": [
4379
+ "child",
4380
+ "match"
4381
+ ]
4030
4382
  }
4031
4383
  },
4032
- "required": [
4033
- "child",
4034
- "match"
4035
- ]
4036
- }
4037
- },
4038
- "default": {
4039
- "$ref": "#/$defs/Node"
4384
+ "default": {
4385
+ "$ref": "#/$defs/Node"
4386
+ },
4387
+ "stateKey": {
4388
+ "type": "string"
4389
+ },
4390
+ "on": {
4391
+ "$ref": "#/$defs/Binding"
4392
+ }
4393
+ },
4394
+ "required": [
4395
+ "$type",
4396
+ "cases",
4397
+ "default"
4398
+ ]
4040
4399
  },
4041
- "stateKey": {
4042
- "type": "string"
4400
+ {
4401
+ "anyOf": [
4402
+ {
4403
+ "required": [
4404
+ "stateKey"
4405
+ ]
4406
+ },
4407
+ {
4408
+ "required": [
4409
+ "on"
4410
+ ]
4411
+ }
4412
+ ]
4043
4413
  }
4044
- },
4045
- "required": [
4046
- "$type",
4047
- "cases",
4048
- "default",
4049
- "stateKey"
4050
4414
  ]
4051
4415
  },
4052
4416
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fuaran-ui/conformance",
3
- "version": "0.5.0",
3
+ "version": "0.7.0",
4
4
  "description": "Third-party certification kit for the Fuaran UI wire format — runs any candidate implementation (via a small decode/encode adapter) over the bundled canonical fixture corpus and emits a per-leg pass/fail conformance report naming the corpus version. See CONFORMANCE.md for the certification procedure.",
5
5
  "keywords": [
6
6
  "fuaran",
@@ -43,8 +43,8 @@
43
43
  },
44
44
  "devDependencies": {
45
45
  "@types/node": "^22.10.2",
46
- "@fuaran-ui/ops": "0.5.0",
47
- "@fuaran-ui/schema": "0.5.0"
46
+ "@fuaran-ui/ops": "0.7.0",
47
+ "@fuaran-ui/schema": "0.7.0"
48
48
  },
49
49
  "publishConfig": {
50
50
  "access": "public"