Files
HiveGrid-Wireframes/hivegrid-cloud/apps/web/app/modules/formWidget/builder/palette.ts
T

94 lines
3.4 KiB
TypeScript

/**
* Static palette definition for the form-builder. Each entry exposes a
* factory that returns a fresh `FormField` shape (matching the
* `@toolctrl/form-widget` zod schema) so the canvas can append without
* having to deep-clone a frozen prototype.
*
* The palette deliberately exposes a superset of `FormFieldType` —
* `heading` + `paragraph` are presentational items the renderer treats
* as `text` fields with `helpText` carrying the body. They keep parity
* with the original spec ("Heading, Paragraph" callouts in the
* drag-drop UX) without expanding the storage schema.
*/
import { HONEYPOT_FIELD_KEY } from "@toolctrl/form-widget";
import type { PaletteItem } from "./types";
export const paletteDefaultLanguage = "en";
function defaultLabelKey(type: string): string {
return `settings.forms.builder.defaults.${type}.label`;
}
function defaultOptionLabelKey(value: string): string {
return `settings.forms.builder.defaults.options.${value}`;
}
export const paletteItems: PaletteItem[] = [
{
type: "text",
labelKey: "settings.forms.builder.palette.text.label",
helpKey: "settings.forms.builder.palette.text.help",
defaults: () => ({ key: "text_field", type: "text", label: defaultLabelKey("text"), required: false }),
},
{
type: "email",
labelKey: "settings.forms.builder.palette.email.label",
helpKey: "settings.forms.builder.palette.email.help",
defaults: () => ({ key: "email", type: "email", label: defaultLabelKey("email"), required: true }),
},
{
type: "textarea",
labelKey: "settings.forms.builder.palette.textarea.label",
helpKey: "settings.forms.builder.palette.textarea.help",
defaults: () => ({ key: "message", type: "textarea", label: defaultLabelKey("textarea"), required: false }),
},
{
type: "select",
labelKey: "settings.forms.builder.palette.select.label",
helpKey: "settings.forms.builder.palette.select.help",
defaults: () => ({
key: "choice",
type: "select",
label: defaultLabelKey("select"),
required: false,
options: [
{ value: "option_a", label: defaultOptionLabelKey("option_a") },
{ value: "option_b", label: defaultOptionLabelKey("option_b") },
],
}),
},
{
type: "checkbox",
labelKey: "settings.forms.builder.palette.checkbox.label",
helpKey: "settings.forms.builder.palette.checkbox.help",
defaults: () => ({ key: "consent", type: "checkbox", label: defaultLabelKey("checkbox"), required: false }),
},
{
type: "radio",
labelKey: "settings.forms.builder.palette.radio.label",
helpKey: "settings.forms.builder.palette.radio.help",
defaults: () => ({
key: "pick",
type: "radio",
label: defaultLabelKey("radio"),
required: false,
options: [
{ value: "option_a", label: defaultOptionLabelKey("option_a") },
{ value: "option_b", label: defaultOptionLabelKey("option_b") },
],
}),
},
{
type: "number",
labelKey: "settings.forms.builder.palette.number.label",
helpKey: "settings.forms.builder.palette.number.help",
defaults: () => ({ key: "amount", type: "number", label: defaultLabelKey("number"), required: false }),
},
{
type: "honeypot",
labelKey: "settings.forms.builder.palette.honeypot.label",
helpKey: "settings.forms.builder.palette.honeypot.help",
defaults: () => ({ key: HONEYPOT_FIELD_KEY, type: "honeypot", label: defaultLabelKey("honeypot"), required: false }),
},
];