Describe the problem
When using as("hidden") on a remote form field, the value parameter is required — both at the type level (AsArgs) and at runtime (throws in DEV if missing). This forces redundant patterns when the field already manages its own state:
<input {...form.fields.id.as("hidden", form.fields.id.value() ?? "")} />
Other types (text, number, etc.) allow omitting the second argument, in which case they use get_value() internally. Hidden inputs should work the same way.
Describe the proposed solution
Make the value parameter optional for as("hidden"). When omitted, use get_value() (the reactive form state) just like as("text") does:
<!-- Current (required, redundant): -->
<input {...form.fields.id.as("hidden", form.fields.id.value() ?? "")} />
<!-- Proposed (optional, uses field state): -->
<input {...form.fields.id.as("hidden")} />
The explicit value should still be supported for cases where you want to pass an external value (e.g. a prop):
<input {...form.fields.appId.as("hidden", appId)} />
The name prefix (n: for numbers, b: for booleans) can be derived from get_value() at construction time when no explicit value is provided.
Alternatives considered
- Keep the explicit value pattern (current behavior) — works but is verbose and redundant when the field already holds the value via
.set()
- Use
as("text") and manually add type="hidden":
<input {...form.fields.id.as("text")} type="hidden" />
This works since the type attribute overrides the spread, but is a non-obvious workaround that relies on attribute ordering.
Importance
would make my life easier
Additional Information
Related: #14694 (type restrictions for hidden), #15566 / #15577 (declarative values for other types)
SvelteKit 2.60.1, relevant code: src/runtime/form-utils.js lines 711–722
Describe the problem
When using
as("hidden")on a remote form field, the value parameter is required — both at the type level (AsArgs) and at runtime (throws in DEV if missing). This forces redundant patterns when the field already manages its own state:Other types (
text,number, etc.) allow omitting the second argument, in which case they useget_value()internally. Hidden inputs should work the same way.Describe the proposed solution
Make the value parameter optional for
as("hidden"). When omitted, useget_value()(the reactive form state) just likeas("text")does:The explicit value should still be supported for cases where you want to pass an external value (e.g. a prop):
The
nameprefix (n:for numbers,b:for booleans) can be derived fromget_value()at construction time when no explicit value is provided.Alternatives considered
.set()as("text")and manually addtype="hidden":typeattribute overrides the spread, but is a non-obvious workaround that relies on attribute ordering.Importance
would make my life easier
Additional Information
Related: #14694 (type restrictions for hidden), #15566 / #15577 (declarative values for other types)
SvelteKit 2.60.1, relevant code:
src/runtime/form-utils.jslines 711–722