feat(ui): improve mobile responsive layouts

This commit is contained in:
CaIon
2026-04-30 19:53:02 +08:00
parent aa730395f1
commit d46df94f05
84 changed files with 1174 additions and 731 deletions
@@ -165,7 +165,7 @@ export function SubscriptionPurchaseDialog(props: Props) {
return (
<Dialog open={props.open} onOpenChange={props.onOpenChange}>
<DialogContent className='sm:max-w-md'>
<DialogContent className='max-sm:w-[calc(100vw-1.5rem)] sm:max-w-md'>
<DialogHeader>
<DialogTitle className='flex items-center gap-2'>
<Crown className='h-5 w-5' />
@@ -173,8 +173,8 @@ export function SubscriptionPurchaseDialog(props: Props) {
</DialogTitle>
</DialogHeader>
<div className='space-y-4'>
<div className='bg-muted/50 space-y-3 rounded-lg border p-4'>
<div className='space-y-3 sm:space-y-4'>
<div className='bg-muted/50 space-y-2.5 rounded-lg border p-3 sm:space-y-3 sm:p-4'>
<div className='flex justify-between'>
<span className='text-muted-foreground text-sm'>
{t('Plan Name')}
@@ -239,7 +239,7 @@ export function SubscriptionPurchaseDialog(props: Props) {
{t('Select payment method')}
</p>
{(hasStripe || hasCreem) && (
<div className='flex gap-2'>
<div className='grid grid-cols-2 gap-2 sm:flex'>
{hasStripe && (
<Button
variant='outline'
@@ -263,7 +263,7 @@ export function SubscriptionPurchaseDialog(props: Props) {
</div>
)}
{hasEpay && (
<div className='flex gap-2'>
<div className='grid grid-cols-[minmax(0,1fr)_auto] gap-2'>
<Select
value={selectedEpayMethod}
onValueChange={setSelectedEpayMethod}
@@ -124,8 +124,8 @@ export function SubscriptionsMutateDrawer({
}
}}
>
<SheetContent className='flex w-full flex-col sm:max-w-[600px]'>
<SheetHeader className='text-start'>
<SheetContent className='flex h-dvh w-full flex-col gap-0 overflow-hidden p-0 sm:max-w-[600px]'>
<SheetHeader className='border-b px-4 py-3 text-start sm:px-6 sm:py-4'>
<SheetTitle>
{isEdit ? t('Update plan info') : t('Create new subscription plan')}
</SheetTitle>
@@ -141,7 +141,7 @@ export function SubscriptionsMutateDrawer({
<form
id='subscription-form'
onSubmit={form.handleSubmit(onSubmit)}
className='flex-1 space-y-6 overflow-y-auto px-4'
className='flex-1 space-y-4 overflow-y-auto px-3 py-3 pb-4 sm:space-y-6 sm:px-4'
>
{/* Basic Info */}
<div className='space-y-4'>
@@ -181,7 +181,7 @@ export function SubscriptionsMutateDrawer({
)}
/>
<div className='grid grid-cols-2 gap-3'>
<div className='grid grid-cols-1 gap-3 sm:grid-cols-2'>
<FormField
control={form.control}
name='price_amount'
@@ -229,7 +229,7 @@ export function SubscriptionsMutateDrawer({
/>
</div>
<div className='grid grid-cols-2 gap-3'>
<div className='grid grid-cols-1 gap-3 sm:grid-cols-2'>
<FormField
control={form.control}
name='upgrade_group'
@@ -288,7 +288,7 @@ export function SubscriptionsMutateDrawer({
/>
</div>
<div className='grid grid-cols-2 gap-3'>
<div className='grid grid-cols-1 gap-3 sm:grid-cols-2'>
<FormField
control={form.control}
name='sort_order'
@@ -336,7 +336,7 @@ export function SubscriptionsMutateDrawer({
{t('Duration Settings')}
</h3>
<div className='grid grid-cols-2 gap-3'>
<div className='grid grid-cols-1 gap-3 sm:grid-cols-2'>
<FormField
control={form.control}
name='duration_unit'
@@ -418,7 +418,7 @@ export function SubscriptionsMutateDrawer({
{t('Quota Reset')}
</h3>
<div className='grid grid-cols-2 gap-3'>
<div className='grid grid-cols-1 gap-3 sm:grid-cols-2'>
<FormField
control={form.control}
name='quota_reset_period'
@@ -508,7 +508,7 @@ export function SubscriptionsMutateDrawer({
</div>
</form>
</Form>
<SheetFooter className='gap-2'>
<SheetFooter className='grid grid-cols-2 gap-2 border-t px-4 py-3 sm:flex sm:px-6 sm:py-4'>
<SheetClose asChild>
<Button variant='outline'>{t('Close')}</Button>
</SheetClose>
@@ -62,7 +62,7 @@ export function SubscriptionsTable() {
return (
<>
<div className='space-y-4'>
<div className='space-y-3 sm:space-y-4'>
{isMobile ? (
<MobileCardList
table={table}