mirror of
https://github.com/gromlab-ru/svg-sprites.git
synced 2026-07-22 04:40:17 +03:00
refactor: заменить shiki на самописный highlighter и обновить архитектуру
- Удалён shiki (9.5→0 МБ), создан regex-токенизатор для html/css/xml - CLI переведён с аргументов на конфиг-файл svg-sprites.config.ts - Превью переработано: React-приложение вместо инлайн HTML - Добавлен футер с названием пакета и ссылкой на репозиторий - Исправлена загрузка dev-data.js для Vite 8 - Футер прижат к низу, содержимое центрировано
This commit is contained in:
16
preview/src/shared/lib/rgb-to-hex.util.ts
Normal file
16
preview/src/shared/lib/rgb-to-hex.util.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
/**
|
||||
* Конвертирует CSS-цвет (rgb или hex) в hex-формат.
|
||||
*/
|
||||
export const rgbToHex = (color: string): string => {
|
||||
if (color.startsWith('#')) {
|
||||
return color
|
||||
}
|
||||
|
||||
const match = color.match(/\d+/g)
|
||||
|
||||
if (match && match.length >= 3) {
|
||||
return '#' + match.slice(0, 3).map((c) => parseInt(c).toString(16).padStart(2, '0')).join('')
|
||||
}
|
||||
|
||||
return '#000000'
|
||||
}
|
||||
6
preview/src/shared/types/index.ts
Normal file
6
preview/src/shared/types/index.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
export type {
|
||||
IconVar,
|
||||
IconData,
|
||||
SpriteGroup,
|
||||
SpritesData,
|
||||
} from './sprites-data.type'
|
||||
63
preview/src/shared/types/sprites-data.type.ts
Normal file
63
preview/src/shared/types/sprites-data.type.ts
Normal file
@@ -0,0 +1,63 @@
|
||||
/**
|
||||
* CSS-переменная иконки.
|
||||
*/
|
||||
export type IconVar = {
|
||||
/** Имя CSS-переменной. */
|
||||
varName: string
|
||||
/** Fallback-значение. */
|
||||
fallback: string
|
||||
/** HEX-значение для color picker. */
|
||||
hex: string
|
||||
/** Является ли fallback значением currentColor. */
|
||||
isCurrentColor: boolean
|
||||
}
|
||||
|
||||
/**
|
||||
* Размеры viewBox иконки.
|
||||
*/
|
||||
export type IconViewBox = {
|
||||
x: number
|
||||
y: number
|
||||
width: number
|
||||
height: number
|
||||
}
|
||||
|
||||
/**
|
||||
* Данные одной иконки.
|
||||
*/
|
||||
export type IconData = {
|
||||
/** Идентификатор иконки. */
|
||||
id: string
|
||||
/** Имя группы (папки спрайта). */
|
||||
group: string
|
||||
/** Режим спрайта. */
|
||||
mode: 'stack' | 'symbol'
|
||||
/** Относительный путь к файлу спрайта. */
|
||||
spriteFile: string
|
||||
/** Размеры viewBox иконки. */
|
||||
viewBox: IconViewBox | null
|
||||
/** CSS-переменные иконки. */
|
||||
vars: IconVar[]
|
||||
}
|
||||
|
||||
/**
|
||||
* Группа спрайтов.
|
||||
*/
|
||||
export type SpriteGroup = {
|
||||
/** Имя группы. */
|
||||
name: string
|
||||
/** Режим спрайта. */
|
||||
mode: 'stack' | 'symbol'
|
||||
/** Относительный путь к файлу спрайта. */
|
||||
spriteFile: string
|
||||
/** Иконки в группе. */
|
||||
icons: IconData[]
|
||||
}
|
||||
|
||||
/**
|
||||
* Данные для рендера превью.
|
||||
*/
|
||||
export type SpritesData = {
|
||||
/** Группы спрайтов. */
|
||||
groups: SpriteGroup[]
|
||||
}
|
||||
Reference in New Issue
Block a user