udp-stencil-component-library 1.0.2 → 1.0.3

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.
Files changed (638) hide show
  1. package/dist/cjs/add-map-feature-popup_4.cjs.entry.js +11 -11
  2. package/dist/cjs/advanced-search_50.cjs.entry.js +109 -41
  3. package/dist/cjs/advanced-search_50.cjs.entry.js.map +1 -1
  4. package/dist/cjs/ag-grid-base_2.cjs.entry.js +2 -2
  5. package/dist/cjs/api-method-grid.cjs.entry.js +1 -1
  6. package/dist/cjs/check-box.cjs.entry.js +2 -2
  7. package/dist/cjs/chip-section.cjs.entry.js +2 -2
  8. package/dist/cjs/client-side-grid.cjs.entry.js +1 -1
  9. package/dist/cjs/color-preview.cjs.entry.js +1 -1
  10. package/dist/cjs/date-time-renderer.file-upload-renderer.list-options-renderer.question-specific-configs-renderer.text-input-renderer.entry.cjs.js.map +1 -1
  11. package/dist/cjs/date-time-renderer_5.cjs.entry.js +17 -16
  12. package/dist/cjs/date-time-renderer_5.cjs.entry.js.map +1 -1
  13. package/dist/cjs/enums-CA1UjPVU.js +25 -0
  14. package/dist/cjs/enums-CA1UjPVU.js.map +1 -0
  15. package/dist/cjs/feature-details-card_2.cjs.entry.js +5 -5
  16. package/dist/cjs/file-upload.selectable-list.stencil-field.entry.cjs.js.map +1 -1
  17. package/dist/cjs/file-upload_3.cjs.entry.js +73 -29
  18. package/dist/cjs/file-upload_3.cjs.entry.js.map +1 -1
  19. package/dist/cjs/index-Bu1pSYrV.js +8 -8
  20. package/dist/cjs/inputs-example.cjs.entry.js +2 -2
  21. package/dist/cjs/inputs-example.cjs.entry.js.map +1 -1
  22. package/dist/cjs/inputs-example.entry.cjs.js.map +1 -1
  23. package/dist/cjs/loader.cjs.js +1 -1
  24. package/dist/cjs/map-component_2.cjs.entry.js +2 -2
  25. package/dist/cjs/numeric-field.text-area.udp-date-selector.udp-datetime-selector.udp-time-selector.entry.cjs.js.map +1 -1
  26. package/dist/cjs/numeric-field_5.cjs.entry.js +194 -19
  27. package/dist/cjs/numeric-field_5.cjs.entry.js.map +1 -1
  28. package/dist/cjs/page-renderer.cjs.entry.js +1 -1
  29. package/dist/cjs/question-configs-renderer.section-configs-renderer.udp-forms-builder-menu.udp-forms-builder-question-item.udp-forms-builder-style-override.entry.cjs.js.map +1 -1
  30. package/dist/cjs/question-configs-renderer_5.cjs.entry.js +17 -4
  31. package/dist/cjs/question-configs-renderer_5.cjs.entry.js.map +1 -1
  32. package/dist/cjs/resource-timeline-calendar.cjs.entry.js +1 -1
  33. package/dist/cjs/resource-timeline-primary-bar.cjs.entry.js +1 -1
  34. package/dist/cjs/server-side-grid.cjs.entry.js +1 -1
  35. package/dist/cjs/signature-input.stencil-form.tally-display.udp-icon-button.udp-question.udp-save-draft-button.entry.cjs.js.map +1 -0
  36. package/dist/cjs/{signature-input_4.cjs.entry.js → signature-input_6.cjs.entry.js} +359 -157
  37. package/dist/cjs/signature-input_6.cjs.entry.js.map +1 -0
  38. package/dist/cjs/stencil-library.cjs.js +1 -1
  39. package/dist/cjs/udp-container-query-grid-item.cjs.entry.js +1 -1
  40. package/dist/cjs/udp-container-query-grid.cjs.entry.js +1 -1
  41. package/dist/cjs/udp-container-query.cjs.entry.js +2 -2
  42. package/dist/cjs/udp-container.cjs.entry.js +2 -2
  43. package/dist/cjs/udp-drive-utils-BOyI3h7K.js +180 -0
  44. package/dist/cjs/udp-drive-utils-BOyI3h7K.js.map +1 -0
  45. package/dist/cjs/udp-forms-builder.cjs.entry.js +133 -152
  46. package/dist/cjs/udp-forms-builder.cjs.entry.js.map +1 -1
  47. package/dist/cjs/udp-forms-builder.entry.cjs.js.map +1 -1
  48. package/dist/cjs/udp-forms-list-card_2.cjs.entry.js +5 -5
  49. package/dist/cjs/udp-forms-list.cjs.entry.js +1 -1
  50. package/dist/cjs/udp-forms-renderer.cjs.entry.js +185 -175
  51. package/dist/cjs/udp-forms-renderer.cjs.entry.js.map +1 -1
  52. package/dist/cjs/udp-forms-renderer.entry.cjs.js.map +1 -1
  53. package/dist/cjs/udp-forms-ui.cjs.entry.js +113 -82
  54. package/dist/cjs/udp-forms-ui.cjs.entry.js.map +1 -1
  55. package/dist/cjs/udp-forms-ui.entry.cjs.js.map +1 -1
  56. package/dist/cjs/udp-map.cjs.entry.js +3 -3
  57. package/dist/cjs/udp-page.cjs.entry.js +1 -1
  58. package/dist/cjs/udp-split-screen.cjs.entry.js +1 -1
  59. package/dist/cjs/udp-stepper-demo.cjs.entry.js +1 -1
  60. package/dist/cjs/udp-vertical-spacer.cjs.entry.js +1 -1
  61. package/dist/cjs/utils-CdiEmuDf.js +34 -0
  62. package/dist/cjs/utils-CdiEmuDf.js.map +1 -0
  63. package/dist/collection/collection-manifest.json +2 -0
  64. package/dist/collection/components/my-component/UI/buttons/icon-button/stencil-icon-button.js +22 -0
  65. package/dist/collection/components/my-component/UI/buttons/icon-button/stencil-icon-button.js.map +1 -1
  66. package/dist/collection/components/my-component/UI/buttons/udp-icon-button/udp-icon-button.css +269 -0
  67. package/dist/collection/components/my-component/UI/buttons/udp-icon-button/udp-icon-button.js +392 -0
  68. package/dist/collection/components/my-component/UI/buttons/udp-icon-button/udp-icon-button.js.map +1 -0
  69. package/dist/collection/components/my-component/UI/forms/form/stencil-field.js +38 -14
  70. package/dist/collection/components/my-component/UI/forms/form/stencil-field.js.map +1 -1
  71. package/dist/collection/components/my-component/UI/forms/form/stencil-form.js +81 -28
  72. package/dist/collection/components/my-component/UI/forms/form/stencil-form.js.map +1 -1
  73. package/dist/collection/components/my-component/UI/forms/udp-forms/mockData.js +1 -0
  74. package/dist/collection/components/my-component/UI/forms/udp-forms/mockData.js.map +1 -1
  75. package/dist/collection/components/my-component/UI/forms/udp-forms/types.js.map +1 -1
  76. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/question-specific-configs-renderer.js +13 -17
  77. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/question-specific-configs-renderer.js.map +1 -1
  78. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/question_type_renderers/date-time-renderer.js +4 -3
  79. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/question_type_renderers/date-time-renderer.js.map +1 -1
  80. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/question_type_renderers/section-configs-renderer.css +0 -1
  81. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/question_type_renderers/section-configs-renderer.js +16 -3
  82. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/question_type_renderers/section-configs-renderer.js.map +1 -1
  83. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/question_type_renderers/text-input-renderer.js +2 -2
  84. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-builder/udp-forms-builder.js +135 -159
  85. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-builder/udp-forms-builder.js.map +1 -1
  86. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-list/udp-forms-list-card.js +5 -5
  87. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-list/udp-forms-list.js +1 -1
  88. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-renderer/form-handler/PrivateFormHandler.js +1 -5
  89. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-renderer/form-handler/PrivateFormHandler.js.map +1 -1
  90. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-renderer/form-handler/PublicFormHandler.js +1 -0
  91. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-renderer/form-handler/PublicFormHandler.js.map +1 -1
  92. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-renderer/udp-forms-renderer.js +188 -172
  93. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-renderer/udp-forms-renderer.js.map +1 -1
  94. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-renderer/udp-forms-ui.css +175 -0
  95. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-renderer/udp-forms-ui.js +211 -88
  96. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-renderer/udp-forms-ui.js.map +1 -1
  97. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-renderer/udp-save-draft-button/udp-save-draft-button.css +166 -0
  98. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-renderer/udp-save-draft-button/udp-save-draft-button.js +215 -0
  99. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-renderer/udp-save-draft-button/udp-save-draft-button.js.map +1 -0
  100. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-question/udp-question.js +5 -5
  101. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-question/udp-question.js.map +1 -1
  102. package/dist/collection/components/my-component/UI/grid/ag-table/ag-table.js +1 -1
  103. package/dist/collection/components/my-component/UI/grid/ambient-template-grid/ambient-template-grid.js +15 -15
  104. package/dist/collection/components/my-component/UI/grid/grid-primary-bar/grid-primary-bar.js +2 -2
  105. package/dist/collection/components/my-component/UI/grid/hotlists/udp-hotlist-form/udp-hotlist-form.js +1 -1
  106. package/dist/collection/components/my-component/UI/grid/new-grid/ag-grid-base.js +1 -1
  107. package/dist/collection/components/my-component/UI/grid/new-grid/api-method-grid.js +1 -1
  108. package/dist/collection/components/my-component/UI/grid/new-grid/client-side-grid.js +1 -1
  109. package/dist/collection/components/my-component/UI/grid/new-grid/grid-header.js +1 -1
  110. package/dist/collection/components/my-component/UI/grid/new-grid/server-side-grid.js +1 -1
  111. package/dist/collection/components/my-component/UI/grid/resource-timeline-calendar/resource-timeline-calendar.js +1 -1
  112. package/dist/collection/components/my-component/UI/grid/resource-timeline-calendar/resource-timeline-primary-bar.js +1 -1
  113. package/dist/collection/components/my-component/UI/inputs/checkbox/check-box.js +2 -2
  114. package/dist/collection/components/my-component/UI/inputs/date-selector/udp-date-selector.js +3 -3
  115. package/dist/collection/components/my-component/UI/inputs/date-time-selector/udp-datetime-selector.js +3 -3
  116. package/dist/collection/components/my-component/UI/inputs/file-upload/file-upload.js +35 -22
  117. package/dist/collection/components/my-component/UI/inputs/file-upload/file-upload.js.map +1 -1
  118. package/dist/collection/components/my-component/UI/inputs/file-upload/udp-drive-utils.js +202 -10
  119. package/dist/collection/components/my-component/UI/inputs/file-upload/udp-drive-utils.js.map +1 -1
  120. package/dist/collection/components/my-component/UI/inputs/numeric-field/numeric-field.js +6 -6
  121. package/dist/collection/components/my-component/UI/inputs/numeric-field/numeric-field.js.map +1 -1
  122. package/dist/collection/components/my-component/UI/inputs/signature-input/signature-input.js +52 -22
  123. package/dist/collection/components/my-component/UI/inputs/signature-input/signature-input.js.map +1 -1
  124. package/dist/collection/components/my-component/UI/inputs/tally/tally.js +2 -2
  125. package/dist/collection/components/my-component/UI/inputs/text-area/text-area.js +99 -3
  126. package/dist/collection/components/my-component/UI/inputs/text-area/text-area.js.map +1 -1
  127. package/dist/collection/components/my-component/UI/inputs/text-field/text-field.js +99 -3
  128. package/dist/collection/components/my-component/UI/inputs/text-field/text-field.js.map +1 -1
  129. package/dist/collection/components/my-component/UI/inputs/time-selector/udp-time-selector.js +132 -6
  130. package/dist/collection/components/my-component/UI/inputs/time-selector/udp-time-selector.js.map +1 -1
  131. package/dist/collection/components/my-component/UI/inputs/toggle/stencil-toggle.js +4 -4
  132. package/dist/collection/components/my-component/UI/inputs/udp-selector/udp-selector.js +4 -4
  133. package/dist/collection/components/my-component/UI/layout/udp-container/udp-container.js +2 -2
  134. package/dist/collection/components/my-component/UI/layout/udp-container-query/udp-container-query.js +2 -2
  135. package/dist/collection/components/my-component/UI/layout/udp-container-query-grid/udp-container-query-grid.js +1 -1
  136. package/dist/collection/components/my-component/UI/layout/udp-container-query-grid-item/udp-container-query-grid-item.js +1 -1
  137. package/dist/collection/components/my-component/UI/layout/udp-page/udp-page.js +1 -1
  138. package/dist/collection/components/my-component/UI/layout/udp-split-screen/udp-split-screen.js +1 -1
  139. package/dist/collection/components/my-component/UI/layout/udp-vertical-spacer.js +1 -1
  140. package/dist/collection/components/my-component/UI/loaders/udp-grid-loader/udp-grid-loader.js +2 -2
  141. package/dist/collection/components/my-component/UI/loaders/udp-linear-loader/udp-linear-loader.js +1 -1
  142. package/dist/collection/components/my-component/UI/loaders/udp-skeleton-loading.js +1 -1
  143. package/dist/collection/components/my-component/UI/map/udp-map/map-component.js +1 -1
  144. package/dist/collection/components/my-component/UI/map/udp-map/popups/add-map-feature-popup.js +3 -3
  145. package/dist/collection/components/my-component/UI/map/udp-map/popups/feature-details-card/feature-details-card.js +4 -4
  146. package/dist/collection/components/my-component/UI/map/udp-map/popups/feature-details-popup.js +1 -1
  147. package/dist/collection/components/my-component/UI/map/udp-map/popups/select-layer-popup.js +1 -1
  148. package/dist/collection/components/my-component/UI/map/udp-map/popups/split-line-popup.js +1 -1
  149. package/dist/collection/components/my-component/UI/map/udp-map/toolbar/map-toolbar.js +6 -6
  150. package/dist/collection/components/my-component/UI/map/udp-map/udp-map-toolbar.js +1 -1
  151. package/dist/collection/components/my-component/UI/map/udp-map/udp-map.js +3 -3
  152. package/dist/collection/components/my-component/UI/menu/menu-item/udp-menu-item.js +2 -2
  153. package/dist/collection/components/my-component/UI/stepper/udp-stepper-demo.js +1 -1
  154. package/dist/collection/components/my-component/UI/tabs/tab/tabs/udp-tabs.js +1 -1
  155. package/dist/collection/components/my-component/UI/tabs/tab/udp-tab.js +1 -1
  156. package/dist/collection/components/my-component/UI/toolbars/app-bar/app-bar.js +1 -1
  157. package/dist/collection/components/my-component/demo/ambient-demo-container.js +1 -1
  158. package/dist/collection/components/test-component/inputs-example/inputs-example.js +2 -2
  159. package/dist/collection/components/test-component/inputs-example/inputs-example.js.map +1 -1
  160. package/dist/collection/page-renderer/page-renderer.js +1 -1
  161. package/dist/collection/theme/color-preview/color-preview.js +1 -1
  162. package/dist/collection/udp-utilities/layout/udp-dynamic-container-with-menu/chip-section/chip-section.js +2 -2
  163. package/dist/collection/udp-utilities/layout/udp-dynamic-container-with-menu/udp-dynamic-container-with-menu.js +1 -1
  164. package/dist/components/add-map-feature-popup.js +1 -1
  165. package/dist/components/advanced-search-grouped.js +1 -1
  166. package/dist/components/advanced-search.js +1 -1
  167. package/dist/components/ag-grid-base.js +1 -1
  168. package/dist/components/ag-table.js +1 -1
  169. package/dist/components/ambient-demo-container.js +1 -1
  170. package/dist/components/ambient-template-grid.js +1 -1
  171. package/dist/components/api-method-grid.js +4 -4
  172. package/dist/components/app-bar.js +1 -1
  173. package/dist/components/chart-container.js +1 -1
  174. package/dist/components/check-box-group.js +1 -1
  175. package/dist/components/check-box.js +1 -1
  176. package/dist/components/chip-section.js +3 -3
  177. package/dist/components/client-side-grid.js +3 -3
  178. package/dist/components/color-preview.js +1 -1
  179. package/dist/components/date-time-renderer.js +1 -1
  180. package/dist/components/edit-view-form-dialog.js +1 -1
  181. package/dist/components/feature-details-card.js +1 -1
  182. package/dist/components/feature-details-popup.js +1 -1
  183. package/dist/components/file-upload-renderer.js +1 -1
  184. package/dist/components/file-upload.js +1 -1
  185. package/dist/components/grid-header.js +1 -1
  186. package/dist/components/grid-primary-bar.js +1 -1
  187. package/dist/components/inputs-example.js +15 -15
  188. package/dist/components/inputs-example.js.map +1 -1
  189. package/dist/components/list-options-renderer.js +1 -1
  190. package/dist/components/map-component.js +1 -1
  191. package/dist/components/map-toolbar.js +1 -1
  192. package/dist/components/my-component.js +26 -26
  193. package/dist/components/numeric-field.js +1 -1
  194. package/dist/components/{p-CfZR5rek.js → p-0F2I6Qvn.js} +3 -3
  195. package/dist/components/{p-CfZR5rek.js.map → p-0F2I6Qvn.js.map} +1 -1
  196. package/dist/components/{p-BbC2Itep.js → p-1CPON0Xx.js} +5 -5
  197. package/dist/components/{p-BbC2Itep.js.map → p-1CPON0Xx.js.map} +1 -1
  198. package/dist/components/{p-IlXn87Ki.js → p-1Cv4cku0.js} +4 -14
  199. package/dist/components/p-1Cv4cku0.js.map +1 -0
  200. package/dist/components/{p-CTn3c76I.js → p-1uly65Sv.js} +3 -3
  201. package/dist/components/{p-CTn3c76I.js.map → p-1uly65Sv.js.map} +1 -1
  202. package/dist/components/{p-C8cWVxBF.js → p-26jyxB7s.js} +66 -27
  203. package/dist/components/p-26jyxB7s.js.map +1 -0
  204. package/dist/components/{p-GQEOUb0c.js → p-4hWvEEZf.js} +5 -5
  205. package/dist/components/{p-GQEOUb0c.js.map → p-4hWvEEZf.js.map} +1 -1
  206. package/dist/components/{p-HrsHnWeG.js → p-6EzLtNtq.js} +6 -6
  207. package/dist/components/{p-HrsHnWeG.js.map → p-6EzLtNtq.js.map} +1 -1
  208. package/dist/components/{p-syf9yo9-.js → p-8avkq8Fj.js} +4 -4
  209. package/dist/components/{p-syf9yo9-.js.map → p-8avkq8Fj.js.map} +1 -1
  210. package/dist/components/{p-B8k9GGZB.js → p-8paOuPay.js} +4 -4
  211. package/dist/components/{p-B8k9GGZB.js.map → p-8paOuPay.js.map} +1 -1
  212. package/dist/components/{p-DntePo7I.js → p-B2mj8zmp.js} +3 -3
  213. package/dist/components/{p-DntePo7I.js.map → p-B2mj8zmp.js.map} +1 -1
  214. package/dist/components/{p-Bv1MGbhE.js → p-B3gbGwCE.js} +50 -83
  215. package/dist/components/p-B3gbGwCE.js.map +1 -0
  216. package/dist/components/{p-ves_LtSN.js → p-B6A-djr0.js} +4 -4
  217. package/dist/components/{p-ves_LtSN.js.map → p-B6A-djr0.js.map} +1 -1
  218. package/dist/components/{p-D0T6NTw2.js → p-BANMRVyZ.js} +3 -3
  219. package/dist/components/{p-D0T6NTw2.js.map → p-BANMRVyZ.js.map} +1 -1
  220. package/dist/components/{p-D-JeGky8.js → p-BB2sALAW.js} +3 -3
  221. package/dist/components/{p-D-JeGky8.js.map → p-BB2sALAW.js.map} +1 -1
  222. package/dist/components/{p-DehJN46u.js → p-BLWvjl_b.js} +6 -6
  223. package/dist/components/{p-DehJN46u.js.map → p-BLWvjl_b.js.map} +1 -1
  224. package/dist/components/{p-y6ddPVSK.js → p-BO3Kzy6x.js} +6 -6
  225. package/dist/components/{p-y6ddPVSK.js.map → p-BO3Kzy6x.js.map} +1 -1
  226. package/dist/components/p-BY5RQ-T1.js +16 -0
  227. package/dist/components/p-BY5RQ-T1.js.map +1 -0
  228. package/dist/components/{p-ClToknIK.js → p-BbOHuqrJ.js} +5 -5
  229. package/dist/components/{p-ClToknIK.js.map → p-BbOHuqrJ.js.map} +1 -1
  230. package/dist/components/{p-CJsnV8uM.js → p-BfT3KUJC.js} +4 -4
  231. package/dist/components/{p-CJsnV8uM.js.map → p-BfT3KUJC.js.map} +1 -1
  232. package/dist/components/{p-BdWgc1UD.js → p-Bi8lqIP-.js} +8 -7
  233. package/dist/components/p-Bi8lqIP-.js.map +1 -0
  234. package/dist/components/{p-DNxY-i6k.js → p-BpD1NQKC.js} +5 -5
  235. package/dist/components/{p-DNxY-i6k.js.map → p-BpD1NQKC.js.map} +1 -1
  236. package/dist/components/p-BtOBW9_N.js +142 -0
  237. package/dist/components/p-BtOBW9_N.js.map +1 -0
  238. package/dist/components/{p-Akx0UDMW.js → p-BwPAbBUr.js} +4 -4
  239. package/dist/components/{p-Akx0UDMW.js.map → p-BwPAbBUr.js.map} +1 -1
  240. package/dist/components/p-BzH4NpB-.js +301 -0
  241. package/dist/components/p-BzH4NpB-.js.map +1 -0
  242. package/dist/components/{p-CSunqYw8.js → p-C-E6e6mL.js} +17 -17
  243. package/dist/components/{p-CSunqYw8.js.map → p-C-E6e6mL.js.map} +1 -1
  244. package/dist/components/{p-DWJbhjYR.js → p-C1K2NBql.js} +5 -5
  245. package/dist/components/{p-DWJbhjYR.js.map → p-C1K2NBql.js.map} +1 -1
  246. package/dist/components/{p-CNC3rtXm.js → p-C2j9tPIU.js} +4 -4
  247. package/dist/components/{p-CNC3rtXm.js.map → p-C2j9tPIU.js.map} +1 -1
  248. package/dist/components/p-C5aOw4Ij.js +168 -0
  249. package/dist/components/p-C5aOw4Ij.js.map +1 -0
  250. package/dist/components/{p-CJINZgmD.js → p-C6bm8Rs4.js} +17 -17
  251. package/dist/components/{p-CJINZgmD.js.map → p-C6bm8Rs4.js.map} +1 -1
  252. package/dist/components/{p-PqypuW_Q.js → p-CL4gkS6u.js} +22 -84
  253. package/dist/components/p-CL4gkS6u.js.map +1 -0
  254. package/dist/components/{p-DeS7YSzc.js → p-CMTLAuz8.js} +3 -3
  255. package/dist/components/{p-DeS7YSzc.js.map → p-CMTLAuz8.js.map} +1 -1
  256. package/dist/components/p-CWAWWTnd.js +47 -0
  257. package/dist/components/p-CWAWWTnd.js.map +1 -0
  258. package/dist/components/{p-B3-pcvgV.js → p-Cdz5sX_v.js} +38 -25
  259. package/dist/components/p-Cdz5sX_v.js.map +1 -0
  260. package/dist/components/{p-byKLubNE.js → p-Coa3kO6W.js} +3 -3
  261. package/dist/components/{p-byKLubNE.js.map → p-Coa3kO6W.js.map} +1 -1
  262. package/dist/components/{p-DzaN4l_Y.js → p-Cp1kbBGM.js} +5 -5
  263. package/dist/components/{p-DzaN4l_Y.js.map → p-Cp1kbBGM.js.map} +1 -1
  264. package/dist/components/{p-BYsLvu6g.js → p-CpMdhv3j.js} +69 -5
  265. package/dist/components/p-CpMdhv3j.js.map +1 -0
  266. package/dist/components/{p-BWI0GtPn.js → p-CpQin4NC.js} +7 -7
  267. package/dist/components/{p-BWI0GtPn.js.map → p-CpQin4NC.js.map} +1 -1
  268. package/dist/components/{p-DIPIddaO.js → p-CqiZ9SAU.js} +3 -3
  269. package/dist/components/{p-DIPIddaO.js.map → p-CqiZ9SAU.js.map} +1 -1
  270. package/dist/components/{p-DxJCXXmE.js → p-Cr_ifuX-.js} +27 -26
  271. package/dist/components/p-Cr_ifuX-.js.map +1 -0
  272. package/dist/components/{p-bLKTEsIH.js → p-CsMmUkoQ.js} +8 -8
  273. package/dist/components/{p-bLKTEsIH.js.map → p-CsMmUkoQ.js.map} +1 -1
  274. package/dist/components/{p-Cf-3pInV.js → p-Ct7EvUCI.js} +3 -3
  275. package/dist/components/{p-Cf-3pInV.js.map → p-Ct7EvUCI.js.map} +1 -1
  276. package/dist/components/{p-BbHv2Hzb.js → p-CvQ8X76F.js} +8 -8
  277. package/dist/components/{p-BbHv2Hzb.js.map → p-CvQ8X76F.js.map} +1 -1
  278. package/dist/components/{p-BEwTqpWE.js → p-CxOYMG-r.js} +4 -4
  279. package/dist/components/{p-BEwTqpWE.js.map → p-CxOYMG-r.js.map} +1 -1
  280. package/dist/components/{p-DOKGpXin.js → p-Cyigv-iT.js} +27 -8
  281. package/dist/components/p-Cyigv-iT.js.map +1 -0
  282. package/dist/components/{p-hRee3qYx.js → p-D6Wo7quX.js} +7 -2
  283. package/dist/components/p-D6Wo7quX.js.map +1 -0
  284. package/dist/components/{p-BUw3R0Ql.js → p-D9A5l8BE.js} +7 -7
  285. package/dist/components/{p-BUw3R0Ql.js.map → p-D9A5l8BE.js.map} +1 -1
  286. package/dist/components/{p-CDnOrzs3.js → p-DBtdo56U.js} +4 -4
  287. package/dist/components/{p-CDnOrzs3.js.map → p-DBtdo56U.js.map} +1 -1
  288. package/dist/components/{p-BIc3R4fE.js → p-DFKz-3Nr.js} +5 -5
  289. package/dist/components/{p-BIc3R4fE.js.map → p-DFKz-3Nr.js.map} +1 -1
  290. package/dist/components/{p-BJerffMg.js → p-DL9uHt-7.js} +5 -5
  291. package/dist/components/{p-BJerffMg.js.map → p-DL9uHt-7.js.map} +1 -1
  292. package/dist/components/{p-DIcPqQkn.js → p-DSIcWNUB.js} +5 -4
  293. package/dist/components/p-DSIcWNUB.js.map +1 -0
  294. package/dist/components/{p-CRiQA7Cy.js → p-DZaCCOXB.js} +69 -5
  295. package/dist/components/p-DZaCCOXB.js.map +1 -0
  296. package/dist/components/{p-BwHEv1Kb.js → p-DaMmzX_J.js} +13 -13
  297. package/dist/components/{p-BwHEv1Kb.js.map → p-DaMmzX_J.js.map} +1 -1
  298. package/dist/components/{p-CY0PAhIT.js → p-Dmmz74K2.js} +4 -4
  299. package/dist/components/{p-CY0PAhIT.js.map → p-Dmmz74K2.js.map} +1 -1
  300. package/dist/components/{p-DMcaGgHq.js → p-DnMRLbBX.js} +5 -5
  301. package/dist/components/{p-DMcaGgHq.js.map → p-DnMRLbBX.js.map} +1 -1
  302. package/dist/components/{p-ChdtzL8Z.js → p-Dpvhge5H.js} +10 -9
  303. package/dist/components/p-Dpvhge5H.js.map +1 -0
  304. package/dist/components/p-DtiAfg0X.js +25 -0
  305. package/dist/components/p-DtiAfg0X.js.map +1 -0
  306. package/dist/components/{p-XoXMxeuq.js → p-Dwnxv7WO.js} +3 -3
  307. package/dist/components/{p-XoXMxeuq.js.map → p-Dwnxv7WO.js.map} +1 -1
  308. package/dist/components/{p-BvSuY3tY.js → p-Dx5ehH3t.js} +7 -7
  309. package/dist/components/{p-BvSuY3tY.js.map → p-Dx5ehH3t.js.map} +1 -1
  310. package/dist/components/{p-DueJnVH4.js → p-DyC6jVV8.js} +10 -9
  311. package/dist/components/p-DyC6jVV8.js.map +1 -0
  312. package/dist/components/{p-Bdt-oOnd.js → p-Oil5iqFm.js} +120 -8
  313. package/dist/components/p-Oil5iqFm.js.map +1 -0
  314. package/dist/components/{p-C6aDnKNm.js → p-P3YTnOWe.js} +5 -5
  315. package/dist/components/{p-C6aDnKNm.js.map → p-P3YTnOWe.js.map} +1 -1
  316. package/dist/components/{p-CLvAjrtw.js → p-Qxi-zxd0.js} +8 -8
  317. package/dist/components/{p-CLvAjrtw.js.map → p-Qxi-zxd0.js.map} +1 -1
  318. package/dist/components/{p-DRO3I7Mm.js → p-Qxw1cxga.js} +8 -8
  319. package/dist/components/{p-DRO3I7Mm.js.map → p-Qxw1cxga.js.map} +1 -1
  320. package/dist/components/{p-DLWUrvpt.js → p-Tu9UB-v3.js} +5 -5
  321. package/dist/components/{p-DLWUrvpt.js.map → p-Tu9UB-v3.js.map} +1 -1
  322. package/dist/components/{p-DQIj9UI7.js → p-Ut5zP7nE.js} +5 -5
  323. package/dist/components/{p-DQIj9UI7.js.map → p-Ut5zP7nE.js.map} +1 -1
  324. package/dist/components/{p-Thx6k3Xp.js → p-WLd9SWLl.js} +4 -4
  325. package/dist/components/{p-Thx6k3Xp.js.map → p-WLd9SWLl.js.map} +1 -1
  326. package/dist/components/{p-BTIWOttf.js → p-W_kxEzVl.js} +6 -6
  327. package/dist/components/{p-BTIWOttf.js.map → p-W_kxEzVl.js.map} +1 -1
  328. package/dist/components/{p-BOW03S7b.js → p-XP8tp0pm.js} +5 -5
  329. package/dist/components/{p-BOW03S7b.js.map → p-XP8tp0pm.js.map} +1 -1
  330. package/dist/components/{p-w2FTnlQG.js → p-_HuUfybA.js} +3 -3
  331. package/dist/components/{p-w2FTnlQG.js.map → p-_HuUfybA.js.map} +1 -1
  332. package/dist/components/{p-BU706xtx.js → p-hWgAmNsF.js} +3 -3
  333. package/dist/components/{p-BU706xtx.js.map → p-hWgAmNsF.js.map} +1 -1
  334. package/dist/components/{p-Bykep8mm.js → p-ibwbE8nI.js} +4 -4
  335. package/dist/components/{p-Bykep8mm.js.map → p-ibwbE8nI.js.map} +1 -1
  336. package/dist/components/{p-CA-v1fbV.js → p-ill5r6eV.js} +40 -9
  337. package/dist/components/p-ill5r6eV.js.map +1 -0
  338. package/dist/components/{p-DqYsDDHy.js → p-jdqTpLxN.js} +4 -4
  339. package/dist/components/{p-DqYsDDHy.js.map → p-jdqTpLxN.js.map} +1 -1
  340. package/dist/components/{p-ByM88ZWk.js → p-jpt3zFdi.js} +3 -3
  341. package/dist/components/{p-ByM88ZWk.js.map → p-jpt3zFdi.js.map} +1 -1
  342. package/dist/components/{p-BEtm34A3.js → p-ncemY4Wx.js} +37 -36
  343. package/dist/components/p-ncemY4Wx.js.map +1 -0
  344. package/dist/components/{p-DqPGCQm2.js → p-s8qXxEgi.js} +3 -3
  345. package/dist/components/{p-DqPGCQm2.js.map → p-s8qXxEgi.js.map} +1 -1
  346. package/dist/components/p-vrP9HZiW.js +156 -0
  347. package/dist/components/p-vrP9HZiW.js.map +1 -0
  348. package/dist/components/{p-D32jPxWa.js → p-ycrk0Lr4.js} +5 -5
  349. package/dist/components/{p-D32jPxWa.js.map → p-ycrk0Lr4.js.map} +1 -1
  350. package/dist/components/page-renderer.js +21 -21
  351. package/dist/components/primary-action-header.js +1 -1
  352. package/dist/components/question-configs-renderer.js +1 -1
  353. package/dist/components/question-specific-configs-renderer.js +1 -1
  354. package/dist/components/resource-timeline-calendar.js +5 -5
  355. package/dist/components/resource-timeline-primary-bar.js +1 -1
  356. package/dist/components/save-view-form-dialog.js +1 -1
  357. package/dist/components/search-list-item.js +1 -1
  358. package/dist/components/section-configs-renderer.js +1 -1
  359. package/dist/components/select-layer-popup.js +1 -1
  360. package/dist/components/server-side-grid.js +1 -1
  361. package/dist/components/side-sheet.js +1 -1
  362. package/dist/components/signature-input.js +1 -1
  363. package/dist/components/split-line-popup.js +1 -1
  364. package/dist/components/stencil-field.js +1 -1
  365. package/dist/components/stencil-form.js +1 -1
  366. package/dist/components/stencil-icon-button.js +1 -1
  367. package/dist/components/stencil-toggle.js +1 -1
  368. package/dist/components/tally-display.js +1 -1
  369. package/dist/components/text-area.js +1 -1
  370. package/dist/components/text-field.js +1 -1
  371. package/dist/components/text-input-renderer.js +1 -1
  372. package/dist/components/udp-ambient-card.js +1 -1
  373. package/dist/components/udp-avatar.js +1 -1
  374. package/dist/components/udp-bar-chart.js +1 -1
  375. package/dist/components/udp-charts-example.js +7 -7
  376. package/dist/components/udp-container-query-grid-item.js +1 -1
  377. package/dist/components/udp-container-query-grid.js +2 -2
  378. package/dist/components/udp-container-query.js +1 -1
  379. package/dist/components/udp-container.js +1 -1
  380. package/dist/components/udp-date-selector.js +1 -1
  381. package/dist/components/udp-datetime-selector.js +1 -1
  382. package/dist/components/udp-distribution-chart.js +1 -1
  383. package/dist/components/udp-donut-chart.js +1 -1
  384. package/dist/components/udp-dynamic-container-with-menu.js +1 -1
  385. package/dist/components/udp-dynamic-form.js +4 -4
  386. package/dist/components/udp-forms-builder-menu.js +1 -1
  387. package/dist/components/udp-forms-builder-question-item.js +1 -1
  388. package/dist/components/udp-forms-builder-style-override.js +1 -1
  389. package/dist/components/udp-forms-builder.js +162 -183
  390. package/dist/components/udp-forms-builder.js.map +1 -1
  391. package/dist/components/udp-forms-list-card.js +1 -1
  392. package/dist/components/udp-forms-list.js +10 -10
  393. package/dist/components/udp-forms-renderer.js +244 -219
  394. package/dist/components/udp-forms-renderer.js.map +1 -1
  395. package/dist/components/udp-forms-ui.js +1 -1
  396. package/dist/components/udp-grid-loader.js +1 -1
  397. package/dist/components/udp-hotlist-form.js +1 -1
  398. package/dist/components/udp-icon-button.d.ts +11 -0
  399. package/dist/components/udp-icon-button.js +9 -0
  400. package/dist/components/udp-icon-button.js.map +1 -0
  401. package/dist/components/udp-icon.js +1 -1
  402. package/dist/components/udp-line-chart.js +1 -1
  403. package/dist/components/udp-linear-loader.js +1 -1
  404. package/dist/components/udp-list-item.js +2 -2
  405. package/dist/components/udp-map-toolbar.js +1 -1
  406. package/dist/components/udp-map.js +17 -17
  407. package/dist/components/udp-menu-item.js +1 -1
  408. package/dist/components/udp-page.js +1 -1
  409. package/dist/components/udp-question.js +1 -1
  410. package/dist/components/udp-save-draft-button.d.ts +11 -0
  411. package/dist/components/udp-save-draft-button.js +9 -0
  412. package/dist/components/udp-save-draft-button.js.map +1 -0
  413. package/dist/components/udp-selector.js +1 -1
  414. package/dist/components/udp-side-sheet.js +1 -1
  415. package/dist/components/udp-skeleton-loading.js +1 -1
  416. package/dist/components/udp-split-screen.js +1 -1
  417. package/dist/components/udp-stepper-demo.js +1 -1
  418. package/dist/components/udp-tab.js +1 -1
  419. package/dist/components/udp-tabs.js +1 -1
  420. package/dist/components/udp-time-selector.js +1 -1
  421. package/dist/components/udp-vertical-spacer.js +1 -1
  422. package/dist/esm/add-map-feature-popup_4.entry.js +11 -11
  423. package/dist/esm/advanced-search_50.entry.js +109 -41
  424. package/dist/esm/advanced-search_50.entry.js.map +1 -1
  425. package/dist/esm/ag-grid-base_2.entry.js +2 -2
  426. package/dist/esm/api-method-grid.entry.js +1 -1
  427. package/dist/esm/check-box.entry.js +2 -2
  428. package/dist/esm/chip-section.entry.js +2 -2
  429. package/dist/esm/client-side-grid.entry.js +1 -1
  430. package/dist/esm/color-preview.entry.js +1 -1
  431. package/dist/esm/date-time-renderer.file-upload-renderer.list-options-renderer.question-specific-configs-renderer.text-input-renderer.entry.js.map +1 -1
  432. package/dist/esm/date-time-renderer_5.entry.js +17 -16
  433. package/dist/esm/date-time-renderer_5.entry.js.map +1 -1
  434. package/dist/esm/enums-DtiAfg0X.js +25 -0
  435. package/dist/esm/enums-DtiAfg0X.js.map +1 -0
  436. package/dist/esm/feature-details-card_2.entry.js +5 -5
  437. package/dist/esm/file-upload.selectable-list.stencil-field.entry.js.map +1 -1
  438. package/dist/esm/file-upload_3.entry.js +73 -29
  439. package/dist/esm/file-upload_3.entry.js.map +1 -1
  440. package/dist/esm/index-CaIWDYyq.js +8 -8
  441. package/dist/esm/inputs-example.entry.js +2 -2
  442. package/dist/esm/inputs-example.entry.js.map +1 -1
  443. package/dist/esm/loader.js +1 -1
  444. package/dist/esm/map-component_2.entry.js +2 -2
  445. package/dist/esm/numeric-field.text-area.udp-date-selector.udp-datetime-selector.udp-time-selector.entry.js.map +1 -1
  446. package/dist/esm/numeric-field_5.entry.js +195 -20
  447. package/dist/esm/numeric-field_5.entry.js.map +1 -1
  448. package/dist/esm/page-renderer.entry.js +1 -1
  449. package/dist/esm/question-configs-renderer.section-configs-renderer.udp-forms-builder-menu.udp-forms-builder-question-item.udp-forms-builder-style-override.entry.js.map +1 -1
  450. package/dist/esm/question-configs-renderer_5.entry.js +17 -4
  451. package/dist/esm/question-configs-renderer_5.entry.js.map +1 -1
  452. package/dist/esm/resource-timeline-calendar.entry.js +1 -1
  453. package/dist/esm/resource-timeline-primary-bar.entry.js +1 -1
  454. package/dist/esm/server-side-grid.entry.js +1 -1
  455. package/dist/esm/signature-input.stencil-form.tally-display.udp-icon-button.udp-question.udp-save-draft-button.entry.js.map +1 -0
  456. package/dist/esm/{signature-input_4.entry.js → signature-input_6.entry.js} +315 -115
  457. package/dist/esm/signature-input_6.entry.js.map +1 -0
  458. package/dist/esm/stencil-library.js +1 -1
  459. package/dist/esm/udp-container-query-grid-item.entry.js +1 -1
  460. package/dist/esm/udp-container-query-grid.entry.js +1 -1
  461. package/dist/esm/udp-container-query.entry.js +2 -2
  462. package/dist/esm/udp-container.entry.js +2 -2
  463. package/dist/esm/udp-drive-utils-Cm3Sms8t.js +168 -0
  464. package/dist/esm/udp-drive-utils-Cm3Sms8t.js.map +1 -0
  465. package/dist/esm/udp-forms-builder.entry.js +133 -152
  466. package/dist/esm/udp-forms-builder.entry.js.map +1 -1
  467. package/dist/esm/udp-forms-list-card_2.entry.js +5 -5
  468. package/dist/esm/udp-forms-list.entry.js +1 -1
  469. package/dist/esm/udp-forms-renderer.entry.js +186 -176
  470. package/dist/esm/udp-forms-renderer.entry.js.map +1 -1
  471. package/dist/esm/udp-forms-ui.entry.js +113 -82
  472. package/dist/esm/udp-forms-ui.entry.js.map +1 -1
  473. package/dist/esm/udp-map.entry.js +3 -3
  474. package/dist/esm/udp-page.entry.js +1 -1
  475. package/dist/esm/udp-split-screen.entry.js +1 -1
  476. package/dist/esm/udp-stepper-demo.entry.js +1 -1
  477. package/dist/esm/udp-vertical-spacer.entry.js +1 -1
  478. package/dist/esm/utils-DZv4MqyU.js +31 -0
  479. package/dist/esm/utils-DZv4MqyU.js.map +1 -0
  480. package/dist/stencil-library/date-time-renderer.file-upload-renderer.list-options-renderer.question-specific-configs-renderer.text-input-renderer.entry.esm.js.map +1 -1
  481. package/dist/stencil-library/file-upload.selectable-list.stencil-field.entry.esm.js.map +1 -1
  482. package/dist/stencil-library/inputs-example.entry.esm.js.map +1 -1
  483. package/dist/stencil-library/numeric-field.text-area.udp-date-selector.udp-datetime-selector.udp-time-selector.entry.esm.js.map +1 -1
  484. package/dist/stencil-library/p-09319660.entry.js +2 -0
  485. package/dist/stencil-library/p-09319660.entry.js.map +1 -0
  486. package/dist/stencil-library/p-146bc917.entry.js +2 -0
  487. package/dist/stencil-library/{p-b3b6310e.entry.js → p-147c4595.entry.js} +2 -2
  488. package/dist/stencil-library/{p-06ca29e0.entry.js → p-1b001f78.entry.js} +2 -2
  489. package/dist/stencil-library/{p-762591f6.entry.js → p-2635a6cc.entry.js} +2 -2
  490. package/dist/stencil-library/p-2f2fd111.entry.js +2 -0
  491. package/dist/stencil-library/{p-368be454.entry.js → p-2fc495ce.entry.js} +2 -2
  492. package/dist/stencil-library/{p-fdfa7087.entry.js → p-476c08df.entry.js} +2 -2
  493. package/dist/stencil-library/{p-ee1610d3.entry.js → p-4ab893a0.entry.js} +2 -2
  494. package/dist/stencil-library/p-4dac2b6d.entry.js +2 -0
  495. package/dist/stencil-library/p-4dac2b6d.entry.js.map +1 -0
  496. package/dist/stencil-library/p-556a182f.entry.js +2 -0
  497. package/dist/stencil-library/p-556a182f.entry.js.map +1 -0
  498. package/dist/stencil-library/p-5ac16f81.entry.js +2 -0
  499. package/dist/stencil-library/p-5ac16f81.entry.js.map +1 -0
  500. package/dist/stencil-library/p-609236fc.entry.js +2 -0
  501. package/dist/stencil-library/p-609236fc.entry.js.map +1 -0
  502. package/dist/stencil-library/{p-9b0b311b.entry.js → p-64330dbb.entry.js} +2 -2
  503. package/dist/stencil-library/p-65a5cce3.entry.js +2 -0
  504. package/dist/stencil-library/{p-5a946191.entry.js → p-70d8a0d8.entry.js} +2 -2
  505. package/dist/stencil-library/{p-79065768.entry.js → p-8119eb18.entry.js} +2 -2
  506. package/dist/stencil-library/{p-2f99476a.entry.js → p-86cd0134.entry.js} +2 -2
  507. package/dist/stencil-library/p-89aa56f1.entry.js +2 -0
  508. package/dist/stencil-library/p-89aa56f1.entry.js.map +1 -0
  509. package/dist/stencil-library/{p-767b7be7.entry.js → p-8a0b6bd4.entry.js} +2 -2
  510. package/dist/stencil-library/{p-40127f9f.entry.js → p-90fbca0f.entry.js} +2 -2
  511. package/dist/stencil-library/p-C5aOw4Ij.js +2 -0
  512. package/dist/stencil-library/p-C5aOw4Ij.js.map +1 -0
  513. package/dist/stencil-library/p-DZv4MqyU.js +2 -0
  514. package/dist/stencil-library/p-DZv4MqyU.js.map +1 -0
  515. package/dist/stencil-library/p-DtiAfg0X.js +2 -0
  516. package/dist/stencil-library/p-DtiAfg0X.js.map +1 -0
  517. package/dist/stencil-library/{p-f4f4ba61.entry.js → p-a98b033e.entry.js} +2 -2
  518. package/dist/stencil-library/p-a98b033e.entry.js.map +1 -0
  519. package/dist/stencil-library/{p-2a11c543.entry.js → p-ae167d4b.entry.js} +2 -2
  520. package/dist/stencil-library/{p-55459135.entry.js → p-b53e1b9a.entry.js} +2 -2
  521. package/dist/stencil-library/p-c1966f2c.entry.js +2 -0
  522. package/dist/stencil-library/p-c1966f2c.entry.js.map +1 -0
  523. package/dist/stencil-library/{p-0de6045a.entry.js → p-c9046d64.entry.js} +2 -2
  524. package/dist/stencil-library/{p-c1809ef3.entry.js → p-ca53be83.entry.js} +2 -2
  525. package/dist/stencil-library/p-d46dd16c.entry.js +2 -0
  526. package/dist/stencil-library/{p-09186dea.entry.js → p-d48b5599.entry.js} +2 -2
  527. package/dist/stencil-library/p-d4f31146.entry.js +2 -0
  528. package/dist/stencil-library/p-d4f31146.entry.js.map +1 -0
  529. package/dist/stencil-library/{p-b0b70c0b.entry.js → p-e7e8a8a3.entry.js} +2 -2
  530. package/dist/stencil-library/p-ea6e9a24.entry.js +2 -0
  531. package/dist/stencil-library/p-ea6e9a24.entry.js.map +1 -0
  532. package/dist/stencil-library/{p-79587009.entry.js → p-f4b5879d.entry.js} +2 -2
  533. package/dist/stencil-library/p-fbfbbcf1.entry.js +2 -0
  534. package/dist/stencil-library/question-configs-renderer.section-configs-renderer.udp-forms-builder-menu.udp-forms-builder-question-item.udp-forms-builder-style-override.entry.esm.js.map +1 -1
  535. package/dist/stencil-library/signature-input.stencil-form.tally-display.udp-icon-button.udp-question.udp-save-draft-button.entry.esm.js.map +1 -0
  536. package/dist/stencil-library/stencil-library.esm.js +1 -1
  537. package/dist/stencil-library/udp-forms-builder.entry.esm.js.map +1 -1
  538. package/dist/stencil-library/udp-forms-renderer.entry.esm.js.map +1 -1
  539. package/dist/stencil-library/udp-forms-ui.entry.esm.js.map +1 -1
  540. package/dist/types/components/my-component/UI/buttons/icon-button/stencil-icon-button.d.ts +14 -0
  541. package/dist/types/components/my-component/UI/buttons/udp-icon-button/udp-icon-button.d.ts +91 -0
  542. package/dist/types/components/my-component/UI/forms/form/stencil-field.d.ts +2 -1
  543. package/dist/types/components/my-component/UI/forms/form/stencil-form.d.ts +7 -5
  544. package/dist/types/components/my-component/UI/forms/udp-forms/types.d.ts +16 -0
  545. package/dist/types/components/my-component/UI/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/question_type_renderers/section-configs-renderer.d.ts +1 -0
  546. package/dist/types/components/my-component/UI/forms/udp-forms/udp-forms-builder/udp-forms-builder.d.ts +16 -19
  547. package/dist/types/components/my-component/UI/forms/udp-forms/udp-forms-renderer/udp-forms-renderer.d.ts +14 -26
  548. package/dist/types/components/my-component/UI/forms/udp-forms/udp-forms-renderer/udp-forms-ui.d.ts +21 -7
  549. package/dist/types/components/my-component/UI/forms/udp-forms/udp-forms-renderer/udp-save-draft-button/udp-save-draft-button.d.ts +20 -0
  550. package/dist/types/components/my-component/UI/inputs/file-upload/file-upload.d.ts +1 -1
  551. package/dist/types/components/my-component/UI/inputs/file-upload/udp-drive-utils.d.ts +68 -1
  552. package/dist/types/components/my-component/UI/inputs/numeric-field/numeric-field.d.ts +1 -1
  553. package/dist/types/components/my-component/UI/inputs/signature-input/signature-input.d.ts +1 -1
  554. package/dist/types/components/my-component/UI/inputs/text-area/text-area.d.ts +21 -0
  555. package/dist/types/components/my-component/UI/inputs/text-field/text-field.d.ts +21 -0
  556. package/dist/types/components/my-component/UI/inputs/time-selector/udp-time-selector.d.ts +33 -1
  557. package/dist/types/components.d.ts +384 -14
  558. package/package.json +1 -1
  559. package/dist/cjs/signature-input.stencil-form.tally-display.udp-question.entry.cjs.js.map +0 -1
  560. package/dist/cjs/signature-input_4.cjs.entry.js.map +0 -1
  561. package/dist/cjs/utils-DMhqs00g.js +0 -55
  562. package/dist/cjs/utils-DMhqs00g.js.map +0 -1
  563. package/dist/collection/components/my-component/UI/forms/form/stencil-field.css +0 -70
  564. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-renderer/udp-forms-renderer.css +0 -89
  565. package/dist/components/p-B3-pcvgV.js.map +0 -1
  566. package/dist/components/p-BEtm34A3.js.map +0 -1
  567. package/dist/components/p-BYsLvu6g.js.map +0 -1
  568. package/dist/components/p-BdWgc1UD.js.map +0 -1
  569. package/dist/components/p-Bdt-oOnd.js.map +0 -1
  570. package/dist/components/p-Bv1MGbhE.js.map +0 -1
  571. package/dist/components/p-C8cWVxBF.js.map +0 -1
  572. package/dist/components/p-C9cEH65u.js +0 -307
  573. package/dist/components/p-C9cEH65u.js.map +0 -1
  574. package/dist/components/p-CA-v1fbV.js.map +0 -1
  575. package/dist/components/p-CRiQA7Cy.js.map +0 -1
  576. package/dist/components/p-ChdtzL8Z.js.map +0 -1
  577. package/dist/components/p-DIcPqQkn.js.map +0 -1
  578. package/dist/components/p-DOKGpXin.js.map +0 -1
  579. package/dist/components/p-DueJnVH4.js.map +0 -1
  580. package/dist/components/p-DxJCXXmE.js.map +0 -1
  581. package/dist/components/p-IlXn87Ki.js.map +0 -1
  582. package/dist/components/p-PqypuW_Q.js.map +0 -1
  583. package/dist/components/p-hRee3qYx.js.map +0 -1
  584. package/dist/esm/signature-input.stencil-form.tally-display.udp-question.entry.js.map +0 -1
  585. package/dist/esm/signature-input_4.entry.js.map +0 -1
  586. package/dist/esm/utils-vXSpJxEK.js +0 -52
  587. package/dist/esm/utils-vXSpJxEK.js.map +0 -1
  588. package/dist/stencil-library/p-00c1ce44.entry.js +0 -2
  589. package/dist/stencil-library/p-00c1ce44.entry.js.map +0 -1
  590. package/dist/stencil-library/p-250a8400.entry.js +0 -2
  591. package/dist/stencil-library/p-2fda98ee.entry.js +0 -2
  592. package/dist/stencil-library/p-2fda98ee.entry.js.map +0 -1
  593. package/dist/stencil-library/p-50f67815.entry.js +0 -2
  594. package/dist/stencil-library/p-50f67815.entry.js.map +0 -1
  595. package/dist/stencil-library/p-584552e6.entry.js +0 -2
  596. package/dist/stencil-library/p-5e96c57a.entry.js +0 -2
  597. package/dist/stencil-library/p-5e96c57a.entry.js.map +0 -1
  598. package/dist/stencil-library/p-6a1febc9.entry.js +0 -2
  599. package/dist/stencil-library/p-6ed5258c.entry.js +0 -2
  600. package/dist/stencil-library/p-6ed5258c.entry.js.map +0 -1
  601. package/dist/stencil-library/p-77739d4b.entry.js +0 -2
  602. package/dist/stencil-library/p-77739d4b.entry.js.map +0 -1
  603. package/dist/stencil-library/p-7a2202b9.entry.js +0 -2
  604. package/dist/stencil-library/p-7a2202b9.entry.js.map +0 -1
  605. package/dist/stencil-library/p-84109194.entry.js +0 -2
  606. package/dist/stencil-library/p-b1d412a7.entry.js +0 -2
  607. package/dist/stencil-library/p-b1d412a7.entry.js.map +0 -1
  608. package/dist/stencil-library/p-f4f4ba61.entry.js.map +0 -1
  609. package/dist/stencil-library/p-f7c855d0.entry.js +0 -2
  610. package/dist/stencil-library/p-f889438a.entry.js +0 -2
  611. package/dist/stencil-library/p-f889438a.entry.js.map +0 -1
  612. package/dist/stencil-library/p-vXSpJxEK.js +0 -2
  613. package/dist/stencil-library/p-vXSpJxEK.js.map +0 -1
  614. package/dist/stencil-library/signature-input.stencil-form.tally-display.udp-question.entry.esm.js.map +0 -1
  615. /package/dist/stencil-library/{p-84109194.entry.js.map → p-146bc917.entry.js.map} +0 -0
  616. /package/dist/stencil-library/{p-b3b6310e.entry.js.map → p-147c4595.entry.js.map} +0 -0
  617. /package/dist/stencil-library/{p-06ca29e0.entry.js.map → p-1b001f78.entry.js.map} +0 -0
  618. /package/dist/stencil-library/{p-762591f6.entry.js.map → p-2635a6cc.entry.js.map} +0 -0
  619. /package/dist/stencil-library/{p-6a1febc9.entry.js.map → p-2f2fd111.entry.js.map} +0 -0
  620. /package/dist/stencil-library/{p-368be454.entry.js.map → p-2fc495ce.entry.js.map} +0 -0
  621. /package/dist/stencil-library/{p-fdfa7087.entry.js.map → p-476c08df.entry.js.map} +0 -0
  622. /package/dist/stencil-library/{p-ee1610d3.entry.js.map → p-4ab893a0.entry.js.map} +0 -0
  623. /package/dist/stencil-library/{p-9b0b311b.entry.js.map → p-64330dbb.entry.js.map} +0 -0
  624. /package/dist/stencil-library/{p-584552e6.entry.js.map → p-65a5cce3.entry.js.map} +0 -0
  625. /package/dist/stencil-library/{p-5a946191.entry.js.map → p-70d8a0d8.entry.js.map} +0 -0
  626. /package/dist/stencil-library/{p-79065768.entry.js.map → p-8119eb18.entry.js.map} +0 -0
  627. /package/dist/stencil-library/{p-2f99476a.entry.js.map → p-86cd0134.entry.js.map} +0 -0
  628. /package/dist/stencil-library/{p-767b7be7.entry.js.map → p-8a0b6bd4.entry.js.map} +0 -0
  629. /package/dist/stencil-library/{p-40127f9f.entry.js.map → p-90fbca0f.entry.js.map} +0 -0
  630. /package/dist/stencil-library/{p-2a11c543.entry.js.map → p-ae167d4b.entry.js.map} +0 -0
  631. /package/dist/stencil-library/{p-55459135.entry.js.map → p-b53e1b9a.entry.js.map} +0 -0
  632. /package/dist/stencil-library/{p-0de6045a.entry.js.map → p-c9046d64.entry.js.map} +0 -0
  633. /package/dist/stencil-library/{p-c1809ef3.entry.js.map → p-ca53be83.entry.js.map} +0 -0
  634. /package/dist/stencil-library/{p-f7c855d0.entry.js.map → p-d46dd16c.entry.js.map} +0 -0
  635. /package/dist/stencil-library/{p-09186dea.entry.js.map → p-d48b5599.entry.js.map} +0 -0
  636. /package/dist/stencil-library/{p-b0b70c0b.entry.js.map → p-e7e8a8a3.entry.js.map} +0 -0
  637. /package/dist/stencil-library/{p-79587009.entry.js.map → p-f4b5879d.entry.js.map} +0 -0
  638. /package/dist/stencil-library/{p-250a8400.entry.js.map → p-fbfbbcf1.entry.js.map} +0 -0
@@ -48,6 +48,7 @@ function isFileArray(array) {
48
48
  return array.every(item => item instanceof File);
49
49
  }
50
50
 
51
+ // @ts-nocheck
51
52
  /**
52
53
  * Public form submission handler (legacy endpoint)
53
54
  */
@@ -222,11 +223,7 @@ class PrivateFormHandler extends BaseFormHandler {
222
223
  dataWithoutFiles[key] = value.map(item => (typeof item === 'string' ? item : item.value)).join(',');
223
224
  }
224
225
  else {
225
- // Only include non-file fields if they have a meaningful value
226
- // Skip null, undefined, or empty string values entirely
227
- if (value !== null && value !== undefined && value !== '') {
228
- dataWithoutFiles[key] = value;
229
- }
226
+ dataWithoutFiles[key] = value;
230
227
  }
231
228
  }
232
229
  // Add form data using the helper function
@@ -289,7 +286,7 @@ const UdpFormsRenderer = class {
289
286
  index.registerInstance(this, hostRef);
290
287
  this.isPublic = false;
291
288
  this.userId = null; // User ID for authenticated users
292
- this.autoSaveDelay = 2000; // Debounce delay for auto-save in milliseconds
289
+ this.autoSaveDelay = 2000; // Debounce delay for auto-save in milliseconds (currently disabled)
293
290
  this.initialValues = {};
294
291
  this.submitSuccessful = false;
295
292
  this.existingSubmission = null;
@@ -297,13 +294,135 @@ const UdpFormsRenderer = class {
297
294
  this.isSaving = false;
298
295
  this.saveError = null;
299
296
  this.isSubmitted = false;
297
+ this.dynamicSections = [];
298
+ this.isUpdatingSections = false;
299
+ this.reRenderKey = 0;
300
300
  this.tenantId = tenantUtils.getCurrentTenantId();
301
- this.handleFormChange = (values) => {
302
- // Trigger auto-save if form data has changed
303
- if (JSON.stringify(values) !== JSON.stringify(this.currentFormData)) {
304
- this.debouncedAutoSave(values);
301
+ /**
302
+ * Duplicate a repeatable section
303
+ */
304
+ this.duplicateRepeatableSection = (index) => {
305
+ if (this.isSubmitted || this.isUpdatingSections)
306
+ return;
307
+ this.isUpdatingSections = true;
308
+ this.loading = true;
309
+ try {
310
+ const sectionToClone = this.dynamicSections[index];
311
+ if (!sectionToClone)
312
+ return;
313
+ const cloningSectionName = sectionToClone.name;
314
+ // Find existing repeat group indices
315
+ const repeatKeys = this.findRepeatGroupKeys(cloningSectionName, this.initialValues);
316
+ const nextRepeatIndex = repeatKeys.length > 0 ? Math.max(...repeatKeys) + 1 : 2;
317
+ const clonedSection = Object.assign(Object.assign({}, structuredClone(sectionToClone)), { formQuestions: sectionToClone.formQuestions.map(q => (Object.assign(Object.assign({}, structuredClone(q)), { processedSubmissionName: `${cloningSectionName}_${nextRepeatIndex}-${q.name}` }))), isOriginalSection: false, sectionPositionSuffix: nextRepeatIndex });
318
+ // Find the last index of this section group
319
+ let insertAtIndex = index;
320
+ for (let i = index + 1; i < this.dynamicSections.length; i++) {
321
+ const s = this.dynamicSections[i];
322
+ if (s.name === cloningSectionName) {
323
+ insertAtIndex = i;
324
+ }
325
+ else {
326
+ break;
327
+ }
328
+ }
329
+ // Insert after the last repeat of the section group
330
+ this.dynamicSections = [...this.dynamicSections.slice(0, insertAtIndex + 1), clonedSection, ...this.dynamicSections.slice(insertAtIndex + 1)];
331
+ // Create new initial values structure
332
+ const newInitialValues = Object.assign({}, this.currentFormData);
333
+ clonedSection.formQuestions.forEach(q => {
334
+ newInitialValues[q.processedSubmissionName] = null;
335
+ });
336
+ // This will trigger a complete form re-render
337
+ this.initialValues = newInitialValues;
338
+ this.currentFormData = newInitialValues;
339
+ this.reRenderKey += 1;
340
+ }
341
+ finally {
342
+ this.isUpdatingSections = false;
343
+ this.loading = false;
305
344
  }
306
345
  };
346
+ /**
347
+ * Delete a repeatable section
348
+ */
349
+ this.deleteRepeatableSection = (index) => {
350
+ if (this.isSubmitted)
351
+ return;
352
+ const sectionToDelete = this.dynamicSections[index];
353
+ if (!sectionToDelete || sectionToDelete.isOriginalSection)
354
+ return;
355
+ this.isUpdatingSections = true;
356
+ this.loading = true;
357
+ try {
358
+ const deleteSectionName = sectionToDelete.name;
359
+ // Remove the section's initial values\
360
+ console.log('currentformdata', this.currentFormData);
361
+ const newInitialValues = Object.assign({}, this.currentFormData);
362
+ sectionToDelete.formQuestions.forEach(q => {
363
+ delete newInitialValues[q.processedSubmissionName];
364
+ });
365
+ // Remove the section from dynamicSections
366
+ const updatedSections = structuredClone(this.dynamicSections);
367
+ updatedSections.splice(index, 1);
368
+ let suffixCounter = 2;
369
+ updatedSections.forEach(section => {
370
+ // no need to process unrelated sections or originalSections
371
+ if (section.name !== deleteSectionName || section.isOriginalSection) {
372
+ return;
373
+ }
374
+ section.sectionPositionSuffix = suffixCounter;
375
+ suffixCounter += 1;
376
+ section.formQuestions = section.formQuestions.map(q => {
377
+ const newName = `${deleteSectionName}_${section.sectionPositionSuffix}-${q.name}`;
378
+ const oldName = q.processedSubmissionName;
379
+ // Carry over any existing value
380
+ if (newInitialValues[oldName] !== undefined) {
381
+ newInitialValues[newName] = newInitialValues[oldName];
382
+ delete newInitialValues[oldName];
383
+ }
384
+ return Object.assign(Object.assign({}, q), { processedSubmissionName: newName });
385
+ });
386
+ });
387
+ this.dynamicSections = updatedSections;
388
+ this.initialValues = newInitialValues;
389
+ this.currentFormData = newInitialValues;
390
+ this.reRenderKey += 1;
391
+ console.log('newInitialValues', newInitialValues);
392
+ }
393
+ finally {
394
+ this.isUpdatingSections = false;
395
+ this.loading = false;
396
+ }
397
+ };
398
+ /**
399
+ * Manual save function - debounced to 5 seconds
400
+ */
401
+ this.handleManualSave = async (values) => {
402
+ // Only save if handler supports it and user is authenticated
403
+ if (!this.formHandler.supportsAutoSave() || !this.userId || !this.formHandler.saveFormData) {
404
+ return;
405
+ }
406
+ this.isSaving = true;
407
+ this.saveError = null;
408
+ try {
409
+ await this.formHandler.saveFormData(values, 'in-progress');
410
+ this.currentFormData = Object.assign({}, values);
411
+ console.log('Form saved successfully');
412
+ }
413
+ catch (error) {
414
+ console.error('Manual save failed:', error);
415
+ this.saveError = 'Failed to save form data';
416
+ }
417
+ finally {
418
+ this.isSaving = false;
419
+ }
420
+ };
421
+ this.handleFormChange = (values) => {
422
+ if (this.isUpdatingSections)
423
+ return;
424
+ this.currentFormData = values;
425
+ };
307
426
  this.handleFinish = () => {
308
427
  // Trigger any finish actions
309
428
  if (this.triggerAction) {
@@ -313,13 +432,17 @@ const UdpFormsRenderer = class {
313
432
  }
314
433
  async componentWillLoad() {
315
434
  this.loading = true;
316
- this.formHandler = FormHandlerFactory.create(this.isPublic, this.formId, this.version, this.tenantId, this.userId, this.existingSubmission, (submission) => {
435
+ this.formHandler = FormHandlerFactory.create(this.isPublic, this.formId, this.version, this.tenantId, this.userId, this.existingSubmission, submission => {
317
436
  this.existingSubmission = submission;
318
437
  });
319
- // Set up debounced auto-save function
320
- this.debouncedAutoSave = lodash.debounce(async (values) => {
321
- await this.handleAutoSave(values);
322
- }, this.autoSaveDelay);
438
+ // Set up debounced auto-save function (currently disabled)
439
+ // this.debouncedAutoSave = debounce(async (values: { [name: string]: any }) => {
440
+ // // await this.handleAutoSave(values); // Disabled for now
441
+ // }, this.autoSaveDelay);
442
+ // Set up throttled manual save function (5 seconds) - fires immediately, then throttles
443
+ this.debouncedManualSave = lodash.throttle(async (values) => {
444
+ await this.handleManualSave(values);
445
+ }, 2000, { leading: true, trailing: false });
323
446
  if (this.formId && this.version) {
324
447
  await this.loadForm();
325
448
  }
@@ -340,19 +463,63 @@ const UdpFormsRenderer = class {
340
463
  if (existingData.status === 2) {
341
464
  this.isSubmitted = true;
342
465
  }
343
- // Process file data to convert file references to UdpDriveFile objects
344
- this.initialValues = await this.processInitialValues(this.initialValues);
345
466
  this.currentFormData = Object.assign({}, this.initialValues);
346
467
  if (existingData.status === 2 || existingData.status === 'submitted') {
347
468
  this.isSubmitted = true;
348
469
  }
349
470
  }
350
471
  }
472
+ this.initializeDynamicSections();
351
473
  }
352
474
  catch (error) {
353
475
  console.error('Failed to load form:', error);
354
476
  }
355
477
  }
478
+ // build dynamic sections based on the
479
+ initializeDynamicSections() {
480
+ var _a;
481
+ const tempDynamicSection = [];
482
+ const sortedSections = structuredClone(this.form.udpFormUdpFormSection).sort((a, b) => a.order - b.order);
483
+ for (const section of sortedSections) {
484
+ section.name = `section${section.order}`; // THIS LINE WILL NOT BE NECESSARY SOON AFTER BACKEND UPDATE
485
+ section.sectionProperties = JSON.parse(section.sectionProperties || "{}");
486
+ const repeatGroupKeys = this.findRepeatGroupKeys(section.name, this.initialValues);
487
+ section.isOriginalSection = true;
488
+ section.sectionPositionSuffix = 1; // default position
489
+ // always add the original section into dynamic sections
490
+ tempDynamicSection.push(Object.assign(Object.assign({}, structuredClone(section)), { formQuestions: structuredClone(this.form.formQuestions)
491
+ .filter(q => q.formSectionId === section.id)
492
+ .sort((a, b) => a.questionOrder - b.questionOrder)
493
+ .map(q => (Object.assign(Object.assign({}, q), { processedSubmissionName: `${section.name}-${q.name}` }))) }));
494
+ // create then add additional sections if there are repeated sections
495
+ if (((_a = section.sectionProperties) === null || _a === void 0 ? void 0 : _a.isRepeatable) && repeatGroupKeys.length > 0) {
496
+ const maxRepeatedSectionSuffix = Math.max(...repeatGroupKeys); // create a new section for the max value of repeat group keys, even if there are no saved answers
497
+ // for (const repeatKey of repeatGroupKeys) { // create a section only for the suffix saved
498
+ for (let repeatKey = 2; repeatKey <= maxRepeatedSectionSuffix; repeatKey++) {
499
+ const clonedSection = Object.assign(Object.assign({}, structuredClone(section)), { formQuestions: structuredClone(this.form.formQuestions)
500
+ .filter(q => q.formSectionId === section.id)
501
+ .sort((a, b) => a.questionOrder - b.questionOrder)
502
+ .map(q => (Object.assign(Object.assign({}, q), { processedSubmissionName: `${section.name}_${repeatKey}-${q.name}` }))), isOriginalSection: false, sectionPositionSuffix: repeatKey });
503
+ tempDynamicSection.push(clonedSection);
504
+ }
505
+ }
506
+ }
507
+ console.log('tempDynamicSection', tempDynamicSection);
508
+ this.dynamicSections = tempDynamicSection;
509
+ }
510
+ findRepeatGroupKeys(sectionName, values) {
511
+ const keys = Object.keys(values);
512
+ const repeatGroupSet = new Set();
513
+ // Match: sectionName_2-question1
514
+ const regex = new RegExp(`^${sectionName}_(\\d+)-`);
515
+ keys.forEach(key => {
516
+ const match = key.match(regex);
517
+ if (match && match[1]) {
518
+ repeatGroupSet.add(Number(match[1]));
519
+ }
520
+ });
521
+ return Array.from(repeatGroupSet).sort((a, b) => a - b);
522
+ }
356
523
  async handleSubmit(values) {
357
524
  try {
358
525
  const success = await this.formHandler.submitForm(values);
@@ -363,163 +530,6 @@ const UdpFormsRenderer = class {
363
530
  throw error;
364
531
  }
365
532
  }
366
- async handleAutoSave(values) {
367
- // Only auto-save if handler supports it and user is authenticated
368
- if (!this.formHandler.supportsAutoSave() || !this.userId || !this.formHandler.saveFormData) {
369
- return;
370
- }
371
- this.isSaving = true;
372
- this.saveError = null;
373
- try {
374
- await this.formHandler.saveFormData(values, 'in-progress');
375
- this.currentFormData = Object.assign({}, values);
376
- }
377
- catch (error) {
378
- console.error('Auto-save failed:', error);
379
- this.saveError = 'Failed to save form data';
380
- }
381
- finally {
382
- this.isSaving = false;
383
- }
384
- }
385
- /**
386
- * Process initial values to convert file references to UdpDriveFile objects
387
- */
388
- async processInitialValues(values) {
389
- const processedValues = Object.assign({}, values);
390
- for (const [key, value] of Object.entries(values)) {
391
- if (typeof value === 'string' && this.isFileReference(value)) {
392
- processedValues[key] = await this.parseFileReferences(value);
393
- }
394
- }
395
- return processedValues;
396
- }
397
- /**
398
- * Check if a string value is a file reference (contains | and udp: or b64:)
399
- */
400
- isFileReference(value) {
401
- return typeof value === 'string' && value.includes('|') && (value.includes('udp:') || value.includes('b64:'));
402
- }
403
- /**
404
- * Parse file references from the special format: "filename|udp:driveFileId" or "filename|b64:base64data"
405
- */
406
- async parseFileReferences(value) {
407
- const references = value.split(',').map(ref => ref.trim()).filter(ref => ref);
408
- const udpDriveFiles = [];
409
- for (const reference of references) {
410
- try {
411
- const udpDriveFile = await this.parseFileReference(reference);
412
- if (udpDriveFile) {
413
- udpDriveFiles.push(udpDriveFile);
414
- }
415
- }
416
- catch (error) {
417
- console.error('Error parsing file reference:', reference, error);
418
- }
419
- }
420
- return udpDriveFiles;
421
- }
422
- /**
423
- * Parse a single file reference
424
- */
425
- async parseFileReference(reference) {
426
- const parts = reference.split('|');
427
- if (parts.length !== 2) {
428
- console.warn('Invalid file reference format:', reference);
429
- return null;
430
- }
431
- const [filename, dataRef] = parts;
432
- if (dataRef.startsWith('udp:')) {
433
- // Handle UDP Drive file reference
434
- const driveFileId = dataRef.substring(4); // Remove 'udp:' prefix
435
- return await this.createUdpDriveFileFromId(filename, driveFileId);
436
- }
437
- else if (dataRef.startsWith('b64:')) {
438
- // Handle base64 encoded file
439
- const base64Data = dataRef.substring(4); // Remove 'b64:' prefix
440
- return this.createUdpDriveFileFromBase64(filename, base64Data);
441
- }
442
- console.warn('Unknown file reference format:', dataRef);
443
- return null;
444
- }
445
- /**
446
- * Create a UdpDriveFile from a drive file ID
447
- */
448
- async createUdpDriveFileFromId(filename, driveFileId) {
449
- // Extract file extension from filename
450
- const extension = filename.split('.').pop() || '';
451
- // Create a placeholder File object - the actual content will be downloaded when needed
452
- const placeholderBlob = new Blob([''], { type: this.getMimeTypeFromExtension(extension) });
453
- const file = new File([placeholderBlob], filename, {
454
- type: placeholderBlob.type,
455
- lastModified: Date.now()
456
- });
457
- // Create UdpDriveFile by extending the File object
458
- const udpDriveFile = file;
459
- // Add UDP-specific properties
460
- udpDriveFile.driveFileId = driveFileId;
461
- udpDriveFile.tenantId = this.tenantId;
462
- udpDriveFile.productId = 0; // Will be filled by server
463
- udpDriveFile.path = '';
464
- udpDriveFile.extension = extension;
465
- return udpDriveFile;
466
- }
467
- /**
468
- * Create a UdpDriveFile from base64 data
469
- */
470
- createUdpDriveFileFromBase64(filename, base64Data) {
471
- // Extract file extension from filename
472
- const extension = filename.split('.').pop() || '';
473
- // Decode base64 data
474
- const binaryString = atob(base64Data);
475
- const bytes = new Uint8Array(binaryString.length);
476
- for (let i = 0; i < binaryString.length; i++) {
477
- bytes[i] = binaryString.charCodeAt(i);
478
- }
479
- const blob = new Blob([bytes], { type: this.getMimeTypeFromExtension(extension) });
480
- // Create a UdpDriveFile that extends File
481
- const udpDriveFile = new File([blob], filename, {
482
- type: blob.type,
483
- lastModified: Date.now()
484
- });
485
- // Add UDP-specific properties
486
- udpDriveFile.driveFileId = ''; // No drive file ID for base64 files
487
- udpDriveFile.tenantId = this.tenantId;
488
- udpDriveFile.productId = 0;
489
- udpDriveFile.path = '';
490
- udpDriveFile.extension = extension;
491
- return udpDriveFile;
492
- }
493
- /**
494
- * Get MIME type from file extension
495
- */
496
- getMimeTypeFromExtension(extension) {
497
- const mimeTypes = {
498
- 'pdf': 'application/pdf',
499
- 'doc': 'application/msword',
500
- 'docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
501
- 'xls': 'application/vnd.ms-excel',
502
- 'xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
503
- 'ppt': 'application/vnd.ms-powerpoint',
504
- 'pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
505
- 'txt': 'text/plain',
506
- 'csv': 'text/csv',
507
- 'json': 'application/json',
508
- 'xml': 'application/xml',
509
- 'html': 'text/html',
510
- 'css': 'text/css',
511
- 'js': 'application/javascript',
512
- 'png': 'image/png',
513
- 'jpg': 'image/jpeg',
514
- 'jpeg': 'image/jpeg',
515
- 'gif': 'image/gif',
516
- 'svg': 'image/svg+xml',
517
- 'zip': 'application/zip',
518
- 'rar': 'application/x-rar-compressed',
519
- '7z': 'application/x-7z-compressed'
520
- };
521
- return mimeTypes[extension.toLowerCase()] || 'application/octet-stream';
522
- }
523
533
  render() {
524
534
  if (this.loading) {
525
535
  return (index.h("div", { class: "loading-container" }, index.h("unity-spinner", { size: "medium" })));
@@ -527,7 +537,7 @@ const UdpFormsRenderer = class {
527
537
  if (!this.form) {
528
538
  return (index.h("div", { class: "error-container" }, index.h("unity-typography", { variant: "body1" }, "Form not found")));
529
539
  }
530
- return (index.h("udp-forms-ui", { form: this.form, initialValues: this.initialValues, submitSuccessful: this.submitSuccessful, isSaving: this.isSaving, saveError: this.saveError, showAutoSaveStatus: this.formHandler.supportsAutoSave() && !!this.userId, readonly: this.isSubmitted, onSubmit: this.handleSubmit.bind(this), onChange: this.handleFormChange, onAction: this.triggerAction, onFinish: this.handleFinish }));
540
+ return (index.h("div", { class: "forms-renderer-container" }, index.h("udp-forms-ui", { form: this.form, initialValues: this.initialValues, submitSuccessful: this.submitSuccessful, isSaving: this.isSaving, saveError: this.saveError, showAutoSaveStatus: this.formHandler.supportsAutoSave() && !!this.userId, readonly: this.isSubmitted, currentFormData: this.currentFormData, handleSubmit: this.handleSubmit.bind(this), handleSave: (values) => Promise.resolve(this.debouncedManualSave(values)), handleChange: this.handleFormChange, handleAction: this.triggerAction, handleFinish: this.handleFinish, userId: this.userId, isSubmitted: this.isSubmitted, dynamicSections: this.dynamicSections, duplicateRepeatableSection: this.duplicateRepeatableSection, deleteRepeatableSection: this.deleteRepeatableSection, key: `form-${this.reRenderKey}` })));
531
541
  }
532
542
  get el() { return index.getElement(this); }
533
543
  };
@@ -1 +1 @@
1
- {"file":"udp-forms-renderer.entry.cjs.js","mappings":"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","names":["createFormData","makeApiCall","ConfigService","SearchBuilder","SearchOperators","getCurrentTenantId","debounce","h"],"sources":["src/components/my-component/UI/forms/udp-forms/udp-forms-renderer/form-handler/BaseFormHandler.ts","src/components/my-component/UI/forms/udp-forms/udp-forms-renderer/form-handler/formUtils.ts","src/components/my-component/UI/forms/udp-forms/udp-forms-renderer/form-handler/PublicFormHandler.ts","src/components/my-component/UI/forms/udp-forms/udp-forms-renderer/form-handler/PrivateFormHandler.ts","src/components/my-component/UI/forms/udp-forms/udp-forms-renderer/form-handler/FormHandlerFactory.ts","src/components/my-component/UI/forms/udp-forms/udp-forms-renderer/udp-forms-renderer.tsx"],"sourcesContent":["import { IFormHandler } from './IFormHandler';\nimport { UdpForm, UdpFormSubmission, UdpFormSubmissionStatus } from '../../types';\n\n/**\n * Base class for form handlers with common functionality\n */\nexport abstract class BaseFormHandler implements IFormHandler {\n abstract getForm(): Promise<UdpForm>;\n abstract submitForm(values: { [name: string]: any }): Promise<boolean>;\n\n /**\n * Default implementation - does nothing\n * Override in subclasses that support auto-save\n */\n async saveFormData(_values: { [name: string]: any }, _status: UdpFormSubmissionStatus): Promise<UdpFormSubmission> {\n // Default implementation - no-op\n return null as any;\n }\n\n /**\n * Default implementation - returns null\n * Override in subclasses that support loading existing submissions\n */\n async loadExistingSubmission(): Promise<UdpFormSubmission | null> {\n return null;\n }\n\n /**\n * Default implementation - returns true\n * Override in subclasses that don't support auto-save\n */\n supportsAutoSave(): boolean {\n return true;\n }\n}\n","/**\n * Utility function to check if an array contains File objects\n */\nexport function isFileArray(array: any): array is File[] {\n // Check if it's an array\n if (!Array.isArray(array)) {\n return false;\n }\n\n // Check if all elements in the array are instances of File\n return array.every(item => item instanceof File);\n}\n","import { BaseFormHandler } from './BaseFormHandler';\nimport { Guid, UdpForm, StyleOverrides } from '../../types';\nimport { makeApiCall, createFormData } from '../../../../../../../udp-utilities/api/makeApiCall/makeApiCall';\nimport { ConfigService } from 'src/udp-utilities/api-config';\nimport { isFileArray } from './formUtils';\n\n/**\n * Public form submission handler (legacy endpoint)\n */\nexport class PublicFormHandler extends BaseFormHandler {\n constructor(\n private formId: Guid,\n private formVersion: number,\n private tenantId: Guid\n ) {\n super();\n }\n\n private objectToFormData(obj): FormData {\n // Separate files from regular data\n const files: File[] = [];\n const formObj = {};\n\n for (let key in obj) {\n let value;\n if (obj[key]?.value) {\n value = obj[key].value;\n } else {\n value = obj[key];\n }\n\n if (isFileArray(value)) {\n // Collect files for formFiles only if there are files\n if (value.length > 0) {\n files.push(value[0]);\n formObj[key] = value[0].name;\n }\n // If no files, skip this field entirely\n } else if (Array.isArray(value)) {\n formObj[key] = value.map(item => (typeof item === 'string' ? item : item.value)).join(',');\n } else {\n // Only include fields with meaningful values\n // Skip null, undefined, or empty string values entirely\n if (value !== null && value !== undefined && value !== '') {\n formObj[key] = value;\n }\n }\n }\n\n // Use createFormData helper with the structured data\n const formData = createFormData({\n formData: JSON.stringify(formObj),\n formFiles: files[0] // Public handler only supports single file\n });\n\n return formData;\n }\n\n async getForm(): Promise<UdpForm> {\n const formData: UdpForm = await makeApiCall('GET', `${ConfigService.productV1ApiUrl}/UdpForm/${this.formId}/describe/public?tenantId=${this.tenantId}`, {})\n .then(data => {\n if (data.id) {\n return data;\n } else {\n alert('form not found');\n return null;\n }\n })\n .catch(() => {\n // this would get thrown when the form exists but is private\n alert('form not found');\n return null;\n });\n if (formData.styleOverrides && typeof formData.styleOverrides === 'string') {\n formData.styleOverrides = JSON.parse(formData.styleOverrides) as StyleOverrides;\n }\n return formData;\n }\n\n async submitForm(values: { [name: string]: any }): Promise<boolean> {\n const formData = this.objectToFormData(values);\n\n return await makeApiCall(\n 'POST',\n `${ConfigService.productV1ApiUrl}/UdpForm/${this.formId}/${this.formVersion}/submit/public?tenantId=${this.tenantId}`,\n formData,\n true,\n )\n .then(() => true)\n .catch(() => false);\n }\n}\n","import { BaseFormHandler } from './BaseFormHandler';\nimport { Guid, UdpForm, UdpFormSubmission, UdpFormSubmissionStatus, StyleOverrides } from '../../types';\nimport { makeApiCall, createFormData } from '../../../../../../../udp-utilities/api/makeApiCall/makeApiCall';\nimport { SearchBuilder, SearchOperators } from '../../../../../../../udp-utilities/search';\nimport { ConfigService } from 'src/udp-utilities/api-config';\nimport { isFileArray } from './formUtils';\n\n/**\n * Private form submission handler (new UdpFormSubmission endpoint)\n */\nexport class PrivateFormHandler extends BaseFormHandler {\n constructor(\n private formId: Guid,\n private formVersion: number,\n private userId: Guid,\n private existingSubmission: UdpFormSubmission | null,\n private updateExistingSubmission: (submission: UdpFormSubmission) => void\n ) {\n super();\n }\n\n async getForm(): Promise<UdpForm> {\n const formData: UdpForm = await makeApiCall(\n 'GET',\n `${ConfigService.productV1ApiUrl}/UdpForm/${this.formId}${this.formVersion ? `/${this.formVersion}` : ''}/describe`\n );\n if (formData.styleOverrides && typeof formData.styleOverrides === 'string') {\n formData.styleOverrides = JSON.parse(formData.styleOverrides) as StyleOverrides;\n }\n return formData;\n }\n\n async loadExistingSubmission(): Promise<UdpFormSubmission | null> {\n try {\n const search = new SearchBuilder(1, 1) // Only need the first result\n .addFilter('unityUserId', this.userId, SearchOperators.EQUALS)\n .addFilter('formId', this.formId, SearchOperators.EQUALS)\n .addFilter('formVersion', this.formVersion.toString(), SearchOperators.EQUALS)\n .addOrder('id', 'DESC'); // Get the most recent submission if multiple exist\n\n const response = await search.execute('UdpFormSubmission');\n\n // Check if we got any results\n if (response?.pageList && response.pageList.length > 0) {\n const submission = response.pageList[0] as UdpFormSubmission;\n this.existingSubmission = submission;\n this.updateExistingSubmission(submission);\n return submission;\n }\n\n return null;\n } catch (error) {\n console.error('Error fetching existing form response:', error);\n return null;\n }\n }\n\n private createFormDataForSubmission(data: { [name: string]: any }, status: UdpFormSubmissionStatus): FormData {\n // Convert status string to numeric value\n let statusValue: number;\n if (status === 'submitted') {\n statusValue = 2;\n } else if (status === 'in-progress') {\n statusValue = 1;\n } else {\n statusValue = typeof status === 'number' ? status : 1;\n }\n\n // Prepare the base form submission data\n const formSubmissionData: Record<string, any> = {\n FormId: this.formId,\n FormVersion: this.formVersion.toString(),\n Status: statusValue.toString(),\n };\n\n if (this.existingSubmission?.id) {\n formSubmissionData.Id = this.existingSubmission.id;\n }\n\n // Separate files from regular data\n const files: File[] = [];\n const dataWithoutFiles: Record<string, any> = {};\n\n for (let key in data) {\n let value = data[key]?.value || data[key];\n let fieldFiles = data[key]?.files; // Check if this field has associated files\n\n if (fieldFiles && Array.isArray(fieldFiles)) {\n // This field has File objects - add them to files array and use the string value for data\n files.push(...fieldFiles);\n // Only include file field in data if it has a meaningful value\n if (value && value.trim() !== '') {\n dataWithoutFiles[key] = value;\n }\n // If no files and no value, skip this field entirely\n } else if (isFileArray(value)) {\n // Legacy file handling - collect files for FormFiles\n files.push(...value);\n // Store filename in data only if there are files\n if (value.length > 0) {\n dataWithoutFiles[key] = value.map(f => f.name).join(',');\n }\n // If no files, skip this field entirely\n }else if (value instanceof File) {\n // Single file handling - add to files array and use filename in data\n files.push(value);\n dataWithoutFiles[key] = value.name;\n }\n\n else if (Array.isArray(value)) {\n dataWithoutFiles[key] = value.map(item => (typeof item === 'string' ? item : item.value)).join(',');\n } else {\n // Only include non-file fields if they have a meaningful value\n // Skip null, undefined, or empty string values entirely\n if (value !== null && value !== undefined && value !== '') {\n dataWithoutFiles[key] = value;\n }\n }\n }\n\n // Add form data using the helper function\n const formData = createFormData(formSubmissionData);\n\n // Add files to FormFiles collection\n files.forEach(file => formData.append('FormFiles', file));\n\n // Convert data to Dictionary<string, string> format expected by server\n Object.keys(dataWithoutFiles).forEach(key => {\n formData.append(`Data[${key}]`, dataWithoutFiles[key]?.toString() || '');\n });\n\n return formData;\n }\n\n async saveFormData(values: { [name: string]: any }, status: UdpFormSubmissionStatus): Promise<UdpFormSubmission> {\n const formData = this.createFormDataForSubmission(values, status);\n\n let submission: UdpFormSubmission;\n\n if (this.existingSubmission) {\n // Update existing submission\n submission = await makeApiCall(\n 'PUT',\n `${ConfigService.productV1ApiUrl}/UdpFormSubmission/${this.existingSubmission.id}`,\n formData,\n true\n );\n } else {\n // Create new submission\n submission = await makeApiCall(\n 'POST',\n `${ConfigService.productV1ApiUrl}/UdpFormSubmission`,\n formData,\n true\n );\n }\n\n // Update the existing submission reference\n this.updateExistingSubmission(submission);\n return submission;\n }\n\n async submitForm(values: { [name: string]: any }): Promise<boolean> {\n try {\n await this.saveFormData(values, 'submitted');\n return true;\n } catch (error) {\n console.error('Private form submission failed:', error);\n return false;\n }\n }\n}\n","import { Build } from '@stencil/core';\nimport { IFormHandler } from './IFormHandler';\nimport { MockFormHandler } from './MockFormHandler';\nimport { PublicFormHandler } from './PublicFormHandler';\nimport { PrivateFormHandler } from './PrivateFormHandler';\nimport { Guid, UdpFormSubmission } from '../../types';\n\n/**\n * Factory for creating form handlers\n */\nexport class FormHandlerFactory {\n static create(\n isPublic: boolean,\n formId: Guid,\n version: number,\n tenantId: Guid,\n userId?: Guid | null,\n existingSubmission?: UdpFormSubmission | null,\n updateExistingSubmission?: (submission: UdpFormSubmission) => void\n ): IFormHandler {\n // Use mock handler in development\n if (Build.isDev) {\n return new MockFormHandler();\n }\n\n if (isPublic) {\n return new PublicFormHandler(formId, version, tenantId);\n } else {\n if (!userId) {\n throw new Error('User ID is required for private forms');\n }\n return new PrivateFormHandler(\n formId,\n version,\n userId,\n existingSubmission || null,\n updateExistingSubmission || (() => {})\n );\n }\n }\n}\n","import { Component, Prop, State, Element, h } from '@stencil/core';\nimport { debounce } from 'lodash';\nimport { Guid, UdpDriveFile } from 'src/global/types';\nimport { UdpForm, UdpFormSubmission } from '../types';\nimport { getCurrentTenantId } from 'src/udp-utilities/tenant/tenantUtils';\nimport { IFormHandler } from './form-handler/IFormHandler';\nimport { FormHandlerFactory } from './form-handler/FormHandlerFactory';\n\n@Component({\n tag: 'udp-forms-renderer',\n shadow: true,\n})\nexport class UdpFormsRenderer {\n @Prop() formId: Guid;\n @Prop() version: number;\n @Prop() triggerAction: (actionId: Guid, params: Object) => void;\n @Prop() isPublic: boolean = false;\n @Prop() callbackUrl: string;\n @Prop() userId: Guid | null = null; // User ID for authenticated users\n @Prop() autoSaveDelay: number = 2000; // Debounce delay for auto-save in milliseconds\n @State() form: UdpForm;\n @State() initialValues: { [name: string]: any } = {};\n @State() submitSuccessful: boolean = false;\n @Element() el: HTMLElement;\n @State() loading: boolean;\n @State() existingSubmission: UdpFormSubmission | null = null;\n @State() currentFormData: { [name: string]: any } = {};\n @State() isSaving: boolean = false;\n @State() saveError: string | null = null;\n @State() isSubmitted: boolean = false;\n\n private tenantId: Guid = getCurrentTenantId();\n private debouncedAutoSave: (values: { [name: string]: any }) => void;\n private formHandler: IFormHandler;\n\n async componentWillLoad() {\n this.loading = true;\n this.formHandler = FormHandlerFactory.create(\n this.isPublic,\n this.formId,\n this.version,\n this.tenantId,\n this.userId,\n this.existingSubmission,\n (submission) => {\n this.existingSubmission = submission;\n }\n );\n\n // Set up debounced auto-save function\n this.debouncedAutoSave = debounce(async (values: { [name: string]: any }) => {\n await this.handleAutoSave(values);\n }, this.autoSaveDelay);\n\n if (this.formId && this.version) {\n await this.loadForm();\n }\n this.loading = false;\n }\n\n private async loadForm() {\n try {\n // Load form structure\n const formData = await this.formHandler.getForm();\n this.form = formData;\n\n // Try to load existing submission if handler supports it\n if (this.userId && this.formHandler.loadExistingSubmission) {\n const existingData = await this.formHandler.loadExistingSubmission();\n if (existingData) {\n this.existingSubmission = existingData;\n this.initialValues = existingData.data || {};\n // Check if the form is submitted (status 2)\n if (existingData.status === 2) {\n this.isSubmitted = true;\n }\n // Process file data to convert file references to UdpDriveFile objects\n this.initialValues = await this.processInitialValues(this.initialValues);\n this.currentFormData = { ...this.initialValues };\n\n if (existingData.status === 2 || existingData.status === 'submitted') {\n this.isSubmitted = true;\n }\n }\n }\n } catch (error) {\n console.error('Failed to load form:', error);\n }\n }\n\n private async handleSubmit(values: { [name: string]: any }) {\n try {\n const success = await this.formHandler.submitForm(values);\n this.submitSuccessful = success;\n } catch (error) {\n console.error('Form submission failed:', error);\n throw error;\n }\n }\n\n private async handleAutoSave(values: { [name: string]: any }) {\n // Only auto-save if handler supports it and user is authenticated\n if (!this.formHandler.supportsAutoSave() || !this.userId || !this.formHandler.saveFormData) {\n return;\n }\n\n this.isSaving = true;\n this.saveError = null;\n\n try {\n await this.formHandler.saveFormData(values, 'in-progress');\n this.currentFormData = { ...values };\n } catch (error) {\n console.error('Auto-save failed:', error);\n this.saveError = 'Failed to save form data';\n } finally {\n this.isSaving = false;\n }\n }\n\n private handleFormChange = (values: { [name: string]: any }) => {\n // Trigger auto-save if form data has changed\n if (JSON.stringify(values) !== JSON.stringify(this.currentFormData)) {\n this.debouncedAutoSave(values);\n }\n };\n\n /**\n * Process initial values to convert file references to UdpDriveFile objects\n */\n private async processInitialValues(values: { [name: string]: any }): Promise<{ [name: string]: any }> {\n const processedValues = { ...values };\n\n for (const [key, value] of Object.entries(values)) {\n if (typeof value === 'string' && this.isFileReference(value)) {\n processedValues[key] = await this.parseFileReferences(value);\n }\n }\n\n return processedValues;\n }\n\n /**\n * Check if a string value is a file reference (contains | and udp: or b64:)\n */\n private isFileReference(value: string): boolean {\n return typeof value === 'string' && value.includes('|') && (value.includes('udp:') || value.includes('b64:'));\n }\n\n /**\n * Parse file references from the special format: \"filename|udp:driveFileId\" or \"filename|b64:base64data\"\n */\n private async parseFileReferences(value: string): Promise<UdpDriveFile[]> {\n const references = value.split(',').map(ref => ref.trim()).filter(ref => ref);\n const udpDriveFiles: UdpDriveFile[] = [];\n\n for (const reference of references) {\n try {\n const udpDriveFile = await this.parseFileReference(reference);\n if (udpDriveFile) {\n udpDriveFiles.push(udpDriveFile);\n }\n } catch (error) {\n console.error('Error parsing file reference:', reference, error);\n }\n }\n\n return udpDriveFiles;\n }\n\n /**\n * Parse a single file reference\n */\n private async parseFileReference(reference: string): Promise<UdpDriveFile | null> {\n const parts = reference.split('|');\n if (parts.length !== 2) {\n console.warn('Invalid file reference format:', reference);\n return null;\n }\n\n const [filename, dataRef] = parts;\n\n if (dataRef.startsWith('udp:')) {\n // Handle UDP Drive file reference\n const driveFileId = dataRef.substring(4); // Remove 'udp:' prefix\n return await this.createUdpDriveFileFromId(filename, driveFileId);\n } else if (dataRef.startsWith('b64:')) {\n // Handle base64 encoded file\n const base64Data = dataRef.substring(4); // Remove 'b64:' prefix\n return this.createUdpDriveFileFromBase64(filename, base64Data);\n }\n\n console.warn('Unknown file reference format:', dataRef);\n return null;\n }\n\n /**\n * Create a UdpDriveFile from a drive file ID\n */\n private async createUdpDriveFileFromId(filename: string, driveFileId: string): Promise<UdpDriveFile> {\n // Extract file extension from filename\n const extension = filename.split('.').pop() || '';\n\n // Create a placeholder File object - the actual content will be downloaded when needed\n const placeholderBlob = new Blob([''], { type: this.getMimeTypeFromExtension(extension) });\n const file = new File([placeholderBlob], filename, {\n type: placeholderBlob.type,\n lastModified: Date.now()\n });\n\n // Create UdpDriveFile by extending the File object\n const udpDriveFile = file as UdpDriveFile;\n\n // Add UDP-specific properties\n udpDriveFile.driveFileId = driveFileId as Guid;\n udpDriveFile.tenantId = this.tenantId;\n udpDriveFile.productId = 0; // Will be filled by server\n udpDriveFile.path = '';\n udpDriveFile.extension = extension;\n\n return udpDriveFile;\n }\n\n /**\n * Create a UdpDriveFile from base64 data\n */\n private createUdpDriveFileFromBase64(filename: string, base64Data: string): UdpDriveFile {\n // Extract file extension from filename\n const extension = filename.split('.').pop() || '';\n\n // Decode base64 data\n const binaryString = atob(base64Data);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n\n const blob = new Blob([bytes], { type: this.getMimeTypeFromExtension(extension) });\n\n // Create a UdpDriveFile that extends File\n const udpDriveFile: UdpDriveFile = new File([blob], filename, {\n type: blob.type,\n lastModified: Date.now()\n }) as UdpDriveFile;\n\n // Add UDP-specific properties\n udpDriveFile.driveFileId = '' as Guid; // No drive file ID for base64 files\n udpDriveFile.tenantId = this.tenantId;\n udpDriveFile.productId = 0;\n udpDriveFile.path = '';\n udpDriveFile.extension = extension;\n\n return udpDriveFile;\n }\n\n /**\n * Get MIME type from file extension\n */\n private getMimeTypeFromExtension(extension: string): string {\n const mimeTypes: { [key: string]: string } = {\n 'pdf': 'application/pdf',\n 'doc': 'application/msword',\n 'docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'xls': 'application/vnd.ms-excel',\n 'xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'ppt': 'application/vnd.ms-powerpoint',\n 'pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'txt': 'text/plain',\n 'csv': 'text/csv',\n 'json': 'application/json',\n 'xml': 'application/xml',\n 'html': 'text/html',\n 'css': 'text/css',\n 'js': 'application/javascript',\n 'png': 'image/png',\n 'jpg': 'image/jpeg',\n 'jpeg': 'image/jpeg',\n 'gif': 'image/gif',\n 'svg': 'image/svg+xml',\n 'zip': 'application/zip',\n 'rar': 'application/x-rar-compressed',\n '7z': 'application/x-7z-compressed'\n };\n\n return mimeTypes[extension.toLowerCase()] || 'application/octet-stream';\n }\n\n private handleFinish = () => {\n // Trigger any finish actions\n if (this.triggerAction) {\n this.triggerAction(null as any, { action: 'finish' });\n }\n };\n\n render() {\n if (this.loading) {\n return (\n <div class=\"loading-container\">\n <unity-spinner size=\"medium\" />\n </div>\n );\n }\n\n if (!this.form) {\n return (\n <div class=\"error-container\">\n <unity-typography variant=\"body1\">Form not found</unity-typography>\n </div>\n );\n }\n\n return (\n <udp-forms-ui\n form={this.form}\n initialValues={this.initialValues}\n submitSuccessful={this.submitSuccessful}\n isSaving={this.isSaving}\n saveError={this.saveError}\n showAutoSaveStatus={this.formHandler.supportsAutoSave() && !!this.userId}\n readonly={this.isSubmitted}\n onSubmit={this.handleSubmit.bind(this)}\n onChange={this.handleFormChange}\n onAction={this.triggerAction}\n onFinish={this.handleFinish}\n />\n );\n }\n}\n"],"version":3}
1
+ {"file":"udp-forms-renderer.entry.cjs.js","mappings":"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","names":["createFormData","makeApiCall","ConfigService","SearchBuilder","SearchOperators","getCurrentTenantId","throttle","h"],"sources":["src/components/my-component/UI/forms/udp-forms/udp-forms-renderer/form-handler/BaseFormHandler.ts","src/components/my-component/UI/forms/udp-forms/udp-forms-renderer/form-handler/formUtils.ts","src/components/my-component/UI/forms/udp-forms/udp-forms-renderer/form-handler/PublicFormHandler.ts","src/components/my-component/UI/forms/udp-forms/udp-forms-renderer/form-handler/PrivateFormHandler.ts","src/components/my-component/UI/forms/udp-forms/udp-forms-renderer/form-handler/FormHandlerFactory.ts","src/components/my-component/UI/forms/udp-forms/udp-forms-renderer/udp-forms-renderer.tsx"],"sourcesContent":["import { IFormHandler } from './IFormHandler';\nimport { UdpForm, UdpFormSubmission, UdpFormSubmissionStatus } from '../../types';\n\n/**\n * Base class for form handlers with common functionality\n */\nexport abstract class BaseFormHandler implements IFormHandler {\n abstract getForm(): Promise<UdpForm>;\n abstract submitForm(values: { [name: string]: any }): Promise<boolean>;\n\n /**\n * Default implementation - does nothing\n * Override in subclasses that support auto-save\n */\n async saveFormData(_values: { [name: string]: any }, _status: UdpFormSubmissionStatus): Promise<UdpFormSubmission> {\n // Default implementation - no-op\n return null as any;\n }\n\n /**\n * Default implementation - returns null\n * Override in subclasses that support loading existing submissions\n */\n async loadExistingSubmission(): Promise<UdpFormSubmission | null> {\n return null;\n }\n\n /**\n * Default implementation - returns true\n * Override in subclasses that don't support auto-save\n */\n supportsAutoSave(): boolean {\n return true;\n }\n}\n","/**\n * Utility function to check if an array contains File objects\n */\nexport function isFileArray(array: any): array is File[] {\n // Check if it's an array\n if (!Array.isArray(array)) {\n return false;\n }\n\n // Check if all elements in the array are instances of File\n return array.every(item => item instanceof File);\n}\n","// @ts-nocheck\nimport { BaseFormHandler } from './BaseFormHandler';\nimport { Guid, UdpForm, StyleOverrides } from '../../types';\nimport { makeApiCall, createFormData } from '../../../../../../../udp-utilities/api/makeApiCall/makeApiCall';\nimport { ConfigService } from 'src/udp-utilities/api-config';\nimport { isFileArray } from './formUtils';\n\n/**\n * Public form submission handler (legacy endpoint)\n */\nexport class PublicFormHandler extends BaseFormHandler {\n constructor(\n private formId: Guid,\n private formVersion: number,\n private tenantId: Guid\n ) {\n super();\n }\n\n private objectToFormData(obj): FormData {\n // Separate files from regular data\n const files: File[] = [];\n const formObj = {};\n\n for (let key in obj) {\n let value;\n if (obj[key]?.value) {\n value = obj[key].value;\n } else {\n value = obj[key];\n }\n\n if (isFileArray(value)) {\n // Collect files for formFiles only if there are files\n if (value.length > 0) {\n files.push(value[0]);\n formObj[key] = value[0].name;\n }\n // If no files, skip this field entirely\n } else if (Array.isArray(value)) {\n formObj[key] = value.map(item => (typeof item === 'string' ? item : item.value)).join(',');\n } else {\n // Only include fields with meaningful values\n // Skip null, undefined, or empty string values entirely\n if (value !== null && value !== undefined && value !== '') {\n formObj[key] = value;\n }\n }\n }\n\n // Use createFormData helper with the structured data\n const formData = createFormData({\n formData: JSON.stringify(formObj),\n formFiles: files[0] // Public handler only supports single file\n });\n\n return formData;\n }\n\n async getForm(): Promise<UdpForm> {\n const formData: UdpForm = await makeApiCall('GET', `${ConfigService.productV1ApiUrl}/UdpForm/${this.formId}/describe/public?tenantId=${this.tenantId}`, {})\n .then(data => {\n if (data.id) {\n return data;\n } else {\n alert('form not found');\n return null;\n }\n })\n .catch(() => {\n // this would get thrown when the form exists but is private\n alert('form not found');\n return null;\n });\n if (formData.styleOverrides && typeof formData.styleOverrides === 'string') {\n formData.styleOverrides = JSON.parse(formData.styleOverrides) as StyleOverrides;\n }\n return formData;\n }\n\n async submitForm(values: { [name: string]: any }): Promise<boolean> {\n const formData = this.objectToFormData(values);\n \n return await makeApiCall(\n 'POST',\n `${ConfigService.productV1ApiUrl}/UdpForm/${this.formId}/${this.formVersion}/submit/public?tenantId=${this.tenantId}`,\n formData,\n true,\n )\n .then(() => true)\n .catch(() => false);\n }\n\n\n}\n","import { BaseFormHandler } from './BaseFormHandler';\nimport { Guid, UdpForm, UdpFormSubmission, UdpFormSubmissionStatus, StyleOverrides } from '../../types';\nimport { makeApiCall, createFormData } from '../../../../../../../udp-utilities/api/makeApiCall/makeApiCall';\nimport { SearchBuilder, SearchOperators } from '../../../../../../../udp-utilities/search';\nimport { ConfigService } from 'src/udp-utilities/api-config';\nimport { isFileArray } from './formUtils';\n\n/**\n * Private form submission handler (new UdpFormSubmission endpoint)\n */\nexport class PrivateFormHandler extends BaseFormHandler {\n constructor(\n private formId: Guid,\n private formVersion: number,\n private userId: Guid,\n private existingSubmission: UdpFormSubmission | null,\n private updateExistingSubmission: (submission: UdpFormSubmission) => void\n ) {\n super();\n }\n\n async getForm(): Promise<UdpForm> {\n const formData: UdpForm = await makeApiCall(\n 'GET',\n `${ConfigService.productV1ApiUrl}/UdpForm/${this.formId}${this.formVersion ? `/${this.formVersion}` : ''}/describe`\n );\n if (formData.styleOverrides && typeof formData.styleOverrides === 'string') {\n formData.styleOverrides = JSON.parse(formData.styleOverrides) as StyleOverrides;\n }\n return formData;\n }\n\n async loadExistingSubmission(): Promise<UdpFormSubmission | null> {\n try {\n const search = new SearchBuilder(1, 1) // Only need the first result\n .addFilter('unityUserId', this.userId, SearchOperators.EQUALS)\n .addFilter('formId', this.formId, SearchOperators.EQUALS)\n .addFilter('formVersion', this.formVersion.toString(), SearchOperators.EQUALS)\n .addOrder('id', 'DESC'); // Get the most recent submission if multiple exist\n\n const response = await search.execute('UdpFormSubmission');\n\n // Check if we got any results\n if (response?.pageList && response.pageList.length > 0) {\n const submission = response.pageList[0] as UdpFormSubmission;\n this.existingSubmission = submission;\n this.updateExistingSubmission(submission);\n return submission;\n }\n\n return null;\n } catch (error) {\n console.error('Error fetching existing form response:', error);\n return null;\n }\n }\n\n private createFormDataForSubmission(data: { [name: string]: any }, status: UdpFormSubmissionStatus): FormData {\n // Convert status string to numeric value\n let statusValue: number;\n if (status === 'submitted') {\n statusValue = 2;\n } else if (status === 'in-progress') {\n statusValue = 1;\n } else {\n statusValue = typeof status === 'number' ? status : 1;\n }\n\n // Prepare the base form submission data\n const formSubmissionData: Record<string, any> = {\n FormId: this.formId,\n FormVersion: this.formVersion.toString(),\n Status: statusValue.toString(),\n };\n\n if (this.existingSubmission?.id) {\n formSubmissionData.Id = this.existingSubmission.id;\n }\n\n // Separate files from regular data\n const files: File[] = [];\n const dataWithoutFiles: Record<string, any> = {};\n\n for (let key in data) {\n let value = data[key]?.value || data[key];\n let fieldFiles = data[key]?.files; // Check if this field has associated files\n\n if (fieldFiles && Array.isArray(fieldFiles)) {\n // This field has File objects - add them to files array and use the string value for data\n files.push(...fieldFiles);\n // Only include file field in data if it has a meaningful value\n if (value && value.trim() !== '') {\n dataWithoutFiles[key] = value;\n }\n // If no files and no value, skip this field entirely\n } else if (isFileArray(value)) {\n // Legacy file handling - collect files for FormFiles\n files.push(...value);\n // Store filename in data only if there are files\n if (value.length > 0) {\n dataWithoutFiles[key] = value.map(f => f.name).join(',');\n }\n // If no files, skip this field entirely\n }else if (value instanceof File) {\n // Single file handling - add to files array and use filename in data\n files.push(value);\n dataWithoutFiles[key] = value.name;\n }\n\n else if (Array.isArray(value)) {\n dataWithoutFiles[key] = value.map(item => (typeof item === 'string' ? item : item.value)).join(',');\n } else {\n\n dataWithoutFiles[key] = value;\n\n }\n }\n\n // Add form data using the helper function\n const formData = createFormData(formSubmissionData);\n\n // Add files to FormFiles collection\n files.forEach(file => formData.append('FormFiles', file));\n\n // Convert data to Dictionary<string, string> format expected by server\n Object.keys(dataWithoutFiles).forEach(key => {\n formData.append(`Data[${key}]`, dataWithoutFiles[key]?.toString() || '');\n });\n\n return formData;\n }\n\n async saveFormData(values: { [name: string]: any }, status: UdpFormSubmissionStatus): Promise<UdpFormSubmission> {\n const formData = this.createFormDataForSubmission(values, status);\n\n let submission: UdpFormSubmission;\n\n if (this.existingSubmission) {\n // Update existing submission\n submission = await makeApiCall(\n 'PUT',\n `${ConfigService.productV1ApiUrl}/UdpFormSubmission/${this.existingSubmission.id}`,\n formData,\n true\n );\n } else {\n // Create new submission\n submission = await makeApiCall(\n 'POST',\n `${ConfigService.productV1ApiUrl}/UdpFormSubmission`,\n formData,\n true\n );\n }\n\n // Update the existing submission reference\n this.updateExistingSubmission(submission);\n return submission;\n }\n\n async submitForm(values: { [name: string]: any }): Promise<boolean> {\n try {\n\n await this.saveFormData(values, 'submitted');\n return true;\n } catch (error) {\n console.error('Private form submission failed:', error);\n return false;\n }\n }\n\n}\n","import { Build } from '@stencil/core';\nimport { IFormHandler } from './IFormHandler';\nimport { MockFormHandler } from './MockFormHandler';\nimport { PublicFormHandler } from './PublicFormHandler';\nimport { PrivateFormHandler } from './PrivateFormHandler';\nimport { Guid, UdpFormSubmission } from '../../types';\n\n/**\n * Factory for creating form handlers\n */\nexport class FormHandlerFactory {\n static create(\n isPublic: boolean,\n formId: Guid,\n version: number,\n tenantId: Guid,\n userId?: Guid | null,\n existingSubmission?: UdpFormSubmission | null,\n updateExistingSubmission?: (submission: UdpFormSubmission) => void\n ): IFormHandler {\n // Use mock handler in development\n if (Build.isDev) {\n return new MockFormHandler();\n }\n\n if (isPublic) {\n return new PublicFormHandler(formId, version, tenantId);\n } else {\n if (!userId) {\n throw new Error('User ID is required for private forms');\n }\n return new PrivateFormHandler(\n formId,\n version,\n userId,\n existingSubmission || null,\n updateExistingSubmission || (() => {})\n );\n }\n }\n}\n","import { Component, Prop, State, Element, h } from '@stencil/core';\nimport { throttle } from 'lodash';\nimport { Guid } from 'src/global/types';\nimport { UdpForm, UdpFormSubmission } from '../types';\nimport { getCurrentTenantId } from 'src/udp-utilities/tenant/tenantUtils';\nimport { IFormHandler } from './form-handler/IFormHandler';\nimport { FormHandlerFactory } from './form-handler/FormHandlerFactory';\n\n\n@Component({\n tag: 'udp-forms-renderer',\n shadow: true,\n})\nexport class UdpFormsRenderer {\n @Prop() formId: Guid;\n @Prop() version: number;\n @Prop() triggerAction: (actionId: Guid, params: Object) => void;\n @Prop() isPublic: boolean = false;\n @Prop() callbackUrl: string;\n @Prop() userId: Guid | null = null; // User ID for authenticated users\n @Prop() autoSaveDelay: number = 2000; // Debounce delay for auto-save in milliseconds (currently disabled)\n @State() form: UdpForm;\n @State() initialValues: { [name: string]: any } = {};\n @State() submitSuccessful: boolean = false;\n @Element() el: HTMLElement;\n @State() loading: boolean;\n @State() existingSubmission: UdpFormSubmission | null = null;\n @State() currentFormData: { [name: string]: any } = {};\n @State() isSaving: boolean = false;\n @State() saveError: string | null = null;\n @State() isSubmitted: boolean = false;\n @State() dynamicSections: any[] = [];\n @State() isUpdatingSections: boolean = false;\n @State() reRenderKey: number = 0;\n\n private tenantId: Guid = getCurrentTenantId();\n // private debouncedAutoSave: (values: { [name: string]: any }) => void; // Kept for future use (currently disabled)\n private debouncedManualSave: (values: { [name: string]: any }) => void; // Debounced manual save (5 seconds)\n private formHandler: IFormHandler;\n\n async componentWillLoad() {\n this.loading = true;\n this.formHandler = FormHandlerFactory.create(this.isPublic, this.formId, this.version, this.tenantId, this.userId, this.existingSubmission, submission => {\n this.existingSubmission = submission;\n });\n\n // Set up debounced auto-save function (currently disabled)\n // this.debouncedAutoSave = debounce(async (values: { [name: string]: any }) => {\n // // await this.handleAutoSave(values); // Disabled for now\n // }, this.autoSaveDelay);\n\n // Set up throttled manual save function (5 seconds) - fires immediately, then throttles\n this.debouncedManualSave = throttle(async (values: { [name: string]: any }) => {\n await this.handleManualSave(values);\n }, 2000, { leading: true, trailing: false });\n\n if (this.formId && this.version) {\n await this.loadForm();\n }\n this.loading = false;\n }\n\n private async loadForm() {\n try {\n // Load form structure\n const formData = await this.formHandler.getForm();\n this.form = formData;\n\n // Try to load existing submission if handler supports it\n if (this.userId && this.formHandler.loadExistingSubmission) {\n const existingData = await this.formHandler.loadExistingSubmission();\n\n if (existingData) {\n this.existingSubmission = existingData;\n this.initialValues = existingData.data || {};\n // Check if the form is submitted (status 2)\n if (existingData.status === 2) {\n this.isSubmitted = true;\n }\n this.currentFormData = { ...this.initialValues };\n\n if (existingData.status === 2 || existingData.status === 'submitted') {\n this.isSubmitted = true;\n }\n }\n }\n this.initializeDynamicSections();\n } catch (error) {\n console.error('Failed to load form:', error);\n }\n }\n\n // build dynamic sections based on the\n private initializeDynamicSections() {\n const tempDynamicSection: any[] = [];\n const sortedSections = structuredClone(this.form.udpFormUdpFormSection).sort((a, b) => a.order - b.order);\n\n for (const section of sortedSections) {\n section.name = `section${section.order}`; // THIS LINE WILL NOT BE NECESSARY SOON AFTER BACKEND UPDATE\n section.sectionProperties = JSON.parse(section.sectionProperties || \"{}\");\n const repeatGroupKeys = this.findRepeatGroupKeys(section.name, this.initialValues);\n section.isOriginalSection = true;\n section.sectionPositionSuffix = 1; // default position\n\n // always add the original section into dynamic sections\n tempDynamicSection.push({\n ...structuredClone(section),\n formQuestions: structuredClone(this.form.formQuestions)\n .filter(q => q.formSectionId === section.id)\n .sort((a, b) => a.questionOrder - b.questionOrder)\n .map(q => ({ ...q, processedSubmissionName: `${section.name}-${q.name}` })),\n });\n\n // create then add additional sections if there are repeated sections\n if (section.sectionProperties?.isRepeatable && repeatGroupKeys.length > 0) {\n const maxRepeatedSectionSuffix = Math.max(...repeatGroupKeys); // create a new section for the max value of repeat group keys, even if there are no saved answers\n\n // for (const repeatKey of repeatGroupKeys) { // create a section only for the suffix saved\n for (let repeatKey = 2; repeatKey <= maxRepeatedSectionSuffix; repeatKey++) {\n const clonedSection = {\n ...structuredClone(section),\n formQuestions: structuredClone(this.form.formQuestions)\n .filter(q => q.formSectionId === section.id)\n .sort((a, b) => a.questionOrder - b.questionOrder)\n .map(q => ({ ...q, processedSubmissionName: `${section.name}_${repeatKey}-${q.name}` })),\n isOriginalSection: false,\n sectionPositionSuffix: repeatKey,\n };\n tempDynamicSection.push(clonedSection);\n }\n }\n }\n\n console.log('tempDynamicSection', tempDynamicSection);\n\n this.dynamicSections = tempDynamicSection;\n }\n\n private findRepeatGroupKeys(sectionName: string, values: Object): number[] {\n const keys = Object.keys(values);\n const repeatGroupSet = new Set<number>();\n\n // Match: sectionName_2-question1\n const regex = new RegExp(`^${sectionName}_(\\\\d+)-`);\n\n keys.forEach(key => {\n const match = key.match(regex);\n if (match && match[1]) {\n repeatGroupSet.add(Number(match[1]));\n }\n });\n\n return Array.from(repeatGroupSet).sort((a, b) => a - b);\n }\n\n /**\n * Duplicate a repeatable section\n */\n private duplicateRepeatableSection = (index: number) => {\n if (this.isSubmitted || this.isUpdatingSections) return;\n this.isUpdatingSections = true;\n this.loading = true;\n\n try {\n const sectionToClone = this.dynamicSections[index];\n if (!sectionToClone) return;\n\n const cloningSectionName = sectionToClone.name;\n\n // Find existing repeat group indices\n const repeatKeys = this.findRepeatGroupKeys(cloningSectionName, this.initialValues);\n const nextRepeatIndex = repeatKeys.length > 0 ? Math.max(...repeatKeys) + 1 : 2;\n\n const clonedSection = {\n ...structuredClone(sectionToClone),\n formQuestions: sectionToClone.formQuestions.map(q => ({\n ...structuredClone(q),\n processedSubmissionName: `${cloningSectionName}_${nextRepeatIndex}-${q.name}`,\n })),\n isOriginalSection: false,\n sectionPositionSuffix: nextRepeatIndex,\n };\n\n // Find the last index of this section group\n let insertAtIndex = index;\n for (let i = index + 1; i < this.dynamicSections.length; i++) {\n const s = this.dynamicSections[i];\n if (s.name === cloningSectionName) {\n insertAtIndex = i;\n } else {\n break;\n }\n }\n\n // Insert after the last repeat of the section group\n this.dynamicSections = [...this.dynamicSections.slice(0, insertAtIndex + 1), clonedSection, ...this.dynamicSections.slice(insertAtIndex + 1)];\n\n // Create new initial values structure\n const newInitialValues = { ...this.currentFormData };\n\n clonedSection.formQuestions.forEach(q => {\n newInitialValues[q.processedSubmissionName] = null;\n });\n\n // This will trigger a complete form re-render\n this.initialValues = newInitialValues;\n this.currentFormData = newInitialValues;\n this.reRenderKey += 1;\n } finally {\n this.isUpdatingSections = false;\n this.loading = false\n }\n };\n\n /**\n * Delete a repeatable section\n */\n private deleteRepeatableSection = (index: number) => {\n if (this.isSubmitted) return;\n\n const sectionToDelete = this.dynamicSections[index];\n if (!sectionToDelete || sectionToDelete.isOriginalSection) return;\n\n this.isUpdatingSections = true;\n this.loading = true;\n\n try {\n const deleteSectionName = sectionToDelete.name;\n\n // Remove the section's initial values\\\n console.log('currentformdata', this.currentFormData)\n const newInitialValues = { ...this.currentFormData };\n\n sectionToDelete.formQuestions.forEach(q => {\n delete newInitialValues[q.processedSubmissionName];\n });\n\n // Remove the section from dynamicSections\n const updatedSections = structuredClone(this.dynamicSections);\n updatedSections.splice(index, 1);\n\n let suffixCounter = 2;\n\n updatedSections.forEach(section => {\n // no need to process unrelated sections or originalSections\n if (section.name !== deleteSectionName || section.isOriginalSection) {\n return;\n }\n\n section.sectionPositionSuffix = suffixCounter;\n suffixCounter += 1;\n\n section.formQuestions = section.formQuestions.map(q => {\n const newName = `${deleteSectionName}_${section.sectionPositionSuffix}-${q.name}`;\n const oldName = q.processedSubmissionName;\n\n // Carry over any existing value\n if (newInitialValues[oldName] !== undefined) {\n newInitialValues[newName] = newInitialValues[oldName];\n delete newInitialValues[oldName];\n }\n\n return {\n ...q,\n processedSubmissionName: newName,\n };\n });\n \n });\n\n this.dynamicSections = updatedSections;\n this.initialValues = newInitialValues;\n this.currentFormData = newInitialValues;\n this.reRenderKey += 1;\n\n\n console.log('newInitialValues', newInitialValues)\n } finally {\n this.isUpdatingSections = false;\n this.loading = false\n }\n };\n\n\n private async handleSubmit(values: { [name: string]: any }) {\n try {\n const success = await this.formHandler.submitForm(values);\n this.submitSuccessful = success;\n } catch (error) {\n console.error('Form submission failed:', error);\n throw error;\n }\n }\n\n /**\n * Manual save function - debounced to 5 seconds\n */\n private handleManualSave = async (values: { [name: string]: any }) => {\n // Only save if handler supports it and user is authenticated\n if (!this.formHandler.supportsAutoSave() || !this.userId || !this.formHandler.saveFormData) {\n return;\n }\n\n this.isSaving = true;\n this.saveError = null;\n\n try {\n await this.formHandler.saveFormData(values, 'in-progress');\n this.currentFormData = { ...values };\n console.log('Form saved successfully');\n } catch (error) {\n console.error('Manual save failed:', error);\n this.saveError = 'Failed to save form data';\n } finally {\n this.isSaving = false;\n }\n }\n\n\n private handleFormChange = (values: { [name: string]: any }) => {\n if (this.isUpdatingSections) return;\n this.currentFormData = values;\n };\n\n\n private handleFinish = () => {\n // Trigger any finish actions\n if (this.triggerAction) {\n this.triggerAction(null as any, { action: 'finish' });\n }\n };\n\n\n render() {\n if (this.loading) {\n return (\n <div class=\"loading-container\">\n <unity-spinner size=\"medium\" />\n </div>\n );\n }\n\n if (!this.form) {\n return (\n <div class=\"error-container\">\n <unity-typography variant=\"body1\">Form not found</unity-typography>\n </div>\n );\n }\n\n return (\n <div class=\"forms-renderer-container\">\n <udp-forms-ui\n form={this.form}\n initialValues={this.initialValues}\n submitSuccessful={this.submitSuccessful}\n isSaving={this.isSaving}\n saveError={this.saveError}\n showAutoSaveStatus={this.formHandler.supportsAutoSave() && !!this.userId}\n readonly={this.isSubmitted}\n currentFormData={this.currentFormData}\n handleSubmit={this.handleSubmit.bind(this)}\n handleSave={(values) => Promise.resolve(this.debouncedManualSave(values))}\n handleChange={this.handleFormChange}\n handleAction={this.triggerAction}\n handleFinish={this.handleFinish}\n userId={this.userId}\n isSubmitted={this.isSubmitted}\n dynamicSections={this.dynamicSections}\n duplicateRepeatableSection={this.duplicateRepeatableSection}\n deleteRepeatableSection={this.deleteRepeatableSection}\n key={`form-${this.reRenderKey}`}\n />\n </div>\n );\n }\n}\n"],"version":3}