UNPKG

chenw-tool

Version:

React components using pure Bootstrap 5+ which does not contain any external style and script libraries.

140 lines (127 loc) 10.9 kB
/* * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). * This devtool is neither made for production nor for readable output files. * It uses "eval()" calls to create a separate source file in the browser devtools. * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) * or disable the default devtool with "devtool: false". * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). */ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(require("react"), require("react-dom")); else if(typeof define === 'function' && define.amd) define("myPopovers", ["react", "react-dom"], factory); else if(typeof exports === 'object') exports["myPopovers"] = factory(require("react"), require("react-dom")); else root["myPopovers"] = factory(root["react"], root["react-dom"]); })(this, (__WEBPACK_EXTERNAL_MODULE_react__, __WEBPACK_EXTERNAL_MODULE_react_dom__) => { return /******/ (() => { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ({ /***/ "./src/Popovers.scss": /*!***************************!*\ !*** ./src/Popovers.scss ***! \***************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { eval("__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n//# sourceURL=webpack://myPopovers/./src/Popovers.scss?"); /***/ }), /***/ "./src/Popovers.tsx": /*!**************************!*\ !*** ./src/Popovers.tsx ***! \**************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ \"react-dom\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _Popovers_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Popovers.scss */ \"./src/Popovers.scss\");\n\n\n\nvar Popovers = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(function Popovers(_a, ref) {\n var children = _a.children, modalBodyHeight = _a.modalBodyHeight, modalBodyWidth = _a.modalBodyWidth, content = _a.content, triggerShow = _a.triggerShow, externalClassName = _a.externalClassName, closeFunc = _a.closeFunc;\n var _b = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false), isShow = _b[0], setIsShow = _b[1];\n var popoverBtnRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n var popoverModalRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n function handleClickOutside(event) {\n // 遍历 externalClassName 数组,找到外部元素\n var isClickInsideExternalClasses = externalClassName === null || externalClassName === void 0 ? void 0 : externalClassName.some(function (className) {\n var externalElement = document.querySelector(\".\".concat(className));\n return externalElement && externalElement.contains(event.target);\n });\n // 检查点击是否在 popoverModalRef、popoverBtnRef 或 externalClassName数组 区域之外\n if (isShow &&\n popoverModalRef.current &&\n !popoverModalRef.current.contains(event.target) &&\n popoverBtnRef.current &&\n !popoverBtnRef.current.contains(event.target) &&\n !isClickInsideExternalClasses) {\n // 如果点击不在这三个区域内,关闭弹出层\n setIsShow(false);\n }\n }\n // 添加点击事件侦听器\n document.addEventListener(\"pointerdown\", handleClickOutside);\n // 在组件销毁时移除事件侦听器\n return function () {\n document.removeEventListener(\"pointerdown\", handleClickOutside);\n };\n }, [isShow]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n if (isShow) {\n adjustDropdownPosition();\n }\n else {\n if (closeFunc) {\n closeFunc();\n }\n }\n }, [isShow]);\n // 将 setIsShow 方法暴露给外部\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useImperativeHandle)(ref, function () { return ({\n closePopover: function () { return setIsShow(false); },\n }); });\n function adjustDropdownPosition() {\n if (popoverModalRef.current && popoverBtnRef.current) {\n var buttonRect = popoverBtnRef.current.getBoundingClientRect();\n var scrollY_1 = window.pageYOffset || document.documentElement.scrollTop;\n var popoverWidth = popoverModalRef.current.offsetWidth; // 获取弹窗的宽度\n var windowWidth = window.innerWidth; // 获取窗口的宽度\n // 默认的 left 值,使弹窗靠近按钮的左侧\n var leftPosition = buttonRect.left + 5;\n // 预留的右侧间隙\n var rightMargin = 20;\n // 如果弹窗超出右侧边界,调整 left 值使其贴合窗口右侧\n if (leftPosition + popoverWidth > windowWidth - rightMargin) {\n leftPosition = windowWidth - popoverWidth - rightMargin; // 靠近窗口右侧,预留 5px 间隙\n }\n // 设置弹窗的 left 和 top 属性\n popoverModalRef.current.style.left = \"\".concat(leftPosition, \"px\");\n popoverModalRef.current.style.top = \"\".concat(buttonRect.bottom + scrollY_1, \"px\");\n }\n }\n return (React.createElement(React.Fragment, null,\n React.createElement(\"div\", { ref: popoverBtnRef, onClick: function () {\n if (triggerShow) {\n setIsShow(!isShow);\n }\n } }, content),\n isShow &&\n (0,react_dom__WEBPACK_IMPORTED_MODULE_1__.createPortal)(React.createElement(\"div\", { ref: ref },\n React.createElement(\"div\", { ref: popoverModalRef, className: \"bg-white rounded border p-2 popovers-overflow\", style: {\n height: \"\".concat(modalBodyHeight, \"px\"),\n width: \"\".concat(modalBodyWidth, \"px\"), // 请确认是否需要修改弹出内容的宽度\n zIndex: \"1200\",\n position: \"absolute\",\n overflow: \"auto\",\n } },\n React.createElement(\"div\", { className: \"modal-body h-100\" }, children))), document.body)));\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Popovers);\n\n\n//# sourceURL=webpack://myPopovers/./src/Popovers.tsx?"); /***/ }), /***/ "react": /*!************************!*\ !*** external "react" ***! \************************/ /***/ ((module) => { module.exports = __WEBPACK_EXTERNAL_MODULE_react__; /***/ }), /***/ "react-dom": /*!****************************!*\ !*** external "react-dom" ***! \****************************/ /***/ ((module) => { module.exports = __WEBPACK_EXTERNAL_MODULE_react_dom__; /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/compat get default export */ /******/ (() => { /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = (module) => { /******/ var getter = module && module.__esModule ? /******/ () => (module['default']) : /******/ () => (module); /******/ __webpack_require__.d(getter, { a: getter }); /******/ return getter; /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/define property getters */ /******/ (() => { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = (exports, definition) => { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ (() => { /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) /******/ })(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ (() => { /******/ // define __esModule on exports /******/ __webpack_require__.r = (exports) => { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ })(); /******/ /************************************************************************/ /******/ /******/ // startup /******/ // Load entry module and return exports /******/ // This entry module can't be inlined because the eval devtool is used. /******/ var __webpack_exports__ = __webpack_require__("./src/Popovers.tsx"); /******/ /******/ return __webpack_exports__; /******/ })() ; });