@mgamadeus/ddd-agents 0.1.0-alpha.22 → 0.1.0-alpha.24

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 (164) hide show
  1. package/README.md +3 -2
  2. package/dist/chat.js +87 -893
  3. package/dist/chat.js.map +1 -1
  4. package/dist/chunks/ConversationMessageInputComposerWidgets-BxyaFBA6.js +631 -0
  5. package/dist/chunks/ConversationMessageInputComposerWidgets-BxyaFBA6.js.map +1 -0
  6. package/dist/chunks/{WebSearchResultsConversationWidget-BvnLWHyi.js → WebSearchResultsConversationWidget-as3p5bHw.js} +147 -1125
  7. package/dist/chunks/WebSearchResultsConversationWidget-as3p5bHw.js.map +1 -0
  8. package/dist/chunks/{canvas-behaviours-BRFR1ALE.js → canvas-behaviours-AvzKSYyv.js} +4 -4
  9. package/dist/chunks/{canvas-behaviours-BRFR1ALE.js.map → canvas-behaviours-AvzKSYyv.js.map} +1 -1
  10. package/dist/chunks/canvas-reducers-Bfp_i7lc.js +88 -0
  11. package/dist/chunks/canvas-reducers-Bfp_i7lc.js.map +1 -0
  12. package/dist/chunks/{canvasBodies-9SuF6NAB.js → canvasBodies-Cvu3l38p.js} +12 -6
  13. package/dist/chunks/canvasBodies-Cvu3l38p.js.map +1 -0
  14. package/dist/chunks/canvasStorage-EvQsGdto.js +65 -0
  15. package/dist/chunks/canvasStorage-EvQsGdto.js.map +1 -0
  16. package/dist/chunks/contract-BxmMxYPF.js +96 -0
  17. package/dist/chunks/contract-BxmMxYPF.js.map +1 -0
  18. package/dist/chunks/conversation-BEF0aesf.js +31 -0
  19. package/dist/chunks/conversation-BEF0aesf.js.map +1 -0
  20. package/dist/chunks/entity-detail-name-3A82gDAp.js +15 -0
  21. package/dist/chunks/entity-detail-name-3A82gDAp.js.map +1 -0
  22. package/dist/chunks/icon-names-Di6c4zLo.js +86 -0
  23. package/dist/chunks/icon-names-Di6c4zLo.js.map +1 -0
  24. package/dist/chunks/index-7Qc_3GbG.js +1046 -0
  25. package/dist/chunks/index-7Qc_3GbG.js.map +1 -0
  26. package/dist/chunks/{ConversationMarkdown-W7NHglmL.js → widget-click-signal-sources-DulRkNvZ.js} +54 -7
  27. package/dist/chunks/widget-click-signal-sources-DulRkNvZ.js.map +1 -0
  28. package/dist/chunks/{widget-image-readiness-signal-DeOuL89j.js → widget-image-readiness-signal-D3ci53xr.js} +2 -2
  29. package/dist/chunks/{widget-image-readiness-signal-DeOuL89j.js.map → widget-image-readiness-signal-D3ci53xr.js.map} +1 -1
  30. package/dist/chunks/{widget-name-resolver-DyIY6Zu4.js → widget-name-resolver-BGN3HpoG.js} +80 -117
  31. package/dist/chunks/widget-name-resolver-BGN3HpoG.js.map +1 -0
  32. package/dist/chunks/{withPollingChangeSubscription-BLDAWF-o.js → withPollingChangeSubscription-B16htQGd.js} +2 -2
  33. package/dist/chunks/{withPollingChangeSubscription-BLDAWF-o.js.map → withPollingChangeSubscription-B16htQGd.js.map} +1 -1
  34. package/dist/client-testing.js +91 -2
  35. package/dist/client-testing.js.map +1 -1
  36. package/dist/client.js +1 -1
  37. package/dist/contract.js +8 -27
  38. package/dist/contract.js.map +1 -1
  39. package/dist/files/chat/Conversation.module.scss +268 -0
  40. package/dist/files/chat/ConversationViewBody/ConversationViewBody.module.scss +336 -0
  41. package/dist/files/chat/_conversation-tokens.scss +37 -0
  42. package/dist/files/image-render/WidgetImageRender.module.scss +22 -0
  43. package/dist/files/kit/ComposedViewConversationWidget.md +59 -0
  44. package/dist/files/kit/components/data/data.preview-fixtures.json +3298 -0
  45. package/dist/files/kit/components/embedding/widget.preview-fixtures.json +147 -0
  46. package/dist/files/kit/components/entity/entity-link.preview-fixtures.json +340 -0
  47. package/dist/files/kit/components/form/form.preview-fixtures.json +319 -0
  48. package/dist/files/kit/components/inputs/button.preview-fixtures.json +301 -0
  49. package/dist/files/kit/components/inputs/checkbox.preview-fixtures.json +35 -0
  50. package/dist/files/kit/components/inputs/date-picker.preview-fixtures.json +36 -0
  51. package/dist/files/kit/components/inputs/input.preview-fixtures.json +55 -0
  52. package/dist/files/kit/components/inputs/radio-group.preview-fixtures.json +76 -0
  53. package/dist/files/kit/components/inputs/select.preview-fixtures.json +314 -0
  54. package/dist/files/kit/components/inputs/slider.preview-fixtures.json +178 -0
  55. package/dist/files/kit/components/inputs/tabs.preview-fixtures.json +304 -0
  56. package/dist/files/kit/components/inputs/textarea.preview-fixtures.json +37 -0
  57. package/dist/files/kit/components/layout/layout.preview-fixtures.json +892 -0
  58. package/dist/files/kit/components/map/map.preview-fixtures.json +339 -0
  59. package/dist/files/kit/components/media/image-group.preview-fixtures.json +228 -0
  60. package/dist/files/kit/components/media/image.preview-fixtures.json +61 -0
  61. package/dist/files/kit/components/media/video-card/video-card.preview-fixtures.json +121 -0
  62. package/dist/files/kit/components/media/video.preview-fixtures.json +68 -0
  63. package/dist/files/kit/components/rich/code.preview-fixtures.json +105 -0
  64. package/dist/files/kit/components/rich/diagram.preview-fixtures.json +89 -0
  65. package/dist/files/kit/components/rich/math.preview-fixtures.json +152 -0
  66. package/dist/files/kit/components/rich/svg.preview-fixtures.json +243 -0
  67. package/dist/files/kit/components/text/badge.preview-fixtures.json +44 -0
  68. package/dist/files/kit/components/text/caption.preview-fixtures.json +31 -0
  69. package/dist/files/kit/components/text/favicon.preview-fixtures.json +69 -0
  70. package/dist/files/kit/components/text/label.preview-fixtures.json +48 -0
  71. package/dist/files/kit/components/text/link.preview-fixtures.json +103 -0
  72. package/dist/files/kit/components/text/markdown.preview-fixtures.json +29 -0
  73. package/dist/files/kit/components/text/source-ref.preview-fixtures.json +51 -0
  74. package/dist/files/kit/components/text/text.preview-fixtures.json +106 -0
  75. package/dist/files/kit/components/text/title.preview-fixtures.json +172 -0
  76. package/dist/files/kit/composed-view-widget-contract.json +88 -0
  77. package/dist/files/kit/composed-view.preview-fixtures.json +376 -0
  78. package/dist/files/renderer/conversation-widget-layout.module.scss +47 -0
  79. package/dist/files/renderer/widget-tree/composed-node-schema.json +3428 -0
  80. package/dist/files/styles/_conversation-widget-container.scss +6 -0
  81. package/dist/files/styles/_media.scss +50 -0
  82. package/dist/files/styles/_spacings.scss +23 -0
  83. package/dist/files/styles/_surfaces.scss +28 -0
  84. package/dist/files/widgets/ClockConversationWidget/ClockConversationWidget.md +53 -0
  85. package/dist/files/widgets/ClockConversationWidget/clock.preview-fixtures.json +76 -0
  86. package/dist/files/widgets/ConceptExplainerConversationWidget/ConceptExplainerConversationWidget.md +86 -0
  87. package/dist/files/widgets/ConceptExplainerConversationWidget/concept-explainer.preview-fixtures.json +23 -0
  88. package/dist/files/widgets/ConversationSearchResultsConversationWidget/ConversationSearchResultsConversationWidget.md +59 -0
  89. package/dist/files/widgets/ConversationSearchResultsConversationWidget/conversation-search-results.preview-fixtures.json +85 -0
  90. package/dist/files/widgets/CurrencyConverterConversationWidget/CurrencyConverterConversationWidget.md +51 -0
  91. package/dist/files/widgets/CurrencyConverterConversationWidget/currency-converter.preview-fixtures.json +73 -0
  92. package/dist/files/widgets/CustomVisualizationConversationWidget/CustomVisualizationConversationWidget.md +83 -0
  93. package/dist/files/widgets/CustomVisualizationConversationWidget/custom-visualization.preview-fixtures.json +227 -0
  94. package/dist/files/widgets/CustomVisualizationConversationWidget/sandbox-frame/custom-visualization-frame.html +188 -0
  95. package/dist/files/widgets/EntityMentionConversationWidget/EntityMentionConversationWidget.md +55 -0
  96. package/dist/files/widgets/EntityMentionConversationWidget/entity-mention.preview-fixtures.json +55 -0
  97. package/dist/files/widgets/MultiChoiceConversationWidget/MultiChoiceConversationWidget.md +61 -0
  98. package/dist/files/widgets/MultiChoiceConversationWidget/multi-choice-widget-contract.json +43 -0
  99. package/dist/files/widgets/MultiChoiceConversationWidget/multi-choice.preview-fixtures.json +103 -0
  100. package/dist/files/widgets/QuickRepliesConversationWidget/QuickRepliesConversationWidget.md +65 -0
  101. package/dist/files/widgets/QuickRepliesConversationWidget/quick-replies-widget-contract.json +43 -0
  102. package/dist/files/widgets/QuickRepliesConversationWidget/quick-replies.preview-fixtures.json +45 -0
  103. package/dist/files/widgets/SuggestedActions/SuggestedActions.md +60 -0
  104. package/dist/files/widgets/SuggestedActions/suggested-actions.preview-fixtures.json +19 -0
  105. package/dist/files/widgets/ToolTraceConversationWidget/ToolTraceConversationWidget.md +48 -0
  106. package/dist/files/widgets/ToolTraceConversationWidget/tool-trace.preview-fixtures.json +32 -0
  107. package/dist/files/widgets/WebSearchResultsConversationWidget/WebSearchResultsConversationWidget.md +49 -0
  108. package/dist/files/widgets/WebSearchResultsConversationWidget/web-search-results.preview-fixtures.json +57 -0
  109. package/dist/files/widgets/WritingDraftConversationWidget/WritingDraftConversationWidget.md +66 -0
  110. package/dist/files/widgets/WritingDraftConversationWidget/writing-draft.preview-fixtures.json +129 -0
  111. package/dist/image-render.js +11 -10
  112. package/dist/image-render.js.map +1 -1
  113. package/dist/index.js +32 -27
  114. package/dist/index.js.map +1 -1
  115. package/dist/kit.js +11 -2
  116. package/dist/kit.js.map +1 -1
  117. package/dist/preview.js +47 -18
  118. package/dist/preview.js.map +1 -1
  119. package/dist/provider.js +71 -0
  120. package/dist/provider.js.map +1 -0
  121. package/dist/renderer.js +142 -62
  122. package/dist/renderer.js.map +1 -1
  123. package/dist/styles.css +86 -38
  124. package/dist/types/client/testing/test-conversation-widgets.d.ts +25 -0
  125. package/dist/types/client/testing/widget-hydration-stand-ins.d.ts +42 -0
  126. package/dist/types/entries/chat.d.ts +12 -0
  127. package/dist/types/entries/client-testing.d.ts +4 -0
  128. package/dist/types/entries/contract.d.ts +1 -0
  129. package/dist/types/entries/index.d.ts +4 -3
  130. package/dist/types/entries/kit.d.ts +7 -0
  131. package/dist/types/entries/preview.d.ts +2 -0
  132. package/dist/types/entries/provider.d.ts +1 -0
  133. package/dist/types/entries/renderer.d.ts +19 -1
  134. package/dist/types/entries/widgets.d.ts +13 -0
  135. package/dist/types/kit/components/data/apex-chart-component.d.ts +3 -0
  136. package/dist/types/kit/components/data/chart-model.d.ts +164 -0
  137. package/dist/types/kit/components/data/data-value-format.d.ts +44 -0
  138. package/dist/types/kit/components/data/use-chart-palette.d.ts +9 -0
  139. package/dist/types/kit/components/data/use-number-locale.d.ts +5 -0
  140. package/dist/types/kit/components/map/use-google-maps-auth-failure.d.ts +18 -0
  141. package/dist/types/kit/entity-detail/entity-detail-bodies.d.ts +2 -0
  142. package/dist/types/provider/index.d.ts +1 -0
  143. package/dist/types/renderer/_access/ConversationWidgetGateSkeleton.d.ts +6 -0
  144. package/dist/types/renderer/_agent-space/use-conversation-widget-agent-space-fallback.d.ts +16 -0
  145. package/dist/types/renderer/canvas/entity-detail-instance.d.ts +5 -3
  146. package/dist/types/renderer/canvas/use-anchor-widget-agent-space-key.d.ts +17 -0
  147. package/dist/types/renderer/conversationWidgetRegistry.d.ts +6 -0
  148. package/dist/types/renderer/read-conversation-widget-variant.d.ts +22 -0
  149. package/dist/types/renderer/widget-hydration/use-widget-hydration.d.ts +5 -0
  150. package/dist/types/widgets/EntityMentionConversationWidget/stories/EntityMentionAskFlowStory.d.ts +8 -0
  151. package/dist/types/widgets/_shared/CardFooter.d.ts +6 -0
  152. package/dist/types/widgets/_shared/WidgetLabel.d.ts +8 -0
  153. package/dist/types/widgets/_shared/entity-update-channel.d.ts +17 -0
  154. package/dist/types/widgets/_shared/use-element-visible.d.ts +6 -0
  155. package/dist/widgets.js +120 -27
  156. package/dist/widgets.js.map +1 -1
  157. package/package.json +74 -1
  158. package/public-api.json +779 -0
  159. package/dist/chunks/ConversationMarkdown-W7NHglmL.js.map +0 -1
  160. package/dist/chunks/WebSearchResultsConversationWidget-BvnLWHyi.js.map +0 -1
  161. package/dist/chunks/canvasBodies-9SuF6NAB.js.map +0 -1
  162. package/dist/chunks/decide-canvas-open-Ct-wnNEJ.js +0 -20
  163. package/dist/chunks/decide-canvas-open-Ct-wnNEJ.js.map +0 -1
  164. package/dist/chunks/widget-name-resolver-DyIY6Zu4.js.map +0 -1
@@ -0,0 +1,3298 @@
1
+ {
2
+ "wireName": "ComposedView",
3
+ "fixtures": [
4
+ {
5
+ "name": "data-poll-bars",
6
+ "description": "ChatGPT ref 01: a poll as a table of share bars with the change since January, the caption and the source chip — Table + Repeat + TableCell bar / signed tone.",
7
+ "expectedState": "data",
8
+ "width": 720,
9
+ "payload": {
10
+ "title": "Aktuelle Sonntagsfrage",
11
+ "data": {
12
+ "parties": [
13
+ {
14
+ "party": "CSU",
15
+ "share": 36,
16
+ "shareOfMax": 0.9,
17
+ "change": -3,
18
+ "changeTone": "danger"
19
+ },
20
+ {
21
+ "party": "AfD",
22
+ "share": 21,
23
+ "shareOfMax": 0.525,
24
+ "change": 2,
25
+ "changeTone": "success"
26
+ },
27
+ {
28
+ "party": "Grüne",
29
+ "share": 15,
30
+ "shareOfMax": 0.375,
31
+ "change": 2,
32
+ "changeTone": "success"
33
+ },
34
+ {
35
+ "party": "Freie Wähler",
36
+ "share": 9,
37
+ "shareOfMax": 0.225,
38
+ "change": 0,
39
+ "changeTone": "muted"
40
+ },
41
+ {
42
+ "party": "SPD",
43
+ "share": 8,
44
+ "shareOfMax": 0.2,
45
+ "change": 0,
46
+ "changeTone": "muted"
47
+ },
48
+ {
49
+ "party": "Linke",
50
+ "share": 4,
51
+ "shareOfMax": 0.1,
52
+ "change": 1,
53
+ "changeTone": "success"
54
+ },
55
+ {
56
+ "party": "Sonstige",
57
+ "share": 7,
58
+ "shareOfMax": 0.175,
59
+ "change": -2,
60
+ "changeTone": "danger"
61
+ }
62
+ ]
63
+ },
64
+ "view": {
65
+ "type": "Table",
66
+ "caption": "Infratest dimap / BR24 BayernTrend, 20. Oktober 2026 · 1.207 Befragte. Rechts: Veränderung in Prozentpunkten seit Januar 2026.",
67
+ "source": {
68
+ "name": "www.infratest-dimap.de",
69
+ "url": "https://www.infratest-dimap.de/umfragen-analysen/bundeslaender/bayern/"
70
+ },
71
+ "children": [
72
+ {
73
+ "type": "Repeat",
74
+ "items": {
75
+ "$data": "parties"
76
+ },
77
+ "children": [
78
+ {
79
+ "type": "TableRow",
80
+ "children": [
81
+ {
82
+ "type": "TableCell",
83
+ "value": {
84
+ "$item": "party"
85
+ }
86
+ },
87
+ {
88
+ "type": "TableCell",
89
+ "value": {
90
+ "$item": "share"
91
+ },
92
+ "format": "percent",
93
+ "bar": {
94
+ "$item": "shareOfMax"
95
+ },
96
+ "align": "end"
97
+ },
98
+ {
99
+ "type": "TableCell",
100
+ "value": {
101
+ "$item": "change"
102
+ },
103
+ "signed": true,
104
+ "tone": {
105
+ "$item": "changeTone"
106
+ },
107
+ "align": "end"
108
+ }
109
+ ]
110
+ }
111
+ ]
112
+ }
113
+ ]
114
+ }
115
+ }
116
+ },
117
+ {
118
+ "name": "data-poll-bar-chart",
119
+ "description": "ChatGPT ref 01 as ONE bar chart with the change per bar: a bar per party on its track with the value, the signed change since January at the right (plus green, minus red, zero muted), the line naming what the change counts, the caption with institute, date and sample, and the source chip.",
120
+ "expectedState": "data",
121
+ "width": 720,
122
+ "payload": {
123
+ "title": "Aktuelle Sonntagsfrage",
124
+ "data": {
125
+ "parties": [
126
+ {
127
+ "party": "CSU",
128
+ "share": 36,
129
+ "shareOfMax": 0.9,
130
+ "change": -3,
131
+ "changeTone": "danger"
132
+ },
133
+ {
134
+ "party": "AfD",
135
+ "share": 21,
136
+ "shareOfMax": 0.525,
137
+ "change": 2,
138
+ "changeTone": "success"
139
+ },
140
+ {
141
+ "party": "Grüne",
142
+ "share": 15,
143
+ "shareOfMax": 0.375,
144
+ "change": 2,
145
+ "changeTone": "success"
146
+ },
147
+ {
148
+ "party": "Freie Wähler",
149
+ "share": 9,
150
+ "shareOfMax": 0.225,
151
+ "change": 0,
152
+ "changeTone": "muted"
153
+ },
154
+ {
155
+ "party": "SPD",
156
+ "share": 8,
157
+ "shareOfMax": 0.2,
158
+ "change": 0,
159
+ "changeTone": "muted"
160
+ },
161
+ {
162
+ "party": "Linke",
163
+ "share": 4,
164
+ "shareOfMax": 0.1,
165
+ "change": 1,
166
+ "changeTone": "success"
167
+ },
168
+ {
169
+ "party": "Sonstige",
170
+ "share": 7,
171
+ "shareOfMax": 0.175,
172
+ "change": -2,
173
+ "changeTone": "danger"
174
+ }
175
+ ]
176
+ },
177
+ "view": {
178
+ "type": "Chart",
179
+ "kind": "bar",
180
+ "horizontal": true,
181
+ "data": {
182
+ "$data": "parties"
183
+ },
184
+ "x": "party",
185
+ "series": [
186
+ {
187
+ "field": "share",
188
+ "label": "Anteil"
189
+ }
190
+ ],
191
+ "valueFormat": "percent",
192
+ "caption": "Infratest dimap / BR24 BayernTrend, 20. Oktober 2026 · 1.207 Befragte",
193
+ "source": {
194
+ "name": "www.infratest-dimap.de",
195
+ "url": "https://www.infratest-dimap.de/umfragen-analysen/bundeslaender/bayern/"
196
+ },
197
+ "deltaField": "change",
198
+ "deltaUnit": "pp",
199
+ "deltaLabel": "Rechts: Veränderung in Prozentpunkten seit Januar 2026."
200
+ }
201
+ }
202
+ },
203
+ {
204
+ "name": "data-line-chart",
205
+ "description": "ChatGPT ref 03: four parties over three polls, percent axis, legend under the plot; clicking a legend entry hides its series, hovering a point shows the tooltip.",
206
+ "expectedState": "data",
207
+ "width": 720,
208
+ "interactions": [
209
+ {
210
+ "name": "hide-afd",
211
+ "click": {
212
+ "selector": ".apexcharts-legend-series[seriesname='AfD']"
213
+ }
214
+ },
215
+ {
216
+ "name": "hover-point",
217
+ "hover": {
218
+ "selector": ".apexcharts-svg"
219
+ }
220
+ }
221
+ ],
222
+ "payload": {
223
+ "data": {
224
+ "polls": [
225
+ {
226
+ "date": "Jan. 2024",
227
+ "csu": 40,
228
+ "afd": 15,
229
+ "gruene": 13,
230
+ "fw": 13
231
+ },
232
+ {
233
+ "date": "Jan. 2026",
234
+ "csu": 39,
235
+ "afd": 19,
236
+ "gruene": 13,
237
+ "fw": 9
238
+ },
239
+ {
240
+ "date": "Okt. 2026",
241
+ "csu": 36,
242
+ "afd": 21,
243
+ "gruene": 15,
244
+ "fw": 9
245
+ }
246
+ ]
247
+ },
248
+ "view": {
249
+ "type": "Chart",
250
+ "kind": "line",
251
+ "title": "Entwicklung der wichtigsten Parteien",
252
+ "data": {
253
+ "$data": "polls"
254
+ },
255
+ "x": "date",
256
+ "series": [
257
+ {
258
+ "field": "csu",
259
+ "label": "CSU"
260
+ },
261
+ {
262
+ "field": "afd",
263
+ "label": "AfD"
264
+ },
265
+ {
266
+ "field": "gruene",
267
+ "label": "Grüne"
268
+ },
269
+ {
270
+ "field": "fw",
271
+ "label": "Freie Wähler"
272
+ }
273
+ ],
274
+ "valueFormat": "percent",
275
+ "min": 0,
276
+ "max": 45,
277
+ "caption": "Infratest dimap / BayernTREND, Januar 2024 bis Oktober 2026",
278
+ "source": {
279
+ "name": "www.infratest-dimap.de",
280
+ "url": "https://www.infratest-dimap.de/umfragen-analysen/bundeslaender/bayern/"
281
+ }
282
+ }
283
+ }
284
+ },
285
+ {
286
+ "name": "data-coalition-table",
287
+ "description": "ChatGPT ref 04: the short form — three columns, seats right-aligned, the majority as a check or a cross.",
288
+ "expectedState": "data",
289
+ "width": 720,
290
+ "payload": {
291
+ "title": "Rechnerische Koalitionsmöglichkeiten",
292
+ "data": {
293
+ "coalitions": [
294
+ {
295
+ "coalition": "CSU + Freie Wähler",
296
+ "seats": 94,
297
+ "majority": true
298
+ },
299
+ {
300
+ "coalition": "CSU + Grüne",
301
+ "seats": 104,
302
+ "majority": true
303
+ },
304
+ {
305
+ "coalition": "CSU + SPD",
306
+ "seats": 86,
307
+ "majority": false
308
+ }
309
+ ]
310
+ },
311
+ "view": {
312
+ "type": "Table",
313
+ "columns": [
314
+ {
315
+ "key": "coalition",
316
+ "label": "Koalition"
317
+ },
318
+ {
319
+ "key": "seats",
320
+ "label": "Sitze"
321
+ },
322
+ {
323
+ "key": "majority",
324
+ "label": "Mehrheit (91)"
325
+ }
326
+ ],
327
+ "rows": {
328
+ "$data": "coalitions"
329
+ },
330
+ "caption": "Auf Grundlage der GMS-Umfrage vom 19. Oktober 2026 bei modellierten 180 Sitzen.",
331
+ "source": {
332
+ "name": "GMS-Umfrage Bayern"
333
+ }
334
+ }
335
+ }
336
+ },
337
+ {
338
+ "name": "data-cohort-heatmap",
339
+ "description": "ChatGPT ref 12: a retention cohort table of heat cells, the Nutzer / Umsatz toggle (Tabs, lane L5) switching every cell; missing months show a dash.",
340
+ "expectedState": "data",
341
+ "width": 720,
342
+ "interactions": [
343
+ {
344
+ "name": "switch-to-revenue",
345
+ "click": {
346
+ "text": "Umsatz"
347
+ }
348
+ }
349
+ ],
350
+ "payload": {
351
+ "title": "Retention Analysis",
352
+ "state": {
353
+ "mode": "users"
354
+ },
355
+ "data": {
356
+ "usersRows": [
357
+ {
358
+ "cohort": "Mai",
359
+ "m0": 100,
360
+ "h0": 1.0,
361
+ "m1": 82,
362
+ "h1": 0.55,
363
+ "m2": 74,
364
+ "h2": 0.35,
365
+ "m3": 69,
366
+ "h3": 0.225,
367
+ "m4": 65,
368
+ "h4": 0.125
369
+ },
370
+ {
371
+ "cohort": "Juni",
372
+ "m0": 100,
373
+ "h0": 1.0,
374
+ "m1": 85,
375
+ "h1": 0.625,
376
+ "m2": 78,
377
+ "h2": 0.45,
378
+ "m3": 72,
379
+ "h3": 0.3,
380
+ "m4": null,
381
+ "h4": null
382
+ },
383
+ {
384
+ "cohort": "Juli",
385
+ "m0": 100,
386
+ "h0": 1.0,
387
+ "m1": 81,
388
+ "h1": 0.525,
389
+ "m2": 75,
390
+ "h2": 0.375,
391
+ "m3": null,
392
+ "h3": null,
393
+ "m4": null,
394
+ "h4": null
395
+ },
396
+ {
397
+ "cohort": "Aug.",
398
+ "m0": 100,
399
+ "h0": 1.0,
400
+ "m1": 88,
401
+ "h1": 0.7,
402
+ "m2": null,
403
+ "h2": null,
404
+ "m3": null,
405
+ "h3": null,
406
+ "m4": null,
407
+ "h4": null
408
+ }
409
+ ],
410
+ "revenueRows": [
411
+ {
412
+ "cohort": "Mai",
413
+ "m0": 100,
414
+ "h0": 1.0,
415
+ "m1": 88,
416
+ "h1": 0.7,
417
+ "m2": 81,
418
+ "h2": 0.525,
419
+ "m3": 77,
420
+ "h3": 0.425,
421
+ "m4": 74,
422
+ "h4": 0.35
423
+ },
424
+ {
425
+ "cohort": "Juni",
426
+ "m0": 100,
427
+ "h0": 1.0,
428
+ "m1": 90,
429
+ "h1": 0.75,
430
+ "m2": 84,
431
+ "h2": 0.6,
432
+ "m3": 79,
433
+ "h3": 0.475,
434
+ "m4": null,
435
+ "h4": null
436
+ },
437
+ {
438
+ "cohort": "Juli",
439
+ "m0": 100,
440
+ "h0": 1.0,
441
+ "m1": 86,
442
+ "h1": 0.65,
443
+ "m2": 80,
444
+ "h2": 0.5,
445
+ "m3": null,
446
+ "h3": null,
447
+ "m4": null,
448
+ "h4": null
449
+ },
450
+ {
451
+ "cohort": "Aug.",
452
+ "m0": 100,
453
+ "h0": 1.0,
454
+ "m1": 92,
455
+ "h1": 0.8,
456
+ "m2": null,
457
+ "h2": null,
458
+ "m3": null,
459
+ "h3": null,
460
+ "m4": null,
461
+ "h4": null
462
+ }
463
+ ]
464
+ },
465
+ "computed": {
466
+ "cohortRows": "mode == \"users\" ? usersRows : revenueRows"
467
+ },
468
+ "view": {
469
+ "type": "Surface",
470
+ "subtitle": "Kohorten 2026 · Beispieldaten",
471
+ "slots": {
472
+ "header": [
473
+ {
474
+ "type": "Tabs",
475
+ "options": [
476
+ {
477
+ "id": "users",
478
+ "label": "Nutzer"
479
+ },
480
+ {
481
+ "id": "revenue",
482
+ "label": "Umsatz"
483
+ }
484
+ ],
485
+ "value": {
486
+ "$state": "mode"
487
+ },
488
+ "onChange": {
489
+ "set": "mode"
490
+ }
491
+ }
492
+ ]
493
+ },
494
+ "children": [
495
+ {
496
+ "type": "Table",
497
+ "caption": "Niedrig → Hoch: je dunkler, desto höher die Bindung.",
498
+ "children": [
499
+ {
500
+ "type": "TableRow",
501
+ "header": true,
502
+ "children": [
503
+ {
504
+ "type": "TableCell",
505
+ "value": ""
506
+ },
507
+ {
508
+ "type": "TableCell",
509
+ "value": "M0",
510
+ "align": "center"
511
+ },
512
+ {
513
+ "type": "TableCell",
514
+ "value": "M1",
515
+ "align": "center"
516
+ },
517
+ {
518
+ "type": "TableCell",
519
+ "value": "M2",
520
+ "align": "center"
521
+ },
522
+ {
523
+ "type": "TableCell",
524
+ "value": "M3",
525
+ "align": "center"
526
+ },
527
+ {
528
+ "type": "TableCell",
529
+ "value": "M4",
530
+ "align": "center"
531
+ }
532
+ ]
533
+ },
534
+ {
535
+ "type": "Repeat",
536
+ "items": {
537
+ "$computed": "cohortRows"
538
+ },
539
+ "children": [
540
+ {
541
+ "type": "TableRow",
542
+ "children": [
543
+ {
544
+ "type": "TableCell",
545
+ "value": {
546
+ "$item": "cohort"
547
+ }
548
+ },
549
+ {
550
+ "type": "TableCell",
551
+ "value": {
552
+ "$item": "m0"
553
+ },
554
+ "format": "percent",
555
+ "heat": {
556
+ "$item": "h0"
557
+ },
558
+ "align": "center"
559
+ },
560
+ {
561
+ "type": "TableCell",
562
+ "value": {
563
+ "$item": "m1"
564
+ },
565
+ "format": "percent",
566
+ "heat": {
567
+ "$item": "h1"
568
+ },
569
+ "align": "center"
570
+ },
571
+ {
572
+ "type": "TableCell",
573
+ "value": {
574
+ "$item": "m2"
575
+ },
576
+ "format": "percent",
577
+ "heat": {
578
+ "$item": "h2"
579
+ },
580
+ "align": "center"
581
+ },
582
+ {
583
+ "type": "TableCell",
584
+ "value": {
585
+ "$item": "m3"
586
+ },
587
+ "format": "percent",
588
+ "heat": {
589
+ "$item": "h3"
590
+ },
591
+ "align": "center"
592
+ },
593
+ {
594
+ "type": "TableCell",
595
+ "value": {
596
+ "$item": "m4"
597
+ },
598
+ "format": "percent",
599
+ "heat": {
600
+ "$item": "h4"
601
+ },
602
+ "align": "center"
603
+ }
604
+ ]
605
+ }
606
+ ]
607
+ }
608
+ ]
609
+ }
610
+ ]
611
+ }
612
+ }
613
+ },
614
+ {
615
+ "name": "data-mrr-simulator",
616
+ "description": "ChatGPT ref 16: Bear / Base / Bull tabs, two KPI tiles, the MRR line chart and the start-customers slider on one state; the copy button copies the scenario.",
617
+ "expectedState": "data",
618
+ "width": 720,
619
+ "interactions": [
620
+ {
621
+ "name": "scenario-bull",
622
+ "click": {
623
+ "text": "Bull"
624
+ }
625
+ },
626
+ {
627
+ "name": "scenario-bear",
628
+ "click": {
629
+ "text": "Bear"
630
+ }
631
+ }
632
+ ],
633
+ "payload": {
634
+ "title": "MRR Growth Simulator",
635
+ "state": {
636
+ "scenario": "base",
637
+ "customers": 800
638
+ },
639
+ "data": {
640
+ "months": [
641
+ {
642
+ "month": "M1",
643
+ "bear": 1.0,
644
+ "base": 1.0,
645
+ "bull": 1.0
646
+ },
647
+ {
648
+ "month": "M2",
649
+ "bear": 1.02,
650
+ "base": 1.055,
651
+ "bull": 1.09
652
+ },
653
+ {
654
+ "month": "M3",
655
+ "bear": 1.0404,
656
+ "base": 1.113,
657
+ "bull": 1.1881
658
+ },
659
+ {
660
+ "month": "M4",
661
+ "bear": 1.0612,
662
+ "base": 1.1742,
663
+ "bull": 1.295
664
+ },
665
+ {
666
+ "month": "M5",
667
+ "bear": 1.0824,
668
+ "base": 1.2388,
669
+ "bull": 1.4116
670
+ },
671
+ {
672
+ "month": "M6",
673
+ "bear": 1.1041,
674
+ "base": 1.307,
675
+ "bull": 1.5386
676
+ },
677
+ {
678
+ "month": "M7",
679
+ "bear": 1.1262,
680
+ "base": 1.3788,
681
+ "bull": 1.6771
682
+ },
683
+ {
684
+ "month": "M8",
685
+ "bear": 1.1487,
686
+ "base": 1.4547,
687
+ "bull": 1.828
688
+ },
689
+ {
690
+ "month": "M9",
691
+ "bear": 1.1717,
692
+ "base": 1.5347,
693
+ "bull": 1.9926
694
+ },
695
+ {
696
+ "month": "M10",
697
+ "bear": 1.1951,
698
+ "base": 1.6191,
699
+ "bull": 2.1719
700
+ },
701
+ {
702
+ "month": "M11",
703
+ "bear": 1.219,
704
+ "base": 1.7081,
705
+ "bull": 2.3674
706
+ },
707
+ {
708
+ "month": "M12",
709
+ "bear": 1.2434,
710
+ "base": 1.8021,
711
+ "bull": 2.5804
712
+ }
713
+ ]
714
+ },
715
+ "computed": {
716
+ "factor12": "scenario == \"bear\" ? last(months).bear : scenario == \"bull\" ? last(months).bull : last(months).base",
717
+ "growth": "scenario == \"bear\" ? 2 : scenario == \"bull\" ? 9 : 5.5",
718
+ "grossGrowth": "growth + 3",
719
+ "plotted": "map(months, r => {month: r.month, mrr: round(customers * 79 * (scenario == \"bear\" ? r.bear : scenario == \"bull\" ? r.bull : r.base))})",
720
+ "mrr12": "round(customers * 79 * factor12)"
721
+ },
722
+ "actions": {
723
+ "copyScenario": {
724
+ "type": "copy",
725
+ "value": {
726
+ "$computed": "plotted"
727
+ }
728
+ }
729
+ },
730
+ "view": {
731
+ "type": "Surface",
732
+ "subtitle": "12-Monats-Modell · 79 € ARPA · Beispieldaten",
733
+ "children": [
734
+ {
735
+ "type": "Tabs",
736
+ "options": [
737
+ {
738
+ "id": "bear",
739
+ "label": "Bear"
740
+ },
741
+ {
742
+ "id": "base",
743
+ "label": "Base"
744
+ },
745
+ {
746
+ "id": "bull",
747
+ "label": "Bull"
748
+ }
749
+ ],
750
+ "value": {
751
+ "$state": "scenario"
752
+ },
753
+ "onChange": {
754
+ "set": "scenario"
755
+ }
756
+ },
757
+ {
758
+ "type": "Grid",
759
+ "columns": 2,
760
+ "children": [
761
+ {
762
+ "type": "KpiTile",
763
+ "label": "MRR Monat 12",
764
+ "value": {
765
+ "$computed": "mrr12"
766
+ },
767
+ "format": "currency",
768
+ "currency": "EUR"
769
+ },
770
+ {
771
+ "type": "KpiTile",
772
+ "label": "Netto-Wachstum / Monat",
773
+ "value": {
774
+ "$computed": "growth"
775
+ },
776
+ "format": "percent",
777
+ "signed": true,
778
+ "tone": "success"
779
+ }
780
+ ]
781
+ },
782
+ {
783
+ "type": "Chart",
784
+ "kind": "line",
785
+ "data": {
786
+ "$computed": "plotted"
787
+ },
788
+ "x": "month",
789
+ "series": [
790
+ {
791
+ "field": "mrr",
792
+ "label": "MRR"
793
+ }
794
+ ],
795
+ "valueFormat": "currency",
796
+ "currency": "EUR",
797
+ "min": 0
798
+ },
799
+ {
800
+ "type": "Slider",
801
+ "label": "Startkunden",
802
+ "min": 200,
803
+ "max": 2000,
804
+ "step": 50,
805
+ "value": {
806
+ "$state": "customers"
807
+ },
808
+ "onChange": {
809
+ "set": "customers"
810
+ }
811
+ },
812
+ {
813
+ "type": "Grid",
814
+ "columns": 2,
815
+ "children": [
816
+ {
817
+ "type": "KpiTile",
818
+ "label": "Wachstumsrate",
819
+ "value": {
820
+ "$computed": "grossGrowth"
821
+ },
822
+ "format": "percent",
823
+ "signed": true
824
+ },
825
+ {
826
+ "type": "KpiTile",
827
+ "label": "Churn-Rate",
828
+ "value": 3,
829
+ "format": "percent",
830
+ "higherIsBetter": false,
831
+ "source": {
832
+ "name": "Modellannahme"
833
+ }
834
+ }
835
+ ]
836
+ },
837
+ {
838
+ "type": "Button",
839
+ "label": "Szenariodaten als JSON kopieren",
840
+ "icon": "copy",
841
+ "onClick": {
842
+ "action": "copyScenario"
843
+ },
844
+ "fullWidth": true
845
+ }
846
+ ]
847
+ }
848
+ }
849
+ },
850
+ {
851
+ "name": "data-stock-chart",
852
+ "description": "ChatGPT ref 31: the price as a KPI tile with its change, the 1D / 5D range tabs over the price area chart (intraday or the five daily closes), the key stats in a four-column table.",
853
+ "expectedState": "data",
854
+ "width": 720,
855
+ "interactions": [
856
+ {
857
+ "name": "hover-price",
858
+ "hover": {
859
+ "selector": ".apexcharts-svg"
860
+ }
861
+ },
862
+ {
863
+ "name": "range-5d",
864
+ "click": {
865
+ "text": "5D"
866
+ }
867
+ }
868
+ ],
869
+ "payload": {
870
+ "title": "Apple Inc (AAPL)",
871
+ "data": {
872
+ "intraday": [
873
+ {
874
+ "time": "9:30",
875
+ "price": 350.0
876
+ },
877
+ {
878
+ "time": "9:36",
879
+ "price": 349.1
880
+ },
881
+ {
882
+ "time": "9:43",
883
+ "price": 348.2
884
+ },
885
+ {
886
+ "time": "9:49",
887
+ "price": 347.3
888
+ },
889
+ {
890
+ "time": "9:56",
891
+ "price": 346.62
892
+ },
893
+ {
894
+ "time": "10:02",
895
+ "price": 346.06
896
+ },
897
+ {
898
+ "time": "10:09",
899
+ "price": 345.87
900
+ },
901
+ {
902
+ "time": "10:15",
903
+ "price": 346.06
904
+ },
905
+ {
906
+ "time": "10:22",
907
+ "price": 345.6
908
+ },
909
+ {
910
+ "time": "10:28",
911
+ "price": 345.6
912
+ },
913
+ {
914
+ "time": "10:35",
915
+ "price": 345.6
916
+ },
917
+ {
918
+ "time": "10:41",
919
+ "price": 345.88
920
+ },
921
+ {
922
+ "time": "10:48",
923
+ "price": 345.6
924
+ },
925
+ {
926
+ "time": "10:54",
927
+ "price": 345.86
928
+ },
929
+ {
930
+ "time": "11:00",
931
+ "price": 346.02
932
+ },
933
+ {
934
+ "time": "11:07",
935
+ "price": 345.6
936
+ },
937
+ {
938
+ "time": "11:14",
939
+ "price": 345.6
940
+ },
941
+ {
942
+ "time": "11:20",
943
+ "price": 345.6
944
+ },
945
+ {
946
+ "time": "11:26",
947
+ "price": 345.6
948
+ },
949
+ {
950
+ "time": "11:33",
951
+ "price": 346.2
952
+ },
953
+ {
954
+ "time": "11:39",
955
+ "price": 345.62
956
+ },
957
+ {
958
+ "time": "11:46",
959
+ "price": 345.6
960
+ },
961
+ {
962
+ "time": "11:52",
963
+ "price": 346.12
964
+ },
965
+ {
966
+ "time": "11:59",
967
+ "price": 345.95
968
+ },
969
+ {
970
+ "time": "12:05",
971
+ "price": 345.6
972
+ },
973
+ {
974
+ "time": "12:12",
975
+ "price": 345.6
976
+ },
977
+ {
978
+ "time": "12:18",
979
+ "price": 345.6
980
+ },
981
+ {
982
+ "time": "12:25",
983
+ "price": 346.14
984
+ },
985
+ {
986
+ "time": "12:31",
987
+ "price": 345.72
988
+ },
989
+ {
990
+ "time": "12:38",
991
+ "price": 345.6
992
+ },
993
+ {
994
+ "time": "12:45",
995
+ "price": 345.66
996
+ },
997
+ {
998
+ "time": "12:51",
999
+ "price": 345.67
1000
+ },
1001
+ {
1002
+ "time": "12:58",
1003
+ "price": 346.21
1004
+ },
1005
+ {
1006
+ "time": "13:04",
1007
+ "price": 346.6
1008
+ },
1009
+ {
1010
+ "time": "13:11",
1011
+ "price": 346.36
1012
+ },
1013
+ {
1014
+ "time": "13:17",
1015
+ "price": 345.93
1016
+ },
1017
+ {
1018
+ "time": "13:24",
1019
+ "price": 346.32
1020
+ },
1021
+ {
1022
+ "time": "13:30",
1023
+ "price": 346.9
1024
+ },
1025
+ {
1026
+ "time": "13:37",
1027
+ "price": 346.24
1028
+ },
1029
+ {
1030
+ "time": "13:43",
1031
+ "price": 346.5
1032
+ },
1033
+ {
1034
+ "time": "13:49",
1035
+ "price": 346.93
1036
+ },
1037
+ {
1038
+ "time": "13:56",
1039
+ "price": 347.07
1040
+ },
1041
+ {
1042
+ "time": "14:03",
1043
+ "price": 346.66
1044
+ },
1045
+ {
1046
+ "time": "14:09",
1047
+ "price": 346.99
1048
+ },
1049
+ {
1050
+ "time": "14:15",
1051
+ "price": 347.24
1052
+ },
1053
+ {
1054
+ "time": "14:22",
1055
+ "price": 346.79
1056
+ },
1057
+ {
1058
+ "time": "14:29",
1059
+ "price": 346.93
1060
+ },
1061
+ {
1062
+ "time": "14:35",
1063
+ "price": 346.51
1064
+ },
1065
+ {
1066
+ "time": "14:41",
1067
+ "price": 345.86
1068
+ },
1069
+ {
1070
+ "time": "14:48",
1071
+ "price": 345.6
1072
+ },
1073
+ {
1074
+ "time": "14:55",
1075
+ "price": 345.6
1076
+ },
1077
+ {
1078
+ "time": "15:01",
1079
+ "price": 345.6
1080
+ },
1081
+ {
1082
+ "time": "15:07",
1083
+ "price": 345.74
1084
+ },
1085
+ {
1086
+ "time": "15:14",
1087
+ "price": 346.13
1088
+ },
1089
+ {
1090
+ "time": "15:20",
1091
+ "price": 346.68
1092
+ },
1093
+ {
1094
+ "time": "15:27",
1095
+ "price": 347.25
1096
+ },
1097
+ {
1098
+ "time": "15:33",
1099
+ "price": 347.84
1100
+ },
1101
+ {
1102
+ "time": "15:40",
1103
+ "price": 348.17
1104
+ },
1105
+ {
1106
+ "time": "15:46",
1107
+ "price": 347.86
1108
+ },
1109
+ {
1110
+ "time": "15:53",
1111
+ "price": 347.73
1112
+ }
1113
+ ],
1114
+ "fiveDays": [
1115
+ {
1116
+ "time": "17. Okt.",
1117
+ "price": 344.62
1118
+ },
1119
+ {
1120
+ "time": "20. Okt.",
1121
+ "price": 346.8
1122
+ },
1123
+ {
1124
+ "time": "21. Okt.",
1125
+ "price": 345.91
1126
+ },
1127
+ {
1128
+ "time": "22. Okt.",
1129
+ "price": 348.22
1130
+ },
1131
+ {
1132
+ "time": "23. Okt.",
1133
+ "price": 347.73
1134
+ }
1135
+ ]
1136
+ },
1137
+ "view": {
1138
+ "type": "Stack",
1139
+ "children": [
1140
+ {
1141
+ "type": "KpiTile",
1142
+ "label": "Kurs · 23. Okt., 19:58:16 EDT",
1143
+ "value": 347.73,
1144
+ "format": "currency",
1145
+ "currency": "USD",
1146
+ "delta": -0.49,
1147
+ "deltaFormat": "currency",
1148
+ "deltaLabel": "(0,14 %) · nachbörslich 347,60 $",
1149
+ "detail": "NASDAQ, Echtzeit",
1150
+ "source": {
1151
+ "name": "Nasdaq",
1152
+ "url": "https://www.nasdaq.com/market-activity/stocks/aapl"
1153
+ }
1154
+ },
1155
+ {
1156
+ "type": "Tabs",
1157
+ "options": [
1158
+ {
1159
+ "id": "1d",
1160
+ "label": "1D"
1161
+ },
1162
+ {
1163
+ "id": "5d",
1164
+ "label": "5D"
1165
+ }
1166
+ ],
1167
+ "value": {
1168
+ "$state": "range"
1169
+ },
1170
+ "onChange": {
1171
+ "set": "range"
1172
+ }
1173
+ },
1174
+ {
1175
+ "type": "Chart",
1176
+ "kind": "area",
1177
+ "data": {
1178
+ "$computed": "pricePoints"
1179
+ },
1180
+ "x": "time",
1181
+ "series": [
1182
+ {
1183
+ "field": "price",
1184
+ "label": "Kurs"
1185
+ }
1186
+ ],
1187
+ "valueFormat": "number",
1188
+ "min": 344,
1189
+ "max": 352
1190
+ },
1191
+ {
1192
+ "type": "Table",
1193
+ "children": [
1194
+ {
1195
+ "type": "TableRow",
1196
+ "children": [
1197
+ {
1198
+ "type": "TableCell",
1199
+ "value": "Öffnen",
1200
+ "tone": "muted"
1201
+ },
1202
+ {
1203
+ "type": "TableCell",
1204
+ "value": 349.49,
1205
+ "align": "end"
1206
+ },
1207
+ {
1208
+ "type": "TableCell",
1209
+ "value": "Volumen",
1210
+ "tone": "muted"
1211
+ },
1212
+ {
1213
+ "type": "TableCell",
1214
+ "value": 39500000,
1215
+ "format": "compact",
1216
+ "align": "end"
1217
+ }
1218
+ ]
1219
+ },
1220
+ {
1221
+ "type": "TableRow",
1222
+ "children": [
1223
+ {
1224
+ "type": "TableCell",
1225
+ "value": "Marktkapitalisierung",
1226
+ "tone": "muted"
1227
+ },
1228
+ {
1229
+ "type": "TableCell",
1230
+ "value": 5120000000000,
1231
+ "format": "compact",
1232
+ "align": "end"
1233
+ },
1234
+ {
1235
+ "type": "TableCell",
1236
+ "value": "Tagestief",
1237
+ "tone": "muted"
1238
+ },
1239
+ {
1240
+ "type": "TableCell",
1241
+ "value": 345.41,
1242
+ "align": "end"
1243
+ }
1244
+ ]
1245
+ },
1246
+ {
1247
+ "type": "TableRow",
1248
+ "children": [
1249
+ {
1250
+ "type": "TableCell",
1251
+ "value": "Jahrestief",
1252
+ "tone": "muted"
1253
+ },
1254
+ {
1255
+ "type": "TableCell",
1256
+ "value": 0.12,
1257
+ "align": "end"
1258
+ },
1259
+ {
1260
+ "type": "TableCell",
1261
+ "value": "EPS (TTM)",
1262
+ "tone": "muted"
1263
+ },
1264
+ {
1265
+ "type": "TableCell",
1266
+ "value": 8.71,
1267
+ "align": "end"
1268
+ }
1269
+ ]
1270
+ },
1271
+ {
1272
+ "type": "TableRow",
1273
+ "children": [
1274
+ {
1275
+ "type": "TableCell",
1276
+ "value": "Tageshoch",
1277
+ "tone": "muted"
1278
+ },
1279
+ {
1280
+ "type": "TableCell",
1281
+ "value": 351.7,
1282
+ "align": "end"
1283
+ },
1284
+ {
1285
+ "type": "TableCell",
1286
+ "value": "Jahreshoch",
1287
+ "tone": "muted"
1288
+ },
1289
+ {
1290
+ "type": "TableCell",
1291
+ "value": 1023,
1292
+ "align": "end"
1293
+ }
1294
+ ]
1295
+ },
1296
+ {
1297
+ "type": "TableRow",
1298
+ "children": [
1299
+ {
1300
+ "type": "TableCell",
1301
+ "value": "KGV",
1302
+ "tone": "muted"
1303
+ },
1304
+ {
1305
+ "type": "TableCell",
1306
+ "value": 39.92,
1307
+ "align": "end"
1308
+ },
1309
+ {
1310
+ "type": "TableCell"
1311
+ },
1312
+ {
1313
+ "type": "TableCell"
1314
+ }
1315
+ ]
1316
+ }
1317
+ ],
1318
+ "source": {
1319
+ "name": "www.nasdaq.com",
1320
+ "url": "https://www.nasdaq.com/market-activity/stocks/aapl"
1321
+ }
1322
+ }
1323
+ ]
1324
+ },
1325
+ "state": {
1326
+ "range": "1d"
1327
+ },
1328
+ "computed": {
1329
+ "pricePoints": "range == \"5d\" ? fiveDays : intraday"
1330
+ }
1331
+ }
1332
+ },
1333
+ {
1334
+ "name": "data-analytics-studio",
1335
+ "description": "ChatGPT ref 52, the data half: period tabs, channel select, reference date, benchmark checkbox and traffic slider (lane L5) drive three KPI tiles, the line chart with its comparison series, the channel bar and pie charts, the scatter chart and the detail table with a Repeat, a total row and the date in its caption.",
1336
+ "expectedState": "data",
1337
+ "width": 720,
1338
+ "interactions": [
1339
+ {
1340
+ "name": "four-weeks",
1341
+ "click": {
1342
+ "text": "4 Wochen"
1343
+ }
1344
+ },
1345
+ {
1346
+ "name": "benchmark-off",
1347
+ "click": {
1348
+ "text": "Vergleichswerte"
1349
+ }
1350
+ }
1351
+ ],
1352
+ "payload": {
1353
+ "title": "Analytics Studio",
1354
+ "state": {
1355
+ "period": "7d",
1356
+ "channel": "all",
1357
+ "asOf": "2026-10-25",
1358
+ "scale": 100,
1359
+ "benchmark": true
1360
+ },
1361
+ "data": {
1362
+ "days": [
1363
+ {
1364
+ "x": "Mo",
1365
+ "organic": 500,
1366
+ "paid": 300,
1367
+ "direct": 180,
1368
+ "rate": 3.5
1369
+ },
1370
+ {
1371
+ "x": "Di",
1372
+ "organic": 580,
1373
+ "paid": 340,
1374
+ "direct": 200,
1375
+ "rate": 4.0
1376
+ },
1377
+ {
1378
+ "x": "Mi",
1379
+ "organic": 520,
1380
+ "paid": 320,
1381
+ "direct": 200,
1382
+ "rate": 3.8
1383
+ },
1384
+ {
1385
+ "x": "Do",
1386
+ "organic": 640,
1387
+ "paid": 400,
1388
+ "direct": 220,
1389
+ "rate": 4.4
1390
+ },
1391
+ {
1392
+ "x": "Fr",
1393
+ "organic": 600,
1394
+ "paid": 360,
1395
+ "direct": 170,
1396
+ "rate": 4.6
1397
+ },
1398
+ {
1399
+ "x": "Sa",
1400
+ "organic": 720,
1401
+ "paid": 500,
1402
+ "direct": 240,
1403
+ "rate": 5.3
1404
+ },
1405
+ {
1406
+ "x": "So",
1407
+ "organic": 630,
1408
+ "paid": 400,
1409
+ "direct": 180,
1410
+ "rate": 4.2
1411
+ }
1412
+ ],
1413
+ "weeks": [
1414
+ {
1415
+ "x": "W1",
1416
+ "organic": 3400,
1417
+ "paid": 2100,
1418
+ "direct": 1300,
1419
+ "rate": 3.7
1420
+ },
1421
+ {
1422
+ "x": "W2",
1423
+ "organic": 3950,
1424
+ "paid": 2350,
1425
+ "direct": 1600,
1426
+ "rate": 3.9
1427
+ },
1428
+ {
1429
+ "x": "W3",
1430
+ "organic": 4300,
1431
+ "paid": 2550,
1432
+ "direct": 1750,
1433
+ "rate": 4.2
1434
+ },
1435
+ {
1436
+ "x": "W4",
1437
+ "organic": 4700,
1438
+ "paid": 2750,
1439
+ "direct": 1850,
1440
+ "rate": 4.5
1441
+ }
1442
+ ]
1443
+ },
1444
+ "computed": {
1445
+ "baseRows": "period == \"7d\" ? days : weeks",
1446
+ "channelVisits": "map(baseRows, r => {x: r.x, rate: r.rate, visits: channel == \"organic\" ? r.organic : channel == \"paid\" ? r.paid : channel == \"direct\" ? r.direct : r.organic + r.paid + r.direct})",
1447
+ "plotted": "map(channelVisits, r => {x: r.x, visits: round(r.visits * scale / 100), comparison: round(r.visits * scale / 100 * 0.9), conversions: round(r.visits * scale / 100 * r.rate / 100), rate: r.rate})",
1448
+ "totalVisits": "sum(plotted, r => r.visits)",
1449
+ "totalConversions": "sum(plotted, r => r.conversions)",
1450
+ "averageRate": "totalVisits > 0 ? round(totalConversions / totalVisits * 10000) / 100 : 0",
1451
+ "channelTotals": "[{name: \"Organic\", visitors: round(sum(baseRows, r => r.organic) * scale / 100)}, {name: \"Paid\", visitors: round(sum(baseRows, r => r.paid) * scale / 100)}, {name: \"Direct\", visitors: round(sum(baseRows, r => r.direct) * scale / 100)}]",
1452
+ "channelLabel": "channel == \"organic\" ? \"Organic\" : channel == \"paid\" ? \"Paid\" : channel == \"direct\" ? \"Direct\" : \"Alle Kanäle\"",
1453
+ "tableCaption": "\"Detailtabelle · \" + asOf + (period == \"7d\" ? \" · Tageswerte\" : \" · Wochenwerte\")"
1454
+ },
1455
+ "view": {
1456
+ "type": "Stack",
1457
+ "children": [
1458
+ {
1459
+ "type": "Surface",
1460
+ "title": "Filter & State",
1461
+ "density": "compact",
1462
+ "children": [
1463
+ {
1464
+ "type": "Tabs",
1465
+ "label": "Zeitraum",
1466
+ "options": [
1467
+ {
1468
+ "id": "7d",
1469
+ "label": "7 Tage"
1470
+ },
1471
+ {
1472
+ "id": "30d",
1473
+ "label": "4 Wochen"
1474
+ }
1475
+ ],
1476
+ "value": {
1477
+ "$state": "period"
1478
+ },
1479
+ "onChange": {
1480
+ "set": "period"
1481
+ }
1482
+ },
1483
+ {
1484
+ "type": "Select",
1485
+ "label": "Kanal",
1486
+ "options": [
1487
+ {
1488
+ "id": "all",
1489
+ "label": "Alle Kanäle"
1490
+ },
1491
+ {
1492
+ "id": "organic",
1493
+ "label": "Organic"
1494
+ },
1495
+ {
1496
+ "id": "paid",
1497
+ "label": "Paid"
1498
+ },
1499
+ {
1500
+ "id": "direct",
1501
+ "label": "Direct"
1502
+ }
1503
+ ],
1504
+ "value": {
1505
+ "$state": "channel"
1506
+ },
1507
+ "onChange": {
1508
+ "set": "channel"
1509
+ }
1510
+ },
1511
+ {
1512
+ "type": "DatePicker",
1513
+ "label": "Referenzdatum",
1514
+ "value": {
1515
+ "$state": "asOf"
1516
+ },
1517
+ "onChange": {
1518
+ "set": "asOf"
1519
+ }
1520
+ },
1521
+ {
1522
+ "type": "Slider",
1523
+ "label": "Traffic-Skalierung",
1524
+ "min": 50,
1525
+ "max": 150,
1526
+ "step": 10,
1527
+ "unit": "%",
1528
+ "value": {
1529
+ "$state": "scale"
1530
+ },
1531
+ "onChange": {
1532
+ "set": "scale"
1533
+ }
1534
+ },
1535
+ {
1536
+ "type": "Checkbox",
1537
+ "label": "Vergleichswerte (90 % der Besucher) anzeigen",
1538
+ "checked": {
1539
+ "$state": "benchmark"
1540
+ },
1541
+ "onChange": {
1542
+ "set": "benchmark"
1543
+ }
1544
+ }
1545
+ ]
1546
+ },
1547
+ {
1548
+ "type": "Grid",
1549
+ "columns": 3,
1550
+ "children": [
1551
+ {
1552
+ "type": "KpiTile",
1553
+ "label": "Besucher",
1554
+ "value": {
1555
+ "$computed": "totalVisits"
1556
+ },
1557
+ "detail": {
1558
+ "$computed": "channelLabel"
1559
+ }
1560
+ },
1561
+ {
1562
+ "type": "KpiTile",
1563
+ "label": "Conversions",
1564
+ "value": {
1565
+ "$computed": "totalConversions"
1566
+ },
1567
+ "detail": "Simuliert"
1568
+ },
1569
+ {
1570
+ "type": "KpiTile",
1571
+ "label": "Conversion",
1572
+ "value": {
1573
+ "$computed": "averageRate"
1574
+ },
1575
+ "format": "percent",
1576
+ "detail": "Gewichtet"
1577
+ }
1578
+ ]
1579
+ },
1580
+ {
1581
+ "type": "Grid",
1582
+ "columns": 2,
1583
+ "minColumnWidth": "regular",
1584
+ "children": [
1585
+ {
1586
+ "type": "Chart",
1587
+ "kind": "line",
1588
+ "title": "Line · Besucher",
1589
+ "data": {
1590
+ "$computed": "plotted"
1591
+ },
1592
+ "x": "x",
1593
+ "series": [
1594
+ {
1595
+ "field": "visits",
1596
+ "label": "Besucher"
1597
+ },
1598
+ {
1599
+ "field": "comparison",
1600
+ "label": "Vergleich",
1601
+ "visible": {
1602
+ "$state": "benchmark"
1603
+ }
1604
+ }
1605
+ ]
1606
+ },
1607
+ {
1608
+ "type": "Chart",
1609
+ "kind": "bar",
1610
+ "title": "Bar · Kanäle",
1611
+ "data": {
1612
+ "$computed": "channelTotals"
1613
+ },
1614
+ "x": "name",
1615
+ "series": [
1616
+ {
1617
+ "field": "visitors",
1618
+ "label": "Besucher"
1619
+ }
1620
+ ]
1621
+ },
1622
+ {
1623
+ "type": "Chart",
1624
+ "kind": "pie",
1625
+ "title": "Pie · Traffic-Mix",
1626
+ "data": {
1627
+ "$computed": "channelTotals"
1628
+ },
1629
+ "x": "name",
1630
+ "series": [
1631
+ {
1632
+ "field": "visitors",
1633
+ "label": "Besucher"
1634
+ }
1635
+ ]
1636
+ },
1637
+ {
1638
+ "type": "Chart",
1639
+ "kind": "scatter",
1640
+ "title": "Scatter · Traffic / CVR",
1641
+ "data": {
1642
+ "$computed": "plotted"
1643
+ },
1644
+ "x": "visits",
1645
+ "xLabel": "Besucher",
1646
+ "series": [
1647
+ {
1648
+ "field": "rate",
1649
+ "label": "Conversion Rate"
1650
+ }
1651
+ ],
1652
+ "valueFormat": "percent"
1653
+ }
1654
+ ]
1655
+ },
1656
+ {
1657
+ "type": "Table",
1658
+ "caption": {
1659
+ "$computed": "tableCaption"
1660
+ },
1661
+ "children": [
1662
+ {
1663
+ "type": "TableRow",
1664
+ "header": true,
1665
+ "children": [
1666
+ {
1667
+ "type": "TableCell",
1668
+ "value": "Zeitraum"
1669
+ },
1670
+ {
1671
+ "type": "TableCell",
1672
+ "value": "Besucher",
1673
+ "align": "end"
1674
+ },
1675
+ {
1676
+ "type": "TableCell",
1677
+ "value": "Conversions",
1678
+ "align": "end"
1679
+ },
1680
+ {
1681
+ "type": "TableCell",
1682
+ "value": "CVR",
1683
+ "align": "end"
1684
+ }
1685
+ ]
1686
+ },
1687
+ {
1688
+ "type": "Repeat",
1689
+ "items": {
1690
+ "$computed": "plotted"
1691
+ },
1692
+ "children": [
1693
+ {
1694
+ "type": "TableRow",
1695
+ "children": [
1696
+ {
1697
+ "type": "TableCell",
1698
+ "value": {
1699
+ "$item": "x"
1700
+ }
1701
+ },
1702
+ {
1703
+ "type": "TableCell",
1704
+ "value": {
1705
+ "$item": "visits"
1706
+ }
1707
+ },
1708
+ {
1709
+ "type": "TableCell",
1710
+ "value": {
1711
+ "$item": "conversions"
1712
+ }
1713
+ },
1714
+ {
1715
+ "type": "TableCell",
1716
+ "value": {
1717
+ "$item": "rate"
1718
+ },
1719
+ "format": "percent",
1720
+ "decimals": 1
1721
+ }
1722
+ ]
1723
+ }
1724
+ ]
1725
+ },
1726
+ {
1727
+ "type": "TableRow",
1728
+ "emphasis": true,
1729
+ "children": [
1730
+ {
1731
+ "type": "TableCell",
1732
+ "value": "Gesamt"
1733
+ },
1734
+ {
1735
+ "type": "TableCell",
1736
+ "value": {
1737
+ "$computed": "totalVisits"
1738
+ }
1739
+ },
1740
+ {
1741
+ "type": "TableCell",
1742
+ "value": {
1743
+ "$computed": "totalConversions"
1744
+ }
1745
+ },
1746
+ {
1747
+ "type": "TableCell",
1748
+ "value": {
1749
+ "$computed": "averageRate"
1750
+ },
1751
+ "format": "percent"
1752
+ }
1753
+ ]
1754
+ }
1755
+ ]
1756
+ }
1757
+ ]
1758
+ }
1759
+ }
1760
+ },
1761
+ {
1762
+ "name": "data-review-sources-donut",
1763
+ "description": "Shares of a whole as a donut: the practice's reviews by platform (Google, Jameda, Facebook), the share on each slice, the total in the middle, the legend under the ring, the caption with the date and the source chip.",
1764
+ "expectedState": "data",
1765
+ "locale": "de",
1766
+ "width": 528,
1767
+ "dataSet": "kassel-dental-practice",
1768
+ "payload": {
1769
+ "view": {
1770
+ "type": "Chart",
1771
+ "kind": "donut",
1772
+ "title": "Bewertungen nach Plattform",
1773
+ "data": [
1774
+ {
1775
+ "platform": "Google",
1776
+ "reviews": 87
1777
+ },
1778
+ {
1779
+ "platform": "Jameda",
1780
+ "reviews": 32
1781
+ },
1782
+ {
1783
+ "platform": "Facebook",
1784
+ "reviews": 11
1785
+ }
1786
+ ],
1787
+ "x": "platform",
1788
+ "series": [
1789
+ {
1790
+ "field": "reviews",
1791
+ "label": "Bewertungen"
1792
+ }
1793
+ ],
1794
+ "caption": "130 Bewertungen insgesamt, Stand 25. Oktober 2026",
1795
+ "source": {
1796
+ "name": "Example Reviews · Bewertungsquellen"
1797
+ }
1798
+ }
1799
+ }
1800
+ },
1801
+ {
1802
+ "name": "data-profile-views-heatmap",
1803
+ "description": "A heatmap of the Google Business Profile views by weekday × time of day over the last four weeks: one heat row per weekday, one column per two-hour slot, the count in each cell; the caption names the period.",
1804
+ "expectedState": "data",
1805
+ "locale": "de",
1806
+ "width": 528,
1807
+ "dataSet": "kassel-dental-practice",
1808
+ "payload": {
1809
+ "data": {
1810
+ "views": [
1811
+ {
1812
+ "day": "Mo",
1813
+ "h08": 64,
1814
+ "h10": 58,
1815
+ "h12": 41,
1816
+ "h14": 46,
1817
+ "h16": 52,
1818
+ "h18": 33
1819
+ },
1820
+ {
1821
+ "day": "Di",
1822
+ "h08": 57,
1823
+ "h10": 52,
1824
+ "h12": 38,
1825
+ "h14": 43,
1826
+ "h16": 49,
1827
+ "h18": 30
1828
+ },
1829
+ {
1830
+ "day": "Mi",
1831
+ "h08": 52,
1832
+ "h10": 47,
1833
+ "h12": 35,
1834
+ "h14": 40,
1835
+ "h16": 44,
1836
+ "h18": 27
1837
+ },
1838
+ {
1839
+ "day": "Do",
1840
+ "h08": 55,
1841
+ "h10": 50,
1842
+ "h12": 37,
1843
+ "h14": 42,
1844
+ "h16": 47,
1845
+ "h18": 29
1846
+ },
1847
+ {
1848
+ "day": "Fr",
1849
+ "h08": 49,
1850
+ "h10": 44,
1851
+ "h12": 31,
1852
+ "h14": 24,
1853
+ "h16": 19,
1854
+ "h18": 22
1855
+ },
1856
+ {
1857
+ "day": "Sa",
1858
+ "h08": 21,
1859
+ "h10": 28,
1860
+ "h12": 26,
1861
+ "h14": 19,
1862
+ "h16": 15,
1863
+ "h18": 12
1864
+ },
1865
+ {
1866
+ "day": "So",
1867
+ "h08": 11,
1868
+ "h10": 17,
1869
+ "h12": 19,
1870
+ "h14": 16,
1871
+ "h16": 18,
1872
+ "h18": 20
1873
+ }
1874
+ ]
1875
+ },
1876
+ "view": {
1877
+ "type": "Chart",
1878
+ "kind": "heatmap",
1879
+ "title": "Profilaufrufe nach Wochentag und Uhrzeit",
1880
+ "data": {
1881
+ "$data": "views"
1882
+ },
1883
+ "x": "day",
1884
+ "series": [
1885
+ {
1886
+ "field": "h08",
1887
+ "label": "8–10"
1888
+ },
1889
+ {
1890
+ "field": "h10",
1891
+ "label": "10–12"
1892
+ },
1893
+ {
1894
+ "field": "h12",
1895
+ "label": "12–14"
1896
+ },
1897
+ {
1898
+ "field": "h14",
1899
+ "label": "14–16"
1900
+ },
1901
+ {
1902
+ "field": "h16",
1903
+ "label": "16–18"
1904
+ },
1905
+ {
1906
+ "field": "h18",
1907
+ "label": "18–20"
1908
+ }
1909
+ ],
1910
+ "caption": "Aufrufe des Google-Profils, 28. September bis 25. Oktober 2026 (Uhrzeit in Stunden)",
1911
+ "source": {
1912
+ "name": "Google Business Profile · Statistiken"
1913
+ }
1914
+ }
1915
+ }
1916
+ },
1917
+ {
1918
+ "name": "data-review-request-funnel",
1919
+ "description": "The stages of a process as a funnel: review invitations sent → e-mail opened → review link clicked → review written, each stage a centered bar with its count and the conversion from the stage before in percent; caption and source chip.",
1920
+ "expectedState": "data",
1921
+ "locale": "de",
1922
+ "width": 528,
1923
+ "dataSet": "kassel-dental-practice",
1924
+ "payload": {
1925
+ "view": {
1926
+ "type": "Chart",
1927
+ "kind": "funnel",
1928
+ "title": "Bewertungseinladungen der letzten 30 Tage",
1929
+ "data": [
1930
+ {
1931
+ "stage": "Einladungen versendet",
1932
+ "count": 64
1933
+ },
1934
+ {
1935
+ "stage": "E-Mail geöffnet",
1936
+ "count": 41
1937
+ },
1938
+ {
1939
+ "stage": "Bewertungslink geklickt",
1940
+ "count": 19
1941
+ },
1942
+ {
1943
+ "stage": "Bewertung geschrieben",
1944
+ "count": 5
1945
+ }
1946
+ ],
1947
+ "x": "stage",
1948
+ "series": [
1949
+ {
1950
+ "field": "count",
1951
+ "label": "Patienten"
1952
+ }
1953
+ ],
1954
+ "caption": "Einladungen per E-Mail, 26. September bis 25. Oktober 2026",
1955
+ "source": {
1956
+ "name": "Example Review Invitations · Bewertungseinladungen"
1957
+ }
1958
+ }
1959
+ }
1960
+ },
1961
+ {
1962
+ "name": "data-profile-radar",
1963
+ "description": "ChatGPT ref 14 with real data: the practice's Google profile across six completeness dimensions against the average of its five local competitors, two polygons, the legend under the plot, hovering a point shows both values.",
1964
+ "expectedState": "data",
1965
+ "locale": "de",
1966
+ "width": 528,
1967
+ "dataSet": "kassel-dental-practice",
1968
+ "interactions": [
1969
+ {
1970
+ "name": "hover-point",
1971
+ "hover": {
1972
+ "position": {
1973
+ "x": 352,
1974
+ "y": 125
1975
+ }
1976
+ }
1977
+ }
1978
+ ],
1979
+ "payload": {
1980
+ "data": {
1981
+ "dimensions": [
1982
+ {
1983
+ "dimension": "Fotos",
1984
+ "own": 55,
1985
+ "competitors": 75
1986
+ },
1987
+ {
1988
+ "dimension": "Öffnungszeiten",
1989
+ "own": 100,
1990
+ "competitors": 95
1991
+ },
1992
+ {
1993
+ "dimension": "Leistungen",
1994
+ "own": 90,
1995
+ "competitors": 70
1996
+ },
1997
+ {
1998
+ "dimension": "Attribute",
1999
+ "own": 70,
2000
+ "competitors": 65
2001
+ },
2002
+ {
2003
+ "dimension": "Bewertungen",
2004
+ "own": 92,
2005
+ "competitors": 68
2006
+ },
2007
+ {
2008
+ "dimension": "Beiträge",
2009
+ "own": 60,
2010
+ "competitors": 40
2011
+ }
2012
+ ]
2013
+ },
2014
+ "view": {
2015
+ "type": "Chart",
2016
+ "kind": "radar",
2017
+ "title": "Google-Profil im Vergleich",
2018
+ "data": {
2019
+ "$data": "dimensions"
2020
+ },
2021
+ "x": "dimension",
2022
+ "series": [
2023
+ {
2024
+ "field": "own",
2025
+ "label": "Ihre Praxis"
2026
+ },
2027
+ {
2028
+ "field": "competitors",
2029
+ "label": "Ø 5 Wettbewerber"
2030
+ }
2031
+ ],
2032
+ "valueFormat": "percent",
2033
+ "min": 0,
2034
+ "max": 100,
2035
+ "caption": "Vollständigkeit je Bereich in Prozent, Stand 25. Oktober 2026",
2036
+ "source": {
2037
+ "name": "Google Business Profile · Example Analytics Wettbewerbsanalyse"
2038
+ }
2039
+ }
2040
+ }
2041
+ },
2042
+ {
2043
+ "name": "data-list",
2044
+ "description": "The List node: a numbered short form, ListItems with a trailing Icon and a Repeat of ListItems (no single ChatGPT screenshot; ref 52's carousel content as entries).",
2045
+ "expectedState": "data",
2046
+ "width": 528,
2047
+ "payload": {
2048
+ "title": "Kanäle im Überblick",
2049
+ "data": {
2050
+ "channels": [
2051
+ {
2052
+ "name": "Organic",
2053
+ "visitors": "4.190",
2054
+ "share": "51,1 % Anteil"
2055
+ },
2056
+ {
2057
+ "name": "Paid",
2058
+ "visitors": "2.620",
2059
+ "share": "32,0 % Anteil"
2060
+ },
2061
+ {
2062
+ "name": "Direct",
2063
+ "visitors": "1.390",
2064
+ "share": "16,9 % Anteil"
2065
+ }
2066
+ ]
2067
+ },
2068
+ "view": {
2069
+ "type": "List",
2070
+ "marker": "number",
2071
+ "children": [
2072
+ {
2073
+ "type": "Repeat",
2074
+ "items": {
2075
+ "$data": "channels"
2076
+ },
2077
+ "children": [
2078
+ {
2079
+ "type": "ListItem",
2080
+ "title": {
2081
+ "$item": "name"
2082
+ },
2083
+ "description": "Besucher",
2084
+ "meta": {
2085
+ "$item": "share"
2086
+ },
2087
+ "value": {
2088
+ "$item": "visitors"
2089
+ },
2090
+ "slots": {
2091
+ "trailing": [
2092
+ {
2093
+ "type": "Icon",
2094
+ "name": "lineChart",
2095
+ "tone": "muted"
2096
+ }
2097
+ ]
2098
+ }
2099
+ }
2100
+ ]
2101
+ }
2102
+ ]
2103
+ }
2104
+ }
2105
+ },
2106
+ {
2107
+ "name": "data-loading",
2108
+ "description": "Loading: a table and a chart bound to a tool result that is still pending show skeletons in their shape.",
2109
+ "expectedState": "loading",
2110
+ "width": 528,
2111
+ "payload": {
2112
+ "view": {
2113
+ "type": "Stack",
2114
+ "children": [
2115
+ {
2116
+ "type": "KpiTile",
2117
+ "label": "Besucher",
2118
+ "value": {
2119
+ "$from": {
2120
+ "toolCall": "call_7",
2121
+ "path": "$.total",
2122
+ "state": "pending"
2123
+ }
2124
+ }
2125
+ },
2126
+ {
2127
+ "type": "Chart",
2128
+ "kind": "line",
2129
+ "title": "Besucher",
2130
+ "data": {
2131
+ "$from": {
2132
+ "toolCall": "call_7",
2133
+ "path": "$.rows[*]",
2134
+ "state": "pending"
2135
+ }
2136
+ },
2137
+ "x": "x",
2138
+ "series": [
2139
+ {
2140
+ "field": "visits"
2141
+ }
2142
+ ]
2143
+ },
2144
+ {
2145
+ "type": "Table",
2146
+ "columns": [
2147
+ {
2148
+ "key": "x",
2149
+ "label": "Tag"
2150
+ },
2151
+ {
2152
+ "key": "visits",
2153
+ "label": "Besucher"
2154
+ }
2155
+ ],
2156
+ "rows": {
2157
+ "$from": {
2158
+ "toolCall": "call_7",
2159
+ "path": "$.rows[*]",
2160
+ "state": "pending"
2161
+ }
2162
+ }
2163
+ }
2164
+ ]
2165
+ }
2166
+ }
2167
+ },
2168
+ {
2169
+ "name": "data-empty",
2170
+ "description": "Empty: a chart and a table over an empty dataset show one muted line each and report empty (the preview reads the block's render report, so its state is empty).",
2171
+ "expectedState": "empty",
2172
+ "width": 528,
2173
+ "payload": {
2174
+ "data": {
2175
+ "none": []
2176
+ },
2177
+ "view": {
2178
+ "type": "Stack",
2179
+ "children": [
2180
+ {
2181
+ "type": "Chart",
2182
+ "kind": "bar",
2183
+ "title": "Bewertungen pro Monat",
2184
+ "data": {
2185
+ "$data": "none"
2186
+ },
2187
+ "x": "month",
2188
+ "series": [
2189
+ {
2190
+ "field": "count"
2191
+ }
2192
+ ]
2193
+ },
2194
+ {
2195
+ "type": "Table",
2196
+ "columns": [
2197
+ {
2198
+ "key": "name",
2199
+ "label": "Wettbewerber"
2200
+ }
2201
+ ],
2202
+ "rows": {
2203
+ "$data": "none"
2204
+ },
2205
+ "emptyText": "Noch keine Wettbewerber erfasst."
2206
+ }
2207
+ ]
2208
+ }
2209
+ }
2210
+ },
2211
+ {
2212
+ "name": "data-error",
2213
+ "description": "Error: rows without a number in the series and an unknown bound icon report failed (INVALID_PROP); the rest of the tree renders.",
2214
+ "expectedState": "error",
2215
+ "width": 528,
2216
+ "payload": {
2217
+ "state": {
2218
+ "icon": "rocket"
2219
+ },
2220
+ "view": {
2221
+ "type": "Stack",
2222
+ "children": [
2223
+ {
2224
+ "type": "Chart",
2225
+ "kind": "line",
2226
+ "title": "Besucher",
2227
+ "data": [
2228
+ {
2229
+ "x": "Mo",
2230
+ "visits": "viele"
2231
+ }
2232
+ ],
2233
+ "x": "x",
2234
+ "series": [
2235
+ {
2236
+ "field": "visits"
2237
+ }
2238
+ ],
2239
+ "source": {
2240
+ "name": "Google Analytics"
2241
+ }
2242
+ },
2243
+ {
2244
+ "type": "Icon",
2245
+ "name": {
2246
+ "$state": "icon"
2247
+ },
2248
+ "label": "Status"
2249
+ },
2250
+ {
2251
+ "type": "KpiTile",
2252
+ "label": "Besucher",
2253
+ "value": 8200,
2254
+ "source": {
2255
+ "name": "Google Analytics"
2256
+ }
2257
+ }
2258
+ ]
2259
+ }
2260
+ }
2261
+ },
2262
+ {
2263
+ "name": "data-visibility-overview-ro",
2264
+ "description": "AW-351 synthetic regression/state fixture; supplied problematic literals preserved.",
2265
+ "expectedState": "data",
2266
+ "width": 672,
2267
+ "payload": {
2268
+ "title": "Vizibilitate online",
2269
+ "view": {
2270
+ "type": "Grid",
2271
+ "id": "visibility",
2272
+ "columns": 3,
2273
+ "children": [
2274
+ {
2275
+ "type": "KpiTile",
2276
+ "id": "google-profile",
2277
+ "label": "Google profile",
2278
+ "value": "Verificat · publicat",
2279
+ "detail": "Profilul este vizibil pe Google.",
2280
+ "source": {
2281
+ "name": "getGoogleProfile"
2282
+ }
2283
+ },
2284
+ {
2285
+ "type": "KpiTile",
2286
+ "id": "reviews",
2287
+ "label": "Reviews",
2288
+ "value": "5/5 · 22 recenzii",
2289
+ "detail": "Recenzii publicate de clienți.",
2290
+ "source": {
2291
+ "name": "getReviews"
2292
+ }
2293
+ },
2294
+ {
2295
+ "type": "KpiTile",
2296
+ "id": "listings",
2297
+ "label": "Listings",
2298
+ "value": "19 din 20 corecte",
2299
+ "detail": "O înregistrare necesită verificare.",
2300
+ "source": {
2301
+ "name": "getListings"
2302
+ }
2303
+ },
2304
+ {
2305
+ "type": "KpiTile",
2306
+ "id": "organic-rank",
2307
+ "label": "Google organic rank",
2308
+ "value": 12,
2309
+ "detail": "Poziția medie în rezultatele organice.",
2310
+ "source": {
2311
+ "name": "getGoogleOrganicRank"
2312
+ }
2313
+ },
2314
+ {
2315
+ "type": "KpiTile",
2316
+ "id": "maps-rank",
2317
+ "label": "Google Maps rank",
2318
+ "value": 4,
2319
+ "detail": "Poziția medie pe Google Maps.",
2320
+ "source": {
2321
+ "name": "getGoogleMapsRank"
2322
+ }
2323
+ },
2324
+ {
2325
+ "type": "KpiTile",
2326
+ "id": "ai-visibility",
2327
+ "label": "AI Visibility",
2328
+ "value": "61,4/100",
2329
+ "detail": "Vizibilitate în răspunsurile generate de AI.",
2330
+ "source": {
2331
+ "name": "getAiVisibility"
2332
+ }
2333
+ }
2334
+ ]
2335
+ }
2336
+ }
2337
+ },
2338
+ {
2339
+ "name": "data-visibility-overview-toned",
2340
+ "description": "AW-351: the visibility overview with the judgement tones a model may set (status accents, meter colours).",
2341
+ "expectedState": "data",
2342
+ "width": 672,
2343
+ "payload": {
2344
+ "title": "Vizibilitate online",
2345
+ "view": {
2346
+ "type": "Grid",
2347
+ "id": "visibility",
2348
+ "columns": 3,
2349
+ "children": [
2350
+ {
2351
+ "type": "KpiTile",
2352
+ "id": "google-profile",
2353
+ "label": "Google profile",
2354
+ "value": "Verificat · publicat",
2355
+ "detail": "Profilul este vizibil pe Google.",
2356
+ "source": {
2357
+ "name": "getGoogleProfile"
2358
+ },
2359
+ "tone": "success"
2360
+ },
2361
+ {
2362
+ "type": "KpiTile",
2363
+ "id": "reviews",
2364
+ "label": "Reviews",
2365
+ "value": "5/5 · 22 recenzii",
2366
+ "detail": "Recenzii publicate de clienți.",
2367
+ "source": {
2368
+ "name": "getReviews"
2369
+ },
2370
+ "tone": "success"
2371
+ },
2372
+ {
2373
+ "type": "KpiTile",
2374
+ "id": "listings",
2375
+ "label": "Listings",
2376
+ "value": "19 din 20 corecte",
2377
+ "detail": "O înregistrare necesită verificare.",
2378
+ "source": {
2379
+ "name": "getListings"
2380
+ },
2381
+ "tone": "warning"
2382
+ },
2383
+ {
2384
+ "type": "KpiTile",
2385
+ "id": "organic-rank",
2386
+ "label": "Google organic rank",
2387
+ "value": 12,
2388
+ "detail": "Poziția medie în rezultatele organice.",
2389
+ "source": {
2390
+ "name": "getGoogleOrganicRank"
2391
+ }
2392
+ },
2393
+ {
2394
+ "type": "KpiTile",
2395
+ "id": "maps-rank",
2396
+ "label": "Google Maps rank",
2397
+ "value": 4,
2398
+ "detail": "Poziția medie pe Google Maps.",
2399
+ "source": {
2400
+ "name": "getGoogleMapsRank"
2401
+ }
2402
+ },
2403
+ {
2404
+ "type": "KpiTile",
2405
+ "id": "ai-visibility",
2406
+ "label": "AI Visibility",
2407
+ "value": "61,4/100",
2408
+ "detail": "Vizibilitate în răspunsurile generate de AI.",
2409
+ "source": {
2410
+ "name": "getAiVisibility"
2411
+ },
2412
+ "tone": "warning"
2413
+ }
2414
+ ]
2415
+ }
2416
+ }
2417
+ },
2418
+ {
2419
+ "name": "data-kpi-numeric-suffixes",
2420
+ "description": "AW-351 synthetic fixture. Unsourced figures use bound literal state to exercise layout without provenance warnings; no customer facts are implied.",
2421
+ "expectedState": "data",
2422
+ "width": 672,
2423
+ "payload": {
2424
+ "view": {
2425
+ "type": "Grid",
2426
+ "id": "visibility",
2427
+ "columns": 3,
2428
+ "children": [
2429
+ {
2430
+ "type": "KpiTile",
2431
+ "id": "numeric-0",
2432
+ "label": "Metric 1",
2433
+ "value": {
2434
+ "$state": "fixture_numeric_0"
2435
+ }
2436
+ },
2437
+ {
2438
+ "type": "KpiTile",
2439
+ "id": "numeric-1",
2440
+ "label": "Metric 2",
2441
+ "value": {
2442
+ "$state": "fixture_numeric_1"
2443
+ },
2444
+ "unit": "%"
2445
+ },
2446
+ {
2447
+ "type": "KpiTile",
2448
+ "id": "numeric-2",
2449
+ "label": "Metric 3",
2450
+ "value": {
2451
+ "$state": "fixture_numeric_2"
2452
+ },
2453
+ "unit": "/100"
2454
+ },
2455
+ {
2456
+ "type": "KpiTile",
2457
+ "id": "numeric-3",
2458
+ "label": "Metric 4",
2459
+ "value": {
2460
+ "$state": "fixture_numeric_3"
2461
+ },
2462
+ "unit": "recenzii"
2463
+ },
2464
+ {
2465
+ "type": "KpiTile",
2466
+ "id": "numeric-4",
2467
+ "label": "Metric 5",
2468
+ "value": {
2469
+ "$state": "fixture_numeric_4"
2470
+ },
2471
+ "unit": "EUR / lună",
2472
+ "format": "currency",
2473
+ "currency": "EUR"
2474
+ },
2475
+ {
2476
+ "type": "KpiTile",
2477
+ "id": "numeric-5",
2478
+ "label": "Metric 6",
2479
+ "value": {
2480
+ "$state": "fixture_numeric_5"
2481
+ },
2482
+ "unit": "visits in the last 28 days",
2483
+ "format": "compact"
2484
+ }
2485
+ ]
2486
+ },
2487
+ "state": {
2488
+ "fixture_numeric_0": 8,
2489
+ "fixture_numeric_1": 0,
2490
+ "fixture_numeric_2": -12.5,
2491
+ "fixture_numeric_3": "61,4/100",
2492
+ "fixture_numeric_4": 113498,
2493
+ "fixture_numeric_5": 8200
2494
+ }
2495
+ }
2496
+ },
2497
+ {
2498
+ "name": "data-kpi-text-unicode",
2499
+ "description": "AW-351 synthetic fixture. Unsourced figures use bound literal state to exercise layout without provenance warnings; no customer facts are implied.",
2500
+ "expectedState": "data",
2501
+ "width": 672,
2502
+ "payload": {
2503
+ "view": {
2504
+ "type": "Grid",
2505
+ "id": "visibility",
2506
+ "columns": 3,
2507
+ "children": [
2508
+ {
2509
+ "type": "KpiTile",
2510
+ "id": "text-0",
2511
+ "label": "Status 1",
2512
+ "value": "Verified",
2513
+ "detail": "Updated today"
2514
+ },
2515
+ {
2516
+ "type": "KpiTile",
2517
+ "id": "text-1",
2518
+ "label": "Status 2",
2519
+ "value": "Verificat · publicat"
2520
+ },
2521
+ {
2522
+ "type": "KpiTile",
2523
+ "id": "text-2",
2524
+ "label": "Status 3",
2525
+ "value": {
2526
+ "$state": "fixture_text_2"
2527
+ },
2528
+ "detail": "Updated today"
2529
+ },
2530
+ {
2531
+ "type": "KpiTile",
2532
+ "id": "text-3",
2533
+ "label": "Status 4",
2534
+ "value": {
2535
+ "$state": "fixture_text_3"
2536
+ }
2537
+ },
2538
+ {
2539
+ "type": "KpiTile",
2540
+ "id": "text-4",
2541
+ "label": "Status 5",
2542
+ "value": "Informații verificate azi",
2543
+ "detail": "Updated today"
2544
+ },
2545
+ {
2546
+ "type": "KpiTile",
2547
+ "id": "text-5",
2548
+ "label": "Status 6",
2549
+ "value": "Știință, încredere și țară"
2550
+ }
2551
+ ]
2552
+ },
2553
+ "state": {
2554
+ "fixture_text_2": "5/5 · 22 recenzii",
2555
+ "fixture_text_3": "19 din 20 corecte"
2556
+ }
2557
+ }
2558
+ },
2559
+ {
2560
+ "name": "data-kpi-long-text",
2561
+ "description": "AW-351 synthetic fixture. Unsourced figures use literal datasets to exercise layout without provenance warnings; no customer facts are implied.",
2562
+ "expectedState": "data",
2563
+ "width": 672,
2564
+ "payload": {
2565
+ "view": {
2566
+ "type": "Grid",
2567
+ "id": "visibility",
2568
+ "columns": 2,
2569
+ "children": [
2570
+ {
2571
+ "type": "KpiTile",
2572
+ "id": "long-status",
2573
+ "label": "Google profile",
2574
+ "value": "Profil verificat și publicat; informațiile despre companie sunt actualizate în toate directoarele disponibile.",
2575
+ "detail": "Date actualizate pentru toate locațiile companiei în ultimele douăzeci și opt de zile, inclusiv înregistrările care necesită verificare.",
2576
+ "source": {
2577
+ "name": "getGoogleBusinessProfileVerificationAndPublicationStatusForAllLocations"
2578
+ }
2579
+ },
2580
+ {
2581
+ "type": "KpiTile",
2582
+ "id": "compound",
2583
+ "label": "Status",
2584
+ "value": "Donaudampfschifffahrtsgesellschaftskapitän"
2585
+ }
2586
+ ]
2587
+ }
2588
+ }
2589
+ },
2590
+ {
2591
+ "name": "data-kpi-mixed-optional",
2592
+ "description": "AW-351 synthetic fixture. Unsourced figures use bound literal state to exercise layout without provenance warnings; no customer facts are implied.",
2593
+ "expectedState": "data",
2594
+ "width": 672,
2595
+ "payload": {
2596
+ "view": {
2597
+ "type": "Grid",
2598
+ "id": "visibility",
2599
+ "columns": 4,
2600
+ "children": [
2601
+ {
2602
+ "type": "KpiTile",
2603
+ "id": "mixed-0",
2604
+ "label": "Metric 1",
2605
+ "value": {
2606
+ "$state": "fixture_mixed_0"
2607
+ }
2608
+ },
2609
+ {
2610
+ "type": "KpiTile",
2611
+ "id": "mixed-1",
2612
+ "label": "Metric 2",
2613
+ "value": "Verificat · publicat",
2614
+ "detail": "Updated today",
2615
+ "unit": "%",
2616
+ "delta": 5,
2617
+ "higherIsBetter": false,
2618
+ "deltaLabel": "vs previous month",
2619
+ "source": {
2620
+ "name": "getGoogleProfile"
2621
+ }
2622
+ },
2623
+ {
2624
+ "type": "KpiTile",
2625
+ "id": "mixed-2",
2626
+ "label": "Metric 3",
2627
+ "value": 12,
2628
+ "detail": "Results collected during the last twenty-eight days",
2629
+ "unit": "visits in the last 28 days",
2630
+ "delta": 0,
2631
+ "higherIsBetter": true,
2632
+ "deltaLabel": "vs previous month",
2633
+ "source": {
2634
+ "name": "Google profile",
2635
+ "url": "https://example.com/profile"
2636
+ }
2637
+ },
2638
+ {
2639
+ "type": "KpiTile",
2640
+ "id": "mixed-3",
2641
+ "label": "Metric 4",
2642
+ "value": "19 din 20 corecte",
2643
+ "detail": "Date actualizate pentru toate locațiile companiei în ultimele douăzeci și opt de zile, inclusiv înregistrările care necesită verificare.",
2644
+ "delta": -0.5,
2645
+ "higherIsBetter": false,
2646
+ "deltaLabel": "vs previous month",
2647
+ "source": {
2648
+ "name": "getGoogleBusinessProfileVerificationAndPublicationStatusForAllLocations"
2649
+ }
2650
+ },
2651
+ {
2652
+ "type": "KpiTile",
2653
+ "id": "mixed-4",
2654
+ "label": "Metric 5",
2655
+ "value": {
2656
+ "$state": "fixture_mixed_4"
2657
+ }
2658
+ },
2659
+ {
2660
+ "type": "KpiTile",
2661
+ "id": "mixed-5",
2662
+ "label": "Metric 6",
2663
+ "value": "Știință, încredere și țară",
2664
+ "detail": "Updated today",
2665
+ "unit": "%",
2666
+ "delta": 5,
2667
+ "higherIsBetter": false,
2668
+ "deltaLabel": "vs previous month",
2669
+ "source": {
2670
+ "name": "getGoogleProfile"
2671
+ }
2672
+ },
2673
+ {
2674
+ "type": "KpiTile",
2675
+ "id": "mixed-6",
2676
+ "label": "Metric 7",
2677
+ "value": 12,
2678
+ "detail": "Results collected during the last twenty-eight days",
2679
+ "unit": "visits in the last 28 days",
2680
+ "delta": 0,
2681
+ "higherIsBetter": true,
2682
+ "deltaLabel": "vs previous month",
2683
+ "source": {
2684
+ "name": "Google profile",
2685
+ "url": "https://example.com/profile"
2686
+ }
2687
+ },
2688
+ {
2689
+ "type": "KpiTile",
2690
+ "id": "mixed-7",
2691
+ "label": "Metric 8",
2692
+ "value": "Verificat · publicat",
2693
+ "detail": "Date actualizate pentru toate locațiile companiei în ultimele douăzeci și opt de zile, inclusiv înregistrările care necesită verificare.",
2694
+ "delta": -0.5,
2695
+ "higherIsBetter": false,
2696
+ "deltaLabel": "vs previous month",
2697
+ "source": {
2698
+ "name": "getGoogleBusinessProfileVerificationAndPublicationStatusForAllLocations"
2699
+ }
2700
+ }
2701
+ ]
2702
+ },
2703
+ "state": {
2704
+ "fixture_mixed_0": 12,
2705
+ "fixture_mixed_4": 12
2706
+ }
2707
+ }
2708
+ },
2709
+ {
2710
+ "name": "data-visibility-overview-en",
2711
+ "description": "AW-351 synthetic fixture. Unsourced figures use bound literal state to exercise layout without provenance warnings; no customer facts are implied.",
2712
+ "expectedState": "data",
2713
+ "width": 672,
2714
+ "payload": {
2715
+ "view": {
2716
+ "type": "Grid",
2717
+ "id": "visibility",
2718
+ "columns": 3,
2719
+ "children": [
2720
+ {
2721
+ "type": "KpiTile",
2722
+ "id": "google-profile",
2723
+ "label": "Google business profile",
2724
+ "value": "Verified · published",
2725
+ "detail": "Updated today",
2726
+ "source": {
2727
+ "name": "getGoogleProfile"
2728
+ }
2729
+ },
2730
+ {
2731
+ "type": "KpiTile",
2732
+ "id": "reviews",
2733
+ "label": "Customer reviews",
2734
+ "value": "5/5 · 22 reviews",
2735
+ "detail": "Results collected during the last twenty-eight days",
2736
+ "source": {
2737
+ "name": "getReviews"
2738
+ }
2739
+ },
2740
+ {
2741
+ "type": "KpiTile",
2742
+ "id": "listings",
2743
+ "label": "Directory listings",
2744
+ "value": "19 of 20 correct",
2745
+ "detail": "Updated today",
2746
+ "source": {
2747
+ "name": "getListings"
2748
+ }
2749
+ },
2750
+ {
2751
+ "type": "KpiTile",
2752
+ "id": "organic-rank",
2753
+ "label": "Google organic rank",
2754
+ "value": 12,
2755
+ "detail": "Results collected during the last twenty-eight days",
2756
+ "source": {
2757
+ "name": "getGoogleOrganicRank"
2758
+ }
2759
+ },
2760
+ {
2761
+ "type": "KpiTile",
2762
+ "id": "maps-rank",
2763
+ "label": "Google Maps rank",
2764
+ "value": 4,
2765
+ "detail": "Updated today",
2766
+ "source": {
2767
+ "name": "getGoogleMapsRank"
2768
+ }
2769
+ },
2770
+ {
2771
+ "type": "KpiTile",
2772
+ "id": "ai-visibility",
2773
+ "label": "AI Visibility",
2774
+ "value": "61,4/100",
2775
+ "detail": "Results collected during the last twenty-eight days",
2776
+ "source": {
2777
+ "name": "getAiVisibility"
2778
+ }
2779
+ },
2780
+ {
2781
+ "type": "KpiTile",
2782
+ "id": "locale-decimal",
2783
+ "label": "Score",
2784
+ "value": {
2785
+ "$state": "fixture_locale_decimal"
2786
+ }
2787
+ },
2788
+ {
2789
+ "type": "KpiTile",
2790
+ "id": "locale-currency",
2791
+ "label": "Budget",
2792
+ "value": {
2793
+ "$state": "fixture_locale_currency"
2794
+ },
2795
+ "format": "currency",
2796
+ "currency": "EUR"
2797
+ }
2798
+ ]
2799
+ },
2800
+ "state": {
2801
+ "fixture_locale_decimal": 12.5,
2802
+ "fixture_locale_currency": 113498
2803
+ }
2804
+ }
2805
+ },
2806
+ {
2807
+ "name": "data-visibility-overview-de",
2808
+ "description": "AW-351 synthetic fixture. Unsourced figures use bound literal state to exercise layout without provenance warnings; no customer facts are implied.",
2809
+ "expectedState": "data",
2810
+ "width": 672,
2811
+ "payload": {
2812
+ "view": {
2813
+ "type": "Grid",
2814
+ "id": "visibility",
2815
+ "columns": 3,
2816
+ "children": [
2817
+ {
2818
+ "type": "KpiTile",
2819
+ "id": "google-profile",
2820
+ "label": "Google-Unternehmensprofil",
2821
+ "value": "Verifiziert · veröffentlicht",
2822
+ "detail": "Heute aktualisiert",
2823
+ "source": {
2824
+ "name": "getGoogleProfile"
2825
+ }
2826
+ },
2827
+ {
2828
+ "type": "KpiTile",
2829
+ "id": "reviews",
2830
+ "label": "Kundenbewertungen",
2831
+ "value": "5/5 · 22 Bewertungen",
2832
+ "detail": "Ergebnisse aus den vergangenen achtundzwanzig Tagen",
2833
+ "source": {
2834
+ "name": "getReviews"
2835
+ }
2836
+ },
2837
+ {
2838
+ "type": "KpiTile",
2839
+ "id": "listings",
2840
+ "label": "Branchenverzeichnisse",
2841
+ "value": "19 von 20 korrekt",
2842
+ "detail": "Heute aktualisiert",
2843
+ "source": {
2844
+ "name": "getListings"
2845
+ }
2846
+ },
2847
+ {
2848
+ "type": "KpiTile",
2849
+ "id": "organic-rank",
2850
+ "label": "Organische Google-Platzierung",
2851
+ "value": 12,
2852
+ "detail": "Ergebnisse aus den vergangenen achtundzwanzig Tagen",
2853
+ "source": {
2854
+ "name": "getGoogleOrganicRank"
2855
+ }
2856
+ },
2857
+ {
2858
+ "type": "KpiTile",
2859
+ "id": "maps-rank",
2860
+ "label": "Google-Maps-Platzierung",
2861
+ "value": 4,
2862
+ "detail": "Heute aktualisiert",
2863
+ "source": {
2864
+ "name": "getGoogleMapsRank"
2865
+ }
2866
+ },
2867
+ {
2868
+ "type": "KpiTile",
2869
+ "id": "ai-visibility",
2870
+ "label": "KI-Sichtbarkeit",
2871
+ "value": "61,4/100",
2872
+ "detail": "Ergebnisse aus den vergangenen achtundzwanzig Tagen",
2873
+ "source": {
2874
+ "name": "getAiVisibility"
2875
+ }
2876
+ },
2877
+ {
2878
+ "type": "KpiTile",
2879
+ "id": "locale-decimal",
2880
+ "label": "Score",
2881
+ "value": {
2882
+ "$state": "fixture_locale_decimal"
2883
+ }
2884
+ },
2885
+ {
2886
+ "type": "KpiTile",
2887
+ "id": "locale-currency",
2888
+ "label": "Budget",
2889
+ "value": {
2890
+ "$state": "fixture_locale_currency"
2891
+ },
2892
+ "format": "currency",
2893
+ "currency": "EUR"
2894
+ }
2895
+ ]
2896
+ },
2897
+ "state": {
2898
+ "fixture_locale_decimal": 12.5,
2899
+ "fixture_locale_currency": 113498
2900
+ }
2901
+ }
2902
+ },
2903
+ {
2904
+ "name": "data-kpi-pending",
2905
+ "description": "AW-351 synthetic fixture. Unsourced figures use literal datasets to exercise layout without provenance warnings; no customer facts are implied.",
2906
+ "expectedState": "loading",
2907
+ "width": 672,
2908
+ "payload": {
2909
+ "view": {
2910
+ "type": "KpiTile",
2911
+ "id": "pending-metric",
2912
+ "label": "Besucher",
2913
+ "value": {
2914
+ "$from": {
2915
+ "toolCall": "call_7",
2916
+ "path": "$.total",
2917
+ "state": "pending"
2918
+ }
2919
+ }
2920
+ }
2921
+ }
2922
+ },
2923
+ {
2924
+ "name": "data-kpi-empty",
2925
+ "description": "AW-351 synthetic fixture. Unsourced figures use literal datasets to exercise layout without provenance warnings; no customer facts are implied.",
2926
+ "expectedState": "empty",
2927
+ "width": 672,
2928
+ "payload": {
2929
+ "state": {
2930
+ "missing": null
2931
+ },
2932
+ "view": {
2933
+ "type": "KpiTile",
2934
+ "id": "empty-metric",
2935
+ "label": "Conversions",
2936
+ "value": {
2937
+ "$state": "missing"
2938
+ }
2939
+ }
2940
+ }
2941
+ },
2942
+ {
2943
+ "name": "data-kpi-pending-mixed",
2944
+ "description": "AW-351 synthetic fixture. Unsourced figures use bound literal state to exercise layout without provenance warnings; no customer facts are implied.",
2945
+ "expectedState": "loading",
2946
+ "width": 672,
2947
+ "payload": {
2948
+ "view": {
2949
+ "type": "Grid",
2950
+ "id": "visibility",
2951
+ "columns": 3,
2952
+ "children": [
2953
+ {
2954
+ "type": "KpiTile",
2955
+ "id": "pending-metric",
2956
+ "label": "Pending",
2957
+ "value": {
2958
+ "$from": {
2959
+ "toolCall": "call_7",
2960
+ "path": "$.total",
2961
+ "state": "pending"
2962
+ }
2963
+ }
2964
+ },
2965
+ {
2966
+ "type": "KpiTile",
2967
+ "id": "resolved-metric",
2968
+ "label": "Resolved",
2969
+ "value": {
2970
+ "$state": "fixture_resolved_metric"
2971
+ }
2972
+ },
2973
+ {
2974
+ "type": "KpiTile",
2975
+ "id": "empty-metric",
2976
+ "label": "Empty",
2977
+ "value": {
2978
+ "$state": "missing"
2979
+ }
2980
+ },
2981
+ {
2982
+ "type": "KpiTile",
2983
+ "id": "text-metric",
2984
+ "label": "Status",
2985
+ "value": "Verified"
2986
+ }
2987
+ ]
2988
+ },
2989
+ "state": {
2990
+ "missing": null,
2991
+ "fixture_resolved_metric": 22
2992
+ }
2993
+ }
2994
+ },
2995
+ {
2996
+ "name": "data-kpi-failed",
2997
+ "description": "AW-351 synthetic fixture. Unsourced figures use literal datasets to exercise layout without provenance warnings; no customer facts are implied.",
2998
+ "expectedState": "error",
2999
+ "width": 672,
3000
+ "payload": {
3001
+ "data": {
3002
+ "metric": {
3003
+ "$from": {
3004
+ "toolCall": "call_7",
3005
+ "path": "$.total",
3006
+ "state": "failed"
3007
+ }
3008
+ }
3009
+ },
3010
+ "view": {
3011
+ "type": "KpiTile",
3012
+ "id": "failed-metric",
3013
+ "label": "Reviews",
3014
+ "value": {
3015
+ "$data": "metric"
3016
+ }
3017
+ }
3018
+ }
3019
+ },
3020
+ {
3021
+ "name": "data-kpi-source-no-source",
3022
+ "description": "AW-351 synthetic source-footer fixture; bound literal state exercises layout without implying customer facts.",
3023
+ "expectedState": "data",
3024
+ "width": 672,
3025
+ "payload": {
3026
+ "state": {
3027
+ "metric": 4
3028
+ },
3029
+ "view": {
3030
+ "type": "KpiTile",
3031
+ "id": "no-source",
3032
+ "label": "No source",
3033
+ "value": {
3034
+ "$state": "metric"
3035
+ }
3036
+ }
3037
+ }
3038
+ },
3039
+ {
3040
+ "name": "data-kpi-source-name-only",
3041
+ "description": "AW-351 synthetic source-footer fixture; bound literal state exercises layout without implying customer facts.",
3042
+ "expectedState": "data",
3043
+ "width": 672,
3044
+ "payload": {
3045
+ "state": {
3046
+ "metric": 4
3047
+ },
3048
+ "view": {
3049
+ "type": "KpiTile",
3050
+ "id": "name-only",
3051
+ "label": "Name-only source",
3052
+ "value": {
3053
+ "$state": "metric"
3054
+ },
3055
+ "source": {
3056
+ "name": "getRankings"
3057
+ }
3058
+ }
3059
+ }
3060
+ },
3061
+ {
3062
+ "name": "data-kpi-source-named-url",
3063
+ "description": "AW-351 synthetic source-footer fixture; bound literal state exercises layout without implying customer facts.",
3064
+ "expectedState": "data",
3065
+ "width": 672,
3066
+ "payload": {
3067
+ "state": {
3068
+ "metric": 4
3069
+ },
3070
+ "view": {
3071
+ "type": "KpiTile",
3072
+ "id": "named-url",
3073
+ "label": "Named URL",
3074
+ "value": {
3075
+ "$state": "metric"
3076
+ },
3077
+ "source": {
3078
+ "name": "Rankings report",
3079
+ "url": "https://example.com/rankings"
3080
+ }
3081
+ }
3082
+ }
3083
+ },
3084
+ {
3085
+ "name": "data-kpi-source-host-url",
3086
+ "description": "AW-351 synthetic source-footer fixture; bound literal state exercises layout without implying customer facts.",
3087
+ "expectedState": "data",
3088
+ "width": 672,
3089
+ "payload": {
3090
+ "state": {
3091
+ "metric": 4
3092
+ },
3093
+ "view": {
3094
+ "type": "KpiTile",
3095
+ "id": "host-url",
3096
+ "label": "URL without a name",
3097
+ "value": {
3098
+ "$state": "metric"
3099
+ },
3100
+ "source": {
3101
+ "url": "https://example.com/rankings"
3102
+ }
3103
+ }
3104
+ }
3105
+ },
3106
+ {
3107
+ "name": "data-kpi-source-long-name",
3108
+ "description": "AW-351 synthetic source-footer fixture; bound literal state exercises layout without implying customer facts.",
3109
+ "expectedState": "data",
3110
+ "width": 672,
3111
+ "payload": {
3112
+ "state": {
3113
+ "metric": 4
3114
+ },
3115
+ "view": {
3116
+ "type": "KpiTile",
3117
+ "id": "long-name",
3118
+ "label": "Long source name",
3119
+ "value": {
3120
+ "$state": "metric"
3121
+ },
3122
+ "source": {
3123
+ "name": "Rankings report for all business locations during the previous twenty-eight days",
3124
+ "url": "https://example.com/rankings"
3125
+ }
3126
+ }
3127
+ }
3128
+ },
3129
+ {
3130
+ "name": "data-kpi-source-mixed",
3131
+ "description": "AW-351 synthetic source-footer fixture; bound literal state exercises layout without implying customer facts.",
3132
+ "expectedState": "data",
3133
+ "width": 960,
3134
+ "payload": {
3135
+ "state": {
3136
+ "metric": 4
3137
+ },
3138
+ "view": {
3139
+ "type": "Grid",
3140
+ "id": "source-mixed",
3141
+ "columns": 3,
3142
+ "children": [
3143
+ {
3144
+ "type": "KpiTile",
3145
+ "id": "no-source",
3146
+ "label": "No source",
3147
+ "value": {
3148
+ "$state": "metric"
3149
+ }
3150
+ },
3151
+ {
3152
+ "type": "KpiTile",
3153
+ "id": "name-only",
3154
+ "label": "Name-only source",
3155
+ "value": {
3156
+ "$state": "metric"
3157
+ },
3158
+ "source": {
3159
+ "name": "getRankings"
3160
+ }
3161
+ },
3162
+ {
3163
+ "type": "KpiTile",
3164
+ "id": "named-url",
3165
+ "label": "Named URL",
3166
+ "value": {
3167
+ "$state": "metric"
3168
+ },
3169
+ "source": {
3170
+ "name": "Rankings report",
3171
+ "url": "https://example.com/rankings"
3172
+ }
3173
+ },
3174
+ {
3175
+ "type": "KpiTile",
3176
+ "id": "host-url",
3177
+ "label": "URL without a name",
3178
+ "value": {
3179
+ "$state": "metric"
3180
+ },
3181
+ "source": {
3182
+ "url": "https://example.com/rankings"
3183
+ }
3184
+ },
3185
+ {
3186
+ "type": "KpiTile",
3187
+ "id": "long-name",
3188
+ "label": "Long source name",
3189
+ "value": {
3190
+ "$state": "metric"
3191
+ },
3192
+ "source": {
3193
+ "name": "Rankings report for all business locations during the previous twenty-eight days",
3194
+ "url": "https://example.com/rankings"
3195
+ }
3196
+ },
3197
+ {
3198
+ "type": "KpiTile",
3199
+ "id": "invalid",
3200
+ "label": "Invalid URL",
3201
+ "value": {
3202
+ "$state": "metric"
3203
+ },
3204
+ "source": {
3205
+ "name": "Invalid report",
3206
+ "url": "https://"
3207
+ }
3208
+ }
3209
+ ]
3210
+ }
3211
+ }
3212
+ },
3213
+ {
3214
+ "name": "data-kpi-source-mixed-narrow",
3215
+ "description": "AW-351 synthetic source-footer fixture; bound literal state exercises layout without implying customer facts.",
3216
+ "expectedState": "data",
3217
+ "width": 320,
3218
+ "payload": {
3219
+ "state": {
3220
+ "metric": 4
3221
+ },
3222
+ "view": {
3223
+ "type": "Grid",
3224
+ "id": "source-mixed",
3225
+ "columns": 3,
3226
+ "children": [
3227
+ {
3228
+ "type": "KpiTile",
3229
+ "id": "no-source",
3230
+ "label": "No source",
3231
+ "value": {
3232
+ "$state": "metric"
3233
+ }
3234
+ },
3235
+ {
3236
+ "type": "KpiTile",
3237
+ "id": "name-only",
3238
+ "label": "Name-only source",
3239
+ "value": {
3240
+ "$state": "metric"
3241
+ },
3242
+ "source": {
3243
+ "name": "getRankings"
3244
+ }
3245
+ },
3246
+ {
3247
+ "type": "KpiTile",
3248
+ "id": "named-url",
3249
+ "label": "Named URL",
3250
+ "value": {
3251
+ "$state": "metric"
3252
+ },
3253
+ "source": {
3254
+ "name": "Rankings report",
3255
+ "url": "https://example.com/rankings"
3256
+ }
3257
+ },
3258
+ {
3259
+ "type": "KpiTile",
3260
+ "id": "host-url",
3261
+ "label": "URL without a name",
3262
+ "value": {
3263
+ "$state": "metric"
3264
+ },
3265
+ "source": {
3266
+ "url": "https://example.com/rankings"
3267
+ }
3268
+ },
3269
+ {
3270
+ "type": "KpiTile",
3271
+ "id": "long-name",
3272
+ "label": "Long source name",
3273
+ "value": {
3274
+ "$state": "metric"
3275
+ },
3276
+ "source": {
3277
+ "name": "Rankings report for all business locations during the previous twenty-eight days",
3278
+ "url": "https://example.com/rankings"
3279
+ }
3280
+ },
3281
+ {
3282
+ "type": "KpiTile",
3283
+ "id": "invalid",
3284
+ "label": "Invalid URL",
3285
+ "value": {
3286
+ "$state": "metric"
3287
+ },
3288
+ "source": {
3289
+ "name": "Invalid report",
3290
+ "url": "https://"
3291
+ }
3292
+ }
3293
+ ]
3294
+ }
3295
+ }
3296
+ }
3297
+ ]
3298
+ }