UNPKG

tdesign-vue-next

Version:
180 lines (174 loc) 7.18 kB
/** * tdesign v1.20.0 * (c) 2026 tdesign * @license MIT */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var Vue = require('vue'); require('@babel/runtime/helpers/toConsumableArray'); require('@babel/runtime/helpers/typeof'); require('../../_chunks/dep-0e867224.js'); var index = require('../../_chunks/dep-b9c82189.js'); require('@babel/runtime/helpers/slicedToArray'); require('../../_chunks/dep-ce392f73.js'); require('@babel/runtime/helpers/defineProperty'); var select_utils_index = require('../utils/index.js'); require('../../_chunks/dep-b3ef977e.js'); require('../../config-provider/hooks/useConfig.js'); require('../../_chunks/dep-a64c9b8c.js'); require('../../_chunks/dep-aafbacfe.js'); require('dayjs'); require('../../_chunks/dep-c539b8cf.js'); require('../../_chunks/dep-bd404105.js'); require('../../_chunks/dep-5ed96ff4.js'); require('../../_chunks/dep-cd6733fb.js'); require('../../_chunks/dep-caa8987f.js'); require('../../_chunks/dep-5c730151.js'); require('../../_chunks/dep-b937ef62.js'); require('../../_chunks/dep-0ad5a5a6.js'); require('../../_chunks/dep-8e3205d4.js'); require('../../_chunks/dep-68ca5b5a.js'); require('../../_chunks/dep-ce54d478.js'); require('../../_chunks/dep-9b493151.js'); require('../../_chunks/dep-933eb47e.js'); require('../../_chunks/dep-01e6d254.js'); require('../../_chunks/dep-d3fa0c96.js'); require('../../_chunks/dep-f549ecb7.js'); require('../../_chunks/dep-5a252af6.js'); require('../../_chunks/dep-f4839f43.js'); require('../../_chunks/dep-330e6dfc.js'); require('../../_chunks/dep-af55a921.js'); require('@babel/runtime/helpers/createClass'); require('@babel/runtime/helpers/classCallCheck'); function useKeyboardControl(_ref) { var displayOptions = _ref.displayOptions, optionsList = _ref.optionsList, innerPopupVisible = _ref.innerPopupVisible, setInnerPopupVisible = _ref.setInnerPopupVisible, selectPanelRef = _ref.selectPanelRef, isFilterable = _ref.isFilterable, isRemoteSearch = _ref.isRemoteSearch, getSelectedOptions = _ref.getSelectedOptions, setInnerValue = _ref.setInnerValue, onCheckAllChange = _ref.onCheckAllChange, innerValue = _ref.innerValue, popupContentRef = _ref.popupContentRef, multiple = _ref.multiple, max = _ref.max, isCheckAll = _ref.isCheckAll; var hoverIndex = Vue.ref(-1); var filteredOptions = Vue.ref([]); var virtualFilteredOptions = Vue.ref([]); var classPrefix = index.usePrefixClass(); var handleKeyDown = function handleKeyDown(e) { var _optionsList$value$ne, _optionsList$value$ne2; var optionsListLength = displayOptions.value.length; var newIndex = hoverIndex.value; switch (e.code) { case "ArrowUp": e.preventDefault(); if (hoverIndex.value === -1) { newIndex = 0; } else if (hoverIndex.value === 0 || hoverIndex.value > displayOptions.value.length - 1) { newIndex = optionsListLength - 1; } else { newIndex--; } if ((_optionsList$value$ne = optionsList.value[newIndex]) !== null && _optionsList$value$ne !== void 0 && _optionsList$value$ne.disabled) { newIndex--; } hoverIndex.value = newIndex; break; case "ArrowDown": e.preventDefault(); if (hoverIndex.value === -1 || hoverIndex.value >= optionsListLength - 1) { newIndex = 0; } else { newIndex++; } if ((_optionsList$value$ne2 = optionsList.value[newIndex]) !== null && _optionsList$value$ne2 !== void 0 && _optionsList$value$ne2.disabled) { newIndex++; } hoverIndex.value = newIndex; break; case "Enter": if (hoverIndex.value === -1) break; var finalOptions = selectPanelRef.value.isVirtual && isFilterable.value && virtualFilteredOptions.value.length ? virtualFilteredOptions.value : isRemoteSearch.value ? optionsList.value : filteredOptions.value; if (!finalOptions.length) finalOptions = optionsList.value; if (!innerPopupVisible.value) { setInnerPopupVisible(true, { e: e }); break; } if (!multiple) { var selectedOptions = getSelectedOptions(finalOptions[hoverIndex.value].value); setInnerValue(finalOptions[hoverIndex.value].value, { option: selectedOptions === null || selectedOptions === void 0 ? void 0 : selectedOptions[0], selectedOptions: getSelectedOptions(finalOptions[hoverIndex.value].value), trigger: "check", e: e }); setInnerPopupVisible(false, { e: e }); } else { var _finalOptions$hoverIn; if (hoverIndex.value === -1) return; if (finalOptions[hoverIndex.value].checkAll) { onCheckAllChange(!isCheckAll.value); return; } var optionValue = (_finalOptions$hoverIn = finalOptions[hoverIndex.value]) === null || _finalOptions$hoverIn === void 0 ? void 0 : _finalOptions$hoverIn.value; if (!optionValue) return; var newValue = select_utils_index.getNewMultipleValue(innerValue.value, optionValue); if (max > 0 && newValue.value.length > max) return; var _selectedOptions = getSelectedOptions(newValue.value); setInnerValue(newValue.value, { option: _selectedOptions.find(function (v) { return v.value == optionValue; }), selectedOptions: _selectedOptions, trigger: newValue.isCheck ? "check" : "uncheck", e: e }); filteredOptions.value = []; } break; case "Escape": if (innerPopupVisible.value) { var _e$stopImmediatePropa; e === null || e === void 0 || (_e$stopImmediatePropa = e.stopImmediatePropagation) === null || _e$stopImmediatePropa === void 0 || _e$stopImmediatePropa.call(e); } setInnerPopupVisible(false, { e: e }); break; } }; Vue.watch(innerPopupVisible, function (value) { if (value) { hoverIndex.value = -1; virtualFilteredOptions.value = []; filteredOptions.value = []; } }); Vue.watch(hoverIndex, function (index) { var _selectPanelRef$value; var optionHeight = (_selectPanelRef$value = selectPanelRef.value) === null || _selectPanelRef$value === void 0 || (_selectPanelRef$value = _selectPanelRef$value.innerRef) === null || _selectPanelRef$value === void 0 || (_selectPanelRef$value = _selectPanelRef$value.querySelector(".".concat(classPrefix.value, "-select-option"))) === null || _selectPanelRef$value === void 0 ? void 0 : _selectPanelRef$value.clientHeight; var scrollHeight = optionHeight * index; popupContentRef.value.scrollTo({ top: scrollHeight, behavior: "smooth" }); }); return { hoverIndex: hoverIndex, handleKeyDown: handleKeyDown, virtualFilteredOptions: virtualFilteredOptions, filteredOptions: filteredOptions }; } exports.useKeyboardControl = useKeyboardControl; //# sourceMappingURL=useKeyboardControl.js.map