@fuaran-ui/conformance 0.9.0 → 0.19.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 (196) hide show
  1. package/corpus/cards/card-bundle.json +1 -0
  2. package/corpus/cards/card-full.json +1 -0
  3. package/corpus/cards/card-minimal.json +1 -0
  4. package/corpus/cards/card-reject-bad-version.json +1 -0
  5. package/corpus/cards/card-reject-bundle-bad-version.json +1 -0
  6. package/corpus/cards/card-reject-bundle-duplicate.json +1 -0
  7. package/corpus/cards/card-reject-empty-enum.json +1 -0
  8. package/corpus/cards/card-reject-hash-not-object.json +1 -0
  9. package/corpus/cards/card-reject-missing-hash.json +1 -0
  10. package/corpus/cards/card-reject-missing-module.json +1 -0
  11. package/corpus/cards/card-reject-payload-no-language.json +1 -0
  12. package/corpus/cards/card-reject-required-not-bool.json +1 -0
  13. package/corpus/cards/card-reject-stray-key.json +1 -0
  14. package/corpus/cards/card-reject-unknown-prop-type.json +1 -0
  15. package/corpus/lenient/lenient-1126-clipboard-literal-envelope.expected.json +1 -0
  16. package/corpus/lenient/lenient-1126-clipboard-literal-envelope.json +1 -0
  17. package/corpus/lenient/lenient-image-caption-envelope.expected.json +1 -0
  18. package/corpus/lenient/lenient-image-caption-envelope.json +1 -0
  19. package/corpus/lenient/lenient-image-empty-srcset.expected.json +1 -0
  20. package/corpus/lenient/lenient-image-empty-srcset.json +1 -0
  21. package/corpus/lenient/lenient-image-explicit-defaults.expected.json +1 -0
  22. package/corpus/lenient/lenient-image-explicit-defaults.json +1 -0
  23. package/corpus/lenient/lenient-image-explicit-expandable-false.expected.json +1 -0
  24. package/corpus/lenient/lenient-image-explicit-expandable-false.json +1 -0
  25. package/corpus/lenient/lenient-shape-a11y-label-bare-scalar.expected.json +1 -0
  26. package/corpus/lenient/lenient-shape-a11y-label-bare-scalar.json +1 -0
  27. package/corpus/manifest.json +1586 -85
  28. package/corpus/nodes/a11y-alert-assertive.json +1 -0
  29. package/corpus/nodes/a11y-button-named.json +1 -0
  30. package/corpus/nodes/a11y-image-decorative.json +1 -0
  31. package/corpus/nodes/a11y-link-labelled.json +1 -0
  32. package/corpus/nodes/a11y-wrapper-all-slots.json +1 -0
  33. package/corpus/nodes/a11y-wrapper-state-bound.json +1 -0
  34. package/corpus/nodes/box-break-before-1.json +1 -0
  35. package/corpus/nodes/box-keep-together-1.json +1 -0
  36. package/corpus/nodes/btn-copy-bound.json +1 -0
  37. package/corpus/nodes/button-print.json +1 -0
  38. package/corpus/nodes/drawing-nonfinite-sentinels.json +1 -0
  39. package/corpus/nodes/embed-1.json +1 -0
  40. package/corpus/nodes/embed-aspect-1.json +1 -0
  41. package/corpus/nodes/embed-permissions-1.json +1 -0
  42. package/corpus/nodes/filters-rating-colour.json +1 -0
  43. package/corpus/nodes/filters-tokens.json +1 -0
  44. package/corpus/nodes/form-color.json +1 -0
  45. package/corpus/nodes/form-combobox-freetext.json +1 -0
  46. package/corpus/nodes/form-combobox-query.json +1 -0
  47. package/corpus/nodes/form-combobox-static.json +1 -0
  48. package/corpus/nodes/form-field-rules.json +1 -0
  49. package/corpus/nodes/form-rating-halves.json +1 -0
  50. package/corpus/nodes/form-rating.json +1 -0
  51. package/corpus/nodes/form-tokens-freetext.json +1 -0
  52. package/corpus/nodes/form-tokens-query.json +1 -0
  53. package/corpus/nodes/form-tokens-suggested.json +1 -0
  54. package/corpus/nodes/frag-stdlib-confirm-action-pair-ref.json +1 -0
  55. package/corpus/nodes/frag-stdlib-confirm-action-pair.json +1 -0
  56. package/corpus/nodes/frag-stdlib-empty-state-panel-ref.json +1 -0
  57. package/corpus/nodes/frag-stdlib-empty-state-panel.json +1 -0
  58. package/corpus/nodes/frag-stdlib-filter-bar-ref.json +1 -0
  59. package/corpus/nodes/frag-stdlib-filter-bar.json +1 -0
  60. package/corpus/nodes/frag-stdlib-kpi-strip-ref.json +1 -0
  61. package/corpus/nodes/frag-stdlib-kpi-strip.json +1 -0
  62. package/corpus/nodes/frag-stdlib-labelled-metric-row-ref.json +1 -0
  63. package/corpus/nodes/frag-stdlib-labelled-metric-row.json +1 -0
  64. package/corpus/nodes/frag-stdlib-loading-placeholder-ref.json +1 -0
  65. package/corpus/nodes/frag-stdlib-loading-placeholder.json +1 -0
  66. package/corpus/nodes/frag-stdlib-metric-card-ref.json +1 -0
  67. package/corpus/nodes/frag-stdlib-metric-card.json +1 -0
  68. package/corpus/nodes/frag-stdlib-section-header-ref.json +1 -0
  69. package/corpus/nodes/frag-stdlib-section-header.json +1 -0
  70. package/corpus/nodes/grid-exportable-1.json +1 -0
  71. package/corpus/nodes/grid-keep-rows-together-1.json +1 -0
  72. package/corpus/nodes/grid-repeat-header-1.json +1 -0
  73. package/corpus/nodes/image-caption-1.json +1 -0
  74. package/corpus/nodes/image-caption-i18n-1.json +1 -0
  75. package/corpus/nodes/image-expandable-1.json +1 -0
  76. package/corpus/nodes/image-expandable-figure-1.json +1 -0
  77. package/corpus/nodes/image-presentation-1.json +1 -0
  78. package/corpus/nodes/image-srcset-1.json +1 -0
  79. package/corpus/nodes/limit-node-depth-at-max.json +1 -0
  80. package/corpus/nodes/limit-tree-item-depth-at-max.json +1 -0
  81. package/corpus/nodes/masonry-1.json +1 -0
  82. package/corpus/nodes/masonry-gap.json +1 -0
  83. package/corpus/nodes/media-audio-1.json +1 -0
  84. package/corpus/nodes/media-audio-transcript-1.json +1 -0
  85. package/corpus/nodes/media-video-1.json +1 -0
  86. package/corpus/nodes/media-video-autoplay-1.json +1 -0
  87. package/corpus/nodes/media-video-captions-1.json +1 -0
  88. package/corpus/nodes/media-video-poster-1.json +1 -0
  89. package/corpus/nodes/media-video-tracks-2.json +1 -0
  90. package/corpus/nodes/metric-inverted-polarity.json +1 -0
  91. package/corpus/nodes/metric-nonfinite-sentinel.json +1 -0
  92. package/corpus/nodes/multiselect-chip-list-param.json +1 -0
  93. package/corpus/nodes/popover-anchored-1.json +1 -0
  94. package/corpus/nodes/popover-open-1.json +1 -0
  95. package/corpus/nodes/shared-source-seeded-pair.json +1 -0
  96. package/corpus/nodes/spark-nonfinite-sentinel.json +1 -0
  97. package/corpus/nodes/style-direction-isolated-1.json +1 -0
  98. package/corpus/nodes/style-direction-ltr-1.json +1 -0
  99. package/corpus/nodes/switch-carousel-1.json +1 -0
  100. package/corpus/nodes/tooltip-button-1.json +1 -0
  101. package/corpus/nodes/tooltip-icon-button-1.json +1 -0
  102. package/corpus/nodes/tooltip-metric-1.json +1 -0
  103. package/corpus/nodes/transfer-board.json +1 -0
  104. package/corpus/nodes/tree-1.json +1 -0
  105. package/corpus/nodes/tree-expanded-1.json +1 -0
  106. package/corpus/nodes/tree-selection-1.json +1 -0
  107. package/corpus/nodes/upload-capture-camera-1.json +1 -0
  108. package/corpus/nodes/upload-capture-microphone-1.json +1 -0
  109. package/corpus/nodes/upload-destination-1.json +1 -0
  110. package/corpus/nodes/upload-drop-1.json +1 -0
  111. package/corpus/nodes/upload-paste-1.json +1 -0
  112. package/corpus/ops/op-updatestyle (phase 1472 direction=ltr, the only style member).json +1 -0
  113. package/corpus/reject/reject-a11y-hidden-nonbool.json +1 -0
  114. package/corpus/reject/reject-a11y-labelledby-nonstring.json +1 -0
  115. package/corpus/reject/reject-a11y-liveregion-nonstring.json +1 -0
  116. package/corpus/reject/reject-a11y-liveregion-unknown.json +1 -0
  117. package/corpus/reject/reject-a11y-not-object.json +1 -0
  118. package/corpus/reject/reject-a11y-role-nonstring.json +1 -0
  119. package/corpus/reject/reject-action-print-with-payload.json +1 -0
  120. package/corpus/reject/reject-binding-float-bool.json +1 -0
  121. package/corpus/reject/reject-binding-float-sentinel-case.json +1 -0
  122. package/corpus/reject/reject-binding-float-string.json +1 -0
  123. package/corpus/reject/reject-binding-int-bool.json +1 -0
  124. package/corpus/reject/reject-binding-int-sentinel-string.json +1 -0
  125. package/corpus/reject/reject-box-masonry-nonpositive-cols.json +1 -0
  126. package/corpus/reject/reject-color-value-not-hex.json +1 -0
  127. package/corpus/reject/reject-combobox-allowfreetext-nonbool.json +1 -0
  128. package/corpus/reject/reject-embed-missing-title.json +1 -0
  129. package/corpus/reject/reject-embed-permission-nonstring.json +1 -0
  130. package/corpus/reject/reject-embed-unknown-permission.json +1 -0
  131. package/corpus/reject/reject-fieldrule-empty.json +1 -0
  132. package/corpus/reject/reject-fieldrule-length-unordered.json +1 -0
  133. package/corpus/reject/reject-formfield-near-miss-validation.json +1 -0
  134. package/corpus/reject/reject-image-expandable-nonbool.json +1 -0
  135. package/corpus/reject/reject-image-srcset-nonpositive-width.json +1 -0
  136. package/corpus/reject/reject-image-srcset-null.json +1 -0
  137. package/corpus/reject/reject-limit-json-depth-at-max.json +1 -0
  138. package/corpus/reject/reject-limit-json-depth.json +1 -0
  139. package/corpus/reject/reject-limit-node-depth.json +1 -0
  140. package/corpus/reject/reject-limit-op-depth.json +1 -0
  141. package/corpus/reject/reject-limit-tree-item-depth.json +1 -0
  142. package/corpus/reject/reject-media-autoplay-nonbool.json +1 -0
  143. package/corpus/reject/reject-media-missing-label.json +1 -0
  144. package/corpus/reject/reject-media-track-default-nonbool.json +1 -0
  145. package/corpus/reject/reject-media-track-missing-srclang.json +1 -0
  146. package/corpus/reject/reject-modal-modality-nonstring.json +1 -0
  147. package/corpus/reject/reject-modal-modality-unknown.json +1 -0
  148. package/corpus/reject/reject-nearmiss-a11y-aria-hidden.json +1 -0
  149. package/corpus/reject/reject-nearmiss-a11y-arialabel.json +1 -0
  150. package/corpus/reject/reject-nearmiss-a11y-live.json +1 -0
  151. package/corpus/reject/reject-nearmiss-a11y-liveregion-case.json +1 -0
  152. package/corpus/reject/reject-op-insertchild-empty-childid.json +1 -1
  153. package/corpus/reject/reject-op-insertchild-missing-parentid.json +1 -1
  154. package/corpus/reject/reject-op-insertchild-retired-position.json +1 -0
  155. package/corpus/reject/reject-op-movenode-retired-newposition.json +1 -0
  156. package/corpus/reject/reject-op-updatestyle-direction-nonstring.json +1 -0
  157. package/corpus/reject/reject-op-updatestyle-direction-unknown.json +1 -0
  158. package/corpus/reject/reject-rating-max-zero.json +1 -0
  159. package/corpus/reject/reject-style-direction-nonstring.json +1 -0
  160. package/corpus/reject/reject-style-direction-unknown.json +1 -0
  161. package/corpus/reject/reject-switch-autoadvance-fractional.json +1 -0
  162. package/corpus/reject/reject-switch-autoadvance-negative.json +1 -0
  163. package/corpus/reject/reject-switch-autoadvance-zero.json +1 -0
  164. package/corpus/reject/reject-tokens-closed-without-suggestions.json +1 -0
  165. package/corpus/reject/reject-tokens-value-not-list.json +1 -0
  166. package/corpus/reject/reject-tooltip-nonstring.json +1 -0
  167. package/corpus/reject/reject-tree-item-missing-id.json +1 -0
  168. package/corpus/reject/reject-tree-item-missing-label.json +1 -0
  169. package/corpus/reject/reject-tree-nested-item-missing-id.json +1 -0
  170. package/corpus/reject/reject-unknown-capture-source.json +1 -0
  171. package/corpus/reject/reject-unknown-image-aspect.json +1 -0
  172. package/corpus/reject/reject-unknown-media-kind.json +1 -0
  173. package/corpus/reject/reject-unknown-trend-polarity.json +1 -0
  174. package/corpus/reject/reject-upload-acceptpaste-nonbool.json +1 -0
  175. package/corpus/reject/reject-upload-destination-empty.json +1 -0
  176. package/corpus/reject/reject-upload-droptarget-nonbool.json +1 -0
  177. package/corpus/reject/reject-wrongtype-box-break-before.json +1 -0
  178. package/corpus/reject/reject-wrongtype-box-keep-together.json +1 -0
  179. package/corpus/reject/reject-wrongtype-clipboard-payload.json +1 -0
  180. package/corpus/reject/reject-wrongtype-grid-exportable-number.json +1 -0
  181. package/corpus/reject/reject-wrongtype-grid-exportable.json +1 -0
  182. package/corpus/reject/reject-wrongtype-grid-keep-rows-together.json +1 -0
  183. package/corpus/reject/reject-wrongtype-grid-repeat-header.json +1 -0
  184. package/corpus/reject/reject-wrongtype-grid-transfer-in-key.json +1 -0
  185. package/corpus/reject/reject-wrongtype-grid-transfer-out-key.json +1 -0
  186. package/corpus/schema.json +3897 -207
  187. package/dist/cli.js +95 -1
  188. package/dist/cli.js.map +1 -1
  189. package/dist/index.cjs +95 -1
  190. package/dist/index.cjs.map +1 -1
  191. package/dist/index.d.cts +18 -3
  192. package/dist/index.d.ts +18 -3
  193. package/dist/index.js +95 -1
  194. package/dist/index.js.map +1 -1
  195. package/package.json +3 -3
  196. package/corpus/reject/reject-transform-source-empty-wrapper.json +0 -1
@@ -0,0 +1 @@
1
+ {"id":"m","kind":{"$type":"Media","kind":{"$type":"Video"},"label":"Studio walkthrough","src":{"$type":"Static","value":"/walkthrough.mp4"},"tracks":[{"kind":"Captions","label":"English captions","src":{"$type":"Static","value":"/walkthrough.en.vtt"}}]}}
@@ -0,0 +1 @@
1
+ {"id":"m","kind":{"$type":"Modal","children":[],"dismissable":true,"modality":3,"open":{"$type":"Static","value":false}}}
@@ -0,0 +1 @@
1
+ {"id":"m","kind":{"$type":"Modal","children":[],"dismissable":true,"modality":"Sheet","open":{"$type":"Static","value":false}}}
@@ -0,0 +1 @@
1
+ {"id":"n1","kind":{"$type":"Markdown","text":{"$type":"Literal","text":"x"}},"accessibility":{"aria-hidden":true}}
@@ -0,0 +1 @@
1
+ {"id":"n1","kind":{"$type":"Markdown","text":{"$type":"Literal","text":"x"}},"accessibility":{"ariaLabel":"Notifications"}}
@@ -0,0 +1 @@
1
+ {"id":"n1","kind":{"$type":"Markdown","text":{"$type":"Literal","text":"x"}},"accessibility":{"live":"polite"}}
@@ -0,0 +1 @@
1
+ {"id":"n1","kind":{"$type":"Markdown","text":{"$type":"Literal","text":"x"}},"accessibility":{"liveregion":"assertive"}}
@@ -1 +1 @@
1
- {"$type":"InsertChild","parentId":"x","position":0,"child":{"id":"","kind":{"$type":"Markdown","text":{"$type":"Literal","text":"x"}},"state":{},"style":{"emphasis":"Normal","tone":"Default","weight":"Standard"}}}
1
+ {"$type":"InsertChild","parentId":"x","child":{"id":"","kind":{"$type":"Markdown","text":{"$type":"Literal","text":"x"}},"state":{},"style":{"emphasis":"Normal","tone":"Default","weight":"Standard"}}}
@@ -1 +1 @@
1
- {"$type":"InsertChild","position":0,"child":{"id":"new","kind":{"$type":"Markdown","text":{"$type":"Literal","text":"x"}},"state":{},"style":{"emphasis":"Normal","tone":"Default","weight":"Standard"}}}
1
+ {"$type":"InsertChild","child":{"id":"new","kind":{"$type":"Markdown","text":{"$type":"Literal","text":"x"}},"state":{},"style":{"emphasis":"Normal","tone":"Default","weight":"Standard"}}}
@@ -0,0 +1 @@
1
+ {"$type":"InsertChild","parentId":"x","position":0,"child":{"id":"new","kind":{"$type":"Markdown","text":{"$type":"Literal","text":"x"}},"state":{},"style":{"emphasis":"Normal","tone":"Default","weight":"Standard"}}}
@@ -0,0 +1 @@
1
+ {"$type":"MoveNode","newParentId":"q","newPosition":2,"target":"n"}
@@ -0,0 +1 @@
1
+ {"$type":"UpdateStyle","target":"n1","style":{"direction":true}}
@@ -0,0 +1 @@
1
+ {"$type":"UpdateStyle","target":"n1","style":{"direction":"rtl-isolate"}}
@@ -0,0 +1 @@
1
+ {"id":"f","kind":{"$type":"Form","fields":[{"id":"score","kind":{"$type":"Rating","max":0},"label":"Score","required":false}],"onSubmit":"<closure>","submitLabel":"Save"}}
@@ -0,0 +1 @@
1
+ {"id":"n1","kind":{"$type":"Markdown","text":{"$type":"Literal","text":"x"}},"style":{"direction":1}}
@@ -0,0 +1 @@
1
+ {"id":"n1","kind":{"$type":"Markdown","text":{"$type":"Literal","text":"x"}},"style":{"direction":"LTR"}}
@@ -0,0 +1 @@
1
+ {"id":"x","kind":{"$type":"Switch","autoAdvanceMs":1500.5,"cases":[],"default":{"id":"d","kind":{"$type":"Markdown","text":{"$type":"Literal","text":"d"}}},"stateKey":"slide"}}
@@ -0,0 +1 @@
1
+ {"id":"x","kind":{"$type":"Switch","autoAdvanceMs":-1000,"cases":[],"default":{"id":"d","kind":{"$type":"Markdown","text":{"$type":"Literal","text":"d"}}},"stateKey":"slide"}}
@@ -0,0 +1 @@
1
+ {"id":"x","kind":{"$type":"Switch","autoAdvanceMs":0,"cases":[],"default":{"id":"d","kind":{"$type":"Markdown","text":{"$type":"Literal","text":"d"}}},"stateKey":"slide"}}
@@ -0,0 +1 @@
1
+ {"id":"f","kind":{"$type":"Form","fields":[{"id":"labels","kind":{"$type":"Tokens","allowFreeText":false},"label":"Labels","required":false}],"onSubmit":"<closure>","submitLabel":"Save"}}
@@ -0,0 +1 @@
1
+ {"id":"f","kind":{"$type":"Form","fields":[{"id":"labels","kind":{"$type":"Tokens","value":{"$type":"Static","value":"urgent"}},"label":"Labels","required":false}],"onSubmit":"<closure>","submitLabel":"Save"}}
@@ -0,0 +1 @@
1
+ {"id":"t","kind":{"$type":"Markdown","text":"Body"},"tooltip":42}
@@ -0,0 +1 @@
1
+ {"id":"t","kind":{"$type":"Tree","items":[{"label":"Goods"}]}}
@@ -0,0 +1 @@
1
+ {"id":"t","kind":{"$type":"Tree","items":[{"id":"a"}]}}
@@ -0,0 +1 @@
1
+ {"id":"t","kind":{"$type":"Tree","items":[{"children":[{"label":"Cocoa"}],"id":"goods","label":"Goods"}]}}
@@ -0,0 +1 @@
1
+ {"id":"up","kind":{"$type":"FileUpload","accept":["image/*"],"capture":"Screen","label":"Capture","multiple":false,"onSelect":"<closure>"}}
@@ -0,0 +1 @@
1
+ {"id":"i","kind":{"$type":"Image","alt":{"$type":"Literal","text":"Hero"},"aspectRatio":"16/9","src":{"$type":"Static","value":"/hero.jpg"},"variant":"Default"}}
@@ -0,0 +1 @@
1
+ {"id":"m","kind":{"$type":"Media","kind":{"$type":"Stream"},"label":"Live feed","src":{"$type":"Static","value":"/live.m3u8"}}}
@@ -0,0 +1 @@
1
+ {"id":"m","kind":{"$type":"Metric","label":"Avg wait","trend":{"$type":"Static","value":-0.0734},"trendPolarity":"Neutral","value":{"$type":"Static","value":80}}}
@@ -0,0 +1 @@
1
+ {"id":"up","kind":{"$type":"FileUpload","accept":["image/*"],"acceptPaste":1,"label":"Upload","multiple":false,"onSelect":"<closure>"}}
@@ -0,0 +1 @@
1
+ {"id":"up","kind":{"$type":"FileUpload","accept":["video/*"],"destination":"","label":"Upload","multiple":true,"onSelect":"<closure>"}}
@@ -0,0 +1 @@
1
+ {"id":"up","kind":{"$type":"FileUpload","accept":[".csv"],"dropTarget":"true","label":"Upload","multiple":false,"onSelect":"<closure>"}}
@@ -0,0 +1 @@
1
+ {"id":"x","kind":{"$type":"Box","breakBefore":1,"children":[],"layout":{"$type":"Auto"},"role":"Group"},"state":{},"style":{"emphasis":"Normal","tone":"Default","weight":"Standard"}}
@@ -0,0 +1 @@
1
+ {"id":"x","kind":{"$type":"Box","children":[],"keepTogether":"true","layout":{"$type":"Auto"},"role":"Group"},"state":{},"style":{"emphasis":"Normal","tone":"Default","weight":"Standard"}}
@@ -0,0 +1 @@
1
+ {"id":"x","kind":{"$type":"Button","label":"Copy","onClick":{"$type":"WriteToClipboard","text":42},"variant":"Primary"}}
@@ -0,0 +1 @@
1
+ {"id":"x","kind":{"$type":"DataGrid","columns":[],"exportable":1,"source":{"$type":"Static","value":[]}},"state":{},"style":{"emphasis":"Normal","tone":"Default","weight":"Standard"}}
@@ -0,0 +1 @@
1
+ {"id":"x","kind":{"$type":"DataGrid","columns":[],"exportable":"true","source":{"$type":"Static","value":[]}},"state":{},"style":{"emphasis":"Normal","tone":"Default","weight":"Standard"}}
@@ -0,0 +1 @@
1
+ {"id":"x","kind":{"$type":"DataGrid","columns":[],"keepRowsTogether":"yes","source":{"$type":"Static","value":[]}},"state":{},"style":{"emphasis":"Normal","tone":"Default","weight":"Standard"}}
@@ -0,0 +1 @@
1
+ {"id":"x","kind":{"$type":"DataGrid","columns":[],"repeatHeader":{},"source":{"$type":"Static","value":[]}},"state":{},"style":{"emphasis":"Normal","tone":"Default","weight":"Standard"}}
@@ -0,0 +1 @@
1
+ {"id":"x","kind":{"$type":"DataGrid","columns":[{"field":"card","format":{"$type":"None"},"kind":{"$type":"Text"},"label":"Card","width":{"$type":"Auto"}}],"rowKeyField":"card","source":{"$type":"State","key":"todo"},"transferInKey":2}}
@@ -0,0 +1 @@
1
+ {"id":"x","kind":{"$type":"DataGrid","columns":[{"field":"card","format":{"$type":"None"},"kind":{"$type":"Text"},"label":"Card","width":{"$type":"Auto"}}],"rowKeyField":"card","source":{"$type":"State","key":"todo"},"transferOutKey":true}}