@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,892 @@
1
+ {
2
+ "wireName": "ComposedView",
3
+ "fixtures": [
4
+ {
5
+ "name": "layout-analytics-dashboard",
6
+ "description": "Reference 05: one raised Surface with title, subtitle and the period tabs in its header row, a two-column Grid of KPI tiles, a nested flat Surface with a header badge around the line chart, a Divider and the channel section (a row Stack with the label left and the caption right).",
7
+ "payload": {
8
+ "state": {
9
+ "period": "7d"
10
+ },
11
+ "data": {
12
+ "week": [
13
+ {
14
+ "date": "Mo",
15
+ "visitors": 980
16
+ },
17
+ {
18
+ "date": "Di",
19
+ "visitors": 1120
20
+ },
21
+ {
22
+ "date": "Mi",
23
+ "visitors": 1040
24
+ },
25
+ {
26
+ "date": "Do",
27
+ "visitors": 1260
28
+ },
29
+ {
30
+ "date": "Fr",
31
+ "visitors": 1130
32
+ },
33
+ {
34
+ "date": "Sa",
35
+ "visitors": 1460
36
+ },
37
+ {
38
+ "date": "So",
39
+ "visitors": 1210
40
+ }
41
+ ],
42
+ "month": [
43
+ {
44
+ "date": "Woche 1",
45
+ "visitors": 6800
46
+ },
47
+ {
48
+ "date": "Woche 2",
49
+ "visitors": 7900
50
+ },
51
+ {
52
+ "date": "Woche 3",
53
+ "visitors": 8600
54
+ },
55
+ {
56
+ "date": "Woche 4",
57
+ "visitors": 9300
58
+ }
59
+ ],
60
+ "channels": [
61
+ {
62
+ "name": "Organic",
63
+ "share": 54
64
+ },
65
+ {
66
+ "name": "Paid",
67
+ "share": 28
68
+ },
69
+ {
70
+ "name": "Direct",
71
+ "share": 18
72
+ }
73
+ ]
74
+ },
75
+ "computed": {
76
+ "rows": "period == \"7d\" ? week : month",
77
+ "visitors": "period == \"7d\" ? 8200 : 32600",
78
+ "visitorsDelta": "period == \"7d\" ? 12.4 : 9.8",
79
+ "conversion": "period == \"7d\" ? \"4,6 %\" : \"4,3 %\"",
80
+ "conversionDelta": "period == \"7d\" ? 0.3 : -0.2"
81
+ },
82
+ "view": {
83
+ "type": "Surface",
84
+ "title": "Analytics",
85
+ "subtitle": "Interaktive Demo · Beispieldaten",
86
+ "slots": {
87
+ "header": [
88
+ {
89
+ "type": "Tabs",
90
+ "options": [
91
+ {
92
+ "id": "7d",
93
+ "label": "7 Tage"
94
+ },
95
+ {
96
+ "id": "30d",
97
+ "label": "30 Tage"
98
+ }
99
+ ],
100
+ "value": {
101
+ "$state": "period"
102
+ },
103
+ "onChange": {
104
+ "set": "period"
105
+ }
106
+ }
107
+ ]
108
+ },
109
+ "children": [
110
+ {
111
+ "type": "Grid",
112
+ "columns": 2,
113
+ "children": [
114
+ {
115
+ "type": "KpiTile",
116
+ "label": "Besucher",
117
+ "value": {
118
+ "$computed": "visitors"
119
+ },
120
+ "delta": {
121
+ "$computed": "visitorsDelta"
122
+ },
123
+ "deltaFormat": "percent"
124
+ },
125
+ {
126
+ "type": "KpiTile",
127
+ "label": "Conversion Rate",
128
+ "value": {
129
+ "$computed": "conversion"
130
+ },
131
+ "delta": {
132
+ "$computed": "conversionDelta"
133
+ },
134
+ "deltaLabel": "PP"
135
+ }
136
+ ]
137
+ },
138
+ {
139
+ "type": "Surface",
140
+ "title": "Besucherentwicklung",
141
+ "slots": {
142
+ "header": [
143
+ {
144
+ "type": "Badge",
145
+ "text": "Live-Ansicht"
146
+ }
147
+ ]
148
+ },
149
+ "children": [
150
+ {
151
+ "type": "Chart",
152
+ "kind": "line",
153
+ "data": {
154
+ "$computed": "rows"
155
+ },
156
+ "x": "date",
157
+ "series": [
158
+ {
159
+ "field": "visitors",
160
+ "label": "Besucher"
161
+ }
162
+ ]
163
+ }
164
+ ]
165
+ },
166
+ {
167
+ "type": "Divider"
168
+ },
169
+ {
170
+ "type": "Stack",
171
+ "gap": "small",
172
+ "children": [
173
+ {
174
+ "type": "Stack",
175
+ "direction": "row",
176
+ "justify": "between",
177
+ "children": [
178
+ {
179
+ "type": "Text",
180
+ "text": "Kanäle",
181
+ "weight": "bold"
182
+ },
183
+ {
184
+ "type": "Caption",
185
+ "text": "Anteil am Traffic"
186
+ }
187
+ ]
188
+ },
189
+ {
190
+ "type": "Chart",
191
+ "kind": "bar",
192
+ "horizontal": true,
193
+ "data": {
194
+ "$data": "channels"
195
+ },
196
+ "x": "name",
197
+ "series": [
198
+ {
199
+ "field": "share",
200
+ "label": "Anteil"
201
+ }
202
+ ],
203
+ "valueFormat": "percent"
204
+ }
205
+ ]
206
+ }
207
+ ]
208
+ }
209
+ },
210
+ "expectedState": "data",
211
+ "width": 528,
212
+ "interactions": [
213
+ {
214
+ "name": "pick 30 Tage",
215
+ "click": {
216
+ "text": "30 Tage"
217
+ }
218
+ },
219
+ {
220
+ "name": "back to 7 Tage",
221
+ "click": {
222
+ "text": "7 Tage"
223
+ }
224
+ }
225
+ ]
226
+ },
227
+ {
228
+ "name": "layout-element-overview-grid",
229
+ "description": "Reference 11: a two-column Grid of six Surfaces, each an icon, a bold title and a muted description; drops to one column on a narrow pane.",
230
+ "payload": {
231
+ "title": "Welche weiteren Elemente sind möglich?",
232
+ "view": {
233
+ "type": "Grid",
234
+ "columns": 2,
235
+ "children": [
236
+ {
237
+ "type": "Surface",
238
+ "density": "compact",
239
+ "children": [
240
+ {
241
+ "type": "Stack",
242
+ "direction": "row",
243
+ "children": [
244
+ {
245
+ "type": "Icon",
246
+ "name": "tag",
247
+ "tone": "muted"
248
+ }
249
+ ]
250
+ },
251
+ {
252
+ "type": "Stack",
253
+ "gap": "xsmall",
254
+ "children": [
255
+ {
256
+ "type": "Text",
257
+ "text": "Produktkarten",
258
+ "weight": "bold"
259
+ },
260
+ {
261
+ "type": "Text",
262
+ "text": "Produktfotos, Preise, Händler und Vergleiche",
263
+ "tone": "muted"
264
+ }
265
+ ]
266
+ }
267
+ ]
268
+ },
269
+ {
270
+ "type": "Surface",
271
+ "density": "compact",
272
+ "children": [
273
+ {
274
+ "type": "Stack",
275
+ "direction": "row",
276
+ "children": [
277
+ {
278
+ "type": "Icon",
279
+ "name": "calendar",
280
+ "tone": "muted"
281
+ }
282
+ ]
283
+ },
284
+ {
285
+ "type": "Stack",
286
+ "gap": "xsmall",
287
+ "children": [
288
+ {
289
+ "type": "Text",
290
+ "text": "Kalender & Planung",
291
+ "weight": "bold"
292
+ },
293
+ {
294
+ "type": "Text",
295
+ "text": "Datumswahl, Filter und Terminansichten",
296
+ "tone": "muted"
297
+ }
298
+ ]
299
+ }
300
+ ]
301
+ },
302
+ {
303
+ "type": "Surface",
304
+ "density": "compact",
305
+ "children": [
306
+ {
307
+ "type": "Stack",
308
+ "direction": "row",
309
+ "children": [
310
+ {
311
+ "type": "Icon",
312
+ "name": "directions",
313
+ "tone": "muted"
314
+ }
315
+ ]
316
+ },
317
+ {
318
+ "type": "Stack",
319
+ "gap": "xsmall",
320
+ "children": [
321
+ {
322
+ "type": "Text",
323
+ "text": "Reiseplaner",
324
+ "weight": "bold"
325
+ },
326
+ {
327
+ "type": "Text",
328
+ "text": "Routen mit mehreren Stopps auf Karten",
329
+ "tone": "muted"
330
+ }
331
+ ]
332
+ }
333
+ ]
334
+ },
335
+ {
336
+ "type": "Surface",
337
+ "density": "compact",
338
+ "children": [
339
+ {
340
+ "type": "Stack",
341
+ "direction": "row",
342
+ "children": [
343
+ {
344
+ "type": "Icon",
345
+ "name": "barChart",
346
+ "tone": "muted"
347
+ }
348
+ ]
349
+ },
350
+ {
351
+ "type": "Stack",
352
+ "gap": "xsmall",
353
+ "children": [
354
+ {
355
+ "type": "Text",
356
+ "text": "Daten-Dashboards",
357
+ "weight": "bold"
358
+ },
359
+ {
360
+ "type": "Text",
361
+ "text": "KPIs, Diagramme und dynamische Tabellen",
362
+ "tone": "muted"
363
+ }
364
+ ]
365
+ }
366
+ ]
367
+ },
368
+ {
369
+ "type": "Surface",
370
+ "density": "compact",
371
+ "children": [
372
+ {
373
+ "type": "Stack",
374
+ "direction": "row",
375
+ "children": [
376
+ {
377
+ "type": "Icon",
378
+ "name": "photo",
379
+ "tone": "muted"
380
+ }
381
+ ]
382
+ },
383
+ {
384
+ "type": "Stack",
385
+ "gap": "xsmall",
386
+ "children": [
387
+ {
388
+ "type": "Text",
389
+ "text": "Medien",
390
+ "weight": "bold"
391
+ },
392
+ {
393
+ "type": "Text",
394
+ "text": "Fotos, Galerien und verlinkte Videos",
395
+ "tone": "muted"
396
+ }
397
+ ]
398
+ }
399
+ ]
400
+ },
401
+ {
402
+ "type": "Surface",
403
+ "density": "compact",
404
+ "children": [
405
+ {
406
+ "type": "Stack",
407
+ "direction": "row",
408
+ "children": [
409
+ {
410
+ "type": "Icon",
411
+ "name": "edit",
412
+ "tone": "muted"
413
+ }
414
+ ]
415
+ },
416
+ {
417
+ "type": "Stack",
418
+ "gap": "xsmall",
419
+ "children": [
420
+ {
421
+ "type": "Text",
422
+ "text": "Interaktive Oberflächen",
423
+ "weight": "bold"
424
+ },
425
+ {
426
+ "type": "Text",
427
+ "text": "Formulare, Auswahlfelder und Aktionen",
428
+ "tone": "muted"
429
+ }
430
+ ]
431
+ }
432
+ ]
433
+ }
434
+ ]
435
+ }
436
+ },
437
+ "expectedState": "data",
438
+ "width": 528
439
+ },
440
+ {
441
+ "name": "layout-analytics-studio",
442
+ "description": "Reference 52 (the layout parts): the raised Surface with its header badge, a nested Surface with the 'Methodik' Popover at the end of its title row, a three-column KPI Grid, the channel Carousel (two slides visible, next arrow) repeated over a dataset with $item, and the action row Stack.",
443
+ "payload": {
444
+ "state": {
445
+ "period": "7d"
446
+ },
447
+ "data": {
448
+ "channels": [
449
+ {
450
+ "name": "Organic",
451
+ "visitors": 4190,
452
+ "share": "51,1 % Anteil"
453
+ },
454
+ {
455
+ "name": "Paid",
456
+ "visitors": 2620,
457
+ "share": "32,0 % Anteil"
458
+ },
459
+ {
460
+ "name": "Direct",
461
+ "visitors": 1390,
462
+ "share": "16,9 % Anteil"
463
+ }
464
+ ]
465
+ },
466
+ "computed": {
467
+ "visitors": "period == \"7d\" ? 8200 : 32600",
468
+ "conversions": "period == \"7d\" ? 354 : 1402"
469
+ },
470
+ "actions": {
471
+ "copyJson": {
472
+ "type": "copy",
473
+ "value": {
474
+ "$data": "channels"
475
+ }
476
+ },
477
+ "reset": {
478
+ "type": "resetState"
479
+ }
480
+ },
481
+ "view": {
482
+ "type": "Surface",
483
+ "title": "Analytics Studio",
484
+ "subtitle": "Interaktiver Komponenten-Test · Demo-Daten",
485
+ "slots": {
486
+ "header": [
487
+ {
488
+ "type": "Badge",
489
+ "text": "Interaktiv",
490
+ "tone": "success"
491
+ }
492
+ ]
493
+ },
494
+ "children": [
495
+ {
496
+ "type": "Surface",
497
+ "title": "Filter & State",
498
+ "slots": {
499
+ "header": [
500
+ {
501
+ "type": "Popover",
502
+ "label": "Methodik",
503
+ "text": "Besucher werden anhand von Kanal und Skalierung berechnet. Der Benchmark beträgt 90 Prozent. Das Datum dient als Beschriftung."
504
+ }
505
+ ]
506
+ },
507
+ "children": [
508
+ {
509
+ "type": "Tabs",
510
+ "label": "Zeitraum",
511
+ "options": [
512
+ {
513
+ "id": "7d",
514
+ "label": "7 Tage"
515
+ },
516
+ {
517
+ "id": "4w",
518
+ "label": "4 Wochen"
519
+ }
520
+ ],
521
+ "value": {
522
+ "$state": "period"
523
+ },
524
+ "onChange": {
525
+ "set": "period"
526
+ }
527
+ }
528
+ ]
529
+ },
530
+ {
531
+ "type": "Grid",
532
+ "columns": 3,
533
+ "gap": "small",
534
+ "children": [
535
+ {
536
+ "type": "KpiTile",
537
+ "label": "Besucher",
538
+ "value": {
539
+ "$computed": "visitors"
540
+ },
541
+ "detail": "Alle Kanäle"
542
+ },
543
+ {
544
+ "type": "KpiTile",
545
+ "label": "Conversions",
546
+ "value": {
547
+ "$computed": "conversions"
548
+ },
549
+ "detail": "Simuliert"
550
+ },
551
+ {
552
+ "type": "KpiTile",
553
+ "label": "Conversion",
554
+ "value": "4,32 %",
555
+ "detail": "Gewichtet"
556
+ }
557
+ ]
558
+ },
559
+ {
560
+ "type": "Stack",
561
+ "gap": "small",
562
+ "children": [
563
+ {
564
+ "type": "Text",
565
+ "text": "Kanal-Karussell",
566
+ "weight": "bold"
567
+ },
568
+ {
569
+ "type": "Carousel",
570
+ "label": "Besucher je Kanal",
571
+ "visibleItems": 2,
572
+ "items": {
573
+ "$data": "channels"
574
+ },
575
+ "children": [
576
+ {
577
+ "type": "KpiTile",
578
+ "label": {
579
+ "$item": "name"
580
+ },
581
+ "value": {
582
+ "$item": "visitors"
583
+ },
584
+ "unit": "Besucher",
585
+ "detail": {
586
+ "$item": "share"
587
+ }
588
+ }
589
+ ]
590
+ }
591
+ ]
592
+ },
593
+ {
594
+ "type": "Stack",
595
+ "direction": "row",
596
+ "gap": "small",
597
+ "children": [
598
+ {
599
+ "type": "Button",
600
+ "label": "JSON kopieren",
601
+ "icon": "copy",
602
+ "onClick": {
603
+ "action": "copyJson"
604
+ }
605
+ },
606
+ {
607
+ "type": "Spacer",
608
+ "grow": true
609
+ },
610
+ {
611
+ "type": "Button",
612
+ "label": "Reset",
613
+ "icon": "reset",
614
+ "variant": "secondary",
615
+ "onClick": {
616
+ "action": "reset"
617
+ }
618
+ }
619
+ ]
620
+ }
621
+ ]
622
+ }
623
+ },
624
+ "expectedState": "data",
625
+ "width": 528,
626
+ "interactions": [
627
+ {
628
+ "name": "open Methodik",
629
+ "click": {
630
+ "text": "Methodik"
631
+ }
632
+ },
633
+ {
634
+ "name": "close Methodik",
635
+ "press": "Escape"
636
+ },
637
+ {
638
+ "name": "next channel slide",
639
+ "click": {
640
+ "selector": "button[aria-label='Show the next slides']"
641
+ }
642
+ },
643
+ {
644
+ "name": "pick 4 Wochen",
645
+ "click": {
646
+ "text": "4 Wochen"
647
+ }
648
+ },
649
+ {
650
+ "name": "reset",
651
+ "click": {
652
+ "text": "Reset"
653
+ }
654
+ }
655
+ ]
656
+ },
657
+ {
658
+ "name": "layout-pressable-channel-tiles",
659
+ "description": "Pressable (catalog name list; tiles of reference 52 made clickable): three channel tiles in a Grid, each a Pressable that writes its channel into state; the selection ring follows a computed comparison and a Quote shows the pick.",
660
+ "payload": {
661
+ "state": {
662
+ "channel": "Organic"
663
+ },
664
+ "data": {
665
+ "channels": [
666
+ {
667
+ "name": "Organic",
668
+ "visitors": 4190,
669
+ "share": "51,1 % Anteil"
670
+ },
671
+ {
672
+ "name": "Paid",
673
+ "visitors": 2620,
674
+ "share": "32,0 % Anteil"
675
+ },
676
+ {
677
+ "name": "Direct",
678
+ "visitors": 1390,
679
+ "share": "16,9 % Anteil"
680
+ }
681
+ ]
682
+ },
683
+ "computed": {
684
+ "isOrganic": "channel == \"Organic\"",
685
+ "isPaid": "channel == \"Paid\"",
686
+ "isDirect": "channel == \"Direct\""
687
+ },
688
+ "view": {
689
+ "type": "Stack",
690
+ "children": [
691
+ {
692
+ "type": "Grid",
693
+ "columns": 3,
694
+ "gap": "small",
695
+ "children": [
696
+ {
697
+ "type": "Pressable",
698
+ "onClick": {
699
+ "set": "channel"
700
+ },
701
+ "value": "Organic",
702
+ "isSelected": {
703
+ "$computed": "isOrganic"
704
+ },
705
+ "label": "Organic auswählen",
706
+ "children": [
707
+ {
708
+ "type": "KpiTile",
709
+ "label": "Organic",
710
+ "value": 4190,
711
+ "unit": "Besucher",
712
+ "detail": "51,1 % Anteil"
713
+ }
714
+ ]
715
+ },
716
+ {
717
+ "type": "Pressable",
718
+ "onClick": {
719
+ "set": "channel"
720
+ },
721
+ "value": "Paid",
722
+ "isSelected": {
723
+ "$computed": "isPaid"
724
+ },
725
+ "label": "Paid auswählen",
726
+ "children": [
727
+ {
728
+ "type": "KpiTile",
729
+ "label": "Paid",
730
+ "value": 2620,
731
+ "unit": "Besucher",
732
+ "detail": "32,0 % Anteil"
733
+ }
734
+ ]
735
+ },
736
+ {
737
+ "type": "Pressable",
738
+ "onClick": {
739
+ "set": "channel"
740
+ },
741
+ "value": "Direct",
742
+ "isSelected": {
743
+ "$computed": "isDirect"
744
+ },
745
+ "label": "Direct auswählen",
746
+ "children": [
747
+ {
748
+ "type": "KpiTile",
749
+ "label": "Direct",
750
+ "value": 1390,
751
+ "unit": "Besucher",
752
+ "detail": "16,9 % Anteil"
753
+ }
754
+ ]
755
+ }
756
+ ]
757
+ },
758
+ {
759
+ "type": "Quote",
760
+ "text": {
761
+ "$state": "channel"
762
+ },
763
+ "attribution": "Ausgewählter Kanal"
764
+ }
765
+ ]
766
+ }
767
+ },
768
+ "expectedState": "data",
769
+ "width": 528,
770
+ "interactions": [
771
+ {
772
+ "name": "pick Paid",
773
+ "click": {
774
+ "text": "Paid"
775
+ }
776
+ },
777
+ {
778
+ "name": "pick Direct",
779
+ "click": {
780
+ "text": "Direct"
781
+ }
782
+ }
783
+ ]
784
+ },
785
+ {
786
+ "name": "layout-quote-flow-divider",
787
+ "description": "Quote, Flow, Divider and Spacer (catalog name list, no screenshot): a patient review of the shared test customer as a quotation with attribution and source link, a hairline, and a Flow of topic badges that wraps on a narrow pane.",
788
+ "payload": {
789
+ "view": {
790
+ "type": "Surface",
791
+ "title": "Was Patienten sagen",
792
+ "children": [
793
+ {
794
+ "type": "Quote",
795
+ "text": "Als Angstpatientin hatte ich große Sorge vor dem Implantat. Dr. Hoffmann hat jeden Schritt erklärt, und die Wartezeit war kurz.",
796
+ "attribution": "Sabine K., 5 Sterne",
797
+ "source": {
798
+ "name": "Google-Bewertungen",
799
+ "url": "https://www.google.com/maps/search/?api=1&query=Zahnarztpraxis+Dr.+Lena+Hoffmann+Wilhelmsh%C3%B6her+Allee+120+Kassel"
800
+ }
801
+ },
802
+ {
803
+ "type": "Divider"
804
+ },
805
+ {
806
+ "type": "Flow",
807
+ "children": [
808
+ {
809
+ "type": "Badge",
810
+ "text": "Einfühlsam",
811
+ "tone": "success"
812
+ },
813
+ {
814
+ "type": "Badge",
815
+ "text": "Kurze Wartezeit",
816
+ "tone": "success"
817
+ },
818
+ {
819
+ "type": "Badge",
820
+ "text": "Implantate",
821
+ "tone": "info"
822
+ },
823
+ {
824
+ "type": "Badge",
825
+ "text": "Parkplatz knapp",
826
+ "tone": "warning"
827
+ },
828
+ {
829
+ "type": "Badge",
830
+ "text": "Prophylaxe",
831
+ "tone": "neutral"
832
+ }
833
+ ]
834
+ },
835
+ {
836
+ "type": "Spacer",
837
+ "size": "small"
838
+ }
839
+ ]
840
+ }
841
+ },
842
+ "expectedState": "data",
843
+ "width": 528,
844
+ "dataSet": "kassel-dental-practice"
845
+ },
846
+ {
847
+ "name": "layout-carousel-loading",
848
+ "description": "Loading: the Carousel repeats over a $from tool result that is not stored yet — skeleton slides under the title.",
849
+ "payload": {
850
+ "view": {
851
+ "type": "Surface",
852
+ "title": "Kanal-Karussell",
853
+ "children": [
854
+ {
855
+ "type": "Carousel",
856
+ "items": {
857
+ "$from": {
858
+ "toolCall": "call_1",
859
+ "path": "$.rows"
860
+ }
861
+ },
862
+ "children": [
863
+ {
864
+ "type": "KpiTile",
865
+ "label": {
866
+ "$item": "name"
867
+ },
868
+ "value": {
869
+ "$item": "visitors"
870
+ }
871
+ }
872
+ ]
873
+ }
874
+ ]
875
+ }
876
+ },
877
+ "expectedState": "loading",
878
+ "width": 528
879
+ },
880
+ {
881
+ "name": "layout-empty",
882
+ "description": "Empty: a Stack without children renders nothing and reports empty.",
883
+ "payload": {
884
+ "view": {
885
+ "type": "Stack"
886
+ }
887
+ },
888
+ "expectedState": "empty",
889
+ "width": 528
890
+ }
891
+ ]
892
+ }