diff --git a/frontend/src/lib/components/apps/components/display/table/AppAggridTable.svelte b/frontend/src/lib/components/apps/components/display/table/AppAggridTable.svelte
index 59c990c1c3..f46412a223 100644
--- a/frontend/src/lib/components/apps/components/display/table/AppAggridTable.svelte
+++ b/frontend/src/lib/components/apps/components/display/table/AppAggridTable.svelte
@@ -304,8 +304,8 @@
$componentControl[id] = {
agGrid: { api: e.api, columnApi: e.columnApi },
setSelectedIndex: (index) => {
- if(index === null) {
- e.api.deselectAll();
+ if (index === null) {
+ e.api.deselectAll()
outputs?.selectedRow?.set({})
outputs?.selectedRowIndex.set(0)
} else {
diff --git a/frontend/src/lib/components/apps/components/display/table/theme/windmill-theme.css b/frontend/src/lib/components/apps/components/display/table/theme/windmill-theme.css
index 2a4bd70cf0..577604d290 100644
--- a/frontend/src/lib/components/apps/components/display/table/theme/windmill-theme.css
+++ b/frontend/src/lib/components/apps/components/display/table/theme/windmill-theme.css
@@ -7,7 +7,7 @@
.ag-theme-alpine,
.ag-theme-alpine-dark,
.ag-theme-alpine-auto-dark {
- --ag-alpine-active-color: rgb(255, 239, 254);
+ --ag-alpine-active-color: rgb(96, 165, 250);
--ag-selected-row-background-color: rgb(219, 234, 254, 0.5);
--ag-row-hover-color: rgb(191, 219, 254, 0.5);
--ag-column-hover-color: rgba(33, 150, 243, 0.1);
diff --git a/frontend/src/lib/components/apps/components/helpers/NonRunnableComponent.svelte b/frontend/src/lib/components/apps/components/helpers/NonRunnableComponent.svelte
index 8a7a19fe90..d183a5eef7 100644
--- a/frontend/src/lib/components/apps/components/helpers/NonRunnableComponent.svelte
+++ b/frontend/src/lib/components/apps/components/helpers/NonRunnableComponent.svelte
@@ -1,10 +1,11 @@
@@ -39,6 +80,9 @@
{#if render || hasChildrens}
{:else}
diff --git a/frontend/src/lib/components/apps/components/helpers/RefreshIndicator.svelte b/frontend/src/lib/components/apps/components/helpers/RefreshIndicator.svelte
new file mode 100644
index 0000000000..020385c8ae
--- /dev/null
+++ b/frontend/src/lib/components/apps/components/helpers/RefreshIndicator.svelte
@@ -0,0 +1,21 @@
+
+
+{#if loading}
+
+
+
+
+
+ {#if loading}
+ Refreshing...
+ {:else}
+ Refresh
+ {/if}
+
+
+{/if}
diff --git a/frontend/src/lib/components/apps/components/inputs/AppSelect.svelte b/frontend/src/lib/components/apps/components/inputs/AppSelect.svelte
index 73cbb05b3c..8cc19b9edb 100644
--- a/frontend/src/lib/components/apps/components/inputs/AppSelect.svelte
+++ b/frontend/src/lib/components/apps/components/inputs/AppSelect.svelte
@@ -21,7 +21,6 @@
import { Bug } from 'lucide-svelte'
import Popover from '$lib/components/Popover.svelte'
import ResolveStyle from '../helpers/ResolveStyle.svelte'
- import { twMerge } from 'tailwind-merge'
export let id: string
export let configuration: RichConfigurations
@@ -227,6 +226,7 @@
inAppEditor={true}
--border-radius="0.250rem"
--clear-icon-color="#6b7280"
+ --border={$darkMode ? '1px solid #6b7280' : '1px solid #d1d5db'}
bind:filterText
on:filter={handleFilter}
on:clear={onClear}
@@ -238,7 +238,7 @@
? SELECT_INPUT_DEFAULT_STYLE.containerStylesDark
: SELECT_INPUT_DEFAULT_STYLE.containerStyles) + css?.input?.style}
{value}
- class={twMerge($darkMode ? '!border-gray-500' : '!border-gray-300', css?.input?.class)}
+ class={css?.input?.class}
placeholder={resolvedConfig.placeholder}
disabled={resolvedConfig.disabled}
on:focus={() => {
diff --git a/frontend/src/lib/components/apps/rx.ts b/frontend/src/lib/components/apps/rx.ts
index a8ff8308a4..16b795817a 100644
--- a/frontend/src/lib/components/apps/rx.ts
+++ b/frontend/src/lib/components/apps/rx.ts
@@ -8,7 +8,7 @@ export interface Subscriber {
}
export interface Observable {
- subscribe(x: Subscriber, previousValue: T): void
+ subscribe(x: Subscriber, previousValue: T): () => void
}
export interface Output extends Observable {
set(x: T, force?: boolean): void
@@ -154,6 +154,14 @@ export function settableOutput(state: Writable, previousValue: T): Ou
if (value !== undefined && !deepEqual(value, npreviousValue)) {
x.next(value)
}
+
+ // return a callback to unsubscribe
+ return () => {
+ const index = subscribers.findIndex((y) => y === x || (y.id && y.id === x.id))
+ if (index !== -1) {
+ subscribers.splice(index, 1)
+ }
+ }
}
let lastHash: any = undefined
diff --git a/frontend/src/lib/defaults.ts b/frontend/src/lib/defaults.ts
index 0e76a226c1..0367444982 100644
--- a/frontend/src/lib/defaults.ts
+++ b/frontend/src/lib/defaults.ts
@@ -1,7 +1,6 @@
export const SELECT_INPUT_DEFAULT_STYLE = {
inputStyles: 'border-radius: 0;',
- containerStyles:
- '--height: 34px; --padding: 0 0 0 8px; --font-size: 0.875rem; --border: 1px solid #d1d5db;',
+ containerStyles: '--height: 34px; --padding: 0 0 0 8px; --font-size: 0.875rem;',
containerStylesDark:
- '--height: 34px; --padding: 0 0 0 8px; --font-size: 0.875rem; --border: 1px solid #374151; --background: #3b4252; --disabled-background: #2a2f3a; --list-background: #3b4252;--item-is-active-bg:#434c5e;--item-hover-bg:#4c566a;'
+ '--height: 34px; --padding: 0 0 0 8px; --font-size: 0.875rem; --background: #3b4252; --disabled-background: #2a2f3a; --list-background: #3b4252;--item-is-active-bg:#434c5e;--item-hover-bg:#4c566a;'
} as const