@sheinx/hooks 3.3.6-beta.1 → 3.3.6-beta.3
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/cjs/common/use-position-style/index.d.ts +4 -1
- package/cjs/common/use-position-style/index.d.ts.map +1 -1
- package/cjs/common/use-position-style/index.js +98 -11
- package/cjs/components/use-datepicker/use-date.d.ts +1 -1
- package/cjs/components/use-datepicker/use-month.d.ts +1 -1
- package/cjs/components/use-datepicker/use-quarter.d.ts +1 -1
- package/cjs/components/use-datepicker/use-year.d.ts +1 -1
- package/cjs/components/use-input/use-input-format.d.ts +1 -1
- package/cjs/components/use-input/use-input-number.d.ts +1 -1
- package/cjs/components/use-popup/use-popup.d.ts +1 -0
- package/cjs/components/use-popup/use-popup.d.ts.map +1 -1
- package/cjs/components/use-popup/use-popup.js +7 -4
- package/cjs/utils/position.d.ts +1 -1
- package/cjs/utils/position.d.ts.map +1 -1
- package/cjs/utils/position.js +20 -5
- package/esm/common/use-position-style/index.d.ts +4 -1
- package/esm/common/use-position-style/index.d.ts.map +1 -1
- package/esm/common/use-position-style/index.js +99 -12
- package/esm/components/use-datepicker/use-date.d.ts +1 -1
- package/esm/components/use-datepicker/use-month.d.ts +1 -1
- package/esm/components/use-datepicker/use-quarter.d.ts +1 -1
- package/esm/components/use-datepicker/use-year.d.ts +1 -1
- package/esm/components/use-input/use-input-format.d.ts +1 -1
- package/esm/components/use-input/use-input-number.d.ts +1 -1
- package/esm/components/use-popup/use-popup.d.ts +1 -0
- package/esm/components/use-popup/use-popup.d.ts.map +1 -1
- package/esm/components/use-popup/use-popup.js +7 -4
- package/esm/utils/position.d.ts +1 -1
- package/esm/utils/position.d.ts.map +1 -1
- package/esm/utils/position.js +20 -5
- package/package.json +1 -1
@@ -16,6 +16,9 @@ export interface PositionStyleConfig {
|
|
16
16
|
updateKey?: number | string;
|
17
17
|
adjust?: boolean;
|
18
18
|
}
|
19
|
-
export declare const usePositionStyle: (config: PositionStyleConfig) =>
|
19
|
+
export declare const usePositionStyle: (config: PositionStyleConfig) => {
|
20
|
+
style: React.CSSProperties;
|
21
|
+
arrayStyle: React.CSSProperties;
|
22
|
+
};
|
20
23
|
export default usePositionStyle;
|
21
24
|
//# sourceMappingURL=index.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAMnD,MAAM,MAAM,kBAAkB,GAC1B,aAAa,GACb,UAAU,GACV,cAAc,GACd,WAAW,GACX,MAAM,GACN,OAAO,CAAC;AACZ,MAAM,MAAM,gBAAgB,GACxB,aAAa,GACb,cAAc,GACd,UAAU,GACV,WAAW,GACX,KAAK,GACL,QAAQ,CAAC;AAYb,KAAK,YAAY,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,OAAO,CAAC;AACpE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,YAAY,GAAG,SAAS,CAAC;IACnC,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IAEd,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAE1C,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAEzC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAC3C,YAAY,EAAE,MAAM,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAQD,eAAO,MAAM,gBAAgB,WAAY,mBAAmB,
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAMnD,MAAM,MAAM,kBAAkB,GAC1B,aAAa,GACb,UAAU,GACV,cAAc,GACd,WAAW,GACX,MAAM,GACN,OAAO,CAAC;AACZ,MAAM,MAAM,gBAAgB,GACxB,aAAa,GACb,cAAc,GACd,UAAU,GACV,WAAW,GACX,KAAK,GACL,QAAQ,CAAC;AAYb,KAAK,YAAY,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,OAAO,CAAC;AACpE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,YAAY,GAAG,SAAS,CAAC;IACnC,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IAEd,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAE1C,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAEzC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAC3C,YAAY,EAAE,MAAM,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAQD,eAAO,MAAM,gBAAgB,WAAY,mBAAmB;;;CAmS3D,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
@@ -49,6 +49,10 @@ var usePositionStyle = exports.usePositionStyle = function usePositionStyle(conf
|
|
49
49
|
_useState2 = _slicedToArray(_useState, 2),
|
50
50
|
style = _useState2[0],
|
51
51
|
setStyle = _useState2[1];
|
52
|
+
var _useState3 = (0, _react.useState)({}),
|
53
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
54
|
+
arrayStyle = _useState4[0],
|
55
|
+
setArrayStyle = _useState4[1];
|
52
56
|
var _React$useRef = _react.default.useRef({
|
53
57
|
element: null,
|
54
58
|
containerRect: {
|
@@ -122,10 +126,12 @@ var usePositionStyle = exports.usePositionStyle = function usePositionStyle(conf
|
|
122
126
|
};
|
123
127
|
};
|
124
128
|
var getAbsolutePositionStyle = function getAbsolutePositionStyle(rect, position) {
|
129
|
+
var _popupElRef$current;
|
125
130
|
var style = {
|
126
131
|
position: 'absolute',
|
127
132
|
zIndex: zIndex
|
128
133
|
};
|
134
|
+
var arrayStyle = {};
|
129
135
|
if (fixedWidth) {
|
130
136
|
var widthKey = fixedWidth === 'min' ? 'minWidth' : 'width';
|
131
137
|
style[widthKey] = rect.width;
|
@@ -135,6 +141,7 @@ var usePositionStyle = exports.usePositionStyle = function usePositionStyle(conf
|
|
135
141
|
var containerRect = rootContainer.getBoundingClientRect();
|
136
142
|
var bodyRect = (document.documentElement || document.body).getBoundingClientRect();
|
137
143
|
var containerScrollBarWidth = rootContainer.offsetWidth - rootContainer.clientWidth;
|
144
|
+
var targetRect = (_popupElRef$current = popupElRef.current) === null || _popupElRef$current === void 0 ? void 0 : _popupElRef$current.getBoundingClientRect();
|
138
145
|
var containerScroll = {
|
139
146
|
left: rootContainer.scrollLeft,
|
140
147
|
top: rootContainer.scrollTop
|
@@ -151,14 +158,25 @@ var usePositionStyle = exports.usePositionStyle = function usePositionStyle(conf
|
|
151
158
|
if (h === 'left') {
|
152
159
|
style.left = rect.left - containerRect.left + containerScroll.left;
|
153
160
|
style.transform = '';
|
161
|
+
arrayStyle.left = "8px";
|
154
162
|
if (adjust) {
|
155
163
|
overRight = rect.left + context.popUpWidth - bodyRect.right + containerScrollBarWidth;
|
164
|
+
if (style.left < 0 && targetRect) {
|
165
|
+
style.left = 'auto';
|
166
|
+
}
|
156
167
|
}
|
157
168
|
} else if (h === 'right') {
|
158
169
|
style.right = containerRect.right - rect.right + containerScrollBarWidth - containerScroll.left;
|
159
170
|
style.left = 'auto';
|
160
171
|
style.transform = '';
|
161
|
-
|
172
|
+
arrayStyle.right = "8px";
|
173
|
+
if (adjust) {
|
174
|
+
overLeft = bodyRect.left - (rect.right - context.popUpWidth);
|
175
|
+
if (style.right < 0 && targetRect) {
|
176
|
+
style.left = bodyRect.width - targetRect.width;
|
177
|
+
style.right = 'auto';
|
178
|
+
}
|
179
|
+
}
|
162
180
|
} else {
|
163
181
|
// 居中对齐
|
164
182
|
style.left = rect.left + rect.width / 2 - containerRect.left + containerScroll.left;
|
@@ -167,6 +185,9 @@ var usePositionStyle = exports.usePositionStyle = function usePositionStyle(conf
|
|
167
185
|
overRight = rect.left + rect.width / 2 + context.popUpWidth / 2 - bodyRect.width + containerScrollBarWidth;
|
168
186
|
overLeft = bodyRect.left - (rect.left + rect.width / 2 - context.popUpWidth / 2);
|
169
187
|
}
|
188
|
+
if (targetRect) {
|
189
|
+
arrayStyle.left = "".concat(targetRect.width / 2 - 5.9, "px");
|
190
|
+
}
|
170
191
|
}
|
171
192
|
if (adjust) {
|
172
193
|
// 调节左右溢出
|
@@ -175,16 +196,26 @@ var usePositionStyle = exports.usePositionStyle = function usePositionStyle(conf
|
|
175
196
|
style.left -= overRight;
|
176
197
|
// 扣除触发器距离页面右侧的距离,以保证从右侧弹出的窗口最右边对齐触发器最右边
|
177
198
|
style.left -= toRightDistance;
|
199
|
+
if (targetRect) {
|
200
|
+
arrayStyle.left = "".concat((targetRect === null || targetRect === void 0 ? void 0 : targetRect.width) - context.parentRect.width / 2 - 5.9, "px");
|
201
|
+
}
|
178
202
|
}
|
179
203
|
if (overLeft > 0) {
|
180
204
|
style.left += overLeft;
|
205
|
+
arrayStyle.left = "".concat(rect.width / 2 - 5.9, "px");
|
181
206
|
}
|
182
207
|
}
|
183
208
|
if (v === 'bottom') {
|
184
209
|
style.top = rect.bottom - containerRect.top + containerScroll.top + popupGap;
|
210
|
+
if (targetRect) {
|
211
|
+
arrayStyle.top = "".concat(0, "px");
|
212
|
+
}
|
185
213
|
} else {
|
186
214
|
style.top = rect.top - containerRect.top + containerScroll.top - popupGap;
|
187
215
|
style.transform += 'translateY(-100%)';
|
216
|
+
if (targetRect) {
|
217
|
+
arrayStyle.top = "".concat(targetRect.height - 5.9 - 4, "px");
|
218
|
+
}
|
188
219
|
}
|
189
220
|
} else if (horizontalPosition.includes(targetPosition)) {
|
190
221
|
var _targetPosition$split3 = targetPosition.split('-'),
|
@@ -194,45 +225,88 @@ var usePositionStyle = exports.usePositionStyle = function usePositionStyle(conf
|
|
194
225
|
if (_v === 'top') {
|
195
226
|
style.top = rect.top - containerRect.top + containerScroll.top;
|
196
227
|
style.transform = '';
|
228
|
+
arrayStyle.top = "8px";
|
197
229
|
} else if (_v === 'bottom') {
|
198
230
|
style.top = rect.bottom - containerRect.top + containerScroll.top;
|
231
|
+
arrayStyle.bottom = "8px";
|
199
232
|
style.transform = 'translateY(-100%)';
|
200
233
|
} else {
|
201
234
|
// 居中对齐
|
202
235
|
style.top = rect.top - containerRect.top + containerScroll.top + rect.height / 2;
|
236
|
+
if (targetRect) {
|
237
|
+
arrayStyle.top = "".concat(targetRect.height / 2 - 5.9 / 2, "px");
|
238
|
+
}
|
203
239
|
style.transform = 'translateY(-50%)';
|
204
240
|
}
|
205
241
|
if (_h === 'right') {
|
206
242
|
style.left = rect.right - containerRect.left + containerScroll.left + popupGap;
|
207
243
|
} else {
|
208
244
|
style.left = rect.left - containerRect.left + containerScroll.left - popupGap;
|
245
|
+
arrayStyle.right = "0px";
|
209
246
|
style.transform += ' translateX(-100%)';
|
210
247
|
}
|
211
248
|
} else if (position === 'cover') {
|
212
249
|
style.top = rect.top - containerRect.top + containerScroll.top;
|
213
250
|
style.left = rect.left - containerRect.left + containerScroll.left;
|
214
251
|
}
|
215
|
-
return
|
252
|
+
return {
|
253
|
+
style: style,
|
254
|
+
arrayStyle: arrayStyle
|
255
|
+
};
|
216
256
|
};
|
217
257
|
var getAbsoluteStyle = function getAbsoluteStyle(position) {
|
218
|
-
if (!parentElRef.current) return
|
258
|
+
if (!parentElRef.current) return {
|
259
|
+
style: hideStyle
|
260
|
+
};
|
219
261
|
var rect = context.parentRect;
|
220
262
|
if (scrollElRef !== null && scrollElRef !== void 0 && scrollElRef.current) {
|
221
263
|
var _scrollElRef$current;
|
222
264
|
var visibleRect = ((_scrollElRef$current = scrollElRef.current) === null || _scrollElRef$current === void 0 ? void 0 : _scrollElRef$current.getBoundingClientRect()) || {};
|
223
265
|
if (rect.bottom < visibleRect.top || rect.top > visibleRect.bottom || rect.right < visibleRect.left || rect.left > visibleRect.right) {
|
224
|
-
return
|
266
|
+
return {
|
267
|
+
style: hideStyle
|
268
|
+
};
|
225
269
|
}
|
226
270
|
}
|
227
|
-
var
|
228
|
-
|
271
|
+
var _getAbsolutePositionS = getAbsolutePositionStyle(rect, position),
|
272
|
+
style = _getAbsolutePositionS.style,
|
273
|
+
arrayStyle = _getAbsolutePositionS.arrayStyle;
|
274
|
+
|
275
|
+
// TODO: 如果是版本大于chrome128,需要根据currentCSSZoom处理chrome的bug
|
276
|
+
if (!(0, _utils.isChromeLowerThan)(128)) {
|
277
|
+
// @ts-ignore currentCSSZoom
|
278
|
+
var currentCSSZoom = document.body.currentCSSZoom;
|
279
|
+
if (currentCSSZoom === 1 || !currentCSSZoom) return {
|
280
|
+
style: style,
|
281
|
+
arrayStyle: arrayStyle
|
282
|
+
};
|
283
|
+
if (style.left && typeof style.left === 'number') {
|
284
|
+
style.left = style.left * (1 / currentCSSZoom);
|
285
|
+
}
|
286
|
+
if (style.top && typeof style.top === 'number') {
|
287
|
+
style.top = style.top * (1 / currentCSSZoom);
|
288
|
+
}
|
289
|
+
if (style.right && typeof style.right === 'number') {
|
290
|
+
style.right = style.right * (1 / currentCSSZoom);
|
291
|
+
}
|
292
|
+
if (style.bottom && typeof style.bottom === 'number') {
|
293
|
+
style.bottom = style.bottom * (1 / currentCSSZoom);
|
294
|
+
}
|
295
|
+
}
|
296
|
+
return {
|
297
|
+
style: style,
|
298
|
+
arrayStyle: arrayStyle
|
299
|
+
};
|
229
300
|
};
|
230
301
|
var getStyle = function getStyle() {
|
231
302
|
var newStyle = {};
|
303
|
+
var newArrayStyle = {};
|
232
304
|
var _ref2 = config || {},
|
233
305
|
position = _ref2.position,
|
234
306
|
absolute = _ref2.absolute;
|
235
|
-
if (!position || !show || !parentElRef.current) return
|
307
|
+
if (!position || !show || !parentElRef.current) return {
|
308
|
+
newStyle: style
|
309
|
+
};
|
236
310
|
context.parentRect = parentElRef.current.getBoundingClientRect();
|
237
311
|
if (adjust) {
|
238
312
|
var popupInfo = getPopUpInfo(context.parentRect);
|
@@ -247,21 +321,34 @@ var usePositionStyle = exports.usePositionStyle = function usePositionStyle(conf
|
|
247
321
|
fixedWidth: fixedWidth
|
248
322
|
});
|
249
323
|
} else {
|
250
|
-
|
324
|
+
var _ref3 = getAbsoluteStyle(realPosition),
|
325
|
+
nextStyle = _ref3.style,
|
326
|
+
nextArrayStyle = _ref3.arrayStyle;
|
327
|
+
newStyle = nextStyle;
|
328
|
+
newArrayStyle = nextArrayStyle;
|
251
329
|
}
|
252
330
|
// for animation
|
253
331
|
if (realPosition.indexOf('top') === 0) {
|
254
332
|
newStyle.transformOrigin = 'center bottom';
|
255
333
|
}
|
256
|
-
return
|
334
|
+
return {
|
335
|
+
newStyle: newStyle,
|
336
|
+
newArrayStyle: newArrayStyle
|
337
|
+
};
|
257
338
|
};
|
258
339
|
var updateStyle = (0, _usePersistFn.default)(function () {
|
259
|
-
var
|
340
|
+
var _getStyle = getStyle(),
|
341
|
+
newStyle = _getStyle.newStyle,
|
342
|
+
newArrayStyle = _getStyle.newArrayStyle;
|
260
343
|
if (newStyle && !(0, _shallowEqual.default)(style, newStyle)) {
|
261
344
|
setStyle(newStyle);
|
345
|
+
setArrayStyle(newArrayStyle || {});
|
262
346
|
}
|
263
347
|
});
|
264
348
|
(0, _react.useEffect)(updateStyle, [show, position, absolute, updateKey, fixedWidth]);
|
265
|
-
return
|
349
|
+
return {
|
350
|
+
style: style,
|
351
|
+
arrayStyle: arrayStyle
|
352
|
+
};
|
266
353
|
};
|
267
354
|
var _default = exports.default = usePositionStyle;
|
@@ -12,7 +12,7 @@ declare const useDate: (props: UseDateProps) => {
|
|
12
12
|
isToday: (date: Date) => boolean;
|
13
13
|
isDisabled: (date: Date) => boolean;
|
14
14
|
isActive: (date: Date) => boolean;
|
15
|
-
isInRange: (date: Date) => false | "
|
15
|
+
isInRange: (date: Date) => false | "end" | "start" | "start-end" | "in";
|
16
16
|
isCurrentMonth: (date: Date) => boolean;
|
17
17
|
handleDayClick: (date: Date) => void;
|
18
18
|
getDayStr: (date: Date) => number;
|
@@ -9,7 +9,7 @@ declare const useMonth: (props: UseMonthProps) => {
|
|
9
9
|
isNow: (date: Date) => boolean;
|
10
10
|
isDisabled: (date: Date) => boolean;
|
11
11
|
isActive: (date: Date) => boolean;
|
12
|
-
isInRange: (date: Date) => false | "
|
12
|
+
isInRange: (date: Date) => false | "end" | "start" | "start-end" | "in";
|
13
13
|
handleMonthClick: (date: Date) => void;
|
14
14
|
getMonthStr: (date: Date) => number;
|
15
15
|
};
|
@@ -9,7 +9,7 @@ declare const useQuarter: (props: UseMonthProps) => {
|
|
9
9
|
isNow: (date: Date) => boolean;
|
10
10
|
isDisabled: (date: Date) => boolean;
|
11
11
|
isActive: (date: Date) => boolean;
|
12
|
-
isInRange: (date: Date) => false | "
|
12
|
+
isInRange: (date: Date) => false | "end" | "start" | "start-end" | "in";
|
13
13
|
handleQuarterClick: (date: Date) => void;
|
14
14
|
getQuarterStr: (date: Date) => number;
|
15
15
|
};
|
@@ -11,7 +11,7 @@ declare const useYear: (props: UseYearProps) => {
|
|
11
11
|
isNow: (date: Date) => boolean;
|
12
12
|
isDisabled: (date: Date) => boolean;
|
13
13
|
isActive: (date: Date) => boolean;
|
14
|
-
isInRange: (date: Date) => false | "
|
14
|
+
isInRange: (date: Date) => false | "end" | "start" | "start-end" | "in";
|
15
15
|
handleYearClick: (date: Date) => void;
|
16
16
|
getYearStr: (date: Date) => number;
|
17
17
|
};
|
@@ -5,7 +5,7 @@ declare const useInputFormat: (props: InputFormatProps) => {
|
|
5
5
|
onBlur: (e: React.FocusEvent) => void;
|
6
6
|
onFocus: (e: React.FocusEvent) => void;
|
7
7
|
value: string | undefined;
|
8
|
-
type: "search" | "color" | "button" | "time" | "image" | "text" | "reset" | "submit" | "email" | "url" | "range" | "tel" | (string & {}) | "
|
8
|
+
type: "search" | "color" | "button" | "time" | "image" | "text" | "reset" | "submit" | "email" | "url" | "range" | "tel" | (string & {}) | "checkbox" | "radio" | "hidden" | "date" | "datetime-local" | "file" | "month" | "password" | "week" | undefined;
|
9
9
|
};
|
10
10
|
export default useInputFormat;
|
11
11
|
//# sourceMappingURL=use-input-format.d.ts.map
|
@@ -7,7 +7,7 @@ declare const useNumberFormat: (props: InputNumberProps) => {
|
|
7
7
|
onBlur: (e: React.FocusEvent<Element, Element>) => void;
|
8
8
|
onFocus: (e: React.FocusEvent<Element, Element>) => void;
|
9
9
|
value: string | undefined;
|
10
|
-
type: "search" | "color" | "button" | "time" | "image" | "text" | "reset" | "submit" | "email" | "url" | "range" | "tel" | (string & {}) | "
|
10
|
+
type: "search" | "color" | "button" | "time" | "image" | "text" | "reset" | "submit" | "email" | "url" | "range" | "tel" | (string & {}) | "checkbox" | "radio" | "hidden" | "date" | "datetime-local" | "file" | "month" | "password" | "week" | undefined;
|
11
11
|
};
|
12
12
|
export default useNumberFormat;
|
13
13
|
//# sourceMappingURL=use-input-number.d.ts.map
|
@@ -5,6 +5,7 @@ declare const usePopup: (props: BasePopupProps) => {
|
|
5
5
|
position: PositionType;
|
6
6
|
targetRef: React.MutableRefObject<HTMLDivElement | null>;
|
7
7
|
popupRef: React.MutableRefObject<HTMLDivElement | null>;
|
8
|
+
arrowRef: React.MutableRefObject<HTMLSpanElement | null>;
|
8
9
|
getTargetProps: () => {
|
9
10
|
onMouseEnter: (e: {
|
10
11
|
target: EventTarget | null;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"use-popup.d.ts","sourceRoot":"","sources":["use-popup.ts"],"names":[],"mappings":"AAAA,OAAO,KAA2D,MAAM,OAAO,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAMhE,QAAA,MAAM,QAAQ,UAAW,cAAc
|
1
|
+
{"version":3,"file":"use-popup.d.ts","sourceRoot":"","sources":["use-popup.ts"],"names":[],"mappings":"AAAA,OAAO,KAA2D,MAAM,OAAO,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAMhE,QAAA,MAAM,QAAQ,UAAW,cAAc;;;;;;;0BA2HK;YAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;SAAE;0BAM9B;YAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;SAAE;;;;;qBA5B7B;YAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;SAAE;;;;;;;;;;;;;;;;;;;;;;;;;2BA6ElD,MAAM,gBAAgB,CAAC,WAAW,GAAG,IAAI,CAAC;6BAGxC,MAAM,gBAAgB,CAAC,WAAW,GAAG,IAAI,CAAC;;CAsBpE,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
@@ -37,6 +37,7 @@ var usePopup = function usePopup(props) {
|
|
37
37
|
removeChild = _useContext.removeChild;
|
38
38
|
var targetRef = (0, _react.useRef)(null);
|
39
39
|
var popupRef = (0, _react.useRef)(null);
|
40
|
+
var arrowRef = (0, _react.useRef)(null);
|
40
41
|
(0, _react.useEffect)(function () {
|
41
42
|
bindChild(popupRef);
|
42
43
|
return function () {
|
@@ -68,11 +69,12 @@ var usePopup = function usePopup(props) {
|
|
68
69
|
setPositionState = _useState4[1];
|
69
70
|
var position = isPositionControl ? props.position : positionState;
|
70
71
|
var updatePosition = (0, _usePersistFn.default)(function () {
|
71
|
-
if (isPositionControl) return;
|
72
|
-
if (props.position === 'auto' || !props.position) {
|
73
|
-
|
72
|
+
// if (isPositionControl) return;
|
73
|
+
// if (props.position === 'auto' || !props.position) {
|
74
|
+
setTimeout(function () {
|
75
|
+
var newPosition = (0, _position.getPosition)(targetRef.current, props.priorityDirection, autoMode, popupRef.current || undefined);
|
74
76
|
if (newPosition !== position) setPositionState(newPosition);
|
75
|
-
}
|
77
|
+
}, 10);
|
76
78
|
});
|
77
79
|
(0, _react.useEffect)(function () {
|
78
80
|
if (props.open) {
|
@@ -201,6 +203,7 @@ var usePopup = function usePopup(props) {
|
|
201
203
|
position: position,
|
202
204
|
targetRef: targetRef,
|
203
205
|
popupRef: popupRef,
|
206
|
+
arrowRef: arrowRef,
|
204
207
|
getTargetProps: getTargetProps,
|
205
208
|
openPop: openPop,
|
206
209
|
closePop: closePop,
|
package/cjs/utils/position.d.ts
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
export declare const getPosition: (target: HTMLElement | null, priorityDirection: "vertical" | "horizontal" | "auto" | undefined, mode: 'popover' | 'menu' | 'list') => "bottom" | "left" | "right" | "top" | "top-left" | "top-right" | "bottom-left" | "bottom-right" | "left-top" | "left-bottom" | "right-top" | "right-bottom";
|
1
|
+
export declare const getPosition: (target: HTMLElement | null, priorityDirection: "vertical" | "horizontal" | "auto" | undefined, mode: 'popover' | 'menu' | 'list', popup?: HTMLElement) => "bottom" | "left" | "right" | "top" | "top-left" | "top-right" | "bottom-left" | "bottom-right" | "left-top" | "left-bottom" | "right-top" | "right-bottom";
|
2
2
|
//# sourceMappingURL=position.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"position.d.ts","sourceRoot":"","sources":["position.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"position.d.ts","sourceRoot":"","sources":["position.ts"],"names":[],"mappings":"AAiGA,eAAO,MAAM,WAAW,WACd,WAAW,GAAG,IAAI,2EAEpB,SAAS,GAAG,MAAM,GAAG,MAAM,UACzB,WAAW,gKAKpB,CAAC"}
|
package/cjs/utils/position.js
CHANGED
@@ -41,6 +41,7 @@ var getMenuPosition = function getMenuPosition(target) {
|
|
41
41
|
};
|
42
42
|
var getPopoverPosition = function getPopoverPosition(target) {
|
43
43
|
var priorityDirection = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'vertical';
|
44
|
+
var popup = arguments.length > 2 ? arguments[2] : undefined;
|
44
45
|
var position = 'bottom-left';
|
45
46
|
if (!target) return position;
|
46
47
|
var rect = target.getBoundingClientRect();
|
@@ -62,11 +63,24 @@ var getPopoverPosition = function getPopoverPosition(target) {
|
|
62
63
|
position += '-top';
|
63
64
|
}
|
64
65
|
} else {
|
66
|
+
var popupRect = popup === null || popup === void 0 ? void 0 : popup.getBoundingClientRect();
|
65
67
|
if (verticalPoint > windowHeight / 2) position = 'top';else position = 'bottom';
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
68
|
+
|
69
|
+
// 如果渲染了弹出内容,则根据弹出内容宽度计算是否自动调整位置
|
70
|
+
if (popupRect) {
|
71
|
+
if ((popupRect === null || popupRect === void 0 ? void 0 : popupRect.width) / 2 > rect.left) {
|
72
|
+
position += '-left';
|
73
|
+
}
|
74
|
+
if ((popupRect === null || popupRect === void 0 ? void 0 : popupRect.width) / 2 > windowWidth - rect.right) {
|
75
|
+
position += '-right';
|
76
|
+
}
|
77
|
+
} else {
|
78
|
+
// 兜底计算
|
79
|
+
if (horizontalPoint > windowWidth * 0.6) {
|
80
|
+
position += '-right';
|
81
|
+
} else if (horizontalPoint < windowWidth * 0.4) {
|
82
|
+
position += '-left';
|
83
|
+
}
|
70
84
|
}
|
71
85
|
}
|
72
86
|
return position;
|
@@ -74,7 +88,8 @@ var getPopoverPosition = function getPopoverPosition(target) {
|
|
74
88
|
var getPosition = exports.getPosition = function getPosition(target) {
|
75
89
|
var priorityDirection = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'vertical';
|
76
90
|
var mode = arguments.length > 2 ? arguments[2] : undefined;
|
77
|
-
|
91
|
+
var popup = arguments.length > 3 ? arguments[3] : undefined;
|
92
|
+
if (mode === 'popover') return getPopoverPosition(target, priorityDirection, popup);
|
78
93
|
if (mode === 'menu') return getMenuPosition(target, priorityDirection);
|
79
94
|
return 'bottom-left';
|
80
95
|
};
|
@@ -16,6 +16,9 @@ export interface PositionStyleConfig {
|
|
16
16
|
updateKey?: number | string;
|
17
17
|
adjust?: boolean;
|
18
18
|
}
|
19
|
-
export declare const usePositionStyle: (config: PositionStyleConfig) =>
|
19
|
+
export declare const usePositionStyle: (config: PositionStyleConfig) => {
|
20
|
+
style: React.CSSProperties;
|
21
|
+
arrayStyle: React.CSSProperties;
|
22
|
+
};
|
20
23
|
export default usePositionStyle;
|
21
24
|
//# sourceMappingURL=index.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAMnD,MAAM,MAAM,kBAAkB,GAC1B,aAAa,GACb,UAAU,GACV,cAAc,GACd,WAAW,GACX,MAAM,GACN,OAAO,CAAC;AACZ,MAAM,MAAM,gBAAgB,GACxB,aAAa,GACb,cAAc,GACd,UAAU,GACV,WAAW,GACX,KAAK,GACL,QAAQ,CAAC;AAYb,KAAK,YAAY,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,OAAO,CAAC;AACpE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,YAAY,GAAG,SAAS,CAAC;IACnC,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IAEd,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAE1C,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAEzC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAC3C,YAAY,EAAE,MAAM,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAQD,eAAO,MAAM,gBAAgB,WAAY,mBAAmB,
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAMnD,MAAM,MAAM,kBAAkB,GAC1B,aAAa,GACb,UAAU,GACV,cAAc,GACd,WAAW,GACX,MAAM,GACN,OAAO,CAAC;AACZ,MAAM,MAAM,gBAAgB,GACxB,aAAa,GACb,cAAc,GACd,UAAU,GACV,WAAW,GACX,KAAK,GACL,QAAQ,CAAC;AAYb,KAAK,YAAY,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,OAAO,CAAC;AACpE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,YAAY,GAAG,SAAS,CAAC;IACnC,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IAEd,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAE1C,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAEzC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAC3C,YAAY,EAAE,MAAM,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAQD,eAAO,MAAM,gBAAgB,WAAY,mBAAmB;;;CAmS3D,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
@@ -9,7 +9,7 @@ import React, { useEffect, useState } from 'react';
|
|
9
9
|
import { getPositionStyle } from "./get-position-style";
|
10
10
|
import shallowEqual from "../../utils/shallow-equal";
|
11
11
|
import usePersistFn from "../use-persist-fn";
|
12
|
-
import { docSize } from "../../utils";
|
12
|
+
import { docSize, isChromeLowerThan } from "../../utils";
|
13
13
|
var horizontalPosition = ['left-bottom', 'left-top', 'right-bottom', 'right-top', 'left', 'right'];
|
14
14
|
var verticalPosition = ['bottom-left', 'bottom-right', 'top-left', 'top-right', 'bottom', 'top'];
|
15
15
|
var hideStyle = {
|
@@ -39,6 +39,10 @@ export var usePositionStyle = function usePositionStyle(config) {
|
|
39
39
|
_useState2 = _slicedToArray(_useState, 2),
|
40
40
|
style = _useState2[0],
|
41
41
|
setStyle = _useState2[1];
|
42
|
+
var _useState3 = useState({}),
|
43
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
44
|
+
arrayStyle = _useState4[0],
|
45
|
+
setArrayStyle = _useState4[1];
|
42
46
|
var _React$useRef = React.useRef({
|
43
47
|
element: null,
|
44
48
|
containerRect: {
|
@@ -112,10 +116,12 @@ export var usePositionStyle = function usePositionStyle(config) {
|
|
112
116
|
};
|
113
117
|
};
|
114
118
|
var getAbsolutePositionStyle = function getAbsolutePositionStyle(rect, position) {
|
119
|
+
var _popupElRef$current;
|
115
120
|
var style = {
|
116
121
|
position: 'absolute',
|
117
122
|
zIndex: zIndex
|
118
123
|
};
|
124
|
+
var arrayStyle = {};
|
119
125
|
if (fixedWidth) {
|
120
126
|
var widthKey = fixedWidth === 'min' ? 'minWidth' : 'width';
|
121
127
|
style[widthKey] = rect.width;
|
@@ -125,6 +131,7 @@ export var usePositionStyle = function usePositionStyle(config) {
|
|
125
131
|
var containerRect = rootContainer.getBoundingClientRect();
|
126
132
|
var bodyRect = (document.documentElement || document.body).getBoundingClientRect();
|
127
133
|
var containerScrollBarWidth = rootContainer.offsetWidth - rootContainer.clientWidth;
|
134
|
+
var targetRect = (_popupElRef$current = popupElRef.current) === null || _popupElRef$current === void 0 ? void 0 : _popupElRef$current.getBoundingClientRect();
|
128
135
|
var containerScroll = {
|
129
136
|
left: rootContainer.scrollLeft,
|
130
137
|
top: rootContainer.scrollTop
|
@@ -141,14 +148,25 @@ export var usePositionStyle = function usePositionStyle(config) {
|
|
141
148
|
if (h === 'left') {
|
142
149
|
style.left = rect.left - containerRect.left + containerScroll.left;
|
143
150
|
style.transform = '';
|
151
|
+
arrayStyle.left = "8px";
|
144
152
|
if (adjust) {
|
145
153
|
overRight = rect.left + context.popUpWidth - bodyRect.right + containerScrollBarWidth;
|
154
|
+
if (style.left < 0 && targetRect) {
|
155
|
+
style.left = 'auto';
|
156
|
+
}
|
146
157
|
}
|
147
158
|
} else if (h === 'right') {
|
148
159
|
style.right = containerRect.right - rect.right + containerScrollBarWidth - containerScroll.left;
|
149
160
|
style.left = 'auto';
|
150
161
|
style.transform = '';
|
151
|
-
|
162
|
+
arrayStyle.right = "8px";
|
163
|
+
if (adjust) {
|
164
|
+
overLeft = bodyRect.left - (rect.right - context.popUpWidth);
|
165
|
+
if (style.right < 0 && targetRect) {
|
166
|
+
style.left = bodyRect.width - targetRect.width;
|
167
|
+
style.right = 'auto';
|
168
|
+
}
|
169
|
+
}
|
152
170
|
} else {
|
153
171
|
// 居中对齐
|
154
172
|
style.left = rect.left + rect.width / 2 - containerRect.left + containerScroll.left;
|
@@ -157,6 +175,9 @@ export var usePositionStyle = function usePositionStyle(config) {
|
|
157
175
|
overRight = rect.left + rect.width / 2 + context.popUpWidth / 2 - bodyRect.width + containerScrollBarWidth;
|
158
176
|
overLeft = bodyRect.left - (rect.left + rect.width / 2 - context.popUpWidth / 2);
|
159
177
|
}
|
178
|
+
if (targetRect) {
|
179
|
+
arrayStyle.left = "".concat(targetRect.width / 2 - 5.9, "px");
|
180
|
+
}
|
160
181
|
}
|
161
182
|
if (adjust) {
|
162
183
|
// 调节左右溢出
|
@@ -165,16 +186,26 @@ export var usePositionStyle = function usePositionStyle(config) {
|
|
165
186
|
style.left -= overRight;
|
166
187
|
// 扣除触发器距离页面右侧的距离,以保证从右侧弹出的窗口最右边对齐触发器最右边
|
167
188
|
style.left -= toRightDistance;
|
189
|
+
if (targetRect) {
|
190
|
+
arrayStyle.left = "".concat((targetRect === null || targetRect === void 0 ? void 0 : targetRect.width) - context.parentRect.width / 2 - 5.9, "px");
|
191
|
+
}
|
168
192
|
}
|
169
193
|
if (overLeft > 0) {
|
170
194
|
style.left += overLeft;
|
195
|
+
arrayStyle.left = "".concat(rect.width / 2 - 5.9, "px");
|
171
196
|
}
|
172
197
|
}
|
173
198
|
if (v === 'bottom') {
|
174
199
|
style.top = rect.bottom - containerRect.top + containerScroll.top + popupGap;
|
200
|
+
if (targetRect) {
|
201
|
+
arrayStyle.top = "".concat(0, "px");
|
202
|
+
}
|
175
203
|
} else {
|
176
204
|
style.top = rect.top - containerRect.top + containerScroll.top - popupGap;
|
177
205
|
style.transform += 'translateY(-100%)';
|
206
|
+
if (targetRect) {
|
207
|
+
arrayStyle.top = "".concat(targetRect.height - 5.9 - 4, "px");
|
208
|
+
}
|
178
209
|
}
|
179
210
|
} else if (horizontalPosition.includes(targetPosition)) {
|
180
211
|
var _targetPosition$split3 = targetPosition.split('-'),
|
@@ -184,45 +215,88 @@ export var usePositionStyle = function usePositionStyle(config) {
|
|
184
215
|
if (_v === 'top') {
|
185
216
|
style.top = rect.top - containerRect.top + containerScroll.top;
|
186
217
|
style.transform = '';
|
218
|
+
arrayStyle.top = "8px";
|
187
219
|
} else if (_v === 'bottom') {
|
188
220
|
style.top = rect.bottom - containerRect.top + containerScroll.top;
|
221
|
+
arrayStyle.bottom = "8px";
|
189
222
|
style.transform = 'translateY(-100%)';
|
190
223
|
} else {
|
191
224
|
// 居中对齐
|
192
225
|
style.top = rect.top - containerRect.top + containerScroll.top + rect.height / 2;
|
226
|
+
if (targetRect) {
|
227
|
+
arrayStyle.top = "".concat(targetRect.height / 2 - 5.9 / 2, "px");
|
228
|
+
}
|
193
229
|
style.transform = 'translateY(-50%)';
|
194
230
|
}
|
195
231
|
if (_h === 'right') {
|
196
232
|
style.left = rect.right - containerRect.left + containerScroll.left + popupGap;
|
197
233
|
} else {
|
198
234
|
style.left = rect.left - containerRect.left + containerScroll.left - popupGap;
|
235
|
+
arrayStyle.right = "0px";
|
199
236
|
style.transform += ' translateX(-100%)';
|
200
237
|
}
|
201
238
|
} else if (position === 'cover') {
|
202
239
|
style.top = rect.top - containerRect.top + containerScroll.top;
|
203
240
|
style.left = rect.left - containerRect.left + containerScroll.left;
|
204
241
|
}
|
205
|
-
return
|
242
|
+
return {
|
243
|
+
style: style,
|
244
|
+
arrayStyle: arrayStyle
|
245
|
+
};
|
206
246
|
};
|
207
247
|
var getAbsoluteStyle = function getAbsoluteStyle(position) {
|
208
|
-
if (!parentElRef.current) return
|
248
|
+
if (!parentElRef.current) return {
|
249
|
+
style: hideStyle
|
250
|
+
};
|
209
251
|
var rect = context.parentRect;
|
210
252
|
if (scrollElRef !== null && scrollElRef !== void 0 && scrollElRef.current) {
|
211
253
|
var _scrollElRef$current;
|
212
254
|
var visibleRect = ((_scrollElRef$current = scrollElRef.current) === null || _scrollElRef$current === void 0 ? void 0 : _scrollElRef$current.getBoundingClientRect()) || {};
|
213
255
|
if (rect.bottom < visibleRect.top || rect.top > visibleRect.bottom || rect.right < visibleRect.left || rect.left > visibleRect.right) {
|
214
|
-
return
|
256
|
+
return {
|
257
|
+
style: hideStyle
|
258
|
+
};
|
259
|
+
}
|
260
|
+
}
|
261
|
+
var _getAbsolutePositionS = getAbsolutePositionStyle(rect, position),
|
262
|
+
style = _getAbsolutePositionS.style,
|
263
|
+
arrayStyle = _getAbsolutePositionS.arrayStyle;
|
264
|
+
|
265
|
+
// TODO: 如果是版本大于chrome128,需要根据currentCSSZoom处理chrome的bug
|
266
|
+
if (!isChromeLowerThan(128)) {
|
267
|
+
// @ts-ignore currentCSSZoom
|
268
|
+
var currentCSSZoom = document.body.currentCSSZoom;
|
269
|
+
if (currentCSSZoom === 1 || !currentCSSZoom) return {
|
270
|
+
style: style,
|
271
|
+
arrayStyle: arrayStyle
|
272
|
+
};
|
273
|
+
if (style.left && typeof style.left === 'number') {
|
274
|
+
style.left = style.left * (1 / currentCSSZoom);
|
275
|
+
}
|
276
|
+
if (style.top && typeof style.top === 'number') {
|
277
|
+
style.top = style.top * (1 / currentCSSZoom);
|
278
|
+
}
|
279
|
+
if (style.right && typeof style.right === 'number') {
|
280
|
+
style.right = style.right * (1 / currentCSSZoom);
|
281
|
+
}
|
282
|
+
if (style.bottom && typeof style.bottom === 'number') {
|
283
|
+
style.bottom = style.bottom * (1 / currentCSSZoom);
|
215
284
|
}
|
216
285
|
}
|
217
|
-
|
218
|
-
|
286
|
+
return {
|
287
|
+
style: style,
|
288
|
+
arrayStyle: arrayStyle
|
289
|
+
};
|
219
290
|
};
|
220
291
|
var getStyle = function getStyle() {
|
221
292
|
var newStyle = {};
|
293
|
+
var newArrayStyle = {};
|
222
294
|
var _ref2 = config || {},
|
223
295
|
position = _ref2.position,
|
224
296
|
absolute = _ref2.absolute;
|
225
|
-
if (!position || !show || !parentElRef.current) return
|
297
|
+
if (!position || !show || !parentElRef.current) return {
|
298
|
+
newStyle: style
|
299
|
+
};
|
226
300
|
context.parentRect = parentElRef.current.getBoundingClientRect();
|
227
301
|
if (adjust) {
|
228
302
|
var popupInfo = getPopUpInfo(context.parentRect);
|
@@ -237,21 +311,34 @@ export var usePositionStyle = function usePositionStyle(config) {
|
|
237
311
|
fixedWidth: fixedWidth
|
238
312
|
});
|
239
313
|
} else {
|
240
|
-
|
314
|
+
var _ref3 = getAbsoluteStyle(realPosition),
|
315
|
+
nextStyle = _ref3.style,
|
316
|
+
nextArrayStyle = _ref3.arrayStyle;
|
317
|
+
newStyle = nextStyle;
|
318
|
+
newArrayStyle = nextArrayStyle;
|
241
319
|
}
|
242
320
|
// for animation
|
243
321
|
if (realPosition.indexOf('top') === 0) {
|
244
322
|
newStyle.transformOrigin = 'center bottom';
|
245
323
|
}
|
246
|
-
return
|
324
|
+
return {
|
325
|
+
newStyle: newStyle,
|
326
|
+
newArrayStyle: newArrayStyle
|
327
|
+
};
|
247
328
|
};
|
248
329
|
var updateStyle = usePersistFn(function () {
|
249
|
-
var
|
330
|
+
var _getStyle = getStyle(),
|
331
|
+
newStyle = _getStyle.newStyle,
|
332
|
+
newArrayStyle = _getStyle.newArrayStyle;
|
250
333
|
if (newStyle && !shallowEqual(style, newStyle)) {
|
251
334
|
setStyle(newStyle);
|
335
|
+
setArrayStyle(newArrayStyle || {});
|
252
336
|
}
|
253
337
|
});
|
254
338
|
useEffect(updateStyle, [show, position, absolute, updateKey, fixedWidth]);
|
255
|
-
return
|
339
|
+
return {
|
340
|
+
style: style,
|
341
|
+
arrayStyle: arrayStyle
|
342
|
+
};
|
256
343
|
};
|
257
344
|
export default usePositionStyle;
|
@@ -12,7 +12,7 @@ declare const useDate: (props: UseDateProps) => {
|
|
12
12
|
isToday: (date: Date) => boolean;
|
13
13
|
isDisabled: (date: Date) => boolean;
|
14
14
|
isActive: (date: Date) => boolean;
|
15
|
-
isInRange: (date: Date) => false | "
|
15
|
+
isInRange: (date: Date) => false | "end" | "start" | "start-end" | "in";
|
16
16
|
isCurrentMonth: (date: Date) => boolean;
|
17
17
|
handleDayClick: (date: Date) => void;
|
18
18
|
getDayStr: (date: Date) => number;
|
@@ -9,7 +9,7 @@ declare const useMonth: (props: UseMonthProps) => {
|
|
9
9
|
isNow: (date: Date) => boolean;
|
10
10
|
isDisabled: (date: Date) => boolean;
|
11
11
|
isActive: (date: Date) => boolean;
|
12
|
-
isInRange: (date: Date) => false | "
|
12
|
+
isInRange: (date: Date) => false | "end" | "start" | "start-end" | "in";
|
13
13
|
handleMonthClick: (date: Date) => void;
|
14
14
|
getMonthStr: (date: Date) => number;
|
15
15
|
};
|
@@ -9,7 +9,7 @@ declare const useQuarter: (props: UseMonthProps) => {
|
|
9
9
|
isNow: (date: Date) => boolean;
|
10
10
|
isDisabled: (date: Date) => boolean;
|
11
11
|
isActive: (date: Date) => boolean;
|
12
|
-
isInRange: (date: Date) => false | "
|
12
|
+
isInRange: (date: Date) => false | "end" | "start" | "start-end" | "in";
|
13
13
|
handleQuarterClick: (date: Date) => void;
|
14
14
|
getQuarterStr: (date: Date) => number;
|
15
15
|
};
|
@@ -11,7 +11,7 @@ declare const useYear: (props: UseYearProps) => {
|
|
11
11
|
isNow: (date: Date) => boolean;
|
12
12
|
isDisabled: (date: Date) => boolean;
|
13
13
|
isActive: (date: Date) => boolean;
|
14
|
-
isInRange: (date: Date) => false | "
|
14
|
+
isInRange: (date: Date) => false | "end" | "start" | "start-end" | "in";
|
15
15
|
handleYearClick: (date: Date) => void;
|
16
16
|
getYearStr: (date: Date) => number;
|
17
17
|
};
|
@@ -5,7 +5,7 @@ declare const useInputFormat: (props: InputFormatProps) => {
|
|
5
5
|
onBlur: (e: React.FocusEvent) => void;
|
6
6
|
onFocus: (e: React.FocusEvent) => void;
|
7
7
|
value: string | undefined;
|
8
|
-
type: "search" | "color" | "button" | "time" | "image" | "text" | "reset" | "submit" | "email" | "url" | "range" | "tel" | (string & {}) | "
|
8
|
+
type: "search" | "color" | "button" | "time" | "image" | "text" | "reset" | "submit" | "email" | "url" | "range" | "tel" | (string & {}) | "checkbox" | "radio" | "hidden" | "date" | "datetime-local" | "file" | "month" | "password" | "week" | undefined;
|
9
9
|
};
|
10
10
|
export default useInputFormat;
|
11
11
|
//# sourceMappingURL=use-input-format.d.ts.map
|
@@ -7,7 +7,7 @@ declare const useNumberFormat: (props: InputNumberProps) => {
|
|
7
7
|
onBlur: (e: React.FocusEvent<Element, Element>) => void;
|
8
8
|
onFocus: (e: React.FocusEvent<Element, Element>) => void;
|
9
9
|
value: string | undefined;
|
10
|
-
type: "search" | "color" | "button" | "time" | "image" | "text" | "reset" | "submit" | "email" | "url" | "range" | "tel" | (string & {}) | "
|
10
|
+
type: "search" | "color" | "button" | "time" | "image" | "text" | "reset" | "submit" | "email" | "url" | "range" | "tel" | (string & {}) | "checkbox" | "radio" | "hidden" | "date" | "datetime-local" | "file" | "month" | "password" | "week" | undefined;
|
11
11
|
};
|
12
12
|
export default useNumberFormat;
|
13
13
|
//# sourceMappingURL=use-input-number.d.ts.map
|
@@ -5,6 +5,7 @@ declare const usePopup: (props: BasePopupProps) => {
|
|
5
5
|
position: PositionType;
|
6
6
|
targetRef: React.MutableRefObject<HTMLDivElement | null>;
|
7
7
|
popupRef: React.MutableRefObject<HTMLDivElement | null>;
|
8
|
+
arrowRef: React.MutableRefObject<HTMLSpanElement | null>;
|
8
9
|
getTargetProps: () => {
|
9
10
|
onMouseEnter: (e: {
|
10
11
|
target: EventTarget | null;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"use-popup.d.ts","sourceRoot":"","sources":["use-popup.ts"],"names":[],"mappings":"AAAA,OAAO,KAA2D,MAAM,OAAO,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAMhE,QAAA,MAAM,QAAQ,UAAW,cAAc
|
1
|
+
{"version":3,"file":"use-popup.d.ts","sourceRoot":"","sources":["use-popup.ts"],"names":[],"mappings":"AAAA,OAAO,KAA2D,MAAM,OAAO,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAMhE,QAAA,MAAM,QAAQ,UAAW,cAAc;;;;;;;0BA2HK;YAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;SAAE;0BAM9B;YAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;SAAE;;;;;qBA5B7B;YAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;SAAE;;;;;;;;;;;;;;;;;;;;;;;;;2BA6ElD,MAAM,gBAAgB,CAAC,WAAW,GAAG,IAAI,CAAC;6BAGxC,MAAM,gBAAgB,CAAC,WAAW,GAAG,IAAI,CAAC;;CAsBpE,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
@@ -30,6 +30,7 @@ var usePopup = function usePopup(props) {
|
|
30
30
|
removeChild = _useContext.removeChild;
|
31
31
|
var targetRef = useRef(null);
|
32
32
|
var popupRef = useRef(null);
|
33
|
+
var arrowRef = useRef(null);
|
33
34
|
useEffect(function () {
|
34
35
|
bindChild(popupRef);
|
35
36
|
return function () {
|
@@ -61,11 +62,12 @@ var usePopup = function usePopup(props) {
|
|
61
62
|
setPositionState = _useState4[1];
|
62
63
|
var position = isPositionControl ? props.position : positionState;
|
63
64
|
var updatePosition = usePersistFn(function () {
|
64
|
-
if (isPositionControl) return;
|
65
|
-
if (props.position === 'auto' || !props.position) {
|
66
|
-
|
65
|
+
// if (isPositionControl) return;
|
66
|
+
// if (props.position === 'auto' || !props.position) {
|
67
|
+
setTimeout(function () {
|
68
|
+
var newPosition = getPosition(targetRef.current, props.priorityDirection, autoMode, popupRef.current || undefined);
|
67
69
|
if (newPosition !== position) setPositionState(newPosition);
|
68
|
-
}
|
70
|
+
}, 10);
|
69
71
|
});
|
70
72
|
useEffect(function () {
|
71
73
|
if (props.open) {
|
@@ -194,6 +196,7 @@ var usePopup = function usePopup(props) {
|
|
194
196
|
position: position,
|
195
197
|
targetRef: targetRef,
|
196
198
|
popupRef: popupRef,
|
199
|
+
arrowRef: arrowRef,
|
197
200
|
getTargetProps: getTargetProps,
|
198
201
|
openPop: openPop,
|
199
202
|
closePop: closePop,
|
package/esm/utils/position.d.ts
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
export declare const getPosition: (target: HTMLElement | null, priorityDirection: "vertical" | "horizontal" | "auto" | undefined, mode: 'popover' | 'menu' | 'list') => "bottom" | "left" | "right" | "top" | "top-left" | "top-right" | "bottom-left" | "bottom-right" | "left-top" | "left-bottom" | "right-top" | "right-bottom";
|
1
|
+
export declare const getPosition: (target: HTMLElement | null, priorityDirection: "vertical" | "horizontal" | "auto" | undefined, mode: 'popover' | 'menu' | 'list', popup?: HTMLElement) => "bottom" | "left" | "right" | "top" | "top-left" | "top-right" | "bottom-left" | "bottom-right" | "left-top" | "left-bottom" | "right-top" | "right-bottom";
|
2
2
|
//# sourceMappingURL=position.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"position.d.ts","sourceRoot":"","sources":["position.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"position.d.ts","sourceRoot":"","sources":["position.ts"],"names":[],"mappings":"AAiGA,eAAO,MAAM,WAAW,WACd,WAAW,GAAG,IAAI,2EAEpB,SAAS,GAAG,MAAM,GAAG,MAAM,UACzB,WAAW,gKAKpB,CAAC"}
|
package/esm/utils/position.js
CHANGED
@@ -35,6 +35,7 @@ var getMenuPosition = function getMenuPosition(target) {
|
|
35
35
|
};
|
36
36
|
var getPopoverPosition = function getPopoverPosition(target) {
|
37
37
|
var priorityDirection = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'vertical';
|
38
|
+
var popup = arguments.length > 2 ? arguments[2] : undefined;
|
38
39
|
var position = 'bottom-left';
|
39
40
|
if (!target) return position;
|
40
41
|
var rect = target.getBoundingClientRect();
|
@@ -56,11 +57,24 @@ var getPopoverPosition = function getPopoverPosition(target) {
|
|
56
57
|
position += '-top';
|
57
58
|
}
|
58
59
|
} else {
|
60
|
+
var popupRect = popup === null || popup === void 0 ? void 0 : popup.getBoundingClientRect();
|
59
61
|
if (verticalPoint > windowHeight / 2) position = 'top';else position = 'bottom';
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
62
|
+
|
63
|
+
// 如果渲染了弹出内容,则根据弹出内容宽度计算是否自动调整位置
|
64
|
+
if (popupRect) {
|
65
|
+
if ((popupRect === null || popupRect === void 0 ? void 0 : popupRect.width) / 2 > rect.left) {
|
66
|
+
position += '-left';
|
67
|
+
}
|
68
|
+
if ((popupRect === null || popupRect === void 0 ? void 0 : popupRect.width) / 2 > windowWidth - rect.right) {
|
69
|
+
position += '-right';
|
70
|
+
}
|
71
|
+
} else {
|
72
|
+
// 兜底计算
|
73
|
+
if (horizontalPoint > windowWidth * 0.6) {
|
74
|
+
position += '-right';
|
75
|
+
} else if (horizontalPoint < windowWidth * 0.4) {
|
76
|
+
position += '-left';
|
77
|
+
}
|
64
78
|
}
|
65
79
|
}
|
66
80
|
return position;
|
@@ -68,7 +82,8 @@ var getPopoverPosition = function getPopoverPosition(target) {
|
|
68
82
|
export var getPosition = function getPosition(target) {
|
69
83
|
var priorityDirection = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'vertical';
|
70
84
|
var mode = arguments.length > 2 ? arguments[2] : undefined;
|
71
|
-
|
85
|
+
var popup = arguments.length > 3 ? arguments[3] : undefined;
|
86
|
+
if (mode === 'popover') return getPopoverPosition(target, priorityDirection, popup);
|
72
87
|
if (mode === 'menu') return getMenuPosition(target, priorityDirection);
|
73
88
|
return 'bottom-left';
|
74
89
|
};
|