diff --git a/src/CSSFontLoadingAPI.res b/src/CSSFontLoadingAPI.res
index 6ee7d2f..5232bbf 100644
--- a/src/CSSFontLoadingAPI.res
+++ b/src/CSSFontLoadingAPI.res
@@ -22,6 +22,7 @@ type fontFaceSetLoadStatus =
 /**
 [See FontFace on MDN](https://developer.mozilla.org/docs/Web/API/FontFace)
 */
+@editor.completeFrom(FontFace)
 type rec fontFace = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/FontFace/family)
@@ -76,6 +77,8 @@ type rec fontFace = {
 /**
 [See FontFaceSet on MDN](https://developer.mozilla.org/docs/Web/API/FontFaceSet)
 */
+@editor.completeFrom(FontFace)
+@editor.completeFrom(FontFaceSet)
 type rec fontFaceSet = {
   ...eventTarget,
   /**
diff --git a/src/CanvasAPI.res b/src/CanvasAPI.res
index 11fd4e7..e7e431b 100644
--- a/src/CanvasAPI.res
+++ b/src/CanvasAPI.res
@@ -120,6 +120,7 @@ type webGLPowerPreference =
 /**
 [See OffscreenCanvas on MDN](https://developer.mozilla.org/docs/Web/API/OffscreenCanvas)
 */
+@editor.completeFrom(OffscreenCanvas)
 type offscreenCanvas = {
   ...eventTarget,
   /**
@@ -141,6 +142,7 @@ They can be set, to replace the bitmap with a new, transparent black bitmap of t
 /**
 [See ImageBitmap on MDN](https://developer.mozilla.org/docs/Web/API/ImageBitmap)
 */
+@editor.completeFrom(ImageBitmap)
 type imageBitmap = {
   /**
     Returns the intrinsic width of the image, in CSS pixels.
@@ -271,6 +273,7 @@ type offscreenCanvasRenderingContext2D = {
 /**
 [See ImageBitmapRenderingContext on MDN](https://developer.mozilla.org/docs/Web/API/ImageBitmapRenderingContext)
 */
+@editor.completeFrom(ImageBitmapRenderingContext)
 type imageBitmapRenderingContext = {
   /**
     Returns the canvas element that the context is bound to.
@@ -336,18 +339,21 @@ type webGL2RenderingContext = {
 An opaque object describing a gradient. It is returned by the methods CanvasRenderingContext2D.createLinearGradient() or CanvasRenderingContext2D.createRadialGradient().
 [See CanvasGradient on MDN](https://developer.mozilla.org/docs/Web/API/CanvasGradient)
 */
+@editor.completeFrom(CanvasGradient)
 type canvasGradient = {}
 
 /**
 An opaque object describing a pattern, based on an image, a canvas, or a video, created by the CanvasRenderingContext2D.createPattern() method.
 [See CanvasPattern on MDN](https://developer.mozilla.org/docs/Web/API/CanvasPattern)
 */
+@editor.completeFrom(CanvasPattern)
 type canvasPattern = {}
 
 /**
 This Canvas 2D API interface is used to declare a path that can then be used on a CanvasRenderingContext2D object. The path methods of the CanvasRenderingContext2D interface are also present on this interface, which gives you the convenience of being able to retain and replay your path whenever desired.
 [See Path2D on MDN](https://developer.mozilla.org/docs/Web/API/Path2D)
 */
+@editor.completeFrom(Path2D)
 type path2D = {}
 
 /**
diff --git a/src/ChannelMessagingAPI.res b/src/ChannelMessagingAPI.res
index 1cfc02a..a960ac7 100644
--- a/src/ChannelMessagingAPI.res
+++ b/src/ChannelMessagingAPI.res
@@ -6,6 +6,7 @@ open EventAPI
 This Channel Messaging API interface represents one of the two ports of a MessageChannel, allowing messages to be sent from one port and listening out for them arriving at the other.
 [See MessagePort on MDN](https://developer.mozilla.org/docs/Web/API/MessagePort)
 */
+@editor.completeFrom(MessagePort)
 type messagePort = {
   ...eventTarget,
 }
diff --git a/src/ClipboardAPI.res b/src/ClipboardAPI.res
index 56e2067..ab2e5c5 100644
--- a/src/ClipboardAPI.res
+++ b/src/ClipboardAPI.res
@@ -10,6 +10,7 @@ type presentationStyle =
 /**
 [See ClipboardItem on MDN](https://developer.mozilla.org/docs/Web/API/ClipboardItem)
 */
+@editor.completeFrom(ClipboardItem)
 type clipboardItem = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/ClipboardItem/presentationStyle)
@@ -24,6 +25,7 @@ type clipboardItem = {
 /**
 [See Clipboard on MDN](https://developer.mozilla.org/docs/Web/API/Clipboard)
 */
+@editor.completeFrom(Clipboard)
 type clipboard = {
   ...eventTarget,
 }
diff --git a/src/CredentialManagementAPI.res b/src/CredentialManagementAPI.res
index 77a783e..865d6b2 100644
--- a/src/CredentialManagementAPI.res
+++ b/src/CredentialManagementAPI.res
@@ -41,6 +41,7 @@ type attestationConveyancePreference =
 /**
 [See CredentialsContainer on MDN](https://developer.mozilla.org/docs/Web/API/CredentialsContainer)
 */
+@editor.completeFrom(CredentialsContainer)
 type credentialsContainer = {}
 
 /**
diff --git a/src/DOMAPI.res b/src/DOMAPI.res
index 961a7f9..1366770 100644
--- a/src/DOMAPI.res
+++ b/src/DOMAPI.res
@@ -201,12 +201,13 @@ type shareData = {
   mutable url?: string,
 }
 
-type fillStyle
+@editor.completeFrom(FillStyle) type fillStyle
 
 /**
-The location (URL) of the object it is linked to. Changes done on it are reflected on the object it relates to. Both the Document and Window interface have such a linked Location, accessible via Document.location and Window.location respectively.
+@editor.completeFrom(Window) The location (URL) of the object it is linked to. Changes done on it are reflected on the object it relates to. Both the Document and Window interface have such a linked Location, accessible via Document.location and Window.location respectively.
 [See Location on MDN](https://developer.mozilla.org/docs/Web/API/Location)
 */
+@editor.completeFrom(Location)
 type location = {
   /**
     Returns the Location object's URL.
@@ -294,6 +295,7 @@ type userActivation = {
 The state and the identity of the user agent. It allows scripts to query it and to register themselves to carry on some activities.
 [See Navigator on MDN](https://developer.mozilla.org/docs/Web/API/Navigator)
 */
+@editor.completeFrom(Navigator)
 type navigator = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/Navigator/clipboard)
@@ -385,6 +387,7 @@ type navigator = {
 A set of space-separated tokens. Such a set is returned by Element.classList, HTMLLinkElement.relList, HTMLAnchorElement.relList, HTMLAreaElement.relList, HTMLIframeElement.sandbox, or HTMLOutputElement.htmlFor. It is indexed beginning with 0 as with JavaScript Array objects. DOMTokenList is always case-sensitive.
 [See DOMTokenList on MDN](https://developer.mozilla.org/docs/Web/API/DOMTokenList)
 */
+@editor.completeFrom(DOMTokenList)
 type domTokenList = {
   /**
     Returns the number of tokens.
@@ -404,6 +407,7 @@ Can be set, to change the associated attribute.
 A collection of Attr objects. Objects inside a NamedNodeMap are not in any particular order, unlike NodeList, although they may be accessed by an index as in an array.
 [See NamedNodeMap on MDN](https://developer.mozilla.org/docs/Web/API/NamedNodeMap)
 */
+@editor.completeFrom(NamedNodeMap)
 type namedNodeMap = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/NamedNodeMap/length)
@@ -419,6 +423,7 @@ type fragmentDirective = {}
 /**
 [See CustomElementRegistry on MDN](https://developer.mozilla.org/docs/Web/API/CustomElementRegistry)
 */
+@editor.completeFrom(CustomElementRegistry)
 type customElementRegistry = {}
 
 /**
@@ -434,6 +439,7 @@ type barProp = {
 /**
 [See ScreenOrientation on MDN](https://developer.mozilla.org/docs/Web/API/ScreenOrientation)
 */
+@editor.completeFrom(ScreenOrientation)
 type screenOrientation = {
   ...eventTarget,
   /**
@@ -494,6 +500,7 @@ type offscreenRenderingContext = any
 /**
 [See AnimationTimeline on MDN](https://developer.mozilla.org/docs/Web/API/AnimationTimeline)
 */
+@editor.completeFrom(Animation)
 type rec animationTimeline = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/AnimationTimeline/currentTime)
@@ -504,6 +511,7 @@ type rec animationTimeline = {
 /**
 [See DocumentTimeline on MDN](https://developer.mozilla.org/docs/Web/API/DocumentTimeline)
 */
+@editor.completeFrom(DocumentTimeline)
 and documentTimeline = {
   // Base properties from AnimationTimeline
   /**
@@ -516,6 +524,7 @@ and documentTimeline = {
 /**
 [See MediaList on MDN](https://developer.mozilla.org/docs/Web/API/MediaList)
 */
+@editor.completeFrom(MediaList)
 type mediaList = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/MediaList/mediaText)
@@ -530,6 +539,7 @@ type mediaList = {
 /**
 [See StylePropertyMapReadOnly on MDN](https://developer.mozilla.org/docs/Web/API/StylePropertyMapReadOnly)
 */
+@editor.completeFrom(StylePropertyMapReadOnly)
 type stylePropertyMapReadOnly = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/StylePropertyMapReadOnly/size)
@@ -540,6 +550,7 @@ type stylePropertyMapReadOnly = {
 /**
 [See StylePropertyMap on MDN](https://developer.mozilla.org/docs/Web/API/StylePropertyMap)
 */
+@editor.completeFrom(StylePropertyMap)
 type stylePropertyMap = {
   ...stylePropertyMapReadOnly,
 }
@@ -554,6 +565,7 @@ type domStringMap = {}
 A list of StyleSheet.
 [See StyleSheetList on MDN](https://developer.mozilla.org/docs/Web/API/StyleSheetList)
 */
+@editor.completeFrom(StyleSheetList)
 type rec styleSheetList = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/StyleSheetList/length)
@@ -601,6 +613,7 @@ and styleSheet = {
 A single CSS style sheet. It inherits properties and methods from its parent, StyleSheet.
 [See CSSStyleSheet on MDN](https://developer.mozilla.org/docs/Web/API/CSSStyleSheet)
 */
+@editor.completeFrom(CSSStyleSheet)
 and cssStyleSheet = {
   // Base properties from StyleSheet
   /**
@@ -667,6 +680,7 @@ and cssRule = {
 A CSSRuleList is an (indirect-modify only) array-like object containing an ordered collection of CSSRule objects.
 [See CSSRuleList on MDN](https://developer.mozilla.org/docs/Web/API/CSSRuleList)
 */
+@editor.completeFrom(CSSRuleList)
 and cssRuleList = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/CSSRuleList/length)
@@ -678,6 +692,7 @@ and cssRuleList = {
 An object that is a CSS declaration block, and exposes style information and various style-related methods and properties.
 [See CSSStyleDeclaration on MDN](https://developer.mozilla.org/docs/Web/API/CSSStyleDeclaration)
 */
+@editor.completeFrom(CSSStyleDeclaration)
 and cssStyleDeclaration = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/CSSStyleDeclaration/cssText)
@@ -2385,6 +2400,7 @@ and cssStyleDeclaration = {
 Node is an interface from which a number of DOM API object types inherit. It allows those types to be treated similarly; for example, inheriting the same set of methods, or being tested in the same way.
 [See Node on MDN](https://developer.mozilla.org/docs/Web/API/Node)
 */
+@editor.completeFrom(Node)
 type rec node = {
   ...eventTarget,
   /**
@@ -2461,6 +2477,7 @@ type rec node = {
 NodeList objects are collections of nodes, usually returned by properties such as Node.childNodes and methods such as document.querySelectorAll().
 [See NodeList on MDN](https://developer.mozilla.org/docs/Web/API/NodeList)
 */
+@editor.completeFrom(NodeList)
 and nodeList = {
   /**
     Returns the number of nodes in the collection.
@@ -2483,6 +2500,7 @@ and nodeListOf<'tNode> = {
 Element is the most general base class from which all objects in a Document inherit. It only has methods and properties common to all kinds of elements. More specific classes inherit from Element.
 [See Element on MDN](https://developer.mozilla.org/docs/Web/API/Element)
 */
+@editor.completeFrom(Element)
 and element = {
   // Base properties from Node
   /**
@@ -2854,6 +2872,7 @@ and element = {
 /**
 [See ShadowRoot on MDN](https://developer.mozilla.org/docs/Web/API/ShadowRoot)
 */
+@editor.completeFrom(ShadowRoot)
 and shadowRoot = {
   // Base properties from DocumentFragment
   // End base properties from DocumentFragment
@@ -2994,6 +3013,7 @@ Similarly, when the focused element is in a different node tree than documentOrS
 A generic collection (array-like object similar to arguments) of elements (in document order) and offers methods and properties for selecting from the list.
 [See HTMLCollection on MDN](https://developer.mozilla.org/docs/Web/API/HTMLCollection)
 */
+@editor.completeFrom(HTMLCollection)
 and htmlCollection = {
   /**
     Sets or retrieves the number of objects in a collection.
@@ -3016,6 +3036,7 @@ and htmlCollectionOf<'t> = {
 A collection of HTML form control elements. 
 [See HTMLFormControlsCollection on MDN](https://developer.mozilla.org/docs/Web/API/HTMLFormControlsCollection)
 */
+@editor.completeFrom(HTMLFormControlsCollection)
 and htmlFormControlsCollection = {
   // Base properties from HTMLCollection
   /**
@@ -3030,6 +3051,7 @@ and htmlFormControlsCollection = {
 Any HTML element. Some elements directly implement this interface, while others implement it via an interface that inherits it.
 [See HTMLElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLElement)
 */
+@editor.completeFrom(HTMLElement)
 and htmlElement = {
   // Base properties from Element
   /**
@@ -3324,6 +3346,7 @@ and htmlElement = {
 Contains the descriptive information, or metadata, for a document. This object inherits all of the properties and methods described in the HTMLElement interface.
 [See HTMLHeadElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLHeadElement)
 */
+@editor.completeFrom(HTMLHeadElement)
 and htmlHeadElement = {
   // Base properties from HTMLElement
   /**
@@ -3580,6 +3603,7 @@ and htmlHeadElement = {
 A <form> element in the DOM; it allows access to and in some cases modification of aspects of the form, as well as access to its component elements.
 [See HTMLFormElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLFormElement)
 */
+@editor.completeFrom(HTMLFormElement)
 and htmlFormElement = {
   // Base properties from HTMLElement
   /**
@@ -3887,6 +3911,7 @@ and htmlFormElement = {
 Provides special properties and methods for manipulating <img> elements.
 [See HTMLImageElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLImageElement)
 */
+@editor.completeFrom(HTMLImageElement)
 and htmlImageElement = {
   // Base properties from HTMLElement
   /**
@@ -4230,6 +4255,7 @@ and htmlImageElement = {
 Provides special properties (beyond the regular HTMLElement interface it also has available to it by inheritance) for manipulating <embed> elements.
 [See HTMLEmbedElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLEmbedElement)
 */
+@editor.completeFrom(HTMLEmbedElement)
 and htmlEmbedElement = {
   // Base properties from HTMLElement
   /**
@@ -4502,6 +4528,7 @@ and htmlEmbedElement = {
 Hyperlink elements and provides special properties and methods (beyond those of the regular HTMLElement object interface that they inherit from) for manipulating the layout and presentation of such elements.
 [See HTMLAnchorElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLAnchorElement)
 */
+@editor.completeFrom(HTMLAnchorElement)
 and htmlAnchorElement = {
   // Base properties from HTMLElement
   /**
@@ -4875,6 +4902,7 @@ Can be set, to change the URL's fragment (ignores leading "#").
 Provides special properties and methods (beyond those of the regular object HTMLElement interface it also has available to it by inheritance) for manipulating the layout and presentation of <area> elements.
 [See HTMLAreaElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLAreaElement)
 */
+@editor.completeFrom(HTMLAreaElement)
 and htmlAreaElement = {
   // Base properties from HTMLElement
   /**
@@ -5228,6 +5256,7 @@ Can be set, to change the URL's fragment (ignores leading "#").
 HTML <script> elements expose the HTMLScriptElement interface, which provides special properties and methods for manipulating the behavior and execution of <script> elements (beyond the inherited HTMLElement interface).
 [See HTMLScriptElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLScriptElement)
 */
+@editor.completeFrom(HTMLScriptElement)
 and htmlScriptElement = {
   // Base properties from HTMLElement
   /**
@@ -5530,6 +5559,7 @@ and htmlScriptElement = {
 An object providing methods which are not dependent on any particular document. Such an object is returned by the Document.implementation property.
 [See DOMImplementation on MDN](https://developer.mozilla.org/docs/Web/API/DOMImplementation)
 */
+@editor.completeFrom(DOMImplementation)
 and domImplementation = {}
 
 /**
@@ -5626,6 +5656,7 @@ and documentType = {
 Any web page loaded in the browser and serves as an entry point into the web page's content, which is the DOM tree.
 [See Document on MDN](https://developer.mozilla.org/docs/Web/API/Document)
 */
+@editor.completeFrom(Document)
 and document = {
   // Base properties from Node
   /**
@@ -5924,6 +5955,7 @@ Similarly, when the focused element is in a different node tree than documentOrS
 A window containing a DOM document; the document property points to the DOM document loaded in that window.
 [See Window on MDN](https://developer.mozilla.org/docs/Web/API/Window)
 */
+@editor.completeFrom(Window)
 and window = {
   ...eventTarget,
   /**
@@ -6274,6 +6306,7 @@ and attr = {
 The CharacterData abstract interface represents a Node object that contains characters. This is an abstract interface, meaning there aren't any object of type CharacterData: it is implemented by other interfaces, like Text, Comment, or ProcessingInstruction which aren't abstract.
 [See CharacterData on MDN](https://developer.mozilla.org/docs/Web/API/CharacterData)
 */
+@editor.completeFrom(CharacterData)
 and characterData = {
   // Base properties from Node
   /**
@@ -6370,6 +6403,7 @@ and characterData = {
 A minimal document object that has no parent. It is used as a lightweight version of Document that stores a segment of a document structure comprised of nodes just like a standard document. The key difference is that because the document fragment isn't part of the active document tree structure, changes made to the fragment don't affect the document, cause reflow, or incur any performance impact that can occur when changes are made.
 [See DocumentFragment on MDN](https://developer.mozilla.org/docs/Web/API/DocumentFragment)
 */
+@editor.completeFrom(DocumentFragment)
 and documentFragment = {
   // Base properties from Node
   /**
@@ -6466,6 +6500,7 @@ and documentFragment = {
 /**
 [See HTMLSlotElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLSlotElement)
 */
+@editor.completeFrom(HTMLSlotElement)
 and htmlSlotElement = {
   // Base properties from HTMLElement
   /**
@@ -6726,6 +6761,7 @@ and htmlSlotElement = {
 /**
 [See DOMRectReadOnly on MDN](https://developer.mozilla.org/docs/Web/API/DOMRectReadOnly)
 */
+@editor.completeFrom(DOMRectReadOnly)
 type domRectReadOnly = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/DOMRectReadOnly/x)
@@ -6764,11 +6800,12 @@ type domRectReadOnly = {
 /**
 [See DOMRect on MDN](https://developer.mozilla.org/docs/Web/API/DOMRect)
 */
+@editor.completeFrom(DOMRect)
 type domRect = {
   ...domRectReadOnly,
 }
 
-type domRectList = {}
+@editor.completeFrom(DOMRectList) type domRectList = {}
 
 /**
 The validity states that an element can be in, with respect to constraint validation. Together, they help explain why an element's value fails to validate, if it's not valid.
@@ -6829,6 +6866,7 @@ type customStateSet = {}
 /**
 [See ElementInternals on MDN](https://developer.mozilla.org/docs/Web/API/ElementInternals)
 */
+@editor.completeFrom(ElementInternals)
 type elementInternals = {
   /**
     Returns the ShadowRoot for internals's target element, if the target element is a shadow host, or null otherwise.
@@ -7039,9 +7077,10 @@ type xmlDocument = {
 }
 
 /**
-The textual content of Element or Attr. If an element has no markup within its content, it has a single child implementing Text that contains the element's text. However, if the element contains markup, it is parsed into information items and Text nodes that form its children.
+@editor.completeFrom(Text) The textual content of Element or Attr. If an element has no markup within its content, it has a single child implementing Text that contains the element's text. However, if the element contains markup, it is parsed into information items and Text nodes that form its children.
 [See Text on MDN](https://developer.mozilla.org/docs/Web/API/Text)
 */
+@editor.completeFrom(Text)
 type text = {
   ...characterData,
   /**
@@ -7067,6 +7106,7 @@ type cdataSection = {
 Textual notations within markup; although it is generally not visually shown, such comments are available to be read in the source view.
 [See Comment on MDN](https://developer.mozilla.org/docs/Web/API/Comment)
 */
+@editor.completeFrom(Comment)
 type comment = {
   ...characterData,
 }
@@ -7122,6 +7162,7 @@ type abstractRange = {
 A fragment of a document that can contain nodes and parts of text nodes.
 [See Range on MDN](https://developer.mozilla.org/docs/Web/API/Range)
 */
+@editor.completeFrom(Range)
 type range = {
   ...abstractRange,
   /**
@@ -7138,12 +7179,13 @@ type staticRange = {
   ...abstractRange,
 }
 
-type nodeFilter = {}
+@editor.completeFrom(NodeFilter) type nodeFilter = {}
 
 /**
 An iterator over the members of a list of the nodes in a subtree of the DOM. The nodes will be returned in document order.
 [See NodeIterator on MDN](https://developer.mozilla.org/docs/Web/API/NodeIterator)
 */
+@editor.completeFrom(NodeIterator)
 type nodeIterator = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/NodeIterator/root)
@@ -7171,6 +7213,7 @@ type nodeIterator = {
 The nodes of a document subtree and a position within them.
 [See TreeWalker on MDN](https://developer.mozilla.org/docs/Web/API/TreeWalker)
 */
+@editor.completeFrom(TreeWalker)
 type treeWalker = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/TreeWalker/root)
@@ -7193,12 +7236,14 @@ type treeWalker = {
 /**
 [See CaretPosition on MDN](https://developer.mozilla.org/docs/Web/API/CaretPosition)
 */
+@editor.completeFrom(CaretPosition)
 type caretPosition = {}
 
 /**
 A Selection object represents the range of text selected by the user or the current position of the caret. To obtain a Selection object for examination or modification, call Window.getSelection().
 [See Selection on MDN](https://developer.mozilla.org/docs/Web/API/Selection)
 */
+@editor.completeFrom(Selection)
 type selection = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/Selection/anchorNode)
@@ -7239,6 +7284,7 @@ type selection = {
 Stores information on a media query applied to a document, and handles sending notifications to listeners when the media query state change (i.e. when the media query test starts or stops evaluating to true).
 [See MediaQueryList on MDN](https://developer.mozilla.org/docs/Web/API/MediaQueryList)
 */
+@editor.completeFrom(MediaQueryList)
 type mediaQueryList = {
   ...eventTarget,
   /**
@@ -7254,6 +7300,7 @@ type mediaQueryList = {
 /**
 [See IdleDeadline on MDN](https://developer.mozilla.org/docs/Web/API/IdleDeadline)
 */
+@editor.completeFrom(IdleDeadline)
 type idleDeadline = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/IdleDeadline/didTimeout)
@@ -7264,12 +7311,14 @@ type idleDeadline = {
 /**
 [See CSSStyleValue on MDN](https://developer.mozilla.org/docs/Web/API/CSSStyleValue)
 */
+@editor.completeFrom(CSSStyleValue)
 type cssStyleValue = {}
 
 /**
 An object of this type is returned by the files property of the HTML <input> element; this lets you access the list of files selected with the <input type="file"> element. It's also used for a list of files dropped into web content when using the drag and drop API; see the DataTransfer object for details on this usage.
 [See FileList on MDN](https://developer.mozilla.org/docs/Web/API/FileList)
 */
+@editor.completeFrom(FileList)
 type fileList = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/FileList/length)
@@ -7296,6 +7345,7 @@ type mediaError = {
 Used to represent a set of time ranges, primarily for the purpose of tracking which portions of media have been buffered when loading it for use by the <audio> and <video> elements.
 [See TimeRanges on MDN](https://developer.mozilla.org/docs/Web/API/TimeRanges)
 */
+@editor.completeFrom(TimeRanges)
 type timeRanges = {
   /**
     Returns the number of ranges in the object.
@@ -7307,6 +7357,7 @@ type timeRanges = {
 /**
 [See TextTrackList on MDN](https://developer.mozilla.org/docs/Web/API/TextTrackList)
 */
+@editor.completeFrom(TextTrackList)
 type textTrackList = {
   ...eventTarget,
   /**
@@ -7338,6 +7389,7 @@ type videoPlaybackQuality = {
 Provides special properties and methods (beyond the regular HTMLElement object interface it also has available to it by inheritance) for manipulating the layout and presentation of tables in an HTML document.
 [See HTMLTableElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLTableElement)
 */
+@editor.completeFrom(HTMLTableElement)
 type rec htmlTableElement = {
   ...htmlElement,
   /**
@@ -7371,6 +7423,7 @@ type rec htmlTableElement = {
 Special properties (beyond the regular HTMLElement interface it also has available to it by inheritance) for manipulating table caption elements.
 [See HTMLTableCaptionElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLTableCaptionElement)
 */
+@editor.completeFrom(HTMLTableCaptionElement)
 and htmlTableCaptionElement = {
   ...htmlElement,
 }
@@ -7379,6 +7432,7 @@ and htmlTableCaptionElement = {
 Provides special properties and methods (beyond the HTMLElement interface it also has available to it by inheritance) for manipulating the layout and presentation of sections, that is headers, footers and bodies, in an HTML table.
 [See HTMLTableSectionElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLTableSectionElement)
 */
+@editor.completeFrom(HTMLTableSectionElement)
 and htmlTableSectionElement = {
   ...htmlElement,
   /**
@@ -7392,6 +7446,7 @@ and htmlTableSectionElement = {
 Provides special properties and methods (beyond the regular HTMLElement interface it also has available to it by inheritance) for manipulating the layout and presentation of table cells, either header or data cells, in an HTML document.
 [See HTMLTableCellElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLTableCellElement)
 */
+@editor.completeFrom(HTMLTableCellElement)
 and htmlTableCellElement = {
   ...htmlElement,
   /**
@@ -7430,6 +7485,7 @@ and htmlTableCellElement = {
 Provides special properties and methods (beyond the HTMLElement interface it also has available to it by inheritance) for manipulating the layout and presentation of rows in an HTML table.
 [See HTMLTableRowElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLTableRowElement)
 */
+@editor.completeFrom(HTMLTableRowElement)
 and htmlTableRowElement = {
   ...htmlElement,
   /**
@@ -7453,6 +7509,7 @@ and htmlTableRowElement = {
 Provides properties and methods (beyond the regular HTMLElement interface it also has available to it by inheritance) for manipulating <button> elements.
 [See HTMLButtonElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLButtonElement)
 */
+@editor.completeFrom(HTMLButtonElement)
 type rec htmlButtonElement = {
   ...htmlElement,
   /**
@@ -7528,6 +7585,7 @@ type rec htmlButtonElement = {
 Gives access to properties specific to <label> elements. It inherits methods and properties from the base HTMLElement interface.
 [See HTMLLabelElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLLabelElement)
 */
+@editor.completeFrom(HTMLLabelElement)
 and htmlLabelElement = {
   ...htmlElement,
   /**
@@ -7551,6 +7609,7 @@ and htmlLabelElement = {
 Provides special properties and methods for manipulating the layout and presentation of <textarea> elements.
 [See HTMLTextAreaElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLTextAreaElement)
 */
+@editor.completeFrom(HTMLTextAreaElement)
 and htmlTextAreaElement = {
   ...htmlElement,
   /**
@@ -7669,6 +7728,7 @@ and htmlTextAreaElement = {
 Provides properties and methods (beyond those inherited from HTMLElement) for manipulating the layout and presentation of <output> elements.
 [See HTMLOutputElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLOutputElement)
 */
+@editor.completeFrom(HTMLOutputElement)
 and htmlOutputElement = {
   ...htmlElement,
   /**
@@ -7722,6 +7782,7 @@ Can be set, to change the value.
 Provides special properties and methods for manipulating the options, layout, and presentation of <input> elements.
 [See HTMLInputElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLInputElement)
 */
+@editor.completeFrom(HTMLInputElement)
 and htmlInputElement = {
   ...htmlElement,
   /**
@@ -7945,6 +8006,7 @@ and htmlInputElement = {
 Provides special properties (beyond the HTMLElement object interface it also has available to it by inheritance) to manipulate <datalist> elements and their content.
 [See HTMLDataListElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLDataListElement)
 */
+@editor.completeFrom(HTMLDataListElement)
 and htmlDataListElement = {
   ...htmlElement,
   /**
@@ -7958,6 +8020,7 @@ and htmlDataListElement = {
 A <select> HTML Element. These elements also share all of the properties and methods of other HTML elements via the HTMLElement interface.
 [See HTMLSelectElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLSelectElement)
 */
+@editor.completeFrom(HTMLSelectElement)
 and htmlSelectElement = {
   ...htmlElement,
   /**
@@ -8044,6 +8107,7 @@ and htmlSelectElement = {
 <option> elements and inherits all classes and methods of the HTMLElement interface.
 [See HTMLOptionElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLOptionElement)
 */
+@editor.completeFrom(HTMLOptionElement)
 and htmlOptionElement = {
   ...htmlElement,
   /**
@@ -8091,6 +8155,7 @@ and htmlOptionElement = {
 HTMLOptionsCollection is an interface representing a collection of HTML option elements (in document order) and offers methods and properties for traversing the list as well as optionally altering its items. This type is returned solely by the "options" property of select.
 [See HTMLOptionsCollection on MDN](https://developer.mozilla.org/docs/Web/API/HTMLOptionsCollection)
 */
+@editor.completeFrom(HTMLOptionsCollection)
 and htmlOptionsCollection = {
   ...htmlCollectionOf<htmlOptionElement>,
   /**
@@ -8108,6 +8173,7 @@ type mediaProvider = any
 Adds to HTMLElement the properties and methods needed to support basic media-related capabilities that are common to audio and video.
 [See HTMLMediaElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement)
 */
+@editor.completeFrom(HTMLMediaElement)
 type htmlMediaElement = {
   ...htmlElement,
   /**
@@ -8246,6 +8312,7 @@ type htmlMediaElement = {
 Provides access to the properties of <audio> elements, as well as methods to manipulate them. It derives from the HTMLMediaElement interface.
 [See HTMLAudioElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLAudioElement)
 */
+@editor.completeFrom(HTMLAudioElement)
 type htmlAudioElement = {
   ...htmlMediaElement,
 }
@@ -8254,6 +8321,7 @@ type htmlAudioElement = {
 Contains the base URI for a document. This object inherits all of the properties and methods as described in the HTMLElement interface.
 [See HTMLBaseElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLBaseElement)
 */
+@editor.completeFrom(HTMLBaseElement)
 type htmlBaseElement = {
   ...htmlElement,
   /**
@@ -8272,6 +8340,7 @@ type htmlBaseElement = {
 Provides special properties (beyond those inherited from the regular HTMLElement interface) for manipulating <body> elements.
 [See HTMLBodyElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLBodyElement)
 */
+@editor.completeFrom(HTMLBodyElement)
 type htmlBodyElement = {
   ...htmlElement,
 }
@@ -8280,6 +8349,7 @@ type htmlBodyElement = {
 A HTML line break element (<br>). It inherits from HTMLElement.
 [See HTMLBRElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLBRElement)
 */
+@editor.completeFrom(HTMLBRElement)
 type htmlbrElement = {
   ...htmlElement,
 }
@@ -8288,6 +8358,7 @@ type htmlbrElement = {
 Provides properties and methods for manipulating the layout and presentation of <canvas> elements. The HTMLCanvasElement interface also inherits the properties and methods of the HTMLElement interface.
 [See HTMLCanvasElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLCanvasElement)
 */
+@editor.completeFrom(HTMLCanvasElement)
 type htmlCanvasElement = {
   ...htmlElement,
   /**
@@ -8306,6 +8377,7 @@ type htmlCanvasElement = {
 Provides special properties (beyond the regular HTMLElement interface it also has available to it by inheritance) for manipulating <data> elements.
 [See HTMLDataElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLDataElement)
 */
+@editor.completeFrom(HTMLDataElement)
 type htmlDataElement = {
   ...htmlElement,
   /**
@@ -8317,6 +8389,7 @@ type htmlDataElement = {
 /**
 [See HTMLDialogElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLDialogElement)
 */
+@editor.completeFrom(HTMLDialogElement)
 type htmlDialogElement = {
   ...htmlElement,
   /**
@@ -8334,6 +8407,7 @@ type htmlDialogElement = {
 Provides special properties (beyond the regular HTMLElement interface it also has available to it by inheritance) for manipulating <div> elements.
 [See HTMLDivElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLDivElement)
 */
+@editor.completeFrom(HTMLDivElement)
 type htmlDivElement = {
   ...htmlElement,
 }
@@ -8342,6 +8416,7 @@ type htmlDivElement = {
 Provides special properties (beyond those of the regular HTMLElement interface it also has available to it by inheritance) for manipulating definition list (<dl>) elements.
 [See HTMLDListElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLDListElement)
 */
+@editor.completeFrom(HTMLDListElement)
 type htmldListElement = {
   ...htmlElement,
 }
@@ -8350,6 +8425,7 @@ type htmldListElement = {
 Provides special properties and methods (beyond the regular HTMLElement interface it also has available to it by inheritance) for manipulating the layout and presentation of <fieldset> elements.
 [See HTMLFieldSetElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLFieldSetElement)
 */
+@editor.completeFrom(HTMLFieldSetElement)
 type htmlFieldSetElement = {
   ...htmlElement,
   /**
@@ -8397,6 +8473,7 @@ type htmlFieldSetElement = {
 Provides special properties (beyond those of the regular HTMLElement interface they also inherit) for manipulating <frameset> elements.
 [See HTMLFrameSetElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLFrameSetElement)
 */
+@editor.completeFrom(HTMLFrameSetElement)
 type htmlFrameSetElement = {
   ...htmlElement,
 }
@@ -8405,6 +8482,7 @@ type htmlFrameSetElement = {
 The different heading elements. It inherits methods and properties from the HTMLElement interface.
 [See HTMLHeadingElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLHeadingElement)
 */
+@editor.completeFrom(HTMLHeadingElement)
 type htmlHeadingElement = {
   ...htmlElement,
 }
@@ -8413,6 +8491,7 @@ type htmlHeadingElement = {
 Provides special properties (beyond those of the HTMLElement interface it also has available to it by inheritance) for manipulating <hr> elements.
 [See HTMLHRElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLHRElement)
 */
+@editor.completeFrom(HTMLHRElement)
 type htmlhrElement = {
   ...htmlElement,
 }
@@ -8421,6 +8500,7 @@ type htmlhrElement = {
 Serves as the root node for a given HTML document. This object inherits the properties and methods described in the HTMLElement interface.
 [See HTMLHtmlElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLHtmlElement)
 */
+@editor.completeFrom(HTMLHtmlElement)
 type htmlHtmlElement = {
   ...htmlElement,
 }
@@ -8429,6 +8509,7 @@ type htmlHtmlElement = {
 Provides special properties and methods (beyond those of the HTMLElement interface it also has available to it by inheritance) for manipulating the layout and presentation of inline frame elements.
 [See HTMLIFrameElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLIFrameElement)
 */
+@editor.completeFrom(HTMLIFrameElement)
 type htmliFrameElement = {
   ...htmlElement,
   /**
@@ -8492,6 +8573,7 @@ type htmliFrameElement = {
 The HTMLLegendElement is an interface allowing to access properties of the <legend> elements. It inherits properties and methods from the HTMLElement interface.
 [See HTMLLegendElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLLegendElement)
 */
+@editor.completeFrom(HTMLLegendElement)
 type htmlLegendElement = {
   ...htmlElement,
   /**
@@ -8505,6 +8587,7 @@ type htmlLegendElement = {
 Exposes specific properties and methods (beyond those defined by regular HTMLElement interface it also has available to it by inheritance) for manipulating list elements.
 [See HTMLLIElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLLIElement)
 */
+@editor.completeFrom(HTMLLIElement)
 type htmlliElement = {
   ...htmlElement,
 }
@@ -8513,6 +8596,7 @@ type htmlliElement = {
 Reference information for external resources and the relationship of those resources to a document and vice-versa. This object inherits all of the properties and methods of the HTMLElement interface.
 [See HTMLLinkElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLLinkElement)
 */
+@editor.completeFrom(HTMLLinkElement)
 type htmlLinkElement = {
   ...htmlElement,
   /**
@@ -8580,6 +8664,7 @@ type htmlLinkElement = {
 Provides special properties and methods (beyond those of the regular object HTMLElement interface it also has available to it by inheritance) for manipulating the layout and presentation of map elements.
 [See HTMLMapElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLMapElement)
 */
+@editor.completeFrom(HTMLMapElement)
 type htmlMapElement = {
   ...htmlElement,
   /**
@@ -8597,6 +8682,7 @@ type htmlMapElement = {
 /**
 [See HTMLMenuElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLMenuElement)
 */
+@editor.completeFrom(HTMLMenuElement)
 type htmlMenuElement = {
   ...htmlElement,
 }
@@ -8605,6 +8691,7 @@ type htmlMenuElement = {
 Contains descriptive metadata about a document. It inherits all of the properties and methods described in the HTMLElement interface.
 [See HTMLMetaElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLMetaElement)
 */
+@editor.completeFrom(HTMLMetaElement)
 type htmlMetaElement = {
   ...htmlElement,
   /**
@@ -8632,6 +8719,7 @@ type htmlMetaElement = {
 The HTML <meter> elements expose the HTMLMeterElement interface, which provides special properties and methods (beyond the HTMLElement object interface they also have available to them by inheritance) for manipulating the layout and presentation of <meter> elements.
 [See HTMLMeterElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLMeterElement)
 */
+@editor.completeFrom(HTMLMeterElement)
 type htmlMeterElement = {
   ...htmlElement,
   /**
@@ -8668,6 +8756,7 @@ type htmlMeterElement = {
 Provides special properties (beyond the regular methods and properties available through the HTMLElement interface they also have available to them by inheritance) for manipulating modification elements, that is <del> and <ins>.
 [See HTMLModElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLModElement)
 */
+@editor.completeFrom(HTMLModElement)
 type htmlModElement = {
   ...htmlElement,
 }
@@ -8676,6 +8765,7 @@ type htmlModElement = {
 Provides special properties and methods (beyond those on the HTMLElement interface it also has available to it by inheritance) for manipulating the layout and presentation of <object> element, representing external resources.
 [See HTMLObjectElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLObjectElement)
 */
+@editor.completeFrom(HTMLObjectElement)
 type htmlObjectElement = {
   ...htmlElement,
   /**
@@ -8739,6 +8829,7 @@ type htmlObjectElement = {
 Provides special properties (beyond those defined on the regular HTMLElement interface it also has available to it by inheritance) for manipulating ordered list elements.
 [See HTMLOListElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLOListElement)
 */
+@editor.completeFrom(HTMLOListElement)
 type htmloListElement = {
   ...htmlElement,
   /**
@@ -8761,6 +8852,7 @@ type htmloListElement = {
 Provides special properties and methods (beyond the regular HTMLElement object interface they also have available to them by inheritance) for manipulating the layout and presentation of <optgroup> elements.
 [See HTMLOptGroupElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLOptGroupElement)
 */
+@editor.completeFrom(HTMLOptGroupElement)
 type htmlOptGroupElement = {
   ...htmlElement,
   /**
@@ -8778,6 +8870,7 @@ type htmlOptGroupElement = {
 Provides special properties (beyond those of the regular HTMLElement object interface it inherits) for manipulating <p> elements.
 [See HTMLParagraphElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLParagraphElement)
 */
+@editor.completeFrom(HTMLParagraphElement)
 type htmlParagraphElement = {
   ...htmlElement,
 }
@@ -8786,6 +8879,7 @@ type htmlParagraphElement = {
 A <picture> HTML element. It doesn't implement specific properties or methods.
 [See HTMLPictureElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLPictureElement)
 */
+@editor.completeFrom(HTMLPictureElement)
 type htmlPictureElement = {
   ...htmlElement,
 }
@@ -8794,6 +8888,7 @@ type htmlPictureElement = {
 Exposes specific properties and methods (beyond those of the HTMLElement interface it also has available to it by inheritance) for manipulating a block of preformatted text (<pre>).
 [See HTMLPreElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLPreElement)
 */
+@editor.completeFrom(HTMLPreElement)
 type htmlPreElement = {
   ...htmlElement,
 }
@@ -8802,6 +8897,7 @@ type htmlPreElement = {
 Provides special properties and methods (beyond the regular HTMLElement interface it also has available to it by inheritance) for manipulating the layout and presentation of <progress> elements.
 [See HTMLProgressElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLProgressElement)
 */
+@editor.completeFrom(HTMLProgressElement)
 type htmlProgressElement = {
   ...htmlElement,
   /**
@@ -8829,6 +8925,7 @@ type htmlProgressElement = {
 Provides special properties and methods (beyond the regular HTMLElement interface it also has available to it by inheritance) for manipulating quoting elements, like <blockquote> and <q>, but not the <cite> element.
 [See HTMLQuoteElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLQuoteElement)
 */
+@editor.completeFrom(HTMLQuoteElement)
 type htmlQuoteElement = {
   ...htmlElement,
 }
@@ -8837,6 +8934,7 @@ type htmlQuoteElement = {
 Provides special properties (beyond the regular HTMLElement object interface it also has available to it by inheritance) for manipulating <source> elements.
 [See HTMLSourceElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLSourceElement)
 */
+@editor.completeFrom(HTMLSourceElement)
 type htmlSourceElement = {
   ...htmlElement,
   /**
@@ -8853,6 +8951,7 @@ type htmlSourceElement = {
 A <span> element and derives from the HTMLElement interface, but without implementing any additional properties or methods.
 [See HTMLSpanElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLSpanElement)
 */
+@editor.completeFrom(HTMLSpanElement)
 type htmlSpanElement = {
   ...htmlElement,
 }
@@ -8861,6 +8960,7 @@ type htmlSpanElement = {
 A <style> element. It inherits properties and methods from its parent, HTMLElement, and from LinkStyle.
 [See HTMLStyleElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLStyleElement)
 */
+@editor.completeFrom(HTMLStyleElement)
 type htmlStyleElement = {
   ...htmlElement,
   /**
@@ -8883,6 +8983,7 @@ type htmlStyleElement = {
 Enables access to the contents of an HTML <template> element.
 [See HTMLTemplateElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLTemplateElement)
 */
+@editor.completeFrom(HTMLTemplateElement)
 type htmlTemplateElement = {
   ...htmlElement,
   /**
@@ -8912,6 +9013,7 @@ type htmlTemplateElement = {
 Provides special properties (beyond the regular HTMLElement interface it also has available to it by inheritance) for manipulating <time> elements.
 [See HTMLTimeElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLTimeElement)
 */
+@editor.completeFrom(HTMLTimeElement)
 type htmlTimeElement = {
   ...htmlElement,
   /**
@@ -8924,6 +9026,7 @@ type htmlTimeElement = {
 Contains the title for a document. This element inherits all of the properties and methods of the HTMLElement interface.
 [See HTMLTitleElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLTitleElement)
 */
+@editor.completeFrom(HTMLTitleElement)
 type htmlTitleElement = {
   ...htmlElement,
   /**
@@ -8937,6 +9040,7 @@ type htmlTitleElement = {
 The HTMLTrackElement
 [See HTMLTrackElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLTrackElement)
 */
+@editor.completeFrom(HTMLTrackElement)
 type htmlTrackElement = {
   ...htmlElement,
   /**
@@ -8949,6 +9053,7 @@ type htmlTrackElement = {
 Provides special properties (beyond those defined on the regular HTMLElement interface it also has available to it by inheritance) for manipulating unordered list elements.
 [See HTMLUListElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLUListElement)
 */
+@editor.completeFrom(HTMLUListElement)
 type htmluListElement = {
   ...htmlElement,
 }
@@ -8965,6 +9070,7 @@ type htmlUnknownElement = {
 Provides special properties and methods for manipulating video objects. It also inherits properties and methods of HTMLMediaElement and HTMLElement.
 [See HTMLVideoElement on MDN](https://developer.mozilla.org/docs/Web/API/HTMLVideoElement)
 */
+@editor.completeFrom(HTMLVideoElement)
 type htmlVideoElement = {
   ...htmlMediaElement,
   /**
@@ -9001,18 +9107,21 @@ type htmlVideoElement = {
 /**
 [See AnimationEffect on MDN](https://developer.mozilla.org/docs/Web/API/AnimationEffect)
 */
+@editor.completeFrom(AnimationEffect)
 type animationEffect = {}
 
 /**
 This interface is a compiled XPath expression that can be evaluated on a document or specific node to return information its DOM tree.
 [See XPathExpression on MDN](https://developer.mozilla.org/docs/Web/API/XPathExpression)
 */
+@editor.completeFrom(XPathExpression)
 type xPathExpression = {}
 
 /**
 The results generated by evaluating an XPath expression within the context of a given node.
 [See XPathResult on MDN](https://developer.mozilla.org/docs/Web/API/XPathResult)
 */
+@editor.completeFrom(XPathResult)
 type xPathResult = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/XPathResult/resultType)
@@ -9054,6 +9163,7 @@ type svgAnimatedPreserveAspectRatio = {}
 Correspond to the <length> basic data type.
 [See SVGLength on MDN](https://developer.mozilla.org/docs/Web/API/SVGLength)
 */
+@editor.completeFrom(SVGLength)
 type svgLength = {}
 
 /**
@@ -9107,6 +9217,7 @@ type svgElement = {
 SVG elements whose primary purpose is to directly render graphics into a group.
 [See SVGGraphicsElement on MDN](https://developer.mozilla.org/docs/Web/API/SVGGraphicsElement)
 */
+@editor.completeFrom(SVGGraphicsElement)
 type svgGraphicsElement = {
   ...svgElement,
 }
@@ -9142,6 +9253,7 @@ type svgImageElement = {
 /**
 [See DOMMatrixReadOnly on MDN](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly)
 */
+@editor.completeFrom(DOMMatrixReadOnly)
 type domMatrixReadOnly = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly#instance_properties)
@@ -9236,6 +9348,7 @@ type domMatrixReadOnly = {
 /**
 [See DOMMatrix on MDN](https://developer.mozilla.org/docs/Web/API/DOMMatrix)
 */
+@editor.completeFrom(DOMMatrix)
 type domMatrix = {
   ...domMatrixReadOnly,
 }
@@ -9243,6 +9356,7 @@ type domMatrix = {
 /**
 [See VideoColorSpace on MDN](https://developer.mozilla.org/docs/Web/API/VideoColorSpace)
 */
+@editor.completeFrom(VideoColorSpace)
 type videoColorSpace = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/VideoColorSpace/primaries)
@@ -9265,6 +9379,7 @@ type videoColorSpace = {
 /**
 [See VideoFrame on MDN](https://developer.mozilla.org/docs/Web/API/VideoFrame)
 */
+@editor.completeFrom(VideoFrame)
 type videoFrame = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/VideoFrame/format)
@@ -9312,6 +9427,7 @@ type videoFrame = {
 The underlying pixel data of an area of a <canvas> element. It is created using the ImageData() constructor or creator methods on the CanvasRenderingContext2D object associated with a canvas: createImageData() and getImageData(). It can also be used to set a part of the canvas by using putImageData().
 [See ImageData on MDN](https://developer.mozilla.org/docs/Web/API/ImageData)
 */
+@editor.completeFrom(ImageData)
 type imageData = {
   /**
     Returns the actual dimensions of the data in the ImageData object, in pixels.
@@ -9337,6 +9453,7 @@ type imageData = {
 /**
 [See DOMPointReadOnly on MDN](https://developer.mozilla.org/docs/Web/API/DOMPointReadOnly)
 */
+@editor.completeFrom(DOMPointReadOnly)
 type domPointReadOnly = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/DOMPointReadOnly/x)
@@ -9359,6 +9476,7 @@ type domPointReadOnly = {
 /**
 [See DOMPoint on MDN](https://developer.mozilla.org/docs/Web/API/DOMPoint)
 */
+@editor.completeFrom(DOMPoint)
 type domPoint = {
   ...domPointReadOnly,
 }
@@ -9377,6 +9495,7 @@ type canvasContext2DAttributes = {
 The CanvasRenderingContext2D interface, part of the Canvas API, provides the 2D rendering context for the drawing surface of a <canvas> element. It is used for drawing shapes, text, images, and other objects.
 [See CanvasRenderingContext2D on MDN](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D)
 */
+@editor.completeFrom(CanvasRenderingContext2D)
 type canvasRenderingContext2D = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/canvas)
@@ -9491,6 +9610,7 @@ type canvasRenderingContext2D = {
 /**
 [See Animation on MDN](https://developer.mozilla.org/docs/Web/API/Animation)
 */
+@editor.completeFrom(Animation)
 type rec animation = {
   ...eventTarget,
   /**
diff --git a/src/EncryptedMediaExtensionsAPI.res b/src/EncryptedMediaExtensionsAPI.res
index cc9cb74..e223d7d 100644
--- a/src/EncryptedMediaExtensionsAPI.res
+++ b/src/EncryptedMediaExtensionsAPI.res
@@ -33,6 +33,7 @@ type mediaKeyStatus =
 This EncryptedMediaExtensions API interface provides access to a Key System for decryption and/or a content protection provider. You can request an instance of this object using the Navigator.requestMediaKeySystemAccess method.
 [See MediaKeySystemAccess on MDN](https://developer.mozilla.org/docs/Web/API/MediaKeySystemAccess)
 */
+@editor.completeFrom(MediaKeySystemAccess)
 type mediaKeySystemAccess = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/MediaKeySystemAccess/keySystem)
@@ -44,12 +45,14 @@ type mediaKeySystemAccess = {
 This EncryptedMediaExtensions API interface the represents a set of keys that an associated HTMLMediaElement can use for decryption of media data during playback.
 [See MediaKeys on MDN](https://developer.mozilla.org/docs/Web/API/MediaKeys)
 */
+@editor.completeFrom(MediaKeys)
 type mediaKeys = {}
 
 /**
 This EncryptedMediaExtensions API interface is a read-only map of media key statuses by key IDs.
 [See MediaKeyStatusMap on MDN](https://developer.mozilla.org/docs/Web/API/MediaKeyStatusMap)
 */
+@editor.completeFrom(MediaKeyStatusMap)
 type mediaKeyStatusMap = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/MediaKeyStatusMap/size)
@@ -61,6 +64,7 @@ type mediaKeyStatusMap = {
 This EncryptedMediaExtensions API interface represents a context for message exchange with a content decryption module (CDM).
 [See MediaKeySession on MDN](https://developer.mozilla.org/docs/Web/API/MediaKeySession)
 */
+@editor.completeFrom(MediaKeySession)
 type mediaKeySession = {
   ...eventTarget,
   /**
diff --git a/src/EventAPI.res b/src/EventAPI.res
index ed31362..6843e70 100644
--- a/src/EventAPI.res
+++ b/src/EventAPI.res
@@ -110,12 +110,14 @@ type eventListener<'event> = 'event => unit
 EventTarget is a DOM interface implemented by objects that can receive events and may have listeners for them.
 [See EventTarget on MDN](https://developer.mozilla.org/docs/Web/API/EventTarget)
 */
+@editor.completeFrom(EventTarget)
 type eventTarget = {}
 
 /**
 An event which takes place in the DOM.
 [See Event on MDN](https://developer.mozilla.org/docs/Web/API/Event)
 */
+@editor.completeFrom(Event)
 type event = {
   /**
     Returns the type of event, e.g. "click", "hashchange", or "submit".
@@ -174,6 +176,7 @@ type event = {
 A controller object that allows you to abort one or more DOM requests as and when desired.
 [See AbortController on MDN](https://developer.mozilla.org/docs/Web/API/AbortController)
 */
+@editor.completeFrom(AbortController)
 type rec abortController = {
   /**
     Returns the AbortSignal object associated with this object.
@@ -186,6 +189,7 @@ type rec abortController = {
 A signal object that allows you to communicate with a DOM request (such as a Fetch) and abort it if required via an AbortController object.
 [See AbortSignal on MDN](https://developer.mozilla.org/docs/Web/API/AbortSignal)
 */
+@editor.completeFrom(AbortSignal)
 and abortSignal = {
   ...eventTarget,
   /**
diff --git a/src/FetchAPI.res b/src/FetchAPI.res
index 0148de7..309f467 100644
--- a/src/FetchAPI.res
+++ b/src/FetchAPI.res
@@ -73,15 +73,17 @@ type requestPriority =
   | @as("low") Low
 
 /**
-This Fetch API interface allows you to perform various actions on HTTP request and response headers. These actions include retrieving, setting, adding to, and removing. A Headers object has an associated header list, which is initially empty and consists of zero or more name and value pairs.  You can add to this using methods like append() (see Examples.) In all methods of this interface, header names are matched by case-insensitive byte sequence.
+@editor.completeFrom(Response) This Fetch API interface allows you to perform various actions on HTTP request and response headers. These actions include retrieving, setting, adding to, and removing. A Headers object has an associated header list, which is initially empty and consists of zero or more name and value pairs.  You can add to this using methods like append() (see Examples.) In all methods of this interface, header names are matched by case-insensitive byte sequence.
 [See Headers on MDN](https://developer.mozilla.org/docs/Web/API/Headers)
 */
+@editor.completeFrom(Headers)
 type headers = {}
 
 /**
 This Fetch API interface represents a resource request.
 [See Request on MDN](https://developer.mozilla.org/docs/Web/API/Request)
 */
+@editor.completeFrom(Request)
 type request = {
   /**
     Returns request's HTTP method, which is "GET" by default.
@@ -162,6 +164,7 @@ type request = {
 This Fetch API interface represents the response to a request.
 [See Response on MDN](https://developer.mozilla.org/docs/Web/API/Response)
 */
+@editor.completeFrom(Response)
 type response = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/Response/type)
@@ -206,11 +209,13 @@ type response = {
 Provides a way to easily construct a set of key/value pairs representing form fields and their values, which can then be easily sent using the XMLHttpRequest.send() method. It uses the same format a form would use if the encoding type were set to "multipart/form-data".
 [See FormData on MDN](https://developer.mozilla.org/docs/Web/API/FormData)
 */
+@editor.completeFrom(FormData)
 type formData = {}
 
 /**
 [See URLSearchParams on MDN](https://developer.mozilla.org/docs/Web/API/URLSearchParams)
 */
+@editor.completeFrom(URLSearchParams)
 type urlSearchParams = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/URLSearchParams/size)
@@ -218,9 +223,9 @@ type urlSearchParams = {
   size: int,
 }
 
-type headersInit
+@editor.completeFrom(HeadersInit) type headersInit
 
-type bodyInit
+@editor.completeFrom(BodyInit) type bodyInit
 
 type requestInfo = any
 
diff --git a/src/FileAPI.res b/src/FileAPI.res
index d9e1565..aa2cd7a 100644
--- a/src/FileAPI.res
+++ b/src/FileAPI.res
@@ -22,6 +22,7 @@ type writeCommandType =
 A file-like object of immutable, raw data. Blobs represent data that isn't necessarily in a JavaScript-native format. The File interface is based on Blob, inheriting blob functionality and expanding it to support files on the user's system.
 [See Blob on MDN](https://developer.mozilla.org/docs/Web/API/Blob)
 */
+@editor.completeFrom(Blob)
 type blob = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/Blob/size)
@@ -60,6 +61,7 @@ type writableStream<'w> = {
 This Streams API interface represents a controller allowing control of a WritableStream's state. When constructing a WritableStream, the underlying sink is given a corresponding WritableStreamDefaultController instance to manipulate.
 [See WritableStreamDefaultController on MDN](https://developer.mozilla.org/docs/Web/API/WritableStreamDefaultController)
 */
+@editor.completeFrom(WritableStreamDefaultController)
 type writableStreamDefaultController = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/WritableStreamDefaultController/signal)
@@ -71,6 +73,7 @@ type writableStreamDefaultController = {
 Provides information about files and allows JavaScript in a web page to access their content.
 [See File on MDN](https://developer.mozilla.org/docs/Web/API/File)
 */
+@editor.completeFrom(File)
 type file = {
   ...blob,
   /**
@@ -90,6 +93,7 @@ type file = {
 /**
 [See FileSystemHandle on MDN](https://developer.mozilla.org/docs/Web/API/FileSystemHandle)
 */
+@editor.completeFrom(FileSystemHandle)
 type fileSystemHandle = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/FileSystemHandle/kind)
@@ -104,6 +108,7 @@ type fileSystemHandle = {
 /**
 [See FileSystemDirectoryHandle on MDN](https://developer.mozilla.org/docs/Web/API/FileSystemDirectoryHandle)
 */
+@editor.completeFrom(FileSystemDirectoryHandle)
 type fileSystemDirectoryHandle = {
   ...fileSystemHandle,
 }
@@ -111,6 +116,7 @@ type fileSystemDirectoryHandle = {
 /**
 [See FileSystemFileHandle on MDN](https://developer.mozilla.org/docs/Web/API/FileSystemFileHandle)
 */
+@editor.completeFrom(FileSystemFileHandle)
 type fileSystemFileHandle = {
   ...fileSystemHandle,
 }
@@ -118,6 +124,7 @@ type fileSystemFileHandle = {
 /**
 [See FileSystemWritableFileStream on MDN](https://developer.mozilla.org/docs/Web/API/FileSystemWritableFileStream)
 */
+@editor.completeFrom(FileSystemWritableFileStream)
 type fileSystemWritableFileStream = {
   ...writableStream<any>,
 }
diff --git a/src/FileAndDirectoryEntriesAPI.res b/src/FileAndDirectoryEntriesAPI.res
index 68943e9..6d8f547 100644
--- a/src/FileAndDirectoryEntriesAPI.res
+++ b/src/FileAndDirectoryEntriesAPI.res
@@ -5,6 +5,7 @@ open Prelude
 /**
 [See FileSystemEntry on MDN](https://developer.mozilla.org/docs/Web/API/FileSystemEntry)
 */
+@editor.completeFrom(FileSystemEntry)
 type rec fileSystemEntry = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/FileSystemEntry/isFile)
@@ -31,6 +32,7 @@ type rec fileSystemEntry = {
 /**
 [See FileSystemDirectoryEntry on MDN](https://developer.mozilla.org/docs/Web/API/FileSystemDirectoryEntry)
 */
+@editor.completeFrom(FileSystemDirectoryEntry)
 and fileSystemDirectoryEntry = {
   // Base properties from FileSystemEntry
   /**
@@ -73,6 +75,7 @@ and fileSystem = {
 /**
 [See FileSystemDirectoryReader on MDN](https://developer.mozilla.org/docs/Web/API/FileSystemDirectoryReader)
 */
+@editor.completeFrom(FileSystemDirectoryReader)
 type fileSystemDirectoryReader = {}
 
 type fileSystemFlags = {
diff --git a/src/GamepadAPI.res b/src/GamepadAPI.res
index db21504..fb1a0d0 100644
--- a/src/GamepadAPI.res
+++ b/src/GamepadAPI.res
@@ -34,6 +34,7 @@ type gamepadButton = {
 This Gamepad API interface represents hardware in the controller designed to provide haptic feedback to the user (if available), most commonly vibration hardware.
 [See GamepadHapticActuator on MDN](https://developer.mozilla.org/docs/Web/API/GamepadHapticActuator)
 */
+@editor.completeFrom(GamepadHapticActuator)
 type gamepadHapticActuator = {}
 
 /**
diff --git a/src/GeolocationAPI.res b/src/GeolocationAPI.res
index 95e08f1..5db558d 100644
--- a/src/GeolocationAPI.res
+++ b/src/GeolocationAPI.res
@@ -3,11 +3,13 @@
 An object able to programmatically obtain the position of the device. It gives Web content access to the location of the device. This allows a Web site or app to offer customized results based on the user's location.
 [See Geolocation on MDN](https://developer.mozilla.org/docs/Web/API/Geolocation)
 */
+@editor.completeFrom(Geolocation)
 type geolocation = {}
 
 /**
 [See GeolocationCoordinates on MDN](https://developer.mozilla.org/docs/Web/API/GeolocationCoordinates)
 */
+@editor.completeFrom(GeolocationCoordinates)
 type geolocationCoordinates = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/GeolocationCoordinates/accuracy)
@@ -42,6 +44,7 @@ type geolocationCoordinates = {
 /**
 [See GeolocationPosition on MDN](https://developer.mozilla.org/docs/Web/API/GeolocationPosition)
 */
+@editor.completeFrom(GeolocationPosition)
 type geolocationPosition = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/GeolocationPosition/coords)
diff --git a/src/HistoryAPI.res b/src/HistoryAPI.res
index e8484ac..b31b9de 100644
--- a/src/HistoryAPI.res
+++ b/src/HistoryAPI.res
@@ -10,6 +10,7 @@ type scrollRestoration =
 Allows manipulation of the browser session history, that is the pages visited in the tab or frame that the current page is loaded in.
 [See History on MDN](https://developer.mozilla.org/docs/Web/API/History)
 */
+@editor.completeFrom(History)
 type history = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/History/length)
diff --git a/src/IndexedDBAPI.res b/src/IndexedDBAPI.res
index 628e458..bbc5840 100644
--- a/src/IndexedDBAPI.res
+++ b/src/IndexedDBAPI.res
@@ -27,12 +27,14 @@ type idbCursorDirection =
 In the following code snippet, we make a request to open a database, and include handlers for the success and error cases. For a full working example, see our To-do Notifications app (view example live.)
 [See IDBFactory on MDN](https://developer.mozilla.org/docs/Web/API/IDBFactory)
 */
+@editor.completeFrom(IDBFactory)
 type idbFactory = {}
 
 /**
 This IndexedDB API interface provides a connection to a database; you can use an IDBDatabase object to open a transaction on your database then create, manipulate, and delete objects (data) in that database. The interface provides the only way to get and manage versions of the database.
 [See IDBDatabase on MDN](https://developer.mozilla.org/docs/Web/API/IDBDatabase)
 */
+@editor.completeFrom(IDBDatabase)
 type idbDatabase = {
   ...eventTarget,
   /**
@@ -55,6 +57,7 @@ type idbDatabase = {
 /**
 [See IDBTransaction on MDN](https://developer.mozilla.org/docs/Web/API/IDBTransaction)
 */
+@editor.completeFrom(IDBTransaction)
 type idbTransaction = {
   ...eventTarget,
   /**
@@ -128,6 +131,7 @@ type idbOpenDBRequest = {
 This example shows a variety of different uses of object stores, from updating the data structure with IDBObjectStore.createIndex inside an onupgradeneeded function, to adding a new item to our object store with IDBObjectStore.add. For a full working example, see our To-do Notifications app (view example live.)
 [See IDBObjectStore on MDN](https://developer.mozilla.org/docs/Web/API/IDBObjectStore)
 */
+@editor.completeFrom(IDBObjectStore)
 type idbObjectStore = {
   /**
     Returns the name of the store.
@@ -160,6 +164,7 @@ type idbObjectStore = {
 IDBIndex interface of the IndexedDB API provides asynchronous access to an index in a database. An index is a kind of object store for looking up records in another object store, called the referenced object store. You use this interface to retrieve data.
 [See IDBIndex on MDN](https://developer.mozilla.org/docs/Web/API/IDBIndex)
 */
+@editor.completeFrom(IDBIndex)
 type idbIndex = {
   /**
     Returns the name of the index.
diff --git a/src/MediaCapabilitiesAPI.res b/src/MediaCapabilitiesAPI.res
index 78992dc..5ce160f 100644
--- a/src/MediaCapabilitiesAPI.res
+++ b/src/MediaCapabilitiesAPI.res
@@ -26,6 +26,7 @@ type mediaEncodingType =
 /**
 [See MediaCapabilities on MDN](https://developer.mozilla.org/docs/Web/API/MediaCapabilities)
 */
+@editor.completeFrom(MediaCapabilities)
 type mediaCapabilities = {}
 
 type audioConfiguration = {
diff --git a/src/MediaCaptureAndStreamsAPI.res b/src/MediaCaptureAndStreamsAPI.res
index 71c4038..bce74a7 100644
--- a/src/MediaCaptureAndStreamsAPI.res
+++ b/src/MediaCaptureAndStreamsAPI.res
@@ -15,6 +15,7 @@ type mediaStreamTrackState =
 Provides access to connected media input devices like cameras and microphones, as well as screen sharing. In essence, it lets you obtain access to any hardware source of media data.
 [See MediaDevices on MDN](https://developer.mozilla.org/docs/Web/API/MediaDevices)
 */
+@editor.completeFrom(MediaDevices)
 type mediaDevices = {
   ...eventTarget,
 }
@@ -23,6 +24,7 @@ type mediaDevices = {
 The MediaDevicesInfo interface contains information that describes a single media input or output device.
 [See MediaDeviceInfo on MDN](https://developer.mozilla.org/docs/Web/API/MediaDeviceInfo)
 */
+@editor.completeFrom(MediaDeviceInfo)
 type mediaDeviceInfo = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/MediaDeviceInfo/deviceId)
@@ -46,6 +48,7 @@ type mediaDeviceInfo = {
 A stream of media content. A stream consists of several tracks such as video or audio tracks. Each track is specified as an instance of MediaStreamTrack.
 [See MediaStream on MDN](https://developer.mozilla.org/docs/Web/API/MediaStream)
 */
+@editor.completeFrom(MediaStream)
 type mediaStream = {
   ...eventTarget,
   /**
@@ -62,6 +65,7 @@ type mediaStream = {
 A single media track within a stream; typically, these are audio or video tracks, but other track types may exist as well.
 [See MediaStreamTrack on MDN](https://developer.mozilla.org/docs/Web/API/MediaStreamTrack)
 */
+@editor.completeFrom(MediaStreamTrack)
 type mediaStreamTrack = {
   ...eventTarget,
   /**
diff --git a/src/MediaSessionAPI.res b/src/MediaSessionAPI.res
index 50425db..bea40e9 100644
--- a/src/MediaSessionAPI.res
+++ b/src/MediaSessionAPI.res
@@ -27,6 +27,7 @@ type mediaImage = {
 /**
 [See MediaMetadata on MDN](https://developer.mozilla.org/docs/Web/API/MediaMetadata)
 */
+@editor.completeFrom(MediaMetadata)
 type mediaMetadata = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/MediaMetadata/title)
@@ -49,6 +50,7 @@ type mediaMetadata = {
 /**
 [See MediaSession on MDN](https://developer.mozilla.org/docs/Web/API/MediaSession)
 */
+@editor.completeFrom(MediaSession)
 type mediaSession = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/MediaSession/metadata)
diff --git a/src/NotificationAPI.res b/src/NotificationAPI.res
index 26c4d84..9e96ba4 100644
--- a/src/NotificationAPI.res
+++ b/src/NotificationAPI.res
@@ -17,6 +17,7 @@ type notificationPermission =
 This Notifications API interface is used to configure and display desktop notifications to the user.
 [See Notification on MDN](https://developer.mozilla.org/docs/Web/API/Notification)
 */
+@editor.completeFrom(Notification)
 type notification = {
   ...eventTarget,
   /**
diff --git a/src/PerformanceAPI.res b/src/PerformanceAPI.res
index 951e0ce..f942b9d 100644
--- a/src/PerformanceAPI.res
+++ b/src/PerformanceAPI.res
@@ -12,6 +12,7 @@ type eventCounts = {}
 Provides access to performance-related information for the current page. It's part of the High Resolution Time API, but is enhanced by the Performance Timeline API, the Navigation Timing API, the User Timing API, and the Resource Timing API.
 [See Performance on MDN](https://developer.mozilla.org/docs/Web/API/Performance)
 */
+@editor.completeFrom(Performance)
 type performance = {
   ...eventTarget,
   /**
@@ -28,6 +29,7 @@ type performance = {
 Encapsulates a single performance metric that is part of the performance timeline. A performance entry can be directly created by making a performance mark or measure (for example by calling the mark() method) at an explicit point in an application. Performance entries are also created in indirect ways such as loading a resource (such as an image).
 [See PerformanceEntry on MDN](https://developer.mozilla.org/docs/Web/API/PerformanceEntry)
 */
+@editor.completeFrom(PerformanceEntry)
 type performanceEntry = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/PerformanceEntry/name)
@@ -51,6 +53,7 @@ type performanceEntry = {
 PerformanceMark is an abstract interface for PerformanceEntry objects with an entryType of "mark". Entries of this type are created by calling performance.mark() to add a named DOMHighResTimeStamp (the mark) to the browser's performance timeline.
 [See PerformanceMark on MDN](https://developer.mozilla.org/docs/Web/API/PerformanceMark)
 */
+@editor.completeFrom(PerformanceMark)
 type performanceMark = {
   ...performanceEntry,
   /**
diff --git a/src/PermissionsAPI.res b/src/PermissionsAPI.res
index 4d97b7d..499d00e 100644
--- a/src/PermissionsAPI.res
+++ b/src/PermissionsAPI.res
@@ -19,6 +19,7 @@ type permissionState =
 /**
 [See Permissions on MDN](https://developer.mozilla.org/docs/Web/API/Permissions)
 */
+@editor.completeFrom(Permissions)
 type permissions = {}
 
 /**
diff --git a/src/PushManagerAPI.res b/src/PushManagerAPI.res
index c66d919..3314aff 100644
--- a/src/PushManagerAPI.res
+++ b/src/PushManagerAPI.res
@@ -15,6 +15,7 @@ type pushEncryptionKeyName =
 This Push API interface provides a way to receive notifications from third-party servers as well as request URLs for push notifications.
 [See PushManager on MDN](https://developer.mozilla.org/docs/Web/API/PushManager)
 */
+@editor.completeFrom(PushManager)
 type pushManager = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/PushManager/supportedContentEncodings_static)
@@ -40,6 +41,7 @@ type pushSubscriptionOptions = {
 This Push API interface provides a subcription's URL endpoint and allows unsubscription from a push service.
 [See PushSubscription on MDN](https://developer.mozilla.org/docs/Web/API/PushSubscription)
 */
+@editor.completeFrom(PushSubscription)
 type pushSubscription = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/PushSubscription/endpoint)
diff --git a/src/RemotePlaybackAPI.res b/src/RemotePlaybackAPI.res
index d9cb431..6c0ff22 100644
--- a/src/RemotePlaybackAPI.res
+++ b/src/RemotePlaybackAPI.res
@@ -10,6 +10,7 @@ type remotePlaybackState =
 /**
 [See RemotePlayback on MDN](https://developer.mozilla.org/docs/Web/API/RemotePlayback)
 */
+@editor.completeFrom(RemotePlayback)
 type remotePlayback = {
   ...eventTarget,
   /**
diff --git a/src/ResizeObserverAPI.res b/src/ResizeObserverAPI.res
index 381ef9a..1c2f5d6 100644
--- a/src/ResizeObserverAPI.res
+++ b/src/ResizeObserverAPI.res
@@ -51,6 +51,7 @@ type resizeObserverEntry = {
 /**
 [See ResizeObserver on MDN](https://developer.mozilla.org/docs/Web/API/ResizeObserver)
 */
+@editor.completeFrom(ResizeObserver)
 type resizeObserver = {}
 
 type resizeObserverOptions = {mutable box?: resizeObserverBoxOptions}
diff --git a/src/ScreenWakeLockAPI.res b/src/ScreenWakeLockAPI.res
index aadc0d3..2eadecb 100644
--- a/src/ScreenWakeLockAPI.res
+++ b/src/ScreenWakeLockAPI.res
@@ -7,11 +7,13 @@ type wakeLockType = | @as("screen") Screen
 /**
 [See WakeLock on MDN](https://developer.mozilla.org/docs/Web/API/WakeLock)
 */
+@editor.completeFrom(WakeLock)
 type wakeLock = {}
 
 /**
 [See WakeLockSentinel on MDN](https://developer.mozilla.org/docs/Web/API/WakeLockSentinel)
 */
+@editor.completeFrom(WakeLockSentinel)
 type wakeLockSentinel = {
   ...eventTarget,
   /**
diff --git a/src/ServiceWorkerAPI.res b/src/ServiceWorkerAPI.res
index 40cbd71..9742a8e 100644
--- a/src/ServiceWorkerAPI.res
+++ b/src/ServiceWorkerAPI.res
@@ -28,6 +28,7 @@ type workerType =
 This ServiceWorker API interface provides a reference to a service worker. Multiple browsing contexts (e.g. pages, workers, etc.) can be associated with the same service worker, each through a unique ServiceWorker object.
 [See ServiceWorker on MDN](https://developer.mozilla.org/docs/Web/API/ServiceWorker)
 */
+@editor.completeFrom(ServiceWorker)
 type serviceWorker = {
   ...eventTarget,
   /**
@@ -43,12 +44,14 @@ type serviceWorker = {
 /**
 [See NavigationPreloadManager on MDN](https://developer.mozilla.org/docs/Web/API/NavigationPreloadManager)
 */
+@editor.completeFrom(NavigationPreloadManager)
 type navigationPreloadManager = {}
 
 /**
 This ServiceWorker API interface represents the service worker registration. You register a service worker to control one or more pages that share the same origin.
 [See ServiceWorkerRegistration on MDN](https://developer.mozilla.org/docs/Web/API/ServiceWorkerRegistration)
 */
+@editor.completeFrom(ServiceWorkerRegistration)
 type serviceWorkerRegistration = {
   ...eventTarget,
   /**
@@ -85,6 +88,7 @@ type serviceWorkerRegistration = {
 The ServiceWorkerContainer interface of the ServiceWorker API provides an object representing the service worker as an overall unit in the network ecosystem, including facilities to register, unregister and update service workers, and access the state of service workers and their registrations.
 [See ServiceWorkerContainer on MDN](https://developer.mozilla.org/docs/Web/API/ServiceWorkerContainer)
 */
+@editor.completeFrom(ServiceWorkerContainer)
 type serviceWorkerContainer = {
   ...eventTarget,
   /**
@@ -101,12 +105,14 @@ type serviceWorkerContainer = {
 The storage for Cache objects.
 [See CacheStorage on MDN](https://developer.mozilla.org/docs/Web/API/CacheStorage)
 */
+@editor.completeFrom(CacheStorage)
 type cacheStorage = {}
 
 /**
 Provides a storage mechanism for Request / Response object pairs that are cached, for example as part of the ServiceWorker life cycle. Note that the Cache interface is exposed to windowed scopes as well as workers. You don't have to use it in conjunction with service workers, even though it is defined in the service worker spec.
 [See Cache on MDN](https://developer.mozilla.org/docs/Web/API/Cache)
 */
+@editor.completeFrom(Cache)
 type cache = {}
 
 type navigationPreloadState = {
diff --git a/src/StorageAPI.res b/src/StorageAPI.res
index 359379d..ea6b923 100644
--- a/src/StorageAPI.res
+++ b/src/StorageAPI.res
@@ -2,6 +2,7 @@
 /**
 [See StorageManager on MDN](https://developer.mozilla.org/docs/Web/API/StorageManager)
 */
+@editor.completeFrom(StorageManager)
 type storageManager = {}
 
 type storageEstimate = {
diff --git a/src/UIEventsAPI.res b/src/UIEventsAPI.res
index 71e490c..4d3138b 100644
--- a/src/UIEventsAPI.res
+++ b/src/UIEventsAPI.res
@@ -11,6 +11,7 @@ type touchType =
 Simple user interface events.
 [See UIEvent on MDN](https://developer.mozilla.org/docs/Web/API/UIEvent)
 */
+@editor.completeFrom(UIEvent)
 type uiEvent = {
   ...event,
   /**
@@ -27,6 +28,7 @@ type uiEvent = {
 The DOM CompositionEvent represents events that occur due to the user indirectly entering text.
 [See CompositionEvent on MDN](https://developer.mozilla.org/docs/Web/API/CompositionEvent)
 */
+@editor.completeFrom(CompositionEvent)
 type compositionEvent = {
   ...uiEvent,
   /**
@@ -39,6 +41,7 @@ type compositionEvent = {
 Focus-related events like focus, blur, focusin, or focusout.
 [See FocusEvent on MDN](https://developer.mozilla.org/docs/Web/API/FocusEvent)
 */
+@editor.completeFrom(FocusEvent)
 type focusEvent = {
   ...uiEvent,
   /**
@@ -51,6 +54,7 @@ type focusEvent = {
 One drag data item. During a drag operation, each drag event has a dataTransfer property which contains a list of drag data items. Each item in the list is a DataTransferItem object.
 [See DataTransferItem on MDN](https://developer.mozilla.org/docs/Web/API/DataTransferItem)
 */
+@editor.completeFrom(DataTransferItem)
 type dataTransferItem = {
   /**
     Returns the drag data item kind, one of: "string", "file".
@@ -69,6 +73,7 @@ type dataTransferItem = {
 A list of DataTransferItem objects representing items being dragged. During a drag operation, each DragEvent has a dataTransfer property and that property is a DataTransferItemList.
 [See DataTransferItemList on MDN](https://developer.mozilla.org/docs/Web/API/DataTransferItemList)
 */
+@editor.completeFrom(DataTransferItemList)
 type dataTransferItemList = {
   /**
     Returns the number of items in the drag data store.
@@ -81,6 +86,7 @@ type dataTransferItemList = {
 Used to hold the data that is being dragged during a drag and drop operation. It may hold one or more data items, each of one or more data types. For more information about drag and drop, see HTML Drag and Drop API.
 [See DataTransfer on MDN](https://developer.mozilla.org/docs/Web/API/DataTransfer)
 */
+@editor.completeFrom(DataTransfer)
 type dataTransfer = {
   /**
     Returns the kind of operation that is currently selected. If the kind of operation isn't one of those that is allowed by the effectAllowed attribute, then the operation will fail.
@@ -120,6 +126,7 @@ The possible values are "none", "copy", "copyLink", "copyMove", "link", "linkMov
 /**
 [See InputEvent on MDN](https://developer.mozilla.org/docs/Web/API/InputEvent)
 */
+@editor.completeFrom(InputEvent)
 type inputEvent = {
   ...uiEvent,
   /**
@@ -144,6 +151,7 @@ type inputEvent = {
 KeyboardEvent objects describe a user interaction with the keyboard; each event describes a single interaction between the user and a key (or combination of a key with modifier keys) on the keyboard.
 [See KeyboardEvent on MDN](https://developer.mozilla.org/docs/Web/API/KeyboardEvent)
 */
+@editor.completeFrom(KeyboardEvent)
 type keyboardEvent = {
   ...uiEvent,
   /**
@@ -188,6 +196,7 @@ type keyboardEvent = {
 Events that occur due to the user interacting with a pointing device (such as a mouse). Common events using this interface include click, dblclick, mouseup, mousedown.
 [See MouseEvent on MDN](https://developer.mozilla.org/docs/Web/API/MouseEvent)
 */
+@editor.completeFrom(MouseEvent)
 type mouseEvent = {
   ...uiEvent,
   /**
@@ -280,6 +289,7 @@ type mouseEvent = {
 Events that occur due to the user moving a mouse wheel or similar input device.
 [See WheelEvent on MDN](https://developer.mozilla.org/docs/Web/API/WheelEvent)
 */
+@editor.completeFrom(WheelEvent)
 type wheelEvent = {
   ...mouseEvent,
   /**
@@ -304,6 +314,7 @@ type wheelEvent = {
 A single contact point on a touch-sensitive device. The contact point is commonly a finger or stylus and the device may be a touchscreen or trackpad.
 [See Touch on MDN](https://developer.mozilla.org/docs/Web/API/Touch)
 */
+@editor.completeFrom(Touch)
 type touch = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/Touch/identifier)
@@ -359,6 +370,7 @@ type touch = {
 A list of contact points on a touch surface. For example, if the user has three fingers on the touch surface (such as a screen or trackpad), the corresponding TouchList object would have one Touch object for each finger, for a total of three entries.
 [See TouchList on MDN](https://developer.mozilla.org/docs/Web/API/TouchList)
 */
+@editor.completeFrom(TouchList)
 type touchList = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/TouchList/length)
@@ -370,6 +382,7 @@ type touchList = {
 An event sent when the state of contacts with a touch-sensitive surface changes. This surface can be a touch screen or trackpad, for example. The event can describe one or more points of contact with the screen and includes support for detecting movement, addition and removal of contact points, and so forth.
 [See TouchEvent on MDN](https://developer.mozilla.org/docs/Web/API/TouchEvent)
 */
+@editor.completeFrom(TouchEvent)
 type touchEvent = {
   ...uiEvent,
   /**
@@ -406,6 +419,7 @@ type touchEvent = {
 The state of a DOM event produced by a pointer such as the geometry of the contact point, the device type that generated the event, the amount of pressure that was applied on the contact surface, etc.
 [See PointerEvent on MDN](https://developer.mozilla.org/docs/Web/API/PointerEvent)
 */
+@editor.completeFrom(PointerEvent)
 type pointerEvent = {
   ...mouseEvent,
   /**
diff --git a/src/ViewTransitionsAPI.res b/src/ViewTransitionsAPI.res
index c460e47..78b597d 100644
--- a/src/ViewTransitionsAPI.res
+++ b/src/ViewTransitionsAPI.res
@@ -5,6 +5,7 @@ open Prelude
 /**
 [See ViewTransition on MDN](https://developer.mozilla.org/docs/Web/API/ViewTransition)
 */
+@editor.completeFrom(ViewTransition)
 type viewTransition = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/ViewTransition/updateCallbackDone)
diff --git a/src/WebAudioAPI.res b/src/WebAudioAPI.res
index 7358254..f7a5037 100644
--- a/src/WebAudioAPI.res
+++ b/src/WebAudioAPI.res
@@ -60,6 +60,7 @@ type requestCredentials =
 A short audio asset residing in memory, created from an audio file using the AudioContext.decodeAudioData() method, or from raw data using AudioContext.createBuffer(). Once put into an AudioBuffer, the audio can then be played by being passed into an AudioBufferSourceNode.
 [See AudioBuffer on MDN](https://developer.mozilla.org/docs/Web/API/AudioBuffer)
 */
+@editor.completeFrom(AudioBuffer)
 type audioBuffer = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/AudioBuffer/sampleRate)
@@ -83,6 +84,7 @@ type audioBuffer = {
 The Web Audio API events that occur when a ScriptProcessorNode input buffer is ready to be processed.
 [See AudioProcessingEvent on MDN](https://developer.mozilla.org/docs/Web/API/AudioProcessingEvent)
 */
+@editor.completeFrom(AudioProcessingEvent)
 type audioProcessingEvent = {
   ...event,
 }
@@ -91,6 +93,7 @@ type audioProcessingEvent = {
 The Web Audio API OfflineAudioCompletionEvent interface represents events that occur when the processing of an OfflineAudioContext is terminated. The complete event implements this interface.
 [See OfflineAudioCompletionEvent on MDN](https://developer.mozilla.org/docs/Web/API/OfflineAudioCompletionEvent)
 */
+@editor.completeFrom(OfflineAudioCompletionEvent)
 type offlineAudioCompletionEvent = {
   ...event,
   /**
@@ -102,12 +105,14 @@ type offlineAudioCompletionEvent = {
 /**
 [See Worklet on MDN](https://developer.mozilla.org/docs/Web/API/Worklet)
 */
+@editor.completeFrom(Worklet)
 type worklet = {}
 
 /**
 A generic interface for representing an audio processing module. Examples include:
 [See AudioNode on MDN](https://developer.mozilla.org/docs/Web/API/AudioNode)
 */
+@editor.completeFrom(AudioNode)
 type rec audioNode = {
   ...eventTarget,
   /**
@@ -177,6 +182,7 @@ and audioDestinationNode = {
 /**
 [See BaseAudioContext on MDN](https://developer.mozilla.org/docs/Web/API/BaseAudioContext)
 */
+@editor.completeFrom(BaseAudioContext)
 and baseAudioContext = {
   ...eventTarget,
   /**
@@ -209,6 +215,7 @@ and baseAudioContext = {
 A simple low-order filter, and is created using the AudioContext.createBiquadFilter() method. It is an AudioNode that can represent different kinds of filters, tone control devices, and graphic equalizers.
 [See BiquadFilterNode on MDN](https://developer.mozilla.org/docs/Web/API/BiquadFilterNode)
 */
+@editor.completeFrom(BiquadFilterNode)
 and biquadFilterNode = {
   // Base properties from AudioNode
   /**
@@ -315,6 +322,7 @@ and audioWorklet = {
 The Web Audio API's AudioParam interface represents an audio-related parameter, usually a parameter of an AudioNode (such as GainNode.gain).
 [See AudioParam on MDN](https://developer.mozilla.org/docs/Web/API/AudioParam)
 */
+@editor.completeFrom(AudioParam)
 and audioParam = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/AudioParam/value)
@@ -337,6 +345,7 @@ and audioParam = {
 /**
 [See AudioScheduledSourceNode on MDN](https://developer.mozilla.org/docs/Web/API/AudioScheduledSourceNode)
 */
+@editor.completeFrom(AudioScheduledSourceNode)
 and audioScheduledSourceNode = {
   // Base properties from AudioNode
   /**
@@ -370,6 +379,7 @@ and audioScheduledSourceNode = {
 An AudioScheduledSourceNode which represents an audio source consisting of in-memory audio data, stored in an AudioBuffer. It's especially useful for playing back audio which has particularly stringent timing accuracy requirements, such as for sounds that must match a specific rhythm and can be kept in memory rather than being played from disk or the network.
 [See AudioBufferSourceNode on MDN](https://developer.mozilla.org/docs/Web/API/AudioBufferSourceNode)
 */
+@editor.completeFrom(AudioBufferSourceNode)
 and audioBufferSourceNode = {
   // Base properties from AudioScheduledSourceNode
   // End base properties from AudioScheduledSourceNode
@@ -431,6 +441,7 @@ and audioBufferSourceNode = {
 The ChannelMergerNode interface, often used in conjunction with its opposite, ChannelSplitterNode, reunites different mono inputs into a single output. Each input is used to fill a channel of the output. This is useful for accessing each channels separately, e.g. for performing channel mixing where gain must be separately controlled on each channel.
 [See ChannelMergerNode on MDN](https://developer.mozilla.org/docs/Web/API/ChannelMergerNode)
 */
+@editor.completeFrom(ChannelMergerNode)
 and channelMergerNode = {
   // Base properties from AudioNode
   /**
@@ -464,6 +475,7 @@ and channelMergerNode = {
 The ChannelSplitterNode interface, often used in conjunction with its opposite, ChannelMergerNode, separates the different channels of an audio source into a set of mono outputs. This is useful for accessing each channel separately, e.g. for performing channel mixing where gain must be separately controlled on each channel.
 [See ChannelSplitterNode on MDN](https://developer.mozilla.org/docs/Web/API/ChannelSplitterNode)
 */
+@editor.completeFrom(ChannelSplitterNode)
 and channelSplitterNode = {
   // Base properties from AudioNode
   /**
@@ -496,6 +508,7 @@ and channelSplitterNode = {
 /**
 [See ConstantSourceNode on MDN](https://developer.mozilla.org/docs/Web/API/ConstantSourceNode)
 */
+@editor.completeFrom(ConstantSourceNode)
 and constantSourceNode = {
   // Base properties from AudioScheduledSourceNode
   // End base properties from AudioScheduledSourceNode
@@ -537,6 +550,7 @@ and constantSourceNode = {
 An AudioNode that performs a Linear Convolution on a given AudioBuffer, often used to achieve a reverb effect. A ConvolverNode always has exactly one input and one output.
 [See ConvolverNode on MDN](https://developer.mozilla.org/docs/Web/API/ConvolverNode)
 */
+@editor.completeFrom(ConvolverNode)
 and convolverNode = {
   // Base properties from AudioNode
   /**
@@ -579,6 +593,7 @@ and convolverNode = {
 A delay-line; an AudioNode audio-processing module that causes a delay between the arrival of an input data and its propagation to the output.
 [See DelayNode on MDN](https://developer.mozilla.org/docs/Web/API/DelayNode)
 */
+@editor.completeFrom(DelayNode)
 and delayNode = {
   // Base properties from AudioNode
   /**
@@ -617,6 +632,7 @@ and delayNode = {
 Inherits properties from its parent, AudioNode.
 [See DynamicsCompressorNode on MDN](https://developer.mozilla.org/docs/Web/API/DynamicsCompressorNode)
 */
+@editor.completeFrom(DynamicsCompressorNode)
 and dynamicsCompressorNode = {
   // Base properties from AudioNode
   /**
@@ -675,6 +691,7 @@ and dynamicsCompressorNode = {
 A change in volume. It is an AudioNode audio-processing module that causes a given gain to be applied to the input data before its propagation to the output. A GainNode always has exactly one input and one output, both with the same number of channels.
 [See GainNode on MDN](https://developer.mozilla.org/docs/Web/API/GainNode)
 */
+@editor.completeFrom(GainNode)
 and gainNode = {
   // Base properties from AudioNode
   /**
@@ -713,6 +730,7 @@ and gainNode = {
 The IIRFilterNode interface of the Web Audio API is a AudioNode processor which implements a general infinite impulse response (IIR)  filter; this type of filter can be used to implement tone control devices and graphic equalizers as well. It lets the parameters of the filter response be specified, so that it can be tuned as needed.
 [See IIRFilterNode on MDN](https://developer.mozilla.org/docs/Web/API/IIRFilterNode)
 */
+@editor.completeFrom(IIRFilterNode)
 and iirFilterNode = {
   // Base properties from AudioNode
   /**
@@ -746,6 +764,7 @@ and iirFilterNode = {
 The OscillatorNode interface represents a periodic waveform, such as a sine wave. It is an AudioScheduledSourceNode audio-processing module that causes a specified frequency of a given wave to be created—in effect, a constant tone.
 [See OscillatorNode on MDN](https://developer.mozilla.org/docs/Web/API/OscillatorNode)
 */
+@editor.completeFrom(OscillatorNode)
 and oscillatorNode = {
   // Base properties from AudioScheduledSourceNode
   // End base properties from AudioScheduledSourceNode
@@ -796,6 +815,7 @@ and oscillatorNode = {
 A PannerNode always has exactly one input and one output: the input can be mono or stereo but the output is always stereo (2 channels); you can't have panning effects without at least two audio channels!
 [See PannerNode on MDN](https://developer.mozilla.org/docs/Web/API/PannerNode)
 */
+@editor.completeFrom(PannerNode)
 and pannerNode = {
   // Base properties from AudioNode
   /**
@@ -886,6 +906,7 @@ and pannerNode = {
 A node able to provide real-time frequency and time-domain analysis information. It is an AudioNode that passes the audio stream unchanged from the input to the output, but allows you to take the generated data, process it, and create audio visualizations.
 [See AnalyserNode on MDN](https://developer.mozilla.org/docs/Web/API/AnalyserNode)
 */
+@editor.completeFrom(AnalyserNode)
 type analyserNode = {
   ...audioNode,
   /**
@@ -914,12 +935,14 @@ type analyserNode = {
 PeriodicWave has no inputs or outputs; it is used to define custom oscillators when calling OscillatorNode.setPeriodicWave(). The PeriodicWave itself is created/returned by AudioContext.createPeriodicWave().
 [See PeriodicWave on MDN](https://developer.mozilla.org/docs/Web/API/PeriodicWave)
 */
+@editor.completeFrom(PeriodicWave)
 type periodicWave = {}
 
 /**
 The pan property takes a unitless value between -1 (full left pan) and 1 (full right pan). This interface was introduced as a much simpler way to apply a simple panning effect than having to use a full PannerNode.
 [See StereoPannerNode on MDN](https://developer.mozilla.org/docs/Web/API/StereoPannerNode)
 */
+@editor.completeFrom(StereoPannerNode)
 type stereoPannerNode = {
   ...audioNode,
   /**
@@ -932,6 +955,7 @@ type stereoPannerNode = {
 A WaveShaperNode always has exactly one input and one output.
 [See WaveShaperNode on MDN](https://developer.mozilla.org/docs/Web/API/WaveShaperNode)
 */
+@editor.completeFrom(WaveShaperNode)
 type waveShaperNode = {
   ...audioNode,
   /**
@@ -948,6 +972,7 @@ type waveShaperNode = {
 An audio-processing graph built from audio modules linked together, each represented by an AudioNode.
 [See AudioContext on MDN](https://developer.mozilla.org/docs/Web/API/AudioContext)
 */
+@editor.completeFrom(AudioContext)
 type audioContext = {
   ...baseAudioContext,
   /**
@@ -964,6 +989,7 @@ type audioContext = {
 A MediaElementSourceNode has no inputs and exactly one output, and is created using the AudioContext.createMediaElementSource method. The amount of channels in the output equals the number of channels of the audio referenced by the HTMLMediaElement used in the creation of the node, or is 1 if the HTMLMediaElement has no audio.
 [See MediaElementAudioSourceNode on MDN](https://developer.mozilla.org/docs/Web/API/MediaElementAudioSourceNode)
 */
+@editor.completeFrom(MediaElementAudioSourceNode)
 type mediaElementAudioSourceNode = {
   ...audioNode,
   /**
@@ -976,6 +1002,7 @@ type mediaElementAudioSourceNode = {
 A type of AudioNode which operates as an audio source whose media is received from a MediaStream obtained using the WebRTC or Media Capture and Streams APIs.
 [See MediaStreamAudioSourceNode on MDN](https://developer.mozilla.org/docs/Web/API/MediaStreamAudioSourceNode)
 */
+@editor.completeFrom(MediaStreamAudioSourceNode)
 type mediaStreamAudioSourceNode = {
   ...audioNode,
   /**
@@ -987,6 +1014,7 @@ type mediaStreamAudioSourceNode = {
 /**
 [See MediaStreamAudioDestinationNode on MDN](https://developer.mozilla.org/docs/Web/API/MediaStreamAudioDestinationNode)
 */
+@editor.completeFrom(MediaStreamAudioDestinationNode)
 type mediaStreamAudioDestinationNode = {
   ...audioNode,
   /**
@@ -1003,6 +1031,7 @@ type audioParamMap = {}
 /**
 [See AudioWorkletNode on MDN](https://developer.mozilla.org/docs/Web/API/AudioWorkletNode)
 */
+@editor.completeFrom(AudioWorkletNode)
 type audioWorkletNode = {
   ...audioNode,
   /**
@@ -1019,6 +1048,7 @@ type audioWorkletNode = {
 An AudioContext interface representing an audio-processing graph built from linked together AudioNodes. In contrast with a standard AudioContext, an OfflineAudioContext doesn't render the audio to the device hardware; instead, it generates it, as fast as it can, and outputs the result to an AudioBuffer.
 [See OfflineAudioContext on MDN](https://developer.mozilla.org/docs/Web/API/OfflineAudioContext)
 */
+@editor.completeFrom(OfflineAudioContext)
 type offlineAudioContext = {
   ...baseAudioContext,
   /**
diff --git a/src/WebCryptoAPI.res b/src/WebCryptoAPI.res
index 281a1f1..5b341c7 100644
--- a/src/WebCryptoAPI.res
+++ b/src/WebCryptoAPI.res
@@ -29,12 +29,14 @@ type keyAlgorithm = {mutable name: string}
 This Web Crypto API interface provides a number of low-level cryptographic functions. It is accessed via the Crypto.subtle properties available in a window context (via Window.crypto).
 [See SubtleCrypto on MDN](https://developer.mozilla.org/docs/Web/API/SubtleCrypto)
 */
+@editor.completeFrom(SubtleCrypto)
 type subtleCrypto = {}
 
 /**
 Basic cryptography features available in the current context. It allows access to a cryptographically strong random number generator and to cryptographic primitives.
 [See Crypto on MDN](https://developer.mozilla.org/docs/Web/API/Crypto)
 */
+@editor.completeFrom(Crypto)
 type crypto = {
   /**
     [Read more on MDN](https://developer.mozilla.org/docs/Web/API/Crypto/subtle)
diff --git a/src/WebLocksAPI.res b/src/WebLocksAPI.res
index c80c755..50665a1 100644
--- a/src/WebLocksAPI.res
+++ b/src/WebLocksAPI.res
@@ -10,6 +10,7 @@ type lockMode =
 /**
 [See LockManager on MDN](https://developer.mozilla.org/docs/Web/API/LockManager)
 */
+@editor.completeFrom(LockManager)
 type lockManager = {}
 
 /**
diff --git a/src/WebSocketsAPI.res b/src/WebSocketsAPI.res
index 388f3a3..1ce792c 100644
--- a/src/WebSocketsAPI.res
+++ b/src/WebSocketsAPI.res
@@ -14,6 +14,7 @@ type messageEventSource = any
 Provides the API for creating and managing a WebSocket connection to a server, as well as for sending and receiving data on the connection.
 [See WebSocket on MDN](https://developer.mozilla.org/docs/Web/API/WebSocket)
 */
+@editor.completeFrom(WebSocket)
 type webSocket = {
   ...eventTarget,
   /**
@@ -56,6 +57,7 @@ Can be set, to change how binary data is returned. The default is "blob".
 A CloseEvent is sent to clients using WebSockets when the connection is closed. This is delivered to the listener indicated by the WebSocket object's onclose attribute.
 [See CloseEvent on MDN](https://developer.mozilla.org/docs/Web/API/CloseEvent)
 */
+@editor.completeFrom(CloseEvent)
 type closeEvent = {
   ...event,
   /**
diff --git a/src/WebSpeechAPI.res b/src/WebSpeechAPI.res
index a29be65..4cf27bf 100644
--- a/src/WebSpeechAPI.res
+++ b/src/WebSpeechAPI.res
@@ -6,6 +6,7 @@ open EventAPI
 This Web Speech API interface is the controller interface for the speech service; this can be used to retrieve information about the synthesis voices available on the device, start and pause speech, and other commands besides.
 [See SpeechSynthesis on MDN](https://developer.mozilla.org/docs/Web/API/SpeechSynthesis)
 */
+@editor.completeFrom(SpeechSynthesis)
 type speechSynthesis = {
   ...eventTarget,
   /**
@@ -53,6 +54,7 @@ type speechSynthesisVoice = {
 This Web Speech API interface represents a speech request. It contains the content the speech service should read and information about how to read it (e.g. language, pitch and volume.)
 [See SpeechSynthesisUtterance on MDN](https://developer.mozilla.org/docs/Web/API/SpeechSynthesisUtterance)
 */
+@editor.completeFrom(SpeechSynthesisUtterance)
 type speechSynthesisUtterance = {
   ...eventTarget,
   /**
diff --git a/src/WebStorageAPI.res b/src/WebStorageAPI.res
index fd5f6c2..a38a107 100644
--- a/src/WebStorageAPI.res
+++ b/src/WebStorageAPI.res
@@ -6,6 +6,7 @@ open EventAPI
 This Web Storage API interface provides access to a particular domain's session or local storage. It allows, for example, the addition, modification, or deletion of stored data items.
 [See Storage on MDN](https://developer.mozilla.org/docs/Web/API/Storage)
 */
+@editor.completeFrom(Storage)
 type storage = {
   /**
     Returns the number of key/value pairs.
@@ -18,6 +19,7 @@ type storage = {
 A StorageEvent is sent to a window when a storage area it has access to is changed within the context of another document.
 [See StorageEvent on MDN](https://developer.mozilla.org/docs/Web/API/StorageEvent)
 */
+@editor.completeFrom(StorageEvent)
 type storageEvent = {
   ...event,
   /**
diff --git a/src/WebVTTAPI.res b/src/WebVTTAPI.res
index 4ab8efd..5d419fe 100644
--- a/src/WebVTTAPI.res
+++ b/src/WebVTTAPI.res
@@ -18,6 +18,7 @@ type textTrackMode =
 /**
 [See TextTrackCueList on MDN](https://developer.mozilla.org/docs/Web/API/TextTrackCueList)
 */
+@editor.completeFrom(TextTrackCueList)
 type textTrackCueList = {
   /**
     Returns the number of cues in the list.
@@ -30,6 +31,7 @@ type textTrackCueList = {
 TextTrackCues represent a string of text that will be displayed for some duration of time on a TextTrack. This includes the start and end times that the cue will be displayed. A TextTrackCue cannot be used directly, instead one of the derived types (e.g. VTTCue) must be used.
 [See TextTrackCue on MDN](https://developer.mozilla.org/docs/Web/API/TextTrackCue)
 */
+@editor.completeFrom(TextTrack)
 type rec textTrackCue = {
   ...eventTarget,
   /**
@@ -71,6 +73,7 @@ Can be set.
 This interface also inherits properties from EventTarget.
 [See TextTrack on MDN](https://developer.mozilla.org/docs/Web/API/TextTrack)
 */
+@editor.completeFrom(TextTrack)
 and textTrack = {
   ...eventTarget,
   /**