Cweili / svelte-fa

Tiny FontAwesome component for Svelte

Home Page:https://cweili.github.io/svelte-fa/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

FaLayers & FaLayersText not working with sveltekit

cananda opened this issue · comments

Hello!

Thank you for this project which makes using fontawesome a breeze! While importing and displaying free svg icons work great, I have had no success with FaLayers and FaLayersText as shown in the examples. Here is my code ..

<script lang="ts">
	import Fa from 'svelte-fa';
	import FaLayers from 'svelte-fa';
	import FaLayersText from 'svelte-fa';
	import { faFlag } from '@fortawesome/free-solid-svg-icons/faFlag';
	import { faCalendar } from '@fortawesome/free-solid-svg-icons/faCalendar';
	import { faCertificate } from '@fortawesome/free-solid-svg-icons/faCertificate';
	import { faBookmark } from '@fortawesome/free-solid-svg-icons/faBookmark';
	import { faHeart } from '@fortawesome/free-solid-svg-icons/faHeart';
</script>

<div class="px-8 py-4">
	<Fa icon={faFlag} size="2x" color="tomato" />

	<FaLayers size="4x" style="background: mistyrose">
		<Fa icon={faCalendar} />
		<FaLayersText
			scale={0.45}
			translateY={0.06}
			color="white"
			style="font-weight: 900"
			icon={faCalendar}
		>
			27
		</FaLayersText>
	</FaLayers>

	<Fa icon={faCertificate} size="4x" style="background: mistyrose" color="blue" />

	<FaLayers size="4x" style="background: mistyrose">
		<Fa icon={faCertificate} size="2x" color="blue" />
		<FaLayersText scale={0.25} rotate={-30} color="white" style="font-weight: 900">
			NEW
		</FaLayersText>
	</FaLayers>

	<FaLayers size="4x" style="background: mistyrose">
		<Fa icon={faBookmark} />
		<Fa icon={faHeart} scale={0.4} translateY={-0.1} color="tomato" />
	</FaLayers>

	<FaLayers size="4x" pull="left">
		<Fa icon={faCertificate} />
		<FaLayersText scale={0.25} rotate={-30} color="white" style="font-weight: 900">
			NEW
		</FaLayersText>
	</FaLayers>
</div>

Only the <Fa .. /> icons work and none of the <FaLayers .. /> icons with the layers are displayed. I'm only using the free fontawesome 6.2.0 icons

I was just trying overlay in svelte/Vite , same problem with layers.

Uncaught SyntaxError: The requested module '/node_modules/svelte-fa/src/fa.svelte' does not provide an export named 'FaLayers' (at ButtonManual.svelte? [sm]:2:14)

however importing separately works:
import Fa from 'svelte-fa'
import FaLayers from 'svelte-fa/src/fa-layers.svelte'
import FaLayersText from 'svelte-fa/src/fa-layers-text.svelte'

You're not importing it properly

import Fa, { FaLayers, FaLayersText } from "svelte-fa";

Please read the README

That still doesn't fix it for me:

3: import {faBoltLightning} from "@fortawesome/free-solid-svg-icons";
4: import Fa, {FaLayers, FaLayersText} from "svelte-fa";
^
5: </script>
6:


Error: 'FaLayersText' is not exported by node_modules/svelte-fa/src/fa.svelte, imported by src/components/lightning/LightningDashboard.svelte

BTW, following this pattern does in fact work:

import Fa from 'svelte-fa'
import FaLayers from 'svelte-fa/src/fa-layers.svelte'
import FaLayersText from 'svelte-fa/src/fa-layers-text.svelte'

Just to add onto this, trying to import with SvelteKit:

import Fa, { FaLayers } from "svelte-fa";

does not work and throws the error:

Error: <FaLayers> is not a valid SSR component. You may need to review your build config to ensure that dependencies are compiled, rather than imported as pre-compiled modules. Otherwise you may need to fix a <FaLayers>.
    at Module.validate_component (/Users/caidan/Projects/doggit/node_modules/svelte/internal/index.mjs:2019:15)
    at eval (/Users/caidan/Projects/doggit/src/routes/app/dashboard/dogs/[id]/+page.svelte:55:248)
    at Object.$$render (/Users/caidan/Projects/doggit/node_modules/svelte/internal/index.mjs:2042:22)
    at Object.default (/Users/caidan/Projects/doggit/.svelte-kit/generated/root.svelte:116:150)
    at eval (/Users/caidan/Projects/doggit/src/routes/app/dashboard/dogs/[id]/+layout.svelte:93:32)
    at Object.$$render (/Users/caidan/Projects/doggit/node_modules/svelte/internal/index.mjs:2042:22)
    at Object.default (/Users/caidan/Projects/doggit/.svelte-kit/generated/root.svelte:105:141)
    at eval (/Users/caidan/Projects/doggit/src/routes/app/dashboard/+layout.svelte:75:123)
    at Object.$$render (/Users/caidan/Projects/doggit/node_modules/svelte/internal/index.mjs:2042:22)
    at Object.default (/Users/caidan/Projects/doggit/.svelte-kit/generated/root.svelte:93:137)

Although, importing this way does work:

import FaLayers from 'svelte-fa/src/fa-layers.svelte';

but then I get a typescript error:

Could not find a declaration file for module 'svelte-fa/src/fa-layers.svelte'. '/Users/caidan/Projects/doggit/node_modules/svelte-fa/src/fa-layers.svelte' implicitly has an 'any' type.ts (7016)

Seems like the exports in package.json isn't configured properly. Svelte picks up on the svelte field, which only points to the main .svelte file, not the index file.

Thanks for the info, would changing the svelte field to src/index.js fix this, or would there need to be more changes?

Try v4.x which is built with SvelteKit.