@lowdefy/docs-content 0.0.0-experimental-20260928120643 → 6.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.
- package/README.md +0 -1
- package/content/actions/link.md +0 -17
- package/content/actions/login.md +5 -23
- package/content/actions/logout.md +5 -5
- package/content/actions/pdfmake.md +2 -2
- package/content/actions/setdarkmode.md +2 -2
- package/content/agents/agent-properties.md +2 -4
- package/content/agents/agentchat.md +6 -21
- package/content/agents/agentconversations.md +2 -2
- package/content/concepts/ai-agent-docs.md +101 -313
- package/content/concepts/cli.md +3 -34
- package/content/concepts/connections-and-requests.md +0 -402
- package/content/concepts/custom-html.md +0 -40
- package/content/concepts/custom-styling.md +5 -50
- package/content/concepts/events-and-actions.md +2 -64
- package/content/concepts/i18n.md +2 -7
- package/content/concepts/keyboard-shortcuts.md +2 -2
- package/content/concepts/layout-overview.md +1 -1
- package/content/concepts/logger.md +0 -81
- package/content/concepts/lowdefy-schema.md +1 -4
- package/content/concepts/menus.md +7 -7
- package/content/concepts/module-authoring.md +2 -2
- package/content/connections/anthropic.md +2 -162
- package/content/connections/awss3.md +0 -54
- package/content/connections/google.md +2 -162
- package/content/connections/mongodb.md +3 -121
- package/content/connections/openai-connection.md +2 -162
- package/content/container-blocks/affix.md +7 -47
- package/content/container-blocks/alert.md +24 -76
- package/content/container-blocks/badge.md +24 -100
- package/content/container-blocks/box.md +9 -9
- package/content/container-blocks/card.md +25 -80
- package/content/container-blocks/carousel.md +7 -60
- package/content/container-blocks/collapse.md +9 -87
- package/content/container-blocks/configprovider.md +13 -35
- package/content/container-blocks/confirmmodal.md +23 -69
- package/content/container-blocks/content.md +98 -62
- package/content/container-blocks/descriptions.md +4 -45
- package/content/container-blocks/drawer.md +28 -92
- package/content/container-blocks/dropdownmenu.md +31 -119
- package/content/container-blocks/flex.md +62 -40
- package/content/container-blocks/footer.md +11 -15
- package/content/container-blocks/googlemapsheatmap.md +1 -1
- package/content/container-blocks/googlemapsscript.md +2 -2
- package/content/container-blocks/header.md +36 -71
- package/content/container-blocks/label.md +7 -34
- package/content/container-blocks/layout.md +34 -52
- package/content/container-blocks/masonry.md +71 -17
- package/content/container-blocks/mobilemenu.md +88 -131
- package/content/container-blocks/modal.md +26 -114
- package/content/container-blocks/pageheadermenu.md +31 -81
- package/content/container-blocks/pagesidebarlayout.md +26 -169
- package/content/container-blocks/pagesidermenu.md +42 -95
- package/content/container-blocks/popover.md +31 -34
- package/content/container-blocks/result.md +21 -32
- package/content/container-blocks/sider.md +122 -85
- package/content/container-blocks/span.md +7 -7
- package/content/container-blocks/spinner.md +3 -3
- package/content/container-blocks/splitter.md +68 -150
- package/content/container-blocks/tabs.md +12 -64
- package/content/container-blocks/tooltip.md +46 -22
- package/content/container-blocks/watermark.md +4 -22
- package/content/controls/reject.md +2 -4
- package/content/controls/throw.md +0 -1
- package/content/controls/try.md +2 -3
- package/content/deployment/deployment-environments.md +6 -8
- package/content/deployment/docker.md +7 -22
- package/content/deployment/node-server.md +0 -4
- package/content/deployment/vercel.md +6 -13
- package/content/display-blocks/aggrid.md +11 -26
- package/content/display-blocks/anchor.md +15 -15
- package/content/display-blocks/avatar.md +37 -57
- package/content/display-blocks/breadcrumb.md +21 -70
- package/content/display-blocks/button.md +18 -92
- package/content/display-blocks/calendar.md +0 -12
- package/content/display-blocks/dangeroushtml.md +1 -1
- package/content/display-blocks/difflist.md +1 -1
- package/content/display-blocks/difftimeline.md +1 -1
- package/content/display-blocks/divider.md +3 -64
- package/content/display-blocks/dropdownbutton.md +28 -79
- package/content/display-blocks/echart.md +1 -35
- package/content/display-blocks/floatbutton.md +42 -129
- package/content/display-blocks/html.md +1 -61
- package/content/display-blocks/icon.md +67 -250
- package/content/display-blocks/menu.md +73 -145
- package/content/display-blocks/message.md +124 -38
- package/content/display-blocks/notification.md +222 -94
- package/content/display-blocks/paragraph.md +9 -59
- package/content/display-blocks/progress.md +17 -96
- package/content/display-blocks/qrcode.md +4 -19
- package/content/display-blocks/s3download.md +1 -1
- package/content/display-blocks/search.md +7 -17
- package/content/display-blocks/skeletonbutton.md +0 -1
- package/content/display-blocks/skeletoninput.md +0 -1
- package/content/display-blocks/statistic.md +17 -75
- package/content/display-blocks/steps.md +25 -58
- package/content/display-blocks/tag.md +17 -102
- package/content/display-blocks/title.md +11 -50
- package/content/display-blocks/tour.md +23 -33
- package/content/input-blocks/autocomplete.md +9 -81
- package/content/input-blocks/buttonselector.md +8 -45
- package/content/input-blocks/checkboxselector.md +7 -97
- package/content/input-blocks/checkboxswitch.md +3 -33
- package/content/input-blocks/colorselector.md +14 -63
- package/content/input-blocks/daterangeselector.md +45 -165
- package/content/input-blocks/dateselector.md +41 -139
- package/content/input-blocks/datetimeselector.md +49 -158
- package/content/input-blocks/inputgallery.md +3 -3
- package/content/input-blocks/monthselector.md +52 -120
- package/content/input-blocks/multipleselector.md +39 -150
- package/content/input-blocks/numberinput.md +12 -98
- package/content/input-blocks/pagination.md +14 -70
- package/content/input-blocks/paragraphinput.md +37 -51
- package/content/input-blocks/passwordinput.md +6 -60
- package/content/input-blocks/phonenumberinput.md +26 -59
- package/content/input-blocks/radioselector.md +7 -83
- package/content/input-blocks/ratingslider.md +26 -57
- package/content/input-blocks/s3uploadbutton.md +24 -24
- package/content/input-blocks/s3uploaddragger.md +3 -3
- package/content/input-blocks/s3uploadphoto.md +5 -5
- package/content/input-blocks/segmentedselector.md +32 -72
- package/content/input-blocks/selector.md +21 -109
- package/content/input-blocks/switch.md +17 -65
- package/content/input-blocks/textarea.md +3 -32
- package/content/input-blocks/textinput.md +28 -69
- package/content/input-blocks/tiptapmentioninput.md +1 -1
- package/content/input-blocks/titleinput.md +12 -39
- package/content/input-blocks/treeinput.md +25 -49
- package/content/input-blocks/treemultipleselector.md +10 -127
- package/content/input-blocks/treeselector.md +9 -97
- package/content/input-blocks/upload.md +15 -64
- package/content/input-blocks/uploaddragger.md +1 -17
- package/content/input-blocks/uploadphoto.md +1 -18
- package/content/input-blocks/weekselector.md +55 -120
- package/content/list-blocks/controlledlist.md +15 -24
- package/content/list-blocks/list.md +11 -11
- package/content/list-blocks/masonrylist.md +34 -7
- package/content/migration/upgrade-guide.md +0 -1
- package/content/operators/_app.md +1 -2
- package/content/operators/_error.md +1 -23
- package/content/operators/_get.md +6 -6
- package/content/operators/_operator.md +3 -17
- package/content/operators/_ref.md +0 -258
- package/content/operators/_type.md +3 -14
- package/content/operators/_user.md +3 -3
- package/content/other/introduction.md +1 -1
- package/content/plugins/plugins-dev.md +0 -66
- package/content/plugins/plugins-introduction.md +1 -27
- package/content/testing/e2e-configuration.md +1 -8
- package/content/testing/e2e-getting-started.md +1 -1
- package/content/testing/e2e-introduction.md +1 -1
- package/content/tutorial/tutorial-actions-operators.md +2 -2
- package/content/tutorial/tutorial-add-blocks.md +2 -2
- package/content/tutorial/tutorial-create-page.md +2 -48
- package/content/tutorial/tutorial-display-data-page.md +3 -3
- package/content/tutorial/tutorial-requests-sql.md +0 -153
- package/content/tutorial/tutorial-start.md +1 -66
- package/content/user-authentication/login-and-logout.md +8 -158
- package/content/user-authentication/users-introduction.md +0 -8
- package/index.json +2 -6065
- package/package.json +1 -7
- package/scripts/extractAgentDocs.js +4 -36
- package/content/actions/emailotpsend.md +0 -58
- package/content/actions/emailotpverify.md +0 -77
- package/content/actions/getlocalstorage.md +0 -41
- package/content/actions/magiclinkverify.md +0 -113
- package/content/actions/posthogalias.md +0 -29
- package/content/actions/posthogcapture.md +0 -49
- package/content/actions/posthogcapturepageleave.md +0 -38
- package/content/actions/posthogfeatureflag.md +0 -50
- package/content/actions/posthoggroup.md +0 -37
- package/content/actions/posthogidentify.md +0 -54
- package/content/actions/posthoginit.md +0 -66
- package/content/actions/posthogoptin.md +0 -29
- package/content/actions/posthogoptout.md +0 -29
- package/content/actions/posthogpageview.md +0 -37
- package/content/actions/posthogreloadfeatureflags.md +0 -47
- package/content/actions/posthogreset.md +0 -28
- package/content/actions/posthogsetpersonproperties.md +0 -36
- package/content/actions/removelocalstorage.md +0 -26
- package/content/actions/setlocalstorage.md +0 -32
- package/content/adapter-reference/mongodbauthadapter.md +0 -46
- package/content/agents/agents-introduction.md +0 -107
- package/content/callback-reference/auth0logoutcallback.md +0 -54
- package/content/concepts/blocks.md +0 -150
- package/content/concepts/dynamic-page-content.md +0 -304
- package/content/concepts/html-attributes.md +0 -285
- package/content/concepts/lowdefy-api.md +0 -1110
- package/content/concepts/notifications.md +0 -155
- package/content/concepts/page-and-app-state.md +0 -244
- package/content/concepts/theming.md +0 -582
- package/content/connections/aigateway.md +0 -368
- package/content/connections/axioshttp.md +0 -181
- package/content/controls/while.md +0 -46
- package/content/display-blocks/clickablehtml.md +0 -239
- package/content/display-blocks/eventlog.md +0 -363
- package/content/display-blocks/pollingtimer.md +0 -263
- package/content/input-blocks/captcha.md +0 -40
- package/content/input-blocks/placesautocomplete.md +0 -319
- package/content/input-blocks/tagmultipleselector.md +0 -114
- package/content/input-blocks/tagselector.md +0 -114
- package/content/migration/auth-upgrade.md +0 -327
- package/content/migration/v3-to-v4.md +0 -417
- package/content/migration/v6-to-v7.md +0 -222
- package/content/operators/_cron.md +0 -292
- package/content/other/mongodbadapter.md +0 -3
- package/content/plugins/plugins-icon-sets.md +0 -267
- package/content/plugins/posthog.md +0 -275
- package/content/provider-reference/auth-js-providers.md +0 -107
- package/content/provider-reference/openidconnectprovider.md +0 -44
- package/content/testing/config-tests.md +0 -278
- package/content/tutorial/tutorial-requests-api.md +0 -155
- package/content/user-authentication/auth-configuration.md +0 -266
- package/content/user-authentication/auth-steps.md +0 -138
- package/content/user-authentication/mcp-oauth.md +0 -292
- package/content/user-authentication/organizations.md +0 -221
- package/content/user-authentication/protected-pages-apis.md +0 -97
- package/content/user-authentication/roles.md +0 -49
- package/content/user-authentication/two-factor.md +0 -229
- package/content/user-authentication/user-object.md +0 -58
- package/content/websockets/websocket-publish.md +0 -108
- package/content/websockets/websocket-subscriptions.md +0 -100
- package/content/websockets/websockets-introduction.md +0 -97
- package/hazards.json +0 -44
- package/scripts/hashDocSources.js +0 -38
- package/scripts/recordSourceHashes.js +0 -88
|
@@ -1,239 +0,0 @@
|
|
|
1
|
-
# ClickableHtml
|
|
2
|
-
|
|
3
|
-
Render raw HTML content safely, and fire a named event when an element carrying a `data-event` attribute is clicked: `data-event="onEditClick"` fires the block's `onEditClick` event, so every clickable target in one block of markup gets its own action chain without a block per button. The event object holds the element's other `data-*` attributes with snake_case keys (`data-record-id` becomes `record_id`). Only the events listed in `dataEvents` fire, and each can require a confirmation. HTML built from user or request data must escape that data, so it cannot add `data-event` elements of its own: `_nunjucks` escapes `{{ values }}` unless they are marked `safe`, while `_string.concat` and `_js` do not.
|
|
4
|
-
|
|
5
|
-
```yaml
|
|
6
|
-
- id: buttons_basic
|
|
7
|
-
type: ClickableHtml
|
|
8
|
-
properties:
|
|
9
|
-
dataEvents:
|
|
10
|
-
- onSmallClick
|
|
11
|
-
- onLargeClick
|
|
12
|
-
html: '<p>Pick a size: <button data-event="onSmallClick">Small</button> <button
|
|
13
|
-
data-event="onLargeClick">Large</button></p>'
|
|
14
|
-
events:
|
|
15
|
-
onSmallClick:
|
|
16
|
-
- id: set_small
|
|
17
|
-
type: SetState
|
|
18
|
-
params:
|
|
19
|
-
buttons_basic_selected: small
|
|
20
|
-
onLargeClick:
|
|
21
|
-
- id: set_large
|
|
22
|
-
type: SetState
|
|
23
|
-
params:
|
|
24
|
-
buttons_basic_selected: large
|
|
25
|
-
- id: buttons_basic_result
|
|
26
|
-
type: Html
|
|
27
|
-
properties:
|
|
28
|
-
html:
|
|
29
|
-
_string.concat:
|
|
30
|
-
- "<p>State: <code>"
|
|
31
|
-
- _state:
|
|
32
|
-
key: buttons_basic_selected
|
|
33
|
-
default: nothing yet
|
|
34
|
-
- </code></p>
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
```yaml
|
|
38
|
-
- id: list_rows
|
|
39
|
-
type: ClickableHtml
|
|
40
|
-
properties:
|
|
41
|
-
dataEvents:
|
|
42
|
-
- onRowClick
|
|
43
|
-
html: '<ul style="list-style: none; padding: 0; margin: 0;"><li
|
|
44
|
-
data-event="onRowClick" data-record-id="rec_1" style="padding: 8px;
|
|
45
|
-
cursor: pointer; border-bottom: 1px solid var(--ant-color-border);">First
|
|
46
|
-
record</li><li data-event="onRowClick" data-record-id="rec_2"
|
|
47
|
-
style="padding: 8px; cursor: pointer; border-bottom: 1px solid
|
|
48
|
-
var(--ant-color-border);">Second record</li><li data-event="onRowClick"
|
|
49
|
-
data-record-id="rec_3" style="padding: 8px; cursor: pointer;">Third
|
|
50
|
-
record</li></ul>'
|
|
51
|
-
events:
|
|
52
|
-
onRowClick:
|
|
53
|
-
- id: set_clicked
|
|
54
|
-
type: SetState
|
|
55
|
-
params:
|
|
56
|
-
list_rows_clicked:
|
|
57
|
-
_event: true
|
|
58
|
-
- id: list_rows_result
|
|
59
|
-
type: Html
|
|
60
|
-
properties:
|
|
61
|
-
html:
|
|
62
|
-
_string.concat:
|
|
63
|
-
- "<p>Last event: <code>"
|
|
64
|
-
- _json.stringify:
|
|
65
|
-
_state:
|
|
66
|
-
key: list_rows_clicked
|
|
67
|
-
default: {}
|
|
68
|
-
- </code></p>
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
```yaml
|
|
72
|
-
- id: mixed_content
|
|
73
|
-
type: ClickableHtml
|
|
74
|
-
properties:
|
|
75
|
-
dataEvents:
|
|
76
|
-
- onCommentClick
|
|
77
|
-
html: <p>This <a href="https://lowdefy.com" target="_blank">link</a> navigates
|
|
78
|
-
normally, but <a href="#" data-event="onCommentClick"
|
|
79
|
-
data-thread-id="t_9">this one</a> fires onCommentClick instead.</p>
|
|
80
|
-
events:
|
|
81
|
-
onCommentClick:
|
|
82
|
-
- id: set_mixed
|
|
83
|
-
type: SetState
|
|
84
|
-
params:
|
|
85
|
-
mixed_content_thread:
|
|
86
|
-
_event: thread_id
|
|
87
|
-
- id: mixed_content_result
|
|
88
|
-
type: Html
|
|
89
|
-
properties:
|
|
90
|
-
html:
|
|
91
|
-
_string.concat:
|
|
92
|
-
- "<p>Thread: <code>"
|
|
93
|
-
- _state:
|
|
94
|
-
key: mixed_content_thread
|
|
95
|
-
default: none
|
|
96
|
-
- </code></p>
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
```yaml
|
|
100
|
-
- id: style_card
|
|
101
|
-
type: ClickableHtml
|
|
102
|
-
style:
|
|
103
|
-
.element:
|
|
104
|
-
padding: 16
|
|
105
|
-
borderRadius: 8
|
|
106
|
-
border: 1px solid var(--ant-color-border)
|
|
107
|
-
background: var(--ant-color-bg-container)
|
|
108
|
-
properties:
|
|
109
|
-
dataEvents:
|
|
110
|
-
- onEditClick
|
|
111
|
-
- onRemoveClick
|
|
112
|
-
html: '<h4 style="margin: 0 0 8px 0;">Card</h4><p style="margin: 0 0 8px 0;
|
|
113
|
-
color: var(--ant-color-text-secondary);">Yours to change or remove until
|
|
114
|
-
tomorrow.</p><button data-event="onEditClick">Edit</button> <button
|
|
115
|
-
data-event="onRemoveClick">Remove</button>'
|
|
116
|
-
events:
|
|
117
|
-
onEditClick:
|
|
118
|
-
- id: set_card_edit
|
|
119
|
-
type: SetState
|
|
120
|
-
params:
|
|
121
|
-
style_card_action: edit
|
|
122
|
-
onRemoveClick:
|
|
123
|
-
- id: set_card_remove
|
|
124
|
-
type: SetState
|
|
125
|
-
params:
|
|
126
|
-
style_card_action: remove
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
```yaml
|
|
130
|
-
- id: row_actions
|
|
131
|
-
type: ClickableHtml
|
|
132
|
-
properties:
|
|
133
|
-
dataEvents:
|
|
134
|
-
- onEdit
|
|
135
|
-
- onDuplicate
|
|
136
|
-
- name: onDelete
|
|
137
|
-
confirm: Delete invoice INV-042?
|
|
138
|
-
html: '<p>Invoice INV-042 <i data-icon="edit" data-event="onEdit" data-id="42"
|
|
139
|
-
data-tooltip="Edit" style="cursor: pointer"></i> <span data-popover="more"
|
|
140
|
-
style="cursor: pointer"><i data-icon="more-vertical"></i></span></p><div
|
|
141
|
-
data-popover-content="more" hidden><p data-event="onDuplicate"
|
|
142
|
-
data-id="42" style="cursor: pointer; margin: 0 0 8px"><i
|
|
143
|
-
data-icon="copy"></i> Duplicate</p><p data-event="onDelete" data-id="42"
|
|
144
|
-
style="cursor: pointer; margin: 0; color: var(--ant-color-error)"><i
|
|
145
|
-
data-icon="delete"></i> Delete</p></div>'
|
|
146
|
-
events:
|
|
147
|
-
onEdit:
|
|
148
|
-
- id: set_edit
|
|
149
|
-
type: SetState
|
|
150
|
-
params:
|
|
151
|
-
row_actions_last:
|
|
152
|
-
_string.concat:
|
|
153
|
-
- "edit "
|
|
154
|
-
- _event: id
|
|
155
|
-
onDuplicate:
|
|
156
|
-
- id: set_duplicate
|
|
157
|
-
type: SetState
|
|
158
|
-
params:
|
|
159
|
-
row_actions_last:
|
|
160
|
-
_string.concat:
|
|
161
|
-
- "duplicate "
|
|
162
|
-
- _event: id
|
|
163
|
-
onDelete:
|
|
164
|
-
- id: set_delete
|
|
165
|
-
type: SetState
|
|
166
|
-
params:
|
|
167
|
-
row_actions_last:
|
|
168
|
-
_string.concat:
|
|
169
|
-
- "delete "
|
|
170
|
-
- _event: id
|
|
171
|
-
- id: row_actions_result
|
|
172
|
-
type: Html
|
|
173
|
-
properties:
|
|
174
|
-
html:
|
|
175
|
-
_string.concat:
|
|
176
|
-
- "<p>Last action: <code>"
|
|
177
|
-
- _state:
|
|
178
|
-
key: row_actions_last
|
|
179
|
-
default: none yet
|
|
180
|
-
- </code></p>
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
```yaml
|
|
184
|
-
- id: confirm_actions
|
|
185
|
-
type: ClickableHtml
|
|
186
|
-
properties:
|
|
187
|
-
dataEvents:
|
|
188
|
-
- name: onDelete
|
|
189
|
-
confirm: true
|
|
190
|
-
- onArchive
|
|
191
|
-
html: '<p>INV-2026-0042 <i data-icon="delete" data-event="onDelete" data-id="42"
|
|
192
|
-
data-tooltip="Delete" data-confirm="Delete invoice INV-2026-0042?"
|
|
193
|
-
style="cursor: pointer; color: var(--ant-color-error)"></i> <span
|
|
194
|
-
data-event="onArchive" data-id="42" data-confirm style="cursor: pointer;
|
|
195
|
-
color: var(--ant-color-primary)">Archive</span></p>'
|
|
196
|
-
events:
|
|
197
|
-
onDelete:
|
|
198
|
-
- id: deleted
|
|
199
|
-
type: SetState
|
|
200
|
-
params:
|
|
201
|
-
confirm_last:
|
|
202
|
-
_string.concat:
|
|
203
|
-
- "deleted "
|
|
204
|
-
- _event: id
|
|
205
|
-
onArchive:
|
|
206
|
-
- id: archived
|
|
207
|
-
type: SetState
|
|
208
|
-
params:
|
|
209
|
-
confirm_last:
|
|
210
|
-
_string.concat:
|
|
211
|
-
- "archived "
|
|
212
|
-
- _event: id
|
|
213
|
-
- id: confirm_result
|
|
214
|
-
type: Html
|
|
215
|
-
properties:
|
|
216
|
-
html:
|
|
217
|
-
_string.concat:
|
|
218
|
-
- "<p>Last action: <code>"
|
|
219
|
-
- _state:
|
|
220
|
-
key: confirm_last
|
|
221
|
-
default: none yet
|
|
222
|
-
- </code></p>
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
| Property | Type | Default | Description |
|
|
226
|
-
| --- | --- | --- | --- |
|
|
227
|
-
| `dataEvents` | array | - | The events the HTML may fire. A data-event whose name is not listed does nothing, and a click on it logs a console warning; with no dataEvents the HTML fires no events. List an event by name, or as { name, confirm } to make every click on it ask first. |
|
|
228
|
-
| `html` | string | - | Content to be rendered as Html. An element with a data-event attribute fires the event it names when clicked (data-event="onEditClick" fires events.onEditClick), if dataEvents lists it, and its default browser action is prevented. The event object holds the element's other data-* attributes with snake_case keys, so data-event="onEditClick" data-record-id="42" gives { record_id: "42" }. Targets that are not links or buttons become keyboard focusable, and Enter or Space clicks them. A data-event inside popover content fires too, then closes the popover. A link with data-event fires the event and does not navigate. data-confirm="Delete this row?" on a data-event element asks first: only OK fires the event (bare data-confirm asks "Are you sure?"). Escape user and request data in the HTML, so it cannot add data-event elements of its own. All Html block attributes work too: data-icon, data-tooltip, data-popover, data-page-id links, data-new-tab, data-tag, data-status, data-time, data-format, data-avatar, data-copy, data-truncate and data-tone. See the HTML attributes docs page. |
|
|
229
|
-
|
|
230
|
-
| Event | Event Data | Description |
|
|
231
|
-
| --- | --- | --- |
|
|
232
|
-
| `onTextSelection` | \- | Trigger action when text is selected and pass selected text to the event object. |
|
|
233
|
-
|
|
234
|
-
| Key | Target |
|
|
235
|
-
| --- | --- |
|
|
236
|
-
| `/block` | Outer block wrapper (always available). |
|
|
237
|
-
| `/element` | The Html element. |
|
|
238
|
-
|
|
239
|
-
No slots defined.
|
|
@@ -1,363 +0,0 @@
|
|
|
1
|
-
# EventLog
|
|
2
|
-
|
|
3
|
-
A dense, virtualised log viewer for any array of records - audit trails, job runs, deploys, webhook deliveries or application events. Rows are searchable, filtered by severity and expandable to a detail pane with the actor, a rich detail body and a flattened context key-value table that can be copied as JSON.
|
|
4
|
-
|
|
5
|
-
The block does not assume a record shape: the `fields` property maps dot paths onto each record, and `eventTypeConfig` maps an event type onto its label, icon, colour and severity. Severity is explicit - it is read from the `level` field of a record, or from the `level` of its type config, and is one of `error`, `warning`, `success` or `info` (default `info`).
|
|
6
|
-
|
|
7
|
-
Large logs can be pushed straight into the block with the `setData` method using a CallMethod action, so the records never round-trip through the operator pipeline. Every string rendered by the block is set on the `text` property, so the log can be translated.
|
|
8
|
-
|
|
9
|
-
## Setting records with `setData`
|
|
10
|
-
|
|
11
|
-
Call `setData` from the block's `onMount` event, after a Request action has loaded the
|
|
12
|
-
records. The page `onInit` event runs before the block mounts, so the method does not exist
|
|
13
|
-
yet. The block falls back to `properties.data` until `setData` is called. See
|
|
14
|
-
[Selectors](/selectors) for the same pattern on selector blocks.
|
|
15
|
-
|
|
16
|
-
```yaml
|
|
17
|
-
id: audit_log
|
|
18
|
-
type: EventLog
|
|
19
|
-
properties:
|
|
20
|
-
height: 480
|
|
21
|
-
events:
|
|
22
|
-
onMount:
|
|
23
|
-
- id: load_events
|
|
24
|
-
type: Request
|
|
25
|
-
params: get_events
|
|
26
|
-
- id: fill
|
|
27
|
-
type: CallMethod
|
|
28
|
-
params:
|
|
29
|
-
blockId: audit_log
|
|
30
|
-
method: setData
|
|
31
|
-
args:
|
|
32
|
-
- _request: get_events
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
```yaml
|
|
36
|
-
- id: basic_event_log
|
|
37
|
-
type: EventLog
|
|
38
|
-
properties:
|
|
39
|
-
height: 320
|
|
40
|
-
fields:
|
|
41
|
-
id: id
|
|
42
|
-
time: timestamp
|
|
43
|
-
message: message
|
|
44
|
-
data:
|
|
45
|
-
- id: "1"
|
|
46
|
-
timestamp: 2026-03-04T09:12:04.000Z
|
|
47
|
-
type: deploy_failed
|
|
48
|
-
level: error
|
|
49
|
-
message: Deploy <b>web-api</b> failed on step build.
|
|
50
|
-
description: The build step exited with code 1 after 42 seconds.
|
|
51
|
-
metadata:
|
|
52
|
-
commit: 9f2c1ab
|
|
53
|
-
branch: main
|
|
54
|
-
duration_ms: 42311
|
|
55
|
-
error: Module not found - ./config/runtime.js
|
|
56
|
-
- id: "2"
|
|
57
|
-
timestamp: 2026-03-04T09:10:44.000Z
|
|
58
|
-
type: deploy_started
|
|
59
|
-
level: info
|
|
60
|
-
message: Deploy <b>web-api</b> started.
|
|
61
|
-
metadata:
|
|
62
|
-
commit: 9f2c1ab
|
|
63
|
-
branch: main
|
|
64
|
-
- id: "3"
|
|
65
|
-
timestamp: 2026-03-04T08:58:00.000Z
|
|
66
|
-
type: quota_warning
|
|
67
|
-
level: warning
|
|
68
|
-
message: Request quota at 82% of the monthly limit.
|
|
69
|
-
metadata:
|
|
70
|
-
used: 820000
|
|
71
|
-
limit: 1000000
|
|
72
|
-
- id: "4"
|
|
73
|
-
timestamp: 2026-03-04T08:30:12.000Z
|
|
74
|
-
type: deploy_succeeded
|
|
75
|
-
level: success
|
|
76
|
-
message: Deploy <b>web-app</b> succeeded.
|
|
77
|
-
metadata:
|
|
78
|
-
commit: 3ab77de
|
|
79
|
-
branch: main
|
|
80
|
-
duration_ms: 51200
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
```yaml
|
|
84
|
-
- id: typed_event_log
|
|
85
|
-
type: EventLog
|
|
86
|
-
properties:
|
|
87
|
-
height: 280
|
|
88
|
-
fields:
|
|
89
|
-
id: id
|
|
90
|
-
time: timestamp
|
|
91
|
-
message: message
|
|
92
|
-
eventTypeConfig:
|
|
93
|
-
user_invited:
|
|
94
|
-
title: Invited
|
|
95
|
-
icon: UserPlus
|
|
96
|
-
color: "#1677ff"
|
|
97
|
-
level: info
|
|
98
|
-
user_removed:
|
|
99
|
-
title: Removed
|
|
100
|
-
icon: UserMinus
|
|
101
|
-
color: "#ff4d4f"
|
|
102
|
-
level: error
|
|
103
|
-
role_changed:
|
|
104
|
-
title: Role changed
|
|
105
|
-
icon: Shield
|
|
106
|
-
color: "#faad14"
|
|
107
|
-
level: warning
|
|
108
|
-
data:
|
|
109
|
-
- id: "1"
|
|
110
|
-
timestamp: 2026-03-04T11:02:00.000Z
|
|
111
|
-
type: user_removed
|
|
112
|
-
message: Removed <b>dana@example.com</b> from the workspace.
|
|
113
|
-
created:
|
|
114
|
-
user:
|
|
115
|
-
name: Ada Lowe
|
|
116
|
-
metadata:
|
|
117
|
-
reason: Offboarding
|
|
118
|
-
- id: "2"
|
|
119
|
-
timestamp: 2026-03-04T10:45:00.000Z
|
|
120
|
-
type: role_changed
|
|
121
|
-
message: Changed the role of <b>sam@example.com</b> to admin.
|
|
122
|
-
created:
|
|
123
|
-
user:
|
|
124
|
-
name: Ada Lowe
|
|
125
|
-
metadata:
|
|
126
|
-
from: member
|
|
127
|
-
to: admin
|
|
128
|
-
- id: "3"
|
|
129
|
-
timestamp: 2026-03-04T10:02:00.000Z
|
|
130
|
-
type: user_invited
|
|
131
|
-
message: Invited <b>sam@example.com</b>.
|
|
132
|
-
metadata:
|
|
133
|
-
invited_by: ada@example.com
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
```yaml
|
|
137
|
-
- id: mapped_event_log
|
|
138
|
-
type: EventLog
|
|
139
|
-
properties:
|
|
140
|
-
height: 240
|
|
141
|
-
fields:
|
|
142
|
-
id: request_id
|
|
143
|
-
time: at
|
|
144
|
-
type: kind
|
|
145
|
-
level: severity
|
|
146
|
-
message: summary
|
|
147
|
-
detail: body
|
|
148
|
-
actor: operator
|
|
149
|
-
context: payload
|
|
150
|
-
data:
|
|
151
|
-
- request_id: req_9001
|
|
152
|
-
at: 2026-03-04T12:00:00.000Z
|
|
153
|
-
kind: payment
|
|
154
|
-
severity: error
|
|
155
|
-
summary: Charge declined for invoice INV-2201.
|
|
156
|
-
body: The card issuer returned <i>insufficient funds</i>.
|
|
157
|
-
operator: Billing job
|
|
158
|
-
payload:
|
|
159
|
-
invoice: INV-2201
|
|
160
|
-
amount: 149.5
|
|
161
|
-
currency: USD
|
|
162
|
-
- request_id: req_9002
|
|
163
|
-
at: 2026-03-04T11:59:10.000Z
|
|
164
|
-
kind: payment
|
|
165
|
-
severity: success
|
|
166
|
-
summary: Charge captured for invoice INV-2200.
|
|
167
|
-
operator: Billing job
|
|
168
|
-
payload:
|
|
169
|
-
invoice: INV-2200
|
|
170
|
-
amount: 89
|
|
171
|
-
currency: USD
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
```yaml
|
|
175
|
-
- id: plain_event_log
|
|
176
|
-
type: EventLog
|
|
177
|
-
properties:
|
|
178
|
-
height: 200
|
|
179
|
-
search: false
|
|
180
|
-
levelFilters: false
|
|
181
|
-
defaultExpanded: true
|
|
182
|
-
fields:
|
|
183
|
-
id: id
|
|
184
|
-
time: timestamp
|
|
185
|
-
message: message
|
|
186
|
-
data:
|
|
187
|
-
- id: "1"
|
|
188
|
-
timestamp: 2026-03-04T09:12:04.000Z
|
|
189
|
-
level: warning
|
|
190
|
-
type: cache_miss
|
|
191
|
-
message: Cache miss rate above 30%.
|
|
192
|
-
metadata:
|
|
193
|
-
rate: 0.34
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
```yaml
|
|
197
|
-
- id: translated_event_log
|
|
198
|
-
type: EventLog
|
|
199
|
-
properties:
|
|
200
|
-
height: 240
|
|
201
|
-
levelFilterOptions:
|
|
202
|
-
- all
|
|
203
|
-
- error
|
|
204
|
-
text:
|
|
205
|
-
all: Alles
|
|
206
|
-
error: Foute
|
|
207
|
-
context: Konteks
|
|
208
|
-
copy: Kopieer JSON
|
|
209
|
-
copied: Gekopieer
|
|
210
|
-
systemActor: Stelsel
|
|
211
|
-
searchPlaceholder: Soek gebeure…
|
|
212
|
-
noData: Geen gebeure nie.
|
|
213
|
-
noResults: Geen passende gebeure nie.
|
|
214
|
-
fields:
|
|
215
|
-
id: id
|
|
216
|
-
time: timestamp
|
|
217
|
-
message: message
|
|
218
|
-
data:
|
|
219
|
-
- id: "1"
|
|
220
|
-
timestamp: 2026-03-04T09:12:04.000Z
|
|
221
|
-
type: import_failed
|
|
222
|
-
level: error
|
|
223
|
-
message: Invoer van <b>kliente.csv</b> het misluk.
|
|
224
|
-
metadata:
|
|
225
|
-
rows: 2043
|
|
226
|
-
error: Kolom "epos" ontbreek
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
```yaml
|
|
230
|
-
- id: set_data_event_log
|
|
231
|
-
type: EventLog
|
|
232
|
-
properties:
|
|
233
|
-
height: 200
|
|
234
|
-
fields:
|
|
235
|
-
id: id
|
|
236
|
-
time: timestamp
|
|
237
|
-
message: message
|
|
238
|
-
events:
|
|
239
|
-
onMount:
|
|
240
|
-
- id: set_event_log_data
|
|
241
|
-
type: CallMethod
|
|
242
|
-
params:
|
|
243
|
-
blockId: set_data_event_log
|
|
244
|
-
method: setData
|
|
245
|
-
args:
|
|
246
|
-
- - id: "1"
|
|
247
|
-
timestamp: 2026-03-04T09:12:04.000Z
|
|
248
|
-
type: sync_failed
|
|
249
|
-
level: error
|
|
250
|
-
message: Contact sync failed after 3 retries.
|
|
251
|
-
metadata:
|
|
252
|
-
retries: 3
|
|
253
|
-
- id: "2"
|
|
254
|
-
timestamp: 2026-03-04T09:02:04.000Z
|
|
255
|
-
type: sync_succeeded
|
|
256
|
-
level: success
|
|
257
|
-
message: Contact sync completed.
|
|
258
|
-
metadata:
|
|
259
|
-
contacts: 1240
|
|
260
|
-
```
|
|
261
|
-
|
|
262
|
-
```yaml
|
|
263
|
-
- id: event_log_with_events
|
|
264
|
-
type: EventLog
|
|
265
|
-
properties:
|
|
266
|
-
height: 200
|
|
267
|
-
fields:
|
|
268
|
-
id: id
|
|
269
|
-
time: timestamp
|
|
270
|
-
message: message
|
|
271
|
-
data:
|
|
272
|
-
- id: "1"
|
|
273
|
-
timestamp: 2026-03-04T09:12:04.000Z
|
|
274
|
-
type: job_failed
|
|
275
|
-
level: error
|
|
276
|
-
message: Nightly export failed.
|
|
277
|
-
metadata:
|
|
278
|
-
job: nightly_export
|
|
279
|
-
- id: "2"
|
|
280
|
-
timestamp: 2026-03-04T08:12:04.000Z
|
|
281
|
-
type: job_succeeded
|
|
282
|
-
level: success
|
|
283
|
-
message: Nightly import succeeded.
|
|
284
|
-
metadata:
|
|
285
|
-
job: nightly_import
|
|
286
|
-
events:
|
|
287
|
-
onRowClick:
|
|
288
|
-
- id: set_selected_event
|
|
289
|
-
type: SetState
|
|
290
|
-
params:
|
|
291
|
-
selected_event:
|
|
292
|
-
_event: row
|
|
293
|
-
- id: selected_event_display
|
|
294
|
-
type: Markdown
|
|
295
|
-
properties:
|
|
296
|
-
content:
|
|
297
|
-
_nunjucks:
|
|
298
|
-
template: '**Selected:** {{ selected_event.message | default("none") }}'
|
|
299
|
-
on:
|
|
300
|
-
_state: true
|
|
301
|
-
```
|
|
302
|
-
|
|
303
|
-
| Property | Type | Default | Description |
|
|
304
|
-
| --- | --- | --- | --- |
|
|
305
|
-
| `data` | array | `[]` | Array of records, in the order they should be listed (usually newest first). Each record is read using the `fields` paths, so any record shape works. |
|
|
306
|
-
| `fields` | object | - | Dot paths used to read each record. Set only the paths that differ from the defaults. |
|
|
307
|
-
| `fields.id` | string | `"_id"` | Path to a unique row id, used as the list key, to track expanded rows and matched by the search. Ids that are not strings, such as MongoDB ObjectIds, are serialized. Falls back to the row index when the path is empty or the id repeats an earlier row. |
|
|
308
|
-
| `fields.time` | string | `"created.timestamp"` | Path to the row timestamp. Any value the JavaScript Date constructor accepts, such as an ISO string or a date. |
|
|
309
|
-
| `fields.type` | string | `"type"` | Path to the event type, used as the key into `eventTypeConfig`. |
|
|
310
|
-
| `fields.level` | string | `"level"` | Path to the severity of the row. One of "error", "warning", "success" or "info". When the path is empty, the level on the matching `eventTypeConfig` entry is used, otherwise the row is "info". |
|
|
311
|
-
| `fields.message` | string | `"title"` | Path to the message shown on the row. Rendered as html, sanitized before it is inserted. |
|
|
312
|
-
| `fields.detail` | string | `"description"` | Path to the detail shown when the row is expanded. Rendered as html, sanitized before it is inserted. |
|
|
313
|
-
| `fields.actor` | string | `"created.user"` | Path to the actor of the row. A string is used as the actor name, an object is read using `actorName` and `actorPicture`. |
|
|
314
|
-
| `fields.actorName` | string | `"name"` | Path to the actor name, relative to the actor object. |
|
|
315
|
-
| `fields.actorPicture` | string | `"picture"` | Path to the actor avatar image url, relative to the actor object. The actor initials are shown when it is empty. |
|
|
316
|
-
| `fields.context` | string | `"metadata"` | Path to the context object shown as a flattened key-value table when the row is expanded. |
|
|
317
|
-
| `eventTypeConfig` | object | `{}` | Map of event type to display config: `{ color, title, icon, level }`. `title` labels the type column, `icon` names an icon shown before the label, `color` colors the label and icon, and `level` sets the severity for every row of that type. |
|
|
318
|
-
| `reverse` | boolean | `false` | Reverse the order of the records before they are listed. |
|
|
319
|
-
| `search` | object \| boolean | - | Client-side search over the id, type, title, message, detail and context of every record. The search input is shown by default: omit the property or set it to true for the defaults, set an object to tune it, or set false to hide it. |
|
|
320
|
-
| `search.placeholder` | string | - | Placeholder text in the search input. Defaults to `text.searchPlaceholder`. |
|
|
321
|
-
| `search.debounce` | number | `150` | Milliseconds to wait after the last keystroke before filtering. |
|
|
322
|
-
| `search.minLength` | number | `0` | Skip filtering until the query is at least this many characters. |
|
|
323
|
-
| `levelFilters` | boolean | `true` | Show the severity filter pills in the toolbar. |
|
|
324
|
-
| `levelFilterOptions` | array | - | The filter pills to show, in order. Defaults to "all" plus every level with at least one record. |
|
|
325
|
-
| `defaultExpanded` | boolean | `false` | Expand every row. Rows added later are expanded when they first appear, and rows the user collapsed stay collapsed. |
|
|
326
|
-
| `height` | number \| string | - | Pixel height (number) or css height string of the scroll container. When omitted, the log grows with its content and scrolls with the page. |
|
|
327
|
-
| `overscan` | number | `400` | Pixels of off-screen rows to render above and below the viewport. Increase for smoother fast-scroll, decrease to reduce DOM cost. |
|
|
328
|
-
| `text` | object | - | All the text rendered by the block, so it can be changed or translated. |
|
|
329
|
-
| `text.all` | string | `"All"` | Label of the filter pill that shows every record. |
|
|
330
|
-
| `text.error` | string | `"Errors"` | Label of the error level filter pill. |
|
|
331
|
-
| `text.warning` | string | `"Warnings"` | Label of the warning level filter pill. |
|
|
332
|
-
| `text.success` | string | `"Successes"` | Label of the success level filter pill. |
|
|
333
|
-
| `text.info` | string | `"Info"` | Label of the info level filter pill. |
|
|
334
|
-
| `text.searchPlaceholder` | string | `"Search events, context, ids…"` | Placeholder text in the search input. |
|
|
335
|
-
| `text.clearSearch` | string | `"Clear search"` | Accessible label of the button that clears the search input. |
|
|
336
|
-
| `text.context` | string | `"Context"` | Heading of the context table in an expanded row. |
|
|
337
|
-
| `text.copy` | string | `"Copy JSON"` | Label of the button that copies the context object to the clipboard. |
|
|
338
|
-
| `text.copied` | string | `"Copied"` | Label shown on the copy button after the context was copied. |
|
|
339
|
-
| `text.systemActor` | string | `"System"` | Actor name shown when a record has no actor. |
|
|
340
|
-
| `text.noData` | string | `"No events."` | Text shown when there are no records. |
|
|
341
|
-
| `text.noResults` | string | `"No matching events."` | Text shown when the search and filters match no records. |
|
|
342
|
-
|
|
343
|
-
| Event | Event Data | Description |
|
|
344
|
-
| --- | --- | --- |
|
|
345
|
-
| `onRowClick` | `{ row }` | Triggered when a row is clicked. |
|
|
346
|
-
| `onExpand` | `{ row, expanded }` | Triggered when a row is expanded or collapsed. |
|
|
347
|
-
| `onSearch` | `{ value, resultCount }` | Triggered when the debounced search query changes, including when the search is cleared. |
|
|
348
|
-
|
|
349
|
-
| Key | Target |
|
|
350
|
-
| --- | --- |
|
|
351
|
-
| `/block` | Outer block wrapper (always available). |
|
|
352
|
-
| `/element` | The outer log container. |
|
|
353
|
-
| `/toolbar` | The sticky toolbar row holding the search input and the level filters. |
|
|
354
|
-
| `/search` | The search input wrapper. |
|
|
355
|
-
| `/filters` | The level filter pill group. |
|
|
356
|
-
| `/list` | The virtualised list container. |
|
|
357
|
-
| `/row` | Each log row. |
|
|
358
|
-
| `/detail` | The expanded detail area of a row. |
|
|
359
|
-
| `/context` | The context key-value table in an expanded row. |
|
|
360
|
-
| `/noData` | The placeholder shown when there are no records. |
|
|
361
|
-
| `/noResults` | The placeholder shown when the search and level filter match no records. |
|
|
362
|
-
|
|
363
|
-
No slots defined.
|