@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,226 @@
1
+ # TiptapInput
2
+
3
+ Rich-text editor built on TipTap. Supports bold, italic, strike-through, highlights, headings, lists, tables, links, and drag/drop or paste image uploads via a configurable upload-policy request (`uploadPolicyRequestId`) — any storage provider (S3, GCS, Azure). Configure `downloadPolicyRequestId` to resolve inserted image URLs through a download request.
4
+
5
+ ```yaml
6
+ - id: tiptap_default
7
+ type: TiptapInput
8
+ properties:
9
+ title: Notes
10
+ placeholder: Start typing here. Try **bold**, *italic*, or headings.
11
+ ```
12
+
13
+ ```yaml
14
+ - id: tiptap_prepopulated
15
+ type: TiptapInput
16
+ events:
17
+ onMount:
18
+ - id: tiptap_prepopulated_set
19
+ type: SetState
20
+ params:
21
+ tiptap_prepopulated:
22
+ html: >
23
+ <h2>What's new</h2> <p>Highlights from this release:</p> <ul>
24
+ <li>Rich-text editor built on <a href="https://tiptap.dev">TipTap</a></li>
25
+ <li>Drag-and-drop image uploads</li>
26
+ <li>Inline <strong>bold</strong>, <em>italic</em>, and <mark>highlights</mark></li>
27
+ </ul> <blockquote><p>Pair it with a TextArea when you need a
28
+ simple fallback.</p></blockquote>
29
+ properties:
30
+ title: Release notes
31
+ ```
32
+
33
+ ```yaml
34
+ - id: tiptap_disabled
35
+ type: TiptapInput
36
+ events:
37
+ onMount:
38
+ - id: tiptap_disabled_set
39
+ type: SetState
40
+ params:
41
+ tiptap_disabled:
42
+ html: <p>This editor is disabled and cannot be edited.</p>
43
+ properties:
44
+ title: Read only
45
+ disabled: true
46
+ ```
47
+
48
+ ```yaml
49
+ - id: tiptap_borderless
50
+ type: TiptapInput
51
+ properties:
52
+ title: Borderless editor
53
+ bordered: false
54
+ placeholder: No border, just content.
55
+ ```
56
+
57
+ ```yaml
58
+ - id: tiptap_rows_2
59
+ type: TiptapInput
60
+ properties:
61
+ title: Short note
62
+ placeholder: Exactly 2 rows tall.
63
+ rows: 2
64
+ ```
65
+
66
+ ```yaml
67
+ - id: tiptap_autosize_range
68
+ type: TiptapInput
69
+ properties:
70
+ title: Grows between 2 and 5 rows
71
+ placeholder: Keep typing — scrolls past 5 rows.
72
+ autoSize:
73
+ minRows: 2
74
+ maxRows: 5
75
+ ```
76
+
77
+ ```yaml
78
+ - id: tiptap_validation
79
+ type: TiptapInput
80
+ required: true
81
+ properties:
82
+ title: Release notes (required)
83
+ placeholder: Type at least 10 characters, then click Validate.
84
+ rows: 3
85
+ validate:
86
+ - status: error
87
+ message: Release notes must be at least 10 characters.
88
+ pass:
89
+ _gte:
90
+ - _string.length:
91
+ _state: tiptap_validation.text
92
+ - 10
93
+ - id: tiptap_validation_button
94
+ type: Button
95
+ properties:
96
+ title: Validate
97
+ events:
98
+ onClick:
99
+ - id: tiptap_validation_run
100
+ type: Validate
101
+ params:
102
+ - tiptap_validation
103
+ ```
104
+
105
+ ```yaml
106
+ - id: tiptap_autosize_true
107
+ type: TiptapInput
108
+ properties:
109
+ title: Unconstrained
110
+ placeholder: No height cap.
111
+ autoSize: true
112
+ ```
113
+
114
+ ```yaml
115
+ - id: tiptap_minimal
116
+ type: TiptapInput
117
+ properties:
118
+ title: Plain note
119
+ placeholder: Bold/italic/lists only.
120
+ image:
121
+ disabled: true
122
+ table:
123
+ disabled: true
124
+ highlight:
125
+ disabled: true
126
+ ```
127
+
128
+ ```yaml
129
+ - id: tiptap_starterkit
130
+ type: TiptapInput
131
+ properties:
132
+ title: Short-form
133
+ placeholder: No code block or blockquote.
134
+ starterKit:
135
+ codeBlock: false
136
+ blockquote: false
137
+ horizontalRule: false
138
+ ```
139
+
140
+ ```yaml
141
+ - id: tiptap_with_table
142
+ type: TiptapInput
143
+ events:
144
+ onMount:
145
+ - id: tiptap_with_table_set
146
+ type: SetState
147
+ params:
148
+ tiptap_with_table:
149
+ html: |
150
+ <h3>Weekly sync</h3> <p>Schedule for today's meeting:</p> <table>
151
+ <thead>
152
+ <tr><th>Time</th><th>Topic</th><th>Owner</th></tr>
153
+ </thead>
154
+ <tbody>
155
+ <tr><td>09:00</td><td>Kickoff</td><td>Alice</td></tr>
156
+ <tr><td>09:15</td><td>Review last week</td><td>Bob</td></tr>
157
+ <tr><td>09:45</td><td>This week's plan</td><td>Carol</td></tr>
158
+ <tr><td>10:00</td><td>Wrap-up</td><td>Alice</td></tr>
159
+ </tbody>
160
+ </table> <p>Notes:</p> <ul>
161
+ <li>Bring the latest metrics</li>
162
+ <li>Send follow-ups within 24h</li>
163
+ </ul>
164
+ properties:
165
+ title: Agenda
166
+ ```
167
+
168
+ ```yaml
169
+ - id: tiptap_links
170
+ type: TiptapInput
171
+ events:
172
+ onMount:
173
+ - id: tiptap_links_set
174
+ type: SetState
175
+ params:
176
+ tiptap_links:
177
+ html: <p>Visit <a href="https://lowdefy.com">lowdefy.com</a> or type a URL and
178
+ press space.</p>
179
+ properties:
180
+ title: Open links in place
181
+ link:
182
+ openOnClick: false
183
+ ```
184
+
185
+ | Property | Type | Default | Description |
186
+ | --- | --- | --- | --- |
187
+ | `allowedMimeTypes` | array | - | Mime-types accepted by the drag/drop and paste file handler. Defaults to common image types (jpeg, png, gif, webp). Only used when uploadPolicyRequestId is set. |
188
+ | `autoSize` | boolean \| object | - | Either a boolean (true to auto-grow without a cap) or an object with minRows/maxRows. Ignored when `rows` is set. |
189
+ | `autoSize.minRows` | integer | - | Minimum visible rows before content overflows. |
190
+ | `autoSize.maxRows` | integer | - | Maximum visible rows; beyond this the editor scrolls vertically. |
191
+ | `bordered` | boolean | `true` | Whether the editor renders with a border. |
192
+ | `disabled` | boolean | `false` | Render the editor as read-only. |
193
+ | `highlight` | object | - | Text highlight extension settings. |
194
+ | `highlight.disabled` | boolean | `false` | Disable the Highlight extension and its bubble-menu color swatches. |
195
+ | `highlight.multicolor` | boolean | `true` | Allow highlights to carry a color value. Disable for single-color. |
196
+ | `image` | object | - | Image extension settings. |
197
+ | `image.disabled` | boolean | `false` | Disable the Image extension. |
198
+ | `image.maxWidth` | string | `"80%"` | Inline CSS max-width applied to inserted images. |
199
+ | `image.zoom` | number | `0.5` | Inline CSS zoom factor applied to inserted images. |
200
+ | `inputStyle` | object | - | Inline style applied to the editable area of the editor. |
201
+ | `label` | object | - | Label configuration forwarded to the Lowdefy Label block. |
202
+ | `link` | object | - | Link extension settings. |
203
+ | `link.disabled` | boolean | `false` | Disable the Link extension. |
204
+ | `link.autolink` | boolean | `true` | Auto-convert URLs typed in the editor to links. |
205
+ | `link.linkOnPaste` | boolean | `true` | Convert pasted URLs to links. |
206
+ | `link.openOnClick` | boolean | `true` | Open links in a new tab when clicked in view mode. |
207
+ | `link.defaultProtocol` | string | `"https"` | Protocol prefixed to URLs that omit one (e.g. "https"). |
208
+ | `placeholder` | string | - | Placeholder shown when the editor is empty. |
209
+ | `rows` | integer | - | Fix the editor height to exactly this many rows. Takes precedence over autoSize. |
210
+ | `downloadPolicyRequestId` | string | - | Id of a download request (e.g. AwsS3PresignedGetObject) used to resolve the inserted image URL after upload. Inline images persist in saved content, so the request should set public: true (and the upload request the provider public-read acl) to return a stable, non-expiring URL. When unset, a legacy unsigned object URL is constructed from the upload response (S3-shaped, deprecated). |
211
+ | `s3PostPolicyRequestId` | string | - | Deprecated — use uploadPolicyRequestId instead. |
212
+ | `uploadPolicyRequestId` | string | - | Id of an upload-policy request (e.g. AwsS3PresignedPostPolicy, GcsSignedPostPolicy, AzureBlobUploadSas). When set, images dragged or pasted into the editor are uploaded via that request and inserted as nodes. Leave unset to disable image uploads. |
213
+ | `size` | string | - | Label size forwarded to the Label block. Enum: `small`, `middle`, `large`. |
214
+ | `starterKit` | object | - | Options forwarded to TipTap StarterKit (https://tiptap.dev/docs/editor/extensions/functionality/starterkit). Use this to disable bundled extensions (e.g. {heading: false, codeBlock: false}). |
215
+ | `table` | object | - | Table extension settings. |
216
+ | `table.disabled` | boolean | `false` | Disable the Table extension and its row/header/cell nodes. |
217
+ | `table.resizable` | boolean | `true` | Allow column resizing with a drag handle. |
218
+ | `title` | string | - | Label title shown above the editor. |
219
+
220
+ | Event | Event Data | Description |
221
+ | --- | --- | --- |
222
+ | `onChange` | \- | Trigger action when the editor content is changed. |
223
+
224
+ No CSS keys defined.
225
+
226
+ No slots defined.
@@ -0,0 +1,471 @@
1
+ # TiptapMentionInput
2
+
3
+ Rich-text editor with @-mention support. Same feature set as TiptapInput, plus a mention dropdown populated from a static options list or a request. Mention options can be marked as groups (roles, teams, queues) to render under their own menu section, as distinctly coloured chips, and with a hover popover listing the group&#39;s current members. See the guide below.
4
+
5
+ ## Group mentions
6
+
7
+ Beyond the flat mention list, `TiptapMentionInput` can treat some mention options as **groups** — an app-defined kind such as a role, a team, a queue, or a saved segment. A group mention:
8
+
9
+ - sits under its own heading in the suggestion menu (`tag.section`),
10
+ - renders as a distinctly coloured chip (`tag.color`), and
11
+ - shows the group's current members in a hover popover in the live editor (`mentions.groupMembers`).
12
+
13
+ The block hardcodes no group. Your app decides which groups exist, what they are called, how they are coloured, and who belongs to them — the block only reflects that data onto the chip and the menu.
14
+
15
+ ### Presentation lives on `tag`, storage lives on `value`
16
+
17
+ Each mention option is an object of the form `{ label, value, tag }`:
18
+
19
+ - `label` — the text matched against what the author types (unchanged).
20
+ - `value` — the **opaque payload** stored on the mention node and emitted in the block's `mentions` value. Its shape is entirely yours; the block never reads it for presentation.
21
+ - `tag` — the presentation fields the block reads to render the chip and menu.
22
+
23
+ All group behaviour is driven from `tag`, never from `value`. This keeps `value` free to hold whatever your app needs to expand the mention later (a role slug, a queue id, a segment query), while the block stays a pure presentation layer.
24
+
25
+ The `tag` fields are not listed in the properties table above, because `options` has no per-item schema. They are:
26
+
27
+ | Field | Purpose |
28
+ | ------------- | ------------------------------------------------------------------------------------------------------------------- |
29
+ | `tag.title` | Chip text — `@Finance` renders from `tag.title: Finance`. Falls back to `label`. |
30
+ | `tag.section` | Menu heading this option sits under. Options without a section render flat, with no heading. |
31
+ | `tag.group` | Marks this option a **group** chip. An opaque, app-defined string — it becomes the chip class, the `data-mention-group` attribute, and the hover lookup key. |
32
+ | `tag.color` | Chip colour for this option (any CSS colour). Inlined on the chip, so it travels with the saved HTML. |
33
+
34
+ An individual-person option simply omits `section`, `group`, and `color`, and renders exactly as before.
35
+
36
+ Sections and groups are **orthogonal**: a section is a menu heading, a group is a chip identity. You may put several group options under one "Roles" section, give each group its own section, or use sections purely to group people with no group chips at all.
37
+
38
+ ### `mentions.limit`
39
+
40
+ `limit` (integer, default `5`) caps how many suggestions the menu shows. When at least one visible option declares a `tag.section`, the cap is applied **per section**, so a large "People" section can't crowd every "Roles" option out of the list. When no option declares a section, the same limit caps the flat list, matching the pre-group behaviour.
41
+
42
+ ### Group chip colour
43
+
44
+ A group chip's colour comes from `tag.color` on the option — any CSS colour string:
45
+
46
+ ```yaml
47
+ options:
48
+ - label: Finance
49
+ value: { role: finance-admin }
50
+ tag: { section: Roles, group: finance, color: '#722ed1' }
51
+ - label: Developers
52
+ value: { role: developer }
53
+ tag: { section: Roles, group: devs, color: '#13c2c2' }
54
+ ```
55
+
56
+ The colour is written as an inline `style` on the chip, so it travels with the saved HTML — a group chip looks right anywhere the stored content is rendered, with no per-app stylesheet. Because `tag.color` rides on the selected option, it is always current even when options load from a request. If you prefer to control colour from CSS instead, omit `tag.color` and target `.tiptap-mention-group[data-mention-group="finance"]` in your own stylesheet.
57
+
58
+ ### `mentions.groupMembers` — may be async
59
+
60
+ `groupMembers` is a `{ '<group>': [{ name, email }] }` map. Hovering a group chip in the **live editor** shows a popover listing that group's current members:
61
+
62
+ ```yaml
63
+ mentions:
64
+ groupMembers:
65
+ finance:
66
+ - { name: Jane Doe, email: jane@example.com }
67
+ devs:
68
+ - { name: Ada Lovelace, email: ada@example.com }
69
+ ```
70
+
71
+ `groupMembers` **may be loaded from a request** — it is read live, at hover time, so it does not need to be present when the block mounts. (This is the one piece of group data read on each hover rather than captured up front.)
72
+
73
+ Hover is scoped to the live editor only. If the group has no entry in `groupMembers`, no popover shows.
74
+
75
+ ### `getHref` — nullish renders a `<span>`
76
+
77
+ `getHref` is an optional `_function` that receives the selected option and returns an href. Its **return value** decides the element:
78
+
79
+ - a non-nullish return renders the mention as an `<a>`;
80
+ - a nullish return (`null`/`undefined`) renders a plain `<span>`.
81
+
82
+ Return `null` for group options — a group has no profile page — and a URL for people.
83
+
84
+ > Return `null` or `undefined`, **not** an empty string. `''` is not nullish, so `getHref` returning `''` still renders `<a href="">`.
85
+
86
+ ### Emitted chip markup
87
+
88
+ A group chip renders as:
89
+
90
+ ```html
91
+ <span class="tiptap-mention tiptap-mention-group" data-mention-group="finance" style="color: #722ed1">@Finance</span>
92
+ ```
93
+
94
+ (or an `<a>` with the same classes and attributes when `getHref` returns a link). The colour is inlined via `style`, and the group key is exposed as `data-mention-group`. An app that renders saved comment HTML elsewhere — a comment timeline, a notification email — can style these chips or attach its own hover behaviour by targeting the `data-mention-group` attribute. The block's own hover popover is live-editor-only, so any hover on saved content is the app's to build against the same attribute.
95
+
96
+ ### Worked example
97
+
98
+ A mixed `options` array — people alongside group options carrying `tag.section`, `tag.group`, and `tag.color` — a `groupMembers` map, and a `getHref` that returns a link for people and nothing for groups:
99
+
100
+ ```yaml
101
+ - id: comment
102
+ type: TiptapMentionInput
103
+ properties:
104
+ mentions:
105
+ char: '@'
106
+ limit: 8 # per-section result cap
107
+ # people carry value.href → <a>; groups omit it → nullish → <span>
108
+ getHref:
109
+ _function:
110
+ __args: 0.value.href
111
+ options:
112
+ - label: Jane Doe # person — no tag.group, links to a profile
113
+ value:
114
+ contact_id: c_001
115
+ href: '/contacts?_id=c_001'
116
+ tag:
117
+ section: People
118
+ - label: Ada Lovelace
119
+ value:
120
+ contact_id: c_002
121
+ href: '/contacts?_id=c_002'
122
+ tag:
123
+ section: People
124
+ - label: Finance # group — no href, coloured chip, hover members
125
+ value:
126
+ type: role
127
+ role: finance-admin
128
+ tag:
129
+ section: Roles
130
+ group: finance
131
+ color: '#722ed1'
132
+ - label: Developers
133
+ value:
134
+ type: role
135
+ role: developers
136
+ tag:
137
+ section: Roles
138
+ group: devs
139
+ color: '#13c2c2'
140
+ groupMembers: # shown on chip hover in the live editor; may come from a request
141
+ finance:
142
+ - { name: Jane Doe, email: jane@example.com }
143
+ devs:
144
+ - { name: Ada Lovelace, email: ada@example.com }
145
+ ```
146
+
147
+ `options` and `groupMembers` are typically populated from requests (`_request: mention_options`, `_request: group_members`). How that data is built, and how the stored `value` is later expanded to notification recipients, are entirely app-side — the block only records the mention. If a group's colour is itself dynamic, it rides safely on `tag.color` because that value is stored on the selected option.
148
+
149
+ ```yaml
150
+ - id: tiptap_mention_default
151
+ type: TiptapMentionInput
152
+ properties:
153
+ title: Ticket note
154
+ placeholder: Type @ to mention someone.
155
+ mentions:
156
+ options:
157
+ - label: Alice
158
+ value:
159
+ _id: user_1
160
+ name: Alice
161
+ - label: Bob
162
+ value:
163
+ _id: user_2
164
+ name: Bob
165
+ - label: Carol
166
+ value:
167
+ _id: user_3
168
+ name: Carol
169
+ ```
170
+
171
+ ```yaml
172
+ - id: tiptap_mention_prepopulated
173
+ type: TiptapMentionInput
174
+ events:
175
+ onMount:
176
+ - id: tiptap_mention_prepopulated_set
177
+ type: SetState
178
+ params:
179
+ tiptap_mention_prepopulated:
180
+ html: >
181
+ <p>Thanks <span class="tiptap-mention">@Alice</span> for the
182
+ review. Assigning follow-up to <span
183
+ class="tiptap-mention">@Bob</span>.</p>
184
+ properties:
185
+ title: Ticket summary
186
+ mentions:
187
+ options:
188
+ - label: Alice
189
+ value:
190
+ _id: user_1
191
+ - label: Bob
192
+ value:
193
+ _id: user_2
194
+ ```
195
+
196
+ ```yaml
197
+ - id: tiptap_mention_hashtags
198
+ type: TiptapMentionInput
199
+ properties:
200
+ title: Tag the ticket
201
+ placeholder: "Type # to add a tag."
202
+ mentions:
203
+ char: "#"
204
+ allowSpaces: false
205
+ options:
206
+ - label: bug
207
+ value:
208
+ _id: tag_bug
209
+ - label: feature
210
+ value:
211
+ _id: tag_feature
212
+ - label: needs-triage
213
+ value:
214
+ _id: tag_triage
215
+ ```
216
+
217
+ ```yaml
218
+ - id: tiptap_mention_links
219
+ type: TiptapMentionInput
220
+ properties:
221
+ title: Link mentions to profile pages
222
+ placeholder: Type @ — selections render as <a>.
223
+ mentions:
224
+ options:
225
+ - label: Alice
226
+ value:
227
+ _id: user_1
228
+ - label: Bob
229
+ value:
230
+ _id: user_2
231
+ getHref:
232
+ _function:
233
+ __string.concat:
234
+ - /users/
235
+ - __args: 0.value._id
236
+ ```
237
+
238
+ ```yaml
239
+ - id: tiptap_mention_autosize
240
+ type: TiptapMentionInput
241
+ properties:
242
+ title: Grows between 2 and 5 rows
243
+ placeholder: Type @ to mention. Scrolls past 5 rows.
244
+ autoSize:
245
+ minRows: 2
246
+ maxRows: 5
247
+ mentions:
248
+ options:
249
+ - label: Alice
250
+ value:
251
+ _id: user_1
252
+ - label: Bob
253
+ value:
254
+ _id: user_2
255
+ ```
256
+
257
+ ```yaml
258
+ - id: tiptap_mention_validation
259
+ type: TiptapMentionInput
260
+ required: true
261
+ properties:
262
+ title: Mention a teammate (required)
263
+ placeholder: Type @ and pick someone, then click Validate.
264
+ rows: 3
265
+ mentions:
266
+ options:
267
+ - label: Alice
268
+ value:
269
+ _id: user_1
270
+ - label: Bob
271
+ value:
272
+ _id: user_2
273
+ validate:
274
+ - status: error
275
+ message: Please mention at least one teammate.
276
+ pass:
277
+ _gt:
278
+ - _string.length:
279
+ _state: tiptap_mention_validation.text
280
+ - 0
281
+ - id: tiptap_mention_validation_button
282
+ type: Button
283
+ properties:
284
+ title: Validate
285
+ events:
286
+ onClick:
287
+ - id: tiptap_mention_validation_run
288
+ type: Validate
289
+ params:
290
+ - tiptap_mention_validation
291
+ ```
292
+
293
+ ```yaml
294
+ - id: tiptap_mention_disabled
295
+ type: TiptapMentionInput
296
+ events:
297
+ onMount:
298
+ - id: tiptap_mention_disabled_set
299
+ type: SetState
300
+ params:
301
+ tiptap_mention_disabled:
302
+ html: '<p>Mentions render inline: <span
303
+ class="tiptap-mention">@Alice</span>.</p>'
304
+ properties:
305
+ title: Read only
306
+ disabled: true
307
+ ```
308
+
309
+ ```yaml
310
+ - id: tiptap_mention_sectioned
311
+ type: TiptapMentionInput
312
+ properties:
313
+ title: Mention people or roles
314
+ placeholder: Type @ — options are grouped, each section capped at 3.
315
+ mentions:
316
+ limit: 3
317
+ options:
318
+ - label: Alice
319
+ value:
320
+ _id: user_1
321
+ tag:
322
+ section: People
323
+ - label: Bob
324
+ value:
325
+ _id: user_2
326
+ tag:
327
+ section: People
328
+ - label: Carol
329
+ value:
330
+ _id: user_3
331
+ tag:
332
+ section: People
333
+ - label: Dave
334
+ value:
335
+ _id: user_4
336
+ tag:
337
+ section: People
338
+ - label: Finance
339
+ value:
340
+ _id: role_finance
341
+ tag:
342
+ section: Roles
343
+ - label: Developers
344
+ value:
345
+ _id: role_devs
346
+ tag:
347
+ section: Roles
348
+ ```
349
+
350
+ ```yaml
351
+ - id: tiptap_mention_groups
352
+ type: TiptapMentionInput
353
+ properties:
354
+ title: Mention people or groups
355
+ placeholder: Type @ — groups render as coloured chips, people as links.
356
+ mentions:
357
+ groupMembers:
358
+ finance:
359
+ - name: Jane Doe
360
+ email: jane@example.com
361
+ - name: John Smith
362
+ email: john@example.com
363
+ devs:
364
+ - name: Ada Lovelace
365
+ email: ada@example.com
366
+ - name: Alan Turing
367
+ email: alan@example.com
368
+ getHref:
369
+ _function:
370
+ __args: 0.value.href
371
+ options:
372
+ - label: Alice
373
+ value:
374
+ name: Alice
375
+ href: /contacts?_id=user_1
376
+ tag:
377
+ section: People
378
+ - label: Bob
379
+ value:
380
+ name: Bob
381
+ href: /contacts?_id=user_2
382
+ tag:
383
+ section: People
384
+ - label: Finance
385
+ value:
386
+ role: finance-admin
387
+ tag:
388
+ section: Roles
389
+ group: finance
390
+ color: "#722ed1"
391
+ - label: Developers
392
+ value:
393
+ role: developer
394
+ tag:
395
+ section: Roles
396
+ group: devs
397
+ color: "#13c2c2"
398
+ ```
399
+
400
+ ```yaml
401
+ - id: tiptap_mention_minimal
402
+ type: TiptapMentionInput
403
+ properties:
404
+ title: Chat-style
405
+ placeholder: Type @ to mention.
406
+ image:
407
+ disabled: true
408
+ table:
409
+ disabled: true
410
+ highlight:
411
+ disabled: true
412
+ mentions:
413
+ options:
414
+ - label: Alice
415
+ value:
416
+ _id: user_1
417
+ - label: Bob
418
+ value:
419
+ _id: user_2
420
+ ```
421
+
422
+ | Property | Type | Default | Description |
423
+ | --- | --- | --- | --- |
424
+ | `allowedMimeTypes` | array | - | Mime-types accepted by the drag/drop and paste file handler. Defaults to common image types. Only used when uploadPolicyRequestId is set. |
425
+ | `autoSize` | boolean \| object | - | Either a boolean (true to auto-grow without a cap) or an object with minRows/maxRows. Ignored when `rows` is set. |
426
+ | `autoSize.minRows` | integer | - | |
427
+ | `autoSize.maxRows` | integer | - | |
428
+ | `bordered` | boolean | `true` | Whether the editor renders with a border. |
429
+ | `disabled` | boolean | `false` | Render the editor as read-only. |
430
+ | `highlight` | object | - | Text highlight extension settings. |
431
+ | `highlight.disabled` | boolean | `false` | |
432
+ | `highlight.multicolor` | boolean | `true` | |
433
+ | `image` | object | - | Image extension settings. |
434
+ | `image.disabled` | boolean | `false` | |
435
+ | `image.maxWidth` | string | `"80%"` | |
436
+ | `image.zoom` | number | `0.6` | |
437
+ | `inputStyle` | object | - | Inline style applied to the editable area of the editor. |
438
+ | `label` | object | - | Label configuration forwarded to the Lowdefy Label block. |
439
+ | `link` | object | - | Link extension settings. |
440
+ | `link.disabled` | boolean | `false` | |
441
+ | `link.autolink` | boolean | `true` | |
442
+ | `link.linkOnPaste` | boolean | `true` | |
443
+ | `link.openOnClick` | boolean | `true` | |
444
+ | `link.defaultProtocol` | string | `"https"` | |
445
+ | `mentions` | object | - | Configure the set of mention targets and how they render. |
446
+ | `mentions.char` | string | `"@"` | Trigger character that opens the mention dropdown. Change to "#" for hashtags, etc. |
447
+ | `mentions.allowSpaces` | boolean | `true` | Allow spaces inside a mention query before it is committed. |
448
+ | `mentions.options` | array | - | Array of mention items. Each item may be a string, or an object with a "label" (matched against user input) and a "value" (stored on the node). |
449
+ | `mentions.getHref` | object | - | Optional _function that receives the selected mention option and returns an href. A non-nullish return renders the mention as an ; a nullish return renders a plain (use this for options with no link, e.g. group mentions). |
450
+ | `mentions.limit` | integer | `5` | Maximum suggestions shown — per section when options declare sections, otherwise across the flat list. |
451
+ | `mentions.groupMembers` | object | - | Map of group key → array of { name, email } shown in a hover popover on that group's chips (live editor only). |
452
+ | `mentionsRequestId` | string | - | Id of a request used to populate mention options. When set, the block registers a __getTipTapMentions event that calls that request. |
453
+ | `placeholder` | string | - | Placeholder shown when the editor is empty. |
454
+ | `rows` | integer | - | Fix the editor height to exactly this many rows. Takes precedence over autoSize. |
455
+ | `downloadPolicyRequestId` | string | - | Id of a download request (e.g. AwsS3PresignedGetObject) used to resolve the inserted image URL after upload. Inline images persist in saved content, so the request should set public: true (and the upload request the provider public-read acl) to return a stable, non-expiring URL. When unset, a legacy unsigned object URL is constructed from the upload response (S3-shaped, deprecated). |
456
+ | `s3PostPolicyRequestId` | string | - | Deprecated — use uploadPolicyRequestId instead. |
457
+ | `uploadPolicyRequestId` | string | - | Id of an upload-policy request (e.g. AwsS3PresignedPostPolicy, GcsSignedPostPolicy, AzureBlobUploadSas). When set, images dragged or pasted into the editor are uploaded via that request. |
458
+ | `size` | string | - | Label size forwarded to the Label block. Enum: `small`, `middle`, `large`. |
459
+ | `starterKit` | object | - | Options forwarded to TipTap StarterKit. Use to disable bundled extensions (e.g. {heading: false}). |
460
+ | `table` | object | - | Table extension settings. |
461
+ | `table.disabled` | boolean | `false` | |
462
+ | `table.resizable` | boolean | `true` | |
463
+ | `title` | string | - | Label title shown above the editor. |
464
+
465
+ | Event | Event Data | Description |
466
+ | --- | --- | --- |
467
+ | `onChange` | \- | Trigger action when the editor content is changed. |
468
+
469
+ No CSS keys defined.
470
+
471
+ No slots defined.