@rainbow-oh/yee-c 0.4.0 → 0.4.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/Anchor/anchor.js +29 -14
- package/dist/cjs/style/themes.css +1 -1
- package/dist/cjs/style/variables.css +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/Anchor/anchor.js +37 -15
- package/dist/esm/style/themes.css +1 -1
- package/dist/esm/style/variables.css +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/umd/yee-c.min.js +1 -1
- package/package.json +1 -1
- package/src/Anchor/anchor.tsx +35 -16
- package/src/version.ts +1 -1
|
@@ -67,7 +67,6 @@ var import_lucide_react = require("lucide-react");
|
|
|
67
67
|
var import_react = __toESM(require("react"));
|
|
68
68
|
var import_Config_Provider = require("../Config-Provider");
|
|
69
69
|
var import_useMergedState = __toESM(require("../hooks/useMergedState"));
|
|
70
|
-
var import_debounce = __toESM(require("../utils/debounce"));
|
|
71
70
|
var import_mergeContextToProps = __toESM(require("../utils/mergeContextToProps"));
|
|
72
71
|
var import_anchor_item = __toESM(require("./anchor-item"));
|
|
73
72
|
var import_style = require("./style/index.less");
|
|
@@ -158,31 +157,50 @@ var Anchor = (0, import_react.forwardRef)((baseprops, ref) => {
|
|
|
158
157
|
const currentItems2 = auto ? anchorList : items;
|
|
159
158
|
if (!currentItems2 || currentItems2.length === 0)
|
|
160
159
|
return;
|
|
160
|
+
let nextActiveKey;
|
|
161
161
|
for (let i = currentItems2.length - 1; i >= 0; i--) {
|
|
162
162
|
const item = currentItems2[i];
|
|
163
163
|
const target = document.getElementById(item.key);
|
|
164
164
|
if (target) {
|
|
165
165
|
const targetTop = getTargetOffsetTop(target);
|
|
166
166
|
if (scrollTop + offsetTop >= targetTop) {
|
|
167
|
-
|
|
168
|
-
setMergedActiveKey(item.key);
|
|
169
|
-
onChange == null ? void 0 : onChange(item.key);
|
|
170
|
-
}
|
|
167
|
+
nextActiveKey = item.key;
|
|
171
168
|
break;
|
|
172
169
|
}
|
|
173
170
|
}
|
|
174
171
|
}
|
|
172
|
+
if (nextActiveKey === void 0) {
|
|
173
|
+
const first = currentItems2.find(
|
|
174
|
+
(item) => document.getElementById(item.key)
|
|
175
|
+
);
|
|
176
|
+
nextActiveKey = first == null ? void 0 : first.key;
|
|
177
|
+
}
|
|
178
|
+
if (nextActiveKey && activeKeyRef.current !== nextActiveKey) {
|
|
179
|
+
setMergedActiveKey(nextActiveKey);
|
|
180
|
+
onChange == null ? void 0 : onChange(nextActiveKey);
|
|
181
|
+
}
|
|
175
182
|
}, [auto, anchorList, items, offsetTop, onChange, getTargetOffsetTop]);
|
|
176
183
|
(0, import_react.useEffect)(() => {
|
|
177
|
-
const container =
|
|
184
|
+
const container = getContainer ? getContainer() : window;
|
|
185
|
+
containerRef.current = container;
|
|
178
186
|
if (!container)
|
|
179
187
|
return;
|
|
180
|
-
|
|
181
|
-
|
|
188
|
+
let rafId = null;
|
|
189
|
+
const onScroll = () => {
|
|
190
|
+
if (rafId !== null)
|
|
191
|
+
return;
|
|
192
|
+
rafId = requestAnimationFrame(() => {
|
|
193
|
+
rafId = null;
|
|
194
|
+
handleScroll();
|
|
195
|
+
});
|
|
196
|
+
};
|
|
197
|
+
container.addEventListener("scroll", onScroll);
|
|
182
198
|
handleScroll();
|
|
183
199
|
return () => {
|
|
184
|
-
container.removeEventListener("scroll",
|
|
185
|
-
|
|
200
|
+
container.removeEventListener("scroll", onScroll);
|
|
201
|
+
if (rafId !== null) {
|
|
202
|
+
cancelAnimationFrame(rafId);
|
|
203
|
+
}
|
|
186
204
|
};
|
|
187
205
|
}, [getContainer, handleScroll]);
|
|
188
206
|
const scrollToAnchor = (0, import_react.useCallback)(
|
|
@@ -205,10 +223,7 @@ var Anchor = (0, import_react.forwardRef)((baseprops, ref) => {
|
|
|
205
223
|
},
|
|
206
224
|
[offsetTop, getTargetOffsetTop]
|
|
207
225
|
);
|
|
208
|
-
(0, import_react.
|
|
209
|
-
containerRef.current = getContainer ? getContainer() : window;
|
|
210
|
-
}, [getContainer]);
|
|
211
|
-
(0, import_react.useLayoutEffect)(() => {
|
|
226
|
+
(0, import_react.useEffect)(() => {
|
|
212
227
|
if (defaultActiveKey) {
|
|
213
228
|
scrollToAnchor(defaultActiveKey);
|
|
214
229
|
}
|
package/dist/cjs/version.d.ts
CHANGED
package/dist/cjs/version.js
CHANGED
|
@@ -14,10 +14,9 @@ function _objectWithoutProperties(source, excluded) { if (source == null) return
|
|
|
14
14
|
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; }
|
|
15
15
|
import clsx from 'clsx';
|
|
16
16
|
import { ChevronLeft } from 'lucide-react';
|
|
17
|
-
import React, { createContext, forwardRef, useCallback, useContext, useEffect,
|
|
17
|
+
import React, { createContext, forwardRef, useCallback, useContext, useEffect, useRef, useState } from 'react';
|
|
18
18
|
import { GlobalContext } from "../Config-Provider";
|
|
19
19
|
import useMergedState from "../hooks/useMergedState";
|
|
20
|
-
import debounce from "../utils/debounce";
|
|
21
20
|
import mergeContextToProps from "../utils/mergeContextToProps";
|
|
22
21
|
import AnchorItem from "./anchor-item";
|
|
23
22
|
import "./style/index.less";
|
|
@@ -109,30 +108,56 @@ var Anchor = /*#__PURE__*/forwardRef(function (baseprops, ref) {
|
|
|
109
108
|
|
|
110
109
|
// Empty array guard
|
|
111
110
|
if (!currentItems || currentItems.length === 0) return;
|
|
111
|
+
|
|
112
|
+
// Pick the last anchor whose top has crossed the activation line.
|
|
113
|
+
var nextActiveKey;
|
|
112
114
|
for (var i = currentItems.length - 1; i >= 0; i--) {
|
|
113
115
|
var item = currentItems[i];
|
|
114
116
|
var target = document.getElementById(item.key);
|
|
115
117
|
if (target) {
|
|
116
118
|
var targetTop = getTargetOffsetTop(target);
|
|
117
119
|
if (scrollTop + offsetTop >= targetTop) {
|
|
118
|
-
|
|
119
|
-
setMergedActiveKey(item.key);
|
|
120
|
-
onChange === null || onChange === void 0 || onChange(item.key);
|
|
121
|
-
}
|
|
120
|
+
nextActiveKey = item.key;
|
|
122
121
|
break;
|
|
123
122
|
}
|
|
124
123
|
}
|
|
125
124
|
}
|
|
125
|
+
|
|
126
|
+
// Scrolled above the first anchor — reset to the top item.
|
|
127
|
+
if (nextActiveKey === undefined) {
|
|
128
|
+
var first = currentItems.find(function (item) {
|
|
129
|
+
return document.getElementById(item.key);
|
|
130
|
+
});
|
|
131
|
+
nextActiveKey = first === null || first === void 0 ? void 0 : first.key;
|
|
132
|
+
}
|
|
133
|
+
if (nextActiveKey && activeKeyRef.current !== nextActiveKey) {
|
|
134
|
+
setMergedActiveKey(nextActiveKey);
|
|
135
|
+
onChange === null || onChange === void 0 || onChange(nextActiveKey);
|
|
136
|
+
}
|
|
126
137
|
}, [auto, anchorList, items, offsetTop, onChange, getTargetOffsetTop]);
|
|
127
138
|
useEffect(function () {
|
|
128
|
-
|
|
139
|
+
// Resolve in a passive effect: parent-owned refs passed via `getContainer`
|
|
140
|
+
// aren't attached until after child layout effects run.
|
|
141
|
+
var container = getContainer ? getContainer() : window;
|
|
142
|
+
containerRef.current = container;
|
|
129
143
|
if (!container) return;
|
|
130
|
-
|
|
131
|
-
|
|
144
|
+
|
|
145
|
+
// rAF throttle so the active key tracks scroll live.
|
|
146
|
+
var rafId = null;
|
|
147
|
+
var onScroll = function onScroll() {
|
|
148
|
+
if (rafId !== null) return;
|
|
149
|
+
rafId = requestAnimationFrame(function () {
|
|
150
|
+
rafId = null;
|
|
151
|
+
handleScroll();
|
|
152
|
+
});
|
|
153
|
+
};
|
|
154
|
+
container.addEventListener('scroll', onScroll);
|
|
132
155
|
handleScroll();
|
|
133
156
|
return function () {
|
|
134
|
-
container.removeEventListener('scroll',
|
|
135
|
-
|
|
157
|
+
container.removeEventListener('scroll', onScroll);
|
|
158
|
+
if (rafId !== null) {
|
|
159
|
+
cancelAnimationFrame(rafId);
|
|
160
|
+
}
|
|
136
161
|
};
|
|
137
162
|
}, [getContainer, handleScroll]);
|
|
138
163
|
|
|
@@ -155,10 +180,7 @@ var Anchor = /*#__PURE__*/forwardRef(function (baseprops, ref) {
|
|
|
155
180
|
});
|
|
156
181
|
}
|
|
157
182
|
}, [offsetTop, getTargetOffsetTop]);
|
|
158
|
-
|
|
159
|
-
containerRef.current = getContainer ? getContainer() : window;
|
|
160
|
-
}, [getContainer]);
|
|
161
|
-
useLayoutEffect(function () {
|
|
183
|
+
useEffect(function () {
|
|
162
184
|
if (defaultActiveKey) {
|
|
163
185
|
scrollToAnchor(defaultActiveKey);
|
|
164
186
|
}
|
package/dist/esm/version.d.ts
CHANGED
package/dist/esm/version.js
CHANGED