2
0
mirror of https://github.com/iconify/iconify.git synced 2024-10-24 01:22:04 +00:00
iconify/components/svg-framework/src/scanner/config.ts
Vjacheslav Trushkin ce135b6cf5 Update components
2022-06-19 19:16:11 +03:00

98 lines
2.3 KiB
TypeScript

import type { IconifyIconName } from '@iconify/utils/lib/icon/name';
import type { IconifyIconCustomisations as RawIconifyIconCustomisations } from '@iconify/utils/lib/customisations/defaults';
import { defaultIconCustomisations } from '@iconify/utils/lib/customisations/defaults';
/**
* Add inline to customisations
*/
export interface IconifyIconCustomisations
extends RawIconifyIconCustomisations {
inline?: boolean;
}
export const defaultExtendedIconCustomisations = {
...defaultIconCustomisations,
inline: false,
};
/**
* Class names
*/
export const blockClass = 'iconify';
export const inlineClass = 'iconify-inline';
/**
* Icon render mode
*
* 'style' = 'bg' or 'mask', depending on icon content
* 'bg' = add inline style to placeholder using `background`
* 'mask' = add inline style to placeholder using `mask`
* 'svg' = <svg>
*/
export type IconifyRenderMode = 'style' | 'bg' | 'mask' | 'svg';
/**
* Data used to verify if icon is the same
*/
export interface IconifyElementProps {
// Icon name as string
name: string;
// Icon name as object
icon: IconifyIconName;
// Customisations
customisations: Required<IconifyIconCustomisations>;
// Render mode
mode?: IconifyRenderMode;
}
/**
* Icon status
*/
type IconStatus = 'missing' | 'loading' | 'loaded';
/**
* List of classes added to element
*
* If class already exists in element, it is not included in list
*/
export type IconifyElementAddedClasses = string[];
/**
* List of added inline styles
*
* Style is not changed if custom value is set
*/
export type IconifyElementChangedStyles = string[];
/**
* Data added to element to keep track of changes
*/
export interface IconifyElementData extends IconifyElementProps {
// Status
status: IconStatus;
// List of classes that were added to element on last render
addedClasses?: IconifyElementAddedClasses;
// List of changes to style on last render
addedStyles?: IconifyElementChangedStyles;
}
/**
* Extend Element type to allow TypeScript understand added properties
*/
interface IconifyElementStoredData {
iconifyData?: IconifyElementData;
}
export interface IconifyElement extends HTMLElement, IconifyElementStoredData {}
/**
* Names of properties to add to nodes
*/
export const elementDataProperty: keyof IconifyElementStoredData =
('iconifyData' + Date.now()) as keyof IconifyElementStoredData;