Compare commits

...

4 Commits

@ -187,10 +187,10 @@
<QrCode size={20} />
{/if}
</a>
{#if shortener.ios || shortener.android}
{#if (shortener.ios && shortener.ios_link) || (shortener.android && shortener.android_link)}
<Separator orientation="vertical" class="hidden sm:block" />
{/if}
{#if shortener.ios}
{#if shortener.ios && shortener.ios_link}
<Tooltip.Root>
<Tooltip.Trigger class="hidden gap-2 sm:inline-flex">
<Badge variant="outline" class="flex gap-2">iOS</Badge>
@ -200,7 +200,7 @@
</Tooltip.Content>
</Tooltip.Root>
{/if}
{#if shortener.android}
{#if shortener.android && shortener.android_link}
<Tooltip.Root>
<Tooltip.Trigger class="hidden gap-2 sm:inline-flex">
<Badge variant="outline" class="flex gap-2">

@ -45,10 +45,11 @@
<h2 class="text-2xl font-bold tracking-tight">Pricing</h2>
<p class="text-muted-foreground">Checkout our pricings here.</p>
</div>
<Separator class="my-4 lg:my-6" />
<Separator class="mt-4 lg:mt-6" />
<ScrollArea>
<div class="flex w-full flex-wrap-reverse justify-center gap-8">
<div
class="flex w-full flex-wrap-reverse justify-center gap-8 pt-6">
<div class="flex w-[400px] gap-8 rounded-lg border p-8">
<div class="flex w-full flex-col gap-3 text-start">
<h2 class="text-2xl font-bold">Free</h2>

@ -18,6 +18,8 @@
export let qrImageBase64: string | null = null
export let isPro: boolean = false
let qrImageInput: HTMLInputElement
const form = superForm(data, {
validators: zodClient(formSchema),
invalidateAll: 'force',
@ -79,13 +81,54 @@
<Form.Label>
Image <span class="text-brand">(Pro)</span>
</Form.Label>
<Input
<div>
{#if !$formData.qrImage && !qrImageBase64}
<button
on:click={(e) => {
e.preventDefault()
qrImageInput.click()
}}>
<div
class="flex h-16 w-16 items-center justify-center rounded-lg border-4 border-dashed">
</div>
</button>
{:else}
<button
on:click={(e) => {
e.preventDefault()
qrImageInput.click()
}}>
<div
class="flex h-16 w-16 items-center justify-center rounded-lg">
<img
src={$formData.qrImage
? URL.createObjectURL($formData.qrImage)
: qrImageBase64}
alt={'image'}
width={64}
height={64} />
</div>
</button>
{/if}
</div>
<Form.Description>Click to edit</Form.Description>
<input
{...attrs}
hidden
bind:this={qrImageInput}
accept="image/png, image/jpeg"
type="file"
disabled={!isPro}
on:input={(e) =>
($formData.qrImage = e.currentTarget.files?.item(0))} />
on:input={(e) => {
const file = e.currentTarget.files?.item(0)
if (!file) return
if (file.size > 2097152) {
toast.error('Too Big! Max file size is 2MB')
return
}
$formData.qrImage = file
}} />
</Form.Control>
<Form.FieldErrors />
</Form.Field>
@ -180,7 +223,7 @@
</Button>
</div>
</Form.Field>
<Form.Button class="w-fit">
<Form.Button class="w-fit self-end">
{#if $submitting}
<LoaderCircle class="animate-spin" />
{/if}

@ -14,6 +14,7 @@ export const formSchema = z.object({
qrDotStyle: z.custom<'square' | 'rounded'>(),
qrImage: z
.instanceof(File, { message: 'Please upload a file' })
.refine((file) => file.size <= 2097152, `Max image size is 2MB.`)
.refine(
(file) =>
file.type === 'image/jpeg' || file.type === 'image/png',

@ -106,7 +106,7 @@
<Form.Description>Change Your Email</Form.Description>
<Form.FieldErrors />
</Form.Field>
<Form.Button class="w-fit">
<Form.Button class="w-fit self-end">
{#if $submitting}
<LoaderCircle class="animate-spin" />
{/if}

@ -14,6 +14,8 @@
export let data: PageData
let qrImageInput: HTMLInputElement
const form = superForm(data.form, {
validators: zodClient(formSchema),
invalidateAll: 'force',
@ -76,13 +78,51 @@
<Form.Label>
Image <span class="text-brand">(Pro)</span>
</Form.Label>
<Input
<div>
{#if !$formData.qrImage && !data.qrImageBase64}
<button
on:click={(e) => {
e.preventDefault()
qrImageInput.click()
}}>
<div
class="flex h-16 w-16 items-center justify-center rounded-lg border-4 border-dashed">
</div>
</button>
{:else}
<button
on:click={(e) => {
e.preventDefault()
qrImageInput.click()
}}>
<img
src={$formData.qrImage
? URL.createObjectURL($formData.qrImage)
: data.qrImageBase64}
alt={'image'}
width={64}
height={64} />
</button>
{/if}
</div>
<Form.Description>Click to edit</Form.Description>
<input
{...attrs}
hidden
bind:this={qrImageInput}
accept="image/png, image/jpeg"
type="file"
disabled={data.user.plan === 'free'}
on:input={(e) =>
($formData.qrImage = e.currentTarget.files?.item(0))} />
on:input={(e) => {
const file = e.currentTarget.files?.item(0)
if (!file) return
if (file.size > 2097152) {
toast.error('Too Big! Max file size is 2MB')
return
}
$formData.qrImage = file
}} />
</Form.Control>
<Form.FieldErrors />
</Form.Field>
@ -178,7 +218,7 @@
</div>
</Form.Field>
<Form.Button class="w-fit">
<Form.Button class="w-fit self-end">
{#if $submitting}
<LoaderCircle class="animate-spin" />
{/if}

@ -13,6 +13,7 @@ export const formSchema = z.object({
qrDotStyle: z.custom<'square' | 'rounded'>(),
qrImage: z
.instanceof(File, { message: 'Please upload a file' })
.refine((file) => file.size <= 2097152, `Max image size is 2MB.`)
.refine(
(file) =>
file.type === 'image/jpeg' || file.type === 'image/png',

@ -99,7 +99,7 @@
<Form.Description>Confirm New Password</Form.Description>
<Form.FieldErrors />
</Form.Field>
<Form.Button class="w-fit">
<Form.Button class="w-fit self-end">
{#if $submitting}
<LoaderCircle class="animate-spin" />
{/if}

Loading…
Cancel
Save