@hmcts/opal-frontend-common 0.0.67 → 0.0.68

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 (205) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +54 -8
  3. package/package.json +71 -38
  4. package/styles/styles.scss +10 -14
  5. package/types/package.json +4 -0
  6. package/components/abstract/abstract-nested-form-base/README.md +0 -89
  7. package/components/abstract/abstract-table-filter/README.md +0 -76
  8. package/components/govuk/govuk-tabs/govuk-tabs-list-item/README.md +0 -74
  9. package/components/govuk/govuk-tabs/govuk-tabs-panel/README.md +0 -52
  10. package/components/moj/moj-filter/moj-filter-panel/moj-filter-panel-header/README.md +0 -43
  11. package/components/moj/moj-filter/moj-filter-panel/moj-filter-panel-option/README.md +0 -81
  12. package/components/moj/moj-filter/moj-filter-panel/moj-filter-panel-option/moj-filter-panel-option-form-group-item/README.md +0 -53
  13. package/components/moj/moj-filter/moj-filter-panel/moj-filter-panel-option/moj-filter-panel-option-form-group-keyword/README.md +0 -59
  14. package/components/moj/moj-filter/moj-filter-panel/moj-filter-panel-selected/README.md +0 -55
  15. package/components/moj/moj-filter/moj-filter-panel/moj-filter-panel-selected/moj-filter-panel-selected-tag/README.md +0 -52
  16. package/fesm2022/hmcts-opal-frontend-common-access-denied.component-B14ZVnte.mjs.map +0 -1
  17. package/fesm2022/hmcts-opal-frontend-common-account-created.component-DMjRN8Y1.mjs.map +0 -1
  18. package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-form-alias-base-interfaces.mjs.map +0 -1
  19. package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-form-alias-base.mjs.map +0 -1
  20. package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-form-array-base-interfaces.mjs.map +0 -1
  21. package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-form-array-base.mjs.map +0 -1
  22. package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-form-array-parent-base.mjs.map +0 -1
  23. package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-form-array-removal-base-interfaces.mjs.map +0 -1
  24. package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-form-array-removal-base.mjs.map +0 -1
  25. package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-form-base-interfaces.mjs.map +0 -1
  26. package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-form-base.mjs.map +0 -1
  27. package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-form-parent-base.mjs.map +0 -1
  28. package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-nested-form-base.mjs.map +0 -1
  29. package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-sortable-table-interfaces.mjs.map +0 -1
  30. package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-sortable-table-pagination.mjs.map +0 -1
  31. package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-sortable-table-types.mjs.map +0 -1
  32. package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-sortable-table.mjs.map +0 -1
  33. package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-tab-data.mjs.map +0 -1
  34. package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-table-filter-interfaces.mjs.map +0 -1
  35. package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-table-filter-types.mjs.map +0 -1
  36. package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-table-filter.mjs.map +0 -1
  37. package/fesm2022/hmcts-opal-frontend-common-components-abstract-interfaces.mjs.map +0 -1
  38. package/fesm2022/hmcts-opal-frontend-common-components-alphagov-alphagov-accessible-autocomplete-interfaces.mjs.map +0 -1
  39. package/fesm2022/hmcts-opal-frontend-common-components-alphagov-alphagov-accessible-autocomplete.mjs.map +0 -1
  40. package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-account-information-custom-account-information-item-custom-account-information-item-label.mjs.map +0 -1
  41. package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-account-information-custom-account-information-item-custom-account-information-item-value.mjs.map +0 -1
  42. package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-account-information-custom-account-information-item.mjs.map +0 -1
  43. package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-account-information.mjs.map +0 -1
  44. package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-action-links.mjs.map +0 -1
  45. package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-horizontal-scroll-pane.mjs.map +0 -1
  46. package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-page-header.mjs.map +0 -1
  47. package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-scrollable-panes-custom-scrollable-panes-inner-pane.mjs.map +0 -1
  48. package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-scrollable-panes.mjs.map +0 -1
  49. package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-summary-metric-bar-custom-summary-metric-bar-item-custom-summary-metric-bar-item-label.mjs.map +0 -1
  50. package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-summary-metric-bar-custom-summary-metric-bar-item-custom-summary-metric-bar-item-value.mjs.map +0 -1
  51. package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-summary-metric-bar-custom-summary-metric-bar-item.mjs.map +0 -1
  52. package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-summary-metric-bar.mjs.map +0 -1
  53. package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-vertical-scroll-pane-custom-vertical-scroll-pane-inner-pane.mjs.map +0 -1
  54. package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-vertical-scroll-pane-custom-vertical-scroll-pane-outer-pane.mjs.map +0 -1
  55. package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-vertical-scroll-pane.mjs.map +0 -1
  56. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-accordion.mjs.map +0 -1
  57. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-back-link.mjs.map +0 -1
  58. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-button.mjs.map +0 -1
  59. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-cancel-link.mjs.map +0 -1
  60. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-checkboxes-interfaces.mjs.map +0 -1
  61. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-checkboxes.mjs.map +0 -1
  62. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-date-input-interfaces.mjs.map +0 -1
  63. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-date-input.mjs.map +0 -1
  64. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-details.mjs.map +0 -1
  65. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-error-summary.mjs.map +0 -1
  66. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-footer-interfaces.mjs.map +0 -1
  67. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-footer.mjs.map +0 -1
  68. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-header-interfaces.mjs.map +0 -1
  69. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-header.mjs.map +0 -1
  70. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-heading-with-caption-types.mjs.map +0 -1
  71. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-heading-with-caption.mjs.map +0 -1
  72. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-inset-text.mjs.map +0 -1
  73. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-list-govuk-list-link.mjs.map +0 -1
  74. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-list.mjs.map +0 -1
  75. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-notification-banner.mjs.map +0 -1
  76. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-pagination.mjs.map +0 -1
  77. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-panel.mjs.map +0 -1
  78. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-radio-interfaces.mjs.map +0 -1
  79. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-radio.mjs.map +0 -1
  80. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-select-interfaces.mjs.map +0 -1
  81. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-select.mjs.map +0 -1
  82. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-summary-card-list.mjs.map +0 -1
  83. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-summary-list.mjs.map +0 -1
  84. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-table.mjs.map +0 -1
  85. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-tabs-govuk-tabs-list-item.mjs.map +0 -1
  86. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-tabs-govuk-tabs-panel.mjs.map +0 -1
  87. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-tabs.mjs.map +0 -1
  88. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-tag.mjs.map +0 -1
  89. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-task-list.mjs.map +0 -1
  90. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-text-area.mjs.map +0 -1
  91. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-text-input-prefix-suffix.mjs.map +0 -1
  92. package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-text-input.mjs.map +0 -1
  93. package/fesm2022/hmcts-opal-frontend-common-components-govuk-helpers.mjs.map +0 -1
  94. package/fesm2022/hmcts-opal-frontend-common-components-hod-hod-loading-spinner.mjs.map +0 -1
  95. package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-alert.mjs.map +0 -1
  96. package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-badge.mjs.map +0 -1
  97. package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-button-menu-moj-button-menu-item.mjs.map +0 -1
  98. package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-button-menu.mjs.map +0 -1
  99. package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-date-picker.mjs.map +0 -1
  100. package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-filter-moj-filter-panel-moj-filter-panel-header.mjs.map +0 -1
  101. package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-filter-moj-filter-panel-moj-filter-panel-option-moj-filter-panel-option-form-group-item.mjs.map +0 -1
  102. package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-filter-moj-filter-panel-moj-filter-panel-option-moj-filter-panel-option-form-group-keyword.mjs.map +0 -1
  103. package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-filter-moj-filter-panel-moj-filter-panel-option.mjs.map +0 -1
  104. package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-filter-moj-filter-panel-moj-filter-panel-selected-moj-filter-panel-selected-tag.mjs.map +0 -1
  105. package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-filter-moj-filter-panel-moj-filter-panel-selected.mjs.map +0 -1
  106. package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-filter-moj-filter-panel.mjs.map +0 -1
  107. package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-filter.mjs.map +0 -1
  108. package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-header-interfaces.mjs.map +0 -1
  109. package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-header.mjs.map +0 -1
  110. package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-inset-text.mjs.map +0 -1
  111. package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-notification-badge.mjs.map +0 -1
  112. package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-page-header.mjs.map +0 -1
  113. package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-pagination.mjs.map +0 -1
  114. package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-primary-navigation.mjs.map +0 -1
  115. package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-sortable-table.mjs.map +0 -1
  116. package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-sub-navigation.mjs.map +0 -1
  117. package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-ticket-panel.mjs.map +0 -1
  118. package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-timeline.mjs.map +0 -1
  119. package/fesm2022/hmcts-opal-frontend-common-concurrency-failure.component-CQS1DbQQ.mjs.map +0 -1
  120. package/fesm2022/hmcts-opal-frontend-common-constants.mjs.map +0 -1
  121. package/fesm2022/hmcts-opal-frontend-common-directives-capitalisation.mjs.map +0 -1
  122. package/fesm2022/hmcts-opal-frontend-common-directives-govuk-button.mjs.map +0 -1
  123. package/fesm2022/hmcts-opal-frontend-common-directives-moj-multi-select.mjs.map +0 -1
  124. package/fesm2022/hmcts-opal-frontend-common-guards-account.mjs.map +0 -1
  125. package/fesm2022/hmcts-opal-frontend-common-guards-auth.mjs.map +0 -1
  126. package/fesm2022/hmcts-opal-frontend-common-guards-can-deactivate-interfaces.mjs.map +0 -1
  127. package/fesm2022/hmcts-opal-frontend-common-guards-can-deactivate-types.mjs.map +0 -1
  128. package/fesm2022/hmcts-opal-frontend-common-guards-can-deactivate.mjs.map +0 -1
  129. package/fesm2022/hmcts-opal-frontend-common-guards-has-flow-state.mjs.map +0 -1
  130. package/fesm2022/hmcts-opal-frontend-common-guards-has-url-state-match.mjs.map +0 -1
  131. package/fesm2022/hmcts-opal-frontend-common-guards-helpers.mjs.map +0 -1
  132. package/fesm2022/hmcts-opal-frontend-common-guards-route-permissions.mjs.map +0 -1
  133. package/fesm2022/hmcts-opal-frontend-common-guards-signed-in.mjs.map +0 -1
  134. package/fesm2022/hmcts-opal-frontend-common-guards-types.mjs.map +0 -1
  135. package/fesm2022/hmcts-opal-frontend-common-interceptors-http-error-constants.mjs.map +0 -1
  136. package/fesm2022/hmcts-opal-frontend-common-interceptors-http-error-interfaces.mjs.map +0 -1
  137. package/fesm2022/hmcts-opal-frontend-common-interceptors-http-error.mjs.map +0 -1
  138. package/fesm2022/hmcts-opal-frontend-common-internal-server-error.component-lCp06yT-.mjs.map +0 -1
  139. package/fesm2022/hmcts-opal-frontend-common-pages-access-denied.component-B14ZVnte.mjs.map +0 -1
  140. package/fesm2022/hmcts-opal-frontend-common-pages-account-created.component-DMjRN8Y1.mjs.map +0 -1
  141. package/fesm2022/hmcts-opal-frontend-common-pages-concurrency-failure.component-CQS1DbQQ.mjs.map +0 -1
  142. package/fesm2022/hmcts-opal-frontend-common-pages-dashboard-page-interfaces.mjs.map +0 -1
  143. package/fesm2022/hmcts-opal-frontend-common-pages-dashboard-page.mjs.map +0 -1
  144. package/fesm2022/hmcts-opal-frontend-common-pages-internal-server-error.component-lCp06yT-.mjs.map +0 -1
  145. package/fesm2022/hmcts-opal-frontend-common-pages-permission-denied.component-DYa3iGTj.mjs.map +0 -1
  146. package/fesm2022/hmcts-opal-frontend-common-pages-routing-constants.mjs.map +0 -1
  147. package/fesm2022/hmcts-opal-frontend-common-pages-routing-interfaces.mjs.map +0 -1
  148. package/fesm2022/hmcts-opal-frontend-common-pages-sign-in-stub.component-B87UHy9K.mjs.map +0 -1
  149. package/fesm2022/hmcts-opal-frontend-common-pages-sign-in.component-Ctc9YosM.mjs.map +0 -1
  150. package/fesm2022/hmcts-opal-frontend-common-pages.mjs.map +0 -1
  151. package/fesm2022/hmcts-opal-frontend-common-permission-denied.component-DYa3iGTj.mjs.map +0 -1
  152. package/fesm2022/hmcts-opal-frontend-common-pipes-date-format.mjs.map +0 -1
  153. package/fesm2022/hmcts-opal-frontend-common-pipes-days-ago.mjs.map +0 -1
  154. package/fesm2022/hmcts-opal-frontend-common-pipes-monetary.mjs.map +0 -1
  155. package/fesm2022/hmcts-opal-frontend-common-pipes-national-insurance.mjs.map +0 -1
  156. package/fesm2022/hmcts-opal-frontend-common-resolvers-title.mjs.map +0 -1
  157. package/fesm2022/hmcts-opal-frontend-common-services-app-initializer-service.mjs.map +0 -1
  158. package/fesm2022/hmcts-opal-frontend-common-services-app-insights-service.mjs.map +0 -1
  159. package/fesm2022/hmcts-opal-frontend-common-services-auth-service-constants.mjs.map +0 -1
  160. package/fesm2022/hmcts-opal-frontend-common-services-auth-service-interfaces.mjs.map +0 -1
  161. package/fesm2022/hmcts-opal-frontend-common-services-auth-service.mjs.map +0 -1
  162. package/fesm2022/hmcts-opal-frontend-common-services-date-service-interfaces.mjs.map +0 -1
  163. package/fesm2022/hmcts-opal-frontend-common-services-date-service.mjs.map +0 -1
  164. package/fesm2022/hmcts-opal-frontend-common-services-launch-darkly-service-mocks.mjs.map +0 -1
  165. package/fesm2022/hmcts-opal-frontend-common-services-launch-darkly-service.mjs.map +0 -1
  166. package/fesm2022/hmcts-opal-frontend-common-services-opal-user-service-interfaces.mjs.map +0 -1
  167. package/fesm2022/hmcts-opal-frontend-common-services-opal-user-service-mocks.mjs.map +0 -1
  168. package/fesm2022/hmcts-opal-frontend-common-services-opal-user-service.mjs.map +0 -1
  169. package/fesm2022/hmcts-opal-frontend-common-services-permissions-service.mjs.map +0 -1
  170. package/fesm2022/hmcts-opal-frontend-common-services-session-service-constants.mjs.map +0 -1
  171. package/fesm2022/hmcts-opal-frontend-common-services-session-service-interfaces.mjs.map +0 -1
  172. package/fesm2022/hmcts-opal-frontend-common-services-session-service-mocks.mjs.map +0 -1
  173. package/fesm2022/hmcts-opal-frontend-common-services-session-service.mjs.map +0 -1
  174. package/fesm2022/hmcts-opal-frontend-common-services-sort-service-interfaces.mjs.map +0 -1
  175. package/fesm2022/hmcts-opal-frontend-common-services-sort-service.mjs.map +0 -1
  176. package/fesm2022/hmcts-opal-frontend-common-services-transfer-state-service-interfaces.mjs.map +0 -1
  177. package/fesm2022/hmcts-opal-frontend-common-services-transfer-state-service-mocks.mjs.map +0 -1
  178. package/fesm2022/hmcts-opal-frontend-common-services-transfer-state-service.mjs.map +0 -1
  179. package/fesm2022/hmcts-opal-frontend-common-services-transformation-service-constants.mjs.map +0 -1
  180. package/fesm2022/hmcts-opal-frontend-common-services-transformation-service-interfaces.mjs.map +0 -1
  181. package/fesm2022/hmcts-opal-frontend-common-services-transformation-service.mjs.map +0 -1
  182. package/fesm2022/hmcts-opal-frontend-common-services-utils-service.mjs.map +0 -1
  183. package/fesm2022/hmcts-opal-frontend-common-sign-in-stub.component-B87UHy9K.mjs.map +0 -1
  184. package/fesm2022/hmcts-opal-frontend-common-sign-in.component-BjLHMHMm.mjs.map +0 -1
  185. package/fesm2022/hmcts-opal-frontend-common-stores-global-constants.mjs.map +0 -1
  186. package/fesm2022/hmcts-opal-frontend-common-stores-global-interfaces.mjs.map +0 -1
  187. package/fesm2022/hmcts-opal-frontend-common-stores-global-types.mjs.map +0 -1
  188. package/fesm2022/hmcts-opal-frontend-common-stores-global.mjs.map +0 -1
  189. package/fesm2022/hmcts-opal-frontend-common-types.mjs.map +0 -1
  190. package/fesm2022/hmcts-opal-frontend-common-validators-amount.mjs.map +0 -1
  191. package/fesm2022/hmcts-opal-frontend-common-validators-date-after-year.mjs.map +0 -1
  192. package/fesm2022/hmcts-opal-frontend-common-validators-date-before.mjs.map +0 -1
  193. package/fesm2022/hmcts-opal-frontend-common-validators-date-of-birth.mjs.map +0 -1
  194. package/fesm2022/hmcts-opal-frontend-common-validators-future-date.mjs.map +0 -1
  195. package/fesm2022/hmcts-opal-frontend-common-validators-invalid-value.mjs.map +0 -1
  196. package/fesm2022/hmcts-opal-frontend-common-validators-national-insurance-number.mjs.map +0 -1
  197. package/fesm2022/hmcts-opal-frontend-common-validators-optional-max-length.mjs.map +0 -1
  198. package/fesm2022/hmcts-opal-frontend-common-validators-optional-valid-date.mjs.map +0 -1
  199. package/fesm2022/hmcts-opal-frontend-common-validators-optional-valid-telephone.mjs.map +0 -1
  200. package/fesm2022/hmcts-opal-frontend-common-validators-over-eighteen.mjs.map +0 -1
  201. package/fesm2022/hmcts-opal-frontend-common-validators-past-date.mjs.map +0 -1
  202. package/fesm2022/hmcts-opal-frontend-common-validators-pattern-validator.mjs.map +0 -1
  203. package/fesm2022/hmcts-opal-frontend-common-validators-valid-value.mjs.map +0 -1
  204. package/fesm2022/hmcts-opal-frontend-common.mjs.map +0 -1
  205. package/guards/has-url-state-match/README.md +0 -160
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 HM Courts & Tribunals Service
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -12,11 +12,11 @@ This is an [Angular Library](https://angular.dev/tools/libraries).
12
12
  - [Getting Started](#getting-started)
13
13
  - [Development server](#development-server)
14
14
  - [Build](#build)
15
+ - [Using This Library](#using-this-library-in-an-angular-application-eg-opal-frontend)
15
16
  - [Switching Between Local and Published Versions](#switching-between-local-and-published-versions)
16
17
  - [Running unit tests](#running-unit-tests)
17
18
  - [Angular code scaffolding](#angular-code-scaffolding)
18
19
  - [Commonly Used Commands](#commonly-used-commands)
19
- - [Using This Library](#using-this-library-in-an-angular-application-eg-opal-frontend)
20
20
  - [Publishing the Library](#publishing-the-library)
21
21
 
22
22
  ## Getting Started
@@ -25,7 +25,7 @@ This is an [Angular Library](https://angular.dev/tools/libraries).
25
25
 
26
26
  Running the application requires the following tools to be installed in your environment:
27
27
 
28
- - [Node.js](https://nodejs.org/) v23.7.0 or later
28
+ - [Node.js](https://nodejs.org/) v18 or later
29
29
 
30
30
  - [yarn](https://yarnpkg.com/) v4
31
31
 
@@ -41,7 +41,42 @@ yarn
41
41
 
42
42
  ## Build
43
43
 
44
- Run `yarn ng build` to build the project. The build artifacts will be stored in the `dist/` directory.
44
+ Run `yarn build` to build the project. The build artifacts will be stored in the `dist/` directory.
45
+
46
+ ## Development server
47
+
48
+ Run `yarn start` to serve the local harness app via Angular dev server.
49
+
50
+ ## Using This Library in an Angular Application (e.g. opal-frontend)
51
+
52
+ Install in the consuming application:
53
+
54
+ ```bash
55
+ yarn add @hmcts/opal-frontend-common
56
+ ```
57
+
58
+ Import from the package root only for the root public API:
59
+
60
+ ```ts
61
+ import { HEADER_LINKS, routing, type HeadingLevel } from '@hmcts/opal-frontend-common';
62
+ ```
63
+
64
+ Import components/services/guards/validators from explicit subpaths:
65
+
66
+ ```ts
67
+ import { GovukTextInputComponent } from '@hmcts/opal-frontend-common/components/govuk/govuk-text-input';
68
+ import { GovukTagComponent } from '@hmcts/opal-frontend-common/components/govuk/govuk-tag';
69
+ import { DateService } from '@hmcts/opal-frontend-common/services/date-service';
70
+ import { hasFlowStateGuard } from '@hmcts/opal-frontend-common/guards/has-flow-state';
71
+ ```
72
+
73
+ Import global styles through the exported style entrypoint:
74
+
75
+ ```scss
76
+ @use '@hmcts/opal-frontend-common/styles';
77
+ ```
78
+
79
+ Do not deep-import from `dist/`, `fesm2022/`, `types/`, or internal source folders.
45
80
 
46
81
  ## Switching Between Local and Published Versions
47
82
 
@@ -58,17 +93,19 @@ To use a published version of this library during development in another project
58
93
 
59
94
  To use a local version of this library during development in another project:
60
95
 
61
- 1. Build this library:
96
+ 1. Build and pack this library:
62
97
 
63
98
  ```bash
64
- yarn build
99
+ yarn pack:local
65
100
  ```
66
101
 
67
- 2. In your consuming project (e.g. `opal-frontend`), ensure you have set an environment variable pointing to the local build:
102
+ This generates a local `.tgz` artifact in this repository root (e.g. `hmcts-opal-frontend-common-X.Y.Z.tgz`).
103
+
104
+ 2. In your consuming project (e.g. `opal-frontend`), ensure you have set an environment variable pointing to this repository root:
68
105
 
69
106
  ```bash
70
107
  # In your shell config file (.zshrc, .bash_profile, or .bashrc)
71
- export COMMON_UI_LIB_PATH="[INSERT PATH TO COMMON UI LIB FOLDER]"
108
+ export COMMON_UI_LIB_PATH="[INSERT PATH TO COMMON UI LIB REPOSITORY ROOT]"
72
109
  ```
73
110
 
74
111
  3. In the consuming project (e.g. `opal-frontend`), run:
@@ -77,7 +114,7 @@ To use a local version of this library during development in another project:
77
114
  yarn import:local:common-ui-lib
78
115
  ```
79
116
 
80
- This will remove the published version and install the local build using the path provided.
117
+ This will remove the published version and install the locally packed `.tgz` artifact from the path provided.
81
118
 
82
119
  4. To switch back to the published version:
83
120
  ```bash
@@ -149,6 +186,15 @@ The following commands are available in the `package.json`:
149
186
  - `yarn build`
150
187
  Builds the Angular library and outputs to the `dist/` folder.
151
188
 
189
+ - `yarn exports:check`
190
+ Validates that source `exports` and local `tsconfig` path aliases stay in sync.
191
+
192
+ - `yarn pack:check`
193
+ Validates the publish surface using `npm pack --dry-run`.
194
+
195
+ - `yarn pack:local`
196
+ Builds and packages the library into a root-level `.tgz` file for local consumer testing.
197
+
152
198
  - `yarn test`
153
199
  Executes unit tests via Vitest.
154
200
 
package/package.json CHANGED
@@ -1,19 +1,50 @@
1
1
  {
2
2
  "name": "@hmcts/opal-frontend-common",
3
- "version": "0.0.67",
3
+ "version": "0.0.68",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/hmcts/opal-frontend-common-ui-lib"
8
8
  },
9
+ "engines": {
10
+ "node": ">=18"
11
+ },
12
+ "types": "./types/hmcts-opal-frontend-common.d.ts",
9
13
  "peerDependencies": {
10
14
  "@angular/common": "^18.2.0 || ^19.0.0 || ^20.0.0 || ^21.0.0",
11
- "@angular/core": "^18.2.0 || ^19.0.0 || ^20.0.0 || ^21.0.0"
15
+ "@angular/core": "^18.2.0 || ^19.0.0 || ^20.0.0 || ^21.0.0",
16
+ "@angular/forms": "^18.2.0 || ^19.0.0 || ^20.0.0 || ^21.0.0",
17
+ "@angular/platform-browser": "^18.2.0 || ^19.0.0 || ^20.0.0 || ^21.0.0",
18
+ "@angular/router": "^18.2.0 || ^19.0.0 || ^20.0.0 || ^21.0.0",
19
+ "@ngrx/signals": "^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0",
20
+ "rxjs": "^7.8.0"
21
+ },
22
+ "peerDependenciesMeta": {
23
+ "@ngrx/signals": {
24
+ "optional": true
25
+ }
12
26
  },
13
27
  "dependencies": {
28
+ "@microsoft/applicationinsights-web": "^3.3.6",
29
+ "@ministryofjustice/frontend": "^9.0.0",
30
+ "accessible-autocomplete": "^3.0.1",
31
+ "fast-sort": "^3.4.1",
32
+ "govuk-frontend": "^6.0.0",
33
+ "home-office-kit": "^1.2.0",
34
+ "launchdarkly-js-client-sdk": "^3.5.0",
35
+ "luxon": "^3.5.0",
14
36
  "tslib": "^2.3.0"
15
37
  },
16
38
  "sideEffects": false,
39
+ "files": [
40
+ "LICENSE",
41
+ "README.md",
42
+ "package.json",
43
+ "fesm2022/**/*.mjs",
44
+ "types/**/*.d.ts",
45
+ "styles/**/*"
46
+ ],
47
+ "sass": "./styles/styles.scss",
17
48
  "exports": {
18
49
  ".": {
19
50
  "import": "./fesm2022/hmcts-opal-frontend-common.mjs",
@@ -180,9 +211,6 @@
180
211
  "types": "./types/hmcts-opal-frontend-common-components-custom-custom-page-header.d.ts",
181
212
  "default": "./fesm2022/hmcts-opal-frontend-common-components-custom-custom-page-header.mjs"
182
213
  },
183
- "./components/custom/custom-page-header/custom-page-header-action-buttons-container": {
184
- "import": "./fesm2022/hmcts-opal-frontend-common-components-custom-custom-page-header-custom-page-header-action-buttons-container.mjs"
185
- },
186
214
  "./components/custom/custom-horizontal-scroll-pane": {
187
215
  "import": "./fesm2022/hmcts-opal-frontend-common-components-custom-custom-horizontal-scroll-pane.mjs",
188
216
  "types": "./types/hmcts-opal-frontend-common-components-custom-custom-horizontal-scroll-pane.d.ts",
@@ -288,6 +316,11 @@
288
316
  "types": "./types/hmcts-opal-frontend-common-components-govuk-govuk-heading-with-caption.d.ts",
289
317
  "default": "./fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-heading-with-caption.mjs"
290
318
  },
319
+ "./components/govuk/govuk-heading-with-caption/types": {
320
+ "import": "./fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-heading-with-caption-types.mjs",
321
+ "types": "./types/hmcts-opal-frontend-common-components-govuk-govuk-heading-with-caption-types.d.ts",
322
+ "default": "./fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-heading-with-caption-types.mjs"
323
+ },
291
324
  "./components/govuk/govuk-inset-text": {
292
325
  "import": "./fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-inset-text.mjs",
293
326
  "types": "./types/hmcts-opal-frontend-common-components-govuk-govuk-inset-text.d.ts",
@@ -368,14 +401,16 @@
368
401
  "types": "./types/hmcts-opal-frontend-common-components-govuk-govuk-tabs-govuk-tabs-panel.d.ts",
369
402
  "default": "./fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-tabs-govuk-tabs-panel.mjs"
370
403
  },
371
- "./components/govuk/govuk-tags": {
372
- "import": "./fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-tags.mjs"
373
- },
374
404
  "./components/govuk/govuk-task-list": {
375
405
  "import": "./fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-task-list.mjs",
376
406
  "types": "./types/hmcts-opal-frontend-common-components-govuk-govuk-task-list.d.ts",
377
407
  "default": "./fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-task-list.mjs"
378
408
  },
409
+ "./components/govuk/govuk-tag": {
410
+ "import": "./fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-tag.mjs",
411
+ "types": "./types/hmcts-opal-frontend-common-components-govuk-govuk-tag.d.ts",
412
+ "default": "./fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-tag.mjs"
413
+ },
379
414
  "./components/govuk/govuk-text-area": {
380
415
  "import": "./fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-text-area.mjs",
381
416
  "types": "./types/hmcts-opal-frontend-common-components-govuk-govuk-text-area.d.ts",
@@ -506,6 +541,11 @@
506
541
  "types": "./types/hmcts-opal-frontend-common-components-moj-moj-sortable-table.d.ts",
507
542
  "default": "./fesm2022/hmcts-opal-frontend-common-components-moj-moj-sortable-table.mjs"
508
543
  },
544
+ "./components/moj/moj-sub-navigation": {
545
+ "import": "./fesm2022/hmcts-opal-frontend-common-components-moj-moj-sub-navigation.mjs",
546
+ "types": "./types/hmcts-opal-frontend-common-components-moj-moj-sub-navigation.d.ts",
547
+ "default": "./fesm2022/hmcts-opal-frontend-common-components-moj-moj-sub-navigation.mjs"
548
+ },
509
549
  "./components/moj/moj-ticket-panel": {
510
550
  "import": "./fesm2022/hmcts-opal-frontend-common-components-moj-moj-ticket-panel.mjs",
511
551
  "types": "./types/hmcts-opal-frontend-common-components-moj-moj-ticket-panel.d.ts",
@@ -616,6 +656,11 @@
616
656
  "types": "./types/hmcts-opal-frontend-common-pages-dashboard-page-interfaces.d.ts",
617
657
  "default": "./fesm2022/hmcts-opal-frontend-common-pages-dashboard-page-interfaces.mjs"
618
658
  },
659
+ "./pages": {
660
+ "import": "./fesm2022/hmcts-opal-frontend-common-pages.mjs",
661
+ "types": "./types/hmcts-opal-frontend-common-pages.d.ts",
662
+ "default": "./fesm2022/hmcts-opal-frontend-common-pages.mjs"
663
+ },
619
664
  "./pages/routing": {
620
665
  "import": "./fesm2022/hmcts-opal-frontend-common-pages.mjs"
621
666
  },
@@ -654,9 +699,6 @@
654
699
  "types": "./types/hmcts-opal-frontend-common-resolvers-title.d.ts",
655
700
  "default": "./fesm2022/hmcts-opal-frontend-common-resolvers-title.mjs"
656
701
  },
657
- "./services": {
658
- "import": "./fesm2022/hmcts-opal-frontend-common-services.mjs"
659
- },
660
702
  "./services/app-insights-service": {
661
703
  "import": "./fesm2022/hmcts-opal-frontend-common-services-app-insights-service.mjs",
662
704
  "types": "./types/hmcts-opal-frontend-common-services-app-insights-service.d.ts",
@@ -672,6 +714,16 @@
672
714
  "types": "./types/hmcts-opal-frontend-common-services-transfer-state-service.d.ts",
673
715
  "default": "./fesm2022/hmcts-opal-frontend-common-services-transfer-state-service.mjs"
674
716
  },
717
+ "./services/transfer-state-service/interfaces": {
718
+ "import": "./fesm2022/hmcts-opal-frontend-common-services-transfer-state-service-interfaces.mjs",
719
+ "types": "./types/hmcts-opal-frontend-common-services-transfer-state-service-interfaces.d.ts",
720
+ "default": "./fesm2022/hmcts-opal-frontend-common-services-transfer-state-service-interfaces.mjs"
721
+ },
722
+ "./services/transfer-state-service/mocks": {
723
+ "import": "./fesm2022/hmcts-opal-frontend-common-services-transfer-state-service-mocks.mjs",
724
+ "types": "./types/hmcts-opal-frontend-common-services-transfer-state-service-mocks.d.ts",
725
+ "default": "./fesm2022/hmcts-opal-frontend-common-services-transfer-state-service-mocks.mjs"
726
+ },
675
727
  "./services/launch-darkly-service": {
676
728
  "import": "./fesm2022/hmcts-opal-frontend-common-services-launch-darkly-service.mjs",
677
729
  "types": "./types/hmcts-opal-frontend-common-services-launch-darkly-service.d.ts",
@@ -752,9 +804,6 @@
752
804
  "types": "./types/hmcts-opal-frontend-common-services-transformation-service-interfaces.d.ts",
753
805
  "default": "./fesm2022/hmcts-opal-frontend-common-services-transformation-service-interfaces.mjs"
754
806
  },
755
- "./services/transformation-service/mocks": {
756
- "import": "./fesm2022/hmcts-opal-frontend-common-services-transformation-service-mocks.mjs"
757
- },
758
807
  "./services/transformation-service/constants": {
759
808
  "import": "./fesm2022/hmcts-opal-frontend-common-services-transformation-service-constants.mjs",
760
809
  "types": "./types/hmcts-opal-frontend-common-services-transformation-service-constants.d.ts",
@@ -870,6 +919,14 @@
870
919
  "types": "./types/hmcts-opal-frontend-common-validators-valid-value.d.ts",
871
920
  "default": "./fesm2022/hmcts-opal-frontend-common-validators-valid-value.mjs"
872
921
  },
922
+ "./styles": {
923
+ "sass": "./styles/styles.scss",
924
+ "default": "./styles/styles.scss"
925
+ },
926
+ "./styles/styles.scss": {
927
+ "sass": "./styles/styles.scss",
928
+ "default": "./styles/styles.scss"
929
+ },
873
930
  "./types": {
874
931
  "import": "./fesm2022/hmcts-opal-frontend-common-types.mjs",
875
932
  "types": "./types/hmcts-opal-frontend-common-types.d.ts",
@@ -877,30 +934,6 @@
877
934
  },
878
935
  "./package.json": {
879
936
  "default": "./package.json"
880
- },
881
- "./components/govuk/govuk-heading-with-caption/types": {
882
- "types": "./types/hmcts-opal-frontend-common-components-govuk-govuk-heading-with-caption-types.d.ts",
883
- "default": "./fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-heading-with-caption-types.mjs"
884
- },
885
- "./components/govuk/govuk-tag": {
886
- "types": "./types/hmcts-opal-frontend-common-components-govuk-govuk-tag.d.ts",
887
- "default": "./fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-tag.mjs"
888
- },
889
- "./components/moj/moj-sub-navigation": {
890
- "types": "./types/hmcts-opal-frontend-common-components-moj-moj-sub-navigation.d.ts",
891
- "default": "./fesm2022/hmcts-opal-frontend-common-components-moj-moj-sub-navigation.mjs"
892
- },
893
- "./pages": {
894
- "types": "./types/hmcts-opal-frontend-common-pages.d.ts",
895
- "default": "./fesm2022/hmcts-opal-frontend-common-pages.mjs"
896
- },
897
- "./services/transfer-state-service/interfaces": {
898
- "types": "./types/hmcts-opal-frontend-common-services-transfer-state-service-interfaces.d.ts",
899
- "default": "./fesm2022/hmcts-opal-frontend-common-services-transfer-state-service-interfaces.mjs"
900
- },
901
- "./services/transfer-state-service/mocks": {
902
- "types": "./types/hmcts-opal-frontend-common-services-transfer-state-service-mocks.d.ts",
903
- "default": "./fesm2022/hmcts-opal-frontend-common-services-transfer-state-service-mocks.mjs"
904
937
  }
905
938
  },
906
939
  "module": "fesm2022/hmcts-opal-frontend-common.mjs",
@@ -5,19 +5,15 @@
5
5
  ==========================================================================
6
6
  These imports include external styles used across the application.
7
7
  */
8
- @import 'govuk-frontend/dist/govuk/all.scss';
9
- @import '@ministryofjustice/frontend/moj/all.scss';
8
+ @use 'govuk-frontend/dist/govuk/index' as *;
9
+ @use '@ministryofjustice/frontend/moj/all' as moj;
10
+ @use './custom/_custom-section_break.scss';
11
+ @use './custom/custom-scrollable-panes';
12
+
13
+ /* Keep @import until home-office-kit migrates to Sass modules. */
10
14
  @import 'accessible-autocomplete/dist/accessible-autocomplete.min.css';
11
15
  @import 'home-office-kit/sass/_loadingSpinner.scss';
12
16
 
13
- /* ==========================================================================
14
- Custom Component Styles
15
- ==========================================================================
16
- Custom Component Styles authored within the OPAL Frontend Common UI Library.
17
- */
18
- @import './custom/_custom-section_break.scss';
19
- @import './custom/custom-scrollable-panes';
20
-
21
17
  html,
22
18
  body {
23
19
  height: 100%;
@@ -90,11 +86,11 @@ opal-lib-govuk-footer {
90
86
  }
91
87
 
92
88
  .govuk-light-grey-background-colour {
93
- background-color: govuk-colour('light-grey');
89
+ background-color: govuk-colour('black', $variant: 'tint-95');
94
90
  }
95
91
 
96
92
  .govuk-lighter-blue-background-colour {
97
- background-color: govuk-tint(govuk-colour('light-blue'), 50);
93
+ background-color: govuk-tint(govuk-colour('blue', $variant: 'tint-25'), 50);
98
94
  }
99
95
 
100
96
  .govuk-blue-background-colour {
@@ -111,11 +107,11 @@ opal-lib-govuk-footer {
111
107
  }
112
108
 
113
109
  .govuk-dark-blue-text-colour {
114
- color: govuk-colour('dark-blue');
110
+ color: govuk-colour('blue', $variant: 'shade-50');
115
111
  }
116
112
 
117
113
  .govuk-dark-grey-text-colour {
118
- color: govuk-colour('dark-grey');
114
+ color: govuk-colour('black', $variant: 'tint-25');
119
115
  }
120
116
 
121
117
  .govuk-white-text-colour {
@@ -0,0 +1,4 @@
1
+ {
2
+ "module": "../fesm2022/hmcts-opal-frontend-common-types.mjs",
3
+ "typings": "hmcts-opal-frontend-common-types.d.ts"
4
+ }
@@ -1,89 +0,0 @@
1
- # Abstract Nested Form Base Component
2
-
3
- This Angular component extends the `AbstractFormBaseComponent` and is designed for **nested sub-form components** that contribute their own controls and field-error messages into a parent form. It provides helpers for installing/removing nested controls, managing conditional validation, and spreading error definitions into the parent’s error maps.
4
-
5
- ## Table of Contents
6
-
7
- - [Installation](#installation)
8
- - [Usage](#usage)
9
- - [Responsibilities](#responsibilities)
10
- - [Methods](#methods)
11
- - [Error Handling](#error-handling)
12
- - [Testing](#testing)
13
- - [Contributing](#contributing)
14
-
15
- ## Installation
16
-
17
- To use the `AbstractNestedFormBaseComponent`, extend it in a nested sub-form component (e.g. Individuals, Companies, Creditors):
18
-
19
- ```typescript
20
- import { AbstractNestedFormBaseComponent } from '@hmcts/opal-frontend-common/components/abstract/abstract-nested-form-base/abstract-nested-form-base.component';
21
- ```
22
-
23
- ## Usage
24
-
25
- This component is intended to be extended by **child sub-forms** that plug into a parent form component. It ensures consistent handling of control installation, conditional validation, and error-message registration.
26
-
27
- ### Example Usage
28
-
29
- ```ts
30
- @Component({
31
- selector: 'app-child-sub-form',
32
- templateUrl: './child-sub-form.component.html',
33
- })
34
- export class ChildSubFormComponent extends AbstractNestedFormBaseComponent implements OnInit, OnDestroy {
35
- @Input({ required: true }) override form!: FormGroup;
36
-
37
- public override ngOnInit(): void {
38
- this.setupChildForm();
39
- super.ngOnInit();
40
- }
41
-
42
- private setupChildForm(): void {
43
- const controlsGroup = this.buildChildControls();
44
- this.addControlsToNestedFormGroup(controlsGroup);
45
- this.setupConditionalValidation();
46
- this.rePopulateForm(/* values from store */);
47
- this.handleConditionalValidation();
48
- }
49
- }
50
- ```
51
-
52
- ## Responsibilities
53
-
54
- - Install (and later remove) sub-form controls into an existing parent FormGroup.
55
- - Provide ergonomic helpers for common validation flows:
56
- - Toggle `required` validators.
57
- - Reset and revalidate controls/groups.
58
- - Subscribe to conditional validation with automatic teardown.
59
- - Ensure proper cleanup on destroy (removes its own controls).
60
-
61
- ## Methods
62
-
63
- | Method | Parameters | Description |
64
- | ----------------------------------- | -------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
65
- | `addControlsToNestedFormGroup` | `source: FormGroup, target?: FormGroup` | Installs detached controls into target form (defaults to `this.form`). |
66
- | `removeControlsFromNestedFormGroup` | `source: FormGroup, target?: FormGroup` | Removes controls from target whose names are in `source`. |
67
- | `setValidatorPresence` | `control: AbstractControl, validators: ValidatorFn \| ValidatorFn[], present: boolean` | Adds or removes one or more validators and updates validity. |
68
- | `hasValue` | `v: unknown` | Utility to check if a value is considered present (non-null; non-empty string; all non-strings are true). |
69
- | `resetAndValidateControls` | `controls: (AbstractControl \| null)[]` | Resets given controls, clears errors, reapplies validators. |
70
- | `resetAndValidateFormGroup` | `group: FormGroup` | Resets entire group, marks pristine/untouched, updates validity. |
71
- | `subscribeValidation` | `handler: () => void, ...controls` | Subscribes a handler to `valueChanges` of controls with auto-unsubscribe. |
72
-
73
- ## Error Handling
74
-
75
- - Each sub-form is responsible only for its own validators and error state.
76
- - The parent remains the single source of truth for fieldErrors and merges child error templates as needed.
77
- - The abstract ensures cleanup by removing its own controls on destroy.
78
-
79
- ## Testing
80
-
81
- Unit tests should verify:
82
-
83
- - Controls are installed and removed correctly.
84
- - Conditional validators are toggled and errors appear/disappear as expected.
85
- - Lifecycle (`ngOnInit`, `ngOnDestroy`) ensures no leaks.
86
-
87
- ## Contributing
88
-
89
- Contributions should maintain consistency with the base form component and Angular best practices. Add unit tests for any new helpers or changes to validation/error-handling logic.
@@ -1,76 +0,0 @@
1
- # AbstractTableFilterComponent
2
-
3
- The `AbstractTableFilterComponent` is an abstract base class designed for building reactive, filterable table components in Angular. It provides a fully signal-based filtering model using Angular 19's reactivity system, and supports filtering via keyword input and grouped filter tags.
4
-
5
- ## Features
6
-
7
- - Reactive filtering of table data using Angular signals
8
- - Supports both keyword and tag-based filtering
9
- - Exposes computed filtered data for consumption
10
- - Clean override points for matching logic
11
- - Stateless, testable, and reusable foundation for filterable tables
12
-
13
- ## Usage
14
-
15
- Extend this class in your table wrapper component:
16
-
17
- ```ts
18
- @Component({ ... })
19
- export class MyFilterableTableComponent extends AbstractTableFilterComponent {
20
- override matchItemWithFilterOption(item: any, categoryName: string, option: IAbstractTableFilterOption): boolean {
21
- // Optional: customise matching logic per field
22
- return item?.[categoryName] === option.value;
23
- }
24
-
25
- override matchItemWithKeyword(item: any, keyword: string): boolean {
26
- return Object.values(item).some(value =>
27
- value?.toString().toLowerCase().includes(keyword.toLowerCase())
28
- );
29
- }
30
- }
31
- ```
32
-
33
- Set filter and table data like so:
34
-
35
- ```ts
36
- this.setTableData(tableData);
37
- this.filterTags.set(filterCategories);
38
- ```
39
-
40
- ## Signals
41
-
42
- | Signal | Type | Description |
43
- | ------------------------- | -------------------------------------- | --------------------------------------------------------- |
44
- | `displayTableDataSignal` | Signal<IAbstractTableData[]> | The full, unfiltered dataset |
45
- | `filterTags` | Signal<IAbstractTableFilterCategory[]> | Grouped tag filters with selection state |
46
- | `keyword` | Signal<string> | Keyword used for text-based filtering |
47
- | `abstractSelectedTags` | Signal<IAbstractTableFilterCategory[]> | Computed from `filterTags`; not used in applied filtering |
48
- | `filteredTableDataSignal` | Signal<IAbstractTableData[]> | Computed signal of filtered results |
49
-
50
- ## Public Methods
51
-
52
- | Method | Description |
53
- | ----------------------------------------------------- | ----------------------------------------------- |
54
- | `onKeywordChange(keyword)` | Updates the keyword for filtering |
55
- | `onCategoryCheckboxChange(category, value, selected)` | Toggles a specific tag option |
56
- | `removeTag(category, value)` | Deselects a tag based on category and value |
57
- | `clearAllFilters()` | Clears all tag selections and the keyword input |
58
- | `setTableData(data)` | Sets the full table data to be filtered |
59
- | `resetFiltersTo(tags, keyword?)` | Resets filter tags and optionally the keyword |
60
-
61
- ## Protected Methods (Override Points)
62
-
63
- | Method | Description |
64
- | ---------------------------------- | --------------------------------------------------------------------- |
65
- | `matchItemWithFilterOption()` | Allows overriding how tag filters match table data |
66
- | `matchItemWithKeyword()` | Allows overriding how keyword filters apply |
67
- | `getSelectedOptionsFromTags(tags)` | Utility method to extract selected tag options from a tag group array |
68
-
69
- ## Testing
70
-
71
- Unit tests should verify:
72
-
73
- - Data passed to `displayTableDataSignal` is filtered as expected
74
- - `filterTags` updates trigger recomputation of `filteredTableDataSignal`
75
- - Override methods correctly influence filtering behaviour
76
- - Events like `onKeywordChange()` and `clearAllFilters()` produce expected state
@@ -1,74 +0,0 @@
1
- # GOV.UK Tab List Item Component
2
-
3
- This Angular component renders a single list item wrapper with the appropriate GOV.UK class for use within a tabbed
4
- navigation structure. It renders the `<a>` tab link and projects the link text.
5
-
6
- ## Table of Contents
7
-
8
- - [Installation](#installation)
9
- - [Usage](#usage)
10
- - [Testing](#testing)
11
- - [Contributing](#contributing)
12
-
13
- ## Installation
14
-
15
- Each component in the `govuk-tabs` group is exported individually:
16
-
17
- ```typescript
18
- import { GovukTabListItemComponent } from 'opal-frontend-common/components/govuk/govuk-tabs/govuk-tab-list-item';
19
- ```
20
-
21
- ## Usage
22
-
23
- This component renders a list item wrapper with appropriate GOV.UK classes for use within a tabs list.
24
-
25
- You must provide the following inputs:
26
-
27
- - `tabItemFragment` — a unique string fragment to identify this tab
28
- - `activeTabItemFragment` — the currently selected fragment (e.g. from the route or state)
29
- - `tabItemId` — the unique ID for accessibility
30
-
31
- The link text inside the `<a>` is projected using `<ng-content>`.
32
-
33
- ### Example
34
-
35
- ```html
36
- <opal-lib-govuk-tabs-list-item
37
- [tabItemFragment]="'panel-individuals'"
38
- [activeTabItemFragment]="activeTabFragment"
39
- [tabItemId]="'tab-individuals'"
40
- >
41
- Individuals
42
- </opal-lib-govuk-tabs-list-item>
43
- ```
44
-
45
- This results in:
46
-
47
- ```html
48
- <li class="govuk-tabs__list-item govuk-tabs__list-item--selected">
49
- <a
50
- id="tab-individuals"
51
- href="#panel-individuals"
52
- class="govuk-tabs__tab"
53
- role="tab"
54
- aria-controls="panel-individuals"
55
- aria-selected="true"
56
- >
57
- Individuals
58
- </a>
59
- </li>
60
- ```
61
-
62
- The `govuk-tabs__list-item--selected` class is applied automatically when `tabItemFragment` matches `activeTabItemFragment`.
63
-
64
- ## Testing
65
-
66
- Unit tests for this component can be found in the `govuk-tab-list-item.component.spec.ts` file. To run the tests:
67
-
68
- ```bash
69
- ng test
70
- ```
71
-
72
- ## Contributing
73
-
74
- Feel free to submit issues or pull requests to improve this component.