vaadin / vaadin-context-menu

The responsive Web Component for showing context dependent items for any element on the page. Part of the Vaadin components.
https://vaadin.com/components
Apache License 2.0
26 stars 10 forks source link

feat: prepare for TS defs generation [skip ci] #274

Closed web-padawan closed 4 years ago

web-padawan commented 4 years ago

Fixes #271

Generated TS definitions look like this:

vaadin-context-menu.d.ts

import {PolymerElement} from '@polymer/polymer/polymer-element.js';

import {GestureEventListeners} from '@polymer/polymer/lib/mixins/gesture-event-listeners.js';

import {FlattenedNodesObserver} from '@polymer/polymer/lib/utils/flattened-nodes-observer.js';

import {ItemsMixin} from './vaadin-contextmenu-items-mixin.js';

import {ElementMixin} from '@vaadin/vaadin-element-mixin/vaadin-element-mixin.js';

import {ThemePropertyMixin} from '@vaadin/vaadin-themable-mixin/vaadin-theme-property-mixin.js';

import {html} from '@polymer/polymer/lib/utils/html-tag.js';

import {addListener, removeListener} from '@polymer/polymer/lib/utils/gestures.js';

declare class ContextMenuElement extends
  ElementMixin(
  ThemePropertyMixin(
  ItemsMixin(
  GestureEventListeners(
  PolymerElement)))) {
  selector: string|null|undefined;
  readonly opened: boolean;
  openOn: string;
  listenOn: HTMLElement;
  closeOn: string;
  renderer: ContextMenuRenderer|null|undefined;
  _contentTemplate: HTMLTemplateElement|null;
  ready(): void;
  connectedCallback(): void;
  disconnectedCallback(): void;
  _setTemplateFromNodes(nodes: Node[]): void;
  render(): void;
  close(): void;
  open(e: Event|null): void;
}

declare global {
  interface HTMLElementTagNameMap {
    "vaadin-context-menu": ContextMenuElement;
  }
}

export {ContextMenuElement};

import {ContextMenuRenderer} from '../@types/interfaces';

vaadin-contextmenu-items-mixin.d.ts

import {ItemElement} from '@vaadin/vaadin-item/src/vaadin-item.js';

import {ListBoxElement} from '@vaadin/vaadin-list-box/src/vaadin-list-box.js';

import {flush} from '@polymer/polymer/lib/utils/flush.js';

declare class ContextMenuItemElement extends ItemElement {
}

declare global {
  interface HTMLElementTagNameMap {
    "vaadin-context-menu-item": ContextMenuItemElement;
    "vaadin-context-menu-list-box": ContextMenuListBoxElement;
  }
}

declare class ContextMenuListBoxElement extends ListBoxElement {
}

export {ItemsMixin};

declare function ItemsMixin<T extends new (...args: any[]) => {}>(base: T): T & ItemsMixinConstructor;

interface ItemsMixinConstructor {
  new(...args: any[]): ItemsMixin;
}

export {ItemsMixinConstructor};

interface ItemsMixin {
  items: ContextMenuItem[]|undefined;
  ready(): void;
  connectedCallback(): void;
  disconnectedCallback(): void;
}

import {ContextMenuItem} from '../@types/interfaces';
web-padawan commented 4 years ago

get __isRTL() doesn't have @protected or @private. Should probably have @protected

Done.

method open(e) now has @param {Event} e which results in open(e: Event|null): void; so you can't call open without a parameter. The type should instead be either {!Event | undefined}

Done.