Commit Graph

540 Commits

Author SHA1 Message Date
Nati
21ffca9094 Merge branch 'WorkflowChange' of github.com:Tria-plc/emaui into WorkflowChange 2026-08-21 18:20:02 +00:00
Nati
9f4954b5e8 UI 2026-08-21 18:17:52 +00:00
Nati Nigussie
584dc458b8 Merge pull request #20 from Tria-plc/feature/exam-attempt-domain
Feature/exam attempt domain
2026-08-21 21:08:13 +03:00
nati14575
53b8993c72 Merge branch 'WorkflowChange' of https://github.com/Tria-plc/emaui into feature/exam-attempt-domain 2026-08-21 21:04:34 +03:00
Nati
56cb22c7bd Merge branch 'ui_ux' of github.com:Tria-plc/emaui into WorkflowChange 2026-08-21 17:36:09 +00:00
Fistum
81d3ebdcd9 feat(dashboard): enhance dashboard with stat tiles for better data visualization 2026-08-21 13:33:07 +00:00
Fistum
62492e957b backoffice 2026-08-21 13:09:40 +00:00
Fistum
6b5b99f42d ui chnages 2026-08-21 11:16:22 +00:00
fitse-yotor
8f6ebdafb1 feat(a11y): add skip link for improved navigation accessibility 2026-08-21 12:34:00 +03:00
fitse-yotor
e74ef1c672 fix(i18n): render Amharic in an Ethiopic font
Both themes set `fontFamily: Inter`, and Inter carries no Ge'ez glyphs. So
every Amharic string in a bilingual system — 45-73 KB of locale data per app —
has been rendering in whatever font the OS happened to substitute: different on
Windows, macOS and Android, and matching neither the design nor each other.

Noto Sans Ethiopic goes directly after Inter in one stack rather than being
swapped in under `[lang='am']`. Browsers fall back per glyph, not per element,
so a single stack renders Latin in Inter and Ge'ez in Noto automatically —
including within one string. That is the case that matters here: a registry is
full of mixed-script lines like an Amharic name beside a Latin IMO number, and
a language-scoped swap renders half of those in the wrong face.

Heading line-heights go up a step at the same time. Ge'ez has taller ascenders
and deeper descenders than Latin, so headings set to Inter's natural leading
clip once Ethiopic is actually being rendered. This was deliberately held back
from the theme refactor so that change could prove it altered nothing.

The gallery gains Ge'ez headings and a mixed-script line, so the baselines
cover the case rather than only Latin.

Follow-up: both fonts still load from Google Fonts via a render-blocking CSS
@import. Self-hosting with a subset and preload links is worth doing —
government networks frequently make fonts.googleapis.com slow or unreachable,
and silent Amharic fallback is precisely the failure this commit fixes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 12:20:49 +03:00
Estifanos Terefe
c62b061958 Merge pull request #21 from Tria-plc/estif-branch-1
Estif branch 1
2026-08-21 12:17:43 +03:00
Estifo77
1e3cd9fa02 Merge branch 'WorkflowChange' of https://github.com/Tria-plc/emaui into estif-branch-1 2026-08-21 12:17:20 +03:00
fitse-yotor
b63e07305a feat(theme): add semantic tokens, focus ring, and reduced-motion support
Adds the layer feature code has been missing: tokens that name a role — page
surface, subtle border, danger — instead of a colour. Every one resolves to a
Mantine variable rather than a literal, so they follow the colour scheme for
free and cannot drift from the theme. A parallel palette of raw hexes would
have recreated exactly the problem this exists to fix.

Also closes three accessibility gaps that had no implementation anywhere in the
codebase: no :focus-visible rule, no screen-reader-only utility, and no global
prefers-reduced-motion handling.

The focus work found a real bug, and nearly introduced a worse one. Mantine
already rings its own controls, so the first attempt deferred to it with
`outline: none` on .mantine-focus-auto. That suppressed Mantine's ring without
replacing it, leaving portal buttons with no focus indicator at all — and it
only showed up in one app, because which rule won depended on stylesheet order.
The rules use identical values, so overlapping them is invisible and safe;
opting out is not. The focus test now asserts computed outline width and style,
not just pixels, since a screenshot alone would not have caught this.

`status-tone.ts` establishes the six-tone vocabulary that the 48 scattered
status→colour maps will eventually collapse onto. Nothing consumes it yet.

No visual change: the 8 existing baselines pass unmodified.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 12:11:20 +03:00
fitse-yotor
3d0183f12c build: remove Tailwind, which was never actually running
Tailwind was configured but had no effect. There is no postcss config anywhere
in the repo, so the three `@tailwind` directives in the backoffice stylesheet
were never expanded — they passed through verbatim into the production CSS
bundle as invalid at-rules for browsers to discard. The portal's copy could not
even do that: nothing imports `apps/portal/src/styles.css`.

The utility classes visible in the built CSS come from the vendored
@tria-plc/iamui package, which ships its own pre-compiled stylesheet and
declares only React as a peer dependency. Removing Tailwind here does not
affect it.

`tailwind-merge` goes too — no file in apps/ or libs/ imports it. postcss and
autoprefixer stay; Vite uses them independently.

Also fixes a bug this uncovered. The orphaned portal stylesheet was not dead
code — it contained scrollbar theming the portal never received, so it has been
rendering raw OS scrollbars while the backoffice got themed ones. Those rules
move to portal.css, which actually loads. Deleting the file without reading it
would have silently kept that gap.

No visual change: all 8 baselines pass unmodified.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 11:51:14 +03:00
fitse-yotor
659e954306 refactor(theme): share one base theme between backoffice and portal
The two apps had drifted into unrelated themes. The portal's carried a full
type scale, radius scale, shadow ramp and component defaults; the backoffice's
had none of them — 55 lines defining two colour ramps and little else. With
nothing to inherit, its 23 features each invented their own sizing, which is
the real source of the inconsistency the UI reads with.

Promote the portal's structure to `libs/shared` as `baseTheme`, and reduce both
themes to what they should differ on: brand. The backoffice keeps #1e40af and
the portal keeps Coastal Modern — a distinct accent tells an officer which of
the two systems they are in, and the ramps are not interchangeable in contrast.

Both export names are preserved, so no consumer import changes.

Two properties are deliberately held back rather than shared:
- `colors.gray`: the portal's blue-tinted neutrals retint every dimmed label,
  neutral badge and table border. The backoffice adopts them as its own
  reviewed change, not as a side effect of sharing a base.
- `primaryShade.dark`: moves every filled control in dark mode; waits until
  dark mode is verified end to end.

Also fixes a live bug: PageLoader coloured its primary label `navy.9`, which is
defined in neither theme. Mantine drops unresolved colour keys silently, so the
label in a component used by 20 files had been rendering an inherited colour.

Adds a visual-regression harness to make all of this reviewable. It runs
against a static gallery route rather than real pages, so it needs no API,
database or auth — a theme diff cannot be masked by a migration or an expired
token. The portal is the control group: it is pixel-identical across all four
light/dark × desktop/tablet baselines, which is what makes the refactor
provably lossless.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 11:25:26 +03:00
Nati Nigussie
8cb0da30b8 Merge branch 'dev' into WorkflowChange 2026-08-21 11:03:25 +03:00
nati14575
946e9a8659 Fix 2026-08-21 11:01:32 +03:00
Sennay
b227e0ec89 Create pnpm-workspace.yaml 2026-08-21 10:59:19 +03:00
Sennay
0c05876b2e Delete pnpm-workspace.yaml 2026-08-21 10:57:17 +03:00
Nati Nigussie
33ad3877c7 Merge pull request #23 from Tria-plc/WorkflowChange
Fix for build
2026-08-21 10:45:26 +03:00
nati14575
738b6dec4c Fix for build 2026-08-21 10:42:38 +03:00
estifanos
d4a5ba7673 UI fixes 2026-08-21 07:38:01 +00:00
Nati Nigussie
eb15dc8763 Merge pull request #22 from Tria-plc/WorkflowChange
Workflow change
2026-08-21 10:21:13 +03:00
estifanos
5e671b8ac0 fixes 2026-08-21 07:18:19 +00:00
Nati
cd524ff1cc Minor 2026-08-21 07:05:42 +00:00
mihretue
e94ecb3a71 Merge remote-tracking branch 'origin/WorkflowChange' into feature/exam-attempt-domain 2026-08-21 06:58:57 +00:00
Estifo77
3a8dcffdcb Merge branch 'estif-branch-1' of https://github.com/Tria-plc/emaui into estif-branch-1 2026-08-21 09:58:41 +03:00
Estifo77
7f360758dd Merge branch 'WorkflowChange' of https://github.com/Tria-plc/emaui into estif-branch-1 2026-08-21 09:58:34 +03:00
estifanos
84a1f7b47c feat: add minDate and maxDate constraints to AmharicDatePicker and restrict form inputs to prevent future and invalid dates 2026-08-21 06:57:19 +00:00
Nati
d55126c29d Merge branch 'WorkflowChange' of github.com:Tria-plc/emaui into WorkflowChange 2026-08-21 06:56:07 +00:00
Nati
cc4ce06a71 feat: add payment functionality for passed exam certificates and update related statuses 2026-08-21 06:55:51 +00:00
estifanos
28dd246c5f fixes 2026-08-21 06:43:42 +00:00
Nati Nigussie
3e5dcb8b0e Merge pull request #19 from Tria-plc/estif-branch-1
feat: changes based on EMA excel file.
2026-08-21 09:08:43 +03:00
Estifo77
e8c9ad4dd2 Merge branch 'WorkflowChange' of https://github.com/Tria-plc/emaui into estif-branch-1 2026-08-21 08:55:24 +03:00
Nati
357dc3e4d5 feat: add document requirements and form schema management for license types
- Implement DocumentRequirementsTab for managing document upload requirements.
- Create FieldEditorDrawer and SectionEditorDrawer for editing fields and sections in the form schema.
- Develop FormSchemaTab to handle sections and fields for a license type's form schema.
- Introduce CertificateRequirementsPage to serve as the main interface for configuring license type requirements.
- Add hooks for requirement actions to streamline mutation handling and notifications.
- Implement condition handling for fields and sections to manage visibility based on user input.
- Create schema-paths configuration to facilitate condition target collection.
2026-08-20 13:37:26 +00:00
Nati
2ec857f0f0 feat: add descriptions to document slots and application sections 2026-08-20 13:04:20 +00:00
Nati
6901e985fc feat: update exam stage actions and payment flow
- Refactor ExamStageActions component to handle eligibility payment and retake exam actions.
- Update MyApplicationsPage to use new retakeExam mutation instead of requestExamPayment.
- Modify licensing API to include retakeExam mutation for handling exam fee requests for failed candidates.
- Adjust mock data to reflect new application statuses and ensure consistency in eligibility and exam payment states.
- Update licensing helpers to include new status labels and colors for eligibility payment states.
- Revise licensing types to replace ELIGIBILITY_APPROVED with ELIGIBILITY_PAYMENT_PENDING and ELIGIBILITY_PAID for clarity in application status flow.
2026-08-20 12:41:46 +00:00
Estifo77
c5e1e86064 package 2026-08-20 15:30:59 +03:00
Estifo77
3ec12fcd89 Merge branch 'WorkflowChange' of https://github.com/Tria-plc/emaui into estif-branch-1 2026-08-20 15:30:37 +03:00
mihretue
c0b5871dc3 Merge remote-tracking branch 'origin/WorkflowChange' into feature/exam-attempt-domain
# Conflicts:
#	apps/portal/src/app/features/exams/pages/ExamsPage/columns.tsx
#	apps/portal/src/app/features/exams/pages/ExamsPage/index.tsx
#	libs/api/src/lib/features/licensing/licensing.helpers.ts
#	libs/auth/src/lib/components/AuthBootstrap.tsx
2026-08-20 11:41:06 +00:00
estifanos
8454fb5829 fixes 2026-08-20 11:21:46 +00:00
estifanos
2c8895fed8 feat: support phone number input for password recovery and move route to public access 2026-08-20 11:08:03 +00:00
Nati
558cfe20a1 feat: Refactor medical and sea service verification pages
- Split MedicalVerificationPage into MedicalVerificationPage and SeaServiceVerificationPage for better separation of concerns.
- Update navigation to include separate entries for Sea Service Verification and Medical Verification.
- Enhance sea service columns to display additional vessel information and days served.
- Add translations for new and updated labels in both English and Amharic.
- Introduce seaServiceDays helper function to calculate days served based on engagement and discharge dates.
- Remove deprecated MedicalCertificatePage from the portal.
- Update routing to direct to the new sea service and medical pages.
2026-08-20 11:01:04 +00:00
Nati
db5b7bdf70 feat: Implement sea service and medical records management with evidence upload functionality 2026-08-20 10:48:24 +00:00
estifanos
12daba2951 feat: enforce physical characteristics for seafarer profiles and add dynamic validation and form support 2026-08-20 10:17:35 +00:00
Nati
f429e717a7 feat: Update permissions and labels for seafarer document review and navigation 2026-08-20 09:06:11 +00:00
estifanos
bc31cec0b2 feat: implement input length constraints and enhanced validation for international phone numbers 2026-08-20 08:58:07 +00:00
estifanos
caa209306f feat: implement formatNational utility and improve PhoneInput formatting and interaction logic 2026-08-20 08:47:28 +00:00
Nati
8eb4c38216 feat: Refactor seafarer document application flow
- Remove SeamanBookApplicationPage from router and redirect to Seaman Book page.
- Add new API endpoints for managing seafarer documents, including listing, reviewing, and issuing documents.
- Introduce new SeafarerDocumentQueuePage and SeafarerDocumentReviewPage components for document management.
- Update licensing types to accommodate optional applicationId and documentId in ApplicationPayment.
- Remove unused claimSeafarerRegistration mutation and related constants.
- Update seafarer registration status labels and types to remove 'UNDER_REVIEW'.
- Create new constants and types for seafarer documents, including status labels and colors.
- Implement document payment initiation and confirmation functionalities.
- Enhance UI components for better user experience in document management.
2026-08-20 08:39:17 +00:00
estifanos
0b03bc45c3 refactor: improve PhoneInput digit normalization and update validation to trigger on blur 2026-08-20 08:31:08 +00:00