diff --git a/package-lock.json b/package-lock.json
index b3f206a49..f5238bf18 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@devtron-labs/devtron-fe-common-lib",
- "version": "1.12.0-pre-4",
+ "version": "1.12.0-pre-5",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@devtron-labs/devtron-fe-common-lib",
- "version": "1.12.0-pre-4",
+ "version": "1.12.0-pre-5",
"hasInstallScript": true,
"license": "ISC",
"dependencies": {
diff --git a/package.json b/package.json
index a6af9db1f..9ed6e2734 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@devtron-labs/devtron-fe-common-lib",
- "version": "1.12.0-pre-4",
+ "version": "1.12.0-pre-5",
"description": "Supporting common component library",
"type": "module",
"main": "dist/index.js",
diff --git a/src/Assets/IconV2/ic-info-filled.svg b/src/Assets/IconV2/ic-info-filled.svg
index 8f79e556b..f9f02f2b0 100644
--- a/src/Assets/IconV2/ic-info-filled.svg
+++ b/src/Assets/IconV2/ic-info-filled.svg
@@ -16,5 +16,5 @@
diff --git a/src/Assets/IconV2/ic-thumb-down.svg b/src/Assets/IconV2/ic-thumb-down.svg
new file mode 100644
index 000000000..54ef52337
--- /dev/null
+++ b/src/Assets/IconV2/ic-thumb-down.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/Assets/IconV2/ic-thumb-up.svg b/src/Assets/IconV2/ic-thumb-up.svg
new file mode 100644
index 000000000..c98369a89
--- /dev/null
+++ b/src/Assets/IconV2/ic-thumb-up.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/Common/Types.ts b/src/Common/Types.ts
index 438ac8947..9f67632bd 100644
--- a/src/Common/Types.ts
+++ b/src/Common/Types.ts
@@ -1071,16 +1071,6 @@ export interface EnvironmentHelmResult {
export type EnvironmentListHelmResponse = ResponseType
-export interface WidgetEventDetails {
- message: string
- namespace: string
- object: string
- source: string
- count: number
- age: string
- lastSeen: string
-}
-
export interface GlobalVariableDTO {
name: string
format: VariableTypeFormat
@@ -1129,4 +1119,4 @@ export interface AppMeta {
export interface EnvAppsMetaDTO {
appCount: number
apps: AppMeta[]
-}
\ No newline at end of file
+}
diff --git a/src/Shared/Components/Icon/Icon.tsx b/src/Shared/Components/Icon/Icon.tsx
index 16c5e2585..5db478d3f 100644
--- a/src/Shared/Components/Icon/Icon.tsx
+++ b/src/Shared/Components/Icon/Icon.tsx
@@ -108,6 +108,8 @@ import { ReactComponent as ICSuccess } from '@IconsV2/ic-success.svg'
import { ReactComponent as ICSuspended } from '@IconsV2/ic-suspended.svg'
import { ReactComponent as ICTata1mg } from '@IconsV2/ic-tata1mg.svg'
import { ReactComponent as ICTerminalFill } from '@IconsV2/ic-terminal-fill.svg'
+import { ReactComponent as ICThumbDown } from '@IconsV2/ic-thumb-down.svg'
+import { ReactComponent as ICThumbUp } from '@IconsV2/ic-thumb-up.svg'
import { ReactComponent as ICTimeoutDash } from '@IconsV2/ic-timeout-dash.svg'
import { ReactComponent as ICTimer } from '@IconsV2/ic-timer.svg'
import { ReactComponent as ICTravclan } from '@IconsV2/ic-travclan.svg'
@@ -229,6 +231,8 @@ export const iconMap = {
'ic-suspended': ICSuspended,
'ic-tata1mg': ICTata1mg,
'ic-terminal-fill': ICTerminalFill,
+ 'ic-thumb-down': ICThumbDown,
+ 'ic-thumb-up': ICThumbUp,
'ic-timeout-dash': ICTimeoutDash,
'ic-timer': ICTimer,
'ic-travclan': ICTravclan,
diff --git a/src/Shared/Components/TabGroup/TabGroup.component.tsx b/src/Shared/Components/TabGroup/TabGroup.component.tsx
index eb8059cb9..2d1d8a10b 100644
--- a/src/Shared/Components/TabGroup/TabGroup.component.tsx
+++ b/src/Shared/Components/TabGroup/TabGroup.component.tsx
@@ -28,7 +28,15 @@ import { getClassNameBySizeMap, tabGroupClassMap } from './TabGroup.utils'
import './TabGroup.scss'
const MotionLayoutUnderline = ({ layoutId }: { layoutId: string }) => (
-
+
+ // Replace the y value in translate3d(x, y, z) with 0px to omit y axis transitions
+ generatedTransform.replace(/translate3d\(([^,]+),\s*[^,]+,\s*([^)]+)\)/, 'translate3d($1, 0px, $2)')
+ }
+ layoutId={layoutId}
+ className="underline bcb-5 w-100 dc__position-abs"
+ />
)
const Tab = ({
@@ -59,7 +67,6 @@ const Tab = ({
const { tabClassName, iconClassName, badgeClassName } = getClassNameBySizeMap({
hideTopPadding,
- isTabActive,
})[size]
const onClickHandler = (
diff --git a/src/Shared/Components/TabGroup/TabGroup.scss b/src/Shared/Components/TabGroup/TabGroup.scss
index 2ddaaf6b9..02f5e7967 100644
--- a/src/Shared/Components/TabGroup/TabGroup.scss
+++ b/src/Shared/Components/TabGroup/TabGroup.scss
@@ -34,9 +34,10 @@
@include svg-styles(var(--N700));
.underline {
- height: 2px;
+ height: 2px !important;
border-top-left-radius: 2px;
border-top-right-radius: 2px;
+ bottom: -1px;
}
&--active {
diff --git a/src/Shared/Components/TabGroup/TabGroup.utils.ts b/src/Shared/Components/TabGroup/TabGroup.utils.ts
index 5bc8aeb6f..5682c1651 100644
--- a/src/Shared/Components/TabGroup/TabGroup.utils.ts
+++ b/src/Shared/Components/TabGroup/TabGroup.utils.ts
@@ -21,8 +21,7 @@ import { TabGroupProps } from './TabGroup.types'
export const getClassNameBySizeMap = ({
hideTopPadding,
- isTabActive,
-}: Pick & { isTabActive: boolean }): Record<
+}: Pick): Record<
TabGroupProps['size'],
{
tabClassName: string
@@ -31,17 +30,17 @@ export const getClassNameBySizeMap = ({
}
> => ({
[ComponentSizeType.medium]: {
- tabClassName: `fs-12 ${!hideTopPadding ? 'pt-6' : ''} ${isTabActive ? 'pb-3' : 'pb-5'}`,
+ tabClassName: `fs-12 ${!hideTopPadding ? 'pt-6' : ''} pb-5`,
iconClassName: 'icon-dim-14',
badgeClassName: 'fs-11 lh-18 tab-group__tab__badge--medium',
},
[ComponentSizeType.large]: {
- tabClassName: `fs-13 ${!hideTopPadding ? 'pt-8' : ''} ${isTabActive ? 'pb-5' : 'pb-7'}`,
+ tabClassName: `fs-13 ${!hideTopPadding ? 'pt-8' : ''} pb-7`,
iconClassName: 'icon-dim-16',
badgeClassName: 'fs-12 lh-20',
},
[ComponentSizeType.xl]: {
- tabClassName: `min-w-200 fs-13 ${!hideTopPadding ? 'pt-10' : ''} ${isTabActive ? 'pb-7' : 'pb-9'}`,
+ tabClassName: `min-w-200 fs-13 ${!hideTopPadding ? 'pt-10' : ''} pb-9`,
iconClassName: 'icon-dim-16',
badgeClassName: 'fs-12 lh-20',
},
diff --git a/src/Shared/Helpers.tsx b/src/Shared/Helpers.tsx
index eda31ea24..b73a459ad 100644
--- a/src/Shared/Helpers.tsx
+++ b/src/Shared/Helpers.tsx
@@ -790,19 +790,31 @@ export const getTimeDifference = ({
return fallbackString
}
- const seconds = moment(endTime).diff(moment(startTime), 'seconds')
- const minutes = moment(endTime).diff(moment(startTime), 'minutes')
- const hours = moment(endTime).diff(moment(startTime), 'hours')
-
- if (seconds < 60) {
- return `${seconds}s`
+ const start = moment(startTime)
+ const end = moment(endTime)
+ if (!start.isValid() || !end.isValid()) {
+ return fallbackString
}
- if (minutes < 60) {
- return `${minutes}m ${seconds % 60}s`
+
+ const diff = Math.abs(end.diff(start))
+ const duration = moment.duration(diff)
+
+ const units = [
+ { label: 'd', value: duration.days() },
+ { label: 'h', value: duration.hours() },
+ { label: 'm', value: duration.minutes() },
+ { label: 's', value: duration.seconds() },
+ ]
+
+ // Filter out zero values and take the first two non-zero units
+ const nonZeroUnits = units.filter((unit) => unit.value > 0).slice(0, 2)
+
+ // If all units are zero, show "0s"
+ if (nonZeroUnits.length === 0) {
+ return '0s'
}
- const leftOverMinutes = minutes - hours * 60
- const leftOverSeconds = seconds - minutes * 60
- return `${hours}h ${leftOverMinutes}m ${leftOverSeconds}s`
+
+ return nonZeroUnits.map((unit) => `${unit.value}${unit.label}`).join(' ')
}
export const getFileNameFromHeaders = (headers: Headers) =>
diff --git a/src/Shared/Providers/types.ts b/src/Shared/Providers/types.ts
index 68af58238..d3d456ad2 100644
--- a/src/Shared/Providers/types.ts
+++ b/src/Shared/Providers/types.ts
@@ -18,7 +18,7 @@ import { Dispatch, MutableRefObject, ReactNode, SetStateAction } from 'react'
import { SERVER_MODE } from '../../Common'
import { ServerInfo } from '../Components/Header/types'
-import { DevtronLicenseInfo, LicenseInfoDialogType } from '..'
+import { DevtronLicenseInfo, IntelligenceConfig, LicenseInfoDialogType } from '..'
export interface MainContext {
serverMode: SERVER_MODE
@@ -66,6 +66,8 @@ export interface MainContext {
licenseData: DevtronLicenseInfo
setLicenseData: Dispatch>
canFetchHelmAppStatus: boolean
+ intelligenceConfig: IntelligenceConfig
+ setIntelligenceConfig: Dispatch>
}
export interface MainContextProviderProps {
diff --git a/src/Shared/types.ts b/src/Shared/types.ts
index aaef6adc4..869bd4357 100644
--- a/src/Shared/types.ts
+++ b/src/Shared/types.ts
@@ -1152,3 +1152,10 @@ export enum RegistryCredentialsType {
USERNAME_PASSWORD = 'username_password',
ANONYMOUS = 'anonymous',
}
+
+export interface IntelligenceConfig {
+ clusterId: number
+ metadata: Record
+ prompt: string
+ analyticsCategory: string
+}
diff --git a/src/index.ts b/src/index.ts
index f582c59a3..f598dd3d3 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -155,6 +155,7 @@ export interface customEnv {
*/
FEATURE_APPLICATION_TEMPLATES_ENABLE?: boolean
GATEKEEPER_URL?: string
+ FEATURE_AI_INTEGRATION_ENABLE?: boolean
}
declare global {
interface Window {