@defra/forms-model 3.0.463 → 3.0.465

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.
@@ -0,0 +1,168 @@
1
+ import { ComponentType } from "../components/enums.js";
2
+ /**
3
+ * @param {Partial<TextFieldComponent>} partialTextField
4
+ * @returns {TextFieldComponent}
5
+ */
6
+ export function buildTextFieldComponent(partialTextField = {}) {
7
+ const textFieldComponent = {
8
+ id: '407dd0d7-cce9-4f43-8e1f-7d89cb698875',
9
+ name: 'TextField',
10
+ title: 'Text field',
11
+ type: ComponentType.TextField,
12
+ hint: '',
13
+ options: {},
14
+ schema: {}
15
+ };
16
+ return {
17
+ ...textFieldComponent,
18
+ ...partialTextField
19
+ };
20
+ }
21
+
22
+ /**
23
+ * @param {Partial<FileUploadFieldComponent>} partialFileUploadField
24
+ * @returns {FileUploadFieldComponent}
25
+ */
26
+ export function buildFileUploadComponent(partialFileUploadField) {
27
+ const fileUploadFieldComponent = {
28
+ name: 'FileUploadField',
29
+ type: ComponentType.FileUploadField,
30
+ title: 'File Upload Field',
31
+ options: {},
32
+ schema: {}
33
+ };
34
+ return {
35
+ ...fileUploadFieldComponent,
36
+ ...partialFileUploadField
37
+ };
38
+ }
39
+
40
+ /**
41
+ *
42
+ * @param {Partial<AutocompleteFieldComponent>} partialAutoCompleteField
43
+ * @returns {AutocompleteFieldComponent}
44
+ */
45
+ export function buildAutoCompleteComponent(partialAutoCompleteField) {
46
+ const autocompleteComponent = {
47
+ name: 'AutoCompleteField',
48
+ title: 'What languages do you speak?',
49
+ type: ComponentType.AutocompleteField,
50
+ list: 'AutoCompleteList',
51
+ options: {}
52
+ };
53
+ return {
54
+ ...autocompleteComponent,
55
+ ...partialAutoCompleteField
56
+ };
57
+ }
58
+
59
+ /**
60
+ * @param {Partial<RadiosFieldComponent>} partialListComponent
61
+ * @returns {RadiosFieldComponent}
62
+ */
63
+ export function buildRadioComponent(partialListComponent = {}) {
64
+ const radioFieldComponent = {
65
+ name: 'RadioField',
66
+ title: 'Which country do you live in?',
67
+ type: ComponentType.RadiosField,
68
+ list: 'RadioList',
69
+ options: {}
70
+ };
71
+ return {
72
+ ...radioFieldComponent,
73
+ ...partialListComponent
74
+ };
75
+ }
76
+
77
+ /**
78
+ * @param {Partial<CheckboxesFieldComponent>} partialListComponent
79
+ * @returns {CheckboxesFieldComponent}
80
+ */
81
+ export function buildCheckboxComponent(partialListComponent) {
82
+ const checkboxesFieldComponent = {
83
+ name: 'FellowshipOfTheRing',
84
+ title: 'Which are your favourite characters from the fellowship?',
85
+ type: ComponentType.CheckboxesField,
86
+ list: 'CheckboxList',
87
+ options: {}
88
+ };
89
+ return {
90
+ ...checkboxesFieldComponent,
91
+ ...partialListComponent
92
+ };
93
+ }
94
+
95
+ /**
96
+ * Builder to create a stub List item
97
+ * @param {Partial<Item>} partialListItem
98
+ * @returns {Item}
99
+ */
100
+ export function buildListItem(partialListItem = {}) {
101
+ return {
102
+ text: 'Javascript',
103
+ value: 'javascript',
104
+ ...partialListItem
105
+ };
106
+ }
107
+
108
+ /**
109
+ * @param {Partial<List>} partialList
110
+ * @returns {List}
111
+ */
112
+ export function buildList(partialList = {}) {
113
+ return {
114
+ title: 'Development language2',
115
+ name: 'YhmNDD',
116
+ type: 'string',
117
+ items: [buildListItem({
118
+ text: 'Javascript',
119
+ value: 'javascript'
120
+ }), buildListItem({
121
+ text: 'TypeScript',
122
+ value: 'typescript'
123
+ }), buildListItem({
124
+ text: 'Python',
125
+ value: 'python'
126
+ }), buildListItem({
127
+ text: 'Haskell',
128
+ value: 'haskell'
129
+ }), buildListItem({
130
+ text: 'Erlang',
131
+ value: 'erlang'
132
+ }), buildListItem({
133
+ text: 'Java',
134
+ value: 'java'
135
+ })],
136
+ ...partialList
137
+ };
138
+ }
139
+ export function buildNumberFieldComponent(partialComponent) {
140
+ return {
141
+ name: 'year',
142
+ title: 'Year',
143
+ options: {},
144
+ schema: {},
145
+ ...partialComponent,
146
+ type: ComponentType.NumberField
147
+ };
148
+ }
149
+ export function buildDateComponent(partialComponent) {
150
+ return {
151
+ name: 'bcdefg',
152
+ title: 'Default title',
153
+ options: {},
154
+ ...partialComponent,
155
+ type: ComponentType.DatePartsField
156
+ };
157
+ }
158
+ export function buildRadiosComponent(partialComponent) {
159
+ return {
160
+ name: 'cdefgh',
161
+ title: 'Default title',
162
+ options: {},
163
+ list: 'Default list Id ref',
164
+ ...partialComponent,
165
+ type: ComponentType.RadiosField
166
+ };
167
+ }
168
+ //# sourceMappingURL=components.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.js","names":["ComponentType","buildTextFieldComponent","partialTextField","textFieldComponent","id","name","title","type","TextField","hint","options","schema","buildFileUploadComponent","partialFileUploadField","fileUploadFieldComponent","FileUploadField","buildAutoCompleteComponent","partialAutoCompleteField","autocompleteComponent","AutocompleteField","list","buildRadioComponent","partialListComponent","radioFieldComponent","RadiosField","buildCheckboxComponent","checkboxesFieldComponent","CheckboxesField","buildListItem","partialListItem","text","value","buildList","partialList","items","buildNumberFieldComponent","partialComponent","NumberField","buildDateComponent","DatePartsField","buildRadiosComponent"],"sources":["../../../src/__stubs__/components.ts"],"sourcesContent":["import { ComponentType } from '~/src/components/enums.js'\nimport {\n type AutocompleteFieldComponent,\n type CheckboxesFieldComponent,\n type DatePartsFieldComponent,\n type FileUploadFieldComponent,\n type NumberFieldComponent,\n type RadiosFieldComponent,\n type TextFieldComponent\n} from '~/src/components/types.js'\nimport { type Item, type List } from '~/src/form/form-definition/types.js'\n\n/**\n * @param {Partial<TextFieldComponent>} partialTextField\n * @returns {TextFieldComponent}\n */\nexport function buildTextFieldComponent(\n partialTextField: Partial<TextFieldComponent> = {}\n): TextFieldComponent {\n const textFieldComponent: TextFieldComponent = {\n id: '407dd0d7-cce9-4f43-8e1f-7d89cb698875',\n name: 'TextField',\n title: 'Text field',\n type: ComponentType.TextField,\n hint: '',\n options: {},\n schema: {}\n }\n\n return {\n ...textFieldComponent,\n ...partialTextField\n }\n}\n\n/**\n * @param {Partial<FileUploadFieldComponent>} partialFileUploadField\n * @returns {FileUploadFieldComponent}\n */\nexport function buildFileUploadComponent(\n partialFileUploadField: Partial<FileUploadFieldComponent>\n): FileUploadFieldComponent {\n const fileUploadFieldComponent: FileUploadFieldComponent = {\n name: 'FileUploadField',\n type: ComponentType.FileUploadField,\n title: 'File Upload Field',\n options: {},\n schema: {}\n }\n\n return {\n ...fileUploadFieldComponent,\n ...partialFileUploadField\n }\n}\n\n/**\n *\n * @param {Partial<AutocompleteFieldComponent>} partialAutoCompleteField\n * @returns {AutocompleteFieldComponent}\n */\nexport function buildAutoCompleteComponent(\n partialAutoCompleteField: Partial<AutocompleteFieldComponent>\n): AutocompleteFieldComponent {\n const autocompleteComponent: AutocompleteFieldComponent = {\n name: 'AutoCompleteField',\n title: 'What languages do you speak?',\n type: ComponentType.AutocompleteField,\n list: 'AutoCompleteList',\n options: {}\n }\n\n return {\n ...autocompleteComponent,\n ...partialAutoCompleteField\n }\n}\n\n/**\n * @param {Partial<RadiosFieldComponent>} partialListComponent\n * @returns {RadiosFieldComponent}\n */\nexport function buildRadioComponent(\n partialListComponent: Partial<RadiosFieldComponent> = {}\n): RadiosFieldComponent {\n const radioFieldComponent: RadiosFieldComponent = {\n name: 'RadioField',\n title: 'Which country do you live in?',\n type: ComponentType.RadiosField,\n list: 'RadioList',\n options: {}\n }\n\n return {\n ...radioFieldComponent,\n ...partialListComponent\n }\n}\n\n/**\n * @param {Partial<CheckboxesFieldComponent>} partialListComponent\n * @returns {CheckboxesFieldComponent}\n */\nexport function buildCheckboxComponent(\n partialListComponent: Partial<CheckboxesFieldComponent>\n): CheckboxesFieldComponent {\n const checkboxesFieldComponent: CheckboxesFieldComponent = {\n name: 'FellowshipOfTheRing',\n title: 'Which are your favourite characters from the fellowship?',\n type: ComponentType.CheckboxesField,\n list: 'CheckboxList',\n options: {}\n }\n\n return {\n ...checkboxesFieldComponent,\n ...partialListComponent\n }\n}\n\n/**\n * Builder to create a stub List item\n * @param {Partial<Item>} partialListItem\n * @returns {Item}\n */\nexport function buildListItem(partialListItem: Partial<Item> = {}): Item {\n return {\n text: 'Javascript',\n value: 'javascript',\n ...partialListItem\n }\n}\n\n/**\n * @param {Partial<List>} partialList\n * @returns {List}\n */\nexport function buildList(partialList: Partial<List> = {}): List {\n return {\n title: 'Development language2',\n name: 'YhmNDD',\n type: 'string',\n items: [\n buildListItem({\n text: 'Javascript',\n value: 'javascript'\n }),\n buildListItem({\n text: 'TypeScript',\n value: 'typescript'\n }),\n buildListItem({\n text: 'Python',\n value: 'python'\n }),\n buildListItem({\n text: 'Haskell',\n value: 'haskell'\n }),\n buildListItem({\n text: 'Erlang',\n value: 'erlang'\n }),\n buildListItem({\n text: 'Java',\n value: 'java'\n })\n ],\n ...partialList\n }\n}\n\nexport function buildNumberFieldComponent(\n partialComponent: Partial<NumberFieldComponent>\n): NumberFieldComponent {\n return {\n name: 'year',\n title: 'Year',\n options: {},\n schema: {},\n ...partialComponent,\n type: ComponentType.NumberField\n }\n}\n\nexport function buildDateComponent(\n partialComponent: Partial<DatePartsFieldComponent>\n): DatePartsFieldComponent {\n return {\n name: 'bcdefg',\n title: 'Default title',\n options: {},\n ...partialComponent,\n type: ComponentType.DatePartsField\n }\n}\n\nexport function buildRadiosComponent(\n partialComponent: Partial<RadiosFieldComponent>\n): RadiosFieldComponent {\n return {\n name: 'cdefgh',\n title: 'Default title',\n options: {},\n list: 'Default list Id ref',\n ...partialComponent,\n type: ComponentType.RadiosField\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Builder to create a Form Definition
3
+ * @param {Partial<FormDefinition>} definitionPartial
4
+ * @returns {FormDefinition}
5
+ */
6
+ export function buildDefinition(definitionPartial = {}) {
7
+ const formDefinition = {
8
+ name: 'Test form',
9
+ pages: [],
10
+ conditions: [],
11
+ sections: [],
12
+ lists: []
13
+ };
14
+ return {
15
+ ...formDefinition,
16
+ ...definitionPartial
17
+ };
18
+ }
19
+
20
+ /**
21
+ *
22
+ * @param {Partial<FormMetadata>} partialMetaData
23
+ * @returns {FormMetadata}
24
+ */
25
+ export function buildMetaData(partialMetaData = {}) {
26
+ return {
27
+ id: '681b184463c68bf6b99e2c62',
28
+ slug: 'chemistry',
29
+ title: 'Chemistry',
30
+ organisation: 'Defra',
31
+ teamName: 'Forms Team',
32
+ teamEmail: 'name@example.gov.uk',
33
+ draft: {
34
+ createdAt: new Date('2025-05-07T08:22:28.035Z'),
35
+ createdBy: {
36
+ id: '84305e4e-1f52-43d0-a123-9c873b0abb35',
37
+ displayName: 'Internal User'
38
+ },
39
+ updatedAt: new Date('2025-05-20T13:00:54.794Z'),
40
+ updatedBy: {
41
+ id: '84305e4e-1f52-43d0-a123-9c873b0abb35',
42
+ displayName: 'Internal User'
43
+ }
44
+ },
45
+ createdBy: {
46
+ id: '84305e4e-1f52-43d0-a123-9c873b0abb35',
47
+ displayName: 'Internal User'
48
+ },
49
+ createdAt: new Date('2025-05-07T08:22:28.035Z'),
50
+ updatedBy: {
51
+ id: '84305e4e-1f52-43d0-a123-9c873b0abb35',
52
+ displayName: 'Internal User'
53
+ },
54
+ updatedAt: new Date('2025-05-20T13:00:54.794Z'),
55
+ ...partialMetaData
56
+ };
57
+ }
58
+ //# sourceMappingURL=form-definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-definition.js","names":["buildDefinition","definitionPartial","formDefinition","name","pages","conditions","sections","lists","buildMetaData","partialMetaData","id","slug","title","organisation","teamName","teamEmail","draft","createdAt","Date","createdBy","displayName","updatedAt","updatedBy"],"sources":["../../../src/__stubs__/form-definition.ts"],"sourcesContent":["import { type FormDefinition } from '~/src/form/form-definition/types.js'\nimport { type FormMetadata } from '~/src/form/form-metadata/types.js'\n\n/**\n * Builder to create a Form Definition\n * @param {Partial<FormDefinition>} definitionPartial\n * @returns {FormDefinition}\n */\nexport function buildDefinition(\n definitionPartial: Partial<FormDefinition> = {}\n): FormDefinition {\n const formDefinition: FormDefinition = {\n name: 'Test form',\n pages: [],\n conditions: [],\n sections: [],\n lists: []\n }\n return {\n ...formDefinition,\n ...definitionPartial\n }\n}\n\n/**\n *\n * @param {Partial<FormMetadata>} partialMetaData\n * @returns {FormMetadata}\n */\nexport function buildMetaData(\n partialMetaData: Partial<FormMetadata> = {}\n): FormMetadata {\n return {\n id: '681b184463c68bf6b99e2c62',\n slug: 'chemistry',\n title: 'Chemistry',\n organisation: 'Defra',\n teamName: 'Forms Team',\n teamEmail: 'name@example.gov.uk',\n draft: {\n createdAt: new Date('2025-05-07T08:22:28.035Z'),\n createdBy: {\n id: '84305e4e-1f52-43d0-a123-9c873b0abb35',\n displayName: 'Internal User'\n },\n updatedAt: new Date('2025-05-20T13:00:54.794Z'),\n updatedBy: {\n id: '84305e4e-1f52-43d0-a123-9c873b0abb35',\n displayName: 'Internal User'\n }\n },\n createdBy: {\n id: '84305e4e-1f52-43d0-a123-9c873b0abb35',\n displayName: 'Internal User'\n },\n createdAt: new Date('2025-05-07T08:22:28.035Z'),\n updatedBy: {\n id: '84305e4e-1f52-43d0-a123-9c873b0abb35',\n displayName: 'Internal User'\n },\n updatedAt: new Date('2025-05-20T13:00:54.794Z'),\n ...partialMetaData\n }\n}\n"],"mappings":"AAGA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,eAAeA,CAC7BC,iBAA0C,GAAG,CAAC,CAAC,EAC/B;EAChB,MAAMC,cAA8B,GAAG;IACrCC,IAAI,EAAE,WAAW;IACjBC,KAAK,EAAE,EAAE;IACTC,UAAU,EAAE,EAAE;IACdC,QAAQ,EAAE,EAAE;IACZC,KAAK,EAAE;EACT,CAAC;EACD,OAAO;IACL,GAAGL,cAAc;IACjB,GAAGD;EACL,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASO,aAAaA,CAC3BC,eAAsC,GAAG,CAAC,CAAC,EAC7B;EACd,OAAO;IACLC,EAAE,EAAE,0BAA0B;IAC9BC,IAAI,EAAE,WAAW;IACjBC,KAAK,EAAE,WAAW;IAClBC,YAAY,EAAE,OAAO;IACrBC,QAAQ,EAAE,YAAY;IACtBC,SAAS,EAAE,qBAAqB;IAChCC,KAAK,EAAE;MACLC,SAAS,EAAE,IAAIC,IAAI,CAAC,0BAA0B,CAAC;MAC/CC,SAAS,EAAE;QACTT,EAAE,EAAE,sCAAsC;QAC1CU,WAAW,EAAE;MACf,CAAC;MACDC,SAAS,EAAE,IAAIH,IAAI,CAAC,0BAA0B,CAAC;MAC/CI,SAAS,EAAE;QACTZ,EAAE,EAAE,sCAAsC;QAC1CU,WAAW,EAAE;MACf;IACF,CAAC;IACDD,SAAS,EAAE;MACTT,EAAE,EAAE,sCAAsC;MAC1CU,WAAW,EAAE;IACf,CAAC;IACDH,SAAS,EAAE,IAAIC,IAAI,CAAC,0BAA0B,CAAC;IAC/CI,SAAS,EAAE;MACTZ,EAAE,EAAE,sCAAsC;MAC1CU,WAAW,EAAE;IACf,CAAC;IACDC,SAAS,EAAE,IAAIH,IAAI,CAAC,0BAA0B,CAAC;IAC/C,GAAGT;EACL,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,107 @@
1
+ import { buildFileUploadComponent } from "./components.js";
2
+ import { ComponentType } from "../components/enums.js";
3
+ import { ControllerPath, ControllerType } from "../pages/enums.js";
4
+
5
+ /**
6
+ * Stub builder for a question page
7
+ * @param {Partial<PageQuestion>} [partialPage]
8
+ * @returns {PageQuestion}
9
+ */
10
+ export function buildQuestionPage(partialPage) {
11
+ return {
12
+ id: 'ffefd409-f3f4-49fe-882e-6e89f44631b1',
13
+ title: 'Page One',
14
+ path: '/page-one',
15
+ next: [],
16
+ components: [],
17
+ ...partialPage
18
+ };
19
+ }
20
+
21
+ /**
22
+ * Stub builder for a Summary page
23
+ * @param {Partial<PageSummary>} [partialSummaryPage]
24
+ */
25
+ export function buildSummaryPage(partialSummaryPage = {}) {
26
+ const pageSummary = {
27
+ id: '449a45f6-4541-4a46-91bd-8b8931b07b50',
28
+ title: 'Summary page',
29
+ path: ControllerPath.Summary,
30
+ controller: ControllerType.Summary
31
+ };
32
+ return {
33
+ ...pageSummary,
34
+ ...partialSummaryPage
35
+ };
36
+ }
37
+
38
+ /**
39
+ *
40
+ * @param {Partial<PageFileUpload>} partialFileUploadPage
41
+ * @returns {PageFileUpload}
42
+ */
43
+ export function buildFileUploadPage(partialFileUploadPage = {}) {
44
+ const fileUploadPage = {
45
+ id: '85e5c8da-88f5-4009-a821-7d7de1364318',
46
+ title: '',
47
+ path: '/supporting-evidence',
48
+ components: [buildFileUploadComponent({
49
+ type: ComponentType.FileUploadField,
50
+ title: 'Supporting Evidence',
51
+ name: 'yBpZQO',
52
+ shortDescription: 'Supporting evidence',
53
+ hint: '',
54
+ options: {
55
+ required: true,
56
+ accept: 'application/pdf,application/msword,image/jpeg,application/vnd.ms-excel,text/csv'
57
+ },
58
+ id: '4189b8a1-1a04-4f74-a7a0-dd23012a0ee0'
59
+ })],
60
+ controller: ControllerType.FileUpload,
61
+ next: []
62
+ };
63
+ return {
64
+ ...fileUploadPage,
65
+ ...partialFileUploadPage
66
+ };
67
+ }
68
+
69
+ /**
70
+ *
71
+ * @param {Partial<PageRepeat>} partialRepeaterPage
72
+ * @returns {PageRepeat}
73
+ */
74
+ export function buildRepeaterPage(partialRepeaterPage = {}) {
75
+ const repeaterPage = {
76
+ title: 'Repeater Page',
77
+ path: '/repeater-page',
78
+ components: [{
79
+ type: ComponentType.TextField,
80
+ title: 'Simple text field',
81
+ name: 'IHAIzC',
82
+ shortDescription: 'Your simple text field',
83
+ hint: '',
84
+ options: {},
85
+ schema: {},
86
+ id: 'ee83413e-31b6-4158-98e0-4611479582ce'
87
+ }],
88
+ next: [],
89
+ id: '32888028-61db-40fc-b255-80bc67829d31',
90
+ controller: ControllerType.Repeat,
91
+ repeat: {
92
+ options: {
93
+ name: 'fawfed',
94
+ title: 'Simple question responses'
95
+ },
96
+ schema: {
97
+ min: 1,
98
+ max: 3
99
+ }
100
+ }
101
+ };
102
+ return {
103
+ ...repeaterPage,
104
+ ...partialRepeaterPage
105
+ };
106
+ }
107
+ //# sourceMappingURL=pages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages.js","names":["buildFileUploadComponent","ComponentType","ControllerPath","ControllerType","buildQuestionPage","partialPage","id","title","path","next","components","buildSummaryPage","partialSummaryPage","pageSummary","Summary","controller","buildFileUploadPage","partialFileUploadPage","fileUploadPage","type","FileUploadField","name","shortDescription","hint","options","required","accept","FileUpload","buildRepeaterPage","partialRepeaterPage","repeaterPage","TextField","schema","Repeat","repeat","min","max"],"sources":["../../../src/__stubs__/pages.ts"],"sourcesContent":["import { buildFileUploadComponent } from '~/src/__stubs__/components.js'\nimport { ComponentType } from '~/src/components/enums.js'\nimport {\n type PageFileUpload,\n type PageQuestion,\n type PageRepeat,\n type PageSummary\n} from '~/src/form/form-definition/types.js'\nimport { ControllerPath, ControllerType } from '~/src/pages/enums.js'\n\n/**\n * Stub builder for a question page\n * @param {Partial<PageQuestion>} [partialPage]\n * @returns {PageQuestion}\n */\nexport function buildQuestionPage(\n partialPage: Partial<PageQuestion>\n): PageQuestion {\n return {\n id: 'ffefd409-f3f4-49fe-882e-6e89f44631b1',\n title: 'Page One',\n path: '/page-one',\n next: [],\n components: [],\n ...partialPage\n }\n}\n\n/**\n * Stub builder for a Summary page\n * @param {Partial<PageSummary>} [partialSummaryPage]\n */\nexport function buildSummaryPage(\n partialSummaryPage: Partial<PageSummary> = {}\n): PageSummary {\n const pageSummary: PageSummary = {\n id: '449a45f6-4541-4a46-91bd-8b8931b07b50',\n title: 'Summary page',\n path: ControllerPath.Summary,\n controller: ControllerType.Summary\n }\n return { ...pageSummary, ...partialSummaryPage }\n}\n\n/**\n *\n * @param {Partial<PageFileUpload>} partialFileUploadPage\n * @returns {PageFileUpload}\n */\nexport function buildFileUploadPage(\n partialFileUploadPage: Partial<PageFileUpload> = {}\n): PageFileUpload {\n const fileUploadPage: PageFileUpload = {\n id: '85e5c8da-88f5-4009-a821-7d7de1364318',\n title: '',\n path: '/supporting-evidence',\n components: [\n buildFileUploadComponent({\n type: ComponentType.FileUploadField,\n title: 'Supporting Evidence',\n name: 'yBpZQO',\n shortDescription: 'Supporting evidence',\n hint: '',\n options: {\n required: true,\n accept:\n 'application/pdf,application/msword,image/jpeg,application/vnd.ms-excel,text/csv'\n },\n id: '4189b8a1-1a04-4f74-a7a0-dd23012a0ee0'\n })\n ],\n controller: ControllerType.FileUpload,\n next: []\n }\n\n return {\n ...fileUploadPage,\n ...partialFileUploadPage\n }\n}\n\n/**\n *\n * @param {Partial<PageRepeat>} partialRepeaterPage\n * @returns {PageRepeat}\n */\nexport function buildRepeaterPage(\n partialRepeaterPage: Partial<PageRepeat> = {}\n): PageRepeat {\n const repeaterPage: PageRepeat = {\n title: 'Repeater Page',\n path: '/repeater-page',\n components: [\n {\n type: ComponentType.TextField,\n title: 'Simple text field',\n name: 'IHAIzC',\n shortDescription: 'Your simple text field',\n hint: '',\n options: {},\n schema: {},\n id: 'ee83413e-31b6-4158-98e0-4611479582ce'\n }\n ],\n next: [],\n id: '32888028-61db-40fc-b255-80bc67829d31',\n controller: ControllerType.Repeat,\n repeat: {\n options: { name: 'fawfed', title: 'Simple question responses' },\n schema: { min: 1, max: 3 }\n }\n }\n\n return {\n ...repeaterPage,\n ...partialRepeaterPage\n }\n}\n"],"mappings":"AAAA,SAASA,wBAAwB;AACjC,SAASC,aAAa;AAOtB,SAASC,cAAc,EAAEC,cAAc;;AAEvC;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,iBAAiBA,CAC/BC,WAAkC,EACpB;EACd,OAAO;IACLC,EAAE,EAAE,sCAAsC;IAC1CC,KAAK,EAAE,UAAU;IACjBC,IAAI,EAAE,WAAW;IACjBC,IAAI,EAAE,EAAE;IACRC,UAAU,EAAE,EAAE;IACd,GAAGL;EACL,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASM,gBAAgBA,CAC9BC,kBAAwC,GAAG,CAAC,CAAC,EAChC;EACb,MAAMC,WAAwB,GAAG;IAC/BP,EAAE,EAAE,sCAAsC;IAC1CC,KAAK,EAAE,cAAc;IACrBC,IAAI,EAAEN,cAAc,CAACY,OAAO;IAC5BC,UAAU,EAAEZ,cAAc,CAACW;EAC7B,CAAC;EACD,OAAO;IAAE,GAAGD,WAAW;IAAE,GAAGD;EAAmB,CAAC;AAClD;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASI,mBAAmBA,CACjCC,qBAA8C,GAAG,CAAC,CAAC,EACnC;EAChB,MAAMC,cAA8B,GAAG;IACrCZ,EAAE,EAAE,sCAAsC;IAC1CC,KAAK,EAAE,EAAE;IACTC,IAAI,EAAE,sBAAsB;IAC5BE,UAAU,EAAE,CACVV,wBAAwB,CAAC;MACvBmB,IAAI,EAAElB,aAAa,CAACmB,eAAe;MACnCb,KAAK,EAAE,qBAAqB;MAC5Bc,IAAI,EAAE,QAAQ;MACdC,gBAAgB,EAAE,qBAAqB;MACvCC,IAAI,EAAE,EAAE;MACRC,OAAO,EAAE;QACPC,QAAQ,EAAE,IAAI;QACdC,MAAM,EACJ;MACJ,CAAC;MACDpB,EAAE,EAAE;IACN,CAAC,CAAC,CACH;IACDS,UAAU,EAAEZ,cAAc,CAACwB,UAAU;IACrClB,IAAI,EAAE;EACR,CAAC;EAED,OAAO;IACL,GAAGS,cAAc;IACjB,GAAGD;EACL,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASW,iBAAiBA,CAC/BC,mBAAwC,GAAG,CAAC,CAAC,EACjC;EACZ,MAAMC,YAAwB,GAAG;IAC/BvB,KAAK,EAAE,eAAe;IACtBC,IAAI,EAAE,gBAAgB;IACtBE,UAAU,EAAE,CACV;MACES,IAAI,EAAElB,aAAa,CAAC8B,SAAS;MAC7BxB,KAAK,EAAE,mBAAmB;MAC1Bc,IAAI,EAAE,QAAQ;MACdC,gBAAgB,EAAE,wBAAwB;MAC1CC,IAAI,EAAE,EAAE;MACRC,OAAO,EAAE,CAAC,CAAC;MACXQ,MAAM,EAAE,CAAC,CAAC;MACV1B,EAAE,EAAE;IACN,CAAC,CACF;IACDG,IAAI,EAAE,EAAE;IACRH,EAAE,EAAE,sCAAsC;IAC1CS,UAAU,EAAEZ,cAAc,CAAC8B,MAAM;IACjCC,MAAM,EAAE;MACNV,OAAO,EAAE;QAAEH,IAAI,EAAE,QAAQ;QAAEd,KAAK,EAAE;MAA4B,CAAC;MAC/DyB,MAAM,EAAE;QAAEG,GAAG,EAAE,CAAC;QAAEC,GAAG,EAAE;MAAE;IAC3B;EACF,CAAC;EAED,OAAO;IACL,GAAGN,YAAY;IACf,GAAGD;EACL,CAAC;AACH","ignoreList":[]}
@@ -253,5 +253,5 @@ export function govukFieldIsQuestionOptional(govukField) {
253
253
  }
254
254
 
255
255
  // A list of allowed template funtions for use within error message templates
256
- export const allowedErrorTemplateFunctions = ['lowerFirst'];
256
+ export const allowedErrorTemplateFunctions = ['lowerFirst', 'capitalise'];
257
257
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["Joi","ComponentType","QuestionTypeSubGroup","pageTypeSchema","string","required","valid","description","questionTypeSchema","WrittenAnswerSubGroup","DateSubGroup","UkAddressField","TelephoneNumberField","FileUploadField","EmailAddressField","ListSubGroup","YesNoField","CheckboxesField","RadiosField","AutocompleteField","questionTypeFullSchema","TextField","MultilineTextField","NumberField","DatePartsField","MonthYearField","writtenAnswerSubSchema","dateSubSchema","listSubSchema","nameSchema","trim","questionSchema","hintTextSchema","optional","allow","questionOptionalSchema","listForQuestionSchema","listItemCountSchema","number","listItemsDataSchema","exactFilesSchema","empty","integer","min","max","minFilesSchema","maxFilesSchema","fileTypesSchema","array","items","single","default","documentTypesSchema","imageTypesSchema","tabularDataTypesSchema","enhancedActionSchema","radioIdSchema","radioTextSchema","radioHintSchema","radioValueSchema","shortDescriptionSchema","pageHeadingAndGuidanceSchema","pageHeadingSchema","guidanceTextSchema","repeaterSchema","minItemsSchema","maxItemsSchema","questionSetNameSchema","needDeclarationSchema","declarationTextSchema","minSchema","maxSchema","minLengthSchema","maxLengthSchema","maxFutureSchema","maxPastSchema","precisionSchema","prefixSchema","regexSchema","rowsSchema","suffixSchema","classesSchema","jsEnabledSchema","customValidator","extend","joi","type","base","messages","coerce","from","method","value","helpers","rowSeparatorRule","schema","$_getRule","colSeparatorRule","keysRule","rowSeparator","args","rows","split","map","v","filter","Boolean","colSeparator","keys","coercedValue","row","reduce","acc","col","idx","_err","console","error","errors","rules","convert","alias","$_addRule","name","ref","assert","RegExp","message","Array","isArray","every","k","autoCompleteOptionsSchema","dsv","object","text","disallow","parent","unique","ignoreUndefined","questionDetailsFullSchema","formEditorInputPageKeys","pageType","questionType","formEditorInputPageSchema","formEditorInputheckAnswersSettingsKeys","declarationText","formEditorInputCheckAnswersSettingSchema","formEditorInputQuestionKeys","question","shortDescription","hintText","questionOptional","formEditorInputQuestionSchema","formEditorInputPageSettingsKeys","pageHeadingAndGuidance","pageHeading","guidanceText","formEditorInputPageSettingsSchema","govukFieldValueIsString","govukField","includes","govukFieldIsQuestionOptional","checkedValue","checked","allowedErrorTemplateFunctions"],"sources":["../../../../src/form/form-editor/index.ts"],"sourcesContent":["import Joi, { type ArraySchema, type GetRuleOptions } from 'joi'\n\nimport { ComponentType } from '~/src/components/enums.js'\nimport {\n type FormEditorInputCheckAnswersSettings,\n type FormEditorInputPage,\n type FormEditorInputPageSettings,\n type FormEditorInputQuestion,\n type GovukField,\n type GovukFieldQuestionOptional,\n type GovukStringField\n} from '~/src/form/form-editor/types.js'\n\nexport enum QuestionTypeSubGroup {\n WrittenAnswerSubGroup = 'writtenAnswerSub',\n DateSubGroup = 'dateSub',\n ListSubGroup = 'listSub'\n}\n\nexport const pageTypeSchema = Joi.string()\n .required()\n .valid('question', 'guidance')\n .description('Type of page - either a question page or guidance page')\n\nexport const questionTypeSchema = Joi.string()\n .required()\n .valid(\n QuestionTypeSubGroup.WrittenAnswerSubGroup,\n QuestionTypeSubGroup.DateSubGroup,\n ComponentType.UkAddressField,\n ComponentType.TelephoneNumberField,\n ComponentType.FileUploadField,\n ComponentType.EmailAddressField,\n QuestionTypeSubGroup.ListSubGroup,\n ComponentType.YesNoField,\n ComponentType.CheckboxesField,\n ComponentType.RadiosField,\n ComponentType.AutocompleteField\n )\n .description('The high-level type of question, including grouped types')\n\nexport const questionTypeFullSchema = Joi.string()\n .required()\n .valid(\n ComponentType.TextField,\n ComponentType.MultilineTextField,\n ComponentType.NumberField,\n ComponentType.DatePartsField,\n ComponentType.MonthYearField,\n ComponentType.UkAddressField,\n ComponentType.TelephoneNumberField,\n ComponentType.FileUploadField,\n ComponentType.EmailAddressField,\n ComponentType.YesNoField,\n ComponentType.CheckboxesField,\n ComponentType.RadiosField,\n ComponentType.AutocompleteField\n )\n .description('The specific component type to use for this question')\n\nexport const writtenAnswerSubSchema = Joi.string()\n .required()\n .valid(\n ComponentType.TextField,\n ComponentType.MultilineTextField,\n ComponentType.NumberField\n )\n .description('Subtype for written answer questions')\n\nexport const dateSubSchema = Joi.string()\n .required()\n .valid(ComponentType.DatePartsField, ComponentType.MonthYearField)\nexport const listSubSchema = Joi.string()\n .required()\n .valid(\n ComponentType.YesNoField,\n ComponentType.CheckboxesField,\n ComponentType.RadiosField,\n ComponentType.AutocompleteField\n )\n .description('Subtype for date-related questions')\n\nexport const nameSchema = Joi.string()\n .trim()\n .required()\n .description('Unique identifier for the field')\n\nexport const questionSchema = Joi.string()\n .trim()\n .required()\n .description('The question text displayed to the user')\n\nexport const hintTextSchema = Joi.string()\n .trim()\n .optional()\n .allow('')\n .description('Optional guidance text displayed below the question')\n\nexport const questionOptionalSchema = Joi.string()\n .trim()\n .optional()\n .valid('', 'true')\n .description(\n 'Indicates whether a question is optional. Empty string or \"true\" values are accepted.'\n )\n\nexport const listForQuestionSchema = Joi.string()\n .trim()\n .optional()\n .allow('')\n .description('Unique identifier for the list used by the field')\n\nexport const listItemCountSchema = Joi.number()\n .optional()\n .description('Number of list items in the list used by the field')\n\nexport const listItemsDataSchema = Joi.string()\n .allow('')\n .description('List items in JSON format, such as for radios or checkboxes.')\n\nexport const exactFilesSchema = Joi.number()\n .empty('')\n .integer()\n .min(1)\n .max(25)\n .description(\n 'Specifies the exact number of files required for upload. Must be between 1 and 25.'\n )\n\nexport const minFilesSchema = Joi.number()\n .empty('')\n .integer()\n .min(1)\n .max(25)\n .description(\n 'Minimum number of files required for upload. Must be between 1 and 25.'\n )\n\nexport const maxFilesSchema = Joi.number()\n .empty('')\n .integer()\n .min(1)\n .max(25)\n .description(\n 'Maximum number of files allowed for upload. Must be between 1 and 25.'\n )\n\nexport const fileTypesSchema = Joi.array()\n .items(Joi.string())\n .single()\n .empty(null)\n .default([])\n .description(\n 'Array of allowed file types. Can be provided as a single value or an array.'\n )\n\nexport const documentTypesSchema = Joi.array()\n .items(Joi.string())\n .single()\n .empty(null)\n .default([])\n .description(\n 'Array of allowed document types. Can be provided as a single value or an array.'\n )\n\nexport const imageTypesSchema = Joi.array()\n .items(Joi.string())\n .single()\n .empty(null)\n .default([])\n .description(\n 'Array of allowed image types. Can be provided as a single value or an array.'\n )\n\nexport const tabularDataTypesSchema = Joi.array()\n .items(Joi.string())\n .single()\n .empty(null)\n .default([])\n\nexport const enhancedActionSchema = Joi.string()\n .trim()\n .optional()\n .allow('')\n .description('Action field that can include enhanced functionality')\n\nexport const radioIdSchema = Joi.string()\n .trim()\n .optional()\n .allow('')\n .description('Unique identifier for radio options')\n\nexport const radioTextSchema = Joi.string()\n .trim()\n .required()\n .description('The visible text shown next to radio options')\n\nexport const radioHintSchema = Joi.string()\n .trim()\n .optional()\n .allow('')\n .description(\n 'Optional hint text displayed with radio buttons to provide additional guidance'\n )\n\nexport const radioValueSchema = Joi.string()\n .trim()\n .optional()\n .allow('')\n .description(\n 'Array of allowed tabular data types. Can be provided as a single value or an array.'\n )\n\nexport const shortDescriptionSchema = Joi.string()\n .trim()\n .required()\n .description('Brief description of the question for internal use')\n\nexport const pageHeadingAndGuidanceSchema = Joi.string()\n .trim()\n .optional()\n .description('Combined heading and guidance for the page')\n\nexport const pageHeadingSchema = Joi.string()\n .trim()\n .required()\n .description('Main heading displayed at the top of the page')\n\nexport const guidanceTextSchema = Joi.string()\n .trim()\n .description('Guidance text to assist users in completing the page')\n\nexport const repeaterSchema = Joi.string()\n .trim()\n .optional()\n .description(\n 'Combined min/max items and question set name for the repeater page'\n )\n\nexport const minItemsSchema = Joi.number()\n .empty('')\n .min(1)\n .description('The minimum number of repeater items')\n\nexport const maxItemsSchema = Joi.number()\n .empty('')\n .max(25)\n .description('The maximum number of repeater items')\n\nexport const questionSetNameSchema = Joi.string()\n .trim()\n .description('The repeater question set name')\n\nexport const needDeclarationSchema = Joi.string()\n .trim()\n .required()\n .description('Whether a declaration is needed')\n\nexport const declarationTextSchema = Joi.string()\n .trim()\n .required()\n .description('Text of the declaration that users must agree to')\n\nexport const minSchema = Joi.number()\n .empty('')\n .integer()\n .description('Minimum value for numeric inputs')\n\nexport const maxSchema = Joi.number()\n .empty('')\n .integer()\n .description('Maximum value for numeric inputs')\n\nexport const minLengthSchema = Joi.number()\n .empty('')\n .integer()\n .min(1)\n .description('Minimum character length for text inputs')\n\nexport const maxLengthSchema = Joi.number()\n .empty('')\n .integer()\n .min(1)\n .description('Maximum character length for text inputs')\n\nexport const maxFutureSchema = Joi.number()\n .empty('')\n .integer()\n .min(0)\n .description('Maximum days in the future allowed for date inputs')\n\nexport const maxPastSchema = Joi.number()\n .empty('')\n .integer()\n .min(0)\n .description('Maximum days in the past allowed for date inputs')\n\nexport const precisionSchema = Joi.number()\n .empty('')\n .integer()\n .min(0)\n .description('Decimal precision for numeric inputs')\n\nexport const prefixSchema = Joi.string()\n .trim()\n .optional()\n .allow('')\n .description('Text to display before the input (e.g., £)')\n\nexport const regexSchema = Joi.string()\n .optional()\n .allow('')\n .description('Regular expression pattern for validation')\n\nexport const rowsSchema = Joi.number()\n .empty('')\n .integer()\n .min(1)\n .description('Number of rows for multiline text fields')\n\nexport const suffixSchema = Joi.string()\n .trim()\n .optional()\n .allow('')\n .description('Text to display after the input (e.g., kg)')\n\nexport const classesSchema = Joi.string()\n .trim()\n .optional()\n .allow('')\n .description('Custom CSS classes to apply to the component')\n\nexport const jsEnabledSchema = Joi.string()\n .trim()\n .optional()\n .allow('false', 'true')\n .description('Flag to show if Javascript is enabled or not')\n\ntype GenericRuleOptions<K extends string, T> = Omit<GetRuleOptions, 'args'> & {\n args: Record<K, T>\n}\n\ninterface DSLSchema<TSchema = Record<string, unknown>[]>\n extends ArraySchema<TSchema> {\n rowSeparator: (rowSep: string | RegExp) => DSLSchema<TSchema>\n row: (rowSep: string | RegExp) => DSLSchema<TSchema>\n colSeparator: (colSep: string | RegExp) => DSLSchema<TSchema>\n col: (colSep: string | RegExp) => DSLSchema<TSchema>\n keys: (keys: string[]) => DSLSchema<TSchema>\n}\n\ninterface CustomValidator extends Joi.Root {\n dsv<TSchema>(): DSLSchema<TSchema>\n}\n\nexport const customValidator = Joi.extend((joi: Joi.Root) => {\n return {\n type: 'dsv',\n base: joi.array(),\n messages: {\n 'dsv.invalid': 'Invalid parse string'\n },\n coerce: {\n from: 'string',\n method(value: string, helpers) {\n try {\n // Only called when prefs.convert is true\n // Rules\n const rowSeparatorRule = helpers.schema.$_getRule('rowSeparator') as\n | undefined\n | GenericRuleOptions<'rowSeparator', string | RegExp>\n const colSeparatorRule = helpers.schema.$_getRule('colSeparator') as\n | undefined\n | GenericRuleOptions<'colSeparator', string | RegExp>\n const keysRule = helpers.schema.$_getRule('keys') as\n | undefined\n | GenericRuleOptions<'keys', string[]>\n\n // Rows\n const rowSeparator = rowSeparatorRule?.args.rowSeparator ?? /\\r?\\n/\n const rows = value\n .split(rowSeparator)\n .map((v) => v.trim())\n .filter(Boolean)\n\n // Columns\n const colSeparator = colSeparatorRule?.args.colSeparator ?? ','\n const keys = keysRule?.args.keys ?? ['key', 'value']\n\n const coercedValue = rows.map((row) => {\n return row\n .split(colSeparator)\n .reduce<Record<string, string>>((acc, col, idx) => {\n return {\n ...acc,\n [keys[idx]]: col.trim()\n }\n }, {})\n })\n return { value: coercedValue }\n } catch (_err) {\n // eslint-disable-next-line no-console\n console.error(_err)\n return { value, errors: [helpers.error('dsv.invalid')] }\n }\n }\n },\n rules: {\n rowSeparator: {\n convert: true,\n alias: 'row',\n method(rowSeparator: string) {\n return this.$_addRule({\n name: 'rowSeparator',\n args: { rowSeparator }\n })\n },\n args: [\n {\n name: 'rowSeparator',\n ref: true,\n assert: (value) =>\n typeof value === 'string' || value instanceof RegExp,\n message: 'must be a string or regex'\n }\n ]\n },\n colSeparator: {\n convert: true,\n alias: 'col',\n method(colSeparator: string) {\n return this.$_addRule({\n name: 'colSeparator',\n args: { colSeparator }\n })\n },\n args: [\n {\n name: 'colSeparator',\n ref: true,\n assert: (value) =>\n typeof value === 'string' || value instanceof RegExp,\n message: 'must be a string or regex'\n }\n ]\n },\n keys: {\n convert: true,\n method(keys: string[]) {\n return this.$_addRule({ name: 'keys', args: { keys } })\n },\n args: [\n {\n name: 'keys',\n ref: true,\n assert: (value) =>\n Array.isArray(value) && value.every((k) => typeof k === 'string'),\n message: 'must be an array of strings'\n }\n ]\n }\n }\n }\n}) as CustomValidator\n\nexport const autoCompleteOptionsSchema = customValidator\n .dsv<{ text: string; value: string }[]>()\n .row(/\\r?\\n/)\n .col(':')\n .keys(['text', 'value'])\n .items(\n customValidator.object({\n text: customValidator.string().min(1).disallow('').required(),\n value: customValidator\n .string()\n .default((parent: { text: string; value?: string }) => parent.text)\n .min(1)\n .disallow('')\n })\n )\n .min(1)\n .unique('text')\n .unique('value', { ignoreUndefined: true })\n .required()\n\nexport const questionDetailsFullSchema = {\n autoCompleteOptionsSchema,\n classesSchema,\n documentTypesSchema,\n enhancedActionSchema,\n exactFilesSchema,\n fileTypesSchema,\n hintTextSchema,\n imageTypesSchema,\n jsEnabledSchema,\n listForQuestionSchema,\n listItemCountSchema,\n listItemsDataSchema,\n maxFilesSchema,\n maxFutureSchema,\n maxLengthSchema,\n maxPastSchema,\n maxSchema,\n minFilesSchema,\n minLengthSchema,\n minSchema,\n nameSchema,\n precisionSchema,\n prefixSchema,\n questionOptionalSchema,\n questionSchema,\n questionTypeFullSchema,\n radioHintSchema,\n radioIdSchema,\n radioTextSchema,\n radioValueSchema,\n regexSchema,\n rowsSchema,\n shortDescriptionSchema,\n suffixSchema,\n tabularDataTypesSchema\n}\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 .description('Input schema for creating a new page in the form editor')\n\nexport const formEditorInputheckAnswersSettingsKeys = {\n declarationText: shortDescriptionSchema\n}\n\n/**\n * Joi schema for `FormEditorInputCheckAnswersSettings` interface\n * @see {@link FormEditorInputCheckAnswersSettings}\n */\nexport const formEditorInputCheckAnswersSettingSchema =\n Joi.object<FormEditorInputCheckAnswersSettings>()\n .keys(formEditorInputheckAnswersSettingsKeys)\n .required()\n .description('Configuration for the check-answers page')\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 .description(\n 'Input schema for creating or updating a question in the form editor'\n )\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 .description('Settings for page content and display in the form editor')\n\nexport function govukFieldValueIsString(\n govukField: GovukField\n): govukField is GovukStringField {\n return [\n 'question',\n 'hintText',\n 'shortDescription',\n 'autoCompleteOptions'\n ].includes(`${govukField.name}`)\n}\n\nexport function govukFieldIsQuestionOptional(\n govukField: GovukField\n): govukField is GovukFieldQuestionOptional {\n if (govukField.name !== 'questionOptional') {\n return false\n }\n const checkedValue = govukField.items?.[0].checked\n return typeof checkedValue === 'boolean'\n}\n\n// A list of allowed template funtions for use within error message templates\nexport const allowedErrorTemplateFunctions = ['lowerFirst']\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["Joi","ComponentType","QuestionTypeSubGroup","pageTypeSchema","string","required","valid","description","questionTypeSchema","WrittenAnswerSubGroup","DateSubGroup","UkAddressField","TelephoneNumberField","FileUploadField","EmailAddressField","ListSubGroup","YesNoField","CheckboxesField","RadiosField","AutocompleteField","questionTypeFullSchema","TextField","MultilineTextField","NumberField","DatePartsField","MonthYearField","writtenAnswerSubSchema","dateSubSchema","listSubSchema","nameSchema","trim","questionSchema","hintTextSchema","optional","allow","questionOptionalSchema","listForQuestionSchema","listItemCountSchema","number","listItemsDataSchema","exactFilesSchema","empty","integer","min","max","minFilesSchema","maxFilesSchema","fileTypesSchema","array","items","single","default","documentTypesSchema","imageTypesSchema","tabularDataTypesSchema","enhancedActionSchema","radioIdSchema","radioTextSchema","radioHintSchema","radioValueSchema","shortDescriptionSchema","pageHeadingAndGuidanceSchema","pageHeadingSchema","guidanceTextSchema","repeaterSchema","minItemsSchema","maxItemsSchema","questionSetNameSchema","needDeclarationSchema","declarationTextSchema","minSchema","maxSchema","minLengthSchema","maxLengthSchema","maxFutureSchema","maxPastSchema","precisionSchema","prefixSchema","regexSchema","rowsSchema","suffixSchema","classesSchema","jsEnabledSchema","customValidator","extend","joi","type","base","messages","coerce","from","method","value","helpers","rowSeparatorRule","schema","$_getRule","colSeparatorRule","keysRule","rowSeparator","args","rows","split","map","v","filter","Boolean","colSeparator","keys","coercedValue","row","reduce","acc","col","idx","_err","console","error","errors","rules","convert","alias","$_addRule","name","ref","assert","RegExp","message","Array","isArray","every","k","autoCompleteOptionsSchema","dsv","object","text","disallow","parent","unique","ignoreUndefined","questionDetailsFullSchema","formEditorInputPageKeys","pageType","questionType","formEditorInputPageSchema","formEditorInputheckAnswersSettingsKeys","declarationText","formEditorInputCheckAnswersSettingSchema","formEditorInputQuestionKeys","question","shortDescription","hintText","questionOptional","formEditorInputQuestionSchema","formEditorInputPageSettingsKeys","pageHeadingAndGuidance","pageHeading","guidanceText","formEditorInputPageSettingsSchema","govukFieldValueIsString","govukField","includes","govukFieldIsQuestionOptional","checkedValue","checked","allowedErrorTemplateFunctions"],"sources":["../../../../src/form/form-editor/index.ts"],"sourcesContent":["import Joi, { type ArraySchema, type GetRuleOptions } from 'joi'\n\nimport { ComponentType } from '~/src/components/enums.js'\nimport {\n type FormEditorInputCheckAnswersSettings,\n type FormEditorInputPage,\n type FormEditorInputPageSettings,\n type FormEditorInputQuestion,\n type GovukField,\n type GovukFieldQuestionOptional,\n type GovukStringField\n} from '~/src/form/form-editor/types.js'\n\nexport enum QuestionTypeSubGroup {\n WrittenAnswerSubGroup = 'writtenAnswerSub',\n DateSubGroup = 'dateSub',\n ListSubGroup = 'listSub'\n}\n\nexport const pageTypeSchema = Joi.string()\n .required()\n .valid('question', 'guidance')\n .description('Type of page - either a question page or guidance page')\n\nexport const questionTypeSchema = Joi.string()\n .required()\n .valid(\n QuestionTypeSubGroup.WrittenAnswerSubGroup,\n QuestionTypeSubGroup.DateSubGroup,\n ComponentType.UkAddressField,\n ComponentType.TelephoneNumberField,\n ComponentType.FileUploadField,\n ComponentType.EmailAddressField,\n QuestionTypeSubGroup.ListSubGroup,\n ComponentType.YesNoField,\n ComponentType.CheckboxesField,\n ComponentType.RadiosField,\n ComponentType.AutocompleteField\n )\n .description('The high-level type of question, including grouped types')\n\nexport const questionTypeFullSchema = Joi.string()\n .required()\n .valid(\n ComponentType.TextField,\n ComponentType.MultilineTextField,\n ComponentType.NumberField,\n ComponentType.DatePartsField,\n ComponentType.MonthYearField,\n ComponentType.UkAddressField,\n ComponentType.TelephoneNumberField,\n ComponentType.FileUploadField,\n ComponentType.EmailAddressField,\n ComponentType.YesNoField,\n ComponentType.CheckboxesField,\n ComponentType.RadiosField,\n ComponentType.AutocompleteField\n )\n .description('The specific component type to use for this question')\n\nexport const writtenAnswerSubSchema = Joi.string()\n .required()\n .valid(\n ComponentType.TextField,\n ComponentType.MultilineTextField,\n ComponentType.NumberField\n )\n .description('Subtype for written answer questions')\n\nexport const dateSubSchema = Joi.string()\n .required()\n .valid(ComponentType.DatePartsField, ComponentType.MonthYearField)\nexport const listSubSchema = Joi.string()\n .required()\n .valid(\n ComponentType.YesNoField,\n ComponentType.CheckboxesField,\n ComponentType.RadiosField,\n ComponentType.AutocompleteField\n )\n .description('Subtype for date-related questions')\n\nexport const nameSchema = Joi.string()\n .trim()\n .required()\n .description('Unique identifier for the field')\n\nexport const questionSchema = Joi.string()\n .trim()\n .required()\n .description('The question text displayed to the user')\n\nexport const hintTextSchema = Joi.string()\n .trim()\n .optional()\n .allow('')\n .description('Optional guidance text displayed below the question')\n\nexport const questionOptionalSchema = Joi.string()\n .trim()\n .optional()\n .valid('', 'true')\n .description(\n 'Indicates whether a question is optional. Empty string or \"true\" values are accepted.'\n )\n\nexport const listForQuestionSchema = Joi.string()\n .trim()\n .optional()\n .allow('')\n .description('Unique identifier for the list used by the field')\n\nexport const listItemCountSchema = Joi.number()\n .optional()\n .description('Number of list items in the list used by the field')\n\nexport const listItemsDataSchema = Joi.string()\n .allow('')\n .description('List items in JSON format, such as for radios or checkboxes.')\n\nexport const exactFilesSchema = Joi.number()\n .empty('')\n .integer()\n .min(1)\n .max(25)\n .description(\n 'Specifies the exact number of files required for upload. Must be between 1 and 25.'\n )\n\nexport const minFilesSchema = Joi.number()\n .empty('')\n .integer()\n .min(1)\n .max(25)\n .description(\n 'Minimum number of files required for upload. Must be between 1 and 25.'\n )\n\nexport const maxFilesSchema = Joi.number()\n .empty('')\n .integer()\n .min(1)\n .max(25)\n .description(\n 'Maximum number of files allowed for upload. Must be between 1 and 25.'\n )\n\nexport const fileTypesSchema = Joi.array()\n .items(Joi.string())\n .single()\n .empty(null)\n .default([])\n .description(\n 'Array of allowed file types. Can be provided as a single value or an array.'\n )\n\nexport const documentTypesSchema = Joi.array()\n .items(Joi.string())\n .single()\n .empty(null)\n .default([])\n .description(\n 'Array of allowed document types. Can be provided as a single value or an array.'\n )\n\nexport const imageTypesSchema = Joi.array()\n .items(Joi.string())\n .single()\n .empty(null)\n .default([])\n .description(\n 'Array of allowed image types. Can be provided as a single value or an array.'\n )\n\nexport const tabularDataTypesSchema = Joi.array()\n .items(Joi.string())\n .single()\n .empty(null)\n .default([])\n\nexport const enhancedActionSchema = Joi.string()\n .trim()\n .optional()\n .allow('')\n .description('Action field that can include enhanced functionality')\n\nexport const radioIdSchema = Joi.string()\n .trim()\n .optional()\n .allow('')\n .description('Unique identifier for radio options')\n\nexport const radioTextSchema = Joi.string()\n .trim()\n .required()\n .description('The visible text shown next to radio options')\n\nexport const radioHintSchema = Joi.string()\n .trim()\n .optional()\n .allow('')\n .description(\n 'Optional hint text displayed with radio buttons to provide additional guidance'\n )\n\nexport const radioValueSchema = Joi.string()\n .trim()\n .optional()\n .allow('')\n .description(\n 'Array of allowed tabular data types. Can be provided as a single value or an array.'\n )\n\nexport const shortDescriptionSchema = Joi.string()\n .trim()\n .required()\n .description('Brief description of the question for internal use')\n\nexport const pageHeadingAndGuidanceSchema = Joi.string()\n .trim()\n .optional()\n .description('Combined heading and guidance for the page')\n\nexport const pageHeadingSchema = Joi.string()\n .trim()\n .required()\n .description('Main heading displayed at the top of the page')\n\nexport const guidanceTextSchema = Joi.string()\n .trim()\n .description('Guidance text to assist users in completing the page')\n\nexport const repeaterSchema = Joi.string()\n .trim()\n .optional()\n .description(\n 'Combined min/max items and question set name for the repeater page'\n )\n\nexport const minItemsSchema = Joi.number()\n .empty('')\n .min(1)\n .description('The minimum number of repeater items')\n\nexport const maxItemsSchema = Joi.number()\n .empty('')\n .max(25)\n .description('The maximum number of repeater items')\n\nexport const questionSetNameSchema = Joi.string()\n .trim()\n .description('The repeater question set name')\n\nexport const needDeclarationSchema = Joi.string()\n .trim()\n .required()\n .description('Whether a declaration is needed')\n\nexport const declarationTextSchema = Joi.string()\n .trim()\n .required()\n .description('Text of the declaration that users must agree to')\n\nexport const minSchema = Joi.number()\n .empty('')\n .integer()\n .description('Minimum value for numeric inputs')\n\nexport const maxSchema = Joi.number()\n .empty('')\n .integer()\n .description('Maximum value for numeric inputs')\n\nexport const minLengthSchema = Joi.number()\n .empty('')\n .integer()\n .min(1)\n .description('Minimum character length for text inputs')\n\nexport const maxLengthSchema = Joi.number()\n .empty('')\n .integer()\n .min(1)\n .description('Maximum character length for text inputs')\n\nexport const maxFutureSchema = Joi.number()\n .empty('')\n .integer()\n .min(0)\n .description('Maximum days in the future allowed for date inputs')\n\nexport const maxPastSchema = Joi.number()\n .empty('')\n .integer()\n .min(0)\n .description('Maximum days in the past allowed for date inputs')\n\nexport const precisionSchema = Joi.number()\n .empty('')\n .integer()\n .min(0)\n .description('Decimal precision for numeric inputs')\n\nexport const prefixSchema = Joi.string()\n .trim()\n .optional()\n .allow('')\n .description('Text to display before the input (e.g., £)')\n\nexport const regexSchema = Joi.string()\n .optional()\n .allow('')\n .description('Regular expression pattern for validation')\n\nexport const rowsSchema = Joi.number()\n .empty('')\n .integer()\n .min(1)\n .description('Number of rows for multiline text fields')\n\nexport const suffixSchema = Joi.string()\n .trim()\n .optional()\n .allow('')\n .description('Text to display after the input (e.g., kg)')\n\nexport const classesSchema = Joi.string()\n .trim()\n .optional()\n .allow('')\n .description('Custom CSS classes to apply to the component')\n\nexport const jsEnabledSchema = Joi.string()\n .trim()\n .optional()\n .allow('false', 'true')\n .description('Flag to show if Javascript is enabled or not')\n\ntype GenericRuleOptions<K extends string, T> = Omit<GetRuleOptions, 'args'> & {\n args: Record<K, T>\n}\n\ninterface DSLSchema<TSchema = Record<string, unknown>[]>\n extends ArraySchema<TSchema> {\n rowSeparator: (rowSep: string | RegExp) => DSLSchema<TSchema>\n row: (rowSep: string | RegExp) => DSLSchema<TSchema>\n colSeparator: (colSep: string | RegExp) => DSLSchema<TSchema>\n col: (colSep: string | RegExp) => DSLSchema<TSchema>\n keys: (keys: string[]) => DSLSchema<TSchema>\n}\n\ninterface CustomValidator extends Joi.Root {\n dsv<TSchema>(): DSLSchema<TSchema>\n}\n\nexport const customValidator = Joi.extend((joi: Joi.Root) => {\n return {\n type: 'dsv',\n base: joi.array(),\n messages: {\n 'dsv.invalid': 'Invalid parse string'\n },\n coerce: {\n from: 'string',\n method(value: string, helpers) {\n try {\n // Only called when prefs.convert is true\n // Rules\n const rowSeparatorRule = helpers.schema.$_getRule('rowSeparator') as\n | undefined\n | GenericRuleOptions<'rowSeparator', string | RegExp>\n const colSeparatorRule = helpers.schema.$_getRule('colSeparator') as\n | undefined\n | GenericRuleOptions<'colSeparator', string | RegExp>\n const keysRule = helpers.schema.$_getRule('keys') as\n | undefined\n | GenericRuleOptions<'keys', string[]>\n\n // Rows\n const rowSeparator = rowSeparatorRule?.args.rowSeparator ?? /\\r?\\n/\n const rows = value\n .split(rowSeparator)\n .map((v) => v.trim())\n .filter(Boolean)\n\n // Columns\n const colSeparator = colSeparatorRule?.args.colSeparator ?? ','\n const keys = keysRule?.args.keys ?? ['key', 'value']\n\n const coercedValue = rows.map((row) => {\n return row\n .split(colSeparator)\n .reduce<Record<string, string>>((acc, col, idx) => {\n return {\n ...acc,\n [keys[idx]]: col.trim()\n }\n }, {})\n })\n return { value: coercedValue }\n } catch (_err) {\n // eslint-disable-next-line no-console\n console.error(_err)\n return { value, errors: [helpers.error('dsv.invalid')] }\n }\n }\n },\n rules: {\n rowSeparator: {\n convert: true,\n alias: 'row',\n method(rowSeparator: string) {\n return this.$_addRule({\n name: 'rowSeparator',\n args: { rowSeparator }\n })\n },\n args: [\n {\n name: 'rowSeparator',\n ref: true,\n assert: (value) =>\n typeof value === 'string' || value instanceof RegExp,\n message: 'must be a string or regex'\n }\n ]\n },\n colSeparator: {\n convert: true,\n alias: 'col',\n method(colSeparator: string) {\n return this.$_addRule({\n name: 'colSeparator',\n args: { colSeparator }\n })\n },\n args: [\n {\n name: 'colSeparator',\n ref: true,\n assert: (value) =>\n typeof value === 'string' || value instanceof RegExp,\n message: 'must be a string or regex'\n }\n ]\n },\n keys: {\n convert: true,\n method(keys: string[]) {\n return this.$_addRule({ name: 'keys', args: { keys } })\n },\n args: [\n {\n name: 'keys',\n ref: true,\n assert: (value) =>\n Array.isArray(value) && value.every((k) => typeof k === 'string'),\n message: 'must be an array of strings'\n }\n ]\n }\n }\n }\n}) as CustomValidator\n\nexport const autoCompleteOptionsSchema = customValidator\n .dsv<{ text: string; value: string }[]>()\n .row(/\\r?\\n/)\n .col(':')\n .keys(['text', 'value'])\n .items(\n customValidator.object({\n text: customValidator.string().min(1).disallow('').required(),\n value: customValidator\n .string()\n .default((parent: { text: string; value?: string }) => parent.text)\n .min(1)\n .disallow('')\n })\n )\n .min(1)\n .unique('text')\n .unique('value', { ignoreUndefined: true })\n .required()\n\nexport const questionDetailsFullSchema = {\n autoCompleteOptionsSchema,\n classesSchema,\n documentTypesSchema,\n enhancedActionSchema,\n exactFilesSchema,\n fileTypesSchema,\n hintTextSchema,\n imageTypesSchema,\n jsEnabledSchema,\n listForQuestionSchema,\n listItemCountSchema,\n listItemsDataSchema,\n maxFilesSchema,\n maxFutureSchema,\n maxLengthSchema,\n maxPastSchema,\n maxSchema,\n minFilesSchema,\n minLengthSchema,\n minSchema,\n nameSchema,\n precisionSchema,\n prefixSchema,\n questionOptionalSchema,\n questionSchema,\n questionTypeFullSchema,\n radioHintSchema,\n radioIdSchema,\n radioTextSchema,\n radioValueSchema,\n regexSchema,\n rowsSchema,\n shortDescriptionSchema,\n suffixSchema,\n tabularDataTypesSchema\n}\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 .description('Input schema for creating a new page in the form editor')\n\nexport const formEditorInputheckAnswersSettingsKeys = {\n declarationText: shortDescriptionSchema\n}\n\n/**\n * Joi schema for `FormEditorInputCheckAnswersSettings` interface\n * @see {@link FormEditorInputCheckAnswersSettings}\n */\nexport const formEditorInputCheckAnswersSettingSchema =\n Joi.object<FormEditorInputCheckAnswersSettings>()\n .keys(formEditorInputheckAnswersSettingsKeys)\n .required()\n .description('Configuration for the check-answers page')\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 .description(\n 'Input schema for creating or updating a question in the form editor'\n )\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 .description('Settings for page content and display in the form editor')\n\nexport function govukFieldValueIsString(\n govukField: GovukField\n): govukField is GovukStringField {\n return [\n 'question',\n 'hintText',\n 'shortDescription',\n 'autoCompleteOptions'\n ].includes(`${govukField.name}`)\n}\n\nexport function govukFieldIsQuestionOptional(\n govukField: GovukField\n): govukField is GovukFieldQuestionOptional {\n if (govukField.name !== 'questionOptional') {\n return false\n }\n const checkedValue = govukField.items?.[0].checked\n return typeof checkedValue === 'boolean'\n}\n\n// A list of allowed template funtions for use within error message templates\nexport const allowedErrorTemplateFunctions = ['lowerFirst', 'capitalise']\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../../src/form/form-manager/types.ts"],"sourcesContent":["import { type ControllerType, type Repeat } from '~/src/index.js'\n\nexport interface PatchPageFields {\n title?: string\n path?: string\n controller?: ControllerType | null\n repeat?: Repeat\n}\n\nexport interface AddComponentQueryOptions {\n prepend?: boolean\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../../src/form/form-manager/types.ts"],"sourcesContent":["import { type ControllerType, type Repeat } from '~/src/index.js'\n\nexport interface PatchPageFields {\n title?: string\n path?: string\n controller?: ControllerType | null\n repeat?: Repeat\n condition?: string | null\n}\n\nexport interface AddComponentQueryOptions {\n prepend?: boolean\n}\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,13 @@
1
+ export * from "./__stubs__/form-definition.js";
2
+ export { buildList } from "./__stubs__/components.js";
3
+ export { buildListItem } from "./__stubs__/components.js";
4
+ export { buildCheckboxComponent } from "./__stubs__/components.js";
5
+ export { buildRadioComponent } from "./__stubs__/components.js";
6
+ export { buildAutoCompleteComponent } from "./__stubs__/components.js";
7
+ export { buildFileUploadComponent } from "./__stubs__/components.js";
8
+ export { buildTextFieldComponent } from "./__stubs__/components.js";
9
+ export { buildRepeaterPage } from "./__stubs__/pages.js";
10
+ export { buildFileUploadPage } from "./__stubs__/pages.js";
11
+ export { buildSummaryPage } from "./__stubs__/pages.js";
12
+ export { buildQuestionPage } from "./__stubs__/pages.js";
13
+ //# sourceMappingURL=stubs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stubs.js","names":["buildList","buildListItem","buildCheckboxComponent","buildRadioComponent","buildAutoCompleteComponent","buildFileUploadComponent","buildTextFieldComponent","buildRepeaterPage","buildFileUploadPage","buildSummaryPage","buildQuestionPage"],"sources":["../../src/stubs.ts"],"sourcesContent":["export * from '~/src/__stubs__/form-definition.js'\nexport { buildList } from '~/src/__stubs__/components.js'\nexport { buildListItem } from '~/src/__stubs__/components.js'\nexport { buildCheckboxComponent } from '~/src/__stubs__/components.js'\nexport { buildRadioComponent } from '~/src/__stubs__/components.js'\nexport { buildAutoCompleteComponent } from '~/src/__stubs__/components.js'\nexport { buildFileUploadComponent } from '~/src/__stubs__/components.js'\nexport { buildTextFieldComponent } from '~/src/__stubs__/components.js'\nexport { buildRepeaterPage } from '~/src/__stubs__/pages.js'\nexport { buildFileUploadPage } from '~/src/__stubs__/pages.js'\nexport { buildSummaryPage } from '~/src/__stubs__/pages.js'\nexport { buildQuestionPage } from '~/src/__stubs__/pages.js'\n"],"mappings":"AAAA;AACA,SAASA,SAAS;AAClB,SAASC,aAAa;AACtB,SAASC,sBAAsB;AAC/B,SAASC,mBAAmB;AAC5B,SAASC,0BAA0B;AACnC,SAASC,wBAAwB;AACjC,SAASC,uBAAuB;AAChC,SAASC,iBAAiB;AAC1B,SAASC,mBAAmB;AAC5B,SAASC,gBAAgB;AACzB,SAASC,iBAAiB","ignoreList":[]}
@@ -0,0 +1,43 @@
1
+ import { type AutocompleteFieldComponent, type CheckboxesFieldComponent, type DatePartsFieldComponent, type FileUploadFieldComponent, type NumberFieldComponent, type RadiosFieldComponent, type TextFieldComponent } from '../components/types.js';
2
+ import { type Item, type List } from '../form/form-definition/types.js';
3
+ /**
4
+ * @param {Partial<TextFieldComponent>} partialTextField
5
+ * @returns {TextFieldComponent}
6
+ */
7
+ export declare function buildTextFieldComponent(partialTextField?: Partial<TextFieldComponent>): TextFieldComponent;
8
+ /**
9
+ * @param {Partial<FileUploadFieldComponent>} partialFileUploadField
10
+ * @returns {FileUploadFieldComponent}
11
+ */
12
+ export declare function buildFileUploadComponent(partialFileUploadField: Partial<FileUploadFieldComponent>): FileUploadFieldComponent;
13
+ /**
14
+ *
15
+ * @param {Partial<AutocompleteFieldComponent>} partialAutoCompleteField
16
+ * @returns {AutocompleteFieldComponent}
17
+ */
18
+ export declare function buildAutoCompleteComponent(partialAutoCompleteField: Partial<AutocompleteFieldComponent>): AutocompleteFieldComponent;
19
+ /**
20
+ * @param {Partial<RadiosFieldComponent>} partialListComponent
21
+ * @returns {RadiosFieldComponent}
22
+ */
23
+ export declare function buildRadioComponent(partialListComponent?: Partial<RadiosFieldComponent>): RadiosFieldComponent;
24
+ /**
25
+ * @param {Partial<CheckboxesFieldComponent>} partialListComponent
26
+ * @returns {CheckboxesFieldComponent}
27
+ */
28
+ export declare function buildCheckboxComponent(partialListComponent: Partial<CheckboxesFieldComponent>): CheckboxesFieldComponent;
29
+ /**
30
+ * Builder to create a stub List item
31
+ * @param {Partial<Item>} partialListItem
32
+ * @returns {Item}
33
+ */
34
+ export declare function buildListItem(partialListItem?: Partial<Item>): Item;
35
+ /**
36
+ * @param {Partial<List>} partialList
37
+ * @returns {List}
38
+ */
39
+ export declare function buildList(partialList?: Partial<List>): List;
40
+ export declare function buildNumberFieldComponent(partialComponent: Partial<NumberFieldComponent>): NumberFieldComponent;
41
+ export declare function buildDateComponent(partialComponent: Partial<DatePartsFieldComponent>): DatePartsFieldComponent;
42
+ export declare function buildRadiosComponent(partialComponent: Partial<RadiosFieldComponent>): RadiosFieldComponent;
43
+ //# sourceMappingURL=components.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/__stubs__/components.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACxB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE,MAAM,qCAAqC,CAAA;AAE1E;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,gBAAgB,GAAE,OAAO,CAAC,kBAAkB,CAAM,GACjD,kBAAkB,CAepB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,sBAAsB,EAAE,OAAO,CAAC,wBAAwB,CAAC,GACxD,wBAAwB,CAa1B;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,wBAAwB,EAAE,OAAO,CAAC,0BAA0B,CAAC,GAC5D,0BAA0B,CAa5B;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,oBAAoB,GAAE,OAAO,CAAC,oBAAoB,CAAM,GACvD,oBAAoB,CAatB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,oBAAoB,EAAE,OAAO,CAAC,wBAAwB,CAAC,GACtD,wBAAwB,CAa1B;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,eAAe,GAAE,OAAO,CAAC,IAAI,CAAM,GAAG,IAAI,CAMvE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,WAAW,GAAE,OAAO,CAAC,IAAI,CAAM,GAAG,IAAI,CAiC/D;AAED,wBAAgB,yBAAyB,CACvC,gBAAgB,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAC9C,oBAAoB,CAStB;AAED,wBAAgB,kBAAkB,CAChC,gBAAgB,EAAE,OAAO,CAAC,uBAAuB,CAAC,GACjD,uBAAuB,CAQzB;AAED,wBAAgB,oBAAoB,CAClC,gBAAgB,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAC9C,oBAAoB,CAStB"}
@@ -0,0 +1,15 @@
1
+ import { type FormDefinition } from '../form/form-definition/types.js';
2
+ import { type FormMetadata } from '../form/form-metadata/types.js';
3
+ /**
4
+ * Builder to create a Form Definition
5
+ * @param {Partial<FormDefinition>} definitionPartial
6
+ * @returns {FormDefinition}
7
+ */
8
+ export declare function buildDefinition(definitionPartial?: Partial<FormDefinition>): FormDefinition;
9
+ /**
10
+ *
11
+ * @param {Partial<FormMetadata>} partialMetaData
12
+ * @returns {FormMetadata}
13
+ */
14
+ export declare function buildMetaData(partialMetaData?: Partial<FormMetadata>): FormMetadata;
15
+ //# sourceMappingURL=form-definition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-definition.d.ts","sourceRoot":"","sources":["../../../src/__stubs__/form-definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,qCAAqC,CAAA;AACzE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,mCAAmC,CAAA;AAErE;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,iBAAiB,GAAE,OAAO,CAAC,cAAc,CAAM,GAC9C,cAAc,CAYhB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,eAAe,GAAE,OAAO,CAAC,YAAY,CAAM,GAC1C,YAAY,CAgCd"}
@@ -0,0 +1,25 @@
1
+ import { type PageFileUpload, type PageQuestion, type PageRepeat, type PageSummary } from '../form/form-definition/types.js';
2
+ /**
3
+ * Stub builder for a question page
4
+ * @param {Partial<PageQuestion>} [partialPage]
5
+ * @returns {PageQuestion}
6
+ */
7
+ export declare function buildQuestionPage(partialPage: Partial<PageQuestion>): PageQuestion;
8
+ /**
9
+ * Stub builder for a Summary page
10
+ * @param {Partial<PageSummary>} [partialSummaryPage]
11
+ */
12
+ export declare function buildSummaryPage(partialSummaryPage?: Partial<PageSummary>): PageSummary;
13
+ /**
14
+ *
15
+ * @param {Partial<PageFileUpload>} partialFileUploadPage
16
+ * @returns {PageFileUpload}
17
+ */
18
+ export declare function buildFileUploadPage(partialFileUploadPage?: Partial<PageFileUpload>): PageFileUpload;
19
+ /**
20
+ *
21
+ * @param {Partial<PageRepeat>} partialRepeaterPage
22
+ * @returns {PageRepeat}
23
+ */
24
+ export declare function buildRepeaterPage(partialRepeaterPage?: Partial<PageRepeat>): PageRepeat;
25
+ //# sourceMappingURL=pages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../../src/__stubs__/pages.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,WAAW,EACjB,MAAM,qCAAqC,CAAA;AAG5C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,OAAO,CAAC,YAAY,CAAC,GACjC,YAAY,CASd;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,kBAAkB,GAAE,OAAO,CAAC,WAAW,CAAM,GAC5C,WAAW,CAQb;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,qBAAqB,GAAE,OAAO,CAAC,cAAc,CAAM,GAClD,cAAc,CA4BhB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,mBAAmB,GAAE,OAAO,CAAC,UAAU,CAAM,GAC5C,UAAU,CA6BZ"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/form/form-editor/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/form/form-editor/index.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ export interface PatchPageFields {
4
4
  path?: string;
5
5
  controller?: ControllerType | null;
6
6
  repeat?: Repeat;
7
+ condition?: string | null;
7
8
  }
8
9
  export interface AddComponentQueryOptions {
9
10
  prepend?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/form/form-manager/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAEjE,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,cAAc,GAAG,IAAI,CAAA;IAClC,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/form/form-manager/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAEjE,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,cAAc,GAAG,IAAI,CAAA;IAClC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB"}
@@ -0,0 +1,13 @@
1
+ export * from './__stubs__/form-definition.js';
2
+ export { buildList } from './__stubs__/components.js';
3
+ export { buildListItem } from './__stubs__/components.js';
4
+ export { buildCheckboxComponent } from './__stubs__/components.js';
5
+ export { buildRadioComponent } from './__stubs__/components.js';
6
+ export { buildAutoCompleteComponent } from './__stubs__/components.js';
7
+ export { buildFileUploadComponent } from './__stubs__/components.js';
8
+ export { buildTextFieldComponent } from './__stubs__/components.js';
9
+ export { buildRepeaterPage } from './__stubs__/pages.js';
10
+ export { buildFileUploadPage } from './__stubs__/pages.js';
11
+ export { buildSummaryPage } from './__stubs__/pages.js';
12
+ export { buildQuestionPage } from './__stubs__/pages.js';
13
+ //# sourceMappingURL=stubs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stubs.d.ts","sourceRoot":"","sources":["../../src/stubs.ts"],"names":[],"mappings":"AAAA,cAAc,oCAAoC,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AACnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAA;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA"}
package/package.json CHANGED
@@ -1,8 +1,22 @@
1
1
  {
2
2
  "name": "@defra/forms-model",
3
- "version": "3.0.463",
3
+ "version": "3.0.465",
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
+ "types": "dist/types/index.d.ts",
7
+ "main": "dist/module/index.js",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/module/index.js",
11
+ "default": "./dist/module/index.js",
12
+ "types": "./dist/types/index.d.ts"
13
+ },
14
+ "./stubs": {
15
+ "import": "./dist/module/stubs.js",
16
+ "default": "./dist/module/stubs.js",
17
+ "types": "./dist/types/stubs.d.ts"
18
+ }
19
+ },
6
20
  "repository": {
7
21
  "type": "git",
8
22
  "url": "git+https://github.com/DEFRA/forms-designer.git",
@@ -11,8 +25,6 @@
11
25
  "license": "OGL-UK-3.0",
12
26
  "sideEffects": false,
13
27
  "type": "module",
14
- "main": "dist/module/index.js",
15
- "types": "dist/types/index.d.ts",
16
28
  "scripts": {
17
29
  "build": "npm run build:types && npm run build:node && npm run build:schemas",
18
30
  "build:node": "babel --delete-dir-on-start --extensions \".ts,.js\" --ignore \"**/*.test.*\" --copy-files --no-copy-ignored --source-maps --out-dir ./dist/module ./src",
@@ -0,0 +1,209 @@
1
+ import { ComponentType } from '~/src/components/enums.js'
2
+ import {
3
+ type AutocompleteFieldComponent,
4
+ type CheckboxesFieldComponent,
5
+ type DatePartsFieldComponent,
6
+ type FileUploadFieldComponent,
7
+ type NumberFieldComponent,
8
+ type RadiosFieldComponent,
9
+ type TextFieldComponent
10
+ } from '~/src/components/types.js'
11
+ import { type Item, type List } from '~/src/form/form-definition/types.js'
12
+
13
+ /**
14
+ * @param {Partial<TextFieldComponent>} partialTextField
15
+ * @returns {TextFieldComponent}
16
+ */
17
+ export function buildTextFieldComponent(
18
+ partialTextField: Partial<TextFieldComponent> = {}
19
+ ): TextFieldComponent {
20
+ const textFieldComponent: TextFieldComponent = {
21
+ id: '407dd0d7-cce9-4f43-8e1f-7d89cb698875',
22
+ name: 'TextField',
23
+ title: 'Text field',
24
+ type: ComponentType.TextField,
25
+ hint: '',
26
+ options: {},
27
+ schema: {}
28
+ }
29
+
30
+ return {
31
+ ...textFieldComponent,
32
+ ...partialTextField
33
+ }
34
+ }
35
+
36
+ /**
37
+ * @param {Partial<FileUploadFieldComponent>} partialFileUploadField
38
+ * @returns {FileUploadFieldComponent}
39
+ */
40
+ export function buildFileUploadComponent(
41
+ partialFileUploadField: Partial<FileUploadFieldComponent>
42
+ ): FileUploadFieldComponent {
43
+ const fileUploadFieldComponent: FileUploadFieldComponent = {
44
+ name: 'FileUploadField',
45
+ type: ComponentType.FileUploadField,
46
+ title: 'File Upload Field',
47
+ options: {},
48
+ schema: {}
49
+ }
50
+
51
+ return {
52
+ ...fileUploadFieldComponent,
53
+ ...partialFileUploadField
54
+ }
55
+ }
56
+
57
+ /**
58
+ *
59
+ * @param {Partial<AutocompleteFieldComponent>} partialAutoCompleteField
60
+ * @returns {AutocompleteFieldComponent}
61
+ */
62
+ export function buildAutoCompleteComponent(
63
+ partialAutoCompleteField: Partial<AutocompleteFieldComponent>
64
+ ): AutocompleteFieldComponent {
65
+ const autocompleteComponent: AutocompleteFieldComponent = {
66
+ name: 'AutoCompleteField',
67
+ title: 'What languages do you speak?',
68
+ type: ComponentType.AutocompleteField,
69
+ list: 'AutoCompleteList',
70
+ options: {}
71
+ }
72
+
73
+ return {
74
+ ...autocompleteComponent,
75
+ ...partialAutoCompleteField
76
+ }
77
+ }
78
+
79
+ /**
80
+ * @param {Partial<RadiosFieldComponent>} partialListComponent
81
+ * @returns {RadiosFieldComponent}
82
+ */
83
+ export function buildRadioComponent(
84
+ partialListComponent: Partial<RadiosFieldComponent> = {}
85
+ ): RadiosFieldComponent {
86
+ const radioFieldComponent: RadiosFieldComponent = {
87
+ name: 'RadioField',
88
+ title: 'Which country do you live in?',
89
+ type: ComponentType.RadiosField,
90
+ list: 'RadioList',
91
+ options: {}
92
+ }
93
+
94
+ return {
95
+ ...radioFieldComponent,
96
+ ...partialListComponent
97
+ }
98
+ }
99
+
100
+ /**
101
+ * @param {Partial<CheckboxesFieldComponent>} partialListComponent
102
+ * @returns {CheckboxesFieldComponent}
103
+ */
104
+ export function buildCheckboxComponent(
105
+ partialListComponent: Partial<CheckboxesFieldComponent>
106
+ ): CheckboxesFieldComponent {
107
+ const checkboxesFieldComponent: CheckboxesFieldComponent = {
108
+ name: 'FellowshipOfTheRing',
109
+ title: 'Which are your favourite characters from the fellowship?',
110
+ type: ComponentType.CheckboxesField,
111
+ list: 'CheckboxList',
112
+ options: {}
113
+ }
114
+
115
+ return {
116
+ ...checkboxesFieldComponent,
117
+ ...partialListComponent
118
+ }
119
+ }
120
+
121
+ /**
122
+ * Builder to create a stub List item
123
+ * @param {Partial<Item>} partialListItem
124
+ * @returns {Item}
125
+ */
126
+ export function buildListItem(partialListItem: Partial<Item> = {}): Item {
127
+ return {
128
+ text: 'Javascript',
129
+ value: 'javascript',
130
+ ...partialListItem
131
+ }
132
+ }
133
+
134
+ /**
135
+ * @param {Partial<List>} partialList
136
+ * @returns {List}
137
+ */
138
+ export function buildList(partialList: Partial<List> = {}): List {
139
+ return {
140
+ title: 'Development language2',
141
+ name: 'YhmNDD',
142
+ type: 'string',
143
+ items: [
144
+ buildListItem({
145
+ text: 'Javascript',
146
+ value: 'javascript'
147
+ }),
148
+ buildListItem({
149
+ text: 'TypeScript',
150
+ value: 'typescript'
151
+ }),
152
+ buildListItem({
153
+ text: 'Python',
154
+ value: 'python'
155
+ }),
156
+ buildListItem({
157
+ text: 'Haskell',
158
+ value: 'haskell'
159
+ }),
160
+ buildListItem({
161
+ text: 'Erlang',
162
+ value: 'erlang'
163
+ }),
164
+ buildListItem({
165
+ text: 'Java',
166
+ value: 'java'
167
+ })
168
+ ],
169
+ ...partialList
170
+ }
171
+ }
172
+
173
+ export function buildNumberFieldComponent(
174
+ partialComponent: Partial<NumberFieldComponent>
175
+ ): NumberFieldComponent {
176
+ return {
177
+ name: 'year',
178
+ title: 'Year',
179
+ options: {},
180
+ schema: {},
181
+ ...partialComponent,
182
+ type: ComponentType.NumberField
183
+ }
184
+ }
185
+
186
+ export function buildDateComponent(
187
+ partialComponent: Partial<DatePartsFieldComponent>
188
+ ): DatePartsFieldComponent {
189
+ return {
190
+ name: 'bcdefg',
191
+ title: 'Default title',
192
+ options: {},
193
+ ...partialComponent,
194
+ type: ComponentType.DatePartsField
195
+ }
196
+ }
197
+
198
+ export function buildRadiosComponent(
199
+ partialComponent: Partial<RadiosFieldComponent>
200
+ ): RadiosFieldComponent {
201
+ return {
202
+ name: 'cdefgh',
203
+ title: 'Default title',
204
+ options: {},
205
+ list: 'Default list Id ref',
206
+ ...partialComponent,
207
+ type: ComponentType.RadiosField
208
+ }
209
+ }
@@ -0,0 +1,64 @@
1
+ import { type FormDefinition } from '~/src/form/form-definition/types.js'
2
+ import { type FormMetadata } from '~/src/form/form-metadata/types.js'
3
+
4
+ /**
5
+ * Builder to create a Form Definition
6
+ * @param {Partial<FormDefinition>} definitionPartial
7
+ * @returns {FormDefinition}
8
+ */
9
+ export function buildDefinition(
10
+ definitionPartial: Partial<FormDefinition> = {}
11
+ ): FormDefinition {
12
+ const formDefinition: FormDefinition = {
13
+ name: 'Test form',
14
+ pages: [],
15
+ conditions: [],
16
+ sections: [],
17
+ lists: []
18
+ }
19
+ return {
20
+ ...formDefinition,
21
+ ...definitionPartial
22
+ }
23
+ }
24
+
25
+ /**
26
+ *
27
+ * @param {Partial<FormMetadata>} partialMetaData
28
+ * @returns {FormMetadata}
29
+ */
30
+ export function buildMetaData(
31
+ partialMetaData: Partial<FormMetadata> = {}
32
+ ): FormMetadata {
33
+ return {
34
+ id: '681b184463c68bf6b99e2c62',
35
+ slug: 'chemistry',
36
+ title: 'Chemistry',
37
+ organisation: 'Defra',
38
+ teamName: 'Forms Team',
39
+ teamEmail: 'name@example.gov.uk',
40
+ draft: {
41
+ createdAt: new Date('2025-05-07T08:22:28.035Z'),
42
+ createdBy: {
43
+ id: '84305e4e-1f52-43d0-a123-9c873b0abb35',
44
+ displayName: 'Internal User'
45
+ },
46
+ updatedAt: new Date('2025-05-20T13:00:54.794Z'),
47
+ updatedBy: {
48
+ id: '84305e4e-1f52-43d0-a123-9c873b0abb35',
49
+ displayName: 'Internal User'
50
+ }
51
+ },
52
+ createdBy: {
53
+ id: '84305e4e-1f52-43d0-a123-9c873b0abb35',
54
+ displayName: 'Internal User'
55
+ },
56
+ createdAt: new Date('2025-05-07T08:22:28.035Z'),
57
+ updatedBy: {
58
+ id: '84305e4e-1f52-43d0-a123-9c873b0abb35',
59
+ displayName: 'Internal User'
60
+ },
61
+ updatedAt: new Date('2025-05-20T13:00:54.794Z'),
62
+ ...partialMetaData
63
+ }
64
+ }
@@ -0,0 +1,118 @@
1
+ import { buildFileUploadComponent } from '~/src/__stubs__/components.js'
2
+ import { ComponentType } from '~/src/components/enums.js'
3
+ import {
4
+ type PageFileUpload,
5
+ type PageQuestion,
6
+ type PageRepeat,
7
+ type PageSummary
8
+ } from '~/src/form/form-definition/types.js'
9
+ import { ControllerPath, ControllerType } from '~/src/pages/enums.js'
10
+
11
+ /**
12
+ * Stub builder for a question page
13
+ * @param {Partial<PageQuestion>} [partialPage]
14
+ * @returns {PageQuestion}
15
+ */
16
+ export function buildQuestionPage(
17
+ partialPage: Partial<PageQuestion>
18
+ ): PageQuestion {
19
+ return {
20
+ id: 'ffefd409-f3f4-49fe-882e-6e89f44631b1',
21
+ title: 'Page One',
22
+ path: '/page-one',
23
+ next: [],
24
+ components: [],
25
+ ...partialPage
26
+ }
27
+ }
28
+
29
+ /**
30
+ * Stub builder for a Summary page
31
+ * @param {Partial<PageSummary>} [partialSummaryPage]
32
+ */
33
+ export function buildSummaryPage(
34
+ partialSummaryPage: Partial<PageSummary> = {}
35
+ ): PageSummary {
36
+ const pageSummary: PageSummary = {
37
+ id: '449a45f6-4541-4a46-91bd-8b8931b07b50',
38
+ title: 'Summary page',
39
+ path: ControllerPath.Summary,
40
+ controller: ControllerType.Summary
41
+ }
42
+ return { ...pageSummary, ...partialSummaryPage }
43
+ }
44
+
45
+ /**
46
+ *
47
+ * @param {Partial<PageFileUpload>} partialFileUploadPage
48
+ * @returns {PageFileUpload}
49
+ */
50
+ export function buildFileUploadPage(
51
+ partialFileUploadPage: Partial<PageFileUpload> = {}
52
+ ): PageFileUpload {
53
+ const fileUploadPage: PageFileUpload = {
54
+ id: '85e5c8da-88f5-4009-a821-7d7de1364318',
55
+ title: '',
56
+ path: '/supporting-evidence',
57
+ components: [
58
+ buildFileUploadComponent({
59
+ type: ComponentType.FileUploadField,
60
+ title: 'Supporting Evidence',
61
+ name: 'yBpZQO',
62
+ shortDescription: 'Supporting evidence',
63
+ hint: '',
64
+ options: {
65
+ required: true,
66
+ accept:
67
+ 'application/pdf,application/msword,image/jpeg,application/vnd.ms-excel,text/csv'
68
+ },
69
+ id: '4189b8a1-1a04-4f74-a7a0-dd23012a0ee0'
70
+ })
71
+ ],
72
+ controller: ControllerType.FileUpload,
73
+ next: []
74
+ }
75
+
76
+ return {
77
+ ...fileUploadPage,
78
+ ...partialFileUploadPage
79
+ }
80
+ }
81
+
82
+ /**
83
+ *
84
+ * @param {Partial<PageRepeat>} partialRepeaterPage
85
+ * @returns {PageRepeat}
86
+ */
87
+ export function buildRepeaterPage(
88
+ partialRepeaterPage: Partial<PageRepeat> = {}
89
+ ): PageRepeat {
90
+ const repeaterPage: PageRepeat = {
91
+ title: 'Repeater Page',
92
+ path: '/repeater-page',
93
+ components: [
94
+ {
95
+ type: ComponentType.TextField,
96
+ title: 'Simple text field',
97
+ name: 'IHAIzC',
98
+ shortDescription: 'Your simple text field',
99
+ hint: '',
100
+ options: {},
101
+ schema: {},
102
+ id: 'ee83413e-31b6-4158-98e0-4611479582ce'
103
+ }
104
+ ],
105
+ next: [],
106
+ id: '32888028-61db-40fc-b255-80bc67829d31',
107
+ controller: ControllerType.Repeat,
108
+ repeat: {
109
+ options: { name: 'fawfed', title: 'Simple question responses' },
110
+ schema: { min: 1, max: 3 }
111
+ }
112
+ }
113
+
114
+ return {
115
+ ...repeaterPage,
116
+ ...partialRepeaterPage
117
+ }
118
+ }
@@ -606,4 +606,4 @@ export function govukFieldIsQuestionOptional(
606
606
  }
607
607
 
608
608
  // A list of allowed template funtions for use within error message templates
609
- export const allowedErrorTemplateFunctions = ['lowerFirst']
609
+ export const allowedErrorTemplateFunctions = ['lowerFirst', 'capitalise']
@@ -5,6 +5,7 @@ export interface PatchPageFields {
5
5
  path?: string
6
6
  controller?: ControllerType | null
7
7
  repeat?: Repeat
8
+ condition?: string | null
8
9
  }
9
10
 
10
11
  export interface AddComponentQueryOptions {
package/src/stubs.ts ADDED
@@ -0,0 +1,12 @@
1
+ export * from '~/src/__stubs__/form-definition.js'
2
+ export { buildList } from '~/src/__stubs__/components.js'
3
+ export { buildListItem } from '~/src/__stubs__/components.js'
4
+ export { buildCheckboxComponent } from '~/src/__stubs__/components.js'
5
+ export { buildRadioComponent } from '~/src/__stubs__/components.js'
6
+ export { buildAutoCompleteComponent } from '~/src/__stubs__/components.js'
7
+ export { buildFileUploadComponent } from '~/src/__stubs__/components.js'
8
+ export { buildTextFieldComponent } from '~/src/__stubs__/components.js'
9
+ export { buildRepeaterPage } from '~/src/__stubs__/pages.js'
10
+ export { buildFileUploadPage } from '~/src/__stubs__/pages.js'
11
+ export { buildSummaryPage } from '~/src/__stubs__/pages.js'
12
+ export { buildQuestionPage } from '~/src/__stubs__/pages.js'