v0.21.0
-
@lowdefy/modules-mongodb-plugins: ### Minor Changes
-
#133
66d0e4aThanks @Saiby100! - Honourshow_commentonkind: checkactions. The flag chooses whether an action's working surface offers the optional free-text comment box — it has worked on form actions since it shipped, but check actions silently ignored it and always rendered the box. Declaringshow_comment: falseon a check action now removes it, on both the standalone check page and the in-context check modal.Each check action's declaration is honoured independently even though one
{workflow_type}-actionpage serves them all. The flag is resolved from workflow config on every read (likedescriptionanduniversal_fields), so it is never stored on the action document — change it and redeploy, and in-flight actions pick it up with nothing to migrate.Only the optional comment is gated. The two mandatory comment inputs always render, because the engine needs their text: the reviewer's brief in the review-mode Request Changes modal, and the recovery note on an action sitting in the
errorstage. This matches what form actions already did.show_commentis now validated: a non-boolean value fails the build instead of being silently accepted. If an app authored a quotedshow_comment: "false", that build will now error — the quoted string was never honoured asfalse, so update it to a real boolean. The field is also now documented in the authoring grammar reference, where it was previously missing entirely. -
@lowdefy/modules-mongodb-workflows: ### Minor Changes
-
#133
66d0e4aThanks @Saiby100! - Honourshow_commentonkind: checkactions. The flag chooses whether an action's working surface offers the optional free-text comment box — it has worked on form actions since it shipped, but check actions silently ignored it and always rendered the box. Declaringshow_comment: falseon a check action now removes it, on both the standalone check page and the in-context check modal.Each check action's declaration is honoured independently even though one
{workflow_type}-actionpage serves them all. The flag is resolved from workflow config on every read (likedescriptionanduniversal_fields), so it is never stored on the action document — change it and redeploy, and in-flight actions pick it up with nothing to migrate.Only the optional comment is gated. The two mandatory comment inputs always render, because the engine needs their text: the reviewer's brief in the review-mode Request Changes modal, and the recovery note on an action sitting in the
errorstage. This matches what form actions already did.show_commentis now validated: a non-boolean value fails the build instead of being silently accepted. If an app authored a quotedshow_comment: "false", that build will now error — the quoted string was never honoured asfalse, so update it to a real boolean. The field is also now documented in the authoring grammar reference, where it was previously missing entirely. -
#133
98059afThanks @Saiby100! - Thecheckbox_selectorform component takeslabel_inlineandlabel_spanvars, like the other field components. Previously its label was hardcoded tospan: 12 / align: right, so a checkbox group could not sit inline with its siblings or use a different label width.This changes the default rendering: with neither var set, the label no longer gets
span: 12 / align: right, matchingyes_no_selectorand the rest of the library. An action that relied on the old look should declarelabel_inline: trueandlabel_span: 12explicitly.colon: falseis still hardcoded. -
#133
7cc8b51Thanks @Saiby100! -checkbox_selectornow validatesrequired: truethe waymultiple_selectordoes. Its value is an array, and Lowdefy's built-inrequiredtreats an empty array as present — so a required checkbox group would let submit through with nothing ticked. It now appends the same required-non-empty rule the other array-valued fields use (_array.length > 0, message "This field is required.").The component also gains a
validatevar, which it was missing entirely. Caller-supplied rules are concatenated ahead of the generated required rule, matchingmultiple_selector,tree_multiple_selector,controlled_list,date_range_selector, andfile_upload. -
#133
1da82a6Thanks @Saiby100! - Raw blocks in an actionform:now usekey, notid— which is what makes their submitted values round-trip.A raw inline Lowdefy block (a
form:entry with nocomponent:) was documented as carrying its realid, on the reasoning that the id doubles as the state path just like a library component'skey. That is true of the block tree, but it misses the second consumer of the authoredform:array: theform_metaprojection records onlycomponent/key/required/title/validate, andGetWorkflowActionallowlists the storedform_dataslice by those keys. An entry with a bareidand nokeyhas noform_metaentry, so its value saved but was never read back — blank on re-edit, and absent from the overview and review views.Raw entries now share the library's authoring vocabulary:
keybecomes the block id (and theform_metakey), andtitleis the overview/review display label. Both are stripped before the node reaches the page tree, since neither is a valid Lowdefy block property. Writingkeyandidon the same entry is now an error, as is a non-stringkey.This also makes consumer-supplied field components work. An app that needs a field the library doesn't cover, reused across several of its own actions, can now own a component file that emits a form entry and
_refit from the app-side workflow config — the ref resolves in app context, so it is not subject to the constraint that a module ref cannot escape its package root. Those components get full parity with the built-in library: state binding, value round-trip, overview rendering, id-collision checking, andviewOnly.Existing raw blocks authored with
idkeep building and rendering exactly as before — they were already not round-tripping, so nothing regresses. Switch them tokeyto fix prefill and display. Thekey→idmapping applies atform:entry positions only (top-level entries, and theform:of a structural component); inside a raw block's ownblocks:array, keep usingid.