mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-11-06 17:30:36 +01:00
some drop down styles
This commit is contained in:
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>
|
||||
|
||||
@@ -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>;
|
||||
}
|
||||
Reference in new issue
Block a user