@piserve-tech/form-submission 1.3.314 → 1.3.316
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/README.md +24 -24
- package/ng-package.json +30 -0
- package/package.json +33 -46
- package/{assets → src/assets}/icons/close-sidebar-mark-icon.svg +3 -3
- package/{assets → src/assets}/icons/copy-icon.svg +5 -5
- package/{assets → src/assets}/icons/delete-icon.svg +7 -7
- package/{assets → src/assets}/icons/delete-no-outline-icon.svg +7 -7
- package/src/environment/environment.ts +6 -0
- package/src/form-fields/aggregate-function/aggregate-function.component.html +63 -0
- package/src/form-fields/aggregate-function/aggregate-function.component.scss +1 -0
- package/src/form-fields/aggregate-function/aggregate-function.component.spec.ts +21 -0
- package/src/form-fields/aggregate-function/aggregate-function.component.ts +148 -0
- package/src/form-fields/check-box-fields/check-box-fields.component.html +81 -0
- package/src/form-fields/check-box-fields/check-box-fields.component.scss +28 -0
- package/src/form-fields/check-box-fields/check-box-fields.component.spec.ts +21 -0
- package/src/form-fields/check-box-fields/check-box-fields.component.ts +538 -0
- package/src/form-fields/currency-fields/currency-fields.component.html +85 -0
- package/src/form-fields/currency-fields/currency-fields.component.scss +48 -0
- package/src/form-fields/currency-fields/currency-fields.component.spec.ts +21 -0
- package/src/form-fields/currency-fields/currency-fields.component.ts +589 -0
- package/src/form-fields/date-time-fields/date-time-fields.component.html +268 -0
- package/src/form-fields/date-time-fields/date-time-fields.component.scss +88 -0
- package/src/form-fields/date-time-fields/date-time-fields.component.spec.ts +21 -0
- package/src/form-fields/date-time-fields/date-time-fields.component.ts +693 -0
- package/src/form-fields/drop-down-fields/drop-down-fields.component.html +77 -0
- package/src/form-fields/drop-down-fields/drop-down-fields.component.scss +12 -0
- package/src/form-fields/drop-down-fields/drop-down-fields.component.spec.ts +21 -0
- package/src/form-fields/drop-down-fields/drop-down-fields.component.ts +698 -0
- package/src/form-fields/file-picker-fields/file-picker-fields.component.html +72 -0
- package/src/form-fields/file-picker-fields/file-picker-fields.component.scss +33 -0
- package/src/form-fields/file-picker-fields/file-picker-fields.component.spec.ts +21 -0
- package/src/form-fields/file-picker-fields/file-picker-fields.component.ts +256 -0
- package/src/form-fields/form-fields.module.ts +110 -0
- package/src/form-fields/hidden-field/hidden-field.component.scss +0 -0
- package/src/form-fields/hidden-field/hidden-field.component.spec.ts +21 -0
- package/src/form-fields/hidden-field/hidden-field.component.ts +156 -0
- package/src/form-fields/iframe-fields/iframe-fields.component.html +31 -0
- package/src/form-fields/iframe-fields/iframe-fields.component.scss +0 -0
- package/src/form-fields/iframe-fields/iframe-fields.component.spec.ts +21 -0
- package/src/form-fields/iframe-fields/iframe-fields.component.ts +225 -0
- package/src/form-fields/location-fields/location-fields.component.html +54 -0
- package/src/form-fields/location-fields/location-fields.component.scss +22 -0
- package/src/form-fields/location-fields/location-fields.component.spec.ts +21 -0
- package/src/form-fields/location-fields/location-fields.component.ts +83 -0
- package/src/form-fields/mail-fields/mail-fields.component.html +66 -0
- package/src/form-fields/mail-fields/mail-fields.component.scss +10 -0
- package/src/form-fields/mail-fields/mail-fields.component.spec.ts +21 -0
- package/src/form-fields/mail-fields/mail-fields.component.ts +127 -0
- package/src/form-fields/mobile-fields/mobile-fields.component.html +97 -0
- package/src/form-fields/mobile-fields/mobile-fields.component.scss +52 -0
- package/src/form-fields/mobile-fields/mobile-fields.component.spec.ts +21 -0
- package/src/form-fields/mobile-fields/mobile-fields.component.ts +310 -0
- package/src/form-fields/number-fields/number-fields.component.html +70 -0
- package/src/form-fields/number-fields/number-fields.component.scss +17 -0
- package/src/form-fields/number-fields/number-fields.component.spec.ts +21 -0
- package/src/form-fields/number-fields/number-fields.component.ts +256 -0
- package/src/form-fields/password-fields/password-fields.component.html +113 -0
- package/src/form-fields/password-fields/password-fields.component.scss +61 -0
- package/src/form-fields/password-fields/password-fields.component.spec.ts +21 -0
- package/src/form-fields/password-fields/password-fields.component.ts +273 -0
- package/src/form-fields/radio-button-fields/radio-button-fields.component.html +82 -0
- package/src/form-fields/radio-button-fields/radio-button-fields.component.scss +28 -0
- package/src/form-fields/radio-button-fields/radio-button-fields.component.spec.ts +21 -0
- package/src/form-fields/radio-button-fields/radio-button-fields.component.ts +391 -0
- package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.html +67 -0
- package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.scss +23 -0
- package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.spec.ts +21 -0
- package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.ts +145 -0
- package/src/form-fields/section-fields/section-fields.component.html +4 -0
- package/src/form-fields/section-fields/section-fields.component.scss +37 -0
- package/src/form-fields/section-fields/section-fields.component.spec.ts +21 -0
- package/src/form-fields/section-fields/section-fields.component.ts +25 -0
- package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.html +93 -0
- package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.scss +52 -0
- package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.spec.ts +21 -0
- package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.ts +155 -0
- package/src/form-fields/signature-fields/signature-fields.component.html +43 -0
- package/src/form-fields/signature-fields/signature-fields.component.scss +10 -0
- package/src/form-fields/signature-fields/signature-fields.component.spec.ts +21 -0
- package/src/form-fields/signature-fields/signature-fields.component.ts +25 -0
- package/src/form-fields/slider-fields/slider-fields.component.html +67 -0
- package/src/form-fields/slider-fields/slider-fields.component.scss +55 -0
- package/src/form-fields/slider-fields/slider-fields.component.spec.ts +21 -0
- package/src/form-fields/slider-fields/slider-fields.component.ts +63 -0
- package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.html +52 -0
- package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.scss +85 -0
- package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.spec.ts +21 -0
- package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.ts +62 -0
- package/src/form-fields/text-area-fields/text-area-fields.component.html +68 -0
- package/src/form-fields/text-area-fields/text-area-fields.component.scss +19 -0
- package/src/form-fields/text-area-fields/text-area-fields.component.spec.ts +21 -0
- package/src/form-fields/text-area-fields/text-area-fields.component.ts +166 -0
- package/src/form-fields/text-fields/text-fields.component.html +67 -0
- package/src/form-fields/text-fields/text-fields.component.scss +26 -0
- package/src/form-fields/text-fields/text-fields.component.spec.ts +21 -0
- package/src/form-fields/text-fields/text-fields.component.ts +248 -0
- package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.html +70 -0
- package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.scss +112 -0
- package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.spec.ts +21 -0
- package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.ts +74 -0
- package/src/form-fields/url-fields/url-fields.component.html +109 -0
- package/src/form-fields/url-fields/url-fields.component.scss +22 -0
- package/src/form-fields/url-fields/url-fields.component.spec.ts +21 -0
- package/src/form-fields/url-fields/url-fields.component.ts +123 -0
- package/src/form-submission/form-submission.module.ts +40 -0
- package/src/form-submission/header/header.component.html +6 -0
- package/src/form-submission/header/header.component.scss +26 -0
- package/src/form-submission/header/header.component.spec.ts +21 -0
- package/src/form-submission/header/header.component.ts +12 -0
- package/src/form-submission/navigation-tabs/navigation-tabs.component.html +134 -0
- package/src/form-submission/navigation-tabs/navigation-tabs.component.scss +200 -0
- package/src/form-submission/navigation-tabs/navigation-tabs.component.spec.ts +21 -0
- package/src/form-submission/navigation-tabs/navigation-tabs.component.ts +134 -0
- package/src/form-submission/next-prev-navigation/next-prev-navigation.component.html +207 -0
- package/src/form-submission/next-prev-navigation/next-prev-navigation.component.scss +208 -0
- package/src/form-submission/next-prev-navigation/next-prev-navigation.component.spec.ts +21 -0
- package/src/form-submission/next-prev-navigation/next-prev-navigation.component.ts +74 -0
- package/src/form-submission/save-as-draft/saveDraftModalComponent .ts +60 -0
- package/src/form-submission/save-as-draft/saveDraftModalComponent.html +33 -0
- package/src/form-submission/save-as-draft/saveDraftModalComponent.scss +195 -0
- package/src/form-submission/submission-container/submission-container.component.html +30 -0
- package/src/form-submission/submission-container/submission-container.component.scss +67 -0
- package/src/form-submission/submission-container/submission-container.component.spec.ts +21 -0
- package/src/form-submission/submission-container/submission-container.component.ts +14 -0
- package/src/form-submission/submit-form/submit-form.component.html +76 -0
- package/src/form-submission/submit-form/submit-form.component.scss +88 -0
- package/src/form-submission/submit-form/submit-form.component.spec.ts +21 -0
- package/src/form-submission/submit-form/submit-form.component.ts +1953 -0
- package/src/lib/form-submission.component.html +15 -0
- package/src/lib/form-submission.component.scss +1 -0
- package/src/lib/form-submission.component.ts +120 -0
- package/src/lib/form-submission.module.ts +31 -0
- package/src/lib/form-submission.service.spec.ts +16 -0
- package/src/lib/form-submission.service.ts +9 -0
- package/src/models/aggregate.model.ts +4 -0
- package/{models/answer.model.d.ts → src/models/answer.model.ts} +25 -23
- package/src/models/appearance.model.ts +64 -0
- package/{models/attachment.model.d.ts → src/models/attachment.model.ts} +6 -6
- package/{models/defaultAnswerEntry.model.d.ts → src/models/defaultAnswerEntry.model.ts} +7 -5
- package/{models/defaultAnswersModel.model.d.ts → src/models/defaultAnswersModel.model.ts} +5 -4
- package/{models/defaultQuestionAnswer.model.d.ts → src/models/defaultQuestionAnswer.model.ts} +6 -6
- package/src/models/elementOptionAPI.model.ts +13 -0
- package/src/models/elementOptionAPIData.model.ts +5 -0
- package/src/models/elementOptionDB.model.ts +9 -0
- package/src/models/elementOptionDBCriteria.model.ts +7 -0
- package/{models/emitters.model.d.ts → src/models/emitters.model.ts} +8 -8
- package/{models/enum/condition.enum.d.ts → src/models/enum/condition.enum.ts} +2 -2
- package/src/models/enum/elementType .enum.ts +22 -0
- package/src/models/enum/entityType.enum.ts +10 -0
- package/{models/formConfiguration.model.d.ts → src/models/formConfiguration.model.ts} +2 -2
- package/{models/formElement.model.d.ts → src/models/formElement.model.ts} +22 -22
- package/{models/formElementType.model.d.ts → src/models/formElementType.model.ts} +3 -2
- package/{models/grid.model.d.ts → src/models/grid.model.ts} +14 -13
- package/{models/hiddenField.model.d.ts → src/models/hiddenField.model.ts} +5 -5
- package/{models/iFrameProperties.model.d.ts → src/models/iFrameProperties.model.ts} +13 -13
- package/src/models/logic.model.ts +11 -0
- package/src/models/multifields.model.ts +12 -0
- package/{models/option.model.d.ts → src/models/option.model.ts} +5 -5
- package/src/models/page.model.ts +7 -0
- package/src/models/publicForm.model.ts +19 -0
- package/src/models/question.model.ts +27 -0
- package/src/models/questionAnswer.model.ts +8 -0
- package/src/models/questionGroup.model.ts +12 -0
- package/src/models/response.model.ts +9 -0
- package/src/models/result.model.ts +5 -0
- package/{models/row.model.d.ts → src/models/row.model.ts} +2 -1
- package/src/models/scoring.model.ts +10 -0
- package/src/models/section.model.ts +6 -0
- package/src/models/subForm.model.ts +25 -0
- package/src/models/subformConfiguration.model.ts +4 -0
- package/src/models/subformPropery.model.ts +8 -0
- package/{models/submission.model.d.ts → src/models/submission.model.ts} +16 -14
- package/{models/submissionCopyConfig.mopdel.d.ts → src/models/submissionCopyConfig.mopdel.ts} +4 -4
- package/{models/terms&condition.model.d.ts → src/models/terms&condition.model.ts} +1 -1
- package/src/models/validation.model.ts +48 -0
- package/src/models/whenClause.model.ts +7 -0
- package/{models/whenClauseCondition.model.d.ts → src/models/whenClauseCondition.model.ts} +6 -6
- package/{models/whenClauseElements.model.d.ts → src/models/whenClauseElements.model.ts} +6 -5
- package/{public-api.d.ts → src/public-api.ts} +4 -0
- package/src/question/card-subform/card-subform.component.html +282 -0
- package/src/question/card-subform/card-subform.component.scss +49 -0
- package/src/question/card-subform/card-subform.component.spec.ts +21 -0
- package/src/question/card-subform/card-subform.component.ts +407 -0
- package/src/question/confirm-dialog/confirm-dialog.component.html +32 -0
- package/src/question/confirm-dialog/confirm-dialog.component.scss +109 -0
- package/src/question/confirm-dialog/confirm-dialog.component.spec.ts +21 -0
- package/src/question/confirm-dialog/confirm-dialog.component.ts +24 -0
- package/src/question/form-elements/form-elements.component.html +28 -0
- package/src/question/form-elements/form-elements.component.scss +0 -0
- package/src/question/form-elements/form-elements.component.spec.ts +21 -0
- package/src/question/form-elements/form-elements.component.ts +41 -0
- package/src/question/inline-multiple-subform/inline-multiple-subform.component.html +321 -0
- package/src/question/inline-multiple-subform/inline-multiple-subform.component.scss +78 -0
- package/src/question/inline-multiple-subform/inline-multiple-subform.component.spec.ts +21 -0
- package/src/question/inline-multiple-subform/inline-multiple-subform.component.ts +425 -0
- package/src/question/multifields/multifields.component.html +78 -0
- package/src/question/multifields/multifields.component.scss +6 -0
- package/src/question/multifields/multifields.component.spec.ts +21 -0
- package/src/question/multifields/multifields.component.ts +27 -0
- package/src/question/multiple-subform/multiple-subform.component.html +185 -0
- package/src/question/multiple-subform/multiple-subform.component.scss +52 -0
- package/src/question/multiple-subform/multiple-subform.component.spec.ts +21 -0
- package/src/question/multiple-subform/multiple-subform.component.ts +481 -0
- package/src/question/question/question.component.html +51 -0
- package/src/question/question/question.component.scss +0 -0
- package/src/question/question/question.component.spec.ts +21 -0
- package/src/question/question/question.component.ts +129 -0
- package/src/question/question-group/question-group.component.html +147 -0
- package/src/question/question-group/question-group.component.scss +36 -0
- package/src/question/question-group/question-group.component.spec.ts +21 -0
- package/src/question/question-group/question-group.component.ts +94 -0
- package/src/question/question.module.ts +22 -0
- package/src/question/recursive-logic/recursive-logic.component.html +33 -0
- package/src/question/recursive-logic/recursive-logic.component.scss +0 -0
- package/src/question/recursive-logic/recursive-logic.component.spec.ts +21 -0
- package/src/question/recursive-logic/recursive-logic.component.ts +29 -0
- package/src/question/sub-form/sub-form.component.html +254 -0
- package/src/question/sub-form/sub-form.component.scss +83 -0
- package/src/question/sub-form/sub-form.component.spec.ts +21 -0
- package/src/question/sub-form/sub-form.component.ts +421 -0
- package/src/services/aggregate.service.ts +148 -0
- package/src/services/countryService.ts +92 -0
- package/src/services/data.service.ts +36 -0
- package/src/services/element-tracker.service.spec.ts +16 -0
- package/src/services/element-tracker.service.ts +24 -0
- package/src/services/form-validation.service.ts +151 -0
- package/src/services/form.service.spec.ts +16 -0
- package/src/services/form.service.ts +407 -0
- package/src/services/mapper.service.ts +625 -0
- package/src/services/recaptcha.service.spec.ts +16 -0
- package/src/services/recaptcha.service.ts +179 -0
- package/src/services/score.service.ts +352 -0
- package/src/services/subform-copy.service.ts +148 -0
- package/src/services/validation.service.spec.ts +16 -0
- package/src/services/validation.service.ts +33 -0
- package/src/services/whenClause.service.ts +502 -0
- package/src/shared/shared.module.ts +58 -0
- package/src/styles/shared-style.scss +86 -0
- package/src/sub-form/sub-form.module.ts +24 -0
- package/src/sub-form/submission-modal/submission-modal.component.html +160 -0
- package/src/sub-form/submission-modal/submission-modal.component.scss +54 -0
- package/src/sub-form/submission-modal/submission-modal.component.spec.ts +21 -0
- package/src/sub-form/submission-modal/submission-modal.component.ts +127 -0
- package/tsconfig.lib.json +14 -0
- package/tsconfig.lib.prod.json +10 -0
- package/tsconfig.spec.json +14 -0
- package/environment/environment.d.ts +0 -5
- package/esm2022/environment/environment.mjs +0 -6
- package/esm2022/form-fields/aggregate-function/aggregate-function.component.mjs +0 -146
- package/esm2022/form-fields/check-box-fields/check-box-fields.component.mjs +0 -473
- package/esm2022/form-fields/currency-fields/currency-fields.component.mjs +0 -502
- package/esm2022/form-fields/date-time-fields/date-time-fields.component.mjs +0 -608
- package/esm2022/form-fields/drop-down-fields/drop-down-fields.component.mjs +0 -585
- package/esm2022/form-fields/file-picker-fields/file-picker-fields.component.mjs +0 -224
- package/esm2022/form-fields/form-fields.module.mjs +0 -174
- package/esm2022/form-fields/hidden-field/hidden-field.component.mjs +0 -137
- package/esm2022/form-fields/iframe-fields/iframe-fields.component.mjs +0 -198
- package/esm2022/form-fields/location-fields/location-fields.component.mjs +0 -85
- package/esm2022/form-fields/mail-fields/mail-fields.component.mjs +0 -131
- package/esm2022/form-fields/mobile-fields/mobile-fields.component.mjs +0 -270
- package/esm2022/form-fields/number-fields/number-fields.component.mjs +0 -242
- package/esm2022/form-fields/password-fields/password-fields.component.mjs +0 -257
- package/esm2022/form-fields/radio-button-fields/radio-button-fields.component.mjs +0 -346
- package/esm2022/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.mjs +0 -148
- package/esm2022/form-fields/section-fields/section-fields.component.mjs +0 -29
- package/esm2022/form-fields/selection-matrix-fields/selection-matrix-fields.component.mjs +0 -158
- package/esm2022/form-fields/signature-fields/signature-fields.component.mjs +0 -32
- package/esm2022/form-fields/slider-fields/slider-fields.component.mjs +0 -73
- package/esm2022/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.mjs +0 -66
- package/esm2022/form-fields/text-area-fields/text-area-fields.component.mjs +0 -159
- package/esm2022/form-fields/text-fields/text-fields.component.mjs +0 -245
- package/esm2022/form-fields/toggle-switch-fields/toggle-switch-fields.component.mjs +0 -85
- package/esm2022/form-fields/url-fields/url-fields.component.mjs +0 -124
- package/esm2022/form-submission/form-submission.module.mjs +0 -64
- package/esm2022/form-submission/header/header.component.mjs +0 -20
- package/esm2022/form-submission/navigation-tabs/navigation-tabs.component.mjs +0 -171
- package/esm2022/form-submission/next-prev-navigation/next-prev-navigation.component.mjs +0 -124
- package/esm2022/form-submission/save-as-draft/saveDraftModalComponent .mjs +0 -50
- package/esm2022/form-submission/submission-container/submission-container.component.mjs +0 -17
- package/esm2022/form-submission/submit-form/submit-form.component.mjs +0 -1610
- package/esm2022/lib/form-submission.component.mjs +0 -113
- package/esm2022/lib/form-submission.module.mjs +0 -56
- package/esm2022/lib/form-submission.service.mjs +0 -14
- package/esm2022/models/aggregate.model.mjs +0 -2
- package/esm2022/models/answer.model.mjs +0 -2
- package/esm2022/models/appearance.model.mjs +0 -2
- package/esm2022/models/attachment.model.mjs +0 -2
- package/esm2022/models/defaultAnswerEntry.model.mjs +0 -2
- package/esm2022/models/defaultAnswersModel.model.mjs +0 -2
- package/esm2022/models/defaultQuestionAnswer.model.mjs +0 -2
- package/esm2022/models/elementOptionAPI.model.mjs +0 -2
- package/esm2022/models/elementOptionAPIData.model.mjs +0 -2
- package/esm2022/models/elementOptionDB.model.mjs +0 -2
- package/esm2022/models/elementOptionDBCriteria.model.mjs +0 -2
- package/esm2022/models/emitters.model.mjs +0 -2
- package/esm2022/models/enum/condition.enum.mjs +0 -18
- package/esm2022/models/enum/elementType .enum.mjs +0 -24
- package/esm2022/models/enum/entityType.enum.mjs +0 -12
- package/esm2022/models/formConfiguration.model.mjs +0 -2
- package/esm2022/models/formElement.model.mjs +0 -2
- package/esm2022/models/formElementType.model.mjs +0 -2
- package/esm2022/models/grid.model.mjs +0 -2
- package/esm2022/models/hiddenField.model.mjs +0 -2
- package/esm2022/models/iFrameProperties.model.mjs +0 -2
- package/esm2022/models/logic.model.mjs +0 -2
- package/esm2022/models/multifields.model.mjs +0 -2
- package/esm2022/models/option.model.mjs +0 -2
- package/esm2022/models/page.model.mjs +0 -2
- package/esm2022/models/publicForm.model.mjs +0 -2
- package/esm2022/models/question.model.mjs +0 -2
- package/esm2022/models/questionAnswer.model.mjs +0 -2
- package/esm2022/models/questionGroup.model.mjs +0 -2
- package/esm2022/models/row.model.mjs +0 -2
- package/esm2022/models/scoring.model.mjs +0 -2
- package/esm2022/models/section.model.mjs +0 -2
- package/esm2022/models/subForm.model.mjs +0 -2
- package/esm2022/models/subformConfiguration.model.mjs +0 -2
- package/esm2022/models/subformPropery.model.mjs +0 -2
- package/esm2022/models/submission.model.mjs +0 -2
- package/esm2022/models/submissionCopyConfig.mopdel.mjs +0 -2
- package/esm2022/models/terms&condition.model.mjs +0 -2
- package/esm2022/models/validation.model.mjs +0 -2
- package/esm2022/models/whenClause.model.mjs +0 -2
- package/esm2022/models/whenClauseCondition.model.mjs +0 -2
- package/esm2022/models/whenClauseElements.model.mjs +0 -2
- package/esm2022/piserve-tech-form-submission.mjs +0 -5
- package/esm2022/public-api.mjs +0 -7
- package/esm2022/question/card-subform/card-subform.component.mjs +0 -354
- package/esm2022/question/confirm-dialog/confirm-dialog.component.mjs +0 -27
- package/esm2022/question/form-elements/form-elements.component.mjs +0 -62
- package/esm2022/question/inline-multiple-subform/inline-multiple-subform.component.mjs +0 -384
- package/esm2022/question/multifields/multifields.component.mjs +0 -54
- package/esm2022/question/multiple-subform/multiple-subform.component.mjs +0 -413
- package/esm2022/question/question/question.component.mjs +0 -145
- package/esm2022/question/question-group/question-group.component.mjs +0 -102
- package/esm2022/question/recursive-logic/recursive-logic.component.mjs +0 -49
- package/esm2022/question/sub-form/sub-form.component.mjs +0 -351
- package/esm2022/services/aggregate.service.mjs +0 -139
- package/esm2022/services/countryService.mjs +0 -89
- package/esm2022/services/data.service.mjs +0 -36
- package/esm2022/services/element-tracker.service.mjs +0 -27
- package/esm2022/services/form-validation.service.mjs +0 -128
- package/esm2022/services/form.service.mjs +0 -333
- package/esm2022/services/mapper.service.mjs +0 -519
- package/esm2022/services/recaptcha.service.mjs +0 -136
- package/esm2022/services/score.service.mjs +0 -268
- package/esm2022/services/subform-copy.service.mjs +0 -122
- package/esm2022/services/validation.service.mjs +0 -35
- package/esm2022/services/whenClause.service.mjs +0 -423
- package/esm2022/shared/shared.module.mjs +0 -97
- package/esm2022/sub-form/submission-modal/submission-modal.component.mjs +0 -133
- package/fesm2022/piserve-tech-form-submission.mjs +0 -11658
- package/fesm2022/piserve-tech-form-submission.mjs.map +0 -1
- package/form-fields/aggregate-function/aggregate-function.component.d.ts +0 -43
- package/form-fields/check-box-fields/check-box-fields.component.d.ts +0 -73
- package/form-fields/currency-fields/currency-fields.component.d.ts +0 -62
- package/form-fields/date-time-fields/date-time-fields.component.d.ts +0 -96
- package/form-fields/drop-down-fields/drop-down-fields.component.d.ts +0 -88
- package/form-fields/file-picker-fields/file-picker-fields.component.d.ts +0 -72
- package/form-fields/form-fields.module.d.ts +0 -40
- package/form-fields/hidden-field/hidden-field.component.d.ts +0 -38
- package/form-fields/iframe-fields/iframe-fields.component.d.ts +0 -35
- package/form-fields/location-fields/location-fields.component.d.ts +0 -29
- package/form-fields/mail-fields/mail-fields.component.d.ts +0 -41
- package/form-fields/mobile-fields/mobile-fields.component.d.ts +0 -71
- package/form-fields/number-fields/number-fields.component.d.ts +0 -53
- package/form-fields/password-fields/password-fields.component.d.ts +0 -57
- package/form-fields/radio-button-fields/radio-button-fields.component.d.ts +0 -70
- package/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.d.ts +0 -46
- package/form-fields/section-fields/section-fields.component.d.ts +0 -10
- package/form-fields/selection-matrix-fields/selection-matrix-fields.component.d.ts +0 -45
- package/form-fields/signature-fields/signature-fields.component.d.ts +0 -13
- package/form-fields/slider-fields/slider-fields.component.d.ts +0 -32
- package/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.d.ts +0 -26
- package/form-fields/text-area-fields/text-area-fields.component.d.ts +0 -49
- package/form-fields/text-fields/text-fields.component.d.ts +0 -49
- package/form-fields/toggle-switch-fields/toggle-switch-fields.component.d.ts +0 -29
- package/form-fields/url-fields/url-fields.component.d.ts +0 -41
- package/form-submission/form-submission.module.d.ts +0 -20
- package/form-submission/header/header.component.d.ts +0 -7
- package/form-submission/navigation-tabs/navigation-tabs.component.d.ts +0 -57
- package/form-submission/next-prev-navigation/next-prev-navigation.component.d.ts +0 -46
- package/form-submission/save-as-draft/saveDraftModalComponent .d.ts +0 -17
- package/form-submission/submission-container/submission-container.component.d.ts +0 -7
- package/form-submission/submit-form/submit-form.component.d.ts +0 -237
- package/index.d.ts +0 -5
- package/lib/form-submission.component.d.ts +0 -30
- package/lib/form-submission.module.d.ts +0 -16
- package/lib/form-submission.service.d.ts +0 -6
- package/models/aggregate.model.d.ts +0 -4
- package/models/appearance.model.d.ts +0 -64
- package/models/elementOptionAPI.model.d.ts +0 -12
- package/models/elementOptionAPIData.model.d.ts +0 -5
- package/models/elementOptionDB.model.d.ts +0 -8
- package/models/elementOptionDBCriteria.model.d.ts +0 -7
- package/models/enum/elementType .enum.d.ts +0 -22
- package/models/enum/entityType.enum.d.ts +0 -10
- package/models/logic.model.d.ts +0 -9
- package/models/multifields.model.d.ts +0 -11
- package/models/page.model.d.ts +0 -6
- package/models/publicForm.model.d.ts +0 -18
- package/models/question.model.d.ts +0 -26
- package/models/questionAnswer.model.d.ts +0 -7
- package/models/questionGroup.model.d.ts +0 -11
- package/models/scoring.model.d.ts +0 -10
- package/models/section.model.d.ts +0 -6
- package/models/subForm.model.d.ts +0 -24
- package/models/subformConfiguration.model.d.ts +0 -4
- package/models/subformPropery.model.d.ts +0 -7
- package/models/validation.model.d.ts +0 -48
- package/models/whenClause.model.d.ts +0 -6
- package/question/card-subform/card-subform.component.d.ts +0 -44
- package/question/confirm-dialog/confirm-dialog.component.d.ts +0 -12
- package/question/form-elements/form-elements.component.d.ts +0 -20
- package/question/inline-multiple-subform/inline-multiple-subform.component.d.ts +0 -47
- package/question/multifields/multifields.component.d.ts +0 -11
- package/question/multiple-subform/multiple-subform.component.d.ts +0 -39
- package/question/question/question.component.d.ts +0 -30
- package/question/question-group/question-group.component.d.ts +0 -29
- package/question/recursive-logic/recursive-logic.component.d.ts +0 -19
- package/question/sub-form/sub-form.component.d.ts +0 -70
- package/services/aggregate.service.d.ts +0 -29
- package/services/countryService.d.ts +0 -21
- package/services/data.service.d.ts +0 -19
- package/services/element-tracker.service.d.ts +0 -10
- package/services/form-validation.service.d.ts +0 -16
- package/services/form.service.d.ts +0 -27
- package/services/mapper.service.d.ts +0 -31
- package/services/recaptcha.service.d.ts +0 -46
- package/services/score.service.d.ts +0 -27
- package/services/subform-copy.service.d.ts +0 -10
- package/services/validation.service.d.ts +0 -14
- package/services/whenClause.service.d.ts +0 -45
- package/shared/shared.module.d.ts +0 -25
- package/sub-form/submission-modal/submission-modal.component.d.ts +0 -31
- /package/{assets → src/assets}/fonts/Garamond.woff2 +0 -0
- /package/{assets → src/assets}/fonts/Georgia.woff2 +0 -0
- /package/{assets → src/assets}/fonts/Poppins.woff2 +0 -0
- /package/{assets → src/assets}/fonts/Tahoma.woff2 +0 -0
- /package/{assets → src/assets}/fonts/Tajawal.woff2 +0 -0
- /package/{assets → src/assets}/fonts/Verdana.woff2 +0 -0
- /package/{assets → src/assets}/icons/left_arrow.svg +0 -0
- /package/{assets → src/assets}/icons/right_arrow.svg +0 -0
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class ValidationService {
|
|
4
|
-
constructor() {
|
|
5
|
-
this.invalidQuestions = {};
|
|
6
|
-
}
|
|
7
|
-
setInvalid(questionId, message, pageIndex) {
|
|
8
|
-
this.invalidQuestions[questionId] = { message, pageIndex };
|
|
9
|
-
}
|
|
10
|
-
clearInvalid(questionId) {
|
|
11
|
-
delete this.invalidQuestions[questionId];
|
|
12
|
-
}
|
|
13
|
-
getFirstInvalid() {
|
|
14
|
-
const keys = Object.keys(this.invalidQuestions);
|
|
15
|
-
return keys.length > 0 ? {
|
|
16
|
-
id: keys[0],
|
|
17
|
-
pageIndex: this.invalidQuestions[keys[0]].pageIndex
|
|
18
|
-
} : null;
|
|
19
|
-
}
|
|
20
|
-
getErrorMessage(questionId) {
|
|
21
|
-
return this.invalidQuestions[questionId]?.message || null;
|
|
22
|
-
}
|
|
23
|
-
clearAll() {
|
|
24
|
-
this.invalidQuestions = {};
|
|
25
|
-
}
|
|
26
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ValidationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
27
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ValidationService, providedIn: 'root' }); }
|
|
28
|
-
}
|
|
29
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ValidationService, decorators: [{
|
|
30
|
-
type: Injectable,
|
|
31
|
-
args: [{
|
|
32
|
-
providedIn: 'root'
|
|
33
|
-
}]
|
|
34
|
-
}] });
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9zZXJ2aWNlcy92YWxpZGF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFNM0MsTUFBTSxPQUFPLGlCQUFpQjtJQUg5QjtRQUlVLHFCQUFnQixHQUEwRCxFQUFFLENBQUM7S0F5QnRGO0lBdkJDLFVBQVUsQ0FBQyxVQUFrQixFQUFFLE9BQWUsRUFBRSxTQUFpQjtRQUMvRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBQyxPQUFPLEVBQUUsU0FBUyxFQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELFlBQVksQ0FBQyxVQUFrQjtRQUM3QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsZUFBZTtRQUNiLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDaEQsT0FBTyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkIsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDWCxTQUFTLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDcEQsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ1gsQ0FBQztJQUVELGVBQWUsQ0FBQyxVQUFrQjtRQUNoQyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDO0lBQzVELENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztJQUM3QixDQUFDOytHQXpCVSxpQkFBaUI7bUhBQWpCLGlCQUFpQixjQUZoQixNQUFNOzs0RkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uU2VydmljZSB7XG4gIHByaXZhdGUgaW52YWxpZFF1ZXN0aW9uczoge1trZXk6IHN0cmluZ106IHttZXNzYWdlOiBzdHJpbmcsIHBhZ2VJbmRleDogbnVtYmVyfX0gPSB7fTtcblxuICBzZXRJbnZhbGlkKHF1ZXN0aW9uSWQ6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nLCBwYWdlSW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuaW52YWxpZFF1ZXN0aW9uc1txdWVzdGlvbklkXSA9IHttZXNzYWdlLCBwYWdlSW5kZXh9O1xuICB9XG5cbiAgY2xlYXJJbnZhbGlkKHF1ZXN0aW9uSWQ6IHN0cmluZykge1xuICAgIGRlbGV0ZSB0aGlzLmludmFsaWRRdWVzdGlvbnNbcXVlc3Rpb25JZF07XG4gIH1cblxuICBnZXRGaXJzdEludmFsaWQoKToge2lkOiBzdHJpbmcsIHBhZ2VJbmRleDogbnVtYmVyfSB8IG51bGwge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmludmFsaWRRdWVzdGlvbnMpO1xuICAgIHJldHVybiBrZXlzLmxlbmd0aCA+IDAgPyB7XG4gICAgICBpZDoga2V5c1swXSxcbiAgICAgIHBhZ2VJbmRleDogdGhpcy5pbnZhbGlkUXVlc3Rpb25zW2tleXNbMF1dLnBhZ2VJbmRleFxuICAgIH0gOiBudWxsO1xuICB9XG5cbiAgZ2V0RXJyb3JNZXNzYWdlKHF1ZXN0aW9uSWQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmludmFsaWRRdWVzdGlvbnNbcXVlc3Rpb25JZF0/Lm1lc3NhZ2UgfHwgbnVsbDtcbiAgfVxuXG4gIGNsZWFyQWxsKCkge1xuICAgIHRoaXMuaW52YWxpZFF1ZXN0aW9ucyA9IHt9O1xuICB9XG59XG4iXX0=
|
|
@@ -1,423 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { Subject } from 'rxjs/internal/Subject';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export class WhenClauseService {
|
|
5
|
-
constructor() {
|
|
6
|
-
this.activeWhenClauseGrids = [];
|
|
7
|
-
this.questionAnswerMap = {};
|
|
8
|
-
this.questionChange$ = new Subject();
|
|
9
|
-
this.isInitialLoad = true;
|
|
10
|
-
}
|
|
11
|
-
markLoadCompleted() {
|
|
12
|
-
this.isInitialLoad = false;
|
|
13
|
-
}
|
|
14
|
-
onQuestionChange() {
|
|
15
|
-
return this.questionChange$.asObservable();
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Check if a grid has an active when clause
|
|
19
|
-
*/
|
|
20
|
-
isActiveWhenClause(grid) {
|
|
21
|
-
const when = grid?.whenClause;
|
|
22
|
-
return !!(when &&
|
|
23
|
-
when.activate &&
|
|
24
|
-
Array.isArray(when.whenClauseCondition) &&
|
|
25
|
-
when.whenClauseCondition.length > 0);
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Add a grid to tracking list if it has an active when clause
|
|
29
|
-
*/
|
|
30
|
-
addGrid(grid) {
|
|
31
|
-
if (!grid)
|
|
32
|
-
return;
|
|
33
|
-
if (this.isActiveWhenClause(grid)) {
|
|
34
|
-
const exists = this.activeWhenClauseGrids.some((g) => g.element?.id === grid.element?.id);
|
|
35
|
-
if (!exists) {
|
|
36
|
-
this.activeWhenClauseGrids.push(grid);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
setQuestionAnswer(questionId, answer, initial = false) {
|
|
41
|
-
if (!questionId)
|
|
42
|
-
return;
|
|
43
|
-
this.questionAnswerMap[questionId] = answer;
|
|
44
|
-
this.evaluateAllWhenClauses(initial);
|
|
45
|
-
this.questionChange$.next({ questionId });
|
|
46
|
-
}
|
|
47
|
-
getAnswer(questionId) {
|
|
48
|
-
return this.questionAnswerMap[questionId];
|
|
49
|
-
}
|
|
50
|
-
evaluateAllWhenClauses(initial) {
|
|
51
|
-
const visibleGrids = [];
|
|
52
|
-
for (const grid of this.activeWhenClauseGrids) {
|
|
53
|
-
const when = grid.whenClause;
|
|
54
|
-
const conditions = when.whenClauseCondition;
|
|
55
|
-
if (!conditions || !conditions.length)
|
|
56
|
-
continue;
|
|
57
|
-
let overallResult = true;
|
|
58
|
-
for (let i = 0; i < conditions.length; i++) {
|
|
59
|
-
const clause = conditions[i];
|
|
60
|
-
const logic = (clause.logic || (i === 0 ? 'AND' : 'AND')).toUpperCase(); // Default to AND for first
|
|
61
|
-
const answer = this.getAnswer(clause.questionid);
|
|
62
|
-
const result = this.evaluateCondition(answer, clause.condition, clause.value);
|
|
63
|
-
// Combine results based on logic (AND / OR)
|
|
64
|
-
if (i === 0) {
|
|
65
|
-
overallResult = result; // initialize with first condition
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
if (logic === 'AND') {
|
|
69
|
-
overallResult = overallResult && result;
|
|
70
|
-
}
|
|
71
|
-
else if (logic === 'OR') {
|
|
72
|
-
overallResult = overallResult || result;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
// safe read actions (could be undefined)
|
|
77
|
-
const actions = Array.isArray(when?.whenClauseActions)
|
|
78
|
-
? when.whenClauseActions.map(String)
|
|
79
|
-
: [];
|
|
80
|
-
// choose the decisive action (use last if multiple)
|
|
81
|
-
const action = actions.length > 0 ? actions[actions.length - 1] : undefined;
|
|
82
|
-
if (overallResult) {
|
|
83
|
-
// Condition(s) satisfied -> perform the action
|
|
84
|
-
switch (action) {
|
|
85
|
-
case 'SHOW':
|
|
86
|
-
grid.show = true;
|
|
87
|
-
break;
|
|
88
|
-
case 'HIDE':
|
|
89
|
-
grid.show = false;
|
|
90
|
-
break;
|
|
91
|
-
case 'MARK_AS_REQUIRED':
|
|
92
|
-
if (grid.element)
|
|
93
|
-
grid.element.required = true;
|
|
94
|
-
break;
|
|
95
|
-
case 'MARK_AS_OPTIONAL':
|
|
96
|
-
if (grid.element)
|
|
97
|
-
grid.element.required = false;
|
|
98
|
-
break;
|
|
99
|
-
default:
|
|
100
|
-
// no show/hide action — keep current behavior (you can choose default here)
|
|
101
|
-
// For safety, if no explicit action, we'll leave grid.show unchanged.
|
|
102
|
-
break;
|
|
103
|
-
}
|
|
104
|
-
// if visible, collect
|
|
105
|
-
if (grid.show)
|
|
106
|
-
visibleGrids.push(grid);
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
// Condition(s) not satisfied -> revert the action's effect
|
|
110
|
-
switch (action) {
|
|
111
|
-
case 'SHOW':
|
|
112
|
-
// condition no longer true => hide (revert)
|
|
113
|
-
grid.show = false;
|
|
114
|
-
break;
|
|
115
|
-
case 'HIDE':
|
|
116
|
-
// condition no longer true => show (revert)
|
|
117
|
-
grid.show = true;
|
|
118
|
-
break;
|
|
119
|
-
case 'MARK_AS_REQUIRED':
|
|
120
|
-
if (grid.element)
|
|
121
|
-
grid.element.required = false;
|
|
122
|
-
break;
|
|
123
|
-
case 'MARK_AS_OPTIONAL':
|
|
124
|
-
if (grid.element)
|
|
125
|
-
grid.element.required = true;
|
|
126
|
-
break;
|
|
127
|
-
default:
|
|
128
|
-
// nothing to revert
|
|
129
|
-
break;
|
|
130
|
-
}
|
|
131
|
-
// if we hid it because overallResult false and it's not initial, clear answer
|
|
132
|
-
if (!overallResult && !initial && !grid.show) {
|
|
133
|
-
grid.element.answer = null;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
if (overallResult)
|
|
137
|
-
visibleGrids.push(grid);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
evaluateCondition(answer, operator, value) {
|
|
141
|
-
// treat null/undefined/empty-string/empty-array as "no answer"
|
|
142
|
-
if (answer === null || answer === undefined)
|
|
143
|
-
return false;
|
|
144
|
-
// if (typeof answer === 'string' && answer === '') return false;
|
|
145
|
-
if (Array.isArray(answer) && answer.length === 0)
|
|
146
|
-
return false;
|
|
147
|
-
// helpers to normalize values to arrays of lower-case strings (for string ops)
|
|
148
|
-
const toStr = (v) => v === null || v === undefined ? '' : String(v).toLowerCase();
|
|
149
|
-
const ensureArray = (v) => {
|
|
150
|
-
if (Array.isArray(v))
|
|
151
|
-
return v.map((x) => toStr(x));
|
|
152
|
-
// if comma-separated string => split, else single element array
|
|
153
|
-
if (typeof v === 'string' && v.indexOf(',') !== -1) {
|
|
154
|
-
return v
|
|
155
|
-
.split(',')
|
|
156
|
-
.map((x) => x.trim())
|
|
157
|
-
.map((x) => toStr(x));
|
|
158
|
-
}
|
|
159
|
-
return [toStr(v)];
|
|
160
|
-
};
|
|
161
|
-
const ansArr = ensureArray(answer);
|
|
162
|
-
const valArr = ensureArray(value);
|
|
163
|
-
// numeric comparisons: only when both sides are scalars (non-array) and numeric
|
|
164
|
-
const isNumericScalar = (x) => !Array.isArray(x) && x !== null && x !== undefined && !Number.isNaN(Number(x));
|
|
165
|
-
switch (operator) {
|
|
166
|
-
case '<':
|
|
167
|
-
if (isNumericScalar(answer) && isNumericScalar(value))
|
|
168
|
-
return Number(answer) < Number(value);
|
|
169
|
-
return false;
|
|
170
|
-
case '>':
|
|
171
|
-
if (isNumericScalar(answer) && isNumericScalar(value))
|
|
172
|
-
return Number(answer) > Number(value);
|
|
173
|
-
return false;
|
|
174
|
-
case '<=':
|
|
175
|
-
if (isNumericScalar(answer) && isNumericScalar(value))
|
|
176
|
-
return Number(answer) <= Number(value);
|
|
177
|
-
return false;
|
|
178
|
-
case '>=':
|
|
179
|
-
if (isNumericScalar(answer) && isNumericScalar(value))
|
|
180
|
-
return Number(answer) >= Number(value);
|
|
181
|
-
return false;
|
|
182
|
-
// equality: true if any answer element equals any value element
|
|
183
|
-
case '=':
|
|
184
|
-
return ansArr.some((a) => valArr.some((v) => a === v));
|
|
185
|
-
case '!=':
|
|
186
|
-
return !ansArr.some((a) => valArr.some((v) => a === v));
|
|
187
|
-
// LIKE / NOT LIKE: check substring match anywhere in any answer element
|
|
188
|
-
case 'LIKE':
|
|
189
|
-
return ansArr.some((a) => valArr.some((v) => a.includes(v)));
|
|
190
|
-
case 'NOT LIKE':
|
|
191
|
-
return !ansArr.some((a) => valArr.some((v) => a.includes(v)));
|
|
192
|
-
case 'BEGIN WITH':
|
|
193
|
-
return ansArr.some((a) => valArr.some((v) => a.startsWith(v)));
|
|
194
|
-
case 'END WITH':
|
|
195
|
-
return ansArr.some((a) => valArr.some((v) => a.endsWith(v)));
|
|
196
|
-
// IN / NOT IN: true if any answer element exists in value list
|
|
197
|
-
case 'IN':
|
|
198
|
-
return ansArr.some((a) => valArr.includes(a));
|
|
199
|
-
case 'NOT IN':
|
|
200
|
-
return !ansArr.some((a) => valArr.includes(a));
|
|
201
|
-
default:
|
|
202
|
-
return false;
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
addGridsFromSubform(subform) {
|
|
206
|
-
if (!subform || !Array.isArray(subform.rows))
|
|
207
|
-
return;
|
|
208
|
-
for (const row of subform.rows) {
|
|
209
|
-
if (!row.grid || !Array.isArray(row.grid))
|
|
210
|
-
continue;
|
|
211
|
-
for (const grid of row.grid) {
|
|
212
|
-
// 1️⃣ Add this grid itself if it has an active whenClause
|
|
213
|
-
this.addGrid(grid);
|
|
214
|
-
// 2️⃣ Then, recursively process nested childLogics inside its element
|
|
215
|
-
if (grid.element?.childLogics?.length) {
|
|
216
|
-
this.processChildLogics(grid.element.childLogics);
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
/**
|
|
222
|
-
* Recursively process childLogics structure
|
|
223
|
-
*/
|
|
224
|
-
processChildLogics(childLogics) {
|
|
225
|
-
if (!Array.isArray(childLogics))
|
|
226
|
-
return;
|
|
227
|
-
for (const logic of childLogics) {
|
|
228
|
-
// 1️⃣ Each logic may have its own rows (similar to subform rows)
|
|
229
|
-
if (Array.isArray(logic.rows)) {
|
|
230
|
-
for (const row of logic.rows) {
|
|
231
|
-
if (Array.isArray(row.grid)) {
|
|
232
|
-
for (const grid of row.grid) {
|
|
233
|
-
// Check whenClause for this nested grid
|
|
234
|
-
this.addGrid(grid);
|
|
235
|
-
// 2️⃣ Recurse again if this nested question also has its own childLogics
|
|
236
|
-
if (grid.element?.childLogics?.length) {
|
|
237
|
-
this.processChildLogics(grid.element.childLogics);
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
// 3️⃣ A logic itself might directly contain nested logics
|
|
244
|
-
if (Array.isArray(logic.childLogics)) {
|
|
245
|
-
this.processChildLogics(logic.childLogics);
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
/**
|
|
250
|
-
* Return ALL elements with an active whenClause inside a subform,
|
|
251
|
-
* including nested childLogics (recursive)
|
|
252
|
-
*/
|
|
253
|
-
getWhenClauseElements(subform) {
|
|
254
|
-
const result = [];
|
|
255
|
-
if (!subform || !Array.isArray(subform.rows)) {
|
|
256
|
-
return result;
|
|
257
|
-
}
|
|
258
|
-
for (const row of subform.rows) {
|
|
259
|
-
if (!Array.isArray(row.grid))
|
|
260
|
-
continue;
|
|
261
|
-
for (const grid of row.grid) {
|
|
262
|
-
// 1️⃣ Add this grid if it has an active whenClause
|
|
263
|
-
if (this.isActiveWhenClause(grid)) {
|
|
264
|
-
result.push(grid);
|
|
265
|
-
}
|
|
266
|
-
// 2️⃣ Process nested childLogics inside this element
|
|
267
|
-
if (Array.isArray(grid.element?.childLogics)) {
|
|
268
|
-
result.push(...this.getElementsFromChildLogics(grid.element.childLogics));
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
return result;
|
|
273
|
-
}
|
|
274
|
-
/**
|
|
275
|
-
* Recursively gather grids with active whenClause inside childLogics
|
|
276
|
-
*/
|
|
277
|
-
getElementsFromChildLogics(childLogics) {
|
|
278
|
-
const found = [];
|
|
279
|
-
if (!Array.isArray(childLogics))
|
|
280
|
-
return found;
|
|
281
|
-
for (const logic of childLogics) {
|
|
282
|
-
// Each logic can have rows
|
|
283
|
-
if (Array.isArray(logic.rows)) {
|
|
284
|
-
for (const row of logic.rows) {
|
|
285
|
-
if (!Array.isArray(row.grid))
|
|
286
|
-
continue;
|
|
287
|
-
for (const grid of row.grid) {
|
|
288
|
-
if (this.isActiveWhenClause(grid)) {
|
|
289
|
-
found.push(grid);
|
|
290
|
-
}
|
|
291
|
-
// Recurse deeper if this grid has nested childLogics
|
|
292
|
-
if (Array.isArray(grid.element?.childLogics)) {
|
|
293
|
-
found.push(...this.getElementsFromChildLogics(grid.element.childLogics));
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
// Logic itself may have nested childLogics
|
|
299
|
-
if (Array.isArray(logic.childLogics)) {
|
|
300
|
-
found.push(...this.getElementsFromChildLogics(logic.childLogics));
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
return found;
|
|
304
|
-
}
|
|
305
|
-
checkElementVisibility(id, submission) {
|
|
306
|
-
if (!id || !submission || !Array.isArray(submission.answers)) {
|
|
307
|
-
return true; // default visible if invalid input
|
|
308
|
-
}
|
|
309
|
-
const matchedAnswer = submission.answers.find((ans) => ans.questionId === id);
|
|
310
|
-
// Return the 'show' flag if found, else default to true
|
|
311
|
-
return matchedAnswer ? matchedAnswer.show ?? true : true;
|
|
312
|
-
}
|
|
313
|
-
evaluateSubformWhenClauses(changedAnswer, submission, changedQuestionId, elementsWithWhenClause) {
|
|
314
|
-
if (!elementsWithWhenClause.length)
|
|
315
|
-
return;
|
|
316
|
-
for (const grid of elementsWithWhenClause) {
|
|
317
|
-
const elementId = grid.element.id;
|
|
318
|
-
const when = grid.whenClause;
|
|
319
|
-
const conditions = when.whenClauseCondition;
|
|
320
|
-
if (!conditions?.length)
|
|
321
|
-
continue;
|
|
322
|
-
let overallResult = true;
|
|
323
|
-
for (let i = 0; i < conditions.length; i++) {
|
|
324
|
-
const clause = conditions[i];
|
|
325
|
-
const logic = (clause.logic || (i === 0 ? 'AND' : 'AND')).toUpperCase();
|
|
326
|
-
// Determine which answer to use for this condition
|
|
327
|
-
let answerToCheck;
|
|
328
|
-
if (clause.questionid === changedQuestionId) {
|
|
329
|
-
// Use updated answer for the changed question
|
|
330
|
-
answerToCheck = changedAnswer;
|
|
331
|
-
}
|
|
332
|
-
else {
|
|
333
|
-
// Fetch existing value from submission for other questions
|
|
334
|
-
const existing = submission.answers.find((a) => a.questionId === clause.questionid);
|
|
335
|
-
answerToCheck = existing?.answer;
|
|
336
|
-
}
|
|
337
|
-
const result = this.evaluateCondition(answerToCheck, clause.condition, clause.value);
|
|
338
|
-
// Apply AND/OR logic
|
|
339
|
-
if (i === 0) {
|
|
340
|
-
overallResult = result;
|
|
341
|
-
}
|
|
342
|
-
else {
|
|
343
|
-
overallResult =
|
|
344
|
-
logic === 'AND' ? overallResult && result : overallResult || result;
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
// Update show flag for the element controlled by this whenClause
|
|
348
|
-
const matchedAnswer = submission.answers.find((ans) => ans.questionId === elementId);
|
|
349
|
-
const actions = Array.isArray(when?.whenClauseActions)
|
|
350
|
-
? when.whenClauseActions.map(String)
|
|
351
|
-
: [];
|
|
352
|
-
// choose the decisive action (use last if multiple)
|
|
353
|
-
const action = actions.length > 0 ? actions[actions.length - 1] : undefined;
|
|
354
|
-
if (matchedAnswer) {
|
|
355
|
-
if (overallResult) {
|
|
356
|
-
// Condition(s) satisfied -> perform the action
|
|
357
|
-
switch (action) {
|
|
358
|
-
case 'SHOW':
|
|
359
|
-
matchedAnswer.show = true;
|
|
360
|
-
break;
|
|
361
|
-
case 'HIDE':
|
|
362
|
-
matchedAnswer.show = false;
|
|
363
|
-
break;
|
|
364
|
-
case 'MARK_AS_REQUIRED':
|
|
365
|
-
matchedAnswer.required = true;
|
|
366
|
-
break;
|
|
367
|
-
case 'MARK_AS_OPTIONAL':
|
|
368
|
-
matchedAnswer.required = false;
|
|
369
|
-
break;
|
|
370
|
-
default:
|
|
371
|
-
// no show/hide action — keep current behavior (you can choose default here)
|
|
372
|
-
// For safety, if no explicit action, we'll leave grid.show unchanged.
|
|
373
|
-
break;
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
else {
|
|
377
|
-
// Condition(s) not satisfied -> revert the action's effect
|
|
378
|
-
switch (action) {
|
|
379
|
-
case 'SHOW':
|
|
380
|
-
// condition no longer true => hide (revert)
|
|
381
|
-
matchedAnswer.show = false;
|
|
382
|
-
break;
|
|
383
|
-
case 'HIDE':
|
|
384
|
-
// condition no longer true => show (revert)
|
|
385
|
-
matchedAnswer.show = true;
|
|
386
|
-
break;
|
|
387
|
-
case 'MARK_AS_REQUIRED':
|
|
388
|
-
matchedAnswer.required = false;
|
|
389
|
-
break;
|
|
390
|
-
case 'MARK_AS_OPTIONAL':
|
|
391
|
-
matchedAnswer.required = true;
|
|
392
|
-
break;
|
|
393
|
-
default:
|
|
394
|
-
// nothing to revert
|
|
395
|
-
break;
|
|
396
|
-
}
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
// if (matchedAnswer) {
|
|
400
|
-
// matchedAnswer.show = overallResult;
|
|
401
|
-
// }
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
resetService() {
|
|
405
|
-
// Clear tracked grids
|
|
406
|
-
this.activeWhenClauseGrids = [];
|
|
407
|
-
// Clear stored question → answer map
|
|
408
|
-
this.questionAnswerMap = {};
|
|
409
|
-
// Reset visibility logic to initial state
|
|
410
|
-
}
|
|
411
|
-
getActiveWhenClauseGrids() {
|
|
412
|
-
return this.activeWhenClauseGrids;
|
|
413
|
-
}
|
|
414
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WhenClauseService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
415
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WhenClauseService, providedIn: 'root' }); }
|
|
416
|
-
}
|
|
417
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WhenClauseService, decorators: [{
|
|
418
|
-
type: Injectable,
|
|
419
|
-
args: [{
|
|
420
|
-
providedIn: 'root',
|
|
421
|
-
}]
|
|
422
|
-
}], ctorParameters: function () { return []; } });
|
|
423
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2hlbkNsYXVzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9zZXJ2aWNlcy93aGVuQ2xhdXNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBS2hELE1BQU0sT0FBTyxpQkFBaUI7SUFRNUI7UUFQUSwwQkFBcUIsR0FBVSxFQUFFLENBQUM7UUFDbEMsc0JBQWlCLEdBQWtDLEVBQUUsQ0FBQztRQUN4RCxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUEwQixDQUFDO1FBSTlELGtCQUFhLEdBQVksSUFBSSxDQUFDO0lBQ2YsQ0FBQztJQUVoQixpQkFBaUI7UUFDZixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBR0M7O09BRUc7SUFDSCxrQkFBa0IsQ0FBQyxJQUFTO1FBQzFCLE1BQU0sSUFBSSxHQUFHLElBQUksRUFBRSxVQUFVLENBQUM7UUFDOUIsT0FBTyxDQUFDLENBQUMsQ0FDUCxJQUFJO1lBQ0osSUFBSSxDQUFDLFFBQVE7WUFDYixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztZQUN2QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDcEMsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU8sQ0FBQyxJQUFTO1FBQ2YsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBRWxCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2pDLE1BQU0sTUFB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LENBQUM7SUFFRCxZQUFZO1FBQ1Ysc0JBQXNCO1FBQ3RCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7UUFFaEMscUNBQXFDO1FBQ3JDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFFNUIsMENBQTBDO0lBQzVDLENBQUM7SUFFRCx3QkFBd0I7UUFDdEIsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUM7SUFDcEMsQ0FBQzsrR0E3ZVUsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FGaEIsTUFBTTs7NEZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1Ym1pc3Npb24gfSBmcm9tICcuLi9tb2RlbHMvc3VibWlzc2lvbi5tb2RlbCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcy9pbnRlcm5hbC9TdWJqZWN0JztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFdoZW5DbGF1c2VTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBhY3RpdmVXaGVuQ2xhdXNlR3JpZHM6IGFueVtdID0gW107XG4gIHByaXZhdGUgcXVlc3Rpb25BbnN3ZXJNYXA6IHsgW3F1ZXN0aW9uSWQ6IHN0cmluZ106IGFueSB9ID0ge307XG5wcml2YXRlIHF1ZXN0aW9uQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PHsgcXVlc3Rpb25JZDogc3RyaW5nIH0+KCk7XG5cblxuXG4gIGlzSW5pdGlhbExvYWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgbWFya0xvYWRDb21wbGV0ZWQoKSB7XG4gICAgdGhpcy5pc0luaXRpYWxMb2FkID0gZmFsc2U7XG4gIH1cblxuICBvblF1ZXN0aW9uQ2hhbmdlKCkge1xuICByZXR1cm4gdGhpcy5xdWVzdGlvbkNoYW5nZSQuYXNPYnNlcnZhYmxlKCk7XG59XG5cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBncmlkIGhhcyBhbiBhY3RpdmUgd2hlbiBjbGF1c2VcbiAgICovXG4gIGlzQWN0aXZlV2hlbkNsYXVzZShncmlkOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCB3aGVuID0gZ3JpZD8ud2hlbkNsYXVzZTtcbiAgICByZXR1cm4gISEoXG4gICAgICB3aGVuICYmXG4gICAgICB3aGVuLmFjdGl2YXRlICYmXG4gICAgICBBcnJheS5pc0FycmF5KHdoZW4ud2hlbkNsYXVzZUNvbmRpdGlvbikgJiZcbiAgICAgIHdoZW4ud2hlbkNsYXVzZUNvbmRpdGlvbi5sZW5ndGggPiAwXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBncmlkIHRvIHRyYWNraW5nIGxpc3QgaWYgaXQgaGFzIGFuIGFjdGl2ZSB3aGVuIGNsYXVzZVxuICAgKi9cbiAgYWRkR3JpZChncmlkOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIWdyaWQpIHJldHVybjtcblxuICAgIGlmICh0aGlzLmlzQWN0aXZlV2hlbkNsYXVzZShncmlkKSkge1xuICAgICAgY29uc3QgZXhpc3RzID0gdGhpcy5hY3RpdmVXaGVuQ2xhdXNlR3JpZHMuc29tZShcbiAgICAgICAgKGcpID0+IGcuZWxlbWVudD8uaWQgPT09IGdyaWQuZWxlbWVudD8uaWRcbiAgICAgICk7XG5cbiAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlV2hlbkNsYXVzZUdyaWRzLnB1c2goZ3JpZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0UXVlc3Rpb25BbnN3ZXIocXVlc3Rpb25JZDogc3RyaW5nLCBhbnN3ZXI6IGFueSxpbml0aWFsOmJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIGlmICghcXVlc3Rpb25JZCkgcmV0dXJuO1xuICAgIHRoaXMucXVlc3Rpb25BbnN3ZXJNYXBbcXVlc3Rpb25JZF0gPSBhbnN3ZXI7XG4gICAgdGhpcy5ldmFsdWF0ZUFsbFdoZW5DbGF1c2VzKGluaXRpYWwpO1xuICAgICAgdGhpcy5xdWVzdGlvbkNoYW5nZSQubmV4dCh7IHF1ZXN0aW9uSWQgfSk7XG4gIH1cblxuICBnZXRBbnN3ZXIocXVlc3Rpb25JZDogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkFuc3dlck1hcFtxdWVzdGlvbklkXTtcbiAgfVxuXG4gIHByaXZhdGUgZXZhbHVhdGVBbGxXaGVuQ2xhdXNlcyhpbml0aWFsOmJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCB2aXNpYmxlR3JpZHM6IGFueVtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGdyaWQgb2YgdGhpcy5hY3RpdmVXaGVuQ2xhdXNlR3JpZHMpIHtcbiAgICAgIGNvbnN0IHdoZW4gPSBncmlkLndoZW5DbGF1c2U7XG4gICAgICBjb25zdCBjb25kaXRpb25zID0gd2hlbi53aGVuQ2xhdXNlQ29uZGl0aW9uO1xuXG4gICAgICBpZiAoIWNvbmRpdGlvbnMgfHwgIWNvbmRpdGlvbnMubGVuZ3RoKSBjb250aW51ZTtcblxuICAgICAgbGV0IG92ZXJhbGxSZXN1bHQgPSB0cnVlO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmRpdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2xhdXNlID0gY29uZGl0aW9uc1tpXTtcbiAgICAgICAgY29uc3QgbG9naWMgPSAoY2xhdXNlLmxvZ2ljIHx8IChpID09PSAwID8gJ0FORCcgOiAnQU5EJykpLnRvVXBwZXJDYXNlKCk7IC8vIERlZmF1bHQgdG8gQU5EIGZvciBmaXJzdFxuICAgICAgICBjb25zdCBhbnN3ZXIgPSB0aGlzLmdldEFuc3dlcihjbGF1c2UucXVlc3Rpb25pZCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZXZhbHVhdGVDb25kaXRpb24oXG4gICAgICAgICAgYW5zd2VyLFxuICAgICAgICAgIGNsYXVzZS5jb25kaXRpb24sXG4gICAgICAgICAgY2xhdXNlLnZhbHVlXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gQ29tYmluZSByZXN1bHRzIGJhc2VkIG9uIGxvZ2ljIChBTkQgLyBPUilcbiAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICBvdmVyYWxsUmVzdWx0ID0gcmVzdWx0OyAvLyBpbml0aWFsaXplIHdpdGggZmlyc3QgY29uZGl0aW9uXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGxvZ2ljID09PSAnQU5EJykge1xuICAgICAgICAgICAgb3ZlcmFsbFJlc3VsdCA9IG92ZXJhbGxSZXN1bHQgJiYgcmVzdWx0O1xuICAgICAgICAgIH0gZWxzZSBpZiAobG9naWMgPT09ICdPUicpIHtcbiAgICAgICAgICAgIG92ZXJhbGxSZXN1bHQgPSBvdmVyYWxsUmVzdWx0IHx8IHJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIHNhZmUgcmVhZCBhY3Rpb25zIChjb3VsZCBiZSB1bmRlZmluZWQpXG4gICAgY29uc3QgYWN0aW9uczogc3RyaW5nW10gPSBBcnJheS5pc0FycmF5KHdoZW4/LndoZW5DbGF1c2VBY3Rpb25zKVxuICAgID8gd2hlbi53aGVuQ2xhdXNlQWN0aW9ucy5tYXAoU3RyaW5nKVxuICAgIDogW107XG5cbiAgLy8gY2hvb3NlIHRoZSBkZWNpc2l2ZSBhY3Rpb24gKHVzZSBsYXN0IGlmIG11bHRpcGxlKVxuICBjb25zdCBhY3Rpb24gPSBhY3Rpb25zLmxlbmd0aCA+IDAgPyBhY3Rpb25zW2FjdGlvbnMubGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG5cbiAgaWYgKG92ZXJhbGxSZXN1bHQpIHtcbiAgICAvLyBDb25kaXRpb24ocykgc2F0aXNmaWVkIC0+IHBlcmZvcm0gdGhlIGFjdGlvblxuICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICBjYXNlICdTSE9XJzpcbiAgICAgICAgZ3JpZC5zaG93ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdISURFJzpcbiAgICAgICAgZ3JpZC5zaG93ID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnTUFSS19BU19SRVFVSVJFRCc6XG4gICAgICAgIGlmIChncmlkLmVsZW1lbnQpIGdyaWQuZWxlbWVudC5yZXF1aXJlZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnTUFSS19BU19PUFRJT05BTCc6XG4gICAgICAgIGlmIChncmlkLmVsZW1lbnQpIGdyaWQuZWxlbWVudC5yZXF1aXJlZCA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIG5vIHNob3cvaGlkZSBhY3Rpb24g4oCUIGtlZXAgY3VycmVudCBiZWhhdmlvciAoeW91IGNhbiBjaG9vc2UgZGVmYXVsdCBoZXJlKVxuICAgICAgICAvLyBGb3Igc2FmZXR5LCBpZiBubyBleHBsaWNpdCBhY3Rpb24sIHdlJ2xsIGxlYXZlIGdyaWQuc2hvdyB1bmNoYW5nZWQuXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIGlmIHZpc2libGUsIGNvbGxlY3RcbiAgICBpZiAoZ3JpZC5zaG93KSB2aXNpYmxlR3JpZHMucHVzaChncmlkKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBDb25kaXRpb24ocykgbm90IHNhdGlzZmllZCAtPiByZXZlcnQgdGhlIGFjdGlvbidzIGVmZmVjdFxuICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICBjYXNlICdTSE9XJzpcbiAgICAgICAgLy8gY29uZGl0aW9uIG5vIGxvbmdlciB0cnVlID0+IGhpZGUgKHJldmVydClcbiAgICAgICAgZ3JpZC5zaG93ID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnSElERSc6XG4gICAgICAgIC8vIGNvbmRpdGlvbiBubyBsb25nZXIgdHJ1ZSA9PiBzaG93IChyZXZlcnQpXG4gICAgICAgIGdyaWQuc2hvdyA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnTUFSS19BU19SRVFVSVJFRCc6XG4gICAgICAgIGlmIChncmlkLmVsZW1lbnQpIGdyaWQuZWxlbWVudC5yZXF1aXJlZCA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ01BUktfQVNfT1BUSU9OQUwnOlxuICAgICAgICBpZiAoZ3JpZC5lbGVtZW50KSBncmlkLmVsZW1lbnQucmVxdWlyZWQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIG5vdGhpbmcgdG8gcmV2ZXJ0XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBoaWQgaXQgYmVjYXVzZSBvdmVyYWxsUmVzdWx0IGZhbHNlIGFuZCBpdCdzIG5vdCBpbml0aWFsLCBjbGVhciBhbnN3ZXJcbiAgICBpZiAoIW92ZXJhbGxSZXN1bHQgJiYgIWluaXRpYWwgJiYgIWdyaWQuc2hvdykge1xuICAgICAgZ3JpZC5lbGVtZW50LmFuc3dlciA9IG51bGw7XG4gICAgfVxuICB9XG4gICAgICBpZiAob3ZlcmFsbFJlc3VsdCkgdmlzaWJsZUdyaWRzLnB1c2goZ3JpZCk7XG4gICAgfVxuICB9XG5cbiAgZXZhbHVhdGVDb25kaXRpb24oYW5zd2VyOiBhbnksIG9wZXJhdG9yOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBib29sZWFuIHtcblxuICAgIC8vIHRyZWF0IG51bGwvdW5kZWZpbmVkL2VtcHR5LXN0cmluZy9lbXB0eS1hcnJheSBhcyBcIm5vIGFuc3dlclwiXG4gICAgaWYgKGFuc3dlciA9PT0gbnVsbCB8fCBhbnN3ZXIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGlmICh0eXBlb2YgYW5zd2VyID09PSAnc3RyaW5nJyAmJiBhbnN3ZXIgPT09ICcnKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYW5zd2VyKSAmJiBhbnN3ZXIubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBoZWxwZXJzIHRvIG5vcm1hbGl6ZSB2YWx1ZXMgdG8gYXJyYXlzIG9mIGxvd2VyLWNhc2Ugc3RyaW5ncyAoZm9yIHN0cmluZyBvcHMpXG4gICAgY29uc3QgdG9TdHIgPSAodjogYW55KSA9PlxuICAgICAgdiA9PT0gbnVsbCB8fCB2ID09PSB1bmRlZmluZWQgPyAnJyA6IFN0cmluZyh2KS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgY29uc3QgZW5zdXJlQXJyYXkgPSAodjogYW55KTogc3RyaW5nW10gPT4ge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodikpIHJldHVybiB2Lm1hcCgoeCkgPT4gdG9TdHIoeCkpO1xuICAgICAgLy8gaWYgY29tbWEtc2VwYXJhdGVkIHN0cmluZyA9PiBzcGxpdCwgZWxzZSBzaW5nbGUgZWxlbWVudCBhcnJheVxuICAgICAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2LmluZGV4T2YoJywnKSAhPT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHZcbiAgICAgICAgICAuc3BsaXQoJywnKVxuICAgICAgICAgIC5tYXAoKHgpID0+IHgudHJpbSgpKVxuICAgICAgICAgIC5tYXAoKHgpID0+IHRvU3RyKHgpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbdG9TdHIodildO1xuICAgIH07XG5cbiAgICBjb25zdCBhbnNBcnIgPSBlbnN1cmVBcnJheShhbnN3ZXIpO1xuICAgIGNvbnN0IHZhbEFyciA9IGVuc3VyZUFycmF5KHZhbHVlKTtcblxuICAgIC8vIG51bWVyaWMgY29tcGFyaXNvbnM6IG9ubHkgd2hlbiBib3RoIHNpZGVzIGFyZSBzY2FsYXJzIChub24tYXJyYXkpIGFuZCBudW1lcmljXG4gICAgY29uc3QgaXNOdW1lcmljU2NhbGFyID0gKHg6IGFueSkgPT5cbiAgICAgICFBcnJheS5pc0FycmF5KHgpICYmIHggIT09IG51bGwgJiYgeCAhPT0gdW5kZWZpbmVkICYmICFOdW1iZXIuaXNOYU4oTnVtYmVyKHgpKTtcblxuICAgIHN3aXRjaCAob3BlcmF0b3IpIHtcbiAgICAgIGNhc2UgJzwnOlxuICAgICAgICBpZiAoaXNOdW1lcmljU2NhbGFyKGFuc3dlcikgJiYgaXNOdW1lcmljU2NhbGFyKHZhbHVlKSlcbiAgICAgICAgICByZXR1cm4gTnVtYmVyKGFuc3dlcikgPCBOdW1iZXIodmFsdWUpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBjYXNlICc+JzpcbiAgICAgICAgaWYgKGlzTnVtZXJpY1NjYWxhcihhbnN3ZXIpICYmIGlzTnVtZXJpY1NjYWxhcih2YWx1ZSkpXG4gICAgICAgICAgcmV0dXJuIE51bWJlcihhbnN3ZXIpID4gTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgY2FzZSAnPD0nOlxuICAgICAgICBpZiAoaXNOdW1lcmljU2NhbGFyKGFuc3dlcikgJiYgaXNOdW1lcmljU2NhbGFyKHZhbHVlKSlcbiAgICAgICAgICByZXR1cm4gTnVtYmVyKGFuc3dlcikgPD0gTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgY2FzZSAnPj0nOlxuICAgICAgICBpZiAoaXNOdW1lcmljU2NhbGFyKGFuc3dlcikgJiYgaXNOdW1lcmljU2NhbGFyKHZhbHVlKSlcbiAgICAgICAgICByZXR1cm4gTnVtYmVyKGFuc3dlcikgPj0gTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAvLyBlcXVhbGl0eTogdHJ1ZSBpZiBhbnkgYW5zd2VyIGVsZW1lbnQgZXF1YWxzIGFueSB2YWx1ZSBlbGVtZW50XG4gICAgICBjYXNlICc9JzpcbiAgICAgICAgcmV0dXJuIGFuc0Fyci5zb21lKChhKSA9PiB2YWxBcnIuc29tZSgodikgPT4gYSA9PT0gdikpO1xuXG4gICAgICBjYXNlICchPSc6XG4gICAgICAgIHJldHVybiAhYW5zQXJyLnNvbWUoKGEpID0+IHZhbEFyci5zb21lKCh2KSA9PiBhID09PSB2KSk7XG5cbiAgICAgIC8vIExJS0UgLyBOT1QgTElLRTogY2hlY2sgc3Vic3RyaW5nIG1hdGNoIGFueXdoZXJlIGluIGFueSBhbnN3ZXIgZWxlbWVudFxuICAgICAgY2FzZSAnTElLRSc6XG4gICAgICAgIHJldHVybiBhbnNBcnIuc29tZSgoYSkgPT4gdmFsQXJyLnNvbWUoKHYpID0+IGEuaW5jbHVkZXModikpKTtcbiAgICAgIGNhc2UgJ05PVCBMSUtFJzpcbiAgICAgICAgcmV0dXJuICFhbnNBcnIuc29tZSgoYSkgPT4gdmFsQXJyLnNvbWUoKHYpID0+IGEuaW5jbHVkZXModikpKTtcblxuICAgICAgY2FzZSAnQkVHSU4gV0lUSCc6XG4gICAgICAgIHJldHVybiBhbnNBcnIuc29tZSgoYSkgPT4gdmFsQXJyLnNvbWUoKHYpID0+IGEuc3RhcnRzV2l0aCh2KSkpO1xuICAgICAgY2FzZSAnRU5EIFdJVEgnOlxuICAgICAgICByZXR1cm4gYW5zQXJyLnNvbWUoKGEpID0+IHZhbEFyci5zb21lKCh2KSA9PiBhLmVuZHNXaXRoKHYpKSk7XG5cbiAgICAgIC8vIElOIC8gTk9UIElOOiB0cnVlIGlmIGFueSBhbnN3ZXIgZWxlbWVudCBleGlzdHMgaW4gdmFsdWUgbGlzdFxuICAgICAgY2FzZSAnSU4nOlxuICAgICAgICByZXR1cm4gYW5zQXJyLnNvbWUoKGEpID0+IHZhbEFyci5pbmNsdWRlcyhhKSk7XG4gICAgICBjYXNlICdOT1QgSU4nOlxuICAgICAgICByZXR1cm4gIWFuc0Fyci5zb21lKChhKSA9PiB2YWxBcnIuaW5jbHVkZXMoYSkpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYWRkR3JpZHNGcm9tU3ViZm9ybShzdWJmb3JtOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXN1YmZvcm0gfHwgIUFycmF5LmlzQXJyYXkoc3ViZm9ybS5yb3dzKSkgcmV0dXJuO1xuXG4gICAgZm9yIChjb25zdCByb3cgb2Ygc3ViZm9ybS5yb3dzKSB7XG4gICAgICBpZiAoIXJvdy5ncmlkIHx8ICFBcnJheS5pc0FycmF5KHJvdy5ncmlkKSkgY29udGludWU7XG5cbiAgICAgIGZvciAoY29uc3QgZ3JpZCBvZiByb3cuZ3JpZCkge1xuICAgICAgICAvLyAx77iP4oOjIEFkZCB0aGlzIGdyaWQgaXRzZWxmIGlmIGl0IGhhcyBhbiBhY3RpdmUgd2hlbkNsYXVzZVxuICAgICAgICB0aGlzLmFkZEdyaWQoZ3JpZCk7XG5cbiAgICAgICAgLy8gMu+4j+KDoyBUaGVuLCByZWN1cnNpdmVseSBwcm9jZXNzIG5lc3RlZCBjaGlsZExvZ2ljcyBpbnNpZGUgaXRzIGVsZW1lbnRcbiAgICAgICAgaWYgKGdyaWQuZWxlbWVudD8uY2hpbGRMb2dpY3M/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc0NoaWxkTG9naWNzKGdyaWQuZWxlbWVudC5jaGlsZExvZ2ljcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgcHJvY2VzcyBjaGlsZExvZ2ljcyBzdHJ1Y3R1cmVcbiAgICovXG4gIHByaXZhdGUgcHJvY2Vzc0NoaWxkTG9naWNzKGNoaWxkTG9naWNzOiBhbnlbXSk6IHZvaWQge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShjaGlsZExvZ2ljcykpIHJldHVybjtcblxuICAgIGZvciAoY29uc3QgbG9naWMgb2YgY2hpbGRMb2dpY3MpIHtcbiAgICAgIC8vIDHvuI/ig6MgRWFjaCBsb2dpYyBtYXkgaGF2ZSBpdHMgb3duIHJvd3MgKHNpbWlsYXIgdG8gc3ViZm9ybSByb3dzKVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobG9naWMucm93cykpIHtcbiAgICAgICAgZm9yIChjb25zdCByb3cgb2YgbG9naWMucm93cykge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJvdy5ncmlkKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBncmlkIG9mIHJvdy5ncmlkKSB7XG4gICAgICAgICAgICAgIC8vIENoZWNrIHdoZW5DbGF1c2UgZm9yIHRoaXMgbmVzdGVkIGdyaWRcbiAgICAgICAgICAgICAgdGhpcy5hZGRHcmlkKGdyaWQpO1xuXG4gICAgICAgICAgICAgIC8vIDLvuI/ig6MgUmVjdXJzZSBhZ2FpbiBpZiB0aGlzIG5lc3RlZCBxdWVzdGlvbiBhbHNvIGhhcyBpdHMgb3duIGNoaWxkTG9naWNzXG4gICAgICAgICAgICAgIGlmIChncmlkLmVsZW1lbnQ/LmNoaWxkTG9naWNzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NDaGlsZExvZ2ljcyhncmlkLmVsZW1lbnQuY2hpbGRMb2dpY3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIDPvuI/ig6MgQSBsb2dpYyBpdHNlbGYgbWlnaHQgZGlyZWN0bHkgY29udGFpbiBuZXN0ZWQgbG9naWNzXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShsb2dpYy5jaGlsZExvZ2ljcykpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzQ2hpbGRMb2dpY3MobG9naWMuY2hpbGRMb2dpY3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gQUxMIGVsZW1lbnRzIHdpdGggYW4gYWN0aXZlIHdoZW5DbGF1c2UgaW5zaWRlIGEgc3ViZm9ybSxcbiAgICogaW5jbHVkaW5nIG5lc3RlZCBjaGlsZExvZ2ljcyAocmVjdXJzaXZlKVxuICAgKi9cbiAgZ2V0V2hlbkNsYXVzZUVsZW1lbnRzKHN1YmZvcm06IGFueSk6IGFueVtdIHtcbiAgICBjb25zdCByZXN1bHQ6IGFueVtdID0gW107XG5cbiAgICBpZiAoIXN1YmZvcm0gfHwgIUFycmF5LmlzQXJyYXkoc3ViZm9ybS5yb3dzKSkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiBzdWJmb3JtLnJvd3MpIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShyb3cuZ3JpZCkpIGNvbnRpbnVlO1xuXG4gICAgICBmb3IgKGNvbnN0IGdyaWQgb2Ygcm93LmdyaWQpIHtcbiAgICAgICAgLy8gMe+4j+KDoyBBZGQgdGhpcyBncmlkIGlmIGl0IGhhcyBhbiBhY3RpdmUgd2hlbkNsYXVzZVxuICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZVdoZW5DbGF1c2UoZ3JpZCkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChncmlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDLvuI/ig6MgUHJvY2VzcyBuZXN0ZWQgY2hpbGRMb2dpY3MgaW5zaWRlIHRoaXMgZWxlbWVudFxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShncmlkLmVsZW1lbnQ/LmNoaWxkTG9naWNzKSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgLi4udGhpcy5nZXRFbGVtZW50c0Zyb21DaGlsZExvZ2ljcyhncmlkLmVsZW1lbnQuY2hpbGRMb2dpY3MpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgZ2F0aGVyIGdyaWRzIHdpdGggYWN0aXZlIHdoZW5DbGF1c2UgaW5zaWRlIGNoaWxkTG9naWNzXG4gICAqL1xuICBwcml2YXRlIGdldEVsZW1lbnRzRnJvbUNoaWxkTG9naWNzKGNoaWxkTG9naWNzOiBhbnlbXSk6IGFueVtdIHtcbiAgICBjb25zdCBmb3VuZDogYW55W10gPSBbXTtcblxuICAgIGlmICghQXJyYXkuaXNBcnJheShjaGlsZExvZ2ljcykpIHJldHVybiBmb3VuZDtcblxuICAgIGZvciAoY29uc3QgbG9naWMgb2YgY2hpbGRMb2dpY3MpIHtcbiAgICAgIC8vIEVhY2ggbG9naWMgY2FuIGhhdmUgcm93c1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobG9naWMucm93cykpIHtcbiAgICAgICAgZm9yIChjb25zdCByb3cgb2YgbG9naWMucm93cykge1xuICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyb3cuZ3JpZCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBncmlkIG9mIHJvdy5ncmlkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZVdoZW5DbGF1c2UoZ3JpZCkpIHtcbiAgICAgICAgICAgICAgZm91bmQucHVzaChncmlkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gUmVjdXJzZSBkZWVwZXIgaWYgdGhpcyBncmlkIGhhcyBuZXN0ZWQgY2hpbGRMb2dpY3NcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGdyaWQuZWxlbWVudD8uY2hpbGRMb2dpY3MpKSB7XG4gICAgICAgICAgICAgIGZvdW5kLnB1c2goXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nZXRFbGVtZW50c0Zyb21DaGlsZExvZ2ljcyhncmlkLmVsZW1lbnQuY2hpbGRMb2dpY3MpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIExvZ2ljIGl0c2VsZiBtYXkgaGF2ZSBuZXN0ZWQgY2hpbGRMb2dpY3NcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGxvZ2ljLmNoaWxkTG9naWNzKSkge1xuICAgICAgICBmb3VuZC5wdXNoKC4uLnRoaXMuZ2V0RWxlbWVudHNGcm9tQ2hpbGRMb2dpY3MobG9naWMuY2hpbGRMb2dpY3MpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZm91bmQ7XG4gIH1cblxuICBjaGVja0VsZW1lbnRWaXNpYmlsaXR5KGlkOiBzdHJpbmcsIHN1Ym1pc3Npb246IFN1Ym1pc3Npb24pOiBib29sZWFuIHtcbiAgICBpZiAoIWlkIHx8ICFzdWJtaXNzaW9uIHx8ICFBcnJheS5pc0FycmF5KHN1Ym1pc3Npb24uYW5zd2VycykpIHtcbiAgICAgIHJldHVybiB0cnVlOyAvLyBkZWZhdWx0IHZpc2libGUgaWYgaW52YWxpZCBpbnB1dFxuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoZWRBbnN3ZXIgPSBzdWJtaXNzaW9uLmFuc3dlcnMuZmluZChcbiAgICAgIChhbnMpID0+IGFucy5xdWVzdGlvbklkID09PSBpZFxuICAgICk7XG5cbiAgICAvLyBSZXR1cm4gdGhlICdzaG93JyBmbGFnIGlmIGZvdW5kLCBlbHNlIGRlZmF1bHQgdG8gdHJ1ZVxuICAgIHJldHVybiBtYXRjaGVkQW5zd2VyID8gbWF0Y2hlZEFuc3dlci5zaG93ID8/IHRydWUgOiB0cnVlO1xuICB9XG5cbiAgZXZhbHVhdGVTdWJmb3JtV2hlbkNsYXVzZXMoXG4gICAgY2hhbmdlZEFuc3dlcjogYW55LFxuICAgIHN1Ym1pc3Npb246IFN1Ym1pc3Npb24sXG4gICAgY2hhbmdlZFF1ZXN0aW9uSWQ6IHN0cmluZyxcbiAgICBlbGVtZW50c1dpdGhXaGVuQ2xhdXNlOiBhbnlcbiAgKSB7XG4gICAgaWYgKCFlbGVtZW50c1dpdGhXaGVuQ2xhdXNlLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgZm9yIChjb25zdCBncmlkIG9mIGVsZW1lbnRzV2l0aFdoZW5DbGF1c2UpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRJZCA9IGdyaWQuZWxlbWVudC5pZDtcbiAgICAgIGNvbnN0IHdoZW4gPSBncmlkLndoZW5DbGF1c2U7XG4gICAgICBjb25zdCBjb25kaXRpb25zID0gd2hlbi53aGVuQ2xhdXNlQ29uZGl0aW9uO1xuXG4gICAgICBpZiAoIWNvbmRpdGlvbnM/Lmxlbmd0aCkgY29udGludWU7XG5cbiAgICAgIGxldCBvdmVyYWxsUmVzdWx0ID0gdHJ1ZTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25kaXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNsYXVzZSA9IGNvbmRpdGlvbnNbaV07XG5cbiAgICAgICAgY29uc3QgbG9naWMgPSAoY2xhdXNlLmxvZ2ljIHx8IChpID09PSAwID8gJ0FORCcgOiAnQU5EJykpLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIGFuc3dlciB0byB1c2UgZm9yIHRoaXMgY29uZGl0aW9uXG4gICAgICAgIGxldCBhbnN3ZXJUb0NoZWNrOiBhbnk7XG5cbiAgICAgICAgaWYgKGNsYXVzZS5xdWVzdGlvbmlkID09PSBjaGFuZ2VkUXVlc3Rpb25JZCkge1xuICAgICAgICAgIC8vIFVzZSB1cGRhdGVkIGFuc3dlciBmb3IgdGhlIGNoYW5nZWQgcXVlc3Rpb25cbiAgICAgICAgICBhbnN3ZXJUb0NoZWNrID0gY2hhbmdlZEFuc3dlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBGZXRjaCBleGlzdGluZyB2YWx1ZSBmcm9tIHN1Ym1pc3Npb24gZm9yIG90aGVyIHF1ZXN0aW9uc1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gc3VibWlzc2lvbi5hbnN3ZXJzLmZpbmQoXG4gICAgICAgICAgICAoYSkgPT4gYS5xdWVzdGlvbklkID09PSBjbGF1c2UucXVlc3Rpb25pZFxuICAgICAgICAgICk7XG4gICAgICAgICAgYW5zd2VyVG9DaGVjayA9IGV4aXN0aW5nPy5hbnN3ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmV2YWx1YXRlQ29uZGl0aW9uKFxuICAgICAgICAgIGFuc3dlclRvQ2hlY2ssXG4gICAgICAgICAgY2xhdXNlLmNvbmRpdGlvbixcbiAgICAgICAgICBjbGF1c2UudmFsdWVcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBBcHBseSBBTkQvT1IgbG9naWNcbiAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICBvdmVyYWxsUmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG92ZXJhbGxSZXN1bHQgPVxuICAgICAgICAgICAgbG9naWMgPT09ICdBTkQnID8gb3ZlcmFsbFJlc3VsdCAmJiByZXN1bHQgOiBvdmVyYWxsUmVzdWx0IHx8IHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgc2hvdyBmbGFnIGZvciB0aGUgZWxlbWVudCBjb250cm9sbGVkIGJ5IHRoaXMgd2hlbkNsYXVzZVxuICAgICAgY29uc3QgbWF0Y2hlZEFuc3dlciA9IHN1Ym1pc3Npb24uYW5zd2Vycy5maW5kKFxuICAgICAgICAoYW5zKSA9PiBhbnMucXVlc3Rpb25JZCA9PT0gZWxlbWVudElkXG4gICAgICApO1xuXG4gICAgICBjb25zdCBhY3Rpb25zOiBzdHJpbmdbXSA9IEFycmF5LmlzQXJyYXkod2hlbj8ud2hlbkNsYXVzZUFjdGlvbnMpXG4gICAgPyB3aGVuLndoZW5DbGF1c2VBY3Rpb25zLm1hcChTdHJpbmcpXG4gICAgOiBbXTtcblxuICAgICAgLy8gY2hvb3NlIHRoZSBkZWNpc2l2ZSBhY3Rpb24gKHVzZSBsYXN0IGlmIG11bHRpcGxlKVxuICAgICAgY29uc3QgYWN0aW9uID0gYWN0aW9ucy5sZW5ndGggPiAwID8gYWN0aW9uc1thY3Rpb25zLmxlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xuXG5cbiAgICAgIGlmIChtYXRjaGVkQW5zd2VyKSB7XG4gICAgICAgIGlmIChvdmVyYWxsUmVzdWx0KSB7XG4gICAgICAgICAgLy8gQ29uZGl0aW9uKHMpIHNhdGlzZmllZCAtPiBwZXJmb3JtIHRoZSBhY3Rpb25cbiAgICAgICAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgICAgICAgY2FzZSAnU0hPVyc6XG4gICAgICAgICAgICAgIG1hdGNoZWRBbnN3ZXIuc2hvdyA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnSElERSc6XG4gICAgICAgICAgICAgIG1hdGNoZWRBbnN3ZXIuc2hvdyA9IGZhbHNlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ01BUktfQVNfUkVRVUlSRUQnOlxuICAgICAgICAgICAgICBtYXRjaGVkQW5zd2VyLnJlcXVpcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdNQVJLX0FTX09QVElPTkFMJzpcbiAgICAgICAgICAgICAgbWF0Y2hlZEFuc3dlci5yZXF1aXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIC8vIG5vIHNob3cvaGlkZSBhY3Rpb24g4oCUIGtlZXAgY3VycmVudCBiZWhhdmlvciAoeW91IGNhbiBjaG9vc2UgZGVmYXVsdCBoZXJlKVxuICAgICAgICAgICAgICAvLyBGb3Igc2FmZXR5LCBpZiBubyBleHBsaWNpdCBhY3Rpb24sIHdlJ2xsIGxlYXZlIGdyaWQuc2hvdyB1bmNoYW5nZWQuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIENvbmRpdGlvbihzKSBub3Qgc2F0aXNmaWVkIC0+IHJldmVydCB0aGUgYWN0aW9uJ3MgZWZmZWN0XG4gICAgICAgICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgICAgICAgIGNhc2UgJ1NIT1cnOlxuICAgICAgICAgICAgICAvLyBjb25kaXRpb24gbm8gbG9uZ2VyIHRydWUgPT4gaGlkZSAocmV2ZXJ0KVxuICAgICAgICAgICAgICBtYXRjaGVkQW5zd2VyLnNob3cgPSBmYWxzZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdISURFJzpcbiAgICAgICAgICAgICAgLy8gY29uZGl0aW9uIG5vIGxvbmdlciB0cnVlID0+IHNob3cgKHJldmVydClcbiAgICAgICAgICAgICAgbWF0Y2hlZEFuc3dlci5zaG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdNQVJLX0FTX1JFUVVJUkVEJzpcbiAgICAgICAgICAgICAgbWF0Y2hlZEFuc3dlci5yZXF1aXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ01BUktfQVNfT1BUSU9OQUwnOlxuICAgICAgICAgICAgICBtYXRjaGVkQW5zd2VyLnJlcXVpcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAvLyBub3RoaW5nIHRvIHJldmVydFxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuXG5cblxuICAgICAgLy8gaWYgKG1hdGNoZWRBbnN3ZXIpIHtcbiAgICAgIC8vICAgbWF0Y2hlZEFuc3dlci5zaG93ID0gb3ZlcmFsbFJlc3VsdDtcbiAgICAgIC8vIH1cbiAgICB9XG4gIH1cblxuICByZXNldFNlcnZpY2UoKTogdm9pZCB7XG4gICAgLy8gQ2xlYXIgdHJhY2tlZCBncmlkc1xuICAgIHRoaXMuYWN0aXZlV2hlbkNsYXVzZUdyaWRzID0gW107XG5cbiAgICAvLyBDbGVhciBzdG9yZWQgcXVlc3Rpb24g4oaSIGFuc3dlciBtYXBcbiAgICB0aGlzLnF1ZXN0aW9uQW5zd2VyTWFwID0ge307XG5cbiAgICAvLyBSZXNldCB2aXNpYmlsaXR5IGxvZ2ljIHRvIGluaXRpYWwgc3RhdGVcbiAgfVxuXG4gIGdldEFjdGl2ZVdoZW5DbGF1c2VHcmlkcygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlV2hlbkNsYXVzZUdyaWRzO1xuICB9XG59XG4iXX0=
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import { NgModule } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { RecursiveLogicComponent } from '../question/recursive-logic/recursive-logic.component';
|
|
4
|
-
import { QuestionComponent } from '../question/question/question.component';
|
|
5
|
-
import { SubFormComponent } from '../question/sub-form/sub-form.component';
|
|
6
|
-
import { FormElementsComponent } from '../question/form-elements/form-elements.component';
|
|
7
|
-
import { FormFieldsModule } from '../form-fields/form-fields.module';
|
|
8
|
-
import { MatDialogModule } from '@angular/material/dialog';
|
|
9
|
-
import { MatTableModule } from '@angular/material/table';
|
|
10
|
-
import { MatMenuModule } from '@angular/material/menu';
|
|
11
|
-
import { MatIconModule } from '@angular/material/icon';
|
|
12
|
-
import { MultipleSubformComponent } from '../question/multiple-subform/multiple-subform.component';
|
|
13
|
-
import { SubmissionModalComponent } from '../sub-form/submission-modal/submission-modal.component';
|
|
14
|
-
import { QuestionGroupComponent } from '../question/question-group/question-group.component';
|
|
15
|
-
import { InlineMultipleSubformComponent } from '../question/inline-multiple-subform/inline-multiple-subform.component';
|
|
16
|
-
import { MultifieldsComponent } from '../question/multifields/multifields.component';
|
|
17
|
-
import { CardSubformComponent } from '../question/card-subform/card-subform.component';
|
|
18
|
-
import { QuillModule } from 'ngx-quill';
|
|
19
|
-
import { FormsModule } from '@angular/forms';
|
|
20
|
-
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
|
|
21
|
-
import * as i0 from "@angular/core";
|
|
22
|
-
export class SharedModule {
|
|
23
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SharedModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
24
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: SharedModule, declarations: [RecursiveLogicComponent,
|
|
25
|
-
QuestionComponent,
|
|
26
|
-
SubFormComponent,
|
|
27
|
-
FormElementsComponent,
|
|
28
|
-
MultipleSubformComponent,
|
|
29
|
-
SubmissionModalComponent,
|
|
30
|
-
QuestionGroupComponent,
|
|
31
|
-
InlineMultipleSubformComponent,
|
|
32
|
-
MultifieldsComponent,
|
|
33
|
-
CardSubformComponent], imports: [CommonModule,
|
|
34
|
-
FormFieldsModule,
|
|
35
|
-
MatDialogModule,
|
|
36
|
-
MatTableModule,
|
|
37
|
-
MatMenuModule,
|
|
38
|
-
MatIconModule,
|
|
39
|
-
QuillModule,
|
|
40
|
-
FormsModule,
|
|
41
|
-
NgbModule], exports: [RecursiveLogicComponent,
|
|
42
|
-
QuestionComponent,
|
|
43
|
-
SubFormComponent,
|
|
44
|
-
FormElementsComponent,
|
|
45
|
-
QuestionGroupComponent,
|
|
46
|
-
InlineMultipleSubformComponent,
|
|
47
|
-
MultifieldsComponent,
|
|
48
|
-
CardSubformComponent] }); }
|
|
49
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SharedModule, imports: [CommonModule,
|
|
50
|
-
FormFieldsModule,
|
|
51
|
-
MatDialogModule,
|
|
52
|
-
MatTableModule,
|
|
53
|
-
MatMenuModule,
|
|
54
|
-
MatIconModule,
|
|
55
|
-
QuillModule,
|
|
56
|
-
FormsModule,
|
|
57
|
-
NgbModule] }); }
|
|
58
|
-
}
|
|
59
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SharedModule, decorators: [{
|
|
60
|
-
type: NgModule,
|
|
61
|
-
args: [{
|
|
62
|
-
declarations: [
|
|
63
|
-
RecursiveLogicComponent,
|
|
64
|
-
QuestionComponent,
|
|
65
|
-
SubFormComponent,
|
|
66
|
-
FormElementsComponent,
|
|
67
|
-
MultipleSubformComponent,
|
|
68
|
-
SubmissionModalComponent,
|
|
69
|
-
QuestionGroupComponent,
|
|
70
|
-
InlineMultipleSubformComponent,
|
|
71
|
-
MultifieldsComponent,
|
|
72
|
-
CardSubformComponent
|
|
73
|
-
],
|
|
74
|
-
imports: [
|
|
75
|
-
CommonModule,
|
|
76
|
-
FormFieldsModule,
|
|
77
|
-
MatDialogModule,
|
|
78
|
-
MatTableModule,
|
|
79
|
-
MatMenuModule,
|
|
80
|
-
MatIconModule,
|
|
81
|
-
QuillModule,
|
|
82
|
-
FormsModule,
|
|
83
|
-
NgbModule
|
|
84
|
-
],
|
|
85
|
-
exports: [
|
|
86
|
-
RecursiveLogicComponent,
|
|
87
|
-
QuestionComponent,
|
|
88
|
-
SubFormComponent,
|
|
89
|
-
FormElementsComponent,
|
|
90
|
-
QuestionGroupComponent,
|
|
91
|
-
InlineMultipleSubformComponent,
|
|
92
|
-
MultifieldsComponent,
|
|
93
|
-
CardSubformComponent
|
|
94
|
-
]
|
|
95
|
-
}]
|
|
96
|
-
}] });
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Zvcm0tc3VibWlzc2lvbi9zcmMvc2hhcmVkL3NoYXJlZC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDaEcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFFMUYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQ25HLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQ25HLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHVFQUF1RSxDQUFDO0FBQ3ZILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDeEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFxQ3ZELE1BQU0sT0FBTyxZQUFZOytHQUFaLFlBQVk7Z0hBQVosWUFBWSxpQkFqQ3JCLHVCQUF1QjtZQUN2QixpQkFBaUI7WUFDakIsZ0JBQWdCO1lBQ2hCLHFCQUFxQjtZQUNyQix3QkFBd0I7WUFDeEIsd0JBQXdCO1lBQ3hCLHNCQUFzQjtZQUN0Qiw4QkFBOEI7WUFDOUIsb0JBQW9CO1lBQ3BCLG9CQUFvQixhQUdwQixZQUFZO1lBQ1osZ0JBQWdCO1lBQ2hCLGVBQWU7WUFDZixjQUFjO1lBQ2QsYUFBYTtZQUNiLGFBQWE7WUFDYixXQUFXO1lBQ1gsV0FBVztZQUNYLFNBQVMsYUFHVCx1QkFBdUI7WUFDdkIsaUJBQWlCO1lBQ2pCLGdCQUFnQjtZQUNoQixxQkFBcUI7WUFDckIsc0JBQXNCO1lBQ3RCLDhCQUE4QjtZQUM5QixvQkFBb0I7WUFDcEIsb0JBQW9CO2dIQUdYLFlBQVksWUFyQnJCLFlBQVk7WUFDWixnQkFBZ0I7WUFDaEIsZUFBZTtZQUNmLGNBQWM7WUFDZCxhQUFhO1lBQ2IsYUFBYTtZQUNiLFdBQVc7WUFDWCxXQUFXO1lBQ1gsU0FBUzs7NEZBYUEsWUFBWTtrQkFuQ3hCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFO3dCQUNaLHVCQUF1Qjt3QkFDdkIsaUJBQWlCO3dCQUNqQixnQkFBZ0I7d0JBQ2hCLHFCQUFxQjt3QkFDckIsd0JBQXdCO3dCQUN4Qix3QkFBd0I7d0JBQ3hCLHNCQUFzQjt3QkFDdEIsOEJBQThCO3dCQUM5QixvQkFBb0I7d0JBQ3BCLG9CQUFvQjtxQkFDckI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osZ0JBQWdCO3dCQUNoQixlQUFlO3dCQUNmLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixhQUFhO3dCQUNiLFdBQVc7d0JBQ1gsV0FBVzt3QkFDWCxTQUFTO3FCQUNWO29CQUNELE9BQU8sRUFBRTt3QkFDUCx1QkFBdUI7d0JBQ3ZCLGlCQUFpQjt3QkFDakIsZ0JBQWdCO3dCQUNoQixxQkFBcUI7d0JBQ3JCLHNCQUFzQjt3QkFDdEIsOEJBQThCO3dCQUM5QixvQkFBb0I7d0JBQ3BCLG9CQUFvQjtxQkFDckI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJlY3Vyc2l2ZUxvZ2ljQ29tcG9uZW50IH0gZnJvbSAnLi4vcXVlc3Rpb24vcmVjdXJzaXZlLWxvZ2ljL3JlY3Vyc2l2ZS1sb2dpYy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUXVlc3Rpb25Db21wb25lbnQgfSBmcm9tICcuLi9xdWVzdGlvbi9xdWVzdGlvbi9xdWVzdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3ViRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL3F1ZXN0aW9uL3N1Yi1mb3JtL3N1Yi1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb3JtRWxlbWVudHNDb21wb25lbnQgfSBmcm9tICcuLi9xdWVzdGlvbi9mb3JtLWVsZW1lbnRzL2Zvcm0tZWxlbWVudHMuY29tcG9uZW50JztcblxuaW1wb3J0IHsgRm9ybUZpZWxkc01vZHVsZSB9IGZyb20gJy4uL2Zvcm0tZmllbGRzL2Zvcm0tZmllbGRzLm1vZHVsZSc7XG5pbXBvcnQgeyBNYXREaWFsb2dNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0VGFibGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNdWx0aXBsZVN1YmZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9xdWVzdGlvbi9tdWx0aXBsZS1zdWJmb3JtL211bHRpcGxlLXN1YmZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IFN1Ym1pc3Npb25Nb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL3N1Yi1mb3JtL3N1Ym1pc3Npb24tbW9kYWwvc3VibWlzc2lvbi1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUXVlc3Rpb25Hcm91cENvbXBvbmVudCB9IGZyb20gJy4uL3F1ZXN0aW9uL3F1ZXN0aW9uLWdyb3VwL3F1ZXN0aW9uLWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbmxpbmVNdWx0aXBsZVN1YmZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9xdWVzdGlvbi9pbmxpbmUtbXVsdGlwbGUtc3ViZm9ybS9pbmxpbmUtbXVsdGlwbGUtc3ViZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTXVsdGlmaWVsZHNDb21wb25lbnQgfSBmcm9tICcuLi9xdWVzdGlvbi9tdWx0aWZpZWxkcy9tdWx0aWZpZWxkcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FyZFN1YmZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9xdWVzdGlvbi9jYXJkLXN1YmZvcm0vY2FyZC1zdWJmb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRdWlsbE1vZHVsZSB9IGZyb20gJ25neC1xdWlsbCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE5nYk1vZHVsZSB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgUmVjdXJzaXZlTG9naWNDb21wb25lbnQsXG4gICAgUXVlc3Rpb25Db21wb25lbnQsXG4gICAgU3ViRm9ybUNvbXBvbmVudCxcbiAgICBGb3JtRWxlbWVudHNDb21wb25lbnQsXG4gICAgTXVsdGlwbGVTdWJmb3JtQ29tcG9uZW50LCBcbiAgICBTdWJtaXNzaW9uTW9kYWxDb21wb25lbnQsIFxuICAgIFF1ZXN0aW9uR3JvdXBDb21wb25lbnQsXG4gICAgSW5saW5lTXVsdGlwbGVTdWJmb3JtQ29tcG9uZW50LFxuICAgIE11bHRpZmllbGRzQ29tcG9uZW50LFxuICAgIENhcmRTdWJmb3JtQ29tcG9uZW50XG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybUZpZWxkc01vZHVsZSxcbiAgICBNYXREaWFsb2dNb2R1bGUsXG4gICAgTWF0VGFibGVNb2R1bGUsXG4gICAgTWF0TWVudU1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIFF1aWxsTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE5nYk1vZHVsZVxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgUmVjdXJzaXZlTG9naWNDb21wb25lbnQsXG4gICAgUXVlc3Rpb25Db21wb25lbnQsXG4gICAgU3ViRm9ybUNvbXBvbmVudCxcbiAgICBGb3JtRWxlbWVudHNDb21wb25lbnQsXG4gICAgUXVlc3Rpb25Hcm91cENvbXBvbmVudCxcbiAgICBJbmxpbmVNdWx0aXBsZVN1YmZvcm1Db21wb25lbnQsXG4gICAgTXVsdGlmaWVsZHNDb21wb25lbnQsXG4gICAgQ2FyZFN1YmZvcm1Db21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBTaGFyZWRNb2R1bGUgeyB9XG4iXX0=
|