From 33c52904f1fec2e88be7481419eb6648e1346268 Mon Sep 17 00:00:00 2001 From: TilmanHaupt Date: Wed, 15 Oct 2025 14:04:38 +0200 Subject: [PATCH 01/12] chore(heureka): change timestamp --- .../heureka/src/components/common/IssueTimestamp.tsx | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/apps/heureka/src/components/common/IssueTimestamp.tsx b/apps/heureka/src/components/common/IssueTimestamp.tsx index 0cd889a050..48b0f63ec8 100644 --- a/apps/heureka/src/components/common/IssueTimestamp.tsx +++ b/apps/heureka/src/components/common/IssueTimestamp.tsx @@ -4,7 +4,6 @@ */ import React from "react" -import { DateTime } from "luxon" import { Stack } from "@cloudoperators/juno-ui-components" type IssueTimestampProps = { @@ -12,12 +11,17 @@ type IssueTimestampProps = { } export const IssueTimestamp = ({ targetDate }: IssueTimestampProps) => { - const dateFormat = { ...DateTime.DATE_MED } - const targetDateTime = DateTime.fromISO(targetDate) + const targetDateTime = new Date(targetDate) + + const formattedDate = targetDateTime.toLocaleDateString("en-GB", { + year: "numeric", + month: "short", + day: "numeric", + }) return ( -
{targetDateTime.toLocaleString(dateFormat)}
+
{formattedDate}
) } From 07c6f71016f82b18c9186c6117bf2ca3f7c1d166 Mon Sep 17 00:00:00 2001 From: TilmanHaupt Date: Wed, 15 Oct 2025 14:28:04 +0200 Subject: [PATCH 02/12] chore(supernova): del luxon --- .../alerts/shared/AlertSilencesList.tsx | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/apps/supernova/src/components/alerts/shared/AlertSilencesList.tsx b/apps/supernova/src/components/alerts/shared/AlertSilencesList.tsx index 1f902bf3cb..99d87429a1 100644 --- a/apps/supernova/src/components/alerts/shared/AlertSilencesList.tsx +++ b/apps/supernova/src/components/alerts/shared/AlertSilencesList.tsx @@ -4,7 +4,6 @@ */ import React from "react" -import { DateTime } from "luxon" import constants from "../../../constants" import ExpireSilence from "../../silences/ExpireSilence" import RecreateSilence from "../../silences/RecreateSilence" @@ -23,14 +22,21 @@ const badgeVariant = (state: any) => { } const AlertSilencesList = ({ alert }: any) => { - const dateFormat = { ...DateTime.DATETIME_SHORT } const { getSilencesForAlert } = useSilencesActions() const silenceList = getSilencesForAlert(alert) - const formatDateTime = (timestamp: any) => { - const time = DateTime.fromISO(timestamp) - return time.toLocaleString(dateFormat) + const formatDateTime = (timestamp: VarDate) => { + const date = new Date(timestamp) + return date.toLocaleString('en-GB', { + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + hour12: false + }) } + return ( <> From ee839f8301f798afd3bb2c9f97813ea49f86821e Mon Sep 17 00:00:00 2001 From: TilmanHaupt Date: Wed, 15 Oct 2025 14:29:49 +0200 Subject: [PATCH 03/12] chore(supernova): redo date type --- .../alerts/shared/AlertSilencesList.tsx | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/apps/supernova/src/components/alerts/shared/AlertSilencesList.tsx b/apps/supernova/src/components/alerts/shared/AlertSilencesList.tsx index 99d87429a1..30c3995ba5 100644 --- a/apps/supernova/src/components/alerts/shared/AlertSilencesList.tsx +++ b/apps/supernova/src/components/alerts/shared/AlertSilencesList.tsx @@ -27,16 +27,15 @@ const AlertSilencesList = ({ alert }: any) => { const formatDateTime = (timestamp: VarDate) => { const date = new Date(timestamp) - return date.toLocaleString('en-GB', { - year: 'numeric', - month: '2-digit', - day: '2-digit', - hour: '2-digit', - minute: '2-digit', - hour12: false + return date.toLocaleString("en-GB", { + year: "numeric", + month: "short", + day: "2-digit", + hour: "2-digit", + minute: "2-digit", + hour12: false, }) } - return ( <> From c308d4da5a00ee8d2644c9a0027d782085027c38 Mon Sep 17 00:00:00 2001 From: Hoda Noori Date: Wed, 15 Oct 2025 14:32:15 +0200 Subject: [PATCH 04/12] chore(heureka): replaces lodash with helper functions --- apps/heureka/package.json | 1 - apps/heureka/src/components/Services/utils.ts | 6 +-- .../common/Filters/FilterSelect.tsx | 2 +- apps/heureka/src/utils.ts | 40 +++++++++++++++++++ 4 files changed, 44 insertions(+), 5 deletions(-) diff --git a/apps/heureka/package.json b/apps/heureka/package.json index 98f722a2ea..288f75cd67 100644 --- a/apps/heureka/package.json +++ b/apps/heureka/package.json @@ -33,7 +33,6 @@ "@cloudoperators/juno-url-state-provider": "workspace:*", "@tanstack/react-query": "5.89.0", "@tanstack/react-router": "1.131.25", - "lodash": "4.17.21", "react": "19.1.0", "react-dom": "19.1.0" }, diff --git a/apps/heureka/src/components/Services/utils.ts b/apps/heureka/src/components/Services/utils.ts index a93489f83d..80d67ca225 100644 --- a/apps/heureka/src/components/Services/utils.ts +++ b/apps/heureka/src/components/Services/utils.ts @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { isEmpty, isNil, map, omit } from "lodash" +import { isEmpty, isNil, map, omit } from "../../utils" import { ApolloError } from "@apollo/client" import { Edge, @@ -298,9 +298,9 @@ export const getFiltersForUrl = (filterSettings: FilterSettings): Record - isEmpty(data) || isEmpty(data.ServiceFilterValues) + isEmpty(data) || isEmpty(data?.ServiceFilterValues) ? [] - : map(omit(data.ServiceFilterValues, ["__typename"]), (filter) => ({ + : map(Object.values(omit(data!.ServiceFilterValues!, ["__typename"])), (filter) => ({ displayName: filter?.displayName || "", filterName: filter?.filterName || "", values: filter?.values?.filter((value) => value !== null) || [], diff --git a/apps/heureka/src/components/common/Filters/FilterSelect.tsx b/apps/heureka/src/components/common/Filters/FilterSelect.tsx index 3f3d574050..a0425c3861 100644 --- a/apps/heureka/src/components/common/Filters/FilterSelect.tsx +++ b/apps/heureka/src/components/common/Filters/FilterSelect.tsx @@ -4,7 +4,7 @@ */ import React, { useCallback, useState } from "react" -import { isEmpty } from "lodash" +import { isEmpty } from "../../../utils" import { InputGroup, ComboBox, ComboBoxOption, SelectOption, Select, Stack } from "@cloudoperators/juno-ui-components" import { Filter, SelectedFilter } from "./types" diff --git a/apps/heureka/src/utils.ts b/apps/heureka/src/utils.ts index 3bc6521de2..8fc0bcd0c4 100644 --- a/apps/heureka/src/utils.ts +++ b/apps/heureka/src/utils.ts @@ -59,3 +59,43 @@ export const useTextOverflow = (text: string | null) => { return { needsExpansion, textRef } } + +/** + * Utility functions to replace lodash dependencies + */ + +// Replace _.isEmpty() +export const isEmpty = (value: any): boolean => { + if (value == null) return true + if (typeof value === "string" || Array.isArray(value)) return value.length === 0 + if (typeof value === "object") return Object.keys(value).length === 0 + return false +} + +// Replace _.isNil() +export const isNil = (value: any): value is null | undefined => { + return value == null +} + +// Replace _.omit() +export const omit = , K extends keyof T>(obj: T, keys: K[]): Omit => { + const result = { ...obj } + keys.forEach((key) => { + delete result[key] + }) + return result +} + +// Replace _.map() for objects - transforms object values +export const mapObject = (obj: Record, iteratee: (value: T, key: string) => U): Record => { + const result: Record = {} + Object.entries(obj).forEach(([key, value]) => { + result[key] = iteratee(value, key) + }) + return result +} + +// Replace _.map() for arrays (though native Array.map is preferred) +export const map = (array: T[], iteratee: (item: T, index: number) => U): U[] => { + return array.map(iteratee) +} From 29f54b42c442778fa7c1cfcc063aefe51581e3e4 Mon Sep 17 00:00:00 2001 From: Hoda Noori Date: Wed, 15 Oct 2025 14:45:12 +0200 Subject: [PATCH 05/12] chore(heureka): removes types/lodash package as well --- apps/heureka/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/heureka/package.json b/apps/heureka/package.json index 288f75cd67..f0d7f58cae 100644 --- a/apps/heureka/package.json +++ b/apps/heureka/package.json @@ -48,7 +48,6 @@ "@testing-library/jest-dom": "6.8.0", "@testing-library/react": "16.3.0", "@testing-library/user-event": "14.6.1", - "@types/lodash": "4.17.19", "@types/node": "24.3.2", "@types/react": "19.1.8", "@types/react-dom": "19.1.6", From 069320cdd0182e764d403d045d2ca45d5f76211c Mon Sep 17 00:00:00 2001 From: Hoda Noori Date: Wed, 15 Oct 2025 14:45:12 +0200 Subject: [PATCH 06/12] chore(heureka): removes types/lodash package as well --- pnpm-lock.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c8e111f58e..bcd7e566cf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -427,9 +427,6 @@ importers: '@tanstack/react-router': specifier: 1.131.25 version: 1.131.25(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - lodash: - specifier: 4.17.21 - version: 4.17.21 react: specifier: 19.1.0 version: 19.1.0 From 471f17b001caff795870b6f76be1d51552a94862 Mon Sep 17 00:00:00 2001 From: Hoda Noori Date: Wed, 15 Oct 2025 15:00:58 +0200 Subject: [PATCH 07/12] chore(heureka): adds lock file --- pnpm-lock.yaml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bcd7e566cf..dd54b5c601 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -467,9 +467,6 @@ importers: '@testing-library/user-event': specifier: 14.6.1 version: 14.6.1(@testing-library/dom@10.4.0) - '@types/lodash': - specifier: 4.17.19 - version: 4.17.19 '@types/node': specifier: 24.3.2 version: 24.3.2 @@ -3386,9 +3383,6 @@ packages: '@types/lodash@4.17.16': resolution: {integrity: sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g==} - '@types/lodash@4.17.19': - resolution: {integrity: sha512-NYqRyg/hIQrYPT9lbOeYc3kIRabJDn/k4qQHIXUpx88CBDww2fD15Sg5kbXlW86zm2XEW4g0QxkTI3/Kfkc7xQ==} - '@types/luxon@3.7.1': resolution: {integrity: sha512-H3iskjFIAn5SlJU7OuxUmTEpebK6TKB8rxZShDslBMZJ5u9S//KM1sbdAisiSrqwLQncVjnpi2OK2J51h+4lsg==} @@ -10323,8 +10317,6 @@ snapshots: '@types/lodash@4.17.16': {} - '@types/lodash@4.17.19': {} - '@types/luxon@3.7.1': {} '@types/mdast@4.0.4': From 3ea10637dc8cfed30b5f4c39aa14f56c7b5c474e Mon Sep 17 00:00:00 2001 From: Tilman <147151040+TilmanHaupt@users.noreply.github.com> Date: Thu, 16 Oct 2025 16:46:18 +0200 Subject: [PATCH 08/12] chore(supernova): reduce luxon and delete luxon (#1213) * chore(supernova): luxon killed in alertTimestamp * chore(supernova): reduce luxon in alterttimestamp * chore(supernova): reduce luxon * chore(supernova): del luxon in statusbar * chore(supernova): format statusbar * chore(greenhouse): del luxon * chore(greenhouse): del luxon --- apps/greenhouse/package.json | 1 - .../utils/humanizedTimePeriodToNow.ts | 33 +++++++++++-------- apps/heureka/package.json | 1 - apps/supernova/package.json | 1 - .../alerts/shared/AlertTimestamp.tsx | 32 +++++++++++++----- .../src/components/silences/CreateSilence.tsx | 23 +++++++++++-- .../silences/shared/SilencesTimestamp.tsx | 25 +++++++------- .../src/components/status/StatusBar.tsx | 17 +++++++--- package.json | 1 - pnpm-lock.yaml | 29 ---------------- 10 files changed, 90 insertions(+), 73 deletions(-) diff --git a/apps/greenhouse/package.json b/apps/greenhouse/package.json index e6d4ea5d66..086dc3717f 100644 --- a/apps/greenhouse/package.json +++ b/apps/greenhouse/package.json @@ -33,7 +33,6 @@ "remark-gfm": " 4.0.1", "shadow-dom-testing-library": "1.13.1", "tailwindcss": "4.1.13", - "ts-luxon": "4.6.2", "vite": "7.1.7", "vite-plugin-svgr": "4.5.0", "vitest": "3.2.4", diff --git a/apps/greenhouse/src/components/core-apps/org-admin/utils/humanizedTimePeriodToNow.ts b/apps/greenhouse/src/components/core-apps/org-admin/utils/humanizedTimePeriodToNow.ts index fe32d44328..3ddae5753e 100644 --- a/apps/greenhouse/src/components/core-apps/org-admin/utils/humanizedTimePeriodToNow.ts +++ b/apps/greenhouse/src/components/core-apps/org-admin/utils/humanizedTimePeriodToNow.ts @@ -3,21 +3,28 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { DateTime } from "ts-luxon" - const humanizedTimePeriodToNow = (jsDateAllowedInput: string | number | Date): string => { - const time = DateTime.fromJSDate(new Date(jsDateAllowedInput)) - const diff = DateTime.now().diff(time, ["years", "months", "days", "hours", "minutes"]) - const humanizedString = Object.keys(diff.toObject()).reduce((acc, key) => { - // @ts-ignore - if (diff.toObject()[key] !== 0) { - // @ts-ignore - acc.push(`${Math.round(Math.abs(diff.toObject()[key]))} ${key}`) - } - return acc - }, [] as string[]) + const now = new Date() + const inputDate = new Date(jsDateAllowedInput) + const diffMs = Math.abs(now.getTime() - inputDate.getTime()) + + const days = Math.floor(diffMs / (1000 * 60 * 60 * 24)) + const hours = Math.floor((diffMs % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)) + const minutes = Math.floor((diffMs % (1000 * 60 * 60)) / (1000 * 60)) + + const parts: string[] = [] + + if (days > 0) { + parts.push(`${days} ${days === 1 ? "day" : "days"}`) + } + if (hours > 0) { + parts.push(`${hours} ${hours === 1 ? "hour" : "hours"}`) + } + if (minutes > 0) { + parts.push(`${minutes} ${minutes === 1 ? "minute" : "minutes"}`) + } - return humanizedString.join(", ") + return parts.length > 0 ? parts.join(", ") : "0 minutes" } export default humanizedTimePeriodToNow diff --git a/apps/heureka/package.json b/apps/heureka/package.json index 98f722a2ea..9c2ae0bbff 100644 --- a/apps/heureka/package.json +++ b/apps/heureka/package.json @@ -65,7 +65,6 @@ "eslint-plugin-react-hooks": "4.6.2", "eslint-plugin-tailwindcss": "3.18.0", "jsdom": "26.1.0", - "luxon": "3.7.2", "postcss": "8.5.6", "prettier": "3.6.2", "tailwindcss": "4.1.13", diff --git a/apps/supernova/package.json b/apps/supernova/package.json index 7a0c3732ca..7ce5257515 100644 --- a/apps/supernova/package.json +++ b/apps/supernova/package.json @@ -28,7 +28,6 @@ "immer": "10.1.3", "interweave": "13.1.1", "jsdom": "26.1.0", - "luxon": "3.7.2", "shadow-dom-testing-library": "1.13.1", "tailwindcss": "4.1.13", "vite": "7.1.7", diff --git a/apps/supernova/src/components/alerts/shared/AlertTimestamp.tsx b/apps/supernova/src/components/alerts/shared/AlertTimestamp.tsx index 9007bfea47..731d8cc1ce 100644 --- a/apps/supernova/src/components/alerts/shared/AlertTimestamp.tsx +++ b/apps/supernova/src/components/alerts/shared/AlertTimestamp.tsx @@ -4,26 +4,40 @@ */ import React from "react" -import { DateTime } from "luxon" import { Icon, Stack, Tooltip, TooltipContent, TooltipTrigger } from "@cloudoperators/juno-ui-components" const AlertTimestamp = ({ startTimestamp }: any) => { - const dateFormat = { ...DateTime.DATE_MED } - const timeFormat = { ...DateTime.TIME_24_WITH_SHORT_OFFSET } - const startTime = DateTime.fromISO(startTimestamp) - const daysFiring = DateTime.now().diff(startTime, "days") + const startTime = new Date(startTimestamp) + const now = new Date() + + // Calculate days difference + const diffInMs = now.getTime() - startTime.getTime() + const daysFiring = diffInMs / (1000 * 60 * 60 * 24) + + const formattedDate = startTime.toLocaleDateString("en-GB", { + year: "numeric", + month: "short", + day: "numeric", + }) + + const formattedTime = startTime.toLocaleString("en-GB", { + hour: "2-digit", + minute: "2-digit", + hour12: false, + timeZoneName: "short", + }) return ( -
{startTime.toLocaleString(dateFormat)}
-
{startTime.toLocaleString(timeFormat)}
- {daysFiring.days > 7 && ( +
{formattedDate}
+
{formattedTime}
+ {daysFiring > 7 && ( - {`Alert has been firing for ${Math.round(daysFiring.days)} days`} + {`Alert has been firing for ${Math.round(daysFiring)} days`} )}
diff --git a/apps/supernova/src/components/silences/CreateSilence.tsx b/apps/supernova/src/components/silences/CreateSilence.tsx index 0932862e38..39366f86b8 100644 --- a/apps/supernova/src/components/silences/CreateSilence.tsx +++ b/apps/supernova/src/components/silences/CreateSilence.tsx @@ -26,7 +26,6 @@ import { import AlertDescription from "../alerts/shared/AlertDescription" import { useActions } from "@cloudoperators/juno-messages-provider" import CreateSilenceAdvanced from "./CreateSilenceAdvanced" -import { DateTime } from "luxon" import { latestExpirationDate, getSelectOptions, setupMatchers } from "./silenceHelpers" import { parseError } from "../../helpers" @@ -78,6 +77,26 @@ const CreateSilence = ({ alert, size, variant }: any) => { const silences = useSilencesItems() + // Format date/time helper function + const formatDateTime = (timestamp: string) => { + const date = new Date(timestamp) + + const formattedDate = date.toLocaleDateString("en-GB", { + year: "numeric", + month: "short", + day: "numeric", + }) + + const formattedTime = date.toLocaleString("en-GB", { + hour: "2-digit", + minute: "2-digit", + hour12: false, + timeZoneName: "short", + }) + + return `${formattedDate} ${formattedTime}` + } + // Initialize form state on modal open // Removed alert from dependencies since we take an screenshot of the global state on opening the modal // This is due to if the alert changes (e.g. the alert receives a new silenceBy) while the modal is open, the form state will be reset @@ -209,7 +228,7 @@ const CreateSilence = ({ alert, size, variant }: any) => { {expirationDate && ( There is already a silence for this alert that expires at - {DateTime.fromISO(expirationDate).toLocaleString(DateTime.DATETIME_SHORT)} + {formatDateTime(expirationDate)} )} diff --git a/apps/supernova/src/components/silences/shared/SilencesTimestamp.tsx b/apps/supernova/src/components/silences/shared/SilencesTimestamp.tsx index 8d9a9525c6..b534c45db7 100644 --- a/apps/supernova/src/components/silences/shared/SilencesTimestamp.tsx +++ b/apps/supernova/src/components/silences/shared/SilencesTimestamp.tsx @@ -4,20 +4,23 @@ */ import React from "react" -import { DateTime } from "luxon" - -//get start and end time of the silence const SilencesTimestamp = ({ timestamp }: any) => { - let dt - if (timestamp.includes("T")) { - dt = DateTime.fromISO(timestamp) - } else { - dt = DateTime.fromSQL(timestamp) + const formatDateTime = (timestamp: any) => { + const date = new Date(timestamp) + return date.toLocaleString("en-GB", { + year: "numeric", + month: "short", + day: "2-digit", + hour: "2-digit", + minute: "2-digit", + hour12: false, + timeZone: "Europe/Berlin", + timeZoneName: "short", + }) } - const formattedTime = dt.toFormat("yyyy-LL-dd HH:mm Z") - - return
{formattedTime}
+ return
{formatDateTime(timestamp)}
} + export default SilencesTimestamp diff --git a/apps/supernova/src/components/status/StatusBar.tsx b/apps/supernova/src/components/status/StatusBar.tsx index 3578d7cbc0..cb7782d363 100644 --- a/apps/supernova/src/components/status/StatusBar.tsx +++ b/apps/supernova/src/components/status/StatusBar.tsx @@ -4,7 +4,6 @@ */ import React from "react" -import { DateTime } from "luxon" import { Spinner, Stack } from "@cloudoperators/juno-ui-components" @@ -17,6 +16,17 @@ const statusBarStyles = ` ` const StatusBar = ({ totalCounts, isUpdating, updatedAt }: any) => { + const formatTime = (timestamp: number) => { + const date = new Date(timestamp) + return date.toLocaleString("en-GB", { + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + hour12: false, + timeZoneName: "short", + }) + } + return (
@@ -27,10 +37,7 @@ const StatusBar = ({ totalCounts, isUpdating, updatedAt }: any) => {
{isUpdating && } - {updatedAt && - `updated ${DateTime.fromMillis(updatedAt).toLocaleString({ - ...DateTime.TIME_24_WITH_SHORT_OFFSET, - })}`} + {updatedAt && `updated ${formatTime(updatedAt)}`}
) diff --git a/package.json b/package.json index b358e63559..feef74f374 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,6 @@ "@changesets/cli": "2.29.7", "@commitlint/cli": "19.8.1", "@commitlint/config-conventional": "19.8.1", - "@types/luxon": "3.7.1", "@types/node": "24.3.2", "eslint": "9.35.0", "husky": "9.1.7", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c8e111f58e..2b3852554a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,9 +24,6 @@ importers: '@commitlint/config-conventional': specifier: 19.8.1 version: 19.8.1 - '@types/luxon': - specifier: 3.7.1 - version: 3.7.1 '@types/node': specifier: 24.3.2 version: 24.3.2 @@ -394,9 +391,6 @@ importers: tailwindcss: specifier: 4.1.13 version: 4.1.13 - ts-luxon: - specifier: 4.6.2 - version: 4.6.2 vite: specifier: 7.1.7 version: 7.1.7(@types/node@24.3.2)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.81.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.0) @@ -518,9 +512,6 @@ importers: jsdom: specifier: 26.1.0 version: 26.1.0 - luxon: - specifier: 3.7.2 - version: 3.7.2 postcss: specifier: 8.5.6 version: 8.5.6 @@ -609,9 +600,6 @@ importers: jsdom: specifier: 26.1.0 version: 26.1.0 - luxon: - specifier: 3.7.2 - version: 3.7.2 shadow-dom-testing-library: specifier: 1.13.1 version: 1.13.1(@testing-library/dom@10.4.0) @@ -3392,9 +3380,6 @@ packages: '@types/lodash@4.17.19': resolution: {integrity: sha512-NYqRyg/hIQrYPT9lbOeYc3kIRabJDn/k4qQHIXUpx88CBDww2fD15Sg5kbXlW86zm2XEW4g0QxkTI3/Kfkc7xQ==} - '@types/luxon@3.7.1': - resolution: {integrity: sha512-H3iskjFIAn5SlJU7OuxUmTEpebK6TKB8rxZShDslBMZJ5u9S//KM1sbdAisiSrqwLQncVjnpi2OK2J51h+4lsg==} - '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} @@ -5521,10 +5506,6 @@ packages: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} - luxon@3.7.2: - resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==} - engines: {node: '>=12'} - lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true @@ -6853,10 +6834,6 @@ packages: ts-log@2.2.7: resolution: {integrity: sha512-320x5Ggei84AxzlXp91QkIGSw5wgaLT6GeAH0KsqDmRZdVWW2OiSeVvElVoatk3f7nicwXlElXsoFkARiGE2yg==} - ts-luxon@4.6.2: - resolution: {integrity: sha512-I35AoZtDQ0O49rJh7tNyECISB6nhtdOzeFZSZzIxWSSUwnmgPOJK2wZr3fK0WVmKcmWPvDGSa+GKwWXFs4prjA==} - engines: {node: '>=13'} - tsconfck@3.1.5: resolution: {integrity: sha512-CLDfGgUp7XPswWnezWwsCRxNmgQjhYq3VXHM0/XIRxhVrKw0M1if9agzryh1QS3nxjCROvV+xWxoJO1YctzzWg==} engines: {node: ^18 || >=20} @@ -10328,8 +10305,6 @@ snapshots: '@types/lodash@4.17.19': {} - '@types/luxon@3.7.1': {} - '@types/mdast@4.0.4': dependencies: '@types/unist': 3.0.3 @@ -12782,8 +12757,6 @@ snapshots: lru-cache@7.18.3: {} - luxon@3.7.2: {} - lz-string@1.5.0: {} magic-string@0.26.7: @@ -14422,8 +14395,6 @@ snapshots: ts-log@2.2.7: {} - ts-luxon@4.6.2: {} - tsconfck@3.1.5(typescript@5.9.2): optionalDependencies: typescript: 5.9.2 From 04b567652f31c1d5471de51cef39b7626e1fbd7a Mon Sep 17 00:00:00 2001 From: Guoda <121792659+guoda-puidokaite@users.noreply.github.com> Date: Fri, 17 Oct 2025 10:48:58 +0200 Subject: [PATCH 09/12] chore(carbon): remove wouter (#1211) * remove wouter * remove wouter from lock * remove routing logiv * remove routing logiv --- apps/carbon/package.json | 1 - .../src/components/AppContent/AppContent.tsx | 18 +++-------- .../components/Navigation/NavigationItem.tsx | 32 ++++++++----------- pnpm-lock.yaml | 26 --------------- 4 files changed, 18 insertions(+), 59 deletions(-) diff --git a/apps/carbon/package.json b/apps/carbon/package.json index 1353dde851..bf0efed068 100644 --- a/apps/carbon/package.json +++ b/apps/carbon/package.json @@ -33,7 +33,6 @@ "react": "19.1.0", "react-dom": "19.1.0", "react-error-boundary": "3.1.4", - "wouter": "3.7.1", "zustand": "4.5.7" }, "devDependencies": { diff --git a/apps/carbon/src/components/AppContent/AppContent.tsx b/apps/carbon/src/components/AppContent/AppContent.tsx index 8e34dd0148..2dac08112c 100644 --- a/apps/carbon/src/components/AppContent/AppContent.tsx +++ b/apps/carbon/src/components/AppContent/AppContent.tsx @@ -7,7 +7,6 @@ */ import React from "react" -import { Redirect, Route, Switch } from "wouter" import Navigation from "../Navigation" import Extension from "../Extension/Extension" import NoExtensionFound from "./NoExtensionFound" @@ -17,19 +16,10 @@ const AppContent = ({ extensions }: { extensions: Extension[] }) => (
- - - - - {extensions.map((extension) => ( - - - - ))} - - - - + {extensions.map((extension) => ( + + ))} +
) diff --git a/apps/carbon/src/components/Navigation/NavigationItem.tsx b/apps/carbon/src/components/Navigation/NavigationItem.tsx index 4d5c5b3b62..97ed199619 100644 --- a/apps/carbon/src/components/Navigation/NavigationItem.tsx +++ b/apps/carbon/src/components/Navigation/NavigationItem.tsx @@ -6,7 +6,6 @@ import React from "react" import { Stack } from "@cloudoperators/juno-ui-components" import classNames from "classnames" -import { Link, useRoute } from "wouter" import SupernovaIcon from "../../assets/juno_supernova.svg?react" import DoopIcon from "../../assets/juno_doop.svg?react" import HeurekaIcon from "../../assets/juno_heureka.svg?react" @@ -36,24 +35,21 @@ type NavigationItemProps = { url: string } -const NavigationItem = ({ name, title, url }: NavigationItemProps) => { - const [isActive] = useRoute(url) +const NavigationItem = ({ name, title }: NavigationItemProps) => { return ( - - - {isActive && } - - {title} - - + + {} + + {title} + ) } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2b3852554a..4dd3d40a90 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -69,9 +69,6 @@ importers: react-error-boundary: specifier: 3.1.4 version: 3.1.4(react@19.1.0) - wouter: - specifier: 3.7.1 - version: 3.7.1(react@19.1.0) zustand: specifier: 4.5.7 version: 4.5.7(@types/react@19.1.8)(immer@10.1.3)(react@19.1.0) @@ -5722,9 +5719,6 @@ packages: resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==} engines: {node: '>= 18'} - mitt@3.0.1: - resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} - mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} @@ -6221,10 +6215,6 @@ packages: resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} - regexparam@3.0.0: - resolution: {integrity: sha512-RSYAtP31mvYLkAHrOlh25pCNQ5hWnT106VukGaaFfuJrZFkGRX5GhUAdPqpSDXxOhA2c4akmRuplv1mRqnBn6Q==} - engines: {node: '>=8'} - regexpu-core@6.2.0: resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} engines: {node: '>=4'} @@ -7246,11 +7236,6 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - wouter@3.7.1: - resolution: {integrity: sha512-od5LGmndSUzntZkE2R5CHhoiJ7YMuTIbiXsa0Anytc2RATekgv4sfWRAxLEULBrp7ADzinWQw8g470lkT8+fOw==} - peerDependencies: - react: '>=16.8.0' - wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -13169,8 +13154,6 @@ snapshots: dependencies: minipass: 7.1.2 - mitt@3.0.1: {} - mkdirp@1.0.4: {} mkdirp@3.0.1: {} @@ -13731,8 +13714,6 @@ snapshots: gopd: 1.2.0 set-function-name: 2.0.2 - regexparam@3.0.0: {} - regexpu-core@6.2.0: dependencies: regenerate: 1.4.2 @@ -14886,13 +14867,6 @@ snapshots: word-wrap@1.2.5: {} - wouter@3.7.1(react@19.1.0): - dependencies: - mitt: 3.0.1 - react: 19.1.0 - regexparam: 3.0.0 - use-sync-external-store: 1.5.0(react@19.1.0) - wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 From 881e39e31db740c780979f7e48c6cf84e64945ac Mon Sep 17 00:00:00 2001 From: Taimoor Aslam Date: Fri, 17 Oct 2025 11:06:14 +0200 Subject: [PATCH 10/12] chore(juno): fix conflicting versions (#1215) --- apps/carbon/package.json | 4 +- apps/doop/package.json | 4 +- apps/example/package.json | 4 +- apps/greenhouse/package.json | 2 +- apps/greenhouse/src/lib/plugin.ts | 2 +- apps/supernova/package.json | 4 +- apps/template/package.json | 6 +- packages/ui-components/package.json | 2 +- pnpm-lock.yaml | 161 +++++----------------------- 9 files changed, 43 insertions(+), 146 deletions(-) diff --git a/apps/carbon/package.json b/apps/carbon/package.json index bf0efed068..bf4c8d3465 100644 --- a/apps/carbon/package.json +++ b/apps/carbon/package.json @@ -32,7 +32,7 @@ "classnames": "2.5.1", "react": "19.1.0", "react-dom": "19.1.0", - "react-error-boundary": "3.1.4", + "react-error-boundary": "4.1.2", "zustand": "4.5.7" }, "devDependencies": { @@ -57,7 +57,7 @@ "eslint-plugin-react-hooks": "4.6.2", "eslint-plugin-tailwindcss": "3.18.0", "jsdom": "26.1.0", - "prettier": "3.1.1", + "prettier": "3.6.2", "tailwindcss": "4.1.13", "typescript": "5.9.2", "vite": "7.1.7", diff --git a/apps/doop/package.json b/apps/doop/package.json index 28b9f35187..d3c5398a72 100644 --- a/apps/doop/package.json +++ b/apps/doop/package.json @@ -15,7 +15,7 @@ "private": true, "devDependencies": { "@cloudoperators/juno-config": "workspace:*", - "@tanstack/react-query": "5.62.2", + "@tanstack/react-query": "5.89.0", "@tailwindcss/vite": "4.1.13", "@tanstack/router-plugin": "1.131.25", "@testing-library/jest-dom": "6.8.0", @@ -25,7 +25,7 @@ "@vitejs/plugin-react": "4.7.0", "interweave": "13.1.1", "jsdom": "26.1.0", - "react-markdown": "9.1.0", + "react-markdown": "10.1.0", "shadow-dom-testing-library": "1.13.1", "tailwindcss": "4.1.13", "vite": "7.1.7", diff --git a/apps/example/package.json b/apps/example/package.json index 80580c0ef2..554c5c3448 100644 --- a/apps/example/package.json +++ b/apps/example/package.json @@ -20,9 +20,9 @@ "@cloudoperators/juno-config": "workspace:*", "@svgr/core": "7.0.0", "@svgr/plugin-jsx": "7.0.0", - "@tanstack/react-query": "5.62.2", + "@tanstack/react-query": "5.89.0", "@tailwindcss/vite": "4.1.13", - "@testing-library/jest-dom": "6.6.3", + "@testing-library/jest-dom": "6.8.0", "@testing-library/react": "16.3.0", "@types/react": "19.1.8", "@types/react-dom": "19.1.6", diff --git a/apps/greenhouse/package.json b/apps/greenhouse/package.json index 086dc3717f..510ad216db 100644 --- a/apps/greenhouse/package.json +++ b/apps/greenhouse/package.json @@ -25,7 +25,7 @@ "@types/react-dom": "19.1.6", "@vitejs/plugin-react": "4.7.0", "github-markdown-css": "5.8.1", - "immer": "9.0.21", + "immer": "10.1.3", "interweave": "13.1.1", "react": "19.1.0", "react-dom": "19.1.0", diff --git a/apps/greenhouse/src/lib/plugin.ts b/apps/greenhouse/src/lib/plugin.ts index 72d74d9ff3..a30c5c0e34 100644 --- a/apps/greenhouse/src/lib/plugin.ts +++ b/apps/greenhouse/src/lib/plugin.ts @@ -5,7 +5,7 @@ import { useStore, createStore } from "zustand" import { devtools } from "zustand/middleware" -import produce from "immer" +import { produce } from "immer" export const NAV_TYPES = { APP: "app", diff --git a/apps/supernova/package.json b/apps/supernova/package.json index 7ce5257515..cda0020f17 100644 --- a/apps/supernova/package.json +++ b/apps/supernova/package.json @@ -18,9 +18,9 @@ "devDependencies": { "@cloudoperators/juno-config": "workspace:*", "@tailwindcss/vite": "4.1.13", - "@tanstack/react-query": "5.62.2", + "@tanstack/react-query": "5.89.0", "@tanstack/router-plugin": "1.131.25", - "@testing-library/jest-dom": "6.6.3", + "@testing-library/jest-dom": "6.8.0", "@testing-library/react": "16.3.0", "@types/react": "19.1.8", "@types/react-dom": "19.1.6", diff --git a/apps/template/package.json b/apps/template/package.json index f78b304b58..dd9fad59bb 100644 --- a/apps/template/package.json +++ b/apps/template/package.json @@ -28,9 +28,9 @@ "dependencies": { "react": "19.1.0", "react-dom": "19.1.0", - "react-error-boundary": "3.1.4", + "react-error-boundary": "4.1.2", "zustand": "4.5.7", - "@tanstack/react-query": "5.62.2", + "@tanstack/react-query": "5.89.0", "@cloudoperators/juno-ui-components": "workspace:*" }, "devDependencies": { @@ -53,7 +53,7 @@ "eslint-plugin-react-hooks": "4.6.2", "eslint-plugin-tailwindcss": "3.18.0", "jsdom": "26.1.0", - "prettier": "3.1.1", + "prettier": "3.6.2", "tailwindcss": "4.1.13", "typescript": "5.9.2", "vite": "7.1.7", diff --git a/packages/ui-components/package.json b/packages/ui-components/package.json index eab45f367a..ec1e44a5c2 100644 --- a/packages/ui-components/package.json +++ b/packages/ui-components/package.json @@ -36,7 +36,7 @@ "@storybook/addon-links": "9.1.5", "@storybook/react-vite": "9.1.5", "@tailwindcss/vite": "4.1.13", - "@testing-library/jest-dom": "6.6.3", + "@testing-library/jest-dom": "6.8.0", "@testing-library/react": "16.3.0", "@testing-library/user-event": "14.6.1", "@types/react": "19.1.8", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4dd3d40a90..dedb20f947 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,8 +67,8 @@ importers: specifier: 19.1.0 version: 19.1.0(react@19.1.0) react-error-boundary: - specifier: 3.1.4 - version: 3.1.4(react@19.1.0) + specifier: 4.1.2 + version: 4.1.2(react@19.1.0) zustand: specifier: 4.5.7 version: 4.5.7(@types/react@19.1.8)(immer@10.1.3)(react@19.1.0) @@ -117,7 +117,7 @@ importers: version: 9.1.0(eslint@9.35.0(jiti@2.5.1)) eslint-plugin-prettier: specifier: 5.5.4 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(prettier@3.1.1) + version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(prettier@3.6.2) eslint-plugin-react: specifier: 7.37.5 version: 7.37.5(eslint@9.35.0(jiti@2.5.1)) @@ -131,8 +131,8 @@ importers: specifier: 26.1.0 version: 26.1.0 prettier: - specifier: 3.1.1 - version: 3.1.1 + specifier: 3.6.2 + version: 3.6.2 tailwindcss: specifier: 4.1.13 version: 4.1.13 @@ -180,8 +180,8 @@ importers: specifier: 4.1.13 version: 4.1.13(vite@7.1.7(@types/node@24.3.2)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.81.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.0)) '@tanstack/react-query': - specifier: 5.62.2 - version: 5.62.2(react@19.1.0) + specifier: 5.89.0 + version: 5.89.0(react@19.1.0) '@tanstack/router-plugin': specifier: 1.131.25 version: 1.131.25(@tanstack/react-router@1.131.25(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.1.7(@types/node@24.3.2)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.81.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.0))(webpack@5.99.8) @@ -207,8 +207,8 @@ importers: specifier: 26.1.0 version: 26.1.0 react-markdown: - specifier: 9.1.0 - version: 9.1.0(@types/react@19.1.8)(react@19.1.0) + specifier: 10.1.0 + version: 10.1.0(@types/react@19.1.8)(react@19.1.0) shadow-dom-testing-library: specifier: 1.13.1 version: 1.13.1(@testing-library/dom@10.4.0) @@ -268,11 +268,11 @@ importers: specifier: 7.0.0 version: 7.0.0 '@tanstack/react-query': - specifier: 5.62.2 - version: 5.62.2(react@19.1.0) + specifier: 5.89.0 + version: 5.89.0(react@19.1.0) '@testing-library/jest-dom': - specifier: 6.6.3 - version: 6.6.3 + specifier: 6.8.0 + version: 6.8.0 '@testing-library/react': specifier: 16.3.0 version: 16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -365,8 +365,8 @@ importers: specifier: 5.8.1 version: 5.8.1 immer: - specifier: 9.0.21 - version: 9.0.21 + specifier: 10.1.3 + version: 10.1.3 interweave: specifier: 13.1.1 version: 13.1.1(react@19.1.0) @@ -399,7 +399,7 @@ importers: version: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.2)(@vitest/ui@3.2.4)(jiti@2.5.1)(jsdom@26.1.0)(lightningcss@1.30.1)(msw@2.11.2(@types/node@24.3.2)(typescript@5.9.2))(sass@1.81.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.0) zustand: specifier: 4.5.7 - version: 4.5.7(@types/react@19.1.8)(immer@9.0.21)(react@19.1.0) + version: 4.5.7(@types/react@19.1.8)(immer@10.1.3)(react@19.1.0) apps/heureka: dependencies: @@ -568,14 +568,14 @@ importers: specifier: 4.1.13 version: 4.1.13(vite@7.1.7(@types/node@24.3.2)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.81.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.0)) '@tanstack/react-query': - specifier: 5.62.2 - version: 5.62.2(react@19.1.0) + specifier: 5.89.0 + version: 5.89.0(react@19.1.0) '@tanstack/router-plugin': specifier: 1.131.25 version: 1.131.25(@tanstack/react-router@1.131.25(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.1.7(@types/node@24.3.2)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.81.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.0))(webpack@5.99.8) '@testing-library/jest-dom': - specifier: 6.6.3 - version: 6.6.3 + specifier: 6.8.0 + version: 6.8.0 '@testing-library/react': specifier: 16.3.0 version: 16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -619,8 +619,8 @@ importers: specifier: workspace:* version: link:../../packages/ui-components '@tanstack/react-query': - specifier: 5.62.2 - version: 5.62.2(react@19.1.0) + specifier: 5.89.0 + version: 5.89.0(react@19.1.0) react: specifier: 19.1.0 version: 19.1.0 @@ -628,8 +628,8 @@ importers: specifier: 19.1.0 version: 19.1.0(react@19.1.0) react-error-boundary: - specifier: 3.1.4 - version: 3.1.4(react@19.1.0) + specifier: 4.1.2 + version: 4.1.2(react@19.1.0) zustand: specifier: 4.5.7 version: 4.5.7(@types/react@19.1.8)(immer@10.1.3)(react@19.1.0) @@ -678,7 +678,7 @@ importers: version: 9.1.0(eslint@9.35.0(jiti@2.5.1)) eslint-plugin-prettier: specifier: 5.5.4 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(prettier@3.1.1) + version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(prettier@3.6.2) eslint-plugin-react: specifier: 7.37.5 version: 7.37.5(eslint@9.35.0(jiti@2.5.1)) @@ -692,8 +692,8 @@ importers: specifier: 26.1.0 version: 26.1.0 prettier: - specifier: 3.1.1 - version: 3.1.1 + specifier: 3.6.2 + version: 3.6.2 tailwindcss: specifier: 4.1.13 version: 4.1.13 @@ -908,8 +908,8 @@ importers: specifier: 4.1.13 version: 4.1.13(vite@7.1.7(@types/node@24.3.2)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.81.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.0)) '@testing-library/jest-dom': - specifier: 6.6.3 - version: 6.6.3 + specifier: 6.8.0 + version: 6.8.0 '@testing-library/react': specifier: 16.3.0 version: 16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -3200,17 +3200,9 @@ packages: resolution: {integrity: sha512-cs1WKawpXIe+vSTeiZUuSBy8JFjEuDgdMKZFRLKwQysKo8y2q6Q1HvS74Yw+m5IhOW1nTZooa6rlgdfXcgFAaw==} engines: {node: '>=12'} - '@tanstack/query-core@5.62.2': - resolution: {integrity: sha512-LcwVcC5qpsDpHcqlXUUL5o9SaOBwhNkGeV+B06s0GBoyBr8FqXPuXT29XzYXR36lchhnerp6XO+CWc84/vh7Zg==} - '@tanstack/query-core@5.89.0': resolution: {integrity: sha512-joFV1MuPhSLsKfTzwjmPDrp8ENfZ9N23ymFu07nLfn3JCkSHy0CFgsyhHTJOmWaumC/WiNIKM0EJyduCF/Ih/Q==} - '@tanstack/react-query@5.62.2': - resolution: {integrity: sha512-fkTpKKfwTJtVPKVR+ag7YqFgG/7TRVVPzduPAUF9zRCiiA8Wu305u+KJl8rCrh98Qce77vzIakvtUyzWLtaPGA==} - peerDependencies: - react: ^18 || ^19 - '@tanstack/react-query@5.89.0': resolution: {integrity: sha512-SXbtWSTSRXyBOe80mszPxpEbaN4XPRUp/i0EfQK1uyj3KCk/c8FuPJNIRwzOVe/OU3rzxrYtiNabsAmk1l714A==} peerDependencies: @@ -3282,10 +3274,6 @@ packages: resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} engines: {node: '>=18'} - '@testing-library/jest-dom@6.6.3': - resolution: {integrity: sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==} - engines: {node: '>=14', npm: '>=6', yarn: '>=1'} - '@testing-library/jest-dom@6.8.0': resolution: {integrity: sha512-WgXcWzVM6idy5JaftTVC8Vs83NKRmGJz4Hqs4oyOuO2J4r/y79vvKZsb+CaGyCSEbUPI6OsewfPd0G1A0/TUZQ==} engines: {node: '>=14', npm: '>=6', yarn: '>=1'} @@ -3997,10 +3985,6 @@ packages: resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} engines: {node: '>=12'} - chalk@3.0.0: - resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} - engines: {node: '>=8'} - chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -4950,9 +4934,6 @@ packages: immer@10.1.3: resolution: {integrity: sha512-tmjF/k8QDKydUlm3mZU+tjM6zeq9/fFpPqH9SzWmBnVVKsPBg/V66qsMwb3/Bo90cgUN+ghdVBess+hPsxUyRw==} - immer@9.0.21: - resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} - immutable@3.7.6: resolution: {integrity: sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==} engines: {node: '>=0.8.0'} @@ -6071,11 +6052,6 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - prettier@3.1.1: - resolution: {integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==} - engines: {node: '>=14'} - hasBin: true - prettier@3.6.2: resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} engines: {node: '>=14'} @@ -6125,12 +6101,6 @@ packages: peerDependencies: react: ^19.1.0 - react-error-boundary@3.1.4: - resolution: {integrity: sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==} - engines: {node: '>=10', npm: '>=6'} - peerDependencies: - react: '>=16.13.1' - react-error-boundary@4.1.2: resolution: {integrity: sha512-GQDxZ5Jd+Aq/qUxbCm1UtzmL/s++V7zKgE8yMktJiCQXCCFZnMZh9ng+6/Ne6PjNSXH0L9CjeOEREfRnq6Duag==} peerDependencies: @@ -6148,12 +6118,6 @@ packages: '@types/react': '>=18' react: '>=18' - react-markdown@9.1.0: - resolution: {integrity: sha512-xaijuJB0kzGiUdG7nc2MOMDUDBWPyGAjZtUrow9XxUeua8IqeP+VlIfAZ3bphpcLTnSZXz6z9jcVC/TCwbfgdw==} - peerDependencies: - '@types/react': '>=18' - react: '>=18' - react-refresh@0.17.0: resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} engines: {node: '>=0.10.0'} @@ -10069,15 +10033,8 @@ snapshots: '@tanstack/history@1.131.2': {} - '@tanstack/query-core@5.62.2': {} - '@tanstack/query-core@5.89.0': {} - '@tanstack/react-query@5.62.2(react@19.1.0)': - dependencies: - '@tanstack/query-core': 5.62.2 - react: 19.1.0 - '@tanstack/react-query@5.89.0(react@19.1.0)': dependencies: '@tanstack/query-core': 5.89.0 @@ -10181,16 +10138,6 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/jest-dom@6.6.3': - dependencies: - '@adobe/css-tools': 4.4.2 - aria-query: 5.3.2 - chalk: 3.0.0 - css.escape: 1.5.1 - dom-accessibility-api: 0.6.3 - lodash: 4.17.21 - redent: 3.0.0 - '@testing-library/jest-dom@6.8.0': dependencies: '@adobe/css-tools': 4.4.2 @@ -11112,11 +11059,6 @@ snapshots: loupe: 3.1.4 pathval: 2.0.0 - chalk@3.0.0: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -11633,16 +11575,6 @@ snapshots: dependencies: eslint: 9.35.0(jiti@2.5.1) - eslint-plugin-prettier@5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(prettier@3.1.1): - dependencies: - eslint: 9.35.0(jiti@2.5.1) - prettier: 3.1.1 - prettier-linter-helpers: 1.0.0 - synckit: 0.11.8 - optionalDependencies: - '@types/eslint': 9.6.1 - eslint-config-prettier: 9.1.0(eslint@9.35.0(jiti@2.5.1)) - eslint-plugin-prettier@5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(prettier@3.6.2): dependencies: eslint: 9.35.0(jiti@2.5.1) @@ -12203,8 +12135,6 @@ snapshots: immer@10.1.3: {} - immer@9.0.21: {} - immutable@3.7.6: {} immutable@5.1.3: @@ -13513,8 +13443,6 @@ snapshots: prettier@2.8.8: {} - prettier@3.1.1: {} - prettier@3.6.2: {} pretty-format@27.5.1: @@ -13576,11 +13504,6 @@ snapshots: react: 19.1.0 scheduler: 0.26.0 - react-error-boundary@3.1.4(react@19.1.0): - dependencies: - '@babel/runtime': 7.28.4 - react: 19.1.0 - react-error-boundary@4.1.2(react@19.1.0): dependencies: '@babel/runtime': 7.28.4 @@ -13608,24 +13531,6 @@ snapshots: transitivePeerDependencies: - supports-color - react-markdown@9.1.0(@types/react@19.1.8)(react@19.1.0): - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@types/react': 19.1.8 - devlop: 1.1.0 - hast-util-to-jsx-runtime: 2.3.6 - html-url-attributes: 3.0.1 - mdast-util-to-hast: 13.2.0 - react: 19.1.0 - remark-parse: 11.0.0 - remark-rehype: 11.1.2 - unified: 11.0.5 - unist-util-visit: 5.0.0 - vfile: 6.0.3 - transitivePeerDependencies: - - supports-color - react-refresh@0.17.0: {} react-tabs@6.1.0(react@19.1.0): @@ -14960,12 +14865,4 @@ snapshots: immer: 10.1.3 react: 19.1.0 - zustand@4.5.7(@types/react@19.1.8)(immer@9.0.21)(react@19.1.0): - dependencies: - use-sync-external-store: 1.5.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.8 - immer: 9.0.21 - react: 19.1.0 - zwitch@2.0.4: {} From 2c78babc7a24cc2a39be8702f4c529e4ac817d39 Mon Sep 17 00:00:00 2001 From: Esther Schmitz Date: Sun, 19 Oct 2025 10:52:25 +0200 Subject: [PATCH 11/12] chore(core): remove classnames dep (#1216) * chore(carbon): remove classnames dependency * chore(carbon): refactor classnames usage to vanilla js --------- Co-authored-by: Tilman <147151040+TilmanHaupt@users.noreply.github.com> --- apps/carbon/package.json | 1 - .../src/components/Navigation/NavigationItem.tsx | 16 ++++++++++------ pnpm-lock.yaml | 8 -------- 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/apps/carbon/package.json b/apps/carbon/package.json index bf4c8d3465..d73f064688 100644 --- a/apps/carbon/package.json +++ b/apps/carbon/package.json @@ -29,7 +29,6 @@ "@cloudoperators/juno-ui-components": "workspace:*", "@tailwindcss/vite": "4.1.13", "@vitejs/plugin-react": "4.7.0", - "classnames": "2.5.1", "react": "19.1.0", "react-dom": "19.1.0", "react-error-boundary": "4.1.2", diff --git a/apps/carbon/src/components/Navigation/NavigationItem.tsx b/apps/carbon/src/components/Navigation/NavigationItem.tsx index 97ed199619..9151afe833 100644 --- a/apps/carbon/src/components/Navigation/NavigationItem.tsx +++ b/apps/carbon/src/components/Navigation/NavigationItem.tsx @@ -5,7 +5,6 @@ import React from "react" import { Stack } from "@cloudoperators/juno-ui-components" -import classNames from "classnames" import SupernovaIcon from "../../assets/juno_supernova.svg?react" import DoopIcon from "../../assets/juno_doop.svg?react" import HeurekaIcon from "../../assets/juno_heureka.svg?react" @@ -23,11 +22,16 @@ const AppIcon = ({ name }: { name: string }) => { const Border = () =>
-const getClassName = (isActive: boolean) => - classNames("relative px-5 py-3 cursor-pointer", { - "bg-theme-global-bg text-white": isActive, - "hover:text-theme-high": !isActive, - }) +const getClassName = (isActive: boolean) => { + return ` + relative + px-5 + py-3 + cursor-pointer + + ${isActive ? "bg-theme-global-bg text-white" : "hover:text-theme-high"} + ` +} type NavigationItemProps = { name: string diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dedb20f947..f3367fee9f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -57,9 +57,6 @@ importers: '@vitejs/plugin-react': specifier: 4.7.0 version: 4.7.0(vite@7.1.7(@types/node@24.3.2)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.81.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.0)) - classnames: - specifier: 2.5.1 - version: 2.5.1 react: specifier: 19.1.0 version: 19.1.0 @@ -4041,9 +4038,6 @@ packages: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} - classnames@2.5.1: - resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} - clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} @@ -11132,8 +11126,6 @@ snapshots: ci-info@3.9.0: {} - classnames@2.5.1: {} - clean-stack@2.2.0: {} cli-cursor@3.1.0: From 3b30669f44d8aef143f3cf601dee8da3dd4ea9f5 Mon Sep 17 00:00:00 2001 From: Hoda Noori Date: Thu, 23 Oct 2025 14:20:30 +0200 Subject: [PATCH 12/12] chore(heureka): removes map helper function --- apps/heureka/src/components/Services/utils.ts | 4 ++-- apps/heureka/src/utils.ts | 5 ----- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/apps/heureka/src/components/Services/utils.ts b/apps/heureka/src/components/Services/utils.ts index 80d67ca225..3f8e0b53d8 100644 --- a/apps/heureka/src/components/Services/utils.ts +++ b/apps/heureka/src/components/Services/utils.ts @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { isEmpty, isNil, map, omit } from "../../utils" +import { isEmpty, isNil, omit } from "../../utils" import { ApolloError } from "@apollo/client" import { Edge, @@ -300,7 +300,7 @@ export const getFiltersForUrl = (filterSettings: FilterSettings): Record isEmpty(data) || isEmpty(data?.ServiceFilterValues) ? [] - : map(Object.values(omit(data!.ServiceFilterValues!, ["__typename"])), (filter) => ({ + : Object.values(omit(data!.ServiceFilterValues!, ["__typename"])).map((filter) => ({ displayName: filter?.displayName || "", filterName: filter?.filterName || "", values: filter?.values?.filter((value) => value !== null) || [], diff --git a/apps/heureka/src/utils.ts b/apps/heureka/src/utils.ts index 8fc0bcd0c4..10ae355c9d 100644 --- a/apps/heureka/src/utils.ts +++ b/apps/heureka/src/utils.ts @@ -94,8 +94,3 @@ export const mapObject = (obj: Record, iteratee: (value: T, key }) return result } - -// Replace _.map() for arrays (though native Array.map is preferred) -export const map = (array: T[], iteratee: (item: T, index: number) => U): U[] => { - return array.map(iteratee) -}