mirror of
https://github.com/supabase/supabase.git
synced 2026-05-08 01:40:13 -04:00
56de26fe22
This PR migrates the whole monorepo to use Tailwind v4: - Removed `@tailwindcss/container-queries` plugin since it's included by default in v4, - Bump all instances of Tailwind to v4. Made minimal changes to the shared config to remove non-supported features (`alpha` mentions), - Migrate all apps to be compatible with v4 configs, - Fix the `typography.css` import in 3 apps, - Add missing rules which were included by default in v3, - Run `pnpm dlx @tailwindcss/upgrade` on all apps, which renames a lot of classes - Rename all misnamed classes according to https://tailwindcss.com/docs/upgrade-guide#renamed-utilities in all apps. --------- Co-authored-by: Jordi Enric <jordi.err@gmail.com>
130 lines
4.6 KiB
TypeScript
130 lines
4.6 KiB
TypeScript
// End of third-party imports
|
|
|
|
import { CLIENT_LIBRARIES } from 'common/constants'
|
|
import { ExternalLink } from 'lucide-react'
|
|
import Link from 'next/link'
|
|
import type { UseFormReturn } from 'react-hook-form'
|
|
import {
|
|
Button,
|
|
cn,
|
|
FormControl,
|
|
FormField,
|
|
Select_Shadcn_,
|
|
SelectContent_Shadcn_,
|
|
SelectGroup_Shadcn_,
|
|
SelectItem_Shadcn_,
|
|
SelectTrigger_Shadcn_,
|
|
SelectValue_Shadcn_,
|
|
} from 'ui'
|
|
import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout'
|
|
|
|
import type { ExtendedSupportCategories } from './Support.constants'
|
|
import type { SupportFormValues } from './SupportForm.schema'
|
|
import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled'
|
|
|
|
interface ClientLibraryInfoProps {
|
|
form: UseFormReturn<SupportFormValues>
|
|
category: ExtendedSupportCategories
|
|
library: string | undefined
|
|
}
|
|
|
|
export function ClientLibraryInfo({ form, category, library }: ClientLibraryInfoProps) {
|
|
const showClientLibraries = useIsFeatureEnabled('support:show_client_libraries')
|
|
|
|
if (!showClientLibraries) return null
|
|
if (category !== 'Problem') return null
|
|
|
|
return (
|
|
<div className="flex flex-col gap-y-1">
|
|
<FormField
|
|
name="library"
|
|
control={form.control}
|
|
render={({ field }) => (
|
|
<FormItemLayout layout="vertical" label="Which library are you having issues with">
|
|
<FormControl>
|
|
<Select_Shadcn_ {...field} defaultValue={field.value} onValueChange={field.onChange}>
|
|
<SelectTrigger_Shadcn_ className="w-full" aria-label="Select a library">
|
|
<SelectValue_Shadcn_ placeholder="Select a library" />
|
|
</SelectTrigger_Shadcn_>
|
|
<SelectContent_Shadcn_>
|
|
<SelectGroup_Shadcn_>
|
|
{CLIENT_LIBRARIES.map((option) => (
|
|
<SelectItem_Shadcn_ key={option.language} value={option.language}>
|
|
{option.language}
|
|
</SelectItem_Shadcn_>
|
|
))}
|
|
</SelectGroup_Shadcn_>
|
|
</SelectContent_Shadcn_>
|
|
</Select_Shadcn_>
|
|
</FormControl>
|
|
</FormItemLayout>
|
|
)}
|
|
/>
|
|
{library && library.length > 0 && <LibrarySuggestions library={library} />}
|
|
</div>
|
|
)
|
|
}
|
|
|
|
interface LibrarySuggestionsProps {
|
|
library: string
|
|
}
|
|
|
|
const LibrarySuggestions = ({ library }: LibrarySuggestionsProps) => {
|
|
const selectedLibrary = CLIENT_LIBRARIES.find((lib) => lib.language === library)
|
|
const selectedClientLibraries = selectedLibrary?.libraries.filter((library) =>
|
|
library.name.includes('supabase-')
|
|
)
|
|
return (
|
|
<div className="flex flex-col gap-y-4">
|
|
<div className="space-y-2">
|
|
<p className="text-sm text-foreground-light">
|
|
Found an issue or a bug? Try searching our GitHub issues or submit a new one.
|
|
</p>
|
|
</div>
|
|
<div className="flex items-center space-x-4 overflow-x-auto">
|
|
{selectedClientLibraries?.map((lib) => {
|
|
const libraryLanguage = library === 'Dart (Flutter)' ? lib.name.split('-')[1] : library
|
|
return (
|
|
<div
|
|
key={lib.name}
|
|
className="w-[230px] min-w-[230px] min-h-[128px] rounded-sm border border-control bg-surface-100 space-y-3 px-4 py-3"
|
|
>
|
|
<div className="space-y-1">
|
|
<p className="text-sm">{lib.name}</p>
|
|
<p className="text-sm text-foreground-light">
|
|
For issues regarding the {libraryLanguage} client library
|
|
</p>
|
|
</div>
|
|
<div>
|
|
<Button asChild type="default" icon={<ExternalLink size={14} strokeWidth={1.5} />}>
|
|
<Link href={lib.url} target="_blank" rel="noreferrer">
|
|
View GitHub issues
|
|
</Link>
|
|
</Button>
|
|
</div>
|
|
</div>
|
|
)
|
|
})}
|
|
<div
|
|
className={cn(
|
|
'px-4 py-3 rounded-sm border border-control bg-surface-100',
|
|
'w-[230px] min-w-[230px] min-h-[128px] flex flex-col justify-between space-y-3'
|
|
)}
|
|
>
|
|
<div className="space-y-1">
|
|
<p className="text-sm">supabase</p>
|
|
<p className="text-sm text-foreground-light">For any issues about our API</p>
|
|
</div>
|
|
<div>
|
|
<Button asChild type="default" icon={<ExternalLink size={14} strokeWidth={1.5} />}>
|
|
<Link href="https://github.com/supabase/supabase" target="_blank" rel="noreferrer">
|
|
View GitHub issues
|
|
</Link>
|
|
</Button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|