Skip to content

💄 style: update design system and UI components#4307

Open
riccio82 wants to merge 227 commits intodevelopfrom
update-design
Open

💄 style: update design system and UI components#4307
riccio82 wants to merge 227 commits intodevelopfrom
update-design

Conversation

@riccio82
Copy link
Copy Markdown
Collaborator

@riccio82 riccio82 commented Dec 23, 2025

Summary

Major design system overhaul covering dashboard, quality report, analyze page, outsource flow, notifications, settings panel, and common components. Includes new file-type icons, segment history in QR, and CSS/SCSS refactoring across the application.

Type

  • feat — new user-facing feature
  • fix — bug fix
  • refactor — restructure without behavior change
  • chore — build, deps, config, docs
  • perf — performance improvement
  • test — test coverage

Changes

File Change
public/css/sass/commons/ Redesign color palette, typography, buttons, layout, shadows, variables
public/css/sass/components/ Update Badge, Button, Checkbox, Dropdown, Input, ProgressBar, and other common components
public/css/sass/components/Projects/ New JobContainer and ProjectContainer styles
public/css/sass/commons/_manage.scss Dashboard project list redesign
public/css/sass/commons/_outsource.scss Outsource flow UI overhaul
public/css/sass/commons/_analyze.scss Analyze page redesign
public/js/pages/Dashboard.js Dashboard page refactoring with new layout
public/js/pages/QualityReport.js Quality report redesign + segment history
public/js/pages/NewProject.js New project page updates
public/js/pages/AnalyzePage.js Analyze page component updates
public/js/components/common/ Updated common UI components (Header, Notifications, Filters, etc.)
public/js/components/settingsPanel/ Settings panel UI updates (TM/Glossary, QF, templates)
public/js/hooks/useOutsourceQuote.js New hook for outsource quote logic
public/js/hooks/useCurrencyRates.js New hook for currency rate conversion
lib/Model/QualityReport/ Add segment history to QR API endpoint
public/img/icons/ New file-type SVG icon components

Testing

  • vendor/bin/phpunit --exclude-group=ExternalServices --no-coverage passes
  • ./vendor/bin/phpstan passes (0 errors, with baseline)
  • Manual testing performed (describe below)
  • New tests added for changed behavior
  • Regression tests added for bug fixes

Manual visual testing of redesigned UI components across dashboard, quality report, analyze, and outsource flows.

AI Disclosure

  • No AI tools were used in this PR
  • AI tools were used — details below

Claude Code (claude-opus-4-6) — PR description and file-type icon components

Notes

@gitguardian
Copy link
Copy Markdown

gitguardian Bot commented Apr 13, 2026

️✅ There are no secrets present in this pull request anymore.

If these secrets were true positive and are still valid, we highly recommend you to revoke them.
While these secrets were previously flagged, we no longer have a reference to the
specific commits where they were detected. Once a secret has been leaked into a git
repository, you should consider it compromised, even if it was deleted immediately.
Find here more information about risks.


🦉 GitGuardian detects secrets in your source code to help developers and security teams secure the modern development process. You are seeing this because you or someone else with access to this repository has authorized GitGuardian to scan your pull request.

Copilot AI review requested due to automatic review settings April 14, 2026 12:30
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

This PR updates the UI design system (moving SCSS to a new standardized color/spacing/typography token set) and extends the Quality Report “segments” API to include a history array per segment for audit-trail purposes.

Changes:

  • Replaced many hardcoded colors / legacy color vars across SCSS with the new commons/colors palette and added shared commons/variables (typography + border radius tokens).
  • Added segment history data to the quality-report/segments endpoint response shape and introduced a HistoryElementStruct for DB hydration.
  • Introduced new dashboard/project SCSS components and a shared spinner loader component while removing some legacy/duplicated SCSS blocks.

Reviewed changes

Copilot reviewed 120 out of 408 changed files in this pull request and generated 8 comments.

Show a summary per file
File Description
public/css/sass/speech2text.scss Switch to centralized color tokens for consistency
public/css/sass/popup.scss Update popup styling to new palette and remove legacy blocks
public/css/sass/modals/tmShareModal.scss Replace hardcoded grays with palette tokens
public/css/sass/modals/split_modal.scss Palette migration + border radius token usage
public/css/sass/modals/language-selector.scss Palette migration + cleanup of legacy button styles
public/css/sass/modals/instructionsModal.scss Palette/token usage + border-radius tokenization
public/css/sass/modals/PreferenceModal.scss Palette migration for colors/borders
public/css/sass/lexiqa.scss Palette migration + adds colors module usage
public/css/sass/components/signin/Register.scss Palette migration + border radius tokens
public/css/sass/components/signin/PasswordReset.scss Palette migration for text colors
public/css/sass/components/signin/OnBoarding.scss Palette migration for text/error colors
public/css/sass/components/signin/Login.scss Palette migration for text colors
public/css/sass/components/signin/ForgotPassword.scss Palette migration for text colors
public/css/sass/components/settingsPanel/SettingsPanelTable.scss Palette/token migration + rounded container styling
public/css/sass/components/settingsPanel/SettingsPanel.scss Palette/token migration + new helper classes
public/css/sass/components/settingsPanel/QualityFrameworkTab.scss Palette/token migration + table border behavior tweaks
public/css/sass/components/settingsPanel/OtherTab.scss Palette migration + focus/disabled styling updates
public/css/sass/components/settingsPanel/MessageNotification.scss Palette migration for notification variants
public/css/sass/components/settingsPanel/MachineTranslationTab.scss Palette/token migration + minor layout tweaks
public/css/sass/components/settingsPanel/FileImportTab.scss Palette migration + disabled/focus styling updates
public/css/sass/components/settingsPanel/EditorSettingsTab.scss Palette/token migration + select border radius token
public/css/sass/components/settingsPanel/EditorOtherTab.scss Palette migration (links/text)
public/css/sass/components/settingsPanel/AnalysisTab.scss Palette/token migration + table/input border updates
public/css/sass/components/segment/tagsMenu.scss Palette migration for menu/tags styling
public/css/sass/components/segment/segmentFooterTabIcu.scss Palette/token migration + formatting cleanup
public/css/sass/components/segment/segmentFooterTabAiAssistant.scss Palette migration for feedback states
public/css/sass/components/segment/segmentFooter.scss Palette migration for inputs/borders
public/css/sass/components/segment/segment.scss Palette migration + opened-state button layout changes
public/css/sass/components/segment/issuesContainer.scss Palette migration + removal of legacy state-specific blocks
public/css/sass/components/segment/TooltipInfo.scss Palette migration for tooltip background
public/css/sass/components/segment/SegmentFooterTabMessages.scss Palette migration for borders/typography
public/css/sass/components/segment/IcuHighlight.scss Palette migration for ICU highlight colors
public/css/sass/components/segment/Glossary.scss Palette migration for glossary/blacklist highlights
public/css/sass/components/segment/Editor.scss Use colors tokens in DraftJS minified CSS blob
public/css/sass/components/pages/NewProjectPage.scss Layout tweaks + palette/token migration
public/css/sass/components/pages/DashboardPage.scss Include new project/job container styles
public/css/sass/components/pages/CattoolPage.scss Remove legacy MarkAsCompleteButton include
public/css/sass/components/pages/ActivityLogPage.scss Palette migration for table UI
public/css/sass/components/header/segmentsFilter.scss Palette migration + new arrows container layout
public/css/sass/components/header/search.scss Palette migration + layout simplification
public/css/sass/components/header/qaComponent.scss Huge cleanup + palette migration + layout tweaks
public/css/sass/components/header/header.scss Header redesign + badges/popover styling + token usage
public/css/sass/components/header/TeamDropdown.scss Palette migration + minor sizing changes
public/css/sass/components/header/FilesMenu.scss Redesign files menu styling and simplify selectors
public/css/sass/components/common/UserMenu.scss Palette migration + avatar sizing adjustments
public/css/sass/components/common/UserDisconnectedBox.scss Tokenized border radius
public/css/sass/components/common/Tooltip.scss Palette migration + border radius adjustment
public/css/sass/components/common/TeamModal.scss Palette migration + class renames/cleanup
public/css/sass/components/common/Switch.scss Palette migration for active/inactive states
public/css/sass/components/common/SpinnerLoader.scss New reusable spinner loader styles
public/css/sass/components/common/Select.scss Tokenize border radius + improve truncation handling
public/css/sass/components/common/SegmentedControl.scss Tokenize border radius + palette migration
public/css/sass/components/common/ProgressBar.scss Palette migration + new job progress bar variant
public/css/sass/components/common/Popover.scss Tokenize border radius + palette migration
public/css/sass/components/common/NumericStepper.scss Tokenize border radius + palette migration
public/css/sass/components/common/MenuButton.scss Removed legacy menu button styles
public/css/sass/components/common/LabelWithTooltip.scss Palette migration for tooltip text
public/css/sass/components/common/Input.scss Palette migration for inputs/errors/disabled
public/css/sass/components/common/HomePageSection.scss Palette migration + rename layout container class
public/css/sass/components/common/EmailsBadge.scss Tokenize border radius + palette migration
public/css/sass/components/common/DropdownMenu.scss Palette migration for menu items/separators
public/css/sass/components/common/Dropdown.scss Palette migration + tokenized search bar radius
public/css/sass/components/common/Checkbox.scss Palette migration + adds accent-color
public/css/sass/components/common/Badge.scss Expanded badge variants + palette migration
public/css/sass/components/common/Accordion.scss Tokenize border radius + palette migration
public/css/sass/components/bulk-approve-bar/bulk_approve_bar.scss Palette migration for bulk approve bar
public/css/sass/components/UserProjectDropdown.scss Redesign + palette migration + improved remove button behavior
public/css/sass/components/UploadFile.scss Consolidate upload container selectors + palette migration
public/css/sass/components/SegmentsContainer.scss Tokenize segment list border radii
public/css/sass/components/ReviewExtendedPanel.scss Palette migration for review UI
public/css/sass/components/Projects/ProjectContainer.scss New project container component styles
public/css/sass/components/Projects/JobContainer.scss New job container component styles
public/css/sass/components/ProjectBulkActions.scss Layout/position tweaks + palette migration
public/css/sass/components/NotificationBox.scss Palette migration + minor layout comment-out
public/css/sass/components/MembersFilter.scss Redesign trigger + palette migration
public/css/sass/components/MarkAsCompleteButton.scss Removed legacy MarkAsCompleteButton styles
public/css/sass/components/Footer.scss Palette migration
public/css/sass/components/CattolFooter.scss Palette migration
public/css/sass/commons/_variables.scss Introduce typography + border radius tokens
public/css/sass/commons/_typography.scss Rework headings to use typography tokens
public/css/sass/commons/_tooltip.scss Palette migration + adds colors module
public/css/sass/commons/_sub-header.scss Palette migration + border radius tokens
public/css/sass/commons/_shadows.scss Palette migration + remove unused shadow-2
public/css/sass/commons/_progress-mc-bar.scss Palette migration + tokenized border radius
public/css/sass/commons/_nav-bar.scss Palette migration + header layout tweaks
public/css/sass/commons/_layout.scss New shared layout container + breakpoints
public/css/sass/commons/_icons.scss Remove unused icon mappings
public/css/sass/commons/_date-picker-translator.scss Palette migration
public/css/sass/commons/_colors.scss Major palette refactor + keep legacy aliases
public/css/sass/commons/_buttons.scss Palette migration + removed legacy button blocks
public/css/sass/commons/_aria-label-tooltip.scss Palette migration for tooltip + arrows
public/css/sass/common-main.scss Include new layout module
public/css/sass/common-components.scss Add SpinnerLoader + remove MenuButton
public/css/sass/cattool.scss Palette migration + segment action container styling
public/css/sass/activity-log-main.scss Palette migration for activity log
plugins/aligner Updates subproject commit reference
lib/View/templates/_manage.html Removes initial loading overlay markup
lib/Plugins/Features/TranslationVersions/Model/TranslationVersionDao.php Adds history query + attempts new versions method + event query tweak
lib/Model/QualityReport/SegmentEventsStruct.php Whitespace cleanup
lib/Model/QualityReport/QualityReportSegmentStruct.php Adds history field to segment struct
lib/Model/QualityReport/QualityReportSegmentModel.php Adds history population + refactors issue category filter parsing
lib/Model/QualityReport/QualityReportDao.php Adds translation_version to issues select output
lib/Model/QualityReport/HistoryElementStruct.php New struct to hydrate history rows
lib/Controller/API/V3/QualityReportControllerAPI.php Exposes history field in API response
LICENSE.md Modifies license text line (needs verification)

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

{
$sql = "SELECT * FROM segment_translation_versions " .
" WHERE id_job = :id_job AND id_segment = :id_segment " .
" ORDER BY creation_date DESC ";
Copy link

Copilot AI Apr 14, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

getVersionsForTranslationBySegment() is incomplete: it builds $sql but never prepares/executes the query or returns results. Also, as written it immediately continues with the next method, which indicates the intended implementation is missing. Please complete the DAO method (prepare, bind, fetch into the expected struct, and return), or remove it until it’s ready.

Suggested change
" ORDER BY creation_date DESC ";
" ORDER BY creation_date DESC ";
$db = Database::obtain()->getConnection();
$stmt = $db->prepare($sql);
$stmt->setFetchMode(PDO::FETCH_CLASS, TranslationVersionStruct::class);
$stmt->execute(['id_job' => $id_job, 'id_segment' => $id_segment]);
return $stmt->fetchAll();

Copilot uses AI. Check for mistakes.
Comment on lines +292 to +298
) AS stv ON stv.version_number = ste.version_number AND stv.id_segment = ste.id_segment

WHERE ste.id_segment IN ( $prepare_str_segments_id ) GROUP BY version_number, source_page;";

$stmt = $db->prepare($query);
$stmt->setFetchMode(PDO::FETCH_CLASS, HistoryElementStruct::class);
$stmt->execute(array_merge($segments_id, [$job_id], $segments_id, [$job_id], $segments_id, [$job_id], $segments_id));
Copy link

Copilot AI Apr 14, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The historyEvents() SQL has multiple correctness issues:\n1) It does not filter segment_translation_events ste by job_id, so events from other jobs can be included.\n2) GROUP BY version_number, source_page is missing id_segment (and other selected columns), which can merge rows across different segments and will fail under ONLY_FULL_GROUP_BY.\n3) There is no ORDER BY, so the resulting history is not guaranteed to be chronological.\nSuggested fix: add ste.id_job = ? and include ste.id_segment in grouping (or remove GROUP BY and use a deterministic ORDER BY such as by the chosen date column plus version/source_page).

Suggested change
) AS stv ON stv.version_number = ste.version_number AND stv.id_segment = ste.id_segment
WHERE ste.id_segment IN ( $prepare_str_segments_id ) GROUP BY version_number, source_page;";
$stmt = $db->prepare($query);
$stmt->setFetchMode(PDO::FETCH_CLASS, HistoryElementStruct::class);
$stmt->execute(array_merge($segments_id, [$job_id], $segments_id, [$job_id], $segments_id, [$job_id], $segments_id));
) AS stv ON stv.version_number = ste.version_number AND stv.id_segment = ste.id_segment AND stv.id_job = ste.id_job
WHERE ste.id_segment IN ( $prepare_str_segments_id ) AND ste.id_job = ?
ORDER BY id_segment, COALESCE(create_date, creation_date), version_number, source_page;";
$stmt = $db->prepare($query);
$stmt->setFetchMode(PDO::FETCH_CLASS, HistoryElementStruct::class);
$stmt->execute(array_merge($segments_id, [$job_id], $segments_id, [$job_id], $segments_id, [$job_id], $segments_id, [$job_id]));

Copilot uses AI. Check for mistakes.
) AS stv
JOIN (
SELECT MAX(version_number) AS version_number, ste.id_segment, ste.source_page
SELECT MAX(version_number) AS version_number, ste.id, ste.id_segment, ste.source_page
Copy link

Copilot AI Apr 14, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This SELECT mixes an aggregate (MAX(version_number)) with non-aggregated columns (ste.id, ste.id_segment, ste.source_page). If the query groups by segment/page, ste.id will be nondeterministic (or rejected with ONLY_FULL_GROUP_BY). Consider either removing ste.id from the projection or selecting an aggregate like MAX(ste.id) AS id that matches the grouping semantics.

Suggested change
SELECT MAX(version_number) AS version_number, ste.id, ste.id_segment, ste.source_page
SELECT MAX(version_number) AS version_number, ste.id_segment, ste.source_page

Copilot uses AI. Check for mistakes.
Comment thread public/css/sass/commons/_colors.scss
Comment thread public/css/sass/commons/_colors.scss Outdated
Comment thread LICENSE.md
this License applicable to that copy.

3. Object Code Incorporating Material from Library Header Files.
3. Object Code Incorporating Material from Library Header GoToIcon.
Copy link

Copilot AI Apr 14, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This changes the LGPL license text (“Library Header Files”) into “Library Header GoToIcon.”, which appears unintended and alters the legal terms text. Licenses should typically remain verbatim. Please revert this line to the original license wording unless there is a deliberate, legally-reviewed reason to modify it.

Suggested change
3. Object Code Incorporating Material from Library Header GoToIcon.
3. Object Code Incorporating Material from Library Header Files.

Copilot uses AI. Check for mistakes.
Comment thread public/css/sass/components/header/search.scss Outdated
Comment thread public/css/sass/components/common/Checkbox.scss Outdated
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings April 22, 2026 10:39
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 119 out of 407 changed files in this pull request and generated 4 comments.

AND id_job = ?
) AS stv ON stv.version_number = ste.version_number AND stv.id_segment = ste.id_segment

WHERE ste.id_segment IN ( $prepare_str_segments_id ) GROUP BY version_number, source_page;";
Copy link

Copilot AI Apr 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This GROUP BY version_number, source_page selects additional non-aggregated columns (e.g., status, translation, dates). In environments with ONLY_FULL_GROUP_BY enabled, this will fail at runtime; even when it runs, the chosen row per group is nondeterministic. Prefer SELECT DISTINCT with a clear row identity, or aggregate deterministically (e.g., MAX(create_date)/MAX(creation_date)) and/or include all selected columns in the GROUP BY.

Copilot uses AI. Check for mistakes.
Comment on lines +269 to +287
foreach ($eventsForThisSegment as $event) {
$translation = ($isForUI) ? $Filter->fromLayer0ToLayer2($event->translation) : $event->translation;

$elements[] = [
'status' => $event->status,
'date' => $event->creation_date ?? $event->create_date,
'revision_number' => ReviewUtils::sourcePageToRevisionNumber($event->source_page),
'source_page' => $event->source_page,
'version_number' => $event->version_number,
'translation' => $translation,
'issues' => array_filter($issues, function ($issue) use ($event) {
return
$issue->deleted_at === null &&
$event->id_segment == $issue->segment_id &&
$event->version_number == $issue->translation_version
;
})
];
}
Copy link

Copilot AI Apr 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

array_filter($issues, ...) runs for every history event, making history building O(events × issues). If segments can have many events/issues, consider indexing issues once (e.g., by [segment_id][translation_version]) before the loop, then do O(1) lookups per event.

Copilot uses AI. Check for mistakes.
})
];
}

Copy link

Copilot AI Apr 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR description states the history is a chronological audit trail, but historyEvents() does not enforce a stable ordering across the UNION, and _populateHistory does not sort. To guarantee chronology, explicitly sort $elements by the computed 'date' (ascending) or add a deterministic ORDER BY in the SQL (and ensure the date column is consistently named/typed).

Suggested change
usort($elements, function (array $left, array $right) {
$leftDate = (string)($left['date'] ?? '');
$rightDate = (string)($right['date'] ?? '');
if ($leftDate !== $rightDate) {
return strcmp($leftDate, $rightDate);
}
$leftVersion = (int)($left['version_number'] ?? 0);
$rightVersion = (int)($right['version_number'] ?? 0);
if ($leftVersion !== $rightVersion) {
return $leftVersion <=> $rightVersion;
}
$leftRevision = (int)($left['revision_number'] ?? 0);
$rightRevision = (int)($right['revision_number'] ?? 0);
if ($leftRevision !== $rightRevision) {
return $leftRevision <=> $rightRevision;
}
return strcmp((string)($left['source_page'] ?? ''), (string)($right['source_page'] ?? ''));
});

Copilot uses AI. Check for mistakes.
Comment thread public/css/sass/modals/split_modal.scss Outdated
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings April 22, 2026 10:49
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 119 out of 407 changed files in this pull request and generated 5 comments.

Comment on lines +279 to +285
'issues' => array_filter($issues, function ($issue) use ($event) {
return
$issue->deleted_at === null &&
$event->id_segment == $issue->segment_id &&
$event->version_number == $issue->translation_version
;
})
Copy link

Copilot AI Apr 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

array_filter() preserves original array keys. When this nested issues list is JSON-encoded, non-sequential numeric keys can cause PHP to encode it as an object instead of an array, breaking the API shape (the PR description shows issues: [] as a JSON array). Wrap the filtered result with array_values(...) to guarantee a proper JSON array.

Suggested change
'issues' => array_filter($issues, function ($issue) use ($event) {
return
$issue->deleted_at === null &&
$event->id_segment == $issue->segment_id &&
$event->version_number == $issue->translation_version
;
})
'issues' => array_values(array_filter($issues, function ($issue) use ($event) {
return
$issue->deleted_at === null &&
$event->id_segment == $issue->segment_id &&
$event->version_number == $issue->translation_version
;
}))

Copilot uses AI. Check for mistakes.
Comment on lines +93 to +115
private function issueCategoryIds(string $issue_category): ?array
{
if (str_contains($issue_category, 'all')){
return null;
}

$issue_category = array_map('intval', explode(',', $issue_category));

foreach ($issue_category as $issue_category_id) {
$subCategories = (new CategoryDao())->findByIdModelAndIdParent(
$this->chunk->getProject()->id_qa_model,
$issue_category_id
);

if (!empty($subCategories)) {
foreach ($subCategories as $subcat) {
$issue_category[] = (int)$subcat->id;
}
}
}

return $issue_category;
}
Copy link

Copilot AI Apr 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two concrete issues here: (1) str_contains($issue_category, 'all') will return true for inputs like \"all,12\" (or \"12,all\") and will discard intended category IDs; parsing tokens and checking membership is safer. (2) Appending to $issue_category while iterating can introduce duplicates and makes the final list order/contents harder to reason about; consider building a separate set (and de-duplicating) before returning.

Copilot uses AI. Check for mistakes.
Comment thread LICENSE.md
this License applicable to that copy.

3. Object Code Incorporating Material from Library Header Files.
3. Object Code Incorporating Material from Library Header GoToIcon.
Copy link

Copilot AI Apr 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The license text appears to have been accidentally modified; this should match the canonical LGPL wording. Please revert this line to the original text to avoid altering license terms.

Suggested change
3. Object Code Incorporating Material from Library Header GoToIcon.
3. Object Code Incorporating Material from Library Header Files.

Copilot uses AI. Check for mistakes.
<div class="ui active inverted dimmer">
<div class="ui massive text loader">Loading Projects</div>
</div>

Copy link

Copilot AI Apr 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The initial loading dimmer/loader markup was removed, leaving an empty container. If JS fails to hydrate or is slow, users will see a blank area with no loading feedback. Consider keeping a minimal non-JS fallback loader here or replacing it with the new spinner loader component markup.

Suggested change
<div class="manage-loading-fallback" role="status" aria-live="polite" aria-busy="true">
<span>Loading projects…</span>
</div>
<noscript>
<div class="manage-loading-fallback">
<span>This page requires JavaScript to load the project management interface.</span>
</div>
</noscript>

Copilot uses AI. Check for mistakes.
$seg['ice_modified'] = $segment->ice_modified;
$seg['is_pre_translated'] = $segment->is_pre_translated;
$seg['issues'] = $segment->issues;
$seg['history'] = $segment->history;
Copy link

Copilot AI Apr 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The PR description focuses on the new segment history API field, but the PR also contains a very large cross-cutting UI redesign (dozens of SCSS changes, new components, deleted legacy styles, layout refactors). This makes the PR difficult to review and risky to deploy; consider updating the PR description to reflect both scopes or splitting into separate PRs (API vs. design system refactor).

Copilot uses AI. Check for mistakes.
Copilot AI review requested due to automatic review settings April 23, 2026 14:37
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 119 out of 412 changed files in this pull request and generated 6 comments.

Comment on lines +263 to +264
" ORDER BY creation_date DESC ";
}
Copy link

Copilot AI Apr 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new getVersionsForTranslationBySegment() method is incomplete: it builds $sql but never prepares/executes it (and returns nothing). Also, the next method historyEvents() starts immediately after, so the intended separation/structure is ambiguous and will likely break expected DAO behavior. Implement the DB execution + return value (or remove the method if not needed).

Suggested change
" ORDER BY creation_date DESC ";
}
" ORDER BY creation_date DESC ";
$conn = Database::obtain()->getConnection();
$stmt = $conn->prepare($sql);
return $this->_fetchObjectMap(
$stmt,
TranslationVersionStruct::class,
['id_job' => $id_job, 'id_segment' => $id_segment]
);
}

Copilot uses AI. Check for mistakes.
Comment on lines 46 to 51
.notifications-position-bc {
@extend .notifications-position;
top: auto;
bottom: 30px;
margin: 0 auto;
left: 50%;
margin-left: calc(-1 * (variables.$notifications-width / 2));
}
Copy link

Copilot AI Apr 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

.notifications-position-bc and .notifications-position-tc are no longer centered: left: 50% is present but the compensating negative margin (or an equivalent transform: translateX(-50%)) was removed. This will shift the notification container to the right by half its width.

Copilot uses AI. Check for mistakes.
Comment on lines 64 to 69
.notifications-position-tc {
@extend .notifications-position;
top: 60px;
bottom: auto;
margin: 0 auto;
left: 50%;
margin-left: calc(-1 * (variables.$notifications-width / 2));
}
Copy link

Copilot AI Apr 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

.notifications-position-bc and .notifications-position-tc are no longer centered: left: 50% is present but the compensating negative margin (or an equivalent transform: translateX(-50%)) was removed. This will shift the notification container to the right by half its width.

Copilot uses AI. Check for mistakes.
Comment on lines +243 to +253
/**
* Populates the history for a given quality report segment by organizing events and associated issues.
*
* @param QualityReportSegmentStruct $seg The segment structure where the history will be populated.
* @param MateCatFilter $Filter The filter used to process translations for UI rendering.
* @param array $events An array of SegmentEventsStruct objects representing the events related to the segment.
* @param array $issues An array of issue objects to associate with the events, filtered by segment and version.
* @param bool $isForUI Indicates whether the translation should be processed for UI display purposes.
*
* @return void
*/
Copy link

Copilot AI Apr 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The docblock states $events is an array of SegmentEventsStruct, but _populateHistory() actually expects HistoryElementStruct (and uses it in the array_filter callback/foreach). Update the PHPDoc to match the real type to avoid misleading IDE/static analysis.

Copilot uses AI. Check for mistakes.
}
.layout-container {
position: relative;
.layout__container {
Copy link

Copilot AI Apr 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This renames the public CSS class .layout-container to .layout__container (and removes some layout rules from the old class). If consumers/templates still reference .layout-container, layout will break. If the rename is intentional, consider keeping a temporary compatibility selector (e.g., .layout-container { @extend .layout__container; }) during migration.

Copilot uses AI. Check for mistakes.

protected string $tm_analysis_status;

public array $history = [];
Copy link

Copilot AI Apr 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The PR description focuses on adding history to the quality-report segments endpoint, but the PR also includes a very large cross-app Sass redesign (new tokens, layout, header/dashboard/job containers, deleted/renamed styles). Consider splitting the backend API change (history) and UI design refactor into separate PRs to keep reviewability and rollout risk manageable.

Copilot uses AI. Check for mistakes.
@riccio82 riccio82 changed the title Design update 💄 style: update design system and UI components Apr 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants