This is an automated email from the ASF dual-hosted git repository.
github-actions[bot] pushed a change to branch chore/fineract-spec-sync
in repository https://gitbox.apache.org/repos/asf/fineract-backoffice-ui.git
omit 5bccb62 chore(api): sync the Fineract OpenAPI spec and regenerate the
client
add 89239b0 fix: record maker-checker task rejections
add 939e142 Merge pull request #415 from
LE0-Lin/fix/maker-checker-rejection
add 08e4297 test: migrate errors spec from Karma to Vitest
add 1f06dc1 Merge pull request #417 from
kevinpei123/test/errors-vitest-migration
add 013b0e1 chore(api): sync the Fineract OpenAPI spec and regenerate the
client
add 2292d75 feat(layout): orient the user with a breadcrumb trail and
Alt+key shortcuts
add 24372e8 feat(clients): pace client creation through a three-step
wizard
add 6e508f1 feat(organization): report the loan portfolio by office and
product
add 7b912c4 feat(accounting): filter journal entries by office, GL
account and entry type
add a7ca2a4 feat(products): undo a savings approval, and show deposit
charges and rate chart
add 63e576b feat(working-capital): charges, rate changes, amortization
and delinquency tags
add 4a6aeb8 feat(system): widen bulk import, fix its chart-of-accounts
template, run jobs in bulk
add c082fc5 feat(tasks): group work queues by office, and reject
reschedule requests
add 2cbed3d feat(security): export the audit log to CSV
add 21273f9 test: raise the Vitest timeout above Angular's cold TestBed
compile
add 715f1c1 Merge pull request #418 from
Aman-Mittal/feat/servicing-and-navigation-gaps
add a141d6a fix(organization): title the loan portfolio summary route
add a328009 Merge pull request #425 from
Aman-Mittal/fix/route-titles-and-polish
add a8fe8ed ci: verify commits against GitHub's own verdict, and explain
failures on the PR
add 505f52d Merge pull request #430 from
Aman-Mittal/ci/harden-signed-commits-and-welcome
add 39aa69a fix(layout): clear the render-time interval when the header
is destroyed
add 411bff5 Merge pull request #426 from
slegarraga/fix/header-render-time-interval-leak
add 8ff8846 test(e2e): await submit enabled before clicking the
loan-product form
add f191194 Merge pull request #429 from
slegarraga/fix/e2e-down-payment-flake
add a45d23d fix(accounting): add route titles
add 77928e2 Merge pull request #431 from
XonkelX/codex/accounting-route-titles
add 87e9ce1 fix(organization): add route titles
add 81fb823 Merge pull request #432 from
WilliamK112/fix/organization-route-titles
add df05b66 test: migrate organization and working capital specs to Vitest
add e1f6f91 Merge pull request #433 from
zhangxinyao88/codex/issue-407-vitest-migration
add 3737dde fix(security): add route titles so breadcrumbs and tab titles
appear
add cff25d1 Merge pull request #427 from
slegarraga/feat/security-route-titles
add c241688 build(deps): bump github/codeql-action/analyze from 4.37.6 to
4.37.7
add f63dfca Merge pull request #438 from
apache/dependabot/github_actions/github/codeql-action/analyze-4.37.7
add a310868 build(deps): bump github/codeql-action/init from 4.37.6 to
4.37.7
add cdda3d7 Merge pull request #439 from
apache/dependabot/github_actions/github/codeql-action/init-4.37.7
add 341b640 feat(config): customize branding, navigation and labels from
a deployment overlay
add d5c8a59 fix(branding): apply the deployment's dark palette, strings
and sign-in screen
add 98453d5 docs: note that branding covers the sign-in screen
add f852fcd fix(branding): keep a deployment's light colours out of the
dark palette
add 4dadd44 Merge pull request #437 from
Aman-Mittal/feat/deployment-customization-overlay
add 79f78b3 test(branding): prove the token allow-list holds as a CSS
injection guard
add 00ebbd3 Merge pull request #440 from
Aman-Mittal/test/branding-css-injection-guard
add 94cd2d7 test: migrate organization and working capital specs to vitest
add dcb7e94 test: migrate organization and working capital tests
add 42af219 test: migrate organization and working capital tests
add a1883b4 test: migrate organization and working capital tests
add 24740f3 test: migrate organization and working capital tests
add 4a9991f Merge pull request #435 from
tarun-tarun143/fix/migrate-org-working-capital-tests
add d6badb6 feat(layout): make the shell usable on a phone
add f5ef558 feat(layout): give the phone its own header rather than a
squeezed desktop one
add e195dea fix(layout): derive the page title without writing a signal
during change detection
add e38acde fix(layout): expand the phone search inside the bar, not over
the page
add fa553bc Merge pull request #443 from
Aman-Mittal/feat/mobile-responsive-shell
add 5214202 test: migrate accounting specs to Vitest
add c2a1b3b test: use translation testing adapter in accounting specs
add b64322d Merge pull request #441 from
zhangxinyao88/codex/issue-405-accounting-vitest
add 0df5472 chore(api): sync the Fineract OpenAPI spec and regenerate the
client
This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version. This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:
* -- * -- B -- O -- O -- O (5bccb62)
\
N -- N -- N refs/heads/chore/fineract-spec-sync (0df5472)
You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.
Any revisions marked "omit" are not gone; other references still
refer to them. Any revisions marked "discard" are gone forever.
No new revisions were added by this update.
Summary of changes:
.github/scripts/check-commit-signatures.js | 292 +++++++++++
.github/scripts/welcome-contributor.js | 165 ++++++
.github/workflows/ci.yml | 20 +
.github/workflows/codeql.yml | 4 +-
.github/workflows/e2e.yml | 64 ++-
.github/workflows/signed-commit.yml | 60 ++-
.github/workflows/welcome-contributor.yml | 71 +++
.gitignore | 10 +
.rat-excludes | 6 +
DOCS/CUSTOMIZATION.md | 211 ++++++++
DOCS/MOBILE.md | 105 ++++
DOCS/examples/branding-config.example.json | 57 +++
deploy/entrypoint.sh | 30 +-
deploy/nginx.conf.template | 26 +
e2e/branded-deployment.spec.ts | 263 ++++++++++
...e-tour-dashboard.spec.ts => breadcrumb.spec.ts} | 39 +-
e2e/client-transfer.spec.ts | 2 +
e2e/client.spec.ts | 15 +-
e2e/deployment-customization.spec.ts | 395 +++++++++++++++
e2e/e2e-journey.spec.ts | 91 +++-
e2e/full-demo.spec.ts | 2 +
e2e/functional-coverage.spec.ts | 75 ++-
e2e/group-membership.spec.ts | 2 +
...ashboard.spec.ts => keyboard-shortcuts.spec.ts} | 50 +-
e2e/loan-lifecycle.spec.ts | 2 +
e2e/loan-portfolio-summary.spec.ts | 178 +++++++
e2e/loan-product-down-payment.spec.ts | 25 +-
e2e/mobile-shell.spec.ts | 282 +++++++++++
e2e/rbac-feature-flag.spec.ts | 22 +-
e2e/scheduler-jobs.spec.ts | 156 ++++++
e2e/working-capital-loan-actions.spec.ts | 199 +++++++-
eslint-suppressions.json | 160 +-----
karma-baseline.json | 36 --
package.json | 6 +
playwright.config.ts | 22 +-
public/api/fineract.json | 113 ++---
public/api/fineract.provenance.json | 16 +-
public/schema/config.schema.json | 200 ++++++++
scripts/check-branding-path.mjs | 59 +++
scripts/check-nav-ids.mjs | 146 ++++++
scripts/check-reference-downstream.mjs | 201 ++++++++
scripts/check-responsive.mjs | 141 ++++++
scripts/make-branding-demo.mjs | 109 ++++
scripts/nav-ids.json | 140 +++++
scripts/pr-comment-actions.test.mjs | 312 ++++++++++++
scripts/verify-signed-commits.sh | 14 +
src/app/api/.openapi-generator/FILES | 10 +-
src/app/api/api/floatingRates.service.ts | 54 +-
...tesResponse.ts => floatingRateCreateRequest.ts} | 14 +-
...teResponse.ts => floatingRateCreateResponse.ts} | 2 +-
src/app/api/model/floatingRatePeriodRequest.ts | 4 +-
...RateRequest.ts => floatingRateUpdateRequest.ts} | 2 +-
...teResponse.ts => floatingRateUpdateResponse.ts} | 2 +-
src/app/api/model/models.ts | 10 +-
src/app/api/model/postFloatingRatesRatePeriods.ts | 34 --
src/app/api/model/postFloatingRatesResponse.ts | 34 --
src/app/api/model/putFloatingRatesChanges.ts | 32 --
.../putFloatingRatesFloatingRateIdResponse.ts | 36 --
src/app/app.config.spec.ts | 23 +-
src/app/app.config.ts | 46 +-
src/app/app.routes.ts | 12 +-
src/app/core/adapters/api/api-surface.json | 73 ++-
.../adapters/i18n/deployment-translate.loader.ts | 92 ++++
src/app/core/router/translated-title.strategy.ts | 9 +-
src/app/core/services/branding.service.test.ts | 176 +++++++
src/app/core/services/branding.service.ts | 430 ++++++++++++++++
src/app/core/services/config.service.spec.ts | 87 +++-
src/app/core/services/config.service.ts | 199 +++++++-
src/app/core/services/nav-composition.test.ts | 222 ++++++++
src/app/core/services/nav-composition.ts | 302 +++++++++++
.../services/navigation-config.service.test.ts | 27 +-
src/app/core/services/navigation-config.service.ts | 260 +++++++++-
src/app/core/services/sidebar.service.ts | 48 +-
src/app/core/services/viewport.service.ts | 67 +++
src/app/core/utils/csv.test.ts | 66 +++
src/app/core/utils/csv.ts | 40 ++
...s => accounting-closure-form.component.test.ts} | 24 +-
... => accounting-closures-list.component.test.ts} | 23 +-
src/app/features/accounting/accounting.routes.ts | 28 +
...nent.spec.ts => charges-list.component.test.ts} | 23 +-
...spec.ts => frequent-postings.component.test.ts} | 35 +-
.../journal-entries-list.component.spec.ts | 70 ---
.../journal-entries-list.component.test.ts | 141 ++++++
.../accounting/journal-entries-list.component.ts | 315 ++++++++++--
...pec.ts => journal-entry-form.component.test.ts} | 40 +-
...pec.ts => journal-entry-view.component.test.ts} | 37 +-
....spec.ts => opening-balances.component.test.ts} | 40 +-
...provisioning-categories-form.component.test.ts} | 18 +-
...provisioning-categories-list.component.test.ts} | 33 +-
...> provisioning-criteria-form.component.test.ts} | 28 +-
...> provisioning-criteria-list.component.test.ts} | 33 +-
...=> provisioning-entries-form.component.test.ts} | 16 +-
...=> provisioning-entries-list.component.test.ts} | 18 +-
...nent.spec.ts => run-accruals.component.test.ts} | 14 +-
.../features/clients/client-form.component.spec.ts | 78 +++
src/app/features/clients/client-form.component.ts | 124 ++++-
src/app/features/clients/client-view.component.ts | 13 -
.../kyc/client-document-form.component.spec.ts | 5 +-
.../clients/kyc/client-document-form.component.ts | 4 +
...ent.spec.ts => access-denied.component.test.ts} | 2 +-
.../asset-owner-view/asset-owner-view.component.ts | 12 -
src/app/features/login/login.component.ts | 35 +-
... account-number-formats-list.component.test.ts} | 29 +-
...mponent.spec.ts => fund-form.component.test.ts} | 45 +-
...ponent.spec.ts => funds-list.component.test.ts} | 18 +-
...spec.ts => group-levels-list.component.test.ts} | 49 +-
.../loan-portfolio-summary.component.test.ts | 185 +++++++
.../loan-portfolio-summary.component.ts | 561 +++++++++++++++++++++
...onent.spec.ts => office-form.component.test.ts} | 90 ++--
...nent.spec.ts => offices-list.component.test.ts} | 24 +-
.../features/organization/organization.routes.ts | 30 ++
...spec.ts => payment-type-form.component.test.ts} | 20 +-
...pec.ts => payment-types-list.component.test.ts} | 52 +-
...ponent.spec.ts => staff-form.component.test.ts} | 72 ++-
...ponent.spec.ts => staff-list.component.test.ts} | 24 +-
.../deposit-account-view.component.spec.ts | 136 ++++-
.../products/deposit-account-view.component.ts | 253 +++++++++-
...ings-account-transaction-form.component.test.ts | 124 +++++
.../savings-account-transaction-form.component.ts | 106 ++--
.../savings-account-view.component.spec.ts | 52 ++
.../products/savings-account-view.component.ts | 42 ++
...savings-undo-approval-dialog.component.test.ts} | 16 +-
.../savings-undo-approval-dialog.component.ts} | 32 +-
.../audit-logs/audit-logs-list.component.spec.ts | 18 +
.../audit-logs/audit-logs-list.component.ts | 21 +
src/app/features/security/security.routes.ts | 7 +
.../bulk-import/bulk-import.component.spec.ts | 161 +++++-
.../system/bulk-import/bulk-import.component.ts | 262 +++++++++-
.../scheduler-jobs-list.component.spec.ts | 64 ++-
.../scheduler-jobs-list.component.ts | 83 ++-
.../checker-inbox/checker-inbox.component.test.ts | 121 +++++
.../tasks/checker-inbox/checker-inbox.component.ts | 40 +-
.../work-queues/work-queues.component.spec.ts | 45 +-
.../tasks/work-queues/work-queues.component.ts | 324 ++++++++----
...nt.spec.ts => wc-breach-form.component.test.ts} | 22 +-
...nt.spec.ts => wc-breach-list.component.test.ts} | 30 +-
...c.ts => wc-loan-product-form.component.test.ts} | 24 +-
....ts => wc-loan-products-list.component.test.ts} | 30 +-
...ec.ts => wc-loan-action-form.component.test.ts} | 144 +++++-
.../loans/wc-loan-action-form.component.ts | 164 +++++-
...st.ts => wc-loan-charge-form.component.test.ts} | 79 +--
.../loans/wc-loan-charge-form.component.ts} | 89 ++--
...nent.spec.ts => wc-loan-form.component.test.ts} | 95 +++-
.../loans/wc-loan-view.component.spec.ts | 307 -----------
.../loans/wc-loan-view.component.test.ts | 532 +++++++++++++++++++
.../loans/wc-loan-view.component.ts | 264 +++++++++-
...ent.spec.ts => wc-loans-list.component.test.ts} | 18 +-
...ec.ts => wc-near-breach-form.component.test.ts} | 64 ++-
...ec.ts => wc-near-breach-list.component.test.ts} | 94 +++-
.../working-capital/working-capital.routes.ts | 7 +
src/app/layout/breadcrumb.component.test.ts | 91 ++++
src/app/layout/breadcrumb.component.ts | 90 ++++
src/app/layout/breadcrumb.test.ts | 80 +++
src/app/layout/breadcrumb.ts | 55 ++
src/app/layout/header.component.spec.ts | 33 +-
src/app/layout/header.component.ts | 479 +++++++++++++++---
src/app/layout/keyboard-shortcuts.test.ts | 102 ++++
src/app/layout/keyboard-shortcuts.ts | 75 +++
src/app/layout/main-layout.component.spec.ts | 50 +-
src/app/layout/main-layout.component.ts | 76 ++-
src/app/layout/sidebar.component.ts | 167 +++++-
.../components/data-table/data-table.component.ts | 55 +-
.../components/stepper/stepper.component.test.ts | 77 +++
.../shared/components/stepper/stepper.component.ts | 119 +++++
src/app/shared/index.ts | 1 +
src/assets/i18n/en.json | 120 ++++-
src/assets/i18n/hi.json | 14 +-
src/assets/i18n/ko.json | 14 +-
src/main.ts | 49 +-
src/styles/_common.scss | 94 ++++
src/styles/_ionic-theme.scss | 16 +-
vitest.config.ts | 8 +
172 files changed, 13080 insertions(+), 2070 deletions(-)
create mode 100644 .github/scripts/check-commit-signatures.js
create mode 100644 .github/scripts/welcome-contributor.js
create mode 100644 .github/workflows/welcome-contributor.yml
create mode 100644 DOCS/CUSTOMIZATION.md
create mode 100644 DOCS/MOBILE.md
create mode 100644 DOCS/examples/branding-config.example.json
create mode 100644 e2e/branded-deployment.spec.ts
copy e2e/{guidance-tour-dashboard.spec.ts => breadcrumb.spec.ts} (60%)
create mode 100644 e2e/deployment-customization.spec.ts
copy e2e/{guidance-tour-dashboard.spec.ts => keyboard-shortcuts.spec.ts} (62%)
create mode 100644 e2e/loan-portfolio-summary.spec.ts
create mode 100644 e2e/mobile-shell.spec.ts
create mode 100644 e2e/scheduler-jobs.spec.ts
create mode 100644 public/schema/config.schema.json
create mode 100644 scripts/check-branding-path.mjs
create mode 100644 scripts/check-nav-ids.mjs
create mode 100644 scripts/check-reference-downstream.mjs
create mode 100644 scripts/check-responsive.mjs
create mode 100644 scripts/make-branding-demo.mjs
create mode 100644 scripts/nav-ids.json
create mode 100644 scripts/pr-comment-actions.test.mjs
rename src/app/api/model/{getFloatingRatesResponse.ts =>
floatingRateCreateRequest.ts} (82%)
copy src/app/api/model/{hookDeleteResponse.ts =>
floatingRateCreateResponse.ts} (95%)
rename src/app/api/model/{floatingRateRequest.ts =>
floatingRateUpdateRequest.ts} (96%)
copy src/app/api/model/{hookUpdateResponse.ts =>
floatingRateUpdateResponse.ts} (95%)
delete mode 100644 src/app/api/model/postFloatingRatesRatePeriods.ts
delete mode 100644 src/app/api/model/postFloatingRatesResponse.ts
delete mode 100644 src/app/api/model/putFloatingRatesChanges.ts
delete mode 100644 src/app/api/model/putFloatingRatesFloatingRateIdResponse.ts
create mode 100644 src/app/core/adapters/i18n/deployment-translate.loader.ts
create mode 100644 src/app/core/services/branding.service.test.ts
create mode 100644 src/app/core/services/branding.service.ts
create mode 100644 src/app/core/services/nav-composition.test.ts
create mode 100644 src/app/core/services/nav-composition.ts
create mode 100644 src/app/core/services/viewport.service.ts
create mode 100644 src/app/core/utils/csv.test.ts
create mode 100644 src/app/core/utils/csv.ts
rename src/app/features/accounting/{accounting-closure-form.component.spec.ts
=> accounting-closure-form.component.test.ts} (79%)
rename src/app/features/accounting/{accounting-closures-list.component.spec.ts
=> accounting-closures-list.component.test.ts} (81%)
rename src/app/features/accounting/charges/{charges-list.component.spec.ts =>
charges-list.component.test.ts} (83%)
rename src/app/features/accounting/{frequent-postings.component.spec.ts =>
frequent-postings.component.test.ts} (77%)
delete mode 100644
src/app/features/accounting/journal-entries-list.component.spec.ts
create mode 100644
src/app/features/accounting/journal-entries-list.component.test.ts
rename src/app/features/accounting/{journal-entry-form.component.spec.ts =>
journal-entry-form.component.test.ts} (74%)
rename src/app/features/accounting/{journal-entry-view.component.spec.ts =>
journal-entry-view.component.test.ts} (83%)
rename src/app/features/accounting/{opening-balances.component.spec.ts =>
opening-balances.component.test.ts} (79%)
rename
src/app/features/accounting/provisioning-categories/{provisioning-categories-form.component.spec.ts
=> provisioning-categories-form.component.test.ts} (83%)
rename
src/app/features/accounting/provisioning-categories/{provisioning-categories-list.component.spec.ts
=> provisioning-categories-list.component.test.ts} (78%)
rename
src/app/features/accounting/provisioning-criteria/{provisioning-criteria-form.component.spec.ts
=> provisioning-criteria-form.component.test.ts} (86%)
rename
src/app/features/accounting/provisioning-criteria/{provisioning-criteria-list.component.spec.ts
=> provisioning-criteria-list.component.test.ts} (78%)
rename
src/app/features/accounting/provisioning-entries/{provisioning-entries-form.component.spec.ts
=> provisioning-entries-form.component.test.ts} (83%)
rename
src/app/features/accounting/provisioning-entries/{provisioning-entries-list.component.spec.ts
=> provisioning-entries-list.component.test.ts} (81%)
rename
src/app/features/accounting/run-accruals/{run-accruals.component.spec.ts =>
run-accruals.component.test.ts} (84%)
rename src/app/features/errors/{access-denied.component.spec.ts =>
access-denied.component.test.ts} (99%)
rename
src/app/features/organization/account-number-formats/{account-number-formats-list.component.spec.ts
=> account-number-formats-list.component.test.ts} (81%)
rename src/app/features/organization/funds/{fund-form.component.spec.ts =>
fund-form.component.test.ts} (74%)
rename src/app/features/organization/funds/{funds-list.component.spec.ts =>
funds-list.component.test.ts} (82%)
rename
src/app/features/organization/group-levels/{group-levels-list.component.spec.ts
=> group-levels-list.component.test.ts} (59%)
create mode 100644
src/app/features/organization/loan-portfolio-summary/loan-portfolio-summary.component.test.ts
create mode 100644
src/app/features/organization/loan-portfolio-summary/loan-portfolio-summary.component.ts
rename src/app/features/organization/offices/{office-form.component.spec.ts =>
office-form.component.test.ts} (74%)
rename src/app/features/organization/offices/{offices-list.component.spec.ts
=> offices-list.component.test.ts} (84%)
rename
src/app/features/organization/payment-types/{payment-type-form.component.spec.ts
=> payment-type-form.component.test.ts} (81%)
rename
src/app/features/organization/payment-types/{payment-types-list.component.spec.ts
=> payment-types-list.component.test.ts} (76%)
rename src/app/features/organization/staff/{staff-form.component.spec.ts =>
staff-form.component.test.ts} (81%)
rename src/app/features/organization/staff/{staff-list.component.spec.ts =>
staff-list.component.test.ts} (80%)
create mode 100644
src/app/features/products/savings-account-transaction-form.component.test.ts
copy src/app/features/{loans/loan-undo-approval-dialog.component.spec.ts =>
products/savings-undo-approval-dialog.component.test.ts} (80%)
copy src/app/features/{loans/loan-undo-approval-dialog.component.ts =>
products/savings-undo-approval-dialog.component.ts} (65%)
create mode 100644
src/app/features/tasks/checker-inbox/checker-inbox.component.test.ts
rename
src/app/features/working-capital/breach/{wc-breach-form.component.spec.ts =>
wc-breach-form.component.test.ts} (82%)
rename
src/app/features/working-capital/breach/{wc-breach-list.component.spec.ts =>
wc-breach-list.component.test.ts} (79%)
rename
src/app/features/working-capital/loan-products/{wc-loan-product-form.component.spec.ts
=> wc-loan-product-form.component.test.ts} (82%)
rename
src/app/features/working-capital/loan-products/{wc-loan-products-list.component.spec.ts
=> wc-loan-products-list.component.test.ts} (80%)
rename
src/app/features/working-capital/loans/{wc-loan-action-form.component.spec.ts
=> wc-loan-action-form.component.test.ts} (50%)
copy
src/app/features/working-capital/loans/{wc-near-breach-action-form.component.test.ts
=> wc-loan-charge-form.component.test.ts} (53%)
copy src/app/features/{loans/charges/loan-charge-form.component.ts =>
working-capital/loans/wc-loan-charge-form.component.ts} (65%)
rename src/app/features/working-capital/loans/{wc-loan-form.component.spec.ts
=> wc-loan-form.component.test.ts} (60%)
delete mode 100644
src/app/features/working-capital/loans/wc-loan-view.component.spec.ts
create mode 100644
src/app/features/working-capital/loans/wc-loan-view.component.test.ts
rename src/app/features/working-capital/loans/{wc-loans-list.component.spec.ts
=> wc-loans-list.component.test.ts} (84%)
rename
src/app/features/working-capital/near-breach/{wc-near-breach-form.component.spec.ts
=> wc-near-breach-form.component.test.ts} (59%)
rename
src/app/features/working-capital/near-breach/{wc-near-breach-list.component.spec.ts
=> wc-near-breach-list.component.test.ts} (64%)
create mode 100644 src/app/layout/breadcrumb.component.test.ts
create mode 100644 src/app/layout/breadcrumb.component.ts
create mode 100644 src/app/layout/breadcrumb.test.ts
create mode 100644 src/app/layout/breadcrumb.ts
create mode 100644 src/app/layout/keyboard-shortcuts.test.ts
create mode 100644 src/app/layout/keyboard-shortcuts.ts
create mode 100644 src/app/shared/components/stepper/stepper.component.test.ts
create mode 100644 src/app/shared/components/stepper/stepper.component.ts