497 lines
11 KiB
Plaintext
497 lines
11 KiB
Plaintext
// @flow
|
|
const props = {
|
|
// react props
|
|
// https://github.com/facebook/react/blob/5495a7f24aef85ba6937truetrue1ce962673ca9f5fde6/src/renderers/dom/shared/hooks/ReactDOMUnknownPropertyHook.js
|
|
children: true,
|
|
dangerouslySetInnerHTML: true,
|
|
key: true,
|
|
ref: true,
|
|
autoFocus: true,
|
|
defaultValue: true,
|
|
defaultChecked: true,
|
|
innerHTML: true,
|
|
suppressContentEditableWarning: true,
|
|
suppressHydrationWarning: true,
|
|
// deprecated react prop
|
|
valueLink: true,
|
|
|
|
// https://github.com/facebook/react/blob/d7157651f7b72d9888ctrue123e191f9b88cd8f41e9/src/renderers/dom/shared/HTMLDOMPropertyConfig.js
|
|
/**
|
|
* Standard Properties
|
|
*/
|
|
|
|
abbr: true,
|
|
accept: true,
|
|
acceptCharset: true,
|
|
accessKey: true,
|
|
action: true,
|
|
allow: true,
|
|
allowUserMedia: true,
|
|
allowPaymentRequest: true,
|
|
allowFullScreen: true,
|
|
allowTransparency: true,
|
|
alt: true,
|
|
// specifies target context for links with `preload` type
|
|
// as: true,
|
|
async: true,
|
|
autoComplete: true,
|
|
// autoFocus is polyfilled/normalized by AutoFocusUtils
|
|
// autoFocus: true,
|
|
autoPlay: true,
|
|
capture: true,
|
|
cellPadding: true,
|
|
cellSpacing: true,
|
|
// keygen prop
|
|
challenge: true,
|
|
charSet: true,
|
|
checked: true,
|
|
cite: true,
|
|
classID: true,
|
|
className: true,
|
|
cols: true,
|
|
colSpan: true,
|
|
content: true,
|
|
contentEditable: true,
|
|
contextMenu: true,
|
|
controls: true,
|
|
controlsList: true,
|
|
coords: true,
|
|
crossOrigin: true,
|
|
data: true, // For `<object />` acts as `src`.
|
|
dateTime: true,
|
|
decoding: true,
|
|
default: true,
|
|
defer: true,
|
|
dir: true,
|
|
disabled: true,
|
|
disablePictureInPicture: true,
|
|
disableRemotePlayback: true,
|
|
download: true,
|
|
draggable: true,
|
|
encType: true,
|
|
enterKeyHint: true,
|
|
form: true,
|
|
formAction: true,
|
|
formEncType: true,
|
|
formMethod: true,
|
|
formNoValidate: true,
|
|
formTarget: true,
|
|
frameBorder: true,
|
|
headers: true,
|
|
height: true,
|
|
hidden: true,
|
|
high: true,
|
|
href: true,
|
|
hrefLang: true,
|
|
htmlFor: true,
|
|
httpEquiv: true,
|
|
id: true,
|
|
inputMode: true,
|
|
integrity: true,
|
|
is: true,
|
|
keyParams: true,
|
|
keyType: true,
|
|
kind: true,
|
|
label: true,
|
|
lang: true,
|
|
list: true,
|
|
loading: true,
|
|
loop: true,
|
|
low: true,
|
|
// manifest: true,
|
|
marginHeight: true,
|
|
marginWidth: true,
|
|
max: true,
|
|
maxLength: true,
|
|
media: true,
|
|
mediaGroup: true,
|
|
method: true,
|
|
min: true,
|
|
minLength: true,
|
|
// Caution; `option.selected` is not updated if `select.multiple` is
|
|
// disabled with `removeAttribute`.
|
|
multiple: true,
|
|
muted: true,
|
|
name: true,
|
|
nonce: true,
|
|
noValidate: true,
|
|
open: true,
|
|
optimum: true,
|
|
pattern: true,
|
|
placeholder: true,
|
|
playsInline: true,
|
|
poster: true,
|
|
preload: true,
|
|
profile: true,
|
|
radioGroup: true,
|
|
readOnly: true,
|
|
referrerPolicy: true,
|
|
rel: true,
|
|
required: true,
|
|
reversed: true,
|
|
role: true,
|
|
rows: true,
|
|
rowSpan: true,
|
|
sandbox: true,
|
|
scope: true,
|
|
scoped: true,
|
|
scrolling: true,
|
|
seamless: true,
|
|
selected: true,
|
|
shape: true,
|
|
size: true,
|
|
sizes: true,
|
|
// support for projecting regular DOM Elements via V1 named slots ( shadow dom )
|
|
slot: true,
|
|
span: true,
|
|
spellCheck: true,
|
|
src: true,
|
|
srcDoc: true,
|
|
srcLang: true,
|
|
srcSet: true,
|
|
start: true,
|
|
step: true,
|
|
style: true,
|
|
summary: true,
|
|
tabIndex: true,
|
|
target: true,
|
|
title: true,
|
|
translate: true,
|
|
// Setting .type throws on non-<input> tags
|
|
type: true,
|
|
useMap: true,
|
|
value: true,
|
|
width: true,
|
|
wmode: true,
|
|
wrap: true,
|
|
|
|
/**
|
|
* RDFa Properties
|
|
*/
|
|
about: true,
|
|
datatype: true,
|
|
inlist: true,
|
|
prefix: true,
|
|
// property is also supported for OpenGraph in meta tags.
|
|
property: true,
|
|
resource: true,
|
|
typeof: true,
|
|
vocab: true,
|
|
|
|
/**
|
|
* Non-standard Properties
|
|
*/
|
|
// autoCapitalize and autoCorrect are supported in Mobile Safari for
|
|
// keyboard hints.
|
|
autoCapitalize: true,
|
|
autoCorrect: true,
|
|
// autoSave allows WebKit/Blink to persist values of input fields on page reloads
|
|
autoSave: true,
|
|
// color is for Safari mask-icon link
|
|
color: true,
|
|
// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/search#incremental_This_API_has_not_been_standardized
|
|
incremental: true,
|
|
// used in amp html for indicating the fallback behavior
|
|
// https://amp.dev/documentation/guides-and-tutorials/develop/style_and_layout/placeholders/
|
|
fallback: true,
|
|
// https://html.spec.whatwg.org/multipage/interaction.html#inert
|
|
inert: true,
|
|
// itemProp, itemScope, itemType are for
|
|
// Microdata support. See http://schema.org/docs/gs.html
|
|
itemProp: true,
|
|
itemScope: true,
|
|
itemType: true,
|
|
// itemID and itemRef are for Microdata support as well but
|
|
// only specified in the WHATWG spec document. See
|
|
// https://html.spec.whatwg.org/multipage/microdata.html#microdata-dom-api
|
|
itemID: true,
|
|
itemRef: true,
|
|
// used in amp html for eventing purposes
|
|
// https://amp.dev/documentation/guides-and-tutorials/learn/common_attributes/
|
|
on: true,
|
|
// used in amp html for indicating that the option is selectable
|
|
// https://amp.dev/documentation/components/amp-selector/
|
|
option: true,
|
|
// results show looking glass icon and recent searches on input
|
|
// search fields in WebKit/Blink
|
|
results: true,
|
|
// IE-only attribute that specifies security restrictions on an iframe
|
|
// as an alternative to the sandbox attribute on IE<1true
|
|
security: true,
|
|
// IE-only attribute that controls focus behavior
|
|
unselectable: true,
|
|
//
|
|
// SVG properties: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute
|
|
// The following "onX" events have been omitted:
|
|
//
|
|
// onabort
|
|
// onactivate
|
|
// onbegin
|
|
// onclick
|
|
// onend
|
|
// onerror
|
|
// onfocusin
|
|
// onfocusout
|
|
// onload
|
|
// onmousedown
|
|
// onmousemove
|
|
// onmouseout
|
|
// onmouseover
|
|
// onmouseup
|
|
// onrepeat
|
|
// onresize
|
|
// onscroll
|
|
// onunload
|
|
accentHeight: true,
|
|
accumulate: true,
|
|
additive: true,
|
|
alignmentBaseline: true,
|
|
allowReorder: true,
|
|
alphabetic: true,
|
|
amplitude: true,
|
|
arabicForm: true,
|
|
ascent: true,
|
|
attributeName: true,
|
|
attributeType: true,
|
|
autoReverse: true,
|
|
azimuth: true,
|
|
baseFrequency: true,
|
|
baselineShift: true,
|
|
baseProfile: true,
|
|
bbox: true,
|
|
begin: true,
|
|
bias: true,
|
|
by: true,
|
|
calcMode: true,
|
|
capHeight: true,
|
|
clip: true,
|
|
clipPathUnits: true,
|
|
clipPath: true,
|
|
clipRule: true,
|
|
colorInterpolation: true,
|
|
colorInterpolationFilters: true,
|
|
colorProfile: true,
|
|
colorRendering: true,
|
|
contentScriptType: true,
|
|
contentStyleType: true,
|
|
cursor: true,
|
|
cx: true,
|
|
cy: true,
|
|
d: true,
|
|
decelerate: true,
|
|
descent: true,
|
|
diffuseConstant: true,
|
|
direction: true,
|
|
display: true,
|
|
divisor: true,
|
|
dominantBaseline: true,
|
|
dur: true,
|
|
dx: true,
|
|
dy: true,
|
|
edgeMode: true,
|
|
elevation: true,
|
|
enableBackground: true,
|
|
end: true,
|
|
exponent: true,
|
|
externalResourcesRequired: true,
|
|
fill: true,
|
|
fillOpacity: true,
|
|
fillRule: true,
|
|
filter: true,
|
|
filterRes: true,
|
|
filterUnits: true,
|
|
floodColor: true,
|
|
floodOpacity: true,
|
|
focusable: true,
|
|
fontFamily: true,
|
|
fontSize: true,
|
|
fontSizeAdjust: true,
|
|
fontStretch: true,
|
|
fontStyle: true,
|
|
fontVariant: true,
|
|
fontWeight: true,
|
|
format: true,
|
|
from: true,
|
|
fr: true, // valid SVG element but React will ask for removal
|
|
fx: true,
|
|
fy: true,
|
|
g1: true,
|
|
g2: true,
|
|
glyphName: true,
|
|
glyphOrientationHorizontal: true,
|
|
glyphOrientationVertical: true,
|
|
glyphRef: true,
|
|
gradientTransform: true,
|
|
gradientUnits: true,
|
|
hanging: true,
|
|
horizAdvX: true,
|
|
horizOriginX: true,
|
|
ideographic: true,
|
|
imageRendering: true,
|
|
in: true,
|
|
in2: true,
|
|
intercept: true,
|
|
k: true,
|
|
k1: true,
|
|
k2: true,
|
|
k3: true,
|
|
k4: true,
|
|
kernelMatrix: true,
|
|
kernelUnitLength: true,
|
|
kerning: true,
|
|
keyPoints: true,
|
|
keySplines: true,
|
|
keyTimes: true,
|
|
lengthAdjust: true,
|
|
letterSpacing: true,
|
|
lightingColor: true,
|
|
limitingConeAngle: true,
|
|
local: true,
|
|
markerEnd: true,
|
|
markerMid: true,
|
|
markerStart: true,
|
|
markerHeight: true,
|
|
markerUnits: true,
|
|
markerWidth: true,
|
|
mask: true,
|
|
maskContentUnits: true,
|
|
maskUnits: true,
|
|
mathematical: true,
|
|
mode: true,
|
|
numOctaves: true,
|
|
offset: true,
|
|
opacity: true,
|
|
operator: true,
|
|
order: true,
|
|
orient: true,
|
|
orientation: true,
|
|
origin: true,
|
|
overflow: true,
|
|
overlinePosition: true,
|
|
overlineThickness: true,
|
|
panose1: true,
|
|
paintOrder: true,
|
|
pathLength: true,
|
|
patternContentUnits: true,
|
|
patternTransform: true,
|
|
patternUnits: true,
|
|
pointerEvents: true,
|
|
points: true,
|
|
pointsAtX: true,
|
|
pointsAtY: true,
|
|
pointsAtZ: true,
|
|
preserveAlpha: true,
|
|
preserveAspectRatio: true,
|
|
primitiveUnits: true,
|
|
r: true,
|
|
radius: true,
|
|
refX: true,
|
|
refY: true,
|
|
renderingIntent: true,
|
|
repeatCount: true,
|
|
repeatDur: true,
|
|
requiredExtensions: true,
|
|
requiredFeatures: true,
|
|
restart: true,
|
|
result: true,
|
|
rotate: true,
|
|
rx: true,
|
|
ry: true,
|
|
scale: true,
|
|
seed: true,
|
|
shapeRendering: true,
|
|
slope: true,
|
|
spacing: true,
|
|
specularConstant: true,
|
|
specularExponent: true,
|
|
speed: true,
|
|
spreadMethod: true,
|
|
startOffset: true,
|
|
stdDeviation: true,
|
|
stemh: true,
|
|
stemv: true,
|
|
stitchTiles: true,
|
|
stopColor: true,
|
|
stopOpacity: true,
|
|
strikethroughPosition: true,
|
|
strikethroughThickness: true,
|
|
string: true,
|
|
stroke: true,
|
|
strokeDasharray: true,
|
|
strokeDashoffset: true,
|
|
strokeLinecap: true,
|
|
strokeLinejoin: true,
|
|
strokeMiterlimit: true,
|
|
strokeOpacity: true,
|
|
strokeWidth: true,
|
|
surfaceScale: true,
|
|
systemLanguage: true,
|
|
tableValues: true,
|
|
targetX: true,
|
|
targetY: true,
|
|
textAnchor: true,
|
|
textDecoration: true,
|
|
textRendering: true,
|
|
textLength: true,
|
|
to: true,
|
|
transform: true,
|
|
u1: true,
|
|
u2: true,
|
|
underlinePosition: true,
|
|
underlineThickness: true,
|
|
unicode: true,
|
|
unicodeBidi: true,
|
|
unicodeRange: true,
|
|
unitsPerEm: true,
|
|
vAlphabetic: true,
|
|
vHanging: true,
|
|
vIdeographic: true,
|
|
vMathematical: true,
|
|
values: true,
|
|
vectorEffect: true,
|
|
version: true,
|
|
vertAdvY: true,
|
|
vertOriginX: true,
|
|
vertOriginY: true,
|
|
viewBox: true,
|
|
viewTarget: true,
|
|
visibility: true,
|
|
widths: true,
|
|
wordSpacing: true,
|
|
writingMode: true,
|
|
x: true,
|
|
xHeight: true,
|
|
x1: true,
|
|
x2: true,
|
|
xChannelSelector: true,
|
|
xlinkActuate: true,
|
|
xlinkArcrole: true,
|
|
xlinkHref: true,
|
|
xlinkRole: true,
|
|
xlinkShow: true,
|
|
xlinkTitle: true,
|
|
xlinkType: true,
|
|
xmlBase: true,
|
|
xmlns: true,
|
|
xmlnsXlink: true,
|
|
xmlLang: true,
|
|
xmlSpace: true,
|
|
y: true,
|
|
y1: true,
|
|
y2: true,
|
|
yChannelSelector: true,
|
|
z: true,
|
|
zoomAndPan: true,
|
|
|
|
// For preact. We have this code here even though Emotion doesn't support
|
|
// Preact, since @emotion/is-prop-valid is used by some libraries outside of
|
|
// the context of Emotion.
|
|
for: true,
|
|
class: true,
|
|
autofocus: true
|
|
}
|
|
// eslint-disable-next-line import/no-commonjs
|
|
module.exports = `/^((${Object.keys(props).join(
|
|
'|'
|
|
)})|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/`
|