/* * The following functions are lifted from Preact and * modified. * * The MIT License (MIT) * * Copyright (c) 2015-present Jason Miller * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ import { type Children, type MaybeSignal, type RefSignalSetter, } from "./mod.js"; const IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i; export const setStyle = ( node: ElementCSSInlineStyle, key: any, value: string | number | null | undefined, ): void => { if (key[0] == "-") { node.style.setProperty(key, `${value}`); } else { node.style[key] = value == null ? "" : typeof value != "number" || IS_NON_DIMENSIONAL.test(key) ? `${value}` : `${value}px`; } }; export const setAttr = ( node: any, name: string, value: unknown, heuristic?: boolean, ): void => { const removeAttribute = value == null || (value === false && !name.includes("-")); if (name.startsWith("prop:")) { node[name.slice(5)] = value; } else if (name.startsWith("attr:")) { name = name.slice(5); if (!removeAttribute) { node.setAttribute(name, value); } else { node.removeAttribute(name); } } else if (!["innerHTML", "outerHTML"].includes(name)) { if ( ![ // Default value in browsers is `-1` and an empty string is // cast to `0` instead "tabIndex", "role", ...(heuristic ? [ "width", "height", "href", "list", "form", "download", "rowSpan", "colSpan", ] : []), ].includes(name) && name in node ) { try { node[name] = value; return; } catch (e) {} } // aria- and data- attributes have no boolean representation. // A `false` value is different from the attribute not being // present, so we can't remove it. For non-boolean aria // attributes we could treat false as a removal, but the // amount of exceptions would cost too many bytes. On top of // that other frameworks generally stringify `false`. if (typeof value == "function") { // never serialize functions as attribute values } else if (!removeAttribute) { node.setAttribute(name, value); } else { node.removeAttribute(name); } } }; export interface DomIntrinsicElements { // HTML a: HtmlProps & DomEventProps; abbr: HtmlProps & DomEventProps; address: HtmlProps & DomEventProps; area: HtmlProps & DomEventProps; article: HtmlProps & DomEventProps; aside: HtmlProps & DomEventProps; audio: HtmlProps & DomEventProps; b: HtmlProps & DomEventProps; base: HtmlProps & DomEventProps; bdi: HtmlProps & DomEventProps; bdo: HtmlProps & DomEventProps; big: HtmlProps & DomEventProps; blockquote: HtmlProps & DomEventProps; body: HtmlProps & DomEventProps; br: HtmlProps & DomEventProps; button: HtmlProps & DomEventProps; canvas: HtmlProps & DomEventProps; caption: HtmlProps & DomEventProps; cite: HtmlProps & DomEventProps; code: HtmlProps & DomEventProps; col: HtmlProps & DomEventProps; colgroup: HtmlProps & DomEventProps; data: HtmlProps & DomEventProps; datalist: HtmlProps & DomEventProps; dd: HtmlProps & DomEventProps; del: HtmlProps & DomEventProps; details: HtmlProps & DomEventProps; dfn: HtmlProps & DomEventProps; dialog: HtmlProps & DomEventProps; div: HtmlProps & DomEventProps; dl: HtmlProps & DomEventProps; dt: HtmlProps & DomEventProps; em: HtmlProps & DomEventProps; embed: HtmlProps & DomEventProps; fieldset: HtmlProps & DomEventProps; figcaption: HtmlProps & DomEventProps; figure: HtmlProps & DomEventProps; footer: HtmlProps & DomEventProps; form: HtmlProps & DomEventProps; h1: HtmlProps & DomEventProps; h2: HtmlProps & DomEventProps; h3: HtmlProps & DomEventProps; h4: HtmlProps & DomEventProps; h5: HtmlProps & DomEventProps; h6: HtmlProps & DomEventProps; head: HtmlProps & DomEventProps; header: HtmlProps & DomEventProps; hgroup: HtmlProps & DomEventProps; hr: HtmlProps & DomEventProps; html: HtmlProps & DomEventProps; i: HtmlProps & DomEventProps; iframe: HtmlProps & DomEventProps; img: HtmlProps & DomEventProps; input: HtmlProps & DomEventProps; ins: HtmlProps & DomEventProps; kbd: HtmlProps & DomEventProps; keygen: HtmlProps & DomEventProps; label: HtmlProps & DomEventProps; legend: HtmlProps & DomEventProps; li: HtmlProps & DomEventProps; link: HtmlProps & DomEventProps; main: HtmlProps & DomEventProps; map: HtmlProps & DomEventProps; mark: HtmlProps & DomEventProps; marquee: HtmlProps & DomEventProps; menu: HtmlProps & DomEventProps; menuitem: HtmlProps & DomEventProps; meta: HtmlProps & DomEventProps; meter: HtmlProps & DomEventProps; nav: HtmlProps & DomEventProps; noscript: HtmlProps & DomEventProps; object: HtmlProps & DomEventProps; ol: HtmlProps & DomEventProps; optgroup: HtmlProps & DomEventProps; option: HtmlProps & DomEventProps; output: HtmlProps & DomEventProps; p: HtmlProps & DomEventProps; param: HtmlProps & DomEventProps; picture: HtmlProps & DomEventProps; pre: HtmlProps & DomEventProps; progress: HtmlProps & DomEventProps; q: HtmlProps & DomEventProps; rp: HtmlProps & DomEventProps; rt: HtmlProps & DomEventProps; ruby: HtmlProps & DomEventProps; s: HtmlProps & DomEventProps; samp: HtmlProps & DomEventProps; script: HtmlProps & DomEventProps; section: HtmlProps & DomEventProps; select: HtmlProps & DomEventProps; slot: HtmlProps & DomEventProps; small: HtmlProps & DomEventProps; source: HtmlProps & DomEventProps; span: HtmlProps & DomEventProps; strong: HtmlProps & DomEventProps; style: HtmlProps & DomEventProps; sub: HtmlProps & DomEventProps; summary: HtmlProps & DomEventProps; sup: HtmlProps & DomEventProps; table: HtmlProps & DomEventProps; tbody: HtmlProps & DomEventProps; td: HtmlProps & DomEventProps; textarea: HtmlProps & DomEventProps; tfoot: HtmlProps & DomEventProps; th: HtmlProps & DomEventProps; thead: HtmlProps & DomEventProps; time: HtmlProps & DomEventProps; title: HtmlProps & DomEventProps; tr: HtmlProps & DomEventProps; track: HtmlProps & DomEventProps; u: HtmlProps & DomEventProps; ul: HtmlProps & DomEventProps; var: HtmlProps & DomEventProps; video: HtmlProps & DomEventProps; wbr: HtmlProps & DomEventProps; //SVG svg: SvgProps & DomEventProps; animate: SvgProps & DomEventProps; circle: SvgProps & DomEventProps; animateTransform: SvgProps & DomEventProps; clipPath: SvgProps & DomEventProps; defs: SvgProps & DomEventProps; desc: SvgProps & DomEventProps; ellipse: SvgProps & DomEventProps; feBlend: SvgProps & DomEventProps; feColorMatrix: SvgProps & DomEventProps; feComponentTransfer: SvgProps & DomEventProps; feComposite: SvgProps & DomEventProps; feConvolveMatrix: SvgProps & DomEventProps; feDiffuseLighting: SvgProps & DomEventProps; feDisplacementMap: SvgProps & DomEventProps; feDropShadow: SvgProps & DomEventProps; feFlood: SvgProps & DomEventProps; feFuncA: SvgProps & DomEventProps; feFuncB: SvgProps & DomEventProps; feFuncG: SvgProps & DomEventProps; feFuncR: SvgProps & DomEventProps; feGaussianBlur: SvgProps & DomEventProps; feImage: SvgProps & DomEventProps; feMerge: SvgProps & DomEventProps; feMergeNode: SvgProps & DomEventProps; feMorphology: SvgProps & DomEventProps; feOffset: SvgProps & DomEventProps; feSpecularLighting: SvgProps & DomEventProps; feTile: SvgProps & DomEventProps; feTurbulence: SvgProps & DomEventProps; filter: SvgProps & DomEventProps; foreignObject: SvgProps & DomEventProps; g: SvgProps & DomEventProps; image: SvgProps & DomEventProps; line: SvgProps & DomEventProps; linearGradient: SvgProps & DomEventProps; marker: SvgProps & DomEventProps; mask: SvgProps & DomEventProps; path: SvgProps & DomEventProps; pattern: SvgProps & DomEventProps; polygon: SvgProps & DomEventProps; polyline: SvgProps & DomEventProps; radialGradient: SvgProps & DomEventProps; rect: SvgProps & DomEventProps; stop: SvgProps & DomEventProps; symbol: SvgProps & DomEventProps; text: SvgProps & DomEventProps; textPath: SvgProps & DomEventProps; tspan: SvgProps & DomEventProps; use: SvgProps & DomEventProps; [tagName: string]: DomProps & Record; } export type Styles = { [K in Exclude< keyof CSSStyleDeclaration, | "item" | "setProperty" | "removeProperty" | "getPropertyValue" | "getPropertyPriority" | typeof Symbol.iterator | number >]?: MaybeSignal; } & { [key: string]: MaybeSignal; }; type ExcludeNeverValues = T[Exclude< keyof T, { [K in keyof T]: T[K] extends never ? K : never }[keyof T] >]; type EventMap = Pick< ElementEventMap & DocumentEventMap & GlobalEventHandlersEventMap, ExcludeNeverValues<{ [K in keyof (ElementEventMap & DocumentEventMap & GlobalEventHandlersEventMap)]: K extends Lowercase ? K : never; }> >; export type EventHandler = ( this: E, evt: Omit & { currentTarget: E; }, ) => void; export type DomEventProps = { [K in keyof EventMap as `on${K}`]?: EventHandler; }; export interface DangerousHtml { __html: string; } export interface DomProps { ref?: RefSignalSetter; class?: MaybeSignal; style?: Styles; dangerouslySetInnerHTML?: MaybeSignal; children?: Children; } interface HtmlProps extends DomProps { // Standard HTML Attributes accept?: MaybeSignal; acceptCharset?: MaybeSignal; accessKey?: MaybeSignal; action?: MaybeSignal; allow?: MaybeSignal; allowFullScreen?: MaybeSignal; allowTransparency?: MaybeSignal; alt?: MaybeSignal; as?: MaybeSignal; async?: MaybeSignal; autocomplete?: MaybeSignal; autoComplete?: MaybeSignal; autocorrect?: MaybeSignal; autoCorrect?: MaybeSignal; autofocus?: MaybeSignal; autoFocus?: MaybeSignal; autoPlay?: MaybeSignal; capture?: MaybeSignal; cellPadding?: MaybeSignal; cellSpacing?: MaybeSignal; charSet?: MaybeSignal; challenge?: MaybeSignal; checked?: MaybeSignal; cite?: MaybeSignal; cols?: MaybeSignal; colSpan?: MaybeSignal; content?: MaybeSignal; contentEditable?: MaybeSignal; contextMenu?: MaybeSignal; controls?: MaybeSignal; controlsList?: MaybeSignal; coords?: MaybeSignal; crossOrigin?: MaybeSignal; data?: MaybeSignal; dateTime?: MaybeSignal; default?: MaybeSignal; defaultChecked?: MaybeSignal; defaultValue?: MaybeSignal; defer?: MaybeSignal; dir?: MaybeSignal<"auto" | "rtl" | "ltr" | undefined>; disabled?: MaybeSignal; disableRemotePlayback?: MaybeSignal; download?: MaybeSignal; decoding?: MaybeSignal<"sync" | "async" | "auto" | undefined>; draggable?: MaybeSignal; encType?: MaybeSignal; enterkeyhint?: MaybeSignal< | "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined >; for?: MaybeSignal; form?: MaybeSignal; formAction?: MaybeSignal; formEncType?: MaybeSignal; formMethod?: MaybeSignal; formNoValidate?: MaybeSignal; formTarget?: MaybeSignal; frameBorder?: MaybeSignal; headers?: MaybeSignal; height?: MaybeSignal; hidden?: MaybeSignal; high?: MaybeSignal; href?: MaybeSignal; hrefLang?: MaybeSignal; httpEquiv?: MaybeSignal; icon?: MaybeSignal; inputMode?: MaybeSignal; integrity?: MaybeSignal; is?: MaybeSignal; keyParams?: MaybeSignal; keyType?: MaybeSignal; kind?: MaybeSignal; label?: MaybeSignal; lang?: MaybeSignal; list?: MaybeSignal; loading?: MaybeSignal<"eager" | "lazy" | undefined>; loop?: MaybeSignal; low?: MaybeSignal; manifest?: MaybeSignal; marginHeight?: MaybeSignal; marginWidth?: MaybeSignal; max?: MaybeSignal; maxLength?: MaybeSignal; media?: MaybeSignal; mediaGroup?: MaybeSignal; method?: MaybeSignal; min?: MaybeSignal; minLength?: MaybeSignal; multiple?: MaybeSignal; muted?: MaybeSignal; name?: MaybeSignal; nomodule?: MaybeSignal; nonce?: MaybeSignal; noValidate?: MaybeSignal; open?: MaybeSignal; optimum?: MaybeSignal; part?: MaybeSignal; pattern?: MaybeSignal; ping?: MaybeSignal; placeholder?: MaybeSignal; playsInline?: MaybeSignal; poster?: MaybeSignal; preload?: MaybeSignal; radioGroup?: MaybeSignal; readonly?: MaybeSignal; readOnly?: MaybeSignal; referrerpolicy?: MaybeSignal< | "no-referrer" | "no-referrer-when-downgrade" | "origin" | "origin-when-cross-origin" | "same-origin" | "strict-origin" | "strict-origin-when-cross-origin" | "unsafe-url" | undefined >; rel?: MaybeSignal; required?: MaybeSignal; reversed?: MaybeSignal; role?: MaybeSignal; rows?: MaybeSignal; rowSpan?: MaybeSignal; sandbox?: MaybeSignal; scope?: MaybeSignal; scoped?: MaybeSignal; scrolling?: MaybeSignal; seamless?: MaybeSignal; selected?: MaybeSignal; shape?: MaybeSignal; size?: MaybeSignal; sizes?: MaybeSignal; slot?: MaybeSignal; span?: MaybeSignal; spellcheck?: MaybeSignal; spellCheck?: MaybeSignal; src?: MaybeSignal; srcset?: MaybeSignal; srcDoc?: MaybeSignal; srcLang?: MaybeSignal; srcSet?: MaybeSignal; start?: MaybeSignal; step?: MaybeSignal; summary?: MaybeSignal; tabIndex?: MaybeSignal; target?: MaybeSignal; title?: MaybeSignal; type?: MaybeSignal; useMap?: MaybeSignal; value?: MaybeSignal; volume?: MaybeSignal; width?: MaybeSignal; wmode?: MaybeSignal; wrap?: MaybeSignal; // Non-standard Attributes autocapitalize?: MaybeSignal< "off" | "none" | "on" | "sentences" | "words" | "characters" | undefined >; autoCapitalize?: MaybeSignal< "off" | "none" | "on" | "sentences" | "words" | "characters" | undefined >; disablePictureInPicture?: MaybeSignal; results?: MaybeSignal; translate?: MaybeSignal<"yes" | "no" | undefined>; // RDFa Attributes about?: MaybeSignal; datatype?: MaybeSignal; inlist?: MaybeSignal; prefix?: MaybeSignal; property?: MaybeSignal; resource?: MaybeSignal; typeof?: MaybeSignal; vocab?: MaybeSignal; // Microdata Attributes itemProp?: MaybeSignal; itemScope?: MaybeSignal; itemType?: MaybeSignal; itemID?: MaybeSignal; itemRef?: MaybeSignal; [name: string]: any; } interface SvgProps extends HtmlProps { "accent-height"?: MaybeSignal; accumulate?: MaybeSignal<"none" | "sum" | undefined>; additive?: MaybeSignal<"replace" | "sum" | undefined>; "alignment-baseline"?: MaybeSignal< | "auto" | "baseline" | "before-edge" | "text-before-edge" | "middle" | "central" | "after-edge" | "text-after-edge" | "ideographic" | "alphabetic" | "hanging" | "mathematical" | "inherit" | undefined >; "allow-reorder"?: MaybeSignal<"no" | "yes" | undefined>; alphabetic?: MaybeSignal; amplitude?: MaybeSignal; "arabic-form"?: MaybeSignal< "initial" | "medial" | "terminal" | "isolated" | undefined >; ascent?: MaybeSignal; attributeName?: MaybeSignal; attributeType?: MaybeSignal; azimuth?: MaybeSignal; baseFrequency?: MaybeSignal; "baseline-shift"?: MaybeSignal; baseProfile?: MaybeSignal; bbox?: MaybeSignal; begin?: MaybeSignal; bias?: MaybeSignal; by?: MaybeSignal; calcMode?: MaybeSignal; "cap-height"?: MaybeSignal; clip?: MaybeSignal; "clip-path"?: MaybeSignal; clipPathUnits?: MaybeSignal; "clip-rule"?: MaybeSignal; "color-interpolation"?: MaybeSignal; "color-interpolation-filters"?: MaybeSignal< "auto" | "sRGB" | "linearRGB" | "inherit" | undefined >; "color-profile"?: MaybeSignal; "color-rendering"?: MaybeSignal; contentScriptType?: MaybeSignal; contentStyleType?: MaybeSignal; cursor?: MaybeSignal; cx?: MaybeSignal; cy?: MaybeSignal; d?: MaybeSignal; decelerate?: MaybeSignal; descent?: MaybeSignal; diffuseConstant?: MaybeSignal; direction?: MaybeSignal; display?: MaybeSignal; divisor?: MaybeSignal; "dominant-baseline"?: MaybeSignal; dur?: MaybeSignal; dx?: MaybeSignal; dy?: MaybeSignal; edgeMode?: MaybeSignal; elevation?: MaybeSignal; "enable-background"?: MaybeSignal; end?: MaybeSignal; exponent?: MaybeSignal; externalResourcesRequired?: MaybeSignal; fill?: MaybeSignal; "fill-opacity"?: MaybeSignal; "fill-rule"?: MaybeSignal<"nonzero" | "evenodd" | "inherit" | undefined>; filter?: MaybeSignal; filterRes?: MaybeSignal; filterUnits?: MaybeSignal; "flood-color"?: MaybeSignal; "flood-opacity"?: MaybeSignal; focusable?: MaybeSignal; "font-family"?: MaybeSignal; "font-size"?: MaybeSignal; "font-size-adjust"?: MaybeSignal; "font-stretch"?: MaybeSignal; "font-style"?: MaybeSignal; "font-variant"?: MaybeSignal; "font-weight"?: MaybeSignal; format?: MaybeSignal; from?: MaybeSignal; fx?: MaybeSignal; fy?: MaybeSignal; g1?: MaybeSignal; g2?: MaybeSignal; "glyph-name"?: MaybeSignal; "glyph-orientation-horizontal"?: MaybeSignal; "glyph-orientation-vertical"?: MaybeSignal; glyphRef?: MaybeSignal; gradientTransform?: MaybeSignal; gradientUnits?: MaybeSignal; hanging?: MaybeSignal; "horiz-adv-x"?: MaybeSignal; "horiz-origin-x"?: MaybeSignal; ideographic?: MaybeSignal; "image-rendering"?: MaybeSignal; in2?: MaybeSignal; in?: MaybeSignal; intercept?: MaybeSignal; k1?: MaybeSignal; k2?: MaybeSignal; k3?: MaybeSignal; k4?: MaybeSignal; k?: MaybeSignal; kernelMatrix?: MaybeSignal; kernelUnitLength?: MaybeSignal; kerning?: MaybeSignal; keyPoints?: MaybeSignal; keySplines?: MaybeSignal; keyTimes?: MaybeSignal; lengthAdjust?: MaybeSignal; "letter-spacing"?: MaybeSignal; "lighting-color"?: MaybeSignal; limitingConeAngle?: MaybeSignal; local?: MaybeSignal; "marker-end"?: MaybeSignal; markerHeight?: MaybeSignal; "marker-mid"?: MaybeSignal; "marker-start"?: MaybeSignal; markerUnits?: MaybeSignal; markerWidth?: MaybeSignal; mask?: MaybeSignal; maskContentUnits?: MaybeSignal; maskUnits?: MaybeSignal; mathematical?: MaybeSignal; mode?: MaybeSignal; numOctaves?: MaybeSignal; offset?: MaybeSignal; opacity?: MaybeSignal; operator?: MaybeSignal; order?: MaybeSignal; orient?: MaybeSignal; orientation?: MaybeSignal; origin?: MaybeSignal; overflow?: MaybeSignal; "overline-position"?: MaybeSignal; "overline-thickness"?: MaybeSignal; "paint-order"?: MaybeSignal; "panose-1"?: MaybeSignal; pathLength?: MaybeSignal; patternContentUnits?: MaybeSignal; patternTransform?: MaybeSignal; patternUnits?: MaybeSignal; "pointer-events"?: MaybeSignal; points?: MaybeSignal; pointsAtX?: MaybeSignal; pointsAtY?: MaybeSignal; pointsAtZ?: MaybeSignal; preserveAlpha?: MaybeSignal; preserveAspectRatio?: MaybeSignal; primitiveUnits?: MaybeSignal; r?: MaybeSignal; radius?: MaybeSignal; refX?: MaybeSignal; refY?: MaybeSignal; "rendering-intent"?: MaybeSignal; repeatCount?: MaybeSignal; repeatDur?: MaybeSignal; requiredExtensions?: MaybeSignal; requiredFeatures?: MaybeSignal; restart?: MaybeSignal; result?: MaybeSignal; rotate?: MaybeSignal; rx?: MaybeSignal; ry?: MaybeSignal; scale?: MaybeSignal; seed?: MaybeSignal; "shape-rendering"?: MaybeSignal; slope?: MaybeSignal; spacing?: MaybeSignal; specularConstant?: MaybeSignal; specularExponent?: MaybeSignal; speed?: MaybeSignal; spreadMethod?: MaybeSignal; startOffset?: MaybeSignal; stdDeviation?: MaybeSignal; stemh?: MaybeSignal; stemv?: MaybeSignal; stitchTiles?: MaybeSignal; "stop-color"?: MaybeSignal; "stop-opacity"?: MaybeSignal; "strikethrough-position"?: MaybeSignal; "strikethrough-thickness"?: MaybeSignal; string?: MaybeSignal; stroke?: MaybeSignal; "stroke-dasharray"?: MaybeSignal; "stroke-dashoffset"?: MaybeSignal; "stroke-linecap"?: MaybeSignal< "butt" | "round" | "square" | "inherit" | undefined >; "stroke-linejoin"?: MaybeSignal< "miter" | "round" | "bevel" | "inherit" | undefined >; "stroke-miterlimit"?: MaybeSignal; "stroke-opacity"?: MaybeSignal; "stroke-width"?: MaybeSignal; surfaceScale?: MaybeSignal; systemLanguage?: MaybeSignal; tableValues?: MaybeSignal; targetX?: MaybeSignal; targetY?: MaybeSignal; textAnchor?: MaybeSignal; textDecoration?: MaybeSignal; textLength?: MaybeSignal; textRendering?: MaybeSignal; to?: MaybeSignal; transform?: MaybeSignal; "transform-origin"?: MaybeSignal; u1?: MaybeSignal; u2?: MaybeSignal; "underline-position"?: MaybeSignal; "underline-thickness"?: MaybeSignal; unicode?: MaybeSignal; "unicode-bidi"?: MaybeSignal; "unicode-range"?: MaybeSignal; "units-per-em"?: MaybeSignal; "v-alphabetic"?: MaybeSignal; values?: MaybeSignal; vectorEffect?: MaybeSignal; version?: MaybeSignal; "vert-adv-y"?: MaybeSignal; "vert-origin-x"?: MaybeSignal; "vert-origin-y"?: MaybeSignal; "v-hanging"?: MaybeSignal; "v-ideographic"?: MaybeSignal; viewBox?: MaybeSignal; viewTarget?: MaybeSignal; visibility?: MaybeSignal; "v-mathematical"?: MaybeSignal; widths?: MaybeSignal; "word-spacing"?: MaybeSignal; writingMode?: MaybeSignal; x1?: MaybeSignal; x2?: MaybeSignal; x?: MaybeSignal; xChannelSelector?: MaybeSignal; "x-height"?: MaybeSignal; y1?: MaybeSignal; y2?: MaybeSignal; y?: MaybeSignal; yChannelSelector?: MaybeSignal; z?: MaybeSignal; zoomAndPan?: MaybeSignal; }