@furystack/shades
Version:
A lightweight UI framework for FuryStack with JSX support
389 lines • 13 kB
TypeScript
/**
* SVG element attribute types for JSX support.
*
* Unlike HTML elements where JSX props map to DOM properties, SVG elements
* use XML attributes set via `setAttribute`. These types describe the
* attribute-based API rather than the DOM property interfaces.
*/
import type { RefObject } from './models/render-options.js';
/**
* Common event handlers available on SVG elements.
*/
export type SvgEventHandlers = {
onclick?: (ev: MouseEvent) => void;
ondblclick?: (ev: MouseEvent) => void;
onmousedown?: (ev: MouseEvent) => void;
onmouseup?: (ev: MouseEvent) => void;
onmousemove?: (ev: MouseEvent) => void;
onmouseenter?: (ev: MouseEvent) => void;
onmouseleave?: (ev: MouseEvent) => void;
onmouseover?: (ev: MouseEvent) => void;
onmouseout?: (ev: MouseEvent) => void;
onfocus?: (ev: FocusEvent) => void;
onblur?: (ev: FocusEvent) => void;
onkeydown?: (ev: KeyboardEvent) => void;
onkeyup?: (ev: KeyboardEvent) => void;
ontouchstart?: (ev: TouchEvent) => void;
ontouchmove?: (ev: TouchEvent) => void;
ontouchend?: (ev: TouchEvent) => void;
};
/**
* SVG presentation attributes shared by most SVG elements.
* @see https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/Presentation
*/
export type SvgPresentationAttributes = {
'clip-path'?: string;
'clip-rule'?: 'nonzero' | 'evenodd';
color?: string;
cursor?: string;
display?: string;
fill?: string;
'fill-opacity'?: string | number;
'fill-rule'?: 'nonzero' | 'evenodd';
filter?: string;
'flood-color'?: string;
'flood-opacity'?: string | number;
'font-family'?: string;
'font-size'?: string | number;
'font-style'?: 'normal' | 'italic' | 'oblique';
'font-weight'?: string | number;
'letter-spacing'?: string | number;
'lighting-color'?: string;
marker?: string;
'marker-end'?: string;
'marker-mid'?: string;
'marker-start'?: string;
mask?: string;
opacity?: string | number;
overflow?: string;
'pointer-events'?: string;
'shape-rendering'?: 'auto' | 'optimizeSpeed' | 'crispEdges' | 'geometricPrecision';
'stop-color'?: string;
'stop-opacity'?: string | number;
stroke?: string;
'stroke-dasharray'?: string;
'stroke-dashoffset'?: string | number;
'stroke-linecap'?: 'butt' | 'round' | 'square';
'stroke-linejoin'?: 'arcs' | 'bevel' | 'miter' | 'miter-clip' | 'round';
'stroke-miterlimit'?: string | number;
'stroke-opacity'?: string | number;
'stroke-width'?: string | number;
'text-anchor'?: 'start' | 'middle' | 'end';
'text-decoration'?: string;
'dominant-baseline'?: string;
'alignment-baseline'?: string;
transform?: string;
'transform-origin'?: string;
visibility?: 'visible' | 'hidden' | 'collapse';
'word-spacing'?: string | number;
};
/**
* Core attributes available on all SVG elements.
*/
export type SvgCoreAttributes = {
id?: string;
className?: string;
style?: Partial<CSSStyleDeclaration>;
tabIndex?: number;
ref?: RefObject<Element>;
} & SvgPresentationAttributes & SvgEventHandlers;
/** Attributes for the `<svg>` element. */
export type SvgSvgAttributes = SvgCoreAttributes & {
viewBox?: string;
width?: string | number;
height?: string | number;
xmlns?: string;
preserveAspectRatio?: string;
x?: string | number;
y?: string | number;
};
/** Attributes for the `<g>` element. */
export type SvgGAttributes = SvgCoreAttributes;
/** Attributes for the `<defs>` element. */
export type SvgDefsAttributes = SvgCoreAttributes;
/** Attributes for the `<symbol>` element. */
export type SvgSymbolAttributes = SvgCoreAttributes & {
viewBox?: string;
preserveAspectRatio?: string;
x?: string | number;
y?: string | number;
width?: string | number;
height?: string | number;
refX?: string | number;
refY?: string | number;
};
/** Attributes for the `<use>` element. */
export type SvgUseAttributes = SvgCoreAttributes & {
href?: string;
x?: string | number;
y?: string | number;
width?: string | number;
height?: string | number;
};
/** Attributes for the `<path>` element. */
export type SvgPathAttributes = SvgCoreAttributes & {
d: string;
pathLength?: number;
};
/** Attributes for the `<rect>` element. */
export type SvgRectAttributes = SvgCoreAttributes & {
x?: string | number;
y?: string | number;
width?: string | number;
height?: string | number;
rx?: string | number;
ry?: string | number;
pathLength?: number;
};
/** Attributes for the `<circle>` element. */
export type SvgCircleAttributes = SvgCoreAttributes & {
cx?: string | number;
cy?: string | number;
r?: string | number;
pathLength?: number;
};
/** Attributes for the `<ellipse>` element. */
export type SvgEllipseAttributes = SvgCoreAttributes & {
cx?: string | number;
cy?: string | number;
rx?: string | number;
ry?: string | number;
pathLength?: number;
};
/** Attributes for the `<line>` element. */
export type SvgLineAttributes = SvgCoreAttributes & {
x1?: string | number;
y1?: string | number;
x2?: string | number;
y2?: string | number;
pathLength?: number;
};
/** Attributes for the `<polyline>` element. */
export type SvgPolylineAttributes = SvgCoreAttributes & {
points?: string;
pathLength?: number;
};
/** Attributes for the `<polygon>` element. */
export type SvgPolygonAttributes = SvgCoreAttributes & {
points?: string;
pathLength?: number;
};
/** Attributes for the `<text>` element. */
export type SvgTextAttributes = SvgCoreAttributes & {
x?: string | number;
y?: string | number;
dx?: string | number;
dy?: string | number;
rotate?: string;
textLength?: string | number;
lengthAdjust?: 'spacing' | 'spacingAndGlyphs';
};
/** Attributes for the `<tspan>` element. */
export type SvgTspanAttributes = SvgCoreAttributes & {
x?: string | number;
y?: string | number;
dx?: string | number;
dy?: string | number;
rotate?: string;
textLength?: string | number;
lengthAdjust?: 'spacing' | 'spacingAndGlyphs';
};
/** Attributes for the `<textPath>` element. */
export type SvgTextPathAttributes = SvgCoreAttributes & {
href?: string;
method?: 'align' | 'stretch';
spacing?: 'auto' | 'exact';
startOffset?: string | number;
textLength?: string | number;
lengthAdjust?: 'spacing' | 'spacingAndGlyphs';
};
/** Attributes for the `<clipPath>` element. */
export type SvgClipPathAttributes = SvgCoreAttributes & {
clipPathUnits?: 'userSpaceOnUse' | 'objectBoundingBox';
};
/** Attributes for the `<mask>` element. */
export type SvgMaskAttributes = SvgCoreAttributes & {
maskUnits?: 'userSpaceOnUse' | 'objectBoundingBox';
maskContentUnits?: 'userSpaceOnUse' | 'objectBoundingBox';
x?: string | number;
y?: string | number;
width?: string | number;
height?: string | number;
};
/** Attributes for the `<linearGradient>` element. */
export type SvgLinearGradientAttributes = SvgCoreAttributes & {
x1?: string | number;
y1?: string | number;
x2?: string | number;
y2?: string | number;
gradientUnits?: 'userSpaceOnUse' | 'objectBoundingBox';
gradientTransform?: string;
spreadMethod?: 'pad' | 'reflect' | 'repeat';
href?: string;
};
/** Attributes for the `<radialGradient>` element. */
export type SvgRadialGradientAttributes = SvgCoreAttributes & {
cx?: string | number;
cy?: string | number;
r?: string | number;
fx?: string | number;
fy?: string | number;
fr?: string | number;
gradientUnits?: 'userSpaceOnUse' | 'objectBoundingBox';
gradientTransform?: string;
spreadMethod?: 'pad' | 'reflect' | 'repeat';
href?: string;
};
/** Attributes for the `<stop>` element. */
export type SvgStopAttributes = SvgCoreAttributes & {
offset?: string | number;
'stop-color'?: string;
'stop-opacity'?: string | number;
};
/** Attributes for the `<pattern>` element. */
export type SvgPatternAttributes = SvgCoreAttributes & {
x?: string | number;
y?: string | number;
width?: string | number;
height?: string | number;
patternUnits?: 'userSpaceOnUse' | 'objectBoundingBox';
patternContentUnits?: 'userSpaceOnUse' | 'objectBoundingBox';
patternTransform?: string;
viewBox?: string;
preserveAspectRatio?: string;
href?: string;
};
/** Attributes for the `<marker>` element. */
export type SvgMarkerAttributes = SvgCoreAttributes & {
viewBox?: string;
preserveAspectRatio?: string;
refX?: string | number;
refY?: string | number;
markerUnits?: 'strokeWidth' | 'userSpaceOnUse';
markerWidth?: string | number;
markerHeight?: string | number;
orient?: string;
};
/** Attributes for the `<filter>` element. */
export type SvgFilterAttributes = SvgCoreAttributes & {
x?: string | number;
y?: string | number;
width?: string | number;
height?: string | number;
filterUnits?: 'userSpaceOnUse' | 'objectBoundingBox';
primitiveUnits?: 'userSpaceOnUse' | 'objectBoundingBox';
};
/** Common attributes for SVG filter primitive elements. */
type SvgFilterPrimitiveAttributes = SvgCoreAttributes & {
x?: string | number;
y?: string | number;
width?: string | number;
height?: string | number;
result?: string;
};
/** Attributes for the `<feGaussianBlur>` element. */
export type SvgFeGaussianBlurAttributes = SvgFilterPrimitiveAttributes & {
in?: string;
stdDeviation?: string | number;
edgeMode?: 'duplicate' | 'wrap' | 'none';
};
/** Attributes for the `<feBlend>` element. */
export type SvgFeBlendAttributes = SvgFilterPrimitiveAttributes & {
in?: string;
in2?: string;
mode?: 'normal' | 'multiply' | 'screen' | 'overlay' | 'darken' | 'lighten';
};
/** Attributes for the `<feColorMatrix>` element. */
export type SvgFeColorMatrixAttributes = SvgFilterPrimitiveAttributes & {
in?: string;
type?: 'matrix' | 'saturate' | 'hueRotate' | 'luminanceToAlpha';
values?: string;
};
/** Attributes for the `<feOffset>` element. */
export type SvgFeOffsetAttributes = SvgFilterPrimitiveAttributes & {
in?: string;
dx?: string | number;
dy?: string | number;
};
/** Attributes for the `<feFlood>` element. */
export type SvgFeFloodAttributes = SvgFilterPrimitiveAttributes & {
'flood-color'?: string;
'flood-opacity'?: string | number;
};
/** Attributes for the `<feMerge>` element. */
export type SvgFeMergeAttributes = SvgFilterPrimitiveAttributes;
/** Attributes for the `<feMergeNode>` element. */
export type SvgFeMergeNodeAttributes = SvgCoreAttributes & {
in?: string;
};
/** Attributes for the `<feComposite>` element. */
export type SvgFeCompositeAttributes = SvgFilterPrimitiveAttributes & {
in?: string;
in2?: string;
operator?: 'over' | 'in' | 'out' | 'atop' | 'xor' | 'lighter' | 'arithmetic';
k1?: number;
k2?: number;
k3?: number;
k4?: number;
};
/** Attributes for the `<image>` element (SVG). */
export type SvgImageAttributes = SvgCoreAttributes & {
href?: string;
x?: string | number;
y?: string | number;
width?: string | number;
height?: string | number;
preserveAspectRatio?: string;
crossorigin?: 'anonymous' | 'use-credentials';
};
/** Attributes for the `<foreignObject>` element. */
export type SvgForeignObjectAttributes = SvgCoreAttributes & {
x?: string | number;
y?: string | number;
width?: string | number;
height?: string | number;
};
/** Common attributes for SVG animation elements. */
type SvgAnimationAttributes = SvgCoreAttributes & {
attributeName?: string;
begin?: string;
dur?: string;
end?: string;
repeatCount?: string | number;
repeatDur?: string;
fill?: 'freeze' | 'remove';
from?: string;
to?: string;
by?: string;
values?: string;
keyTimes?: string;
keySplines?: string;
calcMode?: 'discrete' | 'linear' | 'paced' | 'spline';
};
/** Attributes for the `<animate>` element. */
export type SvgAnimateAttributes = SvgAnimationAttributes;
/** Attributes for the `<animateMotion>` element. */
export type SvgAnimateMotionAttributes = SvgAnimationAttributes & {
path?: string;
rotate?: string;
};
/** Attributes for the `<animateTransform>` element. */
export type SvgAnimateTransformAttributes = SvgAnimationAttributes & {
type?: 'translate' | 'scale' | 'rotate' | 'skewX' | 'skewY';
};
/** Attributes for the `<set>` element. */
export type SvgSetAttributes = SvgCoreAttributes & {
attributeName?: string;
to?: string;
begin?: string;
dur?: string;
end?: string;
repeatCount?: string | number;
fill?: 'freeze' | 'remove';
};
/** Attributes for the `<title>` element (SVG). */
export type SvgTitleAttributes = SvgCoreAttributes;
/** Attributes for the `<desc>` element. */
export type SvgDescAttributes = SvgCoreAttributes;
export {};
//# sourceMappingURL=svg-types.d.ts.map