{"version":3,"sources":["components/link/link.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAiC,UAAU,EAAS,MAAM,aAAa,CAAC;AAQ/E;;GAEG;AACH,oBAAY,SAAS;IACnB;;OAEG;IACH,OAAO,KAAK;IAEZ;;OAEG;IACH,KAAK,OAAO;IAEZ;;OAEG;IACH,KAAK,OAAO;CACb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAED;;;;GAIG;AACH,cACM,MAAO,SAAQ,WAAsB;IACzC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAS;IAEzB;;OAEG;IACH,SAAS,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK;IAU7C,SAAS,CAAC,SAAS,CAAC,EAAE,iBAAiB,GAAG,oBAAoB,CAAC;IAE/D;;OAEG;IACH,SAAS,KAAK,QAAQ,4CAOrB;IAED;;OAEG;IAEH,SAAS,CAAC,YAAY,CAAC,CAAC,EAAE,UAAU;IAEpC;;OAEG;IAEH,SAAS,CAAC,YAAY;IAQtB;;OAEG;IACH,SAAS,CAAC,mBAAmB;IAK7B;;OAEG;IACH,SAAS,CAAC,WAAW;IAqBrB;;OAEG;IAEH,QAAQ,UAAS;IAEjB;;OAEG;IAEH,QAAQ,EAAG,MAAM,CAAC;IAElB;;OAEG;IAEH,IAAI,EAAG,MAAM,CAAC;IAEd;;OAEG;IAEH,QAAQ,EAAG,MAAM,CAAC;IAElB;;OAEG;IAEH,QAAQ,EAAG,MAAM,CAAC;IAElB;;OAEG;IAEH,IAAI,EAAG,MAAM,CAAC;IAEd;;OAEG;IAEH,GAAG,EAAG,MAAM,CAAC;IAEb;;OAEG;IAEH,IAAI,YAAqB;IAEzB;;OAEG;IAEH,MAAM,EAAG,MAAM,CAAC;IAEhB;;OAEG;IAEH,IAAI,EAAG,MAAM,CAAC;IAEd,gBAAgB;IAOhB,MAAM;IAKN,MAAM,CAAC,MAAM,MAAU;CACxB;AAED,eAAe,MAAM,CAAC","file":"link.d.ts","sourcesContent":["/**\n * @license\n *\n * Copyright IBM Corp. 2019, 2021\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { classMap } from 'lit-html/directives/class-map';\nimport { html, property, customElement, LitElement, query } from 'lit-element';\nimport settings from 'carbon-components/es/globals/js/settings';\nimport ifNonNull from '../../globals/directives/if-non-null';\nimport FocusMixin from '../../globals/mixins/focus';\nimport styles from './link.scss';\n\nconst { prefix } = settings;\n\n/**\n * Link size.\n */\nexport enum LINK_SIZE {\n  /**\n   * Regular size\n   */\n  REGULAR = '',\n\n  /**\n   * Small size.\n   */\n  SMALL = 'sm',\n\n  /**\n   * Large size.\n   */\n  LARGE = 'lg',\n}\n\n/**\n * Link.\n * @element bx-link\n * @csspart link The link.\n */\n@customElement(`${prefix}-link`)\nclass BXLink extends FocusMixin(LitElement) {\n  /**\n   * `true` if there is an icon.\n   */\n  private _hasIcon = false;\n\n  /**\n   * Handles `slotchange` event.\n   */\n  protected _handleSlotChange({ target }: Event) {\n    const { name } = target as HTMLSlotElement;\n    const hasContent = (target as HTMLSlotElement)\n      .assignedNodes()\n      .some(node => node.nodeType !== Node.TEXT_NODE || node!.textContent!.trim());\n    this[name === 'icon' ? '_hasIcon' : ''] = hasContent;\n    this.requestUpdate();\n  }\n\n  @query('#link')\n  protected _linkNode?: HTMLAnchorElement | HTMLParagraphElement;\n\n  /**\n   * The CSS class list for the link node.\n   */\n  protected get _classes() {\n    const { disabled, size } = this;\n    return classMap({\n      [`${prefix}--link`]: true,\n      [`${prefix}--link--disabled`]: disabled,\n      [`${prefix}--link--${size}`]: size,\n    });\n  }\n\n  /**\n   * Handles `click` event on the `<a>`.\n   */\n  // eslint-disable-next-line class-methods-use-this, @typescript-eslint/no-unused-vars\n  protected _handleClick(_: MouseEvent) {}\n\n  /**\n   * @returns The inner content.\n   */\n  // eslint-disable-next-line class-methods-use-this\n  protected _renderInner() {\n    const { _hasIcon: hasIcon, _handleSlotChange: handleSlotChange } = this;\n    return html`\n      <slot @slotchange=\"${handleSlotChange}\"></slot>\n      <div ?hidden=\"${!hasIcon}\" class=\"${prefix}--link__icon\"><slot name=\"icon\" @slotchange=\"${handleSlotChange}\"></slot></div>\n    `;\n  }\n\n  /**\n   * @returns The disabled link content.\n   */\n  protected _renderDisabledLink() {\n    const { _classes: classes } = this;\n    return html` <p id=\"link\" part=\"link\" class=\"${classes}\">${this._renderInner()}</p> `;\n  }\n\n  /**\n   * @returns The link content.\n   */\n  protected _renderLink() {\n    const { download, href, hreflang, linkRole, ping, rel, target, type, _classes: classes, _handleClick: handleClick } = this;\n    return html`\n      <a\n        id=\"link\"\n        role=\"${ifNonNull(linkRole)}\"\n        class=\"${classes}\"\n        part=\"link\"\n        download=\"${ifNonNull(download)}\"\n        href=\"${ifNonNull(href)}\"\n        hreflang=\"${ifNonNull(hreflang)}\"\n        ping=\"${ifNonNull(ping)}\"\n        rel=\"${ifNonNull(rel)}\"\n        target=\"${ifNonNull(target)}\"\n        type=\"${ifNonNull(type)}\"\n        @click=\"${handleClick}\">\n        ${this._renderInner()}\n      </a>\n    `;\n  }\n\n  /**\n   * `true` if the button should be disabled.\n   */\n  @property({ type: Boolean, reflect: true })\n  disabled = false;\n\n  /**\n   * The default file name.\n   */\n  @property({ reflect: true })\n  download!: string;\n\n  /**\n   * Link `href`.\n   */\n  @property({ reflect: true })\n  href!: string;\n\n  /**\n   * The language of what `href` points to.\n   */\n  @property({ reflect: true })\n  hreflang!: string;\n\n  /**\n   * The a11y role for `<a>`.\n   */\n  @property({ attribute: 'link-role' })\n  linkRole!: string;\n\n  /**\n   * URLs to ping.\n   */\n  @property({ reflect: true })\n  ping!: string;\n\n  /**\n   * The link type.\n   */\n  @property({ reflect: true })\n  rel!: string;\n\n  /**\n   * Link size.\n   */\n  @property({ reflect: true })\n  size = LINK_SIZE.REGULAR;\n\n  /**\n   * The link target.\n   */\n  @property({ reflect: true })\n  target!: string;\n\n  /**\n   * MIME type of the `target`.\n   */\n  @property({ reflect: true })\n  type!: string;\n\n  createRenderRoot() {\n    return this.attachShadow({\n      mode: 'open',\n      delegatesFocus: Number((/Safari\\/(\\d+)/.exec(navigator.userAgent) ?? ['', 0])[1]) <= 537,\n    });\n  }\n\n  render() {\n    const { disabled } = this;\n    return disabled ? this._renderDisabledLink() : this._renderLink();\n  }\n\n  static styles = styles; // `styles` here is a `CSSResult` generated by custom WebPack loader\n}\n\nexport default BXLink;\n"]}