Compare commits

..

No commits in common. '580818107d36c6f0e14c653e58fd80788b776052' and '18abdd3f7f6d6a1c2b13394d47dec8aa2043f71a' have entirely different histories.

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

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

@ -18,8 +18,6 @@
export let qrImageBase64: string | null = null export let qrImageBase64: string | null = null
export let isPro: boolean = false export let isPro: boolean = false
let qrImageInput: HTMLInputElement
const form = superForm(data, { const form = superForm(data, {
validators: zodClient(formSchema), validators: zodClient(formSchema),
invalidateAll: 'force', invalidateAll: 'force',
@ -81,54 +79,13 @@
<Form.Label> <Form.Label>
Image <span class="text-brand">(Pro)</span> Image <span class="text-brand">(Pro)</span>
</Form.Label> </Form.Label>
<div> <Input
{#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} {...attrs}
hidden
bind:this={qrImageInput}
accept="image/png, image/jpeg" accept="image/png, image/jpeg"
type="file" type="file"
disabled={!isPro} disabled={!isPro}
on:input={(e) => { on:input={(e) =>
const file = e.currentTarget.files?.item(0) ($formData.qrImage = 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.Control>
<Form.FieldErrors /> <Form.FieldErrors />
</Form.Field> </Form.Field>
@ -223,7 +180,7 @@
</Button> </Button>
</div> </div>
</Form.Field> </Form.Field>
<Form.Button class="w-fit self-end"> <Form.Button class="w-fit">
{#if $submitting} {#if $submitting}
<LoaderCircle class="animate-spin" /> <LoaderCircle class="animate-spin" />
{/if} {/if}

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

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

@ -14,8 +14,6 @@
export let data: PageData export let data: PageData
let qrImageInput: HTMLInputElement
const form = superForm(data.form, { const form = superForm(data.form, {
validators: zodClient(formSchema), validators: zodClient(formSchema),
invalidateAll: 'force', invalidateAll: 'force',
@ -78,51 +76,13 @@
<Form.Label> <Form.Label>
Image <span class="text-brand">(Pro)</span> Image <span class="text-brand">(Pro)</span>
</Form.Label> </Form.Label>
<div> <Input
{#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} {...attrs}
hidden
bind:this={qrImageInput}
accept="image/png, image/jpeg" accept="image/png, image/jpeg"
type="file" type="file"
disabled={data.user.plan === 'free'} disabled={data.user.plan === 'free'}
on:input={(e) => { on:input={(e) =>
const file = e.currentTarget.files?.item(0) ($formData.qrImage = 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.Control>
<Form.FieldErrors /> <Form.FieldErrors />
</Form.Field> </Form.Field>
@ -218,7 +178,7 @@
</div> </div>
</Form.Field> </Form.Field>
<Form.Button class="w-fit self-end"> <Form.Button class="w-fit">
{#if $submitting} {#if $submitting}
<LoaderCircle class="animate-spin" /> <LoaderCircle class="animate-spin" />
{/if} {/if}

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

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

Loading…
Cancel
Save