diff --git a/web/src/lib/components/notifications/NotificationToolbar.svelte b/web/src/lib/components/notifications/NotificationToolbar.svelte index 3ea54eceb..56f6b92bb 100644 --- a/web/src/lib/components/notifications/NotificationToolbar.svelte +++ b/web/src/lib/components/notifications/NotificationToolbar.svelte @@ -56,7 +56,7 @@
- + {@render readSegment("inbox", "Inbox", Inbox)} {@render readSegment("unread", "Unread", Glasses)} @@ -74,7 +74,7 @@
{#if onCategoryFilter} - + {#each categories as category (category)} {@const segment = segmentProps(categoryFilter === category)} diff --git a/web/src/lib/components/repo/tickets/TicketToolbar.svelte b/web/src/lib/components/repo/tickets/TicketToolbar.svelte index 451041a22..02830cd10 100644 --- a/web/src/lib/components/repo/tickets/TicketToolbar.svelte +++ b/web/src/lib/components/repo/tickets/TicketToolbar.svelte @@ -44,7 +44,7 @@ {/snippet} {#snippet filters()} - + - + @@ -73,7 +73,7 @@ {#snippet template()}
- + diff --git a/web/src/lib/components/ui/ButtonGroup.svelte b/web/src/lib/components/ui/ButtonGroup.svelte index 84f2295be..5df9e21a1 100644 --- a/web/src/lib/components/ui/ButtonGroup.svelte +++ b/web/src/lib/components/ui/ButtonGroup.svelte @@ -7,7 +7,26 @@ variants: { spaced: { true: "gap-xs", - false: [ + false: "" + }, + segmented: { + true: [ + "items-stretch rounded-md bg-[oklch(96%_0_0)] p-0.5 ring ring-border-default/70 dark:bg-background-canvas", + "[--seg-inset:4px] *:[--btn-radius:calc(var(--radius-md)-2px)]", + "[&>*:focus-visible]:-outline-offset-2" + ], + false: "" + }, + direction: { + horizontal: [""], + vertical: ["flex-col"] + } + }, + compoundVariants: [ + { + spaced: false, + segmented: false, + class: [ "relative items-stretch gap-none overflow-hidden rounded-md bg-background-subtle dark:bg-background-canvas", "after:pointer-events-none after:absolute after:inset-0 after:z-20 after:rounded-md after:border after:border-border-default after:content-['']", "*:relative *:border-y-transparent", @@ -22,14 +41,11 @@ "[&>*:not([data-variant=ghost])]:z-10", "[&>*:focus-visible]:-outline-offset-2" ] - }, - direction: { - horizontal: [""], - vertical: ["flex-col"] } - }, + ], defaultVariants: { spaced: false, + segmented: false, direction: "horizontal" } }); @@ -42,8 +58,16 @@ class?: string; } { return selected - ? { variant: "default", insetShadow: true } - : { variant: "ghost", insetShadow: false, class: "text-foreground-default" }; + ? { + variant: "default", + insetShadow: true, + class: "border-[oklch(14.5%_0_0/0.1)] shadow-sm hover:bg-background-default dark:border-alpha-dark-10" + } + : { + variant: "ghost", + insetShadow: false, + class: "text-foreground-muted hover:bg-transparent hover:text-foreground-default" + }; } @@ -52,6 +76,7 @@ interface Props { spaced?: ButtonGroupVariants["spaced"]; + segmented?: ButtonGroupVariants["segmented"]; direction?: ButtonGroupVariants["direction"]; class?: string; children: Snippet; @@ -59,13 +84,14 @@ let { spaced = false, + segmented = false, direction = "horizontal", class: className, children, ...rest }: Props = $props(); - const classes = $derived(buttonGroup({ spaced, direction, class: className })); + const classes = $derived(buttonGroup({ spaced, segmented, direction, class: className }));
diff --git a/web/src/routes/dev/components/+page.svelte b/web/src/routes/dev/components/+page.svelte index 0d7406369..a16872796 100644 --- a/web/src/routes/dev/components/+page.svelte +++ b/web/src/routes/dev/components/+page.svelte @@ -240,7 +240,7 @@ {/snippet} {#snippet buttonGroup()} - +