diff --git a/types/polymer/index.d.ts b/types/polymer/index.d.ts index 10b21940c4..7b7d45d572 100644 --- a/types/polymer/index.d.ts +++ b/types/polymer/index.d.ts @@ -3,334 +3,336 @@ // Definitions by: Louis Grignon , Suguru Inatomi // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped -/// +import { CustomElementConstructor } from "webcomponents.js"; -declare namespace polymer { +declare global { + namespace polymer { - type PropConstructorType = StringConstructor | ObjectConstructor | BooleanConstructor | NumberConstructor | DateConstructor | ArrayConstructor; + type PropConstructorType = StringConstructor | ObjectConstructor | BooleanConstructor | NumberConstructor | DateConstructor | ArrayConstructor; - interface PropObjectType { - type: PropConstructorType; - value?: boolean | number | string | Function | Object; - reflectToAttribute?: boolean; - readOnly?: boolean; - notify?: boolean; - computed?: string; - observer?: string; + interface PropObjectType { + type: PropConstructorType; + value?: boolean | number | string | Function | Object; + reflectToAttribute?: boolean; + readOnly?: boolean; + notify?: boolean; + computed?: string; + observer?: string; + } + + interface Base { + /** Need to allow all properties for callback methods. */ + [prop: string]: any; + + /* polymer-micro */ + + // Attributes + + hostAttributes?: {[name:string]:any}; + + reflectPropertiesToAttribute?(name: string): void; + + serializeValueToAttribute?(value: any, attribute: string, node?: Element): void; + + deserialize?(value: string, type: NumberConstructor): number; + deserialize?(value: string, type: BooleanConstructor): boolean; + deserialize?(value: string, type: ObjectConstructor): Object; + deserialize?(value: string, type: ArrayConstructor): any[]; + deserialize?(value: string, type: DateConstructor): Date; + deserialize?(value: string, type: StringConstructor): string; + + serialize?(value: any): string; + + // Behaviors + + behaviors?:Object[]; + + // Constructors + + factoryImpl?(...args: any[]): void; + + // Debouncer + + debounce?(jobName: string, callback: Function, wait: number): void; + + isDebouncerActive?(jobName: string): boolean; + + flushDebouncer?(jobName: string): void; + + cancelDebouncer?(jobName: string): void; + + // Extends + + extends?: string; + + getNativePrototype?(tag: string): Object; + + // Properties + + properties?:{[prop:string]:(PropConstructorType|PropObjectType);}; + + getPropertyInfo?(property: string): Object; + + // Tag + + is: string; + + /* polymer-mini */ + + // Ready + + ready?(): void; + + attachedCallback?(): void; + + // Shady + + domHost?(): Element; + + distributeContent?(): void; + + elementMatches?(selector: string, node?: Element): boolean; + + // Template { + + instanceTemplate?(template: HTMLElement): DocumentFragment; + + /* polymer-standard */ + + + // Annotations + + $?: any; + + // Events + + listeners?: {[key:string]:string;}; + + listen?(node: Element, eventName: string, methodName: string): void; + + unlisten?(node: Element, eventName: string, methodName: string): void; + + // Gestures + + setScrollDirection?(direction: string, node?: HTMLElement): void; + + // NotifyPath + + notifyPath?(path: string, value: any, fromAbove: any): void; + + set?(path: string|(string|number)[], value: any, root?: Object): void; + + get?(path: string|(string|number)[], root?: Object): any; + + linkPaths?(to: string, from?: string): void; + + unlinkPaths?(path: string): void; + + push?(path: string, ...item: any[]): number; + + pop?(path: string): any; + + splice?(path: string, index: number, removeCount: number, ...item: any[]): + number; + + shift?(path: string): any; + + unshift?(path: string, ...item: any[]): number; + + // ResolveUrl + + resolveUrl?(url: string): string; + + // Styling + + scopeSubtree?(container: Element, shouldObserve: boolean): void; + + // Utils + + $$?(selector: string): Element; + + toggleClass?(name: string, bool?: boolean, node?: HTMLElement): void; + + toggleAttribute?(name: string, bool?: boolean, node?: HTMLElement): void; + + classFollows?(name: string, toElement: HTMLElement, fromElement: HTMLElement): void; + + attributeFollows?(name: string, toElement: HTMLElement, fromElement: HTMLElement): void; + + getContentChildNodes?(selector: string): Node[]; + + getContentChildren?(selector: string): HTMLElement[]; + + fire?(type: string, detail?: any, options?: Object): CustomEvent; + + async?(callback: ()=>void, waitTime?: number): number; + + cancelAsync?(handle: number): void; + + arrayDelete?(path: string|any[], item: any): any[]; + + transform?(transform: string, node?: HTMLElement): void; + + translate3d?(x: number, y: number, z: number, node?: HTMLElement): void; + + importHref?(href: string, onload?: Function, onerror?: Function): HTMLLinkElement; + + create?(tag: string, props: Object): Element; + + isLightDescendant?(node: HTMLElement): boolean; + + isLocalDescendant?(node: HTMLElement): boolean + + // XStyling + + updateStyles?(): void; + + /* common api */ + + registerCallback?():void; + + createdCallback?():void; + + attachedCallback?():void; + + detachedCallback?():void; + + attributeChangedCallback?(name: string):void; + + extend?(prototype: Object, api: Object):Object; + + mixin?(target: Object, source: Object):Object; + + copyOwnProperty?(name: string, source: Object, target: Object):void; + + observers?: string[]; + + beforeRegister?(): void; + + registered?(): void; + + created?(): void; + + attached?(): void; + + detached?(): void; + + attributeChanged?(name: string, oldValue: any, newValue: any): void; + + } + + interface DomApiStatic { + + (obj: Node|Base):DomApi; + + (obj: Event):EventApi; + + flush():void; + } + + interface DomApi { + + appendChild(node: Node): Node; + + insertBefore(node: Node, refNode?: Node):Node; + + removeChild(node: Node):Node; + + replaceChild(node: Node, refNode: Node):Node; + + getOwnerRoot():Node; + + querySelector(selector: string):Node; + + querySelectorAll(selector: string):Node[]; + + getDestinationInsertionPoints():Node[]; + + getDistributedNodes():Node[]; + + queryDistributedElements(selector: string):Node[]; + + setAttribute(name: string, value: any):void; + + removeAttribute(name: string):void; + + childNodes:Node[]; + + children:Element[]; + + parentNode:Node; + + firstChild:Node; + + lastChild:Node; + + nextSibling:Node; + + previousSibling:Node; + + firstElementChild:Element; + + lastElementChild:Element; + + nextElementSibling:Element; + + previousElementSibling:Element; + + textContent:string; + + innerHTML:string; + } + + interface EventApi { + + rootTarget:EventTarget; + + localTarget:EventTarget; + + path:Node[]; + } + + interface Settings { + hasNativeCSSProperties: boolean + hasNativeImports: boolean + hasShadow: boolean + nativeShadow: boolean + useNativeCSSProperties: boolean + useNativeCustomElements: boolean + useNativeImports: boolean + useNativeShadow: boolean + usePolyfillProto: boolean + useShadow: boolean + wantShadow: boolean + } + + interface RenderStatus { + afterNextRender(element: Element, fn: Function, args?: any): void; + hasRendered(): boolean; + whenReady(cb: Function): void; + } + + interface ImportStatus extends RenderStatus { + whenLoaded(cb: Function): void; + } + + interface PolymerStatic { + Settings: Settings; + + isInstance(element: string): boolean; + Base: Base; + dom: DomApiStatic; + + (prototype: Base | { new (): Base }): CustomElementConstructor; + + Class(prototype: Base | { new (): Base }): CustomElementConstructor; + + RenderStatus: RenderStatus + + /** @deprecated */ + ImportStatus: ImportStatus + } } - interface Base { - /** Need to allow all properties for callback methods. */ - [prop: string]: any; - - /* polymer-micro */ - - // Attributes - - hostAttributes?: {[name:string]:any}; - - reflectPropertiesToAttribute?(name: string): void; - - serializeValueToAttribute?(value: any, attribute: string, node?: Element): void; - - deserialize?(value: string, type: NumberConstructor): number; - deserialize?(value: string, type: BooleanConstructor): boolean; - deserialize?(value: string, type: ObjectConstructor): Object; - deserialize?(value: string, type: ArrayConstructor): any[]; - deserialize?(value: string, type: DateConstructor): Date; - deserialize?(value: string, type: StringConstructor): string; - - serialize?(value: any): string; - - // Behaviors - - behaviors?:Object[]; - - // Constructors - - factoryImpl?(...args: any[]): void; - - // Debouncer - - debounce?(jobName: string, callback: Function, wait: number): void; - - isDebouncerActive?(jobName: string): boolean; - - flushDebouncer?(jobName: string): void; - - cancelDebouncer?(jobName: string): void; - - // Extends - - extends?: string; - - getNativePrototype?(tag: string): Object; - - // Properties - - properties?:{[prop:string]:(PropConstructorType|PropObjectType);}; - - getPropertyInfo?(property: string): Object; - - // Tag - - is: string; - - /* polymer-mini */ - - // Ready - - ready?(): void; - - attachedCallback?(): void; - - // Shady - - domHost?(): Element; - - distributeContent?(): void; - - elementMatches?(selector: string, node?: Element): boolean; - - // Template { - - instanceTemplate?(template: HTMLElement): DocumentFragment; - - /* polymer-standard */ - - - // Annotations - - $?: any; - - // Events - - listeners?: {[key:string]:string;}; - - listen?(node: Element, eventName: string, methodName: string): void; - - unlisten?(node: Element, eventName: string, methodName: string): void; - - // Gestures - - setScrollDirection?(direction: string, node?: HTMLElement): void; - - // NotifyPath - - notifyPath?(path: string, value: any, fromAbove: any): void; - - set?(path: string|(string|number)[], value: any, root?: Object): void; - - get?(path: string|(string|number)[], root?: Object): any; - - linkPaths?(to: string, from?: string): void; - - unlinkPaths?(path: string): void; - - push?(path: string, ...item: any[]): number; - - pop?(path: string): any; - - splice?(path: string, index: number, removeCount: number, ...item: any[]): - number; - - shift?(path: string): any; - - unshift?(path: string, ...item: any[]): number; - - // ResolveUrl - - resolveUrl?(url: string): string; - - // Styling - - scopeSubtree?(container: Element, shouldObserve: boolean): void; - - // Utils - - $$?(selector: string): Element; - - toggleClass?(name: string, bool?: boolean, node?: HTMLElement): void; - - toggleAttribute?(name: string, bool?: boolean, node?: HTMLElement): void; - - classFollows?(name: string, toElement: HTMLElement, fromElement: HTMLElement): void; - - attributeFollows?(name: string, toElement: HTMLElement, fromElement: HTMLElement): void; - - getContentChildNodes?(selector: string): Node[]; - - getContentChildren?(selector: string): HTMLElement[]; - - fire?(type: string, detail?: any, options?: Object): CustomEvent; - - async?(callback: ()=>void, waitTime?: number): number; - - cancelAsync?(handle: number): void; - - arrayDelete?(path: string|any[], item: any): any[]; - - transform?(transform: string, node?: HTMLElement): void; - - translate3d?(x: number, y: number, z: number, node?: HTMLElement): void; - - importHref?(href: string, onload?: Function, onerror?: Function): HTMLLinkElement; - - create?(tag: string, props: Object): Element; - - isLightDescendant?(node: HTMLElement): boolean; - - isLocalDescendant?(node: HTMLElement): boolean - - // XStyling - - updateStyles?(): void; - - /* common api */ - - registerCallback?():void; - - createdCallback?():void; - - attachedCallback?():void; - - detachedCallback?():void; - - attributeChangedCallback?(name: string):void; - - extend?(prototype: Object, api: Object):Object; - - mixin?(target: Object, source: Object):Object; - - copyOwnProperty?(name: string, source: Object, target: Object):void; - - observers?: string[]; - - beforeRegister?(): void; - - registered?(): void; - - created?(): void; - - attached?(): void; - - detached?(): void; - - attributeChanged?(name: string, oldValue: any, newValue: any): void; - - } - - interface DomApiStatic { - - (obj: Node|Base):DomApi; - - (obj: Event):EventApi; - - flush():void; - } - - interface DomApi { - - appendChild(node: Node): Node; - - insertBefore(node: Node, refNode?: Node):Node; - - removeChild(node: Node):Node; - - replaceChild(node: Node, refNode: Node):Node; - - getOwnerRoot():Node; - - querySelector(selector: string):Node; - - querySelectorAll(selector: string):Node[]; - - getDestinationInsertionPoints():Node[]; - - getDistributedNodes():Node[]; - - queryDistributedElements(selector: string):Node[]; - - setAttribute(name: string, value: any):void; - - removeAttribute(name: string):void; - - childNodes:Node[]; - - children:Element[]; - - parentNode:Node; - - firstChild:Node; - - lastChild:Node; - - nextSibling:Node; - - previousSibling:Node; - - firstElementChild:Element; - - lastElementChild:Element; - - nextElementSibling:Element; - - previousElementSibling:Element; - - textContent:string; - - innerHTML:string; - } - - interface EventApi { - - rootTarget:EventTarget; - - localTarget:EventTarget; - - path:Node[]; - } - - interface Settings { - hasNativeCSSProperties: boolean - hasNativeImports: boolean - hasShadow: boolean - nativeShadow: boolean - useNativeCSSProperties: boolean - useNativeCustomElements: boolean - useNativeImports: boolean - useNativeShadow: boolean - usePolyfillProto: boolean - useShadow: boolean - wantShadow: boolean - } - - interface RenderStatus { - afterNextRender(element: Element, fn: Function, args?: any): void; - hasRendered(): boolean; - whenReady(cb: Function): void; - } - - interface ImportStatus extends RenderStatus { - whenLoaded(cb: Function): void; - } - - interface PolymerStatic { - Settings: Settings; - - isInstance(element: string): boolean; - Base: Base; - dom: DomApiStatic; - - (prototype: Base | { new (): Base }): webcomponents.CustomElementConstructor; - - Class(prototype: Base | { new (): Base }): webcomponents.CustomElementConstructor; - - RenderStatus: RenderStatus - - /** @deprecated */ - ImportStatus: ImportStatus - } + var Polymer: polymer.PolymerStatic; } - -declare var Polymer: polymer.PolymerStatic; diff --git a/types/webcomponents.js/index.d.ts b/types/webcomponents.js/index.d.ts index c4e03d9c91..b7dcff5248 100644 --- a/types/webcomponents.js/index.d.ts +++ b/types/webcomponents.js/index.d.ts @@ -1,71 +1,69 @@ -// Type definitions for webcomponents.js 0.6.0 +// Type definitions for webcomponents.js 0.6 // Project: https://github.com/webcomponents/webcomponentsjs // Definitions by: Adi Dahiya // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped -declare namespace webcomponents { +export interface CustomElementInit { + prototype: HTMLElement; + extends?: string; +} - export interface CustomElementInit { - prototype: HTMLElement; - extends?: string; +export interface CustomElementConstructor { + new(): HTMLElement; +} + +export interface CustomElementsPolyfill { + hasNative: boolean; + flags: any; + ready: boolean; + useNative: boolean; +} + +export interface HTMLImportsPolyfill { + IMPORT_LINK_TYPE: string; + isIE: boolean; + flags: any; + ready: boolean; + rootDocument: Document; + useNative: boolean; + whenReady(callback: () => void): void; +} + +export interface Polyfill { + flags: any; +} + +declare global { + // This contains duplicates of some types in lib.dom.d.ts in order to support typescript 2.0 + interface ElementDefinitionOptions { + extends: string; } - export interface CustomElementConstructor { - new(): HTMLElement; - } - - export interface CustomElementsPolyfill { - hasNative: boolean; - flags: any; - ready: boolean; - useNative: boolean; - } - - export interface HTMLImportsPolyfill { - IMPORT_LINK_TYPE: string; - isIE: boolean; - flags: any; - ready: boolean; - rootDocument: Document; - useNative: boolean; - whenReady(callback: () => void): void; - } - - export interface ShadowRootPolyfill extends DocumentFragment { + interface ShadowRoot extends DocumentFragment { innerHTML: string; readonly host: Element; } - export interface Polyfill { - flags: any; + interface CustomElementRegistry { + define(name: string, constructor: Function, options?: ElementDefinitionOptions): void; + get(name: string): any; + whenDefined(name: string): PromiseLike; } - /** - * I just slapped this in here - sure it could be better ... :-) - */ - export interface CustomElements { - define( tagName:string, elementClass:any ):void; + interface Element { + createShadowRoot(): ShadowRoot; + readonly shadowRoot: ShadowRoot | null; } + interface Document { + registerElement(name: string, prototype: CustomElementInit): CustomElementConstructor; + } + + interface Window { + CustomElements: CustomElementsPolyfill; + HTMLImports: HTMLImportsPolyfill; + WebComponents: Polyfill; + + customElements: CustomElementRegistry; + } } - -declare module "webcomponents.js" { - export = webcomponents; -} - -interface Element { - createShadowRoot(): webcomponents.ShadowRootPolyfill; - readonly shadowRoot?: webcomponents.ShadowRootPolyfill; -} - -interface Document { - registerElement(name: string, prototype: webcomponents.CustomElementInit): webcomponents.CustomElementConstructor; -} - -interface Window { - CustomElements: webcomponents.CustomElementsPolyfill; - HTMLImports: webcomponents.HTMLImportsPolyfill; - WebComponents: webcomponents.Polyfill; - - customElements: webcomponents.CustomElements; -} \ No newline at end of file diff --git a/types/webcomponents.js/tslint.json b/types/webcomponents.js/tslint.json new file mode 100644 index 0000000000..a62d0d4e68 --- /dev/null +++ b/types/webcomponents.js/tslint.json @@ -0,0 +1,6 @@ +{ + "extends": "dtslint/dt.json", + "rules": { + "ban-types": false + } +} diff --git a/types/webcomponents.js/webcomponents.js-tests.ts b/types/webcomponents.js/webcomponents.js-tests.ts index 12738331a5..48c329f743 100644 --- a/types/webcomponents.js/webcomponents.js-tests.ts +++ b/types/webcomponents.js/webcomponents.js-tests.ts @@ -1,20 +1,18 @@ - - /* * Custom Elements */ -var fooProto = Object.create(HTMLElement.prototype, { +const fooProto = Object.create(HTMLElement.prototype, { createdCallback(this: HTMLElement) { // `this` should be the created element this.getElementsByTagName("a"); } }); -var XFoo = document.registerElement("x-foo", { +const XFoo = document.registerElement("x-foo", { prototype: fooProto }); -var xFoo = new XFoo(); +const xFoo = new XFoo(); xFoo.textContent = ""; document.body.appendChild(xFoo); @@ -40,7 +38,7 @@ document.querySelectorAll(`link[type=${window.HTMLImports.IMPORT_LINK_TYPE}`); * Shadow DOM */ -var shadow = xFoo.createShadowRoot(); +const shadow = xFoo.createShadowRoot(); xFoo.shadowRoot; shadow.innerHTML; shadow.host; @@ -50,8 +48,8 @@ shadow.host; */ window.WebComponents.flags; -window.customElements.define( "lw-arrival-pie", - +window.customElements.define( "lw-arrival-pie", + /** * ArrivalPie custom element */ @@ -63,4 +61,4 @@ window.customElements.define( "lw-arrival-pie", super(); } } -); \ No newline at end of file +);