@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.
- package/LICENSE +21 -0
- package/README.md +54 -8
- package/package.json +71 -38
- package/styles/styles.scss +10 -14
- package/types/package.json +4 -0
- package/components/abstract/abstract-nested-form-base/README.md +0 -89
- package/components/abstract/abstract-table-filter/README.md +0 -76
- package/components/govuk/govuk-tabs/govuk-tabs-list-item/README.md +0 -74
- package/components/govuk/govuk-tabs/govuk-tabs-panel/README.md +0 -52
- package/components/moj/moj-filter/moj-filter-panel/moj-filter-panel-header/README.md +0 -43
- package/components/moj/moj-filter/moj-filter-panel/moj-filter-panel-option/README.md +0 -81
- package/components/moj/moj-filter/moj-filter-panel/moj-filter-panel-option/moj-filter-panel-option-form-group-item/README.md +0 -53
- package/components/moj/moj-filter/moj-filter-panel/moj-filter-panel-option/moj-filter-panel-option-form-group-keyword/README.md +0 -59
- package/components/moj/moj-filter/moj-filter-panel/moj-filter-panel-selected/README.md +0 -55
- package/components/moj/moj-filter/moj-filter-panel/moj-filter-panel-selected/moj-filter-panel-selected-tag/README.md +0 -52
- package/fesm2022/hmcts-opal-frontend-common-access-denied.component-B14ZVnte.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-account-created.component-DMjRN8Y1.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-form-alias-base-interfaces.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-form-alias-base.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-form-array-base-interfaces.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-form-array-base.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-form-array-parent-base.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-form-array-removal-base-interfaces.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-form-array-removal-base.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-form-base-interfaces.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-form-base.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-form-parent-base.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-nested-form-base.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-sortable-table-interfaces.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-sortable-table-pagination.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-sortable-table-types.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-sortable-table.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-tab-data.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-table-filter-interfaces.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-table-filter-types.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-abstract-table-filter.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-abstract-interfaces.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-alphagov-alphagov-accessible-autocomplete-interfaces.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-alphagov-alphagov-accessible-autocomplete.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-account-information-custom-account-information-item-custom-account-information-item-label.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-account-information-custom-account-information-item-custom-account-information-item-value.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-account-information-custom-account-information-item.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-account-information.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-action-links.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-horizontal-scroll-pane.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-page-header.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-scrollable-panes-custom-scrollable-panes-inner-pane.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-scrollable-panes.mjs.map +0 -1
- 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
- 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
- package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-summary-metric-bar-custom-summary-metric-bar-item.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-summary-metric-bar.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-vertical-scroll-pane-custom-vertical-scroll-pane-inner-pane.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-vertical-scroll-pane-custom-vertical-scroll-pane-outer-pane.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-custom-custom-vertical-scroll-pane.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-accordion.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-back-link.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-button.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-cancel-link.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-checkboxes-interfaces.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-checkboxes.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-date-input-interfaces.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-date-input.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-details.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-error-summary.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-footer-interfaces.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-footer.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-header-interfaces.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-header.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-heading-with-caption-types.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-heading-with-caption.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-inset-text.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-list-govuk-list-link.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-list.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-notification-banner.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-pagination.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-panel.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-radio-interfaces.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-radio.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-select-interfaces.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-select.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-summary-card-list.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-summary-list.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-table.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-tabs-govuk-tabs-list-item.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-tabs-govuk-tabs-panel.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-tabs.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-tag.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-task-list.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-text-area.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-text-input-prefix-suffix.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-govuk-text-input.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-govuk-helpers.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-hod-hod-loading-spinner.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-alert.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-badge.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-button-menu-moj-button-menu-item.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-button-menu.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-date-picker.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-filter-moj-filter-panel-moj-filter-panel-header.mjs.map +0 -1
- 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
- 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
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-filter-moj-filter-panel-moj-filter-panel-option.mjs.map +0 -1
- 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
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-filter-moj-filter-panel-moj-filter-panel-selected.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-filter-moj-filter-panel.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-filter.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-header-interfaces.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-header.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-inset-text.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-notification-badge.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-page-header.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-pagination.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-primary-navigation.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-sortable-table.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-sub-navigation.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-ticket-panel.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-components-moj-moj-timeline.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-concurrency-failure.component-CQS1DbQQ.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-constants.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-directives-capitalisation.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-directives-govuk-button.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-directives-moj-multi-select.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-guards-account.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-guards-auth.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-guards-can-deactivate-interfaces.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-guards-can-deactivate-types.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-guards-can-deactivate.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-guards-has-flow-state.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-guards-has-url-state-match.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-guards-helpers.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-guards-route-permissions.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-guards-signed-in.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-guards-types.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-interceptors-http-error-constants.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-interceptors-http-error-interfaces.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-interceptors-http-error.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-internal-server-error.component-lCp06yT-.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-pages-access-denied.component-B14ZVnte.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-pages-account-created.component-DMjRN8Y1.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-pages-concurrency-failure.component-CQS1DbQQ.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-pages-dashboard-page-interfaces.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-pages-dashboard-page.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-pages-internal-server-error.component-lCp06yT-.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-pages-permission-denied.component-DYa3iGTj.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-pages-routing-constants.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-pages-routing-interfaces.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-pages-sign-in-stub.component-B87UHy9K.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-pages-sign-in.component-Ctc9YosM.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-pages.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-permission-denied.component-DYa3iGTj.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-pipes-date-format.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-pipes-days-ago.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-pipes-monetary.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-pipes-national-insurance.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-resolvers-title.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-services-app-initializer-service.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-services-app-insights-service.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-services-auth-service-constants.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-services-auth-service-interfaces.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-services-auth-service.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-services-date-service-interfaces.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-services-date-service.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-services-launch-darkly-service-mocks.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-services-launch-darkly-service.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-services-opal-user-service-interfaces.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-services-opal-user-service-mocks.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-services-opal-user-service.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-services-permissions-service.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-services-session-service-constants.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-services-session-service-interfaces.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-services-session-service-mocks.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-services-session-service.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-services-sort-service-interfaces.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-services-sort-service.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-services-transfer-state-service-interfaces.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-services-transfer-state-service-mocks.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-services-transfer-state-service.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-services-transformation-service-constants.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-services-transformation-service-interfaces.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-services-transformation-service.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-services-utils-service.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-sign-in-stub.component-B87UHy9K.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-sign-in.component-BjLHMHMm.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-stores-global-constants.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-stores-global-interfaces.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-stores-global-types.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-stores-global.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-types.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-validators-amount.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-validators-date-after-year.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-validators-date-before.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-validators-date-of-birth.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-validators-future-date.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-validators-invalid-value.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-validators-national-insurance-number.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-validators-optional-max-length.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-validators-optional-valid-date.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-validators-optional-valid-telephone.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-validators-over-eighteen.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-validators-past-date.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-validators-pattern-validator.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common-validators-valid-value.mjs.map +0 -1
- package/fesm2022/hmcts-opal-frontend-common.mjs.map +0 -1
- 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/)
|
|
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
|
|
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
|
|
99
|
+
yarn pack:local
|
|
65
100
|
```
|
|
66
101
|
|
|
67
|
-
|
|
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
|
|
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
|
|
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.
|
|
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",
|
package/styles/styles.scss
CHANGED
|
@@ -5,19 +5,15 @@
|
|
|
5
5
|
==========================================================================
|
|
6
6
|
These imports include external styles used across the application.
|
|
7
7
|
*/
|
|
8
|
-
@
|
|
9
|
-
@
|
|
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('
|
|
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('
|
|
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('
|
|
110
|
+
color: govuk-colour('blue', $variant: 'shade-50');
|
|
115
111
|
}
|
|
116
112
|
|
|
117
113
|
.govuk-dark-grey-text-colour {
|
|
118
|
-
color: govuk-colour('
|
|
114
|
+
color: govuk-colour('black', $variant: 'tint-25');
|
|
119
115
|
}
|
|
120
116
|
|
|
121
117
|
.govuk-white-text-colour {
|
|
@@ -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.
|