some drop down styles

This commit is contained in:
tresabhi committed 2026-10-31 16:08:27 -05:00
1 parent db210a431b
commit 4245ae4b7b
6 files changed
+104 -42

No files matched your search

@@ -1,3 +1,7 @@
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- <meta name="viewport" content="width=device-width, initial-scale=1.0" /> -->
<meta
name="viewport"
content="initial-scale=1, maximum-scale=1, user-scalable=no"
/>
<link rel="sitemap" href="/sitemap-index.xml" />
@@ -22,7 +22,7 @@ import "@fontsource-variable/roboto-flex";
--radius-max: var(--max-size);
--font-size-regular: 1rem;
--font-size-minor: 0.75rem;
--font-size-minor: 0.85rem;
--font-size-major: 1.25rem;
--font-size-heading-1: 3rem;
@@ -1,38 +1,75 @@
.Content {
--gutter: var(--space-5);
min-width: min(calc(100dvw - 2 * var(--space-4)), 16rem);
z-index: 1;
background-color: var(--gray-2);
display: flex;
flex-direction: column;
padding: var(--space-4);
margin-top: var(--space-3);
background-color: var(--gray-3);
box-shadow: var(--shadow-aggressive);
box-shadow: var(--shadow-subtle);
outline: var(--outline-interactive);
border-radius: var(--space-3);
}
overflow: hidden;
.Separator {
background-color: var(--gray-6);
outline: var(--outline-interactive) !important;
margin: var(--space-4) var(--space-3);
.Separator {
height: var(--space-3);
}
height: var(--space-0);
}
.Item,
.CheckboxItem {
position: relative;
.Item,
.CheckboxItem {
border-radius: var(--space-2);
padding: var(--space-3) var(--space-4);
background-color: var(--gray-3);
cursor: pointer;
padding: var(--space-3);
padding-left: var(--gutter);
display: flex;
align-items: center;
gap: var(--space-3);
cursor: pointer;
&:focus {
outline: none;
display: flex;
align-items: center;
gap: var(--space-3);
background-color: var(--accent-9);
font-size: var(--font-size-minor);
&:focus {
outline: none;
background-color: var(--gray-5);
}
& + & {
border-top: var(--space-1) solid var(--gray-2);
}
img,
svg {
&:last-child {
margin-left: auto;
}
}
.ItemIndicator {
position: absolute;
left: 0;
top: 50%;
display: flex;
transform: translate(calc(-50% + var(--gutter) / 2), -50%);
img,
svg {
width: 1em;
height: 1em;
}
}
}
}
@@ -2,4 +2,6 @@ import { DropdownMenu as _ } from "radix-ui";
import { composeRadixComponents } from "../../ui/compose";
import styles from "./index.module.css";
export const DropdownMenu = composeRadixComponents(_, styles);
export const DropdownMenu = composeRadixComponents(_, styles, {
Content: { align: "start" },
});
@@ -4,6 +4,7 @@ import { literals } from "@blitzkit/i18n";
import locales from "@blitzkit/i18n/locales.json";
import { ShellType, TankType } from "@blitzkit/protos";
import {
CheckIcon,
LockClosedIcon,
LockOpen2Icon,
ResetIcon,
@@ -233,6 +234,10 @@ function TiersFilter() {
checked={selected}
key={tier}
>
<DropdownMenu.ItemIndicator>
<CheckIcon />
</DropdownMenu.ItemIndicator>
{literals(strings.website.common.tank_search.tier, {
tier: romanize(tier),
})}
@@ -252,8 +257,8 @@ function TiersFilter() {
});
}}
>
<TrashIcon />
{strings.website.common.tank_search.clear}
<TrashIcon />
</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu.Root>
+31 -17
View File
@@ -1,35 +1,49 @@
import type { FC } from "react";
import type { ComponentProps, ComponentType } from "react";
import { classNames } from "./classNames";
function composeRadixComponent<Props>(
Component: FC<Props>,
function composeRadixComponent<Props extends object>(
Component: ComponentType<Props>,
style: CSSModuleClasses[string],
_props?: Partial<Props>,
) {
return function (props: Props & { className?: string }) {
return (
<Component {...props} className={classNames(style, props.className)} />
<Component
{..._props}
{...props}
className={classNames(style, props.className)}
/>
);
};
}
export function composeRadixComponents<
Components extends Record<string, unknown>,
>(components: Components, styles: CSSModuleClasses) {
const mapped: Partial<Components> = {};
type ComponentKeys<T> = {
[K in keyof T]: T[K] extends ComponentType<any> ? K : never;
}[keyof T];
type PickComponents<T> = Pick<T, ComponentKeys<T>>;
export function composeRadixComponents<Module extends Record<string, unknown>>(
components: Module,
styles: CSSModuleClasses,
props: Partial<{
[C in ComponentKeys<Module>]: ComponentProps<
Extract<Module[C], ComponentType<any>>
>;
}> = {},
) {
const mapped: Record<string, unknown> = {};
const propsByName = props as Record<string, object | undefined>;
for (const key in components) {
const isMethod = key[0].toLowerCase() === key[0];
if (isMethod) {
mapped[key] = components[key];
continue;
}
if (key[0].toLowerCase() === key[0]) continue;
mapped[key] = composeRadixComponent(
components[key] as FC,
components[key] as ComponentType<any>,
styles[key],
) as Components[Extract<keyof Components, string>];
propsByName[key],
);
}
return mapped as Components;
return mapped as PickComponents<Module>;
}