104 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
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
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
estifanos
d4a5ba7673 UI fixes 2026-08-21 07:38:01 +00:00
mihretue
e94ecb3a71 Merge remote-tracking branch 'origin/WorkflowChange' into feature/exam-attempt-domain 2026-08-21 06:58:57 +00: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
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
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
estifanos
0b03bc45c3 refactor: improve PhoneInput digit normalization and update validation to trigger on blur 2026-08-20 08:31:08 +00:00
estifanos
a0560f9cbc refactor: maintain local state for PhoneInput typing to prevent input reset and add helper utilities for E.164 conversion. 2026-08-20 08:22:38 +00:00
estifanos
a424be5f6c test files 2026-08-20 07:33:25 +00:00
estifanos
481ff57ad1 feat: implement reusable PhoneInput component with validation support and integrate across auth and portal modules. 2026-08-20 07:33:25 +00:00
estifanos
0fa5566432 UI fixes 2026-08-19 10:22:00 +00:00
estifanos
1a3d963754 UI fixes 2026-08-19 10:01:24 +00:00
estifanos
4d87d41e55 feat: add PdfPreviewModal component and integrate into DocumentsTab for centralized PDF viewing 2026-08-19 08:48:50 +00:00
estifanos
2978690669 UI landing 2026-08-19 08:38:37 +00:00
estifanos
273a828570 UI fixes 2026-08-19 08:23:04 +00:00
estifanos
290f6dfd9c UI fixes 2026-08-19 08:10:09 +00:00
estifanos
0e4db93396 fixes 2026-08-19 08:07:22 +00:00
Estifo77
c377ddf74a Merge branch 'WorkflowChange' of https://github.com/Tria-plc/emaui into estif-branch-1 2026-08-19 10:23:33 +03:00
Nati
629b02fd26 feat: implement person name utility functions and update related components for name handling 2026-08-19 05:52:26 +00:00
mihretue
e97e12d979 Merge remote-tracking branch 'origin/certficate' into feature/exam-attempt-domain 2026-08-17 11:19:17 +00:00
mihretue
84ff644ebb fix(question): show both language fields for MCQ options
Options editor used a single toggle-based bilingual field (BilingualInput)
that swapped English/Amharic in place via a tiny, easy-to-miss button.
Authors were filling English only and never noticing Amharic was empty.

- QuestionOptionsEditor: show separate always-visible English/Amharic
  TextInputs per option instead of the toggle field.
- BilingualInput (shared): for other callers still using the toggle,
  add a tooltip and a red dot indicator when the hidden language is
  empty, so the gap is visible without switching.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-17 08:26:21 +00:00
Estifo77
6330c9ea55 applying loader on pages 2026-08-15 11:25:30 +03:00
Estifo77
57682188de UI improvments on landing page 2026-08-14 15:33:14 +03:00
Estifo77
c00a19dd99 UI improvements 2026-08-14 15:10:41 +03:00
Estifo77
7733fe8efd UI improvements 2026-08-14 15:03:02 +03:00
Estifo77
9a7b93cfb6 loader UI improvements 2026-08-14 14:45:57 +03:00
estifanos
f31e75c3de feat: implement PageLoader component and register maritime loader as the default theme loader 2026-08-14 11:35:34 +00:00
estifanos
accfb8c95d fixes 2026-08-14 08:16:09 +00:00
estifanos
6795607b13 fix 2026-08-14 08:05:32 +00:00
estifanos
e0b3a4887a feat: add internationalization support for auth components and pages, including translations for Amharic and English 2026-08-14 07:54:30 +00:00
estifanos
d71483be4a feat: simplify hero section buttons and update call-to-action text 2026-08-14 07:46:39 +00:00
estifanos
cfbec948fb feat: enhance landing page with new hero section, badges, and improved styles 2026-08-14 07:43:14 +00:00
estifanos
de04ed64b3 feat: remove certificate verification page and related API, update landing page links 2026-08-14 07:34:35 +00:00
estifanos
d6b813b697 feat: add landing page copy and styles for English and Amharic versions
- Introduced `landing-copy.ts` containing text for the public landing page, supporting both English and Amharic languages.
- Added `landing.css` for styling the landing page, ensuring scoped styles to prevent conflicts with other app styles.
- Implemented smooth scrolling and animations for a better user experience.
2026-08-14 07:20:42 +00:00
Nati
220ed2d018 Merge branch 'dev' of github.com:Tria-plc/emaui into Refactor
Resolved by unifying on the lib/data AdvancedTable (PR #10) as the canonical
table component: kept its API plus teammate i18n/feature work, kept the
folder-per-table structure (index.tsx + columns.tsx + actions.tsx) across all
27 tables, removed the parallel lib/table implementation, and fixed
pre-existing compile breaks in ExamDetailPage/QuestionAssigner/RecordResultModal.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 11:31:27 +00:00
Nati
2af9e60800 feat(vessel-registration): add vessel registration page with incident reporting and certificate download functionality
feat(waiver): implement waiver page with application tracking and letter download feature

feat(ui): introduce AdvancedTable component for enhanced table functionality across the application

chore: update package-lock.json to remove unnecessary dependencies
2026-08-13 09:11:50 +00:00
estifanos
9897a9bf78 feat: implement date display utility across various pages
- Added `useDateDisplayer` hook and `dateDisplayer` function to format dates consistently based on the user's language.
- Updated multiple components and pages in both backoffice and portal applications to utilize the new date display functionality, ensuring proper formatting for dates in lists, tables, and detail views.
- Introduced Ethiopian date formatting for Amharic language support.
- Refactored date handling in components such as ExamAppealsPage, ResultPage, SeafarerRegistryPage, and others to improve localization and user experience.
2026-08-12 10:22:39 +00:00
estifanos
444c3111ab UI 2026-08-12 06:40:43 +00:00
estifanos
4a68bdf169 UI fixes 2026-08-11 12:24:03 +00:00
estifanos
b2f99200e7 feat: enhance AmharicDatePicker with Ethiopian time selection and formatting 2026-08-11 12:20:22 +00:00
estifanos
18de7b1c1d UI fixes 2026-08-11 11:39:46 +00:00