Compare commits

..
Author SHA1 Message Date
deytenit 97f17ed172 fix: Fix various issues 2026-05-04 21:13:05 +03:00
deytenitandcopilot-swe-agent[bot] ef6ca40c72 feat (www): Add Wanted (wishlist) page (#15)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-05-04 18:58:46 +03:00
6 changed files with 49 additions and 27 deletions

No files matched your search

@@ -22,8 +22,8 @@ export interface BreadcrumbsProps extends HStackProps {
*/
const BreadcrumbsRoot = memo(function Breadcrumbs({ children, ...props }: BreadcrumbsProps) {
return (
<nav aria-label="Breadcrumb">
<HStack align="center" as="ol" gap={2} {...props}>
<nav aria-label="Breadcrumb" className="min-w-0 flex-1">
<HStack align="center" as="ol" gap={2} {...props} className={cn('min-w-0', props.className)}>
{children}
</HStack>
</nav>
@@ -64,7 +64,7 @@ const BreadcrumbsItem = memo(function BreadcrumbsItem({
<li
aria-current={isCurrent ? 'page' : undefined}
className={cn(
'group flex items-center transition-all duration-200',
'group flex items-center transition-all duration-200 min-w-0 flex-shrink',
!isCurrent && isClickable && 'cursor-pointer',
className
)}
@@ -73,7 +73,7 @@ const BreadcrumbsItem = memo(function BreadcrumbsItem({
<Text
as={resolvedHref ? 'a' : onClick ? 'button' : 'span'}
className={cn(
'transition-all duration-200',
'transition-all duration-200 block truncate',
!isCurrent && 'group-hover:text-[var(--rb-text)] group-hover:underline underline-offset-4'
)}
color={isCurrent ? 'default' : 'muted'}
@@ -81,6 +81,7 @@ const BreadcrumbsItem = memo(function BreadcrumbsItem({
size="m"
type="label"
onClick={onClick}
overflow="ellipsis"
>
{children}
</Text>
@@ -110,7 +111,7 @@ const BreadcrumbsSeparator = memo(function BreadcrumbsSeparator({
return (
<li
aria-hidden="true"
className={cn('text-[var(--rb-muted-text)]', className)}
className={cn('flex-shrink-0 text-[var(--rb-muted-text)]', className)}
data-testid={testId}
>
<Text color="muted" size="m" type="label">
@@ -97,11 +97,11 @@ export const PageHead = ({
<PageContainer paddingY="medium">
<VStack align="stretch" gap={6}>
<HStack align="center" justify="between">
<HStack align="center" gap={4}>
{addonLeft && <div>{addonLeft}</div>}
{breadcrumbs && <div className="hidden sm:block">{breadcrumbs}</div>}
<HStack align="center" className="min-w-0 flex-1" gap={4}>
{addonLeft && <div className="min-w-0 flex-shrink">{addonLeft}</div>}
{breadcrumbs && <div className="min-w-0 flex-shrink">{breadcrumbs}</div>}
</HStack>
{addonRight && <div>{addonRight}</div>}
{addonRight && <div className="flex-shrink-0 ml-4">{addonRight}</div>}
</HStack>
<VStack gap={4}>
<Header level={1}>{heading}</Header>
@@ -121,8 +121,8 @@ export const PageHead = ({
<PageContainer paddingY="none">
<HStack align="center" className="h-14" justify="between">
<HStack align="center" className="min-w-0 flex-1" gap={4}>
{addonLeft && <div className="flex-shrink-0">{addonLeft}</div>}
<Header level={4} overflow="ellipsis">
{addonLeft && <div className="min-w-0 flex-shrink">{addonLeft}</div>}
<Header className="min-w-0" level={4} overflow="ellipsis">
{heading}
</Header>
</HStack>
@@ -145,14 +145,14 @@ export const PageHead = ({
</div>
)}
{/* Collapsed Content: Fixed overlay for collapsible, or absolute/relative within sticky/fixed root */}
{/* Collapsed Content: Fixed overlay for collapsible, or relative within sticky/fixed root */}
<div
className={cn(
'z-20 transition-all duration-300 transform bg-[var(--rb-background)]/90 backdrop-blur-md border-b border-[var(--rb-outline)]/10 shadow-md',
isAlwaysCollapsed || (isCollapsible && isCollapsed)
? 'translate-y-0 opacity-100'
: '-translate-y-full opacity-0 pointer-events-none',
isCollapsible ? 'fixed top-0 left-0 right-0' : 'absolute top-0 left-0 right-0'
isCollapsible ? 'fixed top-0 left-0 right-0' : 'relative'
)}
>
{collapsedContent}
+5 -1
View File
@@ -20,7 +20,11 @@ function HomePage(): React.JSX.Element {
<DefaultLayout
centerVertically
currentPath={localePath('/')}
headerAddonLeft={<Header level={3}>{SITE_TITLE}</Header>}
headerAddonLeft={
<Header className="min-w-0" level={3} overflow="ellipsis">
{SITE_TITLE}
</Header>
}
>
<VStack gap={24}>
<Header delay={0} level={1}>
+22 -10
View File
@@ -3,7 +3,7 @@ import { createKeyset } from '@ermnvldmr/i18n';
export const { t } = createKeyset({
Wanted: {
en: 'Wanted',
ru: 'Желаемое',
ru: 'Разыскивается',
},
Home: {
en: 'Home',
@@ -11,7 +11,7 @@ export const { t } = createKeyset({
},
'A quiet log of things I am planning to pick up eventually. It serves mostly as a personal reference, but also as a zero-pressure guide for friends.': {
en: 'A quiet log of things I am planning to pick up eventually. It serves mostly as a personal reference, but also as a zero-pressure guide for friends.',
ru: 'Спокойный список вещей, которые я планирую со временем приобрести. В основном это личная заметка, но также и ненавязчивая шпаргалка для друзей.',
ru: 'Список вещей, которые я планирую со временем приобрести. В основном это личная заметка, но также и ненавязчивый вишлист.',
},
'How this works': {
en: 'How this works',
@@ -27,7 +27,7 @@ export const { t } = createKeyset({
},
'And of course, if you are ever unsure about a specific edition or detail, we can always just talk about it.': {
en: 'And of course, if you are ever unsure about a specific edition or detail, we can always just talk about it.',
ru: 'И, конечно, если вы не уверены в каком-то конкретном издании или детали, мы всегда можем это обсудить.',
ru: 'И, конечно, если вы не уверены в каком-то конкретном издании или деталях, можно всегда это обсудить.',
},
'Figurines': {
en: 'Figurines',
@@ -57,25 +57,37 @@ export const { t } = createKeyset({
en: 'Genshin Impact Pop! Aether (#160)',
ru: 'Genshin Impact Pop! Aether (#160)',
},
'Taito Lycoris Recoil Desktop Cute Figure - Takina Inoue (Roomwear Ver.)': {
en: 'Taito Lycoris Recoil Desktop Cute Figure - Takina Inoue (Roomwear Ver.)',
ru: 'Taito Lycoris Recoil Desktop Cute Figure - Takina Inoue (Roomwear Ver.)',
},
'Taito Lycoris Recoil Aqua Desktop Cute Figure - Chisato Nishikigi (Roomwear Ver.)': {
en: 'Taito Lycoris Recoil Aqua Desktop Cute Figure - Chisato Nishikigi (Roomwear Ver.)',
ru: 'Taito Lycoris Recoil Aqua Desktop Cute Figure - Chisato Nishikigi (Roomwear Ver.)',
},
'Qset+ Persona 5 The Royal P5R Protagonist Ren Amamiya 80mm Figure': {
en: 'Qset+ Persona 5 The Royal P5R Protagonist Ren Amamiya 80mm Figure',
ru: 'Qset+ Persona 5 The Royal P5R Protagonist Ren Amamiya 80mm Figure',
},
'LEGO Sets': {
en: 'LEGO Sets',
ru: 'Наборы LEGO',
},
'I appreciate sets that focus on engineering and make for good display pieces, like Architecture, Technic, or the Botanical collection. I generally lean away from traditional play-sets.': {
en: 'I appreciate sets that focus on engineering and make for good display pieces, like Architecture, Technic, or the Botanical collection. I generally lean away from traditional play-sets.',
ru: 'Я ценю наборы, ориентированные на инженерию, которые хорошо смотрятся на полке — например, Architecture, Technic или Botanical. Обычно я избегаю традиционных игровых наборов.',
ru: 'Я ценю наборы, ориентированные на инженерию, которые хорошо смотрятся на полке — например, Architecture, Technic или Botanical. Обычно я избегаю традиционных игровых наборов (friends, city, и другие подобные).',
},
'Architectural landmarks or skylines': {
en: 'Architectural landmarks or skylines',
ru: 'Архитектурные достопримечательности или панорамы',
ru: 'Архитектурные наборы',
},
'NASA and space exploration sets (like the Saturn V)': {
en: 'NASA and space exploration sets (like the Saturn V)',
ru: 'Наборы NASA и освоения космоса (например, Saturn V)',
'NASA and space exploration sets (like the #92176 Ideas NASA Apollo Saturn V)': {
en: 'NASA and space exploration sets (like the #92176 Ideas NASA Apollo Saturn V)',
ru: 'Наборы NASA и иные аэрокосмические (например, #92176 Ideas NASA Apollo Saturn V)',
},
'High-fidelity Technic vehicles': {
en: 'High-fidelity Technic vehicles',
ru: 'Высокодетализированная техника Technic',
ru: 'Technic и другие высокотехнические наборы',
},
'Already Owned': {
en: 'Already Owned',
@@ -187,6 +199,6 @@ export const { t } = createKeyset({
},
'Cast Iron Cube 10x10x10cm (just for the tactile density)': {
en: 'Cast Iron Cube 10x10x10cm (just for the tactile density)',
ru: 'Чугунный куб 10x10x10 см (просто ради тактильной плотности)',
ru: 'Чугунный куб 10x10x10 см (по приколу)',
},
});
+7 -2
View File
@@ -79,7 +79,12 @@ function WantedPage(): React.JSX.Element {
value: 'owned',
label: t('Already Owned'),
labelIcon: <Check size={18} />,
items: [t('Genshin Impact Pop! Aether (#160)')],
items: [
t('Genshin Impact Pop! Aether (#160)'),
t('Taito Lycoris Recoil Desktop Cute Figure - Takina Inoue (Roomwear Ver.)'),
t('Taito Lycoris Recoil Aqua Desktop Cute Figure - Chisato Nishikigi (Roomwear Ver.)'),
t('Qset+ Persona 5 The Royal P5R Protagonist Ren Amamiya 80mm Figure'),
],
},
]}
title={t('Figurines')}
@@ -100,7 +105,7 @@ function WantedPage(): React.JSX.Element {
labelIcon: <Gift size={18} />,
items: [
t('Architectural landmarks or skylines'),
t('NASA and space exploration sets (like the Saturn V)'),
t('NASA and space exploration sets (like the #92176 Ideas NASA Apollo Saturn V)'),
t('High-fidelity Technic vehicles'),
],
},
@@ -69,7 +69,7 @@ export function DefaultLayout({
caption={description}
heading={title ?? ''}
metadata={headerAddonLeft}
strategy={title ? 'collapsible-sticky' : 'always-collapsed-fixed'}
strategy={title ? 'collapsible-sticky' : 'always-collapsed-sticky'}
/>
<PageContainer
as="main"