@rainbow-oh/yee-c 0.4.4 → 0.5.0
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.
- package/dist/cjs/Button/button.d.ts +1 -1
- package/dist/cjs/CSV/download.d.ts +1 -1
- package/dist/cjs/Carousel/carousel.d.ts +2 -2
- package/dist/cjs/Carousel/carousel.js +9 -2
- package/dist/cjs/Carousel/interface.d.ts +5 -0
- package/dist/cjs/Dialog/demo/basic.js +1 -1
- package/dist/cjs/Dialog/dialog.js +1 -1
- package/dist/cjs/Drawer/style/index.less +4 -0
- package/dist/cjs/Field/demo/validation.js +23 -3
- package/dist/cjs/Field/field.js +1 -1
- package/dist/cjs/FloatButton/float-button.d.ts +1 -1
- package/dist/cjs/Form/Field.js +1 -4
- package/dist/cjs/Form/Form.js +1 -1
- package/dist/cjs/Form/Group.js +36 -14
- package/dist/cjs/Form/List.js +23 -3
- package/dist/cjs/Form/demo/async-validate.d.ts +3 -0
- package/dist/cjs/Form/demo/async-validate.js +108 -0
- package/dist/cjs/Form/demo/basic.js +2 -2
- package/dist/cjs/Form/demo/virtual.js +1 -1
- package/dist/cjs/Form/form-store.d.ts +4 -4
- package/dist/cjs/Form/form-store.js +55 -25
- package/dist/cjs/Form/interface.d.ts +10 -7
- package/dist/cjs/Form/style/index.less +15 -0
- package/dist/cjs/Form/utils/validate.d.ts +23 -2
- package/dist/cjs/Form/utils/validate.js +59 -10
- package/dist/cjs/Input/style/index.less +0 -17
- package/dist/cjs/InputNumber/style/index.less +0 -29
- package/dist/cjs/PickerPanel/interface.d.ts +44 -2
- package/dist/cjs/PickerPanel/panels/DatePanel/DateBody.d.ts +2 -1
- package/dist/cjs/PickerPanel/panels/DatePanel/DateHeader.d.ts +2 -1
- package/dist/cjs/PickerPanel/panels/DatePanel/DateHeader.js +1 -1
- package/dist/cjs/PickerPanel/panels/DatePanel/index.d.ts +2 -1
- package/dist/cjs/PickerPanel/panels/DateTimePanel/index.d.ts +7 -1
- package/dist/cjs/PickerPanel/panels/DateTimePanel/index.js +18 -4
- package/dist/cjs/PickerPanel/panels/DecadePanel/DecadeBody.d.ts +2 -1
- package/dist/cjs/PickerPanel/panels/DecadePanel/DecadeBody.js +1 -1
- package/dist/cjs/PickerPanel/panels/DecadePanel/DecadeHeader.d.ts +2 -1
- package/dist/cjs/PickerPanel/panels/DecadePanel/DecadeHeader.js +1 -1
- package/dist/cjs/PickerPanel/panels/DecadePanel/index.d.ts +2 -1
- package/dist/cjs/PickerPanel/panels/DecadePanel/index.js +1 -1
- package/dist/cjs/PickerPanel/panels/Header.d.ts +13 -1
- package/dist/cjs/PickerPanel/panels/MonthPanel/MonthBody.d.ts +2 -1
- package/dist/cjs/PickerPanel/panels/MonthPanel/MonthHeader.d.ts +2 -1
- package/dist/cjs/PickerPanel/panels/MonthPanel/MonthHeader.js +1 -1
- package/dist/cjs/PickerPanel/panels/MonthPanel/index.d.ts +2 -1
- package/dist/cjs/PickerPanel/panels/MonthPanel/index.js +1 -1
- package/dist/cjs/PickerPanel/panels/PanelBody.d.ts +21 -1
- package/dist/cjs/PickerPanel/panels/PanelBody.js +3 -3
- package/dist/cjs/PickerPanel/panels/QuarterPanel/QuarterBody.d.ts +2 -1
- package/dist/cjs/PickerPanel/panels/QuarterPanel/QuarterHeader.d.ts +2 -1
- package/dist/cjs/PickerPanel/panels/QuarterPanel/index.d.ts +2 -1
- package/dist/cjs/PickerPanel/panels/RangePanel/index.d.ts +2 -1
- package/dist/cjs/PickerPanel/panels/RangePanel/index.js +2 -2
- package/dist/cjs/PickerPanel/panels/RangePanel/interface.d.ts +5 -5
- package/dist/cjs/PickerPanel/panels/TimePanel/TimeBody.d.ts +17 -1
- package/dist/cjs/PickerPanel/panels/TimePanel/TimeCell.d.ts +7 -1
- package/dist/cjs/PickerPanel/panels/TimePanel/TimeCell.js +1 -1
- package/dist/cjs/PickerPanel/panels/TimePanel/TimeColumn.d.ts +14 -1
- package/dist/cjs/PickerPanel/panels/TimePanel/TimeColumn.js +1 -1
- package/dist/cjs/PickerPanel/panels/TimePanel/TimeHeader.d.ts +4 -1
- package/dist/cjs/PickerPanel/panels/TimePanel/index.d.ts +9 -1
- package/dist/cjs/PickerPanel/panels/WeekPanel/WeekBody.d.ts +2 -1
- package/dist/cjs/PickerPanel/panels/WeekPanel/WeekHeader.d.ts +2 -1
- package/dist/cjs/PickerPanel/panels/WeekPanel/index.d.ts +2 -1
- package/dist/cjs/PickerPanel/panels/YearPanel/YearBody.d.ts +2 -1
- package/dist/cjs/PickerPanel/panels/YearPanel/YearBody.js +2 -2
- package/dist/cjs/PickerPanel/panels/YearPanel/YearHeader.d.ts +2 -1
- package/dist/cjs/PickerPanel/panels/YearPanel/YearHeader.js +7 -1
- package/dist/cjs/PickerPanel/panels/YearPanel/index.d.ts +2 -1
- package/dist/cjs/PickerPanel/panels/YearPanel/index.js +1 -1
- package/dist/cjs/PickerPanel/utils/pickerUtils.d.ts +7 -7
- package/dist/cjs/PickerPanel/utils/pickerUtils.js +2 -2
- package/dist/cjs/Select/demo/basic.js +1 -1
- package/dist/cjs/Select/demo/virtual.d.ts +3 -0
- package/dist/cjs/Select/demo/virtual.js +55 -0
- package/dist/cjs/Select/hooks/useSelectKeyboard.d.ts +7 -1
- package/dist/cjs/Select/hooks/useSelectKeyboard.js +16 -6
- package/dist/cjs/Select/interface.d.ts +44 -0
- package/dist/cjs/Select/option.js +3 -2
- package/dist/cjs/Select/options.js +115 -15
- package/dist/cjs/Select/select.js +20 -4
- package/dist/cjs/Select/style/index.less +17 -13
- package/dist/cjs/Selector/style/index.less +2 -137
- package/dist/cjs/Table/style/index.less +19 -0
- package/dist/cjs/TextArea/style/index.less +0 -17
- package/dist/cjs/hooks/index.d.ts +2 -1
- package/dist/cjs/hooks/index.js +3 -1
- package/dist/cjs/hooks/useEvent.js +4 -1
- package/dist/cjs/hooks/useVirtualList.d.ts +71 -0
- package/dist/cjs/hooks/useVirtualList.js +117 -0
- package/dist/cjs/style/size.css +1 -0
- package/dist/cjs/style/themes.css +1 -1
- package/dist/cjs/style/variables.css +2 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/Button/button.d.ts +1 -1
- package/dist/esm/CSV/download.d.ts +1 -1
- package/dist/esm/Carousel/carousel.d.ts +2 -2
- package/dist/esm/Carousel/carousel.js +5 -1
- package/dist/esm/Carousel/interface.d.ts +5 -0
- package/dist/esm/Dialog/demo/basic.js +1 -1
- package/dist/esm/Dialog/dialog.js +1 -1
- package/dist/esm/Drawer/style/index.less +4 -0
- package/dist/esm/Field/demo/validation.js +30 -9
- package/dist/esm/Field/field.js +2 -1
- package/dist/esm/FloatButton/float-button.d.ts +1 -1
- package/dist/esm/Form/Field.js +3 -4
- package/dist/esm/Form/Form.js +1 -1
- package/dist/esm/Form/Group.js +142 -53
- package/dist/esm/Form/List.js +61 -42
- package/dist/esm/Form/demo/async-validate.d.ts +3 -0
- package/dist/esm/Form/demo/async-validate.js +95 -0
- package/dist/esm/Form/demo/basic.js +4 -2
- package/dist/esm/Form/demo/virtual.js +1 -1
- package/dist/esm/Form/form-store.d.ts +4 -4
- package/dist/esm/Form/form-store.js +187 -93
- package/dist/esm/Form/interface.d.ts +10 -7
- package/dist/esm/Form/style/index.less +15 -0
- package/dist/esm/Form/utils/validate.d.ts +23 -2
- package/dist/esm/Form/utils/validate.js +122 -17
- package/dist/esm/Input/style/index.less +0 -17
- package/dist/esm/InputNumber/style/index.less +0 -29
- package/dist/esm/PickerPanel/interface.d.ts +44 -2
- package/dist/esm/PickerPanel/panels/DatePanel/DateBody.d.ts +2 -1
- package/dist/esm/PickerPanel/panels/DatePanel/DateHeader.d.ts +2 -1
- package/dist/esm/PickerPanel/panels/DatePanel/DateHeader.js +1 -1
- package/dist/esm/PickerPanel/panels/DatePanel/index.d.ts +2 -1
- package/dist/esm/PickerPanel/panels/DateTimePanel/index.d.ts +7 -1
- package/dist/esm/PickerPanel/panels/DateTimePanel/index.js +11 -7
- package/dist/esm/PickerPanel/panels/DecadePanel/DecadeBody.d.ts +2 -1
- package/dist/esm/PickerPanel/panels/DecadePanel/DecadeBody.js +2 -1
- package/dist/esm/PickerPanel/panels/DecadePanel/DecadeHeader.d.ts +2 -1
- package/dist/esm/PickerPanel/panels/DecadePanel/DecadeHeader.js +2 -1
- package/dist/esm/PickerPanel/panels/DecadePanel/index.d.ts +2 -1
- package/dist/esm/PickerPanel/panels/DecadePanel/index.js +1 -1
- package/dist/esm/PickerPanel/panels/Header.d.ts +13 -1
- package/dist/esm/PickerPanel/panels/MonthPanel/MonthBody.d.ts +2 -1
- package/dist/esm/PickerPanel/panels/MonthPanel/MonthHeader.d.ts +2 -1
- package/dist/esm/PickerPanel/panels/MonthPanel/MonthHeader.js +2 -1
- package/dist/esm/PickerPanel/panels/MonthPanel/index.d.ts +2 -1
- package/dist/esm/PickerPanel/panels/MonthPanel/index.js +1 -1
- package/dist/esm/PickerPanel/panels/PanelBody.d.ts +21 -1
- package/dist/esm/PickerPanel/panels/PanelBody.js +2 -4
- package/dist/esm/PickerPanel/panels/QuarterPanel/QuarterBody.d.ts +2 -1
- package/dist/esm/PickerPanel/panels/QuarterPanel/QuarterHeader.d.ts +2 -1
- package/dist/esm/PickerPanel/panels/QuarterPanel/index.d.ts +2 -1
- package/dist/esm/PickerPanel/panels/RangePanel/index.d.ts +2 -1
- package/dist/esm/PickerPanel/panels/RangePanel/index.js +2 -2
- package/dist/esm/PickerPanel/panels/RangePanel/interface.d.ts +5 -5
- package/dist/esm/PickerPanel/panels/TimePanel/TimeBody.d.ts +17 -1
- package/dist/esm/PickerPanel/panels/TimePanel/TimeCell.d.ts +7 -1
- package/dist/esm/PickerPanel/panels/TimePanel/TimeCell.js +1 -1
- package/dist/esm/PickerPanel/panels/TimePanel/TimeColumn.d.ts +14 -1
- package/dist/esm/PickerPanel/panels/TimePanel/TimeColumn.js +1 -1
- package/dist/esm/PickerPanel/panels/TimePanel/TimeHeader.d.ts +4 -1
- package/dist/esm/PickerPanel/panels/TimePanel/index.d.ts +9 -1
- package/dist/esm/PickerPanel/panels/WeekPanel/WeekBody.d.ts +2 -1
- package/dist/esm/PickerPanel/panels/WeekPanel/WeekHeader.d.ts +2 -1
- package/dist/esm/PickerPanel/panels/WeekPanel/index.d.ts +2 -1
- package/dist/esm/PickerPanel/panels/YearPanel/YearBody.d.ts +2 -1
- package/dist/esm/PickerPanel/panels/YearPanel/YearBody.js +3 -2
- package/dist/esm/PickerPanel/panels/YearPanel/YearHeader.d.ts +2 -1
- package/dist/esm/PickerPanel/panels/YearPanel/YearHeader.js +2 -1
- package/dist/esm/PickerPanel/panels/YearPanel/index.d.ts +2 -1
- package/dist/esm/PickerPanel/panels/YearPanel/index.js +1 -1
- package/dist/esm/PickerPanel/picker-panel.js +3 -0
- package/dist/esm/PickerPanel/utils/pickerUtils.d.ts +7 -7
- package/dist/esm/PickerPanel/utils/pickerUtils.js +4 -10
- package/dist/esm/Select/demo/basic.js +1 -1
- package/dist/esm/Select/demo/virtual.d.ts +3 -0
- package/dist/esm/Select/demo/virtual.js +38 -0
- package/dist/esm/Select/hooks/useSelectKeyboard.d.ts +7 -1
- package/dist/esm/Select/hooks/useSelectKeyboard.js +25 -9
- package/dist/esm/Select/interface.d.ts +44 -0
- package/dist/esm/Select/option.js +4 -2
- package/dist/esm/Select/options.js +132 -13
- package/dist/esm/Select/select.js +19 -4
- package/dist/esm/Select/style/index.less +17 -13
- package/dist/esm/Selector/style/index.less +2 -137
- package/dist/esm/Table/style/index.less +19 -0
- package/dist/esm/TextArea/style/index.less +0 -17
- package/dist/esm/hooks/index.d.ts +2 -1
- package/dist/esm/hooks/index.js +2 -1
- package/dist/esm/hooks/useVirtualList.d.ts +71 -0
- package/dist/esm/hooks/useVirtualList.js +129 -0
- package/dist/esm/style/size.css +1 -0
- package/dist/esm/style/themes.css +1 -1
- package/dist/esm/style/variables.css +2 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/umd/yee-c.min.css +2 -2
- package/dist/umd/yee-c.min.js +1 -1
- package/package.json +1 -1
- package/src/Carousel/carousel.tsx +14 -3
- package/src/Carousel/interface.ts +6 -0
- package/src/Cascader/cascader.tsx +3 -1
- package/src/Cascader/column.tsx +1 -1
- package/src/Dialog/demo/basic.tsx +1 -1
- package/src/Dialog/dialog.tsx +1 -1
- package/src/Drawer/style/index.less +4 -0
- package/src/Dropdown/dropdown.tsx +1 -1
- package/src/Field/demo/validation.tsx +2 -2
- package/src/Field/field.tsx +2 -1
- package/src/Field/index.en-US.md +1 -1
- package/src/Field/index.zh-CN.md +1 -1
- package/src/FloatButton/float-button.tsx +5 -3
- package/src/Form/Field.tsx +3 -4
- package/src/Form/Form.tsx +1 -1
- package/src/Form/Group.tsx +15 -12
- package/src/Form/List.tsx +3 -3
- package/src/Form/demo/async-validate.tsx +71 -0
- package/src/Form/demo/basic.tsx +2 -2
- package/src/Form/demo/virtual.tsx +1 -1
- package/src/Form/form-store.ts +37 -21
- package/src/Form/index.en-US.md +6 -5
- package/src/Form/index.zh-CN.md +6 -5
- package/src/Form/interface.ts +13 -7
- package/src/Form/style/index.less +15 -0
- package/src/Form/utils/validate.ts +65 -13
- package/src/Input/style/index.less +0 -17
- package/src/InputNumber/style/index.less +0 -29
- package/src/PickerPanel/interface.ts +43 -2
- package/src/PickerPanel/panels/DatePanel/DateBody.tsx +2 -1
- package/src/PickerPanel/panels/DatePanel/DateHeader.tsx +3 -2
- package/src/PickerPanel/panels/DatePanel/index.tsx +2 -1
- package/src/PickerPanel/panels/DateTimePanel/index.tsx +12 -5
- package/src/PickerPanel/panels/DecadePanel/DecadeBody.tsx +3 -2
- package/src/PickerPanel/panels/DecadePanel/DecadeHeader.tsx +3 -2
- package/src/PickerPanel/panels/DecadePanel/index.tsx +3 -2
- package/src/PickerPanel/panels/Header.tsx +14 -1
- package/src/PickerPanel/panels/MonthPanel/MonthBody.tsx +2 -1
- package/src/PickerPanel/panels/MonthPanel/MonthHeader.tsx +3 -2
- package/src/PickerPanel/panels/MonthPanel/index.tsx +3 -2
- package/src/PickerPanel/panels/PanelBody.tsx +27 -5
- package/src/PickerPanel/panels/QuarterPanel/QuarterBody.tsx +2 -1
- package/src/PickerPanel/panels/QuarterPanel/QuarterHeader.tsx +2 -1
- package/src/PickerPanel/panels/QuarterPanel/index.tsx +2 -1
- package/src/PickerPanel/panels/RangePanel/index.tsx +11 -9
- package/src/PickerPanel/panels/RangePanel/interface.ts +5 -5
- package/src/PickerPanel/panels/TimePanel/TimeBody.tsx +21 -5
- package/src/PickerPanel/panels/TimePanel/TimeCell.tsx +9 -2
- package/src/PickerPanel/panels/TimePanel/TimeColumn.tsx +15 -2
- package/src/PickerPanel/panels/TimePanel/TimeHeader.tsx +5 -1
- package/src/PickerPanel/panels/TimePanel/index.tsx +10 -1
- package/src/PickerPanel/panels/WeekPanel/WeekBody.tsx +2 -1
- package/src/PickerPanel/panels/WeekPanel/WeekHeader.tsx +2 -1
- package/src/PickerPanel/panels/WeekPanel/index.tsx +2 -1
- package/src/PickerPanel/panels/YearPanel/YearBody.tsx +4 -3
- package/src/PickerPanel/panels/YearPanel/YearHeader.tsx +9 -3
- package/src/PickerPanel/panels/YearPanel/index.tsx +3 -2
- package/src/PickerPanel/picker-panel.tsx +5 -3
- package/src/PickerPanel/utils/pickerUtils.ts +17 -8
- package/src/Select/demo/basic.tsx +1 -1
- package/src/Select/demo/virtual.tsx +25 -0
- package/src/Select/hooks/useSelectKeyboard.ts +30 -6
- package/src/Select/index.en-US.md +4 -0
- package/src/Select/index.zh-CN.md +4 -0
- package/src/Select/interface.ts +48 -2
- package/src/Select/option.tsx +2 -1
- package/src/Select/options.tsx +139 -8
- package/src/Select/select.tsx +23 -1
- package/src/Select/style/index.less +17 -13
- package/src/Selector/style/index.less +2 -137
- package/src/Splitter/hooks/useMove.ts +2 -2
- package/src/Table/style/index.less +19 -0
- package/src/TextArea/style/index.less +0 -17
- package/src/hooks/index.ts +2 -0
- package/src/hooks/useEvent.ts +7 -4
- package/src/hooks/useMergedState.ts +6 -4
- package/src/hooks/useVirtualList.ts +169 -0
- package/src/style/size.css +1 -0
- package/src/version.ts +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var _excluded = ["prefixCls", "options", "placement", "mode", "value", "defaultValue", "optionFilterProp", "disabled", "onChange", "onFilter"];
|
|
1
|
+
var _excluded = ["prefixCls", "options", "placement", "mode", "value", "defaultValue", "optionFilterProp", "disabled", "onChange", "onFilter", "virtual", "itemHeight", "listHeight"];
|
|
2
2
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
3
3
|
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
4
4
|
function _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."); }
|
|
@@ -13,7 +13,7 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
|
13
13
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
14
14
|
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
15
15
|
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
16
|
-
import React, { useContext, useMemo, useRef, useState } from 'react';
|
|
16
|
+
import React, { useCallback, useContext, useMemo, useRef, useState } from 'react';
|
|
17
17
|
import { GlobalContext } from "../Config-Provider";
|
|
18
18
|
import Selector from "../Selector";
|
|
19
19
|
import Trigger from "../Trigger";
|
|
@@ -40,6 +40,9 @@ var Select = function Select(baseprops) {
|
|
|
40
40
|
disabled = props.disabled,
|
|
41
41
|
onChange = props.onChange,
|
|
42
42
|
onFilter = props.onFilter,
|
|
43
|
+
virtual = props.virtual,
|
|
44
|
+
itemHeight = props.itemHeight,
|
|
45
|
+
listHeight = props.listHeight,
|
|
43
46
|
rest = _objectWithoutProperties(props, _excluded);
|
|
44
47
|
var single = mode !== 'multiple' && mode !== 'tags' ? true : false;
|
|
45
48
|
var handleState = function handleState(value) {
|
|
@@ -68,6 +71,13 @@ var Select = function Select(baseprops) {
|
|
|
68
71
|
open = _useState4[0],
|
|
69
72
|
setOpen = _useState4[1];
|
|
70
73
|
var popupRef = useRef(null);
|
|
74
|
+
// Holds the virtual list API exposed by <Options>, so keyboard navigation
|
|
75
|
+
// can drive the virtual viewport (only populated when `virtual` is on).
|
|
76
|
+
var virtualApiRef = useRef(null);
|
|
77
|
+
var handleVirtualScrollToIndex = useCallback(function (index) {
|
|
78
|
+
var _virtualApiRef$curren;
|
|
79
|
+
(_virtualApiRef$curren = virtualApiRef.current) === null || _virtualApiRef$curren === void 0 || _virtualApiRef$curren.scrollToIndex(index);
|
|
80
|
+
}, []);
|
|
71
81
|
var getOptions = function getOptions(keys) {
|
|
72
82
|
if (keys === '' || keys === null) {
|
|
73
83
|
return undefined;
|
|
@@ -150,7 +160,8 @@ var Select = function Select(baseprops) {
|
|
|
150
160
|
return setOpen(false);
|
|
151
161
|
},
|
|
152
162
|
onOpenChange: handleOpenChange,
|
|
153
|
-
containerRef: popupRef
|
|
163
|
+
containerRef: popupRef,
|
|
164
|
+
scrollToIndex: virtual ? handleVirtualScrollToIndex : undefined
|
|
154
165
|
}),
|
|
155
166
|
focusedKey = _useSelectKeyboard.focusedKey,
|
|
156
167
|
onKeyDown = _useSelectKeyboard.onKeyDown;
|
|
@@ -162,7 +173,11 @@ var Select = function Select(baseprops) {
|
|
|
162
173
|
selectedKeys: mergedValue,
|
|
163
174
|
dataTestId: rest['data-testid'],
|
|
164
175
|
onSelect: handleSelect,
|
|
165
|
-
ref: popupRef
|
|
176
|
+
ref: popupRef,
|
|
177
|
+
virtual: virtual,
|
|
178
|
+
itemHeight: itemHeight,
|
|
179
|
+
listHeight: listHeight,
|
|
180
|
+
virtualApiRef: virtualApiRef
|
|
166
181
|
});
|
|
167
182
|
return /*#__PURE__*/React.createElement(Trigger, _extends({}, rest, {
|
|
168
183
|
placement: placement,
|
|
@@ -8,6 +8,17 @@
|
|
|
8
8
|
overflow: auto;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
+
// Virtual mode: the popup no longer scrolls itself; the inner viewport does.
|
|
12
|
+
// Without this override there would be two scrollbars.
|
|
13
|
+
&-popup-virtual {
|
|
14
|
+
max-height: none;
|
|
15
|
+
overflow: visible;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
&-popup-viewport {
|
|
19
|
+
overflow-y: auto;
|
|
20
|
+
}
|
|
21
|
+
|
|
11
22
|
&-option {
|
|
12
23
|
display: flex;
|
|
13
24
|
padding: var(--yee-select-option-padding);
|
|
@@ -37,20 +48,13 @@
|
|
|
37
48
|
}
|
|
38
49
|
}
|
|
39
50
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
// form error status
|
|
46
|
-
.yee-form-item-error {
|
|
47
|
-
@{pls} {
|
|
48
|
-
border-color: var(--yee-error-color);
|
|
51
|
+
// In virtual mode each option has a fixed inline height; center its content
|
|
52
|
+
// vertically so it stays aligned regardless of the inherited line-height.
|
|
53
|
+
&-popup-virtual &-option {
|
|
54
|
+
align-items: center;
|
|
49
55
|
}
|
|
50
|
-
}
|
|
51
56
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
border-color: var(--yee-warning-color);
|
|
57
|
+
&-empty {
|
|
58
|
+
padding: var(--yee-select-option-padding);
|
|
55
59
|
}
|
|
56
60
|
}
|
|
@@ -5,8 +5,7 @@
|
|
|
5
5
|
box-sizing: border-box;
|
|
6
6
|
width: 100%;
|
|
7
7
|
padding: var(--yee-selector-padding);
|
|
8
|
-
border: var(--yee-selector-border-width) solid
|
|
9
|
-
var(--yee-selector-border-color);
|
|
8
|
+
border: var(--yee-selector-border-width) solid var(--yee-input-border-color);
|
|
10
9
|
border-radius: var(--yee-selector-border-radius);
|
|
11
10
|
|
|
12
11
|
&-small {
|
|
@@ -145,7 +144,7 @@
|
|
|
145
144
|
|
|
146
145
|
&:not(@{pls}-disabled) {
|
|
147
146
|
&:hover {
|
|
148
|
-
border-color: var(--yee-
|
|
147
|
+
border-color: var(--yee-input-hover-border-color);
|
|
149
148
|
}
|
|
150
149
|
}
|
|
151
150
|
|
|
@@ -206,137 +205,3 @@
|
|
|
206
205
|
}
|
|
207
206
|
}
|
|
208
207
|
}
|
|
209
|
-
|
|
210
|
-
// .yee-tags-searchable {
|
|
211
|
-
// cursor: text;
|
|
212
|
-
|
|
213
|
-
// .yee-tags-input-wrapper {
|
|
214
|
-
// width: 100%;
|
|
215
|
-
// padding: 0;
|
|
216
|
-
// border: none;
|
|
217
|
-
// outline: none;
|
|
218
|
-
|
|
219
|
-
// &:focus {
|
|
220
|
-
// border: none;
|
|
221
|
-
// box-shadow: none;
|
|
222
|
-
// }
|
|
223
|
-
// }
|
|
224
|
-
|
|
225
|
-
// .yee-tags-icon {
|
|
226
|
-
// width: auto;
|
|
227
|
-
// }
|
|
228
|
-
// }
|
|
229
|
-
|
|
230
|
-
// .yee-tags-single-mode {
|
|
231
|
-
// height: var(--yee-tags-height);
|
|
232
|
-
|
|
233
|
-
// .yee-tags-input-container {
|
|
234
|
-
// position: absolute;
|
|
235
|
-
// z-index: -1;
|
|
236
|
-
// width: 100%;
|
|
237
|
-
// font-size: var(--yee-tags-input-font-size);
|
|
238
|
-
// line-height: var(--yee-tags-input-line-height);
|
|
239
|
-
|
|
240
|
-
// input {
|
|
241
|
-
// width: 100%;
|
|
242
|
-
// }
|
|
243
|
-
// }
|
|
244
|
-
|
|
245
|
-
// &.yee-tags-searchable {
|
|
246
|
-
// .yee-tags-single-option {
|
|
247
|
-
// width: 100%;
|
|
248
|
-
// }
|
|
249
|
-
|
|
250
|
-
// .yee-tags-container {
|
|
251
|
-
// &:focus-within,
|
|
252
|
-
// &:focus {
|
|
253
|
-
// .yee-tags-input-container {
|
|
254
|
-
// z-index: 1;
|
|
255
|
-
// opacity: var(--yee-tags-input-focus-opacity);
|
|
256
|
-
|
|
257
|
-
// &.has-value {
|
|
258
|
-
// opacity: 1;
|
|
259
|
-
|
|
260
|
-
// + .yee-tags-single-option {
|
|
261
|
-
// display: none;
|
|
262
|
-
// }
|
|
263
|
-
// }
|
|
264
|
-
// }
|
|
265
|
-
|
|
266
|
-
// .yee-tags-single-option {
|
|
267
|
-
// opacity: var(--yee-tags-single-option-focus-opacity);
|
|
268
|
-
// }
|
|
269
|
-
// }
|
|
270
|
-
// }
|
|
271
|
-
// }
|
|
272
|
-
// }
|
|
273
|
-
|
|
274
|
-
// .yee-tags-multi-mode {
|
|
275
|
-
// height: auto;
|
|
276
|
-
// min-height: var(--yee-tags-multi-min-height);
|
|
277
|
-
|
|
278
|
-
// &.yee-tags-searchable {
|
|
279
|
-
// .yee-tag {
|
|
280
|
-
// max-width: var(--yee-tags-multi-tag-max-width);
|
|
281
|
-
// height: var(--yee-tags-multi-tag-height);
|
|
282
|
-
// }
|
|
283
|
-
// }
|
|
284
|
-
|
|
285
|
-
// .yee-tags-container {
|
|
286
|
-
// flex-wrap: wrap;
|
|
287
|
-
// }
|
|
288
|
-
|
|
289
|
-
// .yee-tags-input-container {
|
|
290
|
-
// display: inline-grid;
|
|
291
|
-
// // color: var(--yee-tags-input-container-font-color);
|
|
292
|
-
// flex: 1 1 auto;
|
|
293
|
-
// grid-area: 1 / 1 / 2 / 3;
|
|
294
|
-
// grid-template-columns: 0 min-content;
|
|
295
|
-
// box-sizing: border-box;
|
|
296
|
-
// height: var(--yee-tags-multi-input-height);
|
|
297
|
-
|
|
298
|
-
// &::after {
|
|
299
|
-
// grid-area: 1 / 2 / auto / auto;
|
|
300
|
-
// min-width: var(--yee-tags-multi-input-after-min-width);
|
|
301
|
-
// margin: 0;
|
|
302
|
-
// padding: 0;
|
|
303
|
-
// font: inherit;
|
|
304
|
-
// white-space: pre;
|
|
305
|
-
// border: 0;
|
|
306
|
-
// outline: 0;
|
|
307
|
-
// visibility: hidden;
|
|
308
|
-
// content: attr(data-value) ' ';
|
|
309
|
-
// }
|
|
310
|
-
|
|
311
|
-
// & > input {
|
|
312
|
-
// grid-area: 1 / 2 / auto / auto;
|
|
313
|
-
// width: 100%;
|
|
314
|
-
// min-width: var(--yee-tags-multi-input-min-width);
|
|
315
|
-
// height: var(--yee-tags-multi-input-height);
|
|
316
|
-
// margin: 0;
|
|
317
|
-
// padding: 0;
|
|
318
|
-
// font: inherit;
|
|
319
|
-
// background-color: transparent;
|
|
320
|
-
// border: 0;
|
|
321
|
-
// outline: 0;
|
|
322
|
-
// opacity: 1;
|
|
323
|
-
// }
|
|
324
|
-
// }
|
|
325
|
-
// }
|
|
326
|
-
|
|
327
|
-
// form error status
|
|
328
|
-
.yee-form-item-error {
|
|
329
|
-
@{pls} {
|
|
330
|
-
border-color: var(--yee-error-color);
|
|
331
|
-
|
|
332
|
-
&:hover {
|
|
333
|
-
border-color: var(--yee-error-color-hover);
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
.yee-form-item-warning {
|
|
339
|
-
@{pls} {
|
|
340
|
-
border-color: var(--yee-warning-color);
|
|
341
|
-
}
|
|
342
|
-
}
|
|
@@ -23,13 +23,32 @@
|
|
|
23
23
|
var(--yee-table-tbody-td-borderbottom-color);
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
|
+
|
|
27
|
+
@{pls}-cell {
|
|
28
|
+
&::before {
|
|
29
|
+
display: none;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
26
32
|
}
|
|
27
33
|
|
|
28
34
|
&-thead {
|
|
29
35
|
color: var(--yee-table-thead-color);
|
|
30
36
|
|
|
31
37
|
@{pls}-cell {
|
|
38
|
+
position: relative;
|
|
32
39
|
background-color: var(--yee-table-thead-bg-color);
|
|
40
|
+
|
|
41
|
+
&:not(:last-child):not(@{pls}-expand-col) {
|
|
42
|
+
&::before {
|
|
43
|
+
position: absolute;
|
|
44
|
+
content: '';
|
|
45
|
+
width: 1.5px;
|
|
46
|
+
height: 30%;
|
|
47
|
+
top: 35%;
|
|
48
|
+
right: 0;
|
|
49
|
+
background-color: var(--yee-table-head-cell-split-line-color, #eee);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
33
52
|
}
|
|
34
53
|
|
|
35
54
|
&-cell {
|
|
@@ -98,20 +98,3 @@
|
|
|
98
98
|
cursor: not-allowed;
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
|
-
|
|
102
|
-
// form error status
|
|
103
|
-
.yee-form-item-error {
|
|
104
|
-
@{pls} {
|
|
105
|
-
border-color: var(--yee-error-color);
|
|
106
|
-
|
|
107
|
-
&:hover {
|
|
108
|
-
border-color: var(--yee-error-color-hover);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
.yee-form-item-warning {
|
|
114
|
-
@{pls} {
|
|
115
|
-
border-color: var(--yee-warning-color);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
@@ -16,4 +16,5 @@ import useMount from './useMount';
|
|
|
16
16
|
import usePrevious from './usePrevious';
|
|
17
17
|
import useUpdateEffect from './useUpdateEffect';
|
|
18
18
|
import useVirtualForm from './useVirtualForm';
|
|
19
|
-
|
|
19
|
+
import useVirtualList from './useVirtualList';
|
|
20
|
+
export { useBreakpoint, useDebounceFunction, useDebounceValue, useDeepCompareEffect, useDeepCompareMemo, useDeepCompareMemoize, useDelayState, useEsc, useEvent, useIntersectionObserver, useKeyControl, useLatest, useLayoutEffect, useMergedState, useMount, usePrevious, useUpdateEffect, useVirtualForm, useVirtualList, };
|
package/dist/esm/hooks/index.js
CHANGED
|
@@ -16,4 +16,5 @@ import useMount from "./useMount";
|
|
|
16
16
|
import usePrevious from "./usePrevious";
|
|
17
17
|
import useUpdateEffect from "./useUpdateEffect";
|
|
18
18
|
import useVirtualForm from "./useVirtualForm";
|
|
19
|
-
|
|
19
|
+
import useVirtualList from "./useVirtualList";
|
|
20
|
+
export { useBreakpoint, useDebounceFunction, useDebounceValue, useDeepCompareEffect, useDeepCompareMemo, useDeepCompareMemoize, useDelayState, useEsc, useEvent, useIntersectionObserver, useKeyControl, useLatest, useLayoutEffect, useMergedState, useMount, usePrevious, useUpdateEffect, useVirtualForm, useVirtualList };
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface UseVirtualListOptions {
|
|
3
|
+
/**
|
|
4
|
+
* Total number of items in the list.
|
|
5
|
+
*/
|
|
6
|
+
itemCount: number;
|
|
7
|
+
/**
|
|
8
|
+
* Fixed height of every item in pixels.
|
|
9
|
+
*/
|
|
10
|
+
itemHeight: number;
|
|
11
|
+
/**
|
|
12
|
+
* Extra items rendered above and below the visible window
|
|
13
|
+
* to avoid white flashes while scrolling.
|
|
14
|
+
* @default 4
|
|
15
|
+
*/
|
|
16
|
+
overscan?: number;
|
|
17
|
+
}
|
|
18
|
+
export interface UseVirtualListResult {
|
|
19
|
+
/**
|
|
20
|
+
* Inclusive start index of the render window (already includes overscan).
|
|
21
|
+
*/
|
|
22
|
+
start: number;
|
|
23
|
+
/**
|
|
24
|
+
* Exclusive end index of the render window (already includes overscan).
|
|
25
|
+
*/
|
|
26
|
+
end: number;
|
|
27
|
+
/**
|
|
28
|
+
* Vertical offset to apply to the rendered block, equal to `start * itemHeight`.
|
|
29
|
+
* Use it as `transform: translateY(offsetY)` or `top: offsetY`.
|
|
30
|
+
*/
|
|
31
|
+
offsetY: number;
|
|
32
|
+
/**
|
|
33
|
+
* Total scrollable height, equal to `itemCount * itemHeight`.
|
|
34
|
+
* Apply it to the inner spacer element so the scrollbar matches the full list.
|
|
35
|
+
*/
|
|
36
|
+
totalHeight: number;
|
|
37
|
+
/**
|
|
38
|
+
* Ref to bind to the scroll container element.
|
|
39
|
+
*/
|
|
40
|
+
viewportRef: React.RefObject<HTMLDivElement | null>;
|
|
41
|
+
/**
|
|
42
|
+
* Stable scroll handler (rAF-throttled). Bind to the viewport's `onScroll`.
|
|
43
|
+
*/
|
|
44
|
+
onScroll: () => void;
|
|
45
|
+
/**
|
|
46
|
+
* Scroll the viewport so that the item at `index` is visible.
|
|
47
|
+
* Used by keyboard navigation to replace `scrollIntoView`.
|
|
48
|
+
*/
|
|
49
|
+
scrollToIndex: (index: number) => void;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Fixed-height virtual scrolling hook.
|
|
53
|
+
*
|
|
54
|
+
* Renders only the items inside the visible window (plus an `overscan` buffer)
|
|
55
|
+
* and keeps the DOM node count constant regardless of `itemCount`.
|
|
56
|
+
*
|
|
57
|
+
* Usage:
|
|
58
|
+
* const { start, end, offsetY, totalHeight, viewportRef, onScroll, scrollToIndex } =
|
|
59
|
+
* useVirtualList({ itemCount, itemHeight });
|
|
60
|
+
*
|
|
61
|
+
* <div ref={viewportRef} onScroll={onScroll} style={{ maxHeight: 200, overflowY: 'auto' }}>
|
|
62
|
+
* <div style={{ height: totalHeight, position: 'relative' }}>
|
|
63
|
+
* {items.slice(start, end).map((it, i) => (
|
|
64
|
+
* <div key={it.key} style={{ position: 'absolute', height: itemHeight, transform: `translateY(${offsetY + i * itemHeight}px)` }}>
|
|
65
|
+
* {it.content}
|
|
66
|
+
* </div>
|
|
67
|
+
* ))}
|
|
68
|
+
* </div>
|
|
69
|
+
* </div>
|
|
70
|
+
*/
|
|
71
|
+
export default function useVirtualList({ itemCount, itemHeight, overscan, }: UseVirtualListOptions): UseVirtualListResult;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
2
|
+
function _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."); }
|
|
3
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
4
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
5
|
+
function _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; } }
|
|
6
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
7
|
+
import { useEffect, useRef, useState } from 'react';
|
|
8
|
+
import useEvent from "./useEvent";
|
|
9
|
+
import useResizeObserver from "./useResizeObserver";
|
|
10
|
+
/**
|
|
11
|
+
* Fixed-height virtual scrolling hook.
|
|
12
|
+
*
|
|
13
|
+
* Renders only the items inside the visible window (plus an `overscan` buffer)
|
|
14
|
+
* and keeps the DOM node count constant regardless of `itemCount`.
|
|
15
|
+
*
|
|
16
|
+
* Usage:
|
|
17
|
+
* const { start, end, offsetY, totalHeight, viewportRef, onScroll, scrollToIndex } =
|
|
18
|
+
* useVirtualList({ itemCount, itemHeight });
|
|
19
|
+
*
|
|
20
|
+
* <div ref={viewportRef} onScroll={onScroll} style={{ maxHeight: 200, overflowY: 'auto' }}>
|
|
21
|
+
* <div style={{ height: totalHeight, position: 'relative' }}>
|
|
22
|
+
* {items.slice(start, end).map((it, i) => (
|
|
23
|
+
* <div key={it.key} style={{ position: 'absolute', height: itemHeight, transform: `translateY(${offsetY + i * itemHeight}px)` }}>
|
|
24
|
+
* {it.content}
|
|
25
|
+
* </div>
|
|
26
|
+
* ))}
|
|
27
|
+
* </div>
|
|
28
|
+
* </div>
|
|
29
|
+
*/
|
|
30
|
+
export default function useVirtualList(_ref) {
|
|
31
|
+
var itemCount = _ref.itemCount,
|
|
32
|
+
itemHeight = _ref.itemHeight,
|
|
33
|
+
_ref$overscan = _ref.overscan,
|
|
34
|
+
overscan = _ref$overscan === void 0 ? 4 : _ref$overscan;
|
|
35
|
+
var _useState = useState(0),
|
|
36
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
37
|
+
scrollTop = _useState2[0],
|
|
38
|
+
setScrollTop = _useState2[1];
|
|
39
|
+
var _useState3 = useState(0),
|
|
40
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
41
|
+
visibleHeight = _useState4[0],
|
|
42
|
+
setVisibleHeight = _useState4[1];
|
|
43
|
+
var rafRef = useRef(null);
|
|
44
|
+
|
|
45
|
+
// useResizeObserver owns its ref; we reuse it as the viewport ref so the
|
|
46
|
+
// scroll container and the measured element are the same node.
|
|
47
|
+
var _useResizeObserver = useResizeObserver(function (entries) {
|
|
48
|
+
var entry = entries[0];
|
|
49
|
+
if (!entry) return;
|
|
50
|
+
var h = entry.contentRect.height;
|
|
51
|
+
setVisibleHeight(function (prev) {
|
|
52
|
+
return prev === h ? prev : h;
|
|
53
|
+
});
|
|
54
|
+
}),
|
|
55
|
+
viewportRef = _useResizeObserver.ref;
|
|
56
|
+
var totalHeight = itemCount * itemHeight;
|
|
57
|
+
|
|
58
|
+
// Read the live scrollTop / clientHeight from the viewport node.
|
|
59
|
+
var readViewport = useEvent(function () {
|
|
60
|
+
var viewport = viewportRef.current;
|
|
61
|
+
if (!viewport) return;
|
|
62
|
+
var top = viewport.scrollTop;
|
|
63
|
+
var h = viewport.clientHeight;
|
|
64
|
+
setScrollTop(function (prev) {
|
|
65
|
+
return prev === top ? prev : top;
|
|
66
|
+
});
|
|
67
|
+
setVisibleHeight(function (prev) {
|
|
68
|
+
return prev === h ? prev : h;
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
var onScroll = useEvent(function () {
|
|
72
|
+
if (rafRef.current !== null) return;
|
|
73
|
+
rafRef.current = requestAnimationFrame(function () {
|
|
74
|
+
rafRef.current = null;
|
|
75
|
+
readViewport();
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
useEffect(function () {
|
|
79
|
+
return function () {
|
|
80
|
+
if (rafRef.current !== null) {
|
|
81
|
+
cancelAnimationFrame(rafRef.current);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
}, []);
|
|
85
|
+
|
|
86
|
+
// Measure once on mount (ResizeObserver fires shortly after, this covers the first frame).
|
|
87
|
+
useEffect(function () {
|
|
88
|
+
readViewport();
|
|
89
|
+
}, [readViewport]);
|
|
90
|
+
|
|
91
|
+
// Keep scrollTop within bounds when the data shrinks (e.g. after filtering),
|
|
92
|
+
// otherwise the viewport would sit at an offset with empty space below.
|
|
93
|
+
useEffect(function () {
|
|
94
|
+
var viewport = viewportRef.current;
|
|
95
|
+
if (!viewport) return;
|
|
96
|
+
var maxScroll = Math.max(0, totalHeight - viewport.clientHeight);
|
|
97
|
+
if (viewport.scrollTop > maxScroll) {
|
|
98
|
+
viewport.scrollTop = maxScroll;
|
|
99
|
+
setScrollTop(maxScroll);
|
|
100
|
+
}
|
|
101
|
+
}, [totalHeight, viewportRef]);
|
|
102
|
+
var scrollToIndex = useEvent(function (index) {
|
|
103
|
+
var viewport = viewportRef.current;
|
|
104
|
+
if (!viewport) return;
|
|
105
|
+
var maxScroll = Math.max(0, totalHeight - viewport.clientHeight);
|
|
106
|
+
var target = Math.min(Math.max(0, index * itemHeight), maxScroll);
|
|
107
|
+
if (viewport.scrollTop !== target) {
|
|
108
|
+
viewport.scrollTop = target;
|
|
109
|
+
}
|
|
110
|
+
readViewport();
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
// Fallback for the first paint before ResizeObserver reports a height,
|
|
114
|
+
// so we still render at least one screen + buffer.
|
|
115
|
+
var effectiveVisibleHeight = visibleHeight || itemHeight;
|
|
116
|
+
var visibleCount = Math.ceil(effectiveVisibleHeight / itemHeight);
|
|
117
|
+
var start = Math.max(0, Math.floor(scrollTop / itemHeight) - overscan);
|
|
118
|
+
var end = Math.min(itemCount, start + visibleCount + overscan * 2);
|
|
119
|
+
var offsetY = start * itemHeight;
|
|
120
|
+
return {
|
|
121
|
+
start: start,
|
|
122
|
+
end: end,
|
|
123
|
+
offsetY: offsetY,
|
|
124
|
+
totalHeight: totalHeight,
|
|
125
|
+
viewportRef: viewportRef,
|
|
126
|
+
onScroll: onScroll,
|
|
127
|
+
scrollToIndex: scrollToIndex
|
|
128
|
+
};
|
|
129
|
+
}
|
package/dist/esm/style/size.css
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* @rainbow-oh/yee-c CSS Variables
|
|
3
3
|
* Auto-generated, do not edit manually
|
|
4
|
-
* Generated on 2026-07-
|
|
4
|
+
* Generated on 2026-07-07T06:37:47.907Z
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
/* ========== color.css ========== */
|
|
@@ -1364,6 +1364,7 @@
|
|
|
1364
1364
|
--yee-drawer-body-padding: 20px 24px;
|
|
1365
1365
|
--yee-drawer-close-top: 20px;
|
|
1366
1366
|
--yee-drawer-close-right: 20px;
|
|
1367
|
+
--yee-drawer-title-font-weight: 500;
|
|
1367
1368
|
|
|
1368
1369
|
/* --Field-- */
|
|
1369
1370
|
--yee-field-gap: 8px;
|
package/dist/esm/version.d.ts
CHANGED
package/dist/esm/version.js
CHANGED