Convert gr-linked-chip.js to .ts

Change-Id: I0c2fe85664cb134da6388bd59b488cd758da43ff
diff --git a/polygerrit-ui/app/elements/shared/gr-linked-chip/gr-linked-chip.ts b/polygerrit-ui/app/elements/shared/gr-linked-chip/gr-linked-chip.ts
index 46588ef..da843fa 100644
--- a/polygerrit-ui/app/elements/shared/gr-linked-chip/gr-linked-chip.ts
+++ b/polygerrit-ui/app/elements/shared/gr-linked-chip/gr-linked-chip.ts
@@ -15,57 +15,60 @@
  * limitations under the License.
  */
 
-import '../gr-button/gr-button.js';
-import '../gr-icons/gr-icons.js';
-import '../gr-limited-text/gr-limited-text.js';
-import '../../../styles/shared-styles.js';
-import {GestureEventListeners} from '@polymer/polymer/lib/mixins/gesture-event-listeners.js';
-import {LegacyElementMixin} from '@polymer/polymer/lib/legacy/legacy-element-mixin.js';
-import {PolymerElement} from '@polymer/polymer/polymer-element.js';
-import {htmlTemplate} from './gr-linked-chip_html.js';
+import '../gr-button/gr-button';
+import '../gr-icons/gr-icons';
+import '../gr-limited-text/gr-limited-text';
+import '../../../styles/shared-styles';
+import {GestureEventListeners} from '@polymer/polymer/lib/mixins/gesture-event-listeners';
+import {LegacyElementMixin} from '@polymer/polymer/lib/legacy/legacy-element-mixin';
+import {PolymerElement} from '@polymer/polymer/polymer-element';
+import {customElement, property} from '@polymer/decorators/lib/decorators';
+import {htmlTemplate} from './gr-linked-chip_html';
 
-/**
- * @extends PolymerElement
- */
-class GrLinkedChip extends GestureEventListeners(
-    LegacyElementMixin(PolymerElement)) {
-  static get template() { return htmlTemplate; }
-
-  static get is() { return 'gr-linked-chip'; }
-
-  static get properties() {
-    return {
-      href: String,
-      disabled: {
-        type: Boolean,
-        value: false,
-        reflectToAttribute: true,
-      },
-      removable: {
-        type: Boolean,
-        value: false,
-      },
-      text: String,
-      transparentBackground: {
-        type: Boolean,
-        value: false,
-      },
-
-      /**  If provided, sets the maximum length of the content. */
-      limit: Number,
-    };
-  }
-
-  _getBackgroundClass(transparent) {
-    return transparent ? 'transparentBackground' : '';
-  }
-
-  _handleRemoveTap(e) {
-    e.preventDefault();
-    this.dispatchEvent(new CustomEvent('remove', {
-      composed: true, bubbles: true,
-    }));
+declare global {
+  interface HTMLElementTagNameMap {
+    'gr-linked-chip': GrLinkedChip;
   }
 }
 
-customElements.define(GrLinkedChip.is, GrLinkedChip);
+@customElement('gr-linked-chip')
+export class GrLinkedChip extends GestureEventListeners(
+  LegacyElementMixin(PolymerElement)
+) {
+  static get template() {
+    return htmlTemplate;
+  }
+
+  @property({type: String})
+  href?: string;
+
+  @property({type: Boolean, reflectToAttribute: true})
+  disabled = false;
+
+  @property({type: Boolean})
+  removable = false;
+
+  @property({type: String})
+  text?: string;
+
+  @property({type: Boolean})
+  transparentBackground = false;
+
+  /**  If provided, sets the maximum length of the content. */
+  @property({type: Number})
+  limit?: number;
+
+  _getBackgroundClass(transparent: boolean) {
+    return transparent ? 'transparentBackground' : '';
+  }
+
+  _handleRemoveTap(e: Event) {
+    e.preventDefault();
+    this.dispatchEvent(
+      new CustomEvent('remove', {
+        composed: true,
+        bubbles: true,
+      })
+    );
+  }
+}