Files
windmill/frontend/src/lib/components/flows/map/FlowStickyNode.svelte
Ruben Fiszel 431074d249 fix: add history to raw app builder (#7362)
* appHistory

* appHistory

* all

* all

* all

* all

* all

* all

* all

* all

* improvements
2025-12-13 13:32:52 +00:00

109 lines
2.8 KiB
Svelte

<script lang="ts">
import type { FlowEditorContext } from '../types'
import type { FlowDiffManager } from '../flowDiffManager.svelte'
import { getContext } from 'svelte'
import { Badge } from '$lib/components/common'
import { DollarSign, Settings, StickyNote } from 'lucide-svelte'
import FlowErrorHandlerItem from './FlowErrorHandlerItem.svelte'
import AIButton from '$lib/components/copilot/chat/AIButton.svelte'
import Popover from '$lib/components/Popover.svelte'
import Button from '$lib/components/common/button/Button.svelte'
import { AIBtnClasses } from '$lib/components/copilot/chat/AIButtonStyle'
interface Props {
disableSettings?: boolean
disableStaticInputs?: boolean
smallErrorHandler: boolean
aiChatOpen?: boolean
showFlowAiButton?: boolean
toggleAiChat?: () => void
noteMode?: boolean
toggleNoteMode?: () => void
disableAi?: boolean
diffManager?: FlowDiffManager
}
let {
disableSettings,
disableStaticInputs,
smallErrorHandler,
aiChatOpen,
showFlowAiButton,
toggleAiChat,
noteMode,
toggleNoteMode,
disableAi,
diffManager
}: Props = $props()
const { selectionManager, flowStore } = getContext<FlowEditorContext>('FlowEditorContext')
const selectedId = $derived(selectionManager.getSelectedId())
</script>
<div class="flex flex-row gap-2 p-1 rounded-md bg-surface">
{#if !disableSettings}
<Button
unifiedSize="sm"
wrapperClasses="min-w-36"
startIcon={{ icon: Settings }}
selected={selectedId?.startsWith('settings')}
variant="default"
title="Settings"
onClick={() => selectionManager.selectId('settings')}
>
Settings
{#if flowStore.val.value.same_worker}
<Badge color="blue" wrapperClass="max-h-[18px]">./shared</Badge>
{/if}
</Button>
{/if}
<Popover>
<FlowErrorHandlerItem {disableAi} small={smallErrorHandler} {diffManager} on:generateStep />
{#snippet text()}
Error Handler
{/snippet}
</Popover>
{#if !disableStaticInputs}
<Popover>
<Button
wrapperClasses="h-full"
unifiedSize="sm"
startIcon={{ icon: DollarSign }}
selected={selectedId === 'constants'}
variant="default"
iconOnly
onClick={() => selectionManager.selectId('constants')}
/>
{#snippet text()}
Environment Variables
{/snippet}
</Popover>
{/if}
{#if showFlowAiButton}
<Popover>
<AIButton
togglePanel={() => {
toggleAiChat?.()
}}
btnClasses={AIBtnClasses(aiChatOpen ? 'selected' : 'default')}
/>
{#snippet text()}
Flow AI Chat
{/snippet}
</Popover>
{/if}
<Popover>
<Button
onclick={() => toggleNoteMode?.()}
iconOnly
variant="default"
unifiedSize="sm"
startIcon={{ icon: StickyNote }}
selected={noteMode}
></Button>
{#snippet text()}
{noteMode ? 'Exit note mode' : 'Add sticky notes'}
{/snippet}
</Popover>
</div>