udp-stencil-component-library 26.5.0-beta.2 → 26.5.0-beta.21

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 (1210) hide show
  1. package/dist/cjs/{SearchBuilder-ClIYV_dJ.js → SearchBuilder-CCtWubLX.js} +1 -1
  2. package/dist/cjs/add-map-feature-popup_4.cjs.entry.js +12 -12
  3. package/dist/cjs/address-search_6.cjs.entry.js +18 -18
  4. package/dist/cjs/advanced-search_12.cjs.entry.js +18 -18
  5. package/dist/cjs/ag-grid-base_65.cjs.entry.js +512 -174
  6. package/dist/cjs/ambient-template-grid.cjs.entry.js +16 -16
  7. package/dist/cjs/api-method-instance-grid.cjs.entry.js +4 -4
  8. package/dist/cjs/app-bar.cjs.entry.js +1 -1
  9. package/dist/cjs/{base-map_3.cjs.entry.js → base-map_4.cjs.entry.js} +59 -0
  10. package/dist/cjs/chart-container_3.cjs.entry.js +2 -2
  11. package/dist/cjs/check-box.cjs.entry.js +2 -2
  12. package/dist/cjs/chip-section.cjs.entry.js +2 -2
  13. package/dist/cjs/codecs-Z6GTnUYS.js +2424 -0
  14. package/dist/cjs/createAzureMapsProviders-b1fKbjhG.js +80 -0
  15. package/dist/cjs/custom-button.cjs.entry.js +1 -1
  16. package/dist/cjs/date-time-renderer_9.cjs.entry.js +21 -21
  17. package/dist/cjs/feature-details-card_2.cjs.entry.js +5 -5
  18. package/dist/cjs/file-upload_2.cjs.entry.js +5 -5
  19. package/dist/cjs/filter-conditions_7.cjs.entry.js +7 -7
  20. package/dist/cjs/{form-metadata-display_10.cjs.entry.js → form-metadata-display_9.cjs.entry.js} +6 -65
  21. package/dist/cjs/icon-grid.cjs.entry.js +1 -1
  22. package/dist/cjs/index-G1ccGqOs.js +30 -26
  23. package/dist/cjs/index.cjs.js +4 -80
  24. package/dist/cjs/loader.cjs.js +1 -1
  25. package/dist/cjs/logical-search-indicator.cjs.entry.js +1 -1
  26. package/dist/cjs/map-component_2.cjs.entry.js +2 -2
  27. package/dist/cjs/primary-action-header_2.cjs.entry.js +4 -4
  28. package/dist/cjs/question-configs-renderer_4.cjs.entry.js +15 -15
  29. package/dist/cjs/resource-timeline-calendar.cjs.entry.js +1 -1
  30. package/dist/cjs/resource-timeline-primary-bar.cjs.entry.js +3 -3
  31. package/dist/cjs/search-method-grid.cjs.entry.js +4 -3
  32. package/dist/cjs/{searchObject-DeDFFGcx.js → searchObject-mbqgqdRh.js} +1 -0
  33. package/dist/cjs/{searchObjectHelper-a5QztNDL.js → searchObjectHelper-DYpPEIzz.js} +1 -1
  34. package/dist/cjs/server-side-grid.cjs.entry.js +1 -1
  35. package/dist/cjs/side-sheet-container.cjs.entry.js +1 -1
  36. package/dist/cjs/simple-card.cjs.entry.js +1 -1
  37. package/dist/cjs/status-chip_2.cjs.entry.js +2 -2
  38. package/dist/cjs/stencil-chip.cjs.entry.js +2 -2
  39. package/dist/cjs/stencil-library.cjs.js +1 -1
  40. package/dist/cjs/stencil-toggle.cjs.entry.js +4 -4
  41. package/dist/cjs/text-field_2.cjs.entry.js +7 -7
  42. package/dist/cjs/types-mjOM5U2F.js +49 -0
  43. package/dist/cjs/udp-adornment.cjs.entry.js +1 -1
  44. package/dist/cjs/udp-advanced-search-builder.cjs.entry.js +2 -2
  45. package/dist/cjs/udp-advanced-search-filter-group.cjs.entry.js +2 -2
  46. package/dist/cjs/udp-ag-area-chart.cjs.entry.js +2 -2
  47. package/dist/cjs/udp-ag-bar-chart_4.cjs.entry.js +5 -5
  48. package/dist/cjs/udp-ag-bubble-chart.cjs.entry.js +2 -2
  49. package/dist/cjs/udp-ag-combo-chart.cjs.entry.js +2 -2
  50. package/dist/cjs/udp-ag-donut-chart.cjs.entry.js +2 -2
  51. package/dist/cjs/udp-ag-line-chart.cjs.entry.js +2 -2
  52. package/dist/cjs/udp-ag-pie-chart.cjs.entry.js +2 -2
  53. package/dist/cjs/udp-ag-scatter-chart.cjs.entry.js +2 -2
  54. package/dist/cjs/udp-attachment-item_2.cjs.entry.js +1 -1
  55. package/dist/cjs/udp-attachment-list.cjs.entry.js +1 -1
  56. package/dist/cjs/udp-bar-chart.cjs.entry.js +1 -1
  57. package/dist/cjs/udp-calendar-base.cjs.entry.js +1 -1
  58. package/dist/cjs/udp-calendar-day.cjs.entry.js +1 -1
  59. package/dist/cjs/udp-calendar-month.cjs.entry.js +1 -1
  60. package/dist/cjs/udp-calendar-week.cjs.entry.js +1 -1
  61. package/dist/cjs/udp-calendar-year.cjs.entry.js +1 -1
  62. package/dist/cjs/udp-card-action-area.cjs.entry.js +1 -1
  63. package/dist/cjs/udp-card_6.cjs.entry.js +7 -7
  64. package/dist/cjs/udp-charts-example.cjs.entry.js +1 -1
  65. package/dist/cjs/udp-container-query-grid-item.cjs.entry.js +1 -1
  66. package/dist/cjs/udp-container-query-grid.cjs.entry.js +1 -1
  67. package/dist/cjs/udp-container-query.cjs.entry.js +2 -2
  68. package/dist/cjs/udp-container.cjs.entry.js +2 -2
  69. package/dist/cjs/udp-dynamic-container-with-menu.cjs.entry.js +1 -1
  70. package/dist/cjs/udp-dynamic-form.cjs.entry.js +1 -1
  71. package/dist/cjs/udp-fluent-file-input.cjs.entry.js +4 -4
  72. package/dist/cjs/udp-fluent-image.cjs.entry.js +1 -1
  73. package/dist/cjs/udp-fluent-inline-edit_6.cjs.entry.js +4498 -0
  74. package/dist/cjs/udp-fluent-link.cjs.entry.js +1 -1
  75. package/dist/cjs/udp-fluent-list-input.cjs.entry.js +46 -0
  76. package/dist/cjs/udp-fluent-list-item_2.cjs.entry.js +322 -0
  77. package/dist/cjs/udp-fluent-location-input.cjs.entry.js +3 -3
  78. package/dist/cjs/udp-fluent-number-input.cjs.entry.js +1 -1
  79. package/dist/cjs/udp-fluent-signature-input.cjs.entry.js +5 -5
  80. package/dist/cjs/udp-fluent-table-input.cjs.entry.js +347 -0
  81. package/dist/cjs/udp-forms-builder-style-override.cjs.entry.js +1 -1
  82. package/dist/cjs/udp-forms-follow-up-list-card.cjs.entry.js +2 -2
  83. package/dist/cjs/udp-forms-list-card.cjs.entry.js +4 -4
  84. package/dist/cjs/udp-forms-list.cjs.entry.js +1 -1
  85. package/dist/cjs/udp-forms-renderer.cjs.entry.js +3 -3
  86. package/dist/cjs/udp-kpi-card.cjs.entry.js +1 -1
  87. package/dist/cjs/udp-kpi-cards.cjs.entry.js +2 -2
  88. package/dist/cjs/udp-map.cjs.entry.js +3 -3
  89. package/dist/cjs/udp-menu.cjs.entry.js +1 -1
  90. package/dist/cjs/udp-page.cjs.entry.js +1 -1
  91. package/dist/cjs/udp-question-form-builder.cjs.entry.js +2376 -0
  92. package/dist/cjs/udp-question-tally-adapter.cjs.entry.js +138 -0
  93. package/dist/cjs/udp-sankey-chart.cjs.entry.js +1 -1
  94. package/dist/cjs/udp-skeleton-loading.cjs.entry.js +1 -1
  95. package/dist/cjs/udp-split-screen.cjs.entry.js +1 -1
  96. package/dist/cjs/udp-stepper-actions.cjs.entry.js +1 -1
  97. package/dist/cjs/udp-stepper-content.cjs.entry.js +2 -2
  98. package/dist/cjs/udp-stepper-demo.cjs.entry.js +1 -1
  99. package/dist/cjs/udp-stepper-nav.cjs.entry.js +1 -1
  100. package/dist/cjs/udp-tab.cjs.entry.js +1 -1
  101. package/dist/cjs/udp-timeline-connector.cjs.entry.js +1 -1
  102. package/dist/cjs/udp-timeline-dot.cjs.entry.js +1 -1
  103. package/dist/cjs/udp-timeline-item.cjs.entry.js +2 -2
  104. package/dist/cjs/udp-timeline-separator.cjs.entry.js +1 -1
  105. package/dist/cjs/udp-timeline.cjs.entry.js +1 -1
  106. package/dist/cjs/udp-xy-chart.cjs.entry.js +1 -1
  107. package/dist/cjs/udp-xy-multi-series-chart.cjs.entry.js +1 -1
  108. package/dist/cjs/{udpOperatorHelper-MusjN9iI.js → udpOperatorHelper-r6cQBK8k.js} +1 -1
  109. package/dist/collection/__mocks__/jest-setup.js +10 -0
  110. package/dist/collection/collection-manifest.json +10 -3
  111. package/dist/collection/components/advanced-search/advanced-search-grouped.js +2 -2
  112. package/dist/collection/components/advanced-search/advanced-search.js +2 -2
  113. package/dist/collection/components/advanced-search/filter-conditions/filter-conditions.js +5 -1
  114. package/dist/collection/components/advanced-search/ui/logical-search-indicator/logical-search-indicator.js +5 -1
  115. package/dist/collection/components/attachment-list/udp-attachment-item.js +4 -0
  116. package/dist/collection/components/attachment-list/udp-attachment-list.js +5 -1
  117. package/dist/collection/components/buttons/icon-button/function-button/udp-function-button.js +1 -1
  118. package/dist/collection/components/buttons/icon-button/primary-button/custom-button.js +1 -1
  119. package/dist/collection/components/buttons/icon-button/radio-button/udp-radio-button.js +5 -1
  120. package/dist/collection/components/buttons/icon-button/stencil-icon-button-grid-action-header.js +4 -0
  121. package/dist/collection/components/buttons/udp-button/udp-button.js +4 -1
  122. package/dist/collection/components/calendar/udp-calendar-base.js +1 -1
  123. package/dist/collection/components/calendar/udp-calendar-day.js +1 -1
  124. package/dist/collection/components/calendar/udp-calendar-month.js +1 -1
  125. package/dist/collection/components/calendar/udp-calendar-week.js +1 -1
  126. package/dist/collection/components/calendar/udp-calendar-year.js +1 -1
  127. package/dist/collection/components/charts/chart-kpi/chart-kpi.js +1 -1
  128. package/dist/collection/components/charts/udp-ag-area-chart/udp-ag-area-chart.js +2 -2
  129. package/dist/collection/components/charts/udp-ag-bar-chart/udp-ag-bar-chart.js +2 -2
  130. package/dist/collection/components/charts/udp-ag-bubble-chart/udp-ag-bubble-chart.js +2 -2
  131. package/dist/collection/components/charts/udp-ag-combo-chart/udp-ag-combo-chart.js +2 -2
  132. package/dist/collection/components/charts/udp-ag-donut-chart/udp-ag-donut-chart.js +2 -2
  133. package/dist/collection/components/charts/udp-ag-line-chart/udp-ag-line-chart.js +2 -2
  134. package/dist/collection/components/charts/udp-ag-pie-chart/udp-ag-pie-chart.js +2 -2
  135. package/dist/collection/components/charts/udp-ag-scatter-chart/udp-ag-scatter-chart.js +2 -2
  136. package/dist/collection/components/charts/udp-bar-chart/udp-bar-chart.js +1 -1
  137. package/dist/collection/components/charts/udp-charts-example.js +4 -1
  138. package/dist/collection/components/charts/udp-distribution-chart/udp-distribution-chart.js +1 -1
  139. package/dist/collection/components/charts/udp-donut-chart/udp-donut-chart.js +1 -1
  140. package/dist/collection/components/charts/udp-line-chart/udp-line-chart.js +1 -1
  141. package/dist/collection/components/charts/udp-sankey-chart/udp-sankey-chart.js +1 -1
  142. package/dist/collection/components/charts/udp-xy-chart/udp-xy-chart.js +1 -1
  143. package/dist/collection/components/charts/udp-xy-multi-series-chart/udp-xy-multi-series-chart.js +1 -1
  144. package/dist/collection/components/data-display/adornment/udp-adornment/udp-adornment.js +5 -1
  145. package/dist/collection/components/data-display/badge/udp-badge.js +5 -1
  146. package/dist/collection/components/data-display/cards/udp-ambient-card/udp-ambient-card.js +5 -1
  147. package/dist/collection/components/data-display/cards/udp-card/udp-card-action-area/udp-card-action-area.js +5 -1
  148. package/dist/collection/components/data-display/cards/udp-card/udp-card-actions/udp-card-actions.js +5 -1
  149. package/dist/collection/components/data-display/cards/udp-card/udp-card-content/udp-card-content.js +5 -1
  150. package/dist/collection/components/data-display/cards/udp-card/udp-card-header/udp-card-header.js +5 -1
  151. package/dist/collection/components/data-display/cards/udp-card/udp-card-media/udp-card-media.js +5 -1
  152. package/dist/collection/components/data-display/cards/udp-card/udp-card.js +7 -3
  153. package/dist/collection/components/data-display/chips/stencil-chip/status-chip/status-chip.js +1 -1
  154. package/dist/collection/components/data-display/chips/stencil-chip/stencil-chip.js +2 -2
  155. package/dist/collection/components/data-display/chips/udp-chip.js +4 -1
  156. package/dist/collection/components/data-display/divider/udp-divider.js +5 -1
  157. package/dist/collection/components/data-display/empty-state-display/udp-empty-state-display.js +5 -1
  158. package/dist/collection/components/data-display/headers/udp-column-header.js +5 -1
  159. package/dist/collection/components/data-display/headers/udp-page-header/udp-page-header.js +5 -1
  160. package/dist/collection/components/data-display/hint-panel/hint-panel.js +5 -1
  161. package/dist/collection/components/data-display/kpi/kpi-list.js +1 -1
  162. package/dist/collection/components/data-display/kpi/udp-kpi-card.js +1 -1
  163. package/dist/collection/components/data-display/kpi/udp-kpi-cards.js +2 -2
  164. package/dist/collection/components/data-display/list-item/list-item.js +2 -2
  165. package/dist/collection/components/data-display/list-renderer/udp-list-renderer.js +4 -0
  166. package/dist/collection/components/data-display/pop-over/udp-pop-over.js +5 -1
  167. package/dist/collection/components/data-display/pop-over-grid-action-header/udp-pop-over-grid-action-header.js +5 -1
  168. package/dist/collection/components/data-display/primary-action-header/primary-action-header.js +6 -2
  169. package/dist/collection/components/data-display/simple-card/simple-card.js +5 -1
  170. package/dist/collection/components/data-display/tool-tip/udp-ambient-tool-tip.js +6 -2
  171. package/dist/collection/components/data-display/tree/tree-list-item/search-item/search-list-item.js +5 -1
  172. package/dist/collection/components/data-display/tree/tree-list-item/tree-list-item.js +4 -0
  173. package/dist/collection/components/data-display/udp-avatar/udp-avatar.js +5 -1
  174. package/dist/collection/components/dialogs/udp-dialog.js +5 -1
  175. package/dist/collection/components/drawers/udp-side-sheet/udp-side-sheet.js +12 -9
  176. package/dist/collection/components/feedback/udp-notification/alerts/upd-alert-banner.js +5 -1
  177. package/dist/collection/components/feedback/udp-notification/udp-notification.js +6 -2
  178. package/dist/collection/components/fluent-ui/accordion/udp-accordion.css +42 -0
  179. package/dist/collection/components/fluent-ui/accordion/udp-accordion.js +34 -2
  180. package/dist/collection/components/fluent-ui/autocomplete/udp-autocomplete.js +8 -8
  181. package/dist/collection/components/fluent-ui/avatar/udp-fluent-avatar.js +7 -2
  182. package/dist/collection/components/fluent-ui/badge/udp-fluent-badge.js +1 -1
  183. package/dist/collection/components/fluent-ui/button/udp-fluent-button.js +1 -1
  184. package/dist/collection/components/fluent-ui/card/udp-fluent-card.js +3 -3
  185. package/dist/collection/components/fluent-ui/checkbox/udp-fluent-checkbox.js +3 -1
  186. package/dist/collection/components/fluent-ui/compound-button/udp-compound-button.js +1 -1
  187. package/dist/collection/components/fluent-ui/counter-badge/udp-fluent-counter-badge.js +1 -1
  188. package/dist/collection/components/fluent-ui/date-time-input/udp-date-time-input.js +1 -1
  189. package/dist/collection/components/fluent-ui/dialog/udp-fluent-dialog.js +3 -1
  190. package/dist/collection/components/fluent-ui/divider/udp-fluent-divider.js +1 -1
  191. package/dist/collection/components/fluent-ui/drawer/udp-fluent-drawer.js +14 -1
  192. package/dist/collection/components/fluent-ui/dropdown/udp-fluent-dropdown.js +8 -8
  193. package/dist/collection/components/fluent-ui/empty-state/udp-empty-state.js +1 -1
  194. package/dist/collection/components/fluent-ui/file-input/udp-fluent-file-input.js +4 -4
  195. package/dist/collection/components/fluent-ui/icon/icon-grid/icon-grid.js +1 -1
  196. package/dist/collection/components/fluent-ui/icon/udp-fluent-icon.js +3 -1
  197. package/dist/collection/components/fluent-ui/icon-button/udp-fluent-icon-button.js +3 -1
  198. package/dist/collection/components/fluent-ui/image/udp-fluent-image.js +6 -1
  199. package/dist/collection/components/fluent-ui/inline-edit/udp-fluent-inline-edit.js +1 -1
  200. package/dist/collection/components/fluent-ui/link/udp-fluent-link.js +1 -1
  201. package/dist/collection/components/fluent-ui/list/udp-list.js +1 -1
  202. package/dist/collection/components/fluent-ui/list-input/udp-fluent-list-input.css +29 -0
  203. package/dist/collection/components/fluent-ui/list-input/udp-fluent-list-input.js +295 -0
  204. package/dist/collection/components/fluent-ui/list-item/udp-list-item.js +2 -2
  205. package/dist/collection/components/fluent-ui/location-input/udp-fluent-location-input.js +3 -3
  206. package/dist/collection/components/fluent-ui/message-bar/udp-message-bar.css +11 -0
  207. package/dist/collection/components/fluent-ui/message-bar/udp-message-bar.js +11 -1
  208. package/dist/collection/components/fluent-ui/number-input/udp-fluent-number-input.js +1 -1
  209. package/dist/collection/components/fluent-ui/popover/udp-popover.js +4 -4
  210. package/dist/collection/components/fluent-ui/progress-bar/udp-progress-bar.js +1 -1
  211. package/dist/collection/components/fluent-ui/radio-group/udp-fluent-radio-group.js +1 -1
  212. package/dist/collection/components/fluent-ui/search-input/udp-search-input.js +3 -3
  213. package/dist/collection/components/fluent-ui/signature-input/udp-fluent-signature-input.css +12 -0
  214. package/dist/collection/components/fluent-ui/signature-input/udp-fluent-signature-input.js +4 -4
  215. package/dist/collection/components/fluent-ui/slider/udp-slider.js +1 -1
  216. package/dist/collection/components/fluent-ui/spinner/udp-spinner.js +1 -1
  217. package/dist/collection/components/fluent-ui/swatch-picker/udp-swatch-picker.js +1 -1
  218. package/dist/collection/components/fluent-ui/switch/udp-fluent-switch.js +3 -1
  219. package/dist/collection/components/fluent-ui/table-input/udp-fluent-table-input.css +43 -0
  220. package/dist/collection/components/fluent-ui/table-input/udp-fluent-table-input.js +599 -0
  221. package/dist/collection/components/fluent-ui/table-input/udp-fluent-table-input.types.js +1 -0
  222. package/dist/collection/components/fluent-ui/text/udp-text.js +1 -1
  223. package/dist/collection/components/fluent-ui/text-input/udp-fluent-text-input.js +2 -2
  224. package/dist/collection/components/fluent-ui/textarea/udp-textarea.js +2 -2
  225. package/dist/collection/components/fluent-ui/time-input/udp-time-input.js +1 -1
  226. package/dist/collection/components/fluent-ui/toggle-button/udp-fluent-toggle-button.js +1 -1
  227. package/dist/collection/components/fluent-ui/tooltip/udp-tooltip.js +4 -2
  228. package/dist/collection/components/fluent-ui/tree/udp-tree.js +1 -1
  229. package/dist/collection/components/forms/dynamic-form/udp-dynamic-form.js +1 -1
  230. package/dist/collection/components/forms/edit-view-form/edit-view-form.js +2 -2
  231. package/dist/collection/components/forms/form/stencil-form.js +1 -1
  232. package/dist/collection/components/forms/save-view-form/save-view-form.js +2 -2
  233. package/dist/collection/components/forms/udp-forms/udp-forms-builder/forms-question-item/udp-forms-builder-question-item.js +2 -2
  234. package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/file-upload-renderer/file-upload-renderer.js +4 -4
  235. package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/form-metadata-display-renderer/form-metadata-display-renderer.js +3 -3
  236. package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/list-option-renderer/list-options-renderer.js +3 -3
  237. package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/location-renderer/location-renderer.js +6 -6
  238. package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/question-configs-renderer/question-configs-renderer.js +7 -7
  239. package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/section-configs-renderer/section-configs-renderer.js +4 -4
  240. package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/signature-renderer/signature-renderer.js +1 -1
  241. package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/table-columns-renderer/table-columns-renderer.js +2 -2
  242. package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/text-input-renderer/text-input-renderer.js +2 -2
  243. package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-menu/udp-forms-builder-menu.js +2 -2
  244. package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-style-override/udp-forms-builder-style-override.js +1 -1
  245. package/dist/collection/components/forms/udp-forms/udp-forms-list/udp-forms-list-card/udp-forms-list-card.js +4 -4
  246. package/dist/collection/components/forms/udp-forms/udp-forms-list/udp-forms-list.js +1 -1
  247. package/dist/collection/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-follow-up-list-card/udp-forms-follow-up-list-card.js +2 -2
  248. package/dist/collection/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer.js +1 -1
  249. package/dist/collection/components/forms/udp-forms/udp-question/table-input/table-input.js +1 -1
  250. package/dist/collection/components/forms/udp-question-form/__forms-harness__/assert.js +31 -0
  251. package/dist/collection/components/forms/udp-question-form/__forms-harness__/fixture.types.js +1 -0
  252. package/dist/collection/components/forms/udp-question-form/__forms-harness__/fixtures/checkbox.fixtures.js +189 -0
  253. package/dist/collection/components/forms/udp-question-form/__forms-harness__/fixtures/date-selector.fixtures.js +173 -0
  254. package/dist/collection/components/forms/udp-question-form/__forms-harness__/fixtures/date-time-selector.fixtures.js +155 -0
  255. package/dist/collection/components/forms/udp-question-form/__forms-harness__/fixtures/dropdown-multiple-select.fixtures.js +180 -0
  256. package/dist/collection/components/forms/udp-question-form/__forms-harness__/fixtures/dropdown-single-select.fixtures.js +136 -0
  257. package/dist/collection/components/forms/udp-question-form/__forms-harness__/fixtures/file-upload.fixtures.js +184 -0
  258. package/dist/collection/components/forms/udp-question-form/__forms-harness__/fixtures/form-metadata-display.fixtures.js +104 -0
  259. package/dist/collection/components/forms/udp-question-form/__forms-harness__/fixtures/hidden.fixtures.js +133 -0
  260. package/dist/collection/components/forms/udp-question-form/__forms-harness__/fixtures/image-upload.fixtures.js +122 -0
  261. package/dist/collection/components/forms/udp-question-form/__forms-harness__/fixtures/list-multi-select.fixtures.js +137 -0
  262. package/dist/collection/components/forms/udp-question-form/__forms-harness__/fixtures/location-additional.fixtures.js +119 -0
  263. package/dist/collection/components/forms/udp-question-form/__forms-harness__/fixtures/location-default-location.fixture.js +164 -0
  264. package/dist/collection/components/forms/udp-question-form/__forms-harness__/fixtures/location-required.fixture.js +84 -0
  265. package/dist/collection/components/forms/udp-question-form/__forms-harness__/fixtures/multi-line-text.fixtures.js +148 -0
  266. package/dist/collection/components/forms/udp-question-form/__forms-harness__/fixtures/number.fixtures.js +173 -0
  267. package/dist/collection/components/forms/udp-question-form/__forms-harness__/fixtures/paragraph.fixtures.js +93 -0
  268. package/dist/collection/components/forms/udp-question-form/__forms-harness__/fixtures/radio-button.fixtures.js +141 -0
  269. package/dist/collection/components/forms/udp-question-form/__forms-harness__/fixtures/signature.fixtures.js +168 -0
  270. package/dist/collection/components/forms/udp-question-form/__forms-harness__/fixtures/single-line-text.fixtures.js +153 -0
  271. package/dist/collection/components/forms/udp-question-form/__forms-harness__/fixtures/table.fixtures.js +97 -0
  272. package/dist/collection/components/forms/udp-question-form/__forms-harness__/fixtures/tally.fixtures.js +125 -0
  273. package/dist/collection/components/forms/udp-question-form/__forms-harness__/fixtures/time-selector.fixtures.js +175 -0
  274. package/dist/collection/components/forms/udp-question-form/__forms-harness__/fixtures/yes-no.fixtures.js +190 -0
  275. package/dist/collection/components/forms/udp-question-form/__forms-harness__/harness-dom.js +158 -0
  276. package/dist/collection/components/forms/udp-question-form/__forms-harness__/harness.js +55 -0
  277. package/dist/collection/components/forms/udp-question-form/builder/components/add-question-drawer-content.js +12 -0
  278. package/dist/collection/components/forms/udp-question-form/builder/components/configure-question-drawer.js +33 -0
  279. package/dist/collection/components/forms/udp-question-form/builder/components/form-structure-sidebar.js +87 -0
  280. package/dist/collection/components/forms/udp-question-form/builder/components/preview-pane.js +15 -0
  281. package/dist/collection/components/forms/udp-question-form/builder/components/questionConfig/GenericQuestionConfig.js +76 -0
  282. package/dist/collection/components/forms/udp-question-form/builder/components/questionConfig/ValidationRulesSection.js +75 -0
  283. package/dist/collection/components/forms/udp-question-form/builder/components/questionConfig/index.js +3 -0
  284. package/dist/collection/components/forms/udp-question-form/builder/components/questionConfig/typeSpecific/FileUploadConfig.js +4 -0
  285. package/dist/collection/components/forms/udp-question-form/builder/components/questionConfig/typeSpecific/FormMetadataDisplayConfig.js +4 -0
  286. package/dist/collection/components/forms/udp-question-form/builder/components/questionConfig/typeSpecific/ListOptionsConfig.js +124 -0
  287. package/dist/collection/components/forms/udp-question-form/builder/components/questionConfig/typeSpecific/LocationConfig.js +21 -0
  288. package/dist/collection/components/forms/udp-question-form/builder/components/questionConfig/typeSpecific/ParagraphConfig.js +4 -0
  289. package/dist/collection/components/forms/udp-question-form/builder/components/questionConfig/typeSpecific/SignatureConfig.js +4 -0
  290. package/dist/collection/components/forms/udp-question-form/builder/components/questionConfig/typeSpecific/TableConfig.js +153 -0
  291. package/dist/collection/components/forms/udp-question-form/builder/components/questionConfig/typeSpecific/TallyConfig.js +59 -0
  292. package/dist/collection/components/forms/udp-question-form/builder/components/questionConfig/typeSpecific/index.js +45 -0
  293. package/dist/collection/components/forms/udp-question-form/builder/components/questionConfig/types.js +1 -0
  294. package/dist/collection/components/forms/udp-question-form/builder/components/questionConfig/udp-question-config-fluent.css +140 -0
  295. package/dist/collection/components/forms/udp-question-form/builder/components/questionConfig/udp-question-config-fluent.js +299 -0
  296. package/dist/collection/components/forms/udp-question-form/builder/components/questionConfig/utils/configValues.js +28 -0
  297. package/dist/collection/components/forms/udp-question-form/builder/components/questionConfig/utils/dateTimeFormat.js +26 -0
  298. package/dist/collection/components/forms/udp-question-form/builder/components/questionConfig/utils/index.js +3 -0
  299. package/dist/collection/components/forms/udp-question-form/builder/components/questionConfig/utils/sortableRef.js +41 -0
  300. package/dist/collection/components/forms/udp-question-form/builder/components/section-card.js +19 -0
  301. package/dist/collection/components/forms/udp-question-form/builder/components/section-edit-drawer-content.js +36 -0
  302. package/dist/collection/components/forms/udp-question-form/builder/components/section-question-item.js +43 -0
  303. package/dist/collection/components/forms/udp-question-form/builder/config/constants.js +15 -0
  304. package/dist/collection/components/forms/udp-question-form/builder/config/index.js +1 -0
  305. package/dist/collection/components/forms/udp-question-form/builder/form-item-types/index.js +2 -0
  306. package/dist/collection/components/forms/udp-question-form/builder/form-item-types/registry.js +13 -0
  307. package/dist/collection/components/forms/udp-question-form/builder/form-item-types/templates.js +315 -0
  308. package/dist/collection/components/forms/udp-question-form/builder/form-item-types/types.js +1 -0
  309. package/dist/collection/components/forms/udp-question-form/builder/form-item-types/validation.js +127 -0
  310. package/dist/collection/components/forms/udp-question-form/builder/udp-question-form-builder.css +361 -0
  311. package/dist/collection/components/forms/udp-question-form/builder/udp-question-form-builder.js +1382 -0
  312. package/dist/collection/components/forms/udp-question-form/builder/utils/builder-api.js +119 -0
  313. package/dist/collection/components/forms/udp-question-form/builder/utils/form-versions.js +20 -0
  314. package/dist/collection/components/forms/udp-question-form/builder/utils/question-template.js +63 -0
  315. package/dist/collection/components/forms/udp-question-form/core/choice-options.js +17 -0
  316. package/dist/collection/components/forms/udp-question-form/core/defaults.js +63 -0
  317. package/dist/collection/components/forms/udp-question-form/core/field-properties-schemas/common-keys.js +15 -0
  318. package/dist/collection/components/forms/udp-question-form/core/field-properties-schemas/engine.js +179 -0
  319. package/dist/collection/components/forms/udp-question-form/core/field-properties-schemas/index.js +2 -0
  320. package/dist/collection/components/forms/udp-question-form/core/field-properties-schemas/per-type/checkbox.js +24 -0
  321. package/dist/collection/components/forms/udp-question-form/core/field-properties-schemas/per-type/date-selector.js +27 -0
  322. package/dist/collection/components/forms/udp-question-form/core/field-properties-schemas/per-type/date-time-selector.js +35 -0
  323. package/dist/collection/components/forms/udp-question-form/core/field-properties-schemas/per-type/dropdown-multiple-select.js +24 -0
  324. package/dist/collection/components/forms/udp-question-form/core/field-properties-schemas/per-type/dropdown-single-select.js +22 -0
  325. package/dist/collection/components/forms/udp-question-form/core/field-properties-schemas/per-type/file-upload.js +12 -0
  326. package/dist/collection/components/forms/udp-question-form/core/field-properties-schemas/per-type/form-metadata-display.js +11 -0
  327. package/dist/collection/components/forms/udp-question-form/core/field-properties-schemas/per-type/hidden.js +10 -0
  328. package/dist/collection/components/forms/udp-question-form/core/field-properties-schemas/per-type/image-upload.js +10 -0
  329. package/dist/collection/components/forms/udp-question-form/core/field-properties-schemas/per-type/list-multi-select.js +24 -0
  330. package/dist/collection/components/forms/udp-question-form/core/field-properties-schemas/per-type/location.js +30 -0
  331. package/dist/collection/components/forms/udp-question-form/core/field-properties-schemas/per-type/multi-line-text.js +9 -0
  332. package/dist/collection/components/forms/udp-question-form/core/field-properties-schemas/per-type/number.js +17 -0
  333. package/dist/collection/components/forms/udp-question-form/core/field-properties-schemas/per-type/paragraph.js +11 -0
  334. package/dist/collection/components/forms/udp-question-form/core/field-properties-schemas/per-type/radio-button.js +22 -0
  335. package/dist/collection/components/forms/udp-question-form/core/field-properties-schemas/per-type/signature.js +9 -0
  336. package/dist/collection/components/forms/udp-question-form/core/field-properties-schemas/per-type/single-line-text.js +13 -0
  337. package/dist/collection/components/forms/udp-question-form/core/field-properties-schemas/per-type/table.js +20 -0
  338. package/dist/collection/components/forms/udp-question-form/core/field-properties-schemas/per-type/tally.js +19 -0
  339. package/dist/collection/components/forms/udp-question-form/core/field-properties-schemas/per-type/time-selector.js +25 -0
  340. package/dist/collection/components/forms/udp-question-form/core/field-properties-schemas/per-type/yes-no.js +14 -0
  341. package/dist/collection/components/forms/udp-question-form/core/field-properties-schemas/registry.js +64 -0
  342. package/dist/collection/components/forms/udp-question-form/core/field-properties-schemas/toggles.js +20 -0
  343. package/dist/collection/components/forms/udp-question-form/core/field-properties-schemas/types.js +1 -0
  344. package/dist/collection/components/forms/udp-question-form/core/field-properties.js +1 -0
  345. package/dist/collection/components/forms/udp-question-form/core/index.js +8 -0
  346. package/dist/collection/components/forms/udp-question-form/core/parse.js +154 -0
  347. package/dist/collection/components/forms/udp-question-form/core/serialize.js +66 -0
  348. package/dist/collection/components/forms/udp-question-form/core/slot-index.js +40 -0
  349. package/dist/collection/components/forms/udp-question-form/core/types.js +45 -0
  350. package/dist/collection/components/forms/udp-question-form/core/validation/consistency.js +63 -0
  351. package/dist/collection/components/forms/udp-question-form/core/validation/emptiness.js +33 -0
  352. package/dist/collection/components/forms/udp-question-form/core/validation/engine.js +94 -0
  353. package/dist/collection/components/forms/udp-question-form/core/validation/index.js +15 -0
  354. package/dist/collection/components/forms/udp-question-form/core/validation/intrinsic.js +81 -0
  355. package/dist/collection/components/forms/udp-question-form/core/validation/registry.js +81 -0
  356. package/dist/collection/components/forms/udp-question-form/core/validation/rules/age.js +16 -0
  357. package/dist/collection/components/forms/udp-question-form/core/validation/rules/index.js +55 -0
  358. package/dist/collection/components/forms/udp-question-form/core/validation/rules/integer-only.js +26 -0
  359. package/dist/collection/components/forms/udp-question-form/core/validation/rules/max-age.js +52 -0
  360. package/dist/collection/components/forms/udp-question-form/core/validation/rules/max-date-time.js +34 -0
  361. package/dist/collection/components/forms/udp-question-form/core/validation/rules/max-date.js +24 -0
  362. package/dist/collection/components/forms/udp-question-form/core/validation/rules/max-decimal-places.js +67 -0
  363. package/dist/collection/components/forms/udp-question-form/core/validation/rules/max-length.js +38 -0
  364. package/dist/collection/components/forms/udp-question-form/core/validation/rules/max-rows.js +53 -0
  365. package/dist/collection/components/forms/udp-question-form/core/validation/rules/max-selections.js +50 -0
  366. package/dist/collection/components/forms/udp-question-form/core/validation/rules/max-time.js +29 -0
  367. package/dist/collection/components/forms/udp-question-form/core/validation/rules/max-value.js +34 -0
  368. package/dist/collection/components/forms/udp-question-form/core/validation/rules/min-age.js +54 -0
  369. package/dist/collection/components/forms/udp-question-form/core/validation/rules/min-date-time.js +34 -0
  370. package/dist/collection/components/forms/udp-question-form/core/validation/rules/min-date.js +24 -0
  371. package/dist/collection/components/forms/udp-question-form/core/validation/rules/min-length.js +40 -0
  372. package/dist/collection/components/forms/udp-question-form/core/validation/rules/min-rows.js +58 -0
  373. package/dist/collection/components/forms/udp-question-form/core/validation/rules/min-selections.js +55 -0
  374. package/dist/collection/components/forms/udp-question-form/core/validation/rules/min-time.js +31 -0
  375. package/dist/collection/components/forms/udp-question-form/core/validation/rules/min-value.js +36 -0
  376. package/dist/collection/components/forms/udp-question-form/core/validation/rules/must-be-yes.js +23 -0
  377. package/dist/collection/components/forms/udp-question-form/core/validation/rules/no-future-date-time.js +32 -0
  378. package/dist/collection/components/forms/udp-question-form/core/validation/rules/no-future-date.js +31 -0
  379. package/dist/collection/components/forms/udp-question-form/core/validation/rules/no-past-date-time.js +26 -0
  380. package/dist/collection/components/forms/udp-question-form/core/validation/rules/no-past-date.js +27 -0
  381. package/dist/collection/components/forms/udp-question-form/core/validation/rules/pattern.js +65 -0
  382. package/dist/collection/components/forms/udp-question-form/core/validation/rules/required.js +44 -0
  383. package/dist/collection/components/forms/udp-question-form/core/validation/rules/step.js +47 -0
  384. package/dist/collection/components/forms/udp-question-form/core/validation/types.js +1 -0
  385. package/dist/collection/components/forms/udp-question-form/follow-up-forms-api.js +74 -0
  386. package/dist/collection/components/forms/udp-question-form/renderer/runtime/codecs.js +456 -0
  387. package/dist/collection/components/forms/udp-question-form/renderer/runtime/comments-api.js +36 -0
  388. package/dist/collection/components/forms/udp-question-form/renderer/runtime/comments-state.js +184 -0
  389. package/dist/collection/components/forms/udp-question-form/renderer/runtime/dynamic-sections.js +198 -0
  390. package/dist/collection/components/forms/udp-question-form/renderer/runtime/follow-up-forms.js +176 -0
  391. package/dist/collection/components/forms/udp-question-form/renderer/runtime/index.js +13 -0
  392. package/dist/collection/components/forms/udp-question-form/renderer/runtime/initial-values.js +68 -0
  393. package/dist/collection/components/forms/udp-question-form/renderer/runtime/parse.js +103 -0
  394. package/dist/collection/components/forms/udp-question-form/renderer/runtime/progress.js +44 -0
  395. package/dist/collection/components/forms/udp-question-form/renderer/runtime/serialize-submission.js +107 -0
  396. package/dist/collection/components/forms/udp-question-form/renderer/runtime/submit.js +82 -0
  397. package/dist/collection/components/forms/udp-question-form/renderer/runtime/types.js +13 -0
  398. package/dist/collection/components/forms/udp-question-form/renderer/runtime/url-seed.js +90 -0
  399. package/dist/collection/components/forms/udp-question-form/renderer/runtime/validate-submission.js +50 -0
  400. package/dist/collection/components/forms/udp-question-form/renderer/runtime/wire-adapter.js +37 -0
  401. package/dist/collection/components/forms/udp-question-form/renderer/udp-question-form-renderer.css +488 -0
  402. package/dist/collection/components/forms/udp-question-form/renderer/udp-question-form-renderer.js +1801 -0
  403. package/dist/collection/components/forms/udp-question-form/renderer/ui/adapters/udp-question-tally-adapter.js +306 -0
  404. package/dist/collection/components/forms/udp-question-form/renderer/ui/avatar.js +26 -0
  405. package/dist/collection/components/forms/udp-question-form/renderer/ui/comment-item.js +28 -0
  406. package/dist/collection/components/forms/udp-question-form/renderer/ui/comment-thread.js +30 -0
  407. package/dist/collection/components/forms/udp-question-form/renderer/ui/follow-up-picker-dialog.js +32 -0
  408. package/dist/collection/components/forms/udp-question-form/renderer/ui/form-shell.js +154 -0
  409. package/dist/collection/components/forms/udp-question-form/renderer/ui/index.js +6 -0
  410. package/dist/collection/components/forms/udp-question-form/renderer/ui/question-renderer.js +352 -0
  411. package/dist/collection/components/forms/udp-question-form/renderer/ui/question-view-renderer.js +306 -0
  412. package/dist/collection/components/forms/udp-question-form/renderer/ui/section-card.js +39 -0
  413. package/dist/collection/components/forms/udp-question-form/renderer/url.js +51 -0
  414. package/dist/collection/components/forms/udp-question-form/version-drawer/udp-form-version-drawer.js +136 -0
  415. package/dist/collection/components/grid/ag-table/ag-table.js +5 -1
  416. package/dist/collection/components/grid/ambient-template-grid/ambient-template-grid.js +16 -16
  417. package/dist/collection/components/grid/grid-primary-bar/grid-primary-bar.js +6 -2
  418. package/dist/collection/components/grid/hotlists/udp-hotlist-form/udp-hotlist-form.js +5 -1
  419. package/dist/collection/components/grid/new-grid/ag-grid-base.js +2 -1
  420. package/dist/collection/components/grid/new-grid/api-method-instance-grid.js +2 -2
  421. package/dist/collection/components/grid/new-grid/client-side-grid.js +1 -1
  422. package/dist/collection/components/grid/new-grid/grid-header.css +18 -0
  423. package/dist/collection/components/grid/new-grid/grid-header.js +8 -1
  424. package/dist/collection/components/grid/new-grid/gridFunctionRegistry.js +2 -0
  425. package/dist/collection/components/grid/new-grid/gridFunctions/columnSelector.js +145 -0
  426. package/dist/collection/components/grid/new-grid/helperFunctions/buildSearchObject.js +1 -0
  427. package/dist/collection/components/grid/new-grid/search-method-grid.js +1 -1
  428. package/dist/collection/components/grid/new-grid/server-side-grid.js +1 -1
  429. package/dist/collection/components/grid/resource-timeline-calendar/resource-timeline-calendar.js +1 -1
  430. package/dist/collection/components/grid/resource-timeline-calendar/resource-timeline-primary-bar.js +3 -3
  431. package/dist/collection/components/inputs/address-search/address-search.js +7 -3
  432. package/dist/collection/components/inputs/checkbox/check-box.js +5 -2
  433. package/dist/collection/components/inputs/date-range-selector/udp-date-range-selector.js +2 -2
  434. package/dist/collection/components/inputs/date-selector/udp-date-selector.js +6 -3
  435. package/dist/collection/components/inputs/date-time-selector/udp-datetime-selector.js +6 -3
  436. package/dist/collection/components/inputs/file-upload/file-upload.js +7 -4
  437. package/dist/collection/components/inputs/form metadata display/form-metadata-display.js +4 -1
  438. package/dist/collection/components/inputs/image-upload/image-upload.js +4 -1
  439. package/dist/collection/components/inputs/location-input/location-input.js +4 -0
  440. package/dist/collection/components/inputs/numeric-field/numeric-field.js +6 -3
  441. package/dist/collection/components/inputs/selectable-list/selectable-list.js +3 -0
  442. package/dist/collection/components/inputs/signature-input/signature-input.js +6 -2
  443. package/dist/collection/components/inputs/tally/tally.js +5 -2
  444. package/dist/collection/components/inputs/text-area/text-area.js +6 -3
  445. package/dist/collection/components/inputs/text-field/text-field.js +6 -3
  446. package/dist/collection/components/inputs/time-selector/udp-time-selector.js +6 -3
  447. package/dist/collection/components/inputs/toggle/stencil-toggle.js +4 -4
  448. package/dist/collection/components/inputs/udp-selector/udp-selector.js +7 -4
  449. package/dist/collection/components/layout/primary-action-header/udp-primary-action-header.css +1 -1
  450. package/dist/collection/components/layout/primary-action-header/udp-primary-action-header.js +3 -3
  451. package/dist/collection/components/layout/udp-container/udp-container.js +2 -2
  452. package/dist/collection/components/layout/udp-container-query/udp-container-query.js +2 -2
  453. package/dist/collection/components/layout/udp-container-query-grid/udp-container-query-grid.js +1 -1
  454. package/dist/collection/components/layout/udp-container-query-grid-item/udp-container-query-grid-item.js +1 -1
  455. package/dist/collection/components/layout/udp-page/udp-page.js +1 -1
  456. package/dist/collection/components/layout/udp-sidebar-layout/udp-sidebar-layout.js +2 -2
  457. package/dist/collection/components/layout/udp-split-screen/udp-split-screen.js +1 -1
  458. package/dist/collection/components/layout/udp-vertical-spacer.js +1 -1
  459. package/dist/collection/components/loaders/udp-grid-loader/udp-grid-loader.js +6 -2
  460. package/dist/collection/components/loaders/udp-linear-loader/udp-linear-loader.js +5 -1
  461. package/dist/collection/components/loaders/udp-skeleton-loading.js +5 -1
  462. package/dist/collection/components/map/udp-map/map-component.js +1 -1
  463. package/dist/collection/components/map/udp-map/popups/add-map-feature-popup.js +3 -3
  464. package/dist/collection/components/map/udp-map/popups/feature-details-card/feature-details-card.js +4 -4
  465. package/dist/collection/components/map/udp-map/popups/feature-details-popup.js +1 -1
  466. package/dist/collection/components/map/udp-map/popups/select-layer-popup.js +2 -2
  467. package/dist/collection/components/map/udp-map/popups/split-line-popup.js +1 -1
  468. package/dist/collection/components/map/udp-map/toolbar/map-toolbar.js +6 -6
  469. package/dist/collection/components/map/udp-map/udp-map-toolbar.js +1 -1
  470. package/dist/collection/components/map/udp-map/udp-map.js +3 -3
  471. package/dist/collection/components/menu/menu-item/udp-menu-item.js +1 -1
  472. package/dist/collection/components/menu/udp-menu.js +5 -1
  473. package/dist/collection/components/navigation/pagination/udp-pagination.js +4 -0
  474. package/dist/collection/components/navigation/udp-link/udp-link.js +4 -0
  475. package/dist/collection/components/new-form/field/udp-field.js +81 -27
  476. package/dist/collection/components/new-form/form/udp-form-component.js +322 -27
  477. package/dist/collection/components/new-form/validators.js +13 -5
  478. package/dist/collection/components/stepper/udp-stepper-actions/udp-stepper-actions.js +1 -1
  479. package/dist/collection/components/stepper/udp-stepper-content/udp-stepper-content.js +2 -2
  480. package/dist/collection/components/stepper/udp-stepper-demo.js +5 -1
  481. package/dist/collection/components/stepper/udp-stepper-nav/udp-stepper-nav.js +1 -1
  482. package/dist/collection/components/tabs/tab/tabs/udp-tabs.js +6 -2
  483. package/dist/collection/components/tabs/tab/udp-tab.js +5 -1
  484. package/dist/collection/components/tabs/udp-tab-panel/udp-tab-panel.js +1 -1
  485. package/dist/collection/components/timeline/udp-timeline-connector.js +1 -1
  486. package/dist/collection/components/timeline/udp-timeline-dot.js +1 -1
  487. package/dist/collection/components/timeline/udp-timeline-item.js +2 -2
  488. package/dist/collection/components/timeline/udp-timeline-separator.js +1 -1
  489. package/dist/collection/components/timeline/udp-timeline.js +1 -1
  490. package/dist/collection/components/toolbars/app-bar/app-bar.js +5 -1
  491. package/dist/collection/components/unity-typography/unity-typography.js +4 -0
  492. package/dist/collection/components/util/ghost-render/ghost-render.js +1 -1
  493. package/dist/collection/components/util/lazy-loader/udp-lazy-loader.js +1 -1
  494. package/dist/collection/deprecated/components/side-sheet/side-sheet-container.js +1 -1
  495. package/dist/collection/deprecated/components/side-sheet/side-sheet.js +1 -1
  496. package/dist/collection/test-pages/test-components-page.js +28 -28
  497. package/dist/collection/test-pages/test-form.js +4 -4
  498. package/dist/collection/udp-utilities/layout/udp-dynamic-container-with-menu/chip-section/chip-section.js +2 -2
  499. package/dist/collection/udp-utilities/layout/udp-dynamic-container-with-menu/udp-dynamic-container-with-menu.js +1 -1
  500. package/dist/collection/udp-utilities/location/getCachedAzureMapsProviders.js +18 -0
  501. package/dist/collection/udp-utilities/search/searchObject.js +1 -0
  502. package/dist/components/add-map-feature-popup2.js +1 -1
  503. package/dist/components/address-search2.js +1 -1
  504. package/dist/components/advanced-search-grouped2.js +1 -1
  505. package/dist/components/advanced-search2.js +1 -1
  506. package/dist/components/ag-grid-base2.js +1 -1
  507. package/dist/components/ag-table2.js +1 -1
  508. package/dist/components/ambient-template-grid.js +1 -1
  509. package/dist/components/api-method-instance-grid.js +1 -1
  510. package/dist/components/app-bar.js +1 -1
  511. package/dist/components/chart-kpi2.js +1 -1
  512. package/dist/components/check-box.js +1 -1
  513. package/dist/components/chip-section.js +1 -1
  514. package/dist/components/client-side-grid2.js +1 -1
  515. package/dist/components/createAzureMapsProviders.js +1 -0
  516. package/dist/components/custom-button2.js +1 -1
  517. package/dist/components/edit-view-form.js +1 -1
  518. package/dist/components/feature-details-card2.js +1 -1
  519. package/dist/components/feature-details-popup2.js +1 -1
  520. package/dist/components/file-upload-renderer2.js +1 -1
  521. package/dist/components/file-upload2.js +1 -1
  522. package/dist/components/filter-conditions2.js +1 -1
  523. package/dist/components/form-metadata-display-renderer2.js +1 -1
  524. package/dist/components/form-metadata-display2.js +1 -1
  525. package/dist/components/getCachedAzureMapsProviders.js +1 -0
  526. package/dist/components/ghost-render2.js +1 -1
  527. package/dist/components/grid-header2.js +1 -1
  528. package/dist/components/grid-primary-bar2.js +1 -1
  529. package/dist/components/hint-panel2.js +1 -1
  530. package/dist/components/icon-grid.js +1 -1
  531. package/dist/components/image-upload2.js +1 -1
  532. package/dist/components/index.js +1 -1
  533. package/dist/components/kpi-list2.js +1 -1
  534. package/dist/components/list-item.js +1 -1
  535. package/dist/components/list-options-renderer2.js +1 -1
  536. package/dist/components/location-renderer2.js +1 -1
  537. package/dist/components/logical-search-indicator.js +1 -1
  538. package/dist/components/map-component2.js +1 -1
  539. package/dist/components/map-toolbar2.js +1 -1
  540. package/dist/components/numeric-field2.js +1 -1
  541. package/dist/components/primary-action-header2.js +1 -1
  542. package/dist/components/question-configs-renderer2.js +1 -1
  543. package/dist/components/resource-timeline-calendar.js +1 -1
  544. package/dist/components/resource-timeline-primary-bar2.js +1 -1
  545. package/dist/components/save-view-form.js +1 -1
  546. package/dist/components/search-list-item2.js +1 -1
  547. package/dist/components/search-method-grid2.js +1 -1
  548. package/dist/components/searchObject.js +1 -1
  549. package/dist/components/section-configs-renderer2.js +1 -1
  550. package/dist/components/select-layer-popup2.js +1 -1
  551. package/dist/components/server-side-grid2.js +1 -1
  552. package/dist/components/side-sheet-container2.js +1 -1
  553. package/dist/components/side-sheet2.js +1 -1
  554. package/dist/components/signature-input2.js +1 -1
  555. package/dist/components/signature-renderer2.js +1 -1
  556. package/dist/components/simple-card.js +1 -1
  557. package/dist/components/split-line-popup2.js +1 -1
  558. package/dist/components/status-chip2.js +1 -1
  559. package/dist/components/stencil-chip2.js +1 -1
  560. package/dist/components/stencil-form2.js +1 -1
  561. package/dist/components/stencil-toggle2.js +1 -1
  562. package/dist/components/table-columns-renderer2.js +1 -1
  563. package/dist/components/table-input2.js +1 -1
  564. package/dist/components/tally.js +1 -1
  565. package/dist/components/test-components-page.js +1 -1
  566. package/dist/components/test-form2.js +1 -1
  567. package/dist/components/text-area2.js +1 -1
  568. package/dist/components/text-field2.js +1 -1
  569. package/dist/components/text-input-renderer2.js +1 -1
  570. package/dist/components/types.js +1 -0
  571. package/dist/components/udp-accordion2.js +1 -1
  572. package/dist/components/udp-adornment2.js +1 -1
  573. package/dist/components/udp-ag-area-chart.js +1 -1
  574. package/dist/components/udp-ag-bar-chart2.js +1 -1
  575. package/dist/components/udp-ag-bubble-chart.js +1 -1
  576. package/dist/components/udp-ag-combo-chart.js +1 -1
  577. package/dist/components/udp-ag-donut-chart.js +1 -1
  578. package/dist/components/udp-ag-line-chart.js +1 -1
  579. package/dist/components/udp-ag-pie-chart.js +1 -1
  580. package/dist/components/udp-ag-scatter-chart.js +1 -1
  581. package/dist/components/udp-ambient-card2.js +1 -1
  582. package/dist/components/udp-ambient-tool-tip2.js +1 -1
  583. package/dist/components/udp-attachment-list.js +1 -1
  584. package/dist/components/udp-autocomplete2.js +1 -1
  585. package/dist/components/udp-avatar2.js +1 -1
  586. package/dist/components/udp-badge2.js +1 -1
  587. package/dist/components/udp-bar-chart.js +1 -1
  588. package/dist/components/udp-button2.js +1 -1
  589. package/dist/components/udp-calendar-base2.js +1 -1
  590. package/dist/components/udp-calendar-day.js +1 -1
  591. package/dist/components/udp-calendar-month.js +1 -1
  592. package/dist/components/udp-calendar-week.js +1 -1
  593. package/dist/components/udp-calendar-year.js +1 -1
  594. package/dist/components/udp-card-action-area.js +1 -1
  595. package/dist/components/udp-card-actions2.js +1 -1
  596. package/dist/components/udp-card-content2.js +1 -1
  597. package/dist/components/udp-card-header2.js +1 -1
  598. package/dist/components/udp-card-media2.js +1 -1
  599. package/dist/components/udp-card2.js +1 -1
  600. package/dist/components/udp-charts-example.js +1 -1
  601. package/dist/components/udp-chip2.js +1 -1
  602. package/dist/components/udp-column-header2.js +1 -1
  603. package/dist/components/udp-compound-button2.js +1 -1
  604. package/dist/components/udp-container-query-grid-item.js +1 -1
  605. package/dist/components/udp-container-query-grid.js +1 -1
  606. package/dist/components/udp-container-query2.js +1 -1
  607. package/dist/components/udp-container2.js +1 -1
  608. package/dist/components/udp-date-range-selector2.js +1 -1
  609. package/dist/components/udp-date-selector2.js +1 -1
  610. package/dist/components/udp-date-time-input2.js +1 -1
  611. package/dist/components/udp-datetime-selector2.js +1 -1
  612. package/dist/components/udp-dialog2.js +1 -1
  613. package/dist/components/udp-distribution-chart2.js +1 -1
  614. package/dist/components/udp-divider2.js +1 -1
  615. package/dist/components/udp-donut-chart2.js +1 -1
  616. package/dist/components/udp-dynamic-container-with-menu2.js +1 -1
  617. package/dist/components/udp-dynamic-form.js +1 -1
  618. package/dist/components/udp-empty-state-display2.js +1 -1
  619. package/dist/components/udp-empty-state2.js +1 -1
  620. package/dist/components/udp-field2.js +1 -1
  621. package/dist/components/udp-fluent-avatar2.js +1 -1
  622. package/dist/components/udp-fluent-badge2.js +1 -1
  623. package/dist/components/udp-fluent-button2.js +1 -1
  624. package/dist/components/udp-fluent-card2.js +1 -1
  625. package/dist/components/udp-fluent-checkbox2.js +1 -1
  626. package/dist/components/udp-fluent-counter-badge2.js +1 -1
  627. package/dist/components/udp-fluent-dialog2.js +1 -1
  628. package/dist/components/udp-fluent-divider2.js +1 -1
  629. package/dist/components/udp-fluent-drawer2.js +1 -1
  630. package/dist/components/udp-fluent-dropdown2.js +1 -1
  631. package/dist/components/udp-fluent-file-input.js +1 -1
  632. package/dist/components/udp-fluent-icon-button2.js +1 -1
  633. package/dist/components/udp-fluent-icon2.js +1 -1
  634. package/dist/components/udp-fluent-image.js +1 -1
  635. package/dist/components/udp-fluent-inline-edit.js +1 -1
  636. package/dist/components/udp-fluent-inline-edit2.js +1 -0
  637. package/dist/components/udp-fluent-link.js +1 -1
  638. package/dist/components/udp-fluent-list-input.d.ts +11 -0
  639. package/dist/components/udp-fluent-list-input.js +2 -0
  640. package/dist/components/udp-fluent-list-item.js +1 -1
  641. package/dist/components/udp-fluent-location-input.js +1 -1
  642. package/dist/components/udp-fluent-number-input.js +1 -1
  643. package/dist/components/udp-fluent-radio-group2.js +1 -1
  644. package/dist/components/udp-fluent-signature-input.js +1 -1
  645. package/dist/components/udp-fluent-switch2.js +1 -1
  646. package/dist/components/udp-fluent-table-input.d.ts +11 -0
  647. package/dist/components/udp-fluent-table-input.js +2 -0
  648. package/dist/components/udp-fluent-text-input2.js +1 -1
  649. package/dist/components/udp-fluent-toggle-button2.js +1 -1
  650. package/dist/components/udp-form-component2.js +1 -1
  651. package/dist/components/udp-form-version-drawer.d.ts +11 -0
  652. package/dist/components/udp-form-version-drawer.js +2 -0
  653. package/dist/components/udp-form-version-drawer2.js +1 -0
  654. package/dist/components/udp-forms-builder-menu2.js +1 -1
  655. package/dist/components/udp-forms-builder-question-item2.js +1 -1
  656. package/dist/components/udp-forms-builder-style-override.js +1 -1
  657. package/dist/components/udp-forms-follow-up-list-card.js +1 -1
  658. package/dist/components/udp-forms-list-card2.js +1 -1
  659. package/dist/components/udp-forms-list.js +1 -1
  660. package/dist/components/udp-forms-renderer.js +1 -1
  661. package/dist/components/udp-function-button2.js +1 -1
  662. package/dist/components/udp-grid-loader2.js +1 -1
  663. package/dist/components/udp-hotlist-form2.js +1 -1
  664. package/dist/components/udp-kpi-card2.js +1 -1
  665. package/dist/components/udp-kpi-cards.js +1 -1
  666. package/dist/components/udp-lazy-loader2.js +1 -1
  667. package/dist/components/udp-line-chart2.js +1 -1
  668. package/dist/components/udp-linear-loader2.js +1 -1
  669. package/dist/components/udp-list-item2.js +1 -0
  670. package/dist/components/udp-list.js +1 -1
  671. package/dist/components/udp-list2.js +1 -0
  672. package/dist/components/udp-map-toolbar2.js +1 -1
  673. package/dist/components/udp-map.js +1 -1
  674. package/dist/components/udp-menu-item2.js +1 -1
  675. package/dist/components/udp-menu.js +1 -1
  676. package/dist/components/udp-message-bar2.js +1 -1
  677. package/dist/components/udp-notification2.js +1 -1
  678. package/dist/components/udp-page-header2.js +1 -1
  679. package/dist/components/udp-page.js +1 -1
  680. package/dist/components/udp-pop-over-grid-action-header2.js +1 -1
  681. package/dist/components/udp-pop-over2.js +1 -1
  682. package/dist/components/udp-popover2.js +1 -1
  683. package/dist/components/udp-primary-action-header2.js +1 -1
  684. package/dist/components/udp-progress-bar2.js +1 -1
  685. package/dist/components/udp-question-config-fluent.d.ts +11 -0
  686. package/dist/components/udp-question-config-fluent.js +2 -0
  687. package/dist/components/udp-question-config-fluent2.js +1 -0
  688. package/dist/components/udp-question-form-builder.d.ts +11 -0
  689. package/dist/components/udp-question-form-builder.js +2 -0
  690. package/dist/components/udp-question-form-renderer.d.ts +11 -0
  691. package/dist/components/udp-question-form-renderer.js +2 -0
  692. package/dist/components/udp-question-form-renderer2.js +1 -0
  693. package/dist/components/udp-question-tally-adapter.d.ts +11 -0
  694. package/dist/components/udp-question-tally-adapter.js +2 -0
  695. package/dist/components/udp-radio-button2.js +1 -1
  696. package/dist/components/udp-sankey-chart.js +1 -1
  697. package/dist/components/udp-search-input2.js +1 -1
  698. package/dist/components/udp-selector2.js +1 -1
  699. package/dist/components/udp-side-sheet2.js +1 -1
  700. package/dist/components/udp-sidebar-layout.js +1 -1
  701. package/dist/components/udp-sidebar-layout2.js +1 -0
  702. package/dist/components/udp-skeleton-loading2.js +1 -1
  703. package/dist/components/udp-slider2.js +1 -1
  704. package/dist/components/udp-spinner2.js +1 -1
  705. package/dist/components/udp-split-screen.js +1 -1
  706. package/dist/components/udp-stepper-actions.js +1 -1
  707. package/dist/components/udp-stepper-content.js +1 -1
  708. package/dist/components/udp-stepper-demo.js +1 -1
  709. package/dist/components/udp-stepper-nav.js +1 -1
  710. package/dist/components/udp-swatch-picker2.js +1 -1
  711. package/dist/components/udp-tab-panel2.js +1 -1
  712. package/dist/components/udp-tab.js +1 -1
  713. package/dist/components/udp-tabs2.js +1 -1
  714. package/dist/components/udp-text2.js +1 -1
  715. package/dist/components/udp-textarea2.js +1 -1
  716. package/dist/components/udp-time-input2.js +1 -1
  717. package/dist/components/udp-time-selector2.js +1 -1
  718. package/dist/components/udp-timeline-connector.js +1 -1
  719. package/dist/components/udp-timeline-dot.js +1 -1
  720. package/dist/components/udp-timeline-item.js +1 -1
  721. package/dist/components/udp-timeline-separator.js +1 -1
  722. package/dist/components/udp-timeline.js +1 -1
  723. package/dist/components/udp-tooltip2.js +1 -1
  724. package/dist/components/udp-tree2.js +1 -1
  725. package/dist/components/udp-vertical-spacer.js +1 -1
  726. package/dist/components/udp-vertical-spacer2.js +1 -0
  727. package/dist/components/udp-xy-chart2.js +1 -1
  728. package/dist/components/udp-xy-multi-series-chart.js +1 -1
  729. package/dist/components/upd-alert-banner2.js +1 -1
  730. package/dist/docs.json +4046 -371
  731. package/dist/esm/{SearchBuilder-DDfrKm8m.js → SearchBuilder-CPsWhOXB.js} +1 -1
  732. package/dist/esm/add-map-feature-popup_4.entry.js +12 -12
  733. package/dist/esm/address-search_6.entry.js +18 -18
  734. package/dist/esm/advanced-search_12.entry.js +18 -18
  735. package/dist/esm/ag-grid-base_65.entry.js +512 -174
  736. package/dist/esm/ambient-template-grid.entry.js +16 -16
  737. package/dist/esm/api-method-instance-grid.entry.js +4 -4
  738. package/dist/esm/app-bar.entry.js +1 -1
  739. package/dist/esm/{base-map_3.entry.js → base-map_4.entry.js} +59 -1
  740. package/dist/esm/chart-container_3.entry.js +2 -2
  741. package/dist/esm/check-box.entry.js +2 -2
  742. package/dist/esm/chip-section.entry.js +2 -2
  743. package/dist/esm/codecs-0Y96Q95P.js +2401 -0
  744. package/dist/esm/createAzureMapsProviders-CLLCmr8f.js +78 -0
  745. package/dist/esm/custom-button.entry.js +1 -1
  746. package/dist/esm/date-time-renderer_9.entry.js +21 -21
  747. package/dist/esm/feature-details-card_2.entry.js +5 -5
  748. package/dist/esm/file-upload_2.entry.js +5 -5
  749. package/dist/esm/filter-conditions_7.entry.js +7 -7
  750. package/dist/esm/{form-metadata-display_10.entry.js → form-metadata-display_9.entry.js} +7 -65
  751. package/dist/esm/icon-grid.entry.js +1 -1
  752. package/dist/esm/index-Cgpvu-iV.js +30 -26
  753. package/dist/esm/index.js +4 -80
  754. package/dist/esm/loader.js +1 -1
  755. package/dist/esm/logical-search-indicator.entry.js +1 -1
  756. package/dist/esm/map-component_2.entry.js +2 -2
  757. package/dist/esm/primary-action-header_2.entry.js +4 -4
  758. package/dist/esm/question-configs-renderer_4.entry.js +15 -15
  759. package/dist/esm/resource-timeline-calendar.entry.js +1 -1
  760. package/dist/esm/resource-timeline-primary-bar.entry.js +3 -3
  761. package/dist/esm/search-method-grid.entry.js +4 -3
  762. package/dist/esm/{searchObject-CDJVsMG_.js → searchObject-DpUZkcYC.js} +1 -0
  763. package/dist/esm/{searchObjectHelper-CVNJDbDx.js → searchObjectHelper-BjA6OHxg.js} +1 -1
  764. package/dist/esm/server-side-grid.entry.js +1 -1
  765. package/dist/esm/side-sheet-container.entry.js +1 -1
  766. package/dist/esm/simple-card.entry.js +1 -1
  767. package/dist/esm/status-chip_2.entry.js +2 -2
  768. package/dist/esm/stencil-chip.entry.js +2 -2
  769. package/dist/esm/stencil-library.js +1 -1
  770. package/dist/esm/stencil-toggle.entry.js +4 -4
  771. package/dist/esm/text-field_2.entry.js +7 -7
  772. package/dist/esm/types-C9Z-dgvN.js +47 -0
  773. package/dist/esm/udp-adornment.entry.js +1 -1
  774. package/dist/esm/udp-advanced-search-builder.entry.js +2 -2
  775. package/dist/esm/udp-advanced-search-filter-group.entry.js +2 -2
  776. package/dist/esm/udp-ag-area-chart.entry.js +2 -2
  777. package/dist/esm/udp-ag-bar-chart_4.entry.js +5 -5
  778. package/dist/esm/udp-ag-bubble-chart.entry.js +2 -2
  779. package/dist/esm/udp-ag-combo-chart.entry.js +2 -2
  780. package/dist/esm/udp-ag-donut-chart.entry.js +2 -2
  781. package/dist/esm/udp-ag-line-chart.entry.js +2 -2
  782. package/dist/esm/udp-ag-pie-chart.entry.js +2 -2
  783. package/dist/esm/udp-ag-scatter-chart.entry.js +2 -2
  784. package/dist/esm/udp-attachment-item_2.entry.js +1 -1
  785. package/dist/esm/udp-attachment-list.entry.js +1 -1
  786. package/dist/esm/udp-bar-chart.entry.js +1 -1
  787. package/dist/esm/udp-calendar-base.entry.js +1 -1
  788. package/dist/esm/udp-calendar-day.entry.js +1 -1
  789. package/dist/esm/udp-calendar-month.entry.js +1 -1
  790. package/dist/esm/udp-calendar-week.entry.js +1 -1
  791. package/dist/esm/udp-calendar-year.entry.js +1 -1
  792. package/dist/esm/udp-card-action-area.entry.js +1 -1
  793. package/dist/esm/udp-card_6.entry.js +7 -7
  794. package/dist/esm/udp-charts-example.entry.js +1 -1
  795. package/dist/esm/udp-container-query-grid-item.entry.js +1 -1
  796. package/dist/esm/udp-container-query-grid.entry.js +1 -1
  797. package/dist/esm/udp-container-query.entry.js +2 -2
  798. package/dist/esm/udp-container.entry.js +2 -2
  799. package/dist/esm/udp-dynamic-container-with-menu.entry.js +1 -1
  800. package/dist/esm/udp-dynamic-form.entry.js +1 -1
  801. package/dist/esm/udp-fluent-file-input.entry.js +4 -4
  802. package/dist/esm/udp-fluent-image.entry.js +1 -1
  803. package/dist/esm/udp-fluent-inline-edit_6.entry.js +4487 -0
  804. package/dist/esm/udp-fluent-link.entry.js +1 -1
  805. package/dist/esm/udp-fluent-list-input.entry.js +44 -0
  806. package/dist/esm/udp-fluent-list-item_2.entry.js +319 -0
  807. package/dist/esm/udp-fluent-location-input.entry.js +3 -3
  808. package/dist/esm/udp-fluent-number-input.entry.js +1 -1
  809. package/dist/esm/udp-fluent-signature-input.entry.js +5 -5
  810. package/dist/esm/udp-fluent-table-input.entry.js +345 -0
  811. package/dist/esm/udp-forms-builder-style-override.entry.js +1 -1
  812. package/dist/esm/udp-forms-follow-up-list-card.entry.js +2 -2
  813. package/dist/esm/udp-forms-list-card.entry.js +4 -4
  814. package/dist/esm/udp-forms-list.entry.js +1 -1
  815. package/dist/esm/udp-forms-renderer.entry.js +3 -3
  816. package/dist/esm/udp-kpi-card.entry.js +1 -1
  817. package/dist/esm/udp-kpi-cards.entry.js +2 -2
  818. package/dist/esm/udp-map.entry.js +3 -3
  819. package/dist/esm/udp-menu.entry.js +1 -1
  820. package/dist/esm/udp-page.entry.js +1 -1
  821. package/dist/esm/udp-question-form-builder.entry.js +2370 -0
  822. package/dist/esm/udp-question-tally-adapter.entry.js +136 -0
  823. package/dist/esm/udp-sankey-chart.entry.js +1 -1
  824. package/dist/esm/udp-skeleton-loading.entry.js +1 -1
  825. package/dist/esm/udp-split-screen.entry.js +1 -1
  826. package/dist/esm/udp-stepper-actions.entry.js +1 -1
  827. package/dist/esm/udp-stepper-content.entry.js +2 -2
  828. package/dist/esm/udp-stepper-demo.entry.js +1 -1
  829. package/dist/esm/udp-stepper-nav.entry.js +1 -1
  830. package/dist/esm/udp-tab.entry.js +1 -1
  831. package/dist/esm/udp-timeline-connector.entry.js +1 -1
  832. package/dist/esm/udp-timeline-dot.entry.js +1 -1
  833. package/dist/esm/udp-timeline-item.entry.js +2 -2
  834. package/dist/esm/udp-timeline-separator.entry.js +1 -1
  835. package/dist/esm/udp-timeline.entry.js +1 -1
  836. package/dist/esm/udp-xy-chart.entry.js +1 -1
  837. package/dist/esm/udp-xy-multi-series-chart.entry.js +1 -1
  838. package/dist/esm/{udpOperatorHelper-Tmn9i7-P.js → udpOperatorHelper-CBSPgsN-.js} +1 -1
  839. package/dist/stencil-library/{SearchBuilder-DDfrKm8m.js → SearchBuilder-CPsWhOXB.js} +1 -1
  840. package/dist/stencil-library/add-map-feature-popup_4.entry.js +1 -1
  841. package/dist/stencil-library/address-search_6.entry.js +1 -1
  842. package/dist/stencil-library/advanced-search_12.entry.js +1 -1
  843. package/dist/stencil-library/ag-grid-base_65.entry.js +1 -1
  844. package/dist/stencil-library/ambient-template-grid.entry.js +1 -1
  845. package/dist/stencil-library/api-method-instance-grid.entry.js +1 -1
  846. package/dist/stencil-library/app-bar.entry.js +1 -1
  847. package/dist/stencil-library/{base-map_3.entry.js → base-map_4.entry.js} +1 -1
  848. package/dist/stencil-library/chart-container_3.entry.js +1 -1
  849. package/dist/stencil-library/check-box.entry.js +1 -1
  850. package/dist/stencil-library/chip-section.entry.js +1 -1
  851. package/dist/stencil-library/codecs-0Y96Q95P.js +1 -0
  852. package/dist/stencil-library/createAzureMapsProviders-CLLCmr8f.js +1 -0
  853. package/dist/stencil-library/custom-button.entry.js +1 -1
  854. package/dist/stencil-library/date-time-renderer_9.entry.js +1 -1
  855. package/dist/stencil-library/feature-details-card_2.entry.js +1 -1
  856. package/dist/stencil-library/file-upload_2.entry.js +1 -1
  857. package/dist/stencil-library/filter-conditions_7.entry.js +1 -1
  858. package/dist/stencil-library/{form-metadata-display_10.entry.js → form-metadata-display_9.entry.js} +1 -1
  859. package/dist/stencil-library/icon-grid.entry.js +1 -1
  860. package/dist/stencil-library/index.esm.js +1 -1
  861. package/dist/stencil-library/logical-search-indicator.entry.js +1 -1
  862. package/dist/stencil-library/map-component_2.entry.js +1 -1
  863. package/dist/stencil-library/primary-action-header_2.entry.js +1 -1
  864. package/dist/stencil-library/question-configs-renderer_4.entry.js +1 -1
  865. package/dist/stencil-library/resource-timeline-calendar.entry.js +1 -1
  866. package/dist/stencil-library/resource-timeline-primary-bar.entry.js +1 -1
  867. package/dist/stencil-library/search-method-grid.entry.js +1 -1
  868. package/dist/stencil-library/searchObject-DpUZkcYC.js +1 -0
  869. package/dist/stencil-library/{searchObjectHelper-CVNJDbDx.js → searchObjectHelper-BjA6OHxg.js} +1 -1
  870. package/dist/stencil-library/server-side-grid.entry.js +1 -1
  871. package/dist/stencil-library/side-sheet-container.entry.js +1 -1
  872. package/dist/stencil-library/simple-card.entry.js +1 -1
  873. package/dist/stencil-library/status-chip_2.entry.js +1 -1
  874. package/dist/stencil-library/stencil-chip.entry.js +1 -1
  875. package/dist/stencil-library/stencil-library.esm.js +1 -1
  876. package/dist/stencil-library/stencil-toggle.entry.js +1 -1
  877. package/dist/stencil-library/text-field_2.entry.js +1 -1
  878. package/dist/stencil-library/types-C9Z-dgvN.js +1 -0
  879. package/dist/stencil-library/udp-adornment.entry.js +1 -1
  880. package/dist/stencil-library/udp-advanced-search-builder.entry.js +1 -1
  881. package/dist/stencil-library/udp-advanced-search-filter-group.entry.js +1 -1
  882. package/dist/stencil-library/udp-ag-area-chart.entry.js +1 -1
  883. package/dist/stencil-library/udp-ag-bar-chart_4.entry.js +1 -1
  884. package/dist/stencil-library/udp-ag-bubble-chart.entry.js +1 -1
  885. package/dist/stencil-library/udp-ag-combo-chart.entry.js +1 -1
  886. package/dist/stencil-library/udp-ag-donut-chart.entry.js +1 -1
  887. package/dist/stencil-library/udp-ag-line-chart.entry.js +1 -1
  888. package/dist/stencil-library/udp-ag-pie-chart.entry.js +1 -1
  889. package/dist/stencil-library/udp-ag-scatter-chart.entry.js +1 -1
  890. package/dist/stencil-library/udp-attachment-item_2.entry.js +1 -1
  891. package/dist/stencil-library/udp-attachment-list.entry.js +1 -1
  892. package/dist/stencil-library/udp-bar-chart.entry.js +1 -1
  893. package/dist/stencil-library/udp-calendar-base.entry.js +1 -1
  894. package/dist/stencil-library/udp-calendar-day.entry.js +1 -1
  895. package/dist/stencil-library/udp-calendar-month.entry.js +1 -1
  896. package/dist/stencil-library/udp-calendar-week.entry.js +1 -1
  897. package/dist/stencil-library/udp-calendar-year.entry.js +1 -1
  898. package/dist/stencil-library/udp-card-action-area.entry.js +1 -1
  899. package/dist/stencil-library/udp-card_6.entry.js +1 -1
  900. package/dist/stencil-library/udp-charts-example.entry.js +1 -1
  901. package/dist/stencil-library/udp-container-query-grid-item.entry.js +1 -1
  902. package/dist/stencil-library/udp-container-query-grid.entry.js +1 -1
  903. package/dist/stencil-library/udp-container-query.entry.js +1 -1
  904. package/dist/stencil-library/udp-container.entry.js +1 -1
  905. package/dist/stencil-library/udp-dynamic-container-with-menu.entry.js +1 -1
  906. package/dist/stencil-library/udp-dynamic-form.entry.js +1 -1
  907. package/dist/stencil-library/udp-fluent-file-input.entry.js +1 -1
  908. package/dist/stencil-library/udp-fluent-image.entry.js +1 -1
  909. package/dist/stencil-library/udp-fluent-inline-edit_6.entry.js +1 -0
  910. package/dist/stencil-library/udp-fluent-link.entry.js +1 -1
  911. package/dist/stencil-library/udp-fluent-list-input.entry.js +1 -0
  912. package/dist/stencil-library/udp-fluent-list-item_2.entry.js +1 -0
  913. package/dist/stencil-library/udp-fluent-location-input.entry.js +1 -1
  914. package/dist/stencil-library/udp-fluent-number-input.entry.js +1 -1
  915. package/dist/stencil-library/udp-fluent-signature-input.entry.js +1 -1
  916. package/dist/stencil-library/udp-fluent-table-input.entry.js +1 -0
  917. package/dist/stencil-library/udp-forms-builder-style-override.entry.js +1 -1
  918. package/dist/stencil-library/udp-forms-follow-up-list-card.entry.js +1 -1
  919. package/dist/stencil-library/udp-forms-list-card.entry.js +1 -1
  920. package/dist/stencil-library/udp-forms-list.entry.js +1 -1
  921. package/dist/stencil-library/udp-forms-renderer.entry.js +1 -1
  922. package/dist/stencil-library/udp-kpi-card.entry.js +1 -1
  923. package/dist/stencil-library/udp-kpi-cards.entry.js +1 -1
  924. package/dist/stencil-library/udp-map.entry.js +1 -1
  925. package/dist/stencil-library/udp-menu.entry.js +1 -1
  926. package/dist/stencil-library/udp-page.entry.js +1 -1
  927. package/dist/stencil-library/udp-question-form-builder.entry.js +1 -0
  928. package/dist/stencil-library/udp-question-tally-adapter.entry.js +1 -0
  929. package/dist/stencil-library/udp-sankey-chart.entry.js +1 -1
  930. package/dist/stencil-library/udp-skeleton-loading.entry.js +1 -1
  931. package/dist/stencil-library/udp-split-screen.entry.js +1 -1
  932. package/dist/stencil-library/udp-stepper-actions.entry.js +1 -1
  933. package/dist/stencil-library/udp-stepper-content.entry.js +1 -1
  934. package/dist/stencil-library/udp-stepper-demo.entry.js +1 -1
  935. package/dist/stencil-library/udp-stepper-nav.entry.js +1 -1
  936. package/dist/stencil-library/udp-tab.entry.js +1 -1
  937. package/dist/stencil-library/udp-timeline-connector.entry.js +1 -1
  938. package/dist/stencil-library/udp-timeline-dot.entry.js +1 -1
  939. package/dist/stencil-library/udp-timeline-item.entry.js +1 -1
  940. package/dist/stencil-library/udp-timeline-separator.entry.js +1 -1
  941. package/dist/stencil-library/udp-timeline.entry.js +1 -1
  942. package/dist/stencil-library/udp-xy-chart.entry.js +1 -1
  943. package/dist/stencil-library/udp-xy-multi-series-chart.entry.js +1 -1
  944. package/dist/stencil-library/{udpOperatorHelper-Tmn9i7-P.js → udpOperatorHelper-CBSPgsN-.js} +1 -1
  945. package/dist/types/components/advanced-search/filter-conditions/filter-conditions.d.ts +4 -0
  946. package/dist/types/components/advanced-search/ui/logical-search-indicator/logical-search-indicator.d.ts +4 -0
  947. package/dist/types/components/attachment-list/udp-attachment-item.d.ts +4 -0
  948. package/dist/types/components/attachment-list/udp-attachment-list.d.ts +4 -0
  949. package/dist/types/components/buttons/icon-button/radio-button/udp-radio-button.d.ts +4 -0
  950. package/dist/types/components/buttons/icon-button/stencil-icon-button-grid-action-header.d.ts +4 -0
  951. package/dist/types/components/buttons/udp-button/udp-button.d.ts +3 -0
  952. package/dist/types/components/charts/udp-charts-example.d.ts +3 -0
  953. package/dist/types/components/data-display/adornment/udp-adornment/udp-adornment.d.ts +4 -0
  954. package/dist/types/components/data-display/badge/udp-badge.d.ts +4 -0
  955. package/dist/types/components/data-display/cards/udp-ambient-card/udp-ambient-card.d.ts +4 -0
  956. package/dist/types/components/data-display/cards/udp-card/udp-card-action-area/udp-card-action-area.d.ts +4 -0
  957. package/dist/types/components/data-display/cards/udp-card/udp-card-actions/udp-card-actions.d.ts +4 -0
  958. package/dist/types/components/data-display/cards/udp-card/udp-card-content/udp-card-content.d.ts +4 -0
  959. package/dist/types/components/data-display/cards/udp-card/udp-card-header/udp-card-header.d.ts +4 -0
  960. package/dist/types/components/data-display/cards/udp-card/udp-card-media/udp-card-media.d.ts +4 -0
  961. package/dist/types/components/data-display/cards/udp-card/udp-card.d.ts +4 -0
  962. package/dist/types/components/data-display/chips/udp-chip.d.ts +3 -0
  963. package/dist/types/components/data-display/divider/udp-divider.d.ts +4 -0
  964. package/dist/types/components/data-display/empty-state-display/udp-empty-state-display.d.ts +4 -0
  965. package/dist/types/components/data-display/headers/udp-column-header.d.ts +4 -0
  966. package/dist/types/components/data-display/headers/udp-page-header/udp-page-header.d.ts +4 -0
  967. package/dist/types/components/data-display/hint-panel/hint-panel.d.ts +4 -0
  968. package/dist/types/components/data-display/list-renderer/udp-list-renderer.d.ts +4 -0
  969. package/dist/types/components/data-display/pop-over/udp-pop-over.d.ts +4 -0
  970. package/dist/types/components/data-display/pop-over-grid-action-header/udp-pop-over-grid-action-header.d.ts +4 -0
  971. package/dist/types/components/data-display/primary-action-header/primary-action-header.d.ts +4 -0
  972. package/dist/types/components/data-display/simple-card/simple-card.d.ts +4 -0
  973. package/dist/types/components/data-display/tool-tip/udp-ambient-tool-tip.d.ts +4 -0
  974. package/dist/types/components/data-display/tree/tree-list-item/search-item/search-list-item.d.ts +4 -0
  975. package/dist/types/components/data-display/tree/tree-list-item/tree-list-item.d.ts +4 -0
  976. package/dist/types/components/data-display/udp-avatar/udp-avatar.d.ts +4 -0
  977. package/dist/types/components/dialogs/udp-dialog.d.ts +4 -0
  978. package/dist/types/components/drawers/udp-side-sheet/udp-side-sheet.d.ts +3 -0
  979. package/dist/types/components/feedback/udp-notification/alerts/upd-alert-banner.d.ts +4 -0
  980. package/dist/types/components/feedback/udp-notification/udp-notification.d.ts +4 -0
  981. package/dist/types/components/fluent-ui/accordion/udp-accordion.d.ts +7 -0
  982. package/dist/types/components/fluent-ui/avatar/udp-fluent-avatar.d.ts +6 -1
  983. package/dist/types/components/fluent-ui/checkbox/udp-fluent-checkbox.d.ts +2 -0
  984. package/dist/types/components/fluent-ui/dialog/udp-fluent-dialog.d.ts +2 -0
  985. package/dist/types/components/fluent-ui/drawer/udp-fluent-drawer.d.ts +7 -0
  986. package/dist/types/components/fluent-ui/icon/udp-fluent-icon.d.ts +2 -0
  987. package/dist/types/components/fluent-ui/icon-button/udp-fluent-icon-button.d.ts +2 -0
  988. package/dist/types/components/fluent-ui/image/udp-fluent-image.d.ts +5 -0
  989. package/dist/types/components/fluent-ui/list-input/udp-fluent-list-input.d.ts +40 -0
  990. package/dist/types/components/fluent-ui/switch/udp-fluent-switch.d.ts +2 -0
  991. package/dist/types/components/fluent-ui/table-input/udp-fluent-table-input.d.ts +61 -0
  992. package/dist/types/components/fluent-ui/table-input/udp-fluent-table-input.types.d.ts +22 -0
  993. package/dist/types/components/fluent-ui/tooltip/udp-tooltip.d.ts +2 -0
  994. package/dist/types/components/forms/udp-question-form/__forms-harness__/assert.d.ts +9 -0
  995. package/dist/types/components/forms/udp-question-form/__forms-harness__/fixture.types.d.ts +83 -0
  996. package/dist/types/components/forms/udp-question-form/__forms-harness__/fixtures/checkbox.fixtures.d.ts +18 -0
  997. package/dist/types/components/forms/udp-question-form/__forms-harness__/fixtures/date-selector.fixtures.d.ts +29 -0
  998. package/dist/types/components/forms/udp-question-form/__forms-harness__/fixtures/date-time-selector.fixtures.d.ts +14 -0
  999. package/dist/types/components/forms/udp-question-form/__forms-harness__/fixtures/dropdown-multiple-select.fixtures.d.ts +16 -0
  1000. package/dist/types/components/forms/udp-question-form/__forms-harness__/fixtures/dropdown-single-select.fixtures.d.ts +12 -0
  1001. package/dist/types/components/forms/udp-question-form/__forms-harness__/fixtures/file-upload.fixtures.d.ts +21 -0
  1002. package/dist/types/components/forms/udp-question-form/__forms-harness__/fixtures/form-metadata-display.fixtures.d.ts +17 -0
  1003. package/dist/types/components/forms/udp-question-form/__forms-harness__/fixtures/hidden.fixtures.d.ts +15 -0
  1004. package/dist/types/components/forms/udp-question-form/__forms-harness__/fixtures/image-upload.fixtures.d.ts +13 -0
  1005. package/dist/types/components/forms/udp-question-form/__forms-harness__/fixtures/list-multi-select.fixtures.d.ts +13 -0
  1006. package/dist/types/components/forms/udp-question-form/__forms-harness__/fixtures/location-additional.fixtures.d.ts +18 -0
  1007. package/dist/types/components/forms/udp-question-form/__forms-harness__/fixtures/location-default-location.fixture.d.ts +12 -0
  1008. package/dist/types/components/forms/udp-question-form/__forms-harness__/fixtures/location-required.fixture.d.ts +10 -0
  1009. package/dist/types/components/forms/udp-question-form/__forms-harness__/fixtures/multi-line-text.fixtures.d.ts +13 -0
  1010. package/dist/types/components/forms/udp-question-form/__forms-harness__/fixtures/number.fixtures.d.ts +20 -0
  1011. package/dist/types/components/forms/udp-question-form/__forms-harness__/fixtures/paragraph.fixtures.d.ts +12 -0
  1012. package/dist/types/components/forms/udp-question-form/__forms-harness__/fixtures/radio-button.fixtures.d.ts +14 -0
  1013. package/dist/types/components/forms/udp-question-form/__forms-harness__/fixtures/signature.fixtures.d.ts +24 -0
  1014. package/dist/types/components/forms/udp-question-form/__forms-harness__/fixtures/single-line-text.fixtures.d.ts +18 -0
  1015. package/dist/types/components/forms/udp-question-form/__forms-harness__/fixtures/table.fixtures.d.ts +13 -0
  1016. package/dist/types/components/forms/udp-question-form/__forms-harness__/fixtures/tally.fixtures.d.ts +20 -0
  1017. package/dist/types/components/forms/udp-question-form/__forms-harness__/fixtures/time-selector.fixtures.d.ts +23 -0
  1018. package/dist/types/components/forms/udp-question-form/__forms-harness__/fixtures/yes-no.fixtures.d.ts +17 -0
  1019. package/dist/types/components/forms/udp-question-form/__forms-harness__/harness-dom.d.ts +30 -0
  1020. package/dist/types/components/forms/udp-question-form/__forms-harness__/harness.d.ts +49 -0
  1021. package/dist/types/components/forms/udp-question-form/builder/components/add-question-drawer-content.d.ts +14 -0
  1022. package/dist/types/components/forms/udp-question-form/builder/components/configure-question-drawer.d.ts +48 -0
  1023. package/dist/types/components/forms/udp-question-form/builder/components/form-structure-sidebar.d.ts +44 -0
  1024. package/dist/types/components/forms/udp-question-form/builder/components/preview-pane.d.ts +16 -0
  1025. package/dist/types/components/forms/udp-question-form/builder/components/questionConfig/GenericQuestionConfig.d.ts +29 -0
  1026. package/dist/types/components/forms/udp-question-form/builder/components/questionConfig/ValidationRulesSection.d.ts +20 -0
  1027. package/dist/types/components/forms/udp-question-form/builder/components/questionConfig/index.d.ts +5 -0
  1028. package/dist/types/components/forms/udp-question-form/builder/components/questionConfig/typeSpecific/FileUploadConfig.d.ts +2 -0
  1029. package/dist/types/components/forms/udp-question-form/builder/components/questionConfig/typeSpecific/FormMetadataDisplayConfig.d.ts +2 -0
  1030. package/dist/types/components/forms/udp-question-form/builder/components/questionConfig/typeSpecific/ListOptionsConfig.d.ts +2 -0
  1031. package/dist/types/components/forms/udp-question-form/builder/components/questionConfig/typeSpecific/LocationConfig.d.ts +2 -0
  1032. package/dist/types/components/forms/udp-question-form/builder/components/questionConfig/typeSpecific/ParagraphConfig.d.ts +2 -0
  1033. package/dist/types/components/forms/udp-question-form/builder/components/questionConfig/typeSpecific/SignatureConfig.d.ts +2 -0
  1034. package/dist/types/components/forms/udp-question-form/builder/components/questionConfig/typeSpecific/TableConfig.d.ts +2 -0
  1035. package/dist/types/components/forms/udp-question-form/builder/components/questionConfig/typeSpecific/TallyConfig.d.ts +2 -0
  1036. package/dist/types/components/forms/udp-question-form/builder/components/questionConfig/typeSpecific/index.d.ts +17 -0
  1037. package/dist/types/components/forms/udp-question-form/builder/components/questionConfig/types.d.ts +59 -0
  1038. package/dist/types/components/forms/udp-question-form/builder/components/questionConfig/udp-question-config-fluent.d.ts +45 -0
  1039. package/dist/types/components/forms/udp-question-form/builder/components/questionConfig/utils/configValues.d.ts +17 -0
  1040. package/dist/types/components/forms/udp-question-form/builder/components/questionConfig/utils/dateTimeFormat.d.ts +8 -0
  1041. package/dist/types/components/forms/udp-question-form/builder/components/questionConfig/utils/index.d.ts +3 -0
  1042. package/dist/types/components/forms/udp-question-form/builder/components/questionConfig/utils/sortableRef.d.ts +16 -0
  1043. package/dist/types/components/forms/udp-question-form/builder/components/section-card.d.ts +19 -0
  1044. package/dist/types/components/forms/udp-question-form/builder/components/section-edit-drawer-content.d.ts +23 -0
  1045. package/dist/types/components/forms/udp-question-form/builder/components/section-question-item.d.ts +16 -0
  1046. package/dist/types/components/forms/udp-question-form/builder/config/constants.d.ts +7 -0
  1047. package/dist/types/components/forms/udp-question-form/builder/config/index.d.ts +1 -0
  1048. package/dist/types/components/forms/udp-question-form/builder/form-item-types/index.d.ts +4 -0
  1049. package/dist/types/components/forms/udp-question-form/builder/form-item-types/registry.d.ts +5 -0
  1050. package/dist/types/components/forms/udp-question-form/builder/form-item-types/templates.d.ts +19 -0
  1051. package/dist/types/components/forms/udp-question-form/builder/form-item-types/types.d.ts +36 -0
  1052. package/dist/types/components/forms/udp-question-form/builder/form-item-types/validation.d.ts +50 -0
  1053. package/dist/types/components/forms/udp-question-form/builder/udp-question-form-builder.d.ts +335 -0
  1054. package/dist/types/components/forms/udp-question-form/builder/utils/builder-api.d.ts +66 -0
  1055. package/dist/types/components/forms/udp-question-form/builder/utils/form-versions.d.ts +7 -0
  1056. package/dist/types/components/forms/udp-question-form/builder/utils/question-template.d.ts +23 -0
  1057. package/dist/types/components/forms/udp-question-form/core/choice-options.d.ts +12 -0
  1058. package/dist/types/components/forms/udp-question-form/core/defaults.d.ts +24 -0
  1059. package/dist/types/components/forms/udp-question-form/core/field-properties-schemas/common-keys.d.ts +11 -0
  1060. package/dist/types/components/forms/udp-question-form/core/field-properties-schemas/engine.d.ts +21 -0
  1061. package/dist/types/components/forms/udp-question-form/core/field-properties-schemas/index.d.ts +3 -0
  1062. package/dist/types/components/forms/udp-question-form/core/field-properties-schemas/per-type/checkbox.d.ts +12 -0
  1063. package/dist/types/components/forms/udp-question-form/core/field-properties-schemas/per-type/date-selector.d.ts +12 -0
  1064. package/dist/types/components/forms/udp-question-form/core/field-properties-schemas/per-type/date-time-selector.d.ts +14 -0
  1065. package/dist/types/components/forms/udp-question-form/core/field-properties-schemas/per-type/dropdown-multiple-select.d.ts +12 -0
  1066. package/dist/types/components/forms/udp-question-form/core/field-properties-schemas/per-type/dropdown-single-select.d.ts +12 -0
  1067. package/dist/types/components/forms/udp-question-form/core/field-properties-schemas/per-type/file-upload.d.ts +10 -0
  1068. package/dist/types/components/forms/udp-question-form/core/field-properties-schemas/per-type/form-metadata-display.d.ts +9 -0
  1069. package/dist/types/components/forms/udp-question-form/core/field-properties-schemas/per-type/hidden.d.ts +8 -0
  1070. package/dist/types/components/forms/udp-question-form/core/field-properties-schemas/per-type/image-upload.d.ts +8 -0
  1071. package/dist/types/components/forms/udp-question-form/core/field-properties-schemas/per-type/list-multi-select.d.ts +12 -0
  1072. package/dist/types/components/forms/udp-question-form/core/field-properties-schemas/per-type/location.d.ts +16 -0
  1073. package/dist/types/components/forms/udp-question-form/core/field-properties-schemas/per-type/multi-line-text.d.ts +7 -0
  1074. package/dist/types/components/forms/udp-question-form/core/field-properties-schemas/per-type/number.d.ts +10 -0
  1075. package/dist/types/components/forms/udp-question-form/core/field-properties-schemas/per-type/paragraph.d.ts +9 -0
  1076. package/dist/types/components/forms/udp-question-form/core/field-properties-schemas/per-type/radio-button.d.ts +12 -0
  1077. package/dist/types/components/forms/udp-question-form/core/field-properties-schemas/per-type/signature.d.ts +7 -0
  1078. package/dist/types/components/forms/udp-question-form/core/field-properties-schemas/per-type/single-line-text.d.ts +11 -0
  1079. package/dist/types/components/forms/udp-question-form/core/field-properties-schemas/per-type/table.d.ts +16 -0
  1080. package/dist/types/components/forms/udp-question-form/core/field-properties-schemas/per-type/tally.d.ts +17 -0
  1081. package/dist/types/components/forms/udp-question-form/core/field-properties-schemas/per-type/time-selector.d.ts +12 -0
  1082. package/dist/types/components/forms/udp-question-form/core/field-properties-schemas/per-type/yes-no.d.ts +11 -0
  1083. package/dist/types/components/forms/udp-question-form/core/field-properties-schemas/registry.d.ts +5 -0
  1084. package/dist/types/components/forms/udp-question-form/core/field-properties-schemas/toggles.d.ts +13 -0
  1085. package/dist/types/components/forms/udp-question-form/core/field-properties-schemas/types.d.ts +108 -0
  1086. package/dist/types/components/forms/udp-question-form/core/field-properties.d.ts +155 -0
  1087. package/dist/types/components/forms/udp-question-form/core/index.d.ts +8 -0
  1088. package/dist/types/components/forms/udp-question-form/core/parse.d.ts +50 -0
  1089. package/dist/types/components/forms/udp-question-form/core/serialize.d.ts +82 -0
  1090. package/dist/types/components/forms/udp-question-form/core/slot-index.d.ts +31 -0
  1091. package/dist/types/components/forms/udp-question-form/core/types.d.ts +119 -0
  1092. package/dist/types/components/forms/udp-question-form/core/validation/consistency.d.ts +11 -0
  1093. package/dist/types/components/forms/udp-question-form/core/validation/emptiness.d.ts +7 -0
  1094. package/dist/types/components/forms/udp-question-form/core/validation/engine.d.ts +54 -0
  1095. package/dist/types/components/forms/udp-question-form/core/validation/index.d.ts +15 -0
  1096. package/dist/types/components/forms/udp-question-form/core/validation/intrinsic.d.ts +38 -0
  1097. package/dist/types/components/forms/udp-question-form/core/validation/registry.d.ts +31 -0
  1098. package/dist/types/components/forms/udp-question-form/core/validation/rules/age.d.ts +7 -0
  1099. package/dist/types/components/forms/udp-question-form/core/validation/rules/index.d.ts +42 -0
  1100. package/dist/types/components/forms/udp-question-form/core/validation/rules/integer-only.d.ts +6 -0
  1101. package/dist/types/components/forms/udp-question-form/core/validation/rules/max-age.d.ts +6 -0
  1102. package/dist/types/components/forms/udp-question-form/core/validation/rules/max-date-time.d.ts +2 -0
  1103. package/dist/types/components/forms/udp-question-form/core/validation/rules/max-date.d.ts +2 -0
  1104. package/dist/types/components/forms/udp-question-form/core/validation/rules/max-decimal-places.d.ts +7 -0
  1105. package/dist/types/components/forms/udp-question-form/core/validation/rules/max-length.d.ts +2 -0
  1106. package/dist/types/components/forms/udp-question-form/core/validation/rules/max-rows.d.ts +6 -0
  1107. package/dist/types/components/forms/udp-question-form/core/validation/rules/max-selections.d.ts +7 -0
  1108. package/dist/types/components/forms/udp-question-form/core/validation/rules/max-time.d.ts +2 -0
  1109. package/dist/types/components/forms/udp-question-form/core/validation/rules/max-value.d.ts +2 -0
  1110. package/dist/types/components/forms/udp-question-form/core/validation/rules/min-age.d.ts +8 -0
  1111. package/dist/types/components/forms/udp-question-form/core/validation/rules/min-date-time.d.ts +2 -0
  1112. package/dist/types/components/forms/udp-question-form/core/validation/rules/min-date.d.ts +2 -0
  1113. package/dist/types/components/forms/udp-question-form/core/validation/rules/min-length.d.ts +2 -0
  1114. package/dist/types/components/forms/udp-question-form/core/validation/rules/min-rows.d.ts +8 -0
  1115. package/dist/types/components/forms/udp-question-form/core/validation/rules/min-selections.d.ts +9 -0
  1116. package/dist/types/components/forms/udp-question-form/core/validation/rules/min-time.d.ts +2 -0
  1117. package/dist/types/components/forms/udp-question-form/core/validation/rules/min-value.d.ts +2 -0
  1118. package/dist/types/components/forms/udp-question-form/core/validation/rules/must-be-yes.d.ts +7 -0
  1119. package/dist/types/components/forms/udp-question-form/core/validation/rules/no-future-date-time.d.ts +7 -0
  1120. package/dist/types/components/forms/udp-question-form/core/validation/rules/no-future-date.d.ts +9 -0
  1121. package/dist/types/components/forms/udp-question-form/core/validation/rules/no-past-date-time.d.ts +8 -0
  1122. package/dist/types/components/forms/udp-question-form/core/validation/rules/no-past-date.d.ts +9 -0
  1123. package/dist/types/components/forms/udp-question-form/core/validation/rules/pattern.d.ts +19 -0
  1124. package/dist/types/components/forms/udp-question-form/core/validation/rules/required.d.ts +7 -0
  1125. package/dist/types/components/forms/udp-question-form/core/validation/rules/step.d.ts +6 -0
  1126. package/dist/types/components/forms/udp-question-form/core/validation/types.d.ts +170 -0
  1127. package/dist/types/components/forms/udp-question-form/follow-up-forms-api.d.ts +14 -0
  1128. package/dist/types/components/forms/udp-question-form/renderer/runtime/codecs.d.ts +87 -0
  1129. package/dist/types/components/forms/udp-question-form/renderer/runtime/comments-api.d.ts +33 -0
  1130. package/dist/types/components/forms/udp-question-form/renderer/runtime/comments-state.d.ts +108 -0
  1131. package/dist/types/components/forms/udp-question-form/renderer/runtime/dynamic-sections.d.ts +135 -0
  1132. package/dist/types/components/forms/udp-question-form/renderer/runtime/follow-up-forms.d.ts +99 -0
  1133. package/dist/types/components/forms/udp-question-form/renderer/runtime/index.d.ts +13 -0
  1134. package/dist/types/components/forms/udp-question-form/renderer/runtime/initial-values.d.ts +53 -0
  1135. package/dist/types/components/forms/udp-question-form/renderer/runtime/parse.d.ts +86 -0
  1136. package/dist/types/components/forms/udp-question-form/renderer/runtime/progress.d.ts +28 -0
  1137. package/dist/types/components/forms/udp-question-form/renderer/runtime/serialize-submission.d.ts +82 -0
  1138. package/dist/types/components/forms/udp-question-form/renderer/runtime/submit.d.ts +43 -0
  1139. package/dist/types/components/forms/udp-question-form/renderer/runtime/types.d.ts +128 -0
  1140. package/dist/types/components/forms/udp-question-form/renderer/runtime/url-seed.d.ts +36 -0
  1141. package/dist/types/components/forms/udp-question-form/renderer/runtime/validate-submission.d.ts +48 -0
  1142. package/dist/types/components/forms/udp-question-form/renderer/runtime/wire-adapter.d.ts +17 -0
  1143. package/dist/types/components/forms/udp-question-form/renderer/udp-question-form-renderer.d.ts +418 -0
  1144. package/dist/types/components/forms/udp-question-form/renderer/ui/adapters/udp-question-tally-adapter.d.ts +58 -0
  1145. package/dist/types/components/forms/udp-question-form/renderer/ui/avatar.d.ts +2 -0
  1146. package/dist/types/components/forms/udp-question-form/renderer/ui/comment-item.d.ts +9 -0
  1147. package/dist/types/components/forms/udp-question-form/renderer/ui/comment-thread.d.ts +39 -0
  1148. package/dist/types/components/forms/udp-question-form/renderer/ui/follow-up-picker-dialog.d.ts +24 -0
  1149. package/dist/types/components/forms/udp-question-form/renderer/ui/form-shell.d.ts +108 -0
  1150. package/dist/types/components/forms/udp-question-form/renderer/ui/index.d.ts +6 -0
  1151. package/dist/types/components/forms/udp-question-form/renderer/ui/question-renderer.d.ts +99 -0
  1152. package/dist/types/components/forms/udp-question-form/renderer/ui/question-view-renderer.d.ts +33 -0
  1153. package/dist/types/components/forms/udp-question-form/renderer/ui/section-card.d.ts +36 -0
  1154. package/dist/types/components/forms/udp-question-form/renderer/url.d.ts +29 -0
  1155. package/dist/types/components/forms/udp-question-form/version-drawer/udp-form-version-drawer.d.ts +21 -0
  1156. package/dist/types/components/grid/ag-table/ag-table.d.ts +4 -0
  1157. package/dist/types/components/grid/grid-primary-bar/grid-primary-bar.d.ts +4 -0
  1158. package/dist/types/components/grid/hotlists/udp-hotlist-form/udp-hotlist-form.d.ts +4 -0
  1159. package/dist/types/components/grid/new-grid/gridFunctions/columnSelector.d.ts +44 -0
  1160. package/dist/types/components/grid/new-grid/interfaces/grid.d.ts +7 -1
  1161. package/dist/types/components/inputs/address-search/address-search.d.ts +4 -0
  1162. package/dist/types/components/inputs/checkbox/check-box.d.ts +3 -0
  1163. package/dist/types/components/inputs/date-selector/udp-date-selector.d.ts +3 -0
  1164. package/dist/types/components/inputs/date-time-selector/udp-datetime-selector.d.ts +3 -0
  1165. package/dist/types/components/inputs/file-upload/file-upload.d.ts +3 -0
  1166. package/dist/types/components/inputs/form metadata display/form-metadata-display.d.ts +3 -0
  1167. package/dist/types/components/inputs/image-upload/image-upload.d.ts +3 -0
  1168. package/dist/types/components/inputs/location-input/location-input.d.ts +4 -0
  1169. package/dist/types/components/inputs/numeric-field/numeric-field.d.ts +3 -0
  1170. package/dist/types/components/inputs/selectable-list/selectable-list.d.ts +3 -0
  1171. package/dist/types/components/inputs/signature-input/signature-input.d.ts +4 -0
  1172. package/dist/types/components/inputs/tally/tally.d.ts +3 -0
  1173. package/dist/types/components/inputs/text-area/text-area.d.ts +3 -0
  1174. package/dist/types/components/inputs/text-field/text-field.d.ts +3 -0
  1175. package/dist/types/components/inputs/time-selector/udp-time-selector.d.ts +3 -0
  1176. package/dist/types/components/inputs/udp-selector/udp-selector.d.ts +3 -0
  1177. package/dist/types/components/layout/primary-action-header/udp-primary-action-header.d.ts +9 -2
  1178. package/dist/types/components/loaders/udp-grid-loader/udp-grid-loader.d.ts +4 -0
  1179. package/dist/types/components/loaders/udp-linear-loader/udp-linear-loader.d.ts +4 -0
  1180. package/dist/types/components/loaders/udp-skeleton-loading.d.ts +4 -0
  1181. package/dist/types/components/menu/udp-menu.d.ts +4 -0
  1182. package/dist/types/components/navigation/pagination/udp-pagination.d.ts +4 -0
  1183. package/dist/types/components/navigation/udp-link/udp-link.d.ts +4 -0
  1184. package/dist/types/components/new-form/field/udp-field.d.ts +24 -1
  1185. package/dist/types/components/new-form/form/udp-form-component.d.ts +109 -8
  1186. package/dist/types/components/stepper/udp-stepper-demo.d.ts +4 -0
  1187. package/dist/types/components/tabs/tab/tabs/udp-tabs.d.ts +4 -0
  1188. package/dist/types/components/tabs/tab/udp-tab.d.ts +4 -0
  1189. package/dist/types/components/toolbars/app-bar/app-bar.d.ts +4 -0
  1190. package/dist/types/components/unity-typography/unity-typography.d.ts +4 -0
  1191. package/dist/types/components.d.ts +1793 -31
  1192. package/dist/types/udp-utilities/location/getCachedAzureMapsProviders.d.ts +2 -0
  1193. package/dist/types/udp-utilities/search/searchObject.d.ts +1 -0
  1194. package/package.json +7 -2
  1195. package/dist/cjs/udp-fluent-inline-edit.cjs.entry.js +0 -35
  1196. package/dist/cjs/udp-fluent-list-item.cjs.entry.js +0 -126
  1197. package/dist/cjs/udp-list.cjs.entry.js +0 -200
  1198. package/dist/cjs/udp-sidebar-layout.cjs.entry.js +0 -67
  1199. package/dist/cjs/udp-vertical-spacer.cjs.entry.js +0 -28
  1200. package/dist/esm/udp-fluent-inline-edit.entry.js +0 -33
  1201. package/dist/esm/udp-fluent-list-item.entry.js +0 -124
  1202. package/dist/esm/udp-list.entry.js +0 -198
  1203. package/dist/esm/udp-sidebar-layout.entry.js +0 -65
  1204. package/dist/esm/udp-vertical-spacer.entry.js +0 -26
  1205. package/dist/stencil-library/searchObject-CDJVsMG_.js +0 -1
  1206. package/dist/stencil-library/udp-fluent-inline-edit.entry.js +0 -1
  1207. package/dist/stencil-library/udp-fluent-list-item.entry.js +0 -1
  1208. package/dist/stencil-library/udp-list.entry.js +0 -1
  1209. package/dist/stencil-library/udp-sidebar-layout.entry.js +0 -1
  1210. package/dist/stencil-library/udp-vertical-spacer.entry.js +0 -1
@@ -0,0 +1,2424 @@
1
+ 'use strict';
2
+
3
+ var types = require('./types-mjOM5U2F.js');
4
+ var makeApiCall = require('./makeApiCall-CFfg9gI0.js');
5
+ var tenantUtils = require('./tenantUtils-BCKSE0vq.js');
6
+ var configService = require('./configService-D-lDX-f_.js');
7
+
8
+ var __rest = (undefined && undefined.__rest) || function (s, e) {
9
+ var t = {};
10
+ for (var p in s)
11
+ if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
12
+ t[p] = s[p];
13
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
14
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
15
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
16
+ t[p[i]] = s[p[i]];
17
+ }
18
+ return t;
19
+ };
20
+ /**
21
+ * Thrown when the wire describe response is structurally invalid. The form is
22
+ * unusable past this point — the host should surface a "could not load this
23
+ * form" state rather than trying to render against malformed input.
24
+ */
25
+ class FormParseError extends Error {
26
+ constructor(message, questionId) {
27
+ super(message);
28
+ this.questionId = questionId;
29
+ this.name = 'FormParseError';
30
+ }
31
+ }
32
+ function parseForm(response) {
33
+ var _a, _b;
34
+ const form = {
35
+ id: response.id,
36
+ version: response.version,
37
+ type: response.type,
38
+ isPrivate: response.isPrivate,
39
+ isActive: response.isActive,
40
+ name: response.name,
41
+ description: (_a = response.description) !== null && _a !== void 0 ? _a : null,
42
+ tenantId: response.tenantId,
43
+ styleOverrides: parseStyleOverrides(response.styleOverrides),
44
+ createdOn: response.createdOn,
45
+ };
46
+ const sectionsSorted = response.udpFormUdpFormSection
47
+ .map(parseSection)
48
+ .sort((a, b) => a.order - b.order);
49
+ const questionsBySectionId = new Map();
50
+ for (const raw of response.formQuestions) {
51
+ const question = parseQuestion(raw);
52
+ if (question.formSectionId == null)
53
+ continue;
54
+ const list = (_b = questionsBySectionId.get(question.formSectionId)) !== null && _b !== void 0 ? _b : [];
55
+ list.push(question);
56
+ questionsBySectionId.set(question.formSectionId, list);
57
+ }
58
+ for (const list of questionsBySectionId.values()) {
59
+ list.sort((a, b) => a.questionOrder - b.questionOrder);
60
+ }
61
+ const sections = sectionsSorted.map(section => {
62
+ var _a;
63
+ return (Object.assign(Object.assign({}, section), { questions: (_a = questionsBySectionId.get(section.id)) !== null && _a !== void 0 ? _a : [] }));
64
+ });
65
+ return { form, sections };
66
+ }
67
+ function parseSection(raw) {
68
+ var _a, _b, _c;
69
+ return {
70
+ id: raw.id,
71
+ formId: raw.formId,
72
+ formVersion: raw.formVersion,
73
+ title: (_a = raw.title) !== null && _a !== void 0 ? _a : null,
74
+ sectionText: (_b = raw.sectionText) !== null && _b !== void 0 ? _b : null,
75
+ order: raw.order,
76
+ sectionProperties: parseSectionProperties(raw.sectionProperties),
77
+ name: raw.name,
78
+ referenceCode: (_c = raw.referenceCode) !== null && _c !== void 0 ? _c : null,
79
+ };
80
+ }
81
+ function parseQuestion(raw) {
82
+ var _a, _b, _c;
83
+ // Lightweight structural guard at the trust boundary:
84
+ // 1. `fieldTypeId` must be a known enum value. An unknown id means the
85
+ // backend is ahead of the renderer (or vice versa) — better to fail
86
+ // loud at load than render the wrong control or crash inside a codec.
87
+ // 2. `fieldProperties` must be an object (not array, not primitive). The
88
+ // typed union below trusts the per-key shape; we don't validate every
89
+ // property here (the codec / type-specific renderer narrows further),
90
+ // but we do reject anything that isn't a property bag at all so a
91
+ // stray string or number can't make it into the form engine.
92
+ if (!isKnownFieldTypeId(raw.fieldTypeId)) {
93
+ throw new FormParseError(`Question ${raw.id}: unknown fieldTypeId ${raw.fieldTypeId}. The schema may be from a newer form version than this renderer supports.`, raw.id);
94
+ }
95
+ const fp = raw.fieldProperties;
96
+ if (fp != null && (typeof fp !== 'object' || Array.isArray(fp))) {
97
+ throw new FormParseError(`Question ${raw.id}: fieldProperties must be an object, got ${Array.isArray(fp) ? 'array' : typeof fp}.`, raw.id);
98
+ }
99
+ // Normalise the lookup enrichment to the items ⊕ lookupId invariant. The
100
+ // backend's /describe resolves a lookup server-side and returns BOTH the
101
+ // `lookupId` AND a resolved `items` array. The rest of the code assumes the
102
+ // two are mutually exclusive (mode is derived from `items`, the schema
103
+ // engine's XOR drops one on commit), so a both-present question would render
104
+ // as a manual list of raw lookup values and — worse — lose its `lookupId`
105
+ // on the next save. We keep `lookupId` as the source of truth and lift the
106
+ // resolved options into `lookupItems` (a display-only field, never
107
+ // serialized) so renderers can still show them.
108
+ const { fieldProperties, lookupItems } = normaliseLookupFieldProperties(fp !== null && fp !== void 0 ? fp : {});
109
+ // Past the guards the wire shape is trusted to match the discriminator.
110
+ // Cast at this single boundary so the rest of the renderer can rely on the
111
+ // typed union.
112
+ return Object.assign({ id: raw.id, formId: raw.formId, formVersion: raw.formVersion, formSectionId: ((_a = raw.formSectionId) !== null && _a !== void 0 ? _a : null), name: raw.name, questionText: raw.questionText, fieldTypeId: raw.fieldTypeId, fieldProperties: fieldProperties, helperText: (_b = raw.helperText) !== null && _b !== void 0 ? _b : null, questionOrder: raw.questionOrder, required: raw.required, referenceCode: (_c = raw.referenceCode) !== null && _c !== void 0 ? _c : null }, (lookupItems ? { lookupItems } : {}));
113
+ }
114
+ /**
115
+ * When a question carries a non-empty `lookupId`, strip the backend-resolved
116
+ * `items` out of `fieldProperties` and return them separately as the
117
+ * display-only `lookupItems`. Anything else passes through untouched (manual
118
+ * questions keep their authored `items`).
119
+ */
120
+ function normaliseLookupFieldProperties(fp) {
121
+ const lookupId = fp.lookupId;
122
+ const hasLookup = typeof lookupId === 'string' && lookupId.length > 0;
123
+ if (!hasLookup || !Array.isArray(fp.items)) {
124
+ return { fieldProperties: fp };
125
+ }
126
+ const { items } = fp, rest = __rest(fp, ["items"]);
127
+ return { fieldProperties: rest, lookupItems: items };
128
+ }
129
+ function isKnownFieldTypeId(id) {
130
+ // FieldTypeId is a numeric enum, so the reverse map gives us O(1) lookup
131
+ // without enumerating every variant by hand. Stays in sync automatically
132
+ // when a new field type is added to the enum.
133
+ return Object.prototype.hasOwnProperty.call(types.FieldTypeId, String(id));
134
+ }
135
+ function parseStyleOverrides(raw) {
136
+ if (!raw)
137
+ return null;
138
+ try {
139
+ return JSON.parse(raw);
140
+ }
141
+ catch (err) {
142
+ // Defensive: a malformed styleOverrides JSON from the server shouldn't crash
143
+ // the form load, but losing the styles silently masks server-side bugs.
144
+ // eslint-disable-next-line no-console
145
+ console.warn('[udp-question-form] Failed to parse form.styleOverrides JSON; defaulting to null.', { raw, err });
146
+ return null;
147
+ }
148
+ }
149
+ function parseSectionProperties(raw) {
150
+ if (!raw)
151
+ return {};
152
+ try {
153
+ return JSON.parse(raw);
154
+ }
155
+ catch (err) {
156
+ // eslint-disable-next-line no-console
157
+ console.warn('[udp-question-form] Failed to parse section.sectionProperties JSON; defaulting to {}.', { raw, err });
158
+ return {};
159
+ }
160
+ }
161
+
162
+ /**
163
+ * Shared "this field has no value" predicate. Single source of truth so the
164
+ * required rule, the progress tracker, and any future surface that needs
165
+ * "is this answered?" stay in lockstep. Add a new structured value shape
166
+ * (Signature, Location, Table, …) here once — everything else picks it up.
167
+ */
168
+ function isValueEmpty(value) {
169
+ if (value == null)
170
+ return true;
171
+ if (typeof value === 'string')
172
+ return value.trim() === '';
173
+ if (Array.isArray(value))
174
+ return value.length === 0;
175
+ if (typeof value === 'object') {
176
+ // Signature value: empty when there's no drawn-or-stored file. A typed
177
+ // fullName alone doesn't satisfy required — the canvas is the primary input.
178
+ if ('file' in value && 'fullName' in value) {
179
+ const file = value.file;
180
+ return !(file instanceof File);
181
+ }
182
+ // Location: empty when no map pin is set — a typed-but-not-resolved
183
+ // address alone doesn't satisfy required.
184
+ if ('latitude' in value && 'longitude' in value) {
185
+ const v = value;
186
+ return v.latitude == null && v.longitude == null;
187
+ }
188
+ // Table: empty when no rows.
189
+ if ('rows' in value && Array.isArray(value.rows)) {
190
+ return value.rows.length === 0;
191
+ }
192
+ }
193
+ return false;
194
+ }
195
+
196
+ /**
197
+ * Required rule. Stored on `question.required` (top-level boolean) — unlike
198
+ * every other rule it doesn't live in `fieldProperties`. That's a wire-format
199
+ * concession to legacy; functionally it behaves identically to the rest.
200
+ */
201
+ const requiredRule = {
202
+ ruleType: 'required',
203
+ appliesTo: [
204
+ types.FieldTypeId.SingleLineText,
205
+ types.FieldTypeId.MultiLineText,
206
+ types.FieldTypeId.Checkbox,
207
+ types.FieldTypeId.RadioButton,
208
+ types.FieldTypeId.DropdownSingleSelect,
209
+ types.FieldTypeId.DropdownMultipleSelect,
210
+ types.FieldTypeId.ListMultiSelect,
211
+ types.FieldTypeId.DateSelector,
212
+ types.FieldTypeId.TimeSelector,
213
+ types.FieldTypeId.DateTimeSelector,
214
+ types.FieldTypeId.FileUpload,
215
+ types.FieldTypeId.YesNo,
216
+ types.FieldTypeId.Signature,
217
+ types.FieldTypeId.Number,
218
+ types.FieldTypeId.ImageUpload,
219
+ types.FieldTypeId.Location,
220
+ types.FieldTypeId.Table,
221
+ ],
222
+ // Unlike most rules, required runs even when the value is empty — that's
223
+ // the whole point.
224
+ runOnEmpty: true,
225
+ readParams: question => (question.required === true ? true : null),
226
+ validateParams: () => null,
227
+ check: (value, _params) => (isValueEmpty(value) ? { message: 'Required' } : null),
228
+ defaultMessage: () => 'Required',
229
+ builder: {
230
+ label: 'Required',
231
+ description: 'Block submit unless the user provides a value.',
232
+ params: [],
233
+ defaultParams: true,
234
+ enable: set => set('required', true),
235
+ disable: set => set('required', false),
236
+ },
237
+ };
238
+
239
+ const minLengthRule = {
240
+ ruleType: 'minLength',
241
+ appliesTo: [types.FieldTypeId.SingleLineText, types.FieldTypeId.MultiLineText],
242
+ // `undefined` → rule off; a finite/parseable value → rule on with that value;
243
+ // anything else present → rule on with NaN, which keeps the card mounted
244
+ // while `validateParams` surfaces a fix-the-input error and blocks Update.
245
+ readParams: question => {
246
+ const v = question.fieldProperties.minCharacter;
247
+ if (v === undefined)
248
+ return null;
249
+ if (typeof v === 'number' && Number.isFinite(v))
250
+ return v;
251
+ if (typeof v === 'string' && v.trim() !== '') {
252
+ const n = Number(v);
253
+ if (Number.isFinite(n))
254
+ return n;
255
+ }
256
+ return Number.NaN;
257
+ },
258
+ validateParams: n => {
259
+ if (!Number.isFinite(n))
260
+ return 'Enter a minimum length.';
261
+ if (n < 0)
262
+ return 'Minimum length must be 0 or greater.';
263
+ return null;
264
+ },
265
+ check: (value, min) => {
266
+ const len = typeof value === 'string' ? value.length : 0;
267
+ return len < min ? { message: `Must be at least ${min} characters` } : null;
268
+ },
269
+ defaultMessage: n => `Must be at least ${n} characters`,
270
+ builder: {
271
+ label: 'Minimum length',
272
+ params: [{ key: 'value', formPath: 'fieldProperties.minCharacter', label: 'Minimum characters', type: 'number', min: 0 }],
273
+ defaultParams: 1,
274
+ enable: set => set('fieldProperties.minCharacter', 1),
275
+ disable: set => set('fieldProperties.minCharacter', undefined),
276
+ },
277
+ };
278
+
279
+ const maxLengthRule = {
280
+ ruleType: 'maxLength',
281
+ appliesTo: [types.FieldTypeId.SingleLineText, types.FieldTypeId.MultiLineText],
282
+ // See min-length.ts for the three-state activation rationale.
283
+ readParams: question => {
284
+ const v = question.fieldProperties.maxCharacter;
285
+ if (v === undefined)
286
+ return null;
287
+ if (typeof v === 'number' && Number.isFinite(v))
288
+ return v;
289
+ if (typeof v === 'string' && v.trim() !== '') {
290
+ const n = Number(v);
291
+ if (Number.isFinite(n))
292
+ return n;
293
+ }
294
+ return Number.NaN;
295
+ },
296
+ validateParams: n => {
297
+ if (!Number.isFinite(n))
298
+ return 'Enter a maximum length.';
299
+ if (n < 0)
300
+ return 'Maximum length must be 0 or greater.';
301
+ return null;
302
+ },
303
+ check: (value, max) => {
304
+ const len = typeof value === 'string' ? value.length : 0;
305
+ return len > max ? { message: `Must be at most ${max} characters` } : null;
306
+ },
307
+ defaultMessage: n => `Must be at most ${n} characters`,
308
+ builder: {
309
+ label: 'Maximum length',
310
+ params: [{ key: 'value', formPath: 'fieldProperties.maxCharacter', label: 'Maximum characters', type: 'number', min: 0 }],
311
+ defaultParams: 100,
312
+ enable: set => set('fieldProperties.maxCharacter', 100),
313
+ disable: set => set('fieldProperties.maxCharacter', undefined),
314
+ },
315
+ };
316
+
317
+ /**
318
+ * Regex pattern rule. Stored as `fieldProperties.pattern: string` (new key —
319
+ * absent on legacy forms, so the rule simply doesn't fire there). When the
320
+ * author provides a `patternMessage`, it surfaces instead of the generic
321
+ * default — better UX than "Must match the required pattern" for typed
322
+ * formats like ID codes or postal codes.
323
+ *
324
+ * The pattern is compiled once on check and cached per-call. Bad patterns
325
+ * fail at `validateParams` time (drawer surfaces inline) so the renderer
326
+ * never sees an invalid regex at submit time.
327
+ */
328
+ const patternRule = {
329
+ ruleType: 'pattern',
330
+ appliesTo: [types.FieldTypeId.SingleLineText, types.FieldTypeId.MultiLineText],
331
+ readParams: question => {
332
+ const fp = question.fieldProperties;
333
+ const pattern = fp === null || fp === void 0 ? void 0 : fp.pattern;
334
+ if (typeof pattern !== 'string' || pattern.length === 0)
335
+ return null;
336
+ const message = typeof (fp === null || fp === void 0 ? void 0 : fp.patternMessage) === 'string' ? fp.patternMessage : undefined;
337
+ return { pattern, message };
338
+ },
339
+ validateParams: ({ pattern }) => {
340
+ try {
341
+ return null;
342
+ }
343
+ catch (e) {
344
+ return `Invalid pattern: ${e.message}`;
345
+ }
346
+ },
347
+ check: (value, params) => {
348
+ var _a;
349
+ const s = typeof value === 'string' ? value : String(value !== null && value !== void 0 ? value : '');
350
+ let regex;
351
+ try {
352
+ regex = new RegExp(params.pattern);
353
+ }
354
+ catch (_b) {
355
+ // validateParams should have caught this — but if a malformed pattern
356
+ // slipped through, fail safe (don't block submit on engine error).
357
+ return null;
358
+ }
359
+ return regex.test(s) ? null : { message: (_a = params.message) !== null && _a !== void 0 ? _a : 'Does not match the required format' };
360
+ },
361
+ defaultMessage: params => { var _a; return (_a = params.message) !== null && _a !== void 0 ? _a : 'Does not match the required format'; },
362
+ builder: {
363
+ label: 'Pattern (regex)',
364
+ description: 'Block submit unless the value matches a regular expression.',
365
+ params: [
366
+ { key: 'pattern', formPath: 'fieldProperties.pattern', label: 'Regular expression', type: 'regex' },
367
+ { key: 'message', formPath: 'fieldProperties.patternMessage', label: 'Error message (optional)', type: 'string' },
368
+ ],
369
+ defaultParams: { pattern: '' },
370
+ // Seed with a permissive default the author can tighten — empty would
371
+ // fail `readParams`'s non-empty check and flick the toggle right back off.
372
+ enable: set => set('fieldProperties.pattern', '.*'),
373
+ disable: set => {
374
+ set('fieldProperties.pattern', undefined);
375
+ set('fieldProperties.patternMessage', undefined);
376
+ },
377
+ },
378
+ };
379
+
380
+ const minValueRule = {
381
+ ruleType: 'minValue',
382
+ appliesTo: [types.FieldTypeId.Number],
383
+ // Same three-state pattern as min-length: `undefined` is off, a finite or
384
+ // parseable value is active, anything else present is NaN (active-but-invalid)
385
+ // so the card survives an empty input while `validateParams` blocks Update.
386
+ readParams: question => {
387
+ const v = question.fieldProperties.minValue;
388
+ if (v === undefined)
389
+ return null;
390
+ if (typeof v === 'number' && Number.isFinite(v))
391
+ return v;
392
+ if (typeof v === 'string' && v.trim() !== '') {
393
+ const n = Number(v);
394
+ if (Number.isFinite(n))
395
+ return n;
396
+ }
397
+ return Number.NaN;
398
+ },
399
+ validateParams: n => (Number.isFinite(n) ? null : 'Enter a minimum value.'),
400
+ check: (value, min) => {
401
+ const n = typeof value === 'number' ? value : Number(value);
402
+ if (!Number.isFinite(n))
403
+ return null;
404
+ return n < min ? { message: `Must be at least ${min}` } : null;
405
+ },
406
+ defaultMessage: n => `Must be at least ${n}`,
407
+ builder: {
408
+ label: 'Minimum value',
409
+ params: [{ key: 'value', formPath: 'fieldProperties.minValue', label: 'Minimum value', type: 'number' }],
410
+ defaultParams: 0,
411
+ enable: set => set('fieldProperties.minValue', 0),
412
+ disable: set => set('fieldProperties.minValue', undefined),
413
+ },
414
+ };
415
+
416
+ const maxValueRule = {
417
+ ruleType: 'maxValue',
418
+ appliesTo: [types.FieldTypeId.Number],
419
+ // See min-value.ts for the three-state activation rationale.
420
+ readParams: question => {
421
+ const v = question.fieldProperties.maxValue;
422
+ if (v === undefined)
423
+ return null;
424
+ if (typeof v === 'number' && Number.isFinite(v))
425
+ return v;
426
+ if (typeof v === 'string' && v.trim() !== '') {
427
+ const n = Number(v);
428
+ if (Number.isFinite(n))
429
+ return n;
430
+ }
431
+ return Number.NaN;
432
+ },
433
+ validateParams: n => (Number.isFinite(n) ? null : 'Enter a maximum value.'),
434
+ check: (value, max) => {
435
+ const n = typeof value === 'number' ? value : Number(value);
436
+ if (!Number.isFinite(n))
437
+ return null;
438
+ return n > max ? { message: `Must be at most ${max}` } : null;
439
+ },
440
+ defaultMessage: n => `Must be at most ${n}`,
441
+ builder: {
442
+ label: 'Maximum value',
443
+ params: [{ key: 'value', formPath: 'fieldProperties.maxValue', label: 'Maximum value', type: 'number' }],
444
+ defaultParams: 100,
445
+ enable: set => set('fieldProperties.maxValue', 100),
446
+ disable: set => set('fieldProperties.maxValue', undefined),
447
+ },
448
+ };
449
+
450
+ const ISO_DATE$1 = /^\d{4}-\d{2}-\d{2}$/;
451
+ const minDateRule = {
452
+ ruleType: 'minDate',
453
+ appliesTo: [types.FieldTypeId.DateSelector],
454
+ readParams: question => {
455
+ var _a;
456
+ const v = (_a = question.fieldProperties) === null || _a === void 0 ? void 0 : _a.minDate;
457
+ return typeof v === 'string' && ISO_DATE$1.test(v) ? v : null;
458
+ },
459
+ validateParams: v => (ISO_DATE$1.test(v) ? null : 'Must be a YYYY-MM-DD date.'),
460
+ check: (value, min) => {
461
+ const v = typeof value === 'string' ? value : '';
462
+ return v < min ? { message: `Must be on or after ${min}` } : null;
463
+ },
464
+ defaultMessage: min => `Must be on or after ${min}`,
465
+ builder: {
466
+ label: 'Earliest date',
467
+ params: [{ key: 'value', formPath: 'fieldProperties.minDate', label: 'Earliest allowed date', type: 'date' }],
468
+ defaultParams: '',
469
+ enable: set => set('fieldProperties.minDate', new Date().toISOString().slice(0, 10)),
470
+ disable: set => set('fieldProperties.minDate', undefined),
471
+ },
472
+ };
473
+
474
+ const ISO_DATE = /^\d{4}-\d{2}-\d{2}$/;
475
+ const maxDateRule = {
476
+ ruleType: 'maxDate',
477
+ appliesTo: [types.FieldTypeId.DateSelector],
478
+ readParams: question => {
479
+ var _a;
480
+ const v = (_a = question.fieldProperties) === null || _a === void 0 ? void 0 : _a.maxDate;
481
+ return typeof v === 'string' && ISO_DATE.test(v) ? v : null;
482
+ },
483
+ validateParams: v => (ISO_DATE.test(v) ? null : 'Must be a YYYY-MM-DD date.'),
484
+ check: (value, max) => {
485
+ const v = typeof value === 'string' ? value : '';
486
+ return v > max ? { message: `Must be on or before ${max}` } : null;
487
+ },
488
+ defaultMessage: max => `Must be on or before ${max}`,
489
+ builder: {
490
+ label: 'Latest date',
491
+ params: [{ key: 'value', formPath: 'fieldProperties.maxDate', label: 'Latest allowed date', type: 'date' }],
492
+ defaultParams: '',
493
+ enable: set => set('fieldProperties.maxDate', new Date().toISOString().slice(0, 10)),
494
+ disable: set => set('fieldProperties.maxDate', undefined),
495
+ },
496
+ };
497
+
498
+ /**
499
+ * Active when `noFutureDate === true`. The legacy `allowFutureDate` key is
500
+ * deliberately NOT consulted: the legacy builder wrote `allowFutureDate:
501
+ * false` on every date question by default, but the legacy renderer never
502
+ * enforced it — keying off it would suddenly reject future dates on
503
+ * virtually every form authored in the old builder.
504
+ */
505
+ const noFutureDateRule = {
506
+ ruleType: 'noFutureDate',
507
+ appliesTo: [types.FieldTypeId.DateSelector],
508
+ readParams: question => {
509
+ var _a;
510
+ const v = (_a = question.fieldProperties) === null || _a === void 0 ? void 0 : _a.noFutureDate;
511
+ return v === true ? true : null;
512
+ },
513
+ validateParams: () => null,
514
+ check: (value, _params, _question, ctx) => {
515
+ const v = typeof value === 'string' ? value : '';
516
+ const today = ctx.now().toISOString().slice(0, 10);
517
+ return v > today ? { message: 'Future dates are not allowed' } : null;
518
+ },
519
+ defaultMessage: () => 'Future dates are not allowed',
520
+ builder: {
521
+ label: 'Disallow future dates',
522
+ params: [],
523
+ defaultParams: true,
524
+ enable: set => set('fieldProperties.noFutureDate', true),
525
+ disable: set => set('fieldProperties.noFutureDate', undefined),
526
+ },
527
+ };
528
+
529
+ // HH:mm or HH:mm:ss. We compare lexicographically after normalizing both
530
+ // sides to HH:mm:ss — legacy fieldProperties store bounds WITH seconds
531
+ // ('09:00:00') while submission values come in WITHOUT ('09:00'), and a raw
532
+ // compare would fail the exact-boundary case ('09:00' < '09:00:00').
533
+ const TIME_RE$1 = /^\d{2}:\d{2}(?::\d{2})?$/;
534
+ const withSeconds$1 = (t) => (t.length === 5 ? `${t}:00` : t);
535
+ const minTimeRule = {
536
+ ruleType: 'minTime',
537
+ appliesTo: [types.FieldTypeId.TimeSelector],
538
+ readParams: question => {
539
+ var _a;
540
+ const v = (_a = question.fieldProperties) === null || _a === void 0 ? void 0 : _a.minTime;
541
+ return typeof v === 'string' && TIME_RE$1.test(v) ? v : null;
542
+ },
543
+ validateParams: v => (TIME_RE$1.test(v) ? null : 'Must be a HH:mm[:ss] time.'),
544
+ check: (value, min) => {
545
+ const v = typeof value === 'string' ? value : '';
546
+ return withSeconds$1(v) < withSeconds$1(min)
547
+ ? { message: `Must be at or after ${min}` }
548
+ : null;
549
+ },
550
+ defaultMessage: min => `Must be at or after ${min}`,
551
+ builder: {
552
+ label: 'Earliest time',
553
+ params: [{ key: 'value', formPath: 'fieldProperties.minTime', label: 'Earliest allowed time', type: 'time' }],
554
+ defaultParams: '',
555
+ enable: set => set('fieldProperties.minTime', '00:00'),
556
+ disable: set => set('fieldProperties.minTime', undefined),
557
+ },
558
+ };
559
+
560
+ const TIME_RE = /^\d{2}:\d{2}(?::\d{2})?$/;
561
+ // Normalize to HH:mm:ss so legacy seconds-bearing bounds compare correctly
562
+ // against HH:mm submission values (see min-time.ts).
563
+ const withSeconds = (t) => (t.length === 5 ? `${t}:00` : t);
564
+ const maxTimeRule = {
565
+ ruleType: 'maxTime',
566
+ appliesTo: [types.FieldTypeId.TimeSelector],
567
+ readParams: question => {
568
+ var _a;
569
+ const v = (_a = question.fieldProperties) === null || _a === void 0 ? void 0 : _a.maxTime;
570
+ return typeof v === 'string' && TIME_RE.test(v) ? v : null;
571
+ },
572
+ validateParams: v => (TIME_RE.test(v) ? null : 'Must be a HH:mm[:ss] time.'),
573
+ check: (value, max) => {
574
+ const v = typeof value === 'string' ? value : '';
575
+ return withSeconds(v) > withSeconds(max)
576
+ ? { message: `Must be at or before ${max}` }
577
+ : null;
578
+ },
579
+ defaultMessage: max => `Must be at or before ${max}`,
580
+ builder: {
581
+ label: 'Latest time',
582
+ params: [{ key: 'value', formPath: 'fieldProperties.maxTime', label: 'Latest allowed time', type: 'time' }],
583
+ defaultParams: '',
584
+ enable: set => set('fieldProperties.maxTime', '23:59'),
585
+ disable: set => set('fieldProperties.maxTime', undefined),
586
+ },
587
+ };
588
+
589
+ const DATETIME_RE$1 = /^\d{4}-\d{2}-\d{2}[ T]\d{2}:\d{2}(?::\d{2})?$/;
590
+ // Normalize a datetime string for lexicographic comparison: legacy bounds
591
+ // use a space separator and carry seconds ('1980-01-01 00:00:00') while
592
+ // submission values are T-separated without seconds ('1980-01-01T00:00').
593
+ // Unify the separator and pad missing seconds so equal instants compare equal.
594
+ const normalizeDateTime$1 = (s) => {
595
+ const t = s.replace(' ', 'T');
596
+ return t.length === 16 ? `${t}:00` : t;
597
+ };
598
+ const minDateTimeRule = {
599
+ ruleType: 'minDateTime',
600
+ appliesTo: [types.FieldTypeId.DateTimeSelector],
601
+ readParams: question => {
602
+ var _a;
603
+ const v = (_a = question.fieldProperties) === null || _a === void 0 ? void 0 : _a.minDateTime;
604
+ return typeof v === 'string' && DATETIME_RE$1.test(v) ? v : null;
605
+ },
606
+ validateParams: v => (DATETIME_RE$1.test(v) ? null : 'Must be a YYYY-MM-DD HH:mm[:ss] datetime.'),
607
+ check: (value, min) => {
608
+ const v = typeof value === 'string' ? value : '';
609
+ return normalizeDateTime$1(v) < normalizeDateTime$1(min)
610
+ ? { message: `Must be on or after ${min}` }
611
+ : null;
612
+ },
613
+ defaultMessage: min => `Must be on or after ${min}`,
614
+ builder: {
615
+ label: 'Earliest date/time',
616
+ params: [{ key: 'value', formPath: 'fieldProperties.minDateTime', label: 'Earliest allowed date/time', type: 'datetime' }],
617
+ defaultParams: '',
618
+ enable: set => set('fieldProperties.minDateTime', `${new Date().toISOString().slice(0, 10)}T00:00`),
619
+ disable: set => set('fieldProperties.minDateTime', undefined),
620
+ },
621
+ };
622
+
623
+ const DATETIME_RE = /^\d{4}-\d{2}-\d{2}[ T]\d{2}:\d{2}(?::\d{2})?$/;
624
+ // Normalize a datetime string for lexicographic comparison: legacy bounds
625
+ // use a space separator and carry seconds ('1980-01-01 00:00:00') while
626
+ // submission values are T-separated without seconds ('1980-01-01T00:00').
627
+ // Unify the separator and pad missing seconds so equal instants compare equal.
628
+ const normalizeDateTime = (s) => {
629
+ const t = s.replace(' ', 'T');
630
+ return t.length === 16 ? `${t}:00` : t;
631
+ };
632
+ const maxDateTimeRule = {
633
+ ruleType: 'maxDateTime',
634
+ appliesTo: [types.FieldTypeId.DateTimeSelector],
635
+ readParams: question => {
636
+ var _a;
637
+ const v = (_a = question.fieldProperties) === null || _a === void 0 ? void 0 : _a.maxDateTime;
638
+ return typeof v === 'string' && DATETIME_RE.test(v) ? v : null;
639
+ },
640
+ validateParams: v => (DATETIME_RE.test(v) ? null : 'Must be a YYYY-MM-DD HH:mm[:ss] datetime.'),
641
+ check: (value, max) => {
642
+ const v = typeof value === 'string' ? value : '';
643
+ return normalizeDateTime(v) > normalizeDateTime(max)
644
+ ? { message: `Must be on or before ${max}` }
645
+ : null;
646
+ },
647
+ defaultMessage: max => `Must be on or before ${max}`,
648
+ builder: {
649
+ label: 'Latest date/time',
650
+ params: [{ key: 'value', formPath: 'fieldProperties.maxDateTime', label: 'Latest allowed date/time', type: 'datetime' }],
651
+ defaultParams: '',
652
+ enable: set => set('fieldProperties.maxDateTime', `${new Date().toISOString().slice(0, 10)}T23:59`),
653
+ disable: set => set('fieldProperties.maxDateTime', undefined),
654
+ },
655
+ };
656
+
657
+ /**
658
+ * DateTime equivalent of `noFutureDate`. Compares the date portion only,
659
+ * matching legacy renderer behavior (a 23:59 value today is allowed even
660
+ * though the wall clock has already passed earlier moments today).
661
+ */
662
+ const noFutureDateTimeRule = {
663
+ ruleType: 'noFutureDateTime',
664
+ appliesTo: [types.FieldTypeId.DateTimeSelector],
665
+ // Keyed on the dedicated `noFutureDate` toggle — the legacy
666
+ // `allowFutureDate` key was never enforced by the old renderer (see
667
+ // no-future-date.ts) so it stays inert here too.
668
+ readParams: question => {
669
+ var _a;
670
+ const v = (_a = question.fieldProperties) === null || _a === void 0 ? void 0 : _a.noFutureDate;
671
+ return v === true ? true : null;
672
+ },
673
+ validateParams: () => null,
674
+ check: (value, _params, _question, ctx) => {
675
+ const v = typeof value === 'string' ? value : '';
676
+ const today = ctx.now().toISOString().slice(0, 10);
677
+ return v.slice(0, 10) > today ? { message: 'Future dates are not allowed' } : null;
678
+ },
679
+ defaultMessage: () => 'Future dates are not allowed',
680
+ builder: {
681
+ label: 'Disallow future dates',
682
+ params: [],
683
+ defaultParams: true,
684
+ enable: set => set('fieldProperties.noFutureDate', true),
685
+ disable: set => set('fieldProperties.noFutureDate', undefined),
686
+ },
687
+ };
688
+
689
+ /**
690
+ * Lower bound on how many options a multi-select must have. Number-keyed with
691
+ * the same NaN-sentinel activation as min-value: `undefined` is off, a
692
+ * parseable number is active, and present-but-unparseable returns NaN
693
+ * (active-but-invalid) so the builder card survives an in-flight empty input
694
+ * while `validateParams` blocks the Update.
695
+ */
696
+ const minSelectionsRule = {
697
+ ruleType: 'minSelections',
698
+ appliesTo: [types.FieldTypeId.Checkbox, types.FieldTypeId.DropdownMultipleSelect, types.FieldTypeId.ListMultiSelect],
699
+ // A count minimum is mandatory by nature: an empty selection (0) violates
700
+ // "at least N", so run even when empty rather than skipping like length/value.
701
+ runOnEmpty: true,
702
+ readParams: question => {
703
+ const v = question.fieldProperties.minSelections;
704
+ if (v === undefined)
705
+ return null;
706
+ if (typeof v === 'number' && Number.isFinite(v))
707
+ return v;
708
+ if (typeof v === 'string' && v.trim() !== '') {
709
+ const n = Number(v);
710
+ if (Number.isFinite(n))
711
+ return n;
712
+ }
713
+ return Number.NaN;
714
+ },
715
+ validateParams: n => (Number.isFinite(n) ? null : 'Enter a minimum number of selections.'),
716
+ check: (value, min) => {
717
+ if (!Number.isFinite(min))
718
+ return null;
719
+ const count = Array.isArray(value) ? value.length : 0;
720
+ return count < min ? { message: message$7(min) } : null;
721
+ },
722
+ defaultMessage: message$7,
723
+ builder: {
724
+ label: 'Minimum selections',
725
+ description: 'Require at least N options to be selected.',
726
+ params: [
727
+ {
728
+ key: 'value',
729
+ formPath: 'fieldProperties.minSelections',
730
+ label: 'Minimum selections',
731
+ type: 'number',
732
+ min: 0,
733
+ },
734
+ ],
735
+ defaultParams: 1,
736
+ enable: set => set('fieldProperties.minSelections', 1),
737
+ disable: set => set('fieldProperties.minSelections', undefined),
738
+ },
739
+ };
740
+ function message$7(min) {
741
+ return `Select at least ${min} option${min === 1 ? '' : 's'}`;
742
+ }
743
+
744
+ /**
745
+ * Upper bound on how many options a multi-select may have. Number-keyed with
746
+ * the same NaN-sentinel activation as max-value (see min-selections for the
747
+ * rationale).
748
+ */
749
+ const maxSelectionsRule = {
750
+ ruleType: 'maxSelections',
751
+ appliesTo: [types.FieldTypeId.Checkbox, types.FieldTypeId.DropdownMultipleSelect, types.FieldTypeId.ListMultiSelect],
752
+ readParams: question => {
753
+ const v = question.fieldProperties.maxSelections;
754
+ if (v === undefined)
755
+ return null;
756
+ if (typeof v === 'number' && Number.isFinite(v))
757
+ return v;
758
+ if (typeof v === 'string' && v.trim() !== '') {
759
+ const n = Number(v);
760
+ if (Number.isFinite(n))
761
+ return n;
762
+ }
763
+ return Number.NaN;
764
+ },
765
+ validateParams: n => (Number.isFinite(n) ? null : 'Enter a maximum number of selections.'),
766
+ check: (value, max) => {
767
+ if (!Number.isFinite(max))
768
+ return null;
769
+ const count = Array.isArray(value) ? value.length : 0;
770
+ return count > max ? { message: message$6(max) } : null;
771
+ },
772
+ defaultMessage: message$6,
773
+ builder: {
774
+ label: 'Maximum selections',
775
+ description: 'Limit how many options may be selected.',
776
+ params: [
777
+ {
778
+ key: 'value',
779
+ formPath: 'fieldProperties.maxSelections',
780
+ label: 'Maximum selections',
781
+ type: 'number',
782
+ min: 1,
783
+ },
784
+ ],
785
+ defaultParams: 1,
786
+ enable: set => set('fieldProperties.maxSelections', 1),
787
+ disable: set => set('fieldProperties.maxSelections', undefined),
788
+ },
789
+ };
790
+ function message$6(max) {
791
+ return `Select at most ${max} option${max === 1 ? '' : 's'}`;
792
+ }
793
+
794
+ /**
795
+ * Lower bound on a table's row count. The Table value is `{ rows: [...] }`
796
+ * (see the table intrinsic rule). Number-keyed with the same NaN-sentinel
797
+ * activation as min-value. Note `required` already enforces "at least one
798
+ * row"; this rule is for explicit minimums (e.g. "add at least 3 line items").
799
+ */
800
+ const minRowsRule = {
801
+ ruleType: 'minRows',
802
+ appliesTo: [types.FieldTypeId.Table],
803
+ // A row minimum is mandatory by nature: an empty table (0 rows) violates
804
+ // "at least N", so run even when empty rather than skipping.
805
+ runOnEmpty: true,
806
+ readParams: question => {
807
+ const v = question.fieldProperties.minRows;
808
+ if (v === undefined)
809
+ return null;
810
+ if (typeof v === 'number' && Number.isFinite(v))
811
+ return v;
812
+ if (typeof v === 'string' && v.trim() !== '') {
813
+ const n = Number(v);
814
+ if (Number.isFinite(n))
815
+ return n;
816
+ }
817
+ return Number.NaN;
818
+ },
819
+ validateParams: n => (Number.isFinite(n) ? null : 'Enter a minimum number of rows.'),
820
+ check: (value, min) => {
821
+ if (!Number.isFinite(min))
822
+ return null;
823
+ const count = rowCount$1(value);
824
+ return count < min ? { message: message$5(min) } : null;
825
+ },
826
+ defaultMessage: message$5,
827
+ builder: {
828
+ label: 'Minimum rows',
829
+ description: 'Require at least N rows in the table.',
830
+ params: [
831
+ {
832
+ key: 'value',
833
+ formPath: 'fieldProperties.minRows',
834
+ label: 'Minimum rows',
835
+ type: 'number',
836
+ min: 0,
837
+ },
838
+ ],
839
+ defaultParams: 1,
840
+ enable: set => set('fieldProperties.minRows', 1),
841
+ disable: set => set('fieldProperties.minRows', undefined),
842
+ },
843
+ };
844
+ function rowCount$1(value) {
845
+ const rows = value === null || value === void 0 ? void 0 : value.rows;
846
+ return Array.isArray(rows) ? rows.length : 0;
847
+ }
848
+ function message$5(min) {
849
+ return `Add at least ${min} row${min === 1 ? '' : 's'}`;
850
+ }
851
+
852
+ /**
853
+ * Upper bound on a table's row count. The Table value is `{ rows: [...] }`.
854
+ * Number-keyed with the same NaN-sentinel activation as max-value.
855
+ */
856
+ const maxRowsRule = {
857
+ ruleType: 'maxRows',
858
+ appliesTo: [types.FieldTypeId.Table],
859
+ readParams: question => {
860
+ const v = question.fieldProperties.maxRows;
861
+ if (v === undefined)
862
+ return null;
863
+ if (typeof v === 'number' && Number.isFinite(v))
864
+ return v;
865
+ if (typeof v === 'string' && v.trim() !== '') {
866
+ const n = Number(v);
867
+ if (Number.isFinite(n))
868
+ return n;
869
+ }
870
+ return Number.NaN;
871
+ },
872
+ validateParams: n => (Number.isFinite(n) ? null : 'Enter a maximum number of rows.'),
873
+ check: (value, max) => {
874
+ if (!Number.isFinite(max))
875
+ return null;
876
+ const count = rowCount(value);
877
+ return count > max ? { message: message$4(max) } : null;
878
+ },
879
+ defaultMessage: message$4,
880
+ builder: {
881
+ label: 'Maximum rows',
882
+ description: 'Limit how many rows the table may contain.',
883
+ params: [
884
+ {
885
+ key: 'value',
886
+ formPath: 'fieldProperties.maxRows',
887
+ label: 'Maximum rows',
888
+ type: 'number',
889
+ min: 1,
890
+ },
891
+ ],
892
+ defaultParams: 1,
893
+ enable: set => set('fieldProperties.maxRows', 1),
894
+ disable: set => set('fieldProperties.maxRows', undefined),
895
+ },
896
+ };
897
+ function rowCount(value) {
898
+ const rows = value === null || value === void 0 ? void 0 : value.rows;
899
+ return Array.isArray(rows) ? rows.length : 0;
900
+ }
901
+ function message$4(max) {
902
+ return `No more than ${max} row${max === 1 ? '' : 's'} allowed`;
903
+ }
904
+
905
+ /**
906
+ * Value must be a multiple of `step` (e.g. increments of 0.5 or 5). Number-keyed
907
+ * with NaN-sentinel activation. Float-safe via a ratio + epsilon comparison.
908
+ */
909
+ const stepRule = {
910
+ ruleType: 'step',
911
+ appliesTo: [types.FieldTypeId.Number],
912
+ readParams: question => {
913
+ const v = question.fieldProperties.step;
914
+ if (v === undefined)
915
+ return null;
916
+ if (typeof v === 'number' && Number.isFinite(v))
917
+ return v;
918
+ if (typeof v === 'string' && v.trim() !== '') {
919
+ const n = Number(v);
920
+ if (Number.isFinite(n))
921
+ return n;
922
+ }
923
+ return Number.NaN;
924
+ },
925
+ validateParams: n => (Number.isFinite(n) && n > 0 ? null : 'Enter a positive step value.'),
926
+ check: (value, step) => {
927
+ if (!Number.isFinite(step) || step <= 0)
928
+ return null;
929
+ const n = typeof value === 'number' ? value : Number(value);
930
+ if (!Number.isFinite(n))
931
+ return null;
932
+ const ratio = n / step;
933
+ const off = Math.abs(ratio - Math.round(ratio));
934
+ return off > 1e-9 ? { message: message$3(step) } : null;
935
+ },
936
+ defaultMessage: message$3,
937
+ builder: {
938
+ label: 'Step (multiple of)',
939
+ description: 'Require the value to be a multiple of a given step.',
940
+ params: [
941
+ { key: 'value', formPath: 'fieldProperties.step', label: 'Step', type: 'number', min: 0 },
942
+ ],
943
+ defaultParams: 1,
944
+ enable: set => set('fieldProperties.step', 1),
945
+ disable: set => set('fieldProperties.step', undefined),
946
+ },
947
+ };
948
+ function message$3(step) {
949
+ return `Must be a multiple of ${step}`;
950
+ }
951
+
952
+ /**
953
+ * Value may have at most `maxDecimalPlaces` digits after the decimal point
954
+ * (e.g. currency = 2). Number-keyed with NaN-sentinel activation; the param
955
+ * itself must be a non-negative integer.
956
+ */
957
+ const maxDecimalPlacesRule = {
958
+ ruleType: 'maxDecimalPlaces',
959
+ appliesTo: [types.FieldTypeId.Number],
960
+ readParams: question => {
961
+ const v = question.fieldProperties.maxDecimalPlaces;
962
+ if (v === undefined)
963
+ return null;
964
+ if (typeof v === 'number' && Number.isFinite(v))
965
+ return v;
966
+ if (typeof v === 'string' && v.trim() !== '') {
967
+ const n = Number(v);
968
+ if (Number.isFinite(n))
969
+ return n;
970
+ }
971
+ return Number.NaN;
972
+ },
973
+ validateParams: n => Number.isInteger(n) && n >= 0 ? null : 'Enter a whole number of decimal places (0 or more).',
974
+ check: (value, max) => {
975
+ if (!Number.isInteger(max) || max < 0)
976
+ return null;
977
+ const n = typeof value === 'number' ? value : Number(value);
978
+ if (!Number.isFinite(n))
979
+ return null;
980
+ return decimalPlaces(n) > max ? { message: message$2(max) } : null;
981
+ },
982
+ defaultMessage: message$2,
983
+ builder: {
984
+ label: 'Maximum decimal places',
985
+ description: 'Limit how many digits may follow the decimal point.',
986
+ params: [
987
+ {
988
+ key: 'value',
989
+ formPath: 'fieldProperties.maxDecimalPlaces',
990
+ label: 'Maximum decimal places',
991
+ type: 'number',
992
+ min: 0,
993
+ },
994
+ ],
995
+ defaultParams: 2,
996
+ enable: set => set('fieldProperties.maxDecimalPlaces', 2),
997
+ disable: set => set('fieldProperties.maxDecimalPlaces', undefined),
998
+ },
999
+ };
1000
+ function decimalPlaces(n) {
1001
+ var _a;
1002
+ if (Number.isInteger(n))
1003
+ return 0;
1004
+ const s = Math.abs(n).toString();
1005
+ const e = s.indexOf('e');
1006
+ if (e !== -1) {
1007
+ // Scientific notation (very small/large) — derive places from the exponent.
1008
+ const exp = Number(s.slice(e + 1));
1009
+ const fracDigits = ((_a = s.slice(0, e).split('.')[1]) !== null && _a !== void 0 ? _a : '').length;
1010
+ return Math.max(0, fracDigits - exp);
1011
+ }
1012
+ const dot = s.indexOf('.');
1013
+ return dot === -1 ? 0 : s.length - dot - 1;
1014
+ }
1015
+ function message$2(max) {
1016
+ return `Must have at most ${max} decimal place${max === 1 ? '' : 's'}`;
1017
+ }
1018
+
1019
+ /**
1020
+ * Whole-years age from a `YYYY-MM-DD` date-of-birth string relative to `now`.
1021
+ * Returns `null` for a malformed/empty value so age rules skip it (the date
1022
+ * format itself isn't this rule's concern). Uses calendar parts (not Date
1023
+ * arithmetic) to stay timezone-safe.
1024
+ */
1025
+ function ageFromDob(value, now) {
1026
+ if (typeof value !== 'string' || !/^\d{4}-\d{2}-\d{2}$/.test(value))
1027
+ return null;
1028
+ const [y, m, d] = value.split('-').map(Number);
1029
+ let age = now.getFullYear() - y;
1030
+ const monthDelta = now.getMonth() + 1 - m;
1031
+ if (monthDelta < 0 || (monthDelta === 0 && now.getDate() < d))
1032
+ age--;
1033
+ return age;
1034
+ }
1035
+
1036
+ /**
1037
+ * Minimum age in whole years, computed from a date-of-birth value against the
1038
+ * injectable clock (`ctx.now()`). Number-keyed with NaN-sentinel activation.
1039
+ * Empty-skip like the other date rules — an unanswered DOB doesn't fire; pair
1040
+ * with Required to make the date mandatory.
1041
+ */
1042
+ const minAgeRule = {
1043
+ ruleType: 'minAge',
1044
+ appliesTo: [types.FieldTypeId.DateSelector],
1045
+ readParams: question => {
1046
+ const v = question.fieldProperties.minAge;
1047
+ if (v === undefined)
1048
+ return null;
1049
+ if (typeof v === 'number' && Number.isFinite(v))
1050
+ return v;
1051
+ if (typeof v === 'string' && v.trim() !== '') {
1052
+ const n = Number(v);
1053
+ if (Number.isFinite(n))
1054
+ return n;
1055
+ }
1056
+ return Number.NaN;
1057
+ },
1058
+ validateParams: n => (Number.isFinite(n) && n >= 0 ? null : 'Enter a minimum age.'),
1059
+ check: (value, min, _question, ctx) => {
1060
+ if (!Number.isFinite(min))
1061
+ return null;
1062
+ const age = ageFromDob(value, ctx.now());
1063
+ if (age == null)
1064
+ return null;
1065
+ return age < min ? { message: message$1(min) } : null;
1066
+ },
1067
+ defaultMessage: message$1,
1068
+ builder: {
1069
+ label: 'Minimum age',
1070
+ description: 'Require the date of birth to be at least N years ago.',
1071
+ params: [
1072
+ {
1073
+ key: 'value',
1074
+ formPath: 'fieldProperties.minAge',
1075
+ label: 'Minimum age (years)',
1076
+ type: 'number',
1077
+ min: 0,
1078
+ },
1079
+ ],
1080
+ defaultParams: 18,
1081
+ enable: set => set('fieldProperties.minAge', 18),
1082
+ disable: set => set('fieldProperties.minAge', undefined),
1083
+ },
1084
+ };
1085
+ function message$1(min) {
1086
+ return `Must be at least ${min} year${min === 1 ? '' : 's'} old`;
1087
+ }
1088
+
1089
+ /**
1090
+ * Maximum age in whole years, computed from a date-of-birth value against the
1091
+ * injectable clock (`ctx.now()`). Number-keyed with NaN-sentinel activation.
1092
+ */
1093
+ const maxAgeRule = {
1094
+ ruleType: 'maxAge',
1095
+ appliesTo: [types.FieldTypeId.DateSelector],
1096
+ readParams: question => {
1097
+ const v = question.fieldProperties.maxAge;
1098
+ if (v === undefined)
1099
+ return null;
1100
+ if (typeof v === 'number' && Number.isFinite(v))
1101
+ return v;
1102
+ if (typeof v === 'string' && v.trim() !== '') {
1103
+ const n = Number(v);
1104
+ if (Number.isFinite(n))
1105
+ return n;
1106
+ }
1107
+ return Number.NaN;
1108
+ },
1109
+ validateParams: n => (Number.isFinite(n) && n >= 0 ? null : 'Enter a maximum age.'),
1110
+ check: (value, max, _question, ctx) => {
1111
+ if (!Number.isFinite(max))
1112
+ return null;
1113
+ const age = ageFromDob(value, ctx.now());
1114
+ if (age == null)
1115
+ return null;
1116
+ return age > max ? { message: message(max) } : null;
1117
+ },
1118
+ defaultMessage: message,
1119
+ builder: {
1120
+ label: 'Maximum age',
1121
+ description: 'Require the date of birth to be at most N years ago.',
1122
+ params: [
1123
+ {
1124
+ key: 'value',
1125
+ formPath: 'fieldProperties.maxAge',
1126
+ label: 'Maximum age (years)',
1127
+ type: 'number',
1128
+ min: 0,
1129
+ },
1130
+ ],
1131
+ defaultParams: 120,
1132
+ enable: set => set('fieldProperties.maxAge', 120),
1133
+ disable: set => set('fieldProperties.maxAge', undefined),
1134
+ },
1135
+ };
1136
+ function message(max) {
1137
+ return `Must be at most ${max} year${max === 1 ? '' : 's'} old`;
1138
+ }
1139
+
1140
+ /**
1141
+ * Reject values with a fractional part (whole numbers only). Boolean-keyed:
1142
+ * active when `integerOnly === true`.
1143
+ */
1144
+ const integerOnlyRule = {
1145
+ ruleType: 'integerOnly',
1146
+ appliesTo: [types.FieldTypeId.Number],
1147
+ readParams: question => question.fieldProperties.integerOnly === true ? true : null,
1148
+ validateParams: () => null,
1149
+ check: value => {
1150
+ const n = typeof value === 'number' ? value : Number(value);
1151
+ if (!Number.isFinite(n))
1152
+ return null;
1153
+ return Number.isInteger(n) ? null : { message: 'Must be a whole number' };
1154
+ },
1155
+ defaultMessage: () => 'Must be a whole number',
1156
+ builder: {
1157
+ label: 'Whole numbers only',
1158
+ description: 'Reject values with a decimal part.',
1159
+ params: [],
1160
+ defaultParams: true,
1161
+ enable: set => set('fieldProperties.integerOnly', true),
1162
+ disable: set => set('fieldProperties.integerOnly', undefined),
1163
+ },
1164
+ };
1165
+
1166
+ /**
1167
+ * Mirror of `noFutureDate`: disallow dates before today. Stored as
1168
+ * `noPastDate: true` (active when true; absent = off). Note this uses the
1169
+ * cleaner active-when-true convention rather than `noFutureDate`'s legacy
1170
+ * `allowFutureDate: false` — there's no legacy "past" key to stay compatible
1171
+ * with, so the new key reads positively.
1172
+ */
1173
+ const noPastDateRule = {
1174
+ ruleType: 'noPastDate',
1175
+ appliesTo: [types.FieldTypeId.DateSelector],
1176
+ readParams: question => { var _a; return ((_a = question.fieldProperties) === null || _a === void 0 ? void 0 : _a.noPastDate) === true ? true : null; },
1177
+ validateParams: () => null,
1178
+ check: (value, _params, _question, ctx) => {
1179
+ const v = typeof value === 'string' ? value : '';
1180
+ const today = ctx.now().toISOString().slice(0, 10);
1181
+ return v !== '' && v < today ? { message: 'Past dates are not allowed' } : null;
1182
+ },
1183
+ defaultMessage: () => 'Past dates are not allowed',
1184
+ builder: {
1185
+ label: 'Disallow past dates',
1186
+ params: [],
1187
+ defaultParams: true,
1188
+ enable: set => set('fieldProperties.noPastDate', true),
1189
+ disable: set => set('fieldProperties.noPastDate', undefined),
1190
+ },
1191
+ };
1192
+
1193
+ /**
1194
+ * DateTime equivalent of `noPastDate`. Compares the date portion only (matching
1195
+ * `noFutureDateTime`), so any time today is allowed. Stored as `noPastDate: true`
1196
+ * (active-when-true; shares the key name with the DateSelector rule, just as
1197
+ * `noFutureDateTime` shares `allowFutureDate`).
1198
+ */
1199
+ const noPastDateTimeRule = {
1200
+ ruleType: 'noPastDateTime',
1201
+ appliesTo: [types.FieldTypeId.DateTimeSelector],
1202
+ readParams: question => { var _a; return ((_a = question.fieldProperties) === null || _a === void 0 ? void 0 : _a.noPastDate) === true ? true : null; },
1203
+ validateParams: () => null,
1204
+ check: (value, _params, _question, ctx) => {
1205
+ const v = typeof value === 'string' ? value : '';
1206
+ const today = ctx.now().toISOString().slice(0, 10);
1207
+ return v !== '' && v.slice(0, 10) < today ? { message: 'Past dates are not allowed' } : null;
1208
+ },
1209
+ defaultMessage: () => 'Past dates are not allowed',
1210
+ builder: {
1211
+ label: 'Disallow past dates',
1212
+ params: [],
1213
+ defaultParams: true,
1214
+ enable: set => set('fieldProperties.noPastDate', true),
1215
+ disable: set => set('fieldProperties.noPastDate', undefined),
1216
+ },
1217
+ };
1218
+
1219
+ /**
1220
+ * Require a Yes/No to be set to Yes (e.g. attestation/consent). `required`
1221
+ * alone treats a 'false' / 'na' answer as answered, so this is the rule
1222
+ * that forces the affirmative. Boolean-keyed; runs on empty.
1223
+ */
1224
+ const mustBeYesRule = {
1225
+ ruleType: 'mustBeYes',
1226
+ appliesTo: [types.FieldTypeId.YesNo],
1227
+ runOnEmpty: true,
1228
+ readParams: question => question.fieldProperties.mustBeYes === true ? true : null,
1229
+ validateParams: () => null,
1230
+ check: value => value === 'true' || value === true ? null : { message: 'This must be set to Yes' },
1231
+ defaultMessage: () => 'This must be set to Yes',
1232
+ builder: {
1233
+ label: 'Must be Yes',
1234
+ description: 'Require the answer to be Yes (e.g. consent / attestation).',
1235
+ params: [],
1236
+ defaultParams: true,
1237
+ enable: set => set('fieldProperties.mustBeYes', true),
1238
+ disable: set => set('fieldProperties.mustBeYes', undefined),
1239
+ },
1240
+ };
1241
+
1242
+ const BUILTIN_RULES = [
1243
+ requiredRule,
1244
+ minLengthRule,
1245
+ maxLengthRule,
1246
+ patternRule,
1247
+ minValueRule,
1248
+ maxValueRule,
1249
+ minDateRule,
1250
+ maxDateRule,
1251
+ noFutureDateRule,
1252
+ minTimeRule,
1253
+ maxTimeRule,
1254
+ minDateTimeRule,
1255
+ maxDateTimeRule,
1256
+ noFutureDateTimeRule,
1257
+ minSelectionsRule,
1258
+ maxSelectionsRule,
1259
+ minRowsRule,
1260
+ maxRowsRule,
1261
+ stepRule,
1262
+ maxDecimalPlacesRule,
1263
+ minAgeRule,
1264
+ maxAgeRule,
1265
+ integerOnlyRule,
1266
+ noPastDateRule,
1267
+ noPastDateTimeRule,
1268
+ mustBeYesRule,
1269
+ ];
1270
+
1271
+ function resolveAllowedOptionValues(props, ctx) {
1272
+ if (Array.isArray(props.items) && props.items.length > 0) {
1273
+ return new Set(props.items.map(i => String(i.value)));
1274
+ }
1275
+ if (typeof props.lookupId === 'string' && props.lookupId.length > 0) {
1276
+ const resolved = ctx.resolveLookupOptions(props.lookupId);
1277
+ return resolved ? new Set(resolved.map(String)) : null;
1278
+ }
1279
+ return null;
1280
+ }
1281
+ const singleChoiceMembership = {
1282
+ ruleType: 'choice.singleMembership',
1283
+ appliesTo: [types.FieldTypeId.RadioButton, types.FieldTypeId.DropdownSingleSelect],
1284
+ check: (value, question, ctx) => {
1285
+ const allowed = resolveAllowedOptionValues(question.fieldProperties, ctx);
1286
+ if (!allowed)
1287
+ return null;
1288
+ return allowed.has(String(value)) ? null : { message: 'Selected option is no longer valid' };
1289
+ },
1290
+ };
1291
+ const multiChoiceMembership = {
1292
+ ruleType: 'choice.multiMembership',
1293
+ appliesTo: [
1294
+ types.FieldTypeId.Checkbox,
1295
+ types.FieldTypeId.DropdownMultipleSelect,
1296
+ types.FieldTypeId.ListMultiSelect,
1297
+ ],
1298
+ check: (value, question, ctx) => {
1299
+ const allowed = resolveAllowedOptionValues(question.fieldProperties, ctx);
1300
+ if (!allowed)
1301
+ return null;
1302
+ if (!Array.isArray(value))
1303
+ return null;
1304
+ for (const v of value) {
1305
+ if (!allowed.has(String(v))) {
1306
+ return { message: 'One or more selected options are no longer valid' };
1307
+ }
1308
+ }
1309
+ return null;
1310
+ },
1311
+ };
1312
+ const tableCellShape = {
1313
+ ruleType: 'table.cellShape',
1314
+ appliesTo: [types.FieldTypeId.Table],
1315
+ check: (value, question) => {
1316
+ var _a, _b;
1317
+ const columns = (_a = question.fieldProperties.columns) !== null && _a !== void 0 ? _a : [];
1318
+ const rows = Array.isArray(value === null || value === void 0 ? void 0 : value.rows) ? value.rows : [];
1319
+ for (let i = 0; i < rows.length; i++) {
1320
+ const row = rows[i];
1321
+ for (const col of columns) {
1322
+ const key = (_b = col.id) !== null && _b !== void 0 ? _b : col.name;
1323
+ if (!key)
1324
+ continue;
1325
+ const cell = row === null || row === void 0 ? void 0 : row[key];
1326
+ const empty = cell == null || (typeof cell === 'string' && cell.trim() === '');
1327
+ if (col.required && empty) {
1328
+ return { message: `Row ${i + 1}: ${col.name} is required` };
1329
+ }
1330
+ if (col.type === 'number' && !empty) {
1331
+ const n = typeof cell === 'number' ? cell : Number(cell);
1332
+ if (!Number.isFinite(n)) {
1333
+ return { message: `Row ${i + 1}: ${col.name} must be a number` };
1334
+ }
1335
+ }
1336
+ }
1337
+ }
1338
+ return null;
1339
+ },
1340
+ };
1341
+ /**
1342
+ * Catalog of built-in intrinsic rules. Exported as a used array so it
1343
+ * survives tree-shaking — see `rules/index.ts` for the same rationale.
1344
+ */
1345
+ const BUILTIN_INTRINSIC_RULES = [
1346
+ singleChoiceMembership,
1347
+ multiChoiceMembership,
1348
+ tableCellShape,
1349
+ ];
1350
+
1351
+ /**
1352
+ * Mutable rule registry. Process-wide singleton — there's only ever one
1353
+ * rule catalog for one validation engine.
1354
+ *
1355
+ * **Built-in rules auto-register on this module's first evaluation.** We do
1356
+ * the registration here (instead of in `validation/index.ts`) so it's
1357
+ * impossible for a bundler to bypass: any consumer that imports
1358
+ * `getAuthorRulesFor`, `getRule`, etc. transitively loads `registry.ts`,
1359
+ * which forces the rule-module imports below to run, which forces each
1360
+ * rule's module-level definition to evaluate. The earlier "side-effect
1361
+ * import in `validation/index.ts`" approach failed because Rollup traces
1362
+ * through re-exports and bundles the leaf module only — skipping any
1363
+ * sibling module whose exports aren't directly used by the consumer.
1364
+ *
1365
+ * Custom rules can still be registered at runtime by callers via
1366
+ * `registerRule(...)` — they land alongside the built-ins.
1367
+ */
1368
+ const authorRules = new Map();
1369
+ const intrinsicRules = [];
1370
+ /**
1371
+ * Register an author-configurable rule. Idempotent on `ruleType`: re-registering
1372
+ * the same ruleType replaces the previous registration (useful for tests that
1373
+ * stub a rule, harmless in production where each rule registers exactly once).
1374
+ */
1375
+ function registerRule(rule) {
1376
+ authorRules.set(rule.ruleType, rule);
1377
+ }
1378
+ /**
1379
+ * Register an intrinsic (always-on) rule. Not addressable by ruleType because
1380
+ * intrinsic rules can't be toggled — they're a property of the field type.
1381
+ */
1382
+ function registerIntrinsicRule(rule) {
1383
+ intrinsicRules.push(rule);
1384
+ }
1385
+ function getRule(ruleType) {
1386
+ return authorRules.get(ruleType);
1387
+ }
1388
+ /**
1389
+ * Author rules applicable to a given field type. The validation tab in the
1390
+ * builder walks this to render the row list. Order is registration order —
1391
+ * keep it stable by registering in deterministic order in `rules/index.ts`.
1392
+ */
1393
+ function getAuthorRulesFor(fieldTypeId) {
1394
+ const result = [];
1395
+ for (const rule of authorRules.values()) {
1396
+ if (rule.appliesTo.includes(fieldTypeId))
1397
+ result.push(rule);
1398
+ }
1399
+ return result;
1400
+ }
1401
+ /**
1402
+ * Intrinsic rules applicable to a given field type. Engine walks these
1403
+ * before author rules.
1404
+ */
1405
+ function getIntrinsicRulesFor(fieldTypeId) {
1406
+ return intrinsicRules.filter(r => r.appliesTo.includes(fieldTypeId));
1407
+ }
1408
+ // --- Built-in registration -------------------------------------------------
1409
+ // Must run at module-evaluation time so the registry is populated before any
1410
+ // caller queries it. The catalog modules (`./rules`, `./intrinsic`) export
1411
+ // arrays of definitions — iterating them here keeps the bundler from
1412
+ // tree-shaking the catalog files (the iteration is an unmistakable use).
1413
+ for (const rule of BUILTIN_RULES)
1414
+ registerRule(rule);
1415
+ for (const rule of BUILTIN_INTRINSIC_RULES)
1416
+ registerIntrinsicRule(rule);
1417
+
1418
+ const isNumericTableColumnType = (type) => type === 'number';
1419
+ const createTableColumnUiKey = () => `table-col-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
1420
+ const slugifyTableColumnName = (name) => {
1421
+ const slug = String(name || '')
1422
+ .trim()
1423
+ .toLowerCase()
1424
+ .replace(/[^a-z0-9]+/g, '-')
1425
+ .replace(/^-+|-+$/g, '');
1426
+ return slug || 'column';
1427
+ };
1428
+ const buildUniqueTableColumnId = (order, name, usedIds) => {
1429
+ const baseId = `${order}-${slugifyTableColumnName(name)}`;
1430
+ let candidate = baseId;
1431
+ let suffix = 2;
1432
+ while (usedIds.has(candidate)) {
1433
+ candidate = `${baseId}-${suffix}`;
1434
+ suffix += 1;
1435
+ }
1436
+ usedIds.add(candidate);
1437
+ return candidate;
1438
+ };
1439
+ /**
1440
+ * Stamps `uiKey` and `id` on any column that's missing one, preserving
1441
+ * existing values verbatim. Both identifiers must be stable across the
1442
+ * column's lifetime — rows in the submission wire payload are keyed by
1443
+ * `column.id`, so regenerating ids on reorder/rename would silently orphan
1444
+ * existing row cells. `uiKey` already followed this pattern; `id` now
1445
+ * matches.
1446
+ */
1447
+ const ensureTableColumnIds = (columns) => {
1448
+ const usedIds = new Set();
1449
+ for (const column of columns || []) {
1450
+ if (typeof (column === null || column === void 0 ? void 0 : column.id) === 'string' && column.id.length > 0)
1451
+ usedIds.add(column.id);
1452
+ }
1453
+ return (columns || []).map((column, index) => (Object.assign(Object.assign({}, column), { uiKey: (column === null || column === void 0 ? void 0 : column.uiKey) || createTableColumnUiKey(), id: typeof (column === null || column === void 0 ? void 0 : column.id) === 'string' && column.id.length > 0
1454
+ ? column.id
1455
+ : buildUniqueTableColumnId(index + 1, column === null || column === void 0 ? void 0 : column.name, usedIds) })));
1456
+ };
1457
+ const createDefaultTableColumn = () => ({
1458
+ name: 'Column 1',
1459
+ type: 'text',
1460
+ required: false,
1461
+ });
1462
+ // === Templates ===
1463
+ const questionTemplates = [
1464
+ {
1465
+ fieldTypeId: types.FieldTypeId.Hidden,
1466
+ questionTypeName: 'Hidden',
1467
+ icon: 'eye-off',
1468
+ category: 'Display',
1469
+ keywords: ['hidden', 'metadata', 'system'],
1470
+ defaultFieldProperties: { allowComments: false, allowFollowUpForms: false, readOnly: false },
1471
+ },
1472
+ {
1473
+ // New questions are born with NO validation rules. Authors opt in via
1474
+ // the validation tab — see `core/validation/`. Storage is presence-based:
1475
+ // setting `minCharacter` activates the minLength rule; clearing it
1476
+ // deactivates. Old forms loaded from the wire continue to carry these
1477
+ // keys and the corresponding rules continue to fire — back-compat is
1478
+ // automatic because the engine reads what the data says.
1479
+ fieldTypeId: types.FieldTypeId.SingleLineText,
1480
+ questionTypeName: 'Single Line Text',
1481
+ icon: 'text-font',
1482
+ category: 'Text',
1483
+ keywords: ['text', 'short', 'input', 'single line'],
1484
+ defaultFieldProperties: {
1485
+ allowComments: false,
1486
+ allowFollowUpForms: false,
1487
+ readOnly: false,
1488
+ },
1489
+ },
1490
+ {
1491
+ fieldTypeId: types.FieldTypeId.MultiLineText,
1492
+ questionTypeName: 'Multi Line Text',
1493
+ icon: 'text-paragraph',
1494
+ category: 'Text',
1495
+ keywords: ['text', 'long', 'textarea', 'multiline', 'paragraph'],
1496
+ defaultFieldProperties: {
1497
+ allowComments: false,
1498
+ allowFollowUpForms: false,
1499
+ readOnly: false,
1500
+ },
1501
+ },
1502
+ {
1503
+ fieldTypeId: types.FieldTypeId.Checkbox,
1504
+ questionTypeName: 'Checkbox',
1505
+ icon: 'checkbox-checked',
1506
+ category: 'Choice',
1507
+ keywords: ['checkbox', 'check', 'multi', 'options', 'list'],
1508
+ isContainsOptionItems: true,
1509
+ defaultFieldProperties: {
1510
+ allowComments: false,
1511
+ allowFollowUpForms: false,
1512
+ items: [{ display: '', value: '' }],
1513
+ readOnly: false,
1514
+ },
1515
+ },
1516
+ {
1517
+ fieldTypeId: types.FieldTypeId.RadioButton,
1518
+ questionTypeName: 'Radio Button',
1519
+ icon: 'radio-button',
1520
+ category: 'Choice',
1521
+ keywords: ['option', 'select', 'radio', 'single'],
1522
+ isContainsOptionItems: true,
1523
+ defaultFieldProperties: {
1524
+ allowComments: false,
1525
+ allowFollowUpForms: false,
1526
+ items: [{ display: '', value: '' }],
1527
+ readOnly: false,
1528
+ },
1529
+ },
1530
+ {
1531
+ fieldTypeId: types.FieldTypeId.DropdownSingleSelect,
1532
+ questionTypeName: 'Single Select Dropdown',
1533
+ icon: 'chevron-down',
1534
+ category: 'Choice',
1535
+ keywords: ['dropdown', 'select', 'single', 'pick'],
1536
+ isContainsOptionItems: true,
1537
+ defaultFieldProperties: {
1538
+ allowComments: false,
1539
+ allowFollowUpForms: false,
1540
+ items: [{ display: '', value: '' }],
1541
+ readOnly: false,
1542
+ },
1543
+ },
1544
+ {
1545
+ fieldTypeId: types.FieldTypeId.DropdownMultipleSelect,
1546
+ questionTypeName: 'Multiselect Dropdown',
1547
+ icon: 'list',
1548
+ category: 'Choice',
1549
+ keywords: ['dropdown', 'select', 'multiple', 'pick'],
1550
+ isContainsOptionItems: true,
1551
+ defaultFieldProperties: {
1552
+ allowComments: false,
1553
+ allowFollowUpForms: false,
1554
+ items: [{ display: '', value: '' }],
1555
+ readOnly: false,
1556
+ },
1557
+ },
1558
+ {
1559
+ fieldTypeId: types.FieldTypeId.ListMultiSelect,
1560
+ questionTypeName: 'List',
1561
+ icon: 'apps-list-detail',
1562
+ category: 'Choice',
1563
+ keywords: ['list', 'select', 'multiple', 'options'],
1564
+ isContainsOptionItems: true,
1565
+ defaultFieldProperties: {
1566
+ allowComments: false,
1567
+ allowFollowUpForms: false,
1568
+ items: [{ display: '', value: '' }],
1569
+ readOnly: false,
1570
+ },
1571
+ },
1572
+ {
1573
+ fieldTypeId: types.FieldTypeId.DateSelector,
1574
+ questionTypeName: 'Date Selector',
1575
+ icon: 'calendar',
1576
+ category: 'Date & Time',
1577
+ keywords: ['date', 'calendar', 'day'],
1578
+ defaultFieldProperties: {
1579
+ allowComments: false,
1580
+ allowFollowUpForms: false,
1581
+ readOnly: false,
1582
+ },
1583
+ },
1584
+ {
1585
+ fieldTypeId: types.FieldTypeId.TimeSelector,
1586
+ questionTypeName: 'Time Selector',
1587
+ icon: 'clock',
1588
+ category: 'Date & Time',
1589
+ keywords: ['time', 'clock', 'hour'],
1590
+ defaultFieldProperties: {
1591
+ allowComments: false,
1592
+ allowFollowUpForms: false,
1593
+ readOnly: false,
1594
+ },
1595
+ },
1596
+ {
1597
+ fieldTypeId: types.FieldTypeId.DateTimeSelector,
1598
+ questionTypeName: 'DateTime Selector',
1599
+ icon: 'calendar-clock',
1600
+ category: 'Date & Time',
1601
+ keywords: ['date', 'time', 'datetime', 'calendar'],
1602
+ defaultFieldProperties: {
1603
+ allowComments: false,
1604
+ allowFollowUpForms: false,
1605
+ readOnly: false,
1606
+ },
1607
+ },
1608
+ {
1609
+ fieldTypeId: types.FieldTypeId.FileUpload,
1610
+ questionTypeName: 'File Upload',
1611
+ icon: 'cloud-upload',
1612
+ category: 'File & Signature',
1613
+ keywords: ['file', 'upload', 'attachment', 'document'],
1614
+ defaultFieldProperties: {
1615
+ allowComments: false,
1616
+ allowFollowUpForms: false,
1617
+ displayUploadTime: false,
1618
+ hideDragAndDrop: false,
1619
+ hideButton: false,
1620
+ readOnly: false,
1621
+ allowMultiple: false,
1622
+ },
1623
+ },
1624
+ {
1625
+ fieldTypeId: types.FieldTypeId.YesNo,
1626
+ questionTypeName: 'Yes/No',
1627
+ icon: 'checkmark',
1628
+ category: 'Choice',
1629
+ keywords: ['yes', 'no', 'boolean', 'toggle', 'binary'],
1630
+ defaultFieldProperties: { allowComments: false, allowFollowUpForms: false, readOnly: false },
1631
+ },
1632
+ {
1633
+ fieldTypeId: types.FieldTypeId.Signature,
1634
+ questionTypeName: 'Signature',
1635
+ icon: 'document',
1636
+ category: 'File & Signature',
1637
+ keywords: ['signature', 'sign', 'capture'],
1638
+ defaultFieldProperties: {
1639
+ allowComments: false,
1640
+ allowFollowUpForms: false,
1641
+ includeLocation: false,
1642
+ readOnly: false,
1643
+ },
1644
+ },
1645
+ {
1646
+ fieldTypeId: types.FieldTypeId.Tally,
1647
+ questionTypeName: 'Tally Display',
1648
+ icon: 'apps-list',
1649
+ category: 'Display',
1650
+ keywords: ['tally', 'count', 'display', 'read-only', 'number'],
1651
+ defaultFieldProperties: {
1652
+ allowComments: false,
1653
+ allowFollowUpForms: false,
1654
+ ignoreRequiredConfig: true,
1655
+ readOnly: false,
1656
+ tallyMode: 'all',
1657
+ includeFields: [],
1658
+ excludeFields: [],
1659
+ },
1660
+ },
1661
+ {
1662
+ fieldTypeId: types.FieldTypeId.Number,
1663
+ questionTypeName: 'Numeric',
1664
+ icon: 'number',
1665
+ category: 'Text',
1666
+ keywords: ['number', 'numeric', 'integer', 'quantity'],
1667
+ defaultFieldProperties: { allowComments: false, allowFollowUpForms: false, readOnly: false },
1668
+ },
1669
+ {
1670
+ fieldTypeId: types.FieldTypeId.Paragraph,
1671
+ questionTypeName: 'Paragraph',
1672
+ icon: 'text-paragraph',
1673
+ category: 'Text',
1674
+ keywords: ['paragraph', 'static', 'display', 'content', 'richtext'],
1675
+ defaultFieldProperties: { paragraphText: '' },
1676
+ questionTextOptional: true,
1677
+ },
1678
+ {
1679
+ fieldTypeId: types.FieldTypeId.ImageUpload,
1680
+ questionTypeName: 'Image Upload',
1681
+ icon: 'cloud-upload',
1682
+ category: 'File & Signature',
1683
+ keywords: ['image', 'photo', 'picture', 'upload'],
1684
+ defaultFieldProperties: {
1685
+ hideDragAndDrop: false,
1686
+ allowComments: false,
1687
+ allowFollowUpForms: false,
1688
+ displayUploadTime: false,
1689
+ hideButton: false,
1690
+ readOnly: false,
1691
+ allowMultiple: false,
1692
+ },
1693
+ },
1694
+ {
1695
+ fieldTypeId: types.FieldTypeId.FormMetadataDisplay,
1696
+ questionTypeName: 'Form Metadata Display',
1697
+ icon: 'person',
1698
+ category: 'Display',
1699
+ keywords: ['metadata', 'submitter', 'owner', 'submission date', 'display'],
1700
+ defaultFieldProperties: {
1701
+ displayOwnerFullName: true,
1702
+ displayOwnerEmail: true,
1703
+ displaySubmissionDate: true,
1704
+ allowComments: false,
1705
+ allowFollowUpForms: false,
1706
+ readOnly: false,
1707
+ },
1708
+ },
1709
+ {
1710
+ fieldTypeId: types.FieldTypeId.Location,
1711
+ questionTypeName: 'Location',
1712
+ icon: 'location',
1713
+ category: 'Location',
1714
+ keywords: ['address', 'location', 'map', 'geolocation', 'place'],
1715
+ defaultFieldProperties: { readOnly: false },
1716
+ },
1717
+ {
1718
+ fieldTypeId: types.FieldTypeId.Table,
1719
+ questionTypeName: 'Table',
1720
+ icon: 'table',
1721
+ category: 'Display',
1722
+ keywords: ['table', 'columns', 'grid', 'rows', 'data'],
1723
+ defaultFieldProperties: {
1724
+ allowComments: false,
1725
+ allowFollowUpForms: false,
1726
+ readOnly: false,
1727
+ columns: ensureTableColumnIds([createDefaultTableColumn()]),
1728
+ },
1729
+ },
1730
+ ];
1731
+
1732
+ const formItemTypes = questionTemplates;
1733
+ function getType(fieldTypeId) {
1734
+ return formItemTypes.find(q => q.fieldTypeId === fieldTypeId);
1735
+ }
1736
+
1737
+ /**
1738
+ * Validates the manual options of a choice question. Returns a human-readable
1739
+ * problem, or `null` when the options are well-formed. Shared by the form-save
1740
+ * validator (`validateQuestionItem`) and the builder's List Options inline
1741
+ * feedback so both surfaces agree on the rules. An empty array is treated as
1742
+ * valid here — the "needs at least one option, or a lookup source" check is
1743
+ * the caller's concern (it has the lookup context).
1744
+ */
1745
+ function validateChoiceItems(items) {
1746
+ var _a;
1747
+ if (items.some(item => { var _a, _b; return !((_a = item.display) === null || _a === void 0 ? void 0 : _a.trim()) || !((_b = item.value) === null || _b === void 0 ? void 0 : _b.trim()); })) {
1748
+ return 'Every option needs both a display label and a value.';
1749
+ }
1750
+ const seen = new Set();
1751
+ for (const item of items) {
1752
+ const value = ((_a = item.value) !== null && _a !== void 0 ? _a : '').trim();
1753
+ if (seen.has(value)) {
1754
+ return 'Each option must have a unique value.';
1755
+ }
1756
+ seen.add(value);
1757
+ }
1758
+ return null;
1759
+ }
1760
+ /**
1761
+ * Validates form metadata (e.g. form name required). Pure function.
1762
+ */
1763
+ function validateFormMetadata(form) {
1764
+ var _a;
1765
+ if (!((_a = form.name) === null || _a === void 0 ? void 0 : _a.trim())) {
1766
+ return { valid: false, firstError: 'Please enter a form name.' };
1767
+ }
1768
+ return { valid: true };
1769
+ }
1770
+ /**
1771
+ * Validates that there is at least one section and each section has at least one question.
1772
+ */
1773
+ function validateFormSections(sections) {
1774
+ var _a;
1775
+ if (sections.length < 1) {
1776
+ return { valid: false, firstError: 'Please add at least one section to the form.' };
1777
+ }
1778
+ for (let sIndex = 0; sIndex < sections.length; sIndex++) {
1779
+ const section = sections[sIndex];
1780
+ if (((_a = section === null || section === void 0 ? void 0 : section.questions) !== null && _a !== void 0 ? _a : []).length < 1) {
1781
+ const sectionTitle = (section === null || section === void 0 ? void 0 : section.title) ? `"${section.title}"` : `#${sIndex + 1}`;
1782
+ return {
1783
+ valid: false,
1784
+ firstError: `Section ${sectionTitle} must contain at least one question.`,
1785
+ };
1786
+ }
1787
+ }
1788
+ return { valid: true };
1789
+ }
1790
+ /**
1791
+ * Validates a single question against its item type definition. Returns a
1792
+ * human-readable reason on failure, or `null` if the question is valid.
1793
+ *
1794
+ * Callers that just need a yes/no — e.g. the per-question badge in
1795
+ * `section-card.tsx` — should compare against `null` themselves
1796
+ * (`validateQuestionItem(q, getType) === null`). Surfacing a specific reason
1797
+ * is the whole point of the refactor; never collapse the message at a
1798
+ * lower layer.
1799
+ */
1800
+ function validateQuestionItem(question, getItemType) {
1801
+ var _a, _b;
1802
+ const template = getItemType(question.fieldTypeId);
1803
+ const requiresQuestionText = !(template && template.questionTextOptional);
1804
+ if (requiresQuestionText && !((_a = question.questionText) === null || _a === void 0 ? void 0 : _a.trim())) {
1805
+ return 'Question text is required.';
1806
+ }
1807
+ if (template === null || template === void 0 ? void 0 : template.isContainsOptionItems) {
1808
+ const fp = ((_b = question.fieldProperties) !== null && _b !== void 0 ? _b : {});
1809
+ if (!fp.lookupId) {
1810
+ if (!Array.isArray(fp.items) || fp.items.length === 0) {
1811
+ return 'This choice question needs at least one option, or a lookup source.';
1812
+ }
1813
+ const itemError = validateChoiceItems(fp.items);
1814
+ if (itemError)
1815
+ return itemError;
1816
+ }
1817
+ }
1818
+ if (template === null || template === void 0 ? void 0 : template.validate) {
1819
+ const message = template.validate(question);
1820
+ if (message)
1821
+ return message;
1822
+ }
1823
+ return null;
1824
+ }
1825
+ /**
1826
+ * Validates all questions across all sections. The first failing question's
1827
+ * reason is bubbled up with its section + question coordinates so the save
1828
+ * snackbar can point the author at exactly what to fix.
1829
+ */
1830
+ function validateAllQuestions(sections, getItemType) {
1831
+ var _a, _b, _c;
1832
+ for (let s = 0; s < sections.length; s++) {
1833
+ const section = sections[s];
1834
+ const questions = (_a = section.questions) !== null && _a !== void 0 ? _a : [];
1835
+ for (let q = 0; q < questions.length; q++) {
1836
+ const question = questions[q];
1837
+ const reason = validateQuestionItem(question, getItemType);
1838
+ if (reason) {
1839
+ const sectionLabel = ((_b = section.title) === null || _b === void 0 ? void 0 : _b.trim()) ? `"${section.title}"` : `#${s + 1}`;
1840
+ const questionLabel = ((_c = question.questionText) === null || _c === void 0 ? void 0 : _c.trim())
1841
+ ? `"${question.questionText}"`
1842
+ : `#${q + 1}`;
1843
+ return {
1844
+ valid: false,
1845
+ firstError: `Section ${sectionLabel}, question ${questionLabel}: ${reason}`,
1846
+ };
1847
+ }
1848
+ }
1849
+ }
1850
+ return { valid: true };
1851
+ }
1852
+ /**
1853
+ * Runs full form validation (metadata, sections, all questions).
1854
+ */
1855
+ function validateForm(form, sections, getItemType) {
1856
+ const meta = validateFormMetadata(form);
1857
+ if (!meta.valid)
1858
+ return meta;
1859
+ const structure = validateFormSections(sections);
1860
+ if (!structure.valid)
1861
+ return structure;
1862
+ return validateAllQuestions(sections, getItemType);
1863
+ }
1864
+
1865
+ /**
1866
+ * Shared follow-up-forms fetch used by both the builder (per-question allowlist
1867
+ * picker) and the renderer (per-question launch dialog). Lives at the form
1868
+ * root so neither side has to depend on the other's internals.
1869
+ */
1870
+ /**
1871
+ * Maximum follow-up forms to surface in the picker. Tenants with more than
1872
+ * this are an edge case we'll handle with search/typeahead if it materializes.
1873
+ */
1874
+ const FOLLOW_UP_FORM_LIST_LIMIT = 200;
1875
+ function extractFollowUpFormItems(raw) {
1876
+ if (Array.isArray(raw))
1877
+ return raw;
1878
+ if (raw && typeof raw === 'object') {
1879
+ // The /search endpoint's body is `{ pageList, total }` — `makeApiCall`
1880
+ // already unwraps axios's `response.data`, so `pageList` sits at the top
1881
+ // level here (the legacy renderer reads `response.data.pageList` for the
1882
+ // same reason). Check that first.
1883
+ if ('pageList' in raw && Array.isArray(raw.pageList)) {
1884
+ return raw.pageList;
1885
+ }
1886
+ if ('data' in raw) {
1887
+ const data = raw.data;
1888
+ if (Array.isArray(data))
1889
+ return data;
1890
+ if (data && typeof data === 'object' && 'pageList' in data) {
1891
+ const pageList = data.pageList;
1892
+ if (Array.isArray(pageList))
1893
+ return pageList;
1894
+ }
1895
+ }
1896
+ }
1897
+ return [];
1898
+ }
1899
+ /**
1900
+ * Fetch the list of forms tagged `type: FollowUp`. Returns `{ value: formId,
1901
+ * label: formName }`. Returns `[]` on failure (non-blocking — the picker
1902
+ * just shows "no follow-up forms available").
1903
+ *
1904
+ * Backend filter shape matches the legacy renderer's side-sheet fetch
1905
+ * (`searchField: 'type', searchValue: FormType.FollowUp`). Hits the
1906
+ * latest-version view so each form id appears once at its newest version.
1907
+ */
1908
+ async function fetchFollowUpFormsList() {
1909
+ try {
1910
+ const tenantId = tenantUtils.getCurrentTenantId();
1911
+ const response = await makeApiCall.makeApiCall('POST', `${configService.ConfigService.productV1ApiUrl}/UdpFormLatestVersionView/search`, {
1912
+ eagerLoad: false,
1913
+ pageNumber: 1,
1914
+ pageSize: FOLLOW_UP_FORM_LIST_LIMIT,
1915
+ filterElements: [
1916
+ { searchField: 'type', searchOperator: '=', searchValue: types.FormType.FollowUp },
1917
+ { searchField: 'tenantId', searchOperator: '=', searchValue: tenantId },
1918
+ ],
1919
+ orderElements: [{ sortColumn: 'name', sortDirection: 'ASC' }],
1920
+ });
1921
+ return extractFollowUpFormItems(response)
1922
+ .filter((item) => typeof (item === null || item === void 0 ? void 0 : item.id) === 'string' && item.id.length > 0)
1923
+ .map(item => {
1924
+ var _a;
1925
+ return ({
1926
+ value: item.id,
1927
+ label: ((_a = item.name) === null || _a === void 0 ? void 0 : _a.trim()) || '(untitled form)',
1928
+ });
1929
+ });
1930
+ }
1931
+ catch (_a) {
1932
+ return [];
1933
+ }
1934
+ }
1935
+
1936
+ /** Type guard for the runtime-tagged `driveFileId` on a placeholder signature File. */
1937
+ function getDriveFileId(file) {
1938
+ if (!(file instanceof File))
1939
+ return null;
1940
+ const id = file.driveFileId;
1941
+ return typeof id === 'string' && id.length > 0 ? id : null;
1942
+ }
1943
+ exports.SubmissionStatus = void 0;
1944
+ (function (SubmissionStatus) {
1945
+ SubmissionStatus[SubmissionStatus["InProgress"] = 1] = "InProgress";
1946
+ SubmissionStatus[SubmissionStatus["Submitted"] = 2] = "Submitted";
1947
+ SubmissionStatus[SubmissionStatus["Created"] = 3] = "Created";
1948
+ })(exports.SubmissionStatus || (exports.SubmissionStatus = {}));
1949
+
1950
+ /** Display-only types — no user input, no codec needed. Decoded value is always null. */
1951
+ const noopCodec = {
1952
+ decode: () => null,
1953
+ encode: () => '',
1954
+ };
1955
+ const stringCodec = {
1956
+ decode: wire => (wire == null || wire === '' ? null : wire),
1957
+ encode: value => value !== null && value !== void 0 ? value : '',
1958
+ };
1959
+ const numberCodec = {
1960
+ decode: wire => {
1961
+ if (wire == null || wire === '')
1962
+ return null;
1963
+ const n = Number(wire);
1964
+ return Number.isFinite(n) ? n : null;
1965
+ },
1966
+ encode: value => (value == null ? '' : String(value)),
1967
+ };
1968
+ const yesNoCodec = {
1969
+ decode: wire => wire === 'true' || wire === 'false' || wire === 'na' ? wire : null,
1970
+ encode: value => {
1971
+ if (value == null)
1972
+ return '';
1973
+ if (typeof value === 'boolean')
1974
+ return value ? 'true' : 'false';
1975
+ return value === 'true' || value === 'false' || value === 'na' ? value : '';
1976
+ },
1977
+ };
1978
+ /**
1979
+ * Multi-select encoding observed in legacy submissions stores a single selection as the bare
1980
+ * value string (e.g. `"one"`). The encoding for *multiple* selections is unverified — likely
1981
+ * CSV. Decoder splits on `,` and trims; encoder joins with `,`. Revisit once we have a real
1982
+ * multi-selection submission to confirm.
1983
+ *
1984
+ * TODO: verify against a real multi-selection submission.
1985
+ */
1986
+ const multiSelectCodec = {
1987
+ decode: wire => {
1988
+ if (wire == null || wire === '')
1989
+ return null;
1990
+ return wire.split(',').map(s => s.trim()).filter(s => s.length > 0);
1991
+ },
1992
+ encode: value => (value == null || value.length === 0 ? '' : value.join(',')),
1993
+ };
1994
+ const locationCodec = {
1995
+ decode: wire => {
1996
+ var _a, _b, _c, _d;
1997
+ if (wire == null || wire === '')
1998
+ return null;
1999
+ let parsed;
2000
+ try {
2001
+ parsed = JSON.parse(wire);
2002
+ }
2003
+ catch (_e) {
2004
+ return null;
2005
+ }
2006
+ const freeform = (_a = parsed.address) !== null && _a !== void 0 ? _a : '';
2007
+ const hasAddress = freeform.length > 0 ||
2008
+ parsed.streetNumber != null ||
2009
+ parsed.streetName != null ||
2010
+ parsed.municipality != null ||
2011
+ parsed.countrySubdivisionName != null ||
2012
+ parsed.postalCode != null ||
2013
+ parsed.country != null;
2014
+ const address = hasAddress
2015
+ ? {
2016
+ freeformAddress: freeform,
2017
+ streetNumber: parsed.streetNumber,
2018
+ streetName: parsed.streetName,
2019
+ municipality: parsed.municipality,
2020
+ countrySubdivisionName: parsed.countrySubdivisionName,
2021
+ postalCode: parsed.postalCode,
2022
+ country: parsed.country,
2023
+ }
2024
+ : null;
2025
+ return {
2026
+ latitude: (_b = parsed.latitude) !== null && _b !== void 0 ? _b : null,
2027
+ longitude: (_c = parsed.longitude) !== null && _c !== void 0 ? _c : null,
2028
+ address,
2029
+ timestamp: (_d = parsed.timestamp) !== null && _d !== void 0 ? _d : null,
2030
+ };
2031
+ },
2032
+ encode: value => {
2033
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
2034
+ if (value == null)
2035
+ return '';
2036
+ if (value.latitude == null && value.longitude == null && !value.address)
2037
+ return '';
2038
+ const wire = {
2039
+ latitude: (_a = value.latitude) !== null && _a !== void 0 ? _a : null,
2040
+ longitude: (_b = value.longitude) !== null && _b !== void 0 ? _b : null,
2041
+ address: (_d = (_c = value.address) === null || _c === void 0 ? void 0 : _c.freeformAddress) !== null && _d !== void 0 ? _d : null,
2042
+ streetNumber: (_e = value.address) === null || _e === void 0 ? void 0 : _e.streetNumber,
2043
+ streetName: (_f = value.address) === null || _f === void 0 ? void 0 : _f.streetName,
2044
+ municipality: (_g = value.address) === null || _g === void 0 ? void 0 : _g.municipality,
2045
+ countrySubdivisionName: (_h = value.address) === null || _h === void 0 ? void 0 : _h.countrySubdivisionName,
2046
+ postalCode: (_j = value.address) === null || _j === void 0 ? void 0 : _j.postalCode,
2047
+ country: (_k = value.address) === null || _k === void 0 ? void 0 : _k.country,
2048
+ timestamp: (_l = value.timestamp) !== null && _l !== void 0 ? _l : null,
2049
+ };
2050
+ return JSON.stringify(wire);
2051
+ },
2052
+ };
2053
+ /**
2054
+ * File / image upload wire format (matches legacy renderer):
2055
+ * - Comma-joined list of tokens
2056
+ * - Each token is `<urlencoded-filename>|udp:<driveFileId>` for an already-
2057
+ * stored file, or a bare `<urlencoded-filename>` for a pending upload (the
2058
+ * server rewrites bare names to `|udp:<id>` form during the multipart
2059
+ * POST/PUT and persists the rewritten value).
2060
+ * - Legacy also produces `|b64:<data>` for inline-base64 fallbacks; pass-1
2061
+ * decodes those as stored items without bytes (the user has to re-upload
2062
+ * if they want to keep the file). Out of scope to round-trip b64 inline.
2063
+ *
2064
+ * The actual `File` bytes for a pending upload are stored on the
2065
+ * `UdpFileItem.file` field and extracted from the form-engine values map by
2066
+ * `extractFilesFromValues()` (called by the wire adapter) — they never travel
2067
+ * through the codec's string-only encode/decode.
2068
+ */
2069
+ const fileListCodec = {
2070
+ decode: wire => {
2071
+ if (wire == null || wire === '')
2072
+ return null;
2073
+ const tokens = wire.split(',').map(t => t.trim()).filter(t => t.length > 0);
2074
+ if (tokens.length === 0)
2075
+ return null;
2076
+ const items = [];
2077
+ for (const token of tokens) {
2078
+ const item = parseFileToken(token);
2079
+ if (item)
2080
+ items.push(item);
2081
+ }
2082
+ return items.length > 0 ? items : null;
2083
+ },
2084
+ encode: value => {
2085
+ if (value == null || value.length === 0)
2086
+ return '';
2087
+ return value
2088
+ .map(item => {
2089
+ if (item.kind === 'pending')
2090
+ return encodeURIComponent(item.file.name);
2091
+ return `${encodeURIComponent(item.name)}|udp:${item.driveFileId}`;
2092
+ })
2093
+ .join(',');
2094
+ },
2095
+ };
2096
+ function parseFileToken(token) {
2097
+ const pipeIdx = token.indexOf('|');
2098
+ if (pipeIdx < 0) {
2099
+ // Bare filename — shouldn't appear on load (server rewrites), but tolerate.
2100
+ let name = token;
2101
+ try {
2102
+ name = decodeURIComponent(token);
2103
+ }
2104
+ catch (_a) {
2105
+ /* fall through with raw token */
2106
+ }
2107
+ return { kind: 'stored', name, driveFileId: '' };
2108
+ }
2109
+ const encodedName = token.slice(0, pipeIdx);
2110
+ const dataRef = token.slice(pipeIdx + 1);
2111
+ let name = encodedName;
2112
+ try {
2113
+ name = decodeURIComponent(encodedName);
2114
+ }
2115
+ catch (_b) {
2116
+ name = encodedName;
2117
+ }
2118
+ if (dataRef.startsWith('udp:')) {
2119
+ return { kind: 'stored', name, driveFileId: dataRef.slice(4) };
2120
+ }
2121
+ if (dataRef.startsWith('b64:')) {
2122
+ // Pass-1: surface as a stored placeholder with no driveFileId. Round-trip
2123
+ // is best-effort; a re-save will drop the inline bytes.
2124
+ return { kind: 'stored', name, driveFileId: '' };
2125
+ }
2126
+ return null;
2127
+ }
2128
+ /**
2129
+ * Signature wire format: single file token (`<filename>|udp:<guid>` or bare
2130
+ * `<filename>`). `fullName` + lat/lng/timestamp live in `metadata.signature`,
2131
+ * not in the value string — they're merged onto the decoded value by
2132
+ * `hydrateValueWithMetadata()`.
2133
+ *
2134
+ * Stored signatures decode to a placeholder `File` tagged with `driveFileId`
2135
+ * (legacy convention). This keeps round-trip data inside the standard
2136
+ * `SignatureValue` shape so it survives the component's `valueChanged` emits,
2137
+ * which reconstruct the value via object spread of known keys only — a sidecar
2138
+ * field on `SignatureValue` would be dropped the first time the user edited
2139
+ * `fullName` without re-drawing.
2140
+ */
2141
+ const signatureCodec = {
2142
+ decode: wire => {
2143
+ if (wire == null || wire === '')
2144
+ return null;
2145
+ const placeholder = buildSignaturePlaceholderFile(wire);
2146
+ return {
2147
+ file: placeholder,
2148
+ fullName: null,
2149
+ metadata: null,
2150
+ };
2151
+ },
2152
+ encode: value => {
2153
+ if (value == null)
2154
+ return '';
2155
+ if (!(value.file instanceof File))
2156
+ return '';
2157
+ const driveFileId = getDriveFileId(value.file);
2158
+ if (driveFileId) {
2159
+ // Untouched stored signature — round-trip the existing wire token.
2160
+ return `${encodeURIComponent(value.file.name)}|udp:${driveFileId}`;
2161
+ }
2162
+ // Freshly-drawn (or replaced) signature — bare filename; server rewrites
2163
+ // to `|udp:<id>` after upload via `FormFiles`.
2164
+ return encodeURIComponent(value.file.name);
2165
+ },
2166
+ };
2167
+ function buildSignaturePlaceholderFile(wire) {
2168
+ const pipeIdx = wire.indexOf('|');
2169
+ let encodedName = wire;
2170
+ let driveFileId = '';
2171
+ if (pipeIdx >= 0) {
2172
+ encodedName = wire.slice(0, pipeIdx);
2173
+ const dataRef = wire.slice(pipeIdx + 1);
2174
+ if (dataRef.startsWith('udp:'))
2175
+ driveFileId = dataRef.slice(4);
2176
+ }
2177
+ let name = encodedName;
2178
+ try {
2179
+ name = decodeURIComponent(encodedName);
2180
+ }
2181
+ catch (_a) {
2182
+ name = encodedName;
2183
+ }
2184
+ const blob = new Blob([''], { type: 'image/png' });
2185
+ const file = new File([blob], name, { type: 'image/png' });
2186
+ if (driveFileId)
2187
+ file.driveFileId = driveFileId;
2188
+ return file;
2189
+ }
2190
+ const tableCodec = {
2191
+ decode: wire => {
2192
+ var _a;
2193
+ if (wire == null || wire === '')
2194
+ return { rows: [] };
2195
+ let parsed;
2196
+ try {
2197
+ parsed = JSON.parse(wire);
2198
+ }
2199
+ catch (_b) {
2200
+ return { rows: [] };
2201
+ }
2202
+ const raw = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.rows) !== null && _a !== void 0 ? _a : parsed === null || parsed === void 0 ? void 0 : parsed.Rows;
2203
+ if (!Array.isArray(raw))
2204
+ return { rows: [] };
2205
+ const rows = raw.filter((r) => r != null && typeof r === 'object' && !Array.isArray(r));
2206
+ return { rows };
2207
+ },
2208
+ encode: value => {
2209
+ if (!value || !Array.isArray(value.rows) || value.rows.length === 0)
2210
+ return '';
2211
+ return JSON.stringify({ rows: value.rows });
2212
+ },
2213
+ };
2214
+ /**
2215
+ * Pass-1 codec map. Only types we render in pass 1 + the display-only types that round-trip
2216
+ * empty values.
2217
+ */
2218
+ const codecsByFieldType = {
2219
+ // Hidden — not rendered, but legacy submissions carry real values here
2220
+ // (URL-seeded context, API-written data). String passthrough keeps the
2221
+ // stored value flowing decode → form values → encode so a re-save never
2222
+ // wipes it, and `?udpf_seed_…` params can seed hidden fields (legacy parity).
2223
+ [types.FieldTypeId.Hidden]: stringCodec,
2224
+ // Display-only types — round-trip null/empty. (Paragraph's wire value is
2225
+ // written from `fieldProperties.paragraphText` by the serializer so legacy
2226
+ // renderers, which display the stored VALUE, keep showing the prose.)
2227
+ [types.FieldTypeId.Paragraph]: noopCodec,
2228
+ [types.FieldTypeId.Tally]: noopCodec,
2229
+ [types.FieldTypeId.FormMetadataDisplay]: noopCodec,
2230
+ // Text input
2231
+ [types.FieldTypeId.SingleLineText]: stringCodec,
2232
+ [types.FieldTypeId.MultiLineText]: stringCodec,
2233
+ // Single-value choice
2234
+ [types.FieldTypeId.RadioButton]: stringCodec,
2235
+ [types.FieldTypeId.DropdownSingleSelect]: stringCodec,
2236
+ // Tri-state yes/no ('true' | 'false' | 'na') — legacy radio semantics.
2237
+ [types.FieldTypeId.YesNo]: yesNoCodec,
2238
+ // Multi-value choice — CSV of selected option values (legacy
2239
+ // `selectable-list` joined selections with ','). Checkbox is the legacy
2240
+ // multi-select checkbox list, NOT a single boolean.
2241
+ [types.FieldTypeId.Checkbox]: multiSelectCodec,
2242
+ [types.FieldTypeId.DropdownMultipleSelect]: multiSelectCodec,
2243
+ [types.FieldTypeId.ListMultiSelect]: multiSelectCodec,
2244
+ // Number
2245
+ [types.FieldTypeId.Number]: numberCodec,
2246
+ // Date / time — wire format from submissions:
2247
+ // DateSelector: "YYYY-MM-DD"
2248
+ // TimeSelector: "HH:mm" (no seconds, despite field-properties min/max using HH:mm:ss)
2249
+ // DateTimeSelector: "YYYY-MM-DDTHH:mm" (T separator, no seconds)
2250
+ // Pass-through for now; field renderers parse to Date/etc. as needed.
2251
+ [types.FieldTypeId.DateSelector]: stringCodec,
2252
+ [types.FieldTypeId.TimeSelector]: stringCodec,
2253
+ [types.FieldTypeId.DateTimeSelector]: stringCodec,
2254
+ // Location — JSON-stringified object (see locationCodec docs above).
2255
+ [types.FieldTypeId.Location]: locationCodec,
2256
+ // File / image upload — comma-joined `<filename>|udp:<guid>` tokens.
2257
+ // Pending File bytes are extracted from the form-engine values by the wire
2258
+ // adapter; the codec only handles the string-side of the wire shape.
2259
+ [types.FieldTypeId.FileUpload]: fileListCodec,
2260
+ [types.FieldTypeId.ImageUpload]: fileListCodec,
2261
+ // Signature — single file token + `metadata.signature` sidecar.
2262
+ [types.FieldTypeId.Signature]: signatureCodec,
2263
+ // Table — JSON-stringified `{ rows: TableRow[] }`, keyed by column id.
2264
+ [types.FieldTypeId.Table]: tableCodec,
2265
+ };
2266
+ /** Decode a wire value using the codec for `fieldTypeId`. Falls back to null for unmapped types. */
2267
+ function decodeValue(fieldTypeId, wire) {
2268
+ const codec = codecsByFieldType[fieldTypeId];
2269
+ if (!codec)
2270
+ return null;
2271
+ return codec.decode(wire);
2272
+ }
2273
+ /** Encode a decoded value using the codec for `fieldTypeId`. Falls back to '' for unmapped types. */
2274
+ function encodeValue(fieldTypeId, value) {
2275
+ const codec = codecsByFieldType[fieldTypeId];
2276
+ if (!codec)
2277
+ return '';
2278
+ return codec.encode(value);
2279
+ }
2280
+ /** Whether a field type is rendered in pass 1. Useful for the field-dispatch fallback. */
2281
+ function isPassOneFieldType(fieldTypeId) {
2282
+ return codecsByFieldType[fieldTypeId] !== undefined;
2283
+ }
2284
+ /**
2285
+ * Merge metadata-sidecar fields onto the decoded value for types where the
2286
+ * "value" string alone isn't the full user-visible state. Today only
2287
+ * `Signature` needs this — `metadata.signature` carries `fullName` and the
2288
+ * lat/lng/timestamp captured at stroke-end. Returns the value untouched for
2289
+ * every other type.
2290
+ */
2291
+ function hydrateValueWithMetadata(fieldTypeId, decoded, metadata) {
2292
+ var _a, _b, _c, _d, _e, _f, _g, _h;
2293
+ if (fieldTypeId !== types.FieldTypeId.Signature)
2294
+ return decoded;
2295
+ const sig = (_a = metadata === null || metadata === void 0 ? void 0 : metadata.signature) !== null && _a !== void 0 ? _a : null;
2296
+ const baseValue = (decoded !== null && decoded !== void 0 ? decoded : null);
2297
+ if (!sig && !baseValue)
2298
+ return null;
2299
+ const next = {
2300
+ file: (_b = baseValue === null || baseValue === void 0 ? void 0 : baseValue.file) !== null && _b !== void 0 ? _b : null,
2301
+ fullName: (_d = (_c = sig === null || sig === void 0 ? void 0 : sig.fullName) !== null && _c !== void 0 ? _c : baseValue === null || baseValue === void 0 ? void 0 : baseValue.fullName) !== null && _d !== void 0 ? _d : null,
2302
+ metadata: sig != null
2303
+ ? {
2304
+ timestamp: (_e = sig.timestamp) !== null && _e !== void 0 ? _e : null,
2305
+ latitude: (_f = sig.latitude) !== null && _f !== void 0 ? _f : null,
2306
+ longitude: (_g = sig.longitude) !== null && _g !== void 0 ? _g : null,
2307
+ }
2308
+ : (_h = baseValue === null || baseValue === void 0 ? void 0 : baseValue.metadata) !== null && _h !== void 0 ? _h : null,
2309
+ };
2310
+ return next;
2311
+ }
2312
+ /**
2313
+ * Walk a per-question-instance iterator and the values map to collect every
2314
+ * `File` that needs to be uploaded with this submission. The wire adapter
2315
+ * appends these under the `FormFiles` multipart field. The backend then
2316
+ * matches them up with the bare-filename tokens in the JSON `Data` payload
2317
+ * and rewrites those tokens to `<filename>|udp:<guid>` after persisting to
2318
+ * UDP Drive.
2319
+ *
2320
+ * Iterating `(fieldTypeId, value)` pairs (instead of walking a `LoadedForm`
2321
+ * directly) keeps this codec-layer helper free of the runtime expansion
2322
+ * concern — the caller picks: walk the schema for a non-repeatable form,
2323
+ * or walk `DynamicSection[]` so file uploads on copies 2+ of a repeatable
2324
+ * section get collected too.
2325
+ */
2326
+ function extractFilesFromValueEntries(entries) {
2327
+ const files = [];
2328
+ for (const { fieldTypeId, value } of entries) {
2329
+ switch (fieldTypeId) {
2330
+ case types.FieldTypeId.FileUpload:
2331
+ case types.FieldTypeId.ImageUpload: {
2332
+ if (!Array.isArray(value))
2333
+ break;
2334
+ for (const item of value) {
2335
+ if ((item === null || item === void 0 ? void 0 : item.kind) === 'pending' && item.file instanceof File) {
2336
+ files.push(item.file);
2337
+ }
2338
+ }
2339
+ break;
2340
+ }
2341
+ case types.FieldTypeId.Signature: {
2342
+ const sv = value;
2343
+ // Stored signatures carry a placeholder File tagged with driveFileId
2344
+ // — don't re-upload it. Only push when this is a freshly-drawn (or
2345
+ // replaced) signature.
2346
+ if ((sv === null || sv === void 0 ? void 0 : sv.file) instanceof File && getDriveFileId(sv.file) == null) {
2347
+ files.push(sv.file);
2348
+ }
2349
+ break;
2350
+ }
2351
+ }
2352
+ }
2353
+ return files;
2354
+ }
2355
+ /**
2356
+ * Schema-aware convenience wrapper used by the submit flow. Walks the
2357
+ * schema, reads each question's value out of the flat values map by the
2358
+ * bare `question.id`, and delegates to `extractFilesFromValueEntries`.
2359
+ *
2360
+ * For non-repeatable forms this is the right walk. For repeatable forms
2361
+ * the caller should iterate `DynamicSection[]` itself and pass the
2362
+ * `(fieldTypeId, value)` pairs into `extractFilesFromValueEntries` — see
2363
+ * `submit.ts`.
2364
+ */
2365
+ function extractFilesFromValues(loadedForm, values) {
2366
+ const entries = [];
2367
+ for (const section of loadedForm.sections) {
2368
+ for (const question of section.questions) {
2369
+ entries.push({ fieldTypeId: question.fieldTypeId, value: values[question.id] });
2370
+ }
2371
+ }
2372
+ return extractFilesFromValueEntries(entries);
2373
+ }
2374
+ /**
2375
+ * Produce the metadata blob to write into the envelope for a given question.
2376
+ * For `Signature`, derives `metadata.signature` from the decoded value
2377
+ * (fullName + lat/lng/timestamp); for every other type, passes through the
2378
+ * existing metadata untouched. Returns `undefined` when nothing should be
2379
+ * written.
2380
+ */
2381
+ function buildResponseMetadata(fieldTypeId, decodedValue, existingMetadata) {
2382
+ var _a, _b, _c, _d, _e;
2383
+ if (fieldTypeId !== types.FieldTypeId.Signature)
2384
+ return existingMetadata;
2385
+ const sv = decodedValue;
2386
+ const hasFile = (sv === null || sv === void 0 ? void 0 : sv.file) instanceof File;
2387
+ const fullName = (_a = sv === null || sv === void 0 ? void 0 : sv.fullName) !== null && _a !== void 0 ? _a : null;
2388
+ const meta = (_b = sv === null || sv === void 0 ? void 0 : sv.metadata) !== null && _b !== void 0 ? _b : null;
2389
+ const hasAny = hasFile || (fullName != null && fullName !== '') || meta != null;
2390
+ if (!hasAny)
2391
+ return existingMetadata;
2392
+ const base = existingMetadata != null && typeof existingMetadata === 'object'
2393
+ ? existingMetadata
2394
+ : {};
2395
+ return Object.assign(Object.assign({}, base), { signature: {
2396
+ latitude: (_c = meta === null || meta === void 0 ? void 0 : meta.latitude) !== null && _c !== void 0 ? _c : null,
2397
+ longitude: (_d = meta === null || meta === void 0 ? void 0 : meta.longitude) !== null && _d !== void 0 ? _d : null,
2398
+ timestamp: (_e = meta === null || meta === void 0 ? void 0 : meta.timestamp) !== null && _e !== void 0 ? _e : null,
2399
+ fullName,
2400
+ } });
2401
+ }
2402
+
2403
+ exports.buildResponseMetadata = buildResponseMetadata;
2404
+ exports.createDefaultTableColumn = createDefaultTableColumn;
2405
+ exports.decodeValue = decodeValue;
2406
+ exports.encodeValue = encodeValue;
2407
+ exports.ensureTableColumnIds = ensureTableColumnIds;
2408
+ exports.extractFilesFromValueEntries = extractFilesFromValueEntries;
2409
+ exports.extractFilesFromValues = extractFilesFromValues;
2410
+ exports.fetchFollowUpFormsList = fetchFollowUpFormsList;
2411
+ exports.formItemTypes = formItemTypes;
2412
+ exports.getAuthorRulesFor = getAuthorRulesFor;
2413
+ exports.getDriveFileId = getDriveFileId;
2414
+ exports.getIntrinsicRulesFor = getIntrinsicRulesFor;
2415
+ exports.getRule = getRule;
2416
+ exports.getType = getType;
2417
+ exports.hydrateValueWithMetadata = hydrateValueWithMetadata;
2418
+ exports.isNumericTableColumnType = isNumericTableColumnType;
2419
+ exports.isPassOneFieldType = isPassOneFieldType;
2420
+ exports.isValueEmpty = isValueEmpty;
2421
+ exports.parseForm = parseForm;
2422
+ exports.validateChoiceItems = validateChoiceItems;
2423
+ exports.validateForm = validateForm;
2424
+ exports.validateQuestionItem = validateQuestionItem;