udp-stencil-component-library 25.18.2-beta.4 → 25.18.2-beta.5
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/cjs/date-time-renderer.file-upload-renderer.form-metadata-display-renderer.list-options-renderer.question-specific-configs-renderer.signature-renderer.text-input-renderer.entry.cjs.js.map +1 -1
- package/dist/cjs/date-time-renderer_7.cjs.entry.js +13 -13
- package/dist/cjs/{enums-DVbZnzL8.js → enums-CgcTuQjC.js} +8 -2
- package/dist/cjs/enums-CgcTuQjC.js.map +1 -0
- package/dist/cjs/form-metadata-display.image-upload.signature-input.stencil-form.tally-display.udp-question.udp-question-comments.udp-save-draft-button.entry.cjs.js.map +1 -1
- package/dist/cjs/form-metadata-display_8.cjs.entry.js +10 -10
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/question-configs-renderer.section-configs-renderer.udp-forms-builder-menu.udp-forms-builder-question-item.entry.cjs.js.map +1 -1
- package/dist/cjs/question-configs-renderer_4.cjs.entry.js +7 -7
- package/dist/cjs/stencil-library.cjs.js +1 -1
- package/dist/cjs/{udp-forms-builder-question-template-CNONS2l5.js → udp-forms-builder-question-template-BMMpObLX.js} +3 -3
- package/dist/cjs/udp-forms-builder-question-template-BMMpObLX.js.map +1 -0
- package/dist/cjs/udp-forms-builder.cjs.entry.js +2 -2
- package/dist/cjs/udp-forms-builder.entry.cjs.js.map +1 -1
- package/dist/cjs/udp-forms-follow-up-list-card.cjs.entry.js +3 -3
- package/dist/cjs/udp-forms-follow-up-list-card.entry.cjs.js.map +1 -1
- package/dist/cjs/udp-forms-list-card.cjs.entry.js +6 -6
- package/dist/cjs/udp-forms-list-card.entry.cjs.js.map +1 -1
- package/dist/cjs/udp-forms-list.cjs.entry.js +2 -2
- package/dist/cjs/udp-forms-list.entry.cjs.js.map +1 -1
- package/dist/cjs/udp-forms-renderer.cjs.entry.js +270 -202
- package/dist/cjs/udp-forms-renderer.entry.cjs.js.map +1 -1
- package/dist/cjs/udp-forms-ui.cjs.entry.js +6 -6
- package/dist/cjs/udp-forms-ui.entry.cjs.js.map +1 -1
- package/dist/cjs/{utils-DZ_OMtAy.js → utils-Bp02BX38.js} +8 -8
- package/dist/cjs/utils-Bp02BX38.js.map +1 -0
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/forms-builder-utils.js +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/forms-builder-utils.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/date-time-renderer/date-time-renderer.js +3 -3
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/date-time-renderer/date-time-renderer.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/file-upload-renderer/file-upload-renderer.js +4 -4
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/file-upload-renderer/file-upload-renderer.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/form-metadata-display-renderer/form-metadata-display-renderer.js +5 -5
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/form-metadata-display-renderer/form-metadata-display-renderer.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/list-option-renderer/list-options-renderer.js +5 -5
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/list-option-renderer/list-options-renderer.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/question-configs-renderer/question-configs-renderer.js +6 -6
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/question-configs-renderer/question-configs-renderer.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/question-specific-configs-renderer/question-specific-configs-renderer.js +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/question-specific-configs-renderer/question-specific-configs-renderer.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/signature-renderer/signature-renderer.js +3 -3
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/signature-renderer/signature-renderer.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/text-input-renderer/text-input-renderer.js +4 -4
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/text-input-renderer/text-input-renderer.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-question-template.js +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-question-template.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder.js +3 -3
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-list/udp-forms-list-card/udp-forms-list-card.js +7 -7
- package/dist/collection/components/forms/udp-forms/udp-forms-list/udp-forms-list-card/udp-forms-list-card.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-list/udp-forms-list.js +2 -2
- package/dist/collection/components/forms/udp-forms/udp-forms-list/udp-forms-list.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-follow-up-list-card/udp-forms-follow-up-list-card.js +3 -3
- package/dist/collection/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-follow-up-list-card/udp-forms-follow-up-list-card.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-ui/udp-forms-ui.js +13 -13
- package/dist/collection/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-ui/udp-forms-ui.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-utils.js +195 -0
- package/dist/collection/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-utils.js.map +1 -0
- package/dist/collection/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer.js +86 -238
- package/dist/collection/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-utils/classes/UdpForm.js.map +1 -0
- package/dist/collection/components/forms/udp-forms/{utils → udp-forms-utils}/classes/UdpFormSubmission.js +4 -12
- package/dist/collection/components/forms/udp-forms/udp-forms-utils/classes/UdpFormSubmission.js.map +1 -0
- package/dist/collection/components/forms/udp-forms/{utils → udp-forms-utils}/enums.js +6 -0
- package/dist/collection/components/forms/udp-forms/udp-forms-utils/enums.js.map +1 -0
- package/dist/collection/components/forms/udp-forms/udp-forms-utils/form-handler/IFormHandler.js.map +1 -0
- package/dist/collection/components/forms/udp-forms/udp-forms-utils/form-handler/UdpFormHandler.js.map +1 -0
- package/dist/collection/components/forms/udp-forms/udp-forms-utils/form-submission-handler/FormSubmissionHandlerFactory.js.map +1 -0
- package/dist/collection/components/forms/udp-forms/udp-forms-utils/form-submission-handler/IFormSubmissionHandler.js.map +1 -0
- package/dist/collection/components/forms/udp-forms/{utils → udp-forms-utils}/form-submission-handler/PrivateFormSubmissionHandler.js +6 -4
- package/dist/collection/components/forms/udp-forms/udp-forms-utils/form-submission-handler/PrivateFormSubmissionHandler.js.map +1 -0
- package/dist/collection/components/forms/udp-forms/udp-forms-utils/form-submission-handler/PublicFormSubmissionHandler.js.map +1 -0
- package/dist/collection/components/forms/udp-forms/udp-forms-utils/form-submission-handler/formUtils.js.map +1 -0
- package/dist/collection/components/forms/udp-forms/udp-forms-utils/types.js.map +1 -0
- package/dist/collection/components/forms/udp-forms/{utils → udp-forms-utils}/utils.js +5 -5
- package/dist/collection/components/forms/udp-forms/udp-forms-utils/utils.js.map +1 -0
- package/dist/collection/components/forms/udp-forms/udp-question/udp-question-comment/udp-question-comments.js +10 -10
- package/dist/collection/components/forms/udp-forms/udp-question/udp-question-comment/udp-question-comments.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-question/udp-question.js +13 -13
- package/dist/collection/components/forms/udp-forms/udp-question/udp-question.js.map +1 -1
- package/dist/collection/components/inputs/form metadata display/form-metadata-display.js +2 -2
- package/dist/collection/components/inputs/form metadata display/form-metadata-display.js.map +1 -1
- package/dist/components/date-time-renderer2.js.map +1 -1
- package/dist/components/enums.js +7 -1
- package/dist/components/enums.js.map +1 -1
- package/dist/components/file-upload-renderer2.js +2 -2
- package/dist/components/file-upload-renderer2.js.map +1 -1
- package/dist/components/form-metadata-display-renderer2.js +3 -3
- package/dist/components/form-metadata-display-renderer2.js.map +1 -1
- package/dist/components/form-metadata-display2.js +1 -1
- package/dist/components/form-metadata-display2.js.map +1 -1
- package/dist/components/forms-builder-utils.js.map +1 -1
- package/dist/components/list-options-renderer2.js +3 -3
- package/dist/components/list-options-renderer2.js.map +1 -1
- package/dist/components/question-configs-renderer2.js +5 -5
- package/dist/components/question-configs-renderer2.js.map +1 -1
- package/dist/components/question-specific-configs-renderer2.js.map +1 -1
- package/dist/components/signature-renderer2.js +1 -1
- package/dist/components/signature-renderer2.js.map +1 -1
- package/dist/components/text-input-renderer2.js +2 -2
- package/dist/components/text-input-renderer2.js.map +1 -1
- package/dist/components/udp-forms-builder.js.map +1 -1
- package/dist/components/udp-forms-follow-up-list-card.js +2 -2
- package/dist/components/udp-forms-follow-up-list-card.js.map +1 -1
- package/dist/components/udp-forms-list-card2.js +4 -4
- package/dist/components/udp-forms-list-card2.js.map +1 -1
- package/dist/components/udp-forms-list.js +1 -1
- package/dist/components/udp-forms-list.js.map +1 -1
- package/dist/components/udp-forms-renderer.js +273 -207
- package/dist/components/udp-forms-renderer.js.map +1 -1
- package/dist/components/udp-forms-ui2.js +6 -6
- package/dist/components/udp-forms-ui2.js.map +1 -1
- package/dist/components/udp-question-comments2.js +5 -5
- package/dist/components/udp-question-comments2.js.map +1 -1
- package/dist/components/udp-question2.js +4 -4
- package/dist/components/udp-question2.js.map +1 -1
- package/dist/components/utils.js +6 -6
- package/dist/components/utils.js.map +1 -1
- package/dist/docs.json +118 -154
- package/dist/esm/date-time-renderer.file-upload-renderer.form-metadata-display-renderer.list-options-renderer.question-specific-configs-renderer.signature-renderer.text-input-renderer.entry.js.map +1 -1
- package/dist/esm/date-time-renderer_7.entry.js +13 -13
- package/dist/esm/{enums-CHxgVY-B.js → enums-DHT5wSnX.js} +9 -3
- package/dist/esm/enums-DHT5wSnX.js.map +1 -0
- package/dist/esm/form-metadata-display.image-upload.signature-input.stencil-form.tally-display.udp-question.udp-question-comments.udp-save-draft-button.entry.js.map +1 -1
- package/dist/esm/form-metadata-display_8.entry.js +10 -10
- package/dist/esm/loader.js +1 -1
- package/dist/esm/question-configs-renderer.section-configs-renderer.udp-forms-builder-menu.udp-forms-builder-question-item.entry.js.map +1 -1
- package/dist/esm/question-configs-renderer_4.entry.js +7 -7
- package/dist/esm/stencil-library.js +1 -1
- package/dist/esm/{udp-forms-builder-question-template-DQJb7f4Y.js → udp-forms-builder-question-template-D6ADNZEG.js} +3 -3
- package/dist/esm/udp-forms-builder-question-template-D6ADNZEG.js.map +1 -0
- package/dist/esm/udp-forms-builder.entry.js +2 -2
- package/dist/esm/udp-forms-builder.entry.js.map +1 -1
- package/dist/esm/udp-forms-follow-up-list-card.entry.js +3 -3
- package/dist/esm/udp-forms-follow-up-list-card.entry.js.map +1 -1
- package/dist/esm/udp-forms-list-card.entry.js +6 -6
- package/dist/esm/udp-forms-list-card.entry.js.map +1 -1
- package/dist/esm/udp-forms-list.entry.js +2 -2
- package/dist/esm/udp-forms-list.entry.js.map +1 -1
- package/dist/esm/udp-forms-renderer.entry.js +270 -202
- package/dist/esm/udp-forms-renderer.entry.js.map +1 -1
- package/dist/esm/udp-forms-ui.entry.js +6 -6
- package/dist/esm/udp-forms-ui.entry.js.map +1 -1
- package/dist/esm/{utils-CiUp9KGZ.js → utils-kwLwITIE.js} +8 -8
- package/dist/esm/utils-kwLwITIE.js.map +1 -0
- package/dist/stencil-library/date-time-renderer.file-upload-renderer.form-metadata-display-renderer.list-options-renderer.question-specific-configs-renderer.signature-renderer.text-input-renderer.entry.esm.js.map +1 -1
- package/dist/stencil-library/date-time-renderer_7.entry.js +1 -1
- package/dist/stencil-library/{enums-CHxgVY-B.js → enums-DHT5wSnX.js} +2 -2
- package/dist/stencil-library/enums-DHT5wSnX.js.map +1 -0
- package/dist/stencil-library/form-metadata-display.image-upload.signature-input.stencil-form.tally-display.udp-question.udp-question-comments.udp-save-draft-button.entry.esm.js.map +1 -1
- package/dist/stencil-library/form-metadata-display_8.entry.js +1 -1
- package/dist/stencil-library/form-metadata-display_8.entry.js.map +1 -1
- package/dist/stencil-library/question-configs-renderer.section-configs-renderer.udp-forms-builder-menu.udp-forms-builder-question-item.entry.esm.js.map +1 -1
- package/dist/stencil-library/question-configs-renderer_4.entry.js +1 -1
- package/dist/stencil-library/stencil-library.esm.js +1 -1
- package/dist/stencil-library/{udp-forms-builder-question-template-DQJb7f4Y.js → udp-forms-builder-question-template-D6ADNZEG.js} +2 -2
- package/dist/stencil-library/udp-forms-builder-question-template-D6ADNZEG.js.map +1 -0
- package/dist/stencil-library/udp-forms-builder.entry.esm.js.map +1 -1
- package/dist/stencil-library/udp-forms-builder.entry.js +1 -1
- package/dist/stencil-library/udp-forms-follow-up-list-card.entry.esm.js.map +1 -1
- package/dist/stencil-library/udp-forms-follow-up-list-card.entry.js +1 -1
- package/dist/stencil-library/udp-forms-list-card.entry.esm.js.map +1 -1
- package/dist/stencil-library/udp-forms-list-card.entry.js +1 -1
- package/dist/stencil-library/udp-forms-list-card.entry.js.map +1 -1
- package/dist/stencil-library/udp-forms-list.entry.esm.js.map +1 -1
- package/dist/stencil-library/udp-forms-list.entry.js +1 -1
- package/dist/stencil-library/udp-forms-renderer.entry.esm.js.map +1 -1
- package/dist/stencil-library/udp-forms-renderer.entry.js +1 -1
- package/dist/stencil-library/udp-forms-renderer.entry.js.map +1 -1
- package/dist/stencil-library/udp-forms-ui.entry.esm.js.map +1 -1
- package/dist/stencil-library/udp-forms-ui.entry.js +1 -1
- package/dist/stencil-library/udp-forms-ui.entry.js.map +1 -1
- package/dist/stencil-library/{utils-CiUp9KGZ.js → utils-kwLwITIE.js} +1 -1
- package/dist/stencil-library/utils-kwLwITIE.js.map +1 -0
- package/dist/types/components/forms/udp-forms/udp-forms-builder/forms-builder-utils.d.ts +2 -2
- package/dist/types/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/date-time-renderer/date-time-renderer.d.ts +1 -1
- package/dist/types/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/file-upload-renderer/file-upload-renderer.d.ts +1 -1
- package/dist/types/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/form-metadata-display-renderer/form-metadata-display-renderer.d.ts +1 -1
- package/dist/types/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/list-option-renderer/list-options-renderer.d.ts +1 -1
- package/dist/types/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/signature-renderer/signature-renderer.d.ts +1 -1
- package/dist/types/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/text-input-renderer/text-input-renderer.d.ts +1 -1
- package/dist/types/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-question-template.d.ts +1 -1
- package/dist/types/components/forms/udp-forms/udp-forms-builder/udp-forms-builder.d.ts +2 -2
- package/dist/types/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-ui/udp-forms-ui.d.ts +4 -4
- package/dist/types/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-utils.d.ts +12 -0
- package/dist/types/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer.d.ts +4 -9
- package/dist/types/components/forms/udp-forms/{utils → udp-forms-utils}/classes/UdpFormSubmission.d.ts +4 -5
- package/dist/types/components/forms/udp-forms/{utils → udp-forms-utils}/enums.d.ts +5 -0
- package/dist/types/components/forms/udp-forms/{utils → udp-forms-utils}/types.d.ts +0 -1
- package/dist/types/components/forms/udp-forms/{utils → udp-forms-utils}/utils.d.ts +1 -1
- package/dist/types/components/forms/udp-forms/udp-question/udp-question-comment/udp-question-comments.d.ts +2 -2
- package/dist/types/components/forms/udp-forms/udp-question/udp-question.d.ts +4 -4
- package/dist/types/components.d.ts +32 -30
- package/package.json +1 -1
- package/dist/cjs/enums-DVbZnzL8.js.map +0 -1
- package/dist/cjs/udp-forms-builder-question-template-CNONS2l5.js.map +0 -1
- package/dist/cjs/utils-DZ_OMtAy.js.map +0 -1
- package/dist/collection/components/forms/udp-forms/utils/classes/UdpForm.js.map +0 -1
- package/dist/collection/components/forms/udp-forms/utils/classes/UdpFormSubmission.js.map +0 -1
- package/dist/collection/components/forms/udp-forms/utils/enums.js.map +0 -1
- package/dist/collection/components/forms/udp-forms/utils/form-handler/IFormHandler.js.map +0 -1
- package/dist/collection/components/forms/udp-forms/utils/form-handler/UdpFormHandler.js.map +0 -1
- package/dist/collection/components/forms/udp-forms/utils/form-submission-handler/FormSubmissionHandlerFactory.js.map +0 -1
- package/dist/collection/components/forms/udp-forms/utils/form-submission-handler/IFormSubmissionHandler.js.map +0 -1
- package/dist/collection/components/forms/udp-forms/utils/form-submission-handler/PrivateFormSubmissionHandler.js.map +0 -1
- package/dist/collection/components/forms/udp-forms/utils/form-submission-handler/PublicFormSubmissionHandler.js.map +0 -1
- package/dist/collection/components/forms/udp-forms/utils/form-submission-handler/formUtils.js.map +0 -1
- package/dist/collection/components/forms/udp-forms/utils/types.js.map +0 -1
- package/dist/collection/components/forms/udp-forms/utils/utils.js.map +0 -1
- package/dist/esm/enums-CHxgVY-B.js.map +0 -1
- package/dist/esm/udp-forms-builder-question-template-DQJb7f4Y.js.map +0 -1
- package/dist/esm/utils-CiUp9KGZ.js.map +0 -1
- package/dist/stencil-library/enums-CHxgVY-B.js.map +0 -1
- package/dist/stencil-library/udp-forms-builder-question-template-DQJb7f4Y.js.map +0 -1
- package/dist/stencil-library/utils-CiUp9KGZ.js.map +0 -1
- /package/dist/collection/components/forms/udp-forms/{utils → udp-forms-utils}/classes/UdpForm.js +0 -0
- /package/dist/collection/components/forms/udp-forms/{utils → udp-forms-utils}/form-handler/IFormHandler.js +0 -0
- /package/dist/collection/components/forms/udp-forms/{utils → udp-forms-utils}/form-handler/UdpFormHandler.js +0 -0
- /package/dist/collection/components/forms/udp-forms/{utils → udp-forms-utils}/form-submission-handler/FormSubmissionHandlerFactory.js +0 -0
- /package/dist/collection/components/forms/udp-forms/{utils → udp-forms-utils}/form-submission-handler/IFormSubmissionHandler.js +0 -0
- /package/dist/collection/components/forms/udp-forms/{utils → udp-forms-utils}/form-submission-handler/PublicFormSubmissionHandler.js +0 -0
- /package/dist/collection/components/forms/udp-forms/{utils → udp-forms-utils}/form-submission-handler/formUtils.js +0 -0
- /package/dist/collection/components/forms/udp-forms/{utils → udp-forms-utils}/types.js +0 -0
- /package/dist/types/components/forms/udp-forms/{utils → udp-forms-utils}/classes/UdpForm.d.ts +0 -0
- /package/dist/types/components/forms/udp-forms/{utils → udp-forms-utils}/form-handler/IFormHandler.d.ts +0 -0
- /package/dist/types/components/forms/udp-forms/{utils → udp-forms-utils}/form-handler/UdpFormHandler.d.ts +0 -0
- /package/dist/types/components/forms/udp-forms/{utils → udp-forms-utils}/form-submission-handler/FormSubmissionHandlerFactory.d.ts +0 -0
- /package/dist/types/components/forms/udp-forms/{utils → udp-forms-utils}/form-submission-handler/IFormSubmissionHandler.d.ts +0 -0
- /package/dist/types/components/forms/udp-forms/{utils → udp-forms-utils}/form-submission-handler/PrivateFormSubmissionHandler.d.ts +0 -0
- /package/dist/types/components/forms/udp-forms/{utils → udp-forms-utils}/form-submission-handler/PublicFormSubmissionHandler.d.ts +0 -0
- /package/dist/types/components/forms/udp-forms/{utils → udp-forms-utils}/form-submission-handler/formUtils.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-metadata-display.image-upload.signature-input.stencil-form.tally-display.udp-question.udp-question-comments.udp-save-draft-button.entry.esm.js","sources":["src/components/inputs/form metadata display/form-metadata-display.css?tag=form-metadata-display&encapsulation=shadow","src/components/inputs/form metadata display/form-metadata-display.tsx","src/components/inputs/image-upload/image-upload.css?tag=image-upload&encapsulation=shadow","src/components/inputs/image-upload/image-upload.tsx","src/components/inputs/signature-input/signature-input.css?tag=signature-input&encapsulation=shadow","src/components/inputs/signature-input/signature-input.tsx","src/components/forms/form/stencil-form.tsx","src/components/inputs/tally/tally.css?tag=tally-display&encapsulation=shadow","src/components/inputs/tally/tally.tsx","src/components/forms/form/useFormApi.ts","src/components/forms/udp-forms/udp-question/udp-question.css?tag=udp-question&encapsulation=shadow","src/components/forms/udp-forms/udp-question/udp-question.tsx","src/components/forms/udp-forms/udp-question/udp-question-comment/udp-question-comments.css?tag=udp-question-comments&encapsulation=shadow","src/components/forms/udp-forms/udp-question/udp-question-comment/udp-question-comments.tsx","src/components/forms/udp-forms/udp-forms-renderer/udp-save-draft-button/udp-save-draft-button.css?tag=udp-save-draft-button&encapsulation=shadow","src/components/forms/udp-forms/udp-forms-renderer/udp-save-draft-button/udp-save-draft-button.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\n.container {\n display: grid;\n gap: 10px;\n padding: 12px 14px;\n background: var(--unity-color-surface, #fff);\n}\n\n.row {\n display: grid;\n grid-template-columns: 130px 1fr;\n align-items: baseline;\n column-gap: 12px;\n}\n\n.label {\n font-size: 12px;\n line-height: 1.2;\n letter-spacing: 0.02em;\n text-transform: uppercase;\n color: var(--unity-color-text-secondary, rgba(0, 0, 0, 0.65));\n}\n\n.value {\n color: var(--unity-color-text, rgba(0, 0, 0, 0.9));\n overflow-wrap: anywhere;\n}\n\n@media (max-width: 420px) {\n .row {\n grid-template-columns: 1fr;\n row-gap: 4px;\n }\n}\n","import { Component, Prop, h } from '@stencil/core';\nimport { dateFormatter } from 'src/components/forms/udp-forms/utils/utils';\n\n/**\n * A small display-only component for showing read-only form metadata.\n *\n * Intended usage:\n * - Rendered near the top or bottom of a form submission view\n * - Pure presentational output based on props (no internal state, no events)\n *\n * Layout:\n * - Uses a simple \"label + value\" row pattern for consistent alignment\n * - Hides rows when the corresponding value is missing or the display flag is false\n *\n * @example\n * ```tsx\n * <form-metadata-display\n * userDisplayName=\"Ada Lovelace\"\n * userEmail=\"ada@example.com\"\n * submittedOn={new Date()}\n * />\n * ```\n */\n@Component({\n tag: 'form-metadata-display',\n styleUrl: 'form-metadata-display.css',\n shadow: true,\n})\nexport class FormMetadataDisplay {\n /**\n * Full name (or display name) of the form owner/submitter.\n * Row is only rendered when `displayOwnerFullName` is true and this value is non-empty.\n */\n @Prop() userDisplayName: string;\n\n /**\n * Email of the form owner/submitter.\n * Row is only rendered when `displayOwnerEmail` is true and this value is non-empty.\n */\n @Prop() userEmail: string;\n\n /**\n * Submission timestamp.\n * Row is only rendered when `displaySubmissionDate` is true and this value is non-null.\n */\n @Prop() submittedOn: string | null;\n\n /**\n * Toggles rendering of the \"Name\" row.\n * Defaults to true.\n */\n @Prop() displayOwnerFullName: boolean = true;\n\n /**\n * Toggles rendering of the \"Email\" row.\n * Defaults to true.\n */\n @Prop() displayOwnerEmail: boolean = true;\n\n /**\n * Toggles rendering of the \"Submitted on\" row.\n * Defaults to true.\n */\n @Prop() displaySubmissionDate: boolean = true;\n\n /**\n * Renders a single metadata row using a standard label/value layout.\n * @internal\n */\n renderRow(label: string, value: string) {\n return (\n <div class=\"row\">\n {/* Label is visually subtle; value uses standard typography for emphasis */}\n <span class=\"label\">{label}</span>\n <unity-typography class=\"value\" variant=\"h4\">{value}</unity-typography>\n </div>\n );\n }\n\n /**\n * Renders the metadata container. Rows are conditionally included based on flags + data presence.\n * @internal\n */\n render() {\n return (\n // role/aria-label provide a lightweight accessible grouping for screen readers\n <div class=\"container\" role=\"group\" aria-label=\"Form metadata\">\n {this.displayOwnerFullName && this.userDisplayName && this.renderRow('Name', this.userDisplayName)}\n {this.displayOwnerEmail && this.userEmail && this.renderRow('Email', this.userEmail)}\n {this.displaySubmissionDate && this.submittedOn && this.renderRow('Submitted on', dateFormatter(this.submittedOn, 'long'))}\n </div>\n );\n }\n}\n",":host {\n display: block;\n}\n","import { Component, h, Host, Prop, Event, EventEmitter } from '@stencil/core';\nimport { UdpDriveFile } from '../../../global/types';\n\n/**\n * A specialized image upload component that wraps the file-upload component\n * with image-specific functionality including image preview, rendering, and validation.\n *\n * This component automatically restricts file types to common image formats\n * and provides image preview functionality.\n *\n * @example\n * ```tsx\n * // Basic image upload\n * <image-upload\n * allowMultiple={true}\n * onChange={(e) => console.log('Images:', e.detail.files)}\n * />\n *\n * // With existing images and preview\n * <image-upload\n * initialValue={existingImages}\n * renderImages={true}\n * onChange={handleImageChange}\n * />\n * ```\n */\n@Component({\n tag: 'image-upload',\n styleUrl: 'image-upload.css',\n shadow: true,\n})\nexport class ImageUpload {\n\n\n /**\n * Array of allowed image MIME types. Defaults to common image formats.\n * Overrides the default image MIME types if specified.\n * Example: ['image/jpeg', 'image/png', 'image/gif']\n */\n @Prop() allowedMimeTypes: Array<string> = ['image/jpeg', 'image/png', 'image/gif', 'image/svg+xml', 'image/webp'];\n\n /**\n * Whether the component should take the full width of its container.\n */\n @Prop() fullWidth: boolean = false;\n\n /**\n * Whether image selection is required.\n */\n @Prop() required: boolean;\n\n /**\n * Error message to display.\n */\n @Prop() error: string;\n\n /**\n * Message for the drag-and-drop area.\n */\n @Prop() dragAndDropMessage: string = 'Drag and drop your image here';\n\n /**\n * Text for the browse files button.\n */\n @Prop() browseFileMessage: string = 'Browse Image';\n\n /**\n * Whether to hide the drag-and-drop area.\n */\n @Prop() hideDragAndDrop: boolean = false;\n\n /**\n * Whether to hide the browse files button.\n */\n @Prop() hideButton: boolean = false;\n\n /**\n * Unique identifier for the component.\n */\n @Prop() id: string;\n\n /**\n * Name attribute for the component.\n */\n @Prop() name: string;\n\n /**\n * Label for the component.\n */\n @Prop() label: string;\n\n /**\n * Whether the component is disabled.\n */\n @Prop() disabled: boolean = false;\n\n /**\n * Whether the component is in a read-only state.\n */\n @Prop() readonly: boolean = false;\n\n /**\n * Initial value for the component (UdpDriveFile, File, or string).\n */\n @Prop() initialValue: UdpDriveFile | UdpDriveFile[] | File | File[] | string;\n\n /**\n * Emitted when the selected images change.\n */\n @Event() change: EventEmitter<{ value: string; files: File[] }>;\n\n private handleFileChange = (event: CustomEvent) => {\n // Prevent the event from bubbling up further, as we are re-emitting it.\n event.stopPropagation();\n this.change.emit(event.detail);\n };\n\n render() {\n return (\n <Host>\n <file-upload\n allowMultiple={false}\n allowedMimeTypes={this.allowedMimeTypes}\n fullWidth={this.fullWidth}\n required={this.required}\n error={this.error}\n dragAndDropMessage={this.dragAndDropMessage}\n browseFileMessage={this.browseFileMessage}\n hideDragAndDrop={this.hideDragAndDrop}\n hideButton={this.hideButton}\n id={this.id}\n name={this.name}\n label={this.label}\n disabled={this.disabled}\n readonly={this.readonly}\n initialValue={this.initialValue}\n renderImage={true}\n onChange={this.handleFileChange}\n ></file-upload>\n </Host>\n );\n }\n}\n","@import '../inputs.css';\n\n/* Size variants for canvas sizing */\n:host(.udp-input--size-small) .signature-canvas {\n height: 150px;\n}\n\n:host(.udp-input--size-normal) .signature-canvas {\n height: 200px;\n}\n\n:host(.udp-input--size-large) .signature-canvas {\n height: 250px;\n}\n\n/* Size variants for clear button */\n:host(.udp-input--size-small) .clear-button {\n padding: var(--spacing-01) var(--spacing-02);\n font-size: var(--caption-font-size, 0.875rem);\n top: var(--spacing-02);\n right: var(--spacing-02);\n}\n\n:host(.udp-input--size-normal) .clear-button {\n padding: var(--spacing-02) var(--spacing-03);\n font-size: var(--body-font-size);\n top: var(--spacing-02);\n right: var(--spacing-02);\n}\n\n:host(.udp-input--size-large) .clear-button {\n padding: var(--spacing-03) var(--spacing-04);\n font-size: var(--body-font-size);\n top: var(--spacing-03);\n right: var(--spacing-03);\n}\n\n.signature-pad-container {\n position: relative;\n border: 1px solid var(--udp-mid-gray-color);\n border-radius: 4px;\n background-color: var(--udp-light-gray-color);\n}\n\n.signature-canvas {\n display: block;\n width: 100%;\n height: 200px; /* Default height, overridden by density variants */\n}\n\n.signature-pad-container.readonly {\n background-color: var(--udp-disabled-gray-color);\n}\n\n.signature-canvas.readonly {\n cursor: not-allowed;\n}\n\n.clear-button {\n position: absolute;\n top: var(--spacing-02); /* Default, overridden by density variants */\n right: var(--spacing-02); /* Default, overridden by density variants */\n background-color: var(--udp-light-gray-color);\n border: 1px solid var(--udp-mid-gray-color);\n color: var(--udp-primary-color);\n cursor: pointer;\n border-radius: 4px;\n padding: var(--spacing-02) var(--spacing-03); /* Default, overridden by density variants */\n}\n\n.clear-button:hover {\n background-color: var(--udp-mid-gray-color);\n}\n\n.clear-button:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n","import { Component, Prop, h, State, Watch, Event, EventEmitter, Element, Host } from '@stencil/core';\nimport type SignaturePad from 'signature_pad';\nimport { UdpDriveFile } from '../../../global/types';\nimport { InputSize, InputMargin } from '../input-types';\nimport {\n isUdpDriveFile,\n isFileReference,\n parseFileReference,\n downloadFileFromUdpDriveFile,\n createFileFromString,\n isFile,\n} from '../file-upload/udp-drive-utils';\n\n\n@Component({\n tag: 'signature-input',\n styleUrl: 'signature-input.css',\n shadow: true,\n})\nexport class SignatureInput {\n @Element() el: HTMLElement;\n\n /**\n * Label for the input field.\n */\n @Prop() label: string;\n\n /**\n * Unique identifier for the input.\n */\n @Prop() id: string;\n\n /**\n * Whether the field is required.\n */\n @Prop() required: boolean;\n\n /**\n * Whether to save location and timestamp data in the submission.\n */\n @Prop() includeLocation: boolean = false;\n\n /**\n * Whether the field is disabled.\n */\n @Prop() disabled: boolean = false;\n\n /**\n * Whether the field is read-only.\n */\n @Prop() readonly: boolean = false;\n\n /**\n * Error message to display.\n */\n @Prop() error: string;\n\n /**\n * Size variant for the signature input.\n * - 'small': Compact signature area\n * - 'normal': Standard signature area (default)\n * - 'large': Generous signature area\n */\n @Prop() size: InputSize = 'normal';\n\n /**\n * Margin variant for the input spacing.\n * - 'none': No margin\n * - 'dense': Minimal margin spacing\n * - 'normal': Standard margin spacing (default)\n */\n @Prop() margin: InputMargin = 'normal';\n\n /**\n * The current value of the signature, can be a File or UdpDriveFile.\n */\n @Prop({ mutable: true }) value: File | UdpDriveFile;\n\n /**\n * The initial value, used if `value` is not provided.\n */\n @Prop() initialValue: File | UdpDriveFile | string;\n\n /**\n * Emitted when the signature changes.\n */\n @Event() change: EventEmitter<File | null>;\n @Event() metadataEmit: EventEmitter<{ key: string; value: any } | null>;\n\n @State() private internalError: string;\n @State() private signaturePad: SignaturePad;\n @State() private cachedLocation: GeolocationPosition | null = null;\n \n private canvasEl: HTMLCanvasElement;\n private SignaturePadLib: typeof SignaturePad;\n \n private lastCanvasRect: DOMRect;\n private resizeTimeout: any;\n private isInternalChange = false;\n\n private async processAndLoadValue(incomingValue: any) {\n if (!incomingValue) {\n if (this.signaturePad) this.signaturePad.clear();\n return;\n }\n\n try {\n const rawValue = Array.isArray(incomingValue) ? incomingValue[0] : incomingValue;\n let loadedFile: File | null = null;\n\n // --- Parsing Logic ---\n if (typeof rawValue === 'string' && isFileReference(rawValue)) {\n const parsedFile = await parseFileReference(rawValue);\n if (parsedFile && (parsedFile as any).driveFileId) {\n loadedFile = await downloadFileFromUdpDriveFile({\n name: parsedFile.name,\n driveFileId: (parsedFile as any).driveFileId,\n extension: parsedFile.name.split('.').pop() || '',\n } as any);\n } else {\n loadedFile = parsedFile as File;\n }\n } \n else if (isUdpDriveFile(rawValue)) {\n loadedFile = await downloadFileFromUdpDriveFile(rawValue);\n } \n else if (typeof rawValue === 'string') {\n loadedFile = await createFileFromString(rawValue, 'signature.png');\n } \n else if (isFile(rawValue)) {\n loadedFile = rawValue;\n }\n\n // --- Application Logic ---\n if (loadedFile) {\n this.value = loadedFile; // Update internal prop\n if (this.signaturePad) {\n await this.loadSignature(loadedFile);\n } else {\n // If pad isn't ready yet, initializeSignaturePad will pick up this.value\n this.initializeSignaturePad();\n }\n }\n } catch (err) {\n console.error('Failed to process signature value:', err);\n }\n}\n\n\n @Watch('error')\n onErrorChange(newValue: string) {\n this.internalError = newValue;\n }\n\n\n @Watch('value')\n async handleValueUpdate(newValue: any) {\n // Guard against loops from our own 'endStroke'\n if (this.isInternalChange) {\n this.isInternalChange = false;\n return;\n }\n\n // If the value changed from outside, we need to re-parse/re-load\n if (this.canvasEl) {\n await this.processAndLoadValue(newValue);\n }\n }\n\n @Watch('initialValue')\n async handleInitialValueUpdate(newValue: any) {\n // Only react to initialValue changes if we have a canvas\n if (this.canvasEl) {\n await this.processAndLoadValue(newValue);\n }\n }\n\n async componentWillLoad() {\n this.internalError = this.error;\n await this.loadSignaturePad();\n\n // Prewarm location if enabled\n if (this.includeLocation) {\n navigator.geolocation.getCurrentPosition(\n (coords) => {\n this.cachedLocation = coords;\n },\n (err) => {\n console.warn(\"Prewarm geolocation error:\", err);\n this.cachedLocation = null;\n },\n { enableHighAccuracy: true, timeout: 30000, maximumAge: 0 }\n );\n }\n }\n\n async componentDidLoad() {\n // 1. Initialize the pad (this sets up the canvas and library)\n this.initializeSignaturePad();\n\n // 2. Load whatever we have (preferring value over initialValue)\n const starterValue = this.value || this.initialValue;\n if (starterValue) {\n await this.processAndLoadValue(starterValue);\n }\n\n this.lastCanvasRect = this.canvasEl.getBoundingClientRect();\n window.addEventListener('resize', this.handleResize);\n }\n\n \n\n disconnectedCallback() {\n window.removeEventListener('resize', this.handleResize);\n if (this.resizeTimeout) clearTimeout(this.resizeTimeout);\n }\n\n private handleResize = () => {\n if (this.resizeTimeout) clearTimeout(this.resizeTimeout);\n this.resizeTimeout = setTimeout(() => {\n const rect = this.canvasEl.getBoundingClientRect();\n if (!this.lastCanvasRect || rect.width !== this.lastCanvasRect.width || rect.height !== this.lastCanvasRect.height) {\n // Save current signature as dataURL\n let dataURL = this.signaturePad && !this.signaturePad.isEmpty() ? this.signaturePad.toDataURL() : null;\n this.resizeCanvasForDPR();\n this.initializeSignaturePad();\n this.lastCanvasRect = rect;\n // Restore signature if it existed\n if (dataURL && this.signaturePad) {\n this.signaturePad.fromDataURL(dataURL);\n }\n }\n }, 200);\n }\n\n private resizeCanvasForDPR() {\n if (!this.canvasEl) return;\n const ratio = window.devicePixelRatio || 1;\n const rect = this.canvasEl.getBoundingClientRect();\n \n // Setting width/height automatically clears the canvas and resets the context\n this.canvasEl.width = rect.width * ratio;\n this.canvasEl.height = rect.height * ratio;\n \n const ctx = this.canvasEl.getContext('2d');\n // Just to be safe, reset transform before scaling\n ctx.setTransform(1, 0, 0, 1, 0, 0); \n ctx.scale(ratio, ratio);\n }\n\n private async loadSignaturePad() {\n if (!this.SignaturePadLib) {\n try {\n const module = await import('signature_pad');\n this.SignaturePadLib = module.default;\n } catch (e) {\n console.error('Failed to load signature_pad library', e);\n }\n }\n }\n\n private initializeSignaturePad() {\n if (this.SignaturePadLib && this.canvasEl) {\n // 1. Reset the canvas dimensions and scale first\n this.resizeCanvasForDPR();\n\n // 2. Destroy old instance if it exists\n if (this.signaturePad) {\n this.signaturePad.off();\n }\n \n // 3. Create new instance\n this.signaturePad = new this.SignaturePadLib(this.canvasEl);\n this.signaturePad.addEventListener(\"endStroke\", this.handleSignatureEnd);\n this.handleStateChange();\n \n // 4. Load value if exists\n if (this.value) {\n this.loadSignature(this.value);\n }\n }\n }\n\n @Watch('disabled')\n @Watch('readonly')\n handleStateChange() {\n if (this.signaturePad) {\n if (this.disabled || this.readonly) {\n this.signaturePad.off();\n } else {\n this.signaturePad.on();\n }\n }\n }\n\n\n private handleSignatureEnd = async () => {\n if (this.signaturePad.isEmpty()) {\n this.isInternalChange = true; \n this.value = null;\n this.change.emit(null);\n this.metadataEmit.emit({ key: 'signature.latitude', value: null });\n this.metadataEmit.emit({ key: 'signature.longitude', value: null });\n this.metadataEmit.emit({ key: 'signature.timestamp', value: null });\n } else {\n const dataURL = this.signaturePad.toDataURL();\n const signatureFile = await this.urlToFile(dataURL, 'signature.png');\n \n this.isInternalChange = true;\n this.value = signatureFile; \n this.change.emit(signatureFile);\n\n // Timestamp always emitted\n this.metadataEmit.emit({\n key: 'signature.timestamp',\n value: new Date().toISOString(),\n });\n\n // Location handling\n if (this.includeLocation) {\n try {\n let coords = this.cachedLocation;\n\n if (!coords) {\n // Fallback if prewarm failed\n coords = await new Promise<GeolocationPosition>((resolve, reject) => {\n navigator.geolocation.getCurrentPosition(resolve, reject, {\n enableHighAccuracy: true,\n timeout: 30000,\n maximumAge: 0,\n });\n });\n }\n\n if (coords) {\n this.metadataEmit.emit({ key: 'signature.latitude', value: coords.coords.latitude });\n this.metadataEmit.emit({ key: 'signature.longitude', value: coords.coords.longitude });\n } else {\n this.metadataEmit.emit({ key: 'signature.latitude', value: null });\n this.metadataEmit.emit({ key: 'signature.longitude', value: null });\n }\n\n } catch (err) {\n console.warn(\"Geolocation error:\", err);\n this.metadataEmit.emit({ key: 'signature.latitude', value: null });\n this.metadataEmit.emit({ key: 'signature.longitude', value: null });\n }\n }\n }\n };\n\n\n private async loadSignature(signatureValue: File | UdpDriveFile | string) {\n let imageUrl: string;\n if (typeof signatureValue === 'string') {\n imageUrl = signatureValue;\n } else if (isUdpDriveFile(signatureValue)) {\n try {\n const file = await downloadFileFromUdpDriveFile(signatureValue as UdpDriveFile);\n imageUrl = URL.createObjectURL(file);\n } catch (error) {\n console.error('Error loading signature image from UdpDriveFile:', error);\n return;\n }\n } else if (signatureValue instanceof File) {\n imageUrl = URL.createObjectURL(signatureValue);\n }\n\n if (imageUrl && this.signaturePad) {\n // 1. Clear the pad first to prevent double signatures\n this.signaturePad.clear(); \n \n // 2. Load the image\n this.signaturePad.fromDataURL(imageUrl, {\n ratio: window.devicePixelRatio || 1 // Explicitly tell it the ratio\n });\n }\n }\n\n private async urlToFile(url: string, filename: string): Promise<File> {\n const res = await fetch(url);\n const blob = await res.blob();\n return new File([blob], filename, { type: blob.type });\n }\n\n private clearSignature = () => {\n if (this.signaturePad) {\n this.signaturePad.clear();\n this.handleSignatureEnd(); // to emit the change\n }\n };\n\n render() {\n const isError = !!this.internalError;\n const containerClasses = {\n 'signature-pad-container': true,\n 'readonly': this.readonly,\n 'disabled': this.disabled,\n };\n\n return (\n <Host\n class={{\n 'udp-input': true,\n 'udp-input--error': isError,\n 'udp-input--disabled': this.disabled,\n 'udp-input--required': this.required,\n 'udp-input--readonly': this.readonly,\n [`udp-input--size-${this.size}`]: true,\n [`udp-input--margin-${this.margin}`]: true,\n }}\n >\n <div class=\"bx--form-item\">\n {this.label && (\n <unity-typography variant=\"caption-text\">\n <label htmlFor={this.id} class=\"bx--label\">\n {this.label}\n {this.required && '*'}\n </label>\n </unity-typography>\n )}\n <div class={containerClasses}>\n <canvas\n ref={el => (this.canvasEl = el as HTMLCanvasElement)}\n class={{ 'signature-canvas': true, 'readonly': this.readonly || this.disabled }}\n id={this.id}\n ></canvas>\n {!this.readonly && !this.disabled && (\n <button\n type=\"button\"\n class=\"clear-button\"\n onClick={this.clearSignature}\n disabled={this.disabled}\n >\n Clear\n </button>\n )}\n </div>\n {isError && (\n <div class=\"error-message\">\n <unity-typography variant=\"caption-text\" color=\"error\">{this.internalError}</unity-typography>\n </div>\n )}\n </div>\n </Host>\n );\n }\n}\n\n","import { Component, h, Prop, Event as StencilEvent, EventEmitter, State, Element, Method } from '@stencil/core';\nimport { createForm, FormApi } from 'final-form';\nimport debounce from 'lodash.debounce';\n\n@Component({\n tag: 'stencil-form',\n shadow: true,\n})\nexport class StencilForm {\n @Element() el: HTMLElement;\n @Prop() handleSubmit: (values: Object) => void;\n @Prop() initialValues: Object;\n @Prop() handleValidate: (values: Object, errors: Object) => Object;\n @Prop() validateOnBlur: boolean = true;\n @Prop() handleChange: (values: Object) => void;\n @StencilEvent() stencilFormInvalidEvent: EventEmitter<Object>;\n @StencilEvent() dirtyChange: EventEmitter<boolean>;\n\n private observer: MutationObserver;\n\n @State() api: FormApi;\n @State() registeredFields: { [key: string]: { required: boolean, ignoreDirty?: boolean } } = {};\n @State() customErrors: { [key: string]: string } = {};\n\n constructor() {\n this.submitWithValidation = this.submitWithValidation.bind(this);\n this.defaultValidation = this.defaultValidation.bind(this);\n this.submit = this.submit.bind(this);\n this.onFormChange = this.onFormChange.bind(this);\n }\n\n private connectField(field: HTMLStencilFieldElement) {\n if ((field as any).__connectedToForm) return;\n\n field.setFormApi({\n api: this.api,\n registeredFields: this.registeredFields,\n customErrors: this.customErrors,\n });\n\n (field as any).__connectedToForm = true;\n }\n\n /**\n * Asynchronously and recursively traverses a node and all of its light DOM\n * and shadow DOM descendants, connecting any stencil-fields it finds.\n */\n private async processNodeRecursively(node: Node) {\n // 1. Skip anything that isn't an element\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return;\n }\n const element = node as Element;\n\n // 2. If the element is a custom component, wait for it to be defined.\n // This ensures its shadowRoot is available if it has one.\n if (element.localName.includes('-')) {\n await customElements.whenDefined(element.localName);\n }\n\n // 3. Process the element itself\n if (element.matches('stencil-field')) {\n this.connectField(element as HTMLStencilFieldElement);\n }\n\n // 4. Connect submit buttons\n this.connectSubmitButtons(element);\n\n // 5. If the element has a shadowRoot, recursively process its children\n if (element.shadowRoot) {\n for (const child of Array.from(element.shadowRoot.childNodes)) {\n await this.processNodeRecursively(child);\n }\n }\n\n // 6. Recursively process all light DOM children\n for (const child of Array.from(element.childNodes)) {\n await this.processNodeRecursively(child);\n }\n }\n\n /**\n * The event handler for slot changes. It kicks off the recursive processing.\n */\n private handleSlotChange = () => {\n const slot = this.el.shadowRoot.querySelector('slot');\n if (!slot) return;\n\n // Process every node assigned to the slot\n slot.assignedNodes().forEach(node => this.processNodeRecursively(node));\n };\n\n /**\n * Connect submit buttons in slotted content to this form\n */\n private connectSubmitButtons(node: Node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return;\n }\n const element = node as Element;\n\n // Check if the element itself is a submit button\n if (element.matches('input[type=\"submit\"], button[type=\"submit\"]')) {\n const htmlElement = element as HTMLElement;\n // Avoid duplicate event listeners\n if (!htmlElement.dataset.stencilFormConnected) {\n htmlElement.dataset.stencilFormConnected = 'true';\n element.addEventListener('click', e => {\n e.preventDefault();\n this.submit(e);\n });\n }\n }\n\n // Find submit buttons in descendants and connect them\n const submitButtons = element.querySelectorAll('input[type=\"submit\"], button[type=\"submit\"]');\n submitButtons.forEach((button: Element) => {\n const htmlButton = button as HTMLElement;\n // Avoid duplicate event listeners\n if (!htmlButton.dataset.stencilFormConnected) {\n htmlButton.dataset.stencilFormConnected = 'true';\n button.addEventListener('click', e => {\n e.preventDefault();\n this.submit(e);\n });\n }\n });\n }\n\n componentWillLoad() {\n this.api = createForm({\n onSubmit: this.submitWithValidation,\n initialValues: this.initialValues,\n validate: this.defaultValidation,\n validateOnBlur: this.validateOnBlur,\n });\n\n if (this.handleChange) {\n this.api.subscribe(this.onFormChange, { values: true });\n }\n\n // Subscription for the dirty state change event, but consider ignoreDirty flags and ignore any fields configured with ignoreDirty=true\n this.api.subscribe(\n formState => {\n const { dirtyFields } = formState;\n const registered = this.registeredFields;\n\n // Determine if any field that is *not ignored* is dirty\n const hasDirtyFields = Object.keys(dirtyFields || {}).some(\n name => dirtyFields[name] && !registered[name]?.ignoreDirty\n );\n\n this.dirtyChange.emit(hasDirtyFields);\n },\n { dirtyFields: true },\n );\n }\n\n componentDidLoad() {\n const slot = this.el.shadowRoot.querySelector('slot');\n\n // Create the observer first\n this.observer = new MutationObserver(mutations => {\n for (const mutation of mutations) {\n mutation.addedNodes.forEach(node => {\n this.processNodeRecursively(node);\n });\n }\n });\n\n // Function to handle slot changes or initial processing\n const observeAssignedNodes = () => {\n const assignedNodes = slot?.assignedNodes({ flatten: true }) || [];\n\n assignedNodes.forEach(node => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n this.observer.observe(node, { childList: true, subtree: true });\n this.processNodeRecursively(node); // Process immediately in case nodes are already present\n }\n });\n };\n\n if (slot) {\n observeAssignedNodes(); // Initial\n slot.addEventListener('slotchange', observeAssignedNodes); // Handle dynamic slot content\n }\n\n // If you're also rendering some fields directly in this.el (not through slot), you can keep this:\n this.observer.observe(this.el, { childList: true, subtree: true });\n\n this.el.dispatchEvent(new CustomEvent('stencilFormReady', { bubbles: true, composed: true }));\n }\n\n disconnectedCallback() {\n this.api = null;\n this.registeredFields = {};\n\n const slot = this.el.shadowRoot?.querySelector('slot');\n if (slot) {\n slot.removeEventListener('slotchange', this.handleSlotChange);\n }\n }\n\n onFormChange(formState: any): void {\n if (this.handleChange && formState.values) {\n this.handleChange(formState.values);\n }\n }\n\n async submitWithValidation(values: { [key: string]: any }): Promise<void> {\n const errors = this.defaultValidation(values);\n if (Object.keys(errors).length === 0) {\n this.handleSubmit(values);\n } else {\n this.stencilFormInvalidEvent.emit(errors);\n }\n }\n\n defaultValidation(values: Object): Object {\n const { registeredFields, customErrors } = this;\n const errors = {};\n\n // Helper to get value from nested path (dot + bracket notation)\n const getByPath = (obj, path) =>\n path\n .replace(/\\[(\\d+)\\]/g, '.$1') // convert [0] to .0\n .split('.')\n .reduce((o, k) => (o != null ? o[k] : undefined), obj);\n\n // Check for required field validation\n Object.keys(registeredFields).forEach(field => {\n const meta = registeredFields[field];\n if (meta?.ignoreDirty) return; // skip ignored fields entirely\n\n const valRef = getByPath(values, field);\n\n // null or undefined, empty string, or false/'false' are considered \"empty\" values\n if (\n meta.required &&\n (valRef == null ||\n (typeof valRef === 'string' && valRef.trim() === '') ||\n valRef === false ||\n valRef === 'false')\n ) {\n errors[field] = 'This field is required';\n }\n });\n\n // Merge in any custom errors from stencil-field components\n if (customErrors) {\n Object.keys(customErrors).forEach(field => {\n if (customErrors[field]) {\n errors[field] = customErrors[field];\n }\n });\n }\n\n // Merge with user-provided custom validation\n if (this?.handleValidate) {\n const customErrorsFromHandler = this.handleValidate(values, errors);\n return { ...errors, ...customErrorsFromHandler };\n }\n\n return errors;\n }\n\n @Method()\n async getApi(): Promise<FormApi> {\n if (!this.api) {\n console.error('❌ Form API not initialized yet.');\n return null;\n }\n return this.api;\n }\n\n submit(e) {\n e?.preventDefault?.();\n const values = this.api.getState().values;\n const errors = this.defaultValidation(values);\n\n const submitFunction = () => {\n if (Object.keys(errors).length) {\n this.stencilFormInvalidEvent.emit(errors);\n return;\n }\n this.api?.submit();\n };\n debounce(submitFunction, 1000, { leading: true, trailing: false })();\n }\n\n render() {\n return (\n <form>\n <slot />\n </form>\n );\n }\n}\n",":host {\n display: block;\n width: 100%;\n}\n\n.tally-container {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-02, 8px);\n}\n\n.tally-label {\n font-weight: 600;\n margin-bottom: var(--spacing-02, 8px);\n}\n\n.tally-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--spacing-04, 16px);\n color: var(--text-secondary, #6b7280);\n}\n\n.tally-content {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-03, 12px);\n}\n\n.tally-stats {\n display: flex;\n gap: var(--spacing-04, 16px);\n flex-wrap: wrap;\n}\n\n.tally-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: var(--spacing-03, 12px) var(--spacing-04, 16px);\n border-radius: var(--border-radius-01, 4px);\n border: 1px solid var(--border-subtle, #e5e7eb);\n background-color: var(--layer-01, #ffffff);\n min-width: 80px;\n flex: 1;\n max-width: 120px;\n}\n\n.tally-item.tally-yes {\n border-color: var(--support-success, #42be65);\n background-color: var(--support-success-hover, #f6f8ff);\n}\n\n.tally-item.tally-no {\n border-color: var(--support-error, #da1e28);\n background-color: var(--support-error-hover, #fff1f1);\n}\n\n.tally-item.tally-unanswered {\n border-color: var(--support-warning, #f1c21b);\n background-color: var(--support-warning-hover, #fcf4d6);\n}\n\n.tally-count {\n font-weight: 700;\n line-height: 1.2;\n margin-bottom: var(--spacing-01, 4px);\n}\n\n.tally-yes .tally-count {\n color: var(--support-success, #42be65);\n}\n\n.tally-no .tally-count {\n color: var(--support-error, #da1e28);\n}\n\n.tally-unanswered .tally-count {\n color: var(--support-warning, #f1c21b);\n}\n\n.tally-item .tally-label {\n margin: 0;\n font-weight: 500;\n text-transform: uppercase;\n font-size: 0.75rem;\n letter-spacing: 0.02em;\n}\n\n.tally-summary {\n padding: var(--spacing-02, 8px) 0;\n border-top: 1px solid var(--border-subtle, #e5e7eb);\n text-align: center;\n}\n\n.error-message {\n margin-top: var(--spacing-02, 8px);\n padding: var(--spacing-02, 8px);\n border-radius: var(--border-radius-01, 4px);\n background-color: var(--support-error-hover, #fff1f1);\n border: 1px solid var(--support-error, #da1e28);\n}\n\n/* Size variants */\n:host(.udp-input--size-small) .tally-item {\n padding: var(--spacing-02, 8px) var(--spacing-03, 12px);\n min-width: 60px;\n max-width: 90px;\n}\n\n:host(.udp-input--size-small) .tally-count {\n font-size: 1.25rem;\n}\n\n:host(.udp-input--size-large) .tally-item {\n padding: var(--spacing-04, 16px) var(--spacing-05, 20px);\n min-width: 100px;\n max-width: 150px;\n}\n\n:host(.udp-input--size-large) .tally-count {\n font-size: 2rem;\n}\n\n/* Margin variants */\n:host(.udp-input--margin-none) .tally-container {\n gap: 0;\n}\n\n:host(.udp-input--margin-dense) .tally-container {\n gap: var(--spacing-01, 4px);\n}\n\n:host(.udp-input--margin-comfortable) .tally-container {\n gap: var(--spacing-04, 16px);\n}\n\n/* Disabled state */\n:host(.udp-input--disabled) .tally-item {\n opacity: 0.5;\n pointer-events: none;\n}\n\n/* Read-only state */\n:host(.udp-input--readonly) .tally-item {\n background-color: var(--field-01, #f4f4f4);\n}\n\n/* Responsive design */\n@media (max-width: 480px) {\n .tally-stats {\n flex-direction: column;\n }\n \n .tally-item {\n max-width: none;\n flex: none;\n }\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\nimport { InputSize, InputMargin } from '../input-types';\n\n/**\n * A tally component that displays counts of Yes/No responses.\n * This is a pure display component that receives tally data as props.\n */\n@Component({\n tag: 'tally-display',\n styleUrl: 'tally.css',\n shadow: true,\n})\nexport class TallyDisplay {\n\n /**\n * Label for the tally display.\n */\n @Prop() label: string = 'Response Tally';\n\n /**\n * Unique identifier for the tally.\n */\n @Prop() id: string;\n\n /**\n * Number of Yes responses.\n */\n @Prop() yesCount: number = 0;\n\n /**\n * Number of No responses.\n */\n @Prop() noCount: number = 0;\n\n /**\n * Number of Not Applicable responses.\n */\n @Prop() naCount: number = 0;\n\n /**\n * Total number of fields being tallied.\n */\n @Prop() totalFields: number = 0;\n\n /**\n * Whether the component is disabled.\n */\n @Prop() disabled: boolean = false;\n\n /**\n * Whether the component is read-only.\n */\n @Prop() readonly: boolean = false;\n\n /**\n * Error message to display.\n */\n @Prop() error: string;\n\n /**\n * Size variant for the tally display.\n */\n @Prop() size: InputSize = 'normal';\n\n /**\n * Margin variant for the component spacing.\n */\n @Prop() margin: InputMargin = 'normal';\n\n render() {\n const isError = !!this.error;\n const answeredCount = this.yesCount + this.noCount + this.naCount;\n const unansweredCount = this.totalFields - answeredCount;\n \n return (\n <Host\n class={{\n 'udp-input': true,\n 'udp-input--error': isError,\n 'udp-input--disabled': this.disabled,\n 'udp-input--readonly': this.readonly,\n [`udp-input--size-${this.size}`]: true,\n [`udp-input--margin-${this.margin}`]: true,\n }}\n >\n <div class=\"tally-container\">\n {this.label && (\n <unity-typography variant=\"caption-text\">\n <label htmlFor={this.id} class=\"tally-label\">\n {this.label}\n </label>\n </unity-typography>\n )}\n <div class=\"tally-content\" id={this.id}>\n <div class=\"tally-stats\">\n <div class=\"tally-item tally-yes\">\n <unity-typography variant=\"h4\" class=\"tally-count\">\n {this.yesCount}\n </unity-typography>\n <unity-typography variant=\"caption-text\" class=\"tally-label\">\n Yes\n </unity-typography>\n </div>\n <div class=\"tally-item tally-no\">\n <unity-typography variant=\"h4\" class=\"tally-count\">\n {this.noCount}\n </unity-typography>\n <unity-typography variant=\"caption-text\" class=\"tally-label\">\n No\n </unity-typography>\n </div>\n <div class=\"tally-item tally-na\">\n <unity-typography variant=\"h4\" class=\"tally-count\">\n {this.naCount}\n </unity-typography>\n <unity-typography variant=\"caption-text\" class=\"tally-label\">\n Not Applicable\n </unity-typography>\n </div>\n {unansweredCount > 0 && (\n <div class=\"tally-item tally-unanswered\">\n <unity-typography variant=\"h4\" class=\"tally-count\">\n {unansweredCount}\n </unity-typography>\n <unity-typography variant=\"caption-text\" class=\"tally-label\">\n Unanswered\n </unity-typography>\n </div>\n )}\n </div>\n <div class=\"tally-summary\">\n <unity-typography variant=\"caption-text\">\n Total Questions: {this.totalFields}\n </unity-typography>\n </div>\n </div>\n {isError && (\n <div class=\"error-message\">\n <unity-typography variant=\"caption-text\" color=\"error\">\n {this.error}\n </unity-typography>\n </div>\n )}\n </div>\n </Host>\n );\n }\n}\n","/**\n * Finds the parent stencil-form and returns its Final Form API.\n * This function correctly traverses up through nested Shadow DOM boundaries.\n *\n * @param element The host element of the component calling this function.\n * @returns A promise that resolves with the FormApi instance, or null if not found.\n */\nexport async function useFormApi(element: HTMLElement): Promise<any | null> {\n let current: HTMLElement | null = element;\n let form: Element | null = null;\n\n // Walk up the DOM tree, escaping shadow roots as we go.\n while (current) {\n // Look for the form in the current scope\n const foundForm = current.closest('stencil-form');\n if (foundForm) {\n form = foundForm;\n break; // Found it!\n }\n\n // If not found, we might be in a shadow root.\n // Let's try to escape it.\n const root = current.getRootNode();\n if (root instanceof ShadowRoot) {\n current = root.host as HTMLElement;\n } else {\n // We're in the main document and didn't find it.\n break;\n }\n }\n\n if (!form) {\n return null;\n }\n\n // Check if getApi method exists\n if (typeof (form as any).getApi !== 'function') {\n return null;\n }\n\n const formApi = await (form as any).getApi();\n \n if (!formApi) {\n return null;\n }\n \n return formApi;\n}\n","\n.hidden {\n display: none;\n}\n\n.question-container {\n border-top: 1px solid rgba(0, 0, 0, 0.08); \n padding-top: 1rem; \n}\n\n.question-title-and-helper-container {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-03)\n}\n\n.question-title-and-followup-container {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n","import { Component, ComponentInterface, Element, h, Prop, State, Watch, Event, EventEmitter } from '@stencil/core';\nimport { UdpFormQuestion } from '../utils/types';\nimport { UdpFormsFieldTypeEnum } from '../utils/enums';\nimport { FontOverrides } from '../utils/types';\nimport { fontOverrideMapping, overrideFont } from '../utils/utils';\nimport { useFormApi } from '../../form/useFormApi';\nimport { getIconFromName } from '../../../data-display/icons/iconUtils';\nimport { UdpFormsPageIdEnum } from '../utils/enums';\nimport { UdpFormSubmission } from '../utils/classes/UdpFormSubmission';\n\n@Component({\n tag: 'udp-question',\n styleUrl: 'udp-question.css',\n shadow: true,\n})\nexport class UdpQuestion {\n @Prop() question: UdpFormQuestion;\n @Prop() questionNumber: number;\n @Prop({ mutable: true }) value: string; // only used for Paragraph type (UdpFormsFieldTypeEnum.Paragraph)\n @Prop() disabled: boolean = false;\n @Prop() readonly: boolean = false;\n @Prop() styleOverrides: {\n helperText: FontOverrides;\n questionText: FontOverrides;\n paragraphText: FontOverrides;\n };\n @Prop() initialValues: { [name: string]: any } = {};\n @Prop() clientUserInfo: { id: string | null; displayName: string | null; email: string | null } = {\n id: null,\n displayName: null,\n email: null,\n }\n @Prop() udpFormSubmission: UdpFormSubmission = null;\n\n @Event() launchFollowUpFormSideSheet: EventEmitter<any>;\n\n @State() private _fieldComponent: ComponentInterface;\n @State() private tallyData: {\n yesCount: number;\n noCount: number;\n naCount: number;\n totalFields: number;\n } = { yesCount: 0, noCount: 0, naCount: 0, totalFields: 0 };\n @State() private formApi: any = null;\n\n @Element() el: HTMLElement;\n\n @Watch('question')\n @Watch('questionNumber')\n @Watch('value')\n @Watch('disabled')\n @Watch('readonly')\n @Watch('styleOverrides')\n protected propChanged() {\n this.updateFieldComponent();\n }\n\n async componentWillLoad() {\n this.updateFieldComponent();\n if (this.question.fieldTypeId === UdpFormsFieldTypeEnum.Tally) {\n await this.initializeFormApiForTally();\n }\n }\n\n private async initializeFormApiForTally() {\n try {\n this.formApi = await useFormApi(this.el);\n\n if (this.formApi) {\n // Subscribe to form changes to update tally in real-time\n const unsubscribe = this.formApi.subscribe(\n () => {\n this.calculateTally();\n },\n { active: true, dirty: true, values: true },\n );\n\n // Store unsubscribe function for cleanup if needed\n (this as any).unsubscribeFormApi = unsubscribe;\n\n // Initial calculation\n this.calculateTally();\n }\n } catch (error) {\n console.error('Failed to initialize form API for tally:', error);\n }\n }\n\n private calculateTally() {\n if (!this.formApi || this.question.fieldTypeId !== UdpFormsFieldTypeEnum.Tally) {\n return;\n }\n\n try {\n const formValues = this.formApi.getState().values;\n\n const formElement = this.el.closest('stencil-form');\n if (!formElement) {\n return;\n }\n\n // Get all udp-question elements in the form\n const questionElements = formElement.querySelectorAll('udp-question');\n const yesNoFields: string[] = [];\n\n // Identify YesNo field types\n questionElements.forEach((questionEl: any) => {\n if (questionEl.question && questionEl.question.fieldTypeId === UdpFormsFieldTypeEnum.YesNo) {\n const fieldName = `${questionEl.question.questionIdentifierKey}.value`;\n if (fieldName) {\n const shouldInclude = this.shouldIncludeFieldInTally(fieldName);\n if (shouldInclude) {\n yesNoFields.push(fieldName);\n }\n }\n }\n });\n\n // Count Yes/No/NA responses\n let yesCount = 0;\n let noCount = 0;\n let naCount = 0;\n\n yesNoFields.forEach(fieldName => {\n const [sectionKey, questionKey] = fieldName.split(\".\");\n const value = formValues[sectionKey][questionKey].value;\n\n if (value === 'true' || value === true) {\n yesCount++;\n } else if (value === 'false' || value === false) {\n noCount++;\n } else if (value === 'na') {\n naCount++;\n }\n });\n\n this.tallyData = {\n yesCount,\n noCount,\n naCount,\n totalFields: yesNoFields.length,\n };\n\n // Force a re-render to update the component\n this.updateFieldComponent();\n } catch (error) {\n console.error('Error calculating tally:', error);\n }\n }\n\n private shouldIncludeFieldInTally(fieldName: string): boolean {\n const fieldProps = this.question.fieldProperties;\n\n // If includeFields is specified, only include those fields\n if (fieldProps?.includeFields && fieldProps.includeFields.length > 0) {\n return fieldProps.includeFields.includes(fieldName);\n }\n\n // If excludeFields is specified, exclude those fields\n if (fieldProps?.excludeFields && fieldProps.excludeFields.length > 0) {\n return !fieldProps.excludeFields.includes(fieldName);\n }\n\n // Include all fields by default\n return true;\n }\n\n private updateFieldComponent() {\n this._fieldComponent = this.getFieldComponent();\n }\n\n private getFieldComponent(): ComponentInterface {\n const props = {\n name: `${this.question.questionIdentifierKey}.value`,\n required: this.question.required,\n };\n\n const fieldProps = { ...this.question.fieldProperties, id: this.questionNumber, disabled: this.disabled, readonly: this.readonly };\n switch (this.question.fieldTypeId) {\n case UdpFormsFieldTypeEnum.SingleLineText:\n return (\n <stencil-field {...props}>\n <text-field {...fieldProps} />\n </stencil-field>\n );\n case UdpFormsFieldTypeEnum.MultiLineText:\n return (\n <stencil-field {...props}>\n <text-area fullWidth={true} {...fieldProps} />\n </stencil-field>\n );\n case UdpFormsFieldTypeEnum.Checkbox:\n return (\n <stencil-field {...props}>\n <selectable-list valueKey=\"value\" displayKey=\"display\" multiSelect={true} useCheckbox={true} {...fieldProps} />\n </stencil-field>\n );\n case UdpFormsFieldTypeEnum.RadioButton:\n return (\n <stencil-field {...props}>\n <selectable-list valueKey=\"value\" displayKey=\"display\" useCheckbox={true} {...fieldProps} />\n </stencil-field>\n );\n case UdpFormsFieldTypeEnum.DropdownSingleSelect:\n case UdpFormsFieldTypeEnum.DropdownMultipleSelect:\n let options: { label: string; value: string } = fieldProps?.items?.map?.(items => ({ label: items.display, value: items.value, ...fieldProps }));\n return (\n <stencil-field {...props}>\n <udp-selector options={options ?? []} multiSelect={this.question.fieldTypeId === UdpFormsFieldTypeEnum.DropdownMultipleSelect} {...fieldProps} />\n </stencil-field>\n );\n case UdpFormsFieldTypeEnum.YesNo:\n return (\n <stencil-field {...props}>\n <selectable-list\n valueKey=\"value\"\n displayKey=\"display\"\n useCheckbox={true} // Use radio buttons\n multiSelect={false}\n items={[\n { value: 'true', display: 'Yes' },\n { value: 'false', display: 'No' },\n { value: 'na', display: 'Not Applicable' },\n ]}\n {...fieldProps}\n />\n </stencil-field>\n );\n case UdpFormsFieldTypeEnum.ListMultiSelect:\n return (\n <stencil-field {...props}>\n <selectable-list valueKey=\"value\" displayKey=\"display\" multiSelect={true} {...fieldProps} />\n </stencil-field>\n );\n case UdpFormsFieldTypeEnum.DateSelector:\n return (\n <stencil-field {...props}>\n <udp-date-selector min={fieldProps?.minDate} max={fieldProps?.maxDate} {...fieldProps} />\n </stencil-field>\n );\n case UdpFormsFieldTypeEnum.TimeSelector:\n return (\n <stencil-field {...props}>\n <udp-time-selector min={fieldProps?.minTime} max={fieldProps?.maxTime} {...fieldProps} />\n </stencil-field>\n );\n case UdpFormsFieldTypeEnum.DateTimeSelector:\n return (\n <stencil-field {...props}>\n <udp-datetime-selector max={fieldProps?.maxDateTime} min={fieldProps?.minDateTime} {...fieldProps} />\n </stencil-field>\n );\n case UdpFormsFieldTypeEnum.FileUpload:\n return (\n <stencil-field {...props}>\n <file-upload fullWidth={true} allowMultiple={false} {...fieldProps} />\n </stencil-field>\n );\n case UdpFormsFieldTypeEnum.ImageUpload:\n return (\n <stencil-field {...props}>\n <image-upload fullWidth={true} {...fieldProps} />\n </stencil-field>\n );\n case UdpFormsFieldTypeEnum.Signature:\n return (\n <div>\n <stencil-field {...props} fieldIdentifierKey={`${this.question.questionIdentifierKey}`} registerMetadata={true} metadataFieldNames={['signature.latitude', 'signature.longitude', 'signature.timestamp']}>\n <signature-input {...fieldProps} value={this.value} />\n </stencil-field>\n <stencil-field required={this.question.required} name={ `${this.question.questionIdentifierKey}.metadata.signature.fullName`}>\n <text-field {...fieldProps} label={'Full Name'}/>\n </stencil-field>\n </div>\n );\n case UdpFormsFieldTypeEnum.Paragraph:\n // Wrap in stencil-field and include a hidden input so the value is part of the form submission\n return (\n <stencil-field name={this.question.name} required={false}>\n <input type=\"hidden\" name={this.question.name} value={this.value || ''} />\n {this.value ? (\n <unity-typography id={`paragraphText${this.question.name}`} variant={this.styleOverrides?.paragraphText?.variant || 'body'}>\n {this.value}\n </unity-typography>\n ) : (\n <div />\n )}\n </stencil-field>\n );\n case UdpFormsFieldTypeEnum.Number:\n return (\n <stencil-field {...props}>\n <numeric-field {...fieldProps} />\n </stencil-field>\n );\n\n case UdpFormsFieldTypeEnum.Tally:\n return (\n <tally-display\n id={this.questionNumber}\n label={this.question.questionText || 'Response Tally'}\n yesCount={this.tallyData.yesCount}\n noCount={this.tallyData.noCount}\n naCount={this.tallyData.naCount}\n totalFields={this.tallyData.totalFields}\n {...fieldProps}\n required={false}\n />\n );\n case UdpFormsFieldTypeEnum.FormMetadataDisplay: {\n const isPersistedSubmission = !!this.udpFormSubmission?.id;\n\n // If persisted, do NOT fall back to client user (avoids showing Person A while viewing Person B's submission)\n const userDisplayName = isPersistedSubmission\n ? (this.udpFormSubmission?.userDisplayName ?? null)\n : (this.clientUserInfo?.displayName ?? null);\n\n const userEmail = isPersistedSubmission\n ? (this.udpFormSubmission?.userEmail ?? null)\n : (this.clientUserInfo?.email ?? null);\n\n const submittedOn = this.udpFormSubmission?.submittedOn ?? null;\n\n return (\n <form-metadata-display\n userDisplayName={userDisplayName}\n userEmail={userEmail}\n submittedOn={submittedOn}\n {...fieldProps}\n />\n );\n };\n case UdpFormsFieldTypeEnum.Hidden:\n default:\n return <div />;\n }\n }\n async componentDidLoad() {\n // If form API wasn't available during componentWillLoad, try again\n if (this.question.fieldTypeId === UdpFormsFieldTypeEnum.Tally && !this.formApi) {\n await this.initializeFormApiForTally();\n }\n\n // override the fonts based on style overrides\n const variantsAndOverrides = [];\n for (const override in this.styleOverrides) {\n variantsAndOverrides.push({\n id: override + this.question.name,\n fontOverride: this.styleOverrides?.[override]?.fontFamily,\n variant: this.styleOverrides?.[override]?.variant,\n });\n }\n variantsAndOverrides.forEach(override => {\n if (!fontOverrideMapping[override?.fontOverride] || !this.el || !this.el.shadowRoot) return;\n overrideFont(this.el?.shadowRoot?.getElementById?.(override.id), fontOverrideMapping[override?.fontOverride]);\n });\n }\n render() {\n const component = this._fieldComponent;\n const titleText = `${this.question.fieldTypeId === UdpFormsFieldTypeEnum.Paragraph ? '' : `${this.questionNumber}.`} ${this.question.questionText} ${\n this.question.required && this.question.fieldTypeId !== UdpFormsFieldTypeEnum.Paragraph ? '*' : ''\n }`;\n // const commentFieldProps = { disabled: this.disabled, readonly: this.readonly };\n const fieldName = `${this.question.questionIdentifierKey}.value`;\n const [sectionKey, questionKey] = fieldName.split(\".\");\n\n if (!component) return null;\n return (\n <div\n class={{\n 'hidden': this.question.fieldTypeId === UdpFormsFieldTypeEnum.Hidden,\n 'question-container': true,\n }}\n >\n <div class=\"question-title-and-helper-container\">\n <div class=\"question-title-and-followup-container\">\n {this.question.questionText && (\n <unity-typography\n id={`questionText${this.question.name}`}\n variant={this.styleOverrides?.questionText?.variant || 'h3'}\n >\n {titleText}\n </unity-typography>\n )}\n <div>\n {this.question.fieldProperties.allowFollowUpForms && (\n (() => {\n const metadata = this.initialValues[sectionKey][questionKey]?.metadata;\n const followUpId = metadata?.followUpFormSubmissionId;\n if (followUpId) {\n // Valid GUID → show arrow icon to open follow-up form\n const url = `/page/${UdpFormsPageIdEnum.FormRendererPageId}?udpf_submissionId=${followUpId}`;\n return (\n <stencil-icon-button\n icon={getIconFromName('link')}\n tooltip=\"Open Follow-Up Form\"\n onClick={() => window.open(url, '_blank')}\n />\n );\n }\n\n if (!this.readonly) {\n // No valid follow-up yet → show link icon to create one\n return (\n <stencil-icon-button\n icon={getIconFromName('document')}\n tooltip=\"Create Follow-Up Form\"\n onClick={() => {\n console.log('clicked create follow up form')\n this.launchFollowUpFormSideSheet.emit({ sectionKey, questionKey });\n }}\n />\n );\n }\n \n })()\n )}\n </div>\n </div>\n {this.question.helperText && (\n <unity-typography\n id={`helperText${this.question.name}`}\n variant={this.styleOverrides?.helperText?.variant || 'caption-text'}\n >\n {this.question.helperText}\n </unity-typography>\n )}\n </div>\n\n {component}\n\n {this.question.fieldProperties.allowFollowUpForms && (\n <div>\n <stencil-field hidden={true} name={`${this.question.questionIdentifierKey}.metadata.followUpParentFormId`}>\n <text-field />\n </stencil-field>\n <stencil-field hidden={true} name={`${this.question.questionIdentifierKey}.metadata.followUpParentFormVersion`}>\n <text-field />\n </stencil-field>\n <stencil-field hidden={true} name={`${this.question.questionIdentifierKey}.metadata.followUpParentFormSubmissionId`}>\n <text-field />\n </stencil-field>\n </div>\n )}\n {this.question.fieldProperties.allowComments && (\n <udp-question-comments\n question={this.question}\n initialValues={this.initialValues}\n userId={this.clientUserInfo.id}\n />\n )}\n </div>\n );\n }\n}\n",".question-comment-display {\n position: relative;\n display: flex;\n flex-direction: column;\n gap: var(--spacing-03);\n margin: var(--spacing-05) 0;\n border: 1px solid var(--border-color, #ccc);\n border-radius: 6px;\n padding: var(--spacing-05) var(--spacing-04);\n /* Force long words to wrap to prevent box overflow */\n overflow-wrap: break-word; \n word-wrap: break-word;\n}\n\n/* Target the typography component that holds the comment body */\n.question-comment-display unity-typography:not(.question-comment-header) {\n display: block; /* Allows the element to respect width/wrapping */\n white-space: pre-wrap; /* Respects newlines (\\n) and auto-wraps text */\n word-break: break-word; /* Safety for very long strings of characters */\n}\n\n.question-comment-display > .question-comment-header {\n position: absolute;\n bottom: -0.6em; \n right: 1em;\n background: white; \n padding: 0 0.4em;\n font-size: 0.85em;\n white-space: nowrap; /* Keeps the \"Name on Date\" on one line */\n}\n\n.question-comment-add-comment-button {\n display: flex;\n justify-content: center;\n margin: var(--spacing-03) 0;\n}\n\n.question-comment-action-container {\n display: flex;\n justify-content: end;\n}","import { Component, h, Prop, Event, EventEmitter } from '@stencil/core';\nimport { UdpFormQuestion, Guid } from '../../utils/types';\nimport { dateFormatter } from '../../utils/utils';\n\n@Component({\n tag: 'udp-question-comments',\n styleUrl: 'udp-question-comments.css',\n shadow: true,\n})\nexport class UdpQuestionComments {\n @Prop() question: UdpFormQuestion;\n @Prop() commentFieldProps: object = {};\n @Prop() initialValues: { [name: string]: any } = {};\n @Prop() userId: Guid | null = null;\n\n @Event({ bubbles: true, composed: true }) questionCommentAction: EventEmitter<{\n type: 'add' | 'save' | 'edit' | 'delete' | 'editClose';\n questionIdentifierKey: string;\n commentId: string;\n }>;\n\n private emitQuestionCommentAction(type: 'add' | 'save' | 'edit' | 'delete' | 'editClose', commentId) {\n this.questionCommentAction.emit({\n type,\n questionIdentifierKey: this.question.questionIdentifierKey,\n commentId,\n });\n }\n\n private handleCommentAdd() {\n this.emitQuestionCommentAction('add', null);\n }\n private handleCommentSave(commentId) {\n this.emitQuestionCommentAction('save', commentId);\n }\n private handleCommentEdit(commentId) {\n this.emitQuestionCommentAction('edit', commentId);\n }\n private handleCommentDelete(commentId) {\n this.emitQuestionCommentAction('delete', commentId);\n }\n private handleCommentEditClose(commentId) {\n this.emitQuestionCommentAction('editClose', commentId);\n }\n\n render() {\n const [sectionName, questionName] = this.question.questionIdentifierKey.split('.');\n const questionData = this.initialValues?.[sectionName]?.[questionName] || {\n comments: [],\n draftComments: [],\n };\n\n // normalize incoming shape (back-compat)\n const savedComments = Array.isArray(questionData.comments)\n ? questionData.comments\n : questionData.comments\n ? [questionData.comments]\n : [];\n const draftComments = Array.isArray(questionData.draftComments)\n ? questionData.draftComments\n : questionData.draftComments\n ? [questionData.draftComments]\n : [];\n\n // enforce single active action UX:\n // - Only one draft is shown/active at a time (pick first draft if present)\n\n // detect any draft anywhere in the form's initialValues\n const activeDraft = draftComments.length > 0 ? draftComments[0] : null;\n const isAnyQuestionContainsActiveDraft = Object.values(this.initialValues || {}).some((section: any) =>\n Object.values(section || {}).some((q: any) => {\n if (!q) return false;\n const drafts = q.draftComments;\n if (!drafts) return false;\n if ( Array.isArray(drafts) && drafts.length < 1) return false\n\n return true\n }),\n );\n\n return (\n <div>\n {/* Render saved comments — disable actions if a draft is active */}\n {savedComments.map((commentObj, idx) => {\n const commentsIdentifierValueKey = `${this.question.questionIdentifierKey}.comments[${idx}].value`;\n const isOwner = commentObj?.userId === this.userId;\n const showActions = !activeDraft && isOwner; // only show edit/delete when no active draft and owner\n \n\n // return the comment edit component if it's the active draft\n if (activeDraft && commentObj.commentId == activeDraft.commentId) {\n return (\n <div class=\"question-comment-draft-container\" key={activeDraft.commentId || `draft-0`}>\n <stencil-field\n name={`${this.question.questionIdentifierKey}.draftComments[0].value`}\n required={true}\n ignoreDirty={true}\n >\n <text-area {...this.commentFieldProps} label=\"Comment:\" placeholder=\"Add a comment\" />\n </stencil-field>\n\n <div class=\"question-comment-action-container\">\n <udp-button\n variant=\"text\"\n onClick={() => this.handleCommentSave(activeDraft.commentId)}\n startIcon={<udp-icon iconName=\"save\" color=\"inherit\" />}\n >\n Save\n </udp-button>\n <udp-button\n variant=\"text\"\n onClick={() => this.handleCommentDelete(activeDraft.commentId)}\n startIcon={<udp-icon iconName=\"trashCan\" color=\"inherit\" />}\n >\n Delete\n </udp-button>\n <udp-button\n variant=\"text\"\n onClick={() => this.handleCommentEditClose(activeDraft.commentId)}\n startIcon={<udp-icon iconName=\"close16\" color=\"inherit\" />}\n >\n Cancel\n </udp-button>\n </div>\n </div>\n )\n }\n\n // return the comment display component \n return !commentObj?.isDeleted ? (\n <div class=\"question-comment-input-container\" key={commentObj.commentId || idx}>\n <stencil-field name={commentsIdentifierValueKey} style={{ display: 'none' }}>\n <text-area disabled={true} />\n </stencil-field>\n\n <div class=\"question-comment-display\">\n <unity-typography variant=\"h4\" color=\"inherit\" class=\"question-comment-header\">\n {`${commentObj?.userDisplayName} ${\n commentObj?.timestamp ? `on ${dateFormatter(commentObj.timestamp, 'short')}` : ''\n }`}\n </unity-typography>\n {commentObj?.value}\n </div>\n <div class=\"question-comment-action-container\">\n {showActions && !isAnyQuestionContainsActiveDraft && (\n <div>\n <udp-button\n variant=\"text\"\n onClick={() => this.handleCommentEdit(commentObj.commentId)}\n startIcon={<udp-icon iconName=\"edit\" color=\"inherit\" />}\n >\n Edit\n </udp-button>\n </div>\n )}\n </div>\n </div>\n ) : (\n <div></div>\n );\n })}\n\n {/* New commend at the bottom of the comment thread */}\n {activeDraft && activeDraft.isTempComment && !savedComments.includes(c => c.commentId == activeDraft.commentId) && (\n <div class=\"question-comment-draft-container\" key={activeDraft.commentId || `draft-0`}>\n <stencil-field\n name={`${this.question.questionIdentifierKey}.draftComments[0].value`}\n required={true}\n ignoreDirty={true}\n >\n <text-area {...this.commentFieldProps} label=\"Comment:\" placeholder=\"Add a comment\" />\n </stencil-field>\n\n <div class=\"question-comment-action-container\">\n <udp-button\n variant=\"text\"\n onClick={() => this.handleCommentEditClose(activeDraft.commentId)}\n startIcon={<udp-icon iconName=\"trashCan\" color=\"inherit\" />}\n >\n Cancel\n </udp-button>\n <udp-button\n variant=\"text\"\n onClick={() => this.handleCommentSave(activeDraft.commentId)}\n startIcon={<udp-icon iconName=\"save\" color=\"inherit\" />}\n >\n Save\n </udp-button>\n </div>\n </div>\n )}\n\n {/* Add button only when there is no active draft */}\n {!activeDraft && !isAnyQuestionContainsActiveDraft &&(\n <div class=\"question-comment-add-comment-button\">\n <udp-button\n variant=\"text\"\n onClick={() => this.handleCommentAdd()}\n startIcon={<udp-icon iconName=\"add\" color=\"inherit\" />}\n >\n Add a Comment\n </udp-button>\n </div>\n )}\n </div>\n );\n }\n}\n","/* Single save button that moves between header and floating positions */\n\n/* Floating mode - positioned fixed in top-right, accounting for app bar */\n.floating-save-button {\n position: fixed;\n top: 5rem; /* Increased from 2rem to account for app bar height */\n right: 2rem;\n z-index: 1000;\n animation: slideInDown 0.3s ease-out;\n}\n\n/* Inline mode - positioned relative for header placement */\n.inline-save-button {\n position: relative;\n display: inline-flex;\n align-items: center;\n margin-left: auto; /* Push to right side of header */\n}\n\n/* Common styles for both modes */\n.floating-save-button.saving,\n.inline-save-button.saving {\n pointer-events: none;\n}\n\n/* Saving state styling */\n.saving-state {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.75rem 1rem;\n background: rgba(0, 0, 0, 0.8);\n color: white;\n border-radius: 8px;\n font-size: 0.9rem;\n}\n\n/* Saved state styling */\n.saved-state {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.75rem 1rem;\n background: rgba(34, 139, 34, 0.9); /* Forest green background */\n color: white;\n border-radius: 8px;\n font-size: 0.9rem;\n animation: fadeIn 0.3s ease-out;\n}\n\n/* Inline saving state - more compact */\n.inline-save-button .saving-state {\n padding: 0.5rem 0.75rem;\n background: rgba(0, 0, 0, 0.6);\n font-size: 0.8rem;\n}\n\n/* Inline saved state - more compact */\n.inline-save-button .saved-state {\n padding: 0.5rem 0.75rem;\n background: rgba(34, 139, 34, 0.8);\n font-size: 0.8rem;\n}\n\n/* Error tooltip positioning - for floating button (top-right) */\n.save-error-tooltip {\n position: absolute;\n top: 100%;\n right: 0;\n margin-top: 0.5rem;\n background: #dc3545;\n color: white;\n padding: 0.5rem 1rem;\n border-radius: 8px;\n font-size: 0.8rem;\n white-space: nowrap;\n box-shadow: 0 4px 12px rgba(220, 53, 69, 0.3);\n animation: fadeIn 0.3s ease-out;\n z-index: 1001;\n}\n\n.save-error-tooltip::after {\n content: '';\n position: absolute;\n bottom: 100%;\n right: 1rem;\n border: 6px solid transparent;\n border-bottom-color: #dc3545;\n}\n\n/* Inline mode error tooltip - position differently */\n.inline-save-button .save-error-tooltip {\n top: 100%;\n bottom: auto;\n margin-top: 0.5rem;\n margin-bottom: 0;\n}\n\n.inline-save-button .save-error-tooltip::after {\n top: -6px;\n border-top-color: transparent;\n border-bottom-color: #dc3545;\n}\n\n/* Animations */\n@keyframes slideInDown {\n from {\n opacity: 0;\n transform: translateY(-20px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n/* Responsive adjustments */\n@media (max-width: 768px) {\n .floating-save-button {\n bottom: 1rem;\n right: 1rem;\n top: auto; /* Override fixed top position on small screens */\n }\n\n .saving-state {\n padding: 0.6rem 0.8rem;\n font-size: 0.8rem;\n }\n\n .inline-save-button .saving-state {\n padding: 0.4rem 0.6rem;\n font-size: 0.75rem;\n }\n}\n\n/* Override icon color to primary when button is inherit color */\n.primary-icon {\n --icon-color: var(--primary-color, #1976d2);\n}\n\n.primary-icon::part(icon) {\n fill: var(--icon-color) !important;\n}\n\n/* Alternative approach using deep selector */\n.primary-icon udp-icon-button::part(icon),\n.primary-icon .icon {\n fill: var(--primary-color, #1976d2) !important;\n}\n\n/* Reduced motion support */\n@media (prefers-reduced-motion: reduce) {\n .floating-save-button,\n .save-error-tooltip {\n animation: none;\n }\n}\n","import { Component, Prop, h, State, Element, Listen } from '@stencil/core';\nimport Save from '@carbon/icons/es/save/20';\nimport { useFormApi } from '../../../form/useFormApi';\n\n@Component({\n tag: 'udp-save-draft-button',\n styleUrl: 'udp-save-draft-button.css',\n shadow: true,\n})\nexport class UdpSaveDraftButton {\n @Element() el: HTMLElement;\n\n @Prop() isVisible: boolean = false;\n @Prop() isSaving: boolean = false;\n @Prop() saveErrorMessage: string | null = null;\n @Prop() showSavedMessage: boolean = false;\n @Prop() handleSave: (values?: any) => void;\n\n @State() shouldBeInline: boolean = false;\n @State() private formApi: any | null = null;\n\n private resizeObserver: ResizeObserver;\n private checkOverlapTimeoutId: any;\n\n async componentDidLoad() {\n this.formApi = await useFormApi(this.el);\n this.checkForOverlap();\n this.setupOverlapDetection();\n }\n\n disconnectedCallback() {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n }\n if (this.checkOverlapTimeoutId) {\n clearTimeout(this.checkOverlapTimeoutId);\n }\n }\n\n @Listen('resize', { target: 'window' })\n handleWindowResize() {\n this.debouncedOverlapCheck();\n }\n\n private setupOverlapDetection() {\n if (typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver(() => {\n this.debouncedOverlapCheck();\n });\n const formContainer = this.el.closest('udp-forms-ui, .form-container, udp-container');\n if (formContainer) {\n this.resizeObserver.observe(formContainer);\n }\n const mainContent = document.querySelector('main, [role=\"main\"]') || document.body;\n if (mainContent) {\n this.resizeObserver.observe(mainContent);\n }\n }\n }\n\n private debouncedOverlapCheck() {\n if (this.checkOverlapTimeoutId) {\n clearTimeout(this.checkOverlapTimeoutId);\n }\n this.checkOverlapTimeoutId = setTimeout(() => {\n this.checkForOverlap();\n }, 100);\n }\n\n private checkForOverlap() {\n // This logic determines which style to apply.\n // Using 1024px as the breakpoint to switch between floating and inline.\n const minWidthNeeded = 1280;\n this.shouldBeInline = window.innerWidth < minWidthNeeded;\n }\n\n private handleSaveClick = async () => {\n if (!this.formApi || this.isSaving) {\n return;\n }\n if (typeof this.handleSave !== 'function') {\n return;\n }\n const values = this.formApi.getState().values;\n try {\n await this.handleSave(values);\n this.formApi.reset(values);\n } catch (error) {\n console.error('The onSave handler threw an error. The form will remain dirty.', error);\n }\n };\n\n render() {\n if (!this.isVisible && !this.showSavedMessage) {\n return null;\n }\n\n // Dynamically set the class based on screen size.\n // This will toggle between your .floating-save-button and .inline-save-button styles.\n const containerClass = this.shouldBeInline ? 'inline-save-button' : 'floating-save-button';\n const isInlineMode = this.shouldBeInline;\n\n return (\n <div class={`${containerClass} ${this.isSaving ? 'saving' : ''} ${this.showSavedMessage ? 'saved' : ''}`}>\n {this.isSaving ? (\n <div class=\"saving-state\">\n <unity-spinner size=\"small\" />\n {!isInlineMode && <span>Saving...</span>}\n </div>\n ) : this.isVisible ? (\n <udp-icon-button\n icon={Save}\n onClick={this.handleSaveClick}\n tooltip={'Save Changes'}\n variant=\"contained\"\n color={isInlineMode ? 'inherit' : 'primary'}\n iconColor={isInlineMode ? 'primary' : null}\n size={isInlineMode ? 'small' : 'medium'}\n >\n {isInlineMode ? '' : 'Save Changes'}\n </udp-icon-button>\n ) : (\n <div class=\"saved-state\">\n <span>Saved</span>\n </div>\n )}\n\n {this.saveErrorMessage && <div class=\"save-error-tooltip\">{this.saveErrorMessage}</div>}\n </div>\n );\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"form-metadata-display.image-upload.signature-input.stencil-form.tally-display.udp-question.udp-question-comments.udp-save-draft-button.entry.esm.js","sources":["src/components/inputs/form metadata display/form-metadata-display.css?tag=form-metadata-display&encapsulation=shadow","src/components/inputs/form metadata display/form-metadata-display.tsx","src/components/inputs/image-upload/image-upload.css?tag=image-upload&encapsulation=shadow","src/components/inputs/image-upload/image-upload.tsx","src/components/inputs/signature-input/signature-input.css?tag=signature-input&encapsulation=shadow","src/components/inputs/signature-input/signature-input.tsx","src/components/forms/form/stencil-form.tsx","src/components/inputs/tally/tally.css?tag=tally-display&encapsulation=shadow","src/components/inputs/tally/tally.tsx","src/components/forms/form/useFormApi.ts","src/components/forms/udp-forms/udp-question/udp-question.css?tag=udp-question&encapsulation=shadow","src/components/forms/udp-forms/udp-question/udp-question.tsx","src/components/forms/udp-forms/udp-question/udp-question-comment/udp-question-comments.css?tag=udp-question-comments&encapsulation=shadow","src/components/forms/udp-forms/udp-question/udp-question-comment/udp-question-comments.tsx","src/components/forms/udp-forms/udp-forms-renderer/udp-save-draft-button/udp-save-draft-button.css?tag=udp-save-draft-button&encapsulation=shadow","src/components/forms/udp-forms/udp-forms-renderer/udp-save-draft-button/udp-save-draft-button.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\n.container {\n display: grid;\n gap: 10px;\n padding: 12px 14px;\n background: var(--unity-color-surface, #fff);\n}\n\n.row {\n display: grid;\n grid-template-columns: 130px 1fr;\n align-items: baseline;\n column-gap: 12px;\n}\n\n.label {\n font-size: 12px;\n line-height: 1.2;\n letter-spacing: 0.02em;\n text-transform: uppercase;\n color: var(--unity-color-text-secondary, rgba(0, 0, 0, 0.65));\n}\n\n.value {\n color: var(--unity-color-text, rgba(0, 0, 0, 0.9));\n overflow-wrap: anywhere;\n}\n\n@media (max-width: 420px) {\n .row {\n grid-template-columns: 1fr;\n row-gap: 4px;\n }\n}\n","import { Component, Prop, h } from '@stencil/core';\nimport { dateFormatter } from 'src/components/forms/udp-forms/udp-forms-utils/utils';\n\n/**\n * A small display-only component for showing read-only form metadata.\n *\n * Intended usage:\n * - Rendered near the top or bottom of a form submission view\n * - Pure presentational output based on props (no internal state, no events)\n *\n * Layout:\n * - Uses a simple \"label + value\" row pattern for consistent alignment\n * - Hides rows when the corresponding value is missing or the display flag is false\n *\n * @example\n * ```tsx\n * <form-metadata-display\n * userDisplayName=\"Ada Lovelace\"\n * userEmail=\"ada@example.com\"\n * submittedOn={new Date()}\n * />\n * ```\n */\n@Component({\n tag: 'form-metadata-display',\n styleUrl: 'form-metadata-display.css',\n shadow: true,\n})\nexport class FormMetadataDisplay {\n /**\n * Full name (or display name) of the form owner/submitter.\n * Row is only rendered when `displayOwnerFullName` is true and this value is non-empty.\n */\n @Prop() userDisplayName: string;\n\n /**\n * Email of the form owner/submitter.\n * Row is only rendered when `displayOwnerEmail` is true and this value is non-empty.\n */\n @Prop() userEmail: string;\n\n /**\n * Submission timestamp.\n * Row is only rendered when `displaySubmissionDate` is true and this value is non-null.\n */\n @Prop() submittedOn: string | null;\n\n /**\n * Toggles rendering of the \"Name\" row.\n * Defaults to true.\n */\n @Prop() displayOwnerFullName: boolean = true;\n\n /**\n * Toggles rendering of the \"Email\" row.\n * Defaults to true.\n */\n @Prop() displayOwnerEmail: boolean = true;\n\n /**\n * Toggles rendering of the \"Submitted on\" row.\n * Defaults to true.\n */\n @Prop() displaySubmissionDate: boolean = true;\n\n /**\n * Renders a single metadata row using a standard label/value layout.\n * @internal\n */\n renderRow(label: string, value: string) {\n return (\n <div class=\"row\">\n {/* Label is visually subtle; value uses standard typography for emphasis */}\n <span class=\"label\">{label}</span>\n <unity-typography class=\"value\" variant=\"h4\">{value}</unity-typography>\n </div>\n );\n }\n\n /**\n * Renders the metadata container. Rows are conditionally included based on flags + data presence.\n * @internal\n */\n render() {\n return (\n // role/aria-label provide a lightweight accessible grouping for screen readers\n <div class=\"container\" role=\"group\" aria-label=\"Form metadata\">\n {this.displayOwnerFullName && this.userDisplayName && this.renderRow('Name', this.userDisplayName)}\n {this.displayOwnerEmail && this.userEmail && this.renderRow('Email', this.userEmail)}\n {this.displaySubmissionDate && this.submittedOn && this.renderRow('Submitted on', dateFormatter(this.submittedOn, 'long'))}\n </div>\n );\n }\n}\n",":host {\n display: block;\n}\n","import { Component, h, Host, Prop, Event, EventEmitter } from '@stencil/core';\nimport { UdpDriveFile } from '../../../global/types';\n\n/**\n * A specialized image upload component that wraps the file-upload component\n * with image-specific functionality including image preview, rendering, and validation.\n *\n * This component automatically restricts file types to common image formats\n * and provides image preview functionality.\n *\n * @example\n * ```tsx\n * // Basic image upload\n * <image-upload\n * allowMultiple={true}\n * onChange={(e) => console.log('Images:', e.detail.files)}\n * />\n *\n * // With existing images and preview\n * <image-upload\n * initialValue={existingImages}\n * renderImages={true}\n * onChange={handleImageChange}\n * />\n * ```\n */\n@Component({\n tag: 'image-upload',\n styleUrl: 'image-upload.css',\n shadow: true,\n})\nexport class ImageUpload {\n\n\n /**\n * Array of allowed image MIME types. Defaults to common image formats.\n * Overrides the default image MIME types if specified.\n * Example: ['image/jpeg', 'image/png', 'image/gif']\n */\n @Prop() allowedMimeTypes: Array<string> = ['image/jpeg', 'image/png', 'image/gif', 'image/svg+xml', 'image/webp'];\n\n /**\n * Whether the component should take the full width of its container.\n */\n @Prop() fullWidth: boolean = false;\n\n /**\n * Whether image selection is required.\n */\n @Prop() required: boolean;\n\n /**\n * Error message to display.\n */\n @Prop() error: string;\n\n /**\n * Message for the drag-and-drop area.\n */\n @Prop() dragAndDropMessage: string = 'Drag and drop your image here';\n\n /**\n * Text for the browse files button.\n */\n @Prop() browseFileMessage: string = 'Browse Image';\n\n /**\n * Whether to hide the drag-and-drop area.\n */\n @Prop() hideDragAndDrop: boolean = false;\n\n /**\n * Whether to hide the browse files button.\n */\n @Prop() hideButton: boolean = false;\n\n /**\n * Unique identifier for the component.\n */\n @Prop() id: string;\n\n /**\n * Name attribute for the component.\n */\n @Prop() name: string;\n\n /**\n * Label for the component.\n */\n @Prop() label: string;\n\n /**\n * Whether the component is disabled.\n */\n @Prop() disabled: boolean = false;\n\n /**\n * Whether the component is in a read-only state.\n */\n @Prop() readonly: boolean = false;\n\n /**\n * Initial value for the component (UdpDriveFile, File, or string).\n */\n @Prop() initialValue: UdpDriveFile | UdpDriveFile[] | File | File[] | string;\n\n /**\n * Emitted when the selected images change.\n */\n @Event() change: EventEmitter<{ value: string; files: File[] }>;\n\n private handleFileChange = (event: CustomEvent) => {\n // Prevent the event from bubbling up further, as we are re-emitting it.\n event.stopPropagation();\n this.change.emit(event.detail);\n };\n\n render() {\n return (\n <Host>\n <file-upload\n allowMultiple={false}\n allowedMimeTypes={this.allowedMimeTypes}\n fullWidth={this.fullWidth}\n required={this.required}\n error={this.error}\n dragAndDropMessage={this.dragAndDropMessage}\n browseFileMessage={this.browseFileMessage}\n hideDragAndDrop={this.hideDragAndDrop}\n hideButton={this.hideButton}\n id={this.id}\n name={this.name}\n label={this.label}\n disabled={this.disabled}\n readonly={this.readonly}\n initialValue={this.initialValue}\n renderImage={true}\n onChange={this.handleFileChange}\n ></file-upload>\n </Host>\n );\n }\n}\n","@import '../inputs.css';\n\n/* Size variants for canvas sizing */\n:host(.udp-input--size-small) .signature-canvas {\n height: 150px;\n}\n\n:host(.udp-input--size-normal) .signature-canvas {\n height: 200px;\n}\n\n:host(.udp-input--size-large) .signature-canvas {\n height: 250px;\n}\n\n/* Size variants for clear button */\n:host(.udp-input--size-small) .clear-button {\n padding: var(--spacing-01) var(--spacing-02);\n font-size: var(--caption-font-size, 0.875rem);\n top: var(--spacing-02);\n right: var(--spacing-02);\n}\n\n:host(.udp-input--size-normal) .clear-button {\n padding: var(--spacing-02) var(--spacing-03);\n font-size: var(--body-font-size);\n top: var(--spacing-02);\n right: var(--spacing-02);\n}\n\n:host(.udp-input--size-large) .clear-button {\n padding: var(--spacing-03) var(--spacing-04);\n font-size: var(--body-font-size);\n top: var(--spacing-03);\n right: var(--spacing-03);\n}\n\n.signature-pad-container {\n position: relative;\n border: 1px solid var(--udp-mid-gray-color);\n border-radius: 4px;\n background-color: var(--udp-light-gray-color);\n}\n\n.signature-canvas {\n display: block;\n width: 100%;\n height: 200px; /* Default height, overridden by density variants */\n}\n\n.signature-pad-container.readonly {\n background-color: var(--udp-disabled-gray-color);\n}\n\n.signature-canvas.readonly {\n cursor: not-allowed;\n}\n\n.clear-button {\n position: absolute;\n top: var(--spacing-02); /* Default, overridden by density variants */\n right: var(--spacing-02); /* Default, overridden by density variants */\n background-color: var(--udp-light-gray-color);\n border: 1px solid var(--udp-mid-gray-color);\n color: var(--udp-primary-color);\n cursor: pointer;\n border-radius: 4px;\n padding: var(--spacing-02) var(--spacing-03); /* Default, overridden by density variants */\n}\n\n.clear-button:hover {\n background-color: var(--udp-mid-gray-color);\n}\n\n.clear-button:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n","import { Component, Prop, h, State, Watch, Event, EventEmitter, Element, Host } from '@stencil/core';\nimport type SignaturePad from 'signature_pad';\nimport { UdpDriveFile } from '../../../global/types';\nimport { InputSize, InputMargin } from '../input-types';\nimport {\n isUdpDriveFile,\n isFileReference,\n parseFileReference,\n downloadFileFromUdpDriveFile,\n createFileFromString,\n isFile,\n} from '../file-upload/udp-drive-utils';\n\n\n@Component({\n tag: 'signature-input',\n styleUrl: 'signature-input.css',\n shadow: true,\n})\nexport class SignatureInput {\n @Element() el: HTMLElement;\n\n /**\n * Label for the input field.\n */\n @Prop() label: string;\n\n /**\n * Unique identifier for the input.\n */\n @Prop() id: string;\n\n /**\n * Whether the field is required.\n */\n @Prop() required: boolean;\n\n /**\n * Whether to save location and timestamp data in the submission.\n */\n @Prop() includeLocation: boolean = false;\n\n /**\n * Whether the field is disabled.\n */\n @Prop() disabled: boolean = false;\n\n /**\n * Whether the field is read-only.\n */\n @Prop() readonly: boolean = false;\n\n /**\n * Error message to display.\n */\n @Prop() error: string;\n\n /**\n * Size variant for the signature input.\n * - 'small': Compact signature area\n * - 'normal': Standard signature area (default)\n * - 'large': Generous signature area\n */\n @Prop() size: InputSize = 'normal';\n\n /**\n * Margin variant for the input spacing.\n * - 'none': No margin\n * - 'dense': Minimal margin spacing\n * - 'normal': Standard margin spacing (default)\n */\n @Prop() margin: InputMargin = 'normal';\n\n /**\n * The current value of the signature, can be a File or UdpDriveFile.\n */\n @Prop({ mutable: true }) value: File | UdpDriveFile;\n\n /**\n * The initial value, used if `value` is not provided.\n */\n @Prop() initialValue: File | UdpDriveFile | string;\n\n /**\n * Emitted when the signature changes.\n */\n @Event() change: EventEmitter<File | null>;\n @Event() metadataEmit: EventEmitter<{ key: string; value: any } | null>;\n\n @State() private internalError: string;\n @State() private signaturePad: SignaturePad;\n @State() private cachedLocation: GeolocationPosition | null = null;\n \n private canvasEl: HTMLCanvasElement;\n private SignaturePadLib: typeof SignaturePad;\n \n private lastCanvasRect: DOMRect;\n private resizeTimeout: any;\n private isInternalChange = false;\n\n private async processAndLoadValue(incomingValue: any) {\n if (!incomingValue) {\n if (this.signaturePad) this.signaturePad.clear();\n return;\n }\n\n try {\n const rawValue = Array.isArray(incomingValue) ? incomingValue[0] : incomingValue;\n let loadedFile: File | null = null;\n\n // --- Parsing Logic ---\n if (typeof rawValue === 'string' && isFileReference(rawValue)) {\n const parsedFile = await parseFileReference(rawValue);\n if (parsedFile && (parsedFile as any).driveFileId) {\n loadedFile = await downloadFileFromUdpDriveFile({\n name: parsedFile.name,\n driveFileId: (parsedFile as any).driveFileId,\n extension: parsedFile.name.split('.').pop() || '',\n } as any);\n } else {\n loadedFile = parsedFile as File;\n }\n } \n else if (isUdpDriveFile(rawValue)) {\n loadedFile = await downloadFileFromUdpDriveFile(rawValue);\n } \n else if (typeof rawValue === 'string') {\n loadedFile = await createFileFromString(rawValue, 'signature.png');\n } \n else if (isFile(rawValue)) {\n loadedFile = rawValue;\n }\n\n // --- Application Logic ---\n if (loadedFile) {\n this.value = loadedFile; // Update internal prop\n if (this.signaturePad) {\n await this.loadSignature(loadedFile);\n } else {\n // If pad isn't ready yet, initializeSignaturePad will pick up this.value\n this.initializeSignaturePad();\n }\n }\n } catch (err) {\n console.error('Failed to process signature value:', err);\n }\n}\n\n\n @Watch('error')\n onErrorChange(newValue: string) {\n this.internalError = newValue;\n }\n\n\n @Watch('value')\n async handleValueUpdate(newValue: any) {\n // Guard against loops from our own 'endStroke'\n if (this.isInternalChange) {\n this.isInternalChange = false;\n return;\n }\n\n // If the value changed from outside, we need to re-parse/re-load\n if (this.canvasEl) {\n await this.processAndLoadValue(newValue);\n }\n }\n\n @Watch('initialValue')\n async handleInitialValueUpdate(newValue: any) {\n // Only react to initialValue changes if we have a canvas\n if (this.canvasEl) {\n await this.processAndLoadValue(newValue);\n }\n }\n\n async componentWillLoad() {\n this.internalError = this.error;\n await this.loadSignaturePad();\n\n // Prewarm location if enabled\n if (this.includeLocation) {\n navigator.geolocation.getCurrentPosition(\n (coords) => {\n this.cachedLocation = coords;\n },\n (err) => {\n console.warn(\"Prewarm geolocation error:\", err);\n this.cachedLocation = null;\n },\n { enableHighAccuracy: true, timeout: 30000, maximumAge: 0 }\n );\n }\n }\n\n async componentDidLoad() {\n // 1. Initialize the pad (this sets up the canvas and library)\n this.initializeSignaturePad();\n\n // 2. Load whatever we have (preferring value over initialValue)\n const starterValue = this.value || this.initialValue;\n if (starterValue) {\n await this.processAndLoadValue(starterValue);\n }\n\n this.lastCanvasRect = this.canvasEl.getBoundingClientRect();\n window.addEventListener('resize', this.handleResize);\n }\n\n \n\n disconnectedCallback() {\n window.removeEventListener('resize', this.handleResize);\n if (this.resizeTimeout) clearTimeout(this.resizeTimeout);\n }\n\n private handleResize = () => {\n if (this.resizeTimeout) clearTimeout(this.resizeTimeout);\n this.resizeTimeout = setTimeout(() => {\n const rect = this.canvasEl.getBoundingClientRect();\n if (!this.lastCanvasRect || rect.width !== this.lastCanvasRect.width || rect.height !== this.lastCanvasRect.height) {\n // Save current signature as dataURL\n let dataURL = this.signaturePad && !this.signaturePad.isEmpty() ? this.signaturePad.toDataURL() : null;\n this.resizeCanvasForDPR();\n this.initializeSignaturePad();\n this.lastCanvasRect = rect;\n // Restore signature if it existed\n if (dataURL && this.signaturePad) {\n this.signaturePad.fromDataURL(dataURL);\n }\n }\n }, 200);\n }\n\n private resizeCanvasForDPR() {\n if (!this.canvasEl) return;\n const ratio = window.devicePixelRatio || 1;\n const rect = this.canvasEl.getBoundingClientRect();\n \n // Setting width/height automatically clears the canvas and resets the context\n this.canvasEl.width = rect.width * ratio;\n this.canvasEl.height = rect.height * ratio;\n \n const ctx = this.canvasEl.getContext('2d');\n // Just to be safe, reset transform before scaling\n ctx.setTransform(1, 0, 0, 1, 0, 0); \n ctx.scale(ratio, ratio);\n }\n\n private async loadSignaturePad() {\n if (!this.SignaturePadLib) {\n try {\n const module = await import('signature_pad');\n this.SignaturePadLib = module.default;\n } catch (e) {\n console.error('Failed to load signature_pad library', e);\n }\n }\n }\n\n private initializeSignaturePad() {\n if (this.SignaturePadLib && this.canvasEl) {\n // 1. Reset the canvas dimensions and scale first\n this.resizeCanvasForDPR();\n\n // 2. Destroy old instance if it exists\n if (this.signaturePad) {\n this.signaturePad.off();\n }\n \n // 3. Create new instance\n this.signaturePad = new this.SignaturePadLib(this.canvasEl);\n this.signaturePad.addEventListener(\"endStroke\", this.handleSignatureEnd);\n this.handleStateChange();\n \n // 4. Load value if exists\n if (this.value) {\n this.loadSignature(this.value);\n }\n }\n }\n\n @Watch('disabled')\n @Watch('readonly')\n handleStateChange() {\n if (this.signaturePad) {\n if (this.disabled || this.readonly) {\n this.signaturePad.off();\n } else {\n this.signaturePad.on();\n }\n }\n }\n\n\n private handleSignatureEnd = async () => {\n if (this.signaturePad.isEmpty()) {\n this.isInternalChange = true; \n this.value = null;\n this.change.emit(null);\n this.metadataEmit.emit({ key: 'signature.latitude', value: null });\n this.metadataEmit.emit({ key: 'signature.longitude', value: null });\n this.metadataEmit.emit({ key: 'signature.timestamp', value: null });\n } else {\n const dataURL = this.signaturePad.toDataURL();\n const signatureFile = await this.urlToFile(dataURL, 'signature.png');\n \n this.isInternalChange = true;\n this.value = signatureFile; \n this.change.emit(signatureFile);\n\n // Timestamp always emitted\n this.metadataEmit.emit({\n key: 'signature.timestamp',\n value: new Date().toISOString(),\n });\n\n // Location handling\n if (this.includeLocation) {\n try {\n let coords = this.cachedLocation;\n\n if (!coords) {\n // Fallback if prewarm failed\n coords = await new Promise<GeolocationPosition>((resolve, reject) => {\n navigator.geolocation.getCurrentPosition(resolve, reject, {\n enableHighAccuracy: true,\n timeout: 30000,\n maximumAge: 0,\n });\n });\n }\n\n if (coords) {\n this.metadataEmit.emit({ key: 'signature.latitude', value: coords.coords.latitude });\n this.metadataEmit.emit({ key: 'signature.longitude', value: coords.coords.longitude });\n } else {\n this.metadataEmit.emit({ key: 'signature.latitude', value: null });\n this.metadataEmit.emit({ key: 'signature.longitude', value: null });\n }\n\n } catch (err) {\n console.warn(\"Geolocation error:\", err);\n this.metadataEmit.emit({ key: 'signature.latitude', value: null });\n this.metadataEmit.emit({ key: 'signature.longitude', value: null });\n }\n }\n }\n };\n\n\n private async loadSignature(signatureValue: File | UdpDriveFile | string) {\n let imageUrl: string;\n if (typeof signatureValue === 'string') {\n imageUrl = signatureValue;\n } else if (isUdpDriveFile(signatureValue)) {\n try {\n const file = await downloadFileFromUdpDriveFile(signatureValue as UdpDriveFile);\n imageUrl = URL.createObjectURL(file);\n } catch (error) {\n console.error('Error loading signature image from UdpDriveFile:', error);\n return;\n }\n } else if (signatureValue instanceof File) {\n imageUrl = URL.createObjectURL(signatureValue);\n }\n\n if (imageUrl && this.signaturePad) {\n // 1. Clear the pad first to prevent double signatures\n this.signaturePad.clear(); \n \n // 2. Load the image\n this.signaturePad.fromDataURL(imageUrl, {\n ratio: window.devicePixelRatio || 1 // Explicitly tell it the ratio\n });\n }\n }\n\n private async urlToFile(url: string, filename: string): Promise<File> {\n const res = await fetch(url);\n const blob = await res.blob();\n return new File([blob], filename, { type: blob.type });\n }\n\n private clearSignature = () => {\n if (this.signaturePad) {\n this.signaturePad.clear();\n this.handleSignatureEnd(); // to emit the change\n }\n };\n\n render() {\n const isError = !!this.internalError;\n const containerClasses = {\n 'signature-pad-container': true,\n 'readonly': this.readonly,\n 'disabled': this.disabled,\n };\n\n return (\n <Host\n class={{\n 'udp-input': true,\n 'udp-input--error': isError,\n 'udp-input--disabled': this.disabled,\n 'udp-input--required': this.required,\n 'udp-input--readonly': this.readonly,\n [`udp-input--size-${this.size}`]: true,\n [`udp-input--margin-${this.margin}`]: true,\n }}\n >\n <div class=\"bx--form-item\">\n {this.label && (\n <unity-typography variant=\"caption-text\">\n <label htmlFor={this.id} class=\"bx--label\">\n {this.label}\n {this.required && '*'}\n </label>\n </unity-typography>\n )}\n <div class={containerClasses}>\n <canvas\n ref={el => (this.canvasEl = el as HTMLCanvasElement)}\n class={{ 'signature-canvas': true, 'readonly': this.readonly || this.disabled }}\n id={this.id}\n ></canvas>\n {!this.readonly && !this.disabled && (\n <button\n type=\"button\"\n class=\"clear-button\"\n onClick={this.clearSignature}\n disabled={this.disabled}\n >\n Clear\n </button>\n )}\n </div>\n {isError && (\n <div class=\"error-message\">\n <unity-typography variant=\"caption-text\" color=\"error\">{this.internalError}</unity-typography>\n </div>\n )}\n </div>\n </Host>\n );\n }\n}\n\n","import { Component, h, Prop, Event as StencilEvent, EventEmitter, State, Element, Method } from '@stencil/core';\nimport { createForm, FormApi } from 'final-form';\nimport debounce from 'lodash.debounce';\n\n@Component({\n tag: 'stencil-form',\n shadow: true,\n})\nexport class StencilForm {\n @Element() el: HTMLElement;\n @Prop() handleSubmit: (values: Object) => void;\n @Prop() initialValues: Object;\n @Prop() handleValidate: (values: Object, errors: Object) => Object;\n @Prop() validateOnBlur: boolean = true;\n @Prop() handleChange: (values: Object) => void;\n @StencilEvent() stencilFormInvalidEvent: EventEmitter<Object>;\n @StencilEvent() dirtyChange: EventEmitter<boolean>;\n\n private observer: MutationObserver;\n\n @State() api: FormApi;\n @State() registeredFields: { [key: string]: { required: boolean, ignoreDirty?: boolean } } = {};\n @State() customErrors: { [key: string]: string } = {};\n\n constructor() {\n this.submitWithValidation = this.submitWithValidation.bind(this);\n this.defaultValidation = this.defaultValidation.bind(this);\n this.submit = this.submit.bind(this);\n this.onFormChange = this.onFormChange.bind(this);\n }\n\n private connectField(field: HTMLStencilFieldElement) {\n if ((field as any).__connectedToForm) return;\n\n field.setFormApi({\n api: this.api,\n registeredFields: this.registeredFields,\n customErrors: this.customErrors,\n });\n\n (field as any).__connectedToForm = true;\n }\n\n /**\n * Asynchronously and recursively traverses a node and all of its light DOM\n * and shadow DOM descendants, connecting any stencil-fields it finds.\n */\n private async processNodeRecursively(node: Node) {\n // 1. Skip anything that isn't an element\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return;\n }\n const element = node as Element;\n\n // 2. If the element is a custom component, wait for it to be defined.\n // This ensures its shadowRoot is available if it has one.\n if (element.localName.includes('-')) {\n await customElements.whenDefined(element.localName);\n }\n\n // 3. Process the element itself\n if (element.matches('stencil-field')) {\n this.connectField(element as HTMLStencilFieldElement);\n }\n\n // 4. Connect submit buttons\n this.connectSubmitButtons(element);\n\n // 5. If the element has a shadowRoot, recursively process its children\n if (element.shadowRoot) {\n for (const child of Array.from(element.shadowRoot.childNodes)) {\n await this.processNodeRecursively(child);\n }\n }\n\n // 6. Recursively process all light DOM children\n for (const child of Array.from(element.childNodes)) {\n await this.processNodeRecursively(child);\n }\n }\n\n /**\n * The event handler for slot changes. It kicks off the recursive processing.\n */\n private handleSlotChange = () => {\n const slot = this.el.shadowRoot.querySelector('slot');\n if (!slot) return;\n\n // Process every node assigned to the slot\n slot.assignedNodes().forEach(node => this.processNodeRecursively(node));\n };\n\n /**\n * Connect submit buttons in slotted content to this form\n */\n private connectSubmitButtons(node: Node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return;\n }\n const element = node as Element;\n\n // Check if the element itself is a submit button\n if (element.matches('input[type=\"submit\"], button[type=\"submit\"]')) {\n const htmlElement = element as HTMLElement;\n // Avoid duplicate event listeners\n if (!htmlElement.dataset.stencilFormConnected) {\n htmlElement.dataset.stencilFormConnected = 'true';\n element.addEventListener('click', e => {\n e.preventDefault();\n this.submit(e);\n });\n }\n }\n\n // Find submit buttons in descendants and connect them\n const submitButtons = element.querySelectorAll('input[type=\"submit\"], button[type=\"submit\"]');\n submitButtons.forEach((button: Element) => {\n const htmlButton = button as HTMLElement;\n // Avoid duplicate event listeners\n if (!htmlButton.dataset.stencilFormConnected) {\n htmlButton.dataset.stencilFormConnected = 'true';\n button.addEventListener('click', e => {\n e.preventDefault();\n this.submit(e);\n });\n }\n });\n }\n\n componentWillLoad() {\n this.api = createForm({\n onSubmit: this.submitWithValidation,\n initialValues: this.initialValues,\n validate: this.defaultValidation,\n validateOnBlur: this.validateOnBlur,\n });\n\n if (this.handleChange) {\n this.api.subscribe(this.onFormChange, { values: true });\n }\n\n // Subscription for the dirty state change event, but consider ignoreDirty flags and ignore any fields configured with ignoreDirty=true\n this.api.subscribe(\n formState => {\n const { dirtyFields } = formState;\n const registered = this.registeredFields;\n\n // Determine if any field that is *not ignored* is dirty\n const hasDirtyFields = Object.keys(dirtyFields || {}).some(\n name => dirtyFields[name] && !registered[name]?.ignoreDirty\n );\n\n this.dirtyChange.emit(hasDirtyFields);\n },\n { dirtyFields: true },\n );\n }\n\n componentDidLoad() {\n const slot = this.el.shadowRoot.querySelector('slot');\n\n // Create the observer first\n this.observer = new MutationObserver(mutations => {\n for (const mutation of mutations) {\n mutation.addedNodes.forEach(node => {\n this.processNodeRecursively(node);\n });\n }\n });\n\n // Function to handle slot changes or initial processing\n const observeAssignedNodes = () => {\n const assignedNodes = slot?.assignedNodes({ flatten: true }) || [];\n\n assignedNodes.forEach(node => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n this.observer.observe(node, { childList: true, subtree: true });\n this.processNodeRecursively(node); // Process immediately in case nodes are already present\n }\n });\n };\n\n if (slot) {\n observeAssignedNodes(); // Initial\n slot.addEventListener('slotchange', observeAssignedNodes); // Handle dynamic slot content\n }\n\n // If you're also rendering some fields directly in this.el (not through slot), you can keep this:\n this.observer.observe(this.el, { childList: true, subtree: true });\n\n this.el.dispatchEvent(new CustomEvent('stencilFormReady', { bubbles: true, composed: true }));\n }\n\n disconnectedCallback() {\n this.api = null;\n this.registeredFields = {};\n\n const slot = this.el.shadowRoot?.querySelector('slot');\n if (slot) {\n slot.removeEventListener('slotchange', this.handleSlotChange);\n }\n }\n\n onFormChange(formState: any): void {\n if (this.handleChange && formState.values) {\n this.handleChange(formState.values);\n }\n }\n\n async submitWithValidation(values: { [key: string]: any }): Promise<void> {\n const errors = this.defaultValidation(values);\n if (Object.keys(errors).length === 0) {\n this.handleSubmit(values);\n } else {\n this.stencilFormInvalidEvent.emit(errors);\n }\n }\n\n defaultValidation(values: Object): Object {\n const { registeredFields, customErrors } = this;\n const errors = {};\n\n // Helper to get value from nested path (dot + bracket notation)\n const getByPath = (obj, path) =>\n path\n .replace(/\\[(\\d+)\\]/g, '.$1') // convert [0] to .0\n .split('.')\n .reduce((o, k) => (o != null ? o[k] : undefined), obj);\n\n // Check for required field validation\n Object.keys(registeredFields).forEach(field => {\n const meta = registeredFields[field];\n if (meta?.ignoreDirty) return; // skip ignored fields entirely\n\n const valRef = getByPath(values, field);\n\n // null or undefined, empty string, or false/'false' are considered \"empty\" values\n if (\n meta.required &&\n (valRef == null ||\n (typeof valRef === 'string' && valRef.trim() === '') ||\n valRef === false ||\n valRef === 'false')\n ) {\n errors[field] = 'This field is required';\n }\n });\n\n // Merge in any custom errors from stencil-field components\n if (customErrors) {\n Object.keys(customErrors).forEach(field => {\n if (customErrors[field]) {\n errors[field] = customErrors[field];\n }\n });\n }\n\n // Merge with user-provided custom validation\n if (this?.handleValidate) {\n const customErrorsFromHandler = this.handleValidate(values, errors);\n return { ...errors, ...customErrorsFromHandler };\n }\n\n return errors;\n }\n\n @Method()\n async getApi(): Promise<FormApi> {\n if (!this.api) {\n console.error('❌ Form API not initialized yet.');\n return null;\n }\n return this.api;\n }\n\n submit(e) {\n e?.preventDefault?.();\n const values = this.api.getState().values;\n const errors = this.defaultValidation(values);\n\n const submitFunction = () => {\n if (Object.keys(errors).length) {\n this.stencilFormInvalidEvent.emit(errors);\n return;\n }\n this.api?.submit();\n };\n debounce(submitFunction, 1000, { leading: true, trailing: false })();\n }\n\n render() {\n return (\n <form>\n <slot />\n </form>\n );\n }\n}\n",":host {\n display: block;\n width: 100%;\n}\n\n.tally-container {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-02, 8px);\n}\n\n.tally-label {\n font-weight: 600;\n margin-bottom: var(--spacing-02, 8px);\n}\n\n.tally-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--spacing-04, 16px);\n color: var(--text-secondary, #6b7280);\n}\n\n.tally-content {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-03, 12px);\n}\n\n.tally-stats {\n display: flex;\n gap: var(--spacing-04, 16px);\n flex-wrap: wrap;\n}\n\n.tally-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: var(--spacing-03, 12px) var(--spacing-04, 16px);\n border-radius: var(--border-radius-01, 4px);\n border: 1px solid var(--border-subtle, #e5e7eb);\n background-color: var(--layer-01, #ffffff);\n min-width: 80px;\n flex: 1;\n max-width: 120px;\n}\n\n.tally-item.tally-yes {\n border-color: var(--support-success, #42be65);\n background-color: var(--support-success-hover, #f6f8ff);\n}\n\n.tally-item.tally-no {\n border-color: var(--support-error, #da1e28);\n background-color: var(--support-error-hover, #fff1f1);\n}\n\n.tally-item.tally-unanswered {\n border-color: var(--support-warning, #f1c21b);\n background-color: var(--support-warning-hover, #fcf4d6);\n}\n\n.tally-count {\n font-weight: 700;\n line-height: 1.2;\n margin-bottom: var(--spacing-01, 4px);\n}\n\n.tally-yes .tally-count {\n color: var(--support-success, #42be65);\n}\n\n.tally-no .tally-count {\n color: var(--support-error, #da1e28);\n}\n\n.tally-unanswered .tally-count {\n color: var(--support-warning, #f1c21b);\n}\n\n.tally-item .tally-label {\n margin: 0;\n font-weight: 500;\n text-transform: uppercase;\n font-size: 0.75rem;\n letter-spacing: 0.02em;\n}\n\n.tally-summary {\n padding: var(--spacing-02, 8px) 0;\n border-top: 1px solid var(--border-subtle, #e5e7eb);\n text-align: center;\n}\n\n.error-message {\n margin-top: var(--spacing-02, 8px);\n padding: var(--spacing-02, 8px);\n border-radius: var(--border-radius-01, 4px);\n background-color: var(--support-error-hover, #fff1f1);\n border: 1px solid var(--support-error, #da1e28);\n}\n\n/* Size variants */\n:host(.udp-input--size-small) .tally-item {\n padding: var(--spacing-02, 8px) var(--spacing-03, 12px);\n min-width: 60px;\n max-width: 90px;\n}\n\n:host(.udp-input--size-small) .tally-count {\n font-size: 1.25rem;\n}\n\n:host(.udp-input--size-large) .tally-item {\n padding: var(--spacing-04, 16px) var(--spacing-05, 20px);\n min-width: 100px;\n max-width: 150px;\n}\n\n:host(.udp-input--size-large) .tally-count {\n font-size: 2rem;\n}\n\n/* Margin variants */\n:host(.udp-input--margin-none) .tally-container {\n gap: 0;\n}\n\n:host(.udp-input--margin-dense) .tally-container {\n gap: var(--spacing-01, 4px);\n}\n\n:host(.udp-input--margin-comfortable) .tally-container {\n gap: var(--spacing-04, 16px);\n}\n\n/* Disabled state */\n:host(.udp-input--disabled) .tally-item {\n opacity: 0.5;\n pointer-events: none;\n}\n\n/* Read-only state */\n:host(.udp-input--readonly) .tally-item {\n background-color: var(--field-01, #f4f4f4);\n}\n\n/* Responsive design */\n@media (max-width: 480px) {\n .tally-stats {\n flex-direction: column;\n }\n \n .tally-item {\n max-width: none;\n flex: none;\n }\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\nimport { InputSize, InputMargin } from '../input-types';\n\n/**\n * A tally component that displays counts of Yes/No responses.\n * This is a pure display component that receives tally data as props.\n */\n@Component({\n tag: 'tally-display',\n styleUrl: 'tally.css',\n shadow: true,\n})\nexport class TallyDisplay {\n\n /**\n * Label for the tally display.\n */\n @Prop() label: string = 'Response Tally';\n\n /**\n * Unique identifier for the tally.\n */\n @Prop() id: string;\n\n /**\n * Number of Yes responses.\n */\n @Prop() yesCount: number = 0;\n\n /**\n * Number of No responses.\n */\n @Prop() noCount: number = 0;\n\n /**\n * Number of Not Applicable responses.\n */\n @Prop() naCount: number = 0;\n\n /**\n * Total number of fields being tallied.\n */\n @Prop() totalFields: number = 0;\n\n /**\n * Whether the component is disabled.\n */\n @Prop() disabled: boolean = false;\n\n /**\n * Whether the component is read-only.\n */\n @Prop() readonly: boolean = false;\n\n /**\n * Error message to display.\n */\n @Prop() error: string;\n\n /**\n * Size variant for the tally display.\n */\n @Prop() size: InputSize = 'normal';\n\n /**\n * Margin variant for the component spacing.\n */\n @Prop() margin: InputMargin = 'normal';\n\n render() {\n const isError = !!this.error;\n const answeredCount = this.yesCount + this.noCount + this.naCount;\n const unansweredCount = this.totalFields - answeredCount;\n \n return (\n <Host\n class={{\n 'udp-input': true,\n 'udp-input--error': isError,\n 'udp-input--disabled': this.disabled,\n 'udp-input--readonly': this.readonly,\n [`udp-input--size-${this.size}`]: true,\n [`udp-input--margin-${this.margin}`]: true,\n }}\n >\n <div class=\"tally-container\">\n {this.label && (\n <unity-typography variant=\"caption-text\">\n <label htmlFor={this.id} class=\"tally-label\">\n {this.label}\n </label>\n </unity-typography>\n )}\n <div class=\"tally-content\" id={this.id}>\n <div class=\"tally-stats\">\n <div class=\"tally-item tally-yes\">\n <unity-typography variant=\"h4\" class=\"tally-count\">\n {this.yesCount}\n </unity-typography>\n <unity-typography variant=\"caption-text\" class=\"tally-label\">\n Yes\n </unity-typography>\n </div>\n <div class=\"tally-item tally-no\">\n <unity-typography variant=\"h4\" class=\"tally-count\">\n {this.noCount}\n </unity-typography>\n <unity-typography variant=\"caption-text\" class=\"tally-label\">\n No\n </unity-typography>\n </div>\n <div class=\"tally-item tally-na\">\n <unity-typography variant=\"h4\" class=\"tally-count\">\n {this.naCount}\n </unity-typography>\n <unity-typography variant=\"caption-text\" class=\"tally-label\">\n Not Applicable\n </unity-typography>\n </div>\n {unansweredCount > 0 && (\n <div class=\"tally-item tally-unanswered\">\n <unity-typography variant=\"h4\" class=\"tally-count\">\n {unansweredCount}\n </unity-typography>\n <unity-typography variant=\"caption-text\" class=\"tally-label\">\n Unanswered\n </unity-typography>\n </div>\n )}\n </div>\n <div class=\"tally-summary\">\n <unity-typography variant=\"caption-text\">\n Total Questions: {this.totalFields}\n </unity-typography>\n </div>\n </div>\n {isError && (\n <div class=\"error-message\">\n <unity-typography variant=\"caption-text\" color=\"error\">\n {this.error}\n </unity-typography>\n </div>\n )}\n </div>\n </Host>\n );\n }\n}\n","/**\n * Finds the parent stencil-form and returns its Final Form API.\n * This function correctly traverses up through nested Shadow DOM boundaries.\n *\n * @param element The host element of the component calling this function.\n * @returns A promise that resolves with the FormApi instance, or null if not found.\n */\nexport async function useFormApi(element: HTMLElement): Promise<any | null> {\n let current: HTMLElement | null = element;\n let form: Element | null = null;\n\n // Walk up the DOM tree, escaping shadow roots as we go.\n while (current) {\n // Look for the form in the current scope\n const foundForm = current.closest('stencil-form');\n if (foundForm) {\n form = foundForm;\n break; // Found it!\n }\n\n // If not found, we might be in a shadow root.\n // Let's try to escape it.\n const root = current.getRootNode();\n if (root instanceof ShadowRoot) {\n current = root.host as HTMLElement;\n } else {\n // We're in the main document and didn't find it.\n break;\n }\n }\n\n if (!form) {\n return null;\n }\n\n // Check if getApi method exists\n if (typeof (form as any).getApi !== 'function') {\n return null;\n }\n\n const formApi = await (form as any).getApi();\n \n if (!formApi) {\n return null;\n }\n \n return formApi;\n}\n","\n.hidden {\n display: none;\n}\n\n.question-container {\n border-top: 1px solid rgba(0, 0, 0, 0.08); \n padding-top: 1rem; \n}\n\n.question-title-and-helper-container {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-03)\n}\n\n.question-title-and-followup-container {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n","import { Component, ComponentInterface, Element, h, Prop, State, Watch, Event, EventEmitter } from '@stencil/core';\nimport { UdpFormQuestion } from '../udp-forms-utils/types';\nimport { UdpFormsFieldTypeEnum } from '../udp-forms-utils/enums';\nimport { FontOverrides } from '../udp-forms-utils/types';\nimport { fontOverrideMapping, overrideFont } from '../udp-forms-utils/utils';\nimport { useFormApi } from '../../form/useFormApi';\nimport { getIconFromName } from '../../../data-display/icons/iconUtils';\nimport { UdpFormsPageIdEnum } from '../udp-forms-utils/enums';\nimport { UdpFormSubmission } from '../udp-forms-utils/classes/UdpFormSubmission';\n\n@Component({\n tag: 'udp-question',\n styleUrl: 'udp-question.css',\n shadow: true,\n})\nexport class UdpQuestion {\n @Prop() question: UdpFormQuestion;\n @Prop() questionNumber: number;\n @Prop({ mutable: true }) value: string; // only used for Paragraph type (UdpFormsFieldTypeEnum.Paragraph)\n @Prop() disabled: boolean = false;\n @Prop() readonly: boolean = false;\n @Prop() styleOverrides: {\n helperText: FontOverrides;\n questionText: FontOverrides;\n paragraphText: FontOverrides;\n };\n @Prop() currentValues: { [name: string]: any } = {};\n @Prop() clientUserInfo: { id: string | null; displayName: string | null; email: string | null } = {\n id: null,\n displayName: null,\n email: null,\n }\n @Prop() udpFormSubmission: UdpFormSubmission = null;\n\n @Event() launchFollowUpFormSideSheet: EventEmitter<any>;\n\n @State() private _fieldComponent: ComponentInterface;\n @State() private tallyData: {\n yesCount: number;\n noCount: number;\n naCount: number;\n totalFields: number;\n } = { yesCount: 0, noCount: 0, naCount: 0, totalFields: 0 };\n @State() private formApi: any = null;\n\n @Element() el: HTMLElement;\n\n @Watch('question')\n @Watch('questionNumber')\n @Watch('value')\n @Watch('disabled')\n @Watch('readonly')\n @Watch('styleOverrides')\n protected propChanged() {\n this.updateFieldComponent();\n }\n\n async componentWillLoad() {\n this.updateFieldComponent();\n if (this.question.fieldTypeId === UdpFormsFieldTypeEnum.Tally) {\n await this.initializeFormApiForTally();\n }\n }\n\n private async initializeFormApiForTally() {\n try {\n this.formApi = await useFormApi(this.el);\n\n if (this.formApi) {\n // Subscribe to form changes to update tally in real-time\n const unsubscribe = this.formApi.subscribe(\n () => {\n this.calculateTally();\n },\n { active: true, dirty: true, values: true },\n );\n\n // Store unsubscribe function for cleanup if needed\n (this as any).unsubscribeFormApi = unsubscribe;\n\n // Initial calculation\n this.calculateTally();\n }\n } catch (error) {\n console.error('Failed to initialize form API for tally:', error);\n }\n }\n\n private calculateTally() {\n if (!this.formApi || this.question.fieldTypeId !== UdpFormsFieldTypeEnum.Tally) {\n return;\n }\n\n try {\n const formValues = this.formApi.getState().values;\n\n const formElement = this.el.closest('stencil-form');\n if (!formElement) {\n return;\n }\n\n // Get all udp-question elements in the form\n const questionElements = formElement.querySelectorAll('udp-question');\n const yesNoFields: string[] = [];\n\n // Identify YesNo field types\n questionElements.forEach((questionEl: any) => {\n if (questionEl.question && questionEl.question.fieldTypeId === UdpFormsFieldTypeEnum.YesNo) {\n const fieldName = `${questionEl.question.questionIdentifierKey}.value`;\n if (fieldName) {\n const shouldInclude = this.shouldIncludeFieldInTally(fieldName);\n if (shouldInclude) {\n yesNoFields.push(fieldName);\n }\n }\n }\n });\n\n // Count Yes/No/NA responses\n let yesCount = 0;\n let noCount = 0;\n let naCount = 0;\n\n yesNoFields.forEach(fieldName => {\n const [sectionKey, questionKey] = fieldName.split(\".\");\n const value = formValues[sectionKey][questionKey].value;\n\n if (value === 'true' || value === true) {\n yesCount++;\n } else if (value === 'false' || value === false) {\n noCount++;\n } else if (value === 'na') {\n naCount++;\n }\n });\n\n this.tallyData = {\n yesCount,\n noCount,\n naCount,\n totalFields: yesNoFields.length,\n };\n\n // Force a re-render to update the component\n this.updateFieldComponent();\n } catch (error) {\n console.error('Error calculating tally:', error);\n }\n }\n\n private shouldIncludeFieldInTally(fieldName: string): boolean {\n const fieldProps = this.question.fieldProperties;\n\n // If includeFields is specified, only include those fields\n if (fieldProps?.includeFields && fieldProps.includeFields.length > 0) {\n return fieldProps.includeFields.includes(fieldName);\n }\n\n // If excludeFields is specified, exclude those fields\n if (fieldProps?.excludeFields && fieldProps.excludeFields.length > 0) {\n return !fieldProps.excludeFields.includes(fieldName);\n }\n\n // Include all fields by default\n return true;\n }\n\n private updateFieldComponent() {\n this._fieldComponent = this.getFieldComponent();\n }\n\n private getFieldComponent(): ComponentInterface {\n const props = {\n name: `${this.question.questionIdentifierKey}.value`,\n required: this.question.required,\n };\n\n const fieldProps = { ...this.question.fieldProperties, id: this.questionNumber, disabled: this.disabled, readonly: this.readonly };\n switch (this.question.fieldTypeId) {\n case UdpFormsFieldTypeEnum.SingleLineText:\n return (\n <stencil-field {...props}>\n <text-field {...fieldProps} />\n </stencil-field>\n );\n case UdpFormsFieldTypeEnum.MultiLineText:\n return (\n <stencil-field {...props}>\n <text-area fullWidth={true} {...fieldProps} />\n </stencil-field>\n );\n case UdpFormsFieldTypeEnum.Checkbox:\n return (\n <stencil-field {...props}>\n <selectable-list valueKey=\"value\" displayKey=\"display\" multiSelect={true} useCheckbox={true} {...fieldProps} />\n </stencil-field>\n );\n case UdpFormsFieldTypeEnum.RadioButton:\n return (\n <stencil-field {...props}>\n <selectable-list valueKey=\"value\" displayKey=\"display\" useCheckbox={true} {...fieldProps} />\n </stencil-field>\n );\n case UdpFormsFieldTypeEnum.DropdownSingleSelect:\n case UdpFormsFieldTypeEnum.DropdownMultipleSelect:\n let options: { label: string; value: string } = fieldProps?.items?.map?.(items => ({ label: items.display, value: items.value, ...fieldProps }));\n return (\n <stencil-field {...props}>\n <udp-selector options={options ?? []} multiSelect={this.question.fieldTypeId === UdpFormsFieldTypeEnum.DropdownMultipleSelect} {...fieldProps} />\n </stencil-field>\n );\n case UdpFormsFieldTypeEnum.YesNo:\n return (\n <stencil-field {...props}>\n <selectable-list\n valueKey=\"value\"\n displayKey=\"display\"\n useCheckbox={true} // Use radio buttons\n multiSelect={false}\n items={[\n { value: 'true', display: 'Yes' },\n { value: 'false', display: 'No' },\n { value: 'na', display: 'Not Applicable' },\n ]}\n {...fieldProps}\n />\n </stencil-field>\n );\n case UdpFormsFieldTypeEnum.ListMultiSelect:\n return (\n <stencil-field {...props}>\n <selectable-list valueKey=\"value\" displayKey=\"display\" multiSelect={true} {...fieldProps} />\n </stencil-field>\n );\n case UdpFormsFieldTypeEnum.DateSelector:\n return (\n <stencil-field {...props}>\n <udp-date-selector min={fieldProps?.minDate} max={fieldProps?.maxDate} {...fieldProps} />\n </stencil-field>\n );\n case UdpFormsFieldTypeEnum.TimeSelector:\n return (\n <stencil-field {...props}>\n <udp-time-selector min={fieldProps?.minTime} max={fieldProps?.maxTime} {...fieldProps} />\n </stencil-field>\n );\n case UdpFormsFieldTypeEnum.DateTimeSelector:\n return (\n <stencil-field {...props}>\n <udp-datetime-selector max={fieldProps?.maxDateTime} min={fieldProps?.minDateTime} {...fieldProps} />\n </stencil-field>\n );\n case UdpFormsFieldTypeEnum.FileUpload:\n return (\n <stencil-field {...props}>\n <file-upload fullWidth={true} allowMultiple={false} {...fieldProps} />\n </stencil-field>\n );\n case UdpFormsFieldTypeEnum.ImageUpload:\n return (\n <stencil-field {...props}>\n <image-upload fullWidth={true} {...fieldProps} />\n </stencil-field>\n );\n case UdpFormsFieldTypeEnum.Signature:\n return (\n <div>\n <stencil-field {...props} fieldIdentifierKey={`${this.question.questionIdentifierKey}`} registerMetadata={true} metadataFieldNames={['signature.latitude', 'signature.longitude', 'signature.timestamp']}>\n <signature-input {...fieldProps} value={this.value} />\n </stencil-field>\n <stencil-field required={this.question.required} name={ `${this.question.questionIdentifierKey}.metadata.signature.fullName`}>\n <text-field {...fieldProps} label={'Full Name'}/>\n </stencil-field>\n </div>\n );\n case UdpFormsFieldTypeEnum.Paragraph:\n // Wrap in stencil-field and include a hidden input so the value is part of the form submission\n return (\n <stencil-field name={this.question.name} required={false}>\n <input type=\"hidden\" name={this.question.name} value={this.value || ''} />\n {this.value ? (\n <unity-typography id={`paragraphText${this.question.name}`} variant={this.styleOverrides?.paragraphText?.variant || 'body'}>\n {this.value}\n </unity-typography>\n ) : (\n <div />\n )}\n </stencil-field>\n );\n case UdpFormsFieldTypeEnum.Number:\n return (\n <stencil-field {...props}>\n <numeric-field {...fieldProps} />\n </stencil-field>\n );\n\n case UdpFormsFieldTypeEnum.Tally:\n return (\n <tally-display\n id={this.questionNumber}\n label={this.question.questionText || 'Response Tally'}\n yesCount={this.tallyData.yesCount}\n noCount={this.tallyData.noCount}\n naCount={this.tallyData.naCount}\n totalFields={this.tallyData.totalFields}\n {...fieldProps}\n required={false}\n />\n );\n case UdpFormsFieldTypeEnum.FormMetadataDisplay: {\n const isPersistedSubmission = !!this.udpFormSubmission?.id;\n\n // If persisted, do NOT fall back to client user (avoids showing Person A while viewing Person B's submission)\n const userDisplayName = isPersistedSubmission\n ? (this.udpFormSubmission?.userDisplayName ?? null)\n : (this.clientUserInfo?.displayName ?? null);\n\n const userEmail = isPersistedSubmission\n ? (this.udpFormSubmission?.userEmail ?? null)\n : (this.clientUserInfo?.email ?? null);\n\n const submittedOn = this.udpFormSubmission?.submittedOn ?? null;\n\n return (\n <form-metadata-display\n userDisplayName={userDisplayName}\n userEmail={userEmail}\n submittedOn={submittedOn}\n {...fieldProps}\n />\n );\n };\n case UdpFormsFieldTypeEnum.Hidden:\n default:\n return <div />;\n }\n }\n async componentDidLoad() {\n // If form API wasn't available during componentWillLoad, try again\n if (this.question.fieldTypeId === UdpFormsFieldTypeEnum.Tally && !this.formApi) {\n await this.initializeFormApiForTally();\n }\n\n // override the fonts based on style overrides\n const variantsAndOverrides = [];\n for (const override in this.styleOverrides) {\n variantsAndOverrides.push({\n id: override + this.question.name,\n fontOverride: this.styleOverrides?.[override]?.fontFamily,\n variant: this.styleOverrides?.[override]?.variant,\n });\n }\n variantsAndOverrides.forEach(override => {\n if (!fontOverrideMapping[override?.fontOverride] || !this.el || !this.el.shadowRoot) return;\n overrideFont(this.el?.shadowRoot?.getElementById?.(override.id), fontOverrideMapping[override?.fontOverride]);\n });\n }\n render() {\n const component = this._fieldComponent;\n const titleText = `${this.question.fieldTypeId === UdpFormsFieldTypeEnum.Paragraph ? '' : `${this.questionNumber}.`} ${this.question.questionText} ${\n this.question.required && this.question.fieldTypeId !== UdpFormsFieldTypeEnum.Paragraph ? '*' : ''\n }`;\n // const commentFieldProps = { disabled: this.disabled, readonly: this.readonly };\n const fieldName = `${this.question.questionIdentifierKey}.value`;\n const [sectionKey, questionKey] = fieldName.split(\".\");\n\n if (!component) return null;\n return (\n <div\n class={{\n 'hidden': this.question.fieldTypeId === UdpFormsFieldTypeEnum.Hidden,\n 'question-container': true,\n }}\n >\n <div class=\"question-title-and-helper-container\">\n <div class=\"question-title-and-followup-container\">\n {this.question.questionText && (\n <unity-typography\n id={`questionText${this.question.name}`}\n variant={this.styleOverrides?.questionText?.variant || 'h3'}\n >\n {titleText}\n </unity-typography>\n )}\n <div>\n {this.question.fieldProperties.allowFollowUpForms && (\n (() => {\n const metadata = this.currentValues[sectionKey][questionKey]?.metadata;\n const followUpId = metadata?.followUpFormSubmissionId;\n if (followUpId) {\n // Valid GUID → show arrow icon to open follow-up form\n const url = `/page/${UdpFormsPageIdEnum.FormRendererPageId}?udpf_submissionId=${followUpId}`;\n return (\n <stencil-icon-button\n icon={getIconFromName('link')}\n tooltip=\"Open Follow-Up Form\"\n onClick={() => window.open(url, '_blank')}\n />\n );\n }\n\n if (!this.readonly) {\n // No valid follow-up yet → show link icon to create one\n return (\n <stencil-icon-button\n icon={getIconFromName('document')}\n tooltip=\"Create Follow-Up Form\"\n onClick={() => {\n console.log('clicked create follow up form')\n this.launchFollowUpFormSideSheet.emit({ sectionKey, questionKey });\n }}\n />\n );\n }\n \n })()\n )}\n </div>\n </div>\n {this.question.helperText && (\n <unity-typography\n id={`helperText${this.question.name}`}\n variant={this.styleOverrides?.helperText?.variant || 'caption-text'}\n >\n {this.question.helperText}\n </unity-typography>\n )}\n </div>\n\n {component}\n\n {this.question.fieldProperties.allowFollowUpForms && (\n <div>\n <stencil-field hidden={true} name={`${this.question.questionIdentifierKey}.metadata.followUpParentFormId`}>\n <text-field />\n </stencil-field>\n <stencil-field hidden={true} name={`${this.question.questionIdentifierKey}.metadata.followUpParentFormVersion`}>\n <text-field />\n </stencil-field>\n <stencil-field hidden={true} name={`${this.question.questionIdentifierKey}.metadata.followUpParentFormSubmissionId`}>\n <text-field />\n </stencil-field>\n </div>\n )}\n {this.question.fieldProperties.allowComments && (\n <udp-question-comments\n question={this.question}\n currentValues={this.currentValues}\n userId={this.clientUserInfo.id}\n />\n )}\n </div>\n );\n }\n}\n",".question-comment-display {\n position: relative;\n display: flex;\n flex-direction: column;\n gap: var(--spacing-03);\n margin: var(--spacing-05) 0;\n border: 1px solid var(--border-color, #ccc);\n border-radius: 6px;\n padding: var(--spacing-05) var(--spacing-04);\n /* Force long words to wrap to prevent box overflow */\n overflow-wrap: break-word; \n word-wrap: break-word;\n}\n\n/* Target the typography component that holds the comment body */\n.question-comment-display unity-typography:not(.question-comment-header) {\n display: block; /* Allows the element to respect width/wrapping */\n white-space: pre-wrap; /* Respects newlines (\\n) and auto-wraps text */\n word-break: break-word; /* Safety for very long strings of characters */\n}\n\n.question-comment-display > .question-comment-header {\n position: absolute;\n bottom: -0.6em; \n right: 1em;\n background: white; \n padding: 0 0.4em;\n font-size: 0.85em;\n white-space: nowrap; /* Keeps the \"Name on Date\" on one line */\n}\n\n.question-comment-add-comment-button {\n display: flex;\n justify-content: center;\n margin: var(--spacing-03) 0;\n}\n\n.question-comment-action-container {\n display: flex;\n justify-content: end;\n}","import { Component, h, Prop, Event, EventEmitter } from '@stencil/core';\nimport { UdpFormQuestion, Guid } from '../../udp-forms-utils/types';\nimport { dateFormatter } from '../../udp-forms-utils/utils';\n\n@Component({\n tag: 'udp-question-comments',\n styleUrl: 'udp-question-comments.css',\n shadow: true,\n})\nexport class UdpQuestionComments {\n @Prop() question: UdpFormQuestion;\n @Prop() commentFieldProps: object = {};\n @Prop() currentValues: { [name: string]: any } = {};\n @Prop() userId: Guid | null = null;\n\n @Event({ bubbles: true, composed: true }) questionCommentAction: EventEmitter<{\n type: 'add' | 'save' | 'edit' | 'delete' | 'editClose';\n questionIdentifierKey: string;\n commentId: string;\n }>;\n\n private emitQuestionCommentAction(type: 'add' | 'save' | 'edit' | 'delete' | 'editClose', commentId) {\n this.questionCommentAction.emit({\n type,\n questionIdentifierKey: this.question.questionIdentifierKey,\n commentId,\n });\n }\n\n private handleCommentAdd() {\n this.emitQuestionCommentAction('add', null);\n }\n private handleCommentSave(commentId) {\n this.emitQuestionCommentAction('save', commentId);\n }\n private handleCommentEdit(commentId) {\n this.emitQuestionCommentAction('edit', commentId);\n }\n private handleCommentDelete(commentId) {\n this.emitQuestionCommentAction('delete', commentId);\n }\n private handleCommentEditClose(commentId) {\n this.emitQuestionCommentAction('editClose', commentId);\n }\n\n render() {\n const [sectionName, questionName] = this.question.questionIdentifierKey.split('.');\n const questionData = this.currentValues?.[sectionName]?.[questionName] || {\n comments: [],\n draftComments: [],\n };\n\n // normalize incoming shape (back-compat)\n const savedComments = Array.isArray(questionData.comments)\n ? questionData.comments\n : questionData.comments\n ? [questionData.comments]\n : [];\n const draftComments = Array.isArray(questionData.draftComments)\n ? questionData.draftComments\n : questionData.draftComments\n ? [questionData.draftComments]\n : [];\n\n // enforce single active action UX:\n // - Only one draft is shown/active at a time (pick first draft if present)\n\n // detect any draft anywhere in the form's currentValues\n const activeDraft = draftComments.length > 0 ? draftComments[0] : null;\n const isAnyQuestionContainsActiveDraft = Object.values(this.currentValues || {}).some((section: any) =>\n Object.values(section || {}).some((q: any) => {\n if (!q) return false;\n const drafts = q.draftComments;\n if (!drafts) return false;\n if ( Array.isArray(drafts) && drafts.length < 1) return false\n\n return true\n }),\n );\n\n return (\n <div>\n {/* Render saved comments — disable actions if a draft is active */}\n {savedComments.map((commentObj, idx) => {\n const commentsIdentifierValueKey = `${this.question.questionIdentifierKey}.comments[${idx}].value`;\n const isOwner = commentObj?.userId === this.userId;\n const showActions = !activeDraft && isOwner; // only show edit/delete when no active draft and owner\n \n\n // return the comment edit component if it's the active draft\n if (activeDraft && commentObj.commentId == activeDraft.commentId) {\n return (\n <div class=\"question-comment-draft-container\" key={activeDraft.commentId || `draft-0`}>\n <stencil-field\n name={`${this.question.questionIdentifierKey}.draftComments[0].value`}\n required={true}\n ignoreDirty={true}\n >\n <text-area {...this.commentFieldProps} label=\"Comment:\" placeholder=\"Add a comment\" />\n </stencil-field>\n\n <div class=\"question-comment-action-container\">\n <udp-button\n variant=\"text\"\n onClick={() => this.handleCommentSave(activeDraft.commentId)}\n startIcon={<udp-icon iconName=\"save\" color=\"inherit\" />}\n >\n Save\n </udp-button>\n <udp-button\n variant=\"text\"\n onClick={() => this.handleCommentDelete(activeDraft.commentId)}\n startIcon={<udp-icon iconName=\"trashCan\" color=\"inherit\" />}\n >\n Delete\n </udp-button>\n <udp-button\n variant=\"text\"\n onClick={() => this.handleCommentEditClose(activeDraft.commentId)}\n startIcon={<udp-icon iconName=\"close16\" color=\"inherit\" />}\n >\n Cancel\n </udp-button>\n </div>\n </div>\n )\n }\n\n // return the comment display component \n return !commentObj?.isDeleted ? (\n <div class=\"question-comment-input-container\" key={commentObj.commentId || idx}>\n <stencil-field name={commentsIdentifierValueKey} style={{ display: 'none' }}>\n <text-area disabled={true} />\n </stencil-field>\n\n <div class=\"question-comment-display\">\n <unity-typography variant=\"h4\" color=\"inherit\" class=\"question-comment-header\">\n {`${commentObj?.userDisplayName} ${\n commentObj?.timestamp ? `on ${dateFormatter(commentObj.timestamp, 'short')}` : ''\n }`}\n </unity-typography>\n {commentObj?.value}\n </div>\n <div class=\"question-comment-action-container\">\n {showActions && !isAnyQuestionContainsActiveDraft && (\n <div>\n <udp-button\n variant=\"text\"\n onClick={() => this.handleCommentEdit(commentObj.commentId)}\n startIcon={<udp-icon iconName=\"edit\" color=\"inherit\" />}\n >\n Edit\n </udp-button>\n </div>\n )}\n </div>\n </div>\n ) : (\n <div></div>\n );\n })}\n\n {/* New commend at the bottom of the comment thread */}\n {activeDraft && activeDraft.isTempComment && !savedComments.includes(c => c.commentId == activeDraft.commentId) && (\n <div class=\"question-comment-draft-container\" key={activeDraft.commentId || `draft-0`}>\n <stencil-field\n name={`${this.question.questionIdentifierKey}.draftComments[0].value`}\n required={true}\n ignoreDirty={true}\n >\n <text-area {...this.commentFieldProps} label=\"Comment:\" placeholder=\"Add a comment\" />\n </stencil-field>\n\n <div class=\"question-comment-action-container\">\n <udp-button\n variant=\"text\"\n onClick={() => this.handleCommentEditClose(activeDraft.commentId)}\n startIcon={<udp-icon iconName=\"trashCan\" color=\"inherit\" />}\n >\n Cancel\n </udp-button>\n <udp-button\n variant=\"text\"\n onClick={() => this.handleCommentSave(activeDraft.commentId)}\n startIcon={<udp-icon iconName=\"save\" color=\"inherit\" />}\n >\n Save\n </udp-button>\n </div>\n </div>\n )}\n\n {/* Add button only when there is no active draft */}\n {!activeDraft && !isAnyQuestionContainsActiveDraft &&(\n <div class=\"question-comment-add-comment-button\">\n <udp-button\n variant=\"text\"\n onClick={() => this.handleCommentAdd()}\n startIcon={<udp-icon iconName=\"add\" color=\"inherit\" />}\n >\n Add a Comment\n </udp-button>\n </div>\n )}\n </div>\n );\n }\n}\n","/* Single save button that moves between header and floating positions */\n\n/* Floating mode - positioned fixed in top-right, accounting for app bar */\n.floating-save-button {\n position: fixed;\n top: 5rem; /* Increased from 2rem to account for app bar height */\n right: 2rem;\n z-index: 1000;\n animation: slideInDown 0.3s ease-out;\n}\n\n/* Inline mode - positioned relative for header placement */\n.inline-save-button {\n position: relative;\n display: inline-flex;\n align-items: center;\n margin-left: auto; /* Push to right side of header */\n}\n\n/* Common styles for both modes */\n.floating-save-button.saving,\n.inline-save-button.saving {\n pointer-events: none;\n}\n\n/* Saving state styling */\n.saving-state {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.75rem 1rem;\n background: rgba(0, 0, 0, 0.8);\n color: white;\n border-radius: 8px;\n font-size: 0.9rem;\n}\n\n/* Saved state styling */\n.saved-state {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.75rem 1rem;\n background: rgba(34, 139, 34, 0.9); /* Forest green background */\n color: white;\n border-radius: 8px;\n font-size: 0.9rem;\n animation: fadeIn 0.3s ease-out;\n}\n\n/* Inline saving state - more compact */\n.inline-save-button .saving-state {\n padding: 0.5rem 0.75rem;\n background: rgba(0, 0, 0, 0.6);\n font-size: 0.8rem;\n}\n\n/* Inline saved state - more compact */\n.inline-save-button .saved-state {\n padding: 0.5rem 0.75rem;\n background: rgba(34, 139, 34, 0.8);\n font-size: 0.8rem;\n}\n\n/* Error tooltip positioning - for floating button (top-right) */\n.save-error-tooltip {\n position: absolute;\n top: 100%;\n right: 0;\n margin-top: 0.5rem;\n background: #dc3545;\n color: white;\n padding: 0.5rem 1rem;\n border-radius: 8px;\n font-size: 0.8rem;\n white-space: nowrap;\n box-shadow: 0 4px 12px rgba(220, 53, 69, 0.3);\n animation: fadeIn 0.3s ease-out;\n z-index: 1001;\n}\n\n.save-error-tooltip::after {\n content: '';\n position: absolute;\n bottom: 100%;\n right: 1rem;\n border: 6px solid transparent;\n border-bottom-color: #dc3545;\n}\n\n/* Inline mode error tooltip - position differently */\n.inline-save-button .save-error-tooltip {\n top: 100%;\n bottom: auto;\n margin-top: 0.5rem;\n margin-bottom: 0;\n}\n\n.inline-save-button .save-error-tooltip::after {\n top: -6px;\n border-top-color: transparent;\n border-bottom-color: #dc3545;\n}\n\n/* Animations */\n@keyframes slideInDown {\n from {\n opacity: 0;\n transform: translateY(-20px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n/* Responsive adjustments */\n@media (max-width: 768px) {\n .floating-save-button {\n bottom: 1rem;\n right: 1rem;\n top: auto; /* Override fixed top position on small screens */\n }\n\n .saving-state {\n padding: 0.6rem 0.8rem;\n font-size: 0.8rem;\n }\n\n .inline-save-button .saving-state {\n padding: 0.4rem 0.6rem;\n font-size: 0.75rem;\n }\n}\n\n/* Override icon color to primary when button is inherit color */\n.primary-icon {\n --icon-color: var(--primary-color, #1976d2);\n}\n\n.primary-icon::part(icon) {\n fill: var(--icon-color) !important;\n}\n\n/* Alternative approach using deep selector */\n.primary-icon udp-icon-button::part(icon),\n.primary-icon .icon {\n fill: var(--primary-color, #1976d2) !important;\n}\n\n/* Reduced motion support */\n@media (prefers-reduced-motion: reduce) {\n .floating-save-button,\n .save-error-tooltip {\n animation: none;\n }\n}\n","import { Component, Prop, h, State, Element, Listen } from '@stencil/core';\nimport Save from '@carbon/icons/es/save/20';\nimport { useFormApi } from '../../../form/useFormApi';\n\n@Component({\n tag: 'udp-save-draft-button',\n styleUrl: 'udp-save-draft-button.css',\n shadow: true,\n})\nexport class UdpSaveDraftButton {\n @Element() el: HTMLElement;\n\n @Prop() isVisible: boolean = false;\n @Prop() isSaving: boolean = false;\n @Prop() saveErrorMessage: string | null = null;\n @Prop() showSavedMessage: boolean = false;\n @Prop() handleSave: (values?: any) => void;\n\n @State() shouldBeInline: boolean = false;\n @State() private formApi: any | null = null;\n\n private resizeObserver: ResizeObserver;\n private checkOverlapTimeoutId: any;\n\n async componentDidLoad() {\n this.formApi = await useFormApi(this.el);\n this.checkForOverlap();\n this.setupOverlapDetection();\n }\n\n disconnectedCallback() {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n }\n if (this.checkOverlapTimeoutId) {\n clearTimeout(this.checkOverlapTimeoutId);\n }\n }\n\n @Listen('resize', { target: 'window' })\n handleWindowResize() {\n this.debouncedOverlapCheck();\n }\n\n private setupOverlapDetection() {\n if (typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver(() => {\n this.debouncedOverlapCheck();\n });\n const formContainer = this.el.closest('udp-forms-ui, .form-container, udp-container');\n if (formContainer) {\n this.resizeObserver.observe(formContainer);\n }\n const mainContent = document.querySelector('main, [role=\"main\"]') || document.body;\n if (mainContent) {\n this.resizeObserver.observe(mainContent);\n }\n }\n }\n\n private debouncedOverlapCheck() {\n if (this.checkOverlapTimeoutId) {\n clearTimeout(this.checkOverlapTimeoutId);\n }\n this.checkOverlapTimeoutId = setTimeout(() => {\n this.checkForOverlap();\n }, 100);\n }\n\n private checkForOverlap() {\n // This logic determines which style to apply.\n // Using 1024px as the breakpoint to switch between floating and inline.\n const minWidthNeeded = 1280;\n this.shouldBeInline = window.innerWidth < minWidthNeeded;\n }\n\n private handleSaveClick = async () => {\n if (!this.formApi || this.isSaving) {\n return;\n }\n if (typeof this.handleSave !== 'function') {\n return;\n }\n const values = this.formApi.getState().values;\n try {\n await this.handleSave(values);\n this.formApi.reset(values);\n } catch (error) {\n console.error('The onSave handler threw an error. The form will remain dirty.', error);\n }\n };\n\n render() {\n if (!this.isVisible && !this.showSavedMessage) {\n return null;\n }\n\n // Dynamically set the class based on screen size.\n // This will toggle between your .floating-save-button and .inline-save-button styles.\n const containerClass = this.shouldBeInline ? 'inline-save-button' : 'floating-save-button';\n const isInlineMode = this.shouldBeInline;\n\n return (\n <div class={`${containerClass} ${this.isSaving ? 'saving' : ''} ${this.showSavedMessage ? 'saved' : ''}`}>\n {this.isSaving ? (\n <div class=\"saving-state\">\n <unity-spinner size=\"small\" />\n {!isInlineMode && <span>Saving...</span>}\n </div>\n ) : this.isVisible ? (\n <udp-icon-button\n icon={Save}\n onClick={this.handleSaveClick}\n tooltip={'Save Changes'}\n variant=\"contained\"\n color={isInlineMode ? 'inherit' : 'primary'}\n iconColor={isInlineMode ? 'primary' : null}\n size={isInlineMode ? 'small' : 'medium'}\n >\n {isInlineMode ? '' : 'Save Changes'}\n </udp-icon-button>\n ) : (\n <div class=\"saved-state\">\n <span>Saved</span>\n </div>\n )}\n\n {this.saveErrorMessage && <div class=\"save-error-tooltip\">{this.saveErrorMessage}</div>}\n </div>\n );\n }\n}\n"],"names":[],"mappings":"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"}
|