Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
678 changes: 678 additions & 0 deletions frontend/package-lock.json

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@
"@slack/web-api": "^6.9.1",
"animejs": "3.0.1",
"array-find-index": "^1.0.2",
"autoprefixer": "^10.4.21",
"babel-loader": "8.3.0",
"babel-plugin-module-resolver": "^4.1.0",
"babel-plugin-transform-object-rest-spread": "7.0.0-beta.3",
Expand Down Expand Up @@ -138,6 +139,7 @@
"semver": "^7.5.2",
"style-loader": "1.3.0",
"suppress-exit-code": "^1.0.0",
"tailwindcss": "^3.4.17",
"terser-webpack-plugin": "^5.3.6",
"testcafe-react-selectors": "^5.0.3",
"toml": "^3.0.0",
Expand Down Expand Up @@ -174,6 +176,7 @@
"eslint-plugin-react-hooks": "4.3.0",
"eslint-plugin-sort-destructure-keys": "^1.4.0",
"eslint-plugin-sort-keys-fix": "^1.1.2",
"eslint-plugin-tailwindcss": "^3.18.2",
"minimist": "^1.2.8",
"nodemon": "^3.0.1",
"raw-loader": "0.5.1",
Expand Down
3 changes: 3 additions & 0 deletions frontend/postcss.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module.exports = {
plugins: [require('tailwindcss'), require('autoprefixer')],
}
207 changes: 207 additions & 0 deletions frontend/tailwind.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,207 @@
/** @type {import('tailwindcss').Config} */
module.exports = {
content: [
'./web/components/**/*.{js,ts,jsx,tsx}',
'./web/pages/**/*.{js,ts,jsx,tsx}',
'./common/components/**/*.{js,ts,jsx,tsx}',
],
corePlugins: {
preflight: false, // This allows to fix the headers by avoiding the default tailwind reset
},
darkMode: 'class',
plugins: [],
// Uses .dark class for dark mode
theme: {
extend: {
borderRadius: {
DEFAULT: '6px',
'lg': '8px',
'sm': '4px',
'xlg': '10px',
},

colors: {
// Alert colors
alert: {
'danger-bg': 'rgba(254, 239, 241)',
'danger-dark-bg': 'rgba(34, 23, 40)',
'info-bg': 'rgba(236, 249, 252)',
'info-dark-bg': 'rgba(15, 32, 52)',
'success-bg': 'rgba(39, 171, 149, 0.08)',
'success-dark-bg': 'rgba(17, 32, 46)',
'warning-bg': 'rgba(255, 248, 240)',
'warning-dark-bg': 'rgba(34, 31, 39)',
},

// Alpha colors for overlays and subtle backgrounds
alpha: {
'basic-16': 'rgba(101, 109, 123, 0.16)',
'basic-24': 'rgba(101, 109, 123, 0.24)',
'basic-32': 'rgba(101, 109, 123, 0.32)',
'basic-48': 'rgba(101, 109, 123, 0.48)',
'basic-8': 'rgba(101, 109, 123, 0.08)',
'black-16': 'rgba(0, 0, 0, 0.16)',
'black-32': 'rgba(0, 0, 0, 0.32)',
'black-8': 'rgba(0, 0, 0, 0.08)',
'primary-16': 'rgba(149, 108, 255, 0.16)',
'primary-24': 'rgba(149, 108, 255, 0.24)',
'primary-32': 'rgba(149, 108, 255, 0.32)',
'primary-8': 'rgba(149, 108, 255, 0.08)',
'white-16': 'rgba(255, 255, 255, 0.16)',
'white-24': 'rgba(255, 255, 255, 0.24)',
'white-32': 'rgba(255, 255, 255, 0.32)',
'white-48': 'rgba(255, 255, 255, 0.48)',
'white-8': 'rgba(255, 255, 255, 0.08)',
},

// Background colors
bg: {
'dark-100': '#2d3443',
'dark-200': '#202839',
'dark-300': '#161d30',
'dark-400': '#15192b',
'dark-500': '#101628',
'light-100': '#ffffff',
'light-200': '#fafafb',
'light-300': '#eff1f4',
'light-500': '#e0e3e9',
},

// Body colors
body: {
DEFAULT: '#1a2634',
dark: '#ffffff',
},

// Checkbox colors
checkbox: {
border: 'rgba(101, 109, 123, 0.24)',
'border-dark': 'rgba(255, 255, 255, 0.24)',
'checked-hover-border': '#4e25db',
'focus-bg': 'rgba(149, 108, 255, 0.08)',
'focus-border': '#906af6',
'hover-border': '#6837fc',
},

// Semantic colors
danger: {
400: '#f57c78',
DEFAULT: '#ef4d56',
},

'dark-text': '#ff0000',

// Header colors
header: {
DEFAULT: '#1e0d26',
dark: '#ffffff',
},

info: '#0aaddf',

// Input colors
input: {
bg: '#fff',
'bg-alt': '#f7f7f7',
'bg-dark': '#161d30',
'border': 'rgba(101, 109, 123, 0.16)',
'border-dark': '#15192b',
'placeholder': 'rgba(157, 164, 174, 1)',
'placeholder-dark': 'rgba(157, 164, 174, 1)',
},

// Primary colors
primary: {
400: '#906af6',
600: '#4e25db',
700: '#3919b7',
800: '#2a2054',
900: '#1E0D26',
DEFAULT: '#6837fc',
},

// Secondary colors
secondary: {
400: '#fae392',
500: '#F7D56E',
600: '#e5c55f',
700: '#d4b050',
DEFAULT: '#fae392',
},

success: {
400: '#56ccad',
600: '#13787b',
DEFAULT: '#27ab95',
},

// Text colors
text: {
DEFAULT: '#FF0000',
Copy link

Choose a reason for hiding this comment

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

Bug: Red Text Bug in Tailwind Config

The default text color in tailwind.config.js is set to #FF0000 (red), which appears to be debug code. This makes all default text red across the application, breaking the visual design.

Fix in Cursor Fix in Web

'icon-grey': '#656d7b',
'icon-light': '#ffffff',
'icon-light-grey': 'rgba(157, 164, 174, 1)',
},

warning: '#ff9f43',
},

fontFamily: {
header: ['OpenSans', 'sans-serif'],
sans: ['OpenSans', 'sans-serif'],
},

fontSize: {
'2xl': '24px',
'3xl': '30px',
'4xl': '36px',
'5xl': '48px',
'6xl': '60px',
'base': '16px',
'lg': '18px',
'sm': '14px',
'xl': '20px',
'xs': '12px',
},

height: {
'btn': '44px',
'btn-lg': '56px',
'btn-sm': '40px',
'btn-xsm': '32px',
'input': '44px',
'input-lg': '58px',
'input-sm': '42px',
'input-xsm': '34px',
'textarea': '120px',
'textarea-lg': '128px',
'textarea-sm': '100px',
},

opacity: {
'disabled': '0.32',
},

spacing: {
'btn-x': '20px',
'btn-x-lg': '24px',
'btn-x-sm': '16px',
'input-x': '16px',
'input-x-lg': '20px',
'input-x-sm': '14px',
'input-y': '12px',
'input-y-lg': '16px',
'input-y-sm': '8px',
},

transitionDuration: {
'button': '400ms',
'highlight': '450ms',
},

transitionTimingFunction: {
'material': 'cubic-bezier(0.23, 1, 0.32, 1)',
},
},
},
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ const FeatureAnalytics: React.FC<FeatureAnalyticsProps> = ({ usageData }) => {
<FormGroup>
{!!usageData && <h5 className='mb-2'>Flag events for last 30 days</h5>}
{!usageData && (
<div className='text-center'>
<div className=' text-center'>
<Loader />
</div>
)}
Expand Down
2 changes: 1 addition & 1 deletion frontend/web/components/feature-summary/FeatureName.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ const FeatureName: FC<FeatureNameType> = ({ name }) => {
wordBreak: 'break-all',
}}
>
<span>{name}</span>
<span className='dark:text-red-500'>{name}</span>
Copy link

Choose a reason for hiding this comment

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

Bug: Red Feature Names in Dark Mode

The dark:text-red-500 class was accidentally committed, causing feature names to appear red in dark mode. This appears to be test code from the Tailwind POC and is not intended for production.

Fix in Cursor Fix in Web

<Button onClick={copyFeature} theme='icon' className='ms-2 me-2'>
<Icon name='copy' />
</Button>
Expand Down
2 changes: 1 addition & 1 deletion frontend/web/components/navigation/TabMenu/Tabs.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ const Tabs: React.FC<TabsProps> = ({
</div>
{overflow.length > 0 && !isMeasuring && (
<div
className='d-flex align-items-center justify-content-center ms-2 flex-shrink-0'
className='d-flex align-items-center justify-content-center ms-2 flex-shrink-0 btn btn-secondary'
Copy link

Choose a reason for hiding this comment

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

Bug: Overflow Button Styling Conflict

Adding btn btn-secondary classes to the overflow button div conflicts with its existing inline styles (e.g., backgroundColor, borderRadius, height, width). This changes the visual appearance of the tabs overflow menu and is semantically incorrect for a div element.

Fix in Cursor Fix in Web

style={{
backgroundColor: 'var(--bs-light300)',
borderRadius: 6,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ const OrganisationNavbar: FC<OrganisationNavType> = ({}) => {
gap={3}
key={AccountStore.getOrganisation()?.id}
containerClassName='px-2 pb-1 pb-md-0 pb-mb-0 bg-faint'
className='py-0 d-flex'
className='py-0 flex'
>
<NavSubLink
icon={apps}
Expand Down
2 changes: 0 additions & 2 deletions frontend/web/components/pages/ChangeRequestsPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,6 @@ export const ChangeRequestsInner: FC<ChangeRequestsInnerType> = ({
<Flex>
<div>
{changeRequestsDisabled && <p>{ChangeRequestsDisabledMessage}</p>}

<Tabs urlParam={'tab'}>
<TabItem
tabLabelString='Open'
Expand All @@ -186,7 +185,6 @@ export const ChangeRequestsInner: FC<ChangeRequestsInnerType> = ({
users={users}
/>
</TabItem>

<TabItem
tabLabelString='Closed'
tabLabel={
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ const UsersAndPermissionsInner: FC<UsersAndPermissionsInnerType> = ({
json={users}
/>
<JSONReference title={'Invite Links'} json={inviteLinks} />

<p>yolo</p>
Copy link

Choose a reason for hiding this comment

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

Bug: Development Code Leaks to Production

A debug paragraph element <p>yolo</p> was accidentally committed to the Users and Permissions page, making temporary development code visible in production.

Fix in Cursor Fix in Web

<FormGroup className='mt-4'>
<div className='col-md-8'>
<h5 className='mb-2'>Manage Users and Permissions</h5>
Expand Down
1 change: 1 addition & 0 deletions frontend/web/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import './project/libs'
import './project/api'
import './project/project-components'
import './styles/styles.scss'
import './styles/tailwind.css'
Copy link

Choose a reason for hiding this comment

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

Bug: Tailwind CSS Imported Twice Causes Bloat

Tailwind CSS is imported twice, once directly in main.js and again via styles.scss. This duplicates CSS in the final bundle, increasing its size and potentially causing style conflicts.

Additional Locations (1)

Fix in Cursor Fix in Web

Copy link
Contributor Author

@Zaimwa9 Zaimwa9 Sep 30, 2025

Choose a reason for hiding this comment

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

Ah thanks i was looking for where it was bloating

import { BrowserRouter as Router } from 'react-router-dom'
import { createBrowserHistory } from 'history'
import ToastMessages from './project/toast'
Expand Down
Loading
Loading