···11<script lang="ts">
22-import { getElementName, type Element } from '@starlight/types/hsr'
22+import { getElementName, getElementColor, type Element } from '@starlight/types/hsr'
33import type { SvelteHTMLElements } from 'svelte/elements'
44-import { elementColor } from '$lib/hsr/elements'
54import Text from '$ui/Text/Text.svelte'
65import type { TextProps } from '$ui/Text/Text'
76···2625})
2726</script>
28272929-<Text {...props} color={!dark ? elementColor(element) : undefined}>
2828+<Text {...props} color={!dark ? getElementColor(element) : undefined}>
3029 {renderedText}
3130</Text>
-1
app/src/lib/patterns/Element/index.ts
···11export { default as ElementChip } from './ElementChip.svelte'
22-export { default as ElementIcon } from './ElementIcon.svelte'
32export { default as ElementText } from './ElementText.svelte'
+1-1
app/src/lib/patterns/Mechanic/MechanicChip.svelte
···11<script lang="ts">
22+import MechanicIcon from '@starlight/icons/mechanic'
23import { getMechanicName, type Mechanic } from '@starlight/types/hsr'
34import { Chip, type ChipProps } from '$ui/Chip'
44-import MechanicIcon from './MechanicIcon.svelte'
5566type Style = 'fill' | 'outline'
77type Size = 'md' | 'sm'
···11+import FlameIcon from '@lucide/svelte/icons/flame'
22+import SnowflakeIcon from '@lucide/svelte/icons/snowflake'
33+import SwordsIcon from '@lucide/svelte/icons/swords'
44+import WindIcon from '@lucide/svelte/icons/wind'
55+import ZapIcon from '@lucide/svelte/icons/zap'
66+import type { Element } from '@starlight/types/hsr'
77+import type { Component } from 'svelte'
88+import UniverseIcon from './UniverseIcon.svelte'
99+import WhirlIcon from './WhirlIcon.svelte'
1010+1111+const elementMap: Record<Element, Component> = {
1212+ physical: SwordsIcon,
1313+ fire: FlameIcon,
1414+ imaginary: UniverseIcon,
1515+ wind: WindIcon,
1616+ ice: SnowflakeIcon,
1717+ quantum: WhirlIcon,
1818+ lightning: ZapIcon,
1919+}
2020+2121+export function getElementIcon(element: Element): Component {
2222+ return elementMap[element]
2323+}
+27
packages/icons/src/lib/MechanicIcon.ts
···11+import BombIcon from '@lucide/svelte/icons/bomb'
22+import ChevronsDownIcon from '@lucide/svelte/icons/chevrons-down'
33+import CircleDotDashedIcon from '@lucide/svelte/icons/circle-dot-dashed'
44+import CrosshairIcon from '@lucide/svelte/icons/crosshair'
55+import HandHelpingIcon from '@lucide/svelte/icons/hand-helping'
66+import HeartPlusIcon from '@lucide/svelte/icons/heart-plus'
77+import ShieldHalfIcon from '@lucide/svelte/icons/shield-half'
88+import SparklesIcon from '@lucide/svelte/icons/sparkles'
99+import SplitIcon from '@lucide/svelte/icons/split'
1010+import type { Mechanic } from '@starlight/types/hsr'
1111+import type { Component } from 'svelte'
1212+1313+const mechanicMap: Record<Mechanic, Component> = {
1414+ 'single-target': CrosshairIcon,
1515+ aoe: CircleDotDashedIcon,
1616+ bounce: SplitIcon,
1717+ blast: BombIcon,
1818+ impair: ChevronsDownIcon,
1919+ support: HandHelpingIcon,
2020+ restore: HeartPlusIcon,
2121+ enhance: SparklesIcon,
2222+ defense: ShieldHalfIcon,
2323+}
2424+2525+export function getMechanicIcon(mechanic: Mechanic): Component {
2626+ return mechanicMap[mechanic]
2727+}
+6
packages/icons/src/lib/cn.ts
···11+import { clsx, type ClassValue } from 'clsx'
22+import { twMerge } from 'tailwind-merge'
33+44+export function cn(...inputs: ClassValue[]): string {
55+ return twMerge(clsx(inputs))
66+}
+2
packages/icons/src/lib/index.ts
···11+export { default as ElementIcon } from './ElementIcon.svelte'
22+export { default as MechanicIcon } from './MechanicIcon.svelte'
13export { default as UniverseIcon } from './UniverseIcon.svelte'
24export { default as WhirlIcon } from './WhirlIcon.svelte'