Skip to content

Conversation

@jvciq
Copy link
Collaborator

@jvciq jvciq commented Oct 29, 2025

SUMMARY

UI updates to match Quantic DS styles.

This pull request introduces the integration of the Quantic design system into the AWX UI. The main changes include adding Quantic packages as dependencies, updating Webpack and dev server config to support custom font assets, and cleaning up legacy styles and assets. These updates lay the groundwork for using Quantic components and styles throughout the application.

ISSUE TYPE
  • New or Enhanced Feature
COMPONENT NAME
  • UI
ASCENDER VERSION
awx: 25.2.1.dev6+gf000c1cb3

Copy link
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

This PR migrates the UI from PatternFly React Icons to Lucide Icons through the @ctrliq/quantic-react library, implements a new design system with Quantic tokens, and updates styling throughout the application. The changes include icon replacements, CSS variable overrides, and font integration.

Key Changes

  • Replaced all PatternFly icon imports with Lucide icon equivalents from @ctrliq/quantic-react
  • Added comprehensive PatternFly CSS overrides using Quantic design tokens
  • Integrated Satoshi and Inter fonts and removed Background component

Reviewed Changes

Copilot reviewed 167 out of 178 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
awx/ui/src/patternfly-overrides.css New 619-line CSS file defining Quantic design system overrides for PatternFly components
awx/ui/src/index.js Added Quantic tokens/fonts imports and font injection logic
awx/ui/src/components/StatusIcon/icons.js Migrated icon definitions from PatternFly to Lucide icons
awx/ui/src/screens/Login/Login.js Updated login page styling and icon imports
Multiple component files Replaced PatternFly icon imports with Lucide equivalents throughout
Files not reviewed (1)
  • awx/ui/package-lock.json: Language not supported

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

if (linkTo) {
return (
<Tooltip content={defaultLabel || t`Add`} position="top">
<Tooltip content={defaultLabel || t`Add`} position="top" open>
Copy link

Copilot AI Oct 30, 2025

Choose a reason for hiding this comment

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

The open prop on Tooltip will cause the tooltip to always be visible. This appears to be unintentional and should be removed unless permanent visibility is required.

Copilot uses AI. Check for mistakes.

Choose a reason for hiding this comment

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

I agree

onClick={() => onRefreshRow(project.id)}
>
<UndoIcon />
<LucideIconUndo_2 data-original-icon="UndoIcon" />
Copy link

Copilot AI Oct 30, 2025

Choose a reason for hiding this comment

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

The icon LucideIconUndo_2 is missing the size prop that is consistently applied to other icons throughout this PR. For consistency, add size={16} or an appropriate size value.

Copilot uses AI. Check for mistakes.
return (
<EmptyState variant="full" className={className}>
<EmptyStateIcon icon={icon} />
<EmptyStateIcon size={64} icon={icon} />
Copy link

Copilot AI Oct 30, 2025

Choose a reason for hiding this comment

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

The size prop is applied to EmptyStateIcon component but icons passed to it may also need sizing. Ensure that icons passed via the icon prop properly handle the size, as earlier in the file the default icon is LucideIconBox which may need explicit sizing.

Copilot uses AI. Check for mistakes.

Choose a reason for hiding this comment

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

Also, the size is a hardcoded number. Should this be a token/css var?

import styled from 'styled-components';
import { parseQueryString } from 'util/qs';
import { SortColumns, QSConfig } from 'types';
import { LucideIconArrowDown10, LucideIconArrowDownAZ } from '@ctrliq/quantic-react';
Copy link

Copilot AI Oct 30, 2025

Choose a reason for hiding this comment

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

Unused imports LucideIconArrowDown10, LucideIconArrowDownAZ.

Copilot uses AI. Check for mistakes.
useParams,
} from 'react-router-dom';
import { CaretLeftIcon } from '@patternfly/react-icons';
import { LucideIconChevronLeft } from '@ctrliq/quantic-react';
Copy link

Copilot AI Oct 30, 2025

Choose a reason for hiding this comment

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

Unused import LucideIconChevronLeft.

Copilot uses AI. Check for mistakes.
Copy link

@adewergifosse-ciq adewergifosse-ciq left a comment

Choose a reason for hiding this comment

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

Since this a draft PR, I will not approve/reject.

This is all looking great! Thank you for doing this work.
I left a few comments around consistency mostly.

{
// Serve quantic-fonts assets at /assets path
directory: path.resolve(__dirname, '../node_modules/@ctrliq/quantic-fonts/dist/assets'),
publicPath: '/assets',

Choose a reason for hiding this comment

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

question: Could this conflict with an actual public assets folder?
Should we/Could we make it a more specific path like quantic-assets?

// Paths with dots should still use the history fallback.
// See https://github.com/facebook/create-react-app/issues/387.
disableDotRule: true,
disableDotRule: false,

Choose a reason for hiding this comment

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

question: What does this do?
the comment was not changed but the value was

Choose a reason for hiding this comment

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

Shame we're losing this magnificent favicon

Copy link
Collaborator

Choose a reason for hiding this comment

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

lol...

Copy link
Contributor

Choose a reason for hiding this comment

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

Ya, we used to call him Rage taHdeR.

margin: 0px 0px 0px 0px;
max-width: initial;
max-height: 60px;
max-height: 36px;

Choose a reason for hiding this comment

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

nitpick: Should this value come from a token/css var?

return (
<EmptyState variant="full" className={className}>
<EmptyStateIcon icon={icon} />
<EmptyStateIcon size={64} icon={icon} />

Choose a reason for hiding this comment

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

Also, the size is a hardcoded number. Should this be a token/css var?

name: (
<>
<CaretLeftIcon aria-label={t`Back to Groups`} />
<ChevronLeft aria-label={t`Back to Groups`} />

Choose a reason for hiding this comment

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

Inconsisency between LucideIconChevronLeft in the import and ChevronLeft in the usage

data-cy="login-form"
className={authError ? 'pf-m-error' : ''}
helperText={helperText}
helperText={authError ? helperText : null}

Choose a reason for hiding this comment

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

question: This changes the behaviour. Is there no case wehre we need to display a helperText that is not an error?

>
<Tooltip content={t`Sign in with Azure AD`}>
<AzureIcon size="lg" />
<AzureIcon size={24} data-original-icon="AzureIcon" />

Choose a reason for hiding this comment

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

new size: 24?

color: black;
font-size: 10px;
background-color: var(--quantic-bg-tertiary);
line-height: 1;

Choose a reason for hiding this comment

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

nitpick: Should this be a token/css var?

background-color: white;
border: 1px solid #ccc;
color: black;
font-size: 10px;

Choose a reason for hiding this comment

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

nitpick: Should this be a token/css var?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

5 participants