@lowdefy/docs-content 0.0.0-experimental-20260710073520

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 (304) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +20 -0
  3. package/content/actions/callapi.md +66 -0
  4. package/content/actions/callmethod.md +41 -0
  5. package/content/actions/copytoclipboard.md +32 -0
  6. package/content/actions/displaymessage.md +53 -0
  7. package/content/actions/downloadcsv.md +89 -0
  8. package/content/actions/fetch.md +50 -0
  9. package/content/actions/geolocationcurrentposition.md +56 -0
  10. package/content/actions/link.md +104 -0
  11. package/content/actions/login.md +85 -0
  12. package/content/actions/logout.md +56 -0
  13. package/content/actions/pdfmake.md +304 -0
  14. package/content/actions/request.md +67 -0
  15. package/content/actions/reset.md +27 -0
  16. package/content/actions/resetvalidation.md +85 -0
  17. package/content/actions/scrollto.md +85 -0
  18. package/content/actions/setdarkmode.md +62 -0
  19. package/content/actions/setfocus.md +33 -0
  20. package/content/actions/setglobal.md +63 -0
  21. package/content/actions/setlocale.md +69 -0
  22. package/content/actions/setstate.md +70 -0
  23. package/content/actions/throw.md +72 -0
  24. package/content/actions/validate.md +87 -0
  25. package/content/actions/wait.md +24 -0
  26. package/content/agents/agent-endpoint-tools.md +190 -0
  27. package/content/agents/agent-mcp-tools.md +124 -0
  28. package/content/agents/agent-multi-agent.md +136 -0
  29. package/content/agents/agent-properties.md +174 -0
  30. package/content/agents/agent-server-hooks.md +336 -0
  31. package/content/agents/agentchat.md +515 -0
  32. package/content/agents/agentconversations.md +148 -0
  33. package/content/concepts/ai-agent-docs.md +190 -0
  34. package/content/concepts/cli.md +213 -0
  35. package/content/concepts/connections-and-requests.md +7 -0
  36. package/content/concepts/custom-html.md +3 -0
  37. package/content/concepts/custom-styling.md +161 -0
  38. package/content/concepts/events-and-actions.md +271 -0
  39. package/content/concepts/hosting-files.md +18 -0
  40. package/content/concepts/i18n.md +320 -0
  41. package/content/concepts/keyboard-shortcuts.md +218 -0
  42. package/content/concepts/layout-overview.md +478 -0
  43. package/content/concepts/lists.md +144 -0
  44. package/content/concepts/logger.md +43 -0
  45. package/content/concepts/lowdefy-schema.md +365 -0
  46. package/content/concepts/menus.md +144 -0
  47. package/content/concepts/module-authoring.md +564 -0
  48. package/content/concepts/modules.md +338 -0
  49. package/content/concepts/operators.md +45 -0
  50. package/content/concepts/overview.md +19 -0
  51. package/content/concepts/references-and-templates.md +207 -0
  52. package/content/concepts/secrets.md +24 -0
  53. package/content/concepts/selectors.md +143 -0
  54. package/content/connections/amazonredshift.md +176 -0
  55. package/content/connections/anthropic.md +232 -0
  56. package/content/connections/awss3.md +313 -0
  57. package/content/connections/azureblobstorage.md +133 -0
  58. package/content/connections/elasticsearch.md +371 -0
  59. package/content/connections/google.md +228 -0
  60. package/content/connections/googlecloudstorage.md +139 -0
  61. package/content/connections/googlesheet.md +313 -0
  62. package/content/connections/knex.md +206 -0
  63. package/content/connections/mariadb.md +177 -0
  64. package/content/connections/mcp.md +134 -0
  65. package/content/connections/mongodb.md +739 -0
  66. package/content/connections/mssql.md +191 -0
  67. package/content/connections/mysql.md +192 -0
  68. package/content/connections/openai-connection.md +228 -0
  69. package/content/connections/postgresql.md +200 -0
  70. package/content/connections/redis.md +116 -0
  71. package/content/connections/sendgridmail.md +94 -0
  72. package/content/connections/smtp.md +149 -0
  73. package/content/connections/sqlite.md +187 -0
  74. package/content/connections/stripe.md +115 -0
  75. package/content/container-blocks/affix.md +413 -0
  76. package/content/container-blocks/alert.md +937 -0
  77. package/content/container-blocks/badge.md +1222 -0
  78. package/content/container-blocks/box.md +1453 -0
  79. package/content/container-blocks/card.md +1200 -0
  80. package/content/container-blocks/carousel.md +2247 -0
  81. package/content/container-blocks/collapse.md +1335 -0
  82. package/content/container-blocks/configprovider.md +1070 -0
  83. package/content/container-blocks/confirmmodal.md +1159 -0
  84. package/content/container-blocks/content.md +597 -0
  85. package/content/container-blocks/descriptions.md +870 -0
  86. package/content/container-blocks/drawer.md +1379 -0
  87. package/content/container-blocks/dropdownmenu.md +643 -0
  88. package/content/container-blocks/flex.md +1510 -0
  89. package/content/container-blocks/footer.md +380 -0
  90. package/content/container-blocks/googlemaps.md +546 -0
  91. package/content/container-blocks/googlemapsheatmap.md +607 -0
  92. package/content/container-blocks/googlemapsscript.md +61 -0
  93. package/content/container-blocks/header.md +302 -0
  94. package/content/container-blocks/label.md +739 -0
  95. package/content/container-blocks/layout.md +604 -0
  96. package/content/container-blocks/masonry.md +1090 -0
  97. package/content/container-blocks/mobilemenu.md +1244 -0
  98. package/content/container-blocks/modal.md +1180 -0
  99. package/content/container-blocks/pageheadermenu.md +614 -0
  100. package/content/container-blocks/pagesidebarlayout.md +438 -0
  101. package/content/container-blocks/pagesidermenu.md +651 -0
  102. package/content/container-blocks/popover.md +1421 -0
  103. package/content/container-blocks/result.md +972 -0
  104. package/content/container-blocks/sider.md +1064 -0
  105. package/content/container-blocks/span.md +747 -0
  106. package/content/container-blocks/spinner.md +267 -0
  107. package/content/container-blocks/splitter.md +1735 -0
  108. package/content/container-blocks/tabs.md +1718 -0
  109. package/content/container-blocks/tooltip.md +1274 -0
  110. package/content/container-blocks/watermark.md +515 -0
  111. package/content/controls/for.md +103 -0
  112. package/content/controls/if.md +107 -0
  113. package/content/controls/log.md +50 -0
  114. package/content/controls/parallel.md +71 -0
  115. package/content/controls/parallel_for.md +36 -0
  116. package/content/controls/reject.md +56 -0
  117. package/content/controls/return.md +66 -0
  118. package/content/controls/set_state.md +98 -0
  119. package/content/controls/switch.md +90 -0
  120. package/content/controls/throw.md +79 -0
  121. package/content/controls/try.md +88 -0
  122. package/content/deployment/docker.md +149 -0
  123. package/content/deployment/node-server.md +27 -0
  124. package/content/deployment/vercel.md +101 -0
  125. package/content/display-blocks/aggrid.md +1459 -0
  126. package/content/display-blocks/anchor.md +336 -0
  127. package/content/display-blocks/avatar.md +1154 -0
  128. package/content/display-blocks/breadcrumb.md +517 -0
  129. package/content/display-blocks/button.md +758 -0
  130. package/content/display-blocks/calendar.md +156 -0
  131. package/content/display-blocks/dangeroushtml.md +314 -0
  132. package/content/display-blocks/dangerousmarkdown.md +423 -0
  133. package/content/display-blocks/diffgit.md +44 -0
  134. package/content/display-blocks/difflist.md +225 -0
  135. package/content/display-blocks/diffsidebyside.md +56 -0
  136. package/content/display-blocks/difftimeline.md +94 -0
  137. package/content/display-blocks/divider.md +406 -0
  138. package/content/display-blocks/download.md +60 -0
  139. package/content/display-blocks/dropdownbutton.md +661 -0
  140. package/content/display-blocks/echart.md +418 -0
  141. package/content/display-blocks/floatbutton.md +545 -0
  142. package/content/display-blocks/html.md +311 -0
  143. package/content/display-blocks/icon.md +717 -0
  144. package/content/display-blocks/img.md +479 -0
  145. package/content/display-blocks/markdown.md +520 -0
  146. package/content/display-blocks/markdownwithcode.md +730 -0
  147. package/content/display-blocks/menu.md +1123 -0
  148. package/content/display-blocks/message.md +941 -0
  149. package/content/display-blocks/notification.md +1410 -0
  150. package/content/display-blocks/paragraph.md +643 -0
  151. package/content/display-blocks/progress.md +818 -0
  152. package/content/display-blocks/qrcode.md +519 -0
  153. package/content/display-blocks/s3download.md +240 -0
  154. package/content/display-blocks/search.md +360 -0
  155. package/content/display-blocks/skeleton.md +272 -0
  156. package/content/display-blocks/skeletonavatar.md +222 -0
  157. package/content/display-blocks/skeletonbutton.md +245 -0
  158. package/content/display-blocks/skeletoninput.md +223 -0
  159. package/content/display-blocks/skeletonparagraph.md +201 -0
  160. package/content/display-blocks/statistic.md +485 -0
  161. package/content/display-blocks/steps.md +585 -0
  162. package/content/display-blocks/tag.md +620 -0
  163. package/content/display-blocks/title.md +654 -0
  164. package/content/display-blocks/tour.md +2359 -0
  165. package/content/input-blocks/autocomplete.md +786 -0
  166. package/content/input-blocks/buttonselector.md +964 -0
  167. package/content/input-blocks/checkboxselector.md +765 -0
  168. package/content/input-blocks/checkboxswitch.md +497 -0
  169. package/content/input-blocks/colorselector.md +884 -0
  170. package/content/input-blocks/daterangeselector.md +777 -0
  171. package/content/input-blocks/dateselector.md +693 -0
  172. package/content/input-blocks/datetimeselector.md +791 -0
  173. package/content/input-blocks/inputgallery.md +528 -0
  174. package/content/input-blocks/monthselector.md +717 -0
  175. package/content/input-blocks/multipleselector.md +1337 -0
  176. package/content/input-blocks/numberinput.md +855 -0
  177. package/content/input-blocks/pagination.md +679 -0
  178. package/content/input-blocks/paragraphinput.md +1664 -0
  179. package/content/input-blocks/passwordinput.md +480 -0
  180. package/content/input-blocks/phonenumberinput.md +688 -0
  181. package/content/input-blocks/radioselector.md +820 -0
  182. package/content/input-blocks/ratingslider.md +684 -0
  183. package/content/input-blocks/s3uploadbutton.md +384 -0
  184. package/content/input-blocks/s3uploaddragger.md +305 -0
  185. package/content/input-blocks/s3uploadphoto.md +288 -0
  186. package/content/input-blocks/segmentedselector.md +782 -0
  187. package/content/input-blocks/selector.md +1162 -0
  188. package/content/input-blocks/switch.md +552 -0
  189. package/content/input-blocks/textarea.md +714 -0
  190. package/content/input-blocks/textinput.md +639 -0
  191. package/content/input-blocks/tiptapinput.md +226 -0
  192. package/content/input-blocks/tiptapmentioninput.md +471 -0
  193. package/content/input-blocks/titleinput.md +1094 -0
  194. package/content/input-blocks/treeinput.md +144 -0
  195. package/content/input-blocks/treemultipleselector.md +162 -0
  196. package/content/input-blocks/treeselector.md +185 -0
  197. package/content/input-blocks/upload.md +149 -0
  198. package/content/input-blocks/uploaddragger.md +85 -0
  199. package/content/input-blocks/uploadphoto.md +84 -0
  200. package/content/input-blocks/weekselector.md +630 -0
  201. package/content/list-blocks/controlledlist.md +498 -0
  202. package/content/list-blocks/list.md +529 -0
  203. package/content/list-blocks/listselector.md +301 -0
  204. package/content/list-blocks/masonrylist.md +230 -0
  205. package/content/migration/upgrade-guide.md +106 -0
  206. package/content/migration/v4-to-v5.md +589 -0
  207. package/content/migration/v5-to-v6.md +36 -0
  208. package/content/operators/_actions.md +58 -0
  209. package/content/operators/_and.md +76 -0
  210. package/content/operators/_api.md +254 -0
  211. package/content/operators/_app.md +114 -0
  212. package/content/operators/_args.md +65 -0
  213. package/content/operators/_array.md +331 -0
  214. package/content/operators/_base64.md +49 -0
  215. package/content/operators/_boolean.md +33 -0
  216. package/content/operators/_build.md +166 -0
  217. package/content/operators/_change_case.md +357 -0
  218. package/content/operators/_date.md +415 -0
  219. package/content/operators/_dayjs.md +128 -0
  220. package/content/operators/_diff.md +61 -0
  221. package/content/operators/_divide.md +32 -0
  222. package/content/operators/_eq.md +52 -0
  223. package/content/operators/_event.md +86 -0
  224. package/content/operators/_function.md +52 -0
  225. package/content/operators/_get.md +92 -0
  226. package/content/operators/_global.md +86 -0
  227. package/content/operators/_gt.md +50 -0
  228. package/content/operators/_gte.md +50 -0
  229. package/content/operators/_hash.md +112 -0
  230. package/content/operators/_if.md +30 -0
  231. package/content/operators/_if_none.md +47 -0
  232. package/content/operators/_index.md +48 -0
  233. package/content/operators/_input.md +86 -0
  234. package/content/operators/_intl.md +135 -0
  235. package/content/operators/_item.md +166 -0
  236. package/content/operators/_js.md +113 -0
  237. package/content/operators/_json.md +120 -0
  238. package/content/operators/_jsonata.md +152 -0
  239. package/content/operators/_locale.md +65 -0
  240. package/content/operators/_location.md +40 -0
  241. package/content/operators/_log.md +22 -0
  242. package/content/operators/_lt.md +50 -0
  243. package/content/operators/_lte.md +50 -0
  244. package/content/operators/_math.md +407 -0
  245. package/content/operators/_media.md +83 -0
  246. package/content/operators/_menu.md +62 -0
  247. package/content/operators/_module.md +340 -0
  248. package/content/operators/_mql.md +95 -0
  249. package/content/operators/_ne.md +62 -0
  250. package/content/operators/_not.md +33 -0
  251. package/content/operators/_number.md +159 -0
  252. package/content/operators/_nunjucks.md +117 -0
  253. package/content/operators/_object.md +253 -0
  254. package/content/operators/_operator.md +33 -0
  255. package/content/operators/_or.md +67 -0
  256. package/content/operators/_product.md +45 -0
  257. package/content/operators/_random.md +90 -0
  258. package/content/operators/_ref.md +80 -0
  259. package/content/operators/_regex.md +69 -0
  260. package/content/operators/_request.md +35 -0
  261. package/content/operators/_request_details.md +29 -0
  262. package/content/operators/_secret.md +56 -0
  263. package/content/operators/_state.md +134 -0
  264. package/content/operators/_step.md +98 -0
  265. package/content/operators/_string.md +327 -0
  266. package/content/operators/_subtract.md +24 -0
  267. package/content/operators/_sum.md +45 -0
  268. package/content/operators/_switch.md +37 -0
  269. package/content/operators/_t.md +96 -0
  270. package/content/operators/_theme.md +65 -0
  271. package/content/operators/_type.md +78 -0
  272. package/content/operators/_uri.md +49 -0
  273. package/content/operators/_url_query.md +92 -0
  274. package/content/operators/_user.md +154 -0
  275. package/content/operators/_uuid.md +118 -0
  276. package/content/operators/_var.md +88 -0
  277. package/content/operators/_yaml.md +96 -0
  278. package/content/other/introduction.md +39 -0
  279. package/content/other/next-auth-providers.md +3 -0
  280. package/content/other/updatesession.md +26 -0
  281. package/content/plugins/plugins-actions.md +80 -0
  282. package/content/plugins/plugins-connections.md +98 -0
  283. package/content/plugins/plugins-dev.md +138 -0
  284. package/content/plugins/plugins-introduction.md +29 -0
  285. package/content/plugins/plugins-operators.md +71 -0
  286. package/content/testing/e2e-auth.md +108 -0
  287. package/content/testing/e2e-configuration.md +107 -0
  288. package/content/testing/e2e-getting-started.md +96 -0
  289. package/content/testing/e2e-introduction.md +53 -0
  290. package/content/testing/e2e-mocking.md +155 -0
  291. package/content/testing/e2e-writing-tests.md +214 -0
  292. package/content/tutorial/tutorial-actions-operators.md +222 -0
  293. package/content/tutorial/tutorial-add-blocks.md +86 -0
  294. package/content/tutorial/tutorial-create-page.md +57 -0
  295. package/content/tutorial/tutorial-display-data-page.md +181 -0
  296. package/content/tutorial/tutorial-next-steps.md +53 -0
  297. package/content/tutorial/tutorial-requests-sql.md +22 -0
  298. package/content/tutorial/tutorial-start.md +71 -0
  299. package/content/user-authentication/auth-providers.md +15 -0
  300. package/content/user-authentication/login-and-logout.md +122 -0
  301. package/content/user-authentication/users-introduction.md +31 -0
  302. package/index.json +2281 -0
  303. package/package.json +34 -0
  304. package/scripts/extractAgentDocs.js +130 -0
@@ -0,0 +1,498 @@
1
+ # ControlledList
2
+
3
+ Dynamic list with built-in add and remove controls. Supports custom add/remove buttons, conditional field visibility, nested lists, theme tokens, and scoped validation. Use `addItemButton` and `removeItemIcon` to customize controls, and `visible` with operators for conditional fields.
4
+
5
+ ```yaml
6
+ - id: team
7
+ type: ControlledList
8
+ properties:
9
+ title: Team Members
10
+ blocks:
11
+ - id: team.$.name
12
+ type: TextInput
13
+ required: true
14
+ layout:
15
+ flex: 1 1 0
16
+ properties:
17
+ label:
18
+ disabled: true
19
+ placeholder: Full name
20
+ - id: team.$.role
21
+ type: Selector
22
+ layout:
23
+ flex: 1 1 0
24
+ properties:
25
+ label:
26
+ disabled: true
27
+ placeholder: Role
28
+ options:
29
+ - Developer
30
+ - Designer
31
+ - PM
32
+ - QA
33
+ - id: team.$.email
34
+ type: TextInput
35
+ layout:
36
+ flex: 1 1 0
37
+ properties:
38
+ label:
39
+ disabled: true
40
+ placeholder: Email
41
+ ```
42
+
43
+ ```yaml
44
+ - id: bookmarks
45
+ type: ControlledList
46
+ properties:
47
+ title: Bookmarks
48
+ addToFront: true
49
+ size: small
50
+ addItemButton:
51
+ title: Bookmark
52
+ icon: AiOutlinePlus
53
+ color: primary
54
+ variant: dashed
55
+ removeItemIcon:
56
+ name: AiOutlineDelete
57
+ blocks:
58
+ - id: bookmarks.$.url
59
+ type: TextInput
60
+ layout:
61
+ flex: 1 1 0
62
+ properties:
63
+ label:
64
+ disabled: true
65
+ placeholder: https://...
66
+ prefixIcon: AiOutlineLink
67
+ - id: bookmarks.$.label
68
+ type: TextInput
69
+ layout:
70
+ flex: 1 1 0
71
+ properties:
72
+ label:
73
+ disabled: true
74
+ placeholder: Label
75
+ ```
76
+
77
+ ```yaml
78
+ - id: attendees
79
+ type: ControlledList
80
+ properties:
81
+ title: Attendees
82
+ addItemButton:
83
+ title: Add Attendee
84
+ icon: AiOutlineUserAdd
85
+ color: primary
86
+ variant: outlined
87
+ blocks:
88
+ - id: attendees.$.name
89
+ type: TextInput
90
+ required: true
91
+ layout:
92
+ flex: 2 1 0
93
+ properties:
94
+ label:
95
+ disabled: true
96
+ placeholder: Full name
97
+ - id: attendees.$.type
98
+ type: Selector
99
+ required: true
100
+ layout:
101
+ flex: 1 1 0
102
+ properties:
103
+ label:
104
+ disabled: true
105
+ placeholder: Type
106
+ options:
107
+ - Adult
108
+ - Child
109
+ - Senior
110
+ - id: attendees.$.email
111
+ type: TextInput
112
+ required: true
113
+ visible:
114
+ _eq:
115
+ - _state: attendees.$.type
116
+ - Adult
117
+ layout:
118
+ flex: 1 1 0
119
+ properties:
120
+ label:
121
+ disabled: true
122
+ placeholder: Email
123
+ validate:
124
+ - message: Enter a valid email.
125
+ status: error
126
+ pass:
127
+ _regex:
128
+ pattern: ^[^@]+@[^@]+\.[^@]+$
129
+ on:
130
+ _if_none:
131
+ - _state: attendees.$.email
132
+ - ""
133
+ - id: attendees.$.meal
134
+ type: Selector
135
+ visible:
136
+ _eq:
137
+ - _state: attendees.$.type
138
+ - Adult
139
+ layout:
140
+ flex: 1 1 0
141
+ properties:
142
+ label:
143
+ disabled: true
144
+ placeholder: Meal
145
+ options:
146
+ - Standard
147
+ - Vegetarian
148
+ - Vegan
149
+ - id: attendees.$.age
150
+ type: NumberInput
151
+ visible:
152
+ _eq:
153
+ - _state: attendees.$.type
154
+ - Child
155
+ layout:
156
+ flex: 1 1 0
157
+ properties:
158
+ label:
159
+ disabled: true
160
+ placeholder: Age
161
+ min: 1
162
+ max: 17
163
+ - id: attendees.$.supervision
164
+ type: Switch
165
+ visible:
166
+ _eq:
167
+ - _state: attendees.$.type
168
+ - Child
169
+ layout:
170
+ flex: 0 0 auto
171
+ properties:
172
+ label: Needs supervision
173
+ size: small
174
+ - id: attendees.$.wheelchair
175
+ type: Switch
176
+ visible:
177
+ _eq:
178
+ - _state: attendees.$.type
179
+ - Senior
180
+ layout:
181
+ flex: 0 0 auto
182
+ properties:
183
+ label: Wheelchair access
184
+ size: small
185
+ - id: attendees.$.dietary
186
+ type: TextInput
187
+ visible:
188
+ _eq:
189
+ - _state: attendees.$.type
190
+ - Senior
191
+ layout:
192
+ flex: 1 1 0
193
+ properties:
194
+ label:
195
+ disabled: true
196
+ placeholder: Dietary notes
197
+ - id: attendees_footer
198
+ type: Box
199
+ layout:
200
+ justify: flex-end
201
+ blocks:
202
+ - id: attendees_register
203
+ type: Button
204
+ layout:
205
+ flex: 0 0 auto
206
+ properties:
207
+ title: Register All
208
+ icon: AiOutlineSend
209
+ color: primary
210
+ variant: solid
211
+ events:
212
+ onClick:
213
+ - id: attendees_validate
214
+ type: Validate
215
+ params:
216
+ regex: ^attendees
217
+ - id: attendees_msg
218
+ type: DisplayMessage
219
+ params:
220
+ content: All attendees registered!
221
+ status: success
222
+ ```
223
+
224
+ ```yaml
225
+ - id: expenses
226
+ type: ControlledList
227
+ properties:
228
+ title: Expenses
229
+ addItemButton:
230
+ title: Add Expense
231
+ icon: AiOutlinePlus
232
+ color: primary
233
+ variant: dashed
234
+ theme:
235
+ itemPadding: 16px 12px
236
+ blocks:
237
+ - id: expenses.$.date
238
+ type: DateSelector
239
+ required: true
240
+ layout:
241
+ flex: 1 1 0
242
+ properties:
243
+ label:
244
+ disabled: true
245
+ placeholder: Date
246
+ - id: expenses.$.category
247
+ type: Selector
248
+ required: true
249
+ layout:
250
+ flex: 1 1 0
251
+ properties:
252
+ label:
253
+ disabled: true
254
+ placeholder: Category
255
+ options:
256
+ - Travel
257
+ - Meals
258
+ - Software
259
+ - Equipment
260
+ - Other
261
+ - id: expenses.$.desc
262
+ type: TextInput
263
+ required: true
264
+ layout:
265
+ flex: 2 1 0
266
+ properties:
267
+ label:
268
+ disabled: true
269
+ placeholder: Description
270
+ - id: expenses.$.amount
271
+ type: NumberInput
272
+ required: true
273
+ layout:
274
+ flex: 1 1 0
275
+ properties:
276
+ label:
277
+ disabled: true
278
+ placeholder: Amount
279
+ min: 0
280
+ step: 0.01
281
+ prefix: $
282
+ - id: expenses_footer
283
+ type: Box
284
+ layout:
285
+ gap: 16
286
+ justify: flex-end
287
+ align: center
288
+ blocks:
289
+ - id: expenses_total
290
+ type: Statistic
291
+ layout:
292
+ flex: 0 0 auto
293
+ properties:
294
+ title: Total Expenses
295
+ prefix: $
296
+ precision: 2
297
+ value:
298
+ _js: |
299
+ const expenses = state('expenses') || [];
300
+ return expenses.reduce((sum, item) => sum + (item.amount || 0), 0);
301
+ - id: expenses_submit
302
+ type: Button
303
+ layout:
304
+ flex: 0 0 auto
305
+ properties:
306
+ title: Submit Report
307
+ icon: AiOutlineSend
308
+ color: primary
309
+ variant: solid
310
+ events:
311
+ onClick:
312
+ - id: expenses_validate
313
+ type: Validate
314
+ params:
315
+ regex: ^expenses
316
+ - id: expenses_msg
317
+ type: DisplayMessage
318
+ params:
319
+ content: Expense report submitted!
320
+ status: success
321
+ ```
322
+
323
+ ```yaml
324
+ - id: projects
325
+ type: ControlledList
326
+ properties:
327
+ title: Projects
328
+ addItemButton:
329
+ title: Add Project
330
+ icon: AiOutlinePlus
331
+ color: primary
332
+ variant: outlined
333
+ blocks:
334
+ - id: projects.$.name
335
+ type: TextInput
336
+ required: true
337
+ layout:
338
+ flex: 1 1 0
339
+ properties:
340
+ label:
341
+ disabled: true
342
+ placeholder: Project name
343
+ - id: projects.$.status
344
+ type: Selector
345
+ layout:
346
+ flex: 0 0 140px
347
+ properties:
348
+ label:
349
+ disabled: true
350
+ placeholder: Status
351
+ options:
352
+ - Planning
353
+ - Active
354
+ - Review
355
+ - Done
356
+ - id: projects.$.tasks
357
+ type: ControlledList
358
+ properties:
359
+ title: Tasks
360
+ size: small
361
+ addItemButton:
362
+ title: Add Task
363
+ icon: AiOutlinePlus
364
+ size: small
365
+ variant: dashed
366
+ blocks:
367
+ - id: projects.$.tasks.$.task
368
+ type: TextInput
369
+ required: true
370
+ layout:
371
+ flex: 1 1 0
372
+ properties:
373
+ label:
374
+ disabled: true
375
+ placeholder: Task description
376
+ size: small
377
+ - id: projects.$.tasks.$.done
378
+ type: Switch
379
+ layout:
380
+ flex: 0 0 auto
381
+ properties:
382
+ label: Done
383
+ size: small
384
+ - id: projects_footer
385
+ type: Box
386
+ layout:
387
+ justify: flex-end
388
+ blocks:
389
+ - id: projects_save
390
+ type: Button
391
+ layout:
392
+ flex: 0 0 auto
393
+ properties:
394
+ title: Save All
395
+ icon: AiOutlineSave
396
+ color: primary
397
+ variant: solid
398
+ events:
399
+ onClick:
400
+ - id: projects_validate
401
+ type: Validate
402
+ params:
403
+ regex: ^projects
404
+ - id: projects_msg
405
+ type: DisplayMessage
406
+ params:
407
+ content: Projects saved!
408
+ status: success
409
+ ```
410
+
411
+ ```yaml
412
+ - id: tags
413
+ type: ControlledList
414
+ properties:
415
+ title: Tags
416
+ size: small
417
+ addItemButton:
418
+ title: Add Tag
419
+ icon: AiOutlinePlus
420
+ size: small
421
+ variant: dashed
422
+ events:
423
+ onAdd:
424
+ - id: tags_added_msg
425
+ type: DisplayMessage
426
+ params:
427
+ content:
428
+ _string.concat:
429
+ - "Added row at index "
430
+ - _event: index
431
+ duration: 1
432
+ onRemove:
433
+ - id: tags_removed_msg
434
+ type: DisplayMessage
435
+ params:
436
+ content:
437
+ _string.concat:
438
+ - Removed "
439
+ - _if_none:
440
+ - _event: item.label
441
+ - (empty)
442
+ - '" at index '
443
+ - _event: index
444
+ status: warning
445
+ duration: 2
446
+ blocks:
447
+ - id: tags.$.label
448
+ type: TextInput
449
+ layout:
450
+ flex: 1 1 0
451
+ properties:
452
+ label:
453
+ disabled: true
454
+ placeholder: Tag name
455
+ size: small
456
+ ```
457
+
458
+ | Property | Type | Default | Description |
459
+ | --- | --- | --- | --- |
460
+ | `title` | string | - | Controlled list title. |
461
+ | `addToFront` | boolean | `false` | When true, add new items to the front of the list. |
462
+ | `hideAddButton` | boolean | `false` | When true, hide the add new item button. |
463
+ | `size` | string | `"default"` | Size of the list. Enum: `small`, `default`, `large`. |
464
+ | `addItemButton` | object | - | Custom add item button properties. |
465
+ | `removeItemIcon` | string \| object | - | Custom remove item icon properties. Defaults to `AiOutlineMinusCircle` at a standard size with the antd error color inherited from the icon wrapper — override via `class.removeIcon` / `style.removeIcon` for visual tweaks, or via this property to change the icon name itself. |
466
+ | `hideRemoveButton` | boolean | `false` | When true, hide the remove item button on each list item. |
467
+ | `noDataTitle` | string | - | Title to show when list is empty. |
468
+ | `minItems` | number | `0` | Minimum number of items in the controlled list. |
469
+ | `theme` | object | - | Antd design token overrides for this block. See [antd design tokens](https://ant.design/components/overview#design-token). See [Ant Design list tokens](https://ant.design/components/list#design-token). |
470
+ | `theme.titleMarginBottom` | number | `12` | Margin bottom of list item title. |
471
+ | `theme.contentWidth` | number | `220` | Width of the content area. |
472
+ | `theme.itemPadding` | string | `"12px 0"` | Padding of list items. |
473
+ | `theme.itemPaddingLG` | string | `"16px 24px"` | Padding of list items (large size). |
474
+ | `theme.itemPaddingSM` | string | `"8px 16px"` | Padding of list items (small size). |
475
+ | `theme.headerBg` | string | `"transparent"` | Background color of the list header. |
476
+ | `theme.footerBg` | string | `"transparent"` | Background color of the list footer. |
477
+ | `theme.emptyTextPadding` | number | `32` | Padding for the empty text area. |
478
+ | `theme.metaMarginBottom` | number | `16` | Margin bottom of list item meta. |
479
+ | `theme.avatarMarginRight` | number | `16` | Margin right of the avatar in list items. |
480
+ | `theme.descriptionFontSize` | number | `14` | Font size of the description text. |
481
+
482
+ | Event | Event Data | Description |
483
+ | --- | --- | --- |
484
+ | `onAdd` | \- | Triggered after a new item is added via the add button. The event payload is `{ index, item }`, where `item` is the newly added value (`undefined` for an empty row). |
485
+ | `onRemove` | \- | Triggered after an item is removed via the remove icon. The event payload is `{ index, item }`, where `item` is the removed value captured before removal. |
486
+
487
+ | Key | Target |
488
+ | --- | --- |
489
+ | `/block` | Outer block wrapper (always available). |
490
+ | `/element` | The ControlledList element. |
491
+ | `/header` | The ControlledList header. |
492
+ | `/footer` | The ControlledList footer. |
493
+ | `/item` | The ControlledList item. |
494
+ | `/removeIcon` | The remove-item icon wrapper. Defaults to the antd error color at `fontSizeLG`; override `color`, `font-size`, or spacing here. |
495
+
496
+ | Slot | Description |
497
+ | --- | --- |
498
+ | `content` | Blocks rendered for each list item. |