Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

3 лет назад
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428
  1. (function (global, factory) {
  2. typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react'), require('create-react-context'), require('deep-equal'), require('popper.js'), require('warning')) :
  3. typeof define === 'function' && define.amd ? define(['exports', 'react', 'create-react-context', 'deep-equal', 'popper.js', 'warning'], factory) :
  4. (factory((global.ReactPopper = {}),global.React,null,null,global.Popper,null));
  5. }(this, (function (exports,React,createContext,deepEqual,PopperJS,warning) { 'use strict';
  6. createContext = createContext && createContext.hasOwnProperty('default') ? createContext['default'] : createContext;
  7. deepEqual = deepEqual && deepEqual.hasOwnProperty('default') ? deepEqual['default'] : deepEqual;
  8. PopperJS = PopperJS && PopperJS.hasOwnProperty('default') ? PopperJS['default'] : PopperJS;
  9. warning = warning && warning.hasOwnProperty('default') ? warning['default'] : warning;
  10. function _defineProperty(obj, key, value) {
  11. if (key in obj) {
  12. Object.defineProperty(obj, key, {
  13. value: value,
  14. enumerable: true,
  15. configurable: true,
  16. writable: true
  17. });
  18. } else {
  19. obj[key] = value;
  20. }
  21. return obj;
  22. }
  23. function _extends() {
  24. _extends = Object.assign || function (target) {
  25. for (var i = 1; i < arguments.length; i++) {
  26. var source = arguments[i];
  27. for (var key in source) {
  28. if (Object.prototype.hasOwnProperty.call(source, key)) {
  29. target[key] = source[key];
  30. }
  31. }
  32. }
  33. return target;
  34. };
  35. return _extends.apply(this, arguments);
  36. }
  37. function _inheritsLoose(subClass, superClass) {
  38. subClass.prototype = Object.create(superClass.prototype);
  39. subClass.prototype.constructor = subClass;
  40. subClass.__proto__ = superClass;
  41. }
  42. function _objectWithoutPropertiesLoose(source, excluded) {
  43. if (source == null) return {};
  44. var target = {};
  45. var sourceKeys = Object.keys(source);
  46. var key, i;
  47. for (i = 0; i < sourceKeys.length; i++) {
  48. key = sourceKeys[i];
  49. if (excluded.indexOf(key) >= 0) continue;
  50. target[key] = source[key];
  51. }
  52. return target;
  53. }
  54. function _assertThisInitialized(self) {
  55. if (self === void 0) {
  56. throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
  57. }
  58. return self;
  59. }
  60. var ManagerReferenceNodeContext = createContext();
  61. var ManagerReferenceNodeSetterContext = createContext();
  62. var Manager =
  63. /*#__PURE__*/
  64. function (_React$Component) {
  65. _inheritsLoose(Manager, _React$Component);
  66. function Manager() {
  67. var _this;
  68. for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
  69. args[_key] = arguments[_key];
  70. }
  71. _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
  72. _defineProperty(_assertThisInitialized(_this), "referenceNode", void 0);
  73. _defineProperty(_assertThisInitialized(_this), "setReferenceNode", function (newReferenceNode) {
  74. if (newReferenceNode && _this.referenceNode !== newReferenceNode) {
  75. _this.referenceNode = newReferenceNode;
  76. _this.forceUpdate();
  77. }
  78. });
  79. return _this;
  80. }
  81. var _proto = Manager.prototype;
  82. _proto.componentWillUnmount = function componentWillUnmount() {
  83. this.referenceNode = null;
  84. };
  85. _proto.render = function render() {
  86. return React.createElement(ManagerReferenceNodeContext.Provider, {
  87. value: this.referenceNode
  88. }, React.createElement(ManagerReferenceNodeSetterContext.Provider, {
  89. value: this.setReferenceNode
  90. }, this.props.children));
  91. };
  92. return Manager;
  93. }(React.Component);
  94. /**
  95. * Takes an argument and if it's an array, returns the first item in the array,
  96. * otherwise returns the argument. Used for Preact compatibility.
  97. */
  98. var unwrapArray = function unwrapArray(arg) {
  99. return Array.isArray(arg) ? arg[0] : arg;
  100. };
  101. /**
  102. * Takes a maybe-undefined function and arbitrary args and invokes the function
  103. * only if it is defined.
  104. */
  105. var safeInvoke = function safeInvoke(fn) {
  106. if (typeof fn === "function") {
  107. for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
  108. args[_key - 1] = arguments[_key];
  109. }
  110. return fn.apply(void 0, args);
  111. }
  112. };
  113. /**
  114. * Does a shallow equality check of two objects by comparing the reference
  115. * equality of each value.
  116. */
  117. var shallowEqual = function shallowEqual(objA, objB) {
  118. var aKeys = Object.keys(objA);
  119. var bKeys = Object.keys(objB);
  120. if (bKeys.length !== aKeys.length) {
  121. return false;
  122. }
  123. for (var i = 0; i < bKeys.length; i++) {
  124. var key = aKeys[i];
  125. if (objA[key] !== objB[key]) {
  126. return false;
  127. }
  128. }
  129. return true;
  130. };
  131. /**
  132. * Sets a ref using either a ref callback or a ref object
  133. */
  134. var setRef = function setRef(ref, node) {
  135. // if its a function call it
  136. if (typeof ref === "function") {
  137. return safeInvoke(ref, node);
  138. } // otherwise we should treat it as a ref object
  139. else if (ref != null) {
  140. ref.current = node;
  141. }
  142. };
  143. var initialStyle = {
  144. position: 'absolute',
  145. top: 0,
  146. left: 0,
  147. opacity: 0,
  148. pointerEvents: 'none'
  149. };
  150. var initialArrowStyle = {};
  151. var InnerPopper =
  152. /*#__PURE__*/
  153. function (_React$Component) {
  154. _inheritsLoose(InnerPopper, _React$Component);
  155. function InnerPopper() {
  156. var _this;
  157. for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
  158. args[_key] = arguments[_key];
  159. }
  160. _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
  161. _defineProperty(_assertThisInitialized(_this), "state", {
  162. data: undefined,
  163. placement: undefined
  164. });
  165. _defineProperty(_assertThisInitialized(_this), "popperInstance", void 0);
  166. _defineProperty(_assertThisInitialized(_this), "popperNode", null);
  167. _defineProperty(_assertThisInitialized(_this), "arrowNode", null);
  168. _defineProperty(_assertThisInitialized(_this), "setPopperNode", function (popperNode) {
  169. if (!popperNode || _this.popperNode === popperNode) return;
  170. setRef(_this.props.innerRef, popperNode);
  171. _this.popperNode = popperNode;
  172. _this.updatePopperInstance();
  173. });
  174. _defineProperty(_assertThisInitialized(_this), "setArrowNode", function (arrowNode) {
  175. _this.arrowNode = arrowNode;
  176. });
  177. _defineProperty(_assertThisInitialized(_this), "updateStateModifier", {
  178. enabled: true,
  179. order: 900,
  180. fn: function fn(data) {
  181. var placement = data.placement;
  182. _this.setState({
  183. data: data,
  184. placement: placement
  185. });
  186. return data;
  187. }
  188. });
  189. _defineProperty(_assertThisInitialized(_this), "getOptions", function () {
  190. return {
  191. placement: _this.props.placement,
  192. eventsEnabled: _this.props.eventsEnabled,
  193. positionFixed: _this.props.positionFixed,
  194. modifiers: _extends({}, _this.props.modifiers, {
  195. arrow: _extends({}, _this.props.modifiers && _this.props.modifiers.arrow, {
  196. enabled: !!_this.arrowNode,
  197. element: _this.arrowNode
  198. }),
  199. applyStyle: {
  200. enabled: false
  201. },
  202. updateStateModifier: _this.updateStateModifier
  203. })
  204. };
  205. });
  206. _defineProperty(_assertThisInitialized(_this), "getPopperStyle", function () {
  207. return !_this.popperNode || !_this.state.data ? initialStyle : _extends({
  208. position: _this.state.data.offsets.popper.position
  209. }, _this.state.data.styles);
  210. });
  211. _defineProperty(_assertThisInitialized(_this), "getPopperPlacement", function () {
  212. return !_this.state.data ? undefined : _this.state.placement;
  213. });
  214. _defineProperty(_assertThisInitialized(_this), "getArrowStyle", function () {
  215. return !_this.arrowNode || !_this.state.data ? initialArrowStyle : _this.state.data.arrowStyles;
  216. });
  217. _defineProperty(_assertThisInitialized(_this), "getOutOfBoundariesState", function () {
  218. return _this.state.data ? _this.state.data.hide : undefined;
  219. });
  220. _defineProperty(_assertThisInitialized(_this), "destroyPopperInstance", function () {
  221. if (!_this.popperInstance) return;
  222. _this.popperInstance.destroy();
  223. _this.popperInstance = null;
  224. });
  225. _defineProperty(_assertThisInitialized(_this), "updatePopperInstance", function () {
  226. _this.destroyPopperInstance();
  227. var _assertThisInitialize = _assertThisInitialized(_this),
  228. popperNode = _assertThisInitialize.popperNode;
  229. var referenceElement = _this.props.referenceElement;
  230. if (!referenceElement || !popperNode) return;
  231. _this.popperInstance = new PopperJS(referenceElement, popperNode, _this.getOptions());
  232. });
  233. _defineProperty(_assertThisInitialized(_this), "scheduleUpdate", function () {
  234. if (_this.popperInstance) {
  235. _this.popperInstance.scheduleUpdate();
  236. }
  237. });
  238. return _this;
  239. }
  240. var _proto = InnerPopper.prototype;
  241. _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {
  242. // If the Popper.js options have changed, update the instance (destroy + create)
  243. if (this.props.placement !== prevProps.placement || this.props.referenceElement !== prevProps.referenceElement || this.props.positionFixed !== prevProps.positionFixed || !deepEqual(this.props.modifiers, prevProps.modifiers, {
  244. strict: true
  245. })) {
  246. // develop only check that modifiers isn't being updated needlessly
  247. {
  248. if (this.props.modifiers !== prevProps.modifiers && this.props.modifiers != null && prevProps.modifiers != null && shallowEqual(this.props.modifiers, prevProps.modifiers)) {
  249. console.warn("'modifiers' prop reference updated even though all values appear the same.\nConsider memoizing the 'modifiers' object to avoid needless rendering.");
  250. }
  251. }
  252. this.updatePopperInstance();
  253. } else if (this.props.eventsEnabled !== prevProps.eventsEnabled && this.popperInstance) {
  254. this.props.eventsEnabled ? this.popperInstance.enableEventListeners() : this.popperInstance.disableEventListeners();
  255. } // A placement difference in state means popper determined a new placement
  256. // apart from the props value. By the time the popper element is rendered with
  257. // the new position Popper has already measured it, if the place change triggers
  258. // a size change it will result in a misaligned popper. So we schedule an update to be sure.
  259. if (prevState.placement !== this.state.placement) {
  260. this.scheduleUpdate();
  261. }
  262. };
  263. _proto.componentWillUnmount = function componentWillUnmount() {
  264. setRef(this.props.innerRef, null);
  265. this.destroyPopperInstance();
  266. };
  267. _proto.render = function render() {
  268. return unwrapArray(this.props.children)({
  269. ref: this.setPopperNode,
  270. style: this.getPopperStyle(),
  271. placement: this.getPopperPlacement(),
  272. outOfBoundaries: this.getOutOfBoundariesState(),
  273. scheduleUpdate: this.scheduleUpdate,
  274. arrowProps: {
  275. ref: this.setArrowNode,
  276. style: this.getArrowStyle()
  277. }
  278. });
  279. };
  280. return InnerPopper;
  281. }(React.Component);
  282. _defineProperty(InnerPopper, "defaultProps", {
  283. placement: 'bottom',
  284. eventsEnabled: true,
  285. referenceElement: undefined,
  286. positionFixed: false
  287. });
  288. var placements = PopperJS.placements;
  289. function Popper(_ref) {
  290. var referenceElement = _ref.referenceElement,
  291. props = _objectWithoutPropertiesLoose(_ref, ["referenceElement"]);
  292. return React.createElement(ManagerReferenceNodeContext.Consumer, null, function (referenceNode) {
  293. return React.createElement(InnerPopper, _extends({
  294. referenceElement: referenceElement !== undefined ? referenceElement : referenceNode
  295. }, props));
  296. });
  297. }
  298. var InnerReference =
  299. /*#__PURE__*/
  300. function (_React$Component) {
  301. _inheritsLoose(InnerReference, _React$Component);
  302. function InnerReference() {
  303. var _this;
  304. for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
  305. args[_key] = arguments[_key];
  306. }
  307. _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
  308. _defineProperty(_assertThisInitialized(_this), "refHandler", function (node) {
  309. setRef(_this.props.innerRef, node);
  310. safeInvoke(_this.props.setReferenceNode, node);
  311. });
  312. return _this;
  313. }
  314. var _proto = InnerReference.prototype;
  315. _proto.componentWillUnmount = function componentWillUnmount() {
  316. setRef(this.props.innerRef, null);
  317. };
  318. _proto.render = function render() {
  319. warning(Boolean(this.props.setReferenceNode), '`Reference` should not be used outside of a `Manager` component.');
  320. return unwrapArray(this.props.children)({
  321. ref: this.refHandler
  322. });
  323. };
  324. return InnerReference;
  325. }(React.Component);
  326. function Reference(props) {
  327. return React.createElement(ManagerReferenceNodeSetterContext.Consumer, null, function (setReferenceNode) {
  328. return React.createElement(InnerReference, _extends({
  329. setReferenceNode: setReferenceNode
  330. }, props));
  331. });
  332. }
  333. // Public components
  334. // Public types
  335. exports.Popper = Popper;
  336. exports.placements = placements;
  337. exports.Manager = Manager;
  338. exports.Reference = Reference;
  339. Object.defineProperty(exports, '__esModule', { value: true });
  340. })));