🎨 Refactor copy component to use tabs for different frameworks
Some checks failed
🧑‍🚀 Check / ⚡ Testing with Vitest (push) Has been cancelled
🧑‍🚀 Check / 📦 SVGs Size (push) Has been cancelled
🧑‍🚀 Check / 🛠️ Build app (push) Has been cancelled
🚀 Deploy / API - Cloudflare Workers (push) Has been cancelled

This commit is contained in:
pheralb 2024-10-29 18:35:00 +00:00
parent 8e2ff763ae
commit 12a2fd8f19

View File

@ -3,7 +3,9 @@
import { ClipboardIcon, CopyIcon, Loader, X } from 'lucide-svelte'; import { ClipboardIcon, CopyIcon, Loader, X } from 'lucide-svelte';
import { toast } from 'svelte-sonner'; import { toast } from 'svelte-sonner';
import * as Popover from '@/ui/popover'; import * as Popover from '@/ui/popover';
import * as Tabs from '@/ui/tabs';
// Utils: // Utils:
import { getSvgContent } from '@/utils/getSvgContent'; import { getSvgContent } from '@/utils/getSvgContent';
@ -25,6 +27,8 @@
export let isInFigma = false; export let isInFigma = false;
export let isWordmarkSvg = false; export let isWordmarkSvg = false;
export let svgInfo: iSVG; export let svgInfo: iSVG;
// Variables:
let optionsOpen = false; let optionsOpen = false;
let isLoading = false; let isLoading = false;
@ -174,7 +178,16 @@
<CopyIcon size={iconSize} strokeWidth={iconStroke} /> <CopyIcon size={iconSize} strokeWidth={iconStroke} />
{/if} {/if}
</Popover.Trigger> </Popover.Trigger>
<Popover.Content class="flex flex-col space-y-2" sideOffset={3}> <Popover.Content class="flex flex-col space-y-2 p-3" sideOffset={2}>
<Tabs.Root value="source" class="w-full">
<Tabs.List>
<Tabs.Trigger value="source">Source</Tabs.Trigger>
<Tabs.Trigger value="react">React</Tabs.Trigger>
<Tabs.Trigger value="vue">Vue</Tabs.Trigger>
<Tabs.Trigger value="svelte">Svelte</Tabs.Trigger>
</Tabs.List>
<Tabs.Content value="source">
<section class="flex flex-col space-y-2">
<button <button
class={cn(buttonStyles, 'w-full rounded-md')} class={cn(buttonStyles, 'w-full rounded-md')}
title={isWordmarkSvg ? 'Copy wordmark SVG to clipboard' : 'Copy SVG to clipboard'} title={isWordmarkSvg ? 'Copy wordmark SVG to clipboard' : 'Copy SVG to clipboard'}
@ -183,6 +196,10 @@
<ClipboardIcon size={16} strokeWidth={2} /> <ClipboardIcon size={16} strokeWidth={2} />
<span>Copy SVG</span> <span>Copy SVG</span>
</button> </button>
</section>
</Tabs.Content>
<Tabs.Content value="react">
<section class="flex flex-col space-y-2">
<button <button
class={cn(buttonStyles, 'w-full rounded-md')} class={cn(buttonStyles, 'w-full rounded-md')}
title="Copy as React component" title="Copy as React component"
@ -201,25 +218,10 @@
<ReactIcon iconSize={18} color="#60a5fa" /> <ReactIcon iconSize={18} color="#60a5fa" />
<span>Copy JSX</span> <span>Copy JSX</span>
</button> </button>
<button </section>
class={cn(buttonStyles, 'w-full rounded-md')} </Tabs.Content>
title="Copy as Vue component" <Tabs.Content value="svelte">
disabled={isLoading} <section class="flex flex-col space-y-2">
on:click={() => copySvgComponent(false, 'Vue')}
>
<VueIcon iconSize={18} />
<span>Copy JS</span>
</button>
<button
class={cn(buttonStyles, 'w-full rounded-md')}
title="Copy as Vue component"
disabled={isLoading}
on:click={() => copySvgComponent(true, 'Vue')}
>
<VueIcon iconSize={18} />
<span>Copy TS</span>
</button>
<button <button
class={cn(buttonStyles, 'w-full rounded-md')} class={cn(buttonStyles, 'w-full rounded-md')}
title="Copy as Svelte component" title="Copy as Svelte component"
@ -239,5 +241,30 @@
<SvelteIcon iconSize={18} /> <SvelteIcon iconSize={18} />
<span>Copy TS</span> <span>Copy TS</span>
</button> </button>
</section>
</Tabs.Content>
<Tabs.Content value="vue">
<section class="flex flex-col space-y-2">
<button
class={cn(buttonStyles, 'w-full rounded-md')}
title="Copy as Vue component"
disabled={isLoading}
on:click={() => copySvgComponent(false, 'Vue')}
>
<VueIcon iconSize={18} />
<span>Copy JS</span>
</button>
<button
class={cn(buttonStyles, 'w-full rounded-md')}
title="Copy as Vue component"
disabled={isLoading}
on:click={() => copySvgComponent(true, 'Vue')}
>
<VueIcon iconSize={18} />
<span>Copy TS</span>
</button>
</section>
</Tabs.Content>
</Tabs.Root>
</Popover.Content> </Popover.Content>
</Popover.Root> </Popover.Root>