* feat: move plans into sharable json * remove unused code * update pnpm lock * update plans.json * implement early adopter pricing * docs: update meta title and description * Finished the UI for upgrading plans * Updated the pricing plans * Updated the cards ui * use relative import * improve styling of upgrade plan card * styling improvements, lemonsqueezy setup * trigger lemonsqueezy payment and add webhook * update pnpm lock * add logout route * feat: complete billing functionality * generate lock file * make crypto false on browser * feat: adding upgrade prompts to org * chore: add upgrade icon to upload video * feat: add upgrade prompt to certificate and settings * feat: implement onboarding setup page (#229) * working on the onboarding setup * working on the onboarding page * Almost done with the onboarding UI * finished the UI of the onBoarding setup * finished the UI of the onBoarding setup * Implementing the functions to carryout the logic of updating the UI onmount if a user has carried out a certain step or not * Implementing the functions to carryout the logic of updating the UI onmount if a user has carried out a certain step or not * making some chnages * finished the onBoarding task * updated some logic * Removed the uneeded svg from the static folder * fixed isCoursePublished not returning a boolean * improved the setup link protection * chore: make menuItems reactive * improve formatting * format supabase queries --------- Co-authored-by: Rotimi Best <best@classroomio.com> * revamp setup * improve the upgrade experience * migration * feat: add lemonsqueezy customer portal --------- Co-authored-by: emmanuel <chifez1@gmail.com>
60 lines
1.3 KiB
Svelte
60 lines
1.3 KiB
Svelte
<script>
|
|
import Avatar from '$lib/components/Avatar/index.svelte';
|
|
import TextChip from '../Chip/Text.svelte';
|
|
import ComingSoon from '../ComingSoon/index.svelte';
|
|
|
|
export let size = '';
|
|
export let hasDivider = false;
|
|
export let active = false;
|
|
export let avatar = '';
|
|
export let avatarText = '';
|
|
export let text = '';
|
|
export let onClick = () => {};
|
|
export let disabled = false;
|
|
</script>
|
|
|
|
<div class="relative">
|
|
<button
|
|
class="w-full {disabled &&
|
|
'opacity-25'} flex items-center text-start w-[14rem] py-1.5 px-2.5 {hasDivider &&
|
|
'border-b border-gray-100 dark:border-neutral-600'} {active &&
|
|
'bg-gray-200 dark:bg-neutral-700 dark:text-white'}"
|
|
on:click={disabled ? undefined : onClick}
|
|
>
|
|
{#if avatar}
|
|
<Avatar
|
|
src={avatar}
|
|
name={text}
|
|
shape="rounded-md"
|
|
width="w-[1.2rem]"
|
|
height="h-[1.2rem]"
|
|
className="mr-2"
|
|
/>
|
|
{:else if avatarText}
|
|
<TextChip
|
|
value={avatarText}
|
|
className="mr-2 bg-primary-200 font-medium text-xs dark:text-black"
|
|
{size}
|
|
/>
|
|
{/if}
|
|
{text}
|
|
</button>
|
|
{#if disabled}
|
|
<div class="coming-soon">
|
|
<ComingSoon />
|
|
</div>
|
|
{/if}
|
|
</div>
|
|
|
|
<style>
|
|
button {
|
|
min-height: 56px;
|
|
}
|
|
|
|
.coming-soon {
|
|
position: absolute;
|
|
top: 5px;
|
|
right: 5px;
|
|
}
|
|
</style>
|