@sheinx/hooks 3.3.6-beta.2 → 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 +80 -15
- 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 +80 -15
- 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,46 +225,61 @@ 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
|
-
console.log('======================');
|
221
|
-
console.log('rect: >>', rect);
|
222
|
-
console.log('======================');
|
223
262
|
if (scrollElRef !== null && scrollElRef !== void 0 && scrollElRef.current) {
|
224
263
|
var _scrollElRef$current;
|
225
264
|
var visibleRect = ((_scrollElRef$current = scrollElRef.current) === null || _scrollElRef$current === void 0 ? void 0 : _scrollElRef$current.getBoundingClientRect()) || {};
|
226
265
|
if (rect.bottom < visibleRect.top || rect.top > visibleRect.bottom || rect.right < visibleRect.left || rect.left > visibleRect.right) {
|
227
|
-
return
|
266
|
+
return {
|
267
|
+
style: hideStyle
|
268
|
+
};
|
228
269
|
}
|
229
270
|
}
|
230
|
-
var
|
271
|
+
var _getAbsolutePositionS = getAbsolutePositionStyle(rect, position),
|
272
|
+
style = _getAbsolutePositionS.style,
|
273
|
+
arrayStyle = _getAbsolutePositionS.arrayStyle;
|
231
274
|
|
232
275
|
// TODO: 如果是版本大于chrome128,需要根据currentCSSZoom处理chrome的bug
|
233
276
|
if (!(0, _utils.isChromeLowerThan)(128)) {
|
234
277
|
// @ts-ignore currentCSSZoom
|
235
278
|
var currentCSSZoom = document.body.currentCSSZoom;
|
236
|
-
if (currentCSSZoom === 1 || !currentCSSZoom) return
|
279
|
+
if (currentCSSZoom === 1 || !currentCSSZoom) return {
|
280
|
+
style: style,
|
281
|
+
arrayStyle: arrayStyle
|
282
|
+
};
|
237
283
|
if (style.left && typeof style.left === 'number') {
|
238
284
|
style.left = style.left * (1 / currentCSSZoom);
|
239
285
|
}
|
@@ -247,14 +293,20 @@ var usePositionStyle = exports.usePositionStyle = function usePositionStyle(conf
|
|
247
293
|
style.bottom = style.bottom * (1 / currentCSSZoom);
|
248
294
|
}
|
249
295
|
}
|
250
|
-
return
|
296
|
+
return {
|
297
|
+
style: style,
|
298
|
+
arrayStyle: arrayStyle
|
299
|
+
};
|
251
300
|
};
|
252
301
|
var getStyle = function getStyle() {
|
253
302
|
var newStyle = {};
|
303
|
+
var newArrayStyle = {};
|
254
304
|
var _ref2 = config || {},
|
255
305
|
position = _ref2.position,
|
256
306
|
absolute = _ref2.absolute;
|
257
|
-
if (!position || !show || !parentElRef.current) return
|
307
|
+
if (!position || !show || !parentElRef.current) return {
|
308
|
+
newStyle: style
|
309
|
+
};
|
258
310
|
context.parentRect = parentElRef.current.getBoundingClientRect();
|
259
311
|
if (adjust) {
|
260
312
|
var popupInfo = getPopUpInfo(context.parentRect);
|
@@ -269,21 +321,34 @@ var usePositionStyle = exports.usePositionStyle = function usePositionStyle(conf
|
|
269
321
|
fixedWidth: fixedWidth
|
270
322
|
});
|
271
323
|
} else {
|
272
|
-
|
324
|
+
var _ref3 = getAbsoluteStyle(realPosition),
|
325
|
+
nextStyle = _ref3.style,
|
326
|
+
nextArrayStyle = _ref3.arrayStyle;
|
327
|
+
newStyle = nextStyle;
|
328
|
+
newArrayStyle = nextArrayStyle;
|
273
329
|
}
|
274
330
|
// for animation
|
275
331
|
if (realPosition.indexOf('top') === 0) {
|
276
332
|
newStyle.transformOrigin = 'center bottom';
|
277
333
|
}
|
278
|
-
return
|
334
|
+
return {
|
335
|
+
newStyle: newStyle,
|
336
|
+
newArrayStyle: newArrayStyle
|
337
|
+
};
|
279
338
|
};
|
280
339
|
var updateStyle = (0, _usePersistFn.default)(function () {
|
281
|
-
var
|
340
|
+
var _getStyle = getStyle(),
|
341
|
+
newStyle = _getStyle.newStyle,
|
342
|
+
newArrayStyle = _getStyle.newArrayStyle;
|
282
343
|
if (newStyle && !(0, _shallowEqual.default)(style, newStyle)) {
|
283
344
|
setStyle(newStyle);
|
345
|
+
setArrayStyle(newArrayStyle || {});
|
284
346
|
}
|
285
347
|
});
|
286
348
|
(0, _react.useEffect)(updateStyle, [show, position, absolute, updateKey, fixedWidth]);
|
287
|
-
return
|
349
|
+
return {
|
350
|
+
style: style,
|
351
|
+
arrayStyle: arrayStyle
|
352
|
+
};
|
288
353
|
};
|
289
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"}
|
@@ -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,46 +215,61 @@ 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
|
-
console.log('======================');
|
211
|
-
console.log('rect: >>', rect);
|
212
|
-
console.log('======================');
|
213
252
|
if (scrollElRef !== null && scrollElRef !== void 0 && scrollElRef.current) {
|
214
253
|
var _scrollElRef$current;
|
215
254
|
var visibleRect = ((_scrollElRef$current = scrollElRef.current) === null || _scrollElRef$current === void 0 ? void 0 : _scrollElRef$current.getBoundingClientRect()) || {};
|
216
255
|
if (rect.bottom < visibleRect.top || rect.top > visibleRect.bottom || rect.right < visibleRect.left || rect.left > visibleRect.right) {
|
217
|
-
return
|
256
|
+
return {
|
257
|
+
style: hideStyle
|
258
|
+
};
|
218
259
|
}
|
219
260
|
}
|
220
|
-
var
|
261
|
+
var _getAbsolutePositionS = getAbsolutePositionStyle(rect, position),
|
262
|
+
style = _getAbsolutePositionS.style,
|
263
|
+
arrayStyle = _getAbsolutePositionS.arrayStyle;
|
221
264
|
|
222
265
|
// TODO: 如果是版本大于chrome128,需要根据currentCSSZoom处理chrome的bug
|
223
266
|
if (!isChromeLowerThan(128)) {
|
224
267
|
// @ts-ignore currentCSSZoom
|
225
268
|
var currentCSSZoom = document.body.currentCSSZoom;
|
226
|
-
if (currentCSSZoom === 1 || !currentCSSZoom) return
|
269
|
+
if (currentCSSZoom === 1 || !currentCSSZoom) return {
|
270
|
+
style: style,
|
271
|
+
arrayStyle: arrayStyle
|
272
|
+
};
|
227
273
|
if (style.left && typeof style.left === 'number') {
|
228
274
|
style.left = style.left * (1 / currentCSSZoom);
|
229
275
|
}
|
@@ -237,14 +283,20 @@ export var usePositionStyle = function usePositionStyle(config) {
|
|
237
283
|
style.bottom = style.bottom * (1 / currentCSSZoom);
|
238
284
|
}
|
239
285
|
}
|
240
|
-
return
|
286
|
+
return {
|
287
|
+
style: style,
|
288
|
+
arrayStyle: arrayStyle
|
289
|
+
};
|
241
290
|
};
|
242
291
|
var getStyle = function getStyle() {
|
243
292
|
var newStyle = {};
|
293
|
+
var newArrayStyle = {};
|
244
294
|
var _ref2 = config || {},
|
245
295
|
position = _ref2.position,
|
246
296
|
absolute = _ref2.absolute;
|
247
|
-
if (!position || !show || !parentElRef.current) return
|
297
|
+
if (!position || !show || !parentElRef.current) return {
|
298
|
+
newStyle: style
|
299
|
+
};
|
248
300
|
context.parentRect = parentElRef.current.getBoundingClientRect();
|
249
301
|
if (adjust) {
|
250
302
|
var popupInfo = getPopUpInfo(context.parentRect);
|
@@ -259,21 +311,34 @@ export var usePositionStyle = function usePositionStyle(config) {
|
|
259
311
|
fixedWidth: fixedWidth
|
260
312
|
});
|
261
313
|
} else {
|
262
|
-
|
314
|
+
var _ref3 = getAbsoluteStyle(realPosition),
|
315
|
+
nextStyle = _ref3.style,
|
316
|
+
nextArrayStyle = _ref3.arrayStyle;
|
317
|
+
newStyle = nextStyle;
|
318
|
+
newArrayStyle = nextArrayStyle;
|
263
319
|
}
|
264
320
|
// for animation
|
265
321
|
if (realPosition.indexOf('top') === 0) {
|
266
322
|
newStyle.transformOrigin = 'center bottom';
|
267
323
|
}
|
268
|
-
return
|
324
|
+
return {
|
325
|
+
newStyle: newStyle,
|
326
|
+
newArrayStyle: newArrayStyle
|
327
|
+
};
|
269
328
|
};
|
270
329
|
var updateStyle = usePersistFn(function () {
|
271
|
-
var
|
330
|
+
var _getStyle = getStyle(),
|
331
|
+
newStyle = _getStyle.newStyle,
|
332
|
+
newArrayStyle = _getStyle.newArrayStyle;
|
272
333
|
if (newStyle && !shallowEqual(style, newStyle)) {
|
273
334
|
setStyle(newStyle);
|
335
|
+
setArrayStyle(newArrayStyle || {});
|
274
336
|
}
|
275
337
|
});
|
276
338
|
useEffect(updateStyle, [show, position, absolute, updateKey, fixedWidth]);
|
277
|
-
return
|
339
|
+
return {
|
340
|
+
style: style,
|
341
|
+
arrayStyle: arrayStyle
|
342
|
+
};
|
278
343
|
};
|
279
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
|
};
|