@sheinx/hooks 3.3.6-beta.2 → 3.3.6-beta.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) hide show
  1. package/cjs/common/use-position-style/index.d.ts +4 -1
  2. package/cjs/common/use-position-style/index.d.ts.map +1 -1
  3. package/cjs/common/use-position-style/index.js +80 -15
  4. package/cjs/components/use-datepicker/use-date.d.ts +1 -1
  5. package/cjs/components/use-datepicker/use-month.d.ts +1 -1
  6. package/cjs/components/use-datepicker/use-quarter.d.ts +1 -1
  7. package/cjs/components/use-datepicker/use-year.d.ts +1 -1
  8. package/cjs/components/use-input/use-input-format.d.ts +1 -1
  9. package/cjs/components/use-input/use-input-number.d.ts +1 -1
  10. package/cjs/components/use-popup/use-popup.d.ts +1 -0
  11. package/cjs/components/use-popup/use-popup.d.ts.map +1 -1
  12. package/cjs/components/use-popup/use-popup.js +7 -4
  13. package/cjs/utils/position.d.ts +1 -1
  14. package/cjs/utils/position.d.ts.map +1 -1
  15. package/cjs/utils/position.js +20 -5
  16. package/esm/common/use-position-style/index.d.ts +4 -1
  17. package/esm/common/use-position-style/index.d.ts.map +1 -1
  18. package/esm/common/use-position-style/index.js +80 -15
  19. package/esm/components/use-datepicker/use-date.d.ts +1 -1
  20. package/esm/components/use-datepicker/use-month.d.ts +1 -1
  21. package/esm/components/use-datepicker/use-quarter.d.ts +1 -1
  22. package/esm/components/use-datepicker/use-year.d.ts +1 -1
  23. package/esm/components/use-input/use-input-format.d.ts +1 -1
  24. package/esm/components/use-input/use-input-number.d.ts +1 -1
  25. package/esm/components/use-popup/use-popup.d.ts +1 -0
  26. package/esm/components/use-popup/use-popup.d.ts.map +1 -1
  27. package/esm/components/use-popup/use-popup.js +7 -4
  28. package/esm/utils/position.d.ts +1 -1
  29. package/esm/utils/position.d.ts.map +1 -1
  30. package/esm/utils/position.js +20 -5
  31. 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) => React.CSSProperties;
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,wBA4P3D,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
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
- if (adjust) overLeft = bodyRect.left - (rect.right - context.popUpWidth);
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 style;
252
+ return {
253
+ style: style,
254
+ arrayStyle: arrayStyle
255
+ };
216
256
  };
217
257
  var getAbsoluteStyle = function getAbsoluteStyle(position) {
218
- if (!parentElRef.current) return hideStyle;
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 hideStyle;
266
+ return {
267
+ style: hideStyle
268
+ };
228
269
  }
229
270
  }
230
- var style = getAbsolutePositionStyle(rect, position);
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 style;
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 style;
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 style;
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
- newStyle = getAbsoluteStyle(realPosition);
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 newStyle;
334
+ return {
335
+ newStyle: newStyle,
336
+ newArrayStyle: newArrayStyle
337
+ };
279
338
  };
280
339
  var updateStyle = (0, _usePersistFn.default)(function () {
281
- var newStyle = getStyle();
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 style;
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 | "start" | "end" | "start-end" | "in";
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 | "start" | "end" | "start-end" | "in";
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 | "start" | "end" | "start-end" | "in";
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 | "start" | "end" | "start-end" | "in";
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 & {}) | "hidden" | "checkbox" | "date" | "datetime-local" | "file" | "month" | "password" | "radio" | "week" | undefined;
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 & {}) | "hidden" | "checkbox" | "date" | "datetime-local" | "file" | "month" | "password" | "radio" | "week" | undefined;
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;;;;;;0BAoHK;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;;CAqBpE,CAAC;AAEF,eAAe,QAAQ,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
- var newPosition = (0, _position.getPosition)(targetRef.current, props.priorityDirection, autoMode);
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,
@@ -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":"AAgFA,eAAO,MAAM,WAAW,WACd,WAAW,GAAG,IAAI,2EAEpB,SAAS,GAAG,MAAM,GAAG,MAAM,gKAKlC,CAAC"}
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"}
@@ -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
- if (horizontalPoint > windowWidth * 0.6) {
67
- position += '-right';
68
- } else if (horizontalPoint < windowWidth * 0.4) {
69
- position += '-left';
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
- if (mode === 'popover') return getPopoverPosition(target, priorityDirection);
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) => React.CSSProperties;
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,wBA4P3D,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
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
- if (adjust) overLeft = bodyRect.left - (rect.right - context.popUpWidth);
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 style;
242
+ return {
243
+ style: style,
244
+ arrayStyle: arrayStyle
245
+ };
206
246
  };
207
247
  var getAbsoluteStyle = function getAbsoluteStyle(position) {
208
- if (!parentElRef.current) return hideStyle;
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 hideStyle;
256
+ return {
257
+ style: hideStyle
258
+ };
218
259
  }
219
260
  }
220
- var style = getAbsolutePositionStyle(rect, position);
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 style;
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 style;
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 style;
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
- newStyle = getAbsoluteStyle(realPosition);
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 newStyle;
324
+ return {
325
+ newStyle: newStyle,
326
+ newArrayStyle: newArrayStyle
327
+ };
269
328
  };
270
329
  var updateStyle = usePersistFn(function () {
271
- var newStyle = getStyle();
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 style;
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 | "start" | "end" | "start-end" | "in";
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 | "start" | "end" | "start-end" | "in";
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 | "start" | "end" | "start-end" | "in";
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 | "start" | "end" | "start-end" | "in";
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 & {}) | "hidden" | "checkbox" | "date" | "datetime-local" | "file" | "month" | "password" | "radio" | "week" | undefined;
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 & {}) | "hidden" | "checkbox" | "date" | "datetime-local" | "file" | "month" | "password" | "radio" | "week" | undefined;
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;;;;;;0BAoHK;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;;CAqBpE,CAAC;AAEF,eAAe,QAAQ,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
- var newPosition = getPosition(targetRef.current, props.priorityDirection, autoMode);
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,
@@ -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":"AAgFA,eAAO,MAAM,WAAW,WACd,WAAW,GAAG,IAAI,2EAEpB,SAAS,GAAG,MAAM,GAAG,MAAM,gKAKlC,CAAC"}
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"}
@@ -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
- if (horizontalPoint > windowWidth * 0.6) {
61
- position += '-right';
62
- } else if (horizontalPoint < windowWidth * 0.4) {
63
- position += '-left';
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
- if (mode === 'popover') return getPopoverPosition(target, priorityDirection);
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
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sheinx/hooks",
3
- "version": "3.3.6-beta.2",
3
+ "version": "3.3.6-beta.4",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "license": "MIT",