import { Accessor, For, JSXElement } from "solid-js"; import { useClassList, useStyle } from "../utils/useProps"; export type BasicProps = { classList?: any; class?: string; style?: any; type?: string; width?: string | string[]; height?: string; inline?: boolean; }; export interface AvatarProps extends BasicProps { size?: 'extra-small'|'small'|'medium'|'large'|'extra-large'|number; shape?: 'circle'|'square' } export type GenericProps = BasicProps & AvatarProps; function Generic (props: GenericProps) { const size = props.size ?? 'medium'; const shape = props.shape ?? 'circle'; const classList = () => useClassList(props, 'cm-skeleton-item', { [`cm-skeleton-${props.type}`]: props.type, [`cm-skeleton-${props.type}-${size}`]: size, [`cm-skeleton-${props.type}-${shape}`]: shape, [`cm-skeleton-inline`]: props.inline, }); const style = () => useStyle(props, { width: typeof props.size === 'number' ? props.size + 'px' : props.width, height: typeof props.size === 'number' ? props.size + 'px' : props.height, }) return
; } const generator = (type: string) => (props: T): JSXElement => ; export const Avatar = generator('avatar'); export const Image = generator('image'); export const Title = generator('title'); export const Button = generator('button'); export const Item = generator('item'); export interface ParagraphProps extends BasicProps { rows?: number; } export function Paragraph (props: ParagraphProps) { const rows = props.rows ?? 4; const classList = () => useClassList(props, 'cm-skeleton-paragraph'); const arr = new Array(rows).fill(1); const outStyle = () => useStyle(props, { width: props.width, }) return
    {(_: number, index: Accessor) => { let style: any = {}; if (props.width && props.width instanceof Array) { style.width = props.width[index()]; } return
  • }}
}