@rainbow-oh/yee-c 0.4.5 → 0.5.1
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/Descriptions/descriptions.js +8 -1
- package/dist/cjs/Descriptions/interface.d.ts +1 -1
- package/dist/cjs/Dialog/demo/basic.js +1 -1
- package/dist/cjs/Dialog/dialog.js +1 -1
- package/dist/cjs/Field/demo/validation.js +23 -3
- package/dist/cjs/Field/field.js +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/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/utils/validate.d.ts +23 -2
- package/dist/cjs/Form/utils/validate.js +59 -10
- package/dist/cjs/Select/demo/basic.js +1 -1
- package/dist/cjs/Select/demo/size.js +2 -0
- 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 +46 -1
- 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 -0
- package/dist/cjs/Selector/style/index.less +8 -0
- package/dist/cjs/Table/style/index.less +19 -0
- package/dist/cjs/hooks/index.d.ts +2 -1
- package/dist/cjs/hooks/index.js +3 -1
- package/dist/cjs/hooks/useVirtualList.d.ts +71 -0
- package/dist/cjs/hooks/useVirtualList.js +117 -0
- package/dist/cjs/style/size.css +4 -0
- package/dist/cjs/style/themes.css +1 -1
- package/dist/cjs/style/variables.css +5 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/Descriptions/descriptions.js +2 -1
- package/dist/esm/Descriptions/interface.d.ts +1 -1
- package/dist/esm/Dialog/demo/basic.js +1 -1
- package/dist/esm/Dialog/dialog.js +1 -1
- package/dist/esm/Field/demo/validation.js +30 -9
- package/dist/esm/Field/field.js +2 -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/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/utils/validate.d.ts +23 -2
- package/dist/esm/Form/utils/validate.js +122 -17
- package/dist/esm/Select/demo/basic.js +1 -1
- package/dist/esm/Select/demo/size.js +2 -0
- 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 +46 -1
- 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 -0
- package/dist/esm/Selector/style/index.less +8 -0
- package/dist/esm/Table/style/index.less +19 -0
- 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 +4 -0
- package/dist/esm/style/themes.css +1 -1
- package/dist/esm/style/variables.css +5 -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/Descriptions/descriptions.tsx +4 -1
- package/src/Descriptions/interface.ts +7 -1
- package/src/Dialog/demo/basic.tsx +1 -1
- package/src/Dialog/dialog.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/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/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/utils/validate.ts +65 -13
- package/src/Select/demo/basic.tsx +1 -1
- package/src/Select/demo/size.tsx +2 -0
- 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 +51 -3
- 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 -0
- package/src/Selector/style/index.less +8 -0
- package/src/Table/style/index.less +19 -0
- package/src/hooks/index.ts +2 -0
- package/src/hooks/useVirtualList.ts +169 -0
- package/src/style/size.css +4 -0
- package/src/version.ts +1 -1
|
@@ -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
|
@@ -482,6 +482,10 @@
|
|
|
482
482
|
--yee-selector-arrow-right: 8px;
|
|
483
483
|
--yee-selector-clear-right: 8px;
|
|
484
484
|
--yee-selector-clear-padding: 1px;
|
|
485
|
+
--yee-selector-small-padding: 0 6px;
|
|
486
|
+
--yee-selector-small-height: 24px;
|
|
487
|
+
--yee-selector-large-padding: 4px 12px;
|
|
488
|
+
--yee-selector-large-height: 40px;
|
|
485
489
|
--yee-tags-height: 32px;
|
|
486
490
|
--yee-tags-input-font-size: 14px;
|
|
487
491
|
--yee-tags-input-line-height: 22px;
|
|
@@ -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-08T03:16:37.096Z
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
/* ========== color.css ========== */
|
|
@@ -1600,6 +1600,10 @@
|
|
|
1600
1600
|
--yee-selector-arrow-right: 8px;
|
|
1601
1601
|
--yee-selector-clear-right: 8px;
|
|
1602
1602
|
--yee-selector-clear-padding: 1px;
|
|
1603
|
+
--yee-selector-small-padding: 0 6px;
|
|
1604
|
+
--yee-selector-small-height: 24px;
|
|
1605
|
+
--yee-selector-large-padding: 4px 12px;
|
|
1606
|
+
--yee-selector-large-height: 40px;
|
|
1603
1607
|
--yee-tags-height: 32px;
|
|
1604
1608
|
--yee-tags-input-font-size: 14px;
|
|
1605
1609
|
--yee-tags-input-line-height: 22px;
|
package/dist/esm/version.d.ts
CHANGED
package/dist/esm/version.js
CHANGED