import { FieldSchema, StructureSchema, ValueType } from '@ephox/boulder'; import type { Optional, Result } from '@ephox/katamari'; import * as ComponentSchema from '../../core/ComponentSchema'; import { type FormComponentWithLabel, formComponentWithLabelFields, type FormComponentWithLabelSpec } from './FormComponent'; export interface InputSpec extends FormComponentWithLabelSpec { type: 'input'; inputMode?: string; placeholder?: string; maximized?: boolean; enabled?: boolean; context?: string; } export interface Input extends FormComponentWithLabel { type: 'input'; inputMode: Optional; placeholder: Optional; maximized: boolean; enabled: boolean; context: string; } const inputFields = formComponentWithLabelFields.concat([ FieldSchema.optionString('inputMode'), FieldSchema.optionString('placeholder'), FieldSchema.defaultedBoolean('maximized', false), ComponentSchema.enabled, FieldSchema.defaultedString('context', 'mode:design'), ]); export const inputSchema = StructureSchema.objOf(inputFields); export const inputDataProcessor = ValueType.string; export const createInput = (spec: InputSpec): Result> => StructureSchema.asRaw('input', inputSchema, spec);