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:
2026-04-22 16:54:35 +03:00
parent aad1c97f50
commit e77e7dfcf1
154 changed files with 9083 additions and 516 deletions

View 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'
}

View File

@@ -0,0 +1,6 @@
export type {
IconVar,
IconData,
SpriteGroup,
SpritesData,
} from './sprites-data.type'

View 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[]
}