diff --git a/packages/generate-arg-types/package.json b/packages/generate-arg-types/package.json index 827816f83c28..1f78ba580638 100644 --- a/packages/generate-arg-types/package.json +++ b/packages/generate-arg-types/package.json @@ -11,6 +11,7 @@ "dependencies": { "@webstudio-is/html-data": "workspace:*", "@webstudio-is/sdk": "workspace:*", + "@webstudio-is/react-sdk": "workspace:*", "fast-glob": "^3.3.2", "react-docgen-typescript": "^2.2.2", "typescript": "5.8.2", diff --git a/packages/generate-arg-types/src/props/add-descriptions.ts b/packages/generate-arg-types/src/props/add-descriptions.ts index 5c7c98dcb3ce..6ae5e2216c88 100644 --- a/packages/generate-arg-types/src/props/add-descriptions.ts +++ b/packages/generate-arg-types/src/props/add-descriptions.ts @@ -1,11 +1,8 @@ import { - domAttributesToReact, - reactPropsToDomAttributes, -} from "@webstudio-is/html-data"; -import { - htmlPropsDescriptions, - overridePropsDescriptions, -} from "@webstudio-is/html-data"; + reactPropsToStandardAttributes, + standardAttributesToReactProps, +} from "@webstudio-is/react-sdk"; +import { ariaAttributes, attributesByTag } from "@webstudio-is/html-data"; import { propsToArgTypes } from "../arg-types"; const ignoreComponents = new Set(["Embed"]); @@ -31,7 +28,6 @@ export const addDescriptions = ( Object.entries(argTypes).forEach(([propName, meta]) => { const description = getDescription( - componenName, propName, meta.description, customDescriptions @@ -43,30 +39,30 @@ export const addDescriptions = ( }); }; +const attributeDescriptions: Record = {}; +for (const attribute of Object.values(attributesByTag).flat()) { + if (attribute) { + attributeDescriptions[attribute.name] = attribute.description; + } +} +for (const attribute of ariaAttributes) { + attributeDescriptions[attribute.name] = attribute.description; +} + export const getDescription = ( - componentName: string, propName: string, currentDescription: string | undefined, customDescriptions: { [key in string]: string } = {} ): string | undefined => { - const name = (domAttributesToReact[ - propName as keyof typeof domAttributesToReact - ] || - reactPropsToDomAttributes[propName] || - propName.toLowerCase()) as keyof typeof htmlPropsDescriptions & - keyof typeof overridePropsDescriptions; - + const name = + standardAttributesToReactProps[propName] || + reactPropsToStandardAttributes[propName] || + propName.toLowerCase(); return ( customDescriptions[propName] || customDescriptions[name] || - overridePropsDescriptions[ - propName as keyof typeof overridePropsDescriptions - ] || - overridePropsDescriptions[name] || currentDescription || - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - htmlPropsDescriptions[`${componentName.toLowerCase()}:${name}`] || - htmlPropsDescriptions[name] + attributeDescriptions[propName] || + attributeDescriptions[name] ); }; diff --git a/packages/html-data/src/descriptions.ts b/packages/html-data/src/descriptions.ts deleted file mode 100644 index fa0af9326ed6..000000000000 --- a/packages/html-data/src/descriptions.ts +++ /dev/null @@ -1,175 +0,0 @@ -export const overridePropsDescriptions = { - "aria-label": - "Provides the accessible name that describes an interactive element if no other accessible name exists, for example in a button that contains an image with no text.", -}; - -export const htmlPropsDescriptions = { - accept: "List of types the server accepts, typically a file type.", - "accept-charset": "List of supported charsets.", - accesskey: "Keyboard shortcut to activate or add focus to the element.", - action: - "The URI of a program that processes the information submitted via the form.", - align: "Specifies the horizontal alignment of the element.", - allow: "Specifies a feature-policy for the iframe.", - alt: "Text description of the image, which is very important for accessibility and search engine optimization. Screen readers read this description to users so they know what the image means. Alt text is also displayed on the page if the image can't be loaded for some reason.", - async: "Executes the script asynchronously.", - autocapitalize: - "Sets whether input is automatically capitalized when entered by user.", - autocomplete: - "Indicates whether controls in this form can by default have their valuesautomatically completed by the browser.", - autofocus: - "Indicates that an element should be focused on page load, or when its parent dialog is displayed.", - autoplay: "The audio or video should play as soon as possible.", - background: - "Specifies the URL of an image file. Note: Although browsers and email clients may still support this attribute, it is obsolete. Use CSS background-image instead.", - bgcolor: - "Background color of the element. Note: This is a legacy attribute. Please use the CSS background-color property instead.", - border: - "The border width. Note: This is a legacy attribute. Please use the CSS border property instead.", - buffered: "Contains the time range of already buffered media.", - capture: - "From the Media Capture specification,specifies a new file can be captured.", - charset: "Declares the character encoding of the page or script.", - checked: "Indicates whether the element should be checked on page load.", - cite: "Contains a URI which points to the source of the quote or change.", - class: "Often used with CSS to style elements with common properties.", - color: - "This attribute sets the text color using either a named color or a color specified in the hexadecimal #RRGGBB format. Note: This is a legacy attribute. Please use the CSS color property instead.", - cols: "Defines the number of columns in a textarea.", - colspan: - "The colspan attribute defines the number of columns a cell should span.", - content: - "A value associated with http-equiv orname depending on the context.", - contenteditable: "Indicates whether the element's content is editable.", - contextmenu: - "Defines the ID of a menu element which willserve as the element's context menu.", - controls: - "Indicates whether the browser should show playback controls to the user.", - coords: "A set of values specifying the coordinates of the hot-spot region.", - crossorigin: "How the element handles cross-origin requests", - csp: "Specifies the Content Security Policy that an embedded document mustagree to enforce upon itself.", - data: "Specifies the URL of the resource.", - datetime: "Indicates the date and time associated with the element.", - decoding: "Indicates the preferred method to decode the image.", - default: - "Indicates that the track should be enabled unless the user's preferencesindicate something different.", - defer: - "Indicates that the script should be executed after the page has beenparsed.", - dir: "Defines the text direction. Allowed values are ltr (Left-To-Right) or rtl (Right-To-Left)", - disabled: "Indicates whether the user can interact with the element.", - download: - "Indicates that the hyperlink is to be used for downloading a resource.", - draggable: "Defines whether the element can be dragged.", - enctype: "Defines the content type of the form data when themethod is POST.", - enterkeyhint: - "The enterkeyhint specifies what action label (or icon) to present for the enter key onvirtual keyboards. The attribute can be used with form controls (such asthe value of textarea elements), or in elements in anediting host (e.g., using contenteditable attribute).", - for: "Associates this Label with an Input. The value of the “For” attribute should match the ID attribute of the corresponding Input element", - form: "Indicates the form that is the owner of the element.", - formaction: - "Indicates the action of the element, overriding the action defined inthe form.", - formenctype: - 'If the button/input is a submit button (e.g. type="submit"), this attribute sets the encoding type to use during form submission. If this attribute is specified, it overrides theenctype attribute of the button\'s form owner.', - formmethod: - 'If the button/input is a submit button (e.g. type="submit"), this attribute sets the submission method to use during form submission (GET, POST, etc.). If this attribute is specified, it overrides the method attribute of the button\'s form owner.', - formnovalidate: - 'If the button/input is a submit button (e.g. type="submit"), this boolean attribute specifies that the form is not to be validatedwhen it is submitted. If this attribute is specified, it overrides thenovalidate attribute of the button\'s form owner.', - formtarget: - 'If the button/input is a submit button (e.g. type="submit"), this attribute specifies the browsing context (for example, tab, window, or inline frame) in which to display the response that is received aftersubmitting the form. If this attribute is specified, it overrides thetarget attribute of the button\'s form owner.', - headers: "IDs of the elements which applies to this element.", - height: "Defines the image’s height in pixels.", - hidden: - "Prevents rendering of given element, while keeping child elements, e.g. script elements, active.", - high: "Indicates the lower bound of the upper range.", - href: "The URL of a linked resource.", - hreflang: "Specifies the language of the linked resource.", - "http-equiv": "Defines a pragma directive.", - id: "Often used with CSS to style a specific element. The value of this attribute must be unique.", - integrity: - "Specifies a Subresource Integrity value that allows browsers to verify what they fetch.", - intrinsicsize: - "This attribute tells the browser to ignore the actual intrinsic size ofthe image and pretend it's the size specified in the attribute.", - inputmode: - "Provides a hint as to the type of data that might be entered by the user while editing the element or its contents. The attribute can be used with form controls (such as the value oftextarea elements), or in elements in an editing host (e.g., using contenteditable attribute).", - ismap: "Indicates that the image is part of a server-side image map.", - kind: "Specifies the kind of text track.", - label: "Specifies a user-readable title of the element.", - lang: "Defines the language used in the element.", - language: "Defines the script language used in the element.", - loading: - "Determines whether the image will load as soon as possible (Eager), or when it scrolls into view (Lazy). Lazy loading is a great option for pages with many images because it can significantly reduce the time it takes for the page to load initially.", - "link:prefetch": - "Controls when and if the link prefetches the resources that the next page needs to make loading faster. “Intent” will prefetch when the link is hovered or focused. “Render” will prefetch when the link is rendered. “Viewport” will prefetch when the link is in the viewport. “None” will not prefetch.", - list: "Identifies a list of pre-defined options to suggest to the user.", - loop: "Indicates whether the media should start playing from the start when it's finished.", - low: "Indicates the upper bound of the lower range.", - manifest: - 'Specifies the URL of the document\'s cache manifest. Note: This attribute is obsolete, use instead.', - max: "Indicates the maximum value allowed.", - maxlength: "Defines the maximum number of characters allowed in the element.", - minlength: "Defines the minimum number of characters allowed in the element.", - media: - "Specifies a hint of the media for which the linked resource was designed.", - method: - "Defines which HTTP method to use when submitting the form. Can be GET (default) or POST.", - min: "Indicates the minimum value allowed.", - multiple: - "Indicates whether multiple values can be entered in an input of the type email or file.", - muted: "Indicates whether the audio will be initially silenced on page load.", - name: "This name is important when submitting form data to the server, as it identifies the data associated with the input. When multiple inputs share the same name attribute, they are treated as part of the same group (e.g., radio buttons or checkboxes).", - novalidate: - "This attribute indicates that the form shouldn't be validated when submitted.", - open: "Indicates whether the contents are currently visible (in the case of a
element) or whether the dialog is active and can be interacted with (in the case of a element).", - optimum: "Indicates the optimal numeric value.", - pattern: - "Defines a regular expression which the element's value will be validated against.", - ping: "The ping attribute specifies a space-separated list of URLs to be notified if a user follows the hyperlink.", - placeholder: - "Provides a hint to the user of what can be entered in the field.", - playsinline: - 'A Boolean attribute indicating that the video is to be played "inline"; that is, within the element\'s playback area. Note that the absence of this attribute does not imply that the video will always be played in fullscreen.', - poster: - "A URL indicating a poster frame to show until the user plays or seeks.", - preload: - "Indicates whether the whole resource, parts of it or nothing should be preloaded.", - readonly: "Indicates whether the element can be edited.", - referrerpolicy: - "Specifies which referrer is sent when fetching the resource.", - rel: "Specifies the relationship of the target object to the link object.", - required: - "Indicates whether this form element must be filled before the form can be submitted.", - reversed: - "Indicates whether the list should be displayed in a descending order instead of an ascending order.", - role: "Defines an explicit role for an element for use by assistive technologies.", - rows: "Defines the number of rows in a text area.", - rowspan: "Defines the number of rows a table cell should span over.", - sandbox: - "Stops a document loaded in an iframe from using certain features (such as submitting forms or opening new windows).", - scope: - "Defines the cells that the header test (defined in theth element) relates to.", - selected: "Defines a value which will be selected on page load.", - size: "Defines the width of the element (in pixels). If the element'stype attribute is text or password then it's the number of characters.", - slot: "Assigns a slot in a shadow DOM shadow tree to an element.", - source: - "Used to specify the source (URL) of the image file that should be displayed on the web page. You can paste a URL or choose an uploaded image from your Assets.", - spellcheck: "Indicates whether spell checking is allowed for the element.", - src: "The URL of the embeddable content.", - srcset: "One or more responsive image candidates.", - start: "Defines the first number if other than 1.", - style: "Defines CSS styles which will override styles previously set.", - tabindex: - "Overrides the browser's default tab order and follows the one specified instead.", - target: - "Specifies where to open the linked document (in the case of an element) or where to display the response received (in the case of a
element)", - title: "Text to be displayed in a tooltip when hovering over the element.", - translate: - "Specify whether an element's attribute values and the values of its text node children are to be translated when the page is localized, or whether to leave them unchanged.", - type: "Defines the type of the element.", - "button:type": - "Defines the behavior of the button, such as submitting a form or resetting form fields.", - "input:type": - "Specifies the type of data that this input will accept and helps the browser provide appropriate validation and formatting for that input type.", - value: - "Defines a default value which will be displayed in the element on pageload.", - width: "Defines the image’s width in pixels.", - wrap: "Indicates whether the text should be wrapped.", -}; diff --git a/packages/html-data/src/dom-attributes-react-mappings.ts b/packages/html-data/src/dom-attributes-react-mappings.ts deleted file mode 100644 index 18eef76bbde6..000000000000 --- a/packages/html-data/src/dom-attributes-react-mappings.ts +++ /dev/null @@ -1,509 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -// When adding attributes to the HTML or SVG allowed attribute list, be sure to -// also add them to this module to ensure casing and incorrect name -// warnings. -export const domAttributesToReact = { - // HTML - accept: "accept", - acceptcharset: "acceptCharset", - "accept-charset": "acceptCharset", - accesskey: "accessKey", - action: "action", - allowfullscreen: "allowFullScreen", - alt: "alt", - as: "as", - async: "async", - autocapitalize: "autoCapitalize", - autocomplete: "autoComplete", - autocorrect: "autoCorrect", - autofocus: "autoFocus", - autoplay: "autoPlay", - autosave: "autoSave", - capture: "capture", - cellpadding: "cellPadding", - cellspacing: "cellSpacing", - challenge: "challenge", - charset: "charSet", - checked: "checked", - children: "children", - cite: "cite", - class: "className", - classid: "classID", - classname: "className", - cols: "cols", - colspan: "colSpan", - content: "content", - contenteditable: "contentEditable", - contextmenu: "contextMenu", - controls: "controls", - controlslist: "controlsList", - coords: "coords", - crossorigin: "crossOrigin", - dangerouslysetinnerhtml: "dangerouslySetInnerHTML", - data: "data", - datetime: "dateTime", - default: "default", - defaultchecked: "defaultChecked", - defaultvalue: "defaultValue", - defer: "defer", - dir: "dir", - disabled: "disabled", - disablepictureinpicture: "disablePictureInPicture", - disableremoteplayback: "disableRemotePlayback", - download: "download", - draggable: "draggable", - enctype: "encType", - enterkeyhint: "enterKeyHint", - fetchpriority: "fetchPriority", - for: "htmlFor", - form: "form", - formmethod: "formMethod", - formaction: "formAction", - formenctype: "formEncType", - formnovalidate: "formNoValidate", - formtarget: "formTarget", - frameborder: "frameBorder", - headers: "headers", - height: "height", - hidden: "hidden", - high: "high", - href: "href", - hreflang: "hrefLang", - httpequiv: "httpEquiv", - "http-equiv": "httpEquiv", - icon: "icon", - id: "id", - imagesizes: "imageSizes", - imagesrcset: "imageSrcSet", - innerhtml: "innerHTML", - inputmode: "inputMode", - integrity: "integrity", - is: "is", - itemid: "itemID", - itemprop: "itemProp", - itemref: "itemRef", - itemscope: "itemScope", - itemtype: "itemType", - keyparams: "keyParams", - keytype: "keyType", - kind: "kind", - label: "label", - lang: "lang", - list: "list", - loop: "loop", - low: "low", - manifest: "manifest", - marginwidth: "marginWidth", - marginheight: "marginHeight", - max: "max", - maxlength: "maxLength", - media: "media", - mediagroup: "mediaGroup", - method: "method", - min: "min", - minlength: "minLength", - multiple: "multiple", - muted: "muted", - name: "name", - nomodule: "noModule", - nonce: "nonce", - novalidate: "noValidate", - open: "open", - optimum: "optimum", - pattern: "pattern", - placeholder: "placeholder", - playsinline: "playsInline", - poster: "poster", - preload: "preload", - profile: "profile", - radiogroup: "radioGroup", - readonly: "readOnly", - referrerpolicy: "referrerPolicy", - rel: "rel", - required: "required", - reversed: "reversed", - role: "role", - rows: "rows", - rowspan: "rowSpan", - sandbox: "sandbox", - scope: "scope", - scoped: "scoped", - scrolling: "scrolling", - seamless: "seamless", - selected: "selected", - shape: "shape", - size: "size", - sizes: "sizes", - span: "span", - spellcheck: "spellCheck", - src: "src", - srcdoc: "srcDoc", - srclang: "srcLang", - srcset: "srcSet", - start: "start", - step: "step", - style: "style", - summary: "summary", - tabindex: "tabIndex", - target: "target", - title: "title", - type: "type", - usemap: "useMap", - value: "value", - width: "width", - wmode: "wmode", - wrap: "wrap", - - // SVG - about: "about", - accentheight: "accentHeight", - "accent-height": "accentHeight", - accumulate: "accumulate", - additive: "additive", - alignmentbaseline: "alignmentBaseline", - "alignment-baseline": "alignmentBaseline", - allowreorder: "allowReorder", - alphabetic: "alphabetic", - amplitude: "amplitude", - arabicform: "arabicForm", - "arabic-form": "arabicForm", - ascent: "ascent", - attributename: "attributeName", - attributetype: "attributeType", - autoreverse: "autoReverse", - azimuth: "azimuth", - basefrequency: "baseFrequency", - baselineshift: "baselineShift", - "baseline-shift": "baselineShift", - baseprofile: "baseProfile", - bbox: "bbox", - begin: "begin", - bias: "bias", - by: "by", - calcmode: "calcMode", - capheight: "capHeight", - "cap-height": "capHeight", - clip: "clip", - clippath: "clipPath", - "clip-path": "clipPath", - clippathunits: "clipPathUnits", - cliprule: "clipRule", - "clip-rule": "clipRule", - color: "color", - colorinterpolation: "colorInterpolation", - "color-interpolation": "colorInterpolation", - colorinterpolationfilters: "colorInterpolationFilters", - "color-interpolation-filters": "colorInterpolationFilters", - colorprofile: "colorProfile", - "color-profile": "colorProfile", - colorrendering: "colorRendering", - "color-rendering": "colorRendering", - contentscripttype: "contentScriptType", - contentstyletype: "contentStyleType", - cursor: "cursor", - cx: "cx", - cy: "cy", - d: "d", - datatype: "datatype", - decelerate: "decelerate", - descent: "descent", - diffuseconstant: "diffuseConstant", - direction: "direction", - display: "display", - divisor: "divisor", - dominantbaseline: "dominantBaseline", - "dominant-baseline": "dominantBaseline", - dur: "dur", - dx: "dx", - dy: "dy", - edgemode: "edgeMode", - elevation: "elevation", - enablebackground: "enableBackground", - "enable-background": "enableBackground", - end: "end", - exponent: "exponent", - externalresourcesrequired: "externalResourcesRequired", - fill: "fill", - fillopacity: "fillOpacity", - "fill-opacity": "fillOpacity", - fillrule: "fillRule", - "fill-rule": "fillRule", - filter: "filter", - filterres: "filterRes", - filterunits: "filterUnits", - floodopacity: "floodOpacity", - "flood-opacity": "floodOpacity", - floodcolor: "floodColor", - "flood-color": "floodColor", - focusable: "focusable", - fontfamily: "fontFamily", - "font-family": "fontFamily", - fontsize: "fontSize", - "font-size": "fontSize", - fontsizeadjust: "fontSizeAdjust", - "font-size-adjust": "fontSizeAdjust", - fontstretch: "fontStretch", - "font-stretch": "fontStretch", - fontstyle: "fontStyle", - "font-style": "fontStyle", - fontvariant: "fontVariant", - "font-variant": "fontVariant", - fontweight: "fontWeight", - "font-weight": "fontWeight", - format: "format", - from: "from", - fx: "fx", - fy: "fy", - g1: "g1", - g2: "g2", - glyphname: "glyphName", - "glyph-name": "glyphName", - glyphorientationhorizontal: "glyphOrientationHorizontal", - "glyph-orientation-horizontal": "glyphOrientationHorizontal", - glyphorientationvertical: "glyphOrientationVertical", - "glyph-orientation-vertical": "glyphOrientationVertical", - glyphref: "glyphRef", - gradienttransform: "gradientTransform", - gradientunits: "gradientUnits", - hanging: "hanging", - horizadvx: "horizAdvX", - "horiz-adv-x": "horizAdvX", - horizoriginx: "horizOriginX", - "horiz-origin-x": "horizOriginX", - ideographic: "ideographic", - imagerendering: "imageRendering", - "image-rendering": "imageRendering", - in2: "in2", - in: "in", - inlist: "inlist", - intercept: "intercept", - k1: "k1", - k2: "k2", - k3: "k3", - k4: "k4", - k: "k", - kernelmatrix: "kernelMatrix", - kernelunitlength: "kernelUnitLength", - kerning: "kerning", - keypoints: "keyPoints", - keysplines: "keySplines", - keytimes: "keyTimes", - lengthadjust: "lengthAdjust", - letterspacing: "letterSpacing", - "letter-spacing": "letterSpacing", - lightingcolor: "lightingColor", - "lighting-color": "lightingColor", - limitingconeangle: "limitingConeAngle", - local: "local", - markerend: "markerEnd", - "marker-end": "markerEnd", - markerheight: "markerHeight", - markermid: "markerMid", - "marker-mid": "markerMid", - markerstart: "markerStart", - "marker-start": "markerStart", - markerunits: "markerUnits", - markerwidth: "markerWidth", - mask: "mask", - maskcontentunits: "maskContentUnits", - maskunits: "maskUnits", - mathematical: "mathematical", - mode: "mode", - numoctaves: "numOctaves", - offset: "offset", - opacity: "opacity", - operator: "operator", - order: "order", - orient: "orient", - orientation: "orientation", - origin: "origin", - overflow: "overflow", - overlineposition: "overlinePosition", - "overline-position": "overlinePosition", - overlinethickness: "overlineThickness", - "overline-thickness": "overlineThickness", - paintorder: "paintOrder", - "paint-order": "paintOrder", - panose1: "panose1", - "panose-1": "panose1", - pathlength: "pathLength", - patterncontentunits: "patternContentUnits", - patterntransform: "patternTransform", - patternunits: "patternUnits", - pointerevents: "pointerEvents", - "pointer-events": "pointerEvents", - points: "points", - pointsatx: "pointsAtX", - pointsaty: "pointsAtY", - pointsatz: "pointsAtZ", - prefix: "prefix", - preservealpha: "preserveAlpha", - preserveaspectratio: "preserveAspectRatio", - primitiveunits: "primitiveUnits", - property: "property", - r: "r", - radius: "radius", - refx: "refX", - refy: "refY", - renderingintent: "renderingIntent", - "rendering-intent": "renderingIntent", - repeatcount: "repeatCount", - repeatdur: "repeatDur", - requiredextensions: "requiredExtensions", - requiredfeatures: "requiredFeatures", - resource: "resource", - restart: "restart", - result: "result", - results: "results", - rotate: "rotate", - rx: "rx", - ry: "ry", - scale: "scale", - security: "security", - seed: "seed", - shaperendering: "shapeRendering", - "shape-rendering": "shapeRendering", - slope: "slope", - spacing: "spacing", - specularconstant: "specularConstant", - specularexponent: "specularExponent", - speed: "speed", - spreadmethod: "spreadMethod", - startoffset: "startOffset", - stddeviation: "stdDeviation", - stemh: "stemh", - stemv: "stemv", - stitchtiles: "stitchTiles", - stopcolor: "stopColor", - "stop-color": "stopColor", - stopopacity: "stopOpacity", - "stop-opacity": "stopOpacity", - strikethroughposition: "strikethroughPosition", - "strikethrough-position": "strikethroughPosition", - strikethroughthickness: "strikethroughThickness", - "strikethrough-thickness": "strikethroughThickness", - string: "string", - stroke: "stroke", - strokedasharray: "strokeDasharray", - "stroke-dasharray": "strokeDasharray", - strokedashoffset: "strokeDashoffset", - "stroke-dashoffset": "strokeDashoffset", - strokelinecap: "strokeLinecap", - "stroke-linecap": "strokeLinecap", - strokelinejoin: "strokeLinejoin", - "stroke-linejoin": "strokeLinejoin", - strokemiterlimit: "strokeMiterlimit", - "stroke-miterlimit": "strokeMiterlimit", - strokewidth: "strokeWidth", - "stroke-width": "strokeWidth", - strokeopacity: "strokeOpacity", - "stroke-opacity": "strokeOpacity", - suppresscontenteditablewarning: "suppressContentEditableWarning", - suppresshydrationwarning: "suppressHydrationWarning", - surfacescale: "surfaceScale", - systemlanguage: "systemLanguage", - tablevalues: "tableValues", - targetx: "targetX", - targety: "targetY", - textanchor: "textAnchor", - "text-anchor": "textAnchor", - textdecoration: "textDecoration", - "text-decoration": "textDecoration", - textlength: "textLength", - textrendering: "textRendering", - "text-rendering": "textRendering", - to: "to", - transform: "transform", - transformorigin: "transformOrigin", - "transform-origin": "transformOrigin", - typeof: "typeof", - u1: "u1", - u2: "u2", - underlineposition: "underlinePosition", - "underline-position": "underlinePosition", - underlinethickness: "underlineThickness", - "underline-thickness": "underlineThickness", - unicode: "unicode", - unicodebidi: "unicodeBidi", - "unicode-bidi": "unicodeBidi", - unicoderange: "unicodeRange", - "unicode-range": "unicodeRange", - unitsperem: "unitsPerEm", - "units-per-em": "unitsPerEm", - unselectable: "unselectable", - valphabetic: "vAlphabetic", - "v-alphabetic": "vAlphabetic", - values: "values", - vectoreffect: "vectorEffect", - "vector-effect": "vectorEffect", - version: "version", - vertadvy: "vertAdvY", - "vert-adv-y": "vertAdvY", - vertoriginx: "vertOriginX", - "vert-origin-x": "vertOriginX", - vertoriginy: "vertOriginY", - "vert-origin-y": "vertOriginY", - vhanging: "vHanging", - "v-hanging": "vHanging", - videographic: "vIdeographic", - "v-ideographic": "vIdeographic", - viewbox: "viewBox", - viewtarget: "viewTarget", - visibility: "visibility", - vmathematical: "vMathematical", - "v-mathematical": "vMathematical", - vocab: "vocab", - widths: "widths", - wordspacing: "wordSpacing", - "word-spacing": "wordSpacing", - writingmode: "writingMode", - "writing-mode": "writingMode", - x1: "x1", - x2: "x2", - x: "x", - xchannelselector: "xChannelSelector", - xheight: "xHeight", - "x-height": "xHeight", - xlinkactuate: "xlinkActuate", - "xlink:actuate": "xlinkActuate", - xlinkarcrole: "xlinkArcrole", - "xlink:arcrole": "xlinkArcrole", - xlinkhref: "xlinkHref", - "xlink:href": "xlinkHref", - xlinkrole: "xlinkRole", - "xlink:role": "xlinkRole", - xlinkshow: "xlinkShow", - "xlink:show": "xlinkShow", - xlinktitle: "xlinkTitle", - "xlink:title": "xlinkTitle", - xlinktype: "xlinkType", - "xlink:type": "xlinkType", - xmlbase: "xmlBase", - "xml:base": "xmlBase", - xmllang: "xmlLang", - "xml:lang": "xmlLang", - xmlns: "xmlns", - "xml:space": "xmlSpace", - xmlnsxlink: "xmlnsXlink", - "xmlns:xlink": "xmlnsXlink", - xmlspace: "xmlSpace", - y1: "y1", - y2: "y2", - y: "y", - ychannelselector: "yChannelSelector", - z: "z", - zoomandpan: "zoomAndPan", -}; - -export const reactPropsToDomAttributes = ( - Object.entries(domAttributesToReact) as [[string, string]] -).reduce((result: { [k in string]: string }, [key, value]) => { - result[value] = key; - return result; -}, {}); diff --git a/packages/html-data/src/index.ts b/packages/html-data/src/index.ts index 017213bfefd5..04e2535ca47c 100644 --- a/packages/html-data/src/index.ts +++ b/packages/html-data/src/index.ts @@ -1,5 +1,3 @@ -export * from "./descriptions"; -export * from "./dom-attributes-react-mappings"; export * from "./__generated__/elements"; export * from "./__generated__/attributes"; export * from "./__generated__/aria"; diff --git a/packages/sdk-components-animation/src/__generated__/animate-text.props.ts b/packages/sdk-components-animation/src/__generated__/animate-text.props.ts index 331ccd5f02be..c4024d67766d 100644 --- a/packages/sdk-components-animation/src/__generated__/animate-text.props.ts +++ b/packages/sdk-components-animation/src/__generated__/animate-text.props.ts @@ -1,7 +1,12 @@ import type { PropMeta } from "@webstudio-is/sdk"; export const props: Record = { - className: { required: false, control: "text", type: "string" }, + className: { + required: false, + control: "text", + type: "string", + description: "Classes to which the element belongs", + }, easing: { description: "Easing function applied within the sliding window.", required: false, diff --git a/packages/sdk-components-animation/src/__generated__/stagger-animation.props.ts b/packages/sdk-components-animation/src/__generated__/stagger-animation.props.ts index 4ed0696b5416..4e2a36b860a2 100644 --- a/packages/sdk-components-animation/src/__generated__/stagger-animation.props.ts +++ b/packages/sdk-components-animation/src/__generated__/stagger-animation.props.ts @@ -1,7 +1,12 @@ import type { PropMeta } from "@webstudio-is/sdk"; export const props: Record = { - className: { required: false, control: "text", type: "string" }, + className: { + required: false, + control: "text", + type: "string", + description: "Classes to which the element belongs", + }, easing: { description: "Easing function applied within the sliding window.", required: false, diff --git a/packages/sdk-components-react-radix/src/__generated__/accordion.props.ts b/packages/sdk-components-react-radix/src/__generated__/accordion.props.ts index bb4c207e82d8..4f0a2a166036 100644 --- a/packages/sdk-components-react-radix/src/__generated__/accordion.props.ts +++ b/packages/sdk-components-react-radix/src/__generated__/accordion.props.ts @@ -58,8 +58,7 @@ export const propsAccordionItem: Record = { required: false, control: "text", type: "string", - description: - "Defines a default value which will be displayed in the element on pageload.", + description: "Current value of the element", }, }; export const propsAccordionHeader: Record = {}; diff --git a/packages/sdk-components-react-radix/src/__generated__/checkbox.props.ts b/packages/sdk-components-react-radix/src/__generated__/checkbox.props.ts index eb9a4ee017fe..860923474f51 100644 --- a/packages/sdk-components-react-radix/src/__generated__/checkbox.props.ts +++ b/packages/sdk-components-react-radix/src/__generated__/checkbox.props.ts @@ -5,15 +5,13 @@ export const propsCheckbox: Record = { required: false, control: "boolean", type: "boolean", - description: - "Indicates whether the element should be checked on page load.", + description: "Whether the control is checked", }, required: { required: false, control: "boolean", type: "boolean", - description: - "Indicates whether this form element must be filled before the form can be submitted.", + description: "Whether the control is required for form submission", }, }; export const propsCheckboxIndicator: Record = {}; diff --git a/packages/sdk-components-react-radix/src/__generated__/collapsible.props.ts b/packages/sdk-components-react-radix/src/__generated__/collapsible.props.ts index 3f839643b2cb..a0ef874eb64c 100644 --- a/packages/sdk-components-react-radix/src/__generated__/collapsible.props.ts +++ b/packages/sdk-components-react-radix/src/__generated__/collapsible.props.ts @@ -5,7 +5,7 @@ export const propsCollapsible: Record = { required: false, control: "boolean", type: "boolean", - description: "Indicates whether the user can interact with the element.", + description: "Whether the form control is disabled", }, open: { required: false, diff --git a/packages/sdk-components-react-radix/src/__generated__/navigation-menu.props.ts b/packages/sdk-components-react-radix/src/__generated__/navigation-menu.props.ts index 655f4dbb2b86..c7a70e7b7287 100644 --- a/packages/sdk-components-react-radix/src/__generated__/navigation-menu.props.ts +++ b/packages/sdk-components-react-radix/src/__generated__/navigation-menu.props.ts @@ -14,8 +14,7 @@ export const propsNavigationMenu: Record = { control: "radio", type: "string", options: ["ltr", "rtl"], - description: - "Defines the text direction. Allowed values are ltr (Left-To-Right) or rtl (Right-To-Left)", + description: "The text directionality of the element", }, skipDelayDuration: { description: @@ -28,8 +27,7 @@ export const propsNavigationMenu: Record = { required: false, control: "text", type: "string", - description: - "Defines a default value which will be displayed in the element on pageload.", + description: "Current value of the element", }, }; export const propsNavigationMenuList: Record = {}; @@ -40,8 +38,7 @@ export const propsNavigationMenuItem: Record = { required: false, control: "text", type: "string", - description: - "Defines a default value which will be displayed in the element on pageload.", + description: "Current value of the element", }, }; export const propsNavigationMenuLink: Record = { diff --git a/packages/sdk-components-react-radix/src/__generated__/popover.props.ts b/packages/sdk-components-react-radix/src/__generated__/popover.props.ts index 5c5881853315..f8c8f256bc70 100644 --- a/packages/sdk-components-react-radix/src/__generated__/popover.props.ts +++ b/packages/sdk-components-react-radix/src/__generated__/popover.props.ts @@ -17,7 +17,6 @@ export const propsPopoverContent: Record = { type: "string", defaultValue: "center", options: ["center", "start", "end"], - description: "Specifies the horizontal alignment of the element.", }, alignOffset: { required: false, diff --git a/packages/sdk-components-react-radix/src/__generated__/radio-group.props.ts b/packages/sdk-components-react-radix/src/__generated__/radio-group.props.ts index c38614e45e35..fcc8d41c374b 100644 --- a/packages/sdk-components-react-radix/src/__generated__/radio-group.props.ts +++ b/packages/sdk-components-react-radix/src/__generated__/radio-group.props.ts @@ -7,28 +7,26 @@ export const propsRadioGroup: Record = { control: "radio", type: "string", options: ["ltr", "rtl"], - description: - "Defines the text direction. Allowed values are ltr (Left-To-Right) or rtl (Right-To-Left)", + description: "The text directionality of the element", }, disabled: { required: false, control: "boolean", type: "boolean", - description: "Indicates whether the user can interact with the element.", + description: "Whether the form control is disabled", }, loop: { required: false, control: "boolean", type: "boolean", - description: - "Indicates whether the media should start playing from the start when it's finished.", + description: "Whether to loop the media resource", }, name: { required: false, control: "text", type: "string", description: - "This name is important when submitting form data to the server, as it identifies the data associated with the input. When multiple inputs share the same name attribute, they are treated as part of the same group (e.g., radio buttons or checkboxes).", + "Name of the element to use for form submission and in the form.elements API", }, orientation: { required: false, @@ -40,15 +38,13 @@ export const propsRadioGroup: Record = { required: false, control: "boolean", type: "boolean", - description: - "Indicates whether this form element must be filled before the form can be submitted.", + description: "Whether the control is required for form submission", }, value: { required: false, control: "text", type: "string", - description: - "Defines a default value which will be displayed in the element on pageload.", + description: "Current value of the element", }, }; export const propsRadioGroupItem: Record = { @@ -56,22 +52,19 @@ export const propsRadioGroupItem: Record = { required: false, control: "boolean", type: "boolean", - description: - "Indicates whether the element should be checked on page load.", + description: "Whether the control is checked", }, required: { required: false, control: "boolean", type: "boolean", - description: - "Indicates whether this form element must be filled before the form can be submitted.", + description: "Whether the control is required for form submission", }, value: { required: true, control: "text", type: "string", - description: - "Defines a default value which will be displayed in the element on pageload.", + description: "Current value of the element", }, }; export const propsRadioGroupIndicator: Record = {}; diff --git a/packages/sdk-components-react-radix/src/__generated__/select.props.ts b/packages/sdk-components-react-radix/src/__generated__/select.props.ts index cdac01ea5983..c38286ca6d62 100644 --- a/packages/sdk-components-react-radix/src/__generated__/select.props.ts +++ b/packages/sdk-components-react-radix/src/__generated__/select.props.ts @@ -5,8 +5,7 @@ export const propsSelect: Record = { required: false, control: "text", type: "string", - description: - "Indicates whether controls in this form can by default have their valuesautomatically completed by the browser.", + description: "Hint for form autofill feature", }, defaultValue: { required: false, control: "text", type: "string" }, dir: { @@ -14,48 +13,44 @@ export const propsSelect: Record = { control: "radio", type: "string", options: ["ltr", "rtl"], - description: - "Defines the text direction. Allowed values are ltr (Left-To-Right) or rtl (Right-To-Left)", + description: "The text directionality of the element", }, disabled: { required: false, control: "boolean", type: "boolean", - description: "Indicates whether the user can interact with the element.", + description: "Whether the form control is disabled", }, form: { required: false, control: "text", type: "string", - description: "Indicates the form that is the owner of the element.", + description: "Associates the element with a form element", }, name: { required: false, control: "text", type: "string", description: - "This name is important when submitting form data to the server, as it identifies the data associated with the input. When multiple inputs share the same name attribute, they are treated as part of the same group (e.g., radio buttons or checkboxes).", + "Name of the element to use for form submission and in the form.elements API", }, open: { required: false, control: "boolean", type: "boolean", - description: - "Indicates whether the contents are currently visible (in the case of a
element) or whether the dialog is active and can be interacted with (in the case of a element).", + description: "Whether the dialog box is showing", }, required: { required: false, control: "boolean", type: "boolean", - description: - "Indicates whether this form element must be filled before the form can be submitted.", + description: "Whether the control is required for form submission", }, value: { required: false, control: "text", type: "string", - description: - "Defines a default value which will be displayed in the element on pageload.", + description: "Current value of the element", }, }; export const propsSelectTrigger: Record = {}; @@ -64,8 +59,7 @@ export const propsSelectValue: Record = { required: false, control: "text", type: "string", - description: - "Provides a hint to the user of what can be entered in the field.", + description: "User-visible label to be placed within the form control", }, }; export const propsSelectContent: Record = { @@ -74,7 +68,6 @@ export const propsSelectContent: Record = { control: "radio", type: "string", options: ["center", "start", "end"], - description: "Specifies the horizontal alignment of the element.", }, alignOffset: { required: false, control: "number", type: "number" }, arrowPadding: { required: false, control: "number", type: "number" }, @@ -95,22 +88,27 @@ export const propsSelectContent: Record = { }, }; export const propsSelectViewport: Record = { - nonce: { required: false, control: "text", type: "string" }, + nonce: { + required: false, + control: "text", + type: "string", + description: + "Cryptographic nonce used in Content Security Policy checks [CSP]", + }, }; export const propsSelectItem: Record = { disabled: { required: false, control: "boolean", type: "boolean", - description: "Indicates whether the user can interact with the element.", + description: "Whether the form control is disabled", }, textValue: { required: false, control: "text", type: "string" }, value: { required: true, control: "text", type: "string", - description: - "Defines a default value which will be displayed in the element on pageload.", + description: "Current value of the element", }, }; export const propsSelectItemIndicator: Record = {}; diff --git a/packages/sdk-components-react-radix/src/__generated__/switch.props.ts b/packages/sdk-components-react-radix/src/__generated__/switch.props.ts index e680de5d17a1..48d483ccd747 100644 --- a/packages/sdk-components-react-radix/src/__generated__/switch.props.ts +++ b/packages/sdk-components-react-radix/src/__generated__/switch.props.ts @@ -5,15 +5,13 @@ export const propsSwitch: Record = { required: false, control: "boolean", type: "boolean", - description: - "Indicates whether the element should be checked on page load.", + description: "Whether the control is checked", }, required: { required: false, control: "boolean", type: "boolean", - description: - "Indicates whether this form element must be filled before the form can be submitted.", + description: "Whether the control is required for form submission", }, }; export const propsSwitchThumb: Record = {}; diff --git a/packages/sdk-components-react-radix/src/__generated__/tabs.props.ts b/packages/sdk-components-react-radix/src/__generated__/tabs.props.ts index 0f10818b8742..e59078285f7f 100644 --- a/packages/sdk-components-react-radix/src/__generated__/tabs.props.ts +++ b/packages/sdk-components-react-radix/src/__generated__/tabs.props.ts @@ -34,8 +34,7 @@ export const propsTabs: Record = { required: false, control: "text", type: "string", - description: - "Defines a default value which will be displayed in the element on pageload.", + description: "Current value of the element", }, }; export const propsTabsList: Record = { @@ -43,8 +42,7 @@ export const propsTabsList: Record = { required: false, control: "boolean", type: "boolean", - description: - "Indicates whether the media should start playing from the start when it's finished.", + description: "Whether to loop the media resource", }, }; export const propsTabsTrigger: Record = { @@ -52,8 +50,7 @@ export const propsTabsTrigger: Record = { required: false, control: "text", type: "string", - description: - "Defines a default value which will be displayed in the element on pageload.", + description: "Current value of the element", }, }; export const propsTabsContent: Record = { @@ -61,7 +58,6 @@ export const propsTabsContent: Record = { required: false, control: "text", type: "string", - description: - "Defines a default value which will be displayed in the element on pageload.", + description: "Current value of the element", }, }; diff --git a/packages/sdk-components-react-radix/src/__generated__/tooltip.props.ts b/packages/sdk-components-react-radix/src/__generated__/tooltip.props.ts index 343b1f7749f6..aad9928cc982 100644 --- a/packages/sdk-components-react-radix/src/__generated__/tooltip.props.ts +++ b/packages/sdk-components-react-radix/src/__generated__/tooltip.props.ts @@ -30,7 +30,6 @@ export const propsTooltipContent: Record = { control: "radio", type: "string", options: ["center", "start", "end"], - description: "Specifies the horizontal alignment of the element.", }, alignOffset: { required: false, @@ -40,8 +39,7 @@ export const propsTooltipContent: Record = { "The offset in pixels from the “start“ or “end“ alignment options.", }, "aria-label": { - description: - "Provides the accessible name that describes an interactive element if no other accessible name exists, for example in a button that contains an image with no text.", + description: "A more descriptive label for accessibility purpose", required: false, control: "text", type: "string", diff --git a/packages/sdk-components-react/src/__generated__/checkbox.props.ts b/packages/sdk-components-react/src/__generated__/checkbox.props.ts index 1e2f04a29d25..ca811353e8df 100644 --- a/packages/sdk-components-react/src/__generated__/checkbox.props.ts +++ b/packages/sdk-components-react/src/__generated__/checkbox.props.ts @@ -5,7 +5,6 @@ export const props: Record = { required: false, control: "text", type: "string", - description: - "Defines a default value which will be displayed in the element on pageload.", + description: "Current value of the element", }, }; diff --git a/packages/sdk-components-react/src/__generated__/html-embed.props.ts b/packages/sdk-components-react/src/__generated__/html-embed.props.ts index 5c590040c568..08ad345b3dad 100644 --- a/packages/sdk-components-react/src/__generated__/html-embed.props.ts +++ b/packages/sdk-components-react/src/__generated__/html-embed.props.ts @@ -1,7 +1,12 @@ import type { PropMeta } from "@webstudio-is/sdk"; export const props: Record = { - className: { required: false, control: "text", type: "string" }, + className: { + required: false, + control: "text", + type: "string", + description: "Classes to which the element belongs", + }, clientOnly: { required: false, control: "boolean", type: "boolean" }, code: { required: true, control: "text", type: "string" }, executeScriptOnCanvas: { diff --git a/packages/sdk-components-react/src/__generated__/link.props.ts b/packages/sdk-components-react/src/__generated__/link.props.ts index 4396f6df5df1..ea205a798ecc 100644 --- a/packages/sdk-components-react/src/__generated__/link.props.ts +++ b/packages/sdk-components-react/src/__generated__/link.props.ts @@ -6,15 +6,13 @@ export const props: Record = { control: "boolean", type: "boolean", description: - "Indicates that the hyperlink is to be used for downloading a resource.", + "Whether to download the resource instead of navigating to it, and its filename if so", }, prefetch: { required: false, control: "select", type: "string", options: ["none", "intent", "render", "viewport"], - description: - "Controls when and if the link prefetches the resources that the next page needs to make loading faster. “Intent” will prefetch when the link is hovered or focused. “Render” will prefetch when the link is rendered. “Viewport” will prefetch when the link is in the viewport. “None” will not prefetch.", }, preventScrollReset: { required: false, control: "boolean", type: "boolean" }, reloadDocument: { required: false, control: "boolean", type: "boolean" }, @@ -24,7 +22,6 @@ export const props: Record = { control: "select", type: "string", options: ["_self", "_blank", "_parent", "_top"], - description: - "Specifies where to open the linked document (in the case of an element) or where to display the response received (in the case of a element)", + description: "Navigable for form submission", }, }; diff --git a/packages/sdk-components-react/src/__generated__/markdown-embed.props.ts b/packages/sdk-components-react/src/__generated__/markdown-embed.props.ts index 5200927fd8e4..6924b6980d30 100644 --- a/packages/sdk-components-react/src/__generated__/markdown-embed.props.ts +++ b/packages/sdk-components-react/src/__generated__/markdown-embed.props.ts @@ -1,6 +1,11 @@ import type { PropMeta } from "@webstudio-is/sdk"; export const props: Record = { - className: { required: false, control: "text", type: "string" }, + className: { + required: false, + control: "text", + type: "string", + description: "Classes to which the element belongs", + }, code: { required: true, control: "text", type: "string" }, }; diff --git a/packages/sdk-components-react/src/__generated__/radio-button.props.ts b/packages/sdk-components-react/src/__generated__/radio-button.props.ts index 1e2f04a29d25..ca811353e8df 100644 --- a/packages/sdk-components-react/src/__generated__/radio-button.props.ts +++ b/packages/sdk-components-react/src/__generated__/radio-button.props.ts @@ -5,7 +5,6 @@ export const props: Record = { required: false, control: "text", type: "string", - description: - "Defines a default value which will be displayed in the element on pageload.", + description: "Current value of the element", }, }; diff --git a/packages/sdk-components-react/src/__generated__/rich-text-link.props.ts b/packages/sdk-components-react/src/__generated__/rich-text-link.props.ts index 4396f6df5df1..ea205a798ecc 100644 --- a/packages/sdk-components-react/src/__generated__/rich-text-link.props.ts +++ b/packages/sdk-components-react/src/__generated__/rich-text-link.props.ts @@ -6,15 +6,13 @@ export const props: Record = { control: "boolean", type: "boolean", description: - "Indicates that the hyperlink is to be used for downloading a resource.", + "Whether to download the resource instead of navigating to it, and its filename if so", }, prefetch: { required: false, control: "select", type: "string", options: ["none", "intent", "render", "viewport"], - description: - "Controls when and if the link prefetches the resources that the next page needs to make loading faster. “Intent” will prefetch when the link is hovered or focused. “Render” will prefetch when the link is rendered. “Viewport” will prefetch when the link is in the viewport. “None” will not prefetch.", }, preventScrollReset: { required: false, control: "boolean", type: "boolean" }, reloadDocument: { required: false, control: "boolean", type: "boolean" }, @@ -24,7 +22,6 @@ export const props: Record = { control: "select", type: "string", options: ["_self", "_blank", "_parent", "_top"], - description: - "Specifies where to open the linked document (in the case of an element) or where to display the response received (in the case of a element)", + description: "Navigable for form submission", }, }; diff --git a/packages/sdk-components-react/src/__generated__/time.props.ts b/packages/sdk-components-react/src/__generated__/time.props.ts index 2329947b8fe5..54f507eff194 100644 --- a/packages/sdk-components-react/src/__generated__/time.props.ts +++ b/packages/sdk-components-react/src/__generated__/time.props.ts @@ -220,6 +220,7 @@ export const props: Record = { control: "text", type: "string", defaultValue: "dateTime attribute is not set", + description: "Machine-readable value", }, language: { required: false, @@ -299,7 +300,6 @@ export const props: Record = { "vi", "zh", ], - description: "Defines the script language used in the element.", }, timeStyle: { required: false, diff --git a/packages/sdk-components-react/src/__generated__/xml-node.props.ts b/packages/sdk-components-react/src/__generated__/xml-node.props.ts index 65402cc30fd0..430d4bfc2999 100644 --- a/packages/sdk-components-react/src/__generated__/xml-node.props.ts +++ b/packages/sdk-components-react/src/__generated__/xml-node.props.ts @@ -5,15 +5,20 @@ export const props: Record = { required: false, control: "text", type: "string", - description: "The URL of a linked resource.", + description: "Document base URL", + }, + hreflang: { + required: false, + control: "text", + type: "string", + description: "Language of the linked resource", }, - hreflang: { required: false, control: "text", type: "string" }, rel: { required: false, control: "text", type: "string", description: - "Specifies the relationship of the target object to the link object.", + "Relationship between the location in the document containing the hyperlink and the destination resource", }, tag: { required: false, control: "text", type: "string", defaultValue: "" }, xmlns: { required: false, control: "text", type: "string" }, diff --git a/packages/sdk-components-react/src/__generated__/xml-time.props.ts b/packages/sdk-components-react/src/__generated__/xml-time.props.ts index ed1b97216a81..3bfdb14c573a 100644 --- a/packages/sdk-components-react/src/__generated__/xml-time.props.ts +++ b/packages/sdk-components-react/src/__generated__/xml-time.props.ts @@ -13,5 +13,6 @@ export const props: Record = { control: "text", type: "string", defaultValue: "dateTime attribute is not set", + description: "Machine-readable value", }, }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a1d3f93456ee..90a8adaffc2e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1512,6 +1512,9 @@ importers: '@webstudio-is/html-data': specifier: workspace:* version: link:../html-data + '@webstudio-is/react-sdk': + specifier: workspace:* + version: link:../react-sdk '@webstudio-is/sdk': specifier: workspace:* version: link:../sdk