flotilla/src/lib/components/Icon.svelte

211 lines
8.4 KiB
Svelte
Raw Normal View History

2024-08-05 22:28:46 +00:00
<style>
div {
mask-repeat: none;
mask-size: 100% 100%;
}
</style>
2024-08-05 21:45:16 +00:00
<script lang="ts">
2024-08-05 22:28:46 +00:00
import {switcher} from "@welshman/lib"
2024-08-06 20:10:10 +00:00
import AddSquare from "@assets/icons/Add Square.svg?dataurl"
2024-09-11 19:19:45 +00:00
import ArrowsALogout2 from "@assets/icons/Arrows ALogout 2.svg?dataurl"
import Bell from "@assets/icons/Bell.svg?dataurl"
2025-05-28 23:46:41 +00:00
import Bookmark from "@assets/icons/Bookmark.svg?dataurl"
2025-06-05 16:13:48 +00:00
import BillList from "@assets/icons/Bill List.svg?dataurl"
2024-08-23 22:43:35 +00:00
import Code2 from "@assets/icons/Code 2.svg?dataurl"
2024-09-11 22:21:25 +00:00
import Document from "@assets/icons/Document.svg?dataurl"
2024-08-23 22:43:35 +00:00
import Earth from "@assets/icons/Earth.svg?dataurl"
import Pen from "@assets/icons/Pen.svg?dataurl"
2024-10-02 23:36:08 +00:00
import PenNewSquare from "@assets/icons/Pen New Square.svg?dataurl"
2024-08-23 22:43:35 +00:00
import HeadphonesRound from "@assets/icons/Headphones Round.svg?dataurl"
2024-08-06 20:10:10 +00:00
import AddCircle from "@assets/icons/Add Circle.svg?dataurl"
2024-08-16 17:50:38 +00:00
import AltArrowDown from "@assets/icons/Alt Arrow Down.svg?dataurl"
2024-08-06 20:10:10 +00:00
import AltArrowRight from "@assets/icons/Alt Arrow Right.svg?dataurl"
2024-10-03 18:49:52 +00:00
import AltArrowUp from "@assets/icons/Alt Arrow Up.svg?dataurl"
2024-08-08 21:02:46 +00:00
import AltArrowLeft from "@assets/icons/Alt Arrow Left.svg?dataurl"
2024-08-15 21:30:55 +00:00
import ArrowRight from "@assets/icons/Arrow Right.svg?dataurl"
2024-08-22 18:59:37 +00:00
import Bag from "@assets/icons/Bag.svg?dataurl"
2024-08-23 20:33:36 +00:00
import Bolt from "@assets/icons/Bolt.svg?dataurl"
2024-09-23 20:10:15 +00:00
import CalendarAdd from "@assets/icons/Calendar Add.svg?dataurl"
2024-08-22 18:59:37 +00:00
import CalendarMinimalistic from "@assets/icons/Calendar Minimalistic.svg?dataurl"
import ChatRound from "@assets/icons/Chat Round.svg?dataurl"
2024-08-15 19:08:07 +00:00
import CheckCircle from "@assets/icons/Check Circle.svg?dataurl"
2024-08-06 20:10:10 +00:00
import ClipboardText from "@assets/icons/Clipboard Text.svg?dataurl"
2024-09-20 18:00:41 +00:00
import ClockCircle from "@assets/icons/Clock Circle.svg?dataurl"
2024-08-08 23:32:46 +00:00
import CloseCircle from "@assets/icons/Close Circle.svg?dataurl"
import Copy from "@assets/icons/Copy.svg?dataurl"
2024-08-06 20:10:10 +00:00
import Compass from "@assets/icons/Compass.svg?dataurl"
import CompassBig from "@assets/icons/Compass Big.svg?dataurl"
2024-10-29 21:40:37 +00:00
import CPU from "@assets/icons/CPU.svg?dataurl"
2024-08-23 20:33:36 +00:00
import Danger from "@assets/icons/Danger.svg?dataurl"
2024-08-16 17:50:38 +00:00
import Exit from "@assets/icons/Exit.svg?dataurl"
2024-10-17 23:17:49 +00:00
import File from "@assets/icons/File.svg?dataurl"
2024-08-08 23:32:46 +00:00
import FireMinimalistic from "@assets/icons/Fire Minimalistic.svg?dataurl"
import GallerySend from "@assets/icons/Gallery Send.svg?dataurl"
2024-08-14 21:52:00 +00:00
import Ghost from "@assets/icons/Ghost.svg?dataurl"
2024-08-16 17:50:38 +00:00
import Hashtag from "@assets/icons/Hashtag.svg?dataurl"
import HamburgerMenu from "@assets/icons/Hamburger Menu.svg?dataurl"
2024-08-06 20:10:10 +00:00
import HandPills from "@assets/icons/Hand Pills.svg?dataurl"
import Heart from "@assets/icons/Heart.svg?dataurl"
2024-08-06 20:10:10 +00:00
import HomeSmile from "@assets/icons/Home Smile.svg?dataurl"
2024-10-03 18:49:52 +00:00
import Inbox from "@assets/icons/Inbox.svg?dataurl"
2024-08-08 23:32:46 +00:00
import InfoCircle from "@assets/icons/Info Circle.svg?dataurl"
2024-08-23 22:43:35 +00:00
import InfoSquare from "@assets/icons/Info Square.svg?dataurl"
2024-08-22 20:17:21 +00:00
import Key from "@assets/icons/Key.svg?dataurl"
2024-10-14 19:35:08 +00:00
import KeyMinimalisticSquare3 from "@assets/icons/Key Minimalistic Square 3.svg?dataurl"
import Letter from "@assets/icons/Letter.svg?dataurl"
2024-08-09 00:22:17 +00:00
import LinkRound from "@assets/icons/Link Round.svg?dataurl"
2024-12-10 21:38:34 +00:00
import Lock from "@assets/icons/Lock.svg?dataurl"
2024-08-09 23:22:09 +00:00
import Login from "@assets/icons/Login.svg?dataurl"
import Login2 from "@assets/icons/Login 2.svg?dataurl"
2024-08-14 21:52:00 +00:00
import Magnifer from "@assets/icons/Magnifer.svg?dataurl"
2024-10-03 18:49:52 +00:00
import Mailbox from "@assets/icons/Mailbox.svg?dataurl"
2024-09-11 22:21:25 +00:00
import MapPoint from "@assets/icons/Map Point.svg?dataurl"
2024-08-16 17:50:38 +00:00
import MenuDots from "@assets/icons/Menu Dots.svg?dataurl"
import MenuDotsCircle from "@assets/icons/Menu Dots Circle.svg?dataurl"
2025-05-12 15:47:44 +00:00
import Moon from "@assets/icons/Moon.svg?dataurl"
2024-08-22 18:59:37 +00:00
import NotesMinimalistic from "@assets/icons/Notes Minimalistic.svg?dataurl"
import Pallete2 from "@assets/icons/Pallete 2.svg?dataurl"
2024-08-19 21:22:16 +00:00
import Paperclip from "@assets/icons/Paperclip.svg?dataurl"
2024-08-06 20:10:10 +00:00
import Plain from "@assets/icons/Plain.svg?dataurl"
2025-07-04 13:22:19 +00:00
import QRCode from "@assets/icons/QR Code.svg?dataurl"
2024-10-30 17:07:54 +00:00
import QuestionSquare from "@assets/icons/Question Square.svg?dataurl"
2024-08-08 23:32:46 +00:00
import RemoteControllerMinimalistic from "@assets/icons/Remote Controller Minimalistic.svg?dataurl"
2024-10-30 17:07:54 +00:00
import Rocket2 from "@assets/icons/Rocket 2.svg?dataurl"
2024-08-16 17:50:38 +00:00
import Reply from "@assets/icons/Reply.svg?dataurl"
2024-10-18 22:58:44 +00:00
import Server from "@assets/icons/Server.svg?dataurl"
2024-08-06 20:10:10 +00:00
import Settings from "@assets/icons/Settings.svg?dataurl"
2024-10-25 23:59:12 +00:00
import SettingsMinimalistic from "@assets/icons/Settings Minimalistic.svg?dataurl"
2025-06-05 16:13:48 +00:00
import ShieldUser from "@assets/icons/Shield User.svg?dataurl"
2025-04-15 16:36:39 +00:00
import Station from "@assets/icons/Station.svg?dataurl"
2024-09-11 22:21:25 +00:00
import TagHorizontal from "@assets/icons/Tag Horizontal.svg?dataurl"
import Ticket from "@assets/icons/Ticket.svg?dataurl"
2024-10-09 16:31:50 +00:00
import ShareCircle from "@assets/icons/Share Circle.svg?dataurl"
2024-08-22 18:59:37 +00:00
import ShopMinimalistic from "@assets/icons/Shop Minimalistic.svg?dataurl"
2024-08-16 17:50:38 +00:00
import SmileCircle from "@assets/icons/Smile Circle.svg?dataurl"
import SquareShareLine from "@assets/icons/Square Share Line.svg?dataurl"
2024-11-21 19:52:29 +00:00
import SortVertical from "@assets/icons/Sort Vertical.svg?dataurl"
2025-05-28 23:46:41 +00:00
import Star from "@assets/icons/Star.svg?dataurl"
2024-10-16 18:27:27 +00:00
import TrashBin2 from "@assets/icons/Trash Bin 2.svg?dataurl"
2024-08-06 20:10:10 +00:00
import UFO3 from "@assets/icons/UFO 3.svg?dataurl"
import UserHeart from "@assets/icons/User Heart.svg?dataurl"
2024-08-23 23:54:05 +00:00
import UserCircle from "@assets/icons/User Circle.svg?dataurl"
2024-08-09 23:22:09 +00:00
import UserRounded from "@assets/icons/User Rounded.svg?dataurl"
2025-07-04 13:22:19 +00:00
import Wallet from "@assets/icons/Wallet.svg?dataurl"
import Widget from "@assets/icons/Widget.svg?dataurl"
2024-09-11 22:21:25 +00:00
import WidgetAdd from "@assets/icons/Widget Add.svg?dataurl"
2024-08-08 23:32:46 +00:00
import WiFiRouterRound from "@assets/icons/Wi-Fi Router Round.svg?dataurl"
2024-08-05 21:45:16 +00:00
const {
icon,
size = 5,
...restProps
}: {
2025-02-04 00:37:14 +00:00
icon: string
size?: number
class?: string
} = $props()
2024-08-05 21:45:16 +00:00
const px = size * 4
const data = switcher(icon, {
2024-08-05 22:28:46 +00:00
"add-square": AddSquare,
2024-09-11 19:19:45 +00:00
"arrows-a-logout-2": ArrowsALogout2,
bell: Bell,
2025-05-28 23:46:41 +00:00
bookmark: Bookmark,
2025-06-05 16:13:48 +00:00
"bill-list": BillList,
2024-08-23 22:43:35 +00:00
"code-2": Code2,
2024-09-11 22:21:25 +00:00
document: Document,
2024-08-26 21:43:43 +00:00
earth: Earth,
pen: Pen,
2024-10-08 18:39:16 +00:00
"pen-new-square": PenNewSquare,
2024-08-23 22:43:35 +00:00
"headphones-round": HeadphonesRound,
2024-08-05 22:28:46 +00:00
"add-circle": AddCircle,
2024-08-16 17:50:38 +00:00
"alt-arrow-down": AltArrowDown,
2024-08-05 22:28:46 +00:00
"alt-arrow-right": AltArrowRight,
2024-10-03 18:49:52 +00:00
"alt-arrow-up": AltArrowUp,
2024-08-08 21:02:46 +00:00
"alt-arrow-left": AltArrowLeft,
2024-08-15 21:30:55 +00:00
"arrow-right": ArrowRight,
2024-08-22 18:59:37 +00:00
bag: Bag,
2024-08-23 20:33:36 +00:00
bolt: Bolt,
2024-09-23 20:10:15 +00:00
"calendar-add": CalendarAdd,
2024-08-22 18:59:37 +00:00
"calendar-minimalistic": CalendarMinimalistic,
"chat-round": ChatRound,
2024-08-15 19:08:07 +00:00
"check-circle": CheckCircle,
2024-08-05 22:28:46 +00:00
"clipboard-text": ClipboardText,
2024-09-20 18:00:41 +00:00
"clock-circle": ClockCircle,
2024-08-08 23:32:46 +00:00
"close-circle": CloseCircle,
copy: Copy,
2024-08-05 22:28:46 +00:00
compass: Compass,
"compass-big": CompassBig,
2024-10-29 21:40:37 +00:00
cpu: CPU,
2024-08-23 20:33:36 +00:00
danger: Danger,
2024-08-16 17:50:38 +00:00
exit: Exit,
2024-10-17 23:17:49 +00:00
file: File,
2024-08-08 23:32:46 +00:00
"fire-minimalistic": FireMinimalistic,
"gallery-send": GallerySend,
2024-08-16 17:50:38 +00:00
ghost: Ghost,
hashtag: Hashtag,
"hamburger-menu": HamburgerMenu,
2024-08-05 22:28:46 +00:00
"hand-pills": HandPills,
heart: Heart,
2024-08-05 22:28:46 +00:00
"home-smile": HomeSmile,
2024-10-08 18:39:16 +00:00
inbox: Inbox,
2024-08-08 23:32:46 +00:00
"info-circle": InfoCircle,
2024-08-23 22:43:35 +00:00
"info-square": InfoSquare,
2024-08-22 20:17:21 +00:00
key: Key,
2024-10-15 19:02:11 +00:00
"key-minimalistic-square-3": KeyMinimalisticSquare3,
letter: Letter,
2024-08-09 00:22:17 +00:00
"link-round": LinkRound,
2024-08-16 17:50:38 +00:00
login: Login,
2024-12-10 21:38:34 +00:00
lock: Lock,
2024-08-09 23:22:09 +00:00
"login-2": Login2,
2024-08-16 17:50:38 +00:00
magnifer: Magnifer,
2024-10-03 18:49:52 +00:00
mailbox: Mailbox,
2024-09-23 20:58:01 +00:00
"map-point": MapPoint,
2024-08-16 17:50:38 +00:00
"menu-dots": MenuDots,
"menu-dots-circle": MenuDotsCircle,
2025-05-12 15:47:44 +00:00
moon: Moon,
2024-08-22 18:59:37 +00:00
"notes-minimalistic": NotesMinimalistic,
2024-08-16 17:50:38 +00:00
"pallete-2": Pallete2,
2024-08-26 21:43:43 +00:00
paperclip: Paperclip,
2024-08-05 22:28:46 +00:00
plain: Plain,
2025-07-04 13:22:19 +00:00
"qr-code": QRCode,
2024-10-30 17:07:54 +00:00
"question-square": QuestionSquare,
2024-08-16 17:50:38 +00:00
reply: Reply,
"remote-controller-minimalistic": RemoteControllerMinimalistic,
2024-10-30 17:07:54 +00:00
"rocket-2": Rocket2,
2024-10-09 16:31:50 +00:00
"share-circle": ShareCircle,
2024-08-22 18:59:37 +00:00
"shop-minimalistic": ShopMinimalistic,
2024-08-16 17:50:38 +00:00
"smile-circle": SmileCircle,
2024-10-18 22:58:44 +00:00
server: Server,
2024-08-05 22:28:46 +00:00
settings: Settings,
2024-10-31 19:24:40 +00:00
"settings-minimalistic": SettingsMinimalistic,
2025-06-05 16:13:48 +00:00
"shield-user": ShieldUser,
2025-04-15 16:36:39 +00:00
station: Station,
2024-09-23 20:58:01 +00:00
"tag-horizontal": TagHorizontal,
ticket: Ticket,
2024-10-16 18:27:27 +00:00
"trash-bin-2": TrashBin2,
2024-08-05 22:28:46 +00:00
"ufo-3": UFO3,
2024-08-16 17:50:38 +00:00
"square-share-line": SquareShareLine,
2024-11-21 19:52:29 +00:00
"sort-vertical": SortVertical,
2025-05-28 23:46:41 +00:00
star: Star,
2024-08-05 22:28:46 +00:00
"user-heart": UserHeart,
2024-08-23 23:54:05 +00:00
"user-circle": UserCircle,
2024-08-09 23:22:09 +00:00
"user-rounded": UserRounded,
2025-07-04 13:22:19 +00:00
wallet: Wallet,
2024-08-16 17:50:38 +00:00
widget: Widget,
2024-09-23 20:58:01 +00:00
"widget-add": WidgetAdd,
2024-08-08 23:32:46 +00:00
"wifi-router-round": WiFiRouterRound,
2024-08-05 21:45:16 +00:00
})
if (!data) {
throw new Error(`Invalid icon: ${icon}`)
}
</script>
<div
2025-02-04 00:37:14 +00:00
class="inline-block {restProps.class}"
2025-02-03 23:01:42 +00:00
style="mask-image: url({data}); width: {px}px; height: {px}px; min-width: {px}px; min-height: {px}px; background-color: currentcolor;">
</div>