@mj-biz-apps/forms-ng 0.0.0 → 0.2.0

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 (446) hide show
  1. package/dist/lib/builder/builder-models.d.ts +27 -0
  2. package/dist/lib/builder/builder-models.d.ts.map +1 -0
  3. package/dist/lib/builder/builder-models.js +15 -0
  4. package/dist/lib/builder/builder-models.js.map +1 -0
  5. package/dist/lib/builder/builder-state.service.d.ts +48 -0
  6. package/dist/lib/builder/builder-state.service.d.ts.map +1 -0
  7. package/dist/lib/builder/builder-state.service.js +231 -0
  8. package/dist/lib/builder/builder-state.service.js.map +1 -0
  9. package/dist/lib/builder/builder-styles.d.ts +12 -0
  10. package/dist/lib/builder/builder-styles.d.ts.map +1 -0
  11. package/dist/lib/builder/builder-styles.js +74 -0
  12. package/dist/lib/builder/builder-styles.js.map +1 -0
  13. package/dist/lib/builder/conditional-rule-editor.component.d.ts +53 -0
  14. package/dist/lib/builder/conditional-rule-editor.component.d.ts.map +1 -0
  15. package/dist/lib/builder/conditional-rule-editor.component.js +282 -0
  16. package/dist/lib/builder/conditional-rule-editor.component.js.map +1 -0
  17. package/dist/lib/builder/design-panel.component.d.ts +71 -0
  18. package/dist/lib/builder/design-panel.component.d.ts.map +1 -0
  19. package/dist/lib/builder/design-panel.component.js +530 -0
  20. package/dist/lib/builder/design-panel.component.js.map +1 -0
  21. package/dist/lib/builder/design-panel.styles.d.ts +10 -0
  22. package/dist/lib/builder/design-panel.styles.d.ts.map +1 -0
  23. package/dist/lib/builder/design-panel.styles.js +78 -0
  24. package/dist/lib/builder/design-panel.styles.js.map +1 -0
  25. package/dist/lib/builder/design-state.service.d.ts +51 -0
  26. package/dist/lib/builder/design-state.service.d.ts.map +1 -0
  27. package/dist/lib/builder/design-state.service.js +108 -0
  28. package/dist/lib/builder/design-state.service.js.map +1 -0
  29. package/dist/lib/builder/distribution-links.d.ts +29 -0
  30. package/dist/lib/builder/distribution-links.d.ts.map +1 -0
  31. package/dist/lib/builder/distribution-links.js +53 -0
  32. package/dist/lib/builder/distribution-links.js.map +1 -0
  33. package/dist/lib/builder/distribution-manager.component.d.ts +53 -0
  34. package/dist/lib/builder/distribution-manager.component.d.ts.map +1 -0
  35. package/dist/lib/builder/distribution-manager.component.js +330 -0
  36. package/dist/lib/builder/distribution-manager.component.js.map +1 -0
  37. package/dist/lib/builder/distribution.service.d.ts +62 -0
  38. package/dist/lib/builder/distribution.service.d.ts.map +1 -0
  39. package/dist/lib/builder/distribution.service.js +140 -0
  40. package/dist/lib/builder/distribution.service.js.map +1 -0
  41. package/dist/lib/builder/entity-names.d.ts +20 -0
  42. package/dist/lib/builder/entity-names.d.ts.map +1 -0
  43. package/dist/lib/builder/entity-names.js +20 -0
  44. package/dist/lib/builder/entity-names.js.map +1 -0
  45. package/dist/lib/builder/form-builder.component.d.ts +92 -0
  46. package/dist/lib/builder/form-builder.component.d.ts.map +1 -0
  47. package/dist/lib/builder/form-builder.component.js +627 -0
  48. package/dist/lib/builder/form-builder.component.js.map +1 -0
  49. package/dist/lib/builder/form-builder.styles.d.ts +3 -0
  50. package/dist/lib/builder/form-builder.styles.d.ts.map +1 -0
  51. package/dist/lib/builder/form-builder.styles.js +94 -0
  52. package/dist/lib/builder/form-builder.styles.js.map +1 -0
  53. package/dist/lib/builder/form-preview-modal.component.d.ts +25 -0
  54. package/dist/lib/builder/form-preview-modal.component.d.ts.map +1 -0
  55. package/dist/lib/builder/form-preview-modal.component.js +90 -0
  56. package/dist/lib/builder/form-preview-modal.component.js.map +1 -0
  57. package/dist/lib/builder/index.d.ts +31 -0
  58. package/dist/lib/builder/index.d.ts.map +1 -0
  59. package/dist/lib/builder/index.js +32 -0
  60. package/dist/lib/builder/index.js.map +1 -0
  61. package/dist/lib/builder/json-fields.d.ts +14 -0
  62. package/dist/lib/builder/json-fields.d.ts.map +1 -0
  63. package/dist/lib/builder/json-fields.js +100 -0
  64. package/dist/lib/builder/json-fields.js.map +1 -0
  65. package/dist/lib/builder/publish.service.d.ts +34 -0
  66. package/dist/lib/builder/publish.service.d.ts.map +1 -0
  67. package/dist/lib/builder/publish.service.js +110 -0
  68. package/dist/lib/builder/publish.service.js.map +1 -0
  69. package/dist/lib/builder/qr-code.d.ts +26 -0
  70. package/dist/lib/builder/qr-code.d.ts.map +1 -0
  71. package/dist/lib/builder/qr-code.js +361 -0
  72. package/dist/lib/builder/qr-code.js.map +1 -0
  73. package/dist/lib/builder/question-editor.component.d.ts +41 -0
  74. package/dist/lib/builder/question-editor.component.d.ts.map +1 -0
  75. package/dist/lib/builder/question-editor.component.js +228 -0
  76. package/dist/lib/builder/question-editor.component.js.map +1 -0
  77. package/dist/lib/builder/question-type-catalog.d.ts +29 -0
  78. package/dist/lib/builder/question-type-catalog.d.ts.map +1 -0
  79. package/dist/lib/builder/question-type-catalog.js +43 -0
  80. package/dist/lib/builder/question-type-catalog.js.map +1 -0
  81. package/dist/lib/builder/reorder.d.ts +10 -0
  82. package/dist/lib/builder/reorder.d.ts.map +1 -0
  83. package/dist/lib/builder/reorder.js +18 -0
  84. package/dist/lib/builder/reorder.js.map +1 -0
  85. package/dist/lib/builder/snapshot-builder.d.ts +16 -0
  86. package/dist/lib/builder/snapshot-builder.d.ts.map +1 -0
  87. package/dist/lib/builder/snapshot-builder.js +93 -0
  88. package/dist/lib/builder/snapshot-builder.js.map +1 -0
  89. package/dist/lib/builder/style-tokens.d.ts +54 -0
  90. package/dist/lib/builder/style-tokens.d.ts.map +1 -0
  91. package/dist/lib/builder/style-tokens.js +71 -0
  92. package/dist/lib/builder/style-tokens.js.map +1 -0
  93. package/dist/lib/builder/validation-rule-editor.component.d.ts +27 -0
  94. package/dist/lib/builder/validation-rule-editor.component.d.ts.map +1 -0
  95. package/dist/lib/builder/validation-rule-editor.component.js +179 -0
  96. package/dist/lib/builder/validation-rule-editor.component.js.map +1 -0
  97. package/dist/lib/dashboard/components/distribution-chart.component.d.ts +14 -0
  98. package/dist/lib/dashboard/components/distribution-chart.component.d.ts.map +1 -0
  99. package/dist/lib/dashboard/components/distribution-chart.component.js +85 -0
  100. package/dist/lib/dashboard/components/distribution-chart.component.js.map +1 -0
  101. package/dist/lib/dashboard/components/funnel-chart.component.d.ts +14 -0
  102. package/dist/lib/dashboard/components/funnel-chart.component.d.ts.map +1 -0
  103. package/dist/lib/dashboard/components/funnel-chart.component.js +101 -0
  104. package/dist/lib/dashboard/components/funnel-chart.component.js.map +1 -0
  105. package/dist/lib/dashboard/components/question-breakdown.component.d.ts +16 -0
  106. package/dist/lib/dashboard/components/question-breakdown.component.d.ts.map +1 -0
  107. package/dist/lib/dashboard/components/question-breakdown.component.js +213 -0
  108. package/dist/lib/dashboard/components/question-breakdown.component.js.map +1 -0
  109. package/dist/lib/dashboard/components/response-detail.component.d.ts +11 -0
  110. package/dist/lib/dashboard/components/response-detail.component.d.ts.map +1 -0
  111. package/dist/lib/dashboard/components/response-detail.component.js +113 -0
  112. package/dist/lib/dashboard/components/response-detail.component.js.map +1 -0
  113. package/dist/lib/dashboard/components/response-list.component.d.ts +27 -0
  114. package/dist/lib/dashboard/components/response-list.component.d.ts.map +1 -0
  115. package/dist/lib/dashboard/components/response-list.component.js +196 -0
  116. package/dist/lib/dashboard/components/response-list.component.js.map +1 -0
  117. package/dist/lib/dashboard/components/summary-stats.component.d.ts +12 -0
  118. package/dist/lib/dashboard/components/summary-stats.component.d.ts.map +1 -0
  119. package/dist/lib/dashboard/components/summary-stats.component.js +112 -0
  120. package/dist/lib/dashboard/components/summary-stats.component.js.map +1 -0
  121. package/dist/lib/dashboard/forms-reporting-dashboard.component.d.ts +64 -0
  122. package/dist/lib/dashboard/forms-reporting-dashboard.component.d.ts.map +1 -0
  123. package/dist/lib/dashboard/forms-reporting-dashboard.component.js +397 -0
  124. package/dist/lib/dashboard/forms-reporting-dashboard.component.js.map +1 -0
  125. package/dist/lib/dashboard/index.d.ts +19 -0
  126. package/dist/lib/dashboard/index.d.ts.map +1 -0
  127. package/dist/lib/dashboard/index.js +19 -0
  128. package/dist/lib/dashboard/index.js.map +1 -0
  129. package/dist/lib/dashboard/models/reporting.model.d.ts +125 -0
  130. package/dist/lib/dashboard/models/reporting.model.d.ts.map +1 -0
  131. package/dist/lib/dashboard/models/reporting.model.js +2 -0
  132. package/dist/lib/dashboard/models/reporting.model.js.map +1 -0
  133. package/dist/lib/dashboard/services/forms-reporting-export.service.d.ts +21 -0
  134. package/dist/lib/dashboard/services/forms-reporting-export.service.d.ts.map +1 -0
  135. package/dist/lib/dashboard/services/forms-reporting-export.service.js +83 -0
  136. package/dist/lib/dashboard/services/forms-reporting-export.service.js.map +1 -0
  137. package/dist/lib/dashboard/services/forms-reporting-mock.d.ts +18 -0
  138. package/dist/lib/dashboard/services/forms-reporting-mock.d.ts.map +1 -0
  139. package/dist/lib/dashboard/services/forms-reporting-mock.js +147 -0
  140. package/dist/lib/dashboard/services/forms-reporting-mock.js.map +1 -0
  141. package/dist/lib/dashboard/services/forms-reporting.service.d.ts +45 -0
  142. package/dist/lib/dashboard/services/forms-reporting.service.d.ts.map +1 -0
  143. package/dist/lib/dashboard/services/forms-reporting.service.js +230 -0
  144. package/dist/lib/dashboard/services/forms-reporting.service.js.map +1 -0
  145. package/dist/lib/dashboard/services/reporting-aggregations.d.ts +40 -0
  146. package/dist/lib/dashboard/services/reporting-aggregations.d.ts.map +1 -0
  147. package/dist/lib/dashboard/services/reporting-aggregations.js +379 -0
  148. package/dist/lib/dashboard/services/reporting-aggregations.js.map +1 -0
  149. package/dist/lib/generated/Entities/mjBizAppsCommonAddress/mjbizappscommonaddress.form.component.d.ts +10 -0
  150. package/dist/lib/generated/Entities/mjBizAppsCommonAddress/mjbizappscommonaddress.form.component.d.ts.map +1 -0
  151. package/dist/lib/generated/Entities/mjBizAppsCommonAddress/mjbizappscommonaddress.form.component.js +104 -0
  152. package/dist/lib/generated/Entities/mjBizAppsCommonAddress/mjbizappscommonaddress.form.component.js.map +1 -0
  153. package/dist/lib/generated/Entities/mjBizAppsCommonAddressLink/mjbizappscommonaddresslink.form.component.d.ts +10 -0
  154. package/dist/lib/generated/Entities/mjBizAppsCommonAddressLink/mjbizappscommonaddresslink.form.component.d.ts.map +1 -0
  155. package/dist/lib/generated/Entities/mjBizAppsCommonAddressLink/mjbizappscommonaddresslink.form.component.js +83 -0
  156. package/dist/lib/generated/Entities/mjBizAppsCommonAddressLink/mjbizappscommonaddresslink.form.component.js.map +1 -0
  157. package/dist/lib/generated/Entities/mjBizAppsCommonAddressType/mjbizappscommonaddresstype.form.component.d.ts +10 -0
  158. package/dist/lib/generated/Entities/mjBizAppsCommonAddressType/mjbizappscommonaddresstype.form.component.d.ts.map +1 -0
  159. package/dist/lib/generated/Entities/mjBizAppsCommonAddressType/mjbizappscommonaddresstype.form.component.js +96 -0
  160. package/dist/lib/generated/Entities/mjBizAppsCommonAddressType/mjbizappscommonaddresstype.form.component.js.map +1 -0
  161. package/dist/lib/generated/Entities/mjBizAppsCommonContactMethod/mjbizappscommoncontactmethod.form.component.d.ts +10 -0
  162. package/dist/lib/generated/Entities/mjBizAppsCommonContactMethod/mjbizappscommoncontactmethod.form.component.d.ts.map +1 -0
  163. package/dist/lib/generated/Entities/mjBizAppsCommonContactMethod/mjbizappscommoncontactmethod.form.component.js +83 -0
  164. package/dist/lib/generated/Entities/mjBizAppsCommonContactMethod/mjbizappscommoncontactmethod.form.component.js.map +1 -0
  165. package/dist/lib/generated/Entities/mjBizAppsCommonContactType/mjbizappscommoncontacttype.form.component.d.ts +10 -0
  166. package/dist/lib/generated/Entities/mjBizAppsCommonContactType/mjbizappscommoncontacttype.form.component.d.ts.map +1 -0
  167. package/dist/lib/generated/Entities/mjBizAppsCommonContactType/mjbizappscommoncontacttype.form.component.js +96 -0
  168. package/dist/lib/generated/Entities/mjBizAppsCommonContactType/mjbizappscommoncontacttype.form.component.js.map +1 -0
  169. package/dist/lib/generated/Entities/mjBizAppsCommonOrganization/mjbizappscommonorganization.form.component.d.ts +10 -0
  170. package/dist/lib/generated/Entities/mjBizAppsCommonOrganization/mjbizappscommonorganization.form.component.d.ts.map +1 -0
  171. package/dist/lib/generated/Entities/mjBizAppsCommonOrganization/mjbizappscommonorganization.form.component.js +172 -0
  172. package/dist/lib/generated/Entities/mjBizAppsCommonOrganization/mjbizappscommonorganization.form.component.js.map +1 -0
  173. package/dist/lib/generated/Entities/mjBizAppsCommonOrganizationType/mjbizappscommonorganizationtype.form.component.d.ts +10 -0
  174. package/dist/lib/generated/Entities/mjBizAppsCommonOrganizationType/mjbizappscommonorganizationtype.form.component.d.ts.map +1 -0
  175. package/dist/lib/generated/Entities/mjBizAppsCommonOrganizationType/mjbizappscommonorganizationtype.form.component.js +90 -0
  176. package/dist/lib/generated/Entities/mjBizAppsCommonOrganizationType/mjbizappscommonorganizationtype.form.component.js.map +1 -0
  177. package/dist/lib/generated/Entities/mjBizAppsCommonPerson/mjbizappscommonperson.form.component.d.ts +10 -0
  178. package/dist/lib/generated/Entities/mjBizAppsCommonPerson/mjbizappscommonperson.form.component.d.ts.map +1 -0
  179. package/dist/lib/generated/Entities/mjBizAppsCommonPerson/mjbizappscommonperson.form.component.js +274 -0
  180. package/dist/lib/generated/Entities/mjBizAppsCommonPerson/mjbizappscommonperson.form.component.js.map +1 -0
  181. package/dist/lib/generated/Entities/mjBizAppsCommonRelationship/mjbizappscommonrelationship.form.component.d.ts +10 -0
  182. package/dist/lib/generated/Entities/mjBizAppsCommonRelationship/mjbizappscommonrelationship.form.component.d.ts.map +1 -0
  183. package/dist/lib/generated/Entities/mjBizAppsCommonRelationship/mjbizappscommonrelationship.form.component.js +91 -0
  184. package/dist/lib/generated/Entities/mjBizAppsCommonRelationship/mjbizappscommonrelationship.form.component.js.map +1 -0
  185. package/dist/lib/generated/Entities/mjBizAppsCommonRelationshipType/mjbizappscommonrelationshiptype.form.component.d.ts +10 -0
  186. package/dist/lib/generated/Entities/mjBizAppsCommonRelationshipType/mjbizappscommonrelationshiptype.form.component.d.ts.map +1 -0
  187. package/dist/lib/generated/Entities/mjBizAppsCommonRelationshipType/mjbizappscommonrelationshiptype.form.component.js +100 -0
  188. package/dist/lib/generated/Entities/mjBizAppsCommonRelationshipType/mjbizappscommonrelationshiptype.form.component.js.map +1 -0
  189. package/dist/lib/generated/Entities/mjBizAppsFormsForm/mjbizappsformsform.form.component.d.ts +10 -0
  190. package/dist/lib/generated/Entities/mjBizAppsFormsForm/mjbizappsformsform.form.component.d.ts.map +1 -0
  191. package/dist/lib/generated/Entities/mjBizAppsFormsForm/mjbizappsformsform.form.component.js +174 -0
  192. package/dist/lib/generated/Entities/mjBizAppsFormsForm/mjbizappsformsform.form.component.js.map +1 -0
  193. package/dist/lib/generated/Entities/mjBizAppsFormsFormCategory/mjbizappsformsformcategory.form.component.d.ts +10 -0
  194. package/dist/lib/generated/Entities/mjBizAppsFormsFormCategory/mjbizappsformsformcategory.form.component.d.ts.map +1 -0
  195. package/dist/lib/generated/Entities/mjBizAppsFormsFormCategory/mjbizappsformsformcategory.form.component.js +118 -0
  196. package/dist/lib/generated/Entities/mjBizAppsFormsFormCategory/mjbizappsformsformcategory.form.component.js.map +1 -0
  197. package/dist/lib/generated/Entities/mjBizAppsFormsFormDistribution/mjbizappsformsformdistribution.form.component.d.ts +10 -0
  198. package/dist/lib/generated/Entities/mjBizAppsFormsFormDistribution/mjbizappsformsformdistribution.form.component.d.ts.map +1 -0
  199. package/dist/lib/generated/Entities/mjBizAppsFormsFormDistribution/mjbizappsformsformdistribution.form.component.js +93 -0
  200. package/dist/lib/generated/Entities/mjBizAppsFormsFormDistribution/mjbizappsformsformdistribution.form.component.js.map +1 -0
  201. package/dist/lib/generated/Entities/mjBizAppsFormsFormPage/mjbizappsformsformpage.form.component.d.ts +10 -0
  202. package/dist/lib/generated/Entities/mjBizAppsFormsFormPage/mjbizappsformsformpage.form.component.d.ts.map +1 -0
  203. package/dist/lib/generated/Entities/mjBizAppsFormsFormPage/mjbizappsformsformpage.form.component.js +96 -0
  204. package/dist/lib/generated/Entities/mjBizAppsFormsFormPage/mjbizappsformsformpage.form.component.js.map +1 -0
  205. package/dist/lib/generated/Entities/mjBizAppsFormsFormQuestion/mjbizappsformsformquestion.form.component.d.ts +10 -0
  206. package/dist/lib/generated/Entities/mjBizAppsFormsFormQuestion/mjbizappsformsformquestion.form.component.d.ts.map +1 -0
  207. package/dist/lib/generated/Entities/mjBizAppsFormsFormQuestion/mjbizappsformsformquestion.form.component.js +132 -0
  208. package/dist/lib/generated/Entities/mjBizAppsFormsFormQuestion/mjbizappsformsformquestion.form.component.js.map +1 -0
  209. package/dist/lib/generated/Entities/mjBizAppsFormsFormQuestionOption/mjbizappsformsformquestionoption.form.component.d.ts +10 -0
  210. package/dist/lib/generated/Entities/mjBizAppsFormsFormQuestionOption/mjbizappsformsformquestionoption.form.component.d.ts.map +1 -0
  211. package/dist/lib/generated/Entities/mjBizAppsFormsFormQuestionOption/mjbizappsformsformquestionoption.form.component.js +77 -0
  212. package/dist/lib/generated/Entities/mjBizAppsFormsFormQuestionOption/mjbizappsformsformquestionoption.form.component.js.map +1 -0
  213. package/dist/lib/generated/Entities/mjBizAppsFormsFormResponse/mjbizappsformsformresponse.form.component.d.ts +10 -0
  214. package/dist/lib/generated/Entities/mjBizAppsFormsFormResponse/mjbizappsformsformresponse.form.component.d.ts.map +1 -0
  215. package/dist/lib/generated/Entities/mjBizAppsFormsFormResponse/mjbizappsformsformresponse.form.component.js +108 -0
  216. package/dist/lib/generated/Entities/mjBizAppsFormsFormResponse/mjbizappsformsformresponse.form.component.js.map +1 -0
  217. package/dist/lib/generated/Entities/mjBizAppsFormsFormResponseAnswer/mjbizappsformsformresponseanswer.form.component.d.ts +10 -0
  218. package/dist/lib/generated/Entities/mjBizAppsFormsFormResponseAnswer/mjbizappsformsformresponseanswer.form.component.d.ts.map +1 -0
  219. package/dist/lib/generated/Entities/mjBizAppsFormsFormResponseAnswer/mjbizappsformsformresponseanswer.form.component.js +99 -0
  220. package/dist/lib/generated/Entities/mjBizAppsFormsFormResponseAnswer/mjbizappsformsformresponseanswer.form.component.js.map +1 -0
  221. package/dist/lib/generated/Entities/mjBizAppsFormsFormStyle/mjbizappsformsformstyle.form.component.d.ts +10 -0
  222. package/dist/lib/generated/Entities/mjBizAppsFormsFormStyle/mjbizappsformsformstyle.form.component.d.ts.map +1 -0
  223. package/dist/lib/generated/Entities/mjBizAppsFormsFormStyle/mjbizappsformsformstyle.form.component.js +100 -0
  224. package/dist/lib/generated/Entities/mjBizAppsFormsFormStyle/mjbizappsformsformstyle.form.component.js.map +1 -0
  225. package/dist/lib/generated/Entities/mjBizAppsFormsFormVersion/mjbizappsformsformversion.form.component.d.ts +10 -0
  226. package/dist/lib/generated/Entities/mjBizAppsFormsFormVersion/mjbizappsformsformversion.form.component.d.ts.map +1 -0
  227. package/dist/lib/generated/Entities/mjBizAppsFormsFormVersion/mjbizappsformsformversion.form.component.js +96 -0
  228. package/dist/lib/generated/Entities/mjBizAppsFormsFormVersion/mjbizappsformsformversion.form.component.js.map +1 -0
  229. package/dist/lib/generated/Entities/mjBizAppsTasksTask/mjbizappstaskstask.form.component.d.ts +10 -0
  230. package/dist/lib/generated/Entities/mjBizAppsTasksTask/mjbizappstaskstask.form.component.d.ts.map +1 -0
  231. package/dist/lib/generated/Entities/mjBizAppsTasksTask/mjbizappstaskstask.form.component.js +274 -0
  232. package/dist/lib/generated/Entities/mjBizAppsTasksTask/mjbizappstaskstask.form.component.js.map +1 -0
  233. package/dist/lib/generated/Entities/mjBizAppsTasksTaskActivity/mjbizappstaskstaskactivity.form.component.d.ts +10 -0
  234. package/dist/lib/generated/Entities/mjBizAppsTasksTaskActivity/mjbizappstaskstaskactivity.form.component.d.ts.map +1 -0
  235. package/dist/lib/generated/Entities/mjBizAppsTasksTaskActivity/mjbizappstaskstaskactivity.form.component.js +67 -0
  236. package/dist/lib/generated/Entities/mjBizAppsTasksTaskActivity/mjbizappstaskstaskactivity.form.component.js.map +1 -0
  237. package/dist/lib/generated/Entities/mjBizAppsTasksTaskAssignment/mjbizappstaskstaskassignment.form.component.d.ts +10 -0
  238. package/dist/lib/generated/Entities/mjBizAppsTasksTaskAssignment/mjbizappstaskstaskassignment.form.component.d.ts.map +1 -0
  239. package/dist/lib/generated/Entities/mjBizAppsTasksTaskAssignment/mjbizappstaskstaskassignment.form.component.js +90 -0
  240. package/dist/lib/generated/Entities/mjBizAppsTasksTaskAssignment/mjbizappstaskstaskassignment.form.component.js.map +1 -0
  241. package/dist/lib/generated/Entities/mjBizAppsTasksTaskCategory/mjbizappstaskstaskcategory.form.component.d.ts +10 -0
  242. package/dist/lib/generated/Entities/mjBizAppsTasksTaskCategory/mjbizappstaskstaskcategory.form.component.d.ts.map +1 -0
  243. package/dist/lib/generated/Entities/mjBizAppsTasksTaskCategory/mjbizappstaskstaskcategory.form.component.js +124 -0
  244. package/dist/lib/generated/Entities/mjBizAppsTasksTaskCategory/mjbizappstaskstaskcategory.form.component.js.map +1 -0
  245. package/dist/lib/generated/Entities/mjBizAppsTasksTaskComment/mjbizappstaskstaskcomment.form.component.d.ts +10 -0
  246. package/dist/lib/generated/Entities/mjBizAppsTasksTaskComment/mjbizappstaskstaskcomment.form.component.d.ts.map +1 -0
  247. package/dist/lib/generated/Entities/mjBizAppsTasksTaskComment/mjbizappstaskstaskcomment.form.component.js +86 -0
  248. package/dist/lib/generated/Entities/mjBizAppsTasksTaskComment/mjbizappstaskstaskcomment.form.component.js.map +1 -0
  249. package/dist/lib/generated/Entities/mjBizAppsTasksTaskDecision/mjbizappstaskstaskdecision.form.component.d.ts +10 -0
  250. package/dist/lib/generated/Entities/mjBizAppsTasksTaskDecision/mjbizappstaskstaskdecision.form.component.d.ts.map +1 -0
  251. package/dist/lib/generated/Entities/mjBizAppsTasksTaskDecision/mjbizappstaskstaskdecision.form.component.js +67 -0
  252. package/dist/lib/generated/Entities/mjBizAppsTasksTaskDecision/mjbizappstaskstaskdecision.form.component.js.map +1 -0
  253. package/dist/lib/generated/Entities/mjBizAppsTasksTaskDecisionOutcome/mjbizappstaskstaskdecisionoutcome.form.component.d.ts +10 -0
  254. package/dist/lib/generated/Entities/mjBizAppsTasksTaskDecisionOutcome/mjbizappstaskstaskdecisionoutcome.form.component.d.ts.map +1 -0
  255. package/dist/lib/generated/Entities/mjBizAppsTasksTaskDecisionOutcome/mjbizappstaskstaskdecisionoutcome.form.component.js +86 -0
  256. package/dist/lib/generated/Entities/mjBizAppsTasksTaskDecisionOutcome/mjbizappstaskstaskdecisionoutcome.form.component.js.map +1 -0
  257. package/dist/lib/generated/Entities/mjBizAppsTasksTaskDependency/mjbizappstaskstaskdependency.form.component.d.ts +10 -0
  258. package/dist/lib/generated/Entities/mjBizAppsTasksTaskDependency/mjbizappstaskstaskdependency.form.component.d.ts.map +1 -0
  259. package/dist/lib/generated/Entities/mjBizAppsTasksTaskDependency/mjbizappstaskstaskdependency.form.component.js +61 -0
  260. package/dist/lib/generated/Entities/mjBizAppsTasksTaskDependency/mjbizappstaskstaskdependency.form.component.js.map +1 -0
  261. package/dist/lib/generated/Entities/mjBizAppsTasksTaskLink/mjbizappstaskstasklink.form.component.d.ts +10 -0
  262. package/dist/lib/generated/Entities/mjBizAppsTasksTaskLink/mjbizappstaskstasklink.form.component.d.ts.map +1 -0
  263. package/dist/lib/generated/Entities/mjBizAppsTasksTaskLink/mjbizappstaskstasklink.form.component.js +63 -0
  264. package/dist/lib/generated/Entities/mjBizAppsTasksTaskLink/mjbizappstaskstasklink.form.component.js.map +1 -0
  265. package/dist/lib/generated/Entities/mjBizAppsTasksTaskNotificationConfig/mjbizappstaskstasknotificationconfig.form.component.d.ts +10 -0
  266. package/dist/lib/generated/Entities/mjBizAppsTasksTaskNotificationConfig/mjbizappstaskstasknotificationconfig.form.component.d.ts.map +1 -0
  267. package/dist/lib/generated/Entities/mjBizAppsTasksTaskNotificationConfig/mjbizappstaskstasknotificationconfig.form.component.js +69 -0
  268. package/dist/lib/generated/Entities/mjBizAppsTasksTaskNotificationConfig/mjbizappstaskstasknotificationconfig.form.component.js.map +1 -0
  269. package/dist/lib/generated/Entities/mjBizAppsTasksTaskNotificationLog/mjbizappstaskstasknotificationlog.form.component.d.ts +10 -0
  270. package/dist/lib/generated/Entities/mjBizAppsTasksTaskNotificationLog/mjbizappstaskstasknotificationlog.form.component.d.ts.map +1 -0
  271. package/dist/lib/generated/Entities/mjBizAppsTasksTaskNotificationLog/mjbizappstaskstasknotificationlog.form.component.js +63 -0
  272. package/dist/lib/generated/Entities/mjBizAppsTasksTaskNotificationLog/mjbizappstaskstasknotificationlog.form.component.js.map +1 -0
  273. package/dist/lib/generated/Entities/mjBizAppsTasksTaskRole/mjbizappstaskstaskrole.form.component.d.ts +10 -0
  274. package/dist/lib/generated/Entities/mjBizAppsTasksTaskRole/mjbizappstaskstaskrole.form.component.d.ts.map +1 -0
  275. package/dist/lib/generated/Entities/mjBizAppsTasksTaskRole/mjbizappstaskstaskrole.form.component.js +98 -0
  276. package/dist/lib/generated/Entities/mjBizAppsTasksTaskRole/mjbizappstaskstaskrole.form.component.js.map +1 -0
  277. package/dist/lib/generated/Entities/mjBizAppsTasksTaskTag/mjbizappstaskstasktag.form.component.d.ts +10 -0
  278. package/dist/lib/generated/Entities/mjBizAppsTasksTaskTag/mjbizappstaskstasktag.form.component.d.ts.map +1 -0
  279. package/dist/lib/generated/Entities/mjBizAppsTasksTaskTag/mjbizappstaskstasktag.form.component.js +80 -0
  280. package/dist/lib/generated/Entities/mjBizAppsTasksTaskTag/mjbizappstaskstasktag.form.component.js.map +1 -0
  281. package/dist/lib/generated/Entities/mjBizAppsTasksTaskTagLink/mjbizappstaskstasktaglink.form.component.d.ts +10 -0
  282. package/dist/lib/generated/Entities/mjBizAppsTasksTaskTagLink/mjbizappstaskstasktaglink.form.component.d.ts.map +1 -0
  283. package/dist/lib/generated/Entities/mjBizAppsTasksTaskTagLink/mjbizappstaskstasktaglink.form.component.js +59 -0
  284. package/dist/lib/generated/Entities/mjBizAppsTasksTaskTagLink/mjbizappstaskstasktaglink.form.component.js.map +1 -0
  285. package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplate/mjbizappstaskstasktemplate.form.component.d.ts +10 -0
  286. package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplate/mjbizappstaskstasktemplate.form.component.d.ts.map +1 -0
  287. package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplate/mjbizappstaskstasktemplate.form.component.js +84 -0
  288. package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplate/mjbizappstaskstasktemplate.form.component.js.map +1 -0
  289. package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplateItem/mjbizappstaskstasktemplateitem.form.component.d.ts +10 -0
  290. package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplateItem/mjbizappstaskstasktemplateitem.form.component.d.ts.map +1 -0
  291. package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplateItem/mjbizappstaskstasktemplateitem.form.component.js +146 -0
  292. package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplateItem/mjbizappstaskstasktemplateitem.form.component.js.map +1 -0
  293. package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplateItemDependency/mjbizappstaskstasktemplateitemdependency.form.component.d.ts +10 -0
  294. package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplateItemDependency/mjbizappstaskstasktemplateitemdependency.form.component.d.ts.map +1 -0
  295. package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplateItemDependency/mjbizappstaskstasktemplateitemdependency.form.component.js +61 -0
  296. package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplateItemDependency/mjbizappstaskstasktemplateitemdependency.form.component.js.map +1 -0
  297. package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplateItemRole/mjbizappstaskstasktemplateitemrole.form.component.d.ts +10 -0
  298. package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplateItemRole/mjbizappstaskstasktemplateitemrole.form.component.d.ts.map +1 -0
  299. package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplateItemRole/mjbizappstaskstasktemplateitemrole.form.component.js +59 -0
  300. package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplateItemRole/mjbizappstaskstasktemplateitemrole.form.component.js.map +1 -0
  301. package/dist/lib/generated/Entities/mjBizAppsTasksTaskType/mjbizappstaskstasktype.form.component.d.ts +10 -0
  302. package/dist/lib/generated/Entities/mjBizAppsTasksTaskType/mjbizappstaskstasktype.form.component.d.ts.map +1 -0
  303. package/dist/lib/generated/Entities/mjBizAppsTasksTaskType/mjbizappstaskstasktype.form.component.js +132 -0
  304. package/dist/lib/generated/Entities/mjBizAppsTasksTaskType/mjbizappstaskstasktype.form.component.js.map +1 -0
  305. package/dist/lib/generated/class-registrations-manifest.d.ts +6 -0
  306. package/dist/lib/generated/class-registrations-manifest.d.ts.map +1 -0
  307. package/dist/lib/generated/class-registrations-manifest.js +6 -0
  308. package/dist/lib/generated/class-registrations-manifest.js.map +1 -0
  309. package/dist/lib/generated/generated-forms.module.d.ts +61 -0
  310. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -0
  311. package/dist/lib/generated/generated-forms.module.js +207 -0
  312. package/dist/lib/generated/generated-forms.module.js.map +1 -0
  313. package/dist/lib/home/forms-home-dashboard.component.d.ts +61 -0
  314. package/dist/lib/home/forms-home-dashboard.component.d.ts.map +1 -0
  315. package/dist/lib/home/forms-home-dashboard.component.js +379 -0
  316. package/dist/lib/home/forms-home-dashboard.component.js.map +1 -0
  317. package/dist/lib/home/forms-home.service.d.ts +24 -0
  318. package/dist/lib/home/forms-home.service.d.ts.map +1 -0
  319. package/dist/lib/home/forms-home.service.js +92 -0
  320. package/dist/lib/home/forms-home.service.js.map +1 -0
  321. package/dist/lib/home/home-aggregations.d.ts +23 -0
  322. package/dist/lib/home/home-aggregations.d.ts.map +1 -0
  323. package/dist/lib/home/home-aggregations.js +64 -0
  324. package/dist/lib/home/home-aggregations.js.map +1 -0
  325. package/dist/lib/home/home-models.d.ts +60 -0
  326. package/dist/lib/home/home-models.d.ts.map +1 -0
  327. package/dist/lib/home/home-models.js +34 -0
  328. package/dist/lib/home/home-models.js.map +1 -0
  329. package/dist/lib/home/index.d.ts +13 -0
  330. package/dist/lib/home/index.d.ts.map +1 -0
  331. package/dist/lib/home/index.js +13 -0
  332. package/dist/lib/home/index.js.map +1 -0
  333. package/dist/lib/widget/api/form-upload.service.d.ts +41 -0
  334. package/dist/lib/widget/api/form-upload.service.d.ts.map +1 -0
  335. package/dist/lib/widget/api/form-upload.service.js +124 -0
  336. package/dist/lib/widget/api/form-upload.service.js.map +1 -0
  337. package/dist/lib/widget/api/forms-api.config.d.ts +55 -0
  338. package/dist/lib/widget/api/forms-api.config.d.ts.map +1 -0
  339. package/dist/lib/widget/api/forms-api.config.js +40 -0
  340. package/dist/lib/widget/api/forms-api.config.js.map +1 -0
  341. package/dist/lib/widget/api/forms-api.graphql.service.d.ts +20 -0
  342. package/dist/lib/widget/api/forms-api.graphql.service.d.ts.map +1 -0
  343. package/dist/lib/widget/api/forms-api.graphql.service.js +96 -0
  344. package/dist/lib/widget/api/forms-api.graphql.service.js.map +1 -0
  345. package/dist/lib/widget/api/forms-api.interface.d.ts +45 -0
  346. package/dist/lib/widget/api/forms-api.interface.d.ts.map +1 -0
  347. package/dist/lib/widget/api/forms-api.interface.js +8 -0
  348. package/dist/lib/widget/api/forms-api.interface.js.map +1 -0
  349. package/dist/lib/widget/api/forms-api.mock.service.d.ts +12 -0
  350. package/dist/lib/widget/api/forms-api.mock.service.d.ts.map +1 -0
  351. package/dist/lib/widget/api/forms-api.mock.service.js +41 -0
  352. package/dist/lib/widget/api/forms-api.mock.service.js.map +1 -0
  353. package/dist/lib/widget/api/mock-form.data.d.ts +8 -0
  354. package/dist/lib/widget/api/mock-form.data.d.ts.map +1 -0
  355. package/dist/lib/widget/api/mock-form.data.js +192 -0
  356. package/dist/lib/widget/api/mock-form.data.js.map +1 -0
  357. package/dist/lib/widget/api/submission-mapping.d.ts +60 -0
  358. package/dist/lib/widget/api/submission-mapping.d.ts.map +1 -0
  359. package/dist/lib/widget/api/submission-mapping.js +47 -0
  360. package/dist/lib/widget/api/submission-mapping.js.map +1 -0
  361. package/dist/lib/widget/components/form-one-question.component.d.ts +43 -0
  362. package/dist/lib/widget/components/form-one-question.component.d.ts.map +1 -0
  363. package/dist/lib/widget/components/form-one-question.component.js +194 -0
  364. package/dist/lib/widget/components/form-one-question.component.js.map +1 -0
  365. package/dist/lib/widget/components/form-progress.component.d.ts +9 -0
  366. package/dist/lib/widget/components/form-progress.component.d.ts.map +1 -0
  367. package/dist/lib/widget/components/form-progress.component.js +47 -0
  368. package/dist/lib/widget/components/form-progress.component.js.map +1 -0
  369. package/dist/lib/widget/components/form-scroll.component.d.ts +23 -0
  370. package/dist/lib/widget/components/form-scroll.component.d.ts.map +1 -0
  371. package/dist/lib/widget/components/form-scroll.component.js +132 -0
  372. package/dist/lib/widget/components/form-scroll.component.js.map +1 -0
  373. package/dist/lib/widget/components/questions/form-question.component.d.ts +68 -0
  374. package/dist/lib/widget/components/questions/form-question.component.d.ts.map +1 -0
  375. package/dist/lib/widget/components/questions/form-question.component.js +541 -0
  376. package/dist/lib/widget/components/questions/form-question.component.js.map +1 -0
  377. package/dist/lib/widget/components/questions/input-mode.d.ts +13 -0
  378. package/dist/lib/widget/components/questions/input-mode.d.ts.map +1 -0
  379. package/dist/lib/widget/components/questions/input-mode.js +42 -0
  380. package/dist/lib/widget/components/questions/input-mode.js.map +1 -0
  381. package/dist/lib/widget/components/turnstile-challenge.component.d.ts +52 -0
  382. package/dist/lib/widget/components/turnstile-challenge.component.d.ts.map +1 -0
  383. package/dist/lib/widget/components/turnstile-challenge.component.js +123 -0
  384. package/dist/lib/widget/components/turnstile-challenge.component.js.map +1 -0
  385. package/dist/lib/widget/core/answer-value.d.ts +17 -0
  386. package/dist/lib/widget/core/answer-value.d.ts.map +1 -0
  387. package/dist/lib/widget/core/answer-value.js +41 -0
  388. package/dist/lib/widget/core/answer-value.js.map +1 -0
  389. package/dist/lib/widget/core/autosave-controller.d.ts +65 -0
  390. package/dist/lib/widget/core/autosave-controller.d.ts.map +1 -0
  391. package/dist/lib/widget/core/autosave-controller.js +134 -0
  392. package/dist/lib/widget/core/autosave-controller.js.map +1 -0
  393. package/dist/lib/widget/core/client-id.d.ts +17 -0
  394. package/dist/lib/widget/core/client-id.d.ts.map +1 -0
  395. package/dist/lib/widget/core/client-id.js +52 -0
  396. package/dist/lib/widget/core/client-id.js.map +1 -0
  397. package/dist/lib/widget/core/form-runtime.d.ts +34 -0
  398. package/dist/lib/widget/core/form-runtime.d.ts.map +1 -0
  399. package/dist/lib/widget/core/form-runtime.js +123 -0
  400. package/dist/lib/widget/core/form-runtime.js.map +1 -0
  401. package/dist/lib/widget/core/one-question-stepper.d.ts +20 -0
  402. package/dist/lib/widget/core/one-question-stepper.d.ts.map +1 -0
  403. package/dist/lib/widget/core/one-question-stepper.js +23 -0
  404. package/dist/lib/widget/core/one-question-stepper.js.map +1 -0
  405. package/dist/lib/widget/core/submit-phase.d.ts +31 -0
  406. package/dist/lib/widget/core/submit-phase.d.ts.map +1 -0
  407. package/dist/lib/widget/core/submit-phase.js +21 -0
  408. package/dist/lib/widget/core/submit-phase.js.map +1 -0
  409. package/dist/lib/widget/core/theming.d.ts +17 -0
  410. package/dist/lib/widget/core/theming.d.ts.map +1 -0
  411. package/dist/lib/widget/core/theming.js +36 -0
  412. package/dist/lib/widget/core/theming.js.map +1 -0
  413. package/dist/lib/widget/core/turnstile-gate.d.ts +42 -0
  414. package/dist/lib/widget/core/turnstile-gate.d.ts.map +1 -0
  415. package/dist/lib/widget/core/turnstile-gate.js +61 -0
  416. package/dist/lib/widget/core/turnstile-gate.js.map +1 -0
  417. package/dist/lib/widget/core/turnstile-loader.d.ts +34 -0
  418. package/dist/lib/widget/core/turnstile-loader.d.ts.map +1 -0
  419. package/dist/lib/widget/core/turnstile-loader.js +68 -0
  420. package/dist/lib/widget/core/turnstile-loader.js.map +1 -0
  421. package/dist/lib/widget/core/validation.d.ts +19 -0
  422. package/dist/lib/widget/core/validation.d.ts.map +1 -0
  423. package/dist/lib/widget/core/validation.js +105 -0
  424. package/dist/lib/widget/core/validation.js.map +1 -0
  425. package/dist/lib/widget/index.d.ts +27 -0
  426. package/dist/lib/widget/index.d.ts.map +1 -0
  427. package/dist/lib/widget/index.js +30 -0
  428. package/dist/lib/widget/index.js.map +1 -0
  429. package/dist/lib/widget/mj-form.component.d.ts +114 -0
  430. package/dist/lib/widget/mj-form.component.d.ts.map +1 -0
  431. package/dist/lib/widget/mj-form.component.js +428 -0
  432. package/dist/lib/widget/mj-form.component.js.map +1 -0
  433. package/dist/lib/widget/register-element.d.ts +8 -0
  434. package/dist/lib/widget/register-element.d.ts.map +1 -0
  435. package/dist/lib/widget/register-element.js +98 -0
  436. package/dist/lib/widget/register-element.js.map +1 -0
  437. package/dist/public-api.d.ts +23 -0
  438. package/dist/public-api.d.ts.map +1 -0
  439. package/dist/public-api.js +33 -0
  440. package/dist/public-api.js.map +1 -0
  441. package/dist/widget-entry.d.ts +2 -0
  442. package/dist/widget-entry.d.ts.map +1 -0
  443. package/dist/widget-entry.js +20 -0
  444. package/dist/widget-entry.js.map +1 -0
  445. package/package.json +53 -5
  446. package/README.md +0 -3
@@ -0,0 +1,112 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /** Top-line stat cards: total responses, completion rate, avg time, last submit. */
4
+ export class FormsSummaryStatsComponent {
5
+ stats;
6
+ pct(fraction) {
7
+ return `${Math.round(fraction * 100)}%`;
8
+ }
9
+ get durationLabel() {
10
+ const secs = this.stats.averageCompletionSeconds;
11
+ if (secs === null)
12
+ return '—';
13
+ if (secs < 60)
14
+ return `${Math.round(secs)}s`;
15
+ const mins = secs / 60;
16
+ if (mins < 60)
17
+ return `${mins.toFixed(1)}m`;
18
+ return `${(mins / 60).toFixed(1)}h`;
19
+ }
20
+ get lastLabel() {
21
+ const d = this.stats.lastSubmittedAt;
22
+ if (!d)
23
+ return '—';
24
+ return d.toLocaleDateString();
25
+ }
26
+ static ɵfac = function FormsSummaryStatsComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || FormsSummaryStatsComponent)(); };
27
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FormsSummaryStatsComponent, selectors: [["mj-forms-summary-stats"]], inputs: { stats: "stats" }, decls: 31, vars: 6, consts: [[1, "stat-grid"], [1, "stat-card"], [1, "stat-icon"], [1, "fa-solid", "fa-inbox"], [1, "stat-value"], [1, "stat-label"], [1, "stat-sub"], [1, "fa-solid", "fa-circle-check"], [1, "fa-solid", "fa-clock"], [1, "fa-solid", "fa-calendar-day"]], template: function FormsSummaryStatsComponent_Template(rf, ctx) { if (rf & 1) {
28
+ i0.ɵɵdomElementStart(0, "div", 0)(1, "div", 1)(2, "span", 2);
29
+ i0.ɵɵdomElement(3, "i", 3);
30
+ i0.ɵɵdomElementEnd();
31
+ i0.ɵɵdomElementStart(4, "span", 4);
32
+ i0.ɵɵtext(5);
33
+ i0.ɵɵdomElementEnd();
34
+ i0.ɵɵdomElementStart(6, "span", 5);
35
+ i0.ɵɵtext(7, "Responses");
36
+ i0.ɵɵdomElementEnd();
37
+ i0.ɵɵdomElementStart(8, "span", 6);
38
+ i0.ɵɵtext(9);
39
+ i0.ɵɵdomElementEnd()();
40
+ i0.ɵɵdomElementStart(10, "div", 1)(11, "span", 2);
41
+ i0.ɵɵdomElement(12, "i", 7);
42
+ i0.ɵɵdomElementEnd();
43
+ i0.ɵɵdomElementStart(13, "span", 4);
44
+ i0.ɵɵtext(14);
45
+ i0.ɵɵdomElementEnd();
46
+ i0.ɵɵdomElementStart(15, "span", 5);
47
+ i0.ɵɵtext(16, "Completion rate");
48
+ i0.ɵɵdomElementEnd()();
49
+ i0.ɵɵdomElementStart(17, "div", 1)(18, "span", 2);
50
+ i0.ɵɵdomElement(19, "i", 8);
51
+ i0.ɵɵdomElementEnd();
52
+ i0.ɵɵdomElementStart(20, "span", 4);
53
+ i0.ɵɵtext(21);
54
+ i0.ɵɵdomElementEnd();
55
+ i0.ɵɵdomElementStart(22, "span", 5);
56
+ i0.ɵɵtext(23, "Avg. time to complete");
57
+ i0.ɵɵdomElementEnd()();
58
+ i0.ɵɵdomElementStart(24, "div", 1)(25, "span", 2);
59
+ i0.ɵɵdomElement(26, "i", 9);
60
+ i0.ɵɵdomElementEnd();
61
+ i0.ɵɵdomElementStart(27, "span", 4);
62
+ i0.ɵɵtext(28);
63
+ i0.ɵɵdomElementEnd();
64
+ i0.ɵɵdomElementStart(29, "span", 5);
65
+ i0.ɵɵtext(30, "Last response");
66
+ i0.ɵɵdomElementEnd()()();
67
+ } if (rf & 2) {
68
+ i0.ɵɵadvance(5);
69
+ i0.ɵɵtextInterpolate(ctx.stats.totalResponses);
70
+ i0.ɵɵadvance(4);
71
+ i0.ɵɵtextInterpolate2("", ctx.stats.completeResponses, " complete \u00B7 ", ctx.stats.partialResponses, " partial");
72
+ i0.ɵɵadvance(5);
73
+ i0.ɵɵtextInterpolate(ctx.pct(ctx.stats.completionRate));
74
+ i0.ɵɵadvance(7);
75
+ i0.ɵɵtextInterpolate(ctx.durationLabel);
76
+ i0.ɵɵadvance(7);
77
+ i0.ɵɵtextInterpolate(ctx.lastLabel);
78
+ } }, styles: ["[_nghost-%COMP%] {\n display: block;\n }\n .stat-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: var(--mj-space-3);\n }\n .stat-card[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-1);\n padding: var(--mj-space-4);\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: var(--mj-radius-lg);\n box-shadow: var(--mj-shadow-sm);\n }\n .stat-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 16px;\n }\n .stat-value[_ngcontent-%COMP%] {\n font-size: 26px;\n font-weight: 700;\n color: var(--mj-text-primary);\n font-variant-numeric: tabular-nums;\n }\n .stat-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n }\n .stat-sub[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n }"], changeDetection: 0 });
79
+ }
80
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FormsSummaryStatsComponent, [{
81
+ type: Component,
82
+ args: [{ selector: 'mj-forms-summary-stats', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `
83
+ <div class="stat-grid">
84
+ <div class="stat-card">
85
+ <span class="stat-icon"><i class="fa-solid fa-inbox"></i></span>
86
+ <span class="stat-value">{{ stats.totalResponses }}</span>
87
+ <span class="stat-label">Responses</span>
88
+ <span class="stat-sub">{{ stats.completeResponses }} complete · {{ stats.partialResponses }} partial</span>
89
+ </div>
90
+ <div class="stat-card">
91
+ <span class="stat-icon"><i class="fa-solid fa-circle-check"></i></span>
92
+ <span class="stat-value">{{ pct(stats.completionRate) }}</span>
93
+ <span class="stat-label">Completion rate</span>
94
+ </div>
95
+ <div class="stat-card">
96
+ <span class="stat-icon"><i class="fa-solid fa-clock"></i></span>
97
+ <span class="stat-value">{{ durationLabel }}</span>
98
+ <span class="stat-label">Avg. time to complete</span>
99
+ </div>
100
+ <div class="stat-card">
101
+ <span class="stat-icon"><i class="fa-solid fa-calendar-day"></i></span>
102
+ <span class="stat-value">{{ lastLabel }}</span>
103
+ <span class="stat-label">Last response</span>
104
+ </div>
105
+ </div>
106
+ `, styles: ["\n :host {\n display: block;\n }\n .stat-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: var(--mj-space-3);\n }\n .stat-card {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-1);\n padding: var(--mj-space-4);\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: var(--mj-radius-lg);\n box-shadow: var(--mj-shadow-sm);\n }\n .stat-icon {\n color: var(--mj-brand-primary);\n font-size: 16px;\n }\n .stat-value {\n font-size: 26px;\n font-weight: 700;\n color: var(--mj-text-primary);\n font-variant-numeric: tabular-nums;\n }\n .stat-label {\n font-size: 12px;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n }\n .stat-sub {\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n "] }]
107
+ }], null, { stats: [{
108
+ type: Input,
109
+ args: [{ required: true }]
110
+ }] }); })();
111
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FormsSummaryStatsComponent, { className: "FormsSummaryStatsComponent", filePath: "lib/dashboard/components/summary-stats.component.ts", lineNumber: 77 }); })();
112
+ //# sourceMappingURL=summary-stats.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary-stats.component.js","sourceRoot":"","sources":["../../../../src/lib/dashboard/components/summary-stats.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;;AAG1E,oFAAoF;AAyEpF,MAAM,OAAO,0BAA0B;IACV,KAAK,CAAoB;IAE7C,GAAG,CAAC,QAAgB;QACzB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC;IAC1C,CAAC;IAED,IAAW,aAAa;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC;QACjD,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,GAAG,CAAC;QAC9B,IAAI,IAAI,GAAG,EAAE;YAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QAC7C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;QACvB,IAAI,IAAI,GAAG,EAAE;YAAE,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;QAC5C,OAAO,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACtC,CAAC;IAED,IAAW,SAAS;QAClB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC;QACrC,IAAI,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;QACnB,OAAO,CAAC,CAAC,kBAAkB,EAAE,CAAC;IAChC,CAAC;oHApBU,0BAA0B;6DAA1B,0BAA0B;YAjE/B,AADF,AADF,iCAAuB,aACE,cACG;YAAA,0BAAiC;YAAA,oBAAO;YAChE,kCAAyB;YAAA,YAA0B;YAAA,oBAAO;YAC1D,kCAAyB;YAAA,yBAAS;YAAA,oBAAO;YACzC,kCAAuB;YAAA,YAA6E;YACtG,AADsG,oBAAO,EACvG;YAEJ,AADF,kCAAuB,eACG;YAAA,2BAAwC;YAAA,oBAAO;YACvE,mCAAyB;YAAA,aAA+B;YAAA,oBAAO;YAC/D,mCAAyB;YAAA,gCAAe;YAC1C,AAD0C,oBAAO,EAC3C;YAEJ,AADF,kCAAuB,eACG;YAAA,2BAAiC;YAAA,oBAAO;YAChE,mCAAyB;YAAA,aAAmB;YAAA,oBAAO;YACnD,mCAAyB;YAAA,sCAAqB;YAChD,AADgD,oBAAO,EACjD;YAEJ,AADF,kCAAuB,eACG;YAAA,2BAAwC;YAAA,oBAAO;YACvE,mCAAyB;YAAA,aAAe;YAAA,oBAAO;YAC/C,mCAAyB;YAAA,8BAAa;YAE1C,AADE,AADwC,oBAAO,EACzC,EACF;;YAnBuB,eAA0B;YAA1B,8CAA0B;YAE5B,eAA6E;YAA7E,mHAA6E;YAI3E,eAA+B;YAA/B,uDAA+B;YAK/B,eAAmB;YAAnB,uCAAmB;YAKnB,eAAe;YAAf,mCAAe;;;iFAgDnC,0BAA0B;cAxEtC,SAAS;2BACE,wBAAwB,cACtB,IAAI,mBACC,uBAAuB,CAAC,MAAM,YACrC;;;;;;;;;;;;;;;;;;;;;;;;GAwBT;;kBA6CA,KAAK;mBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;kFADd,0BAA0B"}
@@ -0,0 +1,64 @@
1
+ import { BaseDashboard } from '@memberjunction/ng-shared';
2
+ import type { ResourceData } from '@memberjunction/core-entities';
3
+ import type { ExportFormat } from '@memberjunction/export-engine';
4
+ import type { FormReportData, ReportableForm, ResponseDetail } from './models/reporting.model';
5
+ import * as i0 from "@angular/core";
6
+ type DashboardTab = 'summary' | 'questions' | 'funnel' | 'responses';
7
+ /**
8
+ * Forms reporting dashboard (WP-F). A `BaseDashboard` subclass registered with
9
+ * the MJ ClassFactory under 'FormsReportingDashboard' — the matching Dashboard
10
+ * metadata record (DriverClass) is authored by WP-A.
11
+ *
12
+ * Standalone so the Explorer can instantiate it directly via `createComponent`.
13
+ * All data comes through RunView/RunViews (FormsReportingService); a seeded mock
14
+ * mode renders the UI before any real responses exist (toggle is a one-flag swap).
15
+ */
16
+ export declare class FormsReportingDashboardComponent extends BaseDashboard {
17
+ private readonly data;
18
+ private readonly exporter;
19
+ private readonly cdr;
20
+ /**
21
+ * Live RunView/RunQuery data path is the default. Set to `true` only as an explicit
22
+ * dev aid (e.g. to preview the dashboard UI before any real responses exist) — the
23
+ * seeded mock renders the identical UI with fabricated data. Never ship `true`.
24
+ */
25
+ useMock: boolean;
26
+ loading: boolean;
27
+ errorMessage: string | null;
28
+ forms: ReportableForm[];
29
+ selectedForm: ReportableForm | null;
30
+ report: FormReportData | null;
31
+ activeTab: DashboardTab;
32
+ readonly tabs: {
33
+ key: DashboardTab;
34
+ label: string;
35
+ icon: string;
36
+ }[];
37
+ /** Selected response for the detail view; null shows the list. */
38
+ responseDetail: ResponseDetail | null;
39
+ /** Raw answer rows for the current report, kept for export pivoting. */
40
+ private rawAnswers;
41
+ GetResourceDisplayName(_data: ResourceData): Promise<string>;
42
+ GetResourceIconClass(_data: ResourceData): Promise<string>;
43
+ protected initDashboard(): void;
44
+ protected loadData(): void;
45
+ private loadForms;
46
+ selectForm(form: ReportableForm): Promise<void>;
47
+ onFormChange(formId: string): Promise<void>;
48
+ setTab(tab: DashboardTab): void;
49
+ openResponse(responseId: string): Promise<void>;
50
+ closeResponse(): void;
51
+ export(format: ExportFormat): Promise<void>;
52
+ /** Loads the raw answers separately so export can pivot to a wide matrix. */
53
+ private loadRawAnswers;
54
+ /** Builds a detail view from the mock report (no extra fetch). */
55
+ private mockResponseDetail;
56
+ private mockDetailAnswers;
57
+ private beginLoad;
58
+ private endLoad;
59
+ private fail;
60
+ static ɵfac: i0.ɵɵFactoryDeclaration<FormsReportingDashboardComponent, never>;
61
+ static ɵcmp: i0.ɵɵComponentDeclaration<FormsReportingDashboardComponent, "mj-forms-reporting-dashboard", never, {}, {}, never, never, true, never>;
62
+ }
63
+ export {};
64
+ //# sourceMappingURL=forms-reporting-dashboard.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forms-reporting-dashboard.component.d.ts","sourceRoot":"","sources":["../../../src/lib/dashboard/forms-reporting-dashboard.component.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAGlE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AASlE,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,cAAc,EACf,MAAM,0BAA0B,CAAC;;AAQlC,KAAK,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AAErE;;;;;;;;GAQG;AACH,qBAiBa,gCAAiC,SAAQ,aAAa;IACjE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiC;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuC;IAChE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA6B;IAEjD;;;;OAIG;IACI,OAAO,UAAS;IAEhB,OAAO,UAAS;IAChB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEnC,KAAK,EAAE,cAAc,EAAE,CAAM;IAC7B,YAAY,EAAE,cAAc,GAAG,IAAI,CAAQ;IAC3C,MAAM,EAAE,cAAc,GAAG,IAAI,CAAQ;IAErC,SAAS,EAAE,YAAY,CAAa;IAC3C,SAAgB,IAAI,EAAE;QAAE,GAAG,EAAE,YAAY,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAKxE;IAEF,kEAAkE;IAC3D,cAAc,EAAE,cAAc,GAAG,IAAI,CAAQ;IAEpD,wEAAwE;IACxE,OAAO,CAAC,UAAU,CAAoD;IAEzD,sBAAsB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAInD,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAIhF,SAAS,CAAC,aAAa,IAAI,IAAI;IAI/B,SAAS,CAAC,QAAQ,IAAI,IAAI;YAIZ,SAAS;IAcV,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB/C,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjD,MAAM,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IAKzB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcrD,aAAa,IAAI,IAAI;IAIf,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAYxD,6EAA6E;YAC/D,cAAc;IAM5B,kEAAkE;IAClE,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,IAAI;yCAzKD,gCAAgC;2CAAhC,gCAAgC;CA+K5C"}
@@ -0,0 +1,397 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject } from '@angular/core';
8
+ import { FormsModule } from '@angular/forms';
9
+ import { BaseDashboard } from '@memberjunction/ng-shared';
10
+ import { LogError } from '@memberjunction/core';
11
+ import { RegisterClass } from '@memberjunction/global';
12
+ import { FormsReportingService } from './services/forms-reporting.service';
13
+ import { FormsReportingExportService } from './services/forms-reporting-export.service';
14
+ import { mockReport, mockReportableForms } from './services/forms-reporting-mock';
15
+ import { FormsSummaryStatsComponent } from './components/summary-stats.component';
16
+ import { FormsQuestionBreakdownComponent } from './components/question-breakdown.component';
17
+ import { FormsFunnelChartComponent } from './components/funnel-chart.component';
18
+ import { FormsResponseListComponent } from './components/response-list.component';
19
+ import { FormsResponseDetailComponent } from './components/response-detail.component';
20
+ import * as i0 from "@angular/core";
21
+ import * as i1 from "@angular/forms";
22
+ const _forTrack0 = ($index, $item) => $item.formId;
23
+ const _forTrack1 = ($index, $item) => $item.key;
24
+ const _forTrack2 = ($index, $item) => $item.questionId;
25
+ function FormsReportingDashboardComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
26
+ i0.ɵɵelementStart(0, "span", 5);
27
+ i0.ɵɵtext(1, "Sample data");
28
+ i0.ɵɵelementEnd();
29
+ } }
30
+ function FormsReportingDashboardComponent_Conditional_8_For_5_Template(rf, ctx) { if (rf & 1) {
31
+ i0.ɵɵelementStart(0, "option", 17);
32
+ i0.ɵɵtext(1);
33
+ i0.ɵɵelementEnd();
34
+ } if (rf & 2) {
35
+ const f_r3 = ctx.$implicit;
36
+ i0.ɵɵproperty("value", f_r3.formId);
37
+ i0.ɵɵadvance();
38
+ i0.ɵɵtextInterpolate2("", f_r3.name, " (", f_r3.responseCount, ")");
39
+ } }
40
+ function FormsReportingDashboardComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
41
+ const _r1 = i0.ɵɵgetCurrentView();
42
+ i0.ɵɵelementStart(0, "label", 7)(1, "span", 15);
43
+ i0.ɵɵtext(2, "Select a form");
44
+ i0.ɵɵelementEnd();
45
+ i0.ɵɵelementStart(3, "select", 16);
46
+ i0.ɵɵlistener("ngModelChange", function FormsReportingDashboardComponent_Conditional_8_Template_select_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onFormChange($event)); });
47
+ i0.ɵɵrepeaterCreate(4, FormsReportingDashboardComponent_Conditional_8_For_5_Template, 2, 3, "option", 17, _forTrack0);
48
+ i0.ɵɵelementEnd()();
49
+ } if (rf & 2) {
50
+ const ctx_r1 = i0.ɵɵnextContext();
51
+ i0.ɵɵadvance(3);
52
+ i0.ɵɵproperty("ngModel", ctx_r1.selectedForm == null ? null : ctx_r1.selectedForm.formId);
53
+ i0.ɵɵadvance();
54
+ i0.ɵɵrepeater(ctx_r1.forms);
55
+ } }
56
+ function FormsReportingDashboardComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
57
+ i0.ɵɵelementStart(0, "div", 12);
58
+ i0.ɵɵelement(1, "i", 18);
59
+ i0.ɵɵtext(2);
60
+ i0.ɵɵelementEnd();
61
+ } if (rf & 2) {
62
+ const ctx_r1 = i0.ɵɵnextContext();
63
+ i0.ɵɵadvance(2);
64
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.errorMessage, " ");
65
+ } }
66
+ function FormsReportingDashboardComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
67
+ i0.ɵɵelementStart(0, "div", 13);
68
+ i0.ɵɵelement(1, "i", 19);
69
+ i0.ɵɵtext(2, " Loading\u2026");
70
+ i0.ɵɵelementEnd();
71
+ } }
72
+ function FormsReportingDashboardComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
73
+ i0.ɵɵelementStart(0, "div", 14);
74
+ i0.ɵɵelement(1, "i", 20);
75
+ i0.ɵɵelementStart(2, "p");
76
+ i0.ɵɵtext(3, "No published forms to report on yet.");
77
+ i0.ɵɵelementEnd()();
78
+ } }
79
+ function FormsReportingDashboardComponent_Conditional_19_For_2_Template(rf, ctx) { if (rf & 1) {
80
+ const _r4 = i0.ɵɵgetCurrentView();
81
+ i0.ɵɵelementStart(0, "button", 27);
82
+ i0.ɵɵlistener("click", function FormsReportingDashboardComponent_Conditional_19_For_2_Template_button_click_0_listener() { const t_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setTab(t_r5.key)); });
83
+ i0.ɵɵelement(1, "i");
84
+ i0.ɵɵtext(2);
85
+ i0.ɵɵelementEnd();
86
+ } if (rf & 2) {
87
+ const t_r5 = ctx.$implicit;
88
+ const ctx_r1 = i0.ɵɵnextContext(2);
89
+ i0.ɵɵclassProp("tab--active", ctx_r1.activeTab === t_r5.key);
90
+ i0.ɵɵattribute("aria-selected", ctx_r1.activeTab === t_r5.key);
91
+ i0.ɵɵadvance();
92
+ i0.ɵɵclassMap(t_r5.icon);
93
+ i0.ɵɵadvance();
94
+ i0.ɵɵtextInterpolate1(" ", t_r5.label, " ");
95
+ } }
96
+ function FormsReportingDashboardComponent_Conditional_19_Case_4_Template(rf, ctx) { if (rf & 1) {
97
+ i0.ɵɵelement(0, "mj-forms-summary-stats", 24);
98
+ } if (rf & 2) {
99
+ const r_r6 = i0.ɵɵnextContext();
100
+ i0.ɵɵproperty("stats", r_r6.summary);
101
+ } }
102
+ function FormsReportingDashboardComponent_Conditional_19_Case_5_For_2_Template(rf, ctx) { if (rf & 1) {
103
+ i0.ɵɵelement(0, "mj-forms-question-breakdown", 28);
104
+ } if (rf & 2) {
105
+ const b_r7 = ctx.$implicit;
106
+ i0.ɵɵproperty("breakdown", b_r7);
107
+ } }
108
+ function FormsReportingDashboardComponent_Conditional_19_Case_5_Template(rf, ctx) { if (rf & 1) {
109
+ i0.ɵɵelementStart(0, "div", 25);
110
+ i0.ɵɵrepeaterCreate(1, FormsReportingDashboardComponent_Conditional_19_Case_5_For_2_Template, 1, 1, "mj-forms-question-breakdown", 28, _forTrack2);
111
+ i0.ɵɵelementEnd();
112
+ } if (rf & 2) {
113
+ const r_r6 = i0.ɵɵnextContext();
114
+ i0.ɵɵadvance();
115
+ i0.ɵɵrepeater(r_r6.breakdowns);
116
+ } }
117
+ function FormsReportingDashboardComponent_Conditional_19_Case_6_Template(rf, ctx) { if (rf & 1) {
118
+ i0.ɵɵelement(0, "mj-forms-funnel-chart", 26);
119
+ } if (rf & 2) {
120
+ const r_r6 = i0.ɵɵnextContext();
121
+ i0.ɵɵproperty("steps", r_r6.funnel);
122
+ } }
123
+ function FormsReportingDashboardComponent_Conditional_19_Case_7_Conditional_0_Template(rf, ctx) { if (rf & 1) {
124
+ const _r8 = i0.ɵɵgetCurrentView();
125
+ i0.ɵɵelementStart(0, "mj-forms-response-detail", 31);
126
+ i0.ɵɵlistener("back", function FormsReportingDashboardComponent_Conditional_19_Case_7_Conditional_0_Template_mj_forms_response_detail_back_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.closeResponse()); });
127
+ i0.ɵɵelementEnd();
128
+ } if (rf & 2) {
129
+ i0.ɵɵproperty("detail", ctx);
130
+ } }
131
+ function FormsReportingDashboardComponent_Conditional_19_Case_7_Conditional_1_Template(rf, ctx) { if (rf & 1) {
132
+ const _r9 = i0.ɵɵgetCurrentView();
133
+ i0.ɵɵelementStart(0, "mj-forms-response-list", 32);
134
+ i0.ɵɵlistener("open", function FormsReportingDashboardComponent_Conditional_19_Case_7_Conditional_1_Template_mj_forms_response_list_open_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.openResponse($event)); });
135
+ i0.ɵɵelementEnd();
136
+ } if (rf & 2) {
137
+ const r_r6 = i0.ɵɵnextContext(2);
138
+ i0.ɵɵproperty("rows", r_r6.responses);
139
+ } }
140
+ function FormsReportingDashboardComponent_Conditional_19_Case_7_Template(rf, ctx) { if (rf & 1) {
141
+ i0.ɵɵconditionalCreate(0, FormsReportingDashboardComponent_Conditional_19_Case_7_Conditional_0_Template, 1, 1, "mj-forms-response-detail", 29)(1, FormsReportingDashboardComponent_Conditional_19_Case_7_Conditional_1_Template, 1, 1, "mj-forms-response-list", 30);
142
+ } if (rf & 2) {
143
+ let tmp_3_0;
144
+ const ctx_r1 = i0.ɵɵnextContext(2);
145
+ i0.ɵɵconditional((tmp_3_0 = ctx_r1.responseDetail) ? 0 : 1, tmp_3_0);
146
+ } }
147
+ function FormsReportingDashboardComponent_Conditional_19_Template(rf, ctx) { if (rf & 1) {
148
+ i0.ɵɵelementStart(0, "nav", 21);
149
+ i0.ɵɵrepeaterCreate(1, FormsReportingDashboardComponent_Conditional_19_For_2_Template, 3, 6, "button", 22, _forTrack1);
150
+ i0.ɵɵelementEnd();
151
+ i0.ɵɵelementStart(3, "section", 23);
152
+ i0.ɵɵconditionalCreate(4, FormsReportingDashboardComponent_Conditional_19_Case_4_Template, 1, 1, "mj-forms-summary-stats", 24)(5, FormsReportingDashboardComponent_Conditional_19_Case_5_Template, 3, 0, "div", 25)(6, FormsReportingDashboardComponent_Conditional_19_Case_6_Template, 1, 1, "mj-forms-funnel-chart", 26)(7, FormsReportingDashboardComponent_Conditional_19_Case_7_Template, 2, 1);
153
+ i0.ɵɵelementEnd();
154
+ } if (rf & 2) {
155
+ let tmp_3_0;
156
+ const ctx_r1 = i0.ɵɵnextContext();
157
+ i0.ɵɵadvance();
158
+ i0.ɵɵrepeater(ctx_r1.tabs);
159
+ i0.ɵɵadvance(3);
160
+ i0.ɵɵconditional((tmp_3_0 = ctx_r1.activeTab) === "summary" ? 4 : tmp_3_0 === "questions" ? 5 : tmp_3_0 === "funnel" ? 6 : tmp_3_0 === "responses" ? 7 : -1);
161
+ } }
162
+ /**
163
+ * Forms reporting dashboard (WP-F). A `BaseDashboard` subclass registered with
164
+ * the MJ ClassFactory under 'FormsReportingDashboard' — the matching Dashboard
165
+ * metadata record (DriverClass) is authored by WP-A.
166
+ *
167
+ * Standalone so the Explorer can instantiate it directly via `createComponent`.
168
+ * All data comes through RunView/RunViews (FormsReportingService); a seeded mock
169
+ * mode renders the UI before any real responses exist (toggle is a one-flag swap).
170
+ */
171
+ let FormsReportingDashboardComponent = class FormsReportingDashboardComponent extends BaseDashboard {
172
+ data = inject(FormsReportingService);
173
+ exporter = inject(FormsReportingExportService);
174
+ cdr = inject(ChangeDetectorRef);
175
+ /**
176
+ * Live RunView/RunQuery data path is the default. Set to `true` only as an explicit
177
+ * dev aid (e.g. to preview the dashboard UI before any real responses exist) — the
178
+ * seeded mock renders the identical UI with fabricated data. Never ship `true`.
179
+ */
180
+ useMock = false;
181
+ loading = false;
182
+ errorMessage = null;
183
+ forms = [];
184
+ selectedForm = null;
185
+ report = null;
186
+ activeTab = 'summary';
187
+ tabs = [
188
+ { key: 'summary', label: 'Summary', icon: 'fa-solid fa-gauge' },
189
+ { key: 'questions', label: 'Questions', icon: 'fa-solid fa-list-ul' },
190
+ { key: 'funnel', label: 'Funnel', icon: 'fa-solid fa-filter' },
191
+ { key: 'responses', label: 'Responses', icon: 'fa-solid fa-table-list' },
192
+ ];
193
+ /** Selected response for the detail view; null shows the list. */
194
+ responseDetail = null;
195
+ /** Raw answer rows for the current report, kept for export pivoting. */
196
+ rawAnswers = [];
197
+ async GetResourceDisplayName(_data) {
198
+ return 'Forms Reporting';
199
+ }
200
+ async GetResourceIconClass(_data) {
201
+ return 'fa-solid fa-chart-column';
202
+ }
203
+ initDashboard() {
204
+ // Nothing to set up beyond the injected services.
205
+ }
206
+ loadData() {
207
+ void this.loadForms();
208
+ }
209
+ async loadForms() {
210
+ this.beginLoad();
211
+ try {
212
+ this.forms = this.useMock ? mockReportableForms() : await this.data.loadReportableForms();
213
+ if (this.forms.length > 0) {
214
+ await this.selectForm(this.forms[0]);
215
+ }
216
+ }
217
+ catch (err) {
218
+ this.fail(err, 'Failed to load forms.');
219
+ }
220
+ finally {
221
+ this.endLoad();
222
+ }
223
+ }
224
+ async selectForm(form) {
225
+ this.selectedForm = form;
226
+ this.responseDetail = null;
227
+ this.activeTab = 'summary';
228
+ this.beginLoad();
229
+ try {
230
+ if (this.useMock) {
231
+ this.report = mockReport();
232
+ this.rawAnswers = [];
233
+ }
234
+ else {
235
+ this.report = await this.data.loadReport(form);
236
+ this.rawAnswers = await this.loadRawAnswers(form.formId);
237
+ }
238
+ }
239
+ catch (err) {
240
+ this.fail(err, 'Failed to load the report.');
241
+ }
242
+ finally {
243
+ this.endLoad();
244
+ }
245
+ }
246
+ async onFormChange(formId) {
247
+ const form = this.forms.find((f) => f.formId === formId);
248
+ if (form) {
249
+ await this.selectForm(form);
250
+ }
251
+ }
252
+ setTab(tab) {
253
+ this.activeTab = tab;
254
+ this.responseDetail = null;
255
+ }
256
+ async openResponse(responseId) {
257
+ if (!this.report)
258
+ return;
259
+ this.beginLoad();
260
+ try {
261
+ this.responseDetail = this.useMock
262
+ ? this.mockResponseDetail(responseId)
263
+ : await this.data.loadResponseDetail(responseId, this.report.questions);
264
+ }
265
+ catch (err) {
266
+ this.fail(err, 'Failed to load the response.');
267
+ }
268
+ finally {
269
+ this.endLoad();
270
+ }
271
+ }
272
+ closeResponse() {
273
+ this.responseDetail = null;
274
+ }
275
+ async export(format) {
276
+ if (!this.report)
277
+ return;
278
+ this.beginLoad();
279
+ try {
280
+ await this.exporter.exportResponses(this.report, this.rawAnswers, format);
281
+ }
282
+ catch (err) {
283
+ this.fail(err, 'Export failed.');
284
+ }
285
+ finally {
286
+ this.endLoad();
287
+ }
288
+ }
289
+ /** Loads the raw answers separately so export can pivot to a wide matrix. */
290
+ async loadRawAnswers(formId) {
291
+ return this.data.loadAnswersForForm(formId);
292
+ }
293
+ /** Builds a detail view from the mock report (no extra fetch). */
294
+ mockResponseDetail(responseId) {
295
+ const row = this.report?.responses.find((r) => r.responseId === responseId);
296
+ return {
297
+ responseId,
298
+ status: row?.status ?? 'Complete',
299
+ startedAt: row?.startedAt ?? null,
300
+ submittedAt: row?.submittedAt ?? null,
301
+ respondent: row?.respondent ?? 'Anonymous',
302
+ answers: this.mockDetailAnswers(),
303
+ };
304
+ }
305
+ mockDetailAnswers() {
306
+ const qs = this.report?.questions ?? [];
307
+ return qs
308
+ .filter((q) => q.type !== 'Statement')
309
+ .slice(0, 4)
310
+ .map((q) => ({
311
+ questionId: q.id,
312
+ prompt: q.prompt,
313
+ type: q.type,
314
+ displayValue: 'Sample answer',
315
+ }));
316
+ }
317
+ beginLoad() {
318
+ this.loading = true;
319
+ this.errorMessage = null;
320
+ this.cdr.markForCheck();
321
+ }
322
+ endLoad() {
323
+ this.loading = false;
324
+ this.cdr.markForCheck();
325
+ }
326
+ fail(err, fallback) {
327
+ const message = err instanceof Error ? err.message : fallback;
328
+ this.errorMessage = message;
329
+ LogError(message);
330
+ this.Error.emit(err instanceof Error ? err : new Error(message));
331
+ }
332
+ static ɵfac = /*@__PURE__*/ (() => { let ɵFormsReportingDashboardComponent_BaseFactory; return function FormsReportingDashboardComponent_Factory(__ngFactoryType__) { return (ɵFormsReportingDashboardComponent_BaseFactory || (ɵFormsReportingDashboardComponent_BaseFactory = i0.ɵɵgetInheritedFactory(FormsReportingDashboardComponent)))(__ngFactoryType__ || FormsReportingDashboardComponent); }; })();
333
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FormsReportingDashboardComponent, selectors: [["mj-forms-reporting-dashboard"]], features: [i0.ɵɵProvidersFeature([FormsReportingService, FormsReportingExportService]), i0.ɵɵInheritDefinitionFeature], decls: 20, vars: 8, consts: [[1, "reporting"], [1, "rep-header"], [1, "title-row"], [1, "rep-title"], [1, "fa-solid", "fa-chart-column"], ["title", "Showing seeded sample data until live responses exist", 1, "mock-badge"], [1, "controls"], [1, "form-picker"], ["role", "group", "aria-label", "Export responses", 1, "export-group"], ["type", "button", 1, "btn", 3, "click", "disabled"], [1, "fa-solid", "fa-file-csv"], [1, "fa-solid", "fa-file-excel"], ["role", "alert", 1, "alert"], [1, "loading"], [1, "empty-state"], [1, "sr-only"], ["aria-label", "Select a form to report on", 3, "ngModelChange", "ngModel"], [3, "value"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-inbox"], ["role", "tablist", 1, "tabs"], ["type", "button", "role", "tab", 1, "tab", 3, "tab--active"], [1, "tab-body"], [3, "stats"], [1, "breakdowns"], [3, "steps"], ["type", "button", "role", "tab", 1, "tab", 3, "click"], [3, "breakdown"], [3, "detail"], [3, "rows"], [3, "back", "detail"], [3, "open", "rows"]], template: function FormsReportingDashboardComponent_Template(rf, ctx) { if (rf & 1) {
334
+ i0.ɵɵelementStart(0, "div", 0)(1, "header", 1)(2, "div", 2)(3, "h2", 3);
335
+ i0.ɵɵelement(4, "i", 4);
336
+ i0.ɵɵtext(5, " Forms Reporting");
337
+ i0.ɵɵelementEnd();
338
+ i0.ɵɵconditionalCreate(6, FormsReportingDashboardComponent_Conditional_6_Template, 2, 0, "span", 5);
339
+ i0.ɵɵelementEnd();
340
+ i0.ɵɵelementStart(7, "div", 6);
341
+ i0.ɵɵconditionalCreate(8, FormsReportingDashboardComponent_Conditional_8_Template, 6, 1, "label", 7);
342
+ i0.ɵɵelementStart(9, "div", 8)(10, "button", 9);
343
+ i0.ɵɵlistener("click", function FormsReportingDashboardComponent_Template_button_click_10_listener() { return ctx.export("csv"); });
344
+ i0.ɵɵelement(11, "i", 10);
345
+ i0.ɵɵtext(12, " CSV ");
346
+ i0.ɵɵelementEnd();
347
+ i0.ɵɵelementStart(13, "button", 9);
348
+ i0.ɵɵlistener("click", function FormsReportingDashboardComponent_Template_button_click_13_listener() { return ctx.export("excel"); });
349
+ i0.ɵɵelement(14, "i", 11);
350
+ i0.ɵɵtext(15, " Excel ");
351
+ i0.ɵɵelementEnd()()()();
352
+ i0.ɵɵconditionalCreate(16, FormsReportingDashboardComponent_Conditional_16_Template, 3, 1, "div", 12);
353
+ i0.ɵɵconditionalCreate(17, FormsReportingDashboardComponent_Conditional_17_Template, 3, 0, "div", 13);
354
+ i0.ɵɵconditionalCreate(18, FormsReportingDashboardComponent_Conditional_18_Template, 4, 0, "div", 14);
355
+ i0.ɵɵconditionalCreate(19, FormsReportingDashboardComponent_Conditional_19_Template, 8, 1);
356
+ i0.ɵɵelementEnd();
357
+ } if (rf & 2) {
358
+ let tmp_7_0;
359
+ i0.ɵɵadvance(6);
360
+ i0.ɵɵconditional(ctx.useMock ? 6 : -1);
361
+ i0.ɵɵadvance(2);
362
+ i0.ɵɵconditional(ctx.forms.length > 0 ? 8 : -1);
363
+ i0.ɵɵadvance(2);
364
+ i0.ɵɵproperty("disabled", !ctx.report || ctx.loading);
365
+ i0.ɵɵadvance(3);
366
+ i0.ɵɵproperty("disabled", !ctx.report || ctx.loading);
367
+ i0.ɵɵadvance(3);
368
+ i0.ɵɵconditional(ctx.errorMessage ? 16 : -1);
369
+ i0.ɵɵadvance();
370
+ i0.ɵɵconditional(ctx.loading ? 17 : -1);
371
+ i0.ɵɵadvance();
372
+ i0.ɵɵconditional(!ctx.loading && ctx.forms.length === 0 ? 18 : -1);
373
+ i0.ɵɵadvance();
374
+ i0.ɵɵconditional((tmp_7_0 = ctx.report) ? 19 : -1, tmp_7_0);
375
+ } }, dependencies: [FormsModule, i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.SelectControlValueAccessor, i1.NgControlStatus, i1.NgModel, FormsSummaryStatsComponent,
376
+ FormsQuestionBreakdownComponent,
377
+ FormsFunnelChartComponent,
378
+ FormsResponseListComponent,
379
+ FormsResponseDetailComponent], styles: ["[_nghost-%COMP%] {\n display: block;\n height: 100%;\n overflow: auto;\n background: var(--mj-bg-page);\n font-family: var(--mj-font-family);\n}\n\n.reporting[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-4);\n padding: var(--mj-space-4);\n}\n\n.rep-header[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: var(--mj-space-3);\n align-items: center;\n justify-content: space-between;\n}\n\n.title-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n}\n\n.rep-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.mock-badge[_ngcontent-%COMP%] {\n font-size: 11px;\n padding: 2px var(--mj-space-2);\n border-radius: var(--mj-radius-full);\n background: var(--mj-status-info);\n color: var(--mj-text-inverse);\n}\n\n.controls[_ngcontent-%COMP%] {\n display: flex;\n gap: var(--mj-space-2);\n align-items: center;\n flex-wrap: wrap;\n}\n\n.form-picker[_ngcontent-%COMP%] select[_ngcontent-%COMP%] {\n padding: var(--mj-space-2);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 13px;\n max-width: 320px;\n}\n\n.export-group[_ngcontent-%COMP%] {\n display: flex;\n gap: var(--mj-space-1);\n}\n\n.btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: var(--mj-space-1);\n padding: var(--mj-space-2) var(--mj-space-3);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 13px;\n cursor: pointer;\n}\n\n.btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n}\n\n.btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.alert[_ngcontent-%COMP%] {\n padding: var(--mj-space-3);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-status-error);\n color: var(--mj-status-error);\n font-size: 13px;\n}\n\n.loading[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: 14px;\n}\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--mj-space-2);\n padding: var(--mj-space-8);\n color: var(--mj-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 28px;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n}\n\n.tabs[_ngcontent-%COMP%] {\n display: flex;\n gap: var(--mj-space-1);\n border-bottom: 1px solid var(--mj-border-default);\n flex-wrap: wrap;\n}\n\n.tab[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: var(--mj-space-1);\n padding: var(--mj-space-2) var(--mj-space-3);\n border: none;\n border-bottom: 2px solid transparent;\n background: none;\n color: var(--mj-text-secondary);\n font-size: 13px;\n cursor: pointer;\n}\n\n.tab--active[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.tab-body[_ngcontent-%COMP%] {\n min-height: 0;\n}\n\n.breakdowns[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));\n gap: var(--mj-space-4);\n}\n\n.sr-only[_ngcontent-%COMP%] {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}"], changeDetection: 0 });
380
+ };
381
+ FormsReportingDashboardComponent = __decorate([
382
+ RegisterClass(BaseDashboard, 'FormsReportingDashboard')
383
+ ], FormsReportingDashboardComponent);
384
+ export { FormsReportingDashboardComponent };
385
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FormsReportingDashboardComponent, [{
386
+ type: Component,
387
+ args: [{ selector: 'mj-forms-reporting-dashboard', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [FormsReportingService, FormsReportingExportService], imports: [
388
+ FormsModule,
389
+ FormsSummaryStatsComponent,
390
+ FormsQuestionBreakdownComponent,
391
+ FormsFunnelChartComponent,
392
+ FormsResponseListComponent,
393
+ FormsResponseDetailComponent,
394
+ ], template: "<div class=\"reporting\">\n <header class=\"rep-header\">\n <div class=\"title-row\">\n <h2 class=\"rep-title\"><i class=\"fa-solid fa-chart-column\"></i> Forms Reporting</h2>\n @if (useMock) {\n <span class=\"mock-badge\" title=\"Showing seeded sample data until live responses exist\">Sample data</span>\n }\n </div>\n\n <div class=\"controls\">\n @if (forms.length > 0) {\n <label class=\"form-picker\">\n <span class=\"sr-only\">Select a form</span>\n <select\n [ngModel]=\"selectedForm?.formId\"\n (ngModelChange)=\"onFormChange($event)\"\n aria-label=\"Select a form to report on\">\n @for (f of forms; track f.formId) {\n <option [value]=\"f.formId\">{{ f.name }} ({{ f.responseCount }})</option>\n }\n </select>\n </label>\n }\n <div class=\"export-group\" role=\"group\" aria-label=\"Export responses\">\n <button type=\"button\" class=\"btn\" [disabled]=\"!report || loading\" (click)=\"export('csv')\">\n <i class=\"fa-solid fa-file-csv\"></i> CSV\n </button>\n <button type=\"button\" class=\"btn\" [disabled]=\"!report || loading\" (click)=\"export('excel')\">\n <i class=\"fa-solid fa-file-excel\"></i> Excel\n </button>\n </div>\n </div>\n </header>\n\n @if (errorMessage) {\n <div class=\"alert\" role=\"alert\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i> {{ errorMessage }}\n </div>\n }\n\n @if (loading) {\n <div class=\"loading\"><i class=\"fa-solid fa-spinner fa-spin\"></i> Loading\u2026</div>\n }\n\n @if (!loading && forms.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No published forms to report on yet.</p>\n </div>\n }\n\n @if (report; as r) {\n <nav class=\"tabs\" role=\"tablist\">\n @for (t of tabs; track t.key) {\n <button\n type=\"button\"\n role=\"tab\"\n class=\"tab\"\n [class.tab--active]=\"activeTab === t.key\"\n [attr.aria-selected]=\"activeTab === t.key\"\n (click)=\"setTab(t.key)\">\n <i [class]=\"t.icon\"></i> {{ t.label }}\n </button>\n }\n </nav>\n\n <section class=\"tab-body\">\n @switch (activeTab) {\n @case ('summary') {\n <mj-forms-summary-stats [stats]=\"r.summary\"></mj-forms-summary-stats>\n }\n @case ('questions') {\n <div class=\"breakdowns\">\n @for (b of r.breakdowns; track b.questionId) {\n <mj-forms-question-breakdown [breakdown]=\"b\"></mj-forms-question-breakdown>\n }\n </div>\n }\n @case ('funnel') {\n <mj-forms-funnel-chart [steps]=\"r.funnel\"></mj-forms-funnel-chart>\n }\n @case ('responses') {\n @if (responseDetail; as d) {\n <mj-forms-response-detail [detail]=\"d\" (back)=\"closeResponse()\"></mj-forms-response-detail>\n } @else {\n <mj-forms-response-list [rows]=\"r.responses\" (open)=\"openResponse($event)\"></mj-forms-response-list>\n }\n }\n }\n </section>\n }\n</div>\n", styles: [":host {\n display: block;\n height: 100%;\n overflow: auto;\n background: var(--mj-bg-page);\n font-family: var(--mj-font-family);\n}\n\n.reporting {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-4);\n padding: var(--mj-space-4);\n}\n\n.rep-header {\n display: flex;\n flex-wrap: wrap;\n gap: var(--mj-space-3);\n align-items: center;\n justify-content: space-between;\n}\n\n.title-row {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n}\n\n.rep-title {\n margin: 0;\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.mock-badge {\n font-size: 11px;\n padding: 2px var(--mj-space-2);\n border-radius: var(--mj-radius-full);\n background: var(--mj-status-info);\n color: var(--mj-text-inverse);\n}\n\n.controls {\n display: flex;\n gap: var(--mj-space-2);\n align-items: center;\n flex-wrap: wrap;\n}\n\n.form-picker select {\n padding: var(--mj-space-2);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 13px;\n max-width: 320px;\n}\n\n.export-group {\n display: flex;\n gap: var(--mj-space-1);\n}\n\n.btn {\n display: inline-flex;\n align-items: center;\n gap: var(--mj-space-1);\n padding: var(--mj-space-2) var(--mj-space-3);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 13px;\n cursor: pointer;\n}\n\n.btn:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n}\n\n.btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.alert {\n padding: var(--mj-space-3);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-status-error);\n color: var(--mj-status-error);\n font-size: 13px;\n}\n\n.loading {\n color: var(--mj-text-secondary);\n font-size: 14px;\n}\n\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--mj-space-2);\n padding: var(--mj-space-8);\n color: var(--mj-text-muted);\n}\n\n.empty-state i {\n font-size: 28px;\n}\n\n.empty-state p {\n margin: 0;\n}\n\n.tabs {\n display: flex;\n gap: var(--mj-space-1);\n border-bottom: 1px solid var(--mj-border-default);\n flex-wrap: wrap;\n}\n\n.tab {\n display: inline-flex;\n align-items: center;\n gap: var(--mj-space-1);\n padding: var(--mj-space-2) var(--mj-space-3);\n border: none;\n border-bottom: 2px solid transparent;\n background: none;\n color: var(--mj-text-secondary);\n font-size: 13px;\n cursor: pointer;\n}\n\n.tab--active {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.tab-body {\n min-height: 0;\n}\n\n.breakdowns {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));\n gap: var(--mj-space-4);\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n"] }]
395
+ }], null, null); })();
396
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FormsReportingDashboardComponent, { className: "FormsReportingDashboardComponent", filePath: "lib/dashboard/forms-reporting-dashboard.component.ts", lineNumber: 56 }); })();
397
+ //# sourceMappingURL=forms-reporting-dashboard.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forms-reporting-dashboard.component.js","sourceRoot":"","sources":["../../../src/lib/dashboard/forms-reporting-dashboard.component.ts","../../../src/lib/dashboard/forms-reporting-dashboard.component.html"],"names":[],"mappings":"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"}