Files
radicle-desktop/src/components/DropdownList.svelte
T
Rūdolfs Ošiņš 010cac0377 Redesign app with new UI kit
Redesign the entire app with a new UI kit. Typography, colors, icons,
avatars, and border radii have all been updated for a more polished,
consistent appearance that matches our other products like
radicle-explorer.

- Replace blockies-based avatars with a new DID-based avatar system
- Move Settings and Create Issue into fullscreen modals
- Change the default theme to follow the system theme
- Remove window decorations on macOS for a cleaner, more native feel
- Update the app icon
- Fix popovers and tooltips

Navigation:

- Rewrite app navigation and layouts
- Add a sidebar that gives you access to all your repos
- Change the startup screen to open directly to the notification inbox
- Add a getting started guide shown to new users on first launch

Settings:

- Add a setting to disable the notification badge
- Add a code font setting

Bug fixes:

- Fix reactions and edits incorrectly targeting the root comment
  instead of the intended reply
- Restrict issue/patch state, labels and assignees to delegates only
2026-03-20 17:48:38 -06:00

60 lines
1.2 KiB
Svelte

<script lang="ts" generics="T">
import type { Snippet } from "svelte";
import { useOverlayScrollbars } from "overlayscrollbars-svelte";
interface Props {
item: Snippet<[T]>;
empty?: Snippet;
items: T[];
styleDropdownMinWidth?: string;
}
const { item, empty, items, styleDropdownMinWidth }: Props = $props();
let dropdownElement: HTMLDivElement | undefined = undefined;
$effect(() => {
if (dropdownElement) {
const [initialize] = useOverlayScrollbars({
options: () => ({
scrollbars: {
theme: "global-os-theme-radicle",
autoHide: "scroll",
},
}),
defer: true,
});
initialize({ target: dropdownElement });
}
});
</script>
<style>
.dropdown {
align-items: center;
max-height: 60vh;
overflow-y: auto;
}
.dropdown-item {
padding: 1px;
font: var(--txt-body-m-regular);
}
</style>
<div
class="dropdown"
bind:this={dropdownElement}
style:min-width={styleDropdownMinWidth}>
{#each items as i}
<div class="dropdown-item">
{@render item(i)}
</div>
{:else}
<div class="dropdown-item">
{@render empty?.()}
</div>
{/each}
</div>