mirror of
https://seed.radicle.dev/rad:z4D5UCArafTzTQpDZNQRuqswh3ury.git
synced 2026-11-16 00:20:37 +08:00
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
60 lines
1.2 KiB
Svelte
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>
|