calcite-popover_2.entry.js 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442
  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.82
  5. */
  6. import { r as registerInstance, c as createEvent, f as forceUpdate, h, H as Host, g as getElement } from './index-8ece2564.js';
  7. import { a as defaultOffsetDistance, f as filterComputedPlacements, u as updatePopper, c as createPopper, C as CSS$1 } from './popper-0fd1fd89.js';
  8. import { g as guid } from './guid-b4461004.js';
  9. import { h as queryElementsRoots, t as toAriaBoolean, q as queryElementRoots } from './dom-da697a3f.js';
  10. import { H as Heading } from './Heading-8d613e81.js';
  11. import { c as createObserver } from './observers-b198f831.js';
  12. const CSS = {
  13. container: "container",
  14. arrow: "arrow",
  15. imageContainer: "image-container",
  16. closeButtonContainer: "close-button-container",
  17. closeButton: "close-button",
  18. content: "content",
  19. hasHeader: "has-header",
  20. header: "header",
  21. headerContent: "header-content",
  22. heading: "heading"
  23. };
  24. const TEXT = {
  25. close: "Close"
  26. };
  27. const defaultPopoverPlacement = "auto";
  28. const ARIA_CONTROLS = "aria-controls";
  29. const ARIA_EXPANDED = "aria-expanded";
  30. const HEADING_LEVEL = 2;
  31. class PopoverManager$1 {
  32. constructor() {
  33. // --------------------------------------------------------------------------
  34. //
  35. // Private Properties
  36. //
  37. // --------------------------------------------------------------------------
  38. this.registeredElements = new WeakMap();
  39. this.registeredElementCount = 0;
  40. // --------------------------------------------------------------------------
  41. //
  42. // Private Methods
  43. //
  44. // --------------------------------------------------------------------------
  45. this.queryPopover = (composedPath) => {
  46. const { registeredElements } = this;
  47. const registeredElement = composedPath.find((pathEl) => registeredElements.has(pathEl));
  48. return registeredElements.get(registeredElement);
  49. };
  50. this.clickHandler = (event) => {
  51. const composedPath = event.composedPath();
  52. const popover = this.queryPopover(composedPath);
  53. if (popover) {
  54. popover.toggle();
  55. return;
  56. }
  57. queryElementsRoots(event.target, "calcite-popover")
  58. .filter((popover) => popover.autoClose && popover.open && !composedPath.includes(popover))
  59. .forEach((popover) => popover.toggle(false));
  60. };
  61. }
  62. // --------------------------------------------------------------------------
  63. //
  64. // Public Methods
  65. //
  66. // --------------------------------------------------------------------------
  67. registerElement(referenceEl, popover) {
  68. this.registeredElementCount++;
  69. this.registeredElements.set(referenceEl, popover);
  70. if (this.registeredElementCount === 1) {
  71. this.addListeners();
  72. }
  73. }
  74. unregisterElement(referenceEl) {
  75. if (this.registeredElements.delete(referenceEl)) {
  76. this.registeredElementCount--;
  77. }
  78. if (this.registeredElementCount === 0) {
  79. this.removeListeners();
  80. }
  81. }
  82. addListeners() {
  83. document.addEventListener("pointerdown", this.clickHandler, { capture: true });
  84. }
  85. removeListeners() {
  86. document.removeEventListener("pointerdown", this.clickHandler, { capture: true });
  87. }
  88. }
  89. const popoverCss = "@-webkit-keyframes in{0%{opacity:0}100%{opacity:1}}@keyframes in{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes in-down{0%{opacity:0;-webkit-transform:translate3D(0, -5px, 0);transform:translate3D(0, -5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@keyframes in-down{0%{opacity:0;-webkit-transform:translate3D(0, -5px, 0);transform:translate3D(0, -5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@-webkit-keyframes in-up{0%{opacity:0;-webkit-transform:translate3D(0, 5px, 0);transform:translate3D(0, 5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@keyframes in-up{0%{opacity:0;-webkit-transform:translate3D(0, 5px, 0);transform:translate3D(0, 5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@-webkit-keyframes in-scale{0%{opacity:0;-webkit-transform:scale3D(0.95, 0.95, 1);transform:scale3D(0.95, 0.95, 1)}100%{opacity:1;-webkit-transform:scale3D(1, 1, 1);transform:scale3D(1, 1, 1)}}@keyframes in-scale{0%{opacity:0;-webkit-transform:scale3D(0.95, 0.95, 1);transform:scale3D(0.95, 0.95, 1)}100%{opacity:1;-webkit-transform:scale3D(1, 1, 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;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:var(--calcite-animation-timing);animation-duration:var(--calcite-animation-timing)}.calcite-animate__in{-webkit-animation-name:in;animation-name:in}.calcite-animate__in-down{-webkit-animation-name:in-down;animation-name:in-down}.calcite-animate__in-up{-webkit-animation-name:in-up;animation-name:in-up}.calcite-animate__in-scale{-webkit-animation-name:in-scale;animation-name:in-scale}:root{--calcite-popper-transition:var(--calcite-animation-timing)}:host([hidden]){display:none}:host{display:block;position:absolute;z-index:900;-webkit-transform:scale(0);transform:scale(0)}.calcite-popper-anim{position:relative;z-index:1;-webkit-transition:var(--calcite-popper-transition);transition:var(--calcite-popper-transition);visibility:hidden;-webkit-transition-property:visibility, opacity, -webkit-transform;transition-property:visibility, opacity, -webkit-transform;transition-property:transform, visibility, opacity;transition-property:transform, visibility, opacity, -webkit-transform;opacity:0;-webkit-box-shadow:0 0 16px 0 rgba(0, 0, 0, 0.16);box-shadow:0 0 16px 0 rgba(0, 0, 0, 0.16);border-radius:0.25rem}:host([data-popper-placement^=bottom]) .calcite-popper-anim{-webkit-transform:translateY(-5px);transform:translateY(-5px)}:host([data-popper-placement^=top]) .calcite-popper-anim{-webkit-transform:translateY(5px);transform:translateY(5px)}:host([data-popper-placement^=left]) .calcite-popper-anim{-webkit-transform:translateX(5px);transform:translateX(5px)}:host([data-popper-placement^=right]) .calcite-popper-anim{-webkit-transform:translateX(-5px);transform:translateX(-5px)}:host([data-popper-placement]) .calcite-popper-anim--active{opacity:1;visibility:visible;-webkit-transform:translate(0);transform:translate(0)}:host([data-popper-placement][data-popper-reference-hidden]){pointer-events:none;opacity:0}.arrow,.arrow::before{position:absolute;width:8px;height:8px;z-index:-1}.arrow::before{content:\"\";--tw-shadow:0 4px 8px -1px rgba(0, 0, 0, 0.08), 0 2px 4px -1px rgba(0, 0, 0, 0.04);--tw-shadow-colored:0 4px 8px -1px var(--tw-shadow-color), 0 2px 4px -1px var(--tw-shadow-color);-webkit-box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);-webkit-transform:rotate(45deg);transform:rotate(45deg);background:var(--calcite-ui-foreground-1)}:host([data-popper-placement^=top]) .arrow{bottom:-4px}:host([data-popper-placement^=bottom]) .arrow{top:-4px}:host([data-popper-placement^=left]) .arrow{right:-4px}:host([data-popper-placement^=right]) .arrow{left:-4px}:host{pointer-events:none}:host([open]){pointer-events:initial}.calcite-popper-anim{border-radius:0.25rem;border-width:1px;border-style:solid;border-color:var(--calcite-ui-border-3);background-color:var(--calcite-ui-foreground-1)}.arrow::before{outline:1px solid var(--calcite-ui-border-3)}.header{display:-ms-flexbox;display:flex;-ms-flex:1 1 auto;flex:1 1 auto;-ms-flex-align:stretch;align-items:stretch;-ms-flex-pack:start;justify-content:flex-start;border-width:0px;border-bottom-width:1px;border-style:solid;background-color:var(--calcite-ui-foreground-1);border-bottom-color:var(--calcite-ui-border-3)}.heading{margin:0px;display:block;-ms-flex:1 1 auto;flex:1 1 auto;-ms-flex-item-align:center;align-self:center;white-space:normal;padding-left:1rem;padding-right:1rem;padding-top:0.75rem;padding-bottom:0.75rem;font-size:var(--calcite-font-size-0);line-height:1.375;font-weight:var(--calcite-font-weight-medium);color:var(--calcite-ui-text-1);word-wrap:break-word;word-break:break-word}.container{position:relative;display:-ms-flexbox;display:flex;height:100%;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap;border-radius:0.25rem;background-color:var(--calcite-ui-foreground-1);color:var(--calcite-ui-text-1)}.container.has-header{-ms-flex-direction:column;flex-direction:column}.content{display:-ms-flexbox;display:flex;height:100%;width:100%;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-ms-flex-item-align:center;align-self:center;word-wrap:break-word;word-break:break-word}.close-button-container{display:-ms-flexbox;display:flex;overflow:hidden;-ms-flex:0 0 auto;flex:0 0 auto;border-start-end-radius:0.25rem;border-end-end-radius:0.25rem}::slotted(calcite-panel),::slotted(calcite-flow){height:100%}";
  90. const manager = new PopoverManager$1();
  91. const Popover = class {
  92. constructor(hostRef) {
  93. registerInstance(this, hostRef);
  94. this.calcitePopoverClose = createEvent(this, "calcitePopoverClose", 7);
  95. this.calcitePopoverOpen = createEvent(this, "calcitePopoverOpen", 7);
  96. // --------------------------------------------------------------------------
  97. //
  98. // Properties
  99. //
  100. // --------------------------------------------------------------------------
  101. /**
  102. * Automatically closes any currently open popovers when clicking outside of a popover.
  103. */
  104. this.autoClose = false;
  105. /**
  106. * Display a close button within the Popover.
  107. * @deprecated use dismissible instead.
  108. */
  109. this.closeButton = false;
  110. /**
  111. * Display a close button within the Popover.
  112. */
  113. this.dismissible = false;
  114. /**
  115. * Prevents flipping the popover's placement when it starts to overlap its reference element.
  116. */
  117. this.disableFlip = false;
  118. /**
  119. * Removes the caret pointer.
  120. */
  121. this.disablePointer = false;
  122. /**
  123. * Offset the position of the popover away from the reference element.
  124. * @default 6
  125. */
  126. this.offsetDistance = defaultOffsetDistance;
  127. /**
  128. * Offset the position of the popover along the reference element.
  129. */
  130. this.offsetSkidding = 0;
  131. /**
  132. * Display and position the component.
  133. */
  134. this.open = false;
  135. /** Describes the type of positioning to use for the overlaid content. If your element is in a fixed container, use the 'fixed' value. */
  136. this.overlayPositioning = "absolute";
  137. /**
  138. * Determines where the component will be positioned relative to the referenceElement.
  139. * @see [PopperPlacement](https://github.com/Esri/calcite-components/blob/master/src/utils/popper.ts#L25)
  140. */
  141. this.placement = defaultPopoverPlacement;
  142. /** Text for close button.
  143. * @default "Close"
  144. */
  145. this.intlClose = TEXT.close;
  146. this.guid = `calcite-popover-${guid()}`;
  147. this.activeTransitionProp = "opacity";
  148. // --------------------------------------------------------------------------
  149. //
  150. // Private Methods
  151. //
  152. // --------------------------------------------------------------------------
  153. this.setFilteredPlacements = () => {
  154. const { el, flipPlacements } = this;
  155. this.filteredFlipPlacements = flipPlacements
  156. ? filterComputedPlacements(flipPlacements, el)
  157. : null;
  158. };
  159. this.setUpReferenceElement = () => {
  160. this.removeReferences();
  161. this.effectiveReferenceElement = this.getReferenceElement();
  162. const { el, referenceElement, effectiveReferenceElement } = this;
  163. if (referenceElement && !effectiveReferenceElement) {
  164. console.warn(`${el.tagName}: reference-element id "${referenceElement}" was not found.`, {
  165. el
  166. });
  167. }
  168. this.addReferences();
  169. this.createPopper();
  170. };
  171. this.getId = () => {
  172. return this.el.id || this.guid;
  173. };
  174. this.setExpandedAttr = () => {
  175. const { effectiveReferenceElement, open } = this;
  176. if (!effectiveReferenceElement) {
  177. return;
  178. }
  179. effectiveReferenceElement.setAttribute(ARIA_EXPANDED, toAriaBoolean(open));
  180. };
  181. this.addReferences = () => {
  182. const { effectiveReferenceElement } = this;
  183. if (!effectiveReferenceElement) {
  184. return;
  185. }
  186. const id = this.getId();
  187. effectiveReferenceElement.setAttribute(ARIA_CONTROLS, id);
  188. manager.registerElement(effectiveReferenceElement, this.el);
  189. this.setExpandedAttr();
  190. };
  191. this.removeReferences = () => {
  192. const { effectiveReferenceElement } = this;
  193. if (!effectiveReferenceElement) {
  194. return;
  195. }
  196. effectiveReferenceElement.removeAttribute(ARIA_CONTROLS);
  197. effectiveReferenceElement.removeAttribute(ARIA_EXPANDED);
  198. manager.unregisterElement(effectiveReferenceElement);
  199. };
  200. this.hide = () => {
  201. this.open = false;
  202. };
  203. this.transitionEnd = (event) => {
  204. if (event.propertyName === this.activeTransitionProp) {
  205. this.open ? this.calcitePopoverOpen.emit() : this.calcitePopoverClose.emit();
  206. }
  207. };
  208. }
  209. flipPlacementsHandler() {
  210. this.setFilteredPlacements();
  211. }
  212. offsetDistanceOffsetHandler() {
  213. this.reposition();
  214. }
  215. offsetSkiddingHandler() {
  216. this.reposition();
  217. }
  218. openHandler() {
  219. this.reposition();
  220. this.setExpandedAttr();
  221. }
  222. placementHandler() {
  223. this.reposition();
  224. }
  225. referenceElementHandler() {
  226. this.setUpReferenceElement();
  227. }
  228. // --------------------------------------------------------------------------
  229. //
  230. // Lifecycle
  231. //
  232. // --------------------------------------------------------------------------
  233. connectedCallback() {
  234. this.setFilteredPlacements();
  235. }
  236. componentWillLoad() {
  237. this.setUpReferenceElement();
  238. }
  239. componentDidLoad() {
  240. this.reposition();
  241. }
  242. disconnectedCallback() {
  243. this.removeReferences();
  244. this.destroyPopper();
  245. }
  246. // --------------------------------------------------------------------------
  247. //
  248. // Public Methods
  249. //
  250. // --------------------------------------------------------------------------
  251. /** Updates the position of the component. */
  252. async reposition() {
  253. const { popper, el, placement } = this;
  254. const modifiers = this.getModifiers();
  255. popper
  256. ? await updatePopper({
  257. el,
  258. modifiers,
  259. placement,
  260. popper
  261. })
  262. : this.createPopper();
  263. }
  264. /** Sets focus on the component. */
  265. async setFocus(focusId) {
  266. var _a;
  267. const { closeButtonEl } = this;
  268. if (focusId === "close-button" && closeButtonEl) {
  269. forceUpdate(closeButtonEl);
  270. closeButtonEl.setFocus();
  271. return;
  272. }
  273. (_a = this.el) === null || _a === void 0 ? void 0 : _a.focus();
  274. }
  275. /** Toggles the popover's open property. */
  276. async toggle(value = !this.open) {
  277. this.open = value;
  278. }
  279. getReferenceElement() {
  280. const { referenceElement, el } = this;
  281. return ((typeof referenceElement === "string"
  282. ? queryElementRoots(el, { id: referenceElement })
  283. : referenceElement) || null);
  284. }
  285. getModifiers() {
  286. const { arrowEl, disableFlip, disablePointer, offsetDistance, offsetSkidding, filteredFlipPlacements } = this;
  287. const flipModifier = {
  288. name: "flip",
  289. enabled: !disableFlip
  290. };
  291. if (filteredFlipPlacements) {
  292. flipModifier.options = {
  293. fallbackPlacements: filteredFlipPlacements
  294. };
  295. }
  296. const arrowModifier = {
  297. name: "arrow",
  298. enabled: !disablePointer
  299. };
  300. if (arrowEl) {
  301. arrowModifier.options = {
  302. element: arrowEl
  303. };
  304. }
  305. const offsetModifier = {
  306. name: "offset",
  307. enabled: true,
  308. options: {
  309. offset: [offsetSkidding, offsetDistance]
  310. }
  311. };
  312. const eventListenerModifier = {
  313. name: "eventListeners",
  314. enabled: this.open
  315. };
  316. return [arrowModifier, flipModifier, offsetModifier, eventListenerModifier];
  317. }
  318. createPopper() {
  319. this.destroyPopper();
  320. const { el, placement, effectiveReferenceElement: referenceEl, overlayPositioning } = this;
  321. const modifiers = this.getModifiers();
  322. this.popper = createPopper({
  323. el,
  324. modifiers,
  325. overlayPositioning,
  326. placement,
  327. referenceEl
  328. });
  329. }
  330. destroyPopper() {
  331. const { popper } = this;
  332. if (popper) {
  333. popper.destroy();
  334. }
  335. this.popper = null;
  336. }
  337. // --------------------------------------------------------------------------
  338. //
  339. // Render Methods
  340. //
  341. // --------------------------------------------------------------------------
  342. renderCloseButton() {
  343. const { dismissible, closeButton, intlClose } = this;
  344. return dismissible || closeButton ? (h("div", { class: CSS.closeButtonContainer }, h("calcite-action", { class: CSS.closeButton, onClick: this.hide, ref: (closeButtonEl) => (this.closeButtonEl = closeButtonEl), text: intlClose }, h("calcite-icon", { icon: "x", scale: "m" })))) : null;
  345. }
  346. renderHeader() {
  347. const { heading, headingLevel } = this;
  348. const headingNode = heading ? (h(Heading, { class: CSS.heading, level: headingLevel || HEADING_LEVEL }, heading)) : null;
  349. return headingNode ? (h("div", { class: CSS.header }, headingNode, this.renderCloseButton())) : null;
  350. }
  351. render() {
  352. const { effectiveReferenceElement, heading, label, open, disablePointer } = this;
  353. const displayed = effectiveReferenceElement && open;
  354. const hidden = !displayed;
  355. const arrowNode = !disablePointer ? (h("div", { class: CSS.arrow, ref: (arrowEl) => (this.arrowEl = arrowEl) })) : null;
  356. return (h(Host, { "aria-hidden": toAriaBoolean(hidden), "aria-label": label, "calcite-hydrated-hidden": hidden, id: this.getId(), role: "dialog" }, h("div", { class: {
  357. [CSS$1.animation]: true,
  358. [CSS$1.animationActive]: displayed
  359. }, onTransitionEnd: this.transitionEnd }, arrowNode, h("div", { class: {
  360. [CSS.hasHeader]: !!heading,
  361. [CSS.container]: true
  362. } }, this.renderHeader(), h("div", { class: CSS.content }, h("slot", null)), !heading ? this.renderCloseButton() : null))));
  363. }
  364. get el() { return getElement(this); }
  365. static get watchers() { return {
  366. "flipPlacements": ["flipPlacementsHandler"],
  367. "offsetDistance": ["offsetDistanceOffsetHandler"],
  368. "offsetSkidding": ["offsetSkiddingHandler"],
  369. "open": ["openHandler"],
  370. "placement": ["placementHandler"],
  371. "referenceElement": ["referenceElementHandler"]
  372. }; }
  373. };
  374. Popover.style = popoverCss;
  375. const popoverManagerCss = "@-webkit-keyframes in{0%{opacity:0}100%{opacity:1}}@keyframes in{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes in-down{0%{opacity:0;-webkit-transform:translate3D(0, -5px, 0);transform:translate3D(0, -5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@keyframes in-down{0%{opacity:0;-webkit-transform:translate3D(0, -5px, 0);transform:translate3D(0, -5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@-webkit-keyframes in-up{0%{opacity:0;-webkit-transform:translate3D(0, 5px, 0);transform:translate3D(0, 5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@keyframes in-up{0%{opacity:0;-webkit-transform:translate3D(0, 5px, 0);transform:translate3D(0, 5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@-webkit-keyframes in-scale{0%{opacity:0;-webkit-transform:scale3D(0.95, 0.95, 1);transform:scale3D(0.95, 0.95, 1)}100%{opacity:1;-webkit-transform:scale3D(1, 1, 1);transform:scale3D(1, 1, 1)}}@keyframes in-scale{0%{opacity:0;-webkit-transform:scale3D(0.95, 0.95, 1);transform:scale3D(0.95, 0.95, 1)}100%{opacity:1;-webkit-transform:scale3D(1, 1, 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;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:var(--calcite-animation-timing);animation-duration:var(--calcite-animation-timing)}.calcite-animate__in{-webkit-animation-name:in;animation-name:in}.calcite-animate__in-down{-webkit-animation-name:in-down;animation-name:in-down}.calcite-animate__in-up{-webkit-animation-name:in-up;animation-name:in-up}.calcite-animate__in-scale{-webkit-animation-name:in-scale;animation-name:in-scale}:root{--calcite-popper-transition:var(--calcite-animation-timing)}:host([hidden]){display:none}:host{position:relative;display:block}";
  376. const PopoverManager = class {
  377. constructor(hostRef) {
  378. registerInstance(this, hostRef);
  379. this.mutationObserver = createObserver("mutation", () => this.setAutoClose());
  380. // --------------------------------------------------------------------------
  381. //
  382. // Properties
  383. //
  384. // --------------------------------------------------------------------------
  385. /**
  386. * CSS Selector to match reference elements for popovers. Reference elements will be identified by this selector in order to open their associated popover.
  387. * @default `[data-calcite-popover-reference]`
  388. */
  389. this.selector = "[data-calcite-popover-reference]";
  390. /**
  391. * Automatically closes any currently open popovers when clicking outside of a popover.
  392. */
  393. this.autoClose = false;
  394. }
  395. autoCloseHandler() {
  396. this.setAutoClose();
  397. }
  398. // --------------------------------------------------------------------------
  399. //
  400. // Lifecycle
  401. //
  402. // --------------------------------------------------------------------------
  403. connectedCallback() {
  404. var _a;
  405. this.setAutoClose();
  406. (_a = this.mutationObserver) === null || _a === void 0 ? void 0 : _a.observe(this.el, { childList: true, subtree: true });
  407. }
  408. disconnectedCallback() {
  409. var _a;
  410. (_a = this.mutationObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
  411. }
  412. // --------------------------------------------------------------------------
  413. //
  414. // Render Methods
  415. //
  416. // --------------------------------------------------------------------------
  417. render() {
  418. return h("slot", null);
  419. }
  420. // --------------------------------------------------------------------------
  421. //
  422. // Private Methods
  423. //
  424. // --------------------------------------------------------------------------
  425. setAutoClose() {
  426. const { autoClose, el } = this;
  427. el.querySelectorAll("calcite-popover").forEach((popover) => (popover.autoClose = autoClose));
  428. }
  429. get el() { return getElement(this); }
  430. static get watchers() { return {
  431. "autoClose": ["autoCloseHandler"]
  432. }; }
  433. };
  434. PopoverManager.style = popoverManagerCss;
  435. export { Popover as calcite_popover, PopoverManager as calcite_popover_manager };