This is an automated email from the ASF dual-hosted git repository.
marat pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-karavan.git
The following commit(s) were added to refs/heads/main by this push:
new b4f444e5 Fix ThemeContext for 4.18.0
b4f444e5 is described below
commit b4f444e5d809d79f3a926a274d2b03c74a836a47
Author: Marat Gubaidullin <[email protected]>
AuthorDate: Sun Mar 1 12:21:49 2026 -0500
Fix ThemeContext for 4.18.0
---
karavan-vscode/webview/index.css | 325 +++++++++++++++++++--
.../webview/karavan/app/theme/ThemeContext.tsx | 31 +-
2 files changed, 315 insertions(+), 41 deletions(-)
diff --git a/karavan-vscode/webview/index.css b/karavan-vscode/webview/index.css
index 1f1beaf0..1f44e7e7 100644
--- a/karavan-vscode/webview/index.css
+++ b/karavan-vscode/webview/index.css
@@ -24,28 +24,319 @@ body,
overflow: hidden;
}
-.karavan .dsl-page .dsl-page-columns,
-.karavan .dsl-page .flows {
- padding-bottom: 0;
+:root {
+ --pf-t--global--border--radius--300: 10px;
+ .pf-v6-c-text-input-group__text-input {
+ --pf-v6-c-text-input-group__text-input--OutlineOffset: -2px;
+ }
+
+ .pf-v6-c-form-control {
+ --pf-v6-c-form-control--OutlineOffset: -2px;
+ }
+
+ --pf-v6-c-content--MarginBlockEnd: var(--pf-t--global--spacer--md);
+
+ .pf-v6-c-table.pf-m-compact {
+ --pf-v6-c-table__thead--cell--FontSize:
var(--pf-t--global--font--size--sm);
+ --pf-v6-c-table--cell--FontSize:
var(--pf-v6-c-table__thead--cell--FontSize);
+ /*--pf-v6-c-table--BackgroundColor: transparent;*/
+
+ .pf-v6-c-table__td {
+ --pf-v6-c-table--cell--PaddingInlineStart:
var(--pf-t--global--spacer--sm);
+ --pf-v6-c-table--cell--PaddingInlineEnd:
var(--pf-t--global--spacer--sm);
+ }
+ }
+
+ .pf-v6-c-form-control > :is(input, select, textarea) {
+ padding-inline-start: var(--pf-t--global--spacer--sm);
+ padding-inline-end: var(--pf-t--global--spacer--sm);
+ }
+
+ .pf-v6-c-form.pf-m-horizontal .pf-v6-c-form__group-label {
+ align-self: center;
+ padding: 0;
+ }
+ --get-color: #61affe;
+ --post-color: #49cc90;
+ --put-color: #fca130;
+ --delete-color: #f93e3e;
+ --patch-color: #ff5ca7;
+ --options-color: #0d5aa7;
+ --head-color: #9012fe;
+ --trace-color: #7f8c8d;
+
+ --pf-t--color--blue--5: #f0f8ff;
+ --pf-t--color--blue--10: #e0f0ff;
+ --pf-t--color--blue--20: #b9dafc;
+ --pf-t--color--blue--30: #92c5f9;
+ --pf-t--color--blue--40: #4394e5;
+ --pf-t--color--blue--50: #0066cc;
+ --pf-t--color--blue--60: #004d99;
+ --pf-t--color--blue--70: #003366;
+ --pf-t--color--blue--75: #022a54;
+ --pf-t--color--blue--80: #032142;
+ --pf-t--color--blue--950: #011021;
+}
+
+.karavan {
+ .text-field-with-prefix {
+ align-items: center;
+ gap: 0;
+ .pf-v6-c-text-input-group__text-input {
+ padding-left: 1px;
+ }
+ }
+ --pf-v6-c-content--MarginBlockEnd: 0;
+
+ .pf-v6-c-content--h1,
+ .pf-v6-c-content--h2,
+ .pf-v6-c-content--h3,
+ .pf-v6-c-content--h4,
+ .pf-v6-c-content--h5,
+ .pf-v6-c-content--h6,
+ .pf-v6-c-content--p {
+ margin: 0;
+ }
+
+ .pf-v6-c-label .pf-v6-c-label__text {
+ font-size: 13px;
+ }
+}
+
+.pf-v6-c-backdrop {
+ .pf-v6-c-label .pf-v6-c-label__text {
+ font-size: 13px;
+ }
+}
+
+html, body, #root {
+ height: 100%;
+ margin: 0;
+}
+
+.karavan .container-button {
+ padding: 0 !important;
}
-.karavan .main-properties {
- height: 100vh;
- width: 100%;
- overflow: hidden;
- display: flex;
- flex-direction: column;
- padding-bottom: 0;
+.karavan .karavan-labeled-button {
+ padding: 0 5px 0 5px !important;
}
-.karavan .right-panel {
- background-color: var(--pf-t--global--background--color--secondary--hover);
+.karavan .karavan-labeled-button .pf-v6-c-button__text {
+ color: var(--pf-v6-c-label--Color);
}
-.karavan .right-panel .right-panel-wrapper {
- border-top-left-radius: 0;
+.karavan .pf-v6-c-button {
+ padding-inline-start: var(--pf-t--global--spacer--300);
+ padding-inline-end: var(--pf-t--global--spacer--300);
+ gap: var(--pf-t--global--spacer--xs);
}
-.dsl-modal .dsl-fast-card {
- display: none;
-}
\ No newline at end of file
+.karavan {
+ .pf-v6-c-text-input-group__text-input {
+ padding-inline-start: var(--pf-t--global--spacer--sm);
+ padding-inline-end: var(--pf-t--global--spacer--sm);
+ }
+
+ .pf-m-icon {
+ .pf-v6-c-text-input-group__text-input {
+ padding-inline-start: var(--pf-t--global--spacer--lg);
+ padding-inline-end: var(--pf-t--global--spacer--sm);
+ }
+
+ .pf-v6-c-text-input-group__icon {
+ inset-inline-start: var(--pf-t--global--spacer--sm);
+ }
+ }
+}
+
+.karavan .pf-v6-c-form-control.pf-m-textarea > textarea {
+ padding-inline-start: var(--pf-t--global--spacer--sm);
+ padding-inline-end: var(--pf-t--global--spacer--sm);
+}
+
+.karavan .pf-v6-c-log-viewer__header {
+ margin: 0;
+}
+
+.karavan .pf-v6-c-log-viewer__main {
+ border: none;
+}
+
+.pf-v6-c-menu {
+ .pf-v6-c-menu__content {
+ row-gap: 0;
+ }
+
+ .pf-v6-c-menu__item {
+ padding-block-start: var(--pf-t--global--spacer--xs);
+ padding-block-end: var(--pf-t--global--spacer--xs);
+ padding-inline-start: var(--pf-t--global--spacer--sm);
+ padding-inline-end: var(--pf-t--global--spacer--sm);
+ border-bottom: 1px solid var(--pf-t--global--border--color--50);
+
+ .pf-v6-c-menu__item-description {
+ max-width: 300px;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ }
+ }
+}
+
+.label-eip {
+ --pf-v6-c-badge--BackgroundColor: var(--pf-t--color--orange--40)
!important;
+}
+
+.label-processor {
+ --pf-v6-c-badge--BackgroundColor: var(--pf-t--color--orange--40)
!important;
+}
+
+.label-processors {
+ --pf-v6-c-badge--BackgroundColor: var(--pf-t--color--orange--40)
!important;
+}
+
+.label-component {
+ --pf-v6-c-badge--BackgroundColor: var(--pf-t--color--blue--40) !important;
+}
+
+.label-components {
+ --pf-v6-c-badge--BackgroundColor: var(--pf-t--color--blue--40) !important;
+}
+
+.label-kamelets {
+ --pf-v6-c-badge--BackgroundColor: var(--pf-t--color--green--40) !important;
+}
+
+.label-kamelet {
+ --pf-v6-c-badge--BackgroundColor: var(--pf-t--color--green--40) !important;
+}
+
+.label-component-preview {
+ --pf-v6-c-badge--Color: var(--pf-t--color--blue--40) !important;
+ --pf-v6-c-badge--BackgroundColor:
var(--pf-v6-c-badge--m-read--BackgroundColor) !important;
+}
+
+.label-kamelet-preview {
+ --pf-v6-c-badge--Color: var(--pf-t--color--green--40) !important;
+ --pf-v6-c-badge--BackgroundColor:
var(--pf-v6-c-badge--m-read--BackgroundColor) !important;
+}
+
+svg {
+ vertical-align: middle;
+}
+
+svg.carbon {
+ stroke: currentColor;
+ stroke-width: 0.5;
+ /*paint-order: stroke fill;*/
+ width: 1em;
+ height: 1em;
+ vertical-align: -0.125em;
+}
+
+/*Animations*/
+
+@keyframes icon-flashing {
+ 0% {
+ color: var(--pf-t--color--green--20);
+ border-color: var(--pf-t--global--color--status--success--100);
+ }
+ 50% {
+ color: var(--pf-t--color--green--40);
+ border-color: var(--pf-t--global--color--status--success--200);
+ }
+ 100% {
+ color: var(--pf-t--color--green--60);
+ border-color:
var(--pf-t--global--icon--color--status--success--default);
+ }
+}
+
+@keyframes scale-icon {
+ from {
+ transform: scale(1);
+ }
+ to {
+ transform: scale(1.1);
+ }
+}
+
+@keyframes rotate-icon-forward {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+@keyframes rotate-icon-backward {
+ from {
+ transform: rotate(360deg);
+ }
+ to {
+ transform: rotate(0deg);
+ }
+}
+
+@keyframes logline {
+ 0% {
+ opacity: 0;
+ transform: translateX(-2px);
+ }
+ 20% {
+ opacity: 1;
+ transform: translateX(0);
+ }
+ 80% {
+ opacity: 1;
+ }
+ 100% {
+ opacity: 0;
+ }
+}
+
+@keyframes steam-movement {
+ 0% {
+ transform: translate(0, 0) scale(1, 1);
+ }
+ 25% {
+ transform: translate(0.5px, -1.5px) scale(1.1, 1.3);
+ }
+ 50% {
+ transform: translate(-0.3px, -2.2px) scale(0.95, 1.1);
+ }
+ 75% {
+ transform: translate(0.1px, -3px) scale(1.25, 1.15);
+ }
+ 100% {
+ transform: translate(0, 0) scale(1, 1);
+ }
+}
+
+@keyframes steam-opacity {
+ 0% {
+ opacity: 0.7;
+ }
+ 25% {
+ opacity: 1;
+ }
+ 50% {
+ opacity: 0.85;
+ }
+ 75% {
+ opacity: 1;
+ }
+ 100% {
+ opacity: 0.7;
+ }
+}
+
+@keyframes heartbeat-pulse {
+ 0% { transform: scale(1); }
+ 14% { transform: scale(1.25); }
+ 28% { transform: scale(1); }
+ 42% { transform: scale(1.25); }
+ 70% { transform: scale(1); }
+ 100% { transform: scale(1); }
+}
diff --git a/karavan-vscode/webview/karavan/app/theme/ThemeContext.tsx
b/karavan-vscode/webview/karavan/app/theme/ThemeContext.tsx
index 90fb6251..c70f0e9e 100644
--- a/karavan-vscode/webview/karavan/app/theme/ThemeContext.tsx
+++ b/karavan-vscode/webview/karavan/app/theme/ThemeContext.tsx
@@ -14,11 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-import React, {createContext, useContext, useEffect, useState} from 'react';
+import React, { createContext, useContext, useEffect, useState } from 'react';
interface ThemeContextType {
isDark: boolean;
- toggleDarkMode: (checked: boolean) => void;
}
const ThemeContext = createContext<ThemeContextType | undefined>(undefined);
@@ -27,31 +26,15 @@ export const ThemeProvider: React.FC<{ children:
React.ReactNode }> = ({ childre
const [isDark, setIsDark] = useState(false);
useEffect(() => {
- const storedTheme = localStorage.getItem('pf-theme');
-
- let shouldUseDark = false;
-
- if (storedTheme === 'dark') {
- shouldUseDark = true;
- } else if (storedTheme === 'light') {
- shouldUseDark = false;
- } else {
- // No stored preference → use browser preference
- shouldUseDark = window.matchMedia('(prefers-color-scheme:
dark)').matches;
+ const dark = document.body.className.includes('vscode-dark');
+ setIsDark(dark);
+ if (dark) {
+ document.documentElement.classList.add('pf-v6-theme-dark');
}
-
- setIsDark(shouldUseDark);
- document.documentElement.classList.toggle('pf-v6-theme-dark',
shouldUseDark);
}, []);
- const toggleDarkMode = (checked: boolean) => {
- setIsDark(checked);
- document.documentElement.classList.toggle('pf-v6-theme-dark', checked);
- localStorage.setItem('pf-theme', checked ? 'dark' : 'light');
- };
-
return (
- <ThemeContext.Provider value={{ isDark, toggleDarkMode }}>
+ <ThemeContext.Provider value={{ isDark }}>
{children}
</ThemeContext.Provider>
);
@@ -63,4 +46,4 @@ export const useTheme = (): ThemeContextType => {
throw new Error('useTheme must be used within a ThemeProvider');
}
return context;
-};
+};
\ No newline at end of file