@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,243 @@
1
+ {
2
+ "wireName": "ComposedView",
3
+ "fixtures": [
4
+ {
5
+ "name": "svg-radar",
6
+ "description": "ChatGPT reference 14, the radar graphic alone (Svg node only, static markup): heading, caption, the five-axis polygon over its grid.",
7
+ "payload": {
8
+ "view": {
9
+ "type": "Svg",
10
+ "title": "Marketing Performance Radar",
11
+ "caption": "Interaktives Fünf-Achsen-Profil · Demo",
12
+ "label": "Radar: SEO 76, Content 62, Ads 48, Social 86, Email 70 of 100",
13
+ "markup": "<svg viewBox='0 0 200 200'><g fill='none' stroke='currentColor' stroke-opacity='0.2'><polygon points='100.0,20.0 176.1,75.3 147.0,164.7 53.0,164.7 23.9,75.3'/><polygon points='100.0,40.0 157.1,81.5 135.3,148.5 64.7,148.5 42.9,81.5'/><polygon points='100.0,60.0 138.0,87.6 123.5,132.4 76.5,132.4 62.0,87.6'/><polygon points='100.0,80.0 119.0,93.8 111.8,116.2 88.2,116.2 81.0,93.8'/><line x1='100' y1='100' x2='100.0' y2='20.0'/><line x1='100' y1='100' x2='176.1' y2='75.3'/><line x1='100' y1='100' x2='147.0' y2='164.7'/><line x1='100' y1='100' x2='53.0' y2='164.7'/><line x1='100' y1='100' x2='23.9' y2='75.3'/></g><polygon points='100.0,39.2 147.2,84.7 122.6,131.1 59.6,155.7 46.7,82.7' fill='#4a90d9' fill-opacity='0.22' stroke='#4a90d9' stroke-width='2' stroke-linejoin='round'/><g fill='#4a90d9'><circle r='3.5' cx='100.0' cy='39.2'/><circle r='3.5' cx='147.2' cy='84.7'/><circle r='3.5' cx='122.6' cy='131.1'/><circle r='3.5' cx='59.6' cy='155.7'/><circle r='3.5' cx='46.7' cy='82.7'/></g></svg>"
14
+ }
15
+ },
16
+ "expectedState": "data",
17
+ "width": 528
18
+ },
19
+ {
20
+ "name": "svg-radar-sliders",
21
+ "description": "ChatGPT reference 14 in full: the radar drawn from a computed SVG text over five state values, with one Slider (lane L5) per axis inside a Surface (lane L1) — moving a slider reshapes the polygon.",
22
+ "payload": {
23
+ "state": {
24
+ "seo": 76,
25
+ "content": 62,
26
+ "ads": 48,
27
+ "social": 86,
28
+ "email": 70
29
+ },
30
+ "data": {
31
+ "axes": [
32
+ {
33
+ "key": "seo",
34
+ "label": "SEO",
35
+ "dx": 0,
36
+ "dy": -1
37
+ },
38
+ {
39
+ "key": "content",
40
+ "label": "Content",
41
+ "dx": 0.9511,
42
+ "dy": -0.309
43
+ },
44
+ {
45
+ "key": "ads",
46
+ "label": "Ads",
47
+ "dx": 0.5878,
48
+ "dy": 0.809
49
+ },
50
+ {
51
+ "key": "social",
52
+ "label": "Social",
53
+ "dx": -0.5878,
54
+ "dy": 0.809
55
+ },
56
+ {
57
+ "key": "email",
58
+ "label": "Email",
59
+ "dx": -0.9511,
60
+ "dy": -0.309
61
+ }
62
+ ]
63
+ },
64
+ "computed": {
65
+ "values": "[seo, content, ads, social, email]",
66
+ "shape": "join(map(axes, (a, i) => fixed(100 + a.dx * 0.8 * values[i], 1) + ',' + fixed(100 + a.dy * 0.8 * values[i], 1)), ' ')",
67
+ "grid": "join(map([1, 0.75, 0.5, 0.25], s => \"<polygon points='\" + join(map(axes, a => fixed(100 + a.dx * 80 * s, 1) + ',' + fixed(100 + a.dy * 80 * s, 1)), ' ') + \"'/>\"), '')",
68
+ "spokes": "join(map(axes, a => \"<line x1='100' y1='100' x2='\" + fixed(100 + a.dx * 80, 1) + \"' y2='\" + fixed(100 + a.dy * 80, 1) + \"'/>\"), '')",
69
+ "dots": "join(map(axes, (a, i) => \"<circle r='3.5' cx='\" + fixed(100 + a.dx * 0.8 * values[i], 1) + \"' cy='\" + fixed(100 + a.dy * 0.8 * values[i], 1) + \"'/>\"), '')",
70
+ "radar": "\"<svg viewBox='0 0 200 200'><g fill='none' stroke='currentColor' stroke-opacity='0.2'>\" + grid + spokes + \"</g><polygon points='\" + shape + \"' fill='#4a90d9' fill-opacity='0.22' stroke='#4a90d9' stroke-width='2' stroke-linejoin='round'/><g fill='#4a90d9'>\" + dots + \"</g></svg>\""
71
+ },
72
+ "view": {
73
+ "type": "Surface",
74
+ "title": "Marketing Performance Radar",
75
+ "subtitle": "Interaktives Fünf-Achsen-Profil · Demo",
76
+ "children": [
77
+ {
78
+ "type": "Svg",
79
+ "label": "Marketing performance radar over SEO, Content, Ads, Social and Email",
80
+ "markup": {
81
+ "$computed": "radar"
82
+ }
83
+ },
84
+ {
85
+ "type": "Stack",
86
+ "direction": "column",
87
+ "gap": "medium",
88
+ "children": [
89
+ {
90
+ "type": "Slider",
91
+ "label": "SEO",
92
+ "min": 0,
93
+ "max": 100,
94
+ "step": 1,
95
+ "unit": "/100",
96
+ "showValue": true,
97
+ "value": {
98
+ "$state": "seo"
99
+ },
100
+ "onChange": {
101
+ "set": "seo"
102
+ }
103
+ },
104
+ {
105
+ "type": "Slider",
106
+ "label": "Content",
107
+ "min": 0,
108
+ "max": 100,
109
+ "step": 1,
110
+ "unit": "/100",
111
+ "showValue": true,
112
+ "value": {
113
+ "$state": "content"
114
+ },
115
+ "onChange": {
116
+ "set": "content"
117
+ }
118
+ },
119
+ {
120
+ "type": "Slider",
121
+ "label": "Ads",
122
+ "min": 0,
123
+ "max": 100,
124
+ "step": 1,
125
+ "unit": "/100",
126
+ "showValue": true,
127
+ "value": {
128
+ "$state": "ads"
129
+ },
130
+ "onChange": {
131
+ "set": "ads"
132
+ }
133
+ },
134
+ {
135
+ "type": "Slider",
136
+ "label": "Social",
137
+ "min": 0,
138
+ "max": 100,
139
+ "step": 1,
140
+ "unit": "/100",
141
+ "showValue": true,
142
+ "value": {
143
+ "$state": "social"
144
+ },
145
+ "onChange": {
146
+ "set": "social"
147
+ }
148
+ },
149
+ {
150
+ "type": "Slider",
151
+ "label": "Email",
152
+ "min": 0,
153
+ "max": 100,
154
+ "step": 1,
155
+ "unit": "/100",
156
+ "showValue": true,
157
+ "value": {
158
+ "$state": "email"
159
+ },
160
+ "onChange": {
161
+ "set": "email"
162
+ }
163
+ }
164
+ ]
165
+ }
166
+ ]
167
+ }
168
+ },
169
+ "expectedState": "data",
170
+ "width": 528,
171
+ "interactions": [
172
+ {
173
+ "name": "move the SEO slider to the middle",
174
+ "click": {
175
+ "selector": "[class*='MuiSlider-root']"
176
+ }
177
+ },
178
+ {
179
+ "name": "raise SEO by one step",
180
+ "press": "ArrowRight"
181
+ }
182
+ ]
183
+ },
184
+ {
185
+ "name": "svg-unsafe-parts",
186
+ "description": "Error state: the markup carries a script, an onload handler and an outside image — they are removed, the rest is drawn (observed as data), the node reports failed INVALID_PROP.",
187
+ "payload": {
188
+ "view": {
189
+ "type": "Svg",
190
+ "title": "Sanitised graphic",
191
+ "markup": "<svg viewBox='0 0 100 100' onload='alert(1)'><script>alert(1)</script><image href='https://example.com/x.png' width='100' height='100'/><circle cx='50' cy='50' r='40' fill='#4a90d9'/></svg>"
192
+ }
193
+ },
194
+ "expectedState": "error",
195
+ "width": 528
196
+ },
197
+ {
198
+ "name": "svg-empty",
199
+ "description": "Empty state: empty markup renders nothing and reports empty.",
200
+ "payload": {
201
+ "view": {
202
+ "type": "Svg",
203
+ "markup": ""
204
+ }
205
+ },
206
+ "expectedState": "empty",
207
+ "width": 528
208
+ },
209
+ {
210
+ "name": "svg-loading",
211
+ "description": "Loading state: the markup is bound to a pending tool result — the skeleton shows.",
212
+ "payload": {
213
+ "view": {
214
+ "type": "Svg",
215
+ "title": "Marketing Performance Radar",
216
+ "markup": {
217
+ "$from": {
218
+ "toolCall": "call_svg_1",
219
+ "path": "$.markup",
220
+ "state": "pending"
221
+ }
222
+ }
223
+ }
224
+ },
225
+ "expectedState": "loading",
226
+ "width": 528
227
+ },
228
+ {
229
+ "name": "svg-narrow",
230
+ "description": "The radar at the narrow width.",
231
+ "payload": {
232
+ "view": {
233
+ "type": "Svg",
234
+ "title": "Marketing Performance Radar",
235
+ "caption": "Interaktives Fünf-Achsen-Profil · Demo",
236
+ "markup": "<svg viewBox='0 0 200 200'><g fill='none' stroke='currentColor' stroke-opacity='0.2'><polygon points='100.0,20.0 176.1,75.3 147.0,164.7 53.0,164.7 23.9,75.3'/><polygon points='100.0,40.0 157.1,81.5 135.3,148.5 64.7,148.5 42.9,81.5'/><polygon points='100.0,60.0 138.0,87.6 123.5,132.4 76.5,132.4 62.0,87.6'/><polygon points='100.0,80.0 119.0,93.8 111.8,116.2 88.2,116.2 81.0,93.8'/><line x1='100' y1='100' x2='100.0' y2='20.0'/><line x1='100' y1='100' x2='176.1' y2='75.3'/><line x1='100' y1='100' x2='147.0' y2='164.7'/><line x1='100' y1='100' x2='53.0' y2='164.7'/><line x1='100' y1='100' x2='23.9' y2='75.3'/></g><polygon points='100.0,39.2 147.2,84.7 122.6,131.1 59.6,155.7 46.7,82.7' fill='#4a90d9' fill-opacity='0.22' stroke='#4a90d9' stroke-width='2' stroke-linejoin='round'/><g fill='#4a90d9'><circle r='3.5' cx='100.0' cy='39.2'/><circle r='3.5' cx='147.2' cy='84.7'/><circle r='3.5' cx='122.6' cy='131.1'/><circle r='3.5' cx='59.6' cy='155.7'/><circle r='3.5' cx='46.7' cy='82.7'/></g></svg>"
237
+ }
238
+ },
239
+ "expectedState": "data",
240
+ "width": 360
241
+ }
242
+ ]
243
+ }
@@ -0,0 +1,44 @@
1
+ {
2
+ "wireName": "ComposedView",
3
+ "fixtures": [
4
+ {
5
+ "name": "text-badge-tones",
6
+ "description": "One Badge per tone, the status chips of screenshot 52 (Live) and the majority verdicts of 04.",
7
+ "payload": {
8
+ "view": {
9
+ "type": "Stack",
10
+ "direction": "row",
11
+ "gap": "small",
12
+ "children": [
13
+ {
14
+ "type": "Badge",
15
+ "text": "Mehrheit",
16
+ "tone": "success"
17
+ },
18
+ {
19
+ "type": "Badge",
20
+ "text": "Knapp",
21
+ "tone": "warning"
22
+ },
23
+ {
24
+ "type": "Badge",
25
+ "text": "Keine Mehrheit",
26
+ "tone": "danger"
27
+ },
28
+ {
29
+ "type": "Badge",
30
+ "text": "Live",
31
+ "tone": "info"
32
+ },
33
+ {
34
+ "type": "Badge",
35
+ "text": "Modelliert"
36
+ }
37
+ ]
38
+ }
39
+ },
40
+ "expectedState": "data",
41
+ "width": 528
42
+ }
43
+ ]
44
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "wireName": "ComposedView",
3
+ "fixtures": [
4
+ {
5
+ "name": "text-caption-under-value",
6
+ "description": "A Caption as the sub-line of a value and as a method note (the KPI caption role of screenshot 52).",
7
+ "payload": {
8
+ "view": {
9
+ "type": "Stack",
10
+ "gap": "xsmall",
11
+ "children": [
12
+ {
13
+ "type": "Label",
14
+ "text": "Besucher"
15
+ },
16
+ {
17
+ "type": "Title",
18
+ "text": "7.420"
19
+ },
20
+ {
21
+ "type": "Caption",
22
+ "text": "Letzte 7 Tage · errechnet aus Organic + Paid + Direct"
23
+ }
24
+ ]
25
+ }
26
+ },
27
+ "expectedState": "data",
28
+ "width": 360
29
+ }
30
+ ]
31
+ }
@@ -0,0 +1,69 @@
1
+ {
2
+ "wireName": "ComposedView",
3
+ "fixtures": [
4
+ {
5
+ "name": "text-favicon-sources",
6
+ "description": "Site icons in front of source names (screenshot 46): by page url, by bare domain, and a url that names no site (glyph).",
7
+ "payload": {
8
+ "view": {
9
+ "type": "Stack",
10
+ "gap": "xsmall",
11
+ "children": [
12
+ {
13
+ "type": "Stack",
14
+ "direction": "row",
15
+ "gap": "xsmall",
16
+ "align": "center",
17
+ "children": [
18
+ {
19
+ "type": "Favicon",
20
+ "url": "https://www1.wdr.de/nachrichten",
21
+ "name": "WDR"
22
+ },
23
+ {
24
+ "type": "Caption",
25
+ "text": "WDR · 23. Oktober 2026"
26
+ }
27
+ ]
28
+ },
29
+ {
30
+ "type": "Stack",
31
+ "direction": "row",
32
+ "gap": "xsmall",
33
+ "align": "center",
34
+ "children": [
35
+ {
36
+ "type": "Favicon",
37
+ "url": "antenne-muenster.de",
38
+ "name": "Antenne Münster"
39
+ },
40
+ {
41
+ "type": "Caption",
42
+ "text": "Antenne Münster · 24. Oktober 2026"
43
+ }
44
+ ]
45
+ },
46
+ {
47
+ "type": "Stack",
48
+ "direction": "row",
49
+ "gap": "xsmall",
50
+ "align": "center",
51
+ "children": [
52
+ {
53
+ "type": "Favicon",
54
+ "url": "kein-link"
55
+ },
56
+ {
57
+ "type": "Caption",
58
+ "text": "unbekannte Quelle"
59
+ }
60
+ ]
61
+ }
62
+ ]
63
+ }
64
+ },
65
+ "expectedState": "error",
66
+ "width": 528
67
+ }
68
+ ]
69
+ }
@@ -0,0 +1,48 @@
1
+ {
2
+ "wireName": "ComposedView",
3
+ "fixtures": [
4
+ {
5
+ "name": "text-labels-over-values",
6
+ "description": "Labels above values in a row, the filter labels of screenshot 52 (Zeitraum, Kanal).",
7
+ "payload": {
8
+ "view": {
9
+ "type": "Stack",
10
+ "direction": "row",
11
+ "gap": "large",
12
+ "children": [
13
+ {
14
+ "type": "Stack",
15
+ "gap": "xsmall",
16
+ "children": [
17
+ {
18
+ "type": "Label",
19
+ "text": "Zeitraum"
20
+ },
21
+ {
22
+ "type": "Text",
23
+ "text": "7 Tage"
24
+ }
25
+ ]
26
+ },
27
+ {
28
+ "type": "Stack",
29
+ "gap": "xsmall",
30
+ "children": [
31
+ {
32
+ "type": "Label",
33
+ "text": "Kanal"
34
+ },
35
+ {
36
+ "type": "Text",
37
+ "text": "Alle Kanäle"
38
+ }
39
+ ]
40
+ }
41
+ ]
42
+ }
43
+ },
44
+ "expectedState": "data",
45
+ "width": 528
46
+ }
47
+ ]
48
+ }
@@ -0,0 +1,103 @@
1
+ {
2
+ "wireName": "ComposedView",
3
+ "fixtures": [
4
+ {
5
+ "name": "text-follow-up-links",
6
+ "description": "Screenshot 50 rebuilt with what a ComposedView may do: Title, Text, a Label and three Links that open pages in a new tab. The follow-up pills that ISSUE A NEW CHAT TURN are deliberately not part of the kit — model-written pills stay QuickReplies / SuggestedActions.",
7
+ "payload": {
8
+ "view": {
9
+ "type": "Stack",
10
+ "gap": "small",
11
+ "children": [
12
+ {
13
+ "type": "Title",
14
+ "text": "10. Follow-up-Vorschläge – klickbare Folgefragen"
15
+ },
16
+ {
17
+ "type": "Text",
18
+ "text": "Ein kleines, aber praktisches Element: Du kannst eine vorgeschlagene Seite anklicken, um direkt weiterzulesen."
19
+ },
20
+ {
21
+ "type": "Surface",
22
+ "title": "Weitere Widget-Demos ausprobieren",
23
+ "children": [
24
+ {
25
+ "type": "Stack",
26
+ "gap": "xsmall",
27
+ "children": [
28
+ {
29
+ "type": "Link",
30
+ "text": "3D-Sonnensystem",
31
+ "url": "https://science.nasa.gov/solar-system/"
32
+ },
33
+ {
34
+ "type": "Link",
35
+ "text": "SaaS-Dashboard",
36
+ "url": "https://developers.openai.com/apps-sdk"
37
+ },
38
+ {
39
+ "type": "Link",
40
+ "text": "Routenplaner",
41
+ "url": "https://www.google.com/maps/dir/M%C3%BCnster/K%C3%B6ln"
42
+ }
43
+ ]
44
+ }
45
+ ]
46
+ },
47
+ {
48
+ "type": "Text",
49
+ "text": "Hier sind außerdem native Folgefrage-Elemente:"
50
+ },
51
+ {
52
+ "type": "Stack",
53
+ "gap": "xsmall",
54
+ "children": [
55
+ {
56
+ "type": "Link",
57
+ "text": "Interaktives 3D-Sonnensystem zeigen",
58
+ "url": "https://science.nasa.gov/solar-system/"
59
+ },
60
+ {
61
+ "type": "Link",
62
+ "text": "Weitere Widget-Typen vergleichen",
63
+ "url": "https://developers.openai.com/apps-sdk"
64
+ },
65
+ {
66
+ "type": "Link",
67
+ "text": "Reisedashboard demonstrieren",
68
+ "url": "https://www.muenster.de/tourismus.html"
69
+ }
70
+ ]
71
+ }
72
+ ]
73
+ }
74
+ },
75
+ "expectedState": "data",
76
+ "width": 720
77
+ },
78
+ {
79
+ "name": "text-link-unsafe-url",
80
+ "description": "A Link whose url is javascript: — the text shows without a link (the node reports failed INVALID_PROP).",
81
+ "payload": {
82
+ "view": {
83
+ "type": "Stack",
84
+ "gap": "xsmall",
85
+ "children": [
86
+ {
87
+ "type": "Link",
88
+ "text": "Artikel öffnen",
89
+ "url": "https://www.antenne-muenster.de/"
90
+ },
91
+ {
92
+ "type": "Link",
93
+ "text": "Kein Link (javascript:)",
94
+ "url": "javascript:alert(1)"
95
+ }
96
+ ]
97
+ }
98
+ },
99
+ "expectedState": "error",
100
+ "width": 528
101
+ }
102
+ ]
103
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "wireName": "ComposedView",
3
+ "fixtures": [
4
+ {
5
+ "name": "text-markdown-coalition",
6
+ "description": "Screenshot 04 as one Markdown node: heading, paragraph, a table with ✓/✗, a source link.",
7
+ "payload": {
8
+ "view": {
9
+ "type": "Markdown",
10
+ "markdown": "## Rechnerische Koalitionsmöglichkeiten\n\nAuf Grundlage der GMS-Umfrage vom 19. Oktober 2026 ergibt sich bei modellierten 180 Sitzen folgende Verteilung:\n\n| Koalition | Sitze | Mehrheit (91) |\n|---|---:|---|\n| CSU + Freie Wähler | 94 | ✓ |\n| CSU + Grüne | 104 | ✓ |\n| CSU + SPD | 86 | ✗ |\n\nQuelle: [wahlrecht.de](https://www.wahlrecht.de/umfragen/landtage/bayern.htm)"
11
+ }
12
+ },
13
+ "expectedState": "data",
14
+ "width": 720
15
+ },
16
+ {
17
+ "name": "text-markdown-safe-subset",
18
+ "description": "Raw HTML, an image and a javascript: link in model Markdown: none reach the DOM, the link keeps its text.",
19
+ "payload": {
20
+ "view": {
21
+ "type": "Markdown",
22
+ "markdown": "**Fett**, *kursiv* und `Code`.\n\n<script>alert(1)</script><b>HTML</b> ![Pixel](https://example.org/p.png)\n\n- [WDR](https://www1.wdr.de) öffnet in einem neuen Tab\n- [böse](javascript:alert(1)) bleibt Text\n\n> Ein Zitat."
23
+ }
24
+ },
25
+ "expectedState": "data",
26
+ "width": 528
27
+ }
28
+ ]
29
+ }
@@ -0,0 +1,51 @@
1
+ {
2
+ "wireName": "ComposedView",
3
+ "fixtures": [
4
+ {
5
+ "name": "text-source-ref-news",
6
+ "description": "Screenshot 46's source line in a regular slot: every source with favicon and link.",
7
+ "payload": {
8
+ "view": {
9
+ "type": "SourceRef",
10
+ "sources": [
11
+ {
12
+ "name": "WDR",
13
+ "url": "https://www1.wdr.de/nachrichten/westfalen-lippe/index.html"
14
+ },
15
+ {
16
+ "name": "Antenne Münster",
17
+ "url": "https://www.antenne-muenster.de/"
18
+ },
19
+ {
20
+ "name": "Westfälische Nachrichten",
21
+ "url": "https://www.wn.de/muenster"
22
+ }
23
+ ]
24
+ }
25
+ },
26
+ "expectedState": "data",
27
+ "width": 720
28
+ },
29
+ {
30
+ "name": "text-source-ref-licensed-image",
31
+ "description": "An image source with author and licence (the attribution line lane L22 fills from Wikimedia Commons).",
32
+ "payload": {
33
+ "view": {
34
+ "type": "SourceRef",
35
+ "sources": [
36
+ {
37
+ "name": "Wikimedia Commons",
38
+ "url": "https://commons.wikimedia.org/wiki/File:Cologne_Cathedral.jpg",
39
+ "title": "Kölner Dom, Westfassade",
40
+ "author": "Raimond Spekking",
41
+ "license": "CC BY-SA 4.0",
42
+ "licenseUrl": "https://creativecommons.org/licenses/by-sa/4.0/"
43
+ }
44
+ ]
45
+ }
46
+ },
47
+ "expectedState": "data",
48
+ "width": 528
49
+ }
50
+ ]
51
+ }