flutterflow-mcp 0.1.0

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 (83) hide show
  1. package/README.md +124 -0
  2. package/build/api/flutterflow.d.ts +11 -0
  3. package/build/api/flutterflow.js +61 -0
  4. package/build/index.d.ts +2 -0
  5. package/build/index.js +54 -0
  6. package/build/prompts/dev-workflow.d.ts +2 -0
  7. package/build/prompts/dev-workflow.js +68 -0
  8. package/build/prompts/generate-page.d.ts +2 -0
  9. package/build/prompts/generate-page.js +36 -0
  10. package/build/prompts/inspect-project.d.ts +2 -0
  11. package/build/prompts/inspect-project.js +30 -0
  12. package/build/prompts/modify-component.d.ts +2 -0
  13. package/build/prompts/modify-component.js +39 -0
  14. package/build/resources/docs.d.ts +2 -0
  15. package/build/resources/docs.js +76 -0
  16. package/build/resources/projects.d.ts +3 -0
  17. package/build/resources/projects.js +60 -0
  18. package/build/tools/find-component-usages.d.ts +7 -0
  19. package/build/tools/find-component-usages.js +225 -0
  20. package/build/tools/find-page-navigations.d.ts +7 -0
  21. package/build/tools/find-page-navigations.js +228 -0
  22. package/build/tools/get-component-summary.d.ts +22 -0
  23. package/build/tools/get-component-summary.js +193 -0
  24. package/build/tools/get-page-by-name.d.ts +3 -0
  25. package/build/tools/get-page-by-name.js +56 -0
  26. package/build/tools/get-page-summary.d.ts +22 -0
  27. package/build/tools/get-page-summary.js +220 -0
  28. package/build/tools/get-yaml-docs.d.ts +6 -0
  29. package/build/tools/get-yaml-docs.js +217 -0
  30. package/build/tools/get-yaml.d.ts +3 -0
  31. package/build/tools/get-yaml.js +47 -0
  32. package/build/tools/list-files.d.ts +3 -0
  33. package/build/tools/list-files.js +30 -0
  34. package/build/tools/list-pages.d.ts +25 -0
  35. package/build/tools/list-pages.js +101 -0
  36. package/build/tools/list-projects.d.ts +3 -0
  37. package/build/tools/list-projects.js +19 -0
  38. package/build/tools/sync-project.d.ts +3 -0
  39. package/build/tools/sync-project.js +144 -0
  40. package/build/tools/update-yaml.d.ts +3 -0
  41. package/build/tools/update-yaml.js +24 -0
  42. package/build/tools/validate-yaml.d.ts +3 -0
  43. package/build/tools/validate-yaml.js +22 -0
  44. package/build/utils/cache.d.ts +48 -0
  45. package/build/utils/cache.js +162 -0
  46. package/build/utils/decode-yaml.d.ts +7 -0
  47. package/build/utils/decode-yaml.js +31 -0
  48. package/build/utils/page-summary/action-summarizer.d.ts +9 -0
  49. package/build/utils/page-summary/action-summarizer.js +291 -0
  50. package/build/utils/page-summary/formatter.d.ts +13 -0
  51. package/build/utils/page-summary/formatter.js +121 -0
  52. package/build/utils/page-summary/node-extractor.d.ts +17 -0
  53. package/build/utils/page-summary/node-extractor.js +207 -0
  54. package/build/utils/page-summary/tree-walker.d.ts +6 -0
  55. package/build/utils/page-summary/tree-walker.js +55 -0
  56. package/build/utils/page-summary/types.d.ts +56 -0
  57. package/build/utils/page-summary/types.js +4 -0
  58. package/build/utils/parse-folders.d.ts +9 -0
  59. package/build/utils/parse-folders.js +29 -0
  60. package/docs/ff-yaml/00-overview.md +137 -0
  61. package/docs/ff-yaml/01-project-files.md +513 -0
  62. package/docs/ff-yaml/02-pages.md +572 -0
  63. package/docs/ff-yaml/03-components.md +413 -0
  64. package/docs/ff-yaml/04-widgets/README.md +122 -0
  65. package/docs/ff-yaml/04-widgets/button.md +444 -0
  66. package/docs/ff-yaml/04-widgets/container.md +358 -0
  67. package/docs/ff-yaml/04-widgets/dropdown.md +579 -0
  68. package/docs/ff-yaml/04-widgets/form.md +256 -0
  69. package/docs/ff-yaml/04-widgets/image.md +276 -0
  70. package/docs/ff-yaml/04-widgets/layout.md +355 -0
  71. package/docs/ff-yaml/04-widgets/misc.md +553 -0
  72. package/docs/ff-yaml/04-widgets/text-field.md +326 -0
  73. package/docs/ff-yaml/04-widgets/text.md +302 -0
  74. package/docs/ff-yaml/05-actions.md +843 -0
  75. package/docs/ff-yaml/06-variables.md +834 -0
  76. package/docs/ff-yaml/07-data.md +591 -0
  77. package/docs/ff-yaml/08-custom-code.md +715 -0
  78. package/docs/ff-yaml/09-theming.md +592 -0
  79. package/docs/ff-yaml/10-editing-guide.md +454 -0
  80. package/docs/ff-yaml/README.md +105 -0
  81. package/package.json +55 -0
  82. package/skills/ff-widget-patterns.md +141 -0
  83. package/skills/ff-yaml-dev.md +58 -0
@@ -0,0 +1,358 @@
1
+ # Container
2
+
3
+ ## Minimal Example
4
+
5
+ ```yaml
6
+ key: Container_xxxxxxxx
7
+ type: Container
8
+ props:
9
+ container:
10
+ dimensions: {}
11
+ boxDecoration: {}
12
+ ```
13
+
14
+ ## Full Schema
15
+
16
+ ```yaml
17
+ key: Container_xxxxxxxx
18
+ type: Container
19
+ props:
20
+ container:
21
+ dimensions: # Container size
22
+ width:
23
+ pixelsValue:
24
+ inputValue: 150 # Fixed pixel width
25
+ # OR percentage:
26
+ # percentOfScreenSizeValue:
27
+ # inputValue: 100 # Percentage of screen width
28
+ height:
29
+ pixelsValue:
30
+ inputValue: 120 # Fixed pixel height
31
+ maxDimensions: # Maximum size constraints
32
+ width:
33
+ pixelsValue:
34
+ inputValue: 164
35
+ mostRecentInputValue: 164
36
+ height:
37
+ pixelsValue:
38
+ inputValue: 40
39
+ mostRecentInputValue: 40
40
+ minDimensions: # Minimum size constraints
41
+ width:
42
+ pixelsValue:
43
+ inputValue: 164
44
+ height:
45
+ pixelsValue:
46
+ inputValue: 90
47
+ boxDecoration: # Visual decoration
48
+ colorValue: # Background color
49
+ inputValue:
50
+ themeColor: PRIMARY_BACKGROUND
51
+ # OR value: "4287097512" # ARGB integer
52
+ mostRecentInputValue:
53
+ themeColor: PRIMARY_BACKGROUND
54
+ borderRadius: # Corner radius
55
+ type: FF_BORDER_RADIUS_ALL # Uniform radius
56
+ allValue:
57
+ inputValue: 12
58
+ # OR type: FF_BORDER_RADIUS_ONLY # Per-corner radius
59
+ # topLeftValue:
60
+ # inputValue: 20
61
+ # topRightValue:
62
+ # inputValue: 20
63
+ # bottomLeftValue:
64
+ # inputValue: 0
65
+ # bottomRightValue:
66
+ # inputValue: 0
67
+ borderColorValue: # Border stroke color
68
+ inputValue:
69
+ value: "4279506971"
70
+ # OR themeColor: PRIMARY_BACKGROUND
71
+ borderWidthValue: # Border stroke width
72
+ inputValue: 2
73
+ mostRecentInputValue: 2
74
+ # OR variable binding for dynamic width
75
+ boxShadow: {} # Shadow configuration
76
+ image: # Background image
77
+ type: FF_IMAGE_TYPE_NETWORK # FF_IMAGE_TYPE_NETWORK or FF_IMAGE_TYPE_ASSET
78
+ elevationValue: # Material elevation
79
+ inputValue: 0
80
+ mostRecentInputValue: 0
81
+ childAlignment: # Alignment of child within container
82
+ xValue:
83
+ inputValue: 0 # -1 (left) to 1 (right)
84
+ yValue:
85
+ inputValue: -1 # -1 (top) to 1 (bottom)
86
+ animationDurationValue: # Animated container duration (ms)
87
+ inputValue: 100
88
+ mostRecentInputValue: 100
89
+ padding: # Inner padding
90
+ type: FF_PADDING_ONLY
91
+ topValue:
92
+ inputValue: 16
93
+ mostRecentInputValue: 16
94
+ alignment: # Position within parent
95
+ xValue:
96
+ inputValue: 0 # -1 to 1
97
+ yValue:
98
+ inputValue: -1 # -1 to 1
99
+ expanded: # Expand behavior
100
+ expandedType: FLEXIBLE # EXPANDED | FLEXIBLE | UNEXPANDED
101
+ responsiveVisibility: # Breakpoint hiding
102
+ tabletHidden: false
103
+ opacity:
104
+ opacityValue:
105
+ inputValue: 1
106
+ mostRecentInputValue: 1
107
+ animatedOpacity: {}
108
+ parameterValues: {}
109
+ valueKey:
110
+ inputValue: {}
111
+ name: OptionalName # Human-readable name
112
+ isDummyRoot: true # Component root marker (see below)
113
+ aiGeneratedNodeInfo: # AI generation tracking
114
+ isAiGenerated: true
115
+ requestPath: ai_component_gen_requests/xxxxxxxxxx
116
+ ```
117
+
118
+ ## Field Reference
119
+
120
+ | Field | Type | Required | Notes |
121
+ |-------|------|----------|-------|
122
+ | `dimensions.width.pixelsValue.inputValue` | number | No | Width in px (`Infinity` = fill) |
123
+ | `dimensions.width.percentOfScreenSizeValue.inputValue` | number | No | Width as % of screen |
124
+ | `dimensions.height.pixelsValue.inputValue` | number | No | Height in px |
125
+ | `maxDimensions` | object | No | Same shape as dimensions |
126
+ | `minDimensions` | object | No | Same shape as dimensions |
127
+ | `boxDecoration.colorValue.inputValue` | object | No | Background color |
128
+ | `boxDecoration.borderRadius` | object | No | Corner radius specification |
129
+ | `boxDecoration.borderColorValue.inputValue` | object | No | Border color |
130
+ | `boxDecoration.borderWidthValue` | number/var | No | Border width (literal or variable) |
131
+ | `boxDecoration.boxShadow` | object | No | Shadow configuration |
132
+ | `boxDecoration.image` | object | No | Background image |
133
+ | `boxDecoration.elevationValue.inputValue` | number | No | Material elevation |
134
+ | `childAlignment` | object | No | Child position (x: -1..1, y: -1..1) |
135
+ | `animationDurationValue.inputValue` | number | No | Animation duration in ms |
136
+ | `isDummyRoot` | bool | No | `true` on component root containers |
137
+
138
+ ## isDummyRoot Pattern
139
+
140
+ Component root containers are marked with `isDummyRoot: true`. This is how FlutterFlow identifies the top-level container of a reusable component:
141
+
142
+ ```yaml
143
+ key: Container_od80u8ml
144
+ type: Container
145
+ props:
146
+ container:
147
+ boxDecoration:
148
+ colorValue:
149
+ inputValue:
150
+ value: "0"
151
+ name: BottomSheetAddFood
152
+ isDummyRoot: true
153
+ ```
154
+
155
+ The root container typically has a transparent background (`value: "0"`) and a descriptive `name`.
156
+
157
+ ## Dimension Patterns
158
+
159
+ ```yaml
160
+ # Fixed pixel size
161
+ width:
162
+ pixelsValue:
163
+ inputValue: 300
164
+
165
+ # Fill parent (stretch)
166
+ width:
167
+ pixelsValue:
168
+ inputValue: Infinity
169
+
170
+ # Percentage of screen
171
+ width:
172
+ percentOfScreenSizeValue:
173
+ inputValue: 100
174
+ mostRecentInputValue: 100
175
+ ```
176
+
177
+ ## Real Examples
178
+
179
+ **Container with rounded corners and theme color:**
180
+ ```yaml
181
+ key: Container_vzq4hmq5
182
+ type: Container
183
+ props:
184
+ container:
185
+ dimensions: {}
186
+ boxDecoration:
187
+ borderRadius:
188
+ type: FF_BORDER_RADIUS_ALL
189
+ allValue:
190
+ inputValue: 8
191
+ colorValue:
192
+ inputValue:
193
+ themeColor: TERTIARY
194
+ padding:
195
+ bottomValue:
196
+ inputValue: 8
197
+ ```
198
+
199
+ **Container with per-corner radius and border:**
200
+ ```yaml
201
+ key: Container_z9kqe25k
202
+ type: Container
203
+ props:
204
+ container:
205
+ dimensions:
206
+ width:
207
+ percentOfScreenSizeValue:
208
+ inputValue: 100
209
+ mostRecentInputValue: 100
210
+ boxDecoration:
211
+ borderRadius:
212
+ type: FF_BORDER_RADIUS_ONLY
213
+ topLeftValue:
214
+ inputValue: 20
215
+ mostRecentInputValue: 20
216
+ topRightValue:
217
+ inputValue: 20
218
+ mostRecentInputValue: 20
219
+ bottomLeftValue:
220
+ inputValue: 0
221
+ mostRecentInputValue: 0
222
+ bottomRightValue:
223
+ inputValue: 0
224
+ mostRecentInputValue: 0
225
+ boxShadow: {}
226
+ image:
227
+ type: FF_IMAGE_TYPE_NETWORK
228
+ colorValue:
229
+ inputValue:
230
+ themeColor: PRIMARY_BACKGROUND
231
+ mostRecentInputValue:
232
+ themeColor: PRIMARY_BACKGROUND
233
+ borderColorValue:
234
+ inputValue:
235
+ themeColor: PRIMARY_BACKGROUND
236
+ mostRecentInputValue:
237
+ themeColor: PRIMARY_BACKGROUND
238
+ borderWidthValue:
239
+ inputValue: 0
240
+ mostRecentInputValue: 0
241
+ childAlignment:
242
+ xValue:
243
+ inputValue: 0
244
+ yValue:
245
+ inputValue: -1
246
+ maxDimensions: {}
247
+ minDimensions: {}
248
+ elevationValue:
249
+ inputValue: 0
250
+ mostRecentInputValue: 0
251
+ animationDurationValue:
252
+ inputValue: 100
253
+ mostRecentInputValue: 100
254
+ padding:
255
+ type: FF_PADDING_ONLY
256
+ topValue:
257
+ inputValue: 16
258
+ mostRecentInputValue: 16
259
+ alignment:
260
+ xValue:
261
+ inputValue: 0
262
+ yValue:
263
+ inputValue: -1
264
+ expanded:
265
+ expandedType: UNEXPANDED
266
+ responsiveVisibility:
267
+ tabletHidden: false
268
+ opacity:
269
+ opacityValue:
270
+ inputValue: 1
271
+ mostRecentInputValue: 1
272
+ animatedOpacity: {}
273
+ parameterValues: {}
274
+ valueKey:
275
+ inputValue: {}
276
+ ```
277
+
278
+ **Container with conditional color via function call:**
279
+ ```yaml
280
+ key: Container_asssrq5w
281
+ type: Container
282
+ props:
283
+ container:
284
+ dimensions:
285
+ width:
286
+ pixelsValue:
287
+ inputValue: 120
288
+ boxDecoration:
289
+ borderRadius:
290
+ type: FF_BORDER_RADIUS_ALL
291
+ allValue:
292
+ inputValue: 12
293
+ colorValue:
294
+ variable:
295
+ source: FUNCTION_CALL
296
+ functionCall:
297
+ conditionalValue:
298
+ ifConditionalValues:
299
+ - condition:
300
+ source: FUNCTION_CALL
301
+ functionCall:
302
+ values:
303
+ - variable:
304
+ source: LOCAL_STATE
305
+ baseVariable:
306
+ localState:
307
+ fieldIdentifier:
308
+ name: subIndexSelected
309
+ key: gdgw8
310
+ stateVariableType: WIDGET_CLASS_STATE
311
+ nodeKeyRef:
312
+ key: Scaffold_tydsj8ql
313
+ - inputValue:
314
+ serializedValue: "2"
315
+ condition:
316
+ relation: EQUAL_TO
317
+ value:
318
+ inputValue:
319
+ color:
320
+ value: "4287097512"
321
+ elseValue:
322
+ inputValue:
323
+ color:
324
+ value: "4287996332"
325
+ returnParameter:
326
+ dataType:
327
+ scalarType: Color
328
+ minDimensions:
329
+ height:
330
+ pixelsValue:
331
+ inputValue: 90
332
+ ```
333
+
334
+ **Full-screen container for page background:**
335
+ ```yaml
336
+ key: Container_2u9bf7vs
337
+ type: Container
338
+ props:
339
+ container:
340
+ dimensions:
341
+ width:
342
+ pixelsValue:
343
+ inputValue: Infinity
344
+ height:
345
+ pixelsValue:
346
+ inputValue: Infinity
347
+ boxDecoration:
348
+ boxShadow: {}
349
+ image: {}
350
+ maxDimensions: {}
351
+ minDimensions: {}
352
+ responsiveVisibility: {}
353
+ opacity:
354
+ opacityValue:
355
+ inputValue: 1
356
+ animatedOpacity: {}
357
+ valueKey: {}
358
+ ```