Skip to content

Commit 2f8f50d

Browse files
Chris MarinoPromtp One User
authored andcommitted
Update to address PR issues:
Apply Google TypeScript Style Guide conformance fixes to chart.ts: - Replace #private fields with TypeScript private keyword - Convert double-quoted strings to single quotes - Use proper DatalabelsContext type instead of any - Replace unsafe double type assertion with a type guard Address PR review suggestions: - Refactor resolveChartData into focused helpers (resolveDataFromPath, normalizeMapToArray, fieldFrom, transformDataItems) - Make chart palette themable via --chart-color-N CSS custom properties - Add _to_value_map() helper in gallery_examples.py to replace verbose hand-written A2UI valueMap structures with readable plain dicts - Shorten DEMO_ITEMS descriptions to match existing terse style - Run pyink to fix Python formatting
1 parent 7a8aa97 commit 2f8f50d

2 files changed

Lines changed: 147 additions & 308 deletions

File tree

samples/agent/adk/component_gallery/gallery_examples.py

Lines changed: 78 additions & 263 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,31 @@
33
import 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+
631
def 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

Comments
 (0)