UNPKG

@furystack/shades

Version:

A lightweight UI framework for FuryStack with JSX support

389 lines 13 kB
/** * 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