@defra/forms-model 3.0.404 → 3.0.405

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.
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../src/common/types.ts"],"sourcesContent":["import {\n type PaginationOptions,\n type PaginationResult\n} from '~/src/common/pagination/types.js'\nimport { type SearchOptions } from '~/src/common/search/types.js'\nimport { type SortingOptions } from '~/src/common/sorting/types.js'\n\n/**\n * Options for querying results, including pagination, sorting, and searching\n */\nexport type QueryOptions = PaginationOptions & SortingOptions & SearchOptions\n\n/**\n * Available form status values\n */\nexport type FormStatus = 'draft' | 'live'\n\n/**\n * Available filter options for the current result set\n */\nexport interface FilterOptions {\n /**\n * List of unique authors in the response\n */\n authors: string[]\n\n /**\n * List of organizations that have forms\n */\n organisations: string[]\n\n /**\n * Status values present in the results\n */\n status?: FormStatus[]\n}\n\n/**\n * Metadata containing the optional pagination, sorting, and searching information\n */\nexport interface Meta {\n /**\n * The pagination details\n */\n pagination?: PaginationResult\n\n /**\n * The sorting details\n */\n sorting?: SortingOptions\n\n /**\n * The search details\n */\n search?: SearchOptions\n\n /**\n * Available filter options\n */\n filters?: FilterOptions\n}\n\n/**\n * Standard response wrapper for query results with metadata\n */\nexport interface QueryResult<Model> {\n /**\n * The array of data items\n */\n data: Model[]\n\n /**\n * The metadata about the result\n */\n meta: Meta\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../src/common/types.ts"],"sourcesContent":["import {\n type PaginationOptions,\n type PaginationResult\n} from '~/src/common/pagination/types.js'\nimport { type SearchOptions } from '~/src/common/search/types.js'\nimport { type SortingOptions } from '~/src/common/sorting/types.js'\n\n/**\n * Options for querying results, including pagination, sorting, and searching\n */\nexport type QueryOptions = PaginationOptions & SortingOptions & SearchOptions\n\n/**\n * Available form status values\n */\nexport type FormStatus = 'draft' | 'live'\n\n/**\n * Available filter options for the current result set\n */\nexport interface FilterOptions {\n /**\n * List of unique authors in the response\n */\n authors: string[]\n\n /**\n * List of organizations that have forms\n */\n organisations: string[]\n\n /**\n * Status values present in the results\n */\n status?: FormStatus[]\n}\n\n/**\n * Metadata containing the optional pagination, sorting, and searching information\n */\nexport interface Meta {\n /**\n * The pagination details\n */\n pagination?: PaginationResult\n\n /**\n * The sorting details\n */\n sorting?: SortingOptions\n\n /**\n * The search details\n */\n search?: SearchOptions\n\n /**\n * Available filter options\n */\n filters?: FilterOptions\n}\n\n/**\n * Standard response wrapper for query results with metadata\n */\nexport interface QueryResult<Model> {\n /**\n * The array of data items\n */\n data: Model[]\n\n /**\n * The metadata about the result\n */\n meta: Meta\n}\n\n/**\n * Type for the list items within a Radio or Checkbox nunjucks definition\n */\nexport interface CheckboxOrRadioItem {\n /**\n * The text to be displayed\n */\n text?: string\n\n /**\n * If text is set, this is not required. HTML to use within each radio item label\n */\n html?: string\n\n /**\n * Specific ID attribute for the checkbox/radio item\n */\n id?: string\n\n /**\n * Name for the checkbox/radio item\n */\n name?: string\n\n /**\n * Required. Value for the radio input\n */\n value: string\n\n /**\n * Subset of options for the label\n */\n label?: string\n\n /**\n * Can be used to add a hint to each item\n */\n hint?: string\n\n /**\n * Divider text to separate checkbox/radio items, for example the text \"or\"\n */\n divider?: string\n\n /**\n * Whether the checkbox/radio should be checked when the page loads\n */\n checked?: boolean\n\n /**\n * Provide additional content to reveal when the checkbox/radio is checked\n */\n conditional?: object\n\n /**\n * The behaviour - if set to \"exclusive\" implements a 'None of thse' type behaviour via Javascript when checkboxes are clicked\n */\n behaviour?: string\n\n /**\n * If true, checkbox/radio option will be disabled\n */\n disabled?: boolean\n\n /**\n * HTML attributes (for example data attributes) to add to the checkbox input tag\n */\n attributes?: object\n}\n"],"mappings":"","ignoreList":[]}
@@ -122,7 +122,7 @@ export const pageSchema = Joi.object().keys({
122
122
  otherwise: Joi.any().strip()
123
123
  }),
124
124
  condition: Joi.string().allow('').optional(),
125
- next: Joi.array().items(nextSchema),
125
+ next: Joi.array().items(nextSchema).default([]),
126
126
  events: eventsSchema.optional(),
127
127
  view: Joi.string().optional()
128
128
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["Joi","ComponentType","sectionsSchema","object","keys","name","string","required","title","hideTitle","boolean","optional","default","conditionFieldSchema","type","display","conditionValueSchema","value","relativeDateValueSchema","period","unit","direction","conditionRefSchema","conditionName","conditionDisplayName","coordinator","conditionSchema","field","operator","alternatives","try","conditionGroupSchema","conditions","array","items","link","id","conditionsModelSchema","conditionWrapperSchema","displayName","componentSchema","uuid","shortDescription","when","is","valid","Details","Html","InsetText","then","otherwise","allow","hint","options","rows","number","empty","maxWords","maxDaysInPast","maxDaysInFuture","customValidationMessage","customValidationMessages","unknown","schema","min","max","length","list","nextSchema","path","condition","redirect","repeatOptions","repeatSchema","pageRepeatSchema","eventSchema","method","url","uri","scheme","eventsSchema","onLoad","onSave","pageSchema","disallow","section","controller","components","unique","repeat","any","strip","next","events","view","baseListItemSchema","text","description","conditional","stringListItemSchema","append","numberListItemSchema","listSchema","feedbackSchema","feedbackForm","emailAddress","email","tlds","phaseBannerSchema","phase","outputSchema","audience","version","formDefinitionSchema","engine","feedback","startPage","pages","ignoreUndefined","sections","lists","metadata","a","declaration","skipSummary","phaseBanner","outputEmail","trim","output","Schema"],"sources":["../../../../src/form/form-definition/index.ts"],"sourcesContent":["import Joi, { type LanguageMessages } from 'joi'\n\nimport { ComponentType } from '~/src/components/enums.js'\nimport { type ComponentDef } from '~/src/components/types.js'\nimport {\n type ConditionData,\n type ConditionFieldData,\n type ConditionGroupData,\n type ConditionRefData,\n type ConditionValueData,\n type ConditionsModelData,\n type RelativeDateValueData\n} from '~/src/conditions/types.js'\nimport {\n type ConditionWrapper,\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'\n\nconst sectionsSchema = Joi.object<Section>().keys({\n name: Joi.string().required(),\n title: Joi.string().required(),\n hideTitle: Joi.boolean().optional().default(false)\n})\n\nconst conditionFieldSchema = Joi.object<ConditionFieldData>().keys({\n name: Joi.string().required(),\n type: Joi.string().required(),\n display: Joi.string().required()\n})\n\nconst conditionValueSchema = Joi.object<ConditionValueData>().keys({\n type: Joi.string().required(),\n value: Joi.string().required(),\n display: Joi.string().required()\n})\n\nconst relativeDateValueSchema = Joi.object<RelativeDateValueData>().keys({\n type: Joi.string().required(),\n period: Joi.string().required(),\n unit: Joi.string().required(),\n direction: Joi.string().required()\n})\n\nconst conditionRefSchema = Joi.object<ConditionRefData>().keys({\n conditionName: Joi.string().required(),\n conditionDisplayName: Joi.string().required(),\n coordinator: Joi.string().optional()\n})\n\nconst conditionSchema = Joi.object<ConditionData>().keys({\n field: conditionFieldSchema,\n operator: Joi.string().required(),\n value: Joi.alternatives().try(conditionValueSchema, relativeDateValueSchema),\n coordinator: Joi.string().optional()\n})\n\nconst conditionGroupSchema = Joi.object<ConditionGroupData>()\n .keys({\n conditions: Joi.array().items(\n Joi.alternatives().try(\n conditionSchema,\n conditionRefSchema,\n Joi.link('#conditionGroupSchema')\n )\n )\n })\n .id('conditionGroupSchema')\n\nconst conditionsModelSchema = Joi.object<ConditionsModelData>().keys({\n name: Joi.string().required(),\n conditions: Joi.array().items(\n Joi.alternatives().try(\n conditionSchema,\n conditionRefSchema,\n conditionGroupSchema\n )\n )\n})\n\nconst conditionWrapperSchema = Joi.object<ConditionWrapper>().keys({\n name: Joi.string().required(),\n displayName: Joi.string(),\n value: conditionsModelSchema.required()\n})\n\nexport const componentSchema = Joi.object<ComponentDef>()\n .keys({\n id: Joi.string().uuid().optional(),\n type: Joi.string<ComponentType>().required(),\n shortDescription: Joi.string().optional(),\n name: Joi.when('type', {\n is: Joi.string().valid(\n ComponentType.Details,\n ComponentType.Html,\n ComponentType.InsetText\n ),\n then: Joi.string().optional(),\n otherwise: Joi.string()\n }),\n title: Joi.when('type', {\n is: Joi.string().valid(\n ComponentType.Details,\n ComponentType.Html,\n ComponentType.InsetText\n ),\n then: Joi.string().optional(),\n otherwise: Joi.string().allow('')\n }),\n hint: Joi.string().allow('').optional(),\n options: Joi.object({\n rows: Joi.number().empty(''),\n maxWords: Joi.number().empty(''),\n maxDaysInPast: Joi.number().empty(''),\n maxDaysInFuture: Joi.number().empty(''),\n customValidationMessage: Joi.string().allow(''),\n customValidationMessages: Joi.object<LanguageMessages>()\n .unknown(true)\n .optional()\n })\n .default({})\n .unknown(true),\n schema: Joi.object({\n min: Joi.number().empty(''),\n max: Joi.number().empty(''),\n length: Joi.number().empty('')\n })\n .unknown(true)\n .default({}),\n list: Joi.string().optional()\n })\n .unknown(true)\n\nconst nextSchema = Joi.object<Link>().keys({\n path: Joi.string().required(),\n condition: Joi.string().allow('').optional(),\n redirect: Joi.string().optional()\n})\n\nconst repeatOptions = Joi.object<RepeatOptions>().keys({\n name: Joi.string().required(),\n title: Joi.string().required()\n})\n\nconst repeatSchema = Joi.object<RepeatSchema>().keys({\n min: Joi.number().empty('').required(),\n max: Joi.number().empty('').required()\n})\n\nconst pageRepeatSchema = Joi.object<Repeat>().keys({\n options: repeatOptions.required(),\n schema: repeatSchema.required()\n})\n\nconst eventSchema = Joi.object<Event>().keys({\n type: Joi.string().allow('http').required(),\n options: Joi.object<EventOptions>().keys({\n method: Joi.string().allow('POST').required(),\n url: Joi.string()\n .uri({ scheme: ['http', 'https'] })\n .required()\n })\n})\n\nconst eventsSchema = Joi.object<Events>().keys({\n onLoad: eventSchema.optional(),\n onSave: eventSchema.optional()\n})\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>().keys({\n id: Joi.string().uuid().optional(),\n path: Joi.string().required().disallow('/status'),\n title: Joi.string().required(),\n section: Joi.string(),\n controller: Joi.string().optional(),\n components: Joi.array<ComponentDef>().items(componentSchema).unique('name'),\n repeat: Joi.when('controller', {\n is: Joi.string().valid('RepeatPageController').required(),\n then: pageRepeatSchema.required(),\n otherwise: Joi.any().strip()\n }),\n condition: Joi.string().allow('').optional(),\n next: Joi.array<Link>().items(nextSchema),\n events: eventsSchema.optional(),\n view: Joi.string().optional()\n})\n\nconst baseListItemSchema = Joi.object<Item>().keys({\n text: Joi.string().allow(''),\n description: Joi.string().allow('').optional(),\n conditional: Joi.object<Item['conditional']>()\n .keys({\n components: Joi.array<ComponentDef>()\n .required()\n .items(componentSchema.unknown(true))\n .unique('name')\n })\n .optional(),\n condition: Joi.string().allow('').optional()\n})\n\nconst stringListItemSchema = baseListItemSchema.append({\n value: Joi.string().required()\n})\n\nconst numberListItemSchema = baseListItemSchema.append({\n value: Joi.number().required()\n})\n\nconst listSchema = Joi.object<List>().keys({\n name: Joi.string().required(),\n title: Joi.string().required(),\n type: Joi.string().required().valid('string', 'number'),\n items: Joi.when('type', {\n is: 'string',\n then: Joi.array()\n .items(stringListItemSchema)\n .unique('text')\n .unique('value'),\n otherwise: Joi.array()\n .items(numberListItemSchema)\n .unique('text')\n .unique('value')\n })\n})\n\nconst feedbackSchema = Joi.object<FormDefinition['feedback']>().keys({\n feedbackForm: Joi.boolean().default(false),\n url: Joi.when('feedbackForm', {\n is: Joi.boolean().valid(false),\n then: Joi.string().optional().allow('')\n }),\n emailAddress: Joi.string()\n .email({\n tlds: {\n allow: false\n }\n })\n .optional()\n})\n\nconst phaseBannerSchema = Joi.object<PhaseBanner>().keys({\n phase: Joi.string().valid('alpha', 'beta')\n})\n\nconst outputSchema = Joi.object<FormDefinition['output']>().keys({\n audience: Joi.string().valid('human', 'machine').required(),\n version: Joi.string().required()\n})\n\n/**\n * Joi schema for `FormDefinition` interface\n * @see {@link FormDefinition}\n */\nexport const formDefinitionSchema = Joi.object<FormDefinition>()\n .required()\n .keys({\n engine: Joi.string().allow('V1', 'V2').default('V1'),\n name: Joi.string().allow('').optional(),\n feedback: feedbackSchema.optional(),\n startPage: Joi.string().optional(),\n pages: Joi.array<Page>()\n .required()\n .items(pageSchema)\n .unique('path')\n .unique('id', { ignoreUndefined: true }),\n sections: Joi.array<Section>()\n .items(sectionsSchema)\n .unique('name')\n .unique('title')\n .required(),\n conditions: Joi.array<ConditionWrapper>()\n .items(conditionWrapperSchema)\n .unique('name')\n .unique('displayName'),\n lists: Joi.array<List>().items(listSchema).unique('name').unique('title'),\n metadata: Joi.object({ a: Joi.any() }).unknown().optional(),\n declaration: Joi.string().allow('').optional(),\n skipSummary: Joi.any().strip(),\n phaseBanner: phaseBannerSchema.optional(),\n outputEmail: Joi.string()\n .email({ tlds: { allow: ['uk'] } })\n .trim()\n .optional(),\n output: outputSchema.optional()\n })\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":["Joi","ComponentType","sectionsSchema","object","keys","name","string","required","title","hideTitle","boolean","optional","default","conditionFieldSchema","type","display","conditionValueSchema","value","relativeDateValueSchema","period","unit","direction","conditionRefSchema","conditionName","conditionDisplayName","coordinator","conditionSchema","field","operator","alternatives","try","conditionGroupSchema","conditions","array","items","link","id","conditionsModelSchema","conditionWrapperSchema","displayName","componentSchema","uuid","shortDescription","when","is","valid","Details","Html","InsetText","then","otherwise","allow","hint","options","rows","number","empty","maxWords","maxDaysInPast","maxDaysInFuture","customValidationMessage","customValidationMessages","unknown","schema","min","max","length","list","nextSchema","path","condition","redirect","repeatOptions","repeatSchema","pageRepeatSchema","eventSchema","method","url","uri","scheme","eventsSchema","onLoad","onSave","pageSchema","disallow","section","controller","components","unique","repeat","any","strip","next","events","view","baseListItemSchema","text","description","conditional","stringListItemSchema","append","numberListItemSchema","listSchema","feedbackSchema","feedbackForm","emailAddress","email","tlds","phaseBannerSchema","phase","outputSchema","audience","version","formDefinitionSchema","engine","feedback","startPage","pages","ignoreUndefined","sections","lists","metadata","a","declaration","skipSummary","phaseBanner","outputEmail","trim","output","Schema"],"sources":["../../../../src/form/form-definition/index.ts"],"sourcesContent":["import Joi, { type LanguageMessages } from 'joi'\n\nimport { ComponentType } from '~/src/components/enums.js'\nimport { type ComponentDef } from '~/src/components/types.js'\nimport {\n type ConditionData,\n type ConditionFieldData,\n type ConditionGroupData,\n type ConditionRefData,\n type ConditionValueData,\n type ConditionsModelData,\n type RelativeDateValueData\n} from '~/src/conditions/types.js'\nimport {\n type ConditionWrapper,\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'\n\nconst sectionsSchema = Joi.object<Section>().keys({\n name: Joi.string().required(),\n title: Joi.string().required(),\n hideTitle: Joi.boolean().optional().default(false)\n})\n\nconst conditionFieldSchema = Joi.object<ConditionFieldData>().keys({\n name: Joi.string().required(),\n type: Joi.string().required(),\n display: Joi.string().required()\n})\n\nconst conditionValueSchema = Joi.object<ConditionValueData>().keys({\n type: Joi.string().required(),\n value: Joi.string().required(),\n display: Joi.string().required()\n})\n\nconst relativeDateValueSchema = Joi.object<RelativeDateValueData>().keys({\n type: Joi.string().required(),\n period: Joi.string().required(),\n unit: Joi.string().required(),\n direction: Joi.string().required()\n})\n\nconst conditionRefSchema = Joi.object<ConditionRefData>().keys({\n conditionName: Joi.string().required(),\n conditionDisplayName: Joi.string().required(),\n coordinator: Joi.string().optional()\n})\n\nconst conditionSchema = Joi.object<ConditionData>().keys({\n field: conditionFieldSchema,\n operator: Joi.string().required(),\n value: Joi.alternatives().try(conditionValueSchema, relativeDateValueSchema),\n coordinator: Joi.string().optional()\n})\n\nconst conditionGroupSchema = Joi.object<ConditionGroupData>()\n .keys({\n conditions: Joi.array().items(\n Joi.alternatives().try(\n conditionSchema,\n conditionRefSchema,\n Joi.link('#conditionGroupSchema')\n )\n )\n })\n .id('conditionGroupSchema')\n\nconst conditionsModelSchema = Joi.object<ConditionsModelData>().keys({\n name: Joi.string().required(),\n conditions: Joi.array().items(\n Joi.alternatives().try(\n conditionSchema,\n conditionRefSchema,\n conditionGroupSchema\n )\n )\n})\n\nconst conditionWrapperSchema = Joi.object<ConditionWrapper>().keys({\n name: Joi.string().required(),\n displayName: Joi.string(),\n value: conditionsModelSchema.required()\n})\n\nexport const componentSchema = Joi.object<ComponentDef>()\n .keys({\n id: Joi.string().uuid().optional(),\n type: Joi.string<ComponentType>().required(),\n shortDescription: Joi.string().optional(),\n name: Joi.when('type', {\n is: Joi.string().valid(\n ComponentType.Details,\n ComponentType.Html,\n ComponentType.InsetText\n ),\n then: Joi.string().optional(),\n otherwise: Joi.string()\n }),\n title: Joi.when('type', {\n is: Joi.string().valid(\n ComponentType.Details,\n ComponentType.Html,\n ComponentType.InsetText\n ),\n then: Joi.string().optional(),\n otherwise: Joi.string().allow('')\n }),\n hint: Joi.string().allow('').optional(),\n options: Joi.object({\n rows: Joi.number().empty(''),\n maxWords: Joi.number().empty(''),\n maxDaysInPast: Joi.number().empty(''),\n maxDaysInFuture: Joi.number().empty(''),\n customValidationMessage: Joi.string().allow(''),\n customValidationMessages: Joi.object<LanguageMessages>()\n .unknown(true)\n .optional()\n })\n .default({})\n .unknown(true),\n schema: Joi.object({\n min: Joi.number().empty(''),\n max: Joi.number().empty(''),\n length: Joi.number().empty('')\n })\n .unknown(true)\n .default({}),\n list: Joi.string().optional()\n })\n .unknown(true)\n\nconst nextSchema = Joi.object<Link>().keys({\n path: Joi.string().required(),\n condition: Joi.string().allow('').optional(),\n redirect: Joi.string().optional()\n})\n\nconst repeatOptions = Joi.object<RepeatOptions>().keys({\n name: Joi.string().required(),\n title: Joi.string().required()\n})\n\nconst repeatSchema = Joi.object<RepeatSchema>().keys({\n min: Joi.number().empty('').required(),\n max: Joi.number().empty('').required()\n})\n\nconst pageRepeatSchema = Joi.object<Repeat>().keys({\n options: repeatOptions.required(),\n schema: repeatSchema.required()\n})\n\nconst eventSchema = Joi.object<Event>().keys({\n type: Joi.string().allow('http').required(),\n options: Joi.object<EventOptions>().keys({\n method: Joi.string().allow('POST').required(),\n url: Joi.string()\n .uri({ scheme: ['http', 'https'] })\n .required()\n })\n})\n\nconst eventsSchema = Joi.object<Events>().keys({\n onLoad: eventSchema.optional(),\n onSave: eventSchema.optional()\n})\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>().keys({\n id: Joi.string().uuid().optional(),\n path: Joi.string().required().disallow('/status'),\n title: Joi.string().required(),\n section: Joi.string(),\n controller: Joi.string().optional(),\n components: Joi.array<ComponentDef>().items(componentSchema).unique('name'),\n repeat: Joi.when('controller', {\n is: Joi.string().valid('RepeatPageController').required(),\n then: pageRepeatSchema.required(),\n otherwise: Joi.any().strip()\n }),\n condition: Joi.string().allow('').optional(),\n next: Joi.array<Link>().items(nextSchema).default([]),\n events: eventsSchema.optional(),\n view: Joi.string().optional()\n})\n\nconst baseListItemSchema = Joi.object<Item>().keys({\n text: Joi.string().allow(''),\n description: Joi.string().allow('').optional(),\n conditional: Joi.object<Item['conditional']>()\n .keys({\n components: Joi.array<ComponentDef>()\n .required()\n .items(componentSchema.unknown(true))\n .unique('name')\n })\n .optional(),\n condition: Joi.string().allow('').optional()\n})\n\nconst stringListItemSchema = baseListItemSchema.append({\n value: Joi.string().required()\n})\n\nconst numberListItemSchema = baseListItemSchema.append({\n value: Joi.number().required()\n})\n\nconst listSchema = Joi.object<List>().keys({\n name: Joi.string().required(),\n title: Joi.string().required(),\n type: Joi.string().required().valid('string', 'number'),\n items: Joi.when('type', {\n is: 'string',\n then: Joi.array()\n .items(stringListItemSchema)\n .unique('text')\n .unique('value'),\n otherwise: Joi.array()\n .items(numberListItemSchema)\n .unique('text')\n .unique('value')\n })\n})\n\nconst feedbackSchema = Joi.object<FormDefinition['feedback']>().keys({\n feedbackForm: Joi.boolean().default(false),\n url: Joi.when('feedbackForm', {\n is: Joi.boolean().valid(false),\n then: Joi.string().optional().allow('')\n }),\n emailAddress: Joi.string()\n .email({\n tlds: {\n allow: false\n }\n })\n .optional()\n})\n\nconst phaseBannerSchema = Joi.object<PhaseBanner>().keys({\n phase: Joi.string().valid('alpha', 'beta')\n})\n\nconst outputSchema = Joi.object<FormDefinition['output']>().keys({\n audience: Joi.string().valid('human', 'machine').required(),\n version: Joi.string().required()\n})\n\n/**\n * Joi schema for `FormDefinition` interface\n * @see {@link FormDefinition}\n */\nexport const formDefinitionSchema = Joi.object<FormDefinition>()\n .required()\n .keys({\n engine: Joi.string().allow('V1', 'V2').default('V1'),\n name: Joi.string().allow('').optional(),\n feedback: feedbackSchema.optional(),\n startPage: Joi.string().optional(),\n pages: Joi.array<Page>()\n .required()\n .items(pageSchema)\n .unique('path')\n .unique('id', { ignoreUndefined: true }),\n sections: Joi.array<Section>()\n .items(sectionsSchema)\n .unique('name')\n .unique('title')\n .required(),\n conditions: Joi.array<ConditionWrapper>()\n .items(conditionWrapperSchema)\n .unique('name')\n .unique('displayName'),\n lists: Joi.array<List>().items(listSchema).unique('name').unique('title'),\n metadata: Joi.object({ a: Joi.any() }).unknown().optional(),\n declaration: Joi.string().allow('').optional(),\n skipSummary: Joi.any().strip(),\n phaseBanner: phaseBannerSchema.optional(),\n outputEmail: Joi.string()\n .email({ tlds: { allow: ['uk'] } })\n .trim()\n .optional(),\n output: outputSchema.optional()\n })\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":[]}
@@ -8,23 +8,40 @@ export const questionSchema = Joi.string().required();
8
8
  export const hintTextSchema = Joi.string().optional().allow('');
9
9
  export const questionOptionalSchema = Joi.string().optional().valid('', 'true');
10
10
  export const shortDescriptionSchema = Joi.string().required();
11
- export const formEditorInputKeys = {
11
+ export const pageHeadingAndGuidanceSchema = Joi.string().optional();
12
+ export const pageHeadingSchema = Joi.string().required();
13
+ export const guidanceTextSchema = Joi.string().optional().allow('');
14
+ export const formEditorInputPageKeys = {
12
15
  pageType: pageTypeSchema,
13
16
  questionType: questionTypeSchema
14
17
  };
15
18
 
16
19
  /**
17
- * Joi schema for `FormEditorInput` interface
18
- * @see {@link FormEditorInput}
20
+ * Joi schema for `FormEditorInputPage` interface
21
+ * @see {@link FormEditorInputPage}
19
22
  */
20
- export const formEditorInputSchema = Joi.object().keys(formEditorInputKeys).required();
23
+ export const formEditorInputPageSchema = Joi.object().keys(formEditorInputPageKeys).required();
24
+ export const formEditorInputQuestionKeys = {
25
+ question: questionSchema,
26
+ shortDescription: shortDescriptionSchema,
27
+ hintText: hintTextSchema,
28
+ questionOptional: questionOptionalSchema
29
+ };
21
30
 
22
31
  /**
23
- * Joi schema for `FormEditor` interface
24
- * @see {@link FormEditor}
32
+ * Joi schema for `FormEditorInputQuestion` interface
33
+ * @see {@link FormEditorInputQuestion}
25
34
  */
26
- export const formEditorSchema = formEditorInputSchema.append({
27
- pageType: pageTypeSchema,
28
- questionType: questionTypeSchema
29
- });
35
+ export const formEditorInputQuestionSchema = Joi.object().keys(formEditorInputQuestionKeys).required();
36
+ export const formEditorInputPageSettingsKeys = {
37
+ pageHeadingAndGuidance: pageHeadingAndGuidanceSchema,
38
+ pageHeading: pageHeadingSchema,
39
+ guidanceText: guidanceTextSchema
40
+ };
41
+
42
+ /**
43
+ * Joi schema for `FormEditorInputPageSettings` interface
44
+ * @see {@link FormEditorInputPageSettings}
45
+ */
46
+ export const formEditorInputPageSettingsSchema = Joi.object().keys(formEditorInputPageSettingsKeys).required();
30
47
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["Joi","ComponentType","pageTypeSchema","string","required","valid","questionTypeSchema","UkAddressField","TelephoneNumberField","FileUploadField","EmailAddressField","SelectField","writtenAnswerSubSchema","TextField","MultilineTextField","NumberField","dateSubSchema","DatePartsField","MonthYearField","questionSchema","hintTextSchema","optional","allow","questionOptionalSchema","shortDescriptionSchema","formEditorInputKeys","pageType","questionType","formEditorInputSchema","object","keys","formEditorSchema","append"],"sources":["../../../../src/form/form-editor/index.ts"],"sourcesContent":["import Joi from 'joi'\n\nimport { ComponentType } from '~/src/components/enums.js'\nimport {\n type FormEditor,\n type FormEditorInput\n} from '~/src/form/form-editor/types.js'\n\nexport const pageTypeSchema = Joi.string()\n .required()\n .valid('question', 'guidance')\nexport const questionTypeSchema = Joi.string()\n .required()\n .valid(\n 'written-answer-group',\n 'date-group',\n ComponentType.UkAddressField,\n ComponentType.TelephoneNumberField,\n ComponentType.FileUploadField,\n ComponentType.EmailAddressField,\n ComponentType.SelectField\n )\n\nexport const writtenAnswerSubSchema = Joi.string()\n .required()\n .valid(\n ComponentType.TextField,\n ComponentType.MultilineTextField,\n ComponentType.NumberField\n )\nexport const dateSubSchema = Joi.string()\n .required()\n .valid(ComponentType.DatePartsField, ComponentType.MonthYearField)\n\nexport const questionSchema = Joi.string().required()\nexport const hintTextSchema = Joi.string().optional().allow('')\nexport const questionOptionalSchema = Joi.string().optional().valid('', 'true')\nexport const shortDescriptionSchema = Joi.string().required()\n\nexport const formEditorInputKeys = {\n pageType: pageTypeSchema,\n questionType: questionTypeSchema\n}\n\n/**\n * Joi schema for `FormEditorInput` interface\n * @see {@link FormEditorInput}\n */\nexport const formEditorInputSchema = Joi.object<FormEditorInput>()\n .keys(formEditorInputKeys)\n .required()\n\n/**\n * Joi schema for `FormEditor` interface\n * @see {@link FormEditor}\n */\nexport const formEditorSchema = formEditorInputSchema.append<FormEditor>({\n pageType: pageTypeSchema,\n questionType: questionTypeSchema\n})\n"],"mappings":"AAAA,OAAOA,GAAG,MAAM,KAAK;AAErB,SAASC,aAAa;AAMtB,OAAO,MAAMC,cAAc,GAAGF,GAAG,CAACG,MAAM,CAAC,CAAC,CACvCC,QAAQ,CAAC,CAAC,CACVC,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC;AAChC,OAAO,MAAMC,kBAAkB,GAAGN,GAAG,CAACG,MAAM,CAAC,CAAC,CAC3CC,QAAQ,CAAC,CAAC,CACVC,KAAK,CACJ,sBAAsB,EACtB,YAAY,EACZJ,aAAa,CAACM,cAAc,EAC5BN,aAAa,CAACO,oBAAoB,EAClCP,aAAa,CAACQ,eAAe,EAC7BR,aAAa,CAACS,iBAAiB,EAC/BT,aAAa,CAACU,WAChB,CAAC;AAEH,OAAO,MAAMC,sBAAsB,GAAGZ,GAAG,CAACG,MAAM,CAAC,CAAC,CAC/CC,QAAQ,CAAC,CAAC,CACVC,KAAK,CACJJ,aAAa,CAACY,SAAS,EACvBZ,aAAa,CAACa,kBAAkB,EAChCb,aAAa,CAACc,WAChB,CAAC;AACH,OAAO,MAAMC,aAAa,GAAGhB,GAAG,CAACG,MAAM,CAAC,CAAC,CACtCC,QAAQ,CAAC,CAAC,CACVC,KAAK,CAACJ,aAAa,CAACgB,cAAc,EAAEhB,aAAa,CAACiB,cAAc,CAAC;AAEpE,OAAO,MAAMC,cAAc,GAAGnB,GAAG,CAACG,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;AACrD,OAAO,MAAMgB,cAAc,GAAGpB,GAAG,CAACG,MAAM,CAAC,CAAC,CAACkB,QAAQ,CAAC,CAAC,CAACC,KAAK,CAAC,EAAE,CAAC;AAC/D,OAAO,MAAMC,sBAAsB,GAAGvB,GAAG,CAACG,MAAM,CAAC,CAAC,CAACkB,QAAQ,CAAC,CAAC,CAAChB,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC;AAC/E,OAAO,MAAMmB,sBAAsB,GAAGxB,GAAG,CAACG,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;AAE7D,OAAO,MAAMqB,mBAAmB,GAAG;EACjCC,QAAQ,EAAExB,cAAc;EACxByB,YAAY,EAAErB;AAChB,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,MAAMsB,qBAAqB,GAAG5B,GAAG,CAAC6B,MAAM,CAAkB,CAAC,CAC/DC,IAAI,CAACL,mBAAmB,CAAC,CACzBrB,QAAQ,CAAC,CAAC;;AAEb;AACA;AACA;AACA;AACA,OAAO,MAAM2B,gBAAgB,GAAGH,qBAAqB,CAACI,MAAM,CAAa;EACvEN,QAAQ,EAAExB,cAAc;EACxByB,YAAY,EAAErB;AAChB,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["Joi","ComponentType","pageTypeSchema","string","required","valid","questionTypeSchema","UkAddressField","TelephoneNumberField","FileUploadField","EmailAddressField","SelectField","writtenAnswerSubSchema","TextField","MultilineTextField","NumberField","dateSubSchema","DatePartsField","MonthYearField","questionSchema","hintTextSchema","optional","allow","questionOptionalSchema","shortDescriptionSchema","pageHeadingAndGuidanceSchema","pageHeadingSchema","guidanceTextSchema","formEditorInputPageKeys","pageType","questionType","formEditorInputPageSchema","object","keys","formEditorInputQuestionKeys","question","shortDescription","hintText","questionOptional","formEditorInputQuestionSchema","formEditorInputPageSettingsKeys","pageHeadingAndGuidance","pageHeading","guidanceText","formEditorInputPageSettingsSchema"],"sources":["../../../../src/form/form-editor/index.ts"],"sourcesContent":["import Joi from 'joi'\n\nimport { ComponentType } from '~/src/components/enums.js'\nimport {\n type FormEditorInputPage,\n type FormEditorInputPageSettings,\n type FormEditorInputQuestion\n} from '~/src/form/form-editor/types.js'\n\nexport const pageTypeSchema = Joi.string()\n .required()\n .valid('question', 'guidance')\nexport const questionTypeSchema = Joi.string()\n .required()\n .valid(\n 'written-answer-group',\n 'date-group',\n ComponentType.UkAddressField,\n ComponentType.TelephoneNumberField,\n ComponentType.FileUploadField,\n ComponentType.EmailAddressField,\n ComponentType.SelectField\n )\n\nexport const writtenAnswerSubSchema = Joi.string()\n .required()\n .valid(\n ComponentType.TextField,\n ComponentType.MultilineTextField,\n ComponentType.NumberField\n )\nexport const dateSubSchema = Joi.string()\n .required()\n .valid(ComponentType.DatePartsField, ComponentType.MonthYearField)\n\nexport const questionSchema = Joi.string().required()\nexport const hintTextSchema = Joi.string().optional().allow('')\nexport const questionOptionalSchema = Joi.string().optional().valid('', 'true')\nexport const shortDescriptionSchema = Joi.string().required()\nexport const pageHeadingAndGuidanceSchema = Joi.string().optional()\nexport const pageHeadingSchema = Joi.string().required()\nexport const guidanceTextSchema = Joi.string().optional().allow('')\n\nexport const formEditorInputPageKeys = {\n pageType: pageTypeSchema,\n questionType: questionTypeSchema\n}\n\n/**\n * Joi schema for `FormEditorInputPage` interface\n * @see {@link FormEditorInputPage}\n */\nexport const formEditorInputPageSchema = Joi.object<FormEditorInputPage>()\n .keys(formEditorInputPageKeys)\n .required()\n\nexport const formEditorInputQuestionKeys = {\n question: questionSchema,\n shortDescription: shortDescriptionSchema,\n hintText: hintTextSchema,\n questionOptional: questionOptionalSchema\n}\n\n/**\n * Joi schema for `FormEditorInputQuestion` interface\n * @see {@link FormEditorInputQuestion}\n */\nexport const formEditorInputQuestionSchema =\n Joi.object<FormEditorInputQuestion>()\n .keys(formEditorInputQuestionKeys)\n .required()\n\nexport const formEditorInputPageSettingsKeys = {\n pageHeadingAndGuidance: pageHeadingAndGuidanceSchema,\n pageHeading: pageHeadingSchema,\n guidanceText: guidanceTextSchema\n}\n\n/**\n * Joi schema for `FormEditorInputPageSettings` interface\n * @see {@link FormEditorInputPageSettings}\n */\nexport const formEditorInputPageSettingsSchema =\n Joi.object<FormEditorInputPageSettings>()\n .keys(formEditorInputPageSettingsKeys)\n .required()\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../../src/form/form-editor/types.ts"],"sourcesContent":["/**\n * Interface for `FormEditor` Joi schema\n */\nexport interface FormEditor {\n /**\n * The type of the page\n */\n pageType: string\n\n /**\n * The type of the question\n */\n questionType: string\n\n /**\n * The sub-type of written answer\n */\n writtenAnswerSub: string\n\n /**\n * The sub-type of date\n */\n dateSub: string\n\n /**\n * The text of the question\n */\n question: string\n\n /**\n * The hint text of the question\n */\n hintText: string\n\n /**\n * Denotes if the question is optional\n */\n questionOptional: string\n\n /**\n * The short description of the question\n */\n shortDescription: string\n}\n\nexport type FormEditorInput = Pick<\n FormEditor,\n | 'pageType'\n | 'questionType'\n | 'writtenAnswerSub'\n | 'dateSub'\n | 'question'\n | 'shortDescription'\n | 'hintText'\n | 'questionOptional'\n>\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../../src/form/form-editor/types.ts"],"sourcesContent":["/**\n * Interface for `FormEditor` Joi schema\n */\nexport interface FormEditor {\n /**\n * The type of the page\n */\n pageType: string\n\n /**\n * The type of the question\n */\n questionType: string\n\n /**\n * The sub-type of written answer\n */\n writtenAnswerSub: string\n\n /**\n * The sub-type of date\n */\n dateSub: string\n\n /**\n * The text of the question\n */\n question: string\n\n /**\n * The hint text of the question\n */\n hintText: string\n\n /**\n * Denotes if the question is optional\n */\n questionOptional: string\n\n /**\n * The short description of the question\n */\n shortDescription: string\n\n /**\n * The value of checkbox to reveal heading and guidance section\n */\n pageHeadingAndGuidance: string\n\n /**\n * The page heading\n */\n pageHeading: string\n\n /**\n * The page guidance text\n */\n guidanceText: string\n}\n\nexport type FormEditorInputPage = Pick<\n FormEditor,\n 'pageType' | 'questionType' | 'writtenAnswerSub' | 'dateSub'\n>\n\nexport type FormEditorInputQuestion = Pick<\n FormEditor,\n | 'questionType'\n | 'question'\n | 'shortDescription'\n | 'hintText'\n | 'questionOptional'\n>\n\nexport type FormEditorInputPageSettings = Pick<\n FormEditor,\n 'pageHeadingAndGuidance' | 'pageHeading' | 'guidanceText'\n>\n"],"mappings":"","ignoreList":[]}
@@ -60,4 +60,61 @@ export interface QueryResult<Model> {
60
60
  */
61
61
  meta: Meta;
62
62
  }
63
+ /**
64
+ * Type for the list items within a Radio or Checkbox nunjucks definition
65
+ */
66
+ export interface CheckboxOrRadioItem {
67
+ /**
68
+ * The text to be displayed
69
+ */
70
+ text?: string;
71
+ /**
72
+ * If text is set, this is not required. HTML to use within each radio item label
73
+ */
74
+ html?: string;
75
+ /**
76
+ * Specific ID attribute for the checkbox/radio item
77
+ */
78
+ id?: string;
79
+ /**
80
+ * Name for the checkbox/radio item
81
+ */
82
+ name?: string;
83
+ /**
84
+ * Required. Value for the radio input
85
+ */
86
+ value: string;
87
+ /**
88
+ * Subset of options for the label
89
+ */
90
+ label?: string;
91
+ /**
92
+ * Can be used to add a hint to each item
93
+ */
94
+ hint?: string;
95
+ /**
96
+ * Divider text to separate checkbox/radio items, for example the text "or"
97
+ */
98
+ divider?: string;
99
+ /**
100
+ * Whether the checkbox/radio should be checked when the page loads
101
+ */
102
+ checked?: boolean;
103
+ /**
104
+ * Provide additional content to reveal when the checkbox/radio is checked
105
+ */
106
+ conditional?: object;
107
+ /**
108
+ * The behaviour - if set to "exclusive" implements a 'None of thse' type behaviour via Javascript when checkboxes are clicked
109
+ */
110
+ behaviour?: string;
111
+ /**
112
+ * If true, checkbox/radio option will be disabled
113
+ */
114
+ disabled?: boolean;
115
+ /**
116
+ * HTML attributes (for example data attributes) to add to the checkbox input tag
117
+ */
118
+ attributes?: object;
119
+ }
63
120
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/common/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACtB,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,8BAA8B,CAAA;AACjE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAEnE;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,iBAAiB,GAAG,cAAc,GAAG,aAAa,CAAA;AAE7E;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,MAAM,CAAA;AAEzC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,OAAO,EAAE,MAAM,EAAE,CAAA;IAEjB;;OAEG;IACH,aAAa,EAAE,MAAM,EAAE,CAAA;IAEvB;;OAEG;IACH,MAAM,CAAC,EAAE,UAAU,EAAE,CAAA;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB;;OAEG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAA;IAE7B;;OAEG;IACH,OAAO,CAAC,EAAE,cAAc,CAAA;IAExB;;OAEG;IACH,MAAM,CAAC,EAAE,aAAa,CAAA;IAEtB;;OAEG;IACH,OAAO,CAAC,EAAE,aAAa,CAAA;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,KAAK;IAChC;;OAEG;IACH,IAAI,EAAE,KAAK,EAAE,CAAA;IAEb;;OAEG;IACH,IAAI,EAAE,IAAI,CAAA;CACX"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/common/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACtB,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,8BAA8B,CAAA;AACjE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAEnE;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,iBAAiB,GAAG,cAAc,GAAG,aAAa,CAAA;AAE7E;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,MAAM,CAAA;AAEzC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,OAAO,EAAE,MAAM,EAAE,CAAA;IAEjB;;OAEG;IACH,aAAa,EAAE,MAAM,EAAE,CAAA;IAEvB;;OAEG;IACH,MAAM,CAAC,EAAE,UAAU,EAAE,CAAA;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB;;OAEG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAA;IAE7B;;OAEG;IACH,OAAO,CAAC,EAAE,cAAc,CAAA;IAExB;;OAEG;IACH,MAAM,CAAC,EAAE,aAAa,CAAA;IAEtB;;OAEG;IACH,OAAO,CAAC,EAAE,aAAa,CAAA;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,KAAK;IAChC;;OAEG;IACH,IAAI,EAAE,KAAK,EAAE,CAAA;IAEb;;OAEG;IACH,IAAI,EAAE,IAAI,CAAA;CACX;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,EAAE,CAAC,EAAE,MAAM,CAAA;IAEX;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB"}
@@ -1,5 +1,5 @@
1
1
  import Joi from 'joi';
2
- import { type FormEditor, type FormEditorInput } from '../../form/form-editor/types.js';
2
+ import { type FormEditorInputPage, type FormEditorInputPageSettings, type FormEditorInputQuestion } from '../../form/form-editor/types.js';
3
3
  export declare const pageTypeSchema: Joi.StringSchema<string>;
4
4
  export declare const questionTypeSchema: Joi.StringSchema<string>;
5
5
  export declare const writtenAnswerSubSchema: Joi.StringSchema<string>;
@@ -8,18 +8,37 @@ export declare const questionSchema: Joi.StringSchema<string>;
8
8
  export declare const hintTextSchema: Joi.StringSchema<string>;
9
9
  export declare const questionOptionalSchema: Joi.StringSchema<string>;
10
10
  export declare const shortDescriptionSchema: Joi.StringSchema<string>;
11
- export declare const formEditorInputKeys: {
11
+ export declare const pageHeadingAndGuidanceSchema: Joi.StringSchema<string>;
12
+ export declare const pageHeadingSchema: Joi.StringSchema<string>;
13
+ export declare const guidanceTextSchema: Joi.StringSchema<string>;
14
+ export declare const formEditorInputPageKeys: {
12
15
  pageType: Joi.StringSchema<string>;
13
16
  questionType: Joi.StringSchema<string>;
14
17
  };
15
18
  /**
16
- * Joi schema for `FormEditorInput` interface
17
- * @see {@link FormEditorInput}
19
+ * Joi schema for `FormEditorInputPage` interface
20
+ * @see {@link FormEditorInputPage}
18
21
  */
19
- export declare const formEditorInputSchema: Joi.ObjectSchema<FormEditorInput>;
22
+ export declare const formEditorInputPageSchema: Joi.ObjectSchema<FormEditorInputPage>;
23
+ export declare const formEditorInputQuestionKeys: {
24
+ question: Joi.StringSchema<string>;
25
+ shortDescription: Joi.StringSchema<string>;
26
+ hintText: Joi.StringSchema<string>;
27
+ questionOptional: Joi.StringSchema<string>;
28
+ };
29
+ /**
30
+ * Joi schema for `FormEditorInputQuestion` interface
31
+ * @see {@link FormEditorInputQuestion}
32
+ */
33
+ export declare const formEditorInputQuestionSchema: Joi.ObjectSchema<FormEditorInputQuestion>;
34
+ export declare const formEditorInputPageSettingsKeys: {
35
+ pageHeadingAndGuidance: Joi.StringSchema<string>;
36
+ pageHeading: Joi.StringSchema<string>;
37
+ guidanceText: Joi.StringSchema<string>;
38
+ };
20
39
  /**
21
- * Joi schema for `FormEditor` interface
22
- * @see {@link FormEditor}
40
+ * Joi schema for `FormEditorInputPageSettings` interface
41
+ * @see {@link FormEditorInputPageSettings}
23
42
  */
24
- export declare const formEditorSchema: Joi.ObjectSchema<FormEditor>;
43
+ export declare const formEditorInputPageSettingsSchema: Joi.ObjectSchema<FormEditorInputPageSettings>;
25
44
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/form/form-editor/index.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AAGrB,OAAO,EACL,KAAK,UAAU,EACf,KAAK,eAAe,EACrB,MAAM,iCAAiC,CAAA;AAExC,eAAO,MAAM,cAAc,0BAEK,CAAA;AAChC,eAAO,MAAM,kBAAkB,0BAU5B,CAAA;AAEH,eAAO,MAAM,sBAAsB,0BAMhC,CAAA;AACH,eAAO,MAAM,aAAa,0BAE0C,CAAA;AAEpE,eAAO,MAAM,cAAc,0BAA0B,CAAA;AACrD,eAAO,MAAM,cAAc,0BAAoC,CAAA;AAC/D,eAAO,MAAM,sBAAsB,0BAA4C,CAAA;AAC/E,eAAO,MAAM,sBAAsB,0BAA0B,CAAA;AAE7D,eAAO,MAAM,mBAAmB;;;CAG/B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,mCAErB,CAAA;AAEb;;;GAGG;AACH,eAAO,MAAM,gBAAgB,8BAG3B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/form/form-editor/index.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AAGrB,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,EAChC,KAAK,uBAAuB,EAC7B,MAAM,iCAAiC,CAAA;AAExC,eAAO,MAAM,cAAc,0BAEK,CAAA;AAChC,eAAO,MAAM,kBAAkB,0BAU5B,CAAA;AAEH,eAAO,MAAM,sBAAsB,0BAMhC,CAAA;AACH,eAAO,MAAM,aAAa,0BAE0C,CAAA;AAEpE,eAAO,MAAM,cAAc,0BAA0B,CAAA;AACrD,eAAO,MAAM,cAAc,0BAAoC,CAAA;AAC/D,eAAO,MAAM,sBAAsB,0BAA4C,CAAA;AAC/E,eAAO,MAAM,sBAAsB,0BAA0B,CAAA;AAC7D,eAAO,MAAM,4BAA4B,0BAA0B,CAAA;AACnE,eAAO,MAAM,iBAAiB,0BAA0B,CAAA;AACxD,eAAO,MAAM,kBAAkB,0BAAoC,CAAA;AAEnE,eAAO,MAAM,uBAAuB;;;CAGnC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,yBAAyB,uCAEzB,CAAA;AAEb,eAAO,MAAM,2BAA2B;;;;;CAKvC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,6BAA6B,2CAG3B,CAAA;AAEf,eAAO,MAAM,+BAA+B;;;;CAI3C,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,iCAAiC,+CAG/B,CAAA"}
@@ -34,6 +34,20 @@ export interface FormEditor {
34
34
  * The short description of the question
35
35
  */
36
36
  shortDescription: string;
37
+ /**
38
+ * The value of checkbox to reveal heading and guidance section
39
+ */
40
+ pageHeadingAndGuidance: string;
41
+ /**
42
+ * The page heading
43
+ */
44
+ pageHeading: string;
45
+ /**
46
+ * The page guidance text
47
+ */
48
+ guidanceText: string;
37
49
  }
38
- export type FormEditorInput = Pick<FormEditor, 'pageType' | 'questionType' | 'writtenAnswerSub' | 'dateSub' | 'question' | 'shortDescription' | 'hintText' | 'questionOptional'>;
50
+ export type FormEditorInputPage = Pick<FormEditor, 'pageType' | 'questionType' | 'writtenAnswerSub' | 'dateSub'>;
51
+ export type FormEditorInputQuestion = Pick<FormEditor, 'questionType' | 'question' | 'shortDescription' | 'hintText' | 'questionOptional'>;
52
+ export type FormEditorInputPageSettings = Pick<FormEditor, 'pageHeadingAndGuidance' | 'pageHeading' | 'guidanceText'>;
39
53
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/form/form-editor/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAA;IAEpB;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAA;IAExB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IAEf;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAA;IAExB;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,MAAM,eAAe,GAAG,IAAI,CAChC,UAAU,EACR,UAAU,GACV,cAAc,GACd,kBAAkB,GAClB,SAAS,GACT,UAAU,GACV,kBAAkB,GAClB,UAAU,GACV,kBAAkB,CACrB,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/form/form-editor/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAA;IAEpB;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAA;IAExB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IAEf;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAA;IAExB;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAA;IAExB;;OAEG;IACH,sBAAsB,EAAE,MAAM,CAAA;IAE9B;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IAEnB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,MAAM,mBAAmB,GAAG,IAAI,CACpC,UAAU,EACV,UAAU,GAAG,cAAc,GAAG,kBAAkB,GAAG,SAAS,CAC7D,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG,IAAI,CACxC,UAAU,EACR,cAAc,GACd,UAAU,GACV,kBAAkB,GAClB,UAAU,GACV,kBAAkB,CACrB,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG,IAAI,CAC5C,UAAU,EACV,wBAAwB,GAAG,aAAa,GAAG,cAAc,CAC1D,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defra/forms-model",
3
- "version": "3.0.404",
3
+ "version": "3.0.405",
4
4
  "description": "A hapi plugin providing the model for Defra forms",
5
5
  "homepage": "https://github.com/DEFRA/forms-designer/tree/main/model#readme",
6
6
  "repository": {
@@ -74,3 +74,73 @@ export interface QueryResult<Model> {
74
74
  */
75
75
  meta: Meta
76
76
  }
77
+
78
+ /**
79
+ * Type for the list items within a Radio or Checkbox nunjucks definition
80
+ */
81
+ export interface CheckboxOrRadioItem {
82
+ /**
83
+ * The text to be displayed
84
+ */
85
+ text?: string
86
+
87
+ /**
88
+ * If text is set, this is not required. HTML to use within each radio item label
89
+ */
90
+ html?: string
91
+
92
+ /**
93
+ * Specific ID attribute for the checkbox/radio item
94
+ */
95
+ id?: string
96
+
97
+ /**
98
+ * Name for the checkbox/radio item
99
+ */
100
+ name?: string
101
+
102
+ /**
103
+ * Required. Value for the radio input
104
+ */
105
+ value: string
106
+
107
+ /**
108
+ * Subset of options for the label
109
+ */
110
+ label?: string
111
+
112
+ /**
113
+ * Can be used to add a hint to each item
114
+ */
115
+ hint?: string
116
+
117
+ /**
118
+ * Divider text to separate checkbox/radio items, for example the text "or"
119
+ */
120
+ divider?: string
121
+
122
+ /**
123
+ * Whether the checkbox/radio should be checked when the page loads
124
+ */
125
+ checked?: boolean
126
+
127
+ /**
128
+ * Provide additional content to reveal when the checkbox/radio is checked
129
+ */
130
+ conditional?: object
131
+
132
+ /**
133
+ * The behaviour - if set to "exclusive" implements a 'None of thse' type behaviour via Javascript when checkboxes are clicked
134
+ */
135
+ behaviour?: string
136
+
137
+ /**
138
+ * If true, checkbox/radio option will be disabled
139
+ */
140
+ disabled?: boolean
141
+
142
+ /**
143
+ * HTML attributes (for example data attributes) to add to the checkbox input tag
144
+ */
145
+ attributes?: object
146
+ }
@@ -195,7 +195,7 @@ export const pageSchema = Joi.object<Page>().keys({
195
195
  otherwise: Joi.any().strip()
196
196
  }),
197
197
  condition: Joi.string().allow('').optional(),
198
- next: Joi.array<Link>().items(nextSchema),
198
+ next: Joi.array<Link>().items(nextSchema).default([]),
199
199
  events: eventsSchema.optional(),
200
200
  view: Joi.string().optional()
201
201
  })
@@ -2,8 +2,9 @@ import Joi from 'joi'
2
2
 
3
3
  import { ComponentType } from '~/src/components/enums.js'
4
4
  import {
5
- type FormEditor,
6
- type FormEditorInput
5
+ type FormEditorInputPage,
6
+ type FormEditorInputPageSettings,
7
+ type FormEditorInputQuestion
7
8
  } from '~/src/form/form-editor/types.js'
8
9
 
9
10
  export const pageTypeSchema = Joi.string()
@@ -36,25 +37,50 @@ export const questionSchema = Joi.string().required()
36
37
  export const hintTextSchema = Joi.string().optional().allow('')
37
38
  export const questionOptionalSchema = Joi.string().optional().valid('', 'true')
38
39
  export const shortDescriptionSchema = Joi.string().required()
40
+ export const pageHeadingAndGuidanceSchema = Joi.string().optional()
41
+ export const pageHeadingSchema = Joi.string().required()
42
+ export const guidanceTextSchema = Joi.string().optional().allow('')
39
43
 
40
- export const formEditorInputKeys = {
44
+ export const formEditorInputPageKeys = {
41
45
  pageType: pageTypeSchema,
42
46
  questionType: questionTypeSchema
43
47
  }
44
48
 
45
49
  /**
46
- * Joi schema for `FormEditorInput` interface
47
- * @see {@link FormEditorInput}
50
+ * Joi schema for `FormEditorInputPage` interface
51
+ * @see {@link FormEditorInputPage}
48
52
  */
49
- export const formEditorInputSchema = Joi.object<FormEditorInput>()
50
- .keys(formEditorInputKeys)
53
+ export const formEditorInputPageSchema = Joi.object<FormEditorInputPage>()
54
+ .keys(formEditorInputPageKeys)
51
55
  .required()
52
56
 
57
+ export const formEditorInputQuestionKeys = {
58
+ question: questionSchema,
59
+ shortDescription: shortDescriptionSchema,
60
+ hintText: hintTextSchema,
61
+ questionOptional: questionOptionalSchema
62
+ }
63
+
53
64
  /**
54
- * Joi schema for `FormEditor` interface
55
- * @see {@link FormEditor}
65
+ * Joi schema for `FormEditorInputQuestion` interface
66
+ * @see {@link FormEditorInputQuestion}
56
67
  */
57
- export const formEditorSchema = formEditorInputSchema.append<FormEditor>({
58
- pageType: pageTypeSchema,
59
- questionType: questionTypeSchema
60
- })
68
+ export const formEditorInputQuestionSchema =
69
+ Joi.object<FormEditorInputQuestion>()
70
+ .keys(formEditorInputQuestionKeys)
71
+ .required()
72
+
73
+ export const formEditorInputPageSettingsKeys = {
74
+ pageHeadingAndGuidance: pageHeadingAndGuidanceSchema,
75
+ pageHeading: pageHeadingSchema,
76
+ guidanceText: guidanceTextSchema
77
+ }
78
+
79
+ /**
80
+ * Joi schema for `FormEditorInputPageSettings` interface
81
+ * @see {@link FormEditorInputPageSettings}
82
+ */
83
+ export const formEditorInputPageSettingsSchema =
84
+ Joi.object<FormEditorInputPageSettings>()
85
+ .keys(formEditorInputPageSettingsKeys)
86
+ .required()
@@ -41,16 +41,38 @@ export interface FormEditor {
41
41
  * The short description of the question
42
42
  */
43
43
  shortDescription: string
44
+
45
+ /**
46
+ * The value of checkbox to reveal heading and guidance section
47
+ */
48
+ pageHeadingAndGuidance: string
49
+
50
+ /**
51
+ * The page heading
52
+ */
53
+ pageHeading: string
54
+
55
+ /**
56
+ * The page guidance text
57
+ */
58
+ guidanceText: string
44
59
  }
45
60
 
46
- export type FormEditorInput = Pick<
61
+ export type FormEditorInputPage = Pick<
62
+ FormEditor,
63
+ 'pageType' | 'questionType' | 'writtenAnswerSub' | 'dateSub'
64
+ >
65
+
66
+ export type FormEditorInputQuestion = Pick<
47
67
  FormEditor,
48
- | 'pageType'
49
68
  | 'questionType'
50
- | 'writtenAnswerSub'
51
- | 'dateSub'
52
69
  | 'question'
53
70
  | 'shortDescription'
54
71
  | 'hintText'
55
72
  | 'questionOptional'
56
73
  >
74
+
75
+ export type FormEditorInputPageSettings = Pick<
76
+ FormEditor,
77
+ 'pageHeadingAndGuidance' | 'pageHeading' | 'guidanceText'
78
+ >