diff --git a/frontend/src/lib/components/DeployButton.svelte b/frontend/src/lib/components/DeployButton.svelte new file mode 100644 index 0000000000..22d0ef473f --- /dev/null +++ b/frontend/src/lib/components/DeployButton.svelte @@ -0,0 +1,80 @@ + + + + + + diff --git a/frontend/src/lib/components/DropdownV2.svelte b/frontend/src/lib/components/DropdownV2.svelte index 9e535dc55c..7a7f6a3beb 100644 --- a/frontend/src/lib/components/DropdownV2.svelte +++ b/frontend/src/lib/components/DropdownV2.svelte @@ -23,6 +23,8 @@ export let usePointerDownOutside = false export let closeOnOtherDropdownOpen = true export let fixedHeight = true + export let hidePopup = false + export let open = false const { elements: { menu, item, trigger }, @@ -50,7 +52,6 @@ } }) - let open = false const sync = createSync(states) $: sync.open(open, (v) => (open = Boolean(v))) @@ -104,7 +105,7 @@ {/if} -{#if open} +{#if open && !hidePopup}
@@ -1303,7 +1291,8 @@ class="justify-between flex flex-row items-center pl-2.5 pr-6 space-x-4 scrollbar-hidden overflow-x-auto max-h-12 h-full relative" > {#if $copilotCurrentStepStore !== undefined} -
+
{/if}
- - - -
- { - if (e.key === 'Enter') { - await handleSaveFlow(deploymentMsg) - } - }} - bind:this={msgInput} - /> - -
-
-
+ await handleSaveFlow(detail)} + {loading} + {loadingSave} + {newFlow} + {dropdownItems} + />
diff --git a/frontend/src/lib/components/ScriptBuilder.svelte b/frontend/src/lib/components/ScriptBuilder.svelte index b21819e2ed..31f3400ee3 100644 --- a/frontend/src/lib/components/ScriptBuilder.svelte +++ b/frontend/src/lib/components/ScriptBuilder.svelte @@ -39,7 +39,6 @@ Calendar, CheckCircle, Code, - CornerDownLeft, Pen, Plus, Rocket, @@ -65,7 +64,6 @@ import { defaultScriptLanguages, processLangs } from '$lib/scripts' import DefaultScripts from './DefaultScripts.svelte' import { createEventDispatcher, onMount, setContext } from 'svelte' - import CustomPopover from './CustomPopover.svelte' import Summary from './Summary.svelte' import type { ScriptBuilderWhitelabelCustomUi } from './custom_ui' import DeployOverrideConfirmationModal from '$lib/components/common/confirmationModal/DeployOverrideConfirmationModal.svelte' @@ -80,6 +78,8 @@ import CaptureTable from './triggers/CaptureTable.svelte' import type { SavedAndModifiedValue } from './common/confirmationModal/unsavedTypes' import type { ScriptBuilderFunctionExports } from './scriptBuilder' + import DeployButton from './DeployButton.svelte' + export let script: NewScript export let fullyLoaded: boolean = true export let initialPath: string = '' @@ -757,9 +757,6 @@ setContext('disableTooltips', customUi?.disableTooltips === true) - let deploymentMsg = '' - let msgInput: HTMLInputElement | undefined = undefined - function langToLanguage(lang: SupportedLanguage | 'docker' | 'bunnative'): SupportedLanguage { if (lang == 'docker') { return 'bash' @@ -1575,41 +1572,13 @@ - - - -
- { - if (e.key === 'Enter') { - handleEditScript(false, deploymentMsg) - } - }} - /> - -
-
-
+ handleEditScript(false, detail)} + />
diff --git a/frontend/src/lib/components/common/button/Button.svelte b/frontend/src/lib/components/common/button/Button.svelte index 0554e168ba..a59428d662 100644 --- a/frontend/src/lib/components/common/button/Button.svelte +++ b/frontend/src/lib/components/common/button/Button.svelte @@ -5,6 +5,9 @@ import Dropdown from '$lib/components/DropdownV2.svelte' import { getModifierKey, type Item } from '$lib/utils' import { Loader2, ChevronDown } from 'lucide-svelte' + import { createTooltip } from '@melt-ui/svelte' + import type { Placement } from '@floating-ui/core' + import { conditionalMelt } from '$lib/utils' export let size: ButtonType.Size = 'md' export let spacingSize: ButtonType.Size = size @@ -34,6 +37,14 @@ export let shortCut: | { key?: string; hide?: boolean; Icon?: any; withoutModifier?: boolean } | undefined = undefined + export let tooltipPopover: + | { + placement?: Placement + openDelay?: number + closeDelay?: number + portal?: string + } + | undefined = undefined type MenuItem = { label: string @@ -43,6 +54,7 @@ disabled?: boolean } export let dropdownItems: MenuItem[] | (() => MenuItem[]) | undefined = undefined + export let hideDropdown: boolean = false function computeDropdowns(menuItems: MenuItem[] | (() => MenuItem[])): Item[] { const items = typeof menuItems === 'function' ? menuItems() : menuItems @@ -117,6 +129,28 @@ } $: lucideIconSize = (iconMap[size] ?? 12) * 1 + + const { + elements: { trigger, content }, + states: { open }, + options: { openDelay } + } = tooltipPopover + ? createTooltip({ + positioning: { + placement: tooltipPopover?.placement + }, + closeDelay: tooltipPopover?.closeDelay, + group: true, + portal: tooltipPopover?.portal + }) + : { + elements: { trigger: undefined, content: undefined }, + states: { open: undefined }, + options: { openDelay: undefined } + } + $: tooltipPopover && openDelay !== undefined && ($openDelay = tooltipPopover?.openDelay) //This option is reactive + + $: $open !== undefined && dispatch('tooltipOpen', $open)
{#if loading} @@ -230,10 +266,22 @@
{/if} + {#if tooltipPopover && $open} +
+ +
+ {/if} {/if} {#if dropdownItems && dropdownItems.length > 0} - + dispatch('dropdownOpen', true)} + on:close={() => dispatch('dropdownOpen', false)} + >