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,553 @@
1
+ # Miscellaneous Widgets: Icon, ProgressBar, AppBar, ConditionalBuilder
2
+
3
+ ## Icon
4
+
5
+ ### Minimal Example
6
+
7
+ ```yaml
8
+ key: Icon_xxxxxxxx
9
+ type: Icon
10
+ props:
11
+ icon:
12
+ sizeValue:
13
+ inputValue: 24
14
+ iconDataValue:
15
+ inputValue:
16
+ codePoint: 57947
17
+ family: MaterialIcons
18
+ matchTextDirection: false
19
+ name: favorite
20
+ ```
21
+
22
+ ### Full Schema
23
+
24
+ ```yaml
25
+ key: Icon_xxxxxxxx
26
+ type: Icon
27
+ props:
28
+ icon:
29
+ sizeValue: # Icon size in px
30
+ inputValue: 28
31
+ mostRecentInputValue: 28
32
+ colorValue: # Icon color
33
+ inputValue:
34
+ value: "4291282887" # ARGB integer
35
+ # OR themeColor: PRIMARY_TEXT
36
+ mostRecentInputValue:
37
+ value: "4291282887"
38
+ # OR variable binding for dynamic color:
39
+ # variable:
40
+ # source: FUNCTION_CALL
41
+ # functionCall:
42
+ # conditionalValue:
43
+ # ifConditionalValues:
44
+ # - condition: ...
45
+ # value:
46
+ # inputValue:
47
+ # color:
48
+ # value: "4279506971"
49
+ # elseValue:
50
+ # inputValue:
51
+ # color:
52
+ # themeColor: PRIMARY_TEXT
53
+ # returnParameter:
54
+ # dataType:
55
+ # scalarType: Color
56
+ iconDataValue: # Icon specification
57
+ inputValue:
58
+ codePoint: 983520 # Unicode code point
59
+ family: MaterialIcons # Icon font family
60
+ matchTextDirection: false # Mirror for RTL layouts
61
+ name: store_rounded # Human-readable icon name
62
+ isCustom: true # For custom icon packs (Tabler-Icons, etc.)
63
+ padding: # Common padding prop
64
+ type: FF_PADDING_ONLY
65
+ topValue:
66
+ inputValue: 4
67
+ mostRecentInputValue: 4
68
+ responsiveVisibility: {}
69
+ opacity:
70
+ opacityValue:
71
+ inputValue: 1
72
+ mostRecentInputValue: 1
73
+ parameterValues: {}
74
+ valueKey: {}
75
+ ```
76
+
77
+ ### Field Reference
78
+
79
+ | Field | Type | Required | Notes |
80
+ |-------|------|----------|-------|
81
+ | `sizeValue.inputValue` | number | Yes | Icon size in px |
82
+ | `colorValue.inputValue` | object | No | Color (themeColor or ARGB value) |
83
+ | `iconDataValue.inputValue.codePoint` | number | Yes | Unicode code point |
84
+ | `iconDataValue.inputValue.family` | string | Yes | Font family name |
85
+ | `iconDataValue.inputValue.name` | string | Yes | Human-readable name |
86
+ | `iconDataValue.inputValue.matchTextDirection` | bool | No | Mirror for RTL |
87
+ | `iconDataValue.inputValue.isCustom` | bool | No | Custom icon pack flag |
88
+ | `iconDataValue.inputValue.package` | string | No | Flutter package (e.g. `font_awesome_flutter`) |
89
+
90
+ ### Common Icon Families
91
+
92
+ | Family | Package | Notes |
93
+ |--------|---------|-------|
94
+ | `MaterialIcons` | (built-in) | Default Flutter icons |
95
+ | `FontAwesomeBrands` | `font_awesome_flutter` | Brand logos (Google, Apple, etc.) |
96
+ | `FontAwesomeSolid` | `font_awesome_flutter` | Solid style FA icons |
97
+ | `Tabler-Icons` | (custom) | `isCustom: true` required |
98
+
99
+ ---
100
+
101
+ ## ProgressBar
102
+
103
+ ### Minimal Example
104
+
105
+ ```yaml
106
+ key: ProgressBar_xxxxxxxx
107
+ type: ProgressBar
108
+ props:
109
+ progressBar:
110
+ shape: Circular
111
+ size:
112
+ width:
113
+ pixelsValue:
114
+ inputValue: 150
115
+ height:
116
+ pixelsValue:
117
+ inputValue: 6
118
+ percentValue:
119
+ inputValue: 0.5
120
+ progressColorValue:
121
+ inputValue:
122
+ themeColor: SUCCESS
123
+ backgroundColorValue:
124
+ inputValue:
125
+ themeColor: ALTERNATE
126
+ ```
127
+
128
+ ### Full Schema
129
+
130
+ ```yaml
131
+ key: ProgressBar_xxxxxxxx
132
+ type: ProgressBar
133
+ props:
134
+ expanded:
135
+ expandedType: UNEXPANDED
136
+ responsiveVisibility: {}
137
+ progressBar:
138
+ shape: Circular # Shape type (see enum)
139
+ text: # Center text (for circular shape)
140
+ themeStyle: HEADLINE_SMALL
141
+ translationIdentifier:
142
+ key: j7w2lfua
143
+ textValue: # Text content (often computed)
144
+ inputValue: ""
145
+ # OR variable with string interpolation:
146
+ # variable:
147
+ # source: FUNCTION_CALL
148
+ # functionCall:
149
+ # stringInterpolation: {}
150
+ # values:
151
+ # - variable:
152
+ # source: POSTGRES_QUERY
153
+ # baseVariable:
154
+ # postgresQuery: {}
155
+ # operations:
156
+ # - accessPostgresRowField:
157
+ # fieldIdentifier:
158
+ # name: positive_impact
159
+ # - numberFormat:
160
+ # formatType: COMPACT
161
+ # nodeKeyRef:
162
+ # key: Container_xxxxx
163
+ # - inputValue:
164
+ # serializedValue: "%"
165
+ fontSizeValue:
166
+ inputValue: 16
167
+ colorValue:
168
+ inputValue:
169
+ value: "4280032031"
170
+ size: # Progress bar dimensions
171
+ width:
172
+ pixelsValue:
173
+ inputValue: 150 # Width (diameter for circular)
174
+ height:
175
+ pixelsValue:
176
+ inputValue: 6 # Height (stroke width for circular)
177
+ percentValue: # Progress value (0.0 to 1.0)
178
+ inputValue: 0.5 # Literal value
179
+ # OR variable binding:
180
+ # variable:
181
+ # source: LOCAL_STATE
182
+ # baseVariable:
183
+ # localState:
184
+ # fieldIdentifier:
185
+ # name: loadingProgress
186
+ # key: s4r96
187
+ # stateVariableType: WIDGET_CLASS_STATE
188
+ # nodeKeyRef:
189
+ # key: Scaffold_xxxxxxxx
190
+ mostRecentInputValue: 1
191
+ progressColorValue: # Filled portion color
192
+ inputValue:
193
+ themeColor: SUCCESS
194
+ # OR value: "4282874240"
195
+ backgroundColorValue: # Unfilled portion color
196
+ inputValue:
197
+ value: "4290245323"
198
+ animationValue: # Animate progress changes
199
+ inputValue: true
200
+ opacity:
201
+ opacityValue:
202
+ inputValue: 1
203
+ animatedOpacity: {}
204
+ valueKey: {}
205
+ ```
206
+
207
+ ### Field Reference
208
+
209
+ | Field | Type | Required | Notes |
210
+ |-------|------|----------|-------|
211
+ | `shape` | enum | Yes | `Circular` or `Linear` |
212
+ | `text` | object | No | Center text (circular only) |
213
+ | `size.width.pixelsValue.inputValue` | number | No | Width/diameter |
214
+ | `size.height.pixelsValue.inputValue` | number | No | Height/stroke width |
215
+ | `percentValue` | number/var | Yes | Progress 0.0 to 1.0 |
216
+ | `progressColorValue.inputValue` | object | No | Filled bar color |
217
+ | `backgroundColorValue.inputValue` | object | No | Background bar color |
218
+ | `animationValue.inputValue` | bool | No | Animate value changes |
219
+
220
+ ### shape Enum
221
+
222
+ | Value | Description |
223
+ |-------|-------------|
224
+ | `Circular` | Circular/ring progress indicator |
225
+ | `Linear` | Horizontal bar progress indicator |
226
+
227
+ Note: For `Circular` shape, `width` = diameter and `height` = stroke thickness. The `text` property is shown in the center.
228
+
229
+ ---
230
+
231
+ ## AppBar
232
+
233
+ ### Minimal Example
234
+
235
+ ```yaml
236
+ key: AppBar_xxxxxxxx
237
+ type: AppBar
238
+ props:
239
+ appBar:
240
+ templateType: LARGE_HEADER
241
+ backgroundColorValue:
242
+ inputValue:
243
+ themeColor: PRIMARY_BACKGROUND
244
+ ```
245
+
246
+ ### Full Schema
247
+
248
+ ```yaml
249
+ key: AppBar_xxxxxxxx
250
+ type: AppBar
251
+ props:
252
+ appBar:
253
+ templateType: LARGE_HEADER # AppBar template (see enum)
254
+ toolbarHeight: # Custom toolbar height
255
+ pixelsValue:
256
+ inputValue: 130 # Height in px (default ~56)
257
+ titleInFlexibleSpaceBar: false # Whether title appears in flexible space
258
+ defaultBackButtonValue: # Show default back button
259
+ inputValue: false
260
+ mostRecentInputValue: false
261
+ backgroundColorValue: # AppBar background color
262
+ inputValue:
263
+ themeColor: SECONDARY_BACKGROUND
264
+ mostRecentInputValue:
265
+ themeColor: SECONDARY_BACKGROUND
266
+ elevationValue: # Shadow elevation
267
+ inputValue: 0
268
+ mostRecentInputValue: 0
269
+ centerTitleValue: # Center the title text
270
+ inputValue: false
271
+ mostRecentInputValue: false
272
+ # --- Sliver mode (collapsible) ---
273
+ isSliver: true # Enable collapsible/sliver behavior
274
+ expandedHeight: # Full height when expanded
275
+ percentOfScreenSizeValue:
276
+ inputValue: 40 # 40% of screen height
277
+ collapsedHeight: # Minimum height when collapsed
278
+ percentOfScreenSizeValue:
279
+ inputValue: 10
280
+ opacity:
281
+ opacityValue:
282
+ inputValue: 1
283
+ mostRecentInputValue: 1
284
+ parameterValues: {}
285
+ ```
286
+
287
+ ### Field Reference
288
+
289
+ | Field | Type | Required | Notes |
290
+ |-------|------|----------|-------|
291
+ | `templateType` | enum | Yes | AppBar layout template |
292
+ | `toolbarHeight.pixelsValue.inputValue` | number | No | Toolbar height in px |
293
+ | `titleInFlexibleSpaceBar` | bool | No | Title in flexible space (for collapsing) |
294
+ | `defaultBackButtonValue.inputValue` | bool | No | Show back button |
295
+ | `backgroundColorValue.inputValue` | object | No | Background color |
296
+ | `elevationValue.inputValue` | number | No | Shadow elevation |
297
+ | `centerTitleValue.inputValue` | bool | No | Center title text |
298
+ | `isSliver` | bool | No | Enable collapsible/sliver app bar |
299
+ | `expandedHeight` | object | No | Full height when expanded (sliver mode) |
300
+ | `collapsedHeight` | object | No | Min height when collapsed (sliver mode) |
301
+
302
+ ### templateType Enum
303
+
304
+ | Value | Description |
305
+ |-------|-------------|
306
+ | `LARGE_HEADER` | Large/extended app bar (most common, confirmed in production) |
307
+
308
+ > **Note:** `LARGE_HEADER` is the only confirmed valid value. Control the actual height via `toolbarHeight` (e.g., 60px for compact, 130px for large). Do **not** use `STANDARD` — it causes a validation error.
309
+
310
+ ### Sliver Mode
311
+
312
+ Set `isSliver: true` to make the AppBar collapsible on scroll. Heights can use either pixels or screen percentage:
313
+
314
+ ```yaml
315
+ # Percentage of screen (common for sliver)
316
+ expandedHeight:
317
+ percentOfScreenSizeValue:
318
+ inputValue: 45
319
+
320
+ # Pixels (common for toolbarHeight)
321
+ toolbarHeight:
322
+ pixelsValue:
323
+ inputValue: 56
324
+ ```
325
+
326
+ ---
327
+
328
+ ## ConditionalBuilder
329
+
330
+ The ConditionalBuilder widget conditionally renders one of two child subtrees based on a condition.
331
+
332
+ ### Minimal Example
333
+
334
+ ```yaml
335
+ key: ConditionalBuilder_xxxxxxxx
336
+ type: ConditionalBuilder
337
+ props:
338
+ conditionalBuilder: {}
339
+ ```
340
+
341
+ ### Full Schema
342
+
343
+ ```yaml
344
+ key: ConditionalBuilder_xxxxxxxx
345
+ type: ConditionalBuilder
346
+ props:
347
+ conditionalBuilder: {} # Condition is configured via the widget tree
348
+ ```
349
+
350
+ ### Notes
351
+
352
+ The ConditionalBuilder widget is typically a structural wrapper. Its condition logic is managed by the FlutterFlow editor and stored in the widget tree outline, not in the node YAML itself. The `conditionalBuilder` prop is usually an empty object `{}`. The actual condition is evaluated at runtime to decide which child branch to render.
353
+
354
+ Children of the ConditionalBuilder are organized into two branches in the widget tree:
355
+ - **True branch** - rendered when condition is met
356
+ - **False branch** - rendered when condition is not met
357
+
358
+ ---
359
+
360
+ ## Real Examples
361
+
362
+ **Icon with static ARGB color:**
363
+ ```yaml
364
+ key: Icon_idonj3t4
365
+ type: Icon
366
+ props:
367
+ icon:
368
+ sizeValue:
369
+ inputValue: 28
370
+ mostRecentInputValue: 28
371
+ colorValue:
372
+ inputValue:
373
+ value: "4291282887"
374
+ mostRecentInputValue:
375
+ value: "4291282887"
376
+ iconDataValue:
377
+ inputValue:
378
+ codePoint: 983520
379
+ family: MaterialIcons
380
+ matchTextDirection: false
381
+ name: store_rounded
382
+ padding:
383
+ type: FF_PADDING_ONLY
384
+ topValue:
385
+ inputValue: 4
386
+ mostRecentInputValue: 4
387
+ responsiveVisibility: {}
388
+ opacity:
389
+ opacityValue:
390
+ inputValue: 1
391
+ mostRecentInputValue: 1
392
+ parameterValues: {}
393
+ valueKey: {}
394
+ ```
395
+
396
+ **Icon with conditional color (dynamic):**
397
+ ```yaml
398
+ key: Icon_tbetpdvx
399
+ type: Icon
400
+ props:
401
+ icon:
402
+ sizeValue:
403
+ inputValue: 32
404
+ colorValue:
405
+ variable:
406
+ source: FUNCTION_CALL
407
+ functionCall:
408
+ conditionalValue:
409
+ ifConditionalValues:
410
+ - condition:
411
+ source: FUNCTION_CALL
412
+ functionCall:
413
+ values:
414
+ - variable:
415
+ source: LOCAL_STATE
416
+ baseVariable:
417
+ localState:
418
+ fieldIdentifier:
419
+ name: analysisSelected
420
+ key: c1va5
421
+ stateVariableType: WIDGET_CLASS_STATE
422
+ nodeKeyRef:
423
+ key: Scaffold_acmap1hi
424
+ - inputValue:
425
+ serializedValue: "1"
426
+ condition:
427
+ relation: EQUAL_TO
428
+ value:
429
+ inputValue:
430
+ color:
431
+ value: "4279506971"
432
+ elseValue:
433
+ inputValue:
434
+ color:
435
+ themeColor: PRIMARY_TEXT
436
+ returnParameter:
437
+ dataType:
438
+ scalarType: Color
439
+ mostRecentInputValue:
440
+ themeColor: PRIMARY_TEXT
441
+ iconDataValue:
442
+ inputValue:
443
+ codePoint: 62269
444
+ family: MaterialIcons
445
+ matchTextDirection: false
446
+ name: science_outlined
447
+ padding: {}
448
+ ```
449
+
450
+ **Circular progress bar with animation:**
451
+ ```yaml
452
+ key: ProgressBar_wntv8q6y
453
+ type: ProgressBar
454
+ props:
455
+ expanded:
456
+ expandedType: UNEXPANDED
457
+ responsiveVisibility: {}
458
+ progressBar:
459
+ shape: Circular
460
+ text:
461
+ themeStyle: HEADLINE_SMALL
462
+ textValue:
463
+ inputValue: ""
464
+ size:
465
+ width:
466
+ pixelsValue:
467
+ inputValue: 150
468
+ height:
469
+ pixelsValue:
470
+ inputValue: 6
471
+ percentValue:
472
+ variable:
473
+ source: LOCAL_STATE
474
+ baseVariable:
475
+ localState:
476
+ fieldIdentifier:
477
+ name: loadingProgress
478
+ key: s4r96
479
+ stateVariableType: WIDGET_CLASS_STATE
480
+ nodeKeyRef:
481
+ key: Scaffold_0cxxh2p6
482
+ mostRecentInputValue: 1
483
+ progressColorValue:
484
+ inputValue:
485
+ value: "4282874240"
486
+ backgroundColorValue:
487
+ inputValue:
488
+ value: "4290245323"
489
+ animationValue:
490
+ inputValue: true
491
+ opacity:
492
+ opacityValue:
493
+ inputValue: 1
494
+ animatedOpacity: {}
495
+ valueKey: {}
496
+ ```
497
+
498
+ **Collapsible sliver AppBar with percentage heights:**
499
+ ```yaml
500
+ key: AppBar_2ti1h14b
501
+ type: AppBar
502
+ props:
503
+ appBar:
504
+ toolbarHeight:
505
+ pixelsValue:
506
+ inputValue: 56
507
+ isSliver: true
508
+ expandedHeight:
509
+ percentOfScreenSizeValue:
510
+ inputValue: 40
511
+ collapsedHeight:
512
+ percentOfScreenSizeValue:
513
+ inputValue: 10
514
+ defaultBackButtonValue:
515
+ inputValue: false
516
+ backgroundColorValue:
517
+ inputValue:
518
+ value: "0"
519
+ elevationValue:
520
+ inputValue: 0
521
+ centerTitleValue:
522
+ inputValue: false
523
+ name: AppBars
524
+ ```
525
+
526
+ **AppBar with no back button and no elevation:**
527
+ ```yaml
528
+ key: AppBar_hhz2azx5
529
+ type: AppBar
530
+ props:
531
+ appBar:
532
+ templateType: LARGE_HEADER
533
+ titleInFlexibleSpaceBar: false
534
+ defaultBackButtonValue:
535
+ inputValue: false
536
+ mostRecentInputValue: false
537
+ backgroundColorValue:
538
+ inputValue:
539
+ themeColor: SECONDARY_BACKGROUND
540
+ mostRecentInputValue:
541
+ themeColor: SECONDARY_BACKGROUND
542
+ elevationValue:
543
+ inputValue: 0
544
+ mostRecentInputValue: 0
545
+ centerTitleValue:
546
+ inputValue: false
547
+ mostRecentInputValue: false
548
+ opacity:
549
+ opacityValue:
550
+ inputValue: 1
551
+ mostRecentInputValue: 1
552
+ parameterValues: {}
553
+ ```