pocko-ui 1.0.9 → 1.0.10

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.
@@ -56,7 +56,7 @@ eval("\n\nmodule.exports = function (item) {\n var content = item[1];\n var cs
56
56
  \***********************/
57
57
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58
58
 
59
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ SelectInput)\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 body_scroll_lock__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! body-scroll-lock */ \"../../node_modules/body-scroll-lock/lib/bodyScrollLock.esm.js\");\n/* harmony import */ var _utils_useKeyboardNavigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/useKeyboardNavigation */ \"./src/utils/useKeyboardNavigation.ts\");\n/* harmony import */ var _utils_userDropDown__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/userDropDown */ \"./src/utils/userDropDown.ts\");\n/* harmony import */ var _utils_cls__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../utils/cls */ \"../../utils/cls.ts\");\n/* harmony import */ var _Index_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Index.scss */ \"./src/Index.scss\");\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n\n// my-utils\n\n\n\n\nfunction SelectInput(_ref) {\n var _dropdown$current, _dropdown$current2;\n var _ref$type = _ref.type,\n type = _ref$type === void 0 ? \"COMMON\" : _ref$type,\n label = _ref.label,\n wrapperClassName = _ref.wrapperClassName,\n wrapperConentInputClassName = _ref.wrapperConentInputClassName,\n popupMenuClassName = _ref.popupMenuClassName,\n id = _ref.id,\n name = _ref.name,\n _ref$kbcode = _ref.kbcode,\n kbcode = _ref$kbcode === void 0 ? \"kb_code\" : _ref$kbcode,\n dropdownRender = _ref.dropdownRender,\n inputId = _ref.inputId,\n titleId = _ref.titleId,\n defaultValue = _ref.defaultValue,\n index = _ref.index,\n onChange = _ref.onChange,\n onKeyDown = _ref.onKeyDown,\n _ref$size = _ref.size,\n size = _ref$size === void 0 ? \"auto\" : _ref$size,\n _ref$zIndex = _ref.zIndex,\n zIndex = _ref$zIndex === void 0 ? 1101 : _ref$zIndex,\n _ref$isHandleInput = _ref.isHandleInput,\n isHandleInput = _ref$isHandleInput === void 0 ? false : _ref$isHandleInput,\n _ref$isDisableBodyScr = _ref.isDisableBodyScroll,\n isDisableBodyScroll = _ref$isDisableBodyScr === void 0 ? false : _ref$isDisableBodyScr,\n dataService = _ref.dataService,\n _ref$dataServiceFunct = _ref.dataServiceFunction,\n dataServiceFunction = _ref$dataServiceFunct === void 0 ? \"retrieveList\" : _ref$dataServiceFunct,\n dataServiceFunctionParams = _ref.dataServiceFunctionParams,\n _ref$dataServiceRetri = _ref.dataServiceRetrieve,\n dataServiceRetrieve = _ref$dataServiceRetri === void 0 ? false : _ref$dataServiceRetri;\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\"),\n _useState2 = _slicedToArray(_useState, 2),\n keyword = _useState2[0],\n setKeyword = _useState2[1];\n var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\"),\n _useState4 = _slicedToArray(_useState3, 2),\n value = _useState4[0],\n setValue = _useState4[1];\n var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState6 = _slicedToArray(_useState5, 2),\n isShow = _useState6[0],\n setIsShow = _useState6[1];\n var _useState7 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState8 = _slicedToArray(_useState7, 2),\n loading = _useState8[0],\n setLoading = _useState8[1];\n\n // 调用dataService获取的值\n var _useState9 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]),\n _useState10 = _slicedToArray(_useState9, 2),\n dataServiceList = _useState10[0],\n setDataServiceList = _useState10[1];\n var _useState11 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]),\n _useState12 = _slicedToArray(_useState11, 2),\n initialData = _useState12[0],\n setInitialData = _useState12[1]; // 用来保存初始接口数据\n var _useState13 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState14 = _slicedToArray(_useState13, 2),\n hasFetchedData = _useState14[0],\n setHasFetchedData = _useState14[1]; // 判断是否已经调用过接口\n\n // 判断下拉框位置\n var _useDropdown = (0,_utils_userDropDown__WEBPACK_IMPORTED_MODULE_4__.useDropdown)(isShow, setIsShow, dataServiceList, loading),\n dropdown = _useDropdown.dropdown,\n dropdownContent = _useDropdown.dropdownContent;\n\n // 键盘逻辑\n var _useKeyboardNavigatio = (0,_utils_useKeyboardNavigation__WEBPACK_IMPORTED_MODULE_3__.useKeyboardNavigation)(dataServiceList.length, function (index) {\n return chooseOption(dataServiceList[index]);\n }, onKeyDown),\n focusedOption = _useKeyboardNavigatio.focusedOption,\n setFocusedOption = _useKeyboardNavigatio.setFocusedOption,\n handleKeyDown = _useKeyboardNavigatio.handleKeyDown,\n handleOptionFocus = _useKeyboardNavigatio.handleOptionFocus,\n handleOptionBlur = _useKeyboardNavigatio.handleOptionBlur;\n var dropDownList = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function () {\n return dataServiceList;\n }, [dataServiceList]);\n\n // input框输入\n var handleInputChange = function handleInputChange(event) {\n var newValue = event.target.value.trim().toLowerCase();\n setKeyword(newValue);\n\n // 当允许手动输入时,触发 onChange 事件,将输入值传递给父组件\n if (isHandleInput) {\n if (index) {\n onChange(newValue, index);\n } else {\n onChange(newValue);\n }\n }\n };\n\n // 单选选择option\n function chooseOption(item) {\n setIsShow(false);\n if (index) {\n onChange(item, index);\n } else {\n onChange(item);\n }\n setValue(item[name]);\n setKeyword(\"\"); // 清空关键词以重置列表\n setFocusedOption(null); // 重置焦点选项为 null\n\n // 失去焦点\n setTimeout(function () {\n var input = document.getElementById(\"\".concat(inputId));\n input.blur();\n }, 0);\n }\n\n // 多选判断是否勾选\n function toggleSelection(item) {\n var exists = value.some(function (i) {\n return i[id] === item[id];\n });\n var newValue;\n if (exists) {\n newValue = value.filter(function (i) {\n return i[id] !== item[id];\n });\n } else {\n newValue = [].concat(_toConsumableArray(value), [item]);\n }\n setValue(newValue);\n if (index) {\n onChange(newValue, index);\n } else {\n onChange(newValue);\n }\n\n // 如果需要向父组件传递多选结果,可以在此调用 onChange\n // onChange(newValue)\n }\n\n // 检索\n var handleSearch = function handleSearch(keyword, searchArray) {\n var filteredList = searchArray.filter(function (obj) {\n var _obj$name;\n var nameMatch = obj[name] ? (_obj$name = obj[name]) === null || _obj$name === void 0 ? void 0 : _obj$name.includes(keyword) : false;\n var kbcodeMatch = obj[kbcode] ? obj[kbcode].includes(keyword) : false;\n return nameMatch || kbcodeMatch;\n });\n return filteredList;\n };\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n if (isShow) {\n setLoading(true);\n if (dataService && dataServiceFunction) {\n var params = _toConsumableArray(dataServiceFunctionParams || []);\n\n // 检查是否有 $QUERY_STRING,如果有,替换 keyword\n var queryIndex = params.indexOf(\"$QUERY_STRING\");\n if (queryIndex !== -1) {\n params[queryIndex] = keyword || \"*\"; // 替换为 keyword 或 '*'\n }\n\n // 如果该参数是true,则代表是retrieve接口,实时搜索\n if (dataServiceRetrieve) {\n dataService[dataServiceFunction].apply(dataService, _toConsumableArray(params)).then(function (result) {\n if (result.length > 0) {\n setDataServiceList(result);\n } else {\n setDataServiceList([]);\n }\n })[\"finally\"](function () {\n setLoading(false);\n });\n } else {\n if (!hasFetchedData) {\n // 如果没有调用过接口,则调用一次\n dataService[dataServiceFunction].apply(dataService, _toConsumableArray(params)).then(function (result) {\n setHasFetchedData(true); // 标记已经获取过数据\n\n if (result.length > 0) {\n setInitialData(result); // 保存原始数据\n setDataServiceList(result);\n } else {\n setDataServiceList([]);\n setInitialData([]);\n }\n })[\"finally\"](function () {\n setLoading(false);\n });\n } else {\n // 本地过滤检索\n var filteredList = handleSearch(keyword, initialData);\n setDataServiceList(filteredList);\n setLoading(false);\n }\n }\n } else {\n var _filteredList = handleSearch(keyword, dropdownRender);\n setDataServiceList(_filteredList);\n setLoading(false);\n }\n } else {\n setDataServiceList([]);\n setHasFetchedData(false);\n setInitialData([]);\n }\n }, [keyword, isShow, dropdownRender]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n if (defaultValue) {\n setValue(defaultValue);\n var renderList = dropdownRender.length > 0 ? dropdownRender : dropDownList;\n\n // 根据 defaultValue 找到对应的选项索引,并设置 focusedOption\n var defaultOptionIndex = renderList.findIndex(function (item) {\n return item[name] === defaultValue;\n });\n if (defaultOptionIndex !== -1) {\n setFocusedOption(defaultOptionIndex);\n } else {\n setFocusedOption(null); // 如果没有找到匹配项,重置为 null\n }\n } else {\n setValue(\"\");\n setFocusedOption(null); // 没有默认值时,重置 focusedOption\n }\n }, [defaultValue, dropDownList, dropdownRender]);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: (0,_utils_cls__WEBPACK_IMPORTED_MODULE_5__.clsCombine)(wrapperClassName, \"select-input__wrapper\")\n }, label ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, typeof label === \"string\" ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", null, label) : label) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"select-input__content\",\n style: {\n width: typeof size === \"number\" ? \"\".concat(size, \"px\") : \"auto\"\n },\n ref: dropdown\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n type: \"text\",\n onChange: handleInputChange,\n id: inputId,\n className: (0,_utils_cls__WEBPACK_IMPORTED_MODULE_5__.clsCombine)((0,_utils_cls__WEBPACK_IMPORTED_MODULE_5__.clsWrite)(wrapperConentInputClassName, \"form-control\"), \"select-input__content__input\"),\n onFocus: function onFocus() {\n var targetElement = document.body;\n if (isDisableBodyScroll) {\n (0,body_scroll_lock__WEBPACK_IMPORTED_MODULE_2__.disableBodyScroll)(targetElement);\n }\n if (type === \"MULTI\") {\n setKeyword(\"\");\n }\n setIsShow(true);\n var title = document.getElementById(\"\".concat(titleId));\n title.classList.add(\"text-secondary-emphasis\", \"z-n1\");\n },\n onBlur: function onBlur() {\n var title = document.getElementById(\"\".concat(titleId));\n var input = document.getElementById(\"\".concat(inputId));\n title.classList.remove(\"text-secondary-emphasis\", \"z-n1\");\n input.value = \"\";\n setTimeout(function () {\n if (isDisableBodyScroll) {\n (0,body_scroll_lock__WEBPACK_IMPORTED_MODULE_2__.clearAllBodyScrollLocks)();\n }\n if (type === \"COMMON\") {\n setKeyword(\"\");\n // setIsShow(false);\n }\n setFocusedOption(null);\n }, 100);\n },\n onKeyDown: handleKeyDown,\n autoComplete: \"off\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"select-input__content__arrow \".concat(isShow ? \"select-input__content__arrow--reverse\" : \"\")\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"svg\", {\n width: \"10px\",\n height: \"10px\",\n viewBox: \"0 -4.5 20 20\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"g\", {\n transform: \"translate(-180.000000, -6684.000000)\",\n className: \"arrow-fill-g\",\n fill: \"#a5a5a5\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"g\", {\n transform: \"translate(56.000000, 160.000000)\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"path\", {\n d: \"M144,6525.39 L142.594,6524 L133.987,6532.261 L133.069,6531.38 L133.074,6531.385 L125.427,6524.045 L124,6525.414 C126.113,6527.443 132.014,6533.107 133.987,6535 C135.453,6533.594 134.024,6534.965 144,6525.39\"\n })))))), isShow && /*#__PURE__*/(0,react_dom__WEBPACK_IMPORTED_MODULE_1__.createPortal)(/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n ref: dropdownContent,\n className: \"select-input__popup__menu position-absolute shadow border rounded \".concat(isShow ? \"select-input__popup__menu--isShow\" : \"\", \" \").concat((0,_utils_cls__WEBPACK_IMPORTED_MODULE_5__.clsCombine)(popupMenuClassName)),\n style: {\n zIndex: zIndex,\n width: \"\".concat((_dropdown$current = dropdown.current) === null || _dropdown$current === void 0 ? void 0 : _dropdown$current.getBoundingClientRect().width, \"px\")\n }\n }, loading && dataService ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"select-input__popup__list py-1 px-1\"\n }, \"\\u52A0\\u8F7D\\u4E2D...\") : dropDownList.length !== 0 ? type === \"COMMON\" ? dropDownList === null || dropDownList === void 0 ? void 0 : dropDownList.map(function (item, index) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"select-input__popup__list py-1 px-1 \".concat(index + 1 === dropDownList.length ? \"\" : \"border-bottom\", \" \").concat(focusedOption === index ? \"text-bg-primary\" : \"\"),\n key: item[id] || \"\",\n onMouseDown: function onMouseDown(e) {\n e.stopPropagation();\n chooseOption(item);\n },\n onFocus: function onFocus() {\n return handleOptionFocus(item);\n },\n onBlur: handleOptionBlur,\n \"data-id\": item[id],\n \"data-name\": item[name]\n }, item[name]);\n }) : dropDownList === null || dropDownList === void 0 ? void 0 : dropDownList.map(function (item, index) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"select-input__popup__list py-1 px-1 \".concat(index + 1 === dropDownList.length ? \"\" : \"border-bottom\", \" \").concat(focusedOption === index ? \"text-bg-primary\" : \"\"),\n key: item[id] || \"\",\n onMouseDown: function onMouseDown(e) {\n e.stopPropagation();\n toggleSelection(item);\n },\n onFocus: function onFocus() {\n return handleOptionFocus(item);\n },\n onBlur: handleOptionBlur,\n \"data-id\": item[id],\n \"data-name\": item[name]\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n type: \"checkbox\",\n className: \"form-check-input me-2\",\n onMouseDown: function onMouseDown(e) {\n return e.stopPropagation();\n },\n checked: value.some(function (i) {\n return i[id] === item[id];\n }),\n onChange: function onChange() {\n return toggleSelection(item);\n }\n }), item[name]);\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"select-input__popup__list py-1 px-1\"\n }, \"\\u6CA1\\u6709\\u66F4\\u591A\\u6570\\u636E\")), document.body), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n id: \"\".concat(titleId),\n className: \"position-absolute ms-2 select-input__content__word__container\",\n style: {\n transform: \"translateY(-50%)\",\n top: \"50%\",\n width: \"\".concat((_dropdown$current2 = dropdown.current) === null || _dropdown$current2 === void 0 ? void 0 : _dropdown$current2.getBoundingClientRect().width, \"px\")\n },\n onMouseDown: function onMouseDown() {\n var input = document.getElementById(\"\".concat(inputId));\n input.focus();\n },\n title: Array.isArray(value) && value.length > 0 ? value.map(function (item) {\n return item[name];\n }).join(\", \") : value\n }, type === \"COMMON\" ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, value) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, Array.isArray(value) && value.length > 0 ? value.map(function (item) {\n return item[name];\n }).join(\", \") : value))));\n}\n\n//# sourceURL=webpack://RPB/./src/Index.tsx?");
59
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ SelectInput)\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 body_scroll_lock__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! body-scroll-lock */ \"../../node_modules/body-scroll-lock/lib/bodyScrollLock.esm.js\");\n/* harmony import */ var _utils_useKeyboardNavigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/useKeyboardNavigation */ \"./src/utils/useKeyboardNavigation.ts\");\n/* harmony import */ var _utils_userDropDown__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/userDropDown */ \"./src/utils/userDropDown.ts\");\n/* harmony import */ var _utils_cls__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../utils/cls */ \"../../utils/cls.ts\");\n/* harmony import */ var _Index_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Index.scss */ \"./src/Index.scss\");\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n\n// my-utils\n\n\n\n\nfunction SelectInput(_ref) {\n var _dropdown$current, _dropdown$current2;\n var _ref$type = _ref.type,\n type = _ref$type === void 0 ? \"COMMON\" : _ref$type,\n label = _ref.label,\n wrapperClassName = _ref.wrapperClassName,\n wrapperConentInputClassName = _ref.wrapperConentInputClassName,\n popupMenuClassName = _ref.popupMenuClassName,\n id = _ref.id,\n name = _ref.name,\n _ref$kbcode = _ref.kbcode,\n kbcode = _ref$kbcode === void 0 ? \"kb_code\" : _ref$kbcode,\n dropdownRender = _ref.dropdownRender,\n inputId = _ref.inputId,\n titleId = _ref.titleId,\n defaultValue = _ref.defaultValue,\n index = _ref.index,\n onChange = _ref.onChange,\n onKeyDown = _ref.onKeyDown,\n _ref$size = _ref.size,\n size = _ref$size === void 0 ? \"auto\" : _ref$size,\n _ref$zIndex = _ref.zIndex,\n zIndex = _ref$zIndex === void 0 ? 1101 : _ref$zIndex,\n _ref$isHandleInput = _ref.isHandleInput,\n isHandleInput = _ref$isHandleInput === void 0 ? false : _ref$isHandleInput,\n _ref$isDisableBodyScr = _ref.isDisableBodyScroll,\n isDisableBodyScroll = _ref$isDisableBodyScr === void 0 ? false : _ref$isDisableBodyScr,\n dataService = _ref.dataService,\n _ref$dataServiceFunct = _ref.dataServiceFunction,\n dataServiceFunction = _ref$dataServiceFunct === void 0 ? \"retrieveList\" : _ref$dataServiceFunct,\n dataServiceFunctionParams = _ref.dataServiceFunctionParams,\n _ref$dataServiceRetri = _ref.dataServiceRetrieve,\n dataServiceRetrieve = _ref$dataServiceRetri === void 0 ? false : _ref$dataServiceRetri;\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\"),\n _useState2 = _slicedToArray(_useState, 2),\n keyword = _useState2[0],\n setKeyword = _useState2[1];\n var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\"),\n _useState4 = _slicedToArray(_useState3, 2),\n value = _useState4[0],\n setValue = _useState4[1];\n var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState6 = _slicedToArray(_useState5, 2),\n isShow = _useState6[0],\n setIsShow = _useState6[1];\n var _useState7 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState8 = _slicedToArray(_useState7, 2),\n loading = _useState8[0],\n setLoading = _useState8[1];\n\n // 调用dataService获取的值\n var _useState9 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]),\n _useState10 = _slicedToArray(_useState9, 2),\n dataServiceList = _useState10[0],\n setDataServiceList = _useState10[1];\n var _useState11 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]),\n _useState12 = _slicedToArray(_useState11, 2),\n initialData = _useState12[0],\n setInitialData = _useState12[1]; // 用来保存初始接口数据\n var _useState13 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState14 = _slicedToArray(_useState13, 2),\n hasFetchedData = _useState14[0],\n setHasFetchedData = _useState14[1]; // 判断是否已经调用过接口\n\n // 判断下拉框位置\n var _useDropdown = (0,_utils_userDropDown__WEBPACK_IMPORTED_MODULE_4__.useDropdown)(isShow, setIsShow, dataServiceList, loading),\n dropdown = _useDropdown.dropdown,\n dropdownContent = _useDropdown.dropdownContent;\n\n // 键盘逻辑\n var _useKeyboardNavigatio = (0,_utils_useKeyboardNavigation__WEBPACK_IMPORTED_MODULE_3__.useKeyboardNavigation)(dataServiceList.length, function (index) {\n return chooseOption(dataServiceList[index]);\n }, onKeyDown),\n focusedOption = _useKeyboardNavigatio.focusedOption,\n setFocusedOption = _useKeyboardNavigatio.setFocusedOption,\n handleKeyDown = _useKeyboardNavigatio.handleKeyDown,\n handleOptionFocus = _useKeyboardNavigatio.handleOptionFocus,\n handleOptionBlur = _useKeyboardNavigatio.handleOptionBlur;\n var dropDownList = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function () {\n return dataServiceList;\n }, [dataServiceList]);\n\n // input框输入\n var handleInputChange = function handleInputChange(event) {\n var newValue = event.target.value.trim().toLowerCase();\n setKeyword(newValue);\n\n // 当允许手动输入时,触发 onChange 事件,将输入值传递给父组件\n if (isHandleInput) {\n if (index) {\n onChange(newValue, index);\n } else {\n onChange(newValue);\n }\n }\n };\n\n // 单选选择option\n function chooseOption(item) {\n setIsShow(false);\n if (index) {\n onChange(item, index);\n } else {\n onChange(item);\n }\n setValue(item[name]);\n setKeyword(\"\"); // 清空关键词以重置列表\n setFocusedOption(null); // 重置焦点选项为 null\n\n // 失去焦点\n setTimeout(function () {\n var input = document.getElementById(\"\".concat(inputId));\n input.blur();\n }, 0);\n }\n\n // 多选判断是否勾选\n function toggleSelection(item) {\n var exists = value.some(function (i) {\n return i[id] === item[id];\n });\n var newValue;\n if (exists) {\n newValue = value.filter(function (i) {\n return i[id] !== item[id];\n });\n } else {\n newValue = [].concat(_toConsumableArray(value), [item]);\n }\n setValue(newValue);\n if (index) {\n onChange(newValue, index);\n } else {\n onChange(newValue);\n }\n\n // 如果需要向父组件传递多选结果,可以在此调用 onChange\n // onChange(newValue)\n }\n\n // 检索\n var handleSearch = function handleSearch(keyword, searchArray) {\n var filteredList = searchArray.filter(function (obj) {\n var _obj$name;\n var nameMatch = obj[name] ? (_obj$name = obj[name]) === null || _obj$name === void 0 ? void 0 : _obj$name.includes(keyword) : false;\n var kbcodeMatch = obj[kbcode] ? obj[kbcode].includes(keyword) : false;\n return nameMatch || kbcodeMatch;\n });\n return filteredList;\n };\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n if (isShow) {\n setLoading(true);\n if (dataService && dataServiceFunction) {\n var params = _toConsumableArray(dataServiceFunctionParams || []);\n\n // 检查是否有 $QUERY_STRING,如果有,替换 keyword\n var queryIndex = params.indexOf(\"$QUERY_STRING\");\n if (queryIndex !== -1) {\n params[queryIndex] = keyword || \"*\"; // 替换为 keyword 或 '*'\n }\n\n // 如果该参数是true,则代表是retrieve接口,实时搜索\n if (dataServiceRetrieve) {\n dataService[dataServiceFunction].apply(dataService, _toConsumableArray(params)).then(function (result) {\n if (result.length > 0) {\n setDataServiceList(result);\n } else {\n setDataServiceList([]);\n }\n })[\"finally\"](function () {\n setLoading(false);\n });\n } else {\n if (!hasFetchedData) {\n // 如果没有调用过接口,则调用一次\n dataService[dataServiceFunction].apply(dataService, _toConsumableArray(params)).then(function (result) {\n setHasFetchedData(true); // 标记已经获取过数据\n\n if (result.length > 0) {\n setInitialData(result); // 保存原始数据\n setDataServiceList(result);\n } else {\n setDataServiceList([]);\n setInitialData([]);\n }\n })[\"finally\"](function () {\n setLoading(false);\n });\n } else {\n // 本地过滤检索\n var filteredList = handleSearch(keyword, initialData);\n setDataServiceList(filteredList);\n setLoading(false);\n }\n }\n } else {\n var _filteredList = handleSearch(keyword, dropdownRender);\n setDataServiceList(_filteredList);\n setLoading(false);\n }\n } else {\n setDataServiceList([]);\n setHasFetchedData(false);\n setInitialData([]);\n }\n }, [keyword, isShow, dropdownRender]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n if (defaultValue) {\n setValue(defaultValue);\n var renderList = dropdownRender.length > 0 ? dropdownRender : dropDownList;\n\n // 根据 defaultValue 找到对应的选项索引,并设置 focusedOption\n var defaultOptionIndex = renderList.findIndex(function (item) {\n return item[name] === defaultValue;\n });\n if (defaultOptionIndex !== -1) {\n setFocusedOption(defaultOptionIndex);\n } else {\n setFocusedOption(null); // 如果没有找到匹配项,重置为 null\n }\n } else {\n setValue(\"\");\n setFocusedOption(null); // 没有默认值时,重置 focusedOption\n }\n }, [defaultValue, dropDownList, dropdownRender]);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: (0,_utils_cls__WEBPACK_IMPORTED_MODULE_5__.clsCombine)(wrapperClassName, \"select-input__wrapper\")\n }, label ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, typeof label === \"string\" ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"label\", null, label) : label) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"select-input__content\",\n style: {\n width: typeof size === \"number\" ? \"\".concat(size, \"px\") : \"auto\"\n },\n ref: dropdown\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n type: \"text\",\n onChange: handleInputChange,\n id: inputId,\n className: (0,_utils_cls__WEBPACK_IMPORTED_MODULE_5__.clsCombine)((0,_utils_cls__WEBPACK_IMPORTED_MODULE_5__.clsWrite)(wrapperConentInputClassName, \"form-control\"), \"select-input__content__input\"),\n onFocus: function onFocus() {\n if (isDisableBodyScroll) {\n var targetElement = document.body;\n (0,body_scroll_lock__WEBPACK_IMPORTED_MODULE_2__.disableBodyScroll)(targetElement);\n }\n if (type === \"MULTI\") {\n setKeyword(\"\");\n }\n setIsShow(true);\n var title = document.getElementById(\"\".concat(titleId));\n title.classList.add(\"text-secondary-emphasis\", \"z-n1\");\n },\n onBlur: function onBlur() {\n var title = document.getElementById(\"\".concat(titleId));\n var input = document.getElementById(\"\".concat(inputId));\n title.classList.remove(\"text-secondary-emphasis\", \"z-n1\");\n input.value = \"\";\n setTimeout(function () {\n if (isDisableBodyScroll) {\n (0,body_scroll_lock__WEBPACK_IMPORTED_MODULE_2__.clearAllBodyScrollLocks)();\n }\n if (type === \"COMMON\") {\n setKeyword(\"\");\n // setIsShow(false);\n }\n setFocusedOption(null);\n }, 100);\n },\n onKeyDown: handleKeyDown,\n autoComplete: \"off\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n className: \"select-input__content__arrow \".concat(isShow ? \"select-input__content__arrow--reverse\" : \"\")\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"svg\", {\n width: \"10px\",\n height: \"10px\",\n viewBox: \"0 -4.5 20 20\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"g\", {\n transform: \"translate(-180.000000, -6684.000000)\",\n className: \"arrow-fill-g\",\n fill: \"#a5a5a5\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"g\", {\n transform: \"translate(56.000000, 160.000000)\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"path\", {\n d: \"M144,6525.39 L142.594,6524 L133.987,6532.261 L133.069,6531.38 L133.074,6531.385 L125.427,6524.045 L124,6525.414 C126.113,6527.443 132.014,6533.107 133.987,6535 C135.453,6533.594 134.024,6534.965 144,6525.39\"\n })))))), isShow && /*#__PURE__*/(0,react_dom__WEBPACK_IMPORTED_MODULE_1__.createPortal)(/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n ref: dropdownContent,\n className: \"select-input__popup__menu position-absolute shadow border rounded \".concat(isShow ? \"select-input__popup__menu--isShow\" : \"\", \" \").concat((0,_utils_cls__WEBPACK_IMPORTED_MODULE_5__.clsCombine)(popupMenuClassName)),\n style: {\n zIndex: zIndex,\n width: \"\".concat((_dropdown$current = dropdown.current) === null || _dropdown$current === void 0 ? void 0 : _dropdown$current.getBoundingClientRect().width, \"px\")\n }\n }, loading && dataService ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"select-input__popup__list py-1 px-1\"\n }, \"\\u52A0\\u8F7D\\u4E2D...\") : dropDownList.length !== 0 ? type === \"COMMON\" ? dropDownList === null || dropDownList === void 0 ? void 0 : dropDownList.map(function (item, index) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"select-input__popup__list py-1 px-1 \".concat(index + 1 === dropDownList.length ? \"\" : \"border-bottom\", \" \").concat(focusedOption === index ? \"text-bg-primary\" : \"\"),\n key: item[id] || \"\",\n onMouseDown: function onMouseDown(e) {\n e.stopPropagation();\n chooseOption(item);\n },\n onFocus: function onFocus() {\n return handleOptionFocus(item);\n },\n onBlur: handleOptionBlur,\n \"data-id\": item[id],\n \"data-name\": item[name]\n }, item[name]);\n }) : dropDownList === null || dropDownList === void 0 ? void 0 : dropDownList.map(function (item, index) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"select-input__popup__list py-1 px-1 \".concat(index + 1 === dropDownList.length ? \"\" : \"border-bottom\", \" \").concat(focusedOption === index ? \"text-bg-primary\" : \"\"),\n key: item[id] || \"\",\n onMouseDown: function onMouseDown(e) {\n e.stopPropagation();\n toggleSelection(item);\n },\n onFocus: function onFocus() {\n return handleOptionFocus(item);\n },\n onBlur: handleOptionBlur,\n \"data-id\": item[id],\n \"data-name\": item[name]\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n type: \"checkbox\",\n className: \"form-check-input me-2\",\n onMouseDown: function onMouseDown(e) {\n return e.stopPropagation();\n },\n checked: value.some(function (i) {\n return i[id] === item[id];\n }),\n onChange: function onChange() {\n return toggleSelection(item);\n }\n }), item[name]);\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"select-input__popup__list py-1 px-1\"\n }, \"\\u6CA1\\u6709\\u66F4\\u591A\\u6570\\u636E\")), document.body), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n id: \"\".concat(titleId),\n className: \"position-absolute ms-2 select-input__content__word__container\",\n style: {\n transform: \"translateY(-50%)\",\n top: \"50%\",\n width: \"\".concat((_dropdown$current2 = dropdown.current) === null || _dropdown$current2 === void 0 ? void 0 : _dropdown$current2.getBoundingClientRect().width, \"px\")\n },\n onMouseDown: function onMouseDown(e) {\n e.preventDefault();\n var input = document.getElementById(\"\".concat(inputId));\n input.focus();\n },\n title: Array.isArray(value) && value.length > 0 ? value.map(function (item) {\n return item[name];\n }).join(\", \") : value\n }, type === \"COMMON\" ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, value) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, Array.isArray(value) && value.length > 0 ? value.map(function (item) {\n return item[name];\n }).join(\", \") : value))));\n}\n\n//# sourceURL=webpack://RPB/./src/Index.tsx?");
60
60
 
61
61
  /***/ }),
62
62
 
@@ -66,7 +66,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
66
66
  \********************************************/
67
67
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
68
68
 
69
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useKeyboardNavigation: () => (/* binding */ useKeyboardNavigation)\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__);\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\nvar useKeyboardNavigation = function useKeyboardNavigation(optionsCount, chooseOption, onKeyDown) {\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState2 = _slicedToArray(_useState, 2),\n focusedOption = _useState2[0],\n setFocusedOption = _useState2[1];\n var handleKeyDown = function handleKeyDown(event) {\n var key = event.key;\n switch (key) {\n case \"ArrowUp\":\n event.preventDefault();\n setFocusedOption(function (prev) {\n return prev === null ? optionsCount - 1 : (prev - 1 + optionsCount) % optionsCount;\n });\n break;\n case \"ArrowDown\":\n event.preventDefault();\n setFocusedOption(function (prev) {\n return prev === null ? 0 : (prev + 1) % optionsCount;\n });\n break;\n case \"Enter\":\n if (focusedOption !== null) {\n chooseOption(focusedOption);\n }\n break;\n default:\n break;\n }\n\n // 回调函数,传键盘按下的值\n if (onKeyDown) {\n onKeyDown(event);\n }\n };\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var visibleItems = document.querySelectorAll(\".select-input__popup__list\");\n if (focusedOption !== null && visibleItems[focusedOption]) {\n visibleItems[focusedOption].scrollIntoView({\n behavior: \"smooth\",\n block: \"center\",\n inline: \"nearest\"\n });\n }\n }, [focusedOption]);\n\n // 设置焦点选项\n function handleOptionFocus(item) {\n setFocusedOption(item);\n }\n\n // 清除焦点选项\n function handleOptionBlur() {\n setFocusedOption(null);\n }\n return {\n focusedOption: focusedOption,\n setFocusedOption: setFocusedOption,\n handleKeyDown: handleKeyDown,\n handleOptionFocus: handleOptionFocus,\n handleOptionBlur: handleOptionBlur\n };\n};\n\n//# sourceURL=webpack://RPB/./src/utils/useKeyboardNavigation.ts?");
69
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useKeyboardNavigation: () => (/* binding */ useKeyboardNavigation)\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__);\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\nvar useKeyboardNavigation = function useKeyboardNavigation(optionsCount, chooseOption, onKeyDown) {\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState2 = _slicedToArray(_useState, 2),\n focusedOption = _useState2[0],\n setFocusedOption = _useState2[1];\n var handleKeyDown = function handleKeyDown(event) {\n var key = event.key;\n switch (key) {\n case \"ArrowUp\":\n event.preventDefault();\n setFocusedOption(function (prev) {\n return prev === null ? optionsCount - 1 : (prev - 1 + optionsCount) % optionsCount;\n });\n break;\n case \"ArrowDown\":\n event.preventDefault();\n setFocusedOption(function (prev) {\n return prev === null ? 0 : (prev + 1) % optionsCount;\n });\n break;\n case \"Enter\":\n if (focusedOption !== null) {\n chooseOption(focusedOption);\n }\n break;\n default:\n break;\n }\n\n // 回调函数,传键盘按下的值\n if (onKeyDown) {\n onKeyDown(event);\n }\n };\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var visibleItems = document.querySelectorAll(\".select-input__popup__list\");\n if (focusedOption !== null && visibleItems[focusedOption]) {\n visibleItems[focusedOption].scrollIntoView({\n behavior: \"smooth\",\n block: \"nearest\",\n inline: \"nearest\"\n });\n }\n }, [focusedOption]);\n\n // 设置焦点选项\n function handleOptionFocus(item) {\n setFocusedOption(item);\n }\n\n // 清除焦点选项\n function handleOptionBlur() {\n setFocusedOption(null);\n }\n return {\n focusedOption: focusedOption,\n setFocusedOption: setFocusedOption,\n handleKeyDown: handleKeyDown,\n handleOptionFocus: handleOptionFocus,\n handleOptionBlur: handleOptionBlur\n };\n};\n\n//# sourceURL=webpack://RPB/./src/utils/useKeyboardNavigation.ts?");
70
70
 
71
71
  /***/ }),
72
72
 
@@ -76,7 +76,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
76
76
  \***********************************/
77
77
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
78
78
 
79
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useDropdown: () => (/* binding */ useDropdown)\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\nvar useDropdown = function useDropdown(isShow, setIsShow, dropDownList, loading) {\n var dropdown = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n var dropdownContent = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n var adjustDropdownPosition = function adjustDropdownPosition() {\n if (dropdownContent.current && dropdown.current) {\n var dropdownRect = dropdown.current.getBoundingClientRect();\n var scrollX = window.pageXOffset || document.documentElement.scrollLeft;\n var scrollY = window.pageYOffset || document.documentElement.scrollTop;\n var viewportHeight = window.innerHeight;\n var spaceBelow = viewportHeight - dropdownRect.bottom - 20;\n var spaceAbove = dropdownRect.top - 20;\n var positionTop;\n if (spaceBelow < 100 && spaceAbove > spaceBelow) {\n // 显示在上方\n positionTop = \"\".concat(dropdownRect.top + scrollY - dropdownContent.current.offsetHeight, \"px\");\n dropdownContent.current.style.maxHeight = \"\".concat(Math.min(200, spaceAbove), \"px\");\n } else {\n // 显示在下方\n positionTop = \"\".concat(dropdownRect.bottom + scrollY, \"px\");\n dropdownContent.current.style.maxHeight = \"\".concat(Math.min(200, spaceBelow), \"px\");\n }\n dropdownContent.current.style.left = \"\".concat(dropdownRect.left + scrollX, \"px\");\n dropdownContent.current.style.top = positionTop;\n }\n };\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n if (isShow) {\n adjustDropdownPosition();\n }\n }, [isShow, dropDownList.length, loading]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var handleClickOutside = function handleClickOutside(event) {\n if (isShow && dropdown.current !== event.target && !dropdown.current.contains(event.target) && dropdownContent.current !== event.target && !dropdownContent.current.contains(event.target)) {\n setIsShow(false);\n }\n };\n document.addEventListener(\"pointerdown\", handleClickOutside);\n return function () {\n document.removeEventListener(\"pointerdown\", handleClickOutside);\n };\n }, [isShow]);\n return {\n dropdown: dropdown,\n dropdownContent: dropdownContent\n };\n};\n\n//# sourceURL=webpack://RPB/./src/utils/userDropDown.ts?");
79
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useDropdown: () => (/* binding */ useDropdown)\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\nvar useDropdown = function useDropdown(isShow, setIsShow, dropDownList, loading) {\n var dropdown = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n var dropdownContent = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n var adjustDropdownPosition = function adjustDropdownPosition() {\n if (dropdownContent.current && dropdown.current) {\n var dropdownRect = dropdown.current.getBoundingClientRect();\n var scrollX = window.scrollX || document.documentElement.scrollLeft;\n var scrollY = window.scrollY || document.documentElement.scrollTop;\n\n // 视口高度与上下可用空间\n var viewportHeight = window.innerHeight;\n var spaceBelow = viewportHeight - dropdownRect.bottom;\n var spaceAbove = dropdownRect.top;\n\n // 定位到上方或下方\n var positionTop;\n if (spaceBelow < 100 && spaceAbove > spaceBelow) {\n // 显示在上方\n positionTop = \"\".concat(dropdownRect.top + scrollY - dropdownContent.current.offsetHeight, \"px\");\n dropdownContent.current.style.maxHeight = \"\".concat(Math.min(200, spaceAbove - 20), \"px\"); // 留出20px间距\n } else {\n // 显示在下方\n positionTop = \"\".concat(dropdownRect.bottom + scrollY, \"px\");\n dropdownContent.current.style.maxHeight = \"\".concat(Math.min(200, spaceBelow - 20), \"px\");\n }\n\n // 水平方向定位\n var positionLeft = dropdownRect.left + scrollX;\n var dropdownWidth = dropdownContent.current.offsetWidth;\n var viewportWidth = window.innerWidth;\n var spaceRight = viewportWidth - dropdownRect.right;\n\n // 如果右侧空间不足,调整位置\n if (spaceRight < dropdownWidth) {\n positionLeft = Math.max(20, dropdownRect.right + scrollX - dropdownWidth); // 最小间距为20px\n }\n dropdownContent.current.style.left = \"\".concat(positionLeft, \"px\");\n dropdownContent.current.style.top = positionTop;\n }\n };\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n if (isShow) {\n adjustDropdownPosition();\n }\n }, [isShow, dropDownList.length, loading]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var handleClickOutside = function handleClickOutside(event) {\n if (isShow && dropdown.current !== event.target && !dropdown.current.contains(event.target) && dropdownContent.current !== event.target && !dropdownContent.current.contains(event.target)) {\n setIsShow(false);\n }\n };\n document.addEventListener(\"pointerdown\", handleClickOutside);\n return function () {\n document.removeEventListener(\"pointerdown\", handleClickOutside);\n };\n }, [isShow]);\n return {\n dropdown: dropdown,\n dropdownContent: dropdownContent\n };\n};\n\n//# sourceURL=webpack://RPB/./src/utils/userDropDown.ts?");
80
80
 
81
81
  /***/ }),
82
82
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pocko-ui",
3
- "version": "1.0.9",
3
+ "version": "1.0.10",
4
4
  "description": "React components using pure Bootstrap 5+ which does not contain any external style and script libraries.",
5
5
  "main": "index.js",
6
6
  "scripts": {