From 97923c8d35a127981f5e3cf86e0f15b055f7403b Mon Sep 17 00:00:00 2001 From: hypercross Date: Fri, 13 Mar 2026 11:46:18 +0800 Subject: [PATCH] fix: icons --- src/components/md-deck/CardLayer.tsx | 4 +++- src/components/md-deck/hooks/deckStore.ts | 16 ++++++++-------- src/components/md-deck/hooks/layer-parser.ts | 3 --- src/components/utils/csv-loader.ts | 2 ++ src/markdown/index.ts | 2 +- src/styles.css | 7 ++++++- 6 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/components/md-deck/CardLayer.tsx b/src/components/md-deck/CardLayer.tsx index 23dfe8c..27b49b7 100644 --- a/src/components/md-deck/CardLayer.tsx +++ b/src/components/md-deck/CardLayer.tsx @@ -4,6 +4,7 @@ import { getLayerStyle } from './hooks/dimensions'; import type { CardData } from './types'; import {DeckStore} from "./hooks/deckStore"; import {processVariables} from "../utils/csv-loader"; +import {resolvePath} from "../utils/path"; export interface CardLayerProps { cardData: CardData; @@ -16,7 +17,8 @@ export function CardLayer(props: CardLayerProps) { const showBounds = () => props.store.state.isEditing; function renderLayerContent(content: string) { - return parseMarkdown(processVariables(content, props.cardData, props.store.state.cards), props.cardData.iconPath) as string; + const iconPath = resolvePath(props.store.state.cards.sourcePath, props.cardData.iconPath); + return parseMarkdown(processVariables(content, props.cardData, props.store.state.cards), iconPath) as string; } return ( diff --git a/src/components/md-deck/hooks/deckStore.ts b/src/components/md-deck/hooks/deckStore.ts index d2ba1c4..7879aed 100644 --- a/src/components/md-deck/hooks/deckStore.ts +++ b/src/components/md-deck/hooks/deckStore.ts @@ -74,7 +74,7 @@ export interface DeckActions { setPadding: (padding: number) => void; // 数据设置 - setCards: (cards: CardData[]) => void; + setCards: (cards: CSV) => void; setActiveTab: (index: number) => void; updateCardData: (index: number, key: string, value: string) => void; @@ -139,7 +139,7 @@ export function createDeckStore( src: initialSrc, rawSrc: initialSrc, dimensions: null, - cards: [], + cards: [] as any, activeTab: 0, layerConfigs: [], isEditing: false, @@ -195,7 +195,7 @@ export function createDeckStore( updateDimensions(); }; - const setCards = (cards: CardData[]) => setState({ cards, activeTab: 0 }); + const setCards = (cards: CSV) => setState({ cards, activeTab: 0 }); const setActiveTab = (index: number) => setState({ activeTab: index }); const updateCardData = (index: number, key: string, value: string) => { setState('cards', index, key, value); @@ -271,20 +271,20 @@ export function createDeckStore( const layersStr = formatLayers(state.layerConfigs); const parts = [ `:md-deck[${state.rawSrc || state.src}]`, - `{size="${state.sizeW}x${state.sizeH}"`, - `grid="${state.gridW}x${state.gridH}"` + `{size="${state.sizeW}x${state.sizeH} "`, + `grid="${state.gridW}x${state.gridH} "` ]; // 仅在非默认值时添加 bleed 和 padding if (state.bleed !== DECK_DEFAULTS.BLEED) { - parts.push(`bleed="${state.bleed}"`); + parts.push(`bleed="${state.bleed} "`); } if (state.padding !== DECK_DEFAULTS.PADDING) { - parts.push(`padding="${state.padding}"`); + parts.push(`padding="${state.padding} "`); } parts.push(`layers="${layersStr}"}`); - return parts.join(' '); + return parts.join(''); }; const copyCode = async () => { diff --git a/src/components/md-deck/hooks/layer-parser.ts b/src/components/md-deck/hooks/layer-parser.ts index 8c5e808..d0ff1a9 100644 --- a/src/components/md-deck/hooks/layer-parser.ts +++ b/src/components/md-deck/hooks/layer-parser.ts @@ -57,9 +57,6 @@ export function initLayerConfigs( ): LayerConfig[] { const parsed = parseLayers(existingLayersStr); const allProps = Object.keys(data[0] || {}).filter(k => k !== 'label'); - if(data.frontmatter){ - allProps.push(...Object.keys(data.frontmatter)); - } return allProps.map(prop => { const existing = parsed.find(l => l.prop === prop); diff --git a/src/components/utils/csv-loader.ts b/src/components/utils/csv-loader.ts index c71c1d3..edb142f 100644 --- a/src/components/utils/csv-loader.ts +++ b/src/components/utils/csv-loader.ts @@ -71,6 +71,7 @@ export async function loadCSV>(path: string): Promise Object.assign(each, frontmatter); } } + csvResult.sourcePath = path; csvCache.set(path, result); return csvResult; @@ -82,6 +83,7 @@ interface JSONObject extends Record {} export type CSV = T[] & { frontmatter?: JSONObject; + sourcePath: string; } export function processVariables (body: string, currentRow: T, csv: CSV, filtered?: T[], remix?: boolean): string { diff --git a/src/markdown/index.ts b/src/markdown/index.ts index a88d5d9..53c2398 100644 --- a/src/markdown/index.ts +++ b/src/markdown/index.ts @@ -35,7 +35,7 @@ const marked = new Marked() // :[blah] becomes renderer(token) { if (!token.meta.name) { - const style = globalIconPrefix ? `style="--icon-src: url('${globalIconPrefix}${token.text}.png')"` : ''; + const style = globalIconPrefix ? `style="--icon-src: url('${globalIconPrefix}/${token.text}.png')"` : ''; return ``; } return false; diff --git a/src/styles.css b/src/styles.css index 04c3819..e8c6db9 100644 --- a/src/styles.css +++ b/src/styles.css @@ -2,7 +2,7 @@ @plugin "@tailwindcss/typography"; /* icon */ -icon{ +icon, pull{ @apply inline-block; width: 1em; height: 1em; @@ -11,6 +11,11 @@ icon{ background-size: contain; background-position: center; background-repeat: no-repeat; + margin-bottom: -0.1em; +} +pull{ + margin-right: -.5em; + width: 0; } /* prose */