@defra/forms-model 3.0.551 → 3.0.553
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/dist/module/form/form-definition/index.js +1 -6
- package/dist/module/form/form-definition/index.js.map +1 -1
- package/dist/module/form/form-definition/types.js.map +1 -1
- package/dist/module/form/form-editor/preview/controller/page-controller.js +2 -2
- package/dist/module/form/form-editor/preview/controller/page-controller.js.map +1 -1
- package/dist/module/form/form-editor/preview/preview.js +5 -4
- package/dist/module/form/form-editor/preview/preview.js.map +1 -1
- package/dist/module/form/form-metadata/index.js +11 -1
- package/dist/module/form/form-metadata/index.js.map +1 -1
- package/dist/module/form/form-metadata/types.js.map +1 -1
- package/dist/types/form/form-definition/index.d.ts.map +1 -1
- package/dist/types/form/form-definition/types.d.ts +0 -5
- package/dist/types/form/form-definition/types.d.ts.map +1 -1
- package/dist/types/form/form-editor/preview/preview.d.ts +5 -5
- package/dist/types/form/form-editor/preview/preview.d.ts.map +1 -1
- package/dist/types/form/form-metadata/index.d.ts +6 -1
- package/dist/types/form/form-metadata/index.d.ts.map +1 -1
- package/dist/types/form/form-metadata/types.d.ts +17 -0
- package/dist/types/form/form-metadata/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/schemas/form-definition-schema.json +0 -24
- package/schemas/form-definition-v2-schema.json +0 -24
- package/schemas/form-metadata-schema.json +29 -0
- package/src/form/form-definition/index.ts +1 -18
- package/src/form/form-definition/types.ts +0 -6
- package/src/form/form-editor/preview/controller/page-controller.js +2 -2
- package/src/form/form-editor/preview/preview.js +6 -4
- package/src/form/form-metadata/index.ts +24 -2
- package/src/form/form-metadata/types.ts +20 -0
@@ -324,10 +324,6 @@ const outputSchema = Joi.object().description('Configuration for form submission
|
|
324
324
|
audience: Joi.string().trim().valid('human', 'machine').required().description('Target audience for the output (human readable or machine processable)'),
|
325
325
|
version: Joi.string().trim().required().description('Version identifier for the output format')
|
326
326
|
});
|
327
|
-
const versionMetadataSchema = Joi.object().description('Version metadata for the form definition').keys({
|
328
|
-
version: Joi.number().integer().positive().required().description('Version number of the form'),
|
329
|
-
createdAt: Joi.string().isoDate().required().description('ISO date when this version was created')
|
330
|
-
});
|
331
327
|
|
332
328
|
/**
|
333
329
|
* Joi schema for `FormDefinition` interface
|
@@ -354,8 +350,7 @@ export const formDefinitionSchema = Joi.object().description('Complete form defi
|
|
354
350
|
allow: ['uk']
|
355
351
|
}
|
356
352
|
}).optional().description('Email address where form submissions are sent'),
|
357
|
-
output: outputSchema.optional().description('Configuration for submission output format')
|
358
|
-
versionMetadata: versionMetadataSchema.optional().description('Version metadata for the form definition')
|
353
|
+
output: outputSchema.optional().description('Configuration for submission output format')
|
359
354
|
});
|
360
355
|
export const formDefinitionV2Schema = formDefinitionSchema.keys({
|
361
356
|
schema: Joi.number().integer().valid(SchemaVersion.V2).description('Form schema version to use (2)'),
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","names":["JoiDate","JoiBase","v4","uuidV4","ComponentType","ConditionType","OperatorName","SchemaVersion","checkErrors","FormDefinitionError","ControllerType","hasComponents","Joi","extend","idSchemaOptional","string","uuid","idSchema","default","conditionIdRef","ref","in","adjust","conditions","map","condition","id","componentIdRefSchema","pages","flatMap","page","components","filter","component","listIdRef","lists","list","listItemIdRef","items","item","sectionsSchema","object","description","keys","name","trim","required","title","hideTitle","boolean","optional","conditionFieldSchema","type","display","conditionValueSchema","value","conditionListItemRefDataSchemaV2","listId","when","is","exist","then","valid","error","RefConditionListId","itemId","RefConditionItemId","relativeDateValueDataSchemaV2","period","number","integer","positive","unit","direction","relativeDateValueDataSchema","conditionRefSchema","conditionName","conditionDisplayName","coordinator","conditionRefDataSchemaV2","conditionId","RefConditionConditionId","conditionSchema","field","operator","alternatives","try","conditionDataSchemaV2","componentId","RefConditionComponentId","Object","values","any","switch","BooleanValue","StringValue","NumberValue","DateValue","date","format","raw","ListItemRef","RelativeDate","conditionGroupSchema","array","link","conditionsModelSchema","conditionWrapperSchema","displayName","conditionWrapperSchemaV2","min","conditional","otherwise","max","componentSchema","shortDescription","Details","Html","InsetText","Markdown","pattern","allow","hint","options","rows","empty","maxWords","maxDaysInPast","maxDaysInFuture","customValidationMessage","customValidationMessages","unknown","schema","length","componentSchemaV2","RefPageComponentList","componentPayloadSchemaV2","fileUploadComponentSchema","FileUploadField","contentComponentSchema","List","nextSchema","path","redirect","repeatOptions","repeatSchema","pageRepeatSchema","eventSchema","method","url","uri","scheme","eventsSchema","onLoad","onSave","pageUploadComponentsSchema","unique","ignoreUndefined","pageSchema","disallow","section","controller","repeat","strip","next","events","view","pageSchemaV2","append","FileUpload","UniquePageComponentId","UniquePageComponentName","RefPageCondition","pagePayloadSchemaV2","baseListItemSchema","text","stringListItemSchema","numberListItemSchema","listSchema","UniqueListItemId","UniqueListItemText","UniqueListItemValue","listSchemaV2","feedbackSchema","feedbackForm","emailAddress","email","tlds","phaseBannerSchema","phase","outputSchema","audience","version","versionMetadataSchema","createdAt","isoDate","formDefinitionSchema","engine","V1","feedback","startPage","sections","UniqueSectionName","UniqueSectionTitle","metadata","a","declaration","skipSummary","phaseBanner","outputEmail","output","versionMetadata","formDefinitionV2Schema","V2","UniquePageId","UniquePagePath","UniqueListId","UniqueListName","UniqueListTitle","UniqueConditionId","UniqueConditionDisplayName","Schema"],"sources":["../../../../src/form/form-definition/index.ts"],"sourcesContent":["import JoiDate from '@joi/date'\nimport JoiBase, { type LanguageMessages } from 'joi'\nimport { v4 as uuidV4 } from 'uuid'\n\nimport { ComponentType } from '~/src/components/enums.js'\nimport {\n type ComponentDef,\n type ContentComponentsDef,\n type FileUploadFieldComponent\n} from '~/src/components/types.js'\nimport { ConditionType, OperatorName } from '~/src/conditions/enums.js'\nimport {\n type ConditionData,\n type ConditionDataV2,\n type ConditionFieldData,\n type ConditionGroupData,\n type ConditionGroupDataV2,\n type ConditionListItemRefValueDataV2,\n type ConditionRefData,\n type ConditionRefDataV2,\n type ConditionValueData,\n type ConditionsModelData,\n type RelativeDateValueData,\n type RelativeDateValueDataV2\n} from '~/src/conditions/types.js'\nimport {\n SchemaVersion,\n type ConditionWrapper,\n type ConditionWrapperV2,\n type Event,\n type EventOptions,\n type Events,\n type FormDefinition,\n type Item,\n type Link,\n type List,\n type Page,\n type PhaseBanner,\n type Repeat,\n type RepeatOptions,\n type RepeatSchema,\n type Section\n} from '~/src/form/form-definition/types.js'\nimport { checkErrors } from '~/src/form/form-manager/errors.js'\nimport { FormDefinitionError } from '~/src/form/form-manager/types.js'\nimport { ControllerType } from '~/src/pages/enums.js'\nimport { hasComponents } from '~/src/pages/helpers.js'\n\nconst Joi = JoiBase.extend(JoiDate) as JoiBase.Root\n\nconst idSchemaOptional = Joi.string().uuid()\n\nconst idSchema = idSchemaOptional.default(() => uuidV4())\n\nconst conditionIdRef = Joi.ref('/conditions', {\n in: true,\n adjust: (conditions: ConditionWrapperV2[]) =>\n conditions.map((condition) => condition.id)\n})\n\nconst componentIdRefSchema = Joi.ref('/pages', {\n in: true,\n adjust: (pages: Page[]) =>\n pages.flatMap((page) =>\n hasComponents(page)\n ? page.components\n .filter((component) => component.id)\n .map((component) => component.id)\n : []\n )\n})\n\nconst listIdRef = Joi.ref('/lists', {\n in: true,\n adjust: (lists: List[]) =>\n lists.filter((list) => list.id).map((list) => list.id)\n})\n\nconst listItemIdRef = Joi.ref('/lists', {\n in: true,\n adjust: (lists: List[]) =>\n lists.flatMap((list) =>\n list.items.filter((item) => item.id).map((item) => item.id)\n )\n})\n\nconst sectionsSchema = Joi.object<Section>()\n .description('A form section grouping related pages together')\n .keys({\n name: Joi.string()\n .trim()\n .required()\n .description(\n 'Unique identifier for the section, used in code and page references'\n ),\n title: Joi.string()\n .trim()\n .required()\n .description('Human-readable section title displayed to users'),\n hideTitle: Joi.boolean()\n .optional()\n .default(false)\n .description(\n 'When true, the section title will not be displayed in the UI'\n )\n })\n\nconst conditionFieldSchema = Joi.object<ConditionFieldData>()\n .description('Field reference used in a condition')\n .keys({\n name: Joi.string()\n .trim()\n .required()\n .description('Component name referenced by this condition'),\n type: Joi.string()\n .trim()\n .required()\n .description('Data type of the field (e.g., string, number, date)'),\n display: Joi.string()\n .trim()\n .required()\n .description('Human-readable name of the field for display purposes')\n })\n\nconst conditionValueSchema = Joi.object<ConditionValueData>()\n .description('Value specification for a condition')\n .keys({\n type: Joi.string()\n .trim()\n .required()\n .description('Data type of the value (e.g., string, number, date)'),\n value: Joi.string()\n .trim()\n .required()\n .description('The actual value to compare against'),\n display: Joi.string()\n .trim()\n .required()\n .description('Human-readable version of the value for display purposes')\n })\n\nconst conditionListItemRefDataSchemaV2 =\n Joi.object<ConditionListItemRefValueDataV2>()\n .description('List item ref specification for a condition')\n .keys({\n listId: Joi.string()\n .trim()\n .required()\n .when('/lists', {\n is: Joi.exist(),\n then: Joi.valid(listIdRef)\n })\n .description('The id of the list')\n .error(checkErrors(FormDefinitionError.RefConditionListId)),\n itemId: Joi.string()\n .trim()\n .when('/lists', {\n is: Joi.exist(),\n then: Joi.valid(listItemIdRef)\n })\n .required()\n .description('The id of the list item')\n .error(checkErrors(FormDefinitionError.RefConditionItemId))\n })\n\nconst relativeDateValueDataSchemaV2 = Joi.object<RelativeDateValueDataV2>()\n .description('Relative date specification for date-based conditions')\n .keys({\n period: Joi.number()\n .integer()\n .positive()\n .required()\n .description('Numeric amount of the time period, as a string'),\n unit: Joi.string()\n .trim()\n .required()\n .description('Time unit (e.g. days, weeks, months, years)'),\n direction: Joi.string()\n .trim()\n .required()\n .description('Temporal direction, either \"past\" or \"future\"')\n })\n\nconst relativeDateValueDataSchema = Joi.object<RelativeDateValueData>()\n .description('Relative date specification for date-based conditions')\n .keys({\n type: Joi.string()\n .trim()\n .valid('RelativeDate')\n .required()\n .description('Type of the condition value, should be \"RelativeDate\"'),\n period: Joi.string()\n .trim()\n .required()\n .description('Numeric amount of the time period, as a string'),\n unit: Joi.string()\n .trim()\n .required()\n .description('Time unit (e.g. days, weeks, months, years)'),\n direction: Joi.string()\n .trim()\n .required()\n .description('Temporal direction, either \"past\" or \"future\"')\n })\n\nconst conditionRefSchema = Joi.object<ConditionRefData>()\n .description('Reference to a named condition defined elsewhere')\n .keys({\n conditionName: Joi.string()\n .trim()\n .required()\n .description('Name of the referenced condition'),\n conditionDisplayName: Joi.string()\n .trim()\n .required()\n .description('Human-readable name of the condition for display purposes'),\n coordinator: Joi.string()\n .trim()\n .optional()\n .description(\n 'Logical operator connecting this condition with others (AND, OR)'\n )\n })\n\nconst conditionRefDataSchemaV2 = Joi.object<ConditionRefDataV2>()\n .description('Reference to a named condition defined elsewhere')\n .keys({\n id: idSchema.description('Unique identifier for the referenced condition'),\n conditionId: Joi.string()\n .trim()\n .required()\n .when('/conditions', {\n is: Joi.exist(),\n then: Joi.valid(conditionIdRef)\n })\n .description('Name of the referenced condition')\n .error(checkErrors(FormDefinitionError.RefConditionConditionId))\n })\n\nconst conditionSchema = Joi.object<ConditionData>()\n .description('Condition definition specifying a logical comparison')\n .keys({\n field: conditionFieldSchema.description(\n 'The form field being evaluated in this condition'\n ),\n operator: Joi.string()\n .trim()\n .required()\n .description('Comparison operator (equals, greaterThan, contains, etc.)'),\n value: Joi.alternatives()\n .try(conditionValueSchema, relativeDateValueDataSchema)\n .description(\n 'Value to compare the field against, either fixed or relative date'\n ),\n coordinator: Joi.string()\n .trim()\n .optional()\n .description(\n 'Logical operator connecting this condition with others (AND, OR)'\n )\n })\n\nexport const conditionDataSchemaV2 = Joi.object<ConditionDataV2>()\n .description('Condition definition')\n .keys({\n id: idSchema.description(\n 'Unique identifier used to reference this condition'\n ),\n componentId: Joi.string()\n .trim()\n .required()\n .when('/pages', {\n is: Joi.exist(),\n then: Joi.valid(componentIdRefSchema)\n })\n .description(\n 'Reference to the component id being evaluated in this condition'\n )\n .error(checkErrors(FormDefinitionError.RefConditionComponentId)),\n operator: Joi.string()\n .trim()\n .valid(...Object.values(OperatorName))\n .required()\n .description('Comparison operator (equals, greaterThan, contains, etc.)'),\n type: Joi.string()\n .trim()\n .valid(...Object.values(ConditionType))\n .required()\n .description('Type of the condition value'),\n value: Joi.any()\n .required()\n .description('The actual value to compare against')\n .when('type', {\n switch: [\n { is: ConditionType.BooleanValue, then: Joi.boolean() },\n { is: ConditionType.StringValue, then: Joi.string() },\n { is: ConditionType.NumberValue, then: Joi.number() },\n {\n is: ConditionType.DateValue,\n then: Joi.date().format('YYYY-MM-DD').raw()\n },\n {\n is: ConditionType.ListItemRef,\n then: conditionListItemRefDataSchemaV2\n },\n {\n is: ConditionType.RelativeDate,\n then: relativeDateValueDataSchemaV2\n }\n ]\n })\n .description(\n 'Value to compare the field against, either fixed or relative date'\n )\n })\n\nconst conditionGroupSchema = Joi.object<ConditionGroupData>()\n .description('Group of conditions combined with logical operators')\n .keys({\n conditions: Joi.array()\n .items(\n Joi.alternatives().try(\n conditionSchema,\n conditionRefSchema,\n Joi.link('#conditionGroupSchema')\n )\n )\n .description('Array of conditions or condition references in this group')\n })\n .id('conditionGroupSchema')\n\nconst conditionsModelSchema = Joi.object<ConditionsModelData>()\n .description('Complete condition model with name and condition set')\n .keys({\n name: Joi.string()\n .trim()\n .required()\n .description('Unique identifier for the condition set'),\n conditions: Joi.array()\n .items(\n Joi.alternatives().try(\n conditionSchema,\n conditionRefSchema,\n conditionGroupSchema\n )\n )\n .description(\n 'Array of conditions, condition references, or condition groups'\n )\n })\n\nconst conditionWrapperSchema = Joi.object<ConditionWrapper>()\n .description('Container for a named condition with its definition')\n .keys({\n name: Joi.string()\n .trim()\n .required()\n .description('Unique identifier used to reference this condition'),\n displayName: Joi.string()\n .trim()\n .description('Human-readable name for display in the UI'),\n value: conditionsModelSchema\n .required()\n .description('The complete condition definition')\n })\n\nexport const conditionWrapperSchemaV2 = Joi.object<ConditionWrapperV2>()\n .description('Container for a named condition with its definition')\n .keys({\n id: idSchema.description('Unique identifier for the condition'),\n displayName: Joi.string()\n .trim()\n .description('Human-readable name for display in the UI'),\n coordinator: Joi.string()\n .optional()\n .when('items', { is: Joi.array().min(2), then: Joi.required() })\n .description(\n 'Logical operator connecting this condition with others (AND, OR)'\n ),\n items: Joi.array<ConditionGroupDataV2>()\n .items(\n Joi.alternatives().conditional('.componentId', {\n is: Joi.exist(),\n then: conditionDataSchemaV2,\n otherwise: conditionRefDataSchemaV2\n })\n )\n .min(1)\n .max(15)\n .description('Array of conditions or condition references')\n })\n .description('Condition schema for V2 forms')\n\nexport const componentSchema = Joi.object<ComponentDef>()\n .description('Form component definition specifying UI element behavior')\n .keys({\n id: idSchemaOptional.description('Unique identifier for the component'),\n type: Joi.string<ComponentType>()\n .trim()\n .required()\n .description('Component type (TextField, RadioButtons, DateField, etc.)'),\n shortDescription: Joi.string()\n .trim()\n .optional()\n .description('Brief description of the component purpose'),\n name: Joi.when('type', {\n is: Joi.string().valid(\n ComponentType.Details,\n ComponentType.Html,\n ComponentType.InsetText,\n ComponentType.Markdown\n ),\n then: Joi.string()\n .trim()\n .pattern(/^[a-zA-Z]+$/)\n .optional()\n .description('Optional identifier for display-only components'),\n otherwise: Joi.string()\n .trim()\n .pattern(/^[a-zA-Z]+$/)\n .required()\n .description('Unique identifier for the component, used in form data')\n }),\n title: Joi.when('type', {\n is: Joi.string().valid(\n ComponentType.Details,\n ComponentType.Html,\n ComponentType.InsetText,\n ComponentType.Markdown\n ),\n then: Joi.string()\n .trim()\n .optional()\n .description('Optional title for display-only components'),\n otherwise: Joi.string()\n .trim()\n .allow('')\n .description('Label displayed above the component')\n }),\n hint: Joi.string()\n .trim()\n .allow('')\n .optional()\n .description(\n 'Additional guidance text displayed below the component title'\n ),\n options: Joi.object({\n rows: Joi.number()\n .empty('')\n .description('Number of rows for textarea components'),\n maxWords: Joi.number()\n .empty('')\n .description('Maximum number of words allowed in text inputs'),\n maxDaysInPast: Joi.number()\n .empty('')\n .description('Maximum days in the past allowed for date inputs'),\n maxDaysInFuture: Joi.number()\n .empty('')\n .description('Maximum days in the future allowed for date inputs'),\n customValidationMessage: Joi.string()\n .trim()\n .allow('')\n .description('Custom error message for validation failures'),\n customValidationMessages: Joi.object<LanguageMessages>()\n .unknown(true)\n .optional()\n .description('Custom error messages keyed by validation rule name')\n })\n .default({})\n .unknown(true)\n .description('Component-specific configuration options'),\n schema: Joi.object({\n min: Joi.number()\n .empty('')\n .description('Minimum value or length for validation'),\n max: Joi.number()\n .empty('')\n .description('Maximum value or length for validation'),\n length: Joi.number()\n .empty('')\n .description('Exact length required for validation')\n })\n .unknown(true)\n .default({})\n .description('Validation rules for the component'),\n list: Joi.string()\n .trim()\n .optional()\n .description(\n 'Reference to a predefined list of options for select components'\n )\n })\n .unknown(true)\n\nexport const componentSchemaV2 = componentSchema\n .keys({\n id: idSchema.description('Unique identifier for the component'),\n list: Joi.string()\n .when('/lists', {\n is: Joi.exist(),\n then: Joi.valid(listIdRef)\n })\n .optional()\n .description(\n 'List id reference to a predefined list of options for select components'\n )\n .error(checkErrors(FormDefinitionError.RefPageComponentList))\n })\n .description('Component schema for V2 forms')\n\nexport const componentPayloadSchemaV2 = componentSchema\n .keys({\n id: idSchema.description('Unique identifier for the component'),\n list: Joi.string()\n .optional()\n .description(\n 'List id reference to a predefined list of options for select components'\n )\n })\n .description('Payload schema for component for V2 forms')\n\nexport const fileUploadComponentSchema = componentSchemaV2.keys({\n type: Joi.string<ComponentType.FileUploadField>()\n .trim()\n .valid(ComponentType.FileUploadField)\n .required()\n .description('Component that can only be a FileUploadField')\n})\n\nexport const contentComponentSchema = componentSchemaV2.keys({\n type: Joi.string<ComponentType>()\n .trim()\n .valid(ComponentType.Details)\n .valid(ComponentType.Html)\n .valid(ComponentType.Markdown)\n .valid(ComponentType.InsetText)\n .valid(ComponentType.List)\n .required()\n .description('Content only component type (Details, Html, Markdown, etc.)')\n})\n\nconst nextSchema = Joi.object<Link>()\n .description('Navigation link defining where to go after completing a page')\n .keys({\n path: Joi.string()\n .trim()\n .required()\n .description('The target page path to navigate to'),\n condition: Joi.string()\n .trim()\n .allow('')\n .optional()\n .description(\n 'Optional condition that determines if this path should be taken'\n ),\n redirect: Joi.string()\n .trim()\n .optional()\n .description(\n 'Optional external URL to redirect to instead of an internal page'\n )\n })\n\nconst repeatOptions = Joi.object<RepeatOptions>()\n .description('Configuration options for a repeatable page section')\n .keys({\n name: Joi.string()\n .trim()\n .required()\n .description(\n 'Identifier for the repeatable section, used in data structure'\n ),\n title: Joi.string()\n .trim()\n .required()\n .description('Title displayed for each repeatable item')\n })\n\nconst repeatSchema = Joi.object<RepeatSchema>()\n .description('Validation rules for a repeatable section')\n .keys({\n min: Joi.number()\n .empty('')\n .required()\n .description('Minimum number of repetitions required'),\n max: Joi.number()\n .empty('')\n .required()\n .description('Maximum number of repetitions allowed')\n })\n\nexport const pageRepeatSchema = Joi.object<Repeat>()\n .description('Complete configuration for a repeatable page')\n .keys({\n options: repeatOptions\n .required()\n .description('Display and identification options for the repetition'),\n schema: repeatSchema\n .required()\n .description('Validation constraints for the number of repetitions')\n })\n\nconst eventSchema = Joi.object<Event>()\n .description('Event handler configuration for page lifecycle events')\n .keys({\n type: Joi.string()\n .trim()\n .allow('http')\n .required()\n .description(\n 'Type of the event handler (currently only \"http\" supported)'\n ),\n options: Joi.object<EventOptions>()\n .description('Options specific to the event handler type')\n .keys({\n method: Joi.string()\n .trim()\n .allow('POST')\n .required()\n .description('HTTP method to use for the request'),\n url: Joi.string()\n .trim()\n .uri({ scheme: ['http', 'https'] })\n .required()\n .description('URL endpoint to call when the event fires')\n })\n })\n\nconst eventsSchema = Joi.object<Events>()\n .description(\n 'Collection of event handlers for different page lifecycle events'\n )\n .keys({\n onLoad: eventSchema\n .optional()\n .description('Event handler triggered when the page is loaded'),\n onSave: eventSchema\n .optional()\n .description('Event handler triggered when the page data is saved')\n })\n\nexport const pageUploadComponentsSchema = Joi.array<\n FileUploadFieldComponent | ContentComponentsDef\n>()\n .items(\n fileUploadComponentSchema.required(),\n contentComponentSchema.optional()\n )\n .unique('id')\n .unique('name', { ignoreUndefined: true })\n .min(1)\n .max(2)\n .description('Components allowed on Page Upload schema')\n\n/**\n * `/status` is a special route for providing a user's application status.\n * It should not be configured via the designer.\n */\nexport const pageSchema = Joi.object<Page>()\n .description('Form page definition specifying content and behavior')\n .keys({\n id: idSchemaOptional.description('Unique identifier for the page'),\n path: Joi.string()\n .trim()\n .required()\n .disallow('/status')\n .description(\n 'URL path for this page, must not be the reserved \"/status\" path'\n ),\n title: Joi.string()\n .trim()\n .required()\n .description('Page title displayed at the top of the page'),\n section: Joi.string().trim().description('Section this page belongs to'),\n controller: Joi.string()\n .trim()\n .optional()\n .description('Custom controller class name for special page behavior'),\n components: Joi.array<ComponentDef>()\n .items(componentSchema)\n .unique('name')\n .description('UI components displayed on this page'),\n repeat: Joi.when('controller', {\n is: Joi.string().trim().valid('RepeatPageController').required(),\n then: pageRepeatSchema\n .required()\n .description(\n 'Configuration for repeatable pages, required when using RepeatPageController'\n ),\n otherwise: Joi.any().strip()\n }),\n condition: Joi.string()\n .trim()\n .allow('')\n .optional()\n .description('Optional condition that determines if this page is shown'),\n next: Joi.array<Link>()\n .items(nextSchema)\n .default([])\n .description('Possible navigation paths after this page'),\n events: eventsSchema\n .optional()\n .description('Event handlers for page lifecycle events'),\n view: Joi.string()\n .trim()\n .optional()\n .description(\n 'Optional custom view template to use for rendering this page'\n )\n })\n\n/**\n * V2 engine schema - used with new editor\n */\nexport const pageSchemaV2 = pageSchema\n .append({\n id: idSchema.description('Unique identifier for the page'),\n title: Joi.string()\n .trim()\n .allow('')\n .required()\n .description(\n 'Page title displayed at the top of the page (with support for empty titles in V2)'\n ),\n components: Joi.when('controller', {\n switch: [\n {\n is: Joi.string().trim().valid(ControllerType.FileUpload).required(),\n then: pageUploadComponentsSchema\n }\n ],\n otherwise: Joi.array<ComponentDef>()\n .items(componentSchemaV2)\n .unique('id')\n .unique('name', { ignoreUndefined: true })\n .description('Components schema for V2 forms')\n .error(\n checkErrors([\n FormDefinitionError.UniquePageComponentId,\n FormDefinitionError.UniquePageComponentName\n ])\n )\n }),\n condition: Joi.string()\n .trim()\n .when('/conditions', {\n is: Joi.exist(),\n then: Joi.valid(conditionIdRef)\n })\n .optional()\n .description('Optional condition that determines if this page is shown')\n .error(checkErrors(FormDefinitionError.RefPageCondition))\n })\n .description('Page schema for V2 forms')\n\nexport const pagePayloadSchemaV2 = pageSchemaV2\n .append({\n components: Joi.when('controller', {\n switch: [\n {\n is: Joi.string().trim().valid(ControllerType.FileUpload).required(),\n then: pageUploadComponentsSchema\n }\n ],\n otherwise: Joi.array<ComponentDef>()\n .items(componentPayloadSchemaV2)\n .unique('id')\n .unique('name')\n .description('Components schema for V2 forms')\n })\n })\n .description('Payload Page schema for V2 forms')\n\nconst baseListItemSchema = Joi.object<Item>()\n .description('Base schema for list items with common properties')\n .keys({\n id: idSchema.description('Unique identifier for the list item'),\n text: Joi.string()\n .trim()\n .allow('')\n .description('Display text shown to the user'),\n description: Joi.string()\n .trim()\n .allow('')\n .optional()\n .description('Optional additional descriptive text for the item'),\n conditional: Joi.object<Item['conditional']>()\n .description('Optional components to show when this item is selected')\n .keys({\n components: Joi.array<ComponentDef>()\n .required()\n .items(componentSchema.unknown(true))\n .unique('name')\n .description('Components to display conditionally')\n })\n .optional(),\n condition: Joi.string()\n .trim()\n .allow('')\n .optional()\n .description('Condition that determines if this item is shown'),\n hint: Joi.object<Item['hint']>()\n .optional()\n .keys({\n id: idSchema,\n text: Joi.string().trim()\n })\n .description('Optional hint text to be shown on list item')\n })\n\nconst stringListItemSchema = baseListItemSchema\n .append({\n value: Joi.string()\n .trim()\n .required()\n .description('String value stored when this item is selected')\n })\n .description('List item with string value')\n\nconst numberListItemSchema = baseListItemSchema\n .append({\n value: Joi.number()\n .required()\n .description('Numeric value stored when this item is selected')\n })\n .description('List item with numeric value')\n\nexport const listSchema = Joi.object<List>()\n .description('Reusable list of options for select components')\n .keys({\n id: idSchemaOptional.description('Unique identifier for the list'),\n name: Joi.string()\n .trim()\n .required()\n .description('Name used to reference this list from components'),\n title: Joi.string()\n .trim()\n .required()\n .description('Human-readable title for the list'),\n type: Joi.string()\n .trim()\n .required()\n .valid('string', 'number')\n .description('Data type for list values (string or number)'),\n items: Joi.when('type', {\n is: 'string',\n then: Joi.array()\n .items(stringListItemSchema)\n .unique('id')\n .unique('text')\n .unique('value')\n .description('Array of items with string values')\n .error(\n checkErrors([\n FormDefinitionError.UniqueListItemId,\n FormDefinitionError.UniqueListItemText,\n FormDefinitionError.UniqueListItemValue\n ])\n ),\n otherwise: Joi.array()\n .items(numberListItemSchema)\n .unique('id')\n .unique('text')\n .unique('value')\n .description('Array of items with numeric values')\n .error(\n checkErrors([\n FormDefinitionError.UniqueListItemId,\n FormDefinitionError.UniqueListItemText,\n FormDefinitionError.UniqueListItemValue\n ])\n )\n })\n })\n\n/**\n * V2 Joi schema for Lists\n */\nexport const listSchemaV2 = listSchema\n .keys({\n id: idSchema.description('Unique identifier for the list')\n })\n .description('List schema for V2 forms')\n\nconst feedbackSchema = Joi.object<FormDefinition['feedback']>()\n .description('Feedback configuration for the form')\n .keys({\n feedbackForm: Joi.boolean()\n .default(false)\n .description('Whether to show the built-in feedback form'),\n url: Joi.when('feedbackForm', {\n is: Joi.boolean().valid(false),\n then: Joi.string()\n .trim()\n .optional()\n .allow('')\n .description(\n 'URL to an external feedback form when not using built-in feedback'\n )\n }),\n emailAddress: Joi.string()\n .trim()\n .email({\n tlds: {\n allow: false\n }\n })\n .optional()\n .description('Email address where feedback is sent')\n })\n\nconst phaseBannerSchema = Joi.object<PhaseBanner>()\n .description('Phase banner configuration showing development status')\n .keys({\n phase: Joi.string()\n .trim()\n .valid('alpha', 'beta')\n .description('Development phase of the service (alpha or beta)')\n })\n\nconst outputSchema = Joi.object<FormDefinition['output']>()\n .description('Configuration for form submission output')\n .keys({\n audience: Joi.string()\n .trim()\n .valid('human', 'machine')\n .required()\n .description(\n 'Target audience for the output (human readable or machine processable)'\n ),\n version: Joi.string()\n .trim()\n .required()\n .description('Version identifier for the output format')\n })\n\nconst versionMetadataSchema = Joi.object<FormDefinition['versionMetadata']>()\n .description('Version metadata for the form definition')\n .keys({\n version: Joi.number()\n .integer()\n .positive()\n .required()\n .description('Version number of the form'),\n createdAt: Joi.string()\n .isoDate()\n .required()\n .description('ISO date when this version was created')\n })\n\n/**\n * Joi schema for `FormDefinition` interface\n * @see {@link FormDefinition}\n */\nexport const formDefinitionSchema = Joi.object<FormDefinition>()\n .description('Complete form definition describing all aspects of a form')\n .required()\n .keys({\n engine: Joi.string()\n .trim()\n .allow('V1', 'V2')\n .default('V1')\n .description('Form engine version to use (V1 or V2)'),\n schema: Joi.number()\n .integer()\n .valid(SchemaVersion.V1)\n .default(SchemaVersion.V1)\n .description('Form schema version to use (1 or 2)'),\n name: Joi.string()\n .trim()\n .allow('')\n .optional()\n .description('Unique name identifying the form'),\n feedback: feedbackSchema\n .optional()\n .description('Feedback mechanism configuration'),\n startPage: Joi.string()\n .trim()\n .optional()\n .description('Path of the first page to show when starting the form'),\n pages: Joi.array<Page>()\n .required()\n .items(pageSchema)\n .description('Pages schema for V1 forms')\n .unique('path'),\n sections: Joi.array<Section>()\n .items(sectionsSchema)\n .unique('name')\n .unique('title')\n .required()\n .description('Sections grouping related pages together')\n .error(\n checkErrors([\n FormDefinitionError.UniqueSectionName,\n FormDefinitionError.UniqueSectionTitle\n ])\n ),\n conditions: Joi.array<ConditionWrapper>()\n .items(conditionWrapperSchema)\n .unique('name')\n .unique('displayName')\n .description('Named conditions used for form logic'),\n lists: Joi.array<List>()\n .items(listSchema)\n .unique('name')\n .unique('title')\n .description('Reusable lists of options for select components'),\n metadata: Joi.object({ a: Joi.any() })\n .unknown()\n .optional()\n .description('Custom metadata for the form'),\n declaration: Joi.string()\n .trim()\n .allow('')\n .optional()\n .description('Declaration text shown on the summary page'),\n skipSummary: Joi.any()\n .strip()\n .description('option to skip the summary page'),\n phaseBanner: phaseBannerSchema\n .optional()\n .description('Phase banner configuration'),\n outputEmail: Joi.string()\n .trim()\n .email({ tlds: { allow: ['uk'] } })\n .optional()\n .description('Email address where form submissions are sent'),\n output: outputSchema\n .optional()\n .description('Configuration for submission output format'),\n versionMetadata: versionMetadataSchema\n .optional()\n .description('Version metadata for the form definition')\n })\n\nexport const formDefinitionV2Schema = formDefinitionSchema\n .keys({\n schema: Joi.number()\n .integer()\n .valid(SchemaVersion.V2)\n .description('Form schema version to use (2)'),\n pages: Joi.array<Page>()\n .items(pageSchemaV2)\n .required()\n .unique('id')\n .unique('path')\n .description('Pages schema for V2 forms')\n .error(\n checkErrors([\n FormDefinitionError.UniquePageId,\n FormDefinitionError.UniquePagePath\n ])\n ),\n lists: Joi.array<List>()\n .items(listSchemaV2)\n .unique('id')\n .unique('name')\n .unique('title')\n .description('Lists schema for V2 forms')\n .error(\n checkErrors([\n FormDefinitionError.UniqueListId,\n FormDefinitionError.UniqueListName,\n FormDefinitionError.UniqueListTitle\n ])\n ),\n conditions: Joi.array<ConditionWrapperV2>()\n .items(conditionWrapperSchemaV2)\n .unique('id')\n .unique('displayName')\n .description('Named conditions used for form logic')\n .error(\n checkErrors([\n FormDefinitionError.UniqueConditionId,\n FormDefinitionError.UniqueConditionDisplayName\n ])\n )\n })\n .description('Form definition schema for V2')\n\n// Maintain compatibility with legacy named export\n// E.g. `import { Schema } from '@defra/forms-model'`\nexport const Schema = formDefinitionSchema\n"],"mappings":"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","ignoreList":[]}
|
1
|
+
{"version":3,"file":"index.js","names":["JoiDate","JoiBase","v4","uuidV4","ComponentType","ConditionType","OperatorName","SchemaVersion","checkErrors","FormDefinitionError","ControllerType","hasComponents","Joi","extend","idSchemaOptional","string","uuid","idSchema","default","conditionIdRef","ref","in","adjust","conditions","map","condition","id","componentIdRefSchema","pages","flatMap","page","components","filter","component","listIdRef","lists","list","listItemIdRef","items","item","sectionsSchema","object","description","keys","name","trim","required","title","hideTitle","boolean","optional","conditionFieldSchema","type","display","conditionValueSchema","value","conditionListItemRefDataSchemaV2","listId","when","is","exist","then","valid","error","RefConditionListId","itemId","RefConditionItemId","relativeDateValueDataSchemaV2","period","number","integer","positive","unit","direction","relativeDateValueDataSchema","conditionRefSchema","conditionName","conditionDisplayName","coordinator","conditionRefDataSchemaV2","conditionId","RefConditionConditionId","conditionSchema","field","operator","alternatives","try","conditionDataSchemaV2","componentId","RefConditionComponentId","Object","values","any","switch","BooleanValue","StringValue","NumberValue","DateValue","date","format","raw","ListItemRef","RelativeDate","conditionGroupSchema","array","link","conditionsModelSchema","conditionWrapperSchema","displayName","conditionWrapperSchemaV2","min","conditional","otherwise","max","componentSchema","shortDescription","Details","Html","InsetText","Markdown","pattern","allow","hint","options","rows","empty","maxWords","maxDaysInPast","maxDaysInFuture","customValidationMessage","customValidationMessages","unknown","schema","length","componentSchemaV2","RefPageComponentList","componentPayloadSchemaV2","fileUploadComponentSchema","FileUploadField","contentComponentSchema","List","nextSchema","path","redirect","repeatOptions","repeatSchema","pageRepeatSchema","eventSchema","method","url","uri","scheme","eventsSchema","onLoad","onSave","pageUploadComponentsSchema","unique","ignoreUndefined","pageSchema","disallow","section","controller","repeat","strip","next","events","view","pageSchemaV2","append","FileUpload","UniquePageComponentId","UniquePageComponentName","RefPageCondition","pagePayloadSchemaV2","baseListItemSchema","text","stringListItemSchema","numberListItemSchema","listSchema","UniqueListItemId","UniqueListItemText","UniqueListItemValue","listSchemaV2","feedbackSchema","feedbackForm","emailAddress","email","tlds","phaseBannerSchema","phase","outputSchema","audience","version","formDefinitionSchema","engine","V1","feedback","startPage","sections","UniqueSectionName","UniqueSectionTitle","metadata","a","declaration","skipSummary","phaseBanner","outputEmail","output","formDefinitionV2Schema","V2","UniquePageId","UniquePagePath","UniqueListId","UniqueListName","UniqueListTitle","UniqueConditionId","UniqueConditionDisplayName","Schema"],"sources":["../../../../src/form/form-definition/index.ts"],"sourcesContent":["import JoiDate from '@joi/date'\nimport JoiBase, { type LanguageMessages } from 'joi'\nimport { v4 as uuidV4 } from 'uuid'\n\nimport { ComponentType } from '~/src/components/enums.js'\nimport {\n type ComponentDef,\n type ContentComponentsDef,\n type FileUploadFieldComponent\n} from '~/src/components/types.js'\nimport { ConditionType, OperatorName } from '~/src/conditions/enums.js'\nimport {\n type ConditionData,\n type ConditionDataV2,\n type ConditionFieldData,\n type ConditionGroupData,\n type ConditionGroupDataV2,\n type ConditionListItemRefValueDataV2,\n type ConditionRefData,\n type ConditionRefDataV2,\n type ConditionValueData,\n type ConditionsModelData,\n type RelativeDateValueData,\n type RelativeDateValueDataV2\n} from '~/src/conditions/types.js'\nimport {\n SchemaVersion,\n type ConditionWrapper,\n type ConditionWrapperV2,\n type Event,\n type EventOptions,\n type Events,\n type FormDefinition,\n type Item,\n type Link,\n type List,\n type Page,\n type PhaseBanner,\n type Repeat,\n type RepeatOptions,\n type RepeatSchema,\n type Section\n} from '~/src/form/form-definition/types.js'\nimport { checkErrors } from '~/src/form/form-manager/errors.js'\nimport { FormDefinitionError } from '~/src/form/form-manager/types.js'\nimport { ControllerType } from '~/src/pages/enums.js'\nimport { hasComponents } from '~/src/pages/helpers.js'\n\nconst Joi = JoiBase.extend(JoiDate) as JoiBase.Root\n\nconst idSchemaOptional = Joi.string().uuid()\n\nconst idSchema = idSchemaOptional.default(() => uuidV4())\n\nconst conditionIdRef = Joi.ref('/conditions', {\n in: true,\n adjust: (conditions: ConditionWrapperV2[]) =>\n conditions.map((condition) => condition.id)\n})\n\nconst componentIdRefSchema = Joi.ref('/pages', {\n in: true,\n adjust: (pages: Page[]) =>\n pages.flatMap((page) =>\n hasComponents(page)\n ? page.components\n .filter((component) => component.id)\n .map((component) => component.id)\n : []\n )\n})\n\nconst listIdRef = Joi.ref('/lists', {\n in: true,\n adjust: (lists: List[]) =>\n lists.filter((list) => list.id).map((list) => list.id)\n})\n\nconst listItemIdRef = Joi.ref('/lists', {\n in: true,\n adjust: (lists: List[]) =>\n lists.flatMap((list) =>\n list.items.filter((item) => item.id).map((item) => item.id)\n )\n})\n\nconst sectionsSchema = Joi.object<Section>()\n .description('A form section grouping related pages together')\n .keys({\n name: Joi.string()\n .trim()\n .required()\n .description(\n 'Unique identifier for the section, used in code and page references'\n ),\n title: Joi.string()\n .trim()\n .required()\n .description('Human-readable section title displayed to users'),\n hideTitle: Joi.boolean()\n .optional()\n .default(false)\n .description(\n 'When true, the section title will not be displayed in the UI'\n )\n })\n\nconst conditionFieldSchema = Joi.object<ConditionFieldData>()\n .description('Field reference used in a condition')\n .keys({\n name: Joi.string()\n .trim()\n .required()\n .description('Component name referenced by this condition'),\n type: Joi.string()\n .trim()\n .required()\n .description('Data type of the field (e.g., string, number, date)'),\n display: Joi.string()\n .trim()\n .required()\n .description('Human-readable name of the field for display purposes')\n })\n\nconst conditionValueSchema = Joi.object<ConditionValueData>()\n .description('Value specification for a condition')\n .keys({\n type: Joi.string()\n .trim()\n .required()\n .description('Data type of the value (e.g., string, number, date)'),\n value: Joi.string()\n .trim()\n .required()\n .description('The actual value to compare against'),\n display: Joi.string()\n .trim()\n .required()\n .description('Human-readable version of the value for display purposes')\n })\n\nconst conditionListItemRefDataSchemaV2 =\n Joi.object<ConditionListItemRefValueDataV2>()\n .description('List item ref specification for a condition')\n .keys({\n listId: Joi.string()\n .trim()\n .required()\n .when('/lists', {\n is: Joi.exist(),\n then: Joi.valid(listIdRef)\n })\n .description('The id of the list')\n .error(checkErrors(FormDefinitionError.RefConditionListId)),\n itemId: Joi.string()\n .trim()\n .when('/lists', {\n is: Joi.exist(),\n then: Joi.valid(listItemIdRef)\n })\n .required()\n .description('The id of the list item')\n .error(checkErrors(FormDefinitionError.RefConditionItemId))\n })\n\nconst relativeDateValueDataSchemaV2 = Joi.object<RelativeDateValueDataV2>()\n .description('Relative date specification for date-based conditions')\n .keys({\n period: Joi.number()\n .integer()\n .positive()\n .required()\n .description('Numeric amount of the time period, as a string'),\n unit: Joi.string()\n .trim()\n .required()\n .description('Time unit (e.g. days, weeks, months, years)'),\n direction: Joi.string()\n .trim()\n .required()\n .description('Temporal direction, either \"past\" or \"future\"')\n })\n\nconst relativeDateValueDataSchema = Joi.object<RelativeDateValueData>()\n .description('Relative date specification for date-based conditions')\n .keys({\n type: Joi.string()\n .trim()\n .valid('RelativeDate')\n .required()\n .description('Type of the condition value, should be \"RelativeDate\"'),\n period: Joi.string()\n .trim()\n .required()\n .description('Numeric amount of the time period, as a string'),\n unit: Joi.string()\n .trim()\n .required()\n .description('Time unit (e.g. days, weeks, months, years)'),\n direction: Joi.string()\n .trim()\n .required()\n .description('Temporal direction, either \"past\" or \"future\"')\n })\n\nconst conditionRefSchema = Joi.object<ConditionRefData>()\n .description('Reference to a named condition defined elsewhere')\n .keys({\n conditionName: Joi.string()\n .trim()\n .required()\n .description('Name of the referenced condition'),\n conditionDisplayName: Joi.string()\n .trim()\n .required()\n .description('Human-readable name of the condition for display purposes'),\n coordinator: Joi.string()\n .trim()\n .optional()\n .description(\n 'Logical operator connecting this condition with others (AND, OR)'\n )\n })\n\nconst conditionRefDataSchemaV2 = Joi.object<ConditionRefDataV2>()\n .description('Reference to a named condition defined elsewhere')\n .keys({\n id: idSchema.description('Unique identifier for the referenced condition'),\n conditionId: Joi.string()\n .trim()\n .required()\n .when('/conditions', {\n is: Joi.exist(),\n then: Joi.valid(conditionIdRef)\n })\n .description('Name of the referenced condition')\n .error(checkErrors(FormDefinitionError.RefConditionConditionId))\n })\n\nconst conditionSchema = Joi.object<ConditionData>()\n .description('Condition definition specifying a logical comparison')\n .keys({\n field: conditionFieldSchema.description(\n 'The form field being evaluated in this condition'\n ),\n operator: Joi.string()\n .trim()\n .required()\n .description('Comparison operator (equals, greaterThan, contains, etc.)'),\n value: Joi.alternatives()\n .try(conditionValueSchema, relativeDateValueDataSchema)\n .description(\n 'Value to compare the field against, either fixed or relative date'\n ),\n coordinator: Joi.string()\n .trim()\n .optional()\n .description(\n 'Logical operator connecting this condition with others (AND, OR)'\n )\n })\n\nexport const conditionDataSchemaV2 = Joi.object<ConditionDataV2>()\n .description('Condition definition')\n .keys({\n id: idSchema.description(\n 'Unique identifier used to reference this condition'\n ),\n componentId: Joi.string()\n .trim()\n .required()\n .when('/pages', {\n is: Joi.exist(),\n then: Joi.valid(componentIdRefSchema)\n })\n .description(\n 'Reference to the component id being evaluated in this condition'\n )\n .error(checkErrors(FormDefinitionError.RefConditionComponentId)),\n operator: Joi.string()\n .trim()\n .valid(...Object.values(OperatorName))\n .required()\n .description('Comparison operator (equals, greaterThan, contains, etc.)'),\n type: Joi.string()\n .trim()\n .valid(...Object.values(ConditionType))\n .required()\n .description('Type of the condition value'),\n value: Joi.any()\n .required()\n .description('The actual value to compare against')\n .when('type', {\n switch: [\n { is: ConditionType.BooleanValue, then: Joi.boolean() },\n { is: ConditionType.StringValue, then: Joi.string() },\n { is: ConditionType.NumberValue, then: Joi.number() },\n {\n is: ConditionType.DateValue,\n then: Joi.date().format('YYYY-MM-DD').raw()\n },\n {\n is: ConditionType.ListItemRef,\n then: conditionListItemRefDataSchemaV2\n },\n {\n is: ConditionType.RelativeDate,\n then: relativeDateValueDataSchemaV2\n }\n ]\n })\n .description(\n 'Value to compare the field against, either fixed or relative date'\n )\n })\n\nconst conditionGroupSchema = Joi.object<ConditionGroupData>()\n .description('Group of conditions combined with logical operators')\n .keys({\n conditions: Joi.array()\n .items(\n Joi.alternatives().try(\n conditionSchema,\n conditionRefSchema,\n Joi.link('#conditionGroupSchema')\n )\n )\n .description('Array of conditions or condition references in this group')\n })\n .id('conditionGroupSchema')\n\nconst conditionsModelSchema = Joi.object<ConditionsModelData>()\n .description('Complete condition model with name and condition set')\n .keys({\n name: Joi.string()\n .trim()\n .required()\n .description('Unique identifier for the condition set'),\n conditions: Joi.array()\n .items(\n Joi.alternatives().try(\n conditionSchema,\n conditionRefSchema,\n conditionGroupSchema\n )\n )\n .description(\n 'Array of conditions, condition references, or condition groups'\n )\n })\n\nconst conditionWrapperSchema = Joi.object<ConditionWrapper>()\n .description('Container for a named condition with its definition')\n .keys({\n name: Joi.string()\n .trim()\n .required()\n .description('Unique identifier used to reference this condition'),\n displayName: Joi.string()\n .trim()\n .description('Human-readable name for display in the UI'),\n value: conditionsModelSchema\n .required()\n .description('The complete condition definition')\n })\n\nexport const conditionWrapperSchemaV2 = Joi.object<ConditionWrapperV2>()\n .description('Container for a named condition with its definition')\n .keys({\n id: idSchema.description('Unique identifier for the condition'),\n displayName: Joi.string()\n .trim()\n .description('Human-readable name for display in the UI'),\n coordinator: Joi.string()\n .optional()\n .when('items', { is: Joi.array().min(2), then: Joi.required() })\n .description(\n 'Logical operator connecting this condition with others (AND, OR)'\n ),\n items: Joi.array<ConditionGroupDataV2>()\n .items(\n Joi.alternatives().conditional('.componentId', {\n is: Joi.exist(),\n then: conditionDataSchemaV2,\n otherwise: conditionRefDataSchemaV2\n })\n )\n .min(1)\n .max(15)\n .description('Array of conditions or condition references')\n })\n .description('Condition schema for V2 forms')\n\nexport const componentSchema = Joi.object<ComponentDef>()\n .description('Form component definition specifying UI element behavior')\n .keys({\n id: idSchemaOptional.description('Unique identifier for the component'),\n type: Joi.string<ComponentType>()\n .trim()\n .required()\n .description('Component type (TextField, RadioButtons, DateField, etc.)'),\n shortDescription: Joi.string()\n .trim()\n .optional()\n .description('Brief description of the component purpose'),\n name: Joi.when('type', {\n is: Joi.string().valid(\n ComponentType.Details,\n ComponentType.Html,\n ComponentType.InsetText,\n ComponentType.Markdown\n ),\n then: Joi.string()\n .trim()\n .pattern(/^[a-zA-Z]+$/)\n .optional()\n .description('Optional identifier for display-only components'),\n otherwise: Joi.string()\n .trim()\n .pattern(/^[a-zA-Z]+$/)\n .required()\n .description('Unique identifier for the component, used in form data')\n }),\n title: Joi.when('type', {\n is: Joi.string().valid(\n ComponentType.Details,\n ComponentType.Html,\n ComponentType.InsetText,\n ComponentType.Markdown\n ),\n then: Joi.string()\n .trim()\n .optional()\n .description('Optional title for display-only components'),\n otherwise: Joi.string()\n .trim()\n .allow('')\n .description('Label displayed above the component')\n }),\n hint: Joi.string()\n .trim()\n .allow('')\n .optional()\n .description(\n 'Additional guidance text displayed below the component title'\n ),\n options: Joi.object({\n rows: Joi.number()\n .empty('')\n .description('Number of rows for textarea components'),\n maxWords: Joi.number()\n .empty('')\n .description('Maximum number of words allowed in text inputs'),\n maxDaysInPast: Joi.number()\n .empty('')\n .description('Maximum days in the past allowed for date inputs'),\n maxDaysInFuture: Joi.number()\n .empty('')\n .description('Maximum days in the future allowed for date inputs'),\n customValidationMessage: Joi.string()\n .trim()\n .allow('')\n .description('Custom error message for validation failures'),\n customValidationMessages: Joi.object<LanguageMessages>()\n .unknown(true)\n .optional()\n .description('Custom error messages keyed by validation rule name')\n })\n .default({})\n .unknown(true)\n .description('Component-specific configuration options'),\n schema: Joi.object({\n min: Joi.number()\n .empty('')\n .description('Minimum value or length for validation'),\n max: Joi.number()\n .empty('')\n .description('Maximum value or length for validation'),\n length: Joi.number()\n .empty('')\n .description('Exact length required for validation')\n })\n .unknown(true)\n .default({})\n .description('Validation rules for the component'),\n list: Joi.string()\n .trim()\n .optional()\n .description(\n 'Reference to a predefined list of options for select components'\n )\n })\n .unknown(true)\n\nexport const componentSchemaV2 = componentSchema\n .keys({\n id: idSchema.description('Unique identifier for the component'),\n list: Joi.string()\n .when('/lists', {\n is: Joi.exist(),\n then: Joi.valid(listIdRef)\n })\n .optional()\n .description(\n 'List id reference to a predefined list of options for select components'\n )\n .error(checkErrors(FormDefinitionError.RefPageComponentList))\n })\n .description('Component schema for V2 forms')\n\nexport const componentPayloadSchemaV2 = componentSchema\n .keys({\n id: idSchema.description('Unique identifier for the component'),\n list: Joi.string()\n .optional()\n .description(\n 'List id reference to a predefined list of options for select components'\n )\n })\n .description('Payload schema for component for V2 forms')\n\nexport const fileUploadComponentSchema = componentSchemaV2.keys({\n type: Joi.string<ComponentType.FileUploadField>()\n .trim()\n .valid(ComponentType.FileUploadField)\n .required()\n .description('Component that can only be a FileUploadField')\n})\n\nexport const contentComponentSchema = componentSchemaV2.keys({\n type: Joi.string<ComponentType>()\n .trim()\n .valid(ComponentType.Details)\n .valid(ComponentType.Html)\n .valid(ComponentType.Markdown)\n .valid(ComponentType.InsetText)\n .valid(ComponentType.List)\n .required()\n .description('Content only component type (Details, Html, Markdown, etc.)')\n})\n\nconst nextSchema = Joi.object<Link>()\n .description('Navigation link defining where to go after completing a page')\n .keys({\n path: Joi.string()\n .trim()\n .required()\n .description('The target page path to navigate to'),\n condition: Joi.string()\n .trim()\n .allow('')\n .optional()\n .description(\n 'Optional condition that determines if this path should be taken'\n ),\n redirect: Joi.string()\n .trim()\n .optional()\n .description(\n 'Optional external URL to redirect to instead of an internal page'\n )\n })\n\nconst repeatOptions = Joi.object<RepeatOptions>()\n .description('Configuration options for a repeatable page section')\n .keys({\n name: Joi.string()\n .trim()\n .required()\n .description(\n 'Identifier for the repeatable section, used in data structure'\n ),\n title: Joi.string()\n .trim()\n .required()\n .description('Title displayed for each repeatable item')\n })\n\nconst repeatSchema = Joi.object<RepeatSchema>()\n .description('Validation rules for a repeatable section')\n .keys({\n min: Joi.number()\n .empty('')\n .required()\n .description('Minimum number of repetitions required'),\n max: Joi.number()\n .empty('')\n .required()\n .description('Maximum number of repetitions allowed')\n })\n\nexport const pageRepeatSchema = Joi.object<Repeat>()\n .description('Complete configuration for a repeatable page')\n .keys({\n options: repeatOptions\n .required()\n .description('Display and identification options for the repetition'),\n schema: repeatSchema\n .required()\n .description('Validation constraints for the number of repetitions')\n })\n\nconst eventSchema = Joi.object<Event>()\n .description('Event handler configuration for page lifecycle events')\n .keys({\n type: Joi.string()\n .trim()\n .allow('http')\n .required()\n .description(\n 'Type of the event handler (currently only \"http\" supported)'\n ),\n options: Joi.object<EventOptions>()\n .description('Options specific to the event handler type')\n .keys({\n method: Joi.string()\n .trim()\n .allow('POST')\n .required()\n .description('HTTP method to use for the request'),\n url: Joi.string()\n .trim()\n .uri({ scheme: ['http', 'https'] })\n .required()\n .description('URL endpoint to call when the event fires')\n })\n })\n\nconst eventsSchema = Joi.object<Events>()\n .description(\n 'Collection of event handlers for different page lifecycle events'\n )\n .keys({\n onLoad: eventSchema\n .optional()\n .description('Event handler triggered when the page is loaded'),\n onSave: eventSchema\n .optional()\n .description('Event handler triggered when the page data is saved')\n })\n\nexport const pageUploadComponentsSchema = Joi.array<\n FileUploadFieldComponent | ContentComponentsDef\n>()\n .items(\n fileUploadComponentSchema.required(),\n contentComponentSchema.optional()\n )\n .unique('id')\n .unique('name', { ignoreUndefined: true })\n .min(1)\n .max(2)\n .description('Components allowed on Page Upload schema')\n\n/**\n * `/status` is a special route for providing a user's application status.\n * It should not be configured via the designer.\n */\nexport const pageSchema = Joi.object<Page>()\n .description('Form page definition specifying content and behavior')\n .keys({\n id: idSchemaOptional.description('Unique identifier for the page'),\n path: Joi.string()\n .trim()\n .required()\n .disallow('/status')\n .description(\n 'URL path for this page, must not be the reserved \"/status\" path'\n ),\n title: Joi.string()\n .trim()\n .required()\n .description('Page title displayed at the top of the page'),\n section: Joi.string().trim().description('Section this page belongs to'),\n controller: Joi.string()\n .trim()\n .optional()\n .description('Custom controller class name for special page behavior'),\n components: Joi.array<ComponentDef>()\n .items(componentSchema)\n .unique('name')\n .description('UI components displayed on this page'),\n repeat: Joi.when('controller', {\n is: Joi.string().trim().valid('RepeatPageController').required(),\n then: pageRepeatSchema\n .required()\n .description(\n 'Configuration for repeatable pages, required when using RepeatPageController'\n ),\n otherwise: Joi.any().strip()\n }),\n condition: Joi.string()\n .trim()\n .allow('')\n .optional()\n .description('Optional condition that determines if this page is shown'),\n next: Joi.array<Link>()\n .items(nextSchema)\n .default([])\n .description('Possible navigation paths after this page'),\n events: eventsSchema\n .optional()\n .description('Event handlers for page lifecycle events'),\n view: Joi.string()\n .trim()\n .optional()\n .description(\n 'Optional custom view template to use for rendering this page'\n )\n })\n\n/**\n * V2 engine schema - used with new editor\n */\nexport const pageSchemaV2 = pageSchema\n .append({\n id: idSchema.description('Unique identifier for the page'),\n title: Joi.string()\n .trim()\n .allow('')\n .required()\n .description(\n 'Page title displayed at the top of the page (with support for empty titles in V2)'\n ),\n components: Joi.when('controller', {\n switch: [\n {\n is: Joi.string().trim().valid(ControllerType.FileUpload).required(),\n then: pageUploadComponentsSchema\n }\n ],\n otherwise: Joi.array<ComponentDef>()\n .items(componentSchemaV2)\n .unique('id')\n .unique('name', { ignoreUndefined: true })\n .description('Components schema for V2 forms')\n .error(\n checkErrors([\n FormDefinitionError.UniquePageComponentId,\n FormDefinitionError.UniquePageComponentName\n ])\n )\n }),\n condition: Joi.string()\n .trim()\n .when('/conditions', {\n is: Joi.exist(),\n then: Joi.valid(conditionIdRef)\n })\n .optional()\n .description('Optional condition that determines if this page is shown')\n .error(checkErrors(FormDefinitionError.RefPageCondition))\n })\n .description('Page schema for V2 forms')\n\nexport const pagePayloadSchemaV2 = pageSchemaV2\n .append({\n components: Joi.when('controller', {\n switch: [\n {\n is: Joi.string().trim().valid(ControllerType.FileUpload).required(),\n then: pageUploadComponentsSchema\n }\n ],\n otherwise: Joi.array<ComponentDef>()\n .items(componentPayloadSchemaV2)\n .unique('id')\n .unique('name')\n .description('Components schema for V2 forms')\n })\n })\n .description('Payload Page schema for V2 forms')\n\nconst baseListItemSchema = Joi.object<Item>()\n .description('Base schema for list items with common properties')\n .keys({\n id: idSchema.description('Unique identifier for the list item'),\n text: Joi.string()\n .trim()\n .allow('')\n .description('Display text shown to the user'),\n description: Joi.string()\n .trim()\n .allow('')\n .optional()\n .description('Optional additional descriptive text for the item'),\n conditional: Joi.object<Item['conditional']>()\n .description('Optional components to show when this item is selected')\n .keys({\n components: Joi.array<ComponentDef>()\n .required()\n .items(componentSchema.unknown(true))\n .unique('name')\n .description('Components to display conditionally')\n })\n .optional(),\n condition: Joi.string()\n .trim()\n .allow('')\n .optional()\n .description('Condition that determines if this item is shown'),\n hint: Joi.object<Item['hint']>()\n .optional()\n .keys({\n id: idSchema,\n text: Joi.string().trim()\n })\n .description('Optional hint text to be shown on list item')\n })\n\nconst stringListItemSchema = baseListItemSchema\n .append({\n value: Joi.string()\n .trim()\n .required()\n .description('String value stored when this item is selected')\n })\n .description('List item with string value')\n\nconst numberListItemSchema = baseListItemSchema\n .append({\n value: Joi.number()\n .required()\n .description('Numeric value stored when this item is selected')\n })\n .description('List item with numeric value')\n\nexport const listSchema = Joi.object<List>()\n .description('Reusable list of options for select components')\n .keys({\n id: idSchemaOptional.description('Unique identifier for the list'),\n name: Joi.string()\n .trim()\n .required()\n .description('Name used to reference this list from components'),\n title: Joi.string()\n .trim()\n .required()\n .description('Human-readable title for the list'),\n type: Joi.string()\n .trim()\n .required()\n .valid('string', 'number')\n .description('Data type for list values (string or number)'),\n items: Joi.when('type', {\n is: 'string',\n then: Joi.array()\n .items(stringListItemSchema)\n .unique('id')\n .unique('text')\n .unique('value')\n .description('Array of items with string values')\n .error(\n checkErrors([\n FormDefinitionError.UniqueListItemId,\n FormDefinitionError.UniqueListItemText,\n FormDefinitionError.UniqueListItemValue\n ])\n ),\n otherwise: Joi.array()\n .items(numberListItemSchema)\n .unique('id')\n .unique('text')\n .unique('value')\n .description('Array of items with numeric values')\n .error(\n checkErrors([\n FormDefinitionError.UniqueListItemId,\n FormDefinitionError.UniqueListItemText,\n FormDefinitionError.UniqueListItemValue\n ])\n )\n })\n })\n\n/**\n * V2 Joi schema for Lists\n */\nexport const listSchemaV2 = listSchema\n .keys({\n id: idSchema.description('Unique identifier for the list')\n })\n .description('List schema for V2 forms')\n\nconst feedbackSchema = Joi.object<FormDefinition['feedback']>()\n .description('Feedback configuration for the form')\n .keys({\n feedbackForm: Joi.boolean()\n .default(false)\n .description('Whether to show the built-in feedback form'),\n url: Joi.when('feedbackForm', {\n is: Joi.boolean().valid(false),\n then: Joi.string()\n .trim()\n .optional()\n .allow('')\n .description(\n 'URL to an external feedback form when not using built-in feedback'\n )\n }),\n emailAddress: Joi.string()\n .trim()\n .email({\n tlds: {\n allow: false\n }\n })\n .optional()\n .description('Email address where feedback is sent')\n })\n\nconst phaseBannerSchema = Joi.object<PhaseBanner>()\n .description('Phase banner configuration showing development status')\n .keys({\n phase: Joi.string()\n .trim()\n .valid('alpha', 'beta')\n .description('Development phase of the service (alpha or beta)')\n })\n\nconst outputSchema = Joi.object<FormDefinition['output']>()\n .description('Configuration for form submission output')\n .keys({\n audience: Joi.string()\n .trim()\n .valid('human', 'machine')\n .required()\n .description(\n 'Target audience for the output (human readable or machine processable)'\n ),\n version: Joi.string()\n .trim()\n .required()\n .description('Version identifier for the output format')\n })\n\n/**\n * Joi schema for `FormDefinition` interface\n * @see {@link FormDefinition}\n */\nexport const formDefinitionSchema = Joi.object<FormDefinition>()\n .description('Complete form definition describing all aspects of a form')\n .required()\n .keys({\n engine: Joi.string()\n .trim()\n .allow('V1', 'V2')\n .default('V1')\n .description('Form engine version to use (V1 or V2)'),\n schema: Joi.number()\n .integer()\n .valid(SchemaVersion.V1)\n .default(SchemaVersion.V1)\n .description('Form schema version to use (1 or 2)'),\n name: Joi.string()\n .trim()\n .allow('')\n .optional()\n .description('Unique name identifying the form'),\n feedback: feedbackSchema\n .optional()\n .description('Feedback mechanism configuration'),\n startPage: Joi.string()\n .trim()\n .optional()\n .description('Path of the first page to show when starting the form'),\n pages: Joi.array<Page>()\n .required()\n .items(pageSchema)\n .description('Pages schema for V1 forms')\n .unique('path'),\n sections: Joi.array<Section>()\n .items(sectionsSchema)\n .unique('name')\n .unique('title')\n .required()\n .description('Sections grouping related pages together')\n .error(\n checkErrors([\n FormDefinitionError.UniqueSectionName,\n FormDefinitionError.UniqueSectionTitle\n ])\n ),\n conditions: Joi.array<ConditionWrapper>()\n .items(conditionWrapperSchema)\n .unique('name')\n .unique('displayName')\n .description('Named conditions used for form logic'),\n lists: Joi.array<List>()\n .items(listSchema)\n .unique('name')\n .unique('title')\n .description('Reusable lists of options for select components'),\n metadata: Joi.object({ a: Joi.any() })\n .unknown()\n .optional()\n .description('Custom metadata for the form'),\n declaration: Joi.string()\n .trim()\n .allow('')\n .optional()\n .description('Declaration text shown on the summary page'),\n skipSummary: Joi.any()\n .strip()\n .description('option to skip the summary page'),\n phaseBanner: phaseBannerSchema\n .optional()\n .description('Phase banner configuration'),\n outputEmail: Joi.string()\n .trim()\n .email({ tlds: { allow: ['uk'] } })\n .optional()\n .description('Email address where form submissions are sent'),\n output: outputSchema\n .optional()\n .description('Configuration for submission output format')\n })\n\nexport const formDefinitionV2Schema = formDefinitionSchema\n .keys({\n schema: Joi.number()\n .integer()\n .valid(SchemaVersion.V2)\n .description('Form schema version to use (2)'),\n pages: Joi.array<Page>()\n .items(pageSchemaV2)\n .required()\n .unique('id')\n .unique('path')\n .description('Pages schema for V2 forms')\n .error(\n checkErrors([\n FormDefinitionError.UniquePageId,\n FormDefinitionError.UniquePagePath\n ])\n ),\n lists: Joi.array<List>()\n .items(listSchemaV2)\n .unique('id')\n .unique('name')\n .unique('title')\n .description('Lists schema for V2 forms')\n .error(\n checkErrors([\n FormDefinitionError.UniqueListId,\n FormDefinitionError.UniqueListName,\n FormDefinitionError.UniqueListTitle\n ])\n ),\n conditions: Joi.array<ConditionWrapperV2>()\n .items(conditionWrapperSchemaV2)\n .unique('id')\n .unique('displayName')\n .description('Named conditions used for form logic')\n .error(\n checkErrors([\n FormDefinitionError.UniqueConditionId,\n FormDefinitionError.UniqueConditionDisplayName\n ])\n )\n })\n .description('Form definition schema for V2')\n\n// Maintain compatibility with legacy named export\n// E.g. `import { Schema } from '@defra/forms-model'`\nexport const Schema = formDefinitionSchema\n"],"mappings":"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","ignoreList":[]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.js","names":["Engine","SchemaVersion"],"sources":["../../../../src/form/form-definition/types.ts"],"sourcesContent":["import { type ComponentDef } from '~/src/components/types.js'\nimport { type Coordinator } from '~/src/conditions/enums.js'\nimport {\n type ConditionGroupDataV2,\n type ConditionsModelData\n} from '~/src/conditions/types.js'\nimport { type ControllerPath, type ControllerType } from '~/src/pages/enums.js'\n\nexport enum Engine {\n V1 = 'V1',\n V2 = 'V2'\n}\n\nexport enum SchemaVersion {\n V1 = 1,\n V2 = 2\n}\n\nexport interface Link {\n path: string\n condition?: string\n redirect?: string\n}\n\nexport interface EventOptions {\n method: string\n url: string\n}\n\nexport interface Event {\n type: string\n options: EventOptions\n}\n\nexport interface Events {\n onLoad?: Event\n onSave?: Event\n}\n\nexport interface PageBase {\n id?: string\n title: string\n path: string\n condition?: string\n events?: Events\n view?: string\n}\n\nexport interface RepeatOptions {\n name: string\n title: string\n}\n\nexport interface RepeatSchema {\n min: number\n max: number\n}\n\nexport interface Repeat {\n options: RepeatOptions\n schema: RepeatSchema\n}\n\nexport interface PageStart extends PageBase {\n path: ControllerPath.Start | string\n controller: ControllerType.Start\n section?: string | undefined\n next: Link[]\n components: ComponentDef[]\n}\n\nexport interface PageQuestion extends PageBase {\n controller?: ControllerType.Page\n section?: string | undefined\n next: Link[]\n components: ComponentDef[]\n}\n\nexport interface PageTerminal extends PageBase {\n controller?: ControllerType.Terminal\n section?: string | undefined\n next: Link[]\n components: ComponentDef[]\n}\n\nexport interface PageRepeat extends PageBase {\n controller: ControllerType.Repeat\n repeat: Repeat\n section?: string | undefined\n next: Link[]\n components: ComponentDef[]\n}\n\nexport interface PageFileUpload extends PageBase {\n controller: ControllerType.FileUpload\n section?: string | undefined\n next: Link[]\n components: ComponentDef[]\n}\n\nexport interface PageSummary extends PageBase {\n path: ControllerPath.Summary | string\n controller: ControllerType.Summary\n section?: undefined\n components?: ComponentDef[]\n}\n\nexport interface PageStatus extends PageBase {\n path: ControllerPath.Status | string\n controller: ControllerType.Status\n section?: undefined\n}\n\nexport type Page =\n | PageStart\n | PageQuestion\n | PageTerminal\n | PageFileUpload\n | PageRepeat\n | PageSummary\n | PageStatus\n\nexport interface Section {\n name: string\n title: string\n hideTitle?: boolean\n}\n\nexport interface Item {\n id?: string\n text: string\n value: string | number | boolean\n description?: string\n conditional?: { components: ComponentDef[] }\n condition?: string\n hint?: {\n id?: string\n text: string\n }\n}\n\nexport interface List {\n id?: string\n name: string\n title: string\n type: ListTypeContent\n items: Item[]\n}\n\nexport type ListTypeOption = 'bulleted' | 'numbered'\nexport type ListTypeContent = 'string' | 'number' | 'boolean'\n\nexport interface Feedback {\n feedbackForm?: boolean\n url?: string\n emailAddress?: string\n}\n\nexport interface PhaseBanner {\n phase?: 'alpha' | 'beta'\n feedbackUrl?: string\n}\n\nexport interface ConditionWrapper {\n name: string\n displayName: string\n value: ConditionsModelData\n}\n\nexport interface ConditionWrapperV2 {\n id: string\n displayName: string\n coordinator?: Coordinator\n items: ConditionGroupDataV2\n}\n\
|
1
|
+
{"version":3,"file":"types.js","names":["Engine","SchemaVersion"],"sources":["../../../../src/form/form-definition/types.ts"],"sourcesContent":["import { type ComponentDef } from '~/src/components/types.js'\nimport { type Coordinator } from '~/src/conditions/enums.js'\nimport {\n type ConditionGroupDataV2,\n type ConditionsModelData\n} from '~/src/conditions/types.js'\nimport { type ControllerPath, type ControllerType } from '~/src/pages/enums.js'\n\nexport enum Engine {\n V1 = 'V1',\n V2 = 'V2'\n}\n\nexport enum SchemaVersion {\n V1 = 1,\n V2 = 2\n}\n\nexport interface Link {\n path: string\n condition?: string\n redirect?: string\n}\n\nexport interface EventOptions {\n method: string\n url: string\n}\n\nexport interface Event {\n type: string\n options: EventOptions\n}\n\nexport interface Events {\n onLoad?: Event\n onSave?: Event\n}\n\nexport interface PageBase {\n id?: string\n title: string\n path: string\n condition?: string\n events?: Events\n view?: string\n}\n\nexport interface RepeatOptions {\n name: string\n title: string\n}\n\nexport interface RepeatSchema {\n min: number\n max: number\n}\n\nexport interface Repeat {\n options: RepeatOptions\n schema: RepeatSchema\n}\n\nexport interface PageStart extends PageBase {\n path: ControllerPath.Start | string\n controller: ControllerType.Start\n section?: string | undefined\n next: Link[]\n components: ComponentDef[]\n}\n\nexport interface PageQuestion extends PageBase {\n controller?: ControllerType.Page\n section?: string | undefined\n next: Link[]\n components: ComponentDef[]\n}\n\nexport interface PageTerminal extends PageBase {\n controller?: ControllerType.Terminal\n section?: string | undefined\n next: Link[]\n components: ComponentDef[]\n}\n\nexport interface PageRepeat extends PageBase {\n controller: ControllerType.Repeat\n repeat: Repeat\n section?: string | undefined\n next: Link[]\n components: ComponentDef[]\n}\n\nexport interface PageFileUpload extends PageBase {\n controller: ControllerType.FileUpload\n section?: string | undefined\n next: Link[]\n components: ComponentDef[]\n}\n\nexport interface PageSummary extends PageBase {\n path: ControllerPath.Summary | string\n controller: ControllerType.Summary\n section?: undefined\n components?: ComponentDef[]\n}\n\nexport interface PageStatus extends PageBase {\n path: ControllerPath.Status | string\n controller: ControllerType.Status\n section?: undefined\n}\n\nexport type Page =\n | PageStart\n | PageQuestion\n | PageTerminal\n | PageFileUpload\n | PageRepeat\n | PageSummary\n | PageStatus\n\nexport interface Section {\n name: string\n title: string\n hideTitle?: boolean\n}\n\nexport interface Item {\n id?: string\n text: string\n value: string | number | boolean\n description?: string\n conditional?: { components: ComponentDef[] }\n condition?: string\n hint?: {\n id?: string\n text: string\n }\n}\n\nexport interface List {\n id?: string\n name: string\n title: string\n type: ListTypeContent\n items: Item[]\n}\n\nexport type ListTypeOption = 'bulleted' | 'numbered'\nexport type ListTypeContent = 'string' | 'number' | 'boolean'\n\nexport interface Feedback {\n feedbackForm?: boolean\n url?: string\n emailAddress?: string\n}\n\nexport interface PhaseBanner {\n phase?: 'alpha' | 'beta'\n feedbackUrl?: string\n}\n\nexport interface ConditionWrapper {\n name: string\n displayName: string\n value: ConditionsModelData\n}\n\nexport interface ConditionWrapperV2 {\n id: string\n displayName: string\n coordinator?: Coordinator\n items: ConditionGroupDataV2\n}\n\n/**\n * Interface for `formDefinitionSchema` Joi schema\n */\nexport interface FormDefinition {\n engine?: Engine\n schema?: SchemaVersion\n pages: Page[]\n conditions: (ConditionWrapper | ConditionWrapperV2)[]\n lists: List[]\n sections: Section[]\n startPage?: string\n name?: string\n feedback?: Feedback\n phaseBanner?: PhaseBanner\n declaration?: string // Deprecated in v2\n skipSummary?: never\n metadata?: Record<string, unknown>\n outputEmail?: string\n output?: {\n audience: 'human' | 'machine'\n version: string\n }\n}\n"],"mappings":"AAQA,WAAYA,MAAM,0BAANA,MAAM;EAANA,MAAM;EAANA,MAAM;EAAA,OAANA,MAAM;AAAA;AAKlB,WAAYC,aAAa,0BAAbA,aAAa;EAAbA,aAAa,CAAbA,aAAa;EAAbA,aAAa,CAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA;;AAmKzB;AACA;AACA","ignoreList":[]}
|
@@ -77,7 +77,7 @@ export class PreviewPageController extends PreviewPageControllerBase {
|
|
77
77
|
return false;
|
78
78
|
}
|
79
79
|
// |_ one component and title not highlighted
|
80
|
-
if (this._title.trim() === this._components[0]?.question
|
80
|
+
if (this._title.trim() === this._components[0]?.question?.trim()) {
|
81
81
|
return true;
|
82
82
|
}
|
83
83
|
// titles not the same
|
@@ -116,7 +116,7 @@ export class PreviewPageController extends PreviewPageControllerBase {
|
|
116
116
|
* @returns {boolean}
|
117
117
|
*/
|
118
118
|
get titleAndFirstTitleSame() {
|
119
|
-
return this._components.length > 0 && this._title.trim() === this._components[0]?.question
|
119
|
+
return this._components.length > 0 && this._title.trim() === this._components[0]?.question?.trim() && this.components.length === 1 && this._highlighted !== 'title';
|
120
120
|
}
|
121
121
|
|
122
122
|
/**
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"page-controller.js","names":["PreviewPageControllerBase","mapComponentToPreviewQuestion","Markdown","questionRenderer","render","_questionTemplate","_questionBaseModel","PreviewPageController","PATH","_components","constructor","components","elements","definition","renderer","questions","map","firstQuestion","shift","_guidanceComponent","getOrCreateGuidanceComponent","_guidanceText","guidance","constructComponents","_showTitle","addHeading","_sectionTitle","repeatQuestion","_isRepeater","hasRepeater","HighlightClass","#constructComponents","undefined","componentsWithGuidance","_guidanceComponents","component","model","_overrideComponentHeading","questionType","componentType","showLargeTitle","componentsLength","length","_highlighted","_title","trim","question","largeTitle","fieldset","renderInput","legend","classes","label","titleAndFirstTitleSame","_getTitle","_getGuidanceText","repeaterText","_getSectionTitleText","repeaterButton","repeaterButtonText","_isHighlighted","REPEATER","text","firstToken","rest","restOfStr","join","toLowerCase","guidanceComponent","createGuidanceComponent"],"sources":["../../../../../../src/form/form-editor/preview/controller/page-controller.js"],"sourcesContent":["import { PreviewPageControllerBase } from '~/src/form/form-editor/preview/controller/page-controller-base.js'\nimport { mapComponentToPreviewQuestion } from '~/src/form/form-editor/preview/helpers.js'\nimport { Markdown } from '~/src/form/form-editor/preview/markdown.js'\n\n/**\n * @type {QuestionRenderer}\n */\nconst questionRenderer = {\n /**\n * @param {string} _questionTemplate\n * @param {QuestionBaseModel} _questionBaseModel\n */\n render(_questionTemplate, _questionBaseModel) {\n //\n }\n}\n\nexport class PreviewPageController extends PreviewPageControllerBase {\n static PATH = PreviewPageControllerBase.PATH\n /**\n * @protected\n * @type {Question[]}\n */\n _components = []\n\n /**\n * @param {ComponentDef[]} components\n * @param {PageOverviewElements} elements\n * @param {FormDefinition} definition\n * @param {PageRenderer} renderer\n */\n constructor(components, elements, definition, renderer) {\n super(elements, renderer)\n const questions = components.map(\n mapComponentToPreviewQuestion(questionRenderer, definition)\n )\n const firstQuestion = /** @type { Markdown | undefined | Question } */ (\n questions.shift()\n )\n this._guidanceComponent =\n PreviewPageController.getOrCreateGuidanceComponent(firstQuestion)\n this._guidanceText = elements.guidance\n this._components = this.#constructComponents(firstQuestion, questions)\n this._showTitle = elements.addHeading\n this._sectionTitle = elements.repeatQuestion ?? ''\n this._isRepeater = elements.hasRepeater\n }\n\n /**\n * @type {typeof PreviewPageControllerBase.HighlightClass}\n */\n static HighlightClass = PreviewPageControllerBase.HighlightClass\n\n /**\n * @param { Question | Markdown | undefined} firstQuestion\n * @param {Question[]} questions\n * @returns {Question[]}\n */\n #constructComponents(firstQuestion, questions) {\n return firstQuestion instanceof Markdown || firstQuestion === undefined\n ? questions\n : [firstQuestion, ...questions]\n }\n\n /**\n * @returns {PagePreviewComponent[]}\n */\n get components() {\n const componentsWithGuidance = /** @type {Question[]} */ ([\n ...this._guidanceComponents,\n ...this._components\n ])\n\n return componentsWithGuidance.map((component) => {\n return {\n model: this._overrideComponentHeading(component),\n questionType: component.componentType\n }\n })\n }\n\n /**\n * @returns {boolean}\n */\n get showLargeTitle() {\n const componentsLength =\n this._components.length + this._guidanceComponents.length\n\n if (componentsLength > 1 || this._highlighted === 'title') {\n return false\n }\n // |_ one component and title not highlighted\n if (this._title.trim() === this._components[0]?.question.trim()) {\n return true\n }\n // titles not the same\n\n return !this._showTitle // add page heading deselected?\n }\n\n /**\n * @param {PreviewComponent} component\n * @returns {QuestionBaseModel}\n */\n _overrideComponentHeading(component) {\n const largeTitle = this.showLargeTitle\n\n const fieldset = component.renderInput.fieldset\n ? {\n fieldset: {\n legend: {\n ...component.renderInput.fieldset.legend,\n classes: largeTitle\n ? 'govuk-fieldset__legend--l'\n : 'govuk-fieldset__legend--m'\n }\n }\n }\n : {}\n\n const label = component.renderInput.label\n ? {\n label: {\n ...component.renderInput.label,\n classes: largeTitle ? 'govuk-label--l' : 'govuk-label--m'\n }\n }\n : {}\n\n return {\n ...component.renderInput,\n ...fieldset,\n ...label\n }\n }\n\n /**\n * @returns {boolean}\n */\n get titleAndFirstTitleSame() {\n return (\n this._components.length > 0 &&\n this._title.trim() === this._components[0]?.question.trim() &&\n this.components.length === 1 &&\n this._highlighted !== 'title'\n )\n }\n\n /**\n * @returns {string}\n * @protected\n */\n _getTitle() {\n if (!this._showTitle || this.titleAndFirstTitleSame) {\n return ''\n }\n return super._getTitle()\n }\n\n /**\n * @returns {string}\n * @protected\n */\n _getGuidanceText() {\n if (!this._showTitle) {\n return ''\n }\n return super._getGuidanceText()\n }\n\n get repeaterText() {\n if (!this._isRepeater) {\n return undefined\n }\n if (!this._sectionTitle.length) {\n return 'Question set name'\n }\n return this._sectionTitle + ' 1'\n }\n\n /**\n * @returns {string|undefined}\n * @protected\n */\n _getSectionTitleText() {\n if (this._isRepeater) {\n return this.repeaterText\n }\n return undefined\n }\n\n get repeaterButton() {\n if (this.repeaterButtonText === undefined) {\n return undefined\n }\n return {\n classes: this._isHighlighted(\n PreviewPageControllerBase.HighlightClass.REPEATER\n ),\n text: this.repeaterButtonText\n }\n }\n\n get repeaterButtonText() {\n if (!this._isRepeater) {\n return undefined\n }\n\n if (this._sectionTitle === '') {\n return '[question set name]'\n }\n\n const [firstToken, ...rest] = this._sectionTitle\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const restOfStr = rest ? rest.join('') : ''\n return firstToken.toLowerCase() + restOfStr\n }\n\n /**\n * Helper method to return the guidance or a new one\n * @param { Markdown | Question | undefined } guidanceComponent\n * @returns {Markdown}\n * @private\n */\n static getOrCreateGuidanceComponent(guidanceComponent) {\n if (guidanceComponent instanceof Markdown) {\n return guidanceComponent\n }\n return PreviewPageControllerBase.createGuidanceComponent()\n }\n}\n\n/**\n * @import { PageRenderer, PageOverviewElements, QuestionRenderer, QuestionBaseModel } from '~/src/form/form-editor/preview/types.js'\n * @import { Question } from '~/src/form/form-editor/preview/question.js'\n * @import { PreviewComponent } from '~/src/form/form-editor/preview/preview.js'\n * @import { FormDefinition } from '~/src/form/form-definition/types.js'\n * @import { ComponentDef } from '~/src/components/types.js'\n * @import { PagePreviewComponent } from '~/src/form/form-editor/macros/types.js'\n */\n"],"mappings":"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","ignoreList":[]}
|
1
|
+
{"version":3,"file":"page-controller.js","names":["PreviewPageControllerBase","mapComponentToPreviewQuestion","Markdown","questionRenderer","render","_questionTemplate","_questionBaseModel","PreviewPageController","PATH","_components","constructor","components","elements","definition","renderer","questions","map","firstQuestion","shift","_guidanceComponent","getOrCreateGuidanceComponent","_guidanceText","guidance","constructComponents","_showTitle","addHeading","_sectionTitle","repeatQuestion","_isRepeater","hasRepeater","HighlightClass","#constructComponents","undefined","componentsWithGuidance","_guidanceComponents","component","model","_overrideComponentHeading","questionType","componentType","showLargeTitle","componentsLength","length","_highlighted","_title","trim","question","largeTitle","fieldset","renderInput","legend","classes","label","titleAndFirstTitleSame","_getTitle","_getGuidanceText","repeaterText","_getSectionTitleText","repeaterButton","repeaterButtonText","_isHighlighted","REPEATER","text","firstToken","rest","restOfStr","join","toLowerCase","guidanceComponent","createGuidanceComponent"],"sources":["../../../../../../src/form/form-editor/preview/controller/page-controller.js"],"sourcesContent":["import { PreviewPageControllerBase } from '~/src/form/form-editor/preview/controller/page-controller-base.js'\nimport { mapComponentToPreviewQuestion } from '~/src/form/form-editor/preview/helpers.js'\nimport { Markdown } from '~/src/form/form-editor/preview/markdown.js'\n\n/**\n * @type {QuestionRenderer}\n */\nconst questionRenderer = {\n /**\n * @param {string} _questionTemplate\n * @param {QuestionBaseModel} _questionBaseModel\n */\n render(_questionTemplate, _questionBaseModel) {\n //\n }\n}\n\nexport class PreviewPageController extends PreviewPageControllerBase {\n static PATH = PreviewPageControllerBase.PATH\n /**\n * @protected\n * @type {Question[]}\n */\n _components = []\n\n /**\n * @param {ComponentDef[]} components\n * @param {PageOverviewElements} elements\n * @param {FormDefinition} definition\n * @param {PageRenderer} renderer\n */\n constructor(components, elements, definition, renderer) {\n super(elements, renderer)\n const questions = components.map(\n mapComponentToPreviewQuestion(questionRenderer, definition)\n )\n const firstQuestion = /** @type { Markdown | undefined | Question } */ (\n questions.shift()\n )\n this._guidanceComponent =\n PreviewPageController.getOrCreateGuidanceComponent(firstQuestion)\n this._guidanceText = elements.guidance\n this._components = this.#constructComponents(firstQuestion, questions)\n this._showTitle = elements.addHeading\n this._sectionTitle = elements.repeatQuestion ?? ''\n this._isRepeater = elements.hasRepeater\n }\n\n /**\n * @type {typeof PreviewPageControllerBase.HighlightClass}\n */\n static HighlightClass = PreviewPageControllerBase.HighlightClass\n\n /**\n * @param { Question | Markdown | undefined} firstQuestion\n * @param {Question[]} questions\n * @returns {Question[]}\n */\n #constructComponents(firstQuestion, questions) {\n return firstQuestion instanceof Markdown || firstQuestion === undefined\n ? questions\n : [firstQuestion, ...questions]\n }\n\n /**\n * @returns {PagePreviewComponent[]}\n */\n get components() {\n const componentsWithGuidance = /** @type {Question[]} */ ([\n ...this._guidanceComponents,\n ...this._components\n ])\n\n return componentsWithGuidance.map((component) => {\n return {\n model: this._overrideComponentHeading(component),\n questionType: component.componentType\n }\n })\n }\n\n /**\n * @returns {boolean}\n */\n get showLargeTitle() {\n const componentsLength =\n this._components.length + this._guidanceComponents.length\n\n if (componentsLength > 1 || this._highlighted === 'title') {\n return false\n }\n // |_ one component and title not highlighted\n if (this._title.trim() === this._components[0]?.question?.trim()) {\n return true\n }\n // titles not the same\n\n return !this._showTitle // add page heading deselected?\n }\n\n /**\n * @param {PreviewComponent} component\n * @returns {QuestionBaseModel}\n */\n _overrideComponentHeading(component) {\n const largeTitle = this.showLargeTitle\n\n const fieldset = component.renderInput.fieldset\n ? {\n fieldset: {\n legend: {\n ...component.renderInput.fieldset.legend,\n classes: largeTitle\n ? 'govuk-fieldset__legend--l'\n : 'govuk-fieldset__legend--m'\n }\n }\n }\n : {}\n\n const label = component.renderInput.label\n ? {\n label: {\n ...component.renderInput.label,\n classes: largeTitle ? 'govuk-label--l' : 'govuk-label--m'\n }\n }\n : {}\n\n return {\n ...component.renderInput,\n ...fieldset,\n ...label\n }\n }\n\n /**\n * @returns {boolean}\n */\n get titleAndFirstTitleSame() {\n return (\n this._components.length > 0 &&\n this._title.trim() === this._components[0]?.question?.trim() &&\n this.components.length === 1 &&\n this._highlighted !== 'title'\n )\n }\n\n /**\n * @returns {string}\n * @protected\n */\n _getTitle() {\n if (!this._showTitle || this.titleAndFirstTitleSame) {\n return ''\n }\n return super._getTitle()\n }\n\n /**\n * @returns {string}\n * @protected\n */\n _getGuidanceText() {\n if (!this._showTitle) {\n return ''\n }\n return super._getGuidanceText()\n }\n\n get repeaterText() {\n if (!this._isRepeater) {\n return undefined\n }\n if (!this._sectionTitle.length) {\n return 'Question set name'\n }\n return this._sectionTitle + ' 1'\n }\n\n /**\n * @returns {string|undefined}\n * @protected\n */\n _getSectionTitleText() {\n if (this._isRepeater) {\n return this.repeaterText\n }\n return undefined\n }\n\n get repeaterButton() {\n if (this.repeaterButtonText === undefined) {\n return undefined\n }\n return {\n classes: this._isHighlighted(\n PreviewPageControllerBase.HighlightClass.REPEATER\n ),\n text: this.repeaterButtonText\n }\n }\n\n get repeaterButtonText() {\n if (!this._isRepeater) {\n return undefined\n }\n\n if (this._sectionTitle === '') {\n return '[question set name]'\n }\n\n const [firstToken, ...rest] = this._sectionTitle\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const restOfStr = rest ? rest.join('') : ''\n return firstToken.toLowerCase() + restOfStr\n }\n\n /**\n * Helper method to return the guidance or a new one\n * @param { Markdown | Question | undefined } guidanceComponent\n * @returns {Markdown}\n * @private\n */\n static getOrCreateGuidanceComponent(guidanceComponent) {\n if (guidanceComponent instanceof Markdown) {\n return guidanceComponent\n }\n return PreviewPageControllerBase.createGuidanceComponent()\n }\n}\n\n/**\n * @import { PageRenderer, PageOverviewElements, QuestionRenderer, QuestionBaseModel } from '~/src/form/form-editor/preview/types.js'\n * @import { Question } from '~/src/form/form-editor/preview/question.js'\n * @import { PreviewComponent } from '~/src/form/form-editor/preview/preview.js'\n * @import { FormDefinition } from '~/src/form/form-definition/types.js'\n * @import { ComponentDef } from '~/src/components/types.js'\n * @import { PagePreviewComponent } from '~/src/form/form-editor/macros/types.js'\n */\n"],"mappings":"AAAA,SAASA,yBAAyB;AAClC,SAASC,6BAA6B;AACtC,SAASC,QAAQ;;AAEjB;AACA;AACA;AACA,MAAMC,gBAAgB,GAAG;EACvB;AACF;AACA;AACA;EACEC,MAAMA,CAACC,iBAAiB,EAAEC,kBAAkB,EAAE;IAC5C;EAAA;AAEJ,CAAC;AAED,OAAO,MAAMC,qBAAqB,SAASP,yBAAyB,CAAC;EACnE,OAAOQ,IAAI,GAAGR,yBAAyB,CAACQ,IAAI;EAC5C;AACF;AACA;AACA;EACEC,WAAW,GAAG,EAAE;;EAEhB;AACF;AACA;AACA;AACA;AACA;EACEC,WAAWA,CAACC,UAAU,EAAEC,QAAQ,EAAEC,UAAU,EAAEC,QAAQ,EAAE;IACtD,KAAK,CAACF,QAAQ,EAAEE,QAAQ,CAAC;IACzB,MAAMC,SAAS,GAAGJ,UAAU,CAACK,GAAG,CAC9Bf,6BAA6B,CAACE,gBAAgB,EAAEU,UAAU,CAC5D,CAAC;IACD,MAAMI,aAAa,GAAG;IACpBF,SAAS,CAACG,KAAK,CAAC,CACjB;IACD,IAAI,CAACC,kBAAkB,GACrBZ,qBAAqB,CAACa,4BAA4B,CAACH,aAAa,CAAC;IACnE,IAAI,CAACI,aAAa,GAAGT,QAAQ,CAACU,QAAQ;IACtC,IAAI,CAACb,WAAW,GAAG,IAAI,CAAC,CAACc,mBAAmB,CAACN,aAAa,EAAEF,SAAS,CAAC;IACtE,IAAI,CAACS,UAAU,GAAGZ,QAAQ,CAACa,UAAU;IACrC,IAAI,CAACC,aAAa,GAAGd,QAAQ,CAACe,cAAc,IAAI,EAAE;IAClD,IAAI,CAACC,WAAW,GAAGhB,QAAQ,CAACiB,WAAW;EACzC;;EAEA;AACF;AACA;EACE,OAAOC,cAAc,GAAG9B,yBAAyB,CAAC8B,cAAc;;EAEhE;AACF;AACA;AACA;AACA;EACE,CAACP,mBAAmBQ,CAACd,aAAa,EAAEF,SAAS,EAAE;IAC7C,OAAOE,aAAa,YAAYf,QAAQ,IAAIe,aAAa,KAAKe,SAAS,GACnEjB,SAAS,GACT,CAACE,aAAa,EAAE,GAAGF,SAAS,CAAC;EACnC;;EAEA;AACF;AACA;EACE,IAAIJ,UAAUA,CAAA,EAAG;IACf,MAAMsB,sBAAsB,GAAG,yBAA2B,CACxD,GAAG,IAAI,CAACC,mBAAmB,EAC3B,GAAG,IAAI,CAACzB,WAAW,CACnB;IAEF,OAAOwB,sBAAsB,CAACjB,GAAG,CAAEmB,SAAS,IAAK;MAC/C,OAAO;QACLC,KAAK,EAAE,IAAI,CAACC,yBAAyB,CAACF,SAAS,CAAC;QAChDG,YAAY,EAAEH,SAAS,CAACI;MAC1B,CAAC;IACH,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;EACE,IAAIC,cAAcA,CAAA,EAAG;IACnB,MAAMC,gBAAgB,GACpB,IAAI,CAAChC,WAAW,CAACiC,MAAM,GAAG,IAAI,CAACR,mBAAmB,CAACQ,MAAM;IAE3D,IAAID,gBAAgB,GAAG,CAAC,IAAI,IAAI,CAACE,YAAY,KAAK,OAAO,EAAE;MACzD,OAAO,KAAK;IACd;IACA;IACA,IAAI,IAAI,CAACC,MAAM,CAACC,IAAI,CAAC,CAAC,KAAK,IAAI,CAACpC,WAAW,CAAC,CAAC,CAAC,EAAEqC,QAAQ,EAAED,IAAI,CAAC,CAAC,EAAE;MAChE,OAAO,IAAI;IACb;IACA;;IAEA,OAAO,CAAC,IAAI,CAACrB,UAAU,EAAC;EAC1B;;EAEA;AACF;AACA;AACA;EACEa,yBAAyBA,CAACF,SAAS,EAAE;IACnC,MAAMY,UAAU,GAAG,IAAI,CAACP,cAAc;IAEtC,MAAMQ,QAAQ,GAAGb,SAAS,CAACc,WAAW,CAACD,QAAQ,GAC3C;MACEA,QAAQ,EAAE;QACRE,MAAM,EAAE;UACN,GAAGf,SAAS,CAACc,WAAW,CAACD,QAAQ,CAACE,MAAM;UACxCC,OAAO,EAAEJ,UAAU,GACf,2BAA2B,GAC3B;QACN;MACF;IACF,CAAC,GACD,CAAC,CAAC;IAEN,MAAMK,KAAK,GAAGjB,SAAS,CAACc,WAAW,CAACG,KAAK,GACrC;MACEA,KAAK,EAAE;QACL,GAAGjB,SAAS,CAACc,WAAW,CAACG,KAAK;QAC9BD,OAAO,EAAEJ,UAAU,GAAG,gBAAgB,GAAG;MAC3C;IACF,CAAC,GACD,CAAC,CAAC;IAEN,OAAO;MACL,GAAGZ,SAAS,CAACc,WAAW;MACxB,GAAGD,QAAQ;MACX,GAAGI;IACL,CAAC;EACH;;EAEA;AACF;AACA;EACE,IAAIC,sBAAsBA,CAAA,EAAG;IAC3B,OACE,IAAI,CAAC5C,WAAW,CAACiC,MAAM,GAAG,CAAC,IAC3B,IAAI,CAACE,MAAM,CAACC,IAAI,CAAC,CAAC,KAAK,IAAI,CAACpC,WAAW,CAAC,CAAC,CAAC,EAAEqC,QAAQ,EAAED,IAAI,CAAC,CAAC,IAC5D,IAAI,CAAClC,UAAU,CAAC+B,MAAM,KAAK,CAAC,IAC5B,IAAI,CAACC,YAAY,KAAK,OAAO;EAEjC;;EAEA;AACF;AACA;AACA;EACEW,SAASA,CAAA,EAAG;IACV,IAAI,CAAC,IAAI,CAAC9B,UAAU,IAAI,IAAI,CAAC6B,sBAAsB,EAAE;MACnD,OAAO,EAAE;IACX;IACA,OAAO,KAAK,CAACC,SAAS,CAAC,CAAC;EAC1B;;EAEA;AACF;AACA;AACA;EACEC,gBAAgBA,CAAA,EAAG;IACjB,IAAI,CAAC,IAAI,CAAC/B,UAAU,EAAE;MACpB,OAAO,EAAE;IACX;IACA,OAAO,KAAK,CAAC+B,gBAAgB,CAAC,CAAC;EACjC;EAEA,IAAIC,YAAYA,CAAA,EAAG;IACjB,IAAI,CAAC,IAAI,CAAC5B,WAAW,EAAE;MACrB,OAAOI,SAAS;IAClB;IACA,IAAI,CAAC,IAAI,CAACN,aAAa,CAACgB,MAAM,EAAE;MAC9B,OAAO,mBAAmB;IAC5B;IACA,OAAO,IAAI,CAAChB,aAAa,GAAG,IAAI;EAClC;;EAEA;AACF;AACA;AACA;EACE+B,oBAAoBA,CAAA,EAAG;IACrB,IAAI,IAAI,CAAC7B,WAAW,EAAE;MACpB,OAAO,IAAI,CAAC4B,YAAY;IAC1B;IACA,OAAOxB,SAAS;EAClB;EAEA,IAAI0B,cAAcA,CAAA,EAAG;IACnB,IAAI,IAAI,CAACC,kBAAkB,KAAK3B,SAAS,EAAE;MACzC,OAAOA,SAAS;IAClB;IACA,OAAO;MACLmB,OAAO,EAAE,IAAI,CAACS,cAAc,CAC1B5D,yBAAyB,CAAC8B,cAAc,CAAC+B,QAC3C,CAAC;MACDC,IAAI,EAAE,IAAI,CAACH;IACb,CAAC;EACH;EAEA,IAAIA,kBAAkBA,CAAA,EAAG;IACvB,IAAI,CAAC,IAAI,CAAC/B,WAAW,EAAE;MACrB,OAAOI,SAAS;IAClB;IAEA,IAAI,IAAI,CAACN,aAAa,KAAK,EAAE,EAAE;MAC7B,OAAO,qBAAqB;IAC9B;IAEA,MAAM,CAACqC,UAAU,EAAE,GAAGC,IAAI,CAAC,GAAG,IAAI,CAACtC,aAAa;IAChD;IACA,MAAMuC,SAAS,GAAGD,IAAI,GAAGA,IAAI,CAACE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE;IAC3C,OAAOH,UAAU,CAACI,WAAW,CAAC,CAAC,GAAGF,SAAS;EAC7C;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,OAAO7C,4BAA4BA,CAACgD,iBAAiB,EAAE;IACrD,IAAIA,iBAAiB,YAAYlE,QAAQ,EAAE;MACzC,OAAOkE,iBAAiB;IAC1B;IACA,OAAOpE,yBAAyB,CAACqE,uBAAuB,CAAC,CAAC;EAC5D;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","ignoreList":[]}
|
@@ -69,7 +69,7 @@ export class PreviewComponent {
|
|
69
69
|
*/
|
70
70
|
this._htmlElements = htmlElements;
|
71
71
|
/**
|
72
|
-
* @type {string}
|
72
|
+
* @type {string | undefined}
|
73
73
|
* @private
|
74
74
|
*/
|
75
75
|
this._question = question;
|
@@ -96,7 +96,8 @@ export class PreviewComponent {
|
|
96
96
|
}
|
97
97
|
get titleText() {
|
98
98
|
const optionalText = this._optional ? ' (optional)' : '';
|
99
|
-
|
99
|
+
const questionText = this._question === '' || !this._question ? 'Question' : this._question;
|
100
|
+
return questionText + optionalText;
|
100
101
|
}
|
101
102
|
|
102
103
|
/**
|
@@ -157,14 +158,14 @@ export class PreviewComponent {
|
|
157
158
|
}
|
158
159
|
|
159
160
|
/**
|
160
|
-
* @type {string}
|
161
|
+
* @type {string | undefined}
|
161
162
|
*/
|
162
163
|
get question() {
|
163
164
|
return this._question;
|
164
165
|
}
|
165
166
|
|
166
167
|
/**
|
167
|
-
* @param {string} value
|
168
|
+
* @param {string | undefined} value
|
168
169
|
*/
|
169
170
|
set question(value) {
|
170
171
|
this._question = value;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"preview.js","names":["ComponentType","HIGHLIGHT_CLASS","PreviewComponent","PATH","_id","undefined","componentType","Details","_questionTemplate","_highlight","_fieldName","_questionRenderer","_htmlElements","_highlighted","constructor","htmlElements","questionRenderer","question","optional","values","_question","_optional","getHighlight","element","titleText","optionalText","label","text","classes","fieldSet","legend","customRenderFields","_renderInput","id","name","renderInput","render","value","highlight","highlightContent","unHighlightContent"],"sources":["../../../../../src/form/form-editor/preview/preview.js"],"sourcesContent":["import { ComponentType } from '~/src/components/enums.js'\nimport { HIGHLIGHT_CLASS } from '~/src/form/form-editor/preview/constants.js'\n\n/**\n * @abstract\n */\nexport class PreviewComponent {\n static PATH = 'preview-components/'\n /**\n * @type { string | undefined }\n */\n _id = undefined\n /**\n * @abstract\n * @type {ComponentType}\n */\n componentType = ComponentType.Details\n /**\n * @abstract\n * @type {string}\n * @protected\n */\n _questionTemplate = ''\n /**\n * @type { string|null }\n * @protected\n */\n _highlight = null\n /**\n * @abstract\n * @type {string}\n * @protected\n */\n _fieldName = ''\n /**\n * @type {QuestionRenderer}\n * @protected\n */\n _questionRenderer\n\n /**\n * @type {QuestionElements}\n * @protected\n */\n _htmlElements\n /**\n * @type {boolean}\n * @protected\n */\n _highlighted = false\n /**\n * @type {boolean}\n * @protected\n */\n\n /**\n * @param {QuestionElements} htmlElements\n * @param {QuestionRenderer} questionRenderer\n */\n constructor(htmlElements, questionRenderer) {\n const { question, optional } = htmlElements.values\n\n /**\n * @type {QuestionElements}\n * @protected\n */\n this._htmlElements = htmlElements\n /**\n * @type {string}\n * @private\n */\n this._question = question\n /**\n * @type {boolean}\n * @private\n */\n this._optional = optional\n /**\n *\n * @type {QuestionRenderer}\n * @protected\n */\n this._questionRenderer = questionRenderer\n }\n\n /**\n * @param {string} element\n * @returns {string}\n * @protected\n */\n getHighlight(element) {\n return this._highlight === element ? ' highlight' : ''\n }\n\n get titleText() {\n const optionalText = this._optional ? ' (optional)' : ''\n
|
1
|
+
{"version":3,"file":"preview.js","names":["ComponentType","HIGHLIGHT_CLASS","PreviewComponent","PATH","_id","undefined","componentType","Details","_questionTemplate","_highlight","_fieldName","_questionRenderer","_htmlElements","_highlighted","constructor","htmlElements","questionRenderer","question","optional","values","_question","_optional","getHighlight","element","titleText","optionalText","questionText","label","text","classes","fieldSet","legend","customRenderFields","_renderInput","id","name","renderInput","render","value","highlight","highlightContent","unHighlightContent"],"sources":["../../../../../src/form/form-editor/preview/preview.js"],"sourcesContent":["import { ComponentType } from '~/src/components/enums.js'\nimport { HIGHLIGHT_CLASS } from '~/src/form/form-editor/preview/constants.js'\n\n/**\n * @abstract\n */\nexport class PreviewComponent {\n static PATH = 'preview-components/'\n /**\n * @type { string | undefined }\n */\n _id = undefined\n /**\n * @abstract\n * @type {ComponentType}\n */\n componentType = ComponentType.Details\n /**\n * @abstract\n * @type {string}\n * @protected\n */\n _questionTemplate = ''\n /**\n * @type { string|null }\n * @protected\n */\n _highlight = null\n /**\n * @abstract\n * @type {string}\n * @protected\n */\n _fieldName = ''\n /**\n * @type {QuestionRenderer}\n * @protected\n */\n _questionRenderer\n\n /**\n * @type {QuestionElements}\n * @protected\n */\n _htmlElements\n /**\n * @type {boolean}\n * @protected\n */\n _highlighted = false\n /**\n * @type {boolean}\n * @protected\n */\n\n /**\n * @param {QuestionElements} htmlElements\n * @param {QuestionRenderer} questionRenderer\n */\n constructor(htmlElements, questionRenderer) {\n const { question, optional } = htmlElements.values\n\n /**\n * @type {QuestionElements}\n * @protected\n */\n this._htmlElements = htmlElements\n /**\n * @type {string | undefined}\n * @private\n */\n this._question = question\n /**\n * @type {boolean}\n * @private\n */\n this._optional = optional\n /**\n *\n * @type {QuestionRenderer}\n * @protected\n */\n this._questionRenderer = questionRenderer\n }\n\n /**\n * @param {string} element\n * @returns {string}\n * @protected\n */\n getHighlight(element) {\n return this._highlight === element ? ' highlight' : ''\n }\n\n get titleText() {\n const optionalText = this._optional ? ' (optional)' : ''\n const questionText =\n this._question === '' || !this._question ? 'Question' : this._question\n return questionText + optionalText\n }\n\n /**\n * @protected\n * @type {DefaultComponent}\n */\n get label() {\n return {\n text: this.titleText,\n classes: 'govuk-label--l' + this.getHighlight('question')\n }\n }\n\n /**\n * @protected\n * @type {GovukFieldset}\n */\n get fieldSet() {\n return {\n legend: {\n text: this.titleText,\n classes: 'govuk-fieldset__legend--l' + this.getHighlight('question')\n }\n }\n }\n\n /**\n * @returns {Partial<QuestionBaseModel>}\n */\n get customRenderFields() {\n return {}\n }\n\n /**\n *\n * @returns {QuestionBaseModel}\n * @protected\n */\n _renderInput() {\n return {\n id: this._fieldName,\n name: this._fieldName,\n classes: this._highlighted ? HIGHLIGHT_CLASS : ''\n }\n }\n\n /**\n * @type {QuestionBaseModel}\n */\n get renderInput() {\n return {\n ...this._renderInput(),\n ...this.customRenderFields\n }\n }\n\n render() {\n this._questionRenderer.render(this._questionTemplate, this.renderInput)\n }\n\n /**\n * @type {string | undefined}\n */\n get question() {\n return this._question\n }\n\n /**\n * @param {string | undefined} value\n */\n set question(value) {\n this._question = value\n this.render()\n }\n\n get optional() {\n return this._optional\n }\n\n /**\n * @param {boolean} value\n */\n set optional(value) {\n this._optional = value\n this.render()\n }\n\n /**\n * @type {string | null}\n */\n get highlight() {\n return this._highlight\n }\n\n /**\n * @param {string | null} value\n */\n set highlight(value) {\n this._highlight = value\n this.render()\n }\n\n /**\n * @type { string | undefined }\n */\n get id() {\n return this._id\n }\n\n /**\n * @param { string | undefined } value\n */\n set id(value) {\n this._id = value\n }\n\n /**\n * no render\n */\n highlightContent() {\n this._highlighted = true\n }\n\n /**\n * no render\n */\n unHighlightContent() {\n this._highlighted = false\n }\n}\n\n/**\n * @import { QuestionElements, QuestionBaseModel, GovukFieldset, DefaultComponent, QuestionRenderer } from '~/src/form/form-editor/preview/types.js'\n */\n"],"mappings":"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","ignoreList":[]}
|
@@ -77,6 +77,15 @@ export const formMetadataStateSchema = Joi.object().keys({
|
|
77
77
|
updatedBy: formMetadataAuthorSchema.description('Who last updated this version')
|
78
78
|
}).description('Metadata about a specific version state (draft or live)');
|
79
79
|
|
80
|
+
/**
|
81
|
+
* Joi schema for `FormVersionMetadata` interface
|
82
|
+
* @see {@link FormVersionMetadata}
|
83
|
+
*/
|
84
|
+
export const formVersionMetadataSchema = Joi.object().keys({
|
85
|
+
versionNumber: Joi.number().integer().min(1).required().description('The version number'),
|
86
|
+
createdAt: authoredAtSchema.description('When this version was created')
|
87
|
+
}).description('Metadata for a specific version of the form');
|
88
|
+
|
80
89
|
/**
|
81
90
|
* Joi schema for `FormMetadata` interface
|
82
91
|
* @see {@link FormMetadata}
|
@@ -89,6 +98,7 @@ export const formMetadataSchema = formMetadataInputSchema.append({
|
|
89
98
|
createdAt: authoredAtSchema.description('When the form was first created'),
|
90
99
|
createdBy: formMetadataAuthorSchema.description('Who created the form'),
|
91
100
|
updatedAt: authoredAtSchema.description('When the form was last updated'),
|
92
|
-
updatedBy: formMetadataAuthorSchema.description('Who last updated the form')
|
101
|
+
updatedBy: formMetadataAuthorSchema.description('Who last updated the form'),
|
102
|
+
versions: Joi.array().items(formVersionMetadataSchema).optional().description('Version history for the form')
|
93
103
|
}).description('Complete metadata for a form, including version information and authoring details');
|
94
104
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","names":["Joi","organisations","idSchema","string","hex","length","required","description","titleSchema","max","trim","slugSchema","pattern","name","organisationSchema","valid","teamNameSchema","teamEmailSchema","email","tlds","allow","phoneSchema","emailAddressSchema","emailResponseTimeSchema","emailSchema","object","keys","address","responseTime","onlineUrlSchema","uri","scheme","onlineTextSchema","onlineSchema","url","text","contactSchema","phone","online","submissionGuidanceSchema","privacyNoticeUrlSchema","notificationEmailAddressSchema","authoredAtSchema","date","iso","authorIdSchema","authorDisplayNameSchema","formMetadataInputKeys","title","organisation","teamName","teamEmail","contact","submissionGuidance","privacyNoticeUrl","notificationEmail","formMetadataInputSchema","formMetadataAuthorSchema","id","displayName","formMetadataStateSchema","createdAt","createdBy","updatedAt","updatedBy","formMetadataSchema","append","slug","draft","live"],"sources":["../../../../src/form/form-metadata/index.ts"],"sourcesContent":["import Joi from 'joi'\n\nimport {\n type FormMetadata,\n type FormMetadataAuthor,\n type FormMetadataContact,\n type FormMetadataContactEmail,\n type FormMetadataContactOnline,\n type FormMetadataInput,\n type FormMetadataState\n} from '~/src/form/form-metadata/types.js'\n\nexport const organisations = [\n 'Animal and Plant Health Agency – APHA',\n 'Centre for Environment, Fisheries and Aquaculture Science – Cefas',\n 'Defra',\n 'Environment Agency',\n 'Forestry Commission',\n 'Marine Management Organisation – MMO',\n 'Natural England',\n 'Rural Payments Agency – RPA',\n 'Veterinary Medicines Directorate – VMD'\n]\n\nexport const idSchema = Joi.string()\n .hex()\n .length(24)\n .required()\n .description(\n 'Unique identifier for the form, 24-character hexadecimal string'\n )\n\nexport const titleSchema = Joi.string()\n .max(250)\n .trim()\n .required()\n .description('Title of the form, displayed to users')\n\nexport const slugSchema = Joi.string()\n .pattern(/^[a-z0-9-]+$/, { name: 'letters, numbers and hyphens only' })\n .required()\n .description('URL-friendly identifier used in form paths')\n\nexport const organisationSchema = Joi.string()\n .valid(...organisations)\n .required()\n .description('Defra organisation responsible for the form')\n\nexport const teamNameSchema = Joi.string()\n .max(100)\n .trim()\n .required()\n .description('Name of the team responsible for the form')\n\nexport const teamEmailSchema = Joi.string()\n .email({ tlds: { allow: ['uk'] } })\n .trim()\n .required()\n .description('Contact email for the team responsible for the form')\n\nexport const phoneSchema = Joi.string()\n .trim()\n .description('Phone number for form-related inquiries')\n\nexport const emailAddressSchema = Joi.string()\n .email()\n .trim()\n .required()\n .description('Email address for form-related inquiries')\n\nexport const emailResponseTimeSchema = Joi.string()\n .trim()\n .required()\n .description('Expected response time for email inquiries')\n\nexport const emailSchema = Joi.object<FormMetadataContactEmail>()\n .keys({\n address: emailAddressSchema,\n responseTime: emailResponseTimeSchema\n })\n .description('Email contact details including response expectations')\n\nexport const onlineUrlSchema = Joi.string()\n .uri({\n scheme: ['http', 'https']\n })\n .trim()\n .required()\n .description('URL for online contact method')\n\nexport const onlineTextSchema = Joi.string()\n .trim()\n .required()\n .description('Descriptive text for the online contact link')\n\nexport const onlineSchema = Joi.object<FormMetadataContactOnline>()\n .keys({\n url: onlineUrlSchema,\n text: onlineTextSchema\n })\n .description('Online contact details with URL and descriptive text')\n\nexport const contactSchema = Joi.object<FormMetadataContact>()\n .keys({\n phone: phoneSchema,\n email: emailSchema,\n online: onlineSchema\n })\n .description('Complete contact information for form-related inquiries')\n\nexport const submissionGuidanceSchema = Joi.string()\n .trim()\n .description('Guidance text shown to users when submitting the form')\n\nexport const privacyNoticeUrlSchema = Joi.string()\n .uri({\n scheme: ['http', 'https']\n })\n .trim()\n .description('URL to the privacy notice for this form')\n\nexport const notificationEmailAddressSchema = Joi.string()\n .email()\n .trim()\n .description('Email address to receive form submission notifications')\n\nexport const authoredAtSchema = Joi.date()\n .iso()\n .required()\n .description('ISO format timestamp of when an action occurred')\n\nexport const authorIdSchema = Joi.string()\n .trim()\n .required()\n .description('Unique identifier for the author')\n\nexport const authorDisplayNameSchema = Joi.string()\n .trim()\n .required()\n .description('Human-readable name of the author')\n\nexport const formMetadataInputKeys = {\n title: titleSchema,\n organisation: organisationSchema,\n teamName: teamNameSchema,\n teamEmail: teamEmailSchema,\n contact: contactSchema,\n submissionGuidance: submissionGuidanceSchema,\n privacyNoticeUrl: privacyNoticeUrlSchema,\n notificationEmail: notificationEmailAddressSchema\n}\n\n/**\n * Joi schema for `FormMetadataInput` interface\n * @see {@link FormMetadataInput}\n */\nexport const formMetadataInputSchema = Joi.object<FormMetadataInput>()\n .keys(formMetadataInputKeys)\n .required()\n .description('Input data for creating or updating form metadata')\n\n/**\n * Joi schema for `FormMetadataAuthor` interface\n * @see {@link FormMetadataAuthor}\n */\nexport const formMetadataAuthorSchema = Joi.object<FormMetadataAuthor>()\n .keys({\n id: authorIdSchema,\n displayName: authorDisplayNameSchema\n })\n .required()\n .description('Information about the author of a form or form change')\n\n/**\n * Joi schema for `FormMetadataState` interface\n * @see {@link FormMetadataState}\n */\nexport const formMetadataStateSchema = Joi.object<FormMetadataState>()\n .keys({\n createdAt: authoredAtSchema.description(\n 'When this version was first created'\n ),\n createdBy: formMetadataAuthorSchema.description('Who created this version'),\n updatedAt: authoredAtSchema.description(\n 'When this version was last updated'\n ),\n updatedBy: formMetadataAuthorSchema.description(\n 'Who last updated this version'\n )\n })\n .description('Metadata about a specific version state (draft or live)')\n\n/**\n * Joi schema for `FormMetadata` interface\n * @see {@link FormMetadata}\n */\nexport const formMetadataSchema = formMetadataInputSchema\n .append<FormMetadata>({\n id: idSchema,\n slug: slugSchema,\n draft: formMetadataStateSchema.description(\n 'Metadata for the draft version'\n ),\n live: formMetadataStateSchema.description(\n 'Metadata for the published version'\n ),\n createdAt: authoredAtSchema.description('When the form was first created'),\n createdBy: formMetadataAuthorSchema.description('Who created the form'),\n updatedAt: authoredAtSchema.description('When the form was last updated'),\n updatedBy: formMetadataAuthorSchema.description('Who last updated the form')\n })\n .description(\n 'Complete metadata for a form, including version information and authoring details'\n )\n"],"mappings":"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","ignoreList":[]}
|
1
|
+
{"version":3,"file":"index.js","names":["Joi","organisations","idSchema","string","hex","length","required","description","titleSchema","max","trim","slugSchema","pattern","name","organisationSchema","valid","teamNameSchema","teamEmailSchema","email","tlds","allow","phoneSchema","emailAddressSchema","emailResponseTimeSchema","emailSchema","object","keys","address","responseTime","onlineUrlSchema","uri","scheme","onlineTextSchema","onlineSchema","url","text","contactSchema","phone","online","submissionGuidanceSchema","privacyNoticeUrlSchema","notificationEmailAddressSchema","authoredAtSchema","date","iso","authorIdSchema","authorDisplayNameSchema","formMetadataInputKeys","title","organisation","teamName","teamEmail","contact","submissionGuidance","privacyNoticeUrl","notificationEmail","formMetadataInputSchema","formMetadataAuthorSchema","id","displayName","formMetadataStateSchema","createdAt","createdBy","updatedAt","updatedBy","formVersionMetadataSchema","versionNumber","number","integer","min","formMetadataSchema","append","slug","draft","live","versions","array","items","optional"],"sources":["../../../../src/form/form-metadata/index.ts"],"sourcesContent":["import Joi from 'joi'\n\nimport {\n type FormMetadata,\n type FormMetadataAuthor,\n type FormMetadataContact,\n type FormMetadataContactEmail,\n type FormMetadataContactOnline,\n type FormMetadataInput,\n type FormMetadataState,\n type FormVersionMetadata\n} from '~/src/form/form-metadata/types.js'\n\nexport const organisations = [\n 'Animal and Plant Health Agency – APHA',\n 'Centre for Environment, Fisheries and Aquaculture Science – Cefas',\n 'Defra',\n 'Environment Agency',\n 'Forestry Commission',\n 'Marine Management Organisation – MMO',\n 'Natural England',\n 'Rural Payments Agency – RPA',\n 'Veterinary Medicines Directorate – VMD'\n]\n\nexport const idSchema = Joi.string()\n .hex()\n .length(24)\n .required()\n .description(\n 'Unique identifier for the form, 24-character hexadecimal string'\n )\n\nexport const titleSchema = Joi.string()\n .max(250)\n .trim()\n .required()\n .description('Title of the form, displayed to users')\n\nexport const slugSchema = Joi.string()\n .pattern(/^[a-z0-9-]+$/, { name: 'letters, numbers and hyphens only' })\n .required()\n .description('URL-friendly identifier used in form paths')\n\nexport const organisationSchema = Joi.string()\n .valid(...organisations)\n .required()\n .description('Defra organisation responsible for the form')\n\nexport const teamNameSchema = Joi.string()\n .max(100)\n .trim()\n .required()\n .description('Name of the team responsible for the form')\n\nexport const teamEmailSchema = Joi.string()\n .email({ tlds: { allow: ['uk'] } })\n .trim()\n .required()\n .description('Contact email for the team responsible for the form')\n\nexport const phoneSchema = Joi.string()\n .trim()\n .description('Phone number for form-related inquiries')\n\nexport const emailAddressSchema = Joi.string()\n .email()\n .trim()\n .required()\n .description('Email address for form-related inquiries')\n\nexport const emailResponseTimeSchema = Joi.string()\n .trim()\n .required()\n .description('Expected response time for email inquiries')\n\nexport const emailSchema = Joi.object<FormMetadataContactEmail>()\n .keys({\n address: emailAddressSchema,\n responseTime: emailResponseTimeSchema\n })\n .description('Email contact details including response expectations')\n\nexport const onlineUrlSchema = Joi.string()\n .uri({\n scheme: ['http', 'https']\n })\n .trim()\n .required()\n .description('URL for online contact method')\n\nexport const onlineTextSchema = Joi.string()\n .trim()\n .required()\n .description('Descriptive text for the online contact link')\n\nexport const onlineSchema = Joi.object<FormMetadataContactOnline>()\n .keys({\n url: onlineUrlSchema,\n text: onlineTextSchema\n })\n .description('Online contact details with URL and descriptive text')\n\nexport const contactSchema = Joi.object<FormMetadataContact>()\n .keys({\n phone: phoneSchema,\n email: emailSchema,\n online: onlineSchema\n })\n .description('Complete contact information for form-related inquiries')\n\nexport const submissionGuidanceSchema = Joi.string()\n .trim()\n .description('Guidance text shown to users when submitting the form')\n\nexport const privacyNoticeUrlSchema = Joi.string()\n .uri({\n scheme: ['http', 'https']\n })\n .trim()\n .description('URL to the privacy notice for this form')\n\nexport const notificationEmailAddressSchema = Joi.string()\n .email()\n .trim()\n .description('Email address to receive form submission notifications')\n\nexport const authoredAtSchema = Joi.date()\n .iso()\n .required()\n .description('ISO format timestamp of when an action occurred')\n\nexport const authorIdSchema = Joi.string()\n .trim()\n .required()\n .description('Unique identifier for the author')\n\nexport const authorDisplayNameSchema = Joi.string()\n .trim()\n .required()\n .description('Human-readable name of the author')\n\nexport const formMetadataInputKeys = {\n title: titleSchema,\n organisation: organisationSchema,\n teamName: teamNameSchema,\n teamEmail: teamEmailSchema,\n contact: contactSchema,\n submissionGuidance: submissionGuidanceSchema,\n privacyNoticeUrl: privacyNoticeUrlSchema,\n notificationEmail: notificationEmailAddressSchema\n}\n\n/**\n * Joi schema for `FormMetadataInput` interface\n * @see {@link FormMetadataInput}\n */\nexport const formMetadataInputSchema = Joi.object<FormMetadataInput>()\n .keys(formMetadataInputKeys)\n .required()\n .description('Input data for creating or updating form metadata')\n\n/**\n * Joi schema for `FormMetadataAuthor` interface\n * @see {@link FormMetadataAuthor}\n */\nexport const formMetadataAuthorSchema = Joi.object<FormMetadataAuthor>()\n .keys({\n id: authorIdSchema,\n displayName: authorDisplayNameSchema\n })\n .required()\n .description('Information about the author of a form or form change')\n\n/**\n * Joi schema for `FormMetadataState` interface\n * @see {@link FormMetadataState}\n */\nexport const formMetadataStateSchema = Joi.object<FormMetadataState>()\n .keys({\n createdAt: authoredAtSchema.description(\n 'When this version was first created'\n ),\n createdBy: formMetadataAuthorSchema.description('Who created this version'),\n updatedAt: authoredAtSchema.description(\n 'When this version was last updated'\n ),\n updatedBy: formMetadataAuthorSchema.description(\n 'Who last updated this version'\n )\n })\n .description('Metadata about a specific version state (draft or live)')\n\n/**\n * Joi schema for `FormVersionMetadata` interface\n * @see {@link FormVersionMetadata}\n */\nexport const formVersionMetadataSchema = Joi.object<FormVersionMetadata>()\n .keys({\n versionNumber: Joi.number()\n .integer()\n .min(1)\n .required()\n .description('The version number'),\n createdAt: authoredAtSchema.description('When this version was created')\n })\n .description('Metadata for a specific version of the form')\n\n/**\n * Joi schema for `FormMetadata` interface\n * @see {@link FormMetadata}\n */\nexport const formMetadataSchema = formMetadataInputSchema\n .append<FormMetadata>({\n id: idSchema,\n slug: slugSchema,\n draft: formMetadataStateSchema.description(\n 'Metadata for the draft version'\n ),\n live: formMetadataStateSchema.description(\n 'Metadata for the published version'\n ),\n createdAt: authoredAtSchema.description('When the form was first created'),\n createdBy: formMetadataAuthorSchema.description('Who created the form'),\n updatedAt: authoredAtSchema.description('When the form was last updated'),\n updatedBy: formMetadataAuthorSchema.description(\n 'Who last updated the form'\n ),\n versions: Joi.array()\n .items(formVersionMetadataSchema)\n .optional()\n .description('Version history for the form')\n })\n .description(\n 'Complete metadata for a form, including version information and authoring details'\n )\n"],"mappings":"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","ignoreList":[]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/form/form-metadata/types.ts"],"sourcesContent":["import { formMetadataSchema } from '~/src/form/form-metadata/index.js'\n\n/**\n * Interface for author (createdBy and updatedBy)\n */\nexport interface FormMetadataAuthor {\n /**\n * The ID of the user\n */\n id: string\n\n /**\n * The display name of the user\n */\n displayName: string\n}\n\n/**\n * Interface for metadata state (draft & live)\n */\nexport interface FormMetadataState {\n /**\n * The date the form state was created\n */\n createdAt: Date\n\n /**\n * The author who created the state\n */\n createdBy: FormMetadataAuthor\n\n /**\n * The date the form state was last updated\n */\n updatedAt: Date\n\n /**\n * The author who last updated the state\n */\n updatedBy: FormMetadataAuthor\n}\n\n/**\n * Interface for email contact details\n */\nexport interface FormMetadataContactEmail {\n /**\n * The email address details for support\n */\n address: string\n\n /**\n * How long it takes to receive a support response\n */\n responseTime: string\n}\n\n/**\n * Interface for online contact details\n */\nexport interface FormMetadataContactOnline {\n /**\n * The url of the online contact link\n */\n url: string\n\n /**\n * The text of the online contact link\n */\n text: string\n}\n\n/**\n * Interface for contact details (phone, email and online)\n */\nexport interface FormMetadataContact {\n /**\n * The phone details for support\n */\n phone?: string\n\n /**\n * The email details for support\n */\n email?: FormMetadataContactEmail\n\n /**\n * The online details for support\n */\n online?: FormMetadataContactOnline\n}\n\n/**\n * Interface for `formMetadataSchema` Joi schema\n * @see {@link formMetadataSchema}\n */\nexport interface FormMetadata {\n /**\n * The id of the form\n */\n id: string\n\n /**\n * The human-readable slug id of the form\n */\n slug: string\n\n /**\n * The human-readable title of the form\n */\n title: string\n\n /**\n * The organisation this form belongs to\n */\n organisation: string\n\n /**\n * The name of the team who own this form\n */\n teamName: string\n\n /**\n * The email of the team who own this form\n */\n teamEmail: string\n /**\n * The contact details of the form\n */\n contact?: FormMetadataContact\n\n /**\n * The guidance text displayed on the form submitted page\n */\n submissionGuidance?: string\n\n /**\n * The url of the privacy notice\n */\n privacyNoticeUrl?: string\n\n /**\n * Email address where form responses are sent\n */\n notificationEmail?: string\n\n /**\n * The draft state of the form\n */\n draft?: FormMetadataState\n\n /**\n * The live state of the form\n */\n live?: FormMetadataState\n\n /**\n * The author who created the form\n */\n createdBy: FormMetadataState['createdBy']\n\n /**\n * The date the form was created\n */\n createdAt: FormMetadataState['createdAt']\n\n /**\n * The author who last updated the form\n */\n updatedBy: FormMetadataState['updatedBy']\n\n /**\n * The date the form was last updated\n */\n updatedAt: FormMetadataState['updatedAt']\n}\n\nexport type FormByIdInput = Pick<FormMetadata, 'id'>\nexport type FormByIDAndPageByIdInput = Pick<FormMetadata, 'id'> & {\n pageId: string\n}\nexport type FormByIDAndPageByIdAndComponentByIdInput = Pick<\n FormMetadata,\n 'id'\n> & {\n pageId: string\n componentId: string\n}\nexport type FormBySlugInput = Pick<FormMetadata, 'slug'>\nexport type FormMetadataDocument = Omit<FormMetadata, 'id'>\nexport type FormMetadataInput = Pick<\n FormMetadata,\n | 'title'\n | 'organisation'\n | 'teamName'\n | 'teamEmail'\n | 'contact'\n | 'submissionGuidance'\n | 'privacyNoticeUrl'\n | 'notificationEmail'\n>\n\nexport interface FormResponse {\n id: FormMetadata['id']\n slug: FormMetadata['slug']\n status: string\n}\n"],"mappings":"","ignoreList":[]}
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/form/form-metadata/types.ts"],"sourcesContent":["import { formMetadataSchema } from '~/src/form/form-metadata/index.js'\n\n/**\n * Interface for author (createdBy and updatedBy)\n */\nexport interface FormMetadataAuthor {\n /**\n * The ID of the user\n */\n id: string\n\n /**\n * The display name of the user\n */\n displayName: string\n}\n\n/**\n * Interface for metadata state (draft & live)\n */\nexport interface FormMetadataState {\n /**\n * The date the form state was created\n */\n createdAt: Date\n\n /**\n * The author who created the state\n */\n createdBy: FormMetadataAuthor\n\n /**\n * The date the form state was last updated\n */\n updatedAt: Date\n\n /**\n * The author who last updated the state\n */\n updatedBy: FormMetadataAuthor\n}\n\n/**\n * Interface for email contact details\n */\nexport interface FormMetadataContactEmail {\n /**\n * The email address details for support\n */\n address: string\n\n /**\n * How long it takes to receive a support response\n */\n responseTime: string\n}\n\n/**\n * Interface for online contact details\n */\nexport interface FormMetadataContactOnline {\n /**\n * The url of the online contact link\n */\n url: string\n\n /**\n * The text of the online contact link\n */\n text: string\n}\n\n/**\n * Interface for version metadata stored in form metadata\n */\nexport interface FormVersionMetadata {\n /**\n * The version number\n */\n versionNumber: number\n\n /**\n * When this version was created\n */\n createdAt: Date\n}\n\n/**\n * Interface for contact details (phone, email and online)\n */\nexport interface FormMetadataContact {\n /**\n * The phone details for support\n */\n phone?: string\n\n /**\n * The email details for support\n */\n email?: FormMetadataContactEmail\n\n /**\n * The online details for support\n */\n online?: FormMetadataContactOnline\n}\n\n/**\n * Interface for `formMetadataSchema` Joi schema\n * @see {@link formMetadataSchema}\n */\nexport interface FormMetadata {\n /**\n * The id of the form\n */\n id: string\n\n /**\n * The human-readable slug id of the form\n */\n slug: string\n\n /**\n * The human-readable title of the form\n */\n title: string\n\n /**\n * The organisation this form belongs to\n */\n organisation: string\n\n /**\n * The name of the team who own this form\n */\n teamName: string\n\n /**\n * The email of the team who own this form\n */\n teamEmail: string\n /**\n * The contact details of the form\n */\n contact?: FormMetadataContact\n\n /**\n * The guidance text displayed on the form submitted page\n */\n submissionGuidance?: string\n\n /**\n * The url of the privacy notice\n */\n privacyNoticeUrl?: string\n\n /**\n * Email address where form responses are sent\n */\n notificationEmail?: string\n\n /**\n * The draft state of the form\n */\n draft?: FormMetadataState\n\n /**\n * The live state of the form\n */\n live?: FormMetadataState\n\n /**\n * The author who created the form\n */\n createdBy: FormMetadataState['createdBy']\n\n /**\n * The date the form was created\n */\n createdAt: FormMetadataState['createdAt']\n\n /**\n * The author who last updated the form\n */\n updatedBy: FormMetadataState['updatedBy']\n\n /**\n * The date the form was last updated\n */\n updatedAt: FormMetadataState['updatedAt']\n\n /**\n * Version history for the form\n */\n versions?: FormVersionMetadata[]\n}\n\nexport type FormByIdInput = Pick<FormMetadata, 'id'>\nexport type FormByIDAndPageByIdInput = Pick<FormMetadata, 'id'> & {\n pageId: string\n}\nexport type FormByIDAndPageByIdAndComponentByIdInput = Pick<\n FormMetadata,\n 'id'\n> & {\n pageId: string\n componentId: string\n}\nexport type FormBySlugInput = Pick<FormMetadata, 'slug'>\nexport type FormMetadataDocument = Omit<FormMetadata, 'id'>\nexport type FormMetadataInput = Pick<\n FormMetadata,\n | 'title'\n | 'organisation'\n | 'teamName'\n | 'teamEmail'\n | 'contact'\n | 'submissionGuidance'\n | 'privacyNoticeUrl'\n | 'notificationEmail'\n>\n\nexport interface FormResponse {\n id: FormMetadata['id']\n slug: FormMetadata['slug']\n status: string\n}\n"],"mappings":"","ignoreList":[]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/form/form-definition/index.ts"],"names":[],"mappings":"AACA,OAAO,OAAkC,MAAM,KAAK,CAAA;AAIpD,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC9B,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAEL,KAAK,eAAe,EAWrB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAGL,KAAK,kBAAkB,EAIvB,KAAK,cAAc,EAGnB,KAAK,IAAI,EACT,KAAK,IAAI,EAET,KAAK,MAAM,EAIZ,MAAM,qCAAqC,CAAA;AA4N5C,eAAO,MAAM,qBAAqB,uCAoD9B,CAAA;AAoDJ,eAAO,MAAM,wBAAwB,0CAyBU,CAAA;AAE/C,eAAO,MAAM,eAAe,oCAmGZ,CAAA;AAEhB,eAAO,MAAM,iBAAiB,oCAciB,CAAA;AAE/C,eAAO,MAAM,wBAAwB,oCASsB,CAAA;AAE3D,eAAO,MAAM,yBAAyB,oCAMpC,CAAA;AAEF,eAAO,MAAM,sBAAsB,oCAUjC,CAAA;AAoDF,eAAO,MAAM,gBAAgB,8BASzB,CAAA;AAyCJ,eAAO,MAAM,0BAA0B,sEAWmB,CAAA;AAE1D;;;GAGG;AACH,eAAO,MAAM,UAAU,4BAmDnB,CAAA;AAEJ;;GAEG;AACH,eAAO,MAAM,YAAY,4BAuCiB,CAAA;AAE1C,eAAO,MAAM,mBAAmB,4BAgBkB,CAAA;AAwDlD,eAAO,MAAM,UAAU,4BA8CnB,CAAA;AAEJ;;GAEG;AACH,eAAO,MAAM,YAAY,4BAIiB,CAAA;
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/form/form-definition/index.ts"],"names":[],"mappings":"AACA,OAAO,OAAkC,MAAM,KAAK,CAAA;AAIpD,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC9B,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAEL,KAAK,eAAe,EAWrB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAGL,KAAK,kBAAkB,EAIvB,KAAK,cAAc,EAGnB,KAAK,IAAI,EACT,KAAK,IAAI,EAET,KAAK,MAAM,EAIZ,MAAM,qCAAqC,CAAA;AA4N5C,eAAO,MAAM,qBAAqB,uCAoD9B,CAAA;AAoDJ,eAAO,MAAM,wBAAwB,0CAyBU,CAAA;AAE/C,eAAO,MAAM,eAAe,oCAmGZ,CAAA;AAEhB,eAAO,MAAM,iBAAiB,oCAciB,CAAA;AAE/C,eAAO,MAAM,wBAAwB,oCASsB,CAAA;AAE3D,eAAO,MAAM,yBAAyB,oCAMpC,CAAA;AAEF,eAAO,MAAM,sBAAsB,oCAUjC,CAAA;AAoDF,eAAO,MAAM,gBAAgB,8BASzB,CAAA;AAyCJ,eAAO,MAAM,0BAA0B,sEAWmB,CAAA;AAE1D;;;GAGG;AACH,eAAO,MAAM,UAAU,4BAmDnB,CAAA;AAEJ;;GAEG;AACH,eAAO,MAAM,YAAY,4BAuCiB,CAAA;AAE1C,eAAO,MAAM,mBAAmB,4BAgBkB,CAAA;AAwDlD,eAAO,MAAM,UAAU,4BA8CnB,CAAA;AAEJ;;GAEG;AACH,eAAO,MAAM,YAAY,4BAIiB,CAAA;AAsD1C;;;GAGG;AACH,eAAO,MAAM,oBAAoB,sCA4E7B,CAAA;AAEJ,eAAO,MAAM,sBAAsB,sCA2CY,CAAA;AAI/C,eAAO,MAAM,MAAM,sCAAuB,CAAA"}
|
@@ -139,10 +139,6 @@ export interface ConditionWrapperV2 {
|
|
139
139
|
coordinator?: Coordinator;
|
140
140
|
items: ConditionGroupDataV2;
|
141
141
|
}
|
142
|
-
export interface FormVersionMetadata {
|
143
|
-
version: number;
|
144
|
-
createdAt: string;
|
145
|
-
}
|
146
142
|
/**
|
147
143
|
* Interface for `formDefinitionSchema` Joi schema
|
148
144
|
*/
|
@@ -165,6 +161,5 @@ export interface FormDefinition {
|
|
165
161
|
audience: 'human' | 'machine';
|
166
162
|
version: string;
|
167
163
|
};
|
168
|
-
versionMetadata?: FormVersionMetadata;
|
169
164
|
}
|
170
165
|
//# sourceMappingURL=types.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/form/form-definition/types.ts"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/form/form-definition/types.ts"],"names":[],"mappings":"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"}
|
@@ -54,7 +54,7 @@ export class PreviewComponent {
|
|
54
54
|
*/
|
55
55
|
protected _highlighted: boolean;
|
56
56
|
/**
|
57
|
-
* @type {string}
|
57
|
+
* @type {string | undefined}
|
58
58
|
* @private
|
59
59
|
*/
|
60
60
|
private _question;
|
@@ -96,13 +96,13 @@ export class PreviewComponent {
|
|
96
96
|
get renderInput(): QuestionBaseModel;
|
97
97
|
render(): void;
|
98
98
|
/**
|
99
|
-
* @param {string} value
|
99
|
+
* @param {string | undefined} value
|
100
100
|
*/
|
101
|
-
set question(value: string);
|
101
|
+
set question(value: string | undefined);
|
102
102
|
/**
|
103
|
-
* @type {string}
|
103
|
+
* @type {string | undefined}
|
104
104
|
*/
|
105
|
-
get question(): string;
|
105
|
+
get question(): string | undefined;
|
106
106
|
/**
|
107
107
|
* @param {boolean} value
|
108
108
|
*/
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../../../../src/form/form-editor/preview/preview.js"],"names":[],"mappings":"AAGA;;GAEG;AACH;IACE,oBAAmC;IA2CnC;;;OAGG;IAEH;;;OAGG;IACH,0BAHW,gBAAgB,oBAChB,gBAAgB,EA0B1B;IA3ED;;OAEG;IACH,KAFW,MAAM,GAAG,SAAS,CAEd;IACf;;;OAGG;IACH,eAFU,aAAa,CAEc;IACrC;;;;OAIG;IACH,6BAHU,MAAM,CAGM;IACtB;;;OAGG;IACH,sBAHW,MAAM,GAAC,IAAI,CAGL;IACjB;;;;OAIG;IACH,sBAHU,MAAM,CAGD;IACf;;;OAGG;IACH,6BAHU,gBAAgB,CAGT;IAEjB;;;OAGG;IACH,yBAHU,gBAAgB,CAGb;IACb;;;OAGG;IACH,wBAHU,OAAO,CAGG;IAkBlB;;;OAGG;IACH,kBAAyB;IACzB;;;OAGG;IACH,kBAAyB;IAS3B;;;;OAIG;IACH,gCAJW,MAAM,GACJ,MAAM,CAKlB;IAED,
|
1
|
+
{"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../../../../src/form/form-editor/preview/preview.js"],"names":[],"mappings":"AAGA;;GAEG;AACH;IACE,oBAAmC;IA2CnC;;;OAGG;IAEH;;;OAGG;IACH,0BAHW,gBAAgB,oBAChB,gBAAgB,EA0B1B;IA3ED;;OAEG;IACH,KAFW,MAAM,GAAG,SAAS,CAEd;IACf;;;OAGG;IACH,eAFU,aAAa,CAEc;IACrC;;;;OAIG;IACH,6BAHU,MAAM,CAGM;IACtB;;;OAGG;IACH,sBAHW,MAAM,GAAC,IAAI,CAGL;IACjB;;;;OAIG;IACH,sBAHU,MAAM,CAGD;IACf;;;OAGG;IACH,6BAHU,gBAAgB,CAGT;IAEjB;;;OAGG;IACH,yBAHU,gBAAgB,CAGb;IACb;;;OAGG;IACH,wBAHU,OAAO,CAGG;IAkBlB;;;OAGG;IACH,kBAAyB;IACzB;;;OAGG;IACH,kBAAyB;IAS3B;;;;OAIG;IACH,gCAJW,MAAM,GACJ,MAAM,CAKlB;IAED,wBAKC;IAED;;;OAGG;IACH,uBAFU,gBAAgB,CAOzB;IAED;;;OAGG;IACH,0BAFU,aAAa,CAStB;IAED;;OAEG;IACH,0BAFa,OAAO,CAAC,iBAAiB,CAAC,CAItC;IAED;;;;OAIG;IACH,0BAHa,iBAAiB,CAS7B;IAED;;OAEG;IACH,mBAFU,iBAAiB,CAO1B;IAED,eAEC;IASD;;OAEG;IACH,oBAFW,MAAM,GAAG,SAAS,EAK5B;IAbD;;OAEG;IACH,gBAFU,MAAM,GAAG,SAAS,CAI3B;IAcD;;OAEG;IACH,oBAFW,OAAO,EAKjB;IAVD,gBAKW,OAAO,CAHjB;IAiBD;;OAEG;IACH,qBAFW,MAAM,GAAG,IAAI,EAKvB;IAbD;;OAEG;IACH,iBAFU,MAAM,GAAG,IAAI,CAItB;IAiBD;;OAEG;IACH,cAFY,MAAM,GAAG,SAAS,EAI7B;IAZD;;OAEG;IACH,UAFW,MAAM,GAAG,SAAS,CAI5B;IASD;;OAEG;IACH,yBAEC;IAED;;OAEG;IACH,2BAEC;CACF;8BApO6B,2BAA2B;sCAuOkD,yCAAyC;sCAAzC,yCAAyC;sCAAzC,yCAAyC;mCAAzC,yCAAyC;uCAAzC,yCAAyC"}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import Joi from 'joi';
|
2
|
-
import { type FormMetadata, type FormMetadataAuthor, type FormMetadataContact, type FormMetadataContactEmail, type FormMetadataContactOnline, type FormMetadataInput, type FormMetadataState } from '../../form/form-metadata/types.js';
|
2
|
+
import { type FormMetadata, type FormMetadataAuthor, type FormMetadataContact, type FormMetadataContactEmail, type FormMetadataContactOnline, type FormMetadataInput, type FormMetadataState, type FormVersionMetadata } from '../../form/form-metadata/types.js';
|
3
3
|
export declare const organisations: string[];
|
4
4
|
export declare const idSchema: Joi.StringSchema<string>;
|
5
5
|
export declare const titleSchema: Joi.StringSchema<string>;
|
@@ -46,6 +46,11 @@ export declare const formMetadataAuthorSchema: Joi.ObjectSchema<FormMetadataAuth
|
|
46
46
|
* @see {@link FormMetadataState}
|
47
47
|
*/
|
48
48
|
export declare const formMetadataStateSchema: Joi.ObjectSchema<FormMetadataState>;
|
49
|
+
/**
|
50
|
+
* Joi schema for `FormVersionMetadata` interface
|
51
|
+
* @see {@link FormVersionMetadata}
|
52
|
+
*/
|
53
|
+
export declare const formVersionMetadataSchema: Joi.ObjectSchema<FormVersionMetadata>;
|
49
54
|
/**
|
50
55
|
* Joi schema for `FormMetadata` interface
|
51
56
|
* @see {@link FormMetadata}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/form/form-metadata/index.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/form/form-metadata/index.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACzB,MAAM,mCAAmC,CAAA;AAE1C,eAAO,MAAM,aAAa,UAUzB,CAAA;AAED,eAAO,MAAM,QAAQ,0BAMlB,CAAA;AAEH,eAAO,MAAM,WAAW,0BAI+B,CAAA;AAEvD,eAAO,MAAM,UAAU,0BAGqC,CAAA;AAE5D,eAAO,MAAM,kBAAkB,0BAG8B,CAAA;AAE7D,eAAO,MAAM,cAAc,0BAIgC,CAAA;AAE3D,eAAO,MAAM,eAAe,0BAIyC,CAAA;AAErE,eAAO,MAAM,WAAW,0BAEiC,CAAA;AAEzD,eAAO,MAAM,kBAAkB,0BAI2B,CAAA;AAE1D,eAAO,MAAM,uBAAuB,0BAGwB,CAAA;AAE5D,eAAO,MAAM,WAAW,4CAK+C,CAAA;AAEvE,eAAO,MAAM,eAAe,0BAMmB,CAAA;AAE/C,eAAO,MAAM,gBAAgB,0BAGiC,CAAA;AAE9D,eAAO,MAAM,YAAY,6CAK6C,CAAA;AAEtE,eAAO,MAAM,aAAa,uCAM+C,CAAA;AAEzE,eAAO,MAAM,wBAAwB,0BAEkC,CAAA;AAEvE,eAAO,MAAM,sBAAsB,0BAKsB,CAAA;AAEzD,eAAO,MAAM,8BAA8B,0BAG6B,CAAA;AAExE,eAAO,MAAM,gBAAgB,sBAGoC,CAAA;AAEjE,eAAO,MAAM,cAAc,0BAGuB,CAAA;AAElD,eAAO,MAAM,uBAAuB,0BAGe,CAAA;AAEnD,eAAO,MAAM,qBAAqB;;;;;;;;;CASjC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB,qCAG+B,CAAA;AAEnE;;;GAGG;AACH,eAAO,MAAM,wBAAwB,sCAMkC,CAAA;AAEvE;;;GAGG;AACH,eAAO,MAAM,uBAAuB,qCAaqC,CAAA;AAEzE;;;GAGG;AACH,eAAO,MAAM,yBAAyB,uCASuB,CAAA;AAE7D;;;GAGG;AACH,eAAO,MAAM,kBAAkB,gCAuB5B,CAAA"}
|
@@ -58,6 +58,19 @@ export interface FormMetadataContactOnline {
|
|
58
58
|
*/
|
59
59
|
text: string;
|
60
60
|
}
|
61
|
+
/**
|
62
|
+
* Interface for version metadata stored in form metadata
|
63
|
+
*/
|
64
|
+
export interface FormVersionMetadata {
|
65
|
+
/**
|
66
|
+
* The version number
|
67
|
+
*/
|
68
|
+
versionNumber: number;
|
69
|
+
/**
|
70
|
+
* When this version was created
|
71
|
+
*/
|
72
|
+
createdAt: Date;
|
73
|
+
}
|
61
74
|
/**
|
62
75
|
* Interface for contact details (phone, email and online)
|
63
76
|
*/
|
@@ -144,6 +157,10 @@ export interface FormMetadata {
|
|
144
157
|
* The date the form was last updated
|
145
158
|
*/
|
146
159
|
updatedAt: FormMetadataState['updatedAt'];
|
160
|
+
/**
|
161
|
+
* Version history for the form
|
162
|
+
*/
|
163
|
+
versions?: FormVersionMetadata[];
|
147
164
|
}
|
148
165
|
export type FormByIdInput = Pick<FormMetadata, 'id'>;
|
149
166
|
export type FormByIDAndPageByIdInput = Pick<FormMetadata, 'id'> & {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/form/form-metadata/types.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,EAAE,EAAE,MAAM,CAAA;IAEV;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,SAAS,EAAE,IAAI,CAAA;IAEf;;OAEG;IACH,SAAS,EAAE,kBAAkB,CAAA;IAE7B;;OAEG;IACH,SAAS,EAAE,IAAI,CAAA;IAEf;;OAEG;IACH,SAAS,EAAE,kBAAkB,CAAA;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IAEf;;OAEG;IACH,YAAY,EAAE,MAAM,CAAA;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC;;OAEG;IACH,GAAG,EAAE,MAAM,CAAA;IAEX;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,KAAK,CAAC,EAAE,wBAAwB,CAAA;IAEhC;;OAEG;IACH,MAAM,CAAC,EAAE,yBAAyB,CAAA;CACnC;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,EAAE,EAAE,MAAM,CAAA;IAEV;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IAEZ;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,YAAY,EAAE,MAAM,CAAA;IAEpB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAA;IAE7B;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAE3B;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAEzB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B;;OAEG;IACH,KAAK,CAAC,EAAE,iBAAiB,CAAA;IAEzB;;OAEG;IACH,IAAI,CAAC,EAAE,iBAAiB,CAAA;IAExB;;OAEG;IACH,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAA;IAEzC;;OAEG;IACH,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAA;IAEzC;;OAEG;IACH,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAA;IAEzC;;OAEG;IACH,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAA;
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/form/form-metadata/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1324,30 +1324,6 @@
|
|
1324
1324
|
],
|
1325
1325
|
"additionalProperties": false,
|
1326
1326
|
"title": "Output"
|
1327
|
-
},
|
1328
|
-
"versionMetadata": {
|
1329
|
-
"type": "object",
|
1330
|
-
"description": "Version metadata for the form definition",
|
1331
|
-
"properties": {
|
1332
|
-
"version": {
|
1333
|
-
"type": "integer",
|
1334
|
-
"description": "Version number of the form",
|
1335
|
-
"exclusiveMinimum": 0,
|
1336
|
-
"title": "Version"
|
1337
|
-
},
|
1338
|
-
"createdAt": {
|
1339
|
-
"type": "string",
|
1340
|
-
"description": "ISO date when this version was created",
|
1341
|
-
"format": "date-time",
|
1342
|
-
"title": "Created At"
|
1343
|
-
}
|
1344
|
-
},
|
1345
|
-
"required": [
|
1346
|
-
"version",
|
1347
|
-
"createdAt"
|
1348
|
-
],
|
1349
|
-
"additionalProperties": false,
|
1350
|
-
"title": "Version Metadata"
|
1351
1327
|
}
|
1352
1328
|
},
|
1353
1329
|
"required": [
|
@@ -163,30 +163,6 @@
|
|
163
163
|
"additionalProperties": false,
|
164
164
|
"title": "Output"
|
165
165
|
},
|
166
|
-
"versionMetadata": {
|
167
|
-
"type": "object",
|
168
|
-
"description": "Version metadata for the form definition",
|
169
|
-
"properties": {
|
170
|
-
"version": {
|
171
|
-
"type": "integer",
|
172
|
-
"description": "Version number of the form",
|
173
|
-
"exclusiveMinimum": 0,
|
174
|
-
"title": "Version"
|
175
|
-
},
|
176
|
-
"createdAt": {
|
177
|
-
"type": "string",
|
178
|
-
"description": "ISO date when this version was created",
|
179
|
-
"format": "date-time",
|
180
|
-
"title": "Created At"
|
181
|
-
}
|
182
|
-
},
|
183
|
-
"required": [
|
184
|
-
"version",
|
185
|
-
"createdAt"
|
186
|
-
],
|
187
|
-
"additionalProperties": false,
|
188
|
-
"title": "Version Metadata"
|
189
|
-
},
|
190
166
|
"schema": {
|
191
167
|
"description": "Form schema version to use (2)",
|
192
168
|
"const": 2,
|
@@ -318,6 +318,35 @@
|
|
318
318
|
],
|
319
319
|
"additionalProperties": false,
|
320
320
|
"title": "Updated By"
|
321
|
+
},
|
322
|
+
"versions": {
|
323
|
+
"type": "array",
|
324
|
+
"description": "Version history for the form",
|
325
|
+
"items": {
|
326
|
+
"type": "object",
|
327
|
+
"description": "Metadata for a specific version of the form",
|
328
|
+
"properties": {
|
329
|
+
"versionNumber": {
|
330
|
+
"type": "integer",
|
331
|
+
"description": "The version number",
|
332
|
+
"minimum": 1,
|
333
|
+
"title": "Version Number"
|
334
|
+
},
|
335
|
+
"createdAt": {
|
336
|
+
"type": "string",
|
337
|
+
"description": "When this version was created",
|
338
|
+
"format": "date-time",
|
339
|
+
"title": "Created At"
|
340
|
+
}
|
341
|
+
},
|
342
|
+
"required": [
|
343
|
+
"versionNumber",
|
344
|
+
"createdAt"
|
345
|
+
],
|
346
|
+
"additionalProperties": false,
|
347
|
+
"title": "Versions Item"
|
348
|
+
},
|
349
|
+
"title": "Versions"
|
321
350
|
}
|
322
351
|
},
|
323
352
|
"required": [
|
@@ -934,20 +934,6 @@ const outputSchema = Joi.object<FormDefinition['output']>()
|
|
934
934
|
.description('Version identifier for the output format')
|
935
935
|
})
|
936
936
|
|
937
|
-
const versionMetadataSchema = Joi.object<FormDefinition['versionMetadata']>()
|
938
|
-
.description('Version metadata for the form definition')
|
939
|
-
.keys({
|
940
|
-
version: Joi.number()
|
941
|
-
.integer()
|
942
|
-
.positive()
|
943
|
-
.required()
|
944
|
-
.description('Version number of the form'),
|
945
|
-
createdAt: Joi.string()
|
946
|
-
.isoDate()
|
947
|
-
.required()
|
948
|
-
.description('ISO date when this version was created')
|
949
|
-
})
|
950
|
-
|
951
937
|
/**
|
952
938
|
* Joi schema for `FormDefinition` interface
|
953
939
|
* @see {@link FormDefinition}
|
@@ -1027,10 +1013,7 @@ export const formDefinitionSchema = Joi.object<FormDefinition>()
|
|
1027
1013
|
.description('Email address where form submissions are sent'),
|
1028
1014
|
output: outputSchema
|
1029
1015
|
.optional()
|
1030
|
-
.description('Configuration for submission output format')
|
1031
|
-
versionMetadata: versionMetadataSchema
|
1032
|
-
.optional()
|
1033
|
-
.description('Version metadata for the form definition')
|
1016
|
+
.description('Configuration for submission output format')
|
1034
1017
|
})
|
1035
1018
|
|
1036
1019
|
export const formDefinitionV2Schema = formDefinitionSchema
|
@@ -174,11 +174,6 @@ export interface ConditionWrapperV2 {
|
|
174
174
|
items: ConditionGroupDataV2
|
175
175
|
}
|
176
176
|
|
177
|
-
export interface FormVersionMetadata {
|
178
|
-
version: number
|
179
|
-
createdAt: string
|
180
|
-
}
|
181
|
-
|
182
177
|
/**
|
183
178
|
* Interface for `formDefinitionSchema` Joi schema
|
184
179
|
*/
|
@@ -201,5 +196,4 @@ export interface FormDefinition {
|
|
201
196
|
audience: 'human' | 'machine'
|
202
197
|
version: string
|
203
198
|
}
|
204
|
-
versionMetadata?: FormVersionMetadata
|
205
199
|
}
|
@@ -90,7 +90,7 @@ export class PreviewPageController extends PreviewPageControllerBase {
|
|
90
90
|
return false
|
91
91
|
}
|
92
92
|
// |_ one component and title not highlighted
|
93
|
-
if (this._title.trim() === this._components[0]?.question
|
93
|
+
if (this._title.trim() === this._components[0]?.question?.trim()) {
|
94
94
|
return true
|
95
95
|
}
|
96
96
|
// titles not the same
|
@@ -140,7 +140,7 @@ export class PreviewPageController extends PreviewPageControllerBase {
|
|
140
140
|
get titleAndFirstTitleSame() {
|
141
141
|
return (
|
142
142
|
this._components.length > 0 &&
|
143
|
-
this._title.trim() === this._components[0]?.question
|
143
|
+
this._title.trim() === this._components[0]?.question?.trim() &&
|
144
144
|
this.components.length === 1 &&
|
145
145
|
this._highlighted !== 'title'
|
146
146
|
)
|
@@ -66,7 +66,7 @@ export class PreviewComponent {
|
|
66
66
|
*/
|
67
67
|
this._htmlElements = htmlElements
|
68
68
|
/**
|
69
|
-
* @type {string}
|
69
|
+
* @type {string | undefined}
|
70
70
|
* @private
|
71
71
|
*/
|
72
72
|
this._question = question
|
@@ -94,7 +94,9 @@ export class PreviewComponent {
|
|
94
94
|
|
95
95
|
get titleText() {
|
96
96
|
const optionalText = this._optional ? ' (optional)' : ''
|
97
|
-
|
97
|
+
const questionText =
|
98
|
+
this._question === '' || !this._question ? 'Question' : this._question
|
99
|
+
return questionText + optionalText
|
98
100
|
}
|
99
101
|
|
100
102
|
/**
|
@@ -156,14 +158,14 @@ export class PreviewComponent {
|
|
156
158
|
}
|
157
159
|
|
158
160
|
/**
|
159
|
-
* @type {string}
|
161
|
+
* @type {string | undefined}
|
160
162
|
*/
|
161
163
|
get question() {
|
162
164
|
return this._question
|
163
165
|
}
|
164
166
|
|
165
167
|
/**
|
166
|
-
* @param {string} value
|
168
|
+
* @param {string | undefined} value
|
167
169
|
*/
|
168
170
|
set question(value) {
|
169
171
|
this._question = value
|
@@ -7,7 +7,8 @@ import {
|
|
7
7
|
type FormMetadataContactEmail,
|
8
8
|
type FormMetadataContactOnline,
|
9
9
|
type FormMetadataInput,
|
10
|
-
type FormMetadataState
|
10
|
+
type FormMetadataState,
|
11
|
+
type FormVersionMetadata
|
11
12
|
} from '~/src/form/form-metadata/types.js'
|
12
13
|
|
13
14
|
export const organisations = [
|
@@ -190,6 +191,21 @@ export const formMetadataStateSchema = Joi.object<FormMetadataState>()
|
|
190
191
|
})
|
191
192
|
.description('Metadata about a specific version state (draft or live)')
|
192
193
|
|
194
|
+
/**
|
195
|
+
* Joi schema for `FormVersionMetadata` interface
|
196
|
+
* @see {@link FormVersionMetadata}
|
197
|
+
*/
|
198
|
+
export const formVersionMetadataSchema = Joi.object<FormVersionMetadata>()
|
199
|
+
.keys({
|
200
|
+
versionNumber: Joi.number()
|
201
|
+
.integer()
|
202
|
+
.min(1)
|
203
|
+
.required()
|
204
|
+
.description('The version number'),
|
205
|
+
createdAt: authoredAtSchema.description('When this version was created')
|
206
|
+
})
|
207
|
+
.description('Metadata for a specific version of the form')
|
208
|
+
|
193
209
|
/**
|
194
210
|
* Joi schema for `FormMetadata` interface
|
195
211
|
* @see {@link FormMetadata}
|
@@ -207,7 +223,13 @@ export const formMetadataSchema = formMetadataInputSchema
|
|
207
223
|
createdAt: authoredAtSchema.description('When the form was first created'),
|
208
224
|
createdBy: formMetadataAuthorSchema.description('Who created the form'),
|
209
225
|
updatedAt: authoredAtSchema.description('When the form was last updated'),
|
210
|
-
updatedBy: formMetadataAuthorSchema.description(
|
226
|
+
updatedBy: formMetadataAuthorSchema.description(
|
227
|
+
'Who last updated the form'
|
228
|
+
),
|
229
|
+
versions: Joi.array()
|
230
|
+
.items(formVersionMetadataSchema)
|
231
|
+
.optional()
|
232
|
+
.description('Version history for the form')
|
211
233
|
})
|
212
234
|
.description(
|
213
235
|
'Complete metadata for a form, including version information and authoring details'
|
@@ -70,6 +70,21 @@ export interface FormMetadataContactOnline {
|
|
70
70
|
text: string
|
71
71
|
}
|
72
72
|
|
73
|
+
/**
|
74
|
+
* Interface for version metadata stored in form metadata
|
75
|
+
*/
|
76
|
+
export interface FormVersionMetadata {
|
77
|
+
/**
|
78
|
+
* The version number
|
79
|
+
*/
|
80
|
+
versionNumber: number
|
81
|
+
|
82
|
+
/**
|
83
|
+
* When this version was created
|
84
|
+
*/
|
85
|
+
createdAt: Date
|
86
|
+
}
|
87
|
+
|
73
88
|
/**
|
74
89
|
* Interface for contact details (phone, email and online)
|
75
90
|
*/
|
@@ -173,6 +188,11 @@ export interface FormMetadata {
|
|
173
188
|
* The date the form was last updated
|
174
189
|
*/
|
175
190
|
updatedAt: FormMetadataState['updatedAt']
|
191
|
+
|
192
|
+
/**
|
193
|
+
* Version history for the form
|
194
|
+
*/
|
195
|
+
versions?: FormVersionMetadata[]
|
176
196
|
}
|
177
197
|
|
178
198
|
export type FormByIdInput = Pick<FormMetadata, 'id'>
|