From 692de3e62812ed1c77965ccf5017207d9adebe40 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Sun, 23 Feb 2025 23:11:07 +0100 Subject: [PATCH 001/132] update bun to 1.2.3 --- .github/DockerfileBackendTests | 2 +- Dockerfile | 2 +- docker/DockerfileSlim | 2 +- docker/DockerfileSlimEe | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/DockerfileBackendTests b/.github/DockerfileBackendTests index 1676866f73..0eb2149feb 100644 --- a/.github/DockerfileBackendTests +++ b/.github/DockerfileBackendTests @@ -40,7 +40,7 @@ RUN wget https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VER RUN /usr/local/bin/python3 -m pip install pip-tools -COPY --from=oven/bun:1.2.2 /usr/local/bin/bun /usr/bin/bun +COPY --from=oven/bun:1.2.3 /usr/local/bin/bun /usr/bin/bun ARG TARGETPLATFORM diff --git a/Dockerfile b/Dockerfile index 7d7a4f2020..06922e7a60 100644 --- a/Dockerfile +++ b/Dockerfile @@ -191,7 +191,7 @@ COPY --from=builder /windmill/target/release/windmill ${APP}/windmill COPY --from=denoland/deno:2.2.1 --chmod=755 /usr/bin/deno /usr/bin/deno -COPY --from=oven/bun:1.2.2 /usr/local/bin/bun /usr/bin/bun +COPY --from=oven/bun:1.2.3 /usr/local/bin/bun /usr/bin/bun COPY --from=php:8.3.7-cli /usr/local/bin/php /usr/bin/php COPY --from=composer:2.7.6 /usr/bin/composer /usr/bin/composer diff --git a/docker/DockerfileSlim b/docker/DockerfileSlim index 670813a908..57deacde11 100644 --- a/docker/DockerfileSlim +++ b/docker/DockerfileSlim @@ -20,7 +20,7 @@ RUN /usr/local/bin/python3 -m pip install pip-tools # Install UV RUN curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.5.15/uv-installer.sh | sh && mv /root/.local/bin/uv /usr/local/bin/uv -COPY --from=oven/bun:1.2.2 /usr/local/bin/bun /usr/bin/bun +COPY --from=oven/bun:1.2.3 /usr/local/bin/bun /usr/bin/bun # add the docker client to call docker from a worker if enabled COPY --from=docker:dind /usr/local/bin/docker /usr/local/bin/ diff --git a/docker/DockerfileSlimEe b/docker/DockerfileSlimEe index 2c56b78564..cc690c0939 100644 --- a/docker/DockerfileSlimEe +++ b/docker/DockerfileSlimEe @@ -19,7 +19,7 @@ RUN /usr/local/bin/python3 -m pip install pip-tools # Install UV RUN curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.5.15/uv-installer.sh | sh && mv /root/.local/bin/uv /usr/local/bin/uv -COPY --from=oven/bun:1.2.2 /usr/local/bin/bun /usr/bin/bun +COPY --from=oven/bun:1.2.3 /usr/local/bin/bun /usr/bin/bun # add the docker client to call docker from a worker if enabled COPY --from=docker:dind /usr/local/bin/docker /usr/local/bin/ From 1a54e1ed45161db4e2195ad604026d1780becb84 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Sun, 23 Feb 2025 23:33:47 +0100 Subject: [PATCH 002/132] delete audit logs stub older than 14days on CE --- backend/src/monitor.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/backend/src/monitor.rs b/backend/src/monitor.rs index a3f117721f..c48ca5a87b 100644 --- a/backend/src/monitor.rs +++ b/backend/src/monitor.rs @@ -731,6 +731,19 @@ pub async fn delete_expired_items(db: &DB) -> () { Err(e) => tracing::error!("Error deleting log file: {:?}", e), } + #[cfg(not(feature = "enterprise"))] + { + if let Err(e) = sqlx::query_scalar!( + "DELETE FROM audit WHERE timestamp <= now() - ($1::bigint::text || ' s')::interval", + SERVICE_LOG_RETENTION_SECS, + ) + .fetch_all(db) + .await + { + tracing::error!("Error deleting audit log on CE: {:?}", e); + } + } + let job_retention_secs = *JOB_RETENTION_SECS.read().await; if job_retention_secs > 0 { match db.begin().await { From 66451d4da1539d1e48c9b031da3fb7d6c2809e4e Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Sun, 23 Feb 2025 23:38:23 +0100 Subject: [PATCH 003/132] recycle audit logs --- backend/src/monitor.rs | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/backend/src/monitor.rs b/backend/src/monitor.rs index c48ca5a87b..b421054c2d 100644 --- a/backend/src/monitor.rs +++ b/backend/src/monitor.rs @@ -732,16 +732,19 @@ pub async fn delete_expired_items(db: &DB) -> () { } #[cfg(not(feature = "enterprise"))] + let audit_retention_secs = 1 * 60 * 60 * 24 * 14; + + #[cfg(feature = "enterprise")] + let audit_retention_secs = 1 * 60 * 60 * 24 * 365; + + if let Err(e) = sqlx::query_scalar!( + "DELETE FROM audit WHERE timestamp <= now() - ($1::bigint::text || ' s')::interval", + audit_retention_secs, + ) + .fetch_all(db) + .await { - if let Err(e) = sqlx::query_scalar!( - "DELETE FROM audit WHERE timestamp <= now() - ($1::bigint::text || ' s')::interval", - SERVICE_LOG_RETENTION_SECS, - ) - .fetch_all(db) - .await - { - tracing::error!("Error deleting audit log on CE: {:?}", e); - } + tracing::error!("Error deleting audit log on CE: {:?}", e); } let job_retention_secs = *JOB_RETENTION_SECS.read().await; From 089ba7ae008f213a97be31cfa618b2066a4e19c5 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Sun, 23 Feb 2025 23:49:33 +0100 Subject: [PATCH 004/132] fix npn check --- .../src/routes/(root)/(logged)/flows/get/[...path]/+page.svelte | 1 - 1 file changed, 1 deletion(-) diff --git a/frontend/src/routes/(root)/(logged)/flows/get/[...path]/+page.svelte b/frontend/src/routes/(root)/(logged)/flows/get/[...path]/+page.svelte index cb683d0d43..5497a234b2 100644 --- a/frontend/src/routes/(root)/(logged)/flows/get/[...path]/+page.svelte +++ b/frontend/src/routes/(root)/(logged)/flows/get/[...path]/+page.svelte @@ -29,7 +29,6 @@ Trash, ChevronUpSquare, Share, - Badge, Loader2, GitFork, Play, From f1c5b77d7af8433905937d274b97c2d5cd6c1316 Mon Sep 17 00:00:00 2001 From: Alexander Petric Date: Sun, 23 Feb 2025 17:49:54 -0500 Subject: [PATCH 005/132] fix(frontend): make html app component content selectable (#5359) --- .../lib/components/apps/components/display/AppHtml.svelte | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/frontend/src/lib/components/apps/components/display/AppHtml.svelte b/frontend/src/lib/components/apps/components/display/AppHtml.svelte index 7a79efc6f2..faec01e1a2 100644 --- a/frontend/src/lib/components/apps/components/display/AppHtml.svelte +++ b/frontend/src/lib/components/apps/components/display/AppHtml.svelte @@ -13,7 +13,7 @@ export let customCss: ComponentCustomCSS<'htmlcomponent'> | undefined = undefined export let render: boolean - const { app, worldStore } = getContext('AppViewerContext') + const { app, worldStore, mode } = getContext('AppViewerContext') const outputs = initOutput($worldStore, id, { result: undefined, @@ -38,7 +38,9 @@ {#if render}
{ - e?.preventDefault() + if ($mode !== 'preview') { + e?.preventDefault() + } }} class="h-full w-full" > From fd1cfc0df5a606f524f3ed624273704182fa4d7d Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Mon, 24 Feb 2025 01:19:44 +0100 Subject: [PATCH 006/132] bench.sh --- ...ec7e0504b068ffa8bb185d9384ce1422fd3d1.json | 14 ++++++ benchmarks/bench.sh | 43 +++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 backend/.sqlx/query-d8186f0cee285aa50db7626409aec7e0504b068ffa8bb185d9384ce1422fd3d1.json create mode 100644 benchmarks/bench.sh diff --git a/backend/.sqlx/query-d8186f0cee285aa50db7626409aec7e0504b068ffa8bb185d9384ce1422fd3d1.json b/backend/.sqlx/query-d8186f0cee285aa50db7626409aec7e0504b068ffa8bb185d9384ce1422fd3d1.json new file mode 100644 index 0000000000..70872a1328 --- /dev/null +++ b/backend/.sqlx/query-d8186f0cee285aa50db7626409aec7e0504b068ffa8bb185d9384ce1422fd3d1.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM audit WHERE timestamp <= now() - ($1::bigint::text || ' s')::interval", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [] + }, + "hash": "d8186f0cee285aa50db7626409aec7e0504b068ffa8bb185d9384ce1422fd3d1" +} diff --git a/benchmarks/bench.sh b/benchmarks/bench.sh new file mode 100644 index 0000000000..5e2837c2c6 --- /dev/null +++ b/benchmarks/bench.sh @@ -0,0 +1,43 @@ +curl -fsSL https://get.docker.com | sh +sudo usermod -aG docker $USER +newgrp docker + + +mkdir pg_logs +chmod 777 pg_logs + +sudo docker run --network=host -e POSTGRES_PASSWORD=changeme -e POSTGRES_USER=postgres -e POSTGRES_DB=windmill -e POSTGRES_INITDB_ARGS="-c log_duration=on -c log_statement=all -c log_min_duration_statement=0 -c shared_buffers=2GB -c work_mem=32MB -c effective_cache_size=4GB -c shared_preload_libraries=auto_explain -c auto_explain.log_min_duration=5 -c auto_explain.log_analyze=on -c auto_explain.log_timing=on -c auto_explain.log_buffers=on -c auto_explain.log_verbose=on \ + -c log_statement=all \ + -c log_min_duration_statement=0 \ + -c shared_buffers=2GB \ + -c work_mem=32MB \ + -c effective_cache_size=4GB \ + -c shared_preload_libraries=auto_explain \ + -c auto_explain.log_min_duration=5 \ + -c auto_explain.log_analyze=on \ + -c auto_explain.log_timing=on \ + -c auto_explain.log_buffers=on \ + -c auto_explain.log_verbose=on \ + -c auto_explain.log_nested_statements=on \ + -c logging_collector=on \ + -c log_directory='/var/log/postgresql' \ + -c log_filename='postgresql.log'" \ + -v ~/pg_logs:/var/log/postgresql \ + postgres + + +docker run -it --network=host -e DATABASE_URL=postgres://postgres:changeme@localhost/windmill ghcr.io/windmill-labs/windmill:main + + +curl -fsSL https://deno.land/install.sh | sh + +cat < suite.json +[ + { + "kind": "noop", + "jobs": 90000 + } +] +EOF + +deno run --unstable -A -r https://raw.githubusercontent.com/windmill-labs/windmill/main/benchmarks/benchmark_suite.ts -c suite.json From 7ef8100250df8e847f3c45cdf1bb687b0ac09faf Mon Sep 17 00:00:00 2001 From: Guilhem Date: Mon, 24 Feb 2025 09:28:06 +0000 Subject: [PATCH 007/132] replace MenuV2 with melt Menu (1/4) (#5214) * use melt menu in sidebar * stop keyboard navigation for disabled items * use melt menu for FavoriteMenu and WorkspaceMenu * fix popover placement for menuButton * use melt menu for operator menu * fix notification * fix operator menu * Use melt menu in FlowJobsMenu * use melt menu for AppMenu * clean code * clean code * add use clickOutside option to Menu * use pointerdown_outside * use pointerdown_outside # Conflicts: # frontend/src/lib/components/meltComponents/Menu.svelte * use pointerdown in menus * add max-h to app dropdown menu * keep more open in operator menu * add a MenuItem component * clean * nit * nit * clean code * put conditionalMelt as utility function * remove unused Portal * Add debounce effect in operator menu * fix component jumping due to z-index * feat: remove `pip` fallback option for python and ansible (#5186) * refactor!: Remove `pip` fallback option for python and ansible BREAKING CHANGE: pip was deprecated since 1.425.0 (2024-11-15) * fix errors in main.rs * fix tests * remove nsjail for pip * fix imports * fix compilation error * reinforce melt types * fix racing condition issue in closing operator menu * nit * fix id conflix with melt element * nit * prevent modal from closing on click outside button in menu --------- Co-authored-by: pyranota <92104930+pyranota@users.noreply.github.com> Co-authored-by: Ruben Fiszel --- .../apps/components/display/AppMenu.svelte | 142 ++++---- .../components/flows/map/FlowJobsMenu.svelte | 107 +++--- .../meltComponents/MeltButton.svelte | 12 + .../lib/components/meltComponents/Menu.svelte | 85 +++++ .../components/meltComponents/MenuItem.svelte | 36 +++ .../meltComponents/MenuSingleItem.svelte | 18 ++ .../components/meltComponents/Menubar.svelte | 12 + .../lib/components/meltComponents/index.ts | 5 + .../components/sidebar/FavoriteMenu.svelte | 54 ++-- .../lib/components/sidebar/MenuButton.svelte | 28 +- .../lib/components/sidebar/MenuLink.svelte | 14 +- .../components/sidebar/OperatorMenu.svelte | 304 +++++++++++------- .../components/sidebar/SidebarContent.svelte | 221 ++++++------- .../lib/components/sidebar/UserMenu.svelte | 208 ++++++------ .../components/sidebar/WorkspaceMenu.svelte | 114 +++---- frontend/src/lib/utils.ts | 11 +- .../src/routes/(root)/(logged)/+layout.svelte | 32 +- .../svix/create-webhook/+page@(root).svelte | 5 +- 18 files changed, 840 insertions(+), 568 deletions(-) create mode 100644 frontend/src/lib/components/meltComponents/MeltButton.svelte create mode 100644 frontend/src/lib/components/meltComponents/Menu.svelte create mode 100644 frontend/src/lib/components/meltComponents/MenuItem.svelte create mode 100644 frontend/src/lib/components/meltComponents/MenuSingleItem.svelte create mode 100644 frontend/src/lib/components/meltComponents/Menubar.svelte create mode 100644 frontend/src/lib/components/meltComponents/index.ts diff --git a/frontend/src/lib/components/apps/components/display/AppMenu.svelte b/frontend/src/lib/components/apps/components/display/AppMenu.svelte index fe105e6e5b..10011391ec 100644 --- a/frontend/src/lib/components/apps/components/display/AppMenu.svelte +++ b/frontend/src/lib/components/apps/components/display/AppMenu.svelte @@ -15,9 +15,9 @@ import { Button } from '$lib/components/common' import { loadIcon } from '../icon' import ResolveStyle from '../helpers/ResolveStyle.svelte' - import Menu from '$lib/components/common/menu/MenuV2.svelte' import { AppButton } from '../buttons' import AlignWrapper from '../helpers/AlignWrapper.svelte' + import { Menubar, Menu, MeltButton } from '$lib/components/meltComponents' export let id: string export let configuration: RichConfigurations @@ -96,71 +96,81 @@ {#if render} - -
- -
+ + + + + + + -
- {#if menuItems.length > 0} - {#each menuItems as actionButton, actionIndex (actionButton?.id)} - {#if actionButton.type == 'buttoncomponent'} -
{ - outputs?.result.set({ - latestButtonClicked: actionButton.id - }) - }} - > - -
- {/if} - {/each} - {/if} -
-
+
+ {#if menuItems.length > 0} + {#each menuItems as actionButton, actionIndex (actionButton?.id)} + {#if actionButton.type == 'buttoncomponent'} +
{ + outputs?.result.set({ + latestButtonClicked: actionButton.id + }) + }} + > + +
+ {/if} + {/each} + {/if} +
+
+
{/if} diff --git a/frontend/src/lib/components/flows/map/FlowJobsMenu.svelte b/frontend/src/lib/components/flows/map/FlowJobsMenu.svelte index 25405e117b..5531c0f6b4 100644 --- a/frontend/src/lib/components/flows/map/FlowJobsMenu.svelte +++ b/frontend/src/lib/components/flows/map/FlowJobsMenu.svelte @@ -1,9 +1,9 @@ {#if selectedManually && flowJobsSuccess?.some((x) => x == undefined || x == null)} -
(buttonHover = true)} on:mouseleave={() => (buttonHover = false)} on:click={(e) => { +
(buttonHover = true)} + on:mouseleave={() => (buttonHover = false)} + on:click={(e) => { buttonHover = false - dispatch('selectedIteration', { manuallySet: false })} - }> + dispatch('selectedIteration', { manuallySet: false }) + }} + > {#if buttonHover} {:else} @@ -50,45 +60,48 @@ {/if} - -
- -
+ + + + + #{selected == -1 ? '?' : selected + 1} + + + - - - - {#each flowJobs ?? [] as id, idx (id)} - {#if filter == undefined || (idx + 1).toString().includes(filter.toString())} - - - - {/if} - {/each} - +
+ + +
+ {#each flowJobs ?? [] as id, idx (id)} + {#if filter == undefined || (idx + 1).toString().includes(filter.toString())} + { + dispatch('selectedIteration', { index: idx, id, manuallySet: true }) + }} + {item} + > + #{idx + 1} + + {/if} + {/each} +
+
+
+ diff --git a/frontend/src/lib/components/meltComponents/MeltButton.svelte b/frontend/src/lib/components/meltComponents/MeltButton.svelte new file mode 100644 index 0000000000..be528e38fe --- /dev/null +++ b/frontend/src/lib/components/meltComponents/MeltButton.svelte @@ -0,0 +1,12 @@ + + + diff --git a/frontend/src/lib/components/meltComponents/Menu.svelte b/frontend/src/lib/components/meltComponents/Menu.svelte new file mode 100644 index 0000000000..ab67775967 --- /dev/null +++ b/frontend/src/lib/components/meltComponents/Menu.svelte @@ -0,0 +1,85 @@ + + +
+ + + + + +
+
+ +
+
+
diff --git a/frontend/src/lib/components/meltComponents/MenuItem.svelte b/frontend/src/lib/components/meltComponents/MenuItem.svelte new file mode 100644 index 0000000000..55777e401a --- /dev/null +++ b/frontend/src/lib/components/meltComponents/MenuItem.svelte @@ -0,0 +1,36 @@ + + +{#if href} + + + +{:else} + +{/if} diff --git a/frontend/src/lib/components/meltComponents/MenuSingleItem.svelte b/frontend/src/lib/components/meltComponents/MenuSingleItem.svelte new file mode 100644 index 0000000000..62edd4a868 --- /dev/null +++ b/frontend/src/lib/components/meltComponents/MenuSingleItem.svelte @@ -0,0 +1,18 @@ + + +
+ +
+ +
+
diff --git a/frontend/src/lib/components/meltComponents/Menubar.svelte b/frontend/src/lib/components/meltComponents/Menubar.svelte new file mode 100644 index 0000000000..b6a34f07a7 --- /dev/null +++ b/frontend/src/lib/components/meltComponents/Menubar.svelte @@ -0,0 +1,12 @@ + + +
+ +
diff --git a/frontend/src/lib/components/meltComponents/index.ts b/frontend/src/lib/components/meltComponents/index.ts new file mode 100644 index 0000000000..868c5f7e82 --- /dev/null +++ b/frontend/src/lib/components/meltComponents/index.ts @@ -0,0 +1,5 @@ +export { default as Menu } from './Menu.svelte' +export { default as Menubar } from './Menubar.svelte' +export { default as MenuSingleItem } from './MenuSingleItem.svelte' +export { default as MenuItem } from './MenuItem.svelte' +export { default as MeltButton } from './MeltButton.svelte' diff --git a/frontend/src/lib/components/sidebar/FavoriteMenu.svelte b/frontend/src/lib/components/sidebar/FavoriteMenu.svelte index 017a3dd6e8..3f927030f1 100644 --- a/frontend/src/lib/components/sidebar/FavoriteMenu.svelte +++ b/frontend/src/lib/components/sidebar/FavoriteMenu.svelte @@ -1,10 +1,10 @@ - -
- -
+ + + +
{#if !favoriteLinks.length} @@ -30,20 +38,22 @@ {:else}
{#each favoriteLinks ?? [] as favorite (favorite.href)} - - - - {#if favorite.kind == 'script'} - - {:else if favorite.kind == 'flow'} - - {:else if favorite.kind == 'app' || favorite.kind == 'raw_app'} - - {/if} - - - {favorite.label} - + + + {#if favorite.kind == 'script'} + + {:else if favorite.kind == 'flow'} + + {:else if favorite.kind == 'app' || favorite.kind == 'raw_app'} + + {/if} + + + {favorite.label} {/each} diff --git a/frontend/src/lib/components/sidebar/MenuButton.svelte b/frontend/src/lib/components/sidebar/MenuButton.svelte index ab7a32274f..456416aa49 100644 --- a/frontend/src/lib/components/sidebar/MenuButton.svelte +++ b/frontend/src/lib/components/sidebar/MenuButton.svelte @@ -3,6 +3,10 @@ import Popover from '../Popover.svelte' import { createEventDispatcher } from 'svelte' import SideBarNotification from './SideBarNotification.svelte' + import { goto } from '$app/navigation' + import { conditionalMelt } from '$lib/utils' + import type { MenubarMenuElements } from '@melt-ui/svelte' + export let label: string | undefined = undefined export let icon: any | undefined = undefined export let isCollapsed: boolean @@ -12,27 +16,41 @@ export let shortcut: string = '' export let notificationsCount: number = 0 export let color: string | null = null + export let trigger: MenubarMenuElements['trigger'] | undefined = undefined + export let href: string | undefined = undefined + let dispatch = createEventDispatcher() {#if !disabled} - + - { - localStorage.removeItem('workspace') - }} - class="text-primary flex gap-3.5 px-2 py-2 text-xs hover:bg-surface-hover hover:text-primary" - role="menuitem" - tabindex="-1" - > - - All workspaces - + {#each mainMenuLinks as menuLink (menuLink.href ?? menuLink.label)} + + {/each} - {#if $superadmin} +
+
- - Instance settings + + Account settings - {/if} +
- logout()} - class={twMerge( - 'flex flex-row gap-3.5 items-center px-2 py-2 ', - 'text-secondary text-xs', - 'hover:bg-surface-hover hover:text-primary cursor-pointer' - )} +
+ { + if (!document.documentElement.classList.contains('dark')) { + document.documentElement.classList.add('dark') + window.localStorage.setItem('dark-mode', 'dark') + } else { + document.documentElement.classList.remove('dark') + window.localStorage.setItem('dark-mode', 'light') + } + }} + class={twMerge( + 'text-secondary block text-left px-2 py-2 font-normal text-xs hover:bg-surface-hover hover:text-primary w-full', + 'flex flex-row items-center gap-3.5 ', + 'data-[highlighted]:bg-surface-hover data-[highlighted]:text-primary' + )} + {item} + > + {#if darkMode} + + {:else} + + {/if} + Switch theme + + { + localStorage.removeItem('workspace') + }} + class={twMerge( + 'text-primary flex gap-3.5 px-2 py-2 text-xs hover:bg-surface-hover hover:text-primary', + 'data-[highlighted]:bg-surface-hover data-[highlighted]:text-primary' + )} + {item} + > + + All workspaces + + + {#if $superadmin} + + + Instance settings + + {/if} + + logout()} + class={twMerge( + 'flex flex-row gap-3.5 items-center px-2 py-2 w-full', + 'text-secondary text-xs', + 'hover:bg-surface-hover hover:text-primary cursor-pointer', + 'data-[highlighted]:bg-surface-hover data-[highlighted]:text-primary' + )} + {item} + > + + Sign out + +
+
debouncedSetMoreOpen(true)} + on:mouseleave={() => debouncedSetMoreOpen(false)} + role="none" > - - Sign out - + debouncedSetMoreOpen(true)} + on:m-focusout={() => debouncedSetMoreOpen(false)} + {item} + > + {#if !moreOpen || secondMenuLinks.length === 0} +
More...
+ {/if} +
+ {#if moreOpen && secondMenuLinks.length > 0} + {#each secondMenuLinks as menuLink (menuLink.href ?? menuLink.label)} +
+ debouncedSetMoreOpen(true)} + on:m-focusout={() => debouncedSetMoreOpen(false)} + > + {menuLink.label} + +
+ {/each} + {/if} +
-
(moreOpen = true)} - on:mouseleave={() => (moreOpen = false)} - class="divide-y" - role="none" - > - {#if moreOpen == false && secondMenuLinks.length > 0} -
More...
- {:else} - {#each secondMenuLinks as menuLink (menuLink.href ?? menuLink.label)} - - {/each} - {/if} -
-
- {#if $enterpriseLicense} - - {/if} -
+ {#if $enterpriseLicense} +
{ + if (moreOpenTimeout) { + setTimeout(() => { + clearTimeout(moreOpenTimeout) + }, 15) + } + }} + on:mouseleave={() => { + debouncedSetMoreOpen(false) + }} + role="none" + > + +
+ {/if} +
+ diff --git a/frontend/src/lib/components/sidebar/SidebarContent.svelte b/frontend/src/lib/components/sidebar/SidebarContent.svelte index 56e8febc77..c59b4636b6 100644 --- a/frontend/src/lib/components/sidebar/SidebarContent.svelte +++ b/frontend/src/lib/components/sidebar/SidebarContent.svelte @@ -35,9 +35,6 @@ AlertCircle, Database } from 'lucide-svelte' - import Menu from '../common/menu/MenuV2.svelte' - import MenuButton from './MenuButton.svelte' - import { MenuItem } from '@rgossiaux/svelte-headlessui' import UserMenu from './UserMenu.svelte' import DiscordIcon from '../icons/brands/Discord.svelte' import { WorkspaceService } from '$lib/gen' @@ -54,6 +51,14 @@ import KafkaIcon from '../icons/KafkaIcon.svelte' import NatsIcon from '../icons/NatsIcon.svelte' import AwsIcon from '../icons/AwsIcon.svelte' + import { + Menubar, + Menu, + MenuSingleItem, + MenuItem, + MeltButton + } from '$lib/components/meltComponents' + import MenuButton from './MenuButton.svelte' export let numUnacknowledgedCriticalAlerts = 0 @@ -298,7 +303,6 @@ ] export let isCollapsed: boolean = false - export let noGap: boolean = false let leaveWorkspaceModal = false @@ -309,15 +313,18 @@ } return count } + + const itemClass = twMerge( + 'text-secondary font-normal w-full block px-4 py-2 text-2xs data-[highlighted]:bg-surface-hover data-[highlighted]:text-primary' + ) diff --git a/frontend/src/lib/components/sidebar/UserMenu.svelte b/frontend/src/lib/components/sidebar/UserMenu.svelte index 87f39a590a..fbf77faaf7 100644 --- a/frontend/src/lib/components/sidebar/UserMenu.svelte +++ b/frontend/src/lib/components/sidebar/UserMenu.svelte @@ -8,151 +8,137 @@ isPremiumStore, workspaceStore } from '$lib/stores' - import Menu from '../common/menu/MenuV2.svelte' import { USER_SETTINGS_HASH } from './settings' import { isCloudHosted } from '$lib/cloud' import { twMerge } from 'tailwind-merge' import { Crown, HardHat, LogOut, Moon, Settings, Sun, User } from 'lucide-svelte' import DarkModeObserver from '../DarkModeObserver.svelte' import MenuButton from './MenuButton.svelte' - import { MenuItem } from '@rgossiaux/svelte-headlessui' + import { Menu, MenuItem } from '$lib/components/meltComponents' + import { type MenubarBuilders } from '@melt-ui/svelte' let darkMode: boolean = false + export let isCollapsed: boolean = false export let lightMode: boolean = false + export let createMenu: MenubarBuilders['createMenu'] + + const itemClass = twMerge( + 'text-secondary text-left font-normal text-xs ', + 'flex flex-row items-center gap-2 px-4 py-3 w-full', + 'data-[highlighted]:bg-surface-hover data-[highlighted]:text-primary' + ) - -
+ + + + +
+

+ {$userStore?.email} +

+ + {#if $userStore?.is_admin} + Admin of this workspace + {:else if $userStore?.operator} + Operator in this workspace + {/if} +
-
-
-

- {$userStore?.email} -

- - {#if $userStore?.is_admin} - Admin of this workspace - {:else if $userStore?.operator} - Operator in this workspace - {/if} - -
+
+ + + Account settings + -
- - - Account settings - -
+ { + if (!document.documentElement.classList.contains('dark')) { + document.documentElement.classList.add('dark') + window.localStorage.setItem('dark-mode', 'dark') + } else { + document.documentElement.classList.remove('dark') + window.localStorage.setItem('dark-mode', 'light') + } + }} + class={itemClass} + {item} + > + {#if darkMode} + + {:else} + + {/if} + Switch theme + -
- -
+ logout()} + class={twMerge(itemClass, 'text-primary font-semibold')} + {item} + > + + Sign out + +
-
- logout()} - class={twMerge( - 'flex flex-row gap-2 items-center px-4 py-2 ', - 'text-secondary text-sm', - 'hover:bg-surface-hover hover:text-primary cursor-pointer' - )} - > - - Sign out - -
- - {#if isCloudHosted()} + {#if isCloudHosted()} +
{#if !$isPremiumStore} -
- {$usageStore}/1000 user execs -
-
+ {$usageStore}/1000 user execs +
+
+
- {#if $workspaceStore != 'demo'} - {$workspaceUsageStore}/1000 free workspace execs -
+
+ {#if $workspaceStore != 'demo'} + {$workspaceUsageStore}/1000 free workspace execs +
+
- {/if} - {#if $userStore?.is_admin} - - {/if} -
- {:else} -
- -
+ Upgrade + + {/if} + {:else} + { + goto('/workspace_settings?tab=premium') + }} + {item} + > + Premium plan + {/if} - {/if} -
+
+ {/if}
diff --git a/frontend/src/lib/components/sidebar/WorkspaceMenu.svelte b/frontend/src/lib/components/sidebar/WorkspaceMenu.svelte index b17055ac52..b9751ebba0 100644 --- a/frontend/src/lib/components/sidebar/WorkspaceMenu.svelte +++ b/frontend/src/lib/components/sidebar/WorkspaceMenu.svelte @@ -8,21 +8,21 @@ workspaceUsageStore } from '$lib/stores' import { Building, Plus, Settings } from 'lucide-svelte' - - import Menu from '../common/menu/MenuV2.svelte' + import MenuButton from '$lib/components/sidebar/MenuButton.svelte' + import { Menu, MenuItem } from '$lib/components/meltComponents' import { goto } from '$lib/navigation' import { base } from '$lib/base' import { page } from '$app/stores' import { switchWorkspace } from '$lib/storeUtils' import MultiplayerMenu from './MultiplayerMenu.svelte' import { enterpriseLicense } from '$lib/stores' - import MenuButton from './MenuButton.svelte' - import { MenuItem } from '@rgossiaux/svelte-headlessui' import { isCloudHosted } from '$lib/cloud' import { workspaceAIClients } from '../copilot/lib' import { twMerge } from 'tailwind-merge' + import type { MenubarBuilders } from '@melt-ui/svelte' export let isCollapsed: boolean = false + export let createMenu: MenubarBuilders['createMenu'] // When used outside of the side bar, where links to workspace settings and such don't make as much sense. export let strictWorkspaceSelect = false @@ -54,50 +54,49 @@ } - -
+ + w.id === $workspaceStore)?.color} + {trigger} /> -
+
{#each $userWorkspaces as workspace} - - + {#if workspace.color} +
+ {/if} +
{/each}
@@ -116,31 +115,33 @@ {/if} {#if !strictWorkspaceSelect} {/if} {#if ($userStore?.is_admin || $superadmin) && !strictWorkspaceSelect}
- - - - Workspace settings - + + + Workspace settings
{/if} @@ -159,17 +160,18 @@
{/if} {#if $userStore?.is_admin} - + {/if}
{/if} diff --git a/frontend/src/lib/utils.ts b/frontend/src/lib/utils.ts index d32b18d594..b25a7b7cd9 100644 --- a/frontend/src/lib/utils.ts +++ b/frontend/src/lib/utils.ts @@ -15,6 +15,7 @@ import type { Job, Script } from './gen' import type { EnumType, SchemaProperty } from './common' import type { Schema } from './common' export { sendUserToast } +import type { AnyMeltElement } from '@melt-ui/svelte' export function isJobCancelable(j: Job): boolean { return j.type === 'QueuedJob' && !j.schedule_path && !j.canceled @@ -246,6 +247,8 @@ export function pointerDownOutside( options?: ClickOutsideOptions ): { destroy(): void; update(newOptions: ClickOutsideOptions): void } { const handlePointerDown = async (event: PointerEvent) => { + if (!event.isTrusted) return + if (options?.customEventName) { node.dispatchEvent( new CustomEvent(options.customEventName, { @@ -358,7 +361,6 @@ export function emptyStringTrimmed(str: string | undefined | null): boolean { return str === undefined || str === null || str === '' || str.trim().length === 0 } - export function defaultIfEmptyString(str: string | undefined, dflt: string): string { return emptyString(str) ? dflt : str! } @@ -1112,3 +1114,10 @@ export function isScriptPreview(job_kind: Job['job_kind'] | undefined) { !!job_kind && (job_kind === 'preview' || job_kind === 'flowscript' || job_kind === 'appscript') ) } + +export function conditionalMelt(node: HTMLElement, meltItem: AnyMeltElement | undefined) { + if (meltItem) { + return meltItem(node) + } + return { destroy: () => {} } +} diff --git a/frontend/src/routes/(root)/(logged)/+layout.svelte b/frontend/src/routes/(root)/(logged)/+layout.svelte index 23dae07346..84de14dd4e 100644 --- a/frontend/src/routes/(root)/(logged)/+layout.svelte +++ b/frontend/src/routes/(root)/(logged)/+layout.svelte @@ -51,6 +51,7 @@ import MenuButton from '$lib/components/sidebar/MenuButton.svelte' import { setContext } from 'svelte' import { base } from '$app/paths' + import { Menubar } from '$lib/components/meltComponents' OpenAPI.WITH_CREDENTIALS = true let menuOpen = false @@ -388,7 +389,7 @@ >
@@ -397,10 +398,10 @@ on:click={() => { menuOpen = !menuOpen }} - class="ml-1 flex items-center justify-center h-8 w-8 rounded-full focus:outline-none focus:ring-2 focus:ring-inset focus:ring-white border border-white" + class="ml-1 flex items-center justify-center h-6 w-6 rounded-full focus:outline-none focus:ring-2 focus:ring-inset focus:ring-white border border-white" >
-
+
Windmill
-
- - +
+ + + + openSearchModal()} @@ -474,9 +477,11 @@ {/if}
-
- - +
+ + + + openSearchModal()} @@ -519,6 +524,7 @@
{/if} +
- - + + + + openSearchModal()} diff --git a/frontend/src/routes/(root)/(logged)/svix/create-webhook/+page@(root).svelte b/frontend/src/routes/(root)/(logged)/svix/create-webhook/+page@(root).svelte index e68a192eaf..96ee969212 100644 --- a/frontend/src/routes/(root)/(logged)/svix/create-webhook/+page@(root).svelte +++ b/frontend/src/routes/(root)/(logged)/svix/create-webhook/+page@(root).svelte @@ -8,6 +8,7 @@ import { generateRandomString } from '$lib/utils' import Tooltip from '$lib/components/Tooltip.svelte' import WorkspaceMenu from '$lib/components/sidebar/WorkspaceMenu.svelte' + import { Menubar } from '$lib/components/meltComponents' let itemPath: string | undefined = undefined let itemKind: 'script' | 'flow' | 'app' = 'script' @@ -95,7 +96,9 @@
Selected Workspace: - + + +
Date: Mon, 24 Feb 2025 13:16:40 +0100 Subject: [PATCH 008/132] fix initialize of dropdownmenu after melt migration --- .../apps/components/display/AppMenu.svelte | 3 ++- .../apps/editor/RecomputeAllComponents.svelte | 21 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/frontend/src/lib/components/apps/components/display/AppMenu.svelte b/frontend/src/lib/components/apps/components/display/AppMenu.svelte index 10011391ec..671b6048c2 100644 --- a/frontend/src/lib/components/apps/components/display/AppMenu.svelte +++ b/frontend/src/lib/components/apps/components/display/AppMenu.svelte @@ -155,8 +155,9 @@ }} > x.id), + // // missing1: allItems(app.grid, app.subgrids).filter((x) => !initialized?.includes(x.id)), + + // missing2: initialized?.filter( + // (x) => + // !allItems(app.grid, app.subgrids) + // .map((x) => x.id) + // .includes(x) + // ) + // }, + // null, + // 2 + // ), + // initialized?.length == + // allItems(app.grid, app.subgrids).length + (app.hiddenInlineScripts?.length ?? 0) + // ) if (app.lazyInitRequire == undefined) { return ( initialized?.length == From 9736355d5f82615100212698c5537997e5a0de39 Mon Sep 17 00:00:00 2001 From: HugoCasa Date: Mon, 24 Feb 2025 14:12:29 +0100 Subject: [PATCH 009/132] feat: add support for | None and Optional in python (#5361) * feat: add support for | None and Optional in python * update python parser package --- backend/parsers/windmill-parser-py/src/lib.rs | 84 ++++++++++++++++--- frontend/package-lock.json | 8 +- frontend/package.json | 2 +- 3 files changed, 77 insertions(+), 17 deletions(-) diff --git a/backend/parsers/windmill-parser-py/src/lib.rs b/backend/parsers/windmill-parser-py/src/lib.rs index 76f0c415ea..f5f9574888 100644 --- a/backend/parsers/windmill-parser-py/src/lib.rs +++ b/backend/parsers/windmill-parser-py/src/lib.rs @@ -96,11 +96,11 @@ pub fn parse_python_signature( .iter() .enumerate() .map(|(i, x)| { - let mut typ = x + let (mut typ, has_default) = x .as_arg() .annotation .as_ref() - .map_or(Typ::Unknown, |e| parse_expr(e)); + .map_or((Typ::Unknown, false), |e| parse_expr(e)); let default = if i >= def_arg_start { params @@ -138,7 +138,7 @@ pub fn parse_python_signature( otyp: None, name: x.as_arg().arg.to_string(), typ, - has_default: default.is_some(), + has_default: has_default || default.is_some(), default, oidx: None, } @@ -158,17 +158,27 @@ pub fn parse_python_signature( } } -fn parse_expr(e: &Box) -> Typ { +fn parse_expr(e: &Box) -> (Typ, bool) { match e.as_ref() { - Expr::Name(ExprName { id, .. }) => parse_typ(id.as_ref()), + Expr::Name(ExprName { id, .. }) => (parse_typ(id.as_ref()), false), Expr::Attribute(x) => { if x.value .as_name_expr() .is_some_and(|x| x.id.as_str() == "wmill") { - parse_typ(x.attr.as_str()) + (parse_typ(x.attr.as_str()), false) } else { - Typ::Unknown + (Typ::Unknown, false) + } + } + Expr::BinOp(x) => { + if matches!( + x.right.as_ref(), + Expr::Constant(ExprConstant { value: Constant::None, .. }) + ) { + (parse_expr(&x.left).0, true) + } else { + (Typ::Unknown, false) } } Expr::Subscript(x) => match x.value.as_ref() { @@ -193,14 +203,15 @@ fn parse_expr(e: &Box) -> Typ { } _ => None, }; - Typ::Str(values) + (Typ::Str(values), false) } - "List" => Typ::List(Box::new(parse_expr(&x.slice))), - _ => Typ::Unknown, + "List" => (Typ::List(Box::new(parse_expr(&x.slice).0)), false), + "Optional" => (parse_expr(&x.slice).0, true), + _ => (Typ::Unknown, false), }, - _ => Typ::Unknown, + _ => (Typ::Unknown, false), }, - _ => Typ::Unknown, + _ => (Typ::Unknown, false), } } @@ -676,4 +687,53 @@ def main(a: list, e: List[int], b: list = [1,2,3,4], c = [1,2,3,4], d = ["a", "b Ok(()) } + + #[test] + fn test_parse_python_sig_9() -> anyhow::Result<()> { + let code = r#" +from typing import Optional +def main(a: str, b: Optional[str], c: str | None): return +"#; + println!( + "{}", + serde_json::to_string(&parse_python_signature(code, None, false)?)? + ); + assert_eq!( + parse_python_signature(code, None, false)?, + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![ + Arg { + otyp: None, + name: "a".to_string(), + typ: Typ::Str(None), + default: None, + has_default: false, + oidx: None + }, + Arg { + otyp: None, + name: "b".to_string(), + typ: Typ::Str(None), + default: None, + has_default: true, + oidx: None + }, + Arg { + otyp: None, + name: "c".to_string(), + typ: Typ::Str(None), + default: None, + has_default: true, + oidx: None + }, + ], + no_main_func: Some(false), + has_preprocessor: Some(false) + } + ); + + Ok(()) + } } diff --git a/frontend/package-lock.json b/frontend/package-lock.json index ed218686e5..4639ea6e55 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -70,7 +70,7 @@ "windmill-parser-wasm-csharp": "^1.437.1", "windmill-parser-wasm-go": "^1.429.0", "windmill-parser-wasm-php": "^1.429.0", - "windmill-parser-wasm-py": "^1.429.0", + "windmill-parser-wasm-py": "^1.467.1", "windmill-parser-wasm-regex": "^1.439.0", "windmill-parser-wasm-rust": "^1.429.0", "windmill-parser-wasm-ts": "^1.429.0", @@ -12594,9 +12594,9 @@ "integrity": "sha512-SGJAtNpfdRZftkGboxWsm/yQDnJBJodwPQUbX2cWk/aoNook6ULesZwsYtBC9WN1VH6TIskLiVPohMmu6jtXmw==" }, "node_modules/windmill-parser-wasm-py": { - "version": "1.429.0", - "resolved": "https://registry.npmjs.org/windmill-parser-wasm-py/-/windmill-parser-wasm-py-1.429.0.tgz", - "integrity": "sha512-cqc+tblQVHVrc8wNA4esVYD1Dv59XQJ4mHXFFPa8Lx5UjXv7FO/0VQxyQuRyXaP/V6J6DDy0oeN107eFNLxrBg==" + "version": "1.467.1", + "resolved": "https://registry.npmjs.org/windmill-parser-wasm-py/-/windmill-parser-wasm-py-1.467.1.tgz", + "integrity": "sha512-Px/UvNjCCScf5V7B90PirxYe7Mn/zMnhk++cLuvlg08j45GR/mzFOIfC7Xk9e555ppX3gTlCk+auH4aIlG2tVw==" }, "node_modules/windmill-parser-wasm-regex": { "version": "1.439.0", diff --git a/frontend/package.json b/frontend/package.json index c46d653493..2373de8154 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -145,7 +145,7 @@ "windmill-parser-wasm-csharp": "^1.437.1", "windmill-parser-wasm-go": "^1.429.0", "windmill-parser-wasm-php": "^1.429.0", - "windmill-parser-wasm-py": "^1.429.0", + "windmill-parser-wasm-py": "^1.467.1", "windmill-parser-wasm-regex": "^1.439.0", "windmill-parser-wasm-rust": "^1.429.0", "windmill-parser-wasm-ts": "^1.429.0", From a87b4a52ed5ba5d6f0152cad95f9a225efe6d15f Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Mon, 24 Feb 2025 14:43:23 +0100 Subject: [PATCH 010/132] nit saml --- backend/src/main.rs | 5 ++- .../lib/components/InstanceSettings.svelte | 2 +- frontend/src/lib/components/Login.svelte | 4 +- .../src/lib/components/instanceSettings.ts | 40 +++++++++---------- 4 files changed, 27 insertions(+), 24 deletions(-) diff --git a/backend/src/main.rs b/backend/src/main.rs index afd7ea08f4..afbf38f967 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -1119,9 +1119,12 @@ pub async fn run_workers( async fn send_delayed_killpill( tx: &tokio::sync::broadcast::Sender<()>, - max_delay_secs: u64, + mut max_delay_secs: u64, context: &str, ) { + if max_delay_secs == 0 { + max_delay_secs = 1; + } // Random delay to avoid all servers/workers shutting down simultaneously let rd_delay = rand::rng().random_range(0..max_delay_secs); tracing::info!("Scheduling {context} shutdown in {rd_delay}s"); diff --git a/frontend/src/lib/components/InstanceSettings.svelte b/frontend/src/lib/components/InstanceSettings.svelte index 293fab4e40..4d84922d3c 100644 --- a/frontend/src/lib/components/InstanceSettings.svelte +++ b/frontend/src/lib/components/InstanceSettings.svelte @@ -303,7 +303,7 @@ size="xs">Send usage {/if} - {:else if category == 'Auth/OAuth'} + {:else if category == 'Auth/OAuth/SAML'} storeRedirect(login.type)} > {login.displayName} @@ -288,7 +288,7 @@ + +{#if open} +
+
+ +
+
+{/if} diff --git a/frontend/src/lib/components/DropdownV2Inner.svelte b/frontend/src/lib/components/DropdownV2Inner.svelte index 548fda060c..1566e146d0 100644 --- a/frontend/src/lib/components/DropdownV2Inner.svelte +++ b/frontend/src/lib/components/DropdownV2Inner.svelte @@ -1,19 +1,11 @@ - + +{/key} {#if $app} - + { + $app.fullscreen = detail === 'true' + }} + > @@ -1566,27 +1569,30 @@ {#if $app} { - setTheme(e.detail) + on:selected={({ detail }) => { + console.log('dbg detail', detail) + const theme = detail === 'dark' ? true : detail === 'sun' ? false : undefined + console.log('dbg settheme', theme) + setTheme(theme) }} - bind:selected={$app.darkMode} + selected={$app.darkMode === undefined ? 'auto' : $app.darkMode ? 'dark' : 'sun'} > @@ -1606,12 +1612,16 @@ iconProps={{ size: 16 }} /> {#if $breakpoint === 'sm'} - {/if} @@ -1660,33 +1670,7 @@ {/if}
- - - - - - {#each moreItems as item} - -
- - {item.displayName} -
-
- {/each} -
-
+ - {:else if isSmall} -
- {:else}
{`Debug nodes (current node: ${currentNodeId})`}
{/if} -
- - - {#each nodes ?? [] as node, index} - { - $componentControl?.[id]?.setTab?.(index) - - $debuggingComponents[id] = index - }} - > -
key !== id) + ) + }} > - {`Debug node ${node.label}`} -
-
- {/each} - { - $componentControl?.[id]?.setTab?.(0) - - $debuggingComponents = Object.fromEntries( - Object.entries($debuggingComponents).filter(([key]) => key !== id) - ) - }} - > -
- {`Reset debug mode`} + +
-
-
- - + {:else if isSmall} +
+ {:else}
{`Debug nodes (current node: ${currentNodeId})`}
{/if} + + + {/key} diff --git a/frontend/src/lib/components/apps/editor/RecomputeAllButton.svelte b/frontend/src/lib/components/apps/editor/RecomputeAllButton.svelte index a351f6e74d..d834fd8d1a 100644 --- a/frontend/src/lib/components/apps/editor/RecomputeAllButton.svelte +++ b/frontend/src/lib/components/apps/editor/RecomputeAllButton.svelte @@ -1,9 +1,7 @@ - - - {#each tabs ?? [] as { }, index} - { - $componentControl?.[id]?.setTab?.(index) - selected = index - isManuallySelected = true - }} - > -
- {#if index === tabs.length - 1} - {isConditionalDebugMode ? `Debug default condition` : `Debug tab ${index + 1}`} - {:else} - {`Debug ${isConditionalDebugMode ? 'condition' : 'tab'} ${index + 1}`} - {/if} -
-
- {/each} - { - $componentControl?.[id]?.setTab?.(-1) - selected = null - isManuallySelected = false - }} - > -
- {`Reset debug mode`} -
-
-
- - + +{/key} diff --git a/frontend/src/lib/components/apps/editor/componentsPanel/CustomComponentRow.svelte b/frontend/src/lib/components/apps/editor/componentsPanel/CustomComponentRow.svelte index 34cef28d8e..b9d58d7904 100644 --- a/frontend/src/lib/components/apps/editor/componentsPanel/CustomComponentRow.svelte +++ b/frontend/src/lib/components/apps/editor/componentsPanel/CustomComponentRow.svelte @@ -4,13 +4,9 @@ import { Trash } from 'lucide-svelte' import { sendUserToast } from '$lib/toast' - import { twMerge } from 'tailwind-merge' import { createEventDispatcher } from 'svelte' import NameEditor from './NameEditor.svelte' - - import ButtonDropdown from '$lib/components/common/button/ButtonDropdown.svelte' - import { classNames } from '$lib/utils' - import { MenuItem } from '@rgossiaux/svelte-headlessui' + import Dropdown from '$lib/components/DropdownV2.svelte' import { ResourceService } from '$lib/gen' export let row: { @@ -52,6 +48,17 @@ sendUserToast('Component name updated:\n' + name) } + + function getItems() { + return [ + { + action: toggleDelete, + icon: Trash, + displayName: 'Delete', + type: 'delete' as const + } + ] + } @@ -69,23 +76,6 @@ -
- -
+
diff --git a/frontend/src/lib/components/apps/editor/componentsPanel/GroupRow.svelte b/frontend/src/lib/components/apps/editor/componentsPanel/GroupRow.svelte index da0d7bbc85..c3c72d6a78 100644 --- a/frontend/src/lib/components/apps/editor/componentsPanel/GroupRow.svelte +++ b/frontend/src/lib/components/apps/editor/componentsPanel/GroupRow.svelte @@ -2,17 +2,12 @@ import { deleteGroup, getGroup, updateGroup } from './groupUtils' import { workspaceStore } from '$lib/stores' import Cell from '$lib/components/table/Cell.svelte' - + import Dropdown from '$lib/components/DropdownV2.svelte' import { Trash } from 'lucide-svelte' import { sendUserToast } from '$lib/toast' - import { twMerge } from 'tailwind-merge' import { createEventDispatcher } from 'svelte' import GroupNameEditor from './NameEditor.svelte' - import ButtonDropdown from '$lib/components/common/button/ButtonDropdown.svelte' - import { classNames } from '$lib/utils' - import { MenuItem } from '@rgossiaux/svelte-headlessui' - export let row: { name: string path: string @@ -27,6 +22,17 @@ dispatch('reloadGroups') sendUserToast('Group deleted:\n' + row.name) } + + function getItems() { + return [ + { + action: toggleDelete, + icon: Trash, + displayName: 'Delete', + type: 'delete' as const + } + ] + } @@ -54,23 +60,6 @@ -
- -
+
diff --git a/frontend/src/lib/components/apps/editor/componentsPanel/ThemeRow.svelte b/frontend/src/lib/components/apps/editor/componentsPanel/ThemeRow.svelte index 4b7d83bb13..47e49096bc 100644 --- a/frontend/src/lib/components/apps/editor/componentsPanel/ThemeRow.svelte +++ b/frontend/src/lib/components/apps/editor/componentsPanel/ThemeRow.svelte @@ -14,9 +14,7 @@ import ThemeNameEditor from './ThemeNameEditor.svelte' import ThemeDrawer from './ThemeDrawer.svelte' - import ButtonDropdown from '$lib/components/common/button/ButtonDropdown.svelte' - import { classNames } from '$lib/utils' - import { MenuItem } from '@rgossiaux/svelte-headlessui' + import Dropdown from '$lib/components/DropdownV2.svelte' export let previewThemePath: string | undefined = undefined @@ -134,6 +132,36 @@ } } + async function getDropdownItems() { + return [ + { + action: () => themeDrawer?.openDrawer(), + icon: Code, + displayName: 'View code', + type: 'action' as const + }, + { + action: () => fork(row.path), + icon: GitBranch, + displayName: 'Fork', + type: 'action' as const + }, + { + action: () => makeDefaultTheme(row.path), + icon: Pin, + displayName: 'Make default', + type: 'action' as const, + disabled: row.path === DEFAULT_THEME + }, + { + action: toggleDelete, + icon: Trash, + displayName: 'Delete', + type: 'delete' as const, + disabled: row.path === DEFAULT_THEME + } + ] + } let themeDrawer: ThemeDrawer @@ -172,55 +200,7 @@ {/if} - +
diff --git a/frontend/src/lib/components/common/button/Button.svelte b/frontend/src/lib/components/common/button/Button.svelte index 264a56dc00..0ad790f397 100644 --- a/frontend/src/lib/components/common/button/Button.svelte +++ b/frontend/src/lib/components/common/button/Button.svelte @@ -2,10 +2,9 @@ import { createEventDispatcher } from 'svelte' import { ButtonType } from './model' import { twMerge } from 'tailwind-merge' - import ButtonDropdown from './ButtonDropdown.svelte' - import { MenuItem } from '@rgossiaux/svelte-headlessui' - import { classNames, getModifierKey } from '$lib/utils' - import { Loader2 } from 'lucide-svelte' + import Dropdown from '$lib/components/DropdownV2.svelte' + import { getModifierKey, type Item } from '$lib/utils' + import { Loader2, ChevronDown } from 'lucide-svelte' export let size: ButtonType.Size = 'md' export let spacingSize: ButtonType.Size = size @@ -30,7 +29,6 @@ export let title: string | undefined = undefined export let style: string = '' export let download: string | undefined = undefined - export let portalTarget: string | undefined = undefined export let startIcon: ButtonType.Icon | undefined = undefined export let endIcon: ButtonType.Icon | undefined = undefined export let shortCut: @@ -45,12 +43,14 @@ } export let dropdownItems: MenuItem[] | (() => MenuItem[]) | undefined = undefined - function computeDropdowns(): MenuItem[] | undefined { - if (typeof dropdownItems === 'function') { - return dropdownItems() - } else { - return dropdownItems - } + function computeDropdowns(menuItems: MenuItem[] | (() => MenuItem[])): Item[] { + const items = typeof menuItems === 'function' ? menuItems() : menuItems + return items.map((item) => ({ + displayName: item.label, + action: item.onClick ? (e) => item.onClick?.(e) : undefined, + icon: item.icon, + href: item.href + })) } export function focus() { @@ -230,32 +230,19 @@ {/if} {#if dropdownItems && dropdownItems.length > 0} -
- - - {#each computeDropdowns() ?? [] as item} - -
- {#if item.icon} - - {/if} - {item.label} -
-
- {/each} -
-
-
+ + +
+ +
+
+
{/if}
diff --git a/frontend/src/lib/components/common/button/ButtonDropdown.svelte b/frontend/src/lib/components/common/button/ButtonDropdown.svelte deleted file mode 100644 index b617c04323..0000000000 --- a/frontend/src/lib/components/common/button/ButtonDropdown.svelte +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - {#if $$slots.buttonReplacement} - - {:else} - - - {/if} - - - - -
- - -
- -
-
-
-
-
-
diff --git a/frontend/src/lib/components/details/DetailPageHeader.svelte b/frontend/src/lib/components/details/DetailPageHeader.svelte index 6a3012946b..abf4a004bf 100644 --- a/frontend/src/lib/components/details/DetailPageHeader.svelte +++ b/frontend/src/lib/components/details/DetailPageHeader.svelte @@ -1,9 +1,7 @@ - - - - - diff --git a/frontend/src/lib/components/meltComponents/ButtonDropDown.svelte b/frontend/src/lib/components/meltComponents/ButtonDropDown.svelte deleted file mode 100644 index ab2bf338ce..0000000000 --- a/frontend/src/lib/components/meltComponents/ButtonDropDown.svelte +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - -
- {#each dropdownItems as item} - - {/each} -
-
-
diff --git a/frontend/src/lib/components/meltComponents/Menu.svelte b/frontend/src/lib/components/meltComponents/Menu.svelte index ab67775967..295b973df2 100644 --- a/frontend/src/lib/components/meltComponents/Menu.svelte +++ b/frontend/src/lib/components/meltComponents/Menu.svelte @@ -3,7 +3,6 @@ import type { MenubarBuilders } from '@melt-ui/svelte' import type { Placement } from '@floating-ui/core' import { pointerDownOutside } from '$lib/utils' - import { zIndexes } from '$lib/zIndexes' import { twMerge } from 'tailwind-merge' import ResolveOpen from '$lib/components/common/menu/ResolveOpen.svelte' @@ -43,8 +42,6 @@ async function getMenuElements(): Promise { return Array.from(document.querySelectorAll('[data-menu]')) as HTMLElement[] } - - const zIndex = zIndexes.contextMenu
@@ -70,16 +67,18 @@ -
-
- + {#if open} +
+
+ +
-
+ {/if}
diff --git a/frontend/src/lib/components/meltComponents/MenuItem.svelte b/frontend/src/lib/components/meltComponents/MenuItem.svelte index 55777e401a..c1a3d0939f 100644 --- a/frontend/src/lib/components/meltComponents/MenuItem.svelte +++ b/frontend/src/lib/components/meltComponents/MenuItem.svelte @@ -1,10 +1,13 @@ {#if href} @@ -23,8 +26,8 @@ {:else} - -
- handleKeyUp(e, () => close(null))} - placeholder="New folder name" - bind:value={newFolderName} - /> + + +
+ + + + +
+ handleKeyUp(e, () => close(null))} + placeholder="New folder name" + bind:value={newFolderName} + /> -
- +
+ +
-
-
-
-
+ +
+ -
- - - - Name - Scripts - Flows - Apps - Schedules - Variables - Resources - Participants - - - - - {#if folders === undefined} - {#each new Array(4) as _} - - - - - - {/each} - {:else} - {#if folders.length === 0} - - No folders yet, create one! - - {/if} +
+ + + + Name + Scripts + Flows + Apps + Schedules + Variables + Resources + Participants + + + + + {#if folders === undefined} + {#each new Array(4) as _} + + + + + + {/each} + {:else} + {#if folders.length === 0} + + No folders yet, create one! + + {/if} - {#each folders as { name, extra_perms, owners, canWrite, summary } (name)} - { - editFolderName = name - folderDrawer.openDrawer() - }} - > - - {name} - {#if summary} -
- {summary} - {/if} -
- + {#each folders as { name, extra_perms, owners, canWrite, summary } (name)} + { + editFolderName = name + folderDrawer.openDrawer() + }} + > + + {name} + {#if summary} +
+ {summary} + {/if} +
+ - - - { - editFolderName = name - folderDrawer.openDrawer() - } - }, - { - displayName: `Delete${canWrite ? '' : ' (require owner permissions)'}`, - icon: Trash, - type: 'delete', - disabled: !canWrite, - action: async () => { - try { - await FolderService.deleteFolder({ - workspace: $workspaceStore ?? '', - name - }) - } catch (e) { - sendUserToast(e.body, true) - loadFolders() + + + { + editFolderName = name + folderDrawer.openDrawer() + } + }, + { + displayName: `Delete${canWrite ? '' : ' (require owner permissions)'}`, + icon: Trash, + type: 'delete', + disabled: !canWrite, + action: async () => { + try { + await FolderService.deleteFolder({ + workspace: $workspaceStore ?? '', + name + }) + } catch (e) { + sendUserToast(e.body, true) + loadFolders() + } } } - } - ]} - /> - -
- {/each} - {/if} - -
-
- + ]} + /> +
+ + {/each} + {/if} + +
+
+ {/if} diff --git a/frontend/src/routes/(root)/(logged)/groups/+page.svelte b/frontend/src/routes/(root)/(logged)/groups/+page.svelte index 93fc04d45d..dc0148baff 100644 --- a/frontend/src/routes/(root)/(logged)/groups/+page.svelte +++ b/frontend/src/routes/(root)/(logged)/groups/+page.svelte @@ -73,160 +73,160 @@ -{#if $userStore?.operator && $workspaceStore && !$userWorkspaces.find(_ => _.id === $workspaceStore)?.operator_settings?.groups} - -{:else} - - -
-
- - - - -
- - -
-
-
-
-
- -
- - - - Name - Members - - - - - {#if groups === undefined} - {#each new Array(4) as _} - - - - - - {/each} - {:else} - {#each groups as { name, summary, extra_perms, canWrite } (name)} - { - editGroupName = name - groupDrawer.openDrawer() - }} - > - -
-
- {name} - {#if summary} -
- {summary} - {/if} -
- -
-
- - - - - { - editGroupName = name - groupDrawer.openDrawer() - } - }, - { - displayName: 'Delete', - - icon: Trash, - type: 'delete', - disabled: !canWrite, - action: async () => { - await GroupService.deleteGroup({ workspace: $workspaceStore ?? '', name }) - loadGroups() - } - } - ]} - /> - -
- {/each} - {/if} - -
+{#if $userStore?.operator && $workspaceStore && !$userWorkspaces.find((_) => _.id === $workspaceStore)?.operator_settings?.groups} + - - {#if instanceGroups && instanceGroups.length > 0} +{:else} + + title="Groups" + tooltip="Group users together to grant roles and homegenous permissions. Same users can be in many groups at the same time." + documentationLink="https://www.windmill.dev/docs/core_concepts/groups_and_folders" + > +
+
+ + + + +
+ + +
+
+
+
+
+
- - - Name - Members - - - {#each instanceGroups as { name, emails }} - - - { - editGroupName = name - groupDrawer.openDrawer() - }} - >{name} - - - {emails?.length ?? 0} members - - {/each} + + + + Name + Members + + + + + {#if groups === undefined} + {#each new Array(4) as _} + + + + + + {/each} + {:else} + {#each groups as { name, summary, extra_perms, canWrite } (name)} + { + editGroupName = name + groupDrawer.openDrawer() + }} + > + +
+
+ {name} + {#if summary} +
+ {summary} + {/if} +
+ +
+
+ + + + + { + editGroupName = name + groupDrawer.openDrawer() + } + }, + { + displayName: 'Delete', + + icon: Trash, + type: 'delete', + disabled: !canWrite, + action: async () => { + await GroupService.deleteGroup({ workspace: $workspaceStore ?? '', name }) + loadGroups() + } + } + ]} + /> + +
+ {/each} + {/if} -
+
- {/if} -
+ + {#if instanceGroups && instanceGroups.length > 0} + +
+ + + Name + Members + + + {#each instanceGroups as { name, emails }} + + + { + editGroupName = name + groupDrawer.openDrawer() + }} + >{name} + + + {emails?.length ?? 0} members + + {/each} + + +
+ {/if} + {/if} From d45c1f69d48a5ad93f4399ce0150bbff6fd4fa6b Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Mon, 24 Feb 2025 20:08:13 +0100 Subject: [PATCH 023/132] fix: handle better optional chaining operator --- backend/windmill-worker/src/js_eval.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/backend/windmill-worker/src/js_eval.rs b/backend/windmill-worker/src/js_eval.rs index 2aa8ae6403..ea6d3cf763 100644 --- a/backend/windmill-worker/src/js_eval.rs +++ b/backend/windmill-worker/src/js_eval.rs @@ -376,9 +376,10 @@ fn replace_with_await(expr: String, fn_name: &str) -> String { } lazy_static! { static ref RE: Regex = - Regex::new(r#"(?m)(?Presults(?:(?:\.[a-zA-Z_0-9]+)|(?:\[\".*?\"\])))"#).unwrap(); + Regex::new(r#"(?m)(?Presults(?:\?)?(?:(?:\.[a-zA-Z_0-9]+)|(?:\[\".*?\"\])))"#).unwrap(); static ref RE_FULL: Regex = - Regex::new(r"(?m)^results\.([a-zA-Z_0-9]+)(?:\[(\d+)\])?((?:\.[a-zA-Z_0-9]+)+)?$").unwrap(); + Regex::new(r"(?m)^results(?:\?)?\.([a-zA-Z_0-9]+)(?:\[(\d+)\])?((?:\.[a-zA-Z_0-9]+)+)?$") + .unwrap(); static ref RE_PROXY: Regex = Regex::new(r"^(https?)://(([^:@\s]+):([^:@\s]+)@)?([^:@\s]+)(:(\d+))?$").unwrap(); } From 4ee4ff78d389d61c63952c84dee967113c783c45 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Mon, 24 Feb 2025 22:43:36 +0100 Subject: [PATCH 024/132] fix: improve custom component rendering --- .../display/AppCustomComponent.svelte | 31 +++++++++---------- .../apps/editor/SubGridEditor.svelte | 2 +- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/frontend/src/lib/components/apps/components/display/AppCustomComponent.svelte b/frontend/src/lib/components/apps/components/display/AppCustomComponent.svelte index 192cf569ef..1197c4fa5a 100644 --- a/frontend/src/lib/components/apps/components/display/AppCustomComponent.svelte +++ b/frontend/src/lib/components/apps/components/display/AppCustomComponent.svelte @@ -50,7 +50,7 @@ } } let loaded = false - + let renderer: ((props: CCProps) => void) | undefined = undefined // $: renderer && divEl && renderer(ccProps) onMount(async () => { // //@ts-ignore @@ -81,8 +81,7 @@ ) loaded = true try { - let renderer: (props: CCProps) => void = - globalThis.windmill[customComponent?.name ?? 'no_name'] + renderer = globalThis.windmill[customComponent?.name ?? 'no_name'] if (!renderer) { sendUserToast( 'Custom Component seem to be ill-defined (renderer missing). is COMPONENT_NAME in vite.config.ts matching the name of the custom component?', @@ -95,14 +94,16 @@ sendUserToast('Custom Component seem to be ill-defined', true) console.error(e) } + console.log('mounted', render, setRender) }) let result - $: render != undefined && handleRender() + $: render != undefined && setRender && handleRender() function handleRender() { setRender?.(render) } - $: result != undefined && handleResult() + + $: result != undefined && setInput && handleResult() function handleResult() { setInput?.(result) } @@ -110,15 +111,11 @@ -{#if render} -
- - {#if !loaded} - - {/if} -
- -
-{:else} - -{/if} +
+ + {#if !loaded} + + {/if} +
+ +
diff --git a/frontend/src/lib/components/apps/editor/SubGridEditor.svelte b/frontend/src/lib/components/apps/editor/SubGridEditor.svelte index 4e9cebe228..3fdb7728f1 100644 --- a/frontend/src/lib/components/apps/editor/SubGridEditor.svelte +++ b/frontend/src/lib/components/apps/editor/SubGridEditor.svelte @@ -319,7 +319,7 @@ > Date: Mon, 24 Feb 2025 23:14:49 +0100 Subject: [PATCH 025/132] chore(main): release 1.468.0 (#5356) * chore(main): release 1.468.0 * Apply automatic changes --------- Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com> --- CHANGELOG.md | 24 ++ backend/Cargo.lock | 225 ++++++++++-------- backend/Cargo.toml | 4 +- backend/windmill-api/openapi.yaml | 2 +- benchmarks/lib.ts | 2 +- cli/main.ts | 2 +- frontend/package-lock.json | 4 +- frontend/package.json | 2 +- lsp/Pipfile | 4 +- openflow.openapi.yaml | 2 +- .../WindmillClient/WindmillClient.psd1 | 2 +- python-client/wmill/pyproject.toml | 2 +- python-client/wmill_pg/pyproject.toml | 2 +- typescript-client/jsr.json | 2 +- typescript-client/package.json | 2 +- version.txt | 2 +- 16 files changed, 162 insertions(+), 121 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 363786091d..21c13eeca3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,29 @@ # Changelog +## [1.468.0](https://github.com/windmill-labs/windmill/compare/v1.467.1...v1.468.0) (2025-02-24) + + +### Features + +* add audit logs scope filter in admins workspace ([#5352](https://github.com/windmill-labs/windmill/issues/5352)) ([b3e00b7](https://github.com/windmill-labs/windmill/commit/b3e00b7fdc3ad4c689fc30216accbed05822794c)) +* add support for | None and Optional in python ([#5361](https://github.com/windmill-labs/windmill/issues/5361)) ([9736355](https://github.com/windmill-labs/windmill/commit/9736355d5f82615100212698c5537997e5a0de39)) +* make flow lock deployment error visible in UI ([b8e6d0d](https://github.com/windmill-labs/windmill/commit/b8e6d0da79ca57b115e7cb0ccff9f5623b23f3f3)) + + +### Bug Fixes + +* add LOCALAPPDATA env variable to python execution on windows ([8806870](https://github.com/windmill-labs/windmill/commit/8806870b1bf67c2f77beaf04d986cf172c7b4bf4)) +* fix confirmation modal check on deploy ([3028325](https://github.com/windmill-labs/windmill/commit/3028325615e2f7e5ee3d1b6278580121880db14f)) +* **frontend:** make html app component content selectable ([#5359](https://github.com/windmill-labs/windmill/issues/5359)) ([f1c5b77](https://github.com/windmill-labs/windmill/commit/f1c5b77d7af8433905937d274b97c2d5cd6c1316)) +* handle better forced value propagation in apps ([7c842c8](https://github.com/windmill-labs/windmill/commit/7c842c88bf5225b6bc39857109b1b1ba5f99d708)) +* handle better optional chaining operator ([d45c1f6](https://github.com/windmill-labs/windmill/commit/d45c1f69d48a5ad93f4399ce0150bbff6fd4fa6b)) +* improve app markdown rendering ([96597d3](https://github.com/windmill-labs/windmill/commit/96597d3d6b3d31298e5582a55e11e1d48edbf175)) +* improve cancel/back behavior on editors ([0565981](https://github.com/windmill-labs/windmill/commit/05659816e722effcba27e71f855e819c606f8756)) +* improve custom component rendering ([4ee4ff7](https://github.com/windmill-labs/windmill/commit/4ee4ff78d389d61c63952c84dee967113c783c45)) +* improve webhook settings cache invalidation ([0456272](https://github.com/windmill-labs/windmill/commit/0456272e3f36996c5f223fc332b150c7a64c2f05)) +* update bun t.1.43->1.2.3 ([4e477d1](https://github.com/windmill-labs/windmill/commit/4e477d1f589343980d7bd2953909ff6a6be30739)) +* update deno 2.1.2->2.2.1 ([b102ff4](https://github.com/windmill-labs/windmill/commit/b102ff4a4643e2f06d44d493f2f776b44ae721cc)) + ## [1.467.1](https://github.com/windmill-labs/windmill/compare/v1.467.0...v1.467.1) (2025-02-22) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index e801413197..b41f866244 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -607,7 +607,7 @@ dependencies = [ "portable-atomic", "rand 0.8.5", "regex", - "ring 0.17.10", + "ring 0.17.11", "rustls-native-certs 0.7.3", "rustls-pemfile 2.2.0", "rustls-webpki 0.102.8", @@ -636,7 +636,7 @@ dependencies = [ "bytes", "http 1.2.0", "rand 0.8.5", - "reqwest 0.12.9", + "reqwest 0.12.12", "serde", "serde-aux", "serde_json", @@ -772,9 +772,9 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "aws-config" -version = "1.5.16" +version = "1.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50236e4d60fe8458de90a71c0922c761e41755adf091b1b03de1cef537179915" +checksum = "490aa7465ee685b2ced076bb87ef654a47724a7844e2c7d3af4e749ce5b875dd" dependencies = [ "aws-credential-types", "aws-runtime", @@ -792,7 +792,7 @@ dependencies = [ "fastrand 2.3.0", "hex", "http 0.2.12", - "ring 0.17.10", + "ring 0.17.11", "time", "tokio", "tracing", @@ -861,9 +861,9 @@ dependencies = [ [[package]] name = "aws-sdk-sso" -version = "1.59.0" +version = "1.60.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00a35fc7e74f5be45839eb753568535c074a592185dd0a2d406685018d581c43" +checksum = "60186fab60b24376d3e33b9ff0a43485f99efd470e3b75a9160c849741d63d56" dependencies = [ "aws-credential-types", "aws-runtime", @@ -883,9 +883,9 @@ dependencies = [ [[package]] name = "aws-sdk-ssooidc" -version = "1.60.0" +version = "1.61.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8fa655b4f313124ce272cbc38c5fef13793c832279cec750103e5e6b71a54b8" +checksum = "7033130ce1ee13e6018905b7b976c915963755aef299c1521897679d6cd4f8ef" dependencies = [ "aws-credential-types", "aws-runtime", @@ -905,9 +905,9 @@ dependencies = [ [[package]] name = "aws-sdk-sts" -version = "1.60.0" +version = "1.61.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1cfe5e16b90421ea031f4c6348b534ef442e76f6bf4a1b2b592c12cc2c6af9" +checksum = "c5c1cac7677179d622b4448b0d31bcb359185295dc6fca891920cfb17e2b5156" dependencies = [ "aws-credential-types", "aws-runtime", @@ -1930,9 +1930,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.30" +version = "4.5.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92b7b18d71fad5313a1e320fa9897994228ce274b60faa4d694fe0ea89cd9e6d" +checksum = "027bb0d98429ae334a8698531da7077bdf906419543a35a55c2cb1b66437d767" dependencies = [ "clap_builder", "clap_derive", @@ -1940,9 +1940,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.30" +version = "4.5.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a35db2071778a7344791a4fb4f95308b5673d219dee3ae348b86642574ecc90c" +checksum = "5589e0cba072e0f3d23791efac0fd8627b49c829c196a492e88168e6a669d863" dependencies = [ "anstream", "anstyle", @@ -2061,16 +2061,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "console_error_panic_hook" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" -dependencies = [ - "cfg-if", - "wasm-bindgen", -] - [[package]] name = "const-oid" version = "0.9.6" @@ -2896,7 +2886,7 @@ dependencies = [ "itertools 0.12.1", "log", "paste", - "petgraph", + "petgraph 0.6.5", "regex", ] @@ -3234,7 +3224,7 @@ dependencies = [ "p384", "p521", "rand 0.8.5", - "ring 0.17.10", + "ring 0.17.11", "rsa", "sec1", "serde", @@ -3395,7 +3385,7 @@ dependencies = [ "percent-encoding", "phf", "pin-project", - "ring 0.17.10", + "ring 0.17.11", "scopeguard", "serde", "smallvec", @@ -3609,7 +3599,7 @@ dependencies = [ "pkcs8", "rand 0.8.5", "regex", - "ring 0.17.10", + "ring 0.17.11", "ripemd", "rsa", "rusqlite", @@ -4540,9 +4530,9 @@ dependencies = [ [[package]] name = "either" -version = "1.13.0" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "b7914353092ddf589ad78f25c5c1c21b7f80b0ff8621e7c814c3485b5306da9d" dependencies = [ "serde", ] @@ -4817,6 +4807,12 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" +[[package]] +name = "fixedbitset" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" + [[package]] name = "flatbuffers" version = "24.12.23" @@ -4829,9 +4825,9 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.35" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +checksum = "11faaf5a5236997af9848be0bef4db95824b1d534ebc64d0f0c6cf3e67bd38dc" dependencies = [ "crc32fast", "libz-sys", @@ -6034,9 +6030,9 @@ dependencies = [ [[package]] name = "hyper-timeout" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3203a961e5c83b6f5498933e78b6b263e208c197b63e9c6c53cc82ffd3f63793" +checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" dependencies = [ "hyper 1.6.0", "hyper-util", @@ -6795,9 +6791,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.169" +version = "0.2.170" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +checksum = "875b3680cb2f8f71bdcf9a30f38d48282f5d3c95cbf9b3fa57269bb5d5c06828" [[package]] name = "libffi" @@ -7266,6 +7262,16 @@ dependencies = [ "unicase", ] +[[package]] +name = "minicov" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f27fe9f1cc3c22e1687f9446c2083c4c5fc7f0bcf1c7a86bdbded14985895b4b" +dependencies = [ + "cc", + "walkdir", +] + [[package]] name = "minimal-lexical" version = "0.2.1" @@ -7826,7 +7832,7 @@ dependencies = [ "getrandom 0.2.15", "http 1.2.0", "rand 0.8.5", - "reqwest 0.12.9", + "reqwest 0.12.12", "serde", "serde_json", "serde_path_to_error", @@ -7872,8 +7878,8 @@ dependencies = [ "percent-encoding", "quick-xml 0.36.2", "rand 0.8.5", - "reqwest 0.12.9", - "ring 0.17.10", + "reqwest 0.12.12", + "ring 0.17.11", "serde", "serde_json", "snafu", @@ -7909,9 +7915,9 @@ checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" [[package]] name = "oneshot" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79d72a7c0f743d2ebb0a2ad1d219db75fdc799092ed3a884c9144c42a31225bd" +checksum = "b4ce411919553d3f9fa53a0880544cda985a112117a0444d5ff1e870a893d6ea" [[package]] name = "onig" @@ -8428,7 +8434,17 @@ version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ - "fixedbitset", + "fixedbitset 0.4.2", + "indexmap 2.7.1", +] + +[[package]] +name = "petgraph" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" +dependencies = [ + "fixedbitset 0.5.7", "indexmap 2.7.1", ] @@ -8608,9 +8624,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" +checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" [[package]] name = "postgres-native-tls" @@ -8935,7 +8951,7 @@ dependencies = [ "log", "multimap", "once_cell", - "petgraph", + "petgraph 0.7.1", "prettyplease 0.2.29", "prost", "prost-types", @@ -9084,7 +9100,7 @@ dependencies = [ "bytes", "getrandom 0.2.15", "rand 0.8.5", - "ring 0.17.10", + "ring 0.17.11", "rustc-hash 2.1.1", "rustls 0.23.23", "rustls-pki-types", @@ -9165,7 +9181,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" dependencies = [ "rand_chacha 0.9.0", - "rand_core 0.9.1", + "rand_core 0.9.2", "zerocopy 0.8.20", ] @@ -9196,7 +9212,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core 0.9.1", + "rand_core 0.9.2", ] [[package]] @@ -9219,9 +9235,9 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a88e0da7a2c97baa202165137c158d0a2e824ac465d13d81046727b34cb247d3" +checksum = "7a509b1a2ffbe92afab0e55c8fd99dea1c280e8171bd2d88682bb20bc41cbc2c" dependencies = [ "getrandom 0.3.1", "zerocopy 0.8.20", @@ -9518,9 +9534,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.9" +version = "0.12.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f" +checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" dependencies = [ "async-compression", "base64 0.22.1", @@ -9558,6 +9574,7 @@ dependencies = [ "tokio-native-tls", "tokio-rustls 0.26.1", "tokio-util", + "tower 0.5.2", "tower-service", "url", "wasm-bindgen", @@ -9611,9 +9628,9 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.10" +version = "0.17.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34b5020fcdea098ef7d95e9f89ec15952123a4a039badd09fabebe9e963e839" +checksum = "da5349ae27d3887ca812fb375b45a4fbb36d8d12d2df394968cd86e35683fe73" dependencies = [ "cc", "cfg-if", @@ -9847,7 +9864,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" dependencies = [ "log", - "ring 0.17.10", + "ring 0.17.11", "rustls-webpki 0.101.7", "sct", ] @@ -9860,7 +9877,7 @@ checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395" dependencies = [ "log", "once_cell", - "ring 0.17.10", + "ring 0.17.11", "rustls-pki-types", "rustls-webpki 0.102.8", "subtle", @@ -9949,7 +9966,7 @@ version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "ring 0.17.10", + "ring 0.17.11", "untrusted 0.9.0", ] @@ -9959,7 +9976,7 @@ version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ - "ring 0.17.10", + "ring 0.17.11", "rustls-pki-types", "untrusted 0.9.0", ] @@ -10197,7 +10214,7 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "ring 0.17.10", + "ring 0.17.11", "untrusted 0.9.0", ] @@ -11922,9 +11939,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tar" -version = "0.4.43" +version = "0.4.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c65998313f8e17d0d553d28f91a0df93e4dbbbf770279c7bc21ca0f09ea1a1f6" +checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a" dependencies = [ "filetime", "libc", @@ -12429,7 +12446,7 @@ dependencies = [ "http 1.2.0", "httparse", "rand 0.8.5", - "ring 0.17.10", + "ring 0.17.11", "rustls-native-certs 0.8.1", "rustls-pki-types", "tokio", @@ -12701,7 +12718,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba3beec919fbdf99d719de8eda6adae3281f8a5b71ae40431f44dc7423053d34" dependencies = [ "loki-api", - "reqwest 0.12.9", + "reqwest 0.12.12", "serde", "serde_json", "snap", @@ -13366,12 +13383,13 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.42" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] @@ -13410,13 +13428,12 @@ dependencies = [ [[package]] name = "wasm-bindgen-test" -version = "0.3.42" +version = "0.3.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9bf62a58e0780af3e852044583deee40983e5886da43a271dd772379987667b" +checksum = "66c8d5e33ca3b6d9fa3b4676d774c5778031d27a578c2b007f905acf816152c3" dependencies = [ - "console_error_panic_hook", "js-sys", - "scoped-tls", + "minicov", "wasm-bindgen", "wasm-bindgen-futures", "wasm-bindgen-test-macro", @@ -13424,9 +13441,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-test-macro" -version = "0.3.42" +version = "0.3.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7f89739351a2e03cb94beb799d47fb2cac01759b40ec441f7de39b00cbf7ef0" +checksum = "17d5042cc5fa009658f9a7333ef24291b1291a25b6382dd68862a7f3b969f69b" dependencies = [ "proc-macro2", "quote", @@ -13435,9 +13452,9 @@ dependencies = [ [[package]] name = "wasm-streams" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e072d4e72f700fb3443d8fe94a39315df013eef1104903cdb0a2abd322bbecd" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" dependencies = [ "futures-util", "js-sys", @@ -13674,7 +13691,7 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windmill" -version = "1.467.1" +version = "1.468.0" dependencies = [ "anyhow", "axum", @@ -13692,7 +13709,7 @@ dependencies = [ "prometheus", "quote", "rand 0.9.0", - "reqwest 0.12.9", + "reqwest 0.12.12", "serde", "serde_json", "sha2 0.10.8", @@ -13717,7 +13734,7 @@ dependencies = [ [[package]] name = "windmill-api" -version = "1.467.1" +version = "1.468.0" dependencies = [ "anyhow", "argon2", @@ -13770,7 +13787,7 @@ dependencies = [ "rand 0.9.0", "rdkafka", "regex", - "reqwest 0.12.9", + "reqwest 0.12.12", "rsa", "rust-embed", "rust_decimal", @@ -13813,7 +13830,7 @@ dependencies = [ [[package]] name = "windmill-api-client" -version = "1.467.1" +version = "1.468.0" dependencies = [ "base64 0.22.1", "chrono", @@ -13831,7 +13848,7 @@ dependencies = [ [[package]] name = "windmill-audit" -version = "1.467.1" +version = "1.468.0" dependencies = [ "chrono", "serde", @@ -13844,7 +13861,7 @@ dependencies = [ [[package]] name = "windmill-autoscaling" -version = "1.467.1" +version = "1.468.0" dependencies = [ "anyhow", "serde", @@ -13858,7 +13875,7 @@ dependencies = [ [[package]] name = "windmill-common" -version = "1.467.1" +version = "1.468.0" dependencies = [ "anyhow", "async-stream", @@ -13895,7 +13912,7 @@ dependencies = [ "quick_cache", "rand 0.9.0", "regex", - "reqwest 0.12.9", + "reqwest 0.12.12", "semver 1.0.25", "serde", "serde_json", @@ -13917,7 +13934,7 @@ dependencies = [ [[package]] name = "windmill-git-sync" -version = "1.467.1" +version = "1.468.0" dependencies = [ "regex", "serde", @@ -13931,7 +13948,7 @@ dependencies = [ [[package]] name = "windmill-indexer" -version = "1.467.1" +version = "1.468.0" dependencies = [ "anyhow", "bytes", @@ -13954,7 +13971,7 @@ dependencies = [ [[package]] name = "windmill-macros" -version = "1.467.1" +version = "1.468.0" dependencies = [ "itertools 0.14.0", "lazy_static", @@ -13966,7 +13983,7 @@ dependencies = [ [[package]] name = "windmill-parser" -version = "1.467.1" +version = "1.468.0" dependencies = [ "convert_case 0.6.0", "serde", @@ -13975,7 +13992,7 @@ dependencies = [ [[package]] name = "windmill-parser-bash" -version = "1.467.1" +version = "1.468.0" dependencies = [ "anyhow", "lazy_static", @@ -13987,7 +14004,7 @@ dependencies = [ [[package]] name = "windmill-parser-csharp" -version = "1.467.1" +version = "1.468.0" dependencies = [ "anyhow", "serde_json", @@ -13999,7 +14016,7 @@ dependencies = [ [[package]] name = "windmill-parser-go" -version = "1.467.1" +version = "1.468.0" dependencies = [ "anyhow", "gosyn", @@ -14011,7 +14028,7 @@ dependencies = [ [[package]] name = "windmill-parser-graphql" -version = "1.467.1" +version = "1.468.0" dependencies = [ "anyhow", "lazy_static", @@ -14023,7 +14040,7 @@ dependencies = [ [[package]] name = "windmill-parser-php" -version = "1.467.1" +version = "1.468.0" dependencies = [ "anyhow", "itertools 0.14.0", @@ -14034,7 +14051,7 @@ dependencies = [ [[package]] name = "windmill-parser-py" -version = "1.467.1" +version = "1.468.0" dependencies = [ "anyhow", "itertools 0.14.0", @@ -14045,7 +14062,7 @@ dependencies = [ [[package]] name = "windmill-parser-py-imports" -version = "1.467.1" +version = "1.468.0" dependencies = [ "anyhow", "async-recursion", @@ -14065,7 +14082,7 @@ dependencies = [ [[package]] name = "windmill-parser-rust" -version = "1.467.1" +version = "1.468.0" dependencies = [ "anyhow", "convert_case 0.6.0", @@ -14082,7 +14099,7 @@ dependencies = [ [[package]] name = "windmill-parser-sql" -version = "1.467.1" +version = "1.468.0" dependencies = [ "anyhow", "lazy_static", @@ -14094,7 +14111,7 @@ dependencies = [ [[package]] name = "windmill-parser-ts" -version = "1.467.1" +version = "1.468.0" dependencies = [ "anyhow", "lazy_static", @@ -14112,7 +14129,7 @@ dependencies = [ [[package]] name = "windmill-parser-wasm" -version = "1.467.1" +version = "1.468.0" dependencies = [ "anyhow", "getrandom 0.2.15", @@ -14134,7 +14151,7 @@ dependencies = [ [[package]] name = "windmill-parser-yaml" -version = "1.467.1" +version = "1.468.0" dependencies = [ "anyhow", "serde_json", @@ -14144,7 +14161,7 @@ dependencies = [ [[package]] name = "windmill-queue" -version = "1.467.1" +version = "1.468.0" dependencies = [ "anyhow", "async-recursion", @@ -14161,7 +14178,7 @@ dependencies = [ "lazy_static", "prometheus", "regex", - "reqwest 0.12.9", + "reqwest 0.12.12", "serde", "serde_json", "serde_urlencoded", @@ -14177,7 +14194,7 @@ dependencies = [ [[package]] name = "windmill-sql-datatype-parser-wasm" -version = "1.467.1" +version = "1.468.0" dependencies = [ "wasm-bindgen", "wasm-bindgen-test", @@ -14187,7 +14204,7 @@ dependencies = [ [[package]] name = "windmill-worker" -version = "1.467.1" +version = "1.468.0" dependencies = [ "anyhow", "async-recursion", @@ -14235,7 +14252,7 @@ dependencies = [ "prometheus", "rand 0.9.0", "regex", - "reqwest 0.12.9", + "reqwest 0.12.12", "rust_decimal", "serde", "serde_json", diff --git a/backend/Cargo.toml b/backend/Cargo.toml index f50794b56b..357972e39a 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "windmill" -version = "1.467.1" +version = "1.468.0" authors.workspace = true edition.workspace = true @@ -30,7 +30,7 @@ members = [ ] [workspace.package] -version = "1.467.1" +version = "1.468.0" authors = ["Ruben Fiszel "] edition = "2021" diff --git a/backend/windmill-api/openapi.yaml b/backend/windmill-api/openapi.yaml index 64dce589b7..5aaec60cde 100644 --- a/backend/windmill-api/openapi.yaml +++ b/backend/windmill-api/openapi.yaml @@ -1,7 +1,7 @@ openapi: "3.0.3" info: - version: 1.467.1 + version: 1.468.0 title: Windmill API contact: diff --git a/benchmarks/lib.ts b/benchmarks/lib.ts index 789aff41cc..219ef97603 100644 --- a/benchmarks/lib.ts +++ b/benchmarks/lib.ts @@ -2,7 +2,7 @@ import { sleep } from "https://deno.land/x/sleep@v1.2.1/mod.ts"; import * as windmill from "https://deno.land/x/windmill@v1.174.0/mod.ts"; import * as api from "https://deno.land/x/windmill@v1.174.0/windmill-api/index.ts"; -export const VERSION = "v1.467.1"; +export const VERSION = "v1.468.0"; export async function login(email: string, password: string): Promise { return await windmill.UserService.login({ diff --git a/cli/main.ts b/cli/main.ts index 168c37be9d..78fa4b5ab1 100644 --- a/cli/main.ts +++ b/cli/main.ts @@ -62,7 +62,7 @@ export { // } // }); -export const VERSION = "1.467.1"; +export const VERSION = "1.468.0"; const command = new Command() .name("wmill") diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 4639ea6e55..35bcec1bc9 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,12 +1,12 @@ { "name": "windmill-components", - "version": "1.467.1", + "version": "1.468.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "windmill-components", - "version": "1.467.1", + "version": "1.468.0", "license": "AGPL-3.0", "dependencies": { "@anthropic-ai/sdk": "^0.32.1", diff --git a/frontend/package.json b/frontend/package.json index 2373de8154..cd2d5ecff2 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "windmill-components", - "version": "1.467.1", + "version": "1.468.0", "scripts": { "dev": "vite dev", "build": "vite build", diff --git a/lsp/Pipfile b/lsp/Pipfile index 67d3805411..6f43c8310a 100644 --- a/lsp/Pipfile +++ b/lsp/Pipfile @@ -4,8 +4,8 @@ verify_ssl = true name = "pypi" [packages] -wmill = ">=1.467.1" -wmill_pg = ">=1.467.1" +wmill = ">=1.468.0" +wmill_pg = ">=1.468.0" sendgrid = "*" mysql-connector-python = "*" pymongo = "*" diff --git a/openflow.openapi.yaml b/openflow.openapi.yaml index dfd08313fd..08852a23d7 100644 --- a/openflow.openapi.yaml +++ b/openflow.openapi.yaml @@ -1,7 +1,7 @@ openapi: "3.0.3" info: - version: 1.467.1 + version: 1.468.0 title: OpenFlow Spec contact: name: Ruben Fiszel diff --git a/powershell-client/WindmillClient/WindmillClient.psd1 b/powershell-client/WindmillClient/WindmillClient.psd1 index d5ed5a69bf..5531a6cd99 100644 --- a/powershell-client/WindmillClient/WindmillClient.psd1 +++ b/powershell-client/WindmillClient/WindmillClient.psd1 @@ -12,7 +12,7 @@ RootModule = 'WindmillClient.psm1' # Version number of this module. - ModuleVersion = '1.467.1' + ModuleVersion = '1.468.0' # Supported PSEditions # CompatiblePSEditions = @() diff --git a/python-client/wmill/pyproject.toml b/python-client/wmill/pyproject.toml index 5b92348e08..445a109829 100644 --- a/python-client/wmill/pyproject.toml +++ b/python-client/wmill/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "wmill" -version = "1.467.1" +version = "1.468.0" description = "A client library for accessing Windmill server wrapping the Windmill client API" license = "Apache-2.0" homepage = "https://windmill.dev" diff --git a/python-client/wmill_pg/pyproject.toml b/python-client/wmill_pg/pyproject.toml index 707b0a8557..a06c5e80e1 100644 --- a/python-client/wmill_pg/pyproject.toml +++ b/python-client/wmill_pg/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "wmill-pg" -version = "1.467.1" +version = "1.468.0" description = "An extension client for the wmill client library focused on pg" license = "Apache-2.0" homepage = "https://windmill.dev" diff --git a/typescript-client/jsr.json b/typescript-client/jsr.json index 2c39671fde..221df0115f 100644 --- a/typescript-client/jsr.json +++ b/typescript-client/jsr.json @@ -1,6 +1,6 @@ { "name": "@windmill/windmill", - "version": "1.467.1", + "version": "1.468.0", "exports": "./src/index.ts", "publish": { "exclude": ["!src", "./s3Types.ts", "./client.ts"] diff --git a/typescript-client/package.json b/typescript-client/package.json index c3c065dd07..3eecaaf7be 100644 --- a/typescript-client/package.json +++ b/typescript-client/package.json @@ -1,7 +1,7 @@ { "name": "windmill-client", "description": "Windmill SDK client for browsers and Node.js", - "version": "1.467.1", + "version": "1.468.0", "author": "Ruben Fiszel", "license": "Apache 2.0", "devDependencies": { diff --git a/version.txt b/version.txt index cf76d32f68..d4d1d2ce7f 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.467.1 +1.468.0 From d48b2dd8868bfb2b413e62ecc5175bf6f3c57278 Mon Sep 17 00:00:00 2001 From: Guilhem Date: Tue, 25 Feb 2025 08:53:43 +0000 Subject: [PATCH 026/132] migrate popup to melt popover (3/4) (#5328) * use melt menu in sidebar * stop keyboard navigation for disabled items * use melt menu for FavoriteMenu and WorkspaceMenu * fix popover placement for menuButton * use melt menu for operator menu * fix notification * fix operator menu * Use melt menu in FlowJobsMenu * use melt menu for AppMenu * clean code * clean code * add use clickOutside option to Menu * use pointerdown_outside * use pointerdown_outside # Conflicts: # frontend/src/lib/components/meltComponents/Menu.svelte * use pointerdown in menus * add max-h to app dropdown menu * keep more open in operator menu * add a MenuItem component * clean * nit * nit * clean code * put conditionalMelt as utility function * remove unused Portal * Add debounce effect in operator menu * fix component jumping due to z-index * format pages * migrate dropdown to melt * migrate popup to melt popover * feat: remove `pip` fallback option for python and ansible (#5186) * refactor!: Remove `pip` fallback option for python and ansible BREAKING CHANGE: pip was deprecated since 1.425.0 (2024-11-15) * fix errors in main.rs * fix tests * remove nsjail for pip * fix imports * fix compilation error * reinforce melt types * fix racing condition issue in closing operator menu * nit * fix id conflix with melt element * nit * clean code * use melt dropdown instead of menubar * prevent modal from closing on click outside button in menu * fix nit * nit * close dropdown when opening a new one * replace MenuV2 with melt Menu (1/4) (#5214) * use melt menu in sidebar * stop keyboard navigation for disabled items * use melt menu for FavoriteMenu and WorkspaceMenu * fix popover placement for menuButton * use melt menu for operator menu * fix notification * fix operator menu * Use melt menu in FlowJobsMenu * use melt menu for AppMenu * clean code * clean code * add use clickOutside option to Menu * use pointerdown_outside * use pointerdown_outside # Conflicts: # frontend/src/lib/components/meltComponents/Menu.svelte * use pointerdown in menus * add max-h to app dropdown menu * keep more open in operator menu * add a MenuItem component * clean * nit * nit * clean code * put conditionalMelt as utility function * remove unused Portal * Add debounce effect in operator menu * fix component jumping due to z-index * feat: remove `pip` fallback option for python and ansible (#5186) * refactor!: Remove `pip` fallback option for python and ansible BREAKING CHANGE: pip was deprecated since 1.425.0 (2024-11-15) * fix errors in main.rs * fix tests * remove nsjail for pip * fix imports * fix compilation error * reinforce melt types * fix racing condition issue in closing operator menu * nit * fix id conflix with melt element * nit * prevent modal from closing on click outside button in menu --------- Co-authored-by: pyranota <92104930+pyranota@users.noreply.github.com> Co-authored-by: Ruben Fiszel # Conflicts: # frontend/src/lib/components/meltComponents/MenuItem.svelte # frontend/src/lib/utils.ts * clean * fix z index and render * fix initialize of dropdownmenu after melt migration * feat: add support for | None and Optional in python (#5361) * feat: add support for | None and Optional in python * update python parser package * add local rooting for MenuItem * fix z index * clean * nit * nit * clean code * nit --------- Co-authored-by: pyranota <92104930+pyranota@users.noreply.github.com> Co-authored-by: Ruben Fiszel Co-authored-by: HugoCasa --- frontend/src/lib/components/AddUser.svelte | 108 +-- .../src/lib/components/ApiConnectForm.svelte | 57 +- .../src/lib/components/AssignableTags.svelte | 16 +- .../lib/components/AssignableTagsInner.svelte | 2 +- .../components/ChangeInstanceUsername.svelte | 28 +- .../ChangeInstanceUsernameInner.svelte | 9 +- .../src/lib/components/CronBuilder.svelte | 25 +- frontend/src/lib/components/CronInput.svelte | 2 +- .../src/lib/components/DefaultTags.svelte | 16 +- .../lib/components/EditableSchemaForm.svelte | 66 +- .../src/lib/components/EditorSettings.svelte | 16 +- .../lib/components/FlowPreviewContent.svelte | 94 +-- .../lib/components/InstanceNameEditor.svelte | 207 +++-- frontend/src/lib/components/InviteUser.svelte | 88 ++- .../lib/components/ResourceTypePicker.svelte | 21 +- frontend/src/lib/components/RunForm.svelte | 28 +- .../components/RunFormAdvancedPopup.svelte | 9 +- .../table/AppAggridTableActions.svelte | 38 +- .../components/display/table/AppTable.svelte | 34 +- .../apps/editor/ComponentHeader.svelte | 41 +- .../CustomComponentsList.svelte | 2 - .../editor/componentsPanel/NameEditor.svelte | 42 +- .../componentsPanel/ThemeNameEditor.svelte | 19 +- .../contextPanel/components/IdEditor.svelte | 32 +- .../inlineScriptsPanel/CacheTtlPopup.svelte | 17 +- .../InlineScriptRunnableByPath.svelte | 18 +- .../settingsPanel/InputsSpecEditor.svelte | 6 +- .../inputEditor/IconSelectInput.svelte | 104 +-- .../auditLogs/AuditLogMobileFilters.svelte | 13 +- .../calendarPicker/CalendarPicker.svelte | 55 +- frontend/src/lib/components/common/index.ts | 1 - .../lib/components/common/menu/MenuV2.svelte | 54 -- .../lib/components/common/popup/Popup.svelte | 70 -- .../src/lib/components/copilot/CronGen.svelte | 100 +-- .../copilot/FlowCopilotStatus.svelte | 35 +- .../components/copilot/PredicateGen.svelte | 19 +- .../lib/components/copilot/RegexGen.svelte | 133 ++-- .../lib/components/copilot/ScriptFix.svelte | 228 +++--- .../lib/components/copilot/ScriptGen.svelte | 292 +++---- .../components/copilot/StepInputsGen.svelte | 59 +- .../flows/map/FlowCopilotButton.svelte | 59 -- .../flows/propPicker/FlowPropPicker.svelte | 54 +- .../src/lib/components/home/ItemsList.svelte | 45 +- .../components/meltComponents/MenuItem.svelte | 13 +- .../components/meltComponents/Popover.svelte | 101 ++- .../components/meltComponents/Tooltip.svelte | 75 ++ .../lib/components/runs/MobileFilters.svelte | 22 +- .../src/lib/components/runs/RunsFilter.svelte | 605 +++++++------- .../schema/AddPropertyFormV2.svelte | 10 +- .../schema/FlowPropertyEditor.svelte | 52 +- .../settings/WorkspaceUserSettings.svelte | 187 ++--- .../sidebar/CriticalAlertModal.svelte | 126 +-- .../components/triggers/CaptureButton.svelte | 2 +- .../FlowBuilderTutorialErrorHandler.svelte | 2 +- .../components/wizards/AgChartWizard.svelte | 50 +- .../components/wizards/AgGridWizard.svelte | 329 ++++---- .../components/wizards/ChartJSWizard.svelte | 63 +- .../wizards/DBExplorerWizard.svelte | 21 +- .../components/wizards/NavbarWizard.svelte | 221 +++--- .../components/wizards/PlotlyWizard.svelte | 160 ++-- .../wizards/TableActionsWizard.svelte | 135 ++-- .../wizards/TableColumnWizard.svelte | 99 +-- frontend/src/lib/utils.ts | 2 +- frontend/src/lib/zIndexes.ts | 4 +- .../(root)/(logged)/folders/+page.svelte | 20 +- .../(root)/(logged)/groups/+page.svelte | 56 +- .../(logged)/instance_groups/+page.svelte | 40 +- .../(root)/(logged)/run/[...run]/+page.svelte | 123 +-- .../(root)/(logged)/workers/+page.svelte | 746 +++++++++--------- 69 files changed, 2861 insertions(+), 2765 deletions(-) delete mode 100644 frontend/src/lib/components/common/menu/MenuV2.svelte delete mode 100644 frontend/src/lib/components/common/popup/Popup.svelte delete mode 100644 frontend/src/lib/components/flows/map/FlowCopilotButton.svelte create mode 100644 frontend/src/lib/components/meltComponents/Tooltip.svelte diff --git a/frontend/src/lib/components/AddUser.svelte b/frontend/src/lib/components/AddUser.svelte index 90ce1e8d31..54acc1157a 100644 --- a/frontend/src/lib/components/AddUser.svelte +++ b/frontend/src/lib/components/AddUser.svelte @@ -2,7 +2,8 @@ import { createEventDispatcher } from 'svelte' import { globalEmailInvite, superadmin, workspaceStore } from '$lib/stores' import { SettingService, UserService, WorkspaceService } from '$lib/gen' - import { Button, Popup } from './common' + import { Button } from './common' + import Popover from './meltComponents/Popover.svelte' import { sendUserToast } from '$lib/toast' import { isCloudHosted } from '$lib/cloud' import { goto } from '$lib/navigation' @@ -72,64 +73,63 @@ let selected: 'operator' | 'developer' | 'admin' = 'developer' - - + + -
- Add a new user + +
+ Add a new user - Email - + Email + - {#if !automateUsernameCreation} - Username - - {/if} + {#if !automateUsernameCreation} + Username + + {/if} - Role - - Role + + + + + + -
- + on:click={() => { + addUser().then(() => { + // @ts-ignore + email = undefined + // @ts-ignore + username = undefined + }) + }} + disabled={email === undefined || (!automateUsernameCreation && username === undefined)} + > + Add + +
+
+ diff --git a/frontend/src/lib/components/ApiConnectForm.svelte b/frontend/src/lib/components/ApiConnectForm.svelte index 0e90ec56c7..b2fc7410e1 100644 --- a/frontend/src/lib/components/ApiConnectForm.svelte +++ b/frontend/src/lib/components/ApiConnectForm.svelte @@ -8,7 +8,7 @@ import Toggle from './Toggle.svelte' import TestConnection from './TestConnection.svelte' import SupabaseIcon from './icons/SupabaseIcon.svelte' - import Popup from './common/popup/Popup.svelte' + import Popover from './meltComponents/Popover.svelte' import Button from './common/button/Button.svelte' import { Loader2 } from 'lucide-svelte' @@ -129,13 +129,12 @@ /> {#if resourceType == 'postgresql'} - - + + +
+
+
+ + +
+ {#if !validConnectionString} +

Could not parse connection string

+ {/if}
- {#if !validConnectionString} -

Could not parse connection string

- {/if}
-
- + + {/if} {#if resourceType == 'postgresql' && supabaseWizard} - import { Button, Popup } from './common' + import { Button } from './common' import { Pen } from 'lucide-svelte' + import Popover from './meltComponents/Popover.svelte' import Tooltip from './Tooltip.svelte' import AssignableTagsInner from './AssignableTagsInner.svelte' @@ -11,12 +12,13 @@ export let showWorkspaceRestriction = false - - + - - + + + + diff --git a/frontend/src/lib/components/AssignableTagsInner.svelte b/frontend/src/lib/components/AssignableTagsInner.svelte index 03f0254983..1f374fc343 100644 --- a/frontend/src/lib/components/AssignableTagsInner.svelte +++ b/frontend/src/lib/components/AssignableTagsInner.svelte @@ -29,7 +29,7 @@ loadCustomTags() -
+
{#if customTags == undefined} {:else} diff --git a/frontend/src/lib/components/ChangeInstanceUsername.svelte b/frontend/src/lib/components/ChangeInstanceUsername.svelte index e4f696bfd0..38ae001816 100644 --- a/frontend/src/lib/components/ChangeInstanceUsername.svelte +++ b/frontend/src/lib/components/ChangeInstanceUsername.svelte @@ -1,5 +1,6 @@ - - + - close(null)} - on:renamed - /> - + + close()} + on:renamed + /> + + diff --git a/frontend/src/lib/components/ChangeInstanceUsernameInner.svelte b/frontend/src/lib/components/ChangeInstanceUsernameInner.svelte index 1690dcd4f3..3eb38a487a 100644 --- a/frontend/src/lib/components/ChangeInstanceUsernameInner.svelte +++ b/frontend/src/lib/components/ChangeInstanceUsernameInner.svelte @@ -8,6 +8,7 @@ export let email: string export let username: string export let isConflict = false + export let noPadding = false let loading = false @@ -71,11 +72,9 @@ } -
- {#if isConflict} - Fix username conflict +
+ {#if isConflict} + Fix username conflict {/if} import Section from './Section.svelte' - import { Button, Popup } from './common' + import { Button } from './common' import { Clock } from 'lucide-svelte' + import Popover from './meltComponents/Popover.svelte' - - + + -
-
- -
-
-
+ +
+
+ +
+
+
+ diff --git a/frontend/src/lib/components/CronInput.svelte b/frontend/src/lib/components/CronInput.svelte index 94b2219331..986a26de2e 100644 --- a/frontend/src/lib/components/CronInput.svelte +++ b/frontend/src/lib/components/CronInput.svelte @@ -385,7 +385,7 @@ size="xs" on:click={() => { schedule = nschedule - close(null) + close() }} > Set cron schedule diff --git a/frontend/src/lib/components/DefaultTags.svelte b/frontend/src/lib/components/DefaultTags.svelte index df9272cbf5..718cb1dd29 100644 --- a/frontend/src/lib/components/DefaultTags.svelte +++ b/frontend/src/lib/components/DefaultTags.svelte @@ -1,7 +1,8 @@ - - + + - - + + + + diff --git a/frontend/src/lib/components/EditableSchemaForm.svelte b/frontend/src/lib/components/EditableSchemaForm.svelte index a5e991393a..a19135709a 100644 --- a/frontend/src/lib/components/EditableSchemaForm.svelte +++ b/frontend/src/lib/components/EditableSchemaForm.svelte @@ -18,7 +18,7 @@ import { sendUserToast } from '$lib/toast' import Toggle from './Toggle.svelte' import { emptyString } from '$lib/utils' - import Popup from './common/popup/Popup.svelte' + import Popover from './meltComponents/Popover.svelte' import SchemaFormDnd from './schema/SchemaFormDND.svelte' import { deepEqual } from 'fast-equals' import { tweened } from 'svelte/motion' @@ -371,12 +371,8 @@ {argName} {#if !uiOnly}
- - + + -
- - + close() + }} + > + Rename + +
+ + +
{/if}
diff --git a/frontend/src/lib/components/EditorSettings.svelte b/frontend/src/lib/components/EditorSettings.svelte index 7a5bf50398..fe1bd4bdf9 100644 --- a/frontend/src/lib/components/EditorSettings.svelte +++ b/frontend/src/lib/components/EditorSettings.svelte @@ -2,19 +2,21 @@ import { Settings } from 'lucide-svelte' import FormatOnSave from './FormatOnSave.svelte' import VimMode from './VimMode.svelte' - import { Button, Popup } from './common' + import { Button } from './common' import CodeCompletionStatus from './copilot/CodeCompletionStatus.svelte' import type { EditorBarUi } from './custom_ui' + import Popover from './meltComponents/Popover.svelte' export let customUi: EditorBarUi = {} {#if customUi?.autoformatting != false || customUi?.vimMode != false || customUi?.aiCompletion != false} - - + -
- {#if automateUsernameCreation && username} - - {/if} - +
+
+ diff --git a/frontend/src/lib/components/InviteUser.svelte b/frontend/src/lib/components/InviteUser.svelte index 0455702854..ae5a824190 100644 --- a/frontend/src/lib/components/InviteUser.svelte +++ b/frontend/src/lib/components/InviteUser.svelte @@ -3,7 +3,8 @@ import { createEventDispatcher } from 'svelte' import { globalEmailInvite, superadmin, workspaceStore } from '$lib/stores' import { UserService, WorkspaceService } from '$lib/gen' - import { Button, Popup } from './common' + import { Button } from './common' + import Popover from './meltComponents/Popover.svelte' import { isCloudHosted } from '$lib/cloud' import { goto } from '$lib/navigation' import ToggleButtonGroup from './common/toggleButton-v2/ToggleButtonGroup.svelte' @@ -64,53 +65,54 @@ let selected: 'operator' | 'developer' | 'admin' = 'developer' - - + + - -
- - - +
+ + + - + - + + -
- + on:click={inviteUser} + disabled={email === undefined} + > + Invite + +
+
+ diff --git a/frontend/src/lib/components/ResourceTypePicker.svelte b/frontend/src/lib/components/ResourceTypePicker.svelte index 56d8b97d0a..2348ad66db 100644 --- a/frontend/src/lib/components/ResourceTypePicker.svelte +++ b/frontend/src/lib/components/ResourceTypePicker.svelte @@ -4,7 +4,8 @@ import { ResourceService } from '$lib/gen' import { workspaceStore } from '$lib/stores' import IconedResourceType from './IconedResourceType.svelte' - import { Button, ClearableInput, Popup } from './common' + import { Button, ClearableInput } from './common' + import Popover from './meltComponents/Popover.svelte' import { offset, flip, shift } from 'svelte-floating-ui/dom' import Label from './Label.svelte' import Tooltip from './Tooltip.svelte' @@ -50,20 +51,18 @@ > Clear - - + - -
+
@@ -80,7 +79,7 @@ disabled={notPickable} on:click={() => { onClick(undefined) - close(null) + close() }} > None @@ -96,7 +95,7 @@ disabled={notPickable} on:click={() => { onClick(r) - close(null) + close() }} > @@ -108,8 +107,8 @@ {/if}
-
- + +
diff --git a/frontend/src/lib/components/RunForm.svelte b/frontend/src/lib/components/RunForm.svelte index 22a31ff530..9be671846d 100644 --- a/frontend/src/lib/components/RunForm.svelte +++ b/frontend/src/lib/components/RunForm.svelte @@ -12,7 +12,7 @@ import SharedBadge from './SharedBadge.svelte' import TimeAgo from './TimeAgo.svelte' - import Popup from './common/popup/Popup.svelte' + import Popover from './meltComponents/Popover.svelte' import { autoPlacement } from '@floating-ui/core' import { Calendar, CornerDownLeft } from 'lucide-svelte' import RunFormAdvancedPopup from './RunFormAdvancedPopup.svelte' @@ -58,7 +58,6 @@ export let jsonView = false let reloadArgs = 0 - let blockPopupOpen = false let jsonEditor: JsonInputs | undefined = undefined let schemaHeight = 0 @@ -206,7 +205,7 @@ {scheduledForStr ? 'Schedule to run later' : buttonText}
- - + - close(null)} - /> - + + + +
{#if overrideTag} diff --git a/frontend/src/lib/components/RunFormAdvancedPopup.svelte b/frontend/src/lib/components/RunFormAdvancedPopup.svelte index da7508a114..f0ba3d1eb9 100644 --- a/frontend/src/lib/components/RunFormAdvancedPopup.svelte +++ b/frontend/src/lib/components/RunFormAdvancedPopup.svelte @@ -1,7 +1,6 @@ -
+
{#if SCRIPT_VIEW_SHOW_SCHEDULE_RUN_LATER}
- +
diff --git a/frontend/src/lib/components/apps/components/display/table/AppAggridTableActions.svelte b/frontend/src/lib/components/apps/components/display/table/AppAggridTableActions.svelte index da3521a8d2..a5034aa1d4 100644 --- a/frontend/src/lib/components/apps/components/display/table/AppAggridTableActions.svelte +++ b/frontend/src/lib/components/apps/components/display/table/AppAggridTableActions.svelte @@ -11,12 +11,12 @@ import AppSelect from '../../inputs/AppSelect.svelte' import { twMerge } from 'tailwind-merge' - import { Popup } from '$lib/components/common' import { Plug2 } from 'lucide-svelte' import ComponentOutputViewer from '$lib/components/apps/editor/contextPanel/ComponentOutputViewer.svelte' import { connectOutput } from '$lib/components/apps/editor/appUtils' import RowWrapper from '../../layout/RowWrapper.svelte' import type { ICellRendererParams } from 'ag-grid-community' + import Popover from '$lib/components/meltComponents/Popover.svelte' export let p: ICellRendererParams export let id: string @@ -124,34 +124,38 @@ {#if $connectingInput.opened}
- - + - { - const tableId = action.id.split('_')[0] + + { + const tableId = action.id.split('_')[0] - connectOutput( - connectingInput, - action.type, - tableId, - `inputs.${action.id}[${rowIndex}].${detail}` - ) - }} - componentId={action.id} - /> - + connectOutput( + connectingInput, + action.type, + tableId, + `inputs.${action.id}[${rowIndex}].${detail}` + ) + }} + componentId={action.id} + /> + +
{/if} {/if} diff --git a/frontend/src/lib/components/apps/components/display/table/AppTable.svelte b/frontend/src/lib/components/apps/components/display/table/AppTable.svelte index 1c13d1c575..9abf102c7e 100644 --- a/frontend/src/lib/components/apps/components/display/table/AppTable.svelte +++ b/frontend/src/lib/components/apps/components/display/table/AppTable.svelte @@ -39,12 +39,12 @@ import AppSelect from '../../inputs/AppSelect.svelte' import RowWrapper from '../../layout/RowWrapper.svelte' import ResolveStyle from '../../helpers/ResolveStyle.svelte' - import { Popup } from '$lib/components/common' import ComponentOutputViewer from '$lib/components/apps/editor/contextPanel/ComponentOutputViewer.svelte' import { EyeIcon, Plug2 } from 'lucide-svelte' import AppCell from './AppCell.svelte' import sum from 'hash-sum' import RefreshButton from '$lib/components/apps/components/helpers/RefreshButton.svelte' + import Popover from '$lib/components/meltComponents/Popover.svelte' export let id: string export let componentInput: AppInput | undefined @@ -553,31 +553,35 @@ {#if $connectingInput.opened}
- - + - - connectOutput( - connectingInput, - 'buttoncomponent', - actionButton.id, - detail - )} - componentId={actionButton.id} - /> - + + + connectOutput( + connectingInput, + 'buttoncomponent', + actionButton.id, + detail + )} + componentId={actionButton.id} + /> + +
{/if} {/if} diff --git a/frontend/src/lib/components/apps/editor/ComponentHeader.svelte b/frontend/src/lib/components/apps/editor/ComponentHeader.svelte index 7386417435..a4a516b06f 100644 --- a/frontend/src/lib/components/apps/editor/ComponentHeader.svelte +++ b/frontend/src/lib/components/apps/editor/ComponentHeader.svelte @@ -3,8 +3,8 @@ import type { AppViewerContext } from '../types' import { Anchor, ArrowDownFromLine, Bug, Expand, Network, Pen, Plug } from 'lucide-svelte' import { createEventDispatcher, getContext } from 'svelte' - import Popover from '$lib/components/Popover.svelte' - import { Button, Popup } from '$lib/components/common' + import Popover from '$lib/components/meltComponents/Popover.svelte' + import { Button } from '$lib/components/common' import type { AppComponent } from './component' import { twMerge } from 'tailwind-merge' import { connectOutput } from './appUtils' @@ -73,11 +73,12 @@ style="left: {id_width}px;" data-connection-button > - - + - - connectOutput(connectingInput, component.type, component.id, detail)} - componentId={component.id} - /> - + + + connectOutput(connectingInput, component.type, component.id, detail)} + componentId={component.id} + /> + +
{/if} @@ -278,13 +281,15 @@ 'text-red-500 px-1 text-2xs py-0.5 font-bold w-fit absolute border border-red-500 -bottom-1 shadow left-1/2 transform -translate-x-1/2 z-50 cursor-pointer' )} > - - - + + + + +
-
{error ?? ''}	
-								
+
-
+
{/if} diff --git a/frontend/src/lib/components/apps/editor/componentsPanel/CustomComponentsList.svelte b/frontend/src/lib/components/apps/editor/componentsPanel/CustomComponentsList.svelte index 295e0f5fed..4bb894e308 100644 --- a/frontend/src/lib/components/apps/editor/componentsPanel/CustomComponentsList.svelte +++ b/frontend/src/lib/components/apps/editor/componentsPanel/CustomComponentsList.svelte @@ -69,8 +69,6 @@ getCustomComponents() -
-
diff --git a/frontend/src/lib/components/apps/editor/componentsPanel/NameEditor.svelte b/frontend/src/lib/components/apps/editor/componentsPanel/NameEditor.svelte index 2fee02c101..6d479df50b 100644 --- a/frontend/src/lib/components/apps/editor/componentsPanel/NameEditor.svelte +++ b/frontend/src/lib/components/apps/editor/componentsPanel/NameEditor.svelte @@ -1,7 +1,6 @@ - - + + -
-
Edit {kind} name
-
- - + +
+
Edit {kind} name
+
+ + +
-
- + + diff --git a/frontend/src/lib/components/apps/editor/componentsPanel/ThemeNameEditor.svelte b/frontend/src/lib/components/apps/editor/componentsPanel/ThemeNameEditor.svelte index e545c622fb..36ebd17556 100644 --- a/frontend/src/lib/components/apps/editor/componentsPanel/ThemeNameEditor.svelte +++ b/frontend/src/lib/components/apps/editor/componentsPanel/ThemeNameEditor.svelte @@ -2,8 +2,7 @@ import { updateTheme } from './themeUtils' import { workspaceStore } from '$lib/stores' import Button from '$lib/components/common/button/Button.svelte' - - import { Popup } from '$lib/components/common' + import Popover from '$lib/components/meltComponents/Popover.svelte' import { Pen } from 'lucide-svelte' import { createEventDispatcher } from 'svelte' import { sendUserToast } from '$lib/toast' @@ -18,19 +17,19 @@ const dispatch = createEventDispatcher() - - + -
+
Edit theme name
@@ -46,12 +45,12 @@ } }) dispatch('reloadThemes') - close(null) + close() sendUserToast('Theme name updated:\n' + editedName) }} > Update
-
-
+ + diff --git a/frontend/src/lib/components/apps/editor/contextPanel/components/IdEditor.svelte b/frontend/src/lib/components/apps/editor/contextPanel/components/IdEditor.svelte index 2db5998316..88882ced5b 100644 --- a/frontend/src/lib/components/apps/editor/contextPanel/components/IdEditor.svelte +++ b/frontend/src/lib/components/apps/editor/contextPanel/components/IdEditor.svelte @@ -4,7 +4,7 @@ import { Pencil } from 'lucide-svelte' import { createEventDispatcher, getContext } from 'svelte' import IdEditorInput from '$lib/components/IdEditorInput.svelte' - import { Popup } from '$lib/components/common' + import Popover from '$lib/components/meltComponents/Popover.svelte' const { app, selectedComponent } = getContext('AppViewerContext') @@ -15,8 +15,12 @@ $: reservedIds = allItems($app.grid, $app.subgrids).map((item) => item.id) - - + + - close(null)} - on:save={(e) => { - dispatch('save', e.detail) - close(null) - }} - {reservedIds} - /> - + + close()} + on:save={(e) => { + dispatch('save', e.detail) + close() + }} + {reservedIds} + /> + + diff --git a/frontend/src/lib/components/apps/editor/inlineScriptsPanel/CacheTtlPopup.svelte b/frontend/src/lib/components/apps/editor/inlineScriptsPanel/CacheTtlPopup.svelte index 4ade3ec0fa..6734a18a8d 100644 --- a/frontend/src/lib/components/apps/editor/inlineScriptsPanel/CacheTtlPopup.svelte +++ b/frontend/src/lib/components/apps/editor/inlineScriptsPanel/CacheTtlPopup.svelte @@ -1,13 +1,14 @@ - - +
-
+ + diff --git a/frontend/src/lib/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte b/frontend/src/lib/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte index 2b2be45da5..16fe10c594 100644 --- a/frontend/src/lib/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +++ b/frontend/src/lib/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte @@ -1,5 +1,5 @@ - - + +
- {#if !loading} - {#if filteredItems} -
- { - if (!['ArrowDown', 'ArrowUp'].includes(event.key)) { - event.stopPropagation() - } - }} - bind:value={search} - type="text" - placeholder="Search" - class="col-span-4 mb-2" - /> -
- {#each filteredItems as label} - - {:else} -
- No icons match your search -
- {/each} + + {#if !loading} + {#if filteredItems} +
+ { + if (!['ArrowDown', 'ArrowUp'].includes(event.key)) { + event.stopPropagation() + } + }} + bind:value={search} + type="text" + placeholder="Search" + class="col-span-4 mb-2" + /> +
+ {#each filteredItems as label} + + {:else} +
+ No icons match your search +
+ {/each} +
-
- {:else} -
Couldn't load options
+ {:else} +
Couldn't load options
+ {/if} {/if} - {/if} - + + diff --git a/frontend/src/lib/components/auditLogs/AuditLogMobileFilters.svelte b/frontend/src/lib/components/auditLogs/AuditLogMobileFilters.svelte index 36590aaee1..d9c0f5dd49 100644 --- a/frontend/src/lib/components/auditLogs/AuditLogMobileFilters.svelte +++ b/frontend/src/lib/components/auditLogs/AuditLogMobileFilters.svelte @@ -1,18 +1,19 @@ - -
+ -
-
+ + diff --git a/frontend/src/lib/components/common/calendarPicker/CalendarPicker.svelte b/frontend/src/lib/components/common/calendarPicker/CalendarPicker.svelte index 4e1e7cadb5..538ded9e7c 100644 --- a/frontend/src/lib/components/common/calendarPicker/CalendarPicker.svelte +++ b/frontend/src/lib/components/common/calendarPicker/CalendarPicker.svelte @@ -1,7 +1,7 @@ - - + + - - - - - + + + diff --git a/frontend/src/lib/components/common/index.ts b/frontend/src/lib/components/common/index.ts index 2f6bba1aa7..cd68ce79d4 100644 --- a/frontend/src/lib/components/common/index.ts +++ b/frontend/src/lib/components/common/index.ts @@ -9,7 +9,6 @@ export { default as DrawerContent } from './drawer/DrawerContent.svelte' export { default as Kbd } from './kbd/Kbd.svelte' export { default as Menu } from './menu/Menu.svelte' export { default as MenuItem } from './menu/MenuItem.svelte' -export { default as Popup } from './popup/Popup.svelte' export { default as SecondsInput } from './seconds/SecondsInput.svelte' export { default as Skeleton } from './skeleton/Skeleton.svelte' export { default as Tab } from './tabs/Tab.svelte' diff --git a/frontend/src/lib/components/common/menu/MenuV2.svelte b/frontend/src/lib/components/common/menu/MenuV2.svelte deleted file mode 100644 index 708224ee13..0000000000 --- a/frontend/src/lib/components/common/menu/MenuV2.svelte +++ /dev/null @@ -1,54 +0,0 @@ - - - - -
- - - -
- -
- - -
- -
-
-
-
-
-
diff --git a/frontend/src/lib/components/common/popup/Popup.svelte b/frontend/src/lib/components/common/popup/Popup.svelte deleted file mode 100644 index 6bbceccec7..0000000000 --- a/frontend/src/lib/components/common/popup/Popup.svelte +++ /dev/null @@ -1,70 +0,0 @@ - - - - -
- -
-
- - - - -
{ - popupHover = true - }} - on:mouseleave={() => { - popupHover = false - }} - on:click={(e) => preventPopupClosingOnClickInside && e.stopPropagation()} - > - {#if !noTransition} - - -
- -
-
-
- {:else} - -
- -
-
- {/if} -
-
-
diff --git a/frontend/src/lib/components/copilot/CronGen.svelte b/frontend/src/lib/components/copilot/CronGen.svelte index c7046c6ada..b211fcd7e2 100644 --- a/frontend/src/lib/components/copilot/CronGen.svelte +++ b/frontend/src/lib/components/copilot/CronGen.svelte @@ -2,7 +2,7 @@ import { ExternalLink, Wand2 } from 'lucide-svelte' import Button from '../common/button/Button.svelte' import { getNonStreamingCompletion } from './lib' - import Popup from '../common/popup/Popup.svelte' + import Popover from '$lib/components/meltComponents/Popover.svelte' import { sendUserToast } from '$lib/toast' import { copilotInfo } from '$lib/stores' @@ -74,12 +74,8 @@ } - - + +
+ {:else} +
+

Enable Windmill AI in the workspace settings

+
+ {/if}
- {:else} -
- {/if} - + + diff --git a/frontend/src/lib/components/copilot/FlowCopilotStatus.svelte b/frontend/src/lib/components/copilot/FlowCopilotStatus.svelte index 682c797c05..3e9c5bb839 100644 --- a/frontend/src/lib/components/copilot/FlowCopilotStatus.svelte +++ b/frontend/src/lib/components/copilot/FlowCopilotStatus.svelte @@ -7,7 +7,7 @@ import type { FlowCopilotContext } from './flow' import { charsToNumber } from '../flows/idUtils' import { copilotInfo } from '$lib/stores' - import Popup from '../common/popup/Popup.svelte' + import Popover from '$lib/components/meltComponents/Popover.svelte' import type { FlowModule } from '$lib/gen' import type { FlowEditorContext } from '../flows/types' import { ExternalLink, Wand2 } from 'lucide-svelte' @@ -114,13 +114,8 @@
{:else} - - + +
- {#if promptHistory.length > 0} -
- {#each promptHistory as p} - - {/each} - + }} + disabled={funcDesc?.length <= 0} + iconOnly + startIcon={{ icon: Wand2 }} + />
- {/if} -
- {:else} -

- Enable Windmill AI in the - workspace settings - -

- {/if} -
- + {#if promptHistory.length > 0} +
+ {#each promptHistory as p} + + {/each} + +
+ {/if} +
+ {:else} +

+ Enable Windmill AI in the + workspace settings + +

+ {/if} +
+ + diff --git a/frontend/src/lib/components/copilot/ScriptFix.svelte b/frontend/src/lib/components/copilot/ScriptFix.svelte index da4d5e476f..7f4c77f1e7 100644 --- a/frontend/src/lib/components/copilot/ScriptFix.svelte +++ b/frontend/src/lib/components/copilot/ScriptFix.svelte @@ -9,15 +9,13 @@ import { dbSchemas, copilotInfo, type DBSchema, workspaceStore } from '$lib/stores' import type DiffEditor from '../DiffEditor.svelte' import { scriptLangToEditorLang } from '$lib/scripts' - import Popover from '../Popover.svelte' - import Popup from '../common/popup/Popup.svelte' + import Popover from '$lib/components/meltComponents/Popover.svelte' import { writable } from 'svelte/store' - import { sleep } from '$lib/utils' import { WindmillIcon } from '../icons' import HighlightCode from '../HighlightCode.svelte' import LoadingIcon from '../apps/svelte-select/lib/LoadingIcon.svelte' import { autoPlacement } from '@floating-ui/core' - import { Check, Wand2, X } from 'lucide-svelte' + import { Check, Wand2, X, RotateCw } from 'lucide-svelte' // props export let lang: SupportedLanguage @@ -33,7 +31,7 @@ let dbSchema: DBSchema | undefined = undefined let abortController: AbortController | undefined = undefined - async function onFix(closePopup: () => void) { + async function onFix() { if (!error) { return } @@ -57,9 +55,6 @@ ) setupDiff() diffEditor?.setModified($generatedCode) - await sleep(500) - closePopup() - await sleep(300) showDiff() } catch (err) { if (!abortController?.signal.aborted) { @@ -70,7 +65,6 @@ console.error(err) } } - closePopup() } finally { genLoading = false } @@ -117,110 +111,134 @@ } } $: updateSchema(lang, args) + + let popover: Popover | undefined = undefined {#if SUPPORTED_LANGUAGES.has(lang)} -
- {#if !genLoading && $generatedCode.length > 0} -
+ {#if !genLoading && $generatedCode.length > 0} +
+ + +
+ {/if} + + +
- {#if $generatedExplanation.length > 0} - - {$generatedExplanation} - - +
+
+ +
+ {#if $copilotInfo.exists_ai_resource} +
+ {#if $generatedCode.length > 0 && genLoading} +
+ +
+ {:else if genLoading} + + {/if} + {#if $generatedExplanation.length > 0} +

Explanation: test {$generatedExplanation}

+ {/if} +
+ {:else} +
+

Enable Windmill AI in the workspace settings

{/if}
- {:else} - - - - - {@const fixAction = (_) => { - if ($copilotInfo.exists_ai_resource) { - onFix(() => close(null)) - } - }} -
- {#if $copilotInfo.exists_ai_resource} -
- {#if $generatedCode.length > 0} -
- -
- {#if $generatedExplanation.length > 0} -

Explanation: {$generatedExplanation}

- {/if} - {:else} - - {/if} -
- {:else} -
-

Enable Windmill AI in the workspace settings

- {/if} -
-
- {/if} -
+ + {/if} diff --git a/frontend/src/lib/components/copilot/ScriptGen.svelte b/frontend/src/lib/components/copilot/ScriptGen.svelte index 1ae45c9146..960cf13689 100644 --- a/frontend/src/lib/components/copilot/ScriptGen.svelte +++ b/frontend/src/lib/components/copilot/ScriptGen.svelte @@ -6,7 +6,8 @@ import type { SupportedLanguage } from '$lib/common' import { sendUserToast } from '$lib/toast' import type Editor from '../Editor.svelte' - import Popup from '../common/popup/Popup.svelte' + import Popover from '$lib/components/meltComponents/Popover.svelte' + import TooltipV2 from '$lib/components/meltComponents/Tooltip.svelte' import { dbSchemas, copilotInfo, @@ -29,7 +30,6 @@ import { fade } from 'svelte/transition' import { isInitialCode } from '$lib/script_helpers' import { twMerge } from 'tailwind-merge' - import Popover from '../Popover.svelte' import { onDestroy } from 'svelte' // props @@ -249,6 +249,11 @@ } $: $copilotInfo && checkForInvalidModel() + function handlePublicOnlySelected({ detail }: { detail: string }) { + if (!dbSchema) return + ;(dbSchema as any).publicOnly = detail === 'true' + } + onDestroy(() => { abortController?.abort() }) @@ -311,7 +316,7 @@ {/if} {/if} {#if ($generatedCode.length === 0 || genLoading) && SUPPORTED_LANGUAGES.has(lang ?? '')} - - + {#if inlineScript}