@mjhls/mjh-framework 1.0.1022 → 1.0.1023-blanktagremoval-v1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/README.md +168 -168
  2. package/dist/cjs/AD300x250.js +1 -1
  3. package/dist/cjs/AD300x250x600.js +1 -1
  4. package/dist/cjs/AD728x90.js +1 -1
  5. package/dist/cjs/ADFloatingFooter.js +1 -1
  6. package/dist/cjs/ADGutter.js +1 -1
  7. package/dist/cjs/{ADInfeed-5dabd71d.js → ADInfeed-89488c41.js} +1 -1
  8. package/dist/cjs/ADSkyscraper.js +1 -1
  9. package/dist/cjs/ADSponsoredResources.js +1 -1
  10. package/dist/cjs/ADWebcast.js +1 -1
  11. package/dist/cjs/ADWelcome.js +1 -1
  12. package/dist/cjs/{ADlgInfeed-1766ce0a.js → ADlgInfeed-9d62050b.js} +1 -1
  13. package/dist/cjs/AdSlot.js +1 -1
  14. package/dist/cjs/AdSlotsProvider.js +1 -1
  15. package/dist/cjs/AlgoliaSearch.js +1 -1
  16. package/dist/cjs/ArticleCarousel.js +1 -1
  17. package/dist/cjs/ArticleProgramLandingPage.js +3 -3
  18. package/dist/cjs/ArticleSeriesLandingPage.js +3 -3
  19. package/dist/cjs/ArticleSeriesListing.js +1 -1
  20. package/dist/cjs/Auth.js +1493 -11
  21. package/dist/cjs/AuthWrapper.js +1484 -294
  22. package/dist/cjs/CEDeckSupabase.js +2 -2
  23. package/dist/cjs/CMEDeck.js +1 -1
  24. package/dist/cjs/Column2.js +4 -2
  25. package/dist/cjs/Column3.js +1 -1
  26. package/dist/cjs/ConferenceArticleCard.js +15 -15
  27. package/dist/cjs/ContentCardPaginated.js +3 -3
  28. package/dist/cjs/DeckContent.js +11 -11
  29. package/dist/cjs/DeckQueue.js +2 -2
  30. package/dist/cjs/DeckQueuePaginated.js +2 -2
  31. package/dist/cjs/EventsDeck.js +18 -18
  32. package/dist/cjs/ExternalResources.js +6 -6
  33. package/dist/cjs/Feature.js +1 -1
  34. package/dist/cjs/GridContent.js +4 -4
  35. package/dist/cjs/GridContentPaginated.js +4 -4
  36. package/dist/cjs/GridHero.js +1 -1
  37. package/dist/cjs/HamMagazine.js +52 -50
  38. package/dist/cjs/HealthCareProfessionalModal.js +1 -1
  39. package/dist/cjs/Hero.js +1 -1
  40. package/dist/cjs/HorizontalArticleListing.js +3 -3
  41. package/dist/cjs/{ImageSlider-fd0cc91c.js → ImageSlider-50807a77.js} +83 -145
  42. package/dist/cjs/IssueLanding.js +34 -34
  43. package/dist/cjs/KMTracker.js +15 -15
  44. package/dist/cjs/LeftNav.js +14 -15
  45. package/dist/cjs/MasterDeck.js +11 -11
  46. package/dist/cjs/MasterDeckPaginated.js +11 -11
  47. package/dist/cjs/{MediaSeriesCard-ae205d40.js → MediaSeriesCard-de7f7fcc.js} +2 -2
  48. package/dist/cjs/MediaSeriesLanding.js +13 -13
  49. package/dist/cjs/MediaSeriesLandingPaginated.js +13 -13
  50. package/dist/cjs/NavDvm.js +30 -28
  51. package/dist/cjs/{NavFooter-257b5318.js → NavFooter-b37e3eed.js} +4 -3
  52. package/dist/cjs/NavMagazine.js +55 -53
  53. package/dist/cjs/NavNative.js +55 -55
  54. package/dist/cjs/OncliveLargeHero.js +1 -1
  55. package/dist/cjs/PartnerDetailListing.js +40 -28
  56. package/dist/cjs/PartnerDetailListingPaginated.js +38 -32
  57. package/dist/cjs/PodcastsLanding.js +6 -6
  58. package/dist/cjs/PubSection.js +4 -4
  59. package/dist/cjs/PublicationLanding.js +26 -26
  60. package/dist/cjs/QueueDeckExpanded.js +4 -4
  61. package/dist/cjs/QueueDeckExpandedPaginated.js +4 -4
  62. package/dist/cjs/RelatedContent.js +28 -28
  63. package/dist/cjs/RelatedTopicsDropdown.js +10 -10
  64. package/dist/cjs/SeriesListingDeck.js +2 -2
  65. package/dist/cjs/{SeriesSlider-0b2a2775.js → SeriesSlider-fc6dd07d.js} +5 -5
  66. package/dist/cjs/SideFooter.js +11 -9
  67. package/dist/cjs/{SocialSearchComponent-6924a853.js → SocialSearchComponent-15e03760.js} +2 -2
  68. package/dist/cjs/TaxonomyCard.js +8 -8
  69. package/dist/cjs/TaxonomyDescription.js +16 -17
  70. package/dist/cjs/TemplateNormal.js +4 -4
  71. package/dist/cjs/ThumbnailCard.js +1 -1
  72. package/dist/cjs/{Tooltip-980a1d1a.js → Tooltip-8011d690.js} +291 -116
  73. package/dist/cjs/Ustream.js +1 -1
  74. package/dist/cjs/VideoProgramLandingPage.js +3 -3
  75. package/dist/cjs/VideoSeriesCard.js +1 -1
  76. package/dist/cjs/VideoSeriesLandingPage.js +3 -3
  77. package/dist/cjs/VideoSeriesListing.js +1 -1
  78. package/dist/cjs/View.js +8 -8
  79. package/dist/cjs/YahooHero.js +1 -1
  80. package/dist/cjs/YoutubeGroup.js +5 -5
  81. package/dist/cjs/defineProperty-19580e93.js +71 -0
  82. package/dist/cjs/{entities-3f9d0f2f.js → entities-df1aed86.js} +4 -0
  83. package/dist/cjs/getRelatedArticle.js +1 -1
  84. package/dist/cjs/getSerializers.js +3 -3
  85. package/dist/cjs/{getTargeting-4439c99d.js → getTargeting-ba942d9a.js} +9 -9
  86. package/dist/cjs/getTargeting.js +1 -1
  87. package/dist/cjs/{index-b78ce702.js → index-3111bc4e.js} +2 -2
  88. package/dist/cjs/{index-bd6c9f56.js → index-3cd60d26.js} +11 -11
  89. package/dist/cjs/{index-8041a4eb.js → index-50be6759.js} +15 -9
  90. package/dist/cjs/{index.esm-91e651b0.js → index.esm-bb54403e.js} +8 -7
  91. package/dist/cjs/index.js +14 -14
  92. package/dist/cjs/{main-47be4f9f.js → main-ae8472f3.js} +4 -9
  93. package/dist/esm/AD300x250.js +1 -1
  94. package/dist/esm/AD300x250x600.js +1 -1
  95. package/dist/esm/AD728x90.js +1 -1
  96. package/dist/esm/ADFloatingFooter.js +1 -1
  97. package/dist/esm/ADGutter.js +1 -1
  98. package/dist/esm/{ADInfeed-cfc4f7b2.js → ADInfeed-fb3b056f.js} +1 -1
  99. package/dist/esm/ADSkyscraper.js +1 -1
  100. package/dist/esm/ADSponsoredResources.js +1 -1
  101. package/dist/esm/ADWebcast.js +1 -1
  102. package/dist/esm/ADWelcome.js +1 -1
  103. package/dist/esm/{ADlgInfeed-74c975b9.js → ADlgInfeed-29f7b84c.js} +1 -1
  104. package/dist/esm/AdSlot.js +1 -1
  105. package/dist/esm/AdSlotsProvider.js +1 -1
  106. package/dist/esm/AlgoliaSearch.js +1 -1
  107. package/dist/esm/ArticleCarousel.js +1 -1
  108. package/dist/esm/ArticleProgramLandingPage.js +3 -3
  109. package/dist/esm/ArticleSeriesLandingPage.js +3 -3
  110. package/dist/esm/ArticleSeriesListing.js +1 -1
  111. package/dist/esm/Auth.js +1493 -10
  112. package/dist/esm/AuthWrapper.js +1478 -288
  113. package/dist/esm/CEDeckSupabase.js +2 -2
  114. package/dist/esm/CMEDeck.js +1 -1
  115. package/dist/esm/Column2.js +4 -2
  116. package/dist/esm/Column3.js +1 -1
  117. package/dist/esm/ConferenceArticleCard.js +15 -15
  118. package/dist/esm/ContentCardPaginated.js +3 -3
  119. package/dist/esm/DeckContent.js +11 -11
  120. package/dist/esm/DeckQueue.js +2 -2
  121. package/dist/esm/DeckQueuePaginated.js +2 -2
  122. package/dist/esm/EventsDeck.js +18 -18
  123. package/dist/esm/ExternalResources.js +6 -6
  124. package/dist/esm/Feature.js +1 -1
  125. package/dist/esm/GridContent.js +4 -4
  126. package/dist/esm/GridContentPaginated.js +4 -4
  127. package/dist/esm/GridHero.js +1 -1
  128. package/dist/esm/HamMagazine.js +52 -50
  129. package/dist/esm/HealthCareProfessionalModal.js +1 -1
  130. package/dist/esm/Hero.js +1 -1
  131. package/dist/esm/HorizontalArticleListing.js +3 -3
  132. package/dist/esm/{ImageSlider-c3a57384.js → ImageSlider-cdb57d30.js} +1 -63
  133. package/dist/esm/IssueLanding.js +34 -34
  134. package/dist/esm/KMTracker.js +15 -15
  135. package/dist/esm/LeftNav.js +14 -15
  136. package/dist/esm/MasterDeck.js +11 -11
  137. package/dist/esm/MasterDeckPaginated.js +11 -11
  138. package/dist/esm/{MediaSeriesCard-957b218d.js → MediaSeriesCard-8ec69f60.js} +2 -2
  139. package/dist/esm/MediaSeriesLanding.js +13 -13
  140. package/dist/esm/MediaSeriesLandingPaginated.js +13 -13
  141. package/dist/esm/NavDvm.js +30 -28
  142. package/dist/esm/{NavFooter-27a16f65.js → NavFooter-37c5eea2.js} +4 -3
  143. package/dist/esm/NavMagazine.js +55 -53
  144. package/dist/esm/NavNative.js +55 -55
  145. package/dist/esm/OncliveLargeHero.js +1 -1
  146. package/dist/esm/PartnerDetailListing.js +40 -28
  147. package/dist/esm/PartnerDetailListingPaginated.js +38 -32
  148. package/dist/esm/PodcastsLanding.js +6 -6
  149. package/dist/esm/PubSection.js +4 -4
  150. package/dist/esm/PublicationLanding.js +26 -26
  151. package/dist/esm/QueueDeckExpanded.js +4 -4
  152. package/dist/esm/QueueDeckExpandedPaginated.js +4 -4
  153. package/dist/esm/RelatedContent.js +28 -28
  154. package/dist/esm/RelatedTopicsDropdown.js +10 -10
  155. package/dist/esm/SeriesListingDeck.js +2 -2
  156. package/dist/esm/{SeriesSlider-3f4d6012.js → SeriesSlider-771918ce.js} +5 -5
  157. package/dist/esm/SideFooter.js +11 -9
  158. package/dist/esm/{SocialSearchComponent-2451acd2.js → SocialSearchComponent-b102181b.js} +2 -2
  159. package/dist/esm/TaxonomyCard.js +8 -8
  160. package/dist/esm/TaxonomyDescription.js +16 -17
  161. package/dist/esm/TemplateNormal.js +4 -4
  162. package/dist/esm/ThumbnailCard.js +1 -1
  163. package/dist/esm/{Tooltip-51957f7c.js → Tooltip-2cdd0895.js} +291 -116
  164. package/dist/esm/Ustream.js +1 -1
  165. package/dist/esm/VideoProgramLandingPage.js +3 -3
  166. package/dist/esm/VideoSeriesCard.js +1 -1
  167. package/dist/esm/VideoSeriesLandingPage.js +3 -3
  168. package/dist/esm/VideoSeriesListing.js +1 -1
  169. package/dist/esm/View.js +8 -8
  170. package/dist/esm/YahooHero.js +1 -1
  171. package/dist/esm/YoutubeGroup.js +5 -5
  172. package/dist/esm/defineProperty-e8022d1e.js +66 -0
  173. package/dist/esm/{entities-932b50cf.js → entities-6d9154b4.js} +4 -0
  174. package/dist/esm/getRelatedArticle.js +1 -1
  175. package/dist/esm/getSerializers.js +3 -3
  176. package/dist/esm/{getTargeting-c6884f34.js → getTargeting-9bd28724.js} +9 -9
  177. package/dist/esm/getTargeting.js +1 -1
  178. package/dist/esm/{index-db3bb315.js → index-0a63f9a3.js} +11 -11
  179. package/dist/esm/{index-67e1773f.js → index-98ca9cec.js} +15 -9
  180. package/dist/esm/{index-f2f5b752.js → index-a71a6cc7.js} +2 -2
  181. package/dist/esm/{index.esm-06bf63a3.js → index.esm-8639823a.js} +8 -7
  182. package/dist/esm/index.js +14 -14
  183. package/dist/esm/{main-f97773b2.js → main-754d4992.js} +4 -9
  184. package/package.json +116 -116
@@ -1,4 +1,4 @@
1
- import { _ as _objectWithoutPropertiesLoose, b as _extends, a as _setPrototypeOf, c as classnames } from './index-67e1773f.js';
1
+ import { _ as _objectWithoutPropertiesLoose, b as _extends, a as _setPrototypeOf, c as classnames } from './index-98ca9cec.js';
2
2
  import React__default, { useCallback, useRef, useState, useContext, useMemo, useEffect, useImperativeHandle, useReducer, forwardRef, cloneElement } from 'react';
3
3
  import PropTypes from 'prop-types';
4
4
  import ReactDOM from 'react-dom';
@@ -170,15 +170,33 @@ var AccordionToggle = React__default.forwardRef(function (_ref, ref) {
170
170
  }, props), children);
171
171
  });
172
172
 
173
+ /**
174
+ * Returns the owner document of a given element.
175
+ *
176
+ * @param node the element
177
+ */
173
178
  function ownerDocument$1(node) {
174
179
  return node && node.ownerDocument || document;
175
180
  }
176
181
 
182
+ /**
183
+ * Returns the owner window of a given element.
184
+ *
185
+ * @param node the element
186
+ */
187
+
177
188
  function ownerWindow(node) {
178
189
  var doc = ownerDocument$1(node);
179
190
  return doc && doc.defaultView || window;
180
191
  }
181
192
 
193
+ /**
194
+ * Returns one or all computed style properties of an element.
195
+ *
196
+ * @param node the element
197
+ * @param psuedoElement the style property
198
+ */
199
+
182
200
  function getComputedStyle$2(node, psuedoElement) {
183
201
  return ownerWindow(node).getComputedStyle(node, psuedoElement);
184
202
  }
@@ -259,6 +277,11 @@ try {
259
277
 
260
278
  /**
261
279
  * An `addEventListener` ponyfill, supports the `once` option
280
+ *
281
+ * @param node the element
282
+ * @param eventName the event name
283
+ * @param handle the handler
284
+ * @param options event options
262
285
  */
263
286
  function addEventListener(node, eventName, handler, options) {
264
287
  if (options && typeof options !== 'boolean' && !onceSupported) {
@@ -281,6 +304,14 @@ function addEventListener(node, eventName, handler, options) {
281
304
  node.addEventListener(eventName, handler, options);
282
305
  }
283
306
 
307
+ /**
308
+ * A `removeEventListener` ponyfill
309
+ *
310
+ * @param node the element
311
+ * @param eventName the event name
312
+ * @param handle the handler
313
+ * @param options event options
314
+ */
284
315
  function removeEventListener(node, eventName, handler, options) {
285
316
  var capture = options && typeof options !== 'boolean' ? options.capture : options;
286
317
  node.removeEventListener(eventName, handler, capture);
@@ -297,18 +328,36 @@ function listen(node, eventName, handler, options) {
297
328
  };
298
329
  }
299
330
 
331
+ /**
332
+ * Triggers an event on a given element.
333
+ *
334
+ * @param node the element
335
+ * @param eventName the event name to trigger
336
+ * @param bubbles whether the event should bubble up
337
+ * @param cancelable whether the event should be cancelable
338
+ */
339
+ function triggerEvent(node, eventName, bubbles, cancelable) {
340
+ if (bubbles === void 0) {
341
+ bubbles = false;
342
+ }
343
+
344
+ if (cancelable === void 0) {
345
+ cancelable = true;
346
+ }
347
+
348
+ if (node) {
349
+ var event = document.createEvent('HTMLEvents');
350
+ event.initEvent(eventName, bubbles, cancelable);
351
+ node.dispatchEvent(event);
352
+ }
353
+ }
354
+
300
355
  function parseDuration(node) {
301
356
  var str = style(node, 'transitionDuration') || '';
302
357
  var mult = str.indexOf('ms') === -1 ? 1000 : 1;
303
358
  return parseFloat(str) * mult;
304
359
  }
305
360
 
306
- function triggerTransitionEnd(element) {
307
- var evt = document.createEvent('HTMLEvents');
308
- evt.initEvent('transitionend', true, true);
309
- element.dispatchEvent(evt);
310
- }
311
-
312
361
  function emulateTransitionEnd(element, duration, padding) {
313
362
  if (padding === void 0) {
314
363
  padding = 5;
@@ -316,7 +365,7 @@ function emulateTransitionEnd(element, duration, padding) {
316
365
 
317
366
  var called = false;
318
367
  var handle = setTimeout(function () {
319
- if (!called) triggerTransitionEnd(element);
368
+ if (!called) triggerEvent(element, 'transitionend', true);
320
369
  }, duration + padding);
321
370
  var remove = listen(element, 'transitionend', function () {
322
371
  called = true;
@@ -774,7 +823,10 @@ Transition.propTypes = process.env.NODE_ENV !== "production" ? {
774
823
  * [test/CSSTransition-test.js](https://github.com/reactjs/react-transition-group/blob/13435f897b3ab71f6e19d724f145596f5910581c/test/CSSTransition-test.js#L362-L437)).
775
824
  */
776
825
  nodeRef: PropTypes.shape({
777
- current: typeof Element === 'undefined' ? PropTypes.any : PropTypes.instanceOf(Element)
826
+ current: typeof Element === 'undefined' ? PropTypes.any : function (propValue, key, componentName, location, propFullName, secret) {
827
+ var value = propValue[key];
828
+ return PropTypes.instanceOf(value && 'ownerDocument' in value ? value.ownerDocument.defaultView.Element : Element)(propValue, key, componentName, location, propFullName, secret);
829
+ }
778
830
  }),
779
831
 
780
832
  /**
@@ -2406,6 +2458,13 @@ function (_ref, ref) {
2406
2458
  Col.displayName = 'Col';
2407
2459
 
2408
2460
  var matchesImpl;
2461
+ /**
2462
+ * Checks if a given element matches a selector.
2463
+ *
2464
+ * @param node the element
2465
+ * @param selector the selector
2466
+ */
2467
+
2409
2468
  function matches(node, selector) {
2410
2469
  if (!matchesImpl) {
2411
2470
  var body = document.body;
@@ -2420,6 +2479,13 @@ function matches(node, selector) {
2420
2479
  }
2421
2480
 
2422
2481
  var toArray = Function.prototype.bind.call(Function.prototype.call, [].slice);
2482
+ /**
2483
+ * Runs `querySelectorAll` on a given element.
2484
+ *
2485
+ * @param element the element
2486
+ * @param selector the selector
2487
+ */
2488
+
2423
2489
  function qsa(element, selector) {
2424
2490
  return toArray(element.querySelectorAll(selector));
2425
2491
  }
@@ -2553,45 +2619,6 @@ function getBasePlacement(placement) {
2553
2619
  return placement.split('-')[0];
2554
2620
  }
2555
2621
 
2556
- function getBoundingClientRect(element) {
2557
- var rect = element.getBoundingClientRect();
2558
- return {
2559
- width: rect.width,
2560
- height: rect.height,
2561
- top: rect.top,
2562
- right: rect.right,
2563
- bottom: rect.bottom,
2564
- left: rect.left,
2565
- x: rect.left,
2566
- y: rect.top
2567
- };
2568
- }
2569
-
2570
- // means it doesn't take into account transforms.
2571
-
2572
- function getLayoutRect(element) {
2573
- var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.
2574
- // Fixes https://github.com/popperjs/popper-core/issues/1223
2575
-
2576
- var width = element.offsetWidth;
2577
- var height = element.offsetHeight;
2578
-
2579
- if (Math.abs(clientRect.width - width) <= 1) {
2580
- width = clientRect.width;
2581
- }
2582
-
2583
- if (Math.abs(clientRect.height - height) <= 1) {
2584
- height = clientRect.height;
2585
- }
2586
-
2587
- return {
2588
- x: element.offsetLeft,
2589
- y: element.offsetTop,
2590
- width: width,
2591
- height: height
2592
- };
2593
- }
2594
-
2595
2622
  function getWindow(node) {
2596
2623
  if (node == null) {
2597
2624
  return window;
@@ -2625,6 +2652,70 @@ function isShadowRoot(node) {
2625
2652
  return node instanceof OwnElement || node instanceof ShadowRoot;
2626
2653
  }
2627
2654
 
2655
+ var max = Math.max;
2656
+ var min = Math.min;
2657
+ var round = Math.round;
2658
+
2659
+ function getBoundingClientRect(element, includeScale) {
2660
+ if (includeScale === void 0) {
2661
+ includeScale = false;
2662
+ }
2663
+
2664
+ var rect = element.getBoundingClientRect();
2665
+ var scaleX = 1;
2666
+ var scaleY = 1;
2667
+
2668
+ if (isHTMLElement(element) && includeScale) {
2669
+ var offsetHeight = element.offsetHeight;
2670
+ var offsetWidth = element.offsetWidth; // Do not attempt to divide by 0, otherwise we get `Infinity` as scale
2671
+ // Fallback to 1 in case both values are `0`
2672
+
2673
+ if (offsetWidth > 0) {
2674
+ scaleX = round(rect.width) / offsetWidth || 1;
2675
+ }
2676
+
2677
+ if (offsetHeight > 0) {
2678
+ scaleY = round(rect.height) / offsetHeight || 1;
2679
+ }
2680
+ }
2681
+
2682
+ return {
2683
+ width: rect.width / scaleX,
2684
+ height: rect.height / scaleY,
2685
+ top: rect.top / scaleY,
2686
+ right: rect.right / scaleX,
2687
+ bottom: rect.bottom / scaleY,
2688
+ left: rect.left / scaleX,
2689
+ x: rect.left / scaleX,
2690
+ y: rect.top / scaleY
2691
+ };
2692
+ }
2693
+
2694
+ // means it doesn't take into account transforms.
2695
+
2696
+ function getLayoutRect(element) {
2697
+ var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.
2698
+ // Fixes https://github.com/popperjs/popper-core/issues/1223
2699
+
2700
+ var width = element.offsetWidth;
2701
+ var height = element.offsetHeight;
2702
+
2703
+ if (Math.abs(clientRect.width - width) <= 1) {
2704
+ width = clientRect.width;
2705
+ }
2706
+
2707
+ if (Math.abs(clientRect.height - height) <= 1) {
2708
+ height = clientRect.height;
2709
+ }
2710
+
2711
+ return {
2712
+ x: element.offsetLeft,
2713
+ y: element.offsetTop,
2714
+ width: width,
2715
+ height: height
2716
+ };
2717
+ }
2718
+
2628
2719
  function contains$1(parent, child) {
2629
2720
  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method
2630
2721
 
@@ -2745,13 +2836,13 @@ function getMainAxisFromPlacement(placement) {
2745
2836
  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';
2746
2837
  }
2747
2838
 
2748
- var max = Math.max;
2749
- var min = Math.min;
2750
- var round = Math.round;
2751
-
2752
2839
  function within(min$1, value, max$1) {
2753
2840
  return max(min$1, min(value, max$1));
2754
2841
  }
2842
+ function withinMaxClamp(min, value, max) {
2843
+ var v = within(min, value, max);
2844
+ return v > max ? max : v;
2845
+ }
2755
2846
 
2756
2847
  function getFreshSideObject() {
2757
2848
  return {
@@ -2864,6 +2955,10 @@ var arrow$1 = {
2864
2955
  requiresIfExists: ['preventOverflow']
2865
2956
  };
2866
2957
 
2958
+ function getVariation(placement) {
2959
+ return placement.split('-')[1];
2960
+ }
2961
+
2867
2962
  var unsetSides = {
2868
2963
  top: 'auto',
2869
2964
  right: 'auto',
@@ -2879,8 +2974,8 @@ function roundOffsetsByDPR(_ref) {
2879
2974
  var win = window;
2880
2975
  var dpr = win.devicePixelRatio || 1;
2881
2976
  return {
2882
- x: round(round(x * dpr) / dpr) || 0,
2883
- y: round(round(y * dpr) / dpr) || 0
2977
+ x: round(x * dpr) / dpr || 0,
2978
+ y: round(y * dpr) / dpr || 0
2884
2979
  };
2885
2980
  }
2886
2981
 
@@ -2890,18 +2985,28 @@ function mapToStyles(_ref2) {
2890
2985
  var popper = _ref2.popper,
2891
2986
  popperRect = _ref2.popperRect,
2892
2987
  placement = _ref2.placement,
2988
+ variation = _ref2.variation,
2893
2989
  offsets = _ref2.offsets,
2894
2990
  position = _ref2.position,
2895
2991
  gpuAcceleration = _ref2.gpuAcceleration,
2896
2992
  adaptive = _ref2.adaptive,
2897
- roundOffsets = _ref2.roundOffsets;
2898
-
2899
- var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,
2900
- _ref3$x = _ref3.x,
2901
- x = _ref3$x === void 0 ? 0 : _ref3$x,
2902
- _ref3$y = _ref3.y,
2903
- y = _ref3$y === void 0 ? 0 : _ref3$y;
2993
+ roundOffsets = _ref2.roundOffsets,
2994
+ isFixed = _ref2.isFixed;
2995
+ var _offsets$x = offsets.x,
2996
+ x = _offsets$x === void 0 ? 0 : _offsets$x,
2997
+ _offsets$y = offsets.y,
2998
+ y = _offsets$y === void 0 ? 0 : _offsets$y;
2999
+
3000
+ var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({
3001
+ x: x,
3002
+ y: y
3003
+ }) : {
3004
+ x: x,
3005
+ y: y
3006
+ };
2904
3007
 
3008
+ x = _ref3.x;
3009
+ y = _ref3.y;
2905
3010
  var hasX = offsets.hasOwnProperty('x');
2906
3011
  var hasY = offsets.hasOwnProperty('y');
2907
3012
  var sideX = left;
@@ -2916,7 +3021,7 @@ function mapToStyles(_ref2) {
2916
3021
  if (offsetParent === getWindow(popper)) {
2917
3022
  offsetParent = getDocumentElement(popper);
2918
3023
 
2919
- if (getComputedStyle$1(offsetParent).position !== 'static') {
3024
+ if (getComputedStyle$1(offsetParent).position !== 'static' && position === 'absolute') {
2920
3025
  heightProp = 'scrollHeight';
2921
3026
  widthProp = 'scrollWidth';
2922
3027
  }
@@ -2925,17 +3030,19 @@ function mapToStyles(_ref2) {
2925
3030
 
2926
3031
  offsetParent = offsetParent;
2927
3032
 
2928
- if (placement === top) {
2929
- sideY = bottom; // $FlowFixMe[prop-missing]
2930
-
2931
- y -= offsetParent[heightProp] - popperRect.height;
3033
+ if (placement === top || (placement === left || placement === right) && variation === end) {
3034
+ sideY = bottom;
3035
+ var offsetY = isFixed && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]
3036
+ offsetParent[heightProp];
3037
+ y -= offsetY - popperRect.height;
2932
3038
  y *= gpuAcceleration ? 1 : -1;
2933
3039
  }
2934
3040
 
2935
- if (placement === left) {
2936
- sideX = right; // $FlowFixMe[prop-missing]
2937
-
2938
- x -= offsetParent[widthProp] - popperRect.width;
3041
+ if (placement === left || (placement === top || placement === bottom) && variation === end) {
3042
+ sideX = right;
3043
+ var offsetX = isFixed && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]
3044
+ offsetParent[widthProp];
3045
+ x -= offsetX - popperRect.width;
2939
3046
  x *= gpuAcceleration ? 1 : -1;
2940
3047
  }
2941
3048
  }
@@ -2944,18 +3051,29 @@ function mapToStyles(_ref2) {
2944
3051
  position: position
2945
3052
  }, adaptive && unsetSides);
2946
3053
 
3054
+ var _ref4 = roundOffsets === true ? roundOffsetsByDPR({
3055
+ x: x,
3056
+ y: y
3057
+ }) : {
3058
+ x: x,
3059
+ y: y
3060
+ };
3061
+
3062
+ x = _ref4.x;
3063
+ y = _ref4.y;
3064
+
2947
3065
  if (gpuAcceleration) {
2948
3066
  var _Object$assign;
2949
3067
 
2950
- return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign));
3068
+ return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign));
2951
3069
  }
2952
3070
 
2953
3071
  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2));
2954
3072
  }
2955
3073
 
2956
- function computeStyles(_ref4) {
2957
- var state = _ref4.state,
2958
- options = _ref4.options;
3074
+ function computeStyles(_ref5) {
3075
+ var state = _ref5.state,
3076
+ options = _ref5.options;
2959
3077
  var _options$gpuAccelerat = options.gpuAcceleration,
2960
3078
  gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,
2961
3079
  _options$adaptive = options.adaptive,
@@ -2975,9 +3093,11 @@ function computeStyles(_ref4) {
2975
3093
 
2976
3094
  var commonStyles = {
2977
3095
  placement: getBasePlacement(state.placement),
3096
+ variation: getVariation(state.placement),
2978
3097
  popper: state.elements.popper,
2979
3098
  popperRect: state.rects.popper,
2980
- gpuAcceleration: gpuAcceleration
3099
+ gpuAcceleration: gpuAcceleration,
3100
+ isFixed: state.options.strategy === 'fixed'
2981
3101
  };
2982
3102
 
2983
3103
  if (state.modifiersData.popperOffsets != null) {
@@ -3235,7 +3355,7 @@ function getInnerBoundingClientRect(element) {
3235
3355
  }
3236
3356
 
3237
3357
  function getClientRectFromMixedType(element, clippingParent) {
3238
- return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
3358
+ return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
3239
3359
  } // A "clipping parent" is an overflowable container with the characteristic of
3240
3360
  // clipping (or hiding) overflowing elements with a position different from
3241
3361
  // `initial`
@@ -3277,10 +3397,6 @@ function getClippingRect(element, boundary, rootBoundary) {
3277
3397
  return clippingRect;
3278
3398
  }
3279
3399
 
3280
- function getVariation(placement) {
3281
- return placement.split('-')[1];
3282
- }
3283
-
3284
3400
  function computeOffsets(_ref) {
3285
3401
  var reference = _ref.reference,
3286
3402
  element = _ref.element,
@@ -3366,11 +3482,10 @@ function detectOverflow(state, options) {
3366
3482
  padding = _options$padding === void 0 ? 0 : _options$padding;
3367
3483
  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
3368
3484
  var altContext = elementContext === popper ? reference : popper;
3369
- var referenceElement = state.elements.reference;
3370
3485
  var popperRect = state.rects.popper;
3371
3486
  var element = state.elements[altBoundary ? altContext : elementContext];
3372
3487
  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);
3373
- var referenceClientRect = getBoundingClientRect(referenceElement);
3488
+ var referenceClientRect = getBoundingClientRect(state.elements.reference);
3374
3489
  var popperOffsets = computeOffsets({
3375
3490
  reference: referenceClientRect,
3376
3491
  element: popperRect,
@@ -3757,6 +3872,14 @@ function preventOverflow(_ref) {
3757
3872
  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {
3758
3873
  placement: state.placement
3759
3874
  })) : tetherOffset;
3875
+ var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {
3876
+ mainAxis: tetherOffsetValue,
3877
+ altAxis: tetherOffsetValue
3878
+ } : Object.assign({
3879
+ mainAxis: 0,
3880
+ altAxis: 0
3881
+ }, tetherOffsetValue);
3882
+ var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;
3760
3883
  var data = {
3761
3884
  x: 0,
3762
3885
  y: 0
@@ -3766,13 +3889,15 @@ function preventOverflow(_ref) {
3766
3889
  return;
3767
3890
  }
3768
3891
 
3769
- if (checkMainAxis || checkAltAxis) {
3892
+ if (checkMainAxis) {
3893
+ var _offsetModifierState$;
3894
+
3770
3895
  var mainSide = mainAxis === 'y' ? top : left;
3771
3896
  var altSide = mainAxis === 'y' ? bottom : right;
3772
3897
  var len = mainAxis === 'y' ? 'height' : 'width';
3773
3898
  var offset = popperOffsets[mainAxis];
3774
- var min$1 = popperOffsets[mainAxis] + overflow[mainSide];
3775
- var max$1 = popperOffsets[mainAxis] - overflow[altSide];
3899
+ var min$1 = offset + overflow[mainSide];
3900
+ var max$1 = offset - overflow[altSide];
3776
3901
  var additive = tether ? -popperRect[len] / 2 : 0;
3777
3902
  var minLen = variation === start ? referenceRect[len] : popperRect[len];
3778
3903
  var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go
@@ -3792,36 +3917,45 @@ function preventOverflow(_ref) {
3792
3917
  // width or height)
3793
3918
 
3794
3919
  var arrowLen = within(0, referenceRect[len], arrowRect[len]);
3795
- var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;
3796
- var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;
3920
+ var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;
3921
+ var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;
3797
3922
  var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);
3798
3923
  var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;
3799
- var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;
3800
- var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;
3801
- var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;
3924
+ var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;
3925
+ var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;
3926
+ var tetherMax = offset + maxOffset - offsetModifierValue;
3927
+ var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);
3928
+ popperOffsets[mainAxis] = preventedOffset;
3929
+ data[mainAxis] = preventedOffset - offset;
3930
+ }
3802
3931
 
3803
- if (checkMainAxis) {
3804
- var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);
3805
- popperOffsets[mainAxis] = preventedOffset;
3806
- data[mainAxis] = preventedOffset - offset;
3807
- }
3932
+ if (checkAltAxis) {
3933
+ var _offsetModifierState$2;
3808
3934
 
3809
- if (checkAltAxis) {
3810
- var _mainSide = mainAxis === 'x' ? top : left;
3935
+ var _mainSide = mainAxis === 'x' ? top : left;
3811
3936
 
3812
- var _altSide = mainAxis === 'x' ? bottom : right;
3937
+ var _altSide = mainAxis === 'x' ? bottom : right;
3813
3938
 
3814
- var _offset = popperOffsets[altAxis];
3939
+ var _offset = popperOffsets[altAxis];
3815
3940
 
3816
- var _min = _offset + overflow[_mainSide];
3941
+ var _len = altAxis === 'y' ? 'height' : 'width';
3817
3942
 
3818
- var _max = _offset - overflow[_altSide];
3943
+ var _min = _offset + overflow[_mainSide];
3819
3944
 
3820
- var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);
3945
+ var _max = _offset - overflow[_altSide];
3821
3946
 
3822
- popperOffsets[altAxis] = _preventedOffset;
3823
- data[altAxis] = _preventedOffset - _offset;
3824
- }
3947
+ var isOriginSide = [top, left].indexOf(basePlacement) !== -1;
3948
+
3949
+ var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;
3950
+
3951
+ var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;
3952
+
3953
+ var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;
3954
+
3955
+ var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);
3956
+
3957
+ popperOffsets[altAxis] = _preventedOffset;
3958
+ data[altAxis] = _preventedOffset - _offset;
3825
3959
  }
3826
3960
 
3827
3961
  state.modifiersData[name] = data;
@@ -3851,16 +3985,24 @@ function getNodeScroll(node) {
3851
3985
  }
3852
3986
  }
3853
3987
 
3988
+ function isElementScaled(element) {
3989
+ var rect = element.getBoundingClientRect();
3990
+ var scaleX = round(rect.width) / element.offsetWidth || 1;
3991
+ var scaleY = round(rect.height) / element.offsetHeight || 1;
3992
+ return scaleX !== 1 || scaleY !== 1;
3993
+ } // Returns the composite rect of an element relative to its offsetParent.
3854
3994
  // Composite means it takes into account transforms as well as layout.
3855
3995
 
3996
+
3856
3997
  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
3857
3998
  if (isFixed === void 0) {
3858
3999
  isFixed = false;
3859
4000
  }
3860
4001
 
3861
- var documentElement = getDocumentElement(offsetParent);
3862
- var rect = getBoundingClientRect(elementOrVirtualElement);
3863
4002
  var isOffsetParentAnElement = isHTMLElement(offsetParent);
4003
+ var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);
4004
+ var documentElement = getDocumentElement(offsetParent);
4005
+ var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled);
3864
4006
  var scroll = {
3865
4007
  scrollLeft: 0,
3866
4008
  scrollTop: 0
@@ -3877,7 +4019,7 @@ function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
3877
4019
  }
3878
4020
 
3879
4021
  if (isHTMLElement(offsetParent)) {
3880
- offsets = getBoundingClientRect(offsetParent);
4022
+ offsets = getBoundingClientRect(offsetParent, true);
3881
4023
  offsets.x += offsetParent.clientLeft;
3882
4024
  offsets.y += offsetParent.clientTop;
3883
4025
  } else if (documentElement) {
@@ -3967,7 +4109,10 @@ var MISSING_DEPENDENCY_ERROR = 'Popper: modifier "%s" requires "%s", but "%s" mo
3967
4109
  var VALID_PROPERTIES = ['name', 'enabled', 'phase', 'fn', 'effect', 'requires', 'options'];
3968
4110
  function validateModifiers(modifiers) {
3969
4111
  modifiers.forEach(function (modifier) {
3970
- Object.keys(modifier).forEach(function (key) {
4112
+ [].concat(Object.keys(modifier), VALID_PROPERTIES) // IE11-compatible replacement for `new Set(iterable)`
4113
+ .filter(function (value, index, self) {
4114
+ return self.indexOf(value) === index;
4115
+ }).forEach(function (key) {
3971
4116
  switch (key) {
3972
4117
  case 'name':
3973
4118
  if (typeof modifier.name !== 'string') {
@@ -3981,6 +4126,8 @@ function validateModifiers(modifiers) {
3981
4126
  console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"enabled"', '"boolean"', "\"" + String(modifier.enabled) + "\""));
3982
4127
  }
3983
4128
 
4129
+ break;
4130
+
3984
4131
  case 'phase':
3985
4132
  if (modifierPhases.indexOf(modifier.phase) < 0) {
3986
4133
  console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"phase"', "either " + modifierPhases.join(', '), "\"" + String(modifier.phase) + "\""));
@@ -3996,14 +4143,14 @@ function validateModifiers(modifiers) {
3996
4143
  break;
3997
4144
 
3998
4145
  case 'effect':
3999
- if (typeof modifier.effect !== 'function') {
4146
+ if (modifier.effect != null && typeof modifier.effect !== 'function') {
4000
4147
  console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"effect"', '"function"', "\"" + String(modifier.fn) + "\""));
4001
4148
  }
4002
4149
 
4003
4150
  break;
4004
4151
 
4005
4152
  case 'requires':
4006
- if (!Array.isArray(modifier.requires)) {
4153
+ if (modifier.requires != null && !Array.isArray(modifier.requires)) {
4007
4154
  console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requires"', '"array"', "\"" + String(modifier.requires) + "\""));
4008
4155
  }
4009
4156
 
@@ -4113,7 +4260,8 @@ function popperGenerator(generatorOptions) {
4113
4260
  var isDestroyed = false;
4114
4261
  var instance = {
4115
4262
  state: state,
4116
- setOptions: function setOptions(options) {
4263
+ setOptions: function setOptions(setOptionsAction) {
4264
+ var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;
4117
4265
  cleanupModifierEffects();
4118
4266
  state.options = Object.assign({}, defaultOptions, state.options, options);
4119
4267
  state.scrollParents = {
@@ -4485,9 +4633,16 @@ function usePopper(referenceElement, popperElement, _temp) {
4485
4633
  }
4486
4634
 
4487
4635
  /* eslint-disable no-bitwise, no-cond-assign */
4488
- // HTML DOM and SVG DOM may have different support levels,
4489
- // so we need to check on context instead of a document root element.
4636
+
4637
+ /**
4638
+ * Checks if an element contains another given element.
4639
+ *
4640
+ * @param context the context element
4641
+ * @param node the element to check
4642
+ */
4490
4643
  function contains(context, node) {
4644
+ // HTML DOM and SVG DOM may have different support levels,
4645
+ // so we need to check on context instead of a document root element.
4491
4646
  if (context.contains) return context.contains(node);
4492
4647
  if (context.compareDocumentPosition) return context === node || !!(context.compareDocumentPosition(node) & 16);
4493
4648
  }
@@ -5304,6 +5459,12 @@ function useWrappedRefWithWarning(ref, componentName) {
5304
5459
  return useMergedRefs(warningRef, ref);
5305
5460
  }
5306
5461
 
5462
+ /**
5463
+ * Checks if a given element has a CSS class.
5464
+ *
5465
+ * @param element the element
5466
+ * @param className the CSS class name
5467
+ */
5307
5468
  function hasClass(element, className) {
5308
5469
  if (element.classList) return !!className && element.classList.contains(className);
5309
5470
  return (" " + (element.className.baseVal || element.className) + " ").indexOf(" " + className + " ") !== -1;
@@ -6743,9 +6904,9 @@ function scrollbarSize(recalc) {
6743
6904
  }
6744
6905
 
6745
6906
  /**
6746
- * Return the actively focused element safely.
6907
+ * Returns the actively focused element safely.
6747
6908
  *
6748
- * @param doc the document to checl
6909
+ * @param doc the document to check
6749
6910
  */
6750
6911
 
6751
6912
  function activeElement(doc) {
@@ -6767,6 +6928,13 @@ function activeElement(doc) {
6767
6928
  }
6768
6929
  }
6769
6930
 
6931
+ /**
6932
+ * Adds a CSS class to a given element.
6933
+ *
6934
+ * @param element the element
6935
+ * @param className the CSS class name
6936
+ */
6937
+
6770
6938
  function addClass(element, className) {
6771
6939
  if (element.classList) element.classList.add(className);else if (!hasClass(element, className)) if (typeof element.className === 'string') element.className = element.className + " " + className;else element.setAttribute('class', (element.className && element.className.baseVal || '') + " " + className);
6772
6940
  }
@@ -6774,6 +6942,13 @@ function addClass(element, className) {
6774
6942
  function replaceClassName(origClass, classToRemove) {
6775
6943
  return origClass.replace(new RegExp("(^|\\s)" + classToRemove + "(?:\\s|$)", 'g'), '$1').replace(/\s+/g, ' ').replace(/^\s*|\s*$/g, '');
6776
6944
  }
6945
+ /**
6946
+ * Removes a CSS class from a given element.
6947
+ *
6948
+ * @param element the element
6949
+ * @param className the CSS class name
6950
+ */
6951
+
6777
6952
 
6778
6953
  function removeClass(element, className) {
6779
6954
  if (element.classList) {