33import json
44
55
6+ def _to_value_map (items : list [dict ]) -> list [dict ]:
7+ """Converts a list of plain dicts into indexed A2UI valueMap entries.
8+
9+ Each dict's values are mapped to the appropriate A2UI type
10+ (valueString, valueNumber, valueBoolean). Lists of dicts are
11+ recursively converted to nested valueMaps.
12+ """
13+ result = []
14+ for i , item in enumerate (items ):
15+ entries = []
16+ for k , v in item .items ():
17+ if isinstance (v , str ):
18+ entries .append ({"key" : k , "valueString" : v })
19+ elif isinstance (v , bool ):
20+ entries .append ({"key" : k , "valueBoolean" : v })
21+ elif isinstance (v , (int , float )):
22+ entries .append ({"key" : k , "valueNumber" : v })
23+ elif isinstance (v , list ):
24+ entries .append ({"key" : k , "valueMap" : _to_value_map (v )})
25+ else :
26+ entries .append ({"key" : k , "valueString" : str (v )})
27+ result .append ({"key" : str (i ), "valueMap" : entries })
28+ return result
29+
30+
631def get_gallery_json () -> str :
732 """Returns the JSON structure for the Component Gallery surfaces."""
833
@@ -26,294 +51,84 @@ def get_gallery_json() -> str:
2651 # Chart demo data
2752 {
2853 "key" : "pieChartData" ,
29- "valueMap" : [
30- {
31- "key" : "0" ,
32- "valueMap" : [
33- {"key" : "label" , "valueString" : "Apparel" },
34- {"key" : "value" , "valueNumber" : 41 },
35- {
36- "key" : "drillDown" ,
37- "valueMap" : [
38- {
39- "key" : "0" ,
40- "valueMap" : [
41- {"key" : "label" , "valueString" : "Tops" },
42- {"key" : "value" , "valueNumber" : 31 },
43- ],
44- },
45- {
46- "key" : "1" ,
47- "valueMap" : [
48- {"key" : "label" , "valueString" : "Bottoms" },
49- {"key" : "value" , "valueNumber" : 38 },
50- ],
51- },
52- {
53- "key" : "2" ,
54- "valueMap" : [
55- {"key" : "label" , "valueString" : "Outerwear" },
56- {"key" : "value" , "valueNumber" : 20 },
57- ],
58- },
59- {
60- "key" : "3" ,
61- "valueMap" : [
62- {"key" : "label" , "valueString" : "Footwear" },
63- {"key" : "value" , "valueNumber" : 11 },
64- ],
65- },
66- ],
67- },
68- ],
69- },
70- {
71- "key" : "1" ,
72- "valueMap" : [
73- {"key" : "label" , "valueString" : "Electronics" },
74- {"key" : "value" , "valueNumber" : 28 },
75- {
76- "key" : "drillDown" ,
77- "valueMap" : [
78- {
79- "key" : "0" ,
80- "valueMap" : [
81- {"key" : "label" , "valueString" : "Phones" },
82- {"key" : "value" , "valueNumber" : 25 },
83- ],
84- },
85- {
86- "key" : "1" ,
87- "valueMap" : [
88- {"key" : "label" , "valueString" : "Laptops" },
89- {"key" : "value" , "valueNumber" : 27 },
90- ],
91- },
92- {
93- "key" : "2" ,
94- "valueMap" : [
95- {"key" : "label" , "valueString" : "TVs" },
96- {"key" : "value" , "valueNumber" : 21 },
97- ],
98- },
99- ],
100- },
101- ],
102- },
54+ "valueMap" : _to_value_map ([
10355 {
104- "key" : "2" ,
105- "valueMap" : [
106- {"key" : "label" , "valueString" : "Home Goods" },
107- {"key" : "value" , "valueNumber" : 15 },
108- {
109- "key" : "drillDown" ,
110- "valueMap" : [
111- {
112- "key" : "0" ,
113- "valueMap" : [
114- {"key" : "label" , "valueString" : "Furniture" },
115- {"key" : "value" , "valueNumber" : 8 },
116- ],
117- },
118- {
119- "key" : "1" ,
120- "valueMap" : [
121- {"key" : "label" , "valueString" : "Kitchen" },
122- {"key" : "value" , "valueNumber" : 16 },
123- ],
124- },
125- {
126- "key" : "2" ,
127- "valueMap" : [
128- {"key" : "label" , "valueString" : "Decor" },
129- {"key" : "value" , "valueNumber" : 3 },
130- ],
131- },
132- ],
133- },
56+ "label" : "Apparel" ,
57+ "value" : 41 ,
58+ "drillDown" : [
59+ {"label" : "Tops" , "value" : 31 },
60+ {"label" : "Bottoms" , "value" : 38 },
61+ {"label" : "Outerwear" , "value" : 20 },
62+ {"label" : "Footwear" , "value" : 11 },
13463 ],
13564 },
13665 {
137- "key" : "3" ,
138- "valueMap" : [
139- {"key" : "label" , "valueString" : "Health" },
140- {"key" : "value" , "valueNumber" : 10 },
66+ "label" : "Electronics" ,
67+ "value" : 28 ,
68+ "drillDown" : [
69+ {"label" : "Phones" , "value" : 25 },
70+ {"label" : "Laptops" , "value" : 27 },
71+ {"label" : "TVs" , "value" : 21 },
14172 ],
14273 },
14374 {
144- "key" : "4" ,
145- "valueMap" : [
146- {"key" : "label" , "valueString" : "Other" },
147- {"key" : "value" , "valueNumber" : 6 },
75+ "label" : "Home Goods" ,
76+ "value" : 15 ,
77+ "drillDown" : [
78+ {"label" : "Furniture" , "value" : 8 },
79+ {"label" : "Kitchen" , "value" : 16 },
80+ {"label" : "Decor" , "value" : 3 },
14881 ],
14982 },
150- ],
83+ {"label" : "Health" , "value" : 10 },
84+ {"label" : "Other" , "value" : 6 },
85+ ]),
15186 },
15287 {
15388 "key" : "barChartData" ,
154- "valueMap" : [
155- {
156- "key" : "0" ,
157- "valueMap" : [
158- {"key" : "label" , "valueString" : "Jan" },
159- {"key" : "value" , "valueNumber" : 12 },
160- ],
161- },
162- {
163- "key" : "1" ,
164- "valueMap" : [
165- {"key" : "label" , "valueString" : "Feb" },
166- {"key" : "value" , "valueNumber" : 19 },
167- ],
168- },
169- {
170- "key" : "2" ,
171- "valueMap" : [
172- {"key" : "label" , "valueString" : "Mar" },
173- {"key" : "value" , "valueNumber" : 15 },
174- ],
175- },
176- {
177- "key" : "3" ,
178- "valueMap" : [
179- {"key" : "label" , "valueString" : "Apr" },
180- {"key" : "value" , "valueNumber" : 22 },
181- ],
182- },
183- {
184- "key" : "4" ,
185- "valueMap" : [
186- {"key" : "label" , "valueString" : "May" },
187- {"key" : "value" , "valueNumber" : 30 },
188- ],
189- },
190- {
191- "key" : "5" ,
192- "valueMap" : [
193- {"key" : "label" , "valueString" : "Jun" },
194- {"key" : "value" , "valueNumber" : 28 },
195- ],
196- },
197- ],
89+ "valueMap" : _to_value_map ([
90+ {"label" : "Jan" , "value" : 12 },
91+ {"label" : "Feb" , "value" : 19 },
92+ {"label" : "Mar" , "value" : 15 },
93+ {"label" : "Apr" , "value" : 22 },
94+ {"label" : "May" , "value" : 30 },
95+ {"label" : "Jun" , "value" : 28 },
96+ ]),
19897 },
19998 # OrgChart demo data
20099 {
201100 "key" : "orgChartChain" ,
202- "valueMap" : [
203- {
204- "key" : "0" ,
205- "valueMap" : [
206- {"key" : "title" , "valueString" : "CEO" },
207- {"key" : "name" , "valueString" : "Alice Johnson" },
208- ],
209- },
210- {
211- "key" : "1" ,
212- "valueMap" : [
213- {"key" : "title" , "valueString" : "SVP Engineering" },
214- {"key" : "name" , "valueString" : "Bob Smith" },
215- ],
216- },
217- {
218- "key" : "2" ,
219- "valueMap" : [
220- {"key" : "title" , "valueString" : "VP Product" },
221- {"key" : "name" , "valueString" : "Charlie Brown" },
222- ],
223- },
224- {
225- "key" : "3" ,
226- "valueMap" : [
227- {"key" : "title" , "valueString" : "Director" },
228- {"key" : "name" , "valueString" : "Diana Prince" },
229- ],
230- },
231- {
232- "key" : "4" ,
233- "valueMap" : [
234- {"key" : "title" , "valueString" : "Software Engineer" },
235- {"key" : "name" , "valueString" : "Evan Wright" },
236- ],
237- },
238- ],
101+ "valueMap" : _to_value_map ([
102+ {"title" : "CEO" , "name" : "Alice Johnson" },
103+ {"title" : "SVP Engineering" , "name" : "Bob Smith" },
104+ {"title" : "VP Product" , "name" : "Charlie Brown" },
105+ {"title" : "Director" , "name" : "Diana Prince" },
106+ {"title" : "Software Engineer" , "name" : "Evan Wright" },
107+ ]),
239108 },
240109 {
241110 "key" : "doughnutChartData" ,
242- "valueMap" : [
243- {
244- "key" : "0" ,
245- "valueMap" : [
246- {"key" : "label" , "valueString" : "Engineering" },
247- {"key" : "value" , "valueNumber" : 45 },
248- {
249- "key" : "drillDown" ,
250- "valueMap" : [
251- {
252- "key" : "0" ,
253- "valueMap" : [
254- {"key" : "label" , "valueString" : "Frontend" },
255- {"key" : "value" , "valueNumber" : 18 },
256- ],
257- },
258- {
259- "key" : "1" ,
260- "valueMap" : [
261- {"key" : "label" , "valueString" : "Backend" },
262- {"key" : "value" , "valueNumber" : 15 },
263- ],
264- },
265- {
266- "key" : "2" ,
267- "valueMap" : [
268- {"key" : "label" , "valueString" : "Infra" },
269- {"key" : "value" , "valueNumber" : 12 },
270- ],
271- },
272- ],
273- },
274- ],
275- },
111+ "valueMap" : _to_value_map ([
276112 {
277- "key" : "1" ,
278- "valueMap" : [
279- {"key" : "label" , "valueString" : "Marketing" },
280- {"key" : "value" , "valueNumber" : 20 },
281- {
282- "key" : "drillDown" ,
283- "valueMap" : [
284- {
285- "key" : "0" ,
286- "valueMap" : [
287- {"key" : "label" , "valueString" : "Digital" },
288- {"key" : "value" , "valueNumber" : 12 },
289- ],
290- },
291- {
292- "key" : "1" ,
293- "valueMap" : [
294- {"key" : "label" , "valueString" : "Brand" },
295- {"key" : "value" , "valueNumber" : 8 },
296- ],
297- },
298- ],
299- },
113+ "label" : "Engineering" ,
114+ "value" : 45 ,
115+ "drillDown" : [
116+ {"label" : "Frontend" , "value" : 18 },
117+ {"label" : "Backend" , "value" : 15 },
118+ {"label" : "Infra" , "value" : 12 },
300119 ],
301120 },
302121 {
303- "key" : "2" ,
304- "valueMap" : [
305- {"key" : "label" , "valueString" : "Operations" },
306- {"key" : "value" , "valueNumber" : 20 },
122+ "label" : "Marketing" ,
123+ "value" : 20 ,
124+ "drillDown" : [
125+ {"label" : "Digital" , "value" : 12 },
126+ {"label" : "Brand" , "value" : 8 },
307127 ],
308128 },
309- {
310- "key" : "3" ,
311- "valueMap" : [
312- {"key" : "label" , "valueString" : "Sales" },
313- {"key" : "value" , "valueNumber" : 15 },
314- ],
315- },
316- ],
129+ {"label" : "Operations" , "value" : 20 },
130+ {"label" : "Sales" , "value" : 15 },
131+ ]),
317132 },
318133 ],
319134 }
0 commit comments