Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
92 commits
Select commit Hold shift + click to select a range
c38c939
refactor: tailwind setting migration
sumi-0011 Jan 14, 2026
bfb5740
feat: landing 페이지 개선
sumi-0011 Jan 14, 2026
e6a0d2c
feat: custom token error fix
sumi-0011 Jan 14, 2026
9875ff1
refactor: ui panda 참조 제거
sumi-0011 Jan 14, 2026
fac5c95
fix: dialog 수정
sumi-0011 Jan 14, 2026
91aff0f
feat: tailwind 패키지 스토리북 추가
sumi-0011 Jan 14, 2026
33ade45
feat: text-glyph-* 유틸리티에 Product Sans fontFamily 자동 적용 플러그인 추가
sumi-0011 Mar 12, 2026
4f94218
Merge branch 'main' into dev
Mar 30, 2026
6b958ea
Merge branch 'dev' into chore/tailwind-mi
Mar 30, 2026
7708797
fix: ui-tailwind Dialog에 TopSlot, Body, scrollable 추가 및 ConfirmDialog 생성
Mar 30, 2026
89a2461
Merge branch 'chore/tailwind-mi' into feat/tailwind-storybook
Mar 30, 2026
361962d
fix: exclude stories files from ui-tailwind type-check
Mar 30, 2026
16ad68c
fix: layout fix
Mar 30, 2026
f612c68
docs: my-pet 페이지 동작 정리 및 진화 모달 미사용 코드 제거
sumi-0011 Mar 31, 2026
6dc0fab
refactor: PersonaListToolbar를 ui-tailwind SearchBar·Select로 전환 (Panda…
sumi-0011 Mar 31, 2026
c0e3735
refactor: PersonaItem을 ui-tailwind Banner·LevelBanner로 전환 (Panda 제거)
sumi-0011 Mar 31, 2026
a15ee67
fix: 판매 확인 Dialog 푸터 버튼 겹침 (flex 레이아웃)
sumi-0011 Mar 31, 2026
d62b8dd
refactor: FSD-inspired 하이브리드 폴더 구조로 apps/web 리팩토링
sumi-0011 Mar 31, 2026
b707ea2
docs: FSD 아키텍처 가이드 문서 및 Cursor rule 추가
sumi-0011 Mar 31, 2026
97d85c6
fix: next-intl i18n request 경로를 shared/i18n/으로 수정
sumi-0011 Mar 31, 2026
09d4264
fix: i18n messages 동적 import 상대 경로 수정
sumi-0011 Mar 31, 2026
c2a9856
Merge branch 'dev' into feat/tailwind-dev
sumi-0011 Apr 1, 2026
827ac67
refactor: Spring 랜딩 페이지 PandaCSS → Tailwind CSS 마이그레이션
sumi-0011 Apr 1, 2026
da3a83b
fix: cherry-blossom 데모 PandaCSS 제거 및 SelectPersonaList 중복 함수 수정
sumi-0011 Apr 1, 2026
0ecb98d
refactor: ConfirmDialog/AlertDialog를 ui-tailwind 공통 컴포넌트로 승격
sumi-0011 Apr 1, 2026
955369a
refactor: 미사용 InterceptingDialog 컴포넌트 삭제
sumi-0011 Apr 1, 2026
cf4ac6b
refactor: RouteModal에 gap prop 추가 (InterceptingDialog 통합)
sumi-0011 Apr 1, 2026
48b7d34
feat: ConfirmDialog, AlertDialog 스토리북 스토리 추가
sumi-0011 Apr 1, 2026
e8645da
feat: Chromatic 스토리북 배포 설정 추가
sumi-0011 Apr 1, 2026
da42fc8
refactor: ConfirmDialog/AlertDialog 스토리 기본 열림 상태로 변경
sumi-0011 Apr 1, 2026
1c6fa3c
refactor: AlertDialog 디자인을 ConfirmDialog와 동일하게 통일
sumi-0011 Apr 1, 2026
4a89d78
fix: button reset의 border: transparent가 Tailwind border 유틸리티 무효화하는 문제 수정
sumi-0011 Apr 1, 2026
4a87860
feat: DialogV2 core - size context + responsive content variants
sumi-0011 Apr 1, 2026
f7457d6
feat: AlertDialogV2, ConfirmDialogV2 - size prop 지원
sumi-0011 Apr 1, 2026
808c648
feat: DialogV2 컴포넌트 export 추가
sumi-0011 Apr 1, 2026
300623e
feat: DialogV2 스토리북 - SM/MD/LG/Full 사이즈 스토리
sumi-0011 Apr 1, 2026
8ddf75b
feat: AlertDialogV2, ConfirmDialogV2 스토리북 스토리 추가
sumi-0011 Apr 1, 2026
b6a06af
feat: DialogV2Body에 ScrollArea 적용
sumi-0011 Apr 1, 2026
cdb8787
feat: ScrollArea 스토리북 스토리 추가
sumi-0011 Apr 1, 2026
1a5addb
fix: DialogV2Body에 min-h-0 추가하여 flex 내 ScrollArea 스크롤 동작 보장
sumi-0011 Apr 1, 2026
436f7b1
fix: ScrollArea에 horizontal ScrollBar 추가
sumi-0011 Apr 1, 2026
7df6960
fix: apps/web에서 삭제된 panda codegen prepare/prebuild 스크립트 제거
sumi-0011 Apr 1, 2026
9233ad7
fix: apps/web에서 삭제된 panda codegen prepare/prebuild 스크립트 제거
sumi-0011 Apr 1, 2026
180d170
Merge branch 'feat/tailwind-dev' into feat/ui-checkbox
sumi-0011 Apr 1, 2026
cf3ea08
refactor: AlertDialog/ConfirmDialog를 V2로 대체
sumi-0011 Apr 1, 2026
56d64ab
feat: FarmPersonaSelect에 Embla 캐러셀 인벤토리 그리드 적용
sumi-0011 Apr 1, 2026
2cd72a8
refactor: InventoryGrid row/col을 컨테이너 크기에 따라 자동 계산
sumi-0011 Apr 2, 2026
3a70e06
fix: useInventoryGrid 컨테이너 크기 변경 시에만 재계산하도록 최적화
sumi-0011 Apr 2, 2026
c16b6c7
fix: InventoryGrid 깜빡임 해결 - 센서 div 분리 + rAF 적용
sumi-0011 Apr 2, 2026
c67ef20
fix: InventoryGrid 측정 완료 후 렌더 + DialogV2.Body 수평 스크롤 제한
sumi-0011 Apr 2, 2026
664b03c
fix: InventoryGrid 수평 넘침 해결 + 뷰포트 기반 행 계산
sumi-0011 Apr 2, 2026
2515536
fix: dialog 모드 뷰포트 비율 0.5→0.75, maxRows 기본값 5→10
sumi-0011 Apr 2, 2026
1c17e26
feat: DialogV2.Body에 scroll 옵션 추가
sumi-0011 Apr 2, 2026
76c8fcb
fix: dialog 행 수 계산에서 크롬 높이(제목+검색+필터+여백) 차감
sumi-0011 Apr 2, 2026
be3359e
fix: 실제 아이템 높이를 측정하여 행 수 계산 정확도 개선
sumi-0011 Apr 2, 2026
b6d3a16
fix: 그리드에 명시적 높이 부여하여 슬라이드 간 넘침 방지
sumi-0011 Apr 2, 2026
c02bf7c
refactor: AlertDialog/ConfirmDialog를 FlatDialog로 교체 + UI 개선
sumi-0011 Apr 2, 2026
d2a30bc
refactor: dot 네비게이션 최대 5개 제한 (슬라이딩 윈도우)
sumi-0011 Apr 2, 2026
5ec51b4
fix: 검색 필터 변경 시 캐러셀 첫 페이지로 리셋
sumi-0011 Apr 2, 2026
f439d41
fix: 캐러셀 reInit 시 아이템 높이 0 측정되면 minItemSize로 폴백
sumi-0011 Apr 2, 2026
cfde506
fix: reInit 중 컨테이너 폭 비정상 측정 시 cols/rows 업데이트 방지
sumi-0011 Apr 2, 2026
4e93042
Merge origin/dev into refactor/dialog
sumi-0011 Apr 2, 2026
c73d07c
chore: add .worktrees to .gitignore
sumi-0011 Apr 2, 2026
2204a86
docs: Dialog V2 마이그레이션 TODO 문서 추가
sumi-0011 Apr 2, 2026
e9d660e
refactor: OnePet Dialog v1 → DialogV2 마이그레이션
sumi-0011 Apr 2, 2026
bdd1bee
refactor: TenPet Dialog v1 → DialogV2 마이그레이션
sumi-0011 Apr 2, 2026
80959ef
refactor: EditModal Dialog v1 → DialogV2 마이그레이션
sumi-0011 Apr 2, 2026
56ed1aa
refactor: SellInputRow Dialog v1 → DialogV2 마이그레이션
sumi-0011 Apr 2, 2026
f1bbc03
refactor: PersonaSearch Dialog v1 → DialogV2 마이그레이션
sumi-0011 Apr 2, 2026
0d6a24f
refactor: CompleteAlertDialog Dialog v1 → DialogV2 마이그레이션
sumi-0011 Apr 2, 2026
23850eb
refactor: FailAlertDialog Dialog v1 → DialogV2 마이그레이션
sumi-0011 Apr 2, 2026
13006a5
refactor: CorrectConfirmDialog Dialog v1 → DialogV2 마이그레이션
sumi-0011 Apr 2, 2026
5c1d953
refactor: EvolutionPersona CommonDialog → DialogV2 마이그레이션
sumi-0011 Apr 2, 2026
774e22b
refactor: MergePersona CommonDialog → DialogV2 마이그레이션
sumi-0011 Apr 2, 2026
6ad1929
refactor: LinePersonaSelect Dialog v1 → DialogV2 마이그레이션
sumi-0011 Apr 2, 2026
d3343fc
refactor: RouteModal Dialog v1 → DialogV2 마이그레이션
sumi-0011 Apr 2, 2026
471d132
refactor: ui-tailwind를 Compiled → Internal Packages 패턴으로 전환
sumi-0011 Apr 2, 2026
63c9b1c
refactor: MergePersona DialogV2 size lg → full로 변경
sumi-0011 Apr 2, 2026
6ac2645
refactor: raw input을 TextField 컴포넌트로 교체 및 storybook 스크립트 간소화
sumi-0011 Apr 2, 2026
b43c825
refactor: Input 컴포넌트를 FeedbackForm으로 인라인 이동
sumi-0011 Apr 2, 2026
c9bc53f
refactor: MergePersona에 PersonaList의 compound SelectPersonaList 적용
sumi-0011 Apr 2, 2026
9bdcfef
refactor: mypage 레이아웃 뷰포트 높이 제한 및 my-pet InventoryGrid 적용
sumi-0011 Apr 2, 2026
433d4db
fix: InventoryGrid inline 모드에서 컨테이너 위치 기반 높이 계산
sumi-0011 Apr 2, 2026
954c03a
fix: InventoryGrid inline 높이를 overflow-hidden 부모 기준으로 계산
sumi-0011 Apr 2, 2026
e0807d1
fix: InventoryGrid 부모 paddingBottom 차감하여 높이 정확도 개선
sumi-0011 Apr 2, 2026
62f5b39
fix: InventoryGrid nav mb-2를 부모 gap-2로 이동, NAV_HEIGHT 보정
sumi-0011 Apr 2, 2026
c495c23
fix: InventoryGrid inline 높이를 CSS flex 체인 + clientHeight로 계산
sumi-0011 Apr 2, 2026
42bc176
style: BannerPersonaItem에 h-full 추가하여 그리드 셀 꽉 채우기
sumi-0011 Apr 2, 2026
0058be7
style: BannerPersonaItem을 항상 정사각형으로 유지 (aspect-square)
sumi-0011 Apr 2, 2026
b9a3d8b
fix: InventoryGrid rowHeight를 컬럼 너비 기반으로 계산 (aspect-square 대응)
sumi-0011 Apr 2, 2026
8cdde70
refactor: LinePersonaSelect Grid → InventoryGrid 캐러셀 적용
sumi-0011 Apr 2, 2026
d8aa267
merge: origin/dev 병합 및 충돌 해결
sumi-0011 Apr 3, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import React, { useState } from 'react';
import { useTranslations } from 'next-intl';
import { cn } from '@gitanimals/ui-tailwind';
import { DialogV2, ScrollArea } from '@gitanimals/ui-tailwind';
import { DialogV2 } from '@gitanimals/ui-tailwind';
import { ExpandIcon } from 'lucide-react';

import { SelectPersonaList } from '../PersonaList';
Expand Down Expand Up @@ -31,25 +31,25 @@ export const LinePersonaSelect = ({ selectPersona, onChangePersona }: Props) =>
<ExpandIcon color="white" size={20} />
</button>
</section>
<ScrollArea className="h-40">
<SelectPersonaList
selectPersona={selectPersona ? [selectPersona] : []}
onSelectPersona={(persona) => onChangePersona(persona.id)}
/>
</ScrollArea>
<SelectPersonaList
selectPersona={selectPersona ? [selectPersona] : []}
onSelectPersona={(persona) => onChangePersona(persona.id)}
>
<SelectPersonaList.InventoryGrid minRows={2} maxRows={3} />
</SelectPersonaList>
<DialogV2 open={isExtend} onOpenChange={() => setIsExtend(false)}>
<DialogV2.Content size="lg">
<DialogV2.Content size="lg" className="h-full">
<DialogV2.CloseButton />
<DialogV2.Header>
<DialogV2.Title>{t('line-type-select-pet')}</DialogV2.Title>
</DialogV2.Header>
<SelectPersonaList
selectPersona={selectPersona ? [selectPersona] : []}
onSelectPersona={(persona) => onChangePersona(persona.id)}
>
<SelectPersonaList.Toolbar showSearch />
<DialogV2.Body>
<SelectPersonaList.Grid />
<DialogV2.Header>
<DialogV2.Title>{t('line-type-select-pet')}</DialogV2.Title>
<SelectPersonaList.Toolbar showSearch />
</DialogV2.Header>
<DialogV2.Body scroll={false} className="h-full flex-1">
<SelectPersonaList.InventoryGrid minRows={2} mode="dialog" />
</DialogV2.Body>
</SelectPersonaList>
</DialogV2.Content>
Expand Down
33 changes: 21 additions & 12 deletions apps/web/src/app/[locale]/mypage/PersonaList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -101,10 +101,9 @@ function Grid() {
// ─── InventoryGrid (Embla carousel + dynamic grid) ─────────────────

const MAX_DOTS = 5;
const NAV_HEIGHT = 44; // arrows + dots bar
const NAV_HEIGHT = 40; // arrows(24px) + gap(8px)
/** 다이얼로그 크롬: 제목(50) + 검색(40) + 필터(40) + 패딩/갭(30) + nav(44) */
const DIALOG_CHROME_HEIGHT = 204;
const INLINE_CHROME_HEIGHT = NAV_HEIGHT;

function useInventoryGrid(
totalItems: number,
Expand Down Expand Up @@ -134,17 +133,27 @@ function useInventoryGrid(
if (width < minItemSize * 2) return;
const nextCols = Math.max(Math.floor((width + gap) / (minItemSize + gap)), 1);

// rows: 뷰포트 높이에서 크롬 높이를 뺀 가용 영역 기반
// 실제 아이템 높이를 측정하여 정확한 행 수 계산
const firstItem = el.querySelector('[class*="grid"] > button');
const measuredHeight = firstItem ? firstItem.getBoundingClientRect().height : 0;
const itemHeight = measuredHeight > 0 ? measuredHeight : minItemSize;
// rows: 가용 높이 기반. 아이템이 aspect-square이므로 컬럼 너비 = 아이템 높이
const colWidth = (width - (nextCols - 1) * gap) / nextCols;
const itemHeight = colWidth;
const rowHeight = itemHeight + gap;

const vh = window.innerHeight;
const chrome = mode === 'dialog' ? DIALOG_CHROME_HEIGHT : INLINE_CHROME_HEIGHT;
const dialogHeight = mode === 'dialog' ? vh * 0.9 : vh;
const availableHeight = dialogHeight - chrome;
let availableHeight: number;
if (mode === 'dialog') {
availableHeight = vh * 0.9 - DIALOG_CHROME_HEIGHT;
} else {
// inline: 컨테이너에 flex-1 min-h-0이 설정되어 있으므로
// clientHeight가 부모 flex에 의해 제한된 실제 높이
const containerHeight = el.clientHeight;
if (containerHeight > 0) {
availableHeight = containerHeight - NAV_HEIGHT;
} else {
// 초기 렌더링 시 높이가 0일 수 있음 → fallback
const rect = el.getBoundingClientRect();
availableHeight = vh - rect.top - NAV_HEIGHT;
}
}
const nextRows =
availableHeight > 0 ? Math.min(Math.max(Math.floor(availableHeight / rowHeight), minRows), maxRows) : minRows;

Expand Down Expand Up @@ -225,11 +234,11 @@ function InventoryGrid({ minRows = 2, maxRows = 10, minItemSize = 64, gap = 4, m
}

return (
<div ref={containerRef} className="overflow-hidden">
<div ref={containerRef} className="overflow-hidden flex flex-col gap-2 flex-1 min-h-0">
{!ready ? null : (
<>
{/* Navigation: arrows left, dots right */}
<div className="flex mb-2 justify-between items-center">
<div className="flex justify-between items-center">
<div className="flex gap-[10px]">
<PrevButton onClick={onPrevButtonClick} disabled={prevBtnDisabled} className="w-6 h-6" />
<NextButton onClick={onNextButtonClick} disabled={nextBtnDisabled} className="w-6 h-6" />
Expand Down
6 changes: 3 additions & 3 deletions apps/web/src/app/[locale]/mypage/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ async function MypageLayout({ children }: { children: React.ReactNode }) {
<ProfileSection />
<div
className={cn(
'overflow-x-hidden w-full rounded-2xl',
'bg-white/10 backdrop-blur-[7px] max-h-[1400px]',
'overflow-hidden w-full rounded-2xl',
'bg-white/10 backdrop-blur-[7px] max-h-[calc(100vh-300px)]',
'p-10 flex flex-col relative gap-10',
'max-pc:gap-6 max-pc:p-6',
'max-pc:max-h-[calc(100vh-124px)] max-pc:gap-6 max-pc:p-6',
'max-mobile:gap-3 max-mobile:bg-transparent max-mobile:p-0',
'max-mobile:max-h-none max-mobile:h-auto max-mobile:overflow-y-auto max-mobile:rounded-none',
)}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { useQueryClient } from '@tanstack/react-query';

import { useClientSession } from '@/shared/utils/clientAuth';

import { SelectPersonaList } from '../_components/SelectPersonaList';
import { SelectPersonaList } from '../../PersonaList';
import { SpinningLoader } from '../_components/SpinningLoader';

import { MergePreview } from './MergePreview';
Expand Down Expand Up @@ -72,9 +72,14 @@ export function MergePersona({ isOpen, onClose, targetPersona: initTargetPersona
</DialogV2.Header>
<MergePreview targetPersona={targetPersona} materialPersona={materialPersona} />

<DialogV2.Body>
<SelectPersonaList selectPersona={selectPersona} onSelectPersona={onSelectPersona} />
</DialogV2.Body>
<SelectPersonaList selectPersona={selectPersona} onSelectPersona={onSelectPersona}>
<SelectPersonaList.Toolbar showSearch />

<DialogV2.Body scroll={false} className="h-full flex-1">
<SelectPersonaList.InventoryGrid minRows={2} mode="dialog" />
</DialogV2.Body>
</SelectPersonaList>


<DialogV2.Footer className="justify-center">
<Button variant="secondary" onClick={onClose}>
Expand Down

This file was deleted.

25 changes: 11 additions & 14 deletions apps/web/src/app/[locale]/mypage/my-pet/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import { useCallback, useState } from 'react';
import { useTranslations } from 'next-intl';
import { type Persona } from '@gitanimals/api';
import { cn } from '@gitanimals/ui-tailwind';
import { ScrollArea } from '@gitanimals/ui-tailwind';

import { SelectPersonaList } from '../PersonaList';

Expand All @@ -19,28 +18,26 @@ function MypageMyPets() {
}, []);

return (
<div className="flex flex-col">
<div className="flex flex-col h-full min-h-0">
<SelectedPetTable currentPersona={selectPersona} reset={() => setSelectPersona(null)} />
<section
className={cn(
'relative',
'relative flex-1 min-h-0 flex flex-col',
'[&_.heading]:font-product [&_.heading]:text-glyph-18 [&_.heading]:font-bold',
'[&_.heading]:text-white [&_.heading]:mb-4',
)}
>
<h2 className="heading">{t('pet-list')}</h2>

<ScrollArea className="h-[calc(100vh-424px)]">
<SelectPersonaList
selectPersona={selectPersona ? [selectPersona.id] : []}
onSelectPersona={(persona) => setSelectPersona(persona)}
initSelectPersonas={initSelectPersonas}
isSpecialEffect
>
<SelectPersonaList.Toolbar showSearch showEvolvableFilter />
<SelectPersonaList.Grid />
</SelectPersonaList>
</ScrollArea>
<SelectPersonaList
selectPersona={selectPersona ? [selectPersona.id] : []}
onSelectPersona={(persona) => setSelectPersona(persona)}
initSelectPersonas={initSelectPersonas}
isSpecialEffect
>
<SelectPersonaList.Toolbar showSearch showEvolvableFilter />
<SelectPersonaList.InventoryGrid minRows={2} mode="inline" />
</SelectPersonaList>
</section>

<p
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import React, { useState } from 'react';
import { useTranslations } from 'next-intl';
import { auctionQueries, useChangeProductPrice, useDeleteProduct, userQueries } from '@gitanimals/react-query';
import { cn } from '@gitanimals/ui-tailwind';
import { Button, DialogV2 } from '@gitanimals/ui-tailwind';
import { Button, DialogV2, TextField } from '@gitanimals/ui-tailwind';
import { useQueryClient } from '@tanstack/react-query';
import { toast } from 'sonner';

Expand Down Expand Up @@ -63,12 +63,12 @@ function EditModal({ isOpen, onClose, productId }: { isOpen: boolean; onClose: (
<DialogV2.Header>
<DialogV2.Title className={titleStyle}>{t('edit-product')}</DialogV2.Title>
</DialogV2.Header>
<input
className={inputStyle}
<TextField
placeholder="Type price..."
type="number"
value={Boolean(price) ? price : ''}
onChange={(e) => setPrice(Number(e.target.value))}
className="[&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-inner-spin-button]:m-0"
/>
<DialogV2.Footer>
<Button onClick={onSave} variant="secondary" size="m">
Expand All @@ -86,14 +86,3 @@ function EditModal({ isOpen, onClose, productId }: { isOpen: boolean; onClose: (
export default EditModal;

const titleStyle = cn('font-product text-glyph-20 text-left text-white w-full');

const inputStyle = cn(
'flex h-[55px] py-3.5 pl-5 pr-3.5',
'items-start gap-2 w-full outline-none',
'rounded-lg border border-white/25',
'font-product text-glyph-16 text-white',
'placeholder:text-glyph-16 placeholder:text-white/75',
'[&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-inner-spin-button]:m-0',
);

const buttonWrapperStyle = cn('flex justify-end gap-2 w-full');
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { useTranslations } from 'next-intl';
import type { Persona } from '@gitanimals/api';
import useIsMobile from '@gitanimals/react/src/hooks/useIsMobile/useIsMobile';
import { auctionQueries, userQueries } from '@gitanimals/react-query';
import { Button, DialogV2 } from '@gitanimals/ui-tailwind';
import { Button, DialogV2, TextField } from '@gitanimals/ui-tailwind';
import { cn } from '@gitanimals/ui-tailwind/utils';
import { snakeToTitleCase } from '@gitanimals/util-common';
import { useQueryClient } from '@tanstack/react-query';
Expand Down Expand Up @@ -112,11 +112,10 @@ function SellInputRow({ item, initPersona }: Props) {
<div>{ANIMAL_TIER_TEXT_MAP[personaTier]}</div>
<div>{item.level}</div>
<div>
<input
<TextField
className={cn(
'font-product text-glyph-20',
'w-full h-full min-h-16 text-xl font-bold',
'border-none outline-none',
'text-glyph-20 text-xl font-bold',
'h-full min-h-16 border-none',
'placeholder:text-glyph-20 placeholder:text-white/25',
'[&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-inner-spin-button]:m-0',
)}
Expand Down Expand Up @@ -156,19 +155,12 @@ function SellPriceModal({
<DialogV2.Header>
<DialogV2.Title>{t('sell-price-modal-title')}</DialogV2.Title>
</DialogV2.Header>
<input
className={cn(
'flex h-[55px] py-3.5 pl-5 pr-3.5',
'items-start gap-2 w-full outline-none',
'rounded-lg border border-white/25',
'font-product text-glyph-16 text-white',
'placeholder:text-glyph-16 placeholder:text-white/75',
'[&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-inner-spin-button]:m-0',
)}
<TextField
placeholder="Type price..."
type="number"
value={Boolean(sellPrice) ? sellPrice : ''}
onChange={(e) => setSellPrice(Number(e.target.value))}
className="[&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-inner-spin-button]:m-0"
/>
<DialogV2.Footer>
<Button onClick={onClose} variant="secondary" size="m">
Expand Down
19 changes: 18 additions & 1 deletion apps/web/src/components/Global/FeedbackForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ import { useState } from 'react';
import Image from 'next/image';
import { XIcon } from '@gitanimals/ui-icon';
import { Button } from '@gitanimals/ui-tailwind';
import { cn } from '@gitanimals/ui-tailwind/utils';
import { toast } from 'sonner';

import { usePostFeedback } from '@/features/feedback/model/usePostFeedback';
import type { PostIssueRequest } from '@/features/feedback/model/usePostIssue';
import Input from '@/components/Input';
import Select from '@/components/Select';
import TextArea from '@/components/TextArea';
import type { GithubIssueType } from '@/shared/config/github';
Expand Down Expand Up @@ -152,6 +152,23 @@ const useFeedbackContent = () => {
return { content, onContentChange, isValid, initContent };
};

function Input(props: React.ComponentProps<'input'>) {
return (
<input
{...props}
className={cn(
'border border-black/10 bg-transparent text-black/75',
'py-[14px] pb-[13px] pl-5 pr-[14px]',
'font-product text-glyph-16',
'rounded-lg outline-none w-full',
'focus:border-[#00894d]',
'placeholder:text-black/50 placeholder:font-product placeholder:text-glyph-16',
props.className,
)}
/>
);
}

function LabelSelect({ onChange }: { onChange: (value: string[]) => void }) {
return (
<Select>
Expand Down
Loading
Loading