ngx-bootstrap-utils.js 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803
  1. import { isDevMode } from '@angular/core';
  2. /**
  3. * @fileoverview added by tsickle
  4. * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
  5. */
  6. /**
  7. * @copyright Valor Software
  8. * @copyright Angular ng-bootstrap team
  9. */
  10. class Trigger {
  11. /**
  12. * @param {?} open
  13. * @param {?=} close
  14. */
  15. constructor(open, close) {
  16. this.open = open;
  17. this.close = close || open;
  18. }
  19. /**
  20. * @return {?}
  21. */
  22. isManual() {
  23. return this.open === 'manual' || this.close === 'manual';
  24. }
  25. }
  26. /**
  27. * @fileoverview added by tsickle
  28. * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
  29. */
  30. /** @type {?} */
  31. const DEFAULT_ALIASES = {
  32. hover: ['mouseover', 'mouseout'],
  33. focus: ['focusin', 'focusout']
  34. };
  35. /* tslint:disable-next-line: no-any */
  36. /**
  37. * @param {?} triggers
  38. * @param {?=} aliases
  39. * @return {?}
  40. */
  41. function parseTriggers(triggers, aliases = DEFAULT_ALIASES) {
  42. /** @type {?} */
  43. const trimmedTriggers = (triggers || '').trim();
  44. if (trimmedTriggers.length === 0) {
  45. return [];
  46. }
  47. /** @type {?} */
  48. const parsedTriggers = trimmedTriggers
  49. .split(/\s+/)
  50. .map((/**
  51. * @param {?} trigger
  52. * @return {?}
  53. */
  54. (trigger) => trigger.split(':')))
  55. .map((/**
  56. * @param {?} triggerPair
  57. * @return {?}
  58. */
  59. (triggerPair) => {
  60. /** @type {?} */
  61. const alias = aliases[triggerPair[0]] || triggerPair;
  62. return new Trigger(alias[0], alias[1]);
  63. }));
  64. /** @type {?} */
  65. const manualTriggers = parsedTriggers.filter((/**
  66. * @param {?} triggerPair
  67. * @return {?}
  68. */
  69. (triggerPair) => triggerPair.isManual()));
  70. if (manualTriggers.length > 1) {
  71. throw new Error('Triggers parse error: only one manual trigger is allowed');
  72. }
  73. if (manualTriggers.length === 1 && parsedTriggers.length > 1) {
  74. throw new Error('Triggers parse error: manual trigger can\'t be mixed with other triggers');
  75. }
  76. return parsedTriggers;
  77. }
  78. /**
  79. * @param {?} renderer
  80. * @param {?} target
  81. * @param {?} triggers
  82. * @param {?} showFn
  83. * @param {?} hideFn
  84. * @param {?} toggleFn
  85. * @return {?}
  86. */
  87. function listenToTriggers(renderer,
  88. /* tslint:disable-next-line: no-any */
  89. target, triggers, showFn, hideFn, toggleFn) {
  90. /** @type {?} */
  91. const parsedTriggers = parseTriggers(triggers);
  92. /* tslint:disable-next-line: no-any */
  93. /** @type {?} */
  94. const listeners = [];
  95. if (parsedTriggers.length === 1 && parsedTriggers[0].isManual()) {
  96. return Function.prototype;
  97. }
  98. parsedTriggers.forEach((/**
  99. * @param {?} trigger
  100. * @return {?}
  101. */
  102. (trigger) => {
  103. if (trigger.open === trigger.close) {
  104. listeners.push(renderer.listen(target, trigger.open, toggleFn));
  105. return;
  106. }
  107. listeners.push(renderer.listen(target, trigger.open, showFn), renderer.listen(target, trigger.close, hideFn));
  108. }));
  109. return (/**
  110. * @return {?}
  111. */
  112. () => {
  113. listeners.forEach((/**
  114. * @param {?} unsubscribeFn
  115. * @return {?}
  116. */
  117. (unsubscribeFn) => unsubscribeFn()));
  118. });
  119. }
  120. /**
  121. * @param {?} renderer
  122. * @param {?} options
  123. * @return {?}
  124. */
  125. function listenToTriggersV2(renderer, options) {
  126. /** @type {?} */
  127. const parsedTriggers = parseTriggers(options.triggers);
  128. /** @type {?} */
  129. const target = options.target;
  130. // do nothing
  131. if (parsedTriggers.length === 1 && parsedTriggers[0].isManual()) {
  132. return Function.prototype;
  133. }
  134. // all listeners
  135. /* tslint:disable-next-line: no-any */
  136. /** @type {?} */
  137. const listeners = [];
  138. // lazy listeners registration
  139. /** @type {?} */
  140. const _registerHide = [];
  141. /** @type {?} */
  142. const registerHide = (/**
  143. * @return {?}
  144. */
  145. () => {
  146. // add hide listeners to unregister array
  147. _registerHide.forEach((/**
  148. * @param {?} fn
  149. * @return {?}
  150. */
  151. (fn) => listeners.push(fn())));
  152. // register hide events only once
  153. _registerHide.length = 0;
  154. });
  155. // register open\close\toggle listeners
  156. parsedTriggers.forEach((/**
  157. * @param {?} trigger
  158. * @return {?}
  159. */
  160. (trigger) => {
  161. /** @type {?} */
  162. const useToggle = trigger.open === trigger.close;
  163. /** @type {?} */
  164. const showFn = useToggle ? options.toggle : options.show;
  165. if (!useToggle) {
  166. _registerHide.push((/**
  167. * @return {?}
  168. */
  169. () => renderer.listen(target, trigger.close, options.hide)));
  170. }
  171. listeners.push(renderer.listen(target, trigger.open, (/**
  172. * @return {?}
  173. */
  174. () => showFn(registerHide))));
  175. }));
  176. return (/**
  177. * @return {?}
  178. */
  179. () => {
  180. listeners.forEach((/**
  181. * @param {?} unsubscribeFn
  182. * @return {?}
  183. */
  184. (unsubscribeFn) => unsubscribeFn()));
  185. });
  186. }
  187. /**
  188. * @param {?} renderer
  189. * @param {?} options
  190. * @return {?}
  191. */
  192. function registerOutsideClick(renderer, options) {
  193. if (!options.outsideClick) {
  194. return Function.prototype;
  195. }
  196. /* tslint:disable-next-line: no-any */
  197. return renderer.listen('document', 'click', (/**
  198. * @param {?} event
  199. * @return {?}
  200. */
  201. (event) => {
  202. if (options.target && options.target.contains(event.target)) {
  203. return undefined;
  204. }
  205. if (options.targets &&
  206. options.targets.some((/**
  207. * @param {?} target
  208. * @return {?}
  209. */
  210. target => target.contains(event.target)))) {
  211. return undefined;
  212. }
  213. options.hide();
  214. }));
  215. }
  216. /**
  217. * @param {?} renderer
  218. * @param {?} options
  219. * @return {?}
  220. */
  221. function registerEscClick(renderer, options) {
  222. if (!options.outsideEsc) {
  223. return Function.prototype;
  224. }
  225. return renderer.listen('document', 'keyup.esc', (/**
  226. * @param {?} event
  227. * @return {?}
  228. */
  229. (event) => {
  230. if (options.target && options.target.contains(event.target)) {
  231. return undefined;
  232. }
  233. if (options.targets &&
  234. options.targets.some((/**
  235. * @param {?} target
  236. * @return {?}
  237. */
  238. target => target.contains(event.target)))) {
  239. return undefined;
  240. }
  241. options.hide();
  242. }));
  243. }
  244. /**
  245. * @fileoverview added by tsickle
  246. * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
  247. */
  248. /**
  249. * @license
  250. * Copyright Google Inc. All Rights Reserved.
  251. *
  252. * Use of this source code is governed by an MIT-style license that can be
  253. * found in the LICENSE file at https://angular.io/license
  254. */
  255. /**
  256. * JS version of browser APIs. This library can only run in the browser.
  257. * @type {?}
  258. */
  259. const win = (typeof window !== 'undefined' && window) || (/** @type {?} */ ({}));
  260. /** @type {?} */
  261. const document$1 = win.document;
  262. /** @type {?} */
  263. const location = win.location;
  264. /** @type {?} */
  265. const gc = win.gc ? (/**
  266. * @return {?}
  267. */
  268. () => win.gc()) : (/**
  269. * @return {?}
  270. */
  271. () => null);
  272. /** @type {?} */
  273. const performance = win.performance ? win.performance : null;
  274. /** @type {?} */
  275. const Event = win.Event;
  276. /** @type {?} */
  277. const MouseEvent = win.MouseEvent;
  278. /** @type {?} */
  279. const KeyboardEvent = win.KeyboardEvent;
  280. /** @type {?} */
  281. const EventTarget = win.EventTarget;
  282. /** @type {?} */
  283. const History = win.History;
  284. /** @type {?} */
  285. const Location = win.Location;
  286. /** @type {?} */
  287. const EventListener = win.EventListener;
  288. /**
  289. * @fileoverview added by tsickle
  290. * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
  291. */
  292. /** @type {?} */
  293. let guessedVersion;
  294. /**
  295. * @return {?}
  296. */
  297. function _guessBsVersion() {
  298. if (typeof document === 'undefined') {
  299. return null;
  300. }
  301. /** @type {?} */
  302. const spanEl = document.createElement('span');
  303. spanEl.innerText = 'test bs version';
  304. document.body.appendChild(spanEl);
  305. spanEl.classList.add('d-none');
  306. /** @type {?} */
  307. const rect = spanEl.getBoundingClientRect();
  308. document.body.removeChild(spanEl);
  309. if (!rect) {
  310. return 'bs3';
  311. }
  312. return rect.top === 0 ? 'bs4' : 'bs3';
  313. }
  314. /**
  315. * @param {?} theme
  316. * @return {?}
  317. */
  318. function setTheme(theme) {
  319. guessedVersion = theme;
  320. }
  321. // todo: in ngx-bootstrap, bs4 will became a default one
  322. /**
  323. * @return {?}
  324. */
  325. function isBs3() {
  326. if (typeof win === 'undefined') {
  327. return true;
  328. }
  329. if (typeof win.__theme === 'undefined') {
  330. if (guessedVersion) {
  331. return guessedVersion === 'bs3';
  332. }
  333. guessedVersion = _guessBsVersion();
  334. return guessedVersion === 'bs3';
  335. }
  336. return win.__theme !== 'bs4';
  337. }
  338. /**
  339. * @fileoverview added by tsickle
  340. * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
  341. */
  342. /**
  343. * @template T
  344. */
  345. class LinkedList {
  346. constructor() {
  347. this.length = 0;
  348. this.asArray = [];
  349. // Array methods overriding END
  350. }
  351. /**
  352. * @param {?} position
  353. * @return {?}
  354. */
  355. get(position) {
  356. if (this.length === 0 || position < 0 || position >= this.length) {
  357. return void 0;
  358. }
  359. /** @type {?} */
  360. let current = this.head;
  361. for (let index = 0; index < position; index++) {
  362. current = current.next;
  363. }
  364. return current.value;
  365. }
  366. /**
  367. * @param {?} value
  368. * @param {?=} position
  369. * @return {?}
  370. */
  371. add(value, position = this.length) {
  372. if (position < 0 || position > this.length) {
  373. throw new Error('Position is out of the list');
  374. }
  375. /* tslint:disable-next-line: no-any*/
  376. /** @type {?} */
  377. const node = {
  378. value,
  379. next: undefined,
  380. previous: undefined
  381. };
  382. if (this.length === 0) {
  383. this.head = node;
  384. this.tail = node;
  385. this.current = node;
  386. }
  387. else {
  388. if (position === 0) {
  389. // first node
  390. node.next = this.head;
  391. this.head.previous = node;
  392. this.head = node;
  393. }
  394. else if (position === this.length) {
  395. // last node
  396. this.tail.next = node;
  397. node.previous = this.tail;
  398. this.tail = node;
  399. }
  400. else {
  401. // node in middle
  402. /** @type {?} */
  403. const currentPreviousNode = this.getNode(position - 1);
  404. /** @type {?} */
  405. const currentNextNode = currentPreviousNode.next;
  406. currentPreviousNode.next = node;
  407. currentNextNode.previous = node;
  408. node.previous = currentPreviousNode;
  409. node.next = currentNextNode;
  410. }
  411. }
  412. this.length++;
  413. this.createInternalArrayRepresentation();
  414. }
  415. /**
  416. * @param {?=} position
  417. * @return {?}
  418. */
  419. remove(position = 0) {
  420. if (this.length === 0 || position < 0 || position >= this.length) {
  421. throw new Error('Position is out of the list');
  422. }
  423. if (position === 0) {
  424. // first node
  425. this.head = this.head.next;
  426. if (this.head) {
  427. // there is no second node
  428. this.head.previous = undefined;
  429. }
  430. else {
  431. // there is no second node
  432. this.tail = undefined;
  433. }
  434. }
  435. else if (position === this.length - 1) {
  436. // last node
  437. this.tail = this.tail.previous;
  438. this.tail.next = undefined;
  439. }
  440. else {
  441. // middle node
  442. /** @type {?} */
  443. const removedNode = this.getNode(position);
  444. removedNode.next.previous = removedNode.previous;
  445. removedNode.previous.next = removedNode.next;
  446. }
  447. this.length--;
  448. this.createInternalArrayRepresentation();
  449. }
  450. /**
  451. * @param {?} position
  452. * @param {?} value
  453. * @return {?}
  454. */
  455. set(position, value) {
  456. if (this.length === 0 || position < 0 || position >= this.length) {
  457. throw new Error('Position is out of the list');
  458. }
  459. /** @type {?} */
  460. const node = this.getNode(position);
  461. node.value = value;
  462. this.createInternalArrayRepresentation();
  463. }
  464. /**
  465. * @return {?}
  466. */
  467. toArray() {
  468. return this.asArray;
  469. }
  470. /* tslint:disable-next-line: no-any*/
  471. /**
  472. * @param {?} fn
  473. * @return {?}
  474. */
  475. findAll(fn) {
  476. /** @type {?} */
  477. let current = this.head;
  478. /* tslint:disable-next-line: no-any*/
  479. /** @type {?} */
  480. const result = [];
  481. for (let index = 0; index < this.length; index++) {
  482. if (fn(current.value, index)) {
  483. result.push({ index, value: current.value });
  484. }
  485. current = current.next;
  486. }
  487. return result;
  488. }
  489. // Array methods overriding start
  490. /**
  491. * @param {...?} args
  492. * @return {?}
  493. */
  494. push(...args) {
  495. /* tslint:disable-next-line: no-any*/
  496. args.forEach((/**
  497. * @param {?} arg
  498. * @return {?}
  499. */
  500. (arg) => {
  501. this.add(arg);
  502. }));
  503. return this.length;
  504. }
  505. /**
  506. * @return {?}
  507. */
  508. pop() {
  509. if (this.length === 0) {
  510. return undefined;
  511. }
  512. /** @type {?} */
  513. const last = this.tail;
  514. this.remove(this.length - 1);
  515. return last.value;
  516. }
  517. /**
  518. * @param {...?} args
  519. * @return {?}
  520. */
  521. unshift(...args) {
  522. args.reverse();
  523. /* tslint:disable-next-line: no-any*/
  524. args.forEach((/**
  525. * @param {?} arg
  526. * @return {?}
  527. */
  528. (arg) => {
  529. this.add(arg, 0);
  530. }));
  531. return this.length;
  532. }
  533. /**
  534. * @return {?}
  535. */
  536. shift() {
  537. if (this.length === 0) {
  538. return undefined;
  539. }
  540. /** @type {?} */
  541. const lastItem = this.head.value;
  542. this.remove();
  543. return lastItem;
  544. }
  545. /* tslint:disable-next-line: no-any*/
  546. /**
  547. * @param {?} fn
  548. * @return {?}
  549. */
  550. forEach(fn) {
  551. /** @type {?} */
  552. let current = this.head;
  553. for (let index = 0; index < this.length; index++) {
  554. fn(current.value, index);
  555. current = current.next;
  556. }
  557. }
  558. /**
  559. * @param {?} value
  560. * @return {?}
  561. */
  562. indexOf(value) {
  563. /** @type {?} */
  564. let current = this.head;
  565. /** @type {?} */
  566. let position = 0;
  567. for (let index = 0; index < this.length; index++) {
  568. if (current.value === value) {
  569. position = index;
  570. break;
  571. }
  572. current = current.next;
  573. }
  574. return position;
  575. }
  576. /* tslint:disable-next-line: no-any*/
  577. /**
  578. * @param {?} fn
  579. * @return {?}
  580. */
  581. some(fn) {
  582. /** @type {?} */
  583. let current = this.head;
  584. /** @type {?} */
  585. let result = false;
  586. while (current && !result) {
  587. if (fn(current.value)) {
  588. result = true;
  589. break;
  590. }
  591. current = current.next;
  592. }
  593. return result;
  594. }
  595. /* tslint:disable-next-line: no-any*/
  596. /**
  597. * @param {?} fn
  598. * @return {?}
  599. */
  600. every(fn) {
  601. /** @type {?} */
  602. let current = this.head;
  603. /** @type {?} */
  604. let result = true;
  605. while (current && result) {
  606. if (!fn(current.value)) {
  607. result = false;
  608. }
  609. current = current.next;
  610. }
  611. return result;
  612. }
  613. /**
  614. * @return {?}
  615. */
  616. toString() {
  617. return '[Linked List]';
  618. }
  619. /* tslint:disable-next-line: no-any*/
  620. /**
  621. * @param {?} fn
  622. * @return {?}
  623. */
  624. find(fn) {
  625. /** @type {?} */
  626. let current = this.head;
  627. /** @type {?} */
  628. let result;
  629. for (let index = 0; index < this.length; index++) {
  630. if (fn(current.value, index)) {
  631. result = current.value;
  632. break;
  633. }
  634. current = current.next;
  635. }
  636. return result;
  637. }
  638. /* tslint:disable-next-line: no-any*/
  639. /**
  640. * @param {?} fn
  641. * @return {?}
  642. */
  643. findIndex(fn) {
  644. /** @type {?} */
  645. let current = this.head;
  646. /** @type {?} */
  647. let result;
  648. for (let index = 0; index < this.length; index++) {
  649. if (fn(current.value, index)) {
  650. result = index;
  651. break;
  652. }
  653. current = current.next;
  654. }
  655. return result;
  656. }
  657. /* tslint:disable-next-line: no-any*/
  658. /**
  659. * @protected
  660. * @param {?} position
  661. * @return {?}
  662. */
  663. getNode(position) {
  664. if (this.length === 0 || position < 0 || position >= this.length) {
  665. throw new Error('Position is out of the list');
  666. }
  667. /** @type {?} */
  668. let current = this.head;
  669. for (let index = 0; index < position; index++) {
  670. current = current.next;
  671. }
  672. return current;
  673. }
  674. /**
  675. * @protected
  676. * @return {?}
  677. */
  678. createInternalArrayRepresentation() {
  679. /* tslint:disable-next-line: no-any*/
  680. /** @type {?} */
  681. const outArray = [];
  682. /** @type {?} */
  683. let current = this.head;
  684. while (current) {
  685. outArray.push(current.value);
  686. current = current.next;
  687. }
  688. this.asArray = outArray;
  689. }
  690. }
  691. /**
  692. * @fileoverview added by tsickle
  693. * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
  694. */
  695. /*tslint:disable:no-invalid-this */
  696. /* tslint:disable-next-line: no-any */
  697. /**
  698. * @param {?=} defaultValue
  699. * @return {?}
  700. */
  701. function OnChange(defaultValue) {
  702. /** @type {?} */
  703. const sufix = 'Change';
  704. /* tslint:disable-next-line: no-any */
  705. return (/**
  706. * @param {?} target
  707. * @param {?} propertyKey
  708. * @return {?}
  709. */
  710. function OnChangeHandler(target, propertyKey) {
  711. /** @type {?} */
  712. const _key = ` __${propertyKey}Value`;
  713. Object.defineProperty(target, propertyKey, {
  714. /* tslint:disable-next-line: no-any */
  715. /**
  716. * @return {?}
  717. */
  718. get() {
  719. return this[_key];
  720. },
  721. /* tslint:disable-next-line: no-any */
  722. /**
  723. * @param {?} value
  724. * @return {?}
  725. */
  726. set(value) {
  727. /** @type {?} */
  728. const prevValue = this[_key];
  729. this[_key] = value;
  730. if (prevValue !== value && this[propertyKey + sufix]) {
  731. this[propertyKey + sufix].emit(value);
  732. }
  733. }
  734. });
  735. });
  736. }
  737. /**
  738. * @fileoverview added by tsickle
  739. * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
  740. */
  741. class Utils {
  742. /* tslint:disable-next-line: no-any */
  743. /**
  744. * @param {?} element
  745. * @return {?}
  746. */
  747. static reflow(element) {
  748. /* tslint:disable-next-line: no-any */
  749. ((/**
  750. * @param {?} bs
  751. * @return {?}
  752. */
  753. (bs) => bs))(element.offsetHeight);
  754. }
  755. // source: https://github.com/jquery/jquery/blob/master/src/css/var/getStyles.js
  756. /* tslint:disable-next-line: no-any */
  757. /**
  758. * @param {?} elem
  759. * @return {?}
  760. */
  761. static getStyles(elem) {
  762. // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
  763. // IE throws on elements created in popups
  764. // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
  765. /** @type {?} */
  766. let view = elem.ownerDocument.defaultView;
  767. if (!view || !view.opener) {
  768. view = win;
  769. }
  770. return view.getComputedStyle(elem);
  771. }
  772. }
  773. /**
  774. * @fileoverview added by tsickle
  775. * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
  776. */
  777. /** @type {?} */
  778. const _messagesHash = {};
  779. /** @type {?} */
  780. const _hideMsg = typeof console === 'undefined' || !('warn' in console);
  781. /**
  782. * @param {?} msg
  783. * @return {?}
  784. */
  785. function warnOnce(msg) {
  786. if (!isDevMode() || _hideMsg || msg in _messagesHash) {
  787. return;
  788. }
  789. _messagesHash[msg] = true;
  790. /*tslint:disable-next-line*/
  791. console.warn(msg);
  792. }
  793. export { LinkedList, OnChange, Trigger, Utils, document$1 as document, isBs3, listenToTriggers, listenToTriggersV2, parseTriggers, registerEscClick, registerOutsideClick, setTheme, warnOnce, win as window };
  794. //# sourceMappingURL=ngx-bootstrap-utils.js.map