calcite-link.cjs.entry.js 7.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /*!
  2. * All material copyright ESRI, All Rights Reserved, unless otherwise specified.
  3. * See https://github.com/Esri/calcite-components/blob/master/LICENSE.md for details.
  4. * v1.0.0-beta.97
  5. */
  6. 'use strict';
  7. Object.defineProperty(exports, '__esModule', { value: true });
  8. const index = require('./index-a0010f96.js');
  9. const dom = require('./dom-2ec8c9ed.js');
  10. const resources = require('./resources-b5a5f8a7.js');
  11. const interactive = require('./interactive-32293bca.js');
  12. require('./guid-f4f03a7a.js');
  13. const linkCss = "@keyframes in{0%{opacity:0}100%{opacity:1}}@keyframes in-down{0%{opacity:0;transform:translate3D(0, -5px, 0)}100%{opacity:1;transform:translate3D(0, 0, 0)}}@keyframes in-up{0%{opacity:0;transform:translate3D(0, 5px, 0)}100%{opacity:1;transform:translate3D(0, 0, 0)}}@keyframes in-scale{0%{opacity:0;transform:scale3D(0.95, 0.95, 1)}100%{opacity:1;transform:scale3D(1, 1, 1)}}:root{--calcite-animation-timing:calc(150ms * var(--calcite-internal-duration-factor));--calcite-internal-duration-factor:var(--calcite-duration-factor, 1);--calcite-internal-animation-timing-fast:calc(100ms * var(--calcite-internal-duration-factor));--calcite-internal-animation-timing-medium:calc(200ms * var(--calcite-internal-duration-factor));--calcite-internal-animation-timing-slow:calc(300ms * var(--calcite-internal-duration-factor))}.calcite-animate{opacity:0;animation-fill-mode:both;animation-duration:var(--calcite-animation-timing)}.calcite-animate__in{animation-name:in}.calcite-animate__in-down{animation-name:in-down}.calcite-animate__in-up{animation-name:in-up}.calcite-animate__in-scale{animation-name:in-scale}@media (prefers-reduced-motion: reduce){:root{--calcite-internal-duration-factor:0.01}}:root{--calcite-floating-ui-transition:var(--calcite-animation-timing)}:host([hidden]){display:none}:host([disabled]){pointer-events:none;cursor:default;-webkit-user-select:none;user-select:none;opacity:var(--calcite-ui-opacity-disabled)}:host{display:inline}:host a,:host span{position:relative;display:flex;cursor:pointer;align-items:center;justify-content:center;border-radius:0px;border-style:none;font-family:inherit;transition:all var(--calcite-animation-timing) ease-in-out 0s, outline 0s, outline-offset 0s;text-decoration:none;line-height:inherit;font-size:inherit;-webkit-appearance:none}:host a:hover,:host span:hover{text-decoration:none}:host a,:host span{outline-color:transparent}:host a:focus,:host span:focus{outline:2px solid var(--calcite-ui-brand);outline-offset:-2px}calcite-icon{inline-size:1em;block-size:1em;min-inline-size:unset;min-block-size:unset}.calcite-link--icon{vertical-align:text-top;transition:all var(--calcite-animation-timing) ease-in-out 0s, outline 0s, outline-offset 0s;margin-block-start:0.125rem}:host .calcite-link--icon.icon-start{margin-inline-end:0.5rem}:host .calcite-link--icon.icon-end{margin-inline-start:0.5rem}:host span,:host a{position:relative;display:inline;border-style:none;background-color:transparent;padding:0px;color:var(--calcite-ui-text-link);transition:all var(--calcite-animation-timing) ease-in-out 0s, outline 0s, outline-offset 0s;line-height:inherit;white-space:initial;background-image:linear-gradient(currentColor, currentColor), linear-gradient(var(--calcite-link-blue-underline), var(--calcite-link-blue-underline));background-position:0% 100%, 100% 100%;background-repeat:no-repeat, no-repeat;background-size:0% 1px, 100% 1px}:host span:hover,:host span:focus,:host a:hover,:host a:focus{background-size:100% 1px, 100% 1px}:host span:active,:host a:active{background-size:100% 2px, 100% 2px}:host span.calcite--rtl,:host a.calcite--rtl{background-position:100% 100%, 100% 100%}:host([disabled]) ::slotted([calcite-hydrated][disabled]),:host([disabled]) [calcite-hydrated][disabled]{opacity:1}";
  14. const Link = class {
  15. constructor(hostRef) {
  16. index.registerInstance(this, hostRef);
  17. //--------------------------------------------------------------------------
  18. //
  19. // Properties
  20. //
  21. //--------------------------------------------------------------------------
  22. /** When `true`, interaction is prevented and the component is displayed with lower opacity. */
  23. this.disabled = false;
  24. /**
  25. * Prompts the user to save the linked URL instead of navigating to it. Can be used with or without a value:
  26. * Without a value, the browser will suggest a filename/extension
  27. * See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attr-download.
  28. */
  29. this.download = false;
  30. this.childElClickHandler = (event) => {
  31. if (!event.isTrusted) {
  32. // click was invoked internally, we stop it here
  33. event.stopPropagation();
  34. }
  35. };
  36. //--------------------------------------------------------------------------
  37. //
  38. // Private Methods
  39. //
  40. //--------------------------------------------------------------------------
  41. this.storeTagRef = (el) => {
  42. this.childEl = el;
  43. };
  44. }
  45. //--------------------------------------------------------------------------
  46. //
  47. // Lifecycle
  48. //
  49. //--------------------------------------------------------------------------
  50. componentDidRender() {
  51. interactive.updateHostInteraction(this);
  52. }
  53. render() {
  54. const { download, el } = this;
  55. const dir = dom.getElementDir(el);
  56. const childElType = this.href ? "a" : "span";
  57. const iconStartEl = (index.h("calcite-icon", { class: "calcite-link--icon icon-start", flipRtl: this.iconFlipRtl === "start" || this.iconFlipRtl === "both", icon: this.iconStart, scale: "s" }));
  58. const iconEndEl = (index.h("calcite-icon", { class: "calcite-link--icon icon-end", flipRtl: this.iconFlipRtl === "end" || this.iconFlipRtl === "both", icon: this.iconEnd, scale: "s" }));
  59. const Tag = childElType;
  60. const role = childElType === "span" ? "link" : null;
  61. const tabIndex = childElType === "span" ? 0 : null;
  62. return (index.h(index.Host, { role: "presentation" }, index.h(Tag, { class: { [resources.CSS_UTILITY.rtl]: dir === "rtl" },
  63. /*
  64. When the 'download' property of type 'boolean | string' is set to true, the value is "".
  65. This works around that issue for now.
  66. */
  67. download: Tag === "a" && (download === "" || download) ? download : null, href: Tag === "a" && this.href, onClick: this.childElClickHandler, ref: this.storeTagRef, rel: Tag === "a" && this.rel, role: role, tabIndex: tabIndex, target: Tag === "a" && this.target }, this.iconStart ? iconStartEl : null, index.h("slot", null), this.iconEnd ? iconEndEl : null)));
  68. }
  69. //--------------------------------------------------------------------------
  70. //
  71. // Events
  72. //
  73. //--------------------------------------------------------------------------
  74. clickHandler(event) {
  75. // forwards the click() to the internal link for non user-initiated events
  76. if (!event.isTrusted) {
  77. this.childEl.click();
  78. }
  79. }
  80. //--------------------------------------------------------------------------
  81. //
  82. // Public Methods
  83. //
  84. //--------------------------------------------------------------------------
  85. /** Sets focus on the component. */
  86. async setFocus() {
  87. dom.focusElement(this.childEl);
  88. }
  89. get el() { return index.getElement(this); }
  90. };
  91. Link.style = linkCss;
  92. exports.calcite_link = Link;