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}
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 @@
Draft
-
- handleEditScript(false)}
- dropdownItems={computeDropdownItems(initialPath, savedScript, diffDrawer)}
- >
- Deploy
-
-
-
- {
- if (e.key === 'Enter') {
- handleEditScript(false, deploymentMsg)
- }
- }}
- />
- handleEditScript(false, deploymentMsg)}
- endIcon={{ icon: CornerDownLeft }}
- loading={loadingSave}
- >
- Deploy
-
-
-
-
+
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)}
+ >