feat(ComboControl): add reduced flag that removes increase/decrease buttons keeping the slider popover
This commit is contained in:
@@ -31,7 +31,7 @@ $effect(() => {
|
|||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="py-2 px-10 flex flex-row items-center gap-2">
|
<div class="sm:py-2 sm:px-10 flex flex-row items-center gap-2">
|
||||||
<div class="flex flex-row gap-3">
|
<div class="flex flex-row gap-3">
|
||||||
{#each controlManager.controls as control (control.id)}
|
{#each controlManager.controls as control (control.id)}
|
||||||
<ComboControl
|
<ComboControl
|
||||||
@@ -39,6 +39,7 @@ $effect(() => {
|
|||||||
increaseLabel={control.increaseLabel}
|
increaseLabel={control.increaseLabel}
|
||||||
decreaseLabel={control.decreaseLabel}
|
decreaseLabel={control.decreaseLabel}
|
||||||
controlLabel={control.controlLabel}
|
controlLabel={control.controlLabel}
|
||||||
|
reduced={responsive.isMobile}
|
||||||
/>
|
/>
|
||||||
{/each}
|
{/each}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ import PlusIcon from '@lucide/svelte/icons/plus';
|
|||||||
import type { ChangeEventHandler } from 'svelte/elements';
|
import type { ChangeEventHandler } from 'svelte/elements';
|
||||||
import IconButton from '../IconButton/IconButton.svelte';
|
import IconButton from '../IconButton/IconButton.svelte';
|
||||||
|
|
||||||
interface ComboControlProps {
|
interface Props {
|
||||||
/**
|
/**
|
||||||
* Text for increase button aria-label
|
* Text for increase button aria-label
|
||||||
*/
|
*/
|
||||||
@@ -43,6 +43,10 @@ interface ComboControlProps {
|
|||||||
* Control instance
|
* Control instance
|
||||||
*/
|
*/
|
||||||
control: TypographyControl;
|
control: TypographyControl;
|
||||||
|
/**
|
||||||
|
* Reduced amount of controls
|
||||||
|
*/
|
||||||
|
reduced?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const {
|
const {
|
||||||
@@ -50,7 +54,8 @@ const {
|
|||||||
decreaseLabel,
|
decreaseLabel,
|
||||||
increaseLabel,
|
increaseLabel,
|
||||||
controlLabel,
|
controlLabel,
|
||||||
}: ComboControlProps = $props();
|
reduced = false,
|
||||||
|
}: Props = $props();
|
||||||
|
|
||||||
// Local state for the slider to prevent infinite loops
|
// Local state for the slider to prevent infinite loops
|
||||||
// svelte-ignore state_referenced_locally - $state captures initial value, $effect syncs updates
|
// svelte-ignore state_referenced_locally - $state captures initial value, $effect syncs updates
|
||||||
@@ -80,6 +85,7 @@ const handleSliderChange = (newValue: number) => {
|
|||||||
<TooltipRoot>
|
<TooltipRoot>
|
||||||
<ButtonGroupRoot class="bg-transparent border-none shadow-none">
|
<ButtonGroupRoot class="bg-transparent border-none shadow-none">
|
||||||
<TooltipTrigger class="flex items-center">
|
<TooltipTrigger class="flex items-center">
|
||||||
|
{#if !reduced}
|
||||||
<IconButton
|
<IconButton
|
||||||
onclick={control.decrease}
|
onclick={control.decrease}
|
||||||
disabled={control.isAtMin}
|
disabled={control.isAtMin}
|
||||||
@@ -90,6 +96,7 @@ const handleSliderChange = (newValue: number) => {
|
|||||||
<MinusIcon class={className} />
|
<MinusIcon class={className} />
|
||||||
{/snippet}
|
{/snippet}
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
{/if}
|
||||||
<PopoverRoot>
|
<PopoverRoot>
|
||||||
<PopoverTrigger>
|
<PopoverTrigger>
|
||||||
{#snippet child({ props })}
|
{#snippet child({ props })}
|
||||||
@@ -127,6 +134,7 @@ const handleSliderChange = (newValue: number) => {
|
|||||||
</PopoverContent>
|
</PopoverContent>
|
||||||
</PopoverRoot>
|
</PopoverRoot>
|
||||||
|
|
||||||
|
{#if !reduced}
|
||||||
<IconButton
|
<IconButton
|
||||||
aria-label={increaseLabel}
|
aria-label={increaseLabel}
|
||||||
onclick={control.increase}
|
onclick={control.increase}
|
||||||
@@ -137,6 +145,7 @@ const handleSliderChange = (newValue: number) => {
|
|||||||
<PlusIcon class={className} />
|
<PlusIcon class={className} />
|
||||||
{/snippet}
|
{/snippet}
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
{/if}
|
||||||
</TooltipTrigger>
|
</TooltipTrigger>
|
||||||
</ButtonGroupRoot>
|
</ButtonGroupRoot>
|
||||||
{#if controlLabel}
|
{#if controlLabel}
|
||||||
|
|||||||
Reference in New Issue
Block a user