Files
windmill/frontend/src/lib/components/common/toggleButton-v2/ToggleButtonGroup.svelte
T
Diego ImbertandRuben Fiszel 72b744c4e1 feat: UX improvements (all inputs)
* Monaco transparent bg

* started improving input transform form

* always show static/f selector

* fix connecting btn changing size

* pretty Fill Inputs button

* ResizeTransitionWrapper

* Prettier TemplateEditor

* prevent double onpointerdown when clicking button to close

* text hint

* force focus border for TemplateEditor

* styling in js mode

* update select style

* fix jittery fake monaco placeholder

* select nits

* aiproviderpicker + nits

* smaller ${...} badge

* no-default-style

* select dropdown slide

* nit

* Refresh button in flow picker quick

* jsonEditor pretty

* ai provider toggle button more

* change resource edit button pos

* ResourcePicker Add and Refresh btn

* fix scrollbar

* Fix FileInput and S3 Arg Input

* fix textarea styling

* nicer refresh button in Test This Step

* fix togglebutton border in darkmode

* rounded nit

* Fix multiselect styling

* Prevent crash when selecting dyn-multiselect

* missing $derived and $state => reactivity issue when switching between DynSelect and DynMultiselect

* forgot $effect.pre

* fix nested objects

* nits

* prettier json toggle and array inputs

* array input nits

* nit

* fix json toggle appearing in fileinputs

* nit

* started updating PropertyEditor

* (stash) fix select dropdown animation teleporting from bottom to top

* nit

* nit

* resize transition in schemaform

* nit

* nit typo

* nit enableFlyTransition

* shadow nit

* small consistency changes

* user setting nit

* resize transition in module preview form

* more space

* nit readability on hover

* DateTimeInput new style

* nit fix

* remove yPadding in template and simple editor

* nits

* Revert "remove yPadding in template and simple editor"

This reverts commit 8f27c8d0b8.

* nit

* Fix proppicker border

* fix inconsistent spacing btw arginput and input transform form field headers

* consistent add item button

* nit

* s3 settings nits

* RunsFilter fix

* gray ${...} badge

* border fix darkmode

* nit

* nit app editor consistency

* fix step input gen style

* nit fix

* nits

* toggle border

* nit toggle button

* nit font-medium

* nit font-medium

* nit font-medium

* nit font-medium

* nit

---------

Co-authored-by: Ruben Fiszel <ruben@windmill.dev>
2025-09-27 21:52:13 +00:00

83 lines
1.7 KiB
Svelte

<script lang="ts">
import { createEventDispatcher } from 'svelte'
import { twMerge } from 'tailwind-merge'
import { createSync } from '@melt-ui/svelte'
const dispatch = createEventDispatcher()
import { createToggleGroup, melt } from '@melt-ui/svelte'
interface Props {
id?: string | null | undefined
selected?: string | string[] | undefined
noWFull?: boolean
disabled?: boolean
tabListClass?: string
allowEmpty?: boolean
class?: string
wrap?: boolean
children?: import('svelte').Snippet<[any]>
onSelected?: (value: any) => void
}
let {
id = undefined,
selected = $bindable(undefined),
noWFull = false,
disabled = false,
tabListClass = '',
allowEmpty = false,
class: className = '',
wrap = false,
onSelected,
children
}: Props = $props()
const {
elements: { root, item },
options: { disabled: disabledOption },
states
} = createToggleGroup({
type: 'single',
onValueChange: ({ curr, next }) => {
if (next === undefined && !allowEmpty) {
return curr
}
if (curr !== next && curr !== undefined) {
dispatch('selected', next)
onSelected?.(next)
}
return next
}
})
$effect(() => {
$disabledOption = disabled
})
const sync = createSync(states)
$effect(() => {
sync.value(selected, (v) => (selected = v))
})
</script>
<div
use:melt={$root}
class={twMerge(
`flex ${noWFull ? '' : 'w-full'} ${disabled ? 'disabled' : ''}`,
className,
'flex items-center data-[orientation="vertical"]:flex-col'
)}
aria-label="Toggle button group"
{id}
>
<div
class={twMerge(
'flex bg-surface-secondary rounded-md h-full',
wrap ? 'flex-wrap' : '',
tabListClass
)}
>
{@render children?.({ item, disabled })}
</div>
</div>