@defra/forms-model 3.0.563 → 3.0.565
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/module/form/form-editor/__stubs__/preview.js +8 -0
 - package/dist/module/form/form-editor/__stubs__/preview.js.map +1 -1
 - package/dist/module/form/form-editor/index.js +2 -2
 - package/dist/module/form/form-editor/index.js.map +1 -1
 - package/dist/module/form/form-editor/preview/autocomplete.js +2 -1
 - package/dist/module/form/form-editor/preview/autocomplete.js.map +1 -1
 - package/dist/module/form/form-editor/preview/controller/page-controller.js.map +1 -1
 - package/dist/module/form/form-editor/preview/fieldset-question.js +12 -2
 - package/dist/module/form/form-editor/preview/fieldset-question.js.map +1 -1
 - package/dist/module/form/form-editor/preview/helpers.js +3 -1
 - package/dist/module/form/form-editor/preview/helpers.js.map +1 -1
 - package/dist/module/form/form-editor/preview/preview.js +2 -1
 - package/dist/module/form/form-editor/preview/preview.js.map +1 -1
 - package/dist/module/form/form-editor/preview/select-sortable.js +2 -1
 - package/dist/module/form/form-editor/preview/select-sortable.js.map +1 -1
 - package/dist/module/form/form-editor/preview/select.js +2 -1
 - package/dist/module/form/form-editor/preview/select.js.map +1 -1
 - package/dist/module/form/form-editor/preview/types.js.map +1 -1
 - package/dist/module/form/form-editor/preview/uk-address.js +58 -1
 - package/dist/module/form/form-editor/preview/uk-address.js.map +1 -1
 - package/dist/module/form/form-editor/preview/utils.js +9 -0
 - package/dist/module/form/form-editor/preview/utils.js.map +1 -0
 - package/dist/module/form/form-editor/types.js.map +1 -1
 - package/dist/types/form/form-editor/__stubs__/preview.d.ts +6 -1
 - package/dist/types/form/form-editor/__stubs__/preview.d.ts.map +1 -1
 - package/dist/types/form/form-editor/index.d.ts +2 -2
 - package/dist/types/form/form-editor/index.d.ts.map +1 -1
 - package/dist/types/form/form-editor/preview/autocomplete.d.ts.map +1 -1
 - package/dist/types/form/form-editor/preview/controller/page-controller.d.ts.map +1 -1
 - package/dist/types/form/form-editor/preview/fieldset-question.d.ts +0 -14
 - package/dist/types/form/form-editor/preview/fieldset-question.d.ts.map +1 -1
 - package/dist/types/form/form-editor/preview/helpers.d.ts.map +1 -1
 - package/dist/types/form/form-editor/preview/preview.d.ts.map +1 -1
 - package/dist/types/form/form-editor/preview/select-sortable.d.ts.map +1 -1
 - package/dist/types/form/form-editor/preview/select.d.ts.map +1 -1
 - package/dist/types/form/form-editor/preview/types.d.ts +1 -0
 - package/dist/types/form/form-editor/preview/types.d.ts.map +1 -1
 - package/dist/types/form/form-editor/preview/uk-address.d.ts +37 -0
 - package/dist/types/form/form-editor/preview/uk-address.d.ts.map +1 -1
 - package/dist/types/form/form-editor/preview/utils.d.ts +6 -0
 - package/dist/types/form/form-editor/preview/utils.d.ts.map +1 -0
 - package/dist/types/form/form-editor/types.d.ts +10 -0
 - package/dist/types/form/form-editor/types.d.ts.map +1 -1
 - package/package.json +1 -1
 - package/src/form/form-editor/__stubs__/preview.js +16 -1
 - package/src/form/form-editor/index.ts +7 -3
 - package/src/form/form-editor/preview/autocomplete.js +2 -1
 - package/src/form/form-editor/preview/controller/page-controller.js +1 -0
 - package/src/form/form-editor/preview/fieldset-question.js +11 -2
 - package/src/form/form-editor/preview/helpers.js +6 -1
 - package/src/form/form-editor/preview/preview.js +2 -1
 - package/src/form/form-editor/preview/select-sortable.js +2 -1
 - package/src/form/form-editor/preview/select.js +2 -1
 - package/src/form/form-editor/preview/types.ts +1 -0
 - package/src/form/form-editor/preview/uk-address.js +59 -1
 - package/src/form/form-editor/preview/utils.js +8 -0
 - package/src/form/form-editor/types.ts +11 -0
 
| 
         @@ -96,6 +96,11 @@ export class QuestionPreviewElements { 
     | 
|
| 
       96 
96 
     | 
    
         
             
               * @private
         
     | 
| 
       97 
97 
     | 
    
         
             
               */
         
     | 
| 
       98 
98 
     | 
    
         
             
              _items = [];
         
     | 
| 
      
 99 
     | 
    
         
            +
              /**
         
     | 
| 
      
 100 
     | 
    
         
            +
               * @protected
         
     | 
| 
      
 101 
     | 
    
         
            +
               * @type {boolean}
         
     | 
| 
      
 102 
     | 
    
         
            +
               */
         
     | 
| 
      
 103 
     | 
    
         
            +
              _usePostcodeLookup = false;
         
     | 
| 
       99 
104 
     | 
    
         
             
              afterInputsHTML = '<div class="govuk-inset-text">No items added yet.</div>';
         
     | 
| 
       100 
105 
     | 
    
         | 
| 
       101 
106 
     | 
    
         
             
              /**
         
     | 
| 
         @@ -106,6 +111,7 @@ export class QuestionPreviewElements { 
     | 
|
| 
       106 
111 
     | 
    
         
             
                hintText,
         
     | 
| 
       107 
112 
     | 
    
         
             
                optional,
         
     | 
| 
       108 
113 
     | 
    
         
             
                shortDesc,
         
     | 
| 
      
 114 
     | 
    
         
            +
                usePostcodeLookup,
         
     | 
| 
       109 
115 
     | 
    
         
             
                items,
         
     | 
| 
       110 
116 
     | 
    
         
             
                content
         
     | 
| 
       111 
117 
     | 
    
         
             
              }) {
         
     | 
| 
         @@ -115,6 +121,7 @@ export class QuestionPreviewElements { 
     | 
|
| 
       115 
121 
     | 
    
         
             
                this._shortDesc = shortDesc;
         
     | 
| 
       116 
122 
     | 
    
         
             
                this._items = items;
         
     | 
| 
       117 
123 
     | 
    
         
             
                this._content = content;
         
     | 
| 
      
 124 
     | 
    
         
            +
                this._usePostcodeLookup = usePostcodeLookup ?? false;
         
     | 
| 
       118 
125 
     | 
    
         
             
              }
         
     | 
| 
       119 
126 
     | 
    
         | 
| 
       120 
127 
     | 
    
         
             
              /**
         
     | 
| 
         @@ -126,6 +133,7 @@ export class QuestionPreviewElements { 
     | 
|
| 
       126 
133 
     | 
    
         
             
                  hintText: this._hintText,
         
     | 
| 
       127 
134 
     | 
    
         
             
                  optional: this._optional,
         
     | 
| 
       128 
135 
     | 
    
         
             
                  shortDesc: this._shortDesc,
         
     | 
| 
      
 136 
     | 
    
         
            +
                  usePostcodeLookup: this._usePostcodeLookup,
         
     | 
| 
       129 
137 
     | 
    
         
             
                  items: this._items,
         
     | 
| 
       130 
138 
     | 
    
         
             
                  content: this._content
         
     | 
| 
       131 
139 
     | 
    
         
             
                };
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"preview.js","names":["Question","QuestionRendererStub","renderMock","constructor","render","questionTemplate","questionBaseModel","buildHTML","_questionTemplate","_renderContext","PageRendererStub","pageTemplate","pagePreviewPanelMacro","QuestionPreviewElements","_question","_hintText","_optional","_shortDesc","_content","_items","afterInputsHTML","question","hintText","optional","shortDesc","items","content","values","setPreviewHTML","_value","setPreviewDOM","AutocompletePreviewElements","autocompleteOptions","elements","PagePreviewElements","guidance","heading","addHeading","repeatQuestion","hasRepeater","undefined","length","baseElements","largeTitle","list1Id","list2Id","list3Id","list4Id","listElementsBase","label","text","value","id","listElementsStub","buildPreviewShortAnswer","partialBaseElements"],"sources":["../../../../../src/form/form-editor/__stubs__/preview.js"],"sourcesContent":["import { Question } from '~/src/form/form-editor/preview/question.js'\n\n/**\n * @implements {QuestionRenderer}\n */\nexport class QuestionRendererStub {\n  /**\n   * @type {jest.Mock<void, [string, QuestionBaseModel]>}\n   */\n  renderMock\n\n  /**\n   * @param {jest.Mock<void, [string, QuestionBaseModel]>} renderMock\n   */\n  constructor(renderMock) {\n    this.renderMock = renderMock\n  }\n\n  /**\n   * @param {string} questionTemplate\n   * @param {QuestionBaseModel} questionBaseModel\n   */\n  render(questionTemplate, questionBaseModel) {\n    this.renderMock(questionTemplate, questionBaseModel)\n  }\n\n  /**\n   * @returns {string}\n   * @param {string} _questionTemplate\n   * @param {RenderContext} _renderContext\n   */\n  static buildHTML(_questionTemplate, _renderContext) {\n    return '**** BUILT HTML ****'\n  }\n}\n\n/**\n * @implements {PageRenderer}\n */\nexport class PageRendererStub {\n  /**\n   * @type {jest.Mock<void, [string, PagePreviewPanelMacro]>}\n   */\n  renderMock\n\n  /**\n   * @param {jest.Mock<void, [string, PagePreviewPanelMacro]>} renderMock\n   */\n  constructor(renderMock) {\n    this.renderMock = renderMock\n  }\n\n  /**\n   * @param {string} pageTemplate\n   * @param {PagePreviewPanelMacro} pagePreviewPanelMacro\n   */\n  render(pageTemplate, pagePreviewPanelMacro) {\n    this.renderMock(pageTemplate, pagePreviewPanelMacro)\n  }\n\n  /**\n   * @returns {string}\n   * @param {string} _questionTemplate\n   * @param {RenderContext} _renderContext\n   */\n  static buildHTML(_questionTemplate, _renderContext) {\n    return '**** BUILT HTML ****'\n  }\n}\n\n/**\n * @implements {ListElements}\n */\nexport class QuestionPreviewElements {\n  /**\n   * @protected\n   */\n  _question = ''\n  /** @protected */\n  _hintText = ''\n  /** @protected */\n  _optional = false\n  /**\n   * @type {string}\n   * @protected\n   */\n  _shortDesc = ''\n  /**\n   * @type {string}\n   * @protected\n   */\n  _content = ''\n  /**\n   *\n   * @type {ListElement[]}\n   * @private\n   */\n  _items = []\n  afterInputsHTML = '<div class=\"govuk-inset-text\">No items added yet.</div>'\n\n  /**\n   * @param {BaseSettings} baseSettings\n   */\n  constructor({ question, hintText, optional, shortDesc, items, content }) {\n    this._question = question\n    this._hintText = hintText\n    this._optional = optional\n    this._shortDesc = shortDesc\n    this._items = items\n    this._content = content\n  }\n\n  /**\n   * @returns {BaseSettings}\n   */\n  get values() {\n    return {\n      question: this._question,\n      hintText: this._hintText,\n      optional: this._optional,\n      shortDesc: this._shortDesc,\n      items: this._items,\n      content: this._content\n    }\n  }\n\n  /**\n   * @param {string} _value\n   */\n  setPreviewHTML(_value) {\n    // Not implemented for server side render\n  }\n\n  /**\n   * @param {HTMLElement} _value\n   */\n  setPreviewDOM(_value) {\n    // Not implemented for server side render\n  }\n}\n\n/**\n * @implements {AutocompleteElements}\n */\nexport class AutocompletePreviewElements extends QuestionPreviewElements {\n  /**\n   * @param {BaseSettings & {autocompleteOptions: string}} elements\n   */\n  constructor({ autocompleteOptions, ...elements }) {\n    super(elements)\n    this.autocompleteOptions = autocompleteOptions\n  }\n}\n\n/**\n * @implements {PageOverviewElements}\n */\nexport class PagePreviewElements {\n  guidance\n  heading\n  addHeading\n  repeatQuestion\n  hasRepeater\n\n  /**\n   * @param {string} heading\n   * @param {string} guidance\n   * @param {boolean} [addHeading]\n   * @param {string} repeatQuestion\n   * @param {boolean} hasRepeater\n   */\n  constructor(\n    heading,\n    guidance = '',\n    addHeading = undefined,\n    repeatQuestion = '',\n    hasRepeater = false\n  ) {\n    this.heading = heading\n    this.guidance = guidance\n    this.addHeading = addHeading ?? heading.length > 0\n    this.repeatQuestion = repeatQuestion\n    this.hasRepeater = hasRepeater\n  }\n}\n\nexport const baseElements = /** @type {BaseSettings} */ ({\n  items: [],\n  optional: false,\n  question: 'Which quest would you like to pick?',\n  hintText: 'Choose one adventure that best suits you.',\n  shortDesc: '',\n  content: '',\n  largeTitle: true\n})\n\nconst list1Id = '414d82a3-4cab-416a-bd54-6b86fbd51120'\nconst list2Id = '801385a4-81e6-4171-96c3-6c6727d97f22'\nconst list3Id = 'e6e3f621-b875-4ca3-a054-cca9149149dd'\nconst list4Id = 'd71b3909-582f-4e90-b6f5-490b89a6eb8f'\n\nconst listElementsBase = /** @type {BaseSettings} */ ({\n  ...baseElements,\n  items: [\n    {\n      label: { text: 'Treasure Hunting' },\n      text: 'Treasure Hunting',\n      value: 'Treasure Hunting',\n      id: list1Id\n    },\n    {\n      label: { text: 'Rescuing the princess' },\n      text: 'Rescuing the princess',\n      value: 'Rescuing the princess',\n      id: list2Id\n    },\n    {\n      label: { text: 'Saving a city' },\n      text: 'Saving a city',\n      value: 'Saving a city',\n      id: list3Id\n    },\n    {\n      label: { text: 'Defeating the baron' },\n      text: 'Defeating the baron',\n      value: 'Defeating the baron',\n      id: list4Id\n    }\n  ]\n})\n\nexport const listElementsStub = {\n  list1Id,\n  list2Id,\n  list3Id,\n  list4Id,\n  baseElements: listElementsBase\n}\n\n/**\n * @param {Partial<BaseSettings>} partialBaseElements\n * @param {jest.Mock<void, [string, QuestionBaseModel]>} renderMock\n * @returns {Question}\n */\nexport function buildPreviewShortAnswer(partialBaseElements, renderMock) {\n  return new Question(\n    new QuestionPreviewElements({\n      ...baseElements,\n      ...partialBaseElements\n    }),\n    new QuestionRendererStub(renderMock)\n  )\n}\n\n/**\n * @import { ListElement } from  '~/src/form/form-editor/types.js'\n * @import { PagePreviewPanelMacro } from '~/src/form/form-editor/macros/types.js'\n * @import { BaseSettings, ListElements, RenderContext, QuestionBaseModel, QuestionElements, QuestionRenderer, AutocompleteElements, PageOverviewElements, PageRenderer } from  '~/src/form/form-editor/preview/types.js'\n */\n"],"mappings":"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","ignoreList":[]}
         
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"preview.js","names":["Question","QuestionRendererStub","renderMock","constructor","render","questionTemplate","questionBaseModel","buildHTML","_questionTemplate","_renderContext","PageRendererStub","pageTemplate","pagePreviewPanelMacro","QuestionPreviewElements","_question","_hintText","_optional","_shortDesc","_content","_items","_usePostcodeLookup","afterInputsHTML","question","hintText","optional","shortDesc","usePostcodeLookup","items","content","values","setPreviewHTML","_value","setPreviewDOM","AutocompletePreviewElements","autocompleteOptions","elements","PagePreviewElements","guidance","heading","addHeading","repeatQuestion","hasRepeater","undefined","length","baseElements","largeTitle","list1Id","list2Id","list3Id","list4Id","listElementsBase","label","text","value","id","listElementsStub","buildPreviewShortAnswer","partialBaseElements"],"sources":["../../../../../src/form/form-editor/__stubs__/preview.js"],"sourcesContent":["import { Question } from '~/src/form/form-editor/preview/question.js'\n\n/**\n * @implements {QuestionRenderer}\n */\nexport class QuestionRendererStub {\n  /**\n   * @type {jest.Mock<void, [string, QuestionBaseModel]>}\n   */\n  renderMock\n\n  /**\n   * @param {jest.Mock<void, [string, QuestionBaseModel]>} renderMock\n   */\n  constructor(renderMock) {\n    this.renderMock = renderMock\n  }\n\n  /**\n   * @param {string} questionTemplate\n   * @param {QuestionBaseModel} questionBaseModel\n   */\n  render(questionTemplate, questionBaseModel) {\n    this.renderMock(questionTemplate, questionBaseModel)\n  }\n\n  /**\n   * @returns {string}\n   * @param {string} _questionTemplate\n   * @param {RenderContext} _renderContext\n   */\n  static buildHTML(_questionTemplate, _renderContext) {\n    return '**** BUILT HTML ****'\n  }\n}\n\n/**\n * @implements {PageRenderer}\n */\nexport class PageRendererStub {\n  /**\n   * @type {jest.Mock<void, [string, PagePreviewPanelMacro]>}\n   */\n  renderMock\n\n  /**\n   * @param {jest.Mock<void, [string, PagePreviewPanelMacro]>} renderMock\n   */\n  constructor(renderMock) {\n    this.renderMock = renderMock\n  }\n\n  /**\n   * @param {string} pageTemplate\n   * @param {PagePreviewPanelMacro} pagePreviewPanelMacro\n   */\n  render(pageTemplate, pagePreviewPanelMacro) {\n    this.renderMock(pageTemplate, pagePreviewPanelMacro)\n  }\n\n  /**\n   * @returns {string}\n   * @param {string} _questionTemplate\n   * @param {RenderContext} _renderContext\n   */\n  static buildHTML(_questionTemplate, _renderContext) {\n    return '**** BUILT HTML ****'\n  }\n}\n\n/**\n * @implements {ListElements}\n */\nexport class QuestionPreviewElements {\n  /**\n   * @protected\n   */\n  _question = ''\n  /** @protected */\n  _hintText = ''\n  /** @protected */\n  _optional = false\n  /**\n   * @type {string}\n   * @protected\n   */\n  _shortDesc = ''\n  /**\n   * @type {string}\n   * @protected\n   */\n  _content = ''\n  /**\n   *\n   * @type {ListElement[]}\n   * @private\n   */\n  _items = []\n  /**\n   * @protected\n   * @type {boolean}\n   */\n  _usePostcodeLookup = false\n  afterInputsHTML = '<div class=\"govuk-inset-text\">No items added yet.</div>'\n\n  /**\n   * @param {BaseSettings} baseSettings\n   */\n  constructor({\n    question,\n    hintText,\n    optional,\n    shortDesc,\n    usePostcodeLookup,\n    items,\n    content\n  }) {\n    this._question = question\n    this._hintText = hintText\n    this._optional = optional\n    this._shortDesc = shortDesc\n    this._items = items\n    this._content = content\n    this._usePostcodeLookup = usePostcodeLookup ?? false\n  }\n\n  /**\n   * @returns {BaseSettings}\n   */\n  get values() {\n    return {\n      question: this._question,\n      hintText: this._hintText,\n      optional: this._optional,\n      shortDesc: this._shortDesc,\n      usePostcodeLookup: this._usePostcodeLookup,\n      items: this._items,\n      content: this._content\n    }\n  }\n\n  /**\n   * @param {string} _value\n   */\n  setPreviewHTML(_value) {\n    // Not implemented for server side render\n  }\n\n  /**\n   * @param {HTMLElement} _value\n   */\n  setPreviewDOM(_value) {\n    // Not implemented for server side render\n  }\n}\n\n/**\n * @implements {AutocompleteElements}\n */\nexport class AutocompletePreviewElements extends QuestionPreviewElements {\n  /**\n   * @param {BaseSettings & {autocompleteOptions: string}} elements\n   */\n  constructor({ autocompleteOptions, ...elements }) {\n    super(elements)\n    this.autocompleteOptions = autocompleteOptions\n  }\n}\n\n/**\n * @implements {PageOverviewElements}\n */\nexport class PagePreviewElements {\n  guidance\n  heading\n  addHeading\n  repeatQuestion\n  hasRepeater\n\n  /**\n   * @param {string} heading\n   * @param {string} guidance\n   * @param {boolean} [addHeading]\n   * @param {string} repeatQuestion\n   * @param {boolean} hasRepeater\n   */\n  constructor(\n    heading,\n    guidance = '',\n    addHeading = undefined,\n    repeatQuestion = '',\n    hasRepeater = false\n  ) {\n    this.heading = heading\n    this.guidance = guidance\n    this.addHeading = addHeading ?? heading.length > 0\n    this.repeatQuestion = repeatQuestion\n    this.hasRepeater = hasRepeater\n  }\n}\n\nexport const baseElements = /** @type {BaseSettings} */ ({\n  items: [],\n  optional: false,\n  question: 'Which quest would you like to pick?',\n  hintText: 'Choose one adventure that best suits you.',\n  shortDesc: '',\n  content: '',\n  largeTitle: true\n})\n\nconst list1Id = '414d82a3-4cab-416a-bd54-6b86fbd51120'\nconst list2Id = '801385a4-81e6-4171-96c3-6c6727d97f22'\nconst list3Id = 'e6e3f621-b875-4ca3-a054-cca9149149dd'\nconst list4Id = 'd71b3909-582f-4e90-b6f5-490b89a6eb8f'\n\nconst listElementsBase = /** @type {BaseSettings} */ ({\n  ...baseElements,\n  items: [\n    {\n      label: { text: 'Treasure Hunting' },\n      text: 'Treasure Hunting',\n      value: 'Treasure Hunting',\n      id: list1Id\n    },\n    {\n      label: { text: 'Rescuing the princess' },\n      text: 'Rescuing the princess',\n      value: 'Rescuing the princess',\n      id: list2Id\n    },\n    {\n      label: { text: 'Saving a city' },\n      text: 'Saving a city',\n      value: 'Saving a city',\n      id: list3Id\n    },\n    {\n      label: { text: 'Defeating the baron' },\n      text: 'Defeating the baron',\n      value: 'Defeating the baron',\n      id: list4Id\n    }\n  ]\n})\n\nexport const listElementsStub = {\n  list1Id,\n  list2Id,\n  list3Id,\n  list4Id,\n  baseElements: listElementsBase\n}\n\n/**\n * @param {Partial<BaseSettings>} partialBaseElements\n * @param {jest.Mock<void, [string, QuestionBaseModel]>} renderMock\n * @returns {Question}\n */\nexport function buildPreviewShortAnswer(partialBaseElements, renderMock) {\n  return new Question(\n    new QuestionPreviewElements({\n      ...baseElements,\n      ...partialBaseElements\n    }),\n    new QuestionRendererStub(renderMock)\n  )\n}\n\n/**\n * @import { ListElement } from  '~/src/form/form-editor/types.js'\n * @import { PagePreviewPanelMacro } from '~/src/form/form-editor/macros/types.js'\n * @import { BaseSettings, ListElements, RenderContext, QuestionBaseModel, QuestionElements, QuestionRenderer, AutocompleteElements, PageOverviewElements, PageRenderer } from  '~/src/form/form-editor/preview/types.js'\n */\n"],"mappings":"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","ignoreList":[]}
         
     | 
| 
         @@ -248,8 +248,8 @@ export const formEditorInputPageSettingsSchema = Joi.object().keys(formEditorInp 
     | 
|
| 
       248 
248 
     | 
    
         
             
            export function govukFieldValueIsString(govukField) {
         
     | 
| 
       249 
249 
     | 
    
         
             
              return ['question', 'hintText', 'shortDescription', 'autoCompleteOptions'].includes(`${govukField.name}`);
         
     | 
| 
       250 
250 
     | 
    
         
             
            }
         
     | 
| 
       251 
     | 
    
         
            -
            export function  
     | 
| 
       252 
     | 
    
         
            -
              if (govukField.name !== 'questionOptional') {
         
     | 
| 
      
 251 
     | 
    
         
            +
            export function govukFieldIsChecked(govukField) {
         
     | 
| 
      
 252 
     | 
    
         
            +
              if (govukField.name !== 'questionOptional' && govukField.name !== 'usePostcodeLookup') {
         
     | 
| 
       253 
253 
     | 
    
         
             
                return false;
         
     | 
| 
       254 
254 
     | 
    
         
             
              }
         
     | 
| 
       255 
255 
     | 
    
         
             
              const checkedValue = govukField.items?.[0].checked;
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"index.js","names":["Joi","ComponentType","MAX_NUMBER_OF_REPEAT_ITEMS","MIN_NUMBER_OF_REPEAT_ITEMS","QuestionTypeSubGroup","pageTypeSchema","string","required","valid","description","questionTypeSchema","WrittenAnswerSubGroup","DateSubGroup","UkAddressField","TelephoneNumberField","FileUploadField","EmailAddressField","ListSubGroup","YesNoField","CheckboxesField","RadiosField","AutocompleteField","questionTypeFullSchema","TextField","MultilineTextField","NumberField","DatePartsField","MonthYearField","SelectField","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","exitPageSchema","boolean","repeaterSchema","minItemsSchema","maxItemsSchema","questionSetNameSchema","needDeclarationSchema","declarationTextSchema","minSchema","maxSchema","minLengthSchema","maxLengthSchema","maxFutureSchema","maxPastSchema","precisionSchema","prefixSchema","regexSchema","rowsSchema","suffixSchema","classesSchema","jsEnabledSchema","usePostcodeLookupSchema","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  MAX_NUMBER_OF_REPEAT_ITEMS,\n  MIN_NUMBER_OF_REPEAT_ITEMS\n} from '~/src/form/form-definition/index.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    ComponentType.SelectField\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    ComponentType.SelectField\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 exitPageSchema = Joi.boolean()\n  .default(false)\n  .optional()\n  .description('Determines if page is set as an Exit 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(MIN_NUMBER_OF_REPEAT_ITEMS)\n  .description('The minimum number of repeater items')\n\nexport const maxItemsSchema = Joi.number()\n  .empty('')\n  .max(MAX_NUMBER_OF_REPEAT_ITEMS)\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\nexport const usePostcodeLookupSchema = Joi.string()\n  .trim()\n  .optional()\n  .valid('', 'true')\n  .description(\n    'Indicates whether a UK address component supports postcode lookup. Empty string or \"true\" values are accepted.'\n  )\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  usePostcodeLookupSchema\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 
     | 
    
         
            +
            {"version":3,"file":"index.js","names":["Joi","ComponentType","MAX_NUMBER_OF_REPEAT_ITEMS","MIN_NUMBER_OF_REPEAT_ITEMS","QuestionTypeSubGroup","pageTypeSchema","string","required","valid","description","questionTypeSchema","WrittenAnswerSubGroup","DateSubGroup","UkAddressField","TelephoneNumberField","FileUploadField","EmailAddressField","ListSubGroup","YesNoField","CheckboxesField","RadiosField","AutocompleteField","questionTypeFullSchema","TextField","MultilineTextField","NumberField","DatePartsField","MonthYearField","SelectField","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","exitPageSchema","boolean","repeaterSchema","minItemsSchema","maxItemsSchema","questionSetNameSchema","needDeclarationSchema","declarationTextSchema","minSchema","maxSchema","minLengthSchema","maxLengthSchema","maxFutureSchema","maxPastSchema","precisionSchema","prefixSchema","regexSchema","rowsSchema","suffixSchema","classesSchema","jsEnabledSchema","usePostcodeLookupSchema","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","govukFieldIsChecked","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  MAX_NUMBER_OF_REPEAT_ITEMS,\n  MIN_NUMBER_OF_REPEAT_ITEMS\n} from '~/src/form/form-definition/index.js'\nimport {\n  type FormEditorInputCheckAnswersSettings,\n  type FormEditorInputPage,\n  type FormEditorInputPageSettings,\n  type FormEditorInputQuestion,\n  type GovukField,\n  type GovukFieldQuestionOptional,\n  type GovukFieldUsePostcodeLookup,\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    ComponentType.SelectField\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    ComponentType.SelectField\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 exitPageSchema = Joi.boolean()\n  .default(false)\n  .optional()\n  .description('Determines if page is set as an Exit 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(MIN_NUMBER_OF_REPEAT_ITEMS)\n  .description('The minimum number of repeater items')\n\nexport const maxItemsSchema = Joi.number()\n  .empty('')\n  .max(MAX_NUMBER_OF_REPEAT_ITEMS)\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\nexport const usePostcodeLookupSchema = Joi.string()\n  .trim()\n  .optional()\n  .valid('', 'true')\n  .description(\n    'Indicates whether a UK address component supports postcode lookup. Empty string or \"true\" values are accepted.'\n  )\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  usePostcodeLookupSchema\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 govukFieldIsChecked(\n  govukField: GovukField\n): govukField is GovukFieldQuestionOptional | GovukFieldUsePostcodeLookup {\n  if (\n    govukField.name !== 'questionOptional' &&\n    govukField.name !== 'usePostcodeLookup'\n  ) {\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":[]}
         
     | 
| 
         @@ -2,6 +2,7 @@ import { ComponentType } from "../../../components/enums.js"; 
     | 
|
| 
       2 
2 
     | 
    
         
             
            import { autoCompleteOptionsSchema } from "../index.js";
         
     | 
| 
       3 
3 
     | 
    
         
             
            import { PreviewComponent } from "./preview.js";
         
     | 
| 
       4 
4 
     | 
    
         
             
            import { Question } from "./question.js";
         
     | 
| 
      
 5 
     | 
    
         
            +
            import { buildCombinedId } from "./utils.js";
         
     | 
| 
       5 
6 
     | 
    
         
             
            export class AutocompleteListQuestion extends Question {
         
     | 
| 
       6 
7 
     | 
    
         
             
              /**
         
     | 
| 
       7 
8 
     | 
    
         
             
               * @type {ComponentType}
         
     | 
| 
         @@ -68,7 +69,7 @@ export class AutocompleteQuestion extends AutocompleteListQuestion { 
     | 
|
| 
       68 
69 
     | 
    
         
             
              }
         
     | 
| 
       69 
70 
     | 
    
         
             
              get renderInput() {
         
     | 
| 
       70 
71 
     | 
    
         
             
                return {
         
     | 
| 
       71 
     | 
    
         
            -
                  id: this._fieldName,
         
     | 
| 
      
 72 
     | 
    
         
            +
                  id: buildCombinedId(this._fieldName, this._id),
         
     | 
| 
       72 
73 
     | 
    
         
             
                  name: this._fieldName,
         
     | 
| 
       73 
74 
     | 
    
         
             
                  attributes: {
         
     | 
| 
       74 
75 
     | 
    
         
             
                    'data-module': 'govuk-accessible-autocomplete'
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"autocomplete.js","names":["ComponentType","autoCompleteOptionsSchema","PreviewComponent","Question","AutocompleteListQuestion","componentType","AutocompleteField","_questionTemplate","PATH","_fieldName","customRenderFields","attributes","items","_htmlElements","values","AutocompleteQuestion","_autocompleteList","constructor","autocompleteElements","questionRenderer","setAutocompleteList","autocompleteOptions","autoCompleteList","id","value","text","listHTML","validationResult","validate","error","map","render","renderInput","name","hint","label"],"sources":["../../../../../src/form/form-editor/preview/autocomplete.js"],"sourcesContent":["import { ComponentType } from '~/src/components/enums.js'\nimport { autoCompleteOptionsSchema } from '~/src/form/form-editor/index.js'\nimport { PreviewComponent } from '~/src/form/form-editor/preview/preview.js'\nimport { Question } from '~/src/form/form-editor/preview/question.js'\n\nexport class AutocompleteListQuestion extends Question {\n  /**\n   * @type {ComponentType}\n   */\n  componentType = ComponentType.AutocompleteField\n  _questionTemplate = PreviewComponent.PATH + 'autocompletefield.njk'\n  /**\n   * @type {string}\n   * @protected\n   */\n  _fieldName = 'autoCompleteField'\n\n  /**\n   * @returns {Partial<QuestionBaseModel>}\n   */\n  get customRenderFields() {\n    return {\n      attributes: { 'data-module': 'govuk-accessible-autocomplete' },\n      items: this._htmlElements.values.items\n    }\n  }\n}\n\nexport class AutocompleteQuestion extends AutocompleteListQuestion {\n  /**\n   * @type {ListElement[]}\n   * @private\n   */\n  _autocompleteList = []\n  /**\n   * @param {AutocompleteElements} autocompleteElements\n   * @param {QuestionRenderer} questionRenderer\n   */\n  constructor(autocompleteElements, questionRenderer) {\n    super(autocompleteElements, questionRenderer)\n    this.setAutocompleteList(autocompleteElements.autocompleteOptions)\n  }\n\n  get autoCompleteList() {\n    return [{ id: '', value: '', text: '' }, ...this._autocompleteList]\n  }\n\n  /**\n   * @param {string} listHTML\n   */\n  setAutocompleteList(listHTML) {\n    const validationResult =\n      /** @type {ValidationResult<{text: string, value: string}[]>} */ (\n        autoCompleteOptionsSchema.validate(listHTML)\n      )\n\n    if (!validationResult.error) {\n      this._autocompleteList = validationResult.value.map(\n        ({ text, value }) => ({\n          id: text,\n          text,\n          value\n        })\n      )\n      this.render()\n    }\n  }\n\n  get renderInput() {\n    return {\n      id: this._fieldName,\n      name: this._fieldName,\n      attributes: { 'data-module': 'govuk-accessible-autocomplete' },\n      hint: this.hint,\n      label: this.label,\n      items: this.autoCompleteList\n    }\n  }\n}\n\n/**\n * @import { ValidationResult } from 'joi'\n * @import { ListElement } from '~/src/form/form-editor/types.js'\n * @import { AutocompleteElements, QuestionRenderer, QuestionBaseModel } from '~/src/form/form-editor/preview/types.js'\n */\n"],"mappings":"AAAA,SAASA,aAAa;AACtB,SAASC,yBAAyB;AAClC,SAASC,gBAAgB;AACzB,SAASC,QAAQ; 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"autocomplete.js","names":["ComponentType","autoCompleteOptionsSchema","PreviewComponent","Question","buildCombinedId","AutocompleteListQuestion","componentType","AutocompleteField","_questionTemplate","PATH","_fieldName","customRenderFields","attributes","items","_htmlElements","values","AutocompleteQuestion","_autocompleteList","constructor","autocompleteElements","questionRenderer","setAutocompleteList","autocompleteOptions","autoCompleteList","id","value","text","listHTML","validationResult","validate","error","map","render","renderInput","_id","name","hint","label"],"sources":["../../../../../src/form/form-editor/preview/autocomplete.js"],"sourcesContent":["import { ComponentType } from '~/src/components/enums.js'\nimport { autoCompleteOptionsSchema } from '~/src/form/form-editor/index.js'\nimport { PreviewComponent } from '~/src/form/form-editor/preview/preview.js'\nimport { Question } from '~/src/form/form-editor/preview/question.js'\nimport { buildCombinedId } from '~/src/form/form-editor/preview/utils.js'\n\nexport class AutocompleteListQuestion extends Question {\n  /**\n   * @type {ComponentType}\n   */\n  componentType = ComponentType.AutocompleteField\n  _questionTemplate = PreviewComponent.PATH + 'autocompletefield.njk'\n  /**\n   * @type {string}\n   * @protected\n   */\n  _fieldName = 'autoCompleteField'\n\n  /**\n   * @returns {Partial<QuestionBaseModel>}\n   */\n  get customRenderFields() {\n    return {\n      attributes: { 'data-module': 'govuk-accessible-autocomplete' },\n      items: this._htmlElements.values.items\n    }\n  }\n}\n\nexport class AutocompleteQuestion extends AutocompleteListQuestion {\n  /**\n   * @type {ListElement[]}\n   * @private\n   */\n  _autocompleteList = []\n  /**\n   * @param {AutocompleteElements} autocompleteElements\n   * @param {QuestionRenderer} questionRenderer\n   */\n  constructor(autocompleteElements, questionRenderer) {\n    super(autocompleteElements, questionRenderer)\n    this.setAutocompleteList(autocompleteElements.autocompleteOptions)\n  }\n\n  get autoCompleteList() {\n    return [{ id: '', value: '', text: '' }, ...this._autocompleteList]\n  }\n\n  /**\n   * @param {string} listHTML\n   */\n  setAutocompleteList(listHTML) {\n    const validationResult =\n      /** @type {ValidationResult<{text: string, value: string}[]>} */ (\n        autoCompleteOptionsSchema.validate(listHTML)\n      )\n\n    if (!validationResult.error) {\n      this._autocompleteList = validationResult.value.map(\n        ({ text, value }) => ({\n          id: text,\n          text,\n          value\n        })\n      )\n      this.render()\n    }\n  }\n\n  get renderInput() {\n    return {\n      id: buildCombinedId(this._fieldName, this._id),\n      name: this._fieldName,\n      attributes: { 'data-module': 'govuk-accessible-autocomplete' },\n      hint: this.hint,\n      label: this.label,\n      items: this.autoCompleteList\n    }\n  }\n}\n\n/**\n * @import { ValidationResult } from 'joi'\n * @import { ListElement } from '~/src/form/form-editor/types.js'\n * @import { AutocompleteElements, QuestionRenderer, QuestionBaseModel } from '~/src/form/form-editor/preview/types.js'\n */\n"],"mappings":"AAAA,SAASA,aAAa;AACtB,SAASC,yBAAyB;AAClC,SAASC,gBAAgB;AACzB,SAASC,QAAQ;AACjB,SAASC,eAAe;AAExB,OAAO,MAAMC,wBAAwB,SAASF,QAAQ,CAAC;EACrD;AACF;AACA;EACEG,aAAa,GAAGN,aAAa,CAACO,iBAAiB;EAC/CC,iBAAiB,GAAGN,gBAAgB,CAACO,IAAI,GAAG,uBAAuB;EACnE;AACF;AACA;AACA;EACEC,UAAU,GAAG,mBAAmB;;EAEhC;AACF;AACA;EACE,IAAIC,kBAAkBA,CAAA,EAAG;IACvB,OAAO;MACLC,UAAU,EAAE;QAAE,aAAa,EAAE;MAAgC,CAAC;MAC9DC,KAAK,EAAE,IAAI,CAACC,aAAa,CAACC,MAAM,CAACF;IACnC,CAAC;EACH;AACF;AAEA,OAAO,MAAMG,oBAAoB,SAASX,wBAAwB,CAAC;EACjE;AACF;AACA;AACA;EACEY,iBAAiB,GAAG,EAAE;EACtB;AACF;AACA;AACA;EACEC,WAAWA,CAACC,oBAAoB,EAAEC,gBAAgB,EAAE;IAClD,KAAK,CAACD,oBAAoB,EAAEC,gBAAgB,CAAC;IAC7C,IAAI,CAACC,mBAAmB,CAACF,oBAAoB,CAACG,mBAAmB,CAAC;EACpE;EAEA,IAAIC,gBAAgBA,CAAA,EAAG;IACrB,OAAO,CAAC;MAAEC,EAAE,EAAE,EAAE;MAAEC,KAAK,EAAE,EAAE;MAAEC,IAAI,EAAE;IAAG,CAAC,EAAE,GAAG,IAAI,CAACT,iBAAiB,CAAC;EACrE;;EAEA;AACF;AACA;EACEI,mBAAmBA,CAACM,QAAQ,EAAE;IAC5B,MAAMC,gBAAgB,GACpB;IACE3B,yBAAyB,CAAC4B,QAAQ,CAACF,QAAQ,CAC5C;IAEH,IAAI,CAACC,gBAAgB,CAACE,KAAK,EAAE;MAC3B,IAAI,CAACb,iBAAiB,GAAGW,gBAAgB,CAACH,KAAK,CAACM,GAAG,CACjD,CAAC;QAAEL,IAAI;QAAED;MAAM,CAAC,MAAM;QACpBD,EAAE,EAAEE,IAAI;QACRA,IAAI;QACJD;MACF,CAAC,CACH,CAAC;MACD,IAAI,CAACO,MAAM,CAAC,CAAC;IACf;EACF;EAEA,IAAIC,WAAWA,CAAA,EAAG;IAChB,OAAO;MACLT,EAAE,EAAEpB,eAAe,CAAC,IAAI,CAACM,UAAU,EAAE,IAAI,CAACwB,GAAG,CAAC;MAC9CC,IAAI,EAAE,IAAI,CAACzB,UAAU;MACrBE,UAAU,EAAE;QAAE,aAAa,EAAE;MAAgC,CAAC;MAC9DwB,IAAI,EAAE,IAAI,CAACA,IAAI;MACfC,KAAK,EAAE,IAAI,CAACA,KAAK;MACjBxB,KAAK,EAAE,IAAI,CAACU;IACd,CAAC;EACH;AACF;;AAEA;AACA;AACA;AACA;AACA","ignoreList":[]}
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"page-controller.js","names":["PreviewPageControllerBase","mapComponentToPreviewQuestion","Markdown","questionRenderer","render","_questionTemplate","_questionBaseModel","PreviewPageController","PATH","_components","constructor","components","elements","definition","renderer","questions","map","firstQuestion","shift","_guidanceComponent","getOrCreateGuidanceComponent","_guidanceText","guidance","constructComponents","_showTitle","addHeading","_sectionTitle","repeatQuestion","_isRepeater","hasRepeater","HighlightClass","#constructComponents","undefined","componentsWithGuidance","_guidanceComponents","component","model","_overrideComponentHeading","questionType","componentType","showLargeTitle","componentsLength","length","_highlighted","_title","trim","question","largeTitle","fieldset","renderInput","legend","classes","label","titleAndFirstTitleSame","_getTitle","_getGuidanceText","repeaterText","_getSectionTitleText","repeaterButton","repeaterButtonText","_isHighlighted","REPEATER","text","firstToken","rest","restOfStr","join","toLowerCase","guidanceComponent","createGuidanceComponent"],"sources":["../../../../../../src/form/form-editor/preview/controller/page-controller.js"],"sourcesContent":["import { PreviewPageControllerBase } from '~/src/form/form-editor/preview/controller/page-controller-base.js'\nimport { mapComponentToPreviewQuestion } from '~/src/form/form-editor/preview/helpers.js'\nimport { Markdown } from '~/src/form/form-editor/preview/markdown.js'\n\n/**\n * @type {QuestionRenderer}\n */\nconst questionRenderer = {\n  /**\n   * @param {string} _questionTemplate\n   * @param {QuestionBaseModel} _questionBaseModel\n   */\n  render(_questionTemplate, _questionBaseModel) {\n    //\n  }\n}\n\nexport class PreviewPageController extends PreviewPageControllerBase {\n  static PATH = PreviewPageControllerBase.PATH\n  /**\n   * @protected\n   * @type {Question[]}\n   */\n  _components = []\n\n  /**\n   * @param {ComponentDef[]} components\n   * @param {PageOverviewElements} elements\n   * @param {FormDefinition} definition\n   * @param {PageRenderer} renderer\n   */\n  constructor(components, elements, definition, renderer) {\n    super(elements, renderer)\n    const questions = components.map(\n      mapComponentToPreviewQuestion(questionRenderer, definition)\n    )\n    const firstQuestion = /** @type { Markdown | undefined | Question }  */ (\n      questions.shift()\n    )\n    this._guidanceComponent =\n      PreviewPageController.getOrCreateGuidanceComponent(firstQuestion)\n    this._guidanceText = elements.guidance\n    this._components = this.#constructComponents(firstQuestion, questions)\n    this._showTitle = elements.addHeading\n    this._sectionTitle = elements.repeatQuestion ?? ''\n    this._isRepeater = elements.hasRepeater\n  }\n\n  /**\n   * @type {typeof PreviewPageControllerBase.HighlightClass}\n   */\n  static HighlightClass = PreviewPageControllerBase.HighlightClass\n\n  /**\n   * @param { Question | Markdown | undefined} firstQuestion\n   * @param {Question[]} questions\n   * @returns {Question[]}\n   */\n  #constructComponents(firstQuestion, questions) {\n    return firstQuestion instanceof Markdown || firstQuestion === undefined\n      ? questions\n      : [firstQuestion, ...questions]\n  }\n\n  /**\n   * @returns {PagePreviewComponent[]}\n   */\n  get components() {\n    const componentsWithGuidance = /** @type {Question[]} */ ([\n      ...this._guidanceComponents,\n      ...this._components\n    ])\n\n    return componentsWithGuidance.map((component) => {\n      return {\n        model: this._overrideComponentHeading(component),\n        questionType: component.componentType\n      }\n    })\n  }\n\n  /**\n   * @returns {boolean}\n   */\n  get showLargeTitle() {\n    const componentsLength =\n      this._components.length + this._guidanceComponents.length\n\n    if (componentsLength > 1 || this._highlighted === 'title') {\n      return false\n    }\n    // |_ one component and title not highlighted\n    if (this._title.trim() === this._components[0]?.question?.trim()) {\n      return true\n    }\n    // titles not the same\n\n    return !this._showTitle // add page heading deselected?\n  }\n\n  /**\n   * @param {PreviewComponent} component\n   * @returns {QuestionBaseModel}\n   */\n  _overrideComponentHeading(component) {\n    const largeTitle = this.showLargeTitle\n\n    const fieldset = component.renderInput.fieldset\n      ? {\n          fieldset: {\n            legend: {\n              ...component.renderInput.fieldset.legend,\n              classes: largeTitle\n                ? 'govuk-fieldset__legend--l'\n                : 'govuk-fieldset__legend--m'\n            }\n          }\n        }\n      : {}\n\n    const label = component.renderInput.label\n      ? {\n          label: {\n            ...component.renderInput.label,\n            classes: largeTitle ? 'govuk-label--l' : 'govuk-label--m'\n          }\n        }\n      : {}\n\n    return {\n      ...component.renderInput,\n      ...fieldset,\n      ...label\n    }\n  }\n\n  /**\n   * @returns {boolean}\n   */\n  get titleAndFirstTitleSame() {\n    return (\n      this._components.length > 0 &&\n      this._title.trim() === this._components[0]?.question?.trim() &&\n      this.components.length === 1 &&\n      this._highlighted !== 'title'\n    )\n  }\n\n  /**\n   * @returns {string}\n   * @protected\n   */\n  _getTitle() {\n    if (!this._showTitle || this.titleAndFirstTitleSame) {\n      return ''\n    }\n    return super._getTitle()\n  }\n\n  /**\n   * @returns {string}\n   * @protected\n   */\n  _getGuidanceText() {\n    if (!this._showTitle) {\n      return ''\n    }\n    return super._getGuidanceText()\n  }\n\n  get repeaterText() {\n    if (!this._isRepeater) {\n      return undefined\n    }\n    if (!this._sectionTitle.length) {\n      return 'Question set name'\n    }\n    return this._sectionTitle + ' 1'\n  }\n\n  /**\n   * @returns {string|undefined}\n   * @protected\n   */\n  _getSectionTitleText() {\n    if (this._isRepeater) {\n      return this.repeaterText\n    }\n    return undefined\n  }\n\n  get repeaterButton() {\n    if (this.repeaterButtonText === undefined) {\n      return undefined\n    }\n    return {\n      classes: this._isHighlighted(\n        PreviewPageControllerBase.HighlightClass.REPEATER\n      ),\n      text: this.repeaterButtonText\n    }\n  }\n\n  get repeaterButtonText() {\n    if (!this._isRepeater) {\n      return undefined\n    }\n\n    if (this._sectionTitle === '') {\n      return '[question set name]'\n    }\n\n    const [firstToken, ...rest] = this._sectionTitle\n    // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n    const restOfStr = rest ? rest.join('') : ''\n    return firstToken.toLowerCase() + restOfStr\n  }\n\n  /**\n   * Helper method to return the guidance or a new one\n   * @param { Markdown | Question | undefined } guidanceComponent\n   * @returns {Markdown}\n   * @private\n   */\n  static getOrCreateGuidanceComponent(guidanceComponent) {\n    if (guidanceComponent instanceof Markdown) {\n      return guidanceComponent\n    }\n    return PreviewPageControllerBase.createGuidanceComponent()\n  }\n}\n\n/**\n * @import { PageRenderer, PageOverviewElements, QuestionRenderer, QuestionBaseModel } from '~/src/form/form-editor/preview/types.js'\n * @import { Question } from '~/src/form/form-editor/preview/question.js'\n * @import { PreviewComponent } from '~/src/form/form-editor/preview/preview.js'\n * @import { FormDefinition } from '~/src/form/form-definition/types.js'\n * @import { ComponentDef } from '~/src/components/types.js'\n * @import { PagePreviewComponent } from '~/src/form/form-editor/macros/types.js'\n */\n"],"mappings":"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","ignoreList":[]}
         
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"page-controller.js","names":["PreviewPageControllerBase","mapComponentToPreviewQuestion","Markdown","questionRenderer","render","_questionTemplate","_questionBaseModel","PreviewPageController","PATH","_components","constructor","components","elements","definition","renderer","questions","map","firstQuestion","shift","_guidanceComponent","getOrCreateGuidanceComponent","_guidanceText","guidance","constructComponents","_showTitle","addHeading","_sectionTitle","repeatQuestion","_isRepeater","hasRepeater","HighlightClass","#constructComponents","undefined","componentsWithGuidance","_guidanceComponents","component","model","_overrideComponentHeading","questionType","componentType","showLargeTitle","componentsLength","length","_highlighted","_title","trim","question","largeTitle","fieldset","renderInput","legend","classes","label","titleAndFirstTitleSame","_getTitle","_getGuidanceText","repeaterText","_getSectionTitleText","repeaterButton","repeaterButtonText","_isHighlighted","REPEATER","text","firstToken","rest","restOfStr","join","toLowerCase","guidanceComponent","createGuidanceComponent"],"sources":["../../../../../../src/form/form-editor/preview/controller/page-controller.js"],"sourcesContent":["import { PreviewPageControllerBase } from '~/src/form/form-editor/preview/controller/page-controller-base.js'\nimport { mapComponentToPreviewQuestion } from '~/src/form/form-editor/preview/helpers.js'\nimport { Markdown } from '~/src/form/form-editor/preview/markdown.js'\n\n/**\n * @type {QuestionRenderer}\n */\nconst questionRenderer = {\n  /**\n   * @param {string} _questionTemplate\n   * @param {QuestionBaseModel} _questionBaseModel\n   */\n  render(_questionTemplate, _questionBaseModel) {\n    //\n  }\n}\n\nexport class PreviewPageController extends PreviewPageControllerBase {\n  static PATH = PreviewPageControllerBase.PATH\n  /**\n   * @protected\n   * @type {Question[]}\n   */\n  _components = []\n\n  /**\n   * @param {ComponentDef[]} components\n   * @param {PageOverviewElements} elements\n   * @param {FormDefinition} definition\n   * @param {PageRenderer} renderer\n   */\n  constructor(components, elements, definition, renderer) {\n    super(elements, renderer)\n    const questions = components.map(\n      mapComponentToPreviewQuestion(questionRenderer, definition)\n    )\n\n    const firstQuestion = /** @type { Markdown | undefined | Question }  */ (\n      questions.shift()\n    )\n    this._guidanceComponent =\n      PreviewPageController.getOrCreateGuidanceComponent(firstQuestion)\n    this._guidanceText = elements.guidance\n    this._components = this.#constructComponents(firstQuestion, questions)\n    this._showTitle = elements.addHeading\n    this._sectionTitle = elements.repeatQuestion ?? ''\n    this._isRepeater = elements.hasRepeater\n  }\n\n  /**\n   * @type {typeof PreviewPageControllerBase.HighlightClass}\n   */\n  static HighlightClass = PreviewPageControllerBase.HighlightClass\n\n  /**\n   * @param { Question | Markdown | undefined} firstQuestion\n   * @param {Question[]} questions\n   * @returns {Question[]}\n   */\n  #constructComponents(firstQuestion, questions) {\n    return firstQuestion instanceof Markdown || firstQuestion === undefined\n      ? questions\n      : [firstQuestion, ...questions]\n  }\n\n  /**\n   * @returns {PagePreviewComponent[]}\n   */\n  get components() {\n    const componentsWithGuidance = /** @type {Question[]} */ ([\n      ...this._guidanceComponents,\n      ...this._components\n    ])\n\n    return componentsWithGuidance.map((component) => {\n      return {\n        model: this._overrideComponentHeading(component),\n        questionType: component.componentType\n      }\n    })\n  }\n\n  /**\n   * @returns {boolean}\n   */\n  get showLargeTitle() {\n    const componentsLength =\n      this._components.length + this._guidanceComponents.length\n\n    if (componentsLength > 1 || this._highlighted === 'title') {\n      return false\n    }\n    // |_ one component and title not highlighted\n    if (this._title.trim() === this._components[0]?.question?.trim()) {\n      return true\n    }\n    // titles not the same\n\n    return !this._showTitle // add page heading deselected?\n  }\n\n  /**\n   * @param {PreviewComponent} component\n   * @returns {QuestionBaseModel}\n   */\n  _overrideComponentHeading(component) {\n    const largeTitle = this.showLargeTitle\n\n    const fieldset = component.renderInput.fieldset\n      ? {\n          fieldset: {\n            legend: {\n              ...component.renderInput.fieldset.legend,\n              classes: largeTitle\n                ? 'govuk-fieldset__legend--l'\n                : 'govuk-fieldset__legend--m'\n            }\n          }\n        }\n      : {}\n\n    const label = component.renderInput.label\n      ? {\n          label: {\n            ...component.renderInput.label,\n            classes: largeTitle ? 'govuk-label--l' : 'govuk-label--m'\n          }\n        }\n      : {}\n\n    return {\n      ...component.renderInput,\n      ...fieldset,\n      ...label\n    }\n  }\n\n  /**\n   * @returns {boolean}\n   */\n  get titleAndFirstTitleSame() {\n    return (\n      this._components.length > 0 &&\n      this._title.trim() === this._components[0]?.question?.trim() &&\n      this.components.length === 1 &&\n      this._highlighted !== 'title'\n    )\n  }\n\n  /**\n   * @returns {string}\n   * @protected\n   */\n  _getTitle() {\n    if (!this._showTitle || this.titleAndFirstTitleSame) {\n      return ''\n    }\n    return super._getTitle()\n  }\n\n  /**\n   * @returns {string}\n   * @protected\n   */\n  _getGuidanceText() {\n    if (!this._showTitle) {\n      return ''\n    }\n    return super._getGuidanceText()\n  }\n\n  get repeaterText() {\n    if (!this._isRepeater) {\n      return undefined\n    }\n    if (!this._sectionTitle.length) {\n      return 'Question set name'\n    }\n    return this._sectionTitle + ' 1'\n  }\n\n  /**\n   * @returns {string|undefined}\n   * @protected\n   */\n  _getSectionTitleText() {\n    if (this._isRepeater) {\n      return this.repeaterText\n    }\n    return undefined\n  }\n\n  get repeaterButton() {\n    if (this.repeaterButtonText === undefined) {\n      return undefined\n    }\n    return {\n      classes: this._isHighlighted(\n        PreviewPageControllerBase.HighlightClass.REPEATER\n      ),\n      text: this.repeaterButtonText\n    }\n  }\n\n  get repeaterButtonText() {\n    if (!this._isRepeater) {\n      return undefined\n    }\n\n    if (this._sectionTitle === '') {\n      return '[question set name]'\n    }\n\n    const [firstToken, ...rest] = this._sectionTitle\n    // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n    const restOfStr = rest ? rest.join('') : ''\n    return firstToken.toLowerCase() + restOfStr\n  }\n\n  /**\n   * Helper method to return the guidance or a new one\n   * @param { Markdown | Question | undefined } guidanceComponent\n   * @returns {Markdown}\n   * @private\n   */\n  static getOrCreateGuidanceComponent(guidanceComponent) {\n    if (guidanceComponent instanceof Markdown) {\n      return guidanceComponent\n    }\n    return PreviewPageControllerBase.createGuidanceComponent()\n  }\n}\n\n/**\n * @import { PageRenderer, PageOverviewElements, QuestionRenderer, QuestionBaseModel } from '~/src/form/form-editor/preview/types.js'\n * @import { Question } from '~/src/form/form-editor/preview/question.js'\n * @import { PreviewComponent } from '~/src/form/form-editor/preview/preview.js'\n * @import { FormDefinition } from '~/src/form/form-definition/types.js'\n * @import { ComponentDef } from '~/src/components/types.js'\n * @import { PagePreviewComponent } from '~/src/form/form-editor/macros/types.js'\n */\n"],"mappings":"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","ignoreList":[]}
         
     | 
| 
         @@ -1,6 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            import { ComponentType } from "../../../components/enums.js";
         
     | 
| 
       2 
2 
     | 
    
         
             
            import { HIGHLIGHT_CLASS } from "./constants.js";
         
     | 
| 
       3 
3 
     | 
    
         
             
            import { Question } from "./question.js";
         
     | 
| 
      
 4 
     | 
    
         
            +
            import { buildCombinedId } from "./utils.js";
         
     | 
| 
       4 
5 
     | 
    
         | 
| 
       5 
6 
     | 
    
         
             
            /**
         
     | 
| 
       6 
7 
     | 
    
         
             
             * Simple extension of Question that uses fieldset instead of label - not exported
         
     | 
| 
         @@ -11,9 +12,14 @@ export class FieldsetQuestion extends Question { 
     | 
|
| 
       11 
12 
     | 
    
         
             
               * @type {ComponentType}
         
     | 
| 
       12 
13 
     | 
    
         
             
               */
         
     | 
| 
       13 
14 
     | 
    
         
             
              componentType = ComponentType.TextField;
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              /**
         
     | 
| 
      
 17 
     | 
    
         
            +
               * @protected
         
     | 
| 
      
 18 
     | 
    
         
            +
               * @returns {QuestionBaseModel}
         
     | 
| 
      
 19 
     | 
    
         
            +
               */
         
     | 
| 
      
 20 
     | 
    
         
            +
              _renderInput() {
         
     | 
| 
       15 
21 
     | 
    
         
             
                return {
         
     | 
| 
       16 
     | 
    
         
            -
                  id: this._fieldName,
         
     | 
| 
      
 22 
     | 
    
         
            +
                  id: buildCombinedId(this._fieldName, this._id),
         
     | 
| 
       17 
23 
     | 
    
         
             
                  name: this._fieldName,
         
     | 
| 
       18 
24 
     | 
    
         
             
                  fieldset: this.fieldSet,
         
     | 
| 
       19 
25 
     | 
    
         
             
                  hint: this.hint,
         
     | 
| 
         @@ -22,4 +28,8 @@ export class FieldsetQuestion extends Question { 
     | 
|
| 
       22 
28 
     | 
    
         
             
                };
         
     | 
| 
       23 
29 
     | 
    
         
             
              }
         
     | 
| 
       24 
30 
     | 
    
         
             
            }
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            /**
         
     | 
| 
      
 33 
     | 
    
         
            +
             * @import { QuestionBaseModel } from '~/src/form/form-editor/macros/types.js'
         
     | 
| 
      
 34 
     | 
    
         
            +
             */
         
     | 
| 
       25 
35 
     | 
    
         
             
            //# sourceMappingURL=fieldset-question.js.map
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"fieldset-question.js","names":["ComponentType","HIGHLIGHT_CLASS","Question","FieldsetQuestion","componentType","TextField"," 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"fieldset-question.js","names":["ComponentType","HIGHLIGHT_CLASS","Question","buildCombinedId","FieldsetQuestion","componentType","TextField","_renderInput","id","_fieldName","_id","name","fieldset","fieldSet","hint","classes","_highlighted","customRenderFields"],"sources":["../../../../../src/form/form-editor/preview/fieldset-question.js"],"sourcesContent":["import { ComponentType } from '~/src/components/enums.js'\nimport { HIGHLIGHT_CLASS } from '~/src/form/form-editor/preview/constants.js'\nimport { Question } from '~/src/form/form-editor/preview/question.js'\nimport { buildCombinedId } from '~/src/form/form-editor/preview/utils.js'\n\n/**\n * Simple extension of Question that uses fieldset instead of label - not exported\n * @abstract\n */\nexport class FieldsetQuestion extends Question {\n  /**\n   * @type {ComponentType}\n   */\n  componentType = ComponentType.TextField\n\n  /**\n   * @protected\n   * @returns {QuestionBaseModel}\n   */\n  _renderInput() {\n    return {\n      id: buildCombinedId(this._fieldName, this._id),\n      name: this._fieldName,\n      fieldset: this.fieldSet,\n      hint: this.hint,\n      classes: this._highlighted ? HIGHLIGHT_CLASS : '',\n      ...this.customRenderFields\n    }\n  }\n}\n\n/**\n * @import { QuestionBaseModel } from '~/src/form/form-editor/macros/types.js'\n */\n"],"mappings":"AAAA,SAASA,aAAa;AACtB,SAASC,eAAe;AACxB,SAASC,QAAQ;AACjB,SAASC,eAAe;;AAExB;AACA;AACA;AACA;AACA,OAAO,MAAMC,gBAAgB,SAASF,QAAQ,CAAC;EAC7C;AACF;AACA;EACEG,aAAa,GAAGL,aAAa,CAACM,SAAS;;EAEvC;AACF;AACA;AACA;EACEC,YAAYA,CAAA,EAAG;IACb,OAAO;MACLC,EAAE,EAAEL,eAAe,CAAC,IAAI,CAACM,UAAU,EAAE,IAAI,CAACC,GAAG,CAAC;MAC9CC,IAAI,EAAE,IAAI,CAACF,UAAU;MACrBG,QAAQ,EAAE,IAAI,CAACC,QAAQ;MACvBC,IAAI,EAAE,IAAI,CAACA,IAAI;MACfC,OAAO,EAAE,IAAI,CAACC,YAAY,GAAGf,eAAe,GAAG,EAAE;MACjD,GAAG,IAAI,CAACgB;IACV,CAAC;EACH;AACF;;AAEA;AACA;AACA","ignoreList":[]}
         
     | 
| 
         @@ -17,7 +17,7 @@ import { RadioQuestion } from "./radio.js"; 
     | 
|
| 
       17 
17 
     | 
    
         
             
            import { SelectQuestion } from "./select.js";
         
     | 
| 
       18 
18 
     | 
    
         
             
            import { ShortAnswerQuestion } from "./short-answer.js";
         
     | 
| 
       19 
19 
     | 
    
         
             
            import { SupportingEvidenceQuestion } from "./supporting-evidence.js";
         
     | 
| 
       20 
     | 
    
         
            -
            import { UkAddressQuestion } from "./uk-address.js";
         
     | 
| 
      
 20 
     | 
    
         
            +
            import { UkAddressComponentPreviewElements, UkAddressQuestion } from "./uk-address.js";
         
     | 
| 
       21 
21 
     | 
    
         
             
            import { YesNoQuestion } from "./yes-no.js";
         
     | 
| 
       22 
22 
     | 
    
         
             
            import { findDefinitionListFromComponent } from "../../utils/list.js";
         
     | 
| 
       23 
23 
     | 
    
         
             
            /**
         
     | 
| 
         @@ -59,6 +59,8 @@ export function mapComponentToPreviewQuestion(questionRenderer, definition) { 
     | 
|
| 
       59 
59 
     | 
    
         
             
                if (component.type === ComponentType.AutocompleteField || component.type === ComponentType.SelectField) {
         
     | 
| 
       60 
60 
     | 
    
         
             
                  const list = findDefinitionListFromComponent(component, definition);
         
     | 
| 
       61 
61 
     | 
    
         
             
                  questionElements = new SelectComponentElements(component, list);
         
     | 
| 
      
 62 
     | 
    
         
            +
                } else if (component.type === ComponentType.UkAddressField) {
         
     | 
| 
      
 63 
     | 
    
         
            +
                  questionElements = new UkAddressComponentPreviewElements(component);
         
     | 
| 
       62 
64 
     | 
    
         
             
                } else if (hasSelectionFields(component) && hasListField(component)) {
         
     | 
| 
       63 
65 
     | 
    
         
             
                  const list = findDefinitionListFromComponent(component, definition);
         
     | 
| 
       64 
66 
     | 
    
         
             
                  questionElements = new ListComponentElements(component, list);
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"helpers.js","names":["ComponentType","hasContentField","hasInputField","hasListField","hasSelectionFields","AutocompleteListQuestion","CheckboxQuestion","ComponentElements","ContentElements","DateInputQuestion","EmailAddressQuestion","ListComponentElements","ListQuestion","SelectComponentElements","LongAnswerQuestion","Markdown","MonthYearQuestion","NumberOnlyQuestion","PhoneNumberQuestion","QuestionComponentElements","RadioQuestion","SelectQuestion","ShortAnswerQuestion","SupportingEvidenceQuestion","UkAddressQuestion","YesNoQuestion","findDefinitionListFromComponent","InputFieldComponentDictionary","TextField","Details","InsetText","Html","List","EmailAddressField","NumberField","MultilineTextField","TelephoneNumberField","MonthYearField","DatePartsField","UkAddressField","AutocompleteField","RadiosField","CheckboxesField","SelectField","YesNoField","FileUploadField","mapComponentToPreviewQuestion","questionRenderer","definition","component","questionElements","type","list","QuestionConstructor","previewComponent","id"],"sources":["../../../../../src/form/form-editor/preview/helpers.js"],"sourcesContent":["import { ComponentType } from '~/src/components/enums.js'\nimport {\n  hasContentField,\n  hasInputField,\n  hasListField,\n  hasSelectionFields\n} from '~/src/components/helpers.js'\nimport { AutocompleteListQuestion } from '~/src/form/form-editor/preview/autocomplete.js'\nimport { CheckboxQuestion } from '~/src/form/form-editor/preview/checkbox.js'\nimport { ComponentElements } from '~/src/form/form-editor/preview/component-elements.js'\nimport { ContentElements } from '~/src/form/form-editor/preview/content.js'\nimport { DateInputQuestion } from '~/src/form/form-editor/preview/date-input.js'\nimport { EmailAddressQuestion } from '~/src/form/form-editor/preview/email-address.js'\nimport {\n  ListComponentElements,\n  ListQuestion,\n  SelectComponentElements\n} from '~/src/form/form-editor/preview/list.js'\nimport { LongAnswerQuestion } from '~/src/form/form-editor/preview/long-answer.js'\nimport { Markdown } from '~/src/form/form-editor/preview/markdown.js'\nimport { MonthYearQuestion } from '~/src/form/form-editor/preview/month-year.js'\nimport { NumberOnlyQuestion } from '~/src/form/form-editor/preview/number-only.js'\nimport { PhoneNumberQuestion } from '~/src/form/form-editor/preview/phone-number.js'\nimport { QuestionComponentElements } from '~/src/form/form-editor/preview/question.js'\nimport { RadioQuestion } from '~/src/form/form-editor/preview/radio.js'\nimport { SelectQuestion } from '~/src/form/form-editor/preview/select.js'\nimport { ShortAnswerQuestion } from '~/src/form/form-editor/preview/short-answer.js'\nimport { SupportingEvidenceQuestion } from '~/src/form/form-editor/preview/supporting-evidence.js'\nimport { 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"helpers.js","names":["ComponentType","hasContentField","hasInputField","hasListField","hasSelectionFields","AutocompleteListQuestion","CheckboxQuestion","ComponentElements","ContentElements","DateInputQuestion","EmailAddressQuestion","ListComponentElements","ListQuestion","SelectComponentElements","LongAnswerQuestion","Markdown","MonthYearQuestion","NumberOnlyQuestion","PhoneNumberQuestion","QuestionComponentElements","RadioQuestion","SelectQuestion","ShortAnswerQuestion","SupportingEvidenceQuestion","UkAddressComponentPreviewElements","UkAddressQuestion","YesNoQuestion","findDefinitionListFromComponent","InputFieldComponentDictionary","TextField","Details","InsetText","Html","List","EmailAddressField","NumberField","MultilineTextField","TelephoneNumberField","MonthYearField","DatePartsField","UkAddressField","AutocompleteField","RadiosField","CheckboxesField","SelectField","YesNoField","FileUploadField","mapComponentToPreviewQuestion","questionRenderer","definition","component","questionElements","type","list","QuestionConstructor","previewComponent","id"],"sources":["../../../../../src/form/form-editor/preview/helpers.js"],"sourcesContent":["import { ComponentType } from '~/src/components/enums.js'\nimport {\n  hasContentField,\n  hasInputField,\n  hasListField,\n  hasSelectionFields\n} from '~/src/components/helpers.js'\nimport { AutocompleteListQuestion } from '~/src/form/form-editor/preview/autocomplete.js'\nimport { CheckboxQuestion } from '~/src/form/form-editor/preview/checkbox.js'\nimport { ComponentElements } from '~/src/form/form-editor/preview/component-elements.js'\nimport { ContentElements } from '~/src/form/form-editor/preview/content.js'\nimport { DateInputQuestion } from '~/src/form/form-editor/preview/date-input.js'\nimport { EmailAddressQuestion } from '~/src/form/form-editor/preview/email-address.js'\nimport {\n  ListComponentElements,\n  ListQuestion,\n  SelectComponentElements\n} from '~/src/form/form-editor/preview/list.js'\nimport { LongAnswerQuestion } from '~/src/form/form-editor/preview/long-answer.js'\nimport { Markdown } from '~/src/form/form-editor/preview/markdown.js'\nimport { MonthYearQuestion } from '~/src/form/form-editor/preview/month-year.js'\nimport { NumberOnlyQuestion } from '~/src/form/form-editor/preview/number-only.js'\nimport { PhoneNumberQuestion } from '~/src/form/form-editor/preview/phone-number.js'\nimport { QuestionComponentElements } from '~/src/form/form-editor/preview/question.js'\nimport { RadioQuestion } from '~/src/form/form-editor/preview/radio.js'\nimport { SelectQuestion } from '~/src/form/form-editor/preview/select.js'\nimport { ShortAnswerQuestion } from '~/src/form/form-editor/preview/short-answer.js'\nimport { SupportingEvidenceQuestion } from '~/src/form/form-editor/preview/supporting-evidence.js'\nimport {\n  UkAddressComponentPreviewElements,\n  UkAddressQuestion\n} from '~/src/form/form-editor/preview/uk-address.js'\nimport { YesNoQuestion } from '~/src/form/form-editor/preview/yes-no.js'\nimport { findDefinitionListFromComponent } from '~/src/form/utils/list.js'\n/**\n * @type {Record<ComponentType, typeof PreviewComponent>}\n */\nconst InputFieldComponentDictionary = {\n  [ComponentType.TextField]: ShortAnswerQuestion,\n  [ComponentType.Details]: ShortAnswerQuestion,\n  [ComponentType.InsetText]: ShortAnswerQuestion,\n  [ComponentType.Html]: ShortAnswerQuestion,\n  [ComponentType.Markdown]: Markdown,\n  [ComponentType.List]: ListQuestion,\n  [ComponentType.EmailAddressField]: EmailAddressQuestion,\n  [ComponentType.NumberField]: NumberOnlyQuestion,\n  [ComponentType.MultilineTextField]: LongAnswerQuestion,\n  [ComponentType.TelephoneNumberField]: PhoneNumberQuestion,\n  [ComponentType.MonthYearField]: MonthYearQuestion,\n  [ComponentType.DatePartsField]: DateInputQuestion,\n  [ComponentType.UkAddressField]: UkAddressQuestion,\n  [ComponentType.AutocompleteField]: AutocompleteListQuestion,\n  [ComponentType.RadiosField]: RadioQuestion,\n  [ComponentType.CheckboxesField]: CheckboxQuestion,\n  [ComponentType.SelectField]: SelectQuestion,\n  [ComponentType.YesNoField]: YesNoQuestion,\n  [ComponentType.FileUploadField]: SupportingEvidenceQuestion\n}\n\n/**\n * @param {QuestionRenderer} questionRenderer\n * @param {FormDefinition} definition\n * @returns {(component: ComponentDef) => Question}\n */\nexport function mapComponentToPreviewQuestion(questionRenderer, definition) {\n  return /** @type {(component: ComponentDef) => Question} */ (\n    (component) => {\n      /**\n       * @type {QuestionElements}\n       */\n      let questionElements\n\n      if (\n        component.type === ComponentType.AutocompleteField ||\n        component.type === ComponentType.SelectField\n      ) {\n        const list = findDefinitionListFromComponent(component, definition)\n        questionElements = new SelectComponentElements(component, list)\n      } else if (component.type === ComponentType.UkAddressField) {\n        questionElements = new UkAddressComponentPreviewElements(component)\n      } else if (hasSelectionFields(component) && hasListField(component)) {\n        const list = findDefinitionListFromComponent(component, definition)\n        questionElements = new ListComponentElements(component, list)\n      } else if (\n        hasInputField(component) ||\n        component.type === ComponentType.YesNoField\n      ) {\n        questionElements = new QuestionComponentElements(component)\n      } else if (hasContentField(component)) {\n        questionElements = new ContentElements(component)\n      } else {\n        questionElements = new ComponentElements(component)\n      }\n\n      const QuestionConstructor = InputFieldComponentDictionary[component.type]\n\n      const previewComponent = new QuestionConstructor(\n        questionElements,\n        questionRenderer\n      )\n      previewComponent.id = component.id\n      return previewComponent\n    }\n  )\n}\n\n/**\n * @import { QuestionElements, QuestionRenderer } from '~/src/form/form-editor/preview/types.js'\n * @import { Question } from '~/src/form/form-editor/preview/question.js'\n * @import { PreviewComponent } from '~/src/form/form-editor/preview/preview.js'\n * @import { FormDefinition } from '~/src/form/form-definition/types.js'\n * @import { ComponentDef } from '~/src/components/types.js'\n */\n"],"mappings":"AAAA,SAASA,aAAa;AACtB,SACEC,eAAe,EACfC,aAAa,EACbC,YAAY,EACZC,kBAAkB;AAEpB,SAASC,wBAAwB;AACjC,SAASC,gBAAgB;AACzB,SAASC,iBAAiB;AAC1B,SAASC,eAAe;AACxB,SAASC,iBAAiB;AAC1B,SAASC,oBAAoB;AAC7B,SACEC,qBAAqB,EACrBC,YAAY,EACZC,uBAAuB;AAEzB,SAASC,kBAAkB;AAC3B,SAASC,QAAQ;AACjB,SAASC,iBAAiB;AAC1B,SAASC,kBAAkB;AAC3B,SAASC,mBAAmB;AAC5B,SAASC,yBAAyB;AAClC,SAASC,aAAa;AACtB,SAASC,cAAc;AACvB,SAASC,mBAAmB;AAC5B,SAASC,0BAA0B;AACnC,SACEC,iCAAiC,EACjCC,iBAAiB;AAEnB,SAASC,aAAa;AACtB,SAASC,+BAA+B;AACxC;AACA;AACA;AACA,MAAMC,6BAA6B,GAAG;EACpC,CAAC5B,aAAa,CAAC6B,SAAS,GAAGP,mBAAmB;EAC9C,CAACtB,aAAa,CAAC8B,OAAO,GAAGR,mBAAmB;EAC5C,CAACtB,aAAa,CAAC+B,SAAS,GAAGT,mBAAmB;EAC9C,CAACtB,aAAa,CAACgC,IAAI,GAAGV,mBAAmB;EACzC,CAACtB,aAAa,CAACe,QAAQ,GAAGA,QAAQ;EAClC,CAACf,aAAa,CAACiC,IAAI,GAAGrB,YAAY;EAClC,CAACZ,aAAa,CAACkC,iBAAiB,GAAGxB,oBAAoB;EACvD,CAACV,aAAa,CAACmC,WAAW,GAAGlB,kBAAkB;EAC/C,CAACjB,aAAa,CAACoC,kBAAkB,GAAGtB,kBAAkB;EACtD,CAACd,aAAa,CAACqC,oBAAoB,GAAGnB,mBAAmB;EACzD,CAAClB,aAAa,CAACsC,cAAc,GAAGtB,iBAAiB;EACjD,CAAChB,aAAa,CAACuC,cAAc,GAAG9B,iBAAiB;EACjD,CAACT,aAAa,CAACwC,cAAc,GAAGf,iBAAiB;EACjD,CAACzB,aAAa,CAACyC,iBAAiB,GAAGpC,wBAAwB;EAC3D,CAACL,aAAa,CAAC0C,WAAW,GAAGtB,aAAa;EAC1C,CAACpB,aAAa,CAAC2C,eAAe,GAAGrC,gBAAgB;EACjD,CAACN,aAAa,CAAC4C,WAAW,GAAGvB,cAAc;EAC3C,CAACrB,aAAa,CAAC6C,UAAU,GAAGnB,aAAa;EACzC,CAAC1B,aAAa,CAAC8C,eAAe,GAAGvB;AACnC,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,SAASwB,6BAA6BA,CAACC,gBAAgB,EAAEC,UAAU,EAAE;EAC1E,OAAO,oDACJC,SAAS,IAAK;IACb;AACN;AACA;IACM,IAAIC,gBAAgB;IAEpB,IACED,SAAS,CAACE,IAAI,KAAKpD,aAAa,CAACyC,iBAAiB,IAClDS,SAAS,CAACE,IAAI,KAAKpD,aAAa,CAAC4C,WAAW,EAC5C;MACA,MAAMS,IAAI,GAAG1B,+BAA+B,CAACuB,SAAS,EAAED,UAAU,CAAC;MACnEE,gBAAgB,GAAG,IAAItC,uBAAuB,CAACqC,SAAS,EAAEG,IAAI,CAAC;IACjE,CAAC,MAAM,IAAIH,SAAS,CAACE,IAAI,KAAKpD,aAAa,CAACwC,cAAc,EAAE;MAC1DW,gBAAgB,GAAG,IAAI3B,iCAAiC,CAAC0B,SAAS,CAAC;IACrE,CAAC,MAAM,IAAI9C,kBAAkB,CAAC8C,SAAS,CAAC,IAAI/C,YAAY,CAAC+C,SAAS,CAAC,EAAE;MACnE,MAAMG,IAAI,GAAG1B,+BAA+B,CAACuB,SAAS,EAAED,UAAU,CAAC;MACnEE,gBAAgB,GAAG,IAAIxC,qBAAqB,CAACuC,SAAS,EAAEG,IAAI,CAAC;IAC/D,CAAC,MAAM,IACLnD,aAAa,CAACgD,SAAS,CAAC,IACxBA,SAAS,CAACE,IAAI,KAAKpD,aAAa,CAAC6C,UAAU,EAC3C;MACAM,gBAAgB,GAAG,IAAIhC,yBAAyB,CAAC+B,SAAS,CAAC;IAC7D,CAAC,MAAM,IAAIjD,eAAe,CAACiD,SAAS,CAAC,EAAE;MACrCC,gBAAgB,GAAG,IAAI3C,eAAe,CAAC0C,SAAS,CAAC;IACnD,CAAC,MAAM;MACLC,gBAAgB,GAAG,IAAI5C,iBAAiB,CAAC2C,SAAS,CAAC;IACrD;IAEA,MAAMI,mBAAmB,GAAG1B,6BAA6B,CAACsB,SAAS,CAACE,IAAI,CAAC;IAEzE,MAAMG,gBAAgB,GAAG,IAAID,mBAAmB,CAC9CH,gBAAgB,EAChBH,gBACF,CAAC;IACDO,gBAAgB,CAACC,EAAE,GAAGN,SAAS,CAACM,EAAE;IAClC,OAAOD,gBAAgB;EACzB,CAAC;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA","ignoreList":[]}
         
     | 
| 
         @@ -1,5 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            import { ComponentType } from "../../../components/enums.js";
         
     | 
| 
       2 
2 
     | 
    
         
             
            import { HIGHLIGHT_CLASS } from "./constants.js";
         
     | 
| 
      
 3 
     | 
    
         
            +
            import { buildCombinedId } from "./utils.js";
         
     | 
| 
       3 
4 
     | 
    
         | 
| 
       4 
5 
     | 
    
         
             
            /**
         
     | 
| 
       5 
6 
     | 
    
         
             
             * @abstract
         
     | 
| 
         @@ -140,7 +141,7 @@ export class PreviewComponent { 
     | 
|
| 
       140 
141 
     | 
    
         
             
               */
         
     | 
| 
       141 
142 
     | 
    
         
             
              _renderInput() {
         
     | 
| 
       142 
143 
     | 
    
         
             
                return {
         
     | 
| 
       143 
     | 
    
         
            -
                  id: this._fieldName,
         
     | 
| 
      
 144 
     | 
    
         
            +
                  id: buildCombinedId(this._fieldName, this._id),
         
     | 
| 
       144 
145 
     | 
    
         
             
                  name: this._fieldName,
         
     | 
| 
       145 
146 
     | 
    
         
             
                  classes: this._highlighted ? HIGHLIGHT_CLASS : ''
         
     | 
| 
       146 
147 
     | 
    
         
             
                };
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"preview.js","names":["ComponentType","HIGHLIGHT_CLASS","PreviewComponent","PATH","_id","undefined","componentType","Details","_questionTemplate","_highlight","_fieldName","_questionRenderer","_htmlElements","_highlighted","constructor","htmlElements","questionRenderer","question","optional","values","_question","_optional","getHighlight","element","titleText","optionalText","questionText","label","text","classes","isPageHeading","trim","fieldSet","legend","customRenderFields","_renderInput","id","name","renderInput","render","value","highlight","highlightContent","unHighlightContent"],"sources":["../../../../../src/form/form-editor/preview/preview.js"],"sourcesContent":["import { ComponentType } from '~/src/components/enums.js'\nimport { HIGHLIGHT_CLASS } from '~/src/form/form-editor/preview/constants.js'\n\n/**\n * @abstract\n */\nexport class PreviewComponent {\n  static PATH = 'preview-components/'\n  /**\n   * @type { string | undefined }\n   */\n  _id = undefined\n  /**\n   * @abstract\n   * @type {ComponentType}\n   */\n  componentType = ComponentType.Details\n  /**\n   * @abstract\n   * @type {string}\n   * @protected\n   */\n  _questionTemplate = ''\n  /**\n   * @type { string|null }\n   * @protected\n   */\n  _highlight = null\n  /**\n   * @abstract\n   * @type {string}\n   * @protected\n   */\n  _fieldName = ''\n  /**\n   * @type {QuestionRenderer}\n   * @protected\n   */\n  _questionRenderer\n\n  /**\n   * @type {QuestionElements}\n   * @protected\n   */\n  _htmlElements\n  /**\n   * @type {boolean}\n   * @protected\n   */\n  _highlighted = false\n  /**\n   * @type {boolean}\n   * @protected\n   */\n\n  /**\n   * @param {QuestionElements} htmlElements\n   * @param {QuestionRenderer} questionRenderer\n   */\n  constructor(htmlElements, questionRenderer) {\n    const { question, optional } = htmlElements.values\n\n    /**\n     * @type {QuestionElements}\n     * @protected\n     */\n    this._htmlElements = htmlElements\n    /**\n     * @type {string | undefined}\n     * @private\n     */\n    this._question = question\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this._optional = optional\n    /**\n     *\n     * @type {QuestionRenderer}\n     * @protected\n     */\n    this._questionRenderer = questionRenderer\n  }\n\n  /**\n   * @param {string} element\n   * @returns {string}\n   * @protected\n   */\n  getHighlight(element) {\n    return this._highlight === element ? ' highlight' : ''\n  }\n\n  get titleText() {\n    const optionalText = this._optional ? ' (optional)' : ''\n    const questionText =\n      this._question === '' || !this._question ? 'Question' : this._question\n    return questionText + optionalText\n  }\n\n  /**\n   * @protected\n   * @type {DefaultComponent}\n   */\n  get label() {\n    return {\n      text: this.titleText,\n      classes: 'govuk-label--l' + this.getHighlight('question'),\n      isPageHeading: !!this._question?.trim()\n    }\n  }\n\n  /**\n   * @protected\n   * @type {GovukFieldset}\n   */\n  get fieldSet() {\n    return {\n      legend: {\n        text: this.titleText,\n        classes: 'govuk-fieldset__legend--l' + this.getHighlight('question'),\n        isPageHeading: !!this._question?.trim()\n      }\n    }\n  }\n\n  /**\n   * @returns {Partial<QuestionBaseModel>}\n   */\n  get customRenderFields() {\n    return {}\n  }\n\n  /**\n   *\n   * @returns {QuestionBaseModel}\n   * @protected\n   */\n  _renderInput() {\n    return {\n      id: this._fieldName,\n      name: this._fieldName,\n      classes: this._highlighted ? HIGHLIGHT_CLASS : ''\n    }\n  }\n\n  /**\n   * @type {QuestionBaseModel}\n   */\n  get renderInput() {\n    return {\n      ...this._renderInput(),\n      ...this.customRenderFields\n    }\n  }\n\n  render() {\n    this._questionRenderer.render(this._questionTemplate, this.renderInput)\n  }\n\n  /**\n   * @type {string | undefined}\n   */\n  get question() {\n    return this._question\n  }\n\n  /**\n   * @param {string | undefined} value\n   */\n  set question(value) {\n    this._question = value\n    this.render()\n  }\n\n  get optional() {\n    return this._optional\n  }\n\n  /**\n   * @param {boolean} value\n   */\n  set optional(value) {\n    this._optional = value\n    this.render()\n  }\n\n  /**\n   * @type {string | null}\n   */\n  get highlight() {\n    return this._highlight\n  }\n\n  /**\n   * @param {string | null} value\n   */\n  set highlight(value) {\n    this._highlight = value\n    this.render()\n  }\n\n  /**\n   * @type { string | undefined }\n   */\n  get id() {\n    return this._id\n  }\n\n  /**\n   * @param { string | undefined } value\n   */\n  set id(value) {\n    this._id = value\n  }\n\n  /**\n   * no render\n   */\n  highlightContent() {\n    this._highlighted = true\n  }\n\n  /**\n   * no render\n   */\n  unHighlightContent() {\n    this._highlighted = false\n  }\n}\n\n/**\n * @import { QuestionElements, QuestionBaseModel, GovukFieldset, DefaultComponent, QuestionRenderer } from '~/src/form/form-editor/preview/types.js'\n */\n"],"mappings":"AAAA,SAASA,aAAa;AACtB,SAASC,eAAe;;AAExB;AACA;AACA;AACA,OAAO,MAAMC,gBAAgB,CAAC;EAC5B,OAAOC,IAAI,GAAG,qBAAqB;EACnC;AACF;AACA;EACEC,GAAG,GAAGC,SAAS;EACf;AACF;AACA;AACA;EACEC,aAAa, 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"preview.js","names":["ComponentType","HIGHLIGHT_CLASS","buildCombinedId","PreviewComponent","PATH","_id","undefined","componentType","Details","_questionTemplate","_highlight","_fieldName","_questionRenderer","_htmlElements","_highlighted","constructor","htmlElements","questionRenderer","question","optional","values","_question","_optional","getHighlight","element","titleText","optionalText","questionText","label","text","classes","isPageHeading","trim","fieldSet","legend","customRenderFields","_renderInput","id","name","renderInput","render","value","highlight","highlightContent","unHighlightContent"],"sources":["../../../../../src/form/form-editor/preview/preview.js"],"sourcesContent":["import { ComponentType } from '~/src/components/enums.js'\nimport { HIGHLIGHT_CLASS } from '~/src/form/form-editor/preview/constants.js'\nimport { buildCombinedId } from '~/src/form/form-editor/preview/utils.js'\n\n/**\n * @abstract\n */\nexport class PreviewComponent {\n  static PATH = 'preview-components/'\n  /**\n   * @type { string | undefined }\n   */\n  _id = undefined\n  /**\n   * @abstract\n   * @type {ComponentType}\n   */\n  componentType = ComponentType.Details\n  /**\n   * @abstract\n   * @type {string}\n   * @protected\n   */\n  _questionTemplate = ''\n  /**\n   * @type { string|null }\n   * @protected\n   */\n  _highlight = null\n  /**\n   * @abstract\n   * @type {string}\n   * @protected\n   */\n  _fieldName = ''\n  /**\n   * @type {QuestionRenderer}\n   * @protected\n   */\n  _questionRenderer\n\n  /**\n   * @type {QuestionElements}\n   * @protected\n   */\n  _htmlElements\n  /**\n   * @type {boolean}\n   * @protected\n   */\n  _highlighted = false\n  /**\n   * @type {boolean}\n   * @protected\n   */\n\n  /**\n   * @param {QuestionElements} htmlElements\n   * @param {QuestionRenderer} questionRenderer\n   */\n  constructor(htmlElements, questionRenderer) {\n    const { question, optional } = htmlElements.values\n\n    /**\n     * @type {QuestionElements}\n     * @protected\n     */\n    this._htmlElements = htmlElements\n    /**\n     * @type {string | undefined}\n     * @private\n     */\n    this._question = question\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this._optional = optional\n    /**\n     *\n     * @type {QuestionRenderer}\n     * @protected\n     */\n    this._questionRenderer = questionRenderer\n  }\n\n  /**\n   * @param {string} element\n   * @returns {string}\n   * @protected\n   */\n  getHighlight(element) {\n    return this._highlight === element ? ' highlight' : ''\n  }\n\n  get titleText() {\n    const optionalText = this._optional ? ' (optional)' : ''\n    const questionText =\n      this._question === '' || !this._question ? 'Question' : this._question\n    return questionText + optionalText\n  }\n\n  /**\n   * @protected\n   * @type {DefaultComponent}\n   */\n  get label() {\n    return {\n      text: this.titleText,\n      classes: 'govuk-label--l' + this.getHighlight('question'),\n      isPageHeading: !!this._question?.trim()\n    }\n  }\n\n  /**\n   * @protected\n   * @type {GovukFieldset}\n   */\n  get fieldSet() {\n    return {\n      legend: {\n        text: this.titleText,\n        classes: 'govuk-fieldset__legend--l' + this.getHighlight('question'),\n        isPageHeading: !!this._question?.trim()\n      }\n    }\n  }\n\n  /**\n   * @returns {Partial<QuestionBaseModel>}\n   */\n  get customRenderFields() {\n    return {}\n  }\n\n  /**\n   *\n   * @returns {QuestionBaseModel}\n   * @protected\n   */\n  _renderInput() {\n    return {\n      id: buildCombinedId(this._fieldName, this._id),\n      name: this._fieldName,\n      classes: this._highlighted ? HIGHLIGHT_CLASS : ''\n    }\n  }\n\n  /**\n   * @type {QuestionBaseModel}\n   */\n  get renderInput() {\n    return {\n      ...this._renderInput(),\n      ...this.customRenderFields\n    }\n  }\n\n  render() {\n    this._questionRenderer.render(this._questionTemplate, this.renderInput)\n  }\n\n  /**\n   * @type {string | undefined}\n   */\n  get question() {\n    return this._question\n  }\n\n  /**\n   * @param {string | undefined} value\n   */\n  set question(value) {\n    this._question = value\n    this.render()\n  }\n\n  get optional() {\n    return this._optional\n  }\n\n  /**\n   * @param {boolean} value\n   */\n  set optional(value) {\n    this._optional = value\n    this.render()\n  }\n\n  /**\n   * @type {string | null}\n   */\n  get highlight() {\n    return this._highlight\n  }\n\n  /**\n   * @param {string | null} value\n   */\n  set highlight(value) {\n    this._highlight = value\n    this.render()\n  }\n\n  /**\n   * @type { string | undefined }\n   */\n  get id() {\n    return this._id\n  }\n\n  /**\n   * @param { string | undefined } value\n   */\n  set id(value) {\n    this._id = value\n  }\n\n  /**\n   * no render\n   */\n  highlightContent() {\n    this._highlighted = true\n  }\n\n  /**\n   * no render\n   */\n  unHighlightContent() {\n    this._highlighted = false\n  }\n}\n\n/**\n * @import { QuestionElements, QuestionBaseModel, GovukFieldset, DefaultComponent, QuestionRenderer } from '~/src/form/form-editor/preview/types.js'\n */\n"],"mappings":"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","ignoreList":[]}
         
     | 
| 
         @@ -2,6 +2,7 @@ import { ComponentType } from "../../../components/enums.js"; 
     | 
|
| 
       2 
2 
     | 
    
         
             
            import { HIGHLIGHT_CLASS } from "./constants.js";
         
     | 
| 
       3 
3 
     | 
    
         
             
            import { ListSortableQuestion } from "./list-sortable.js";
         
     | 
| 
       4 
4 
     | 
    
         
             
            import { PreviewComponent } from "./preview.js";
         
     | 
| 
      
 5 
     | 
    
         
            +
            import { buildCombinedId } from "./utils.js";
         
     | 
| 
       5 
6 
     | 
    
         
             
            export class SelectSortableQuestion extends ListSortableQuestion {
         
     | 
| 
       6 
7 
     | 
    
         
             
              _questionTemplate = PreviewComponent.PATH + 'selectfield.njk';
         
     | 
| 
       7 
8 
     | 
    
         
             
              get selectList() {
         
     | 
| 
         @@ -27,7 +28,7 @@ export class SelectSortableQuestion extends ListSortableQuestion { 
     | 
|
| 
       27 
28 
     | 
    
         
             
                };
         
     | 
| 
       28 
29 
     | 
    
         
             
                const highlightedClass = this._highlighted ? HIGHLIGHT_CLASS : '';
         
     | 
| 
       29 
30 
     | 
    
         
             
                return {
         
     | 
| 
       30 
     | 
    
         
            -
                  id: this._fieldName,
         
     | 
| 
      
 31 
     | 
    
         
            +
                  id: buildCombinedId(this._fieldName, this._id),
         
     | 
| 
       31 
32 
     | 
    
         
             
                  name: this._fieldName,
         
     | 
| 
       32 
33 
     | 
    
         
             
                  hint: this.hint,
         
     | 
| 
       33 
34 
     | 
    
         
             
                  label: this.label,
         
     |