@vkontakte/vkui 7.4.1 → 7.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cssm/lib/floating/useFloatingMiddlewaresBootstrap/index.js +17 -9
- package/dist/cssm/lib/floating/useFloatingMiddlewaresBootstrap/index.js.map +1 -1
- package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.d.ts +3 -0
- package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.d.ts.map +1 -1
- package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.js +17 -9
- package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.js.map +1 -1
- package/package.json +2 -2
- package/src/lib/floating/useFloatingMiddlewaresBootstrap/index.ts +24 -11
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { arrowMiddleware, autoPlacementMiddleware, flipMiddleware, hideMiddleware, offsetMiddleware, shiftMiddleware, sizeMiddleware } from "../adapters.js";
|
|
3
3
|
import { checkIsNotAutoPlacement, getAutoPlacementAlign } from "../functions.js";
|
|
4
|
-
export const useFloatingMiddlewaresBootstrap = ({ placement = 'bottom-start', arrowRef = null, arrow, arrowHeight, arrowPadding, sameWidth, offsetByMainAxis = 0, offsetByCrossAxis = 0, customMiddlewares, hideWhenReferenceHidden, disableFlipMiddleware = false, flipMiddlewareFallbackAxisSideDirection = '
|
|
4
|
+
export const useFloatingMiddlewaresBootstrap = ({ placement = 'bottom-start', arrowRef = null, arrow, arrowHeight, arrowPadding, sameWidth, offsetByMainAxis = 0, offsetByCrossAxis = 0, customMiddlewares, hideWhenReferenceHidden, disableFlipMiddleware = false, flipMiddlewareFallbackAxisSideDirection = 'end' })=>{
|
|
5
5
|
return React.useMemo(()=>{
|
|
6
6
|
const isAutoPlacement = !checkIsNotAutoPlacement(placement);
|
|
7
7
|
const middlewares = [
|
|
@@ -10,18 +10,26 @@ export const useFloatingMiddlewaresBootstrap = ({ placement = 'bottom-start', ar
|
|
|
10
10
|
mainAxis: arrow && arrowHeight ? offsetByMainAxis + arrowHeight : offsetByMainAxis
|
|
11
11
|
})
|
|
12
12
|
];
|
|
13
|
-
|
|
13
|
+
const shiftMiddlewareInstance = shiftMiddleware();
|
|
14
|
+
// см. https://github.com/floating-ui/floating-ui/blob/%40floating-ui/core%401.7.1/website/pages/docs/flip.mdx#conflict-with-autoplacementjs
|
|
14
15
|
if (isAutoPlacement) {
|
|
15
16
|
middlewares.push(autoPlacementMiddleware({
|
|
16
17
|
alignment: getAutoPlacementAlign(placement)
|
|
17
|
-
}));
|
|
18
|
+
}), shiftMiddlewareInstance);
|
|
18
19
|
} else if (!disableFlipMiddleware) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
})
|
|
20
|
+
const flipMiddlewareInstance = flipMiddleware({
|
|
21
|
+
crossAxis: 'alignment',
|
|
22
|
+
fallbackAxisSideDirection: flipMiddlewareFallbackAxisSideDirection
|
|
23
|
+
});
|
|
24
|
+
// см. https://github.com/floating-ui/floating-ui/blob/%40floating-ui/core%401.7.1/website/pages/docs/flip.mdx#combining-with-shiftjs
|
|
25
|
+
if (placement.includes('-')) {
|
|
26
|
+
middlewares.push(flipMiddlewareInstance, shiftMiddlewareInstance);
|
|
27
|
+
} else {
|
|
28
|
+
middlewares.push(shiftMiddlewareInstance, flipMiddlewareInstance);
|
|
29
|
+
}
|
|
30
|
+
} else {
|
|
31
|
+
middlewares.push(shiftMiddlewareInstance);
|
|
23
32
|
}
|
|
24
|
-
middlewares.push(shiftMiddleware());
|
|
25
33
|
if (sameWidth) {
|
|
26
34
|
middlewares.push(sizeMiddleware({
|
|
27
35
|
apply ({ rects, elements }) {
|
|
@@ -34,7 +42,7 @@ export const useFloatingMiddlewaresBootstrap = ({ placement = 'bottom-start', ar
|
|
|
34
42
|
if (customMiddlewares) {
|
|
35
43
|
middlewares.push(...customMiddlewares);
|
|
36
44
|
}
|
|
37
|
-
// см. https://floating-ui.
|
|
45
|
+
// см. https://github.com/floating-ui/floating-ui/blob/%40floating-ui/core%401.7.1/website/pages/docs/arrow.mdx#order
|
|
38
46
|
if (arrow) {
|
|
39
47
|
middlewares.push(arrowMiddleware({
|
|
40
48
|
element: arrowRef,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/lib/floating/useFloatingMiddlewaresBootstrap/index.ts"],"sourcesContent":["import * as React from 'react';\nimport {\n arrowMiddleware,\n autoPlacementMiddleware,\n flipMiddleware,\n type FlipMiddlewareOptions,\n hideMiddleware,\n offsetMiddleware,\n shiftMiddleware,\n sizeMiddleware,\n} from '../adapters';\nimport { checkIsNotAutoPlacement, getAutoPlacementAlign } from '../functions';\nimport {\n type ArrowOptions,\n type Placement,\n type PlacementWithAuto,\n type UseFloatingMiddleware,\n} from '../types/common';\n\nexport interface UseFloatingMiddlewaresBootstrapOptions {\n /**\n * По умолчанию компонент выберет наилучшее расположение сам, но приоритетное можно задать с помощью этого свойства.\n */\n placement?: PlacementWithAuto;\n /**\n * Указанное значение `placement` форсируется, даже если для выпадающего элемента недостаточно места.\n * Не оказывает влияния при `placement` значениях - `'auto' | 'auto-start' | 'auto-end'`\n */\n disableFlipMiddleware?: boolean;\n flipMiddlewareFallbackAxisSideDirection?: FlipMiddlewareOptions['fallbackAxisSideDirection'];\n /**\n * Отступ по главной оси.\n */\n offsetByMainAxis?: number;\n /**\n * Отступ по вспомогательной оси.\n */\n offsetByCrossAxis?: number;\n arrowRef?: ArrowOptions['element'];\n /**\n * Отображать ли стрелку, указывающую на якорный элемент.\n */\n arrow?: boolean;\n /**\n * Высота стрелки. Складывается с `mainAxis`, чтобы стрелка не залезала на якорный элемент.\n */\n arrowHeight?: number;\n /**\n * Безопасная зона вокруг стрелки, чтобы та не выходила за края контента.\n */\n arrowPadding?: number;\n /**\n * Выставлять ширину равной target элементу.\n */\n sameWidth?: boolean;\n /**\n * Массив кастомных модификаторов для Popper (необходимо мемоизировать).\n */\n customMiddlewares?: UseFloatingMiddleware[];\n /**\n * Принудительно скрывает компонент если целевой элемент вышел за область видимости.\n */\n hideWhenReferenceHidden?: boolean;\n}\n\nexport const useFloatingMiddlewaresBootstrap = ({\n placement = 'bottom-start',\n arrowRef = null,\n arrow,\n arrowHeight,\n arrowPadding,\n sameWidth,\n offsetByMainAxis = 0,\n offsetByCrossAxis = 0,\n customMiddlewares,\n hideWhenReferenceHidden,\n disableFlipMiddleware = false,\n flipMiddlewareFallbackAxisSideDirection = '
|
|
1
|
+
{"version":3,"sources":["../../../../../src/lib/floating/useFloatingMiddlewaresBootstrap/index.ts"],"sourcesContent":["import * as React from 'react';\nimport {\n arrowMiddleware,\n autoPlacementMiddleware,\n flipMiddleware,\n type FlipMiddlewareOptions,\n hideMiddleware,\n offsetMiddleware,\n shiftMiddleware,\n sizeMiddleware,\n} from '../adapters';\nimport { checkIsNotAutoPlacement, getAutoPlacementAlign } from '../functions';\nimport {\n type ArrowOptions,\n type Placement,\n type PlacementWithAuto,\n type UseFloatingMiddleware,\n} from '../types/common';\n\nexport interface UseFloatingMiddlewaresBootstrapOptions {\n /**\n * По умолчанию компонент выберет наилучшее расположение сам, но приоритетное можно задать с помощью этого свойства.\n */\n placement?: PlacementWithAuto;\n /**\n * Указанное значение `placement` форсируется, даже если для выпадающего элемента недостаточно места.\n * Не оказывает влияния при `placement` значениях - `'auto' | 'auto-start' | 'auto-end'`\n */\n disableFlipMiddleware?: boolean;\n /**\n * Задаёт резервный вариант размещения по перпендикулярной оси.\n */\n flipMiddlewareFallbackAxisSideDirection?: FlipMiddlewareOptions['fallbackAxisSideDirection'];\n /**\n * Отступ по главной оси.\n */\n offsetByMainAxis?: number;\n /**\n * Отступ по вспомогательной оси.\n */\n offsetByCrossAxis?: number;\n arrowRef?: ArrowOptions['element'];\n /**\n * Отображать ли стрелку, указывающую на якорный элемент.\n */\n arrow?: boolean;\n /**\n * Высота стрелки. Складывается с `mainAxis`, чтобы стрелка не залезала на якорный элемент.\n */\n arrowHeight?: number;\n /**\n * Безопасная зона вокруг стрелки, чтобы та не выходила за края контента.\n */\n arrowPadding?: number;\n /**\n * Выставлять ширину равной target элементу.\n */\n sameWidth?: boolean;\n /**\n * Массив кастомных модификаторов для Popper (необходимо мемоизировать).\n */\n customMiddlewares?: UseFloatingMiddleware[];\n /**\n * Принудительно скрывает компонент если целевой элемент вышел за область видимости.\n */\n hideWhenReferenceHidden?: boolean;\n}\n\nexport const useFloatingMiddlewaresBootstrap = ({\n placement = 'bottom-start',\n arrowRef = null,\n arrow,\n arrowHeight,\n arrowPadding,\n sameWidth,\n offsetByMainAxis = 0,\n offsetByCrossAxis = 0,\n customMiddlewares,\n hideWhenReferenceHidden,\n disableFlipMiddleware = false,\n flipMiddlewareFallbackAxisSideDirection = 'end',\n}: UseFloatingMiddlewaresBootstrapOptions): {\n middlewares: UseFloatingMiddleware[];\n strictPlacement: Placement | undefined;\n} => {\n return React.useMemo(() => {\n const isAutoPlacement = !checkIsNotAutoPlacement(placement);\n const middlewares: UseFloatingMiddleware[] = [\n offsetMiddleware({\n crossAxis: offsetByCrossAxis,\n mainAxis: arrow && arrowHeight ? offsetByMainAxis + arrowHeight : offsetByMainAxis,\n }),\n ];\n\n const shiftMiddlewareInstance = shiftMiddleware();\n\n // см. https://github.com/floating-ui/floating-ui/blob/%40floating-ui/core%401.7.1/website/pages/docs/flip.mdx#conflict-with-autoplacementjs\n if (isAutoPlacement) {\n middlewares.push(\n autoPlacementMiddleware({ alignment: getAutoPlacementAlign(placement) }),\n shiftMiddlewareInstance,\n );\n } else if (!disableFlipMiddleware) {\n const flipMiddlewareInstance = flipMiddleware({\n crossAxis: 'alignment',\n fallbackAxisSideDirection: flipMiddlewareFallbackAxisSideDirection,\n });\n\n // см. https://github.com/floating-ui/floating-ui/blob/%40floating-ui/core%401.7.1/website/pages/docs/flip.mdx#combining-with-shiftjs\n if (placement.includes('-')) {\n middlewares.push(flipMiddlewareInstance, shiftMiddlewareInstance);\n } else {\n middlewares.push(shiftMiddlewareInstance, flipMiddlewareInstance);\n }\n } else {\n middlewares.push(shiftMiddlewareInstance);\n }\n\n if (sameWidth) {\n middlewares.push(\n sizeMiddleware({\n apply({ rects, elements }) {\n Object.assign(elements.floating.style, {\n width: `${rects.reference.width}px`,\n });\n },\n }),\n );\n }\n\n if (customMiddlewares) {\n middlewares.push(...customMiddlewares);\n }\n\n // см. https://github.com/floating-ui/floating-ui/blob/%40floating-ui/core%401.7.1/website/pages/docs/arrow.mdx#order\n if (arrow) {\n middlewares.push(\n arrowMiddleware({\n element: arrowRef,\n padding: arrowPadding,\n }),\n );\n }\n\n if (hideWhenReferenceHidden) {\n middlewares.push(hideMiddleware());\n }\n\n return { middlewares, strictPlacement: isAutoPlacement ? undefined : placement };\n }, [\n placement,\n offsetByCrossAxis,\n arrow,\n arrowHeight,\n offsetByMainAxis,\n disableFlipMiddleware,\n flipMiddlewareFallbackAxisSideDirection,\n sameWidth,\n customMiddlewares,\n hideWhenReferenceHidden,\n arrowRef,\n arrowPadding,\n ]);\n};\n"],"names":["React","arrowMiddleware","autoPlacementMiddleware","flipMiddleware","hideMiddleware","offsetMiddleware","shiftMiddleware","sizeMiddleware","checkIsNotAutoPlacement","getAutoPlacementAlign","useFloatingMiddlewaresBootstrap","placement","arrowRef","arrow","arrowHeight","arrowPadding","sameWidth","offsetByMainAxis","offsetByCrossAxis","customMiddlewares","hideWhenReferenceHidden","disableFlipMiddleware","flipMiddlewareFallbackAxisSideDirection","useMemo","isAutoPlacement","middlewares","crossAxis","mainAxis","shiftMiddlewareInstance","push","alignment","flipMiddlewareInstance","fallbackAxisSideDirection","includes","apply","rects","elements","Object","assign","floating","style","width","reference","element","padding","strictPlacement","undefined"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SACEC,eAAe,EACfC,uBAAuB,EACvBC,cAAc,EAEdC,cAAc,EACdC,gBAAgB,EAChBC,eAAe,EACfC,cAAc,QACT,iBAAc;AACrB,SAASC,uBAAuB,EAAEC,qBAAqB,QAAQ,kBAAe;AAyD9E,OAAO,MAAMC,kCAAkC,CAAC,EAC9CC,YAAY,cAAc,EAC1BC,WAAW,IAAI,EACfC,KAAK,EACLC,WAAW,EACXC,YAAY,EACZC,SAAS,EACTC,mBAAmB,CAAC,EACpBC,oBAAoB,CAAC,EACrBC,iBAAiB,EACjBC,uBAAuB,EACvBC,wBAAwB,KAAK,EAC7BC,0CAA0C,KAAK,EACR;IAIvC,OAAOtB,MAAMuB,OAAO,CAAC;QACnB,MAAMC,kBAAkB,CAAChB,wBAAwBG;QACjD,MAAMc,cAAuC;YAC3CpB,iBAAiB;gBACfqB,WAAWR;gBACXS,UAAUd,SAASC,cAAcG,mBAAmBH,cAAcG;YACpE;SACD;QAED,MAAMW,0BAA0BtB;QAEhC,4IAA4I;QAC5I,IAAIkB,iBAAiB;YACnBC,YAAYI,IAAI,CACd3B,wBAAwB;gBAAE4B,WAAWrB,sBAAsBE;YAAW,IACtEiB;QAEJ,OAAO,IAAI,CAACP,uBAAuB;YACjC,MAAMU,yBAAyB5B,eAAe;gBAC5CuB,WAAW;gBACXM,2BAA2BV;YAC7B;YAEA,qIAAqI;YACrI,IAAIX,UAAUsB,QAAQ,CAAC,MAAM;gBAC3BR,YAAYI,IAAI,CAACE,wBAAwBH;YAC3C,OAAO;gBACLH,YAAYI,IAAI,CAACD,yBAAyBG;YAC5C;QACF,OAAO;YACLN,YAAYI,IAAI,CAACD;QACnB;QAEA,IAAIZ,WAAW;YACbS,YAAYI,IAAI,CACdtB,eAAe;gBACb2B,OAAM,EAAEC,KAAK,EAAEC,QAAQ,EAAE;oBACvBC,OAAOC,MAAM,CAACF,SAASG,QAAQ,CAACC,KAAK,EAAE;wBACrCC,OAAO,GAAGN,MAAMO,SAAS,CAACD,KAAK,CAAC,EAAE,CAAC;oBACrC;gBACF;YACF;QAEJ;QAEA,IAAItB,mBAAmB;YACrBM,YAAYI,IAAI,IAAIV;QACtB;QAEA,qHAAqH;QACrH,IAAIN,OAAO;YACTY,YAAYI,IAAI,CACd5B,gBAAgB;gBACd0C,SAAS/B;gBACTgC,SAAS7B;YACX;QAEJ;QAEA,IAAIK,yBAAyB;YAC3BK,YAAYI,IAAI,CAACzB;QACnB;QAEA,OAAO;YAAEqB;YAAaoB,iBAAiBrB,kBAAkBsB,YAAYnC;QAAU;IACjF,GAAG;QACDA;QACAO;QACAL;QACAC;QACAG;QACAI;QACAC;QACAN;QACAG;QACAC;QACAR;QACAG;KACD;AACH,EAAE"}
|
|
@@ -10,6 +10,9 @@ export interface UseFloatingMiddlewaresBootstrapOptions {
|
|
|
10
10
|
* Не оказывает влияния при `placement` значениях - `'auto' | 'auto-start' | 'auto-end'`
|
|
11
11
|
*/
|
|
12
12
|
disableFlipMiddleware?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Задаёт резервный вариант размещения по перпендикулярной оси.
|
|
15
|
+
*/
|
|
13
16
|
flipMiddlewareFallbackAxisSideDirection?: FlipMiddlewareOptions['fallbackAxisSideDirection'];
|
|
14
17
|
/**
|
|
15
18
|
* Отступ по главной оси.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/floating/useFloatingMiddlewaresBootstrap/index.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,qBAAqB,EAK3B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC3B,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,sCAAsC;IACrD;;OAEG;IACH,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B;;;OAGG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,uCAAuC,CAAC,EAAE,qBAAqB,CAAC,2BAA2B,CAAC,CAAC;IAC7F;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IACnC;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,iBAAiB,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAC5C;;OAEG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,eAAO,MAAM,+BAA+B,GAAI,wNAa7C,sCAAsC,KAAG;IAC1C,WAAW,EAAE,qBAAqB,EAAE,CAAC;IACrC,eAAe,EAAE,SAAS,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/floating/useFloatingMiddlewaresBootstrap/index.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,qBAAqB,EAK3B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC3B,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,sCAAsC;IACrD;;OAEG;IACH,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B;;;OAGG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;OAEG;IACH,uCAAuC,CAAC,EAAE,qBAAqB,CAAC,2BAA2B,CAAC,CAAC;IAC7F;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IACnC;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,iBAAiB,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAC5C;;OAEG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,eAAO,MAAM,+BAA+B,GAAI,wNAa7C,sCAAsC,KAAG;IAC1C,WAAW,EAAE,qBAAqB,EAAE,CAAC;IACrC,eAAe,EAAE,SAAS,GAAG,SAAS,CAAC;CAgFxC,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { arrowMiddleware, autoPlacementMiddleware, flipMiddleware, hideMiddleware, offsetMiddleware, shiftMiddleware, sizeMiddleware } from "../adapters.js";
|
|
3
3
|
import { checkIsNotAutoPlacement, getAutoPlacementAlign } from "../functions.js";
|
|
4
|
-
export const useFloatingMiddlewaresBootstrap = ({ placement = 'bottom-start', arrowRef = null, arrow, arrowHeight, arrowPadding, sameWidth, offsetByMainAxis = 0, offsetByCrossAxis = 0, customMiddlewares, hideWhenReferenceHidden, disableFlipMiddleware = false, flipMiddlewareFallbackAxisSideDirection = '
|
|
4
|
+
export const useFloatingMiddlewaresBootstrap = ({ placement = 'bottom-start', arrowRef = null, arrow, arrowHeight, arrowPadding, sameWidth, offsetByMainAxis = 0, offsetByCrossAxis = 0, customMiddlewares, hideWhenReferenceHidden, disableFlipMiddleware = false, flipMiddlewareFallbackAxisSideDirection = 'end' })=>{
|
|
5
5
|
return React.useMemo(()=>{
|
|
6
6
|
const isAutoPlacement = !checkIsNotAutoPlacement(placement);
|
|
7
7
|
const middlewares = [
|
|
@@ -10,18 +10,26 @@ export const useFloatingMiddlewaresBootstrap = ({ placement = 'bottom-start', ar
|
|
|
10
10
|
mainAxis: arrow && arrowHeight ? offsetByMainAxis + arrowHeight : offsetByMainAxis
|
|
11
11
|
})
|
|
12
12
|
];
|
|
13
|
-
|
|
13
|
+
const shiftMiddlewareInstance = shiftMiddleware();
|
|
14
|
+
// см. https://github.com/floating-ui/floating-ui/blob/%40floating-ui/core%401.7.1/website/pages/docs/flip.mdx#conflict-with-autoplacementjs
|
|
14
15
|
if (isAutoPlacement) {
|
|
15
16
|
middlewares.push(autoPlacementMiddleware({
|
|
16
17
|
alignment: getAutoPlacementAlign(placement)
|
|
17
|
-
}));
|
|
18
|
+
}), shiftMiddlewareInstance);
|
|
18
19
|
} else if (!disableFlipMiddleware) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
})
|
|
20
|
+
const flipMiddlewareInstance = flipMiddleware({
|
|
21
|
+
crossAxis: 'alignment',
|
|
22
|
+
fallbackAxisSideDirection: flipMiddlewareFallbackAxisSideDirection
|
|
23
|
+
});
|
|
24
|
+
// см. https://github.com/floating-ui/floating-ui/blob/%40floating-ui/core%401.7.1/website/pages/docs/flip.mdx#combining-with-shiftjs
|
|
25
|
+
if (placement.includes('-')) {
|
|
26
|
+
middlewares.push(flipMiddlewareInstance, shiftMiddlewareInstance);
|
|
27
|
+
} else {
|
|
28
|
+
middlewares.push(shiftMiddlewareInstance, flipMiddlewareInstance);
|
|
29
|
+
}
|
|
30
|
+
} else {
|
|
31
|
+
middlewares.push(shiftMiddlewareInstance);
|
|
23
32
|
}
|
|
24
|
-
middlewares.push(shiftMiddleware());
|
|
25
33
|
if (sameWidth) {
|
|
26
34
|
middlewares.push(sizeMiddleware({
|
|
27
35
|
apply ({ rects, elements }) {
|
|
@@ -34,7 +42,7 @@ export const useFloatingMiddlewaresBootstrap = ({ placement = 'bottom-start', ar
|
|
|
34
42
|
if (customMiddlewares) {
|
|
35
43
|
middlewares.push(...customMiddlewares);
|
|
36
44
|
}
|
|
37
|
-
// см. https://floating-ui.
|
|
45
|
+
// см. https://github.com/floating-ui/floating-ui/blob/%40floating-ui/core%401.7.1/website/pages/docs/arrow.mdx#order
|
|
38
46
|
if (arrow) {
|
|
39
47
|
middlewares.push(arrowMiddleware({
|
|
40
48
|
element: arrowRef,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/floating/useFloatingMiddlewaresBootstrap/index.ts"],"sourcesContent":["import * as React from 'react';\nimport {\n arrowMiddleware,\n autoPlacementMiddleware,\n flipMiddleware,\n type FlipMiddlewareOptions,\n hideMiddleware,\n offsetMiddleware,\n shiftMiddleware,\n sizeMiddleware,\n} from '../adapters';\nimport { checkIsNotAutoPlacement, getAutoPlacementAlign } from '../functions';\nimport {\n type ArrowOptions,\n type Placement,\n type PlacementWithAuto,\n type UseFloatingMiddleware,\n} from '../types/common';\n\nexport interface UseFloatingMiddlewaresBootstrapOptions {\n /**\n * По умолчанию компонент выберет наилучшее расположение сам, но приоритетное можно задать с помощью этого свойства.\n */\n placement?: PlacementWithAuto;\n /**\n * Указанное значение `placement` форсируется, даже если для выпадающего элемента недостаточно места.\n * Не оказывает влияния при `placement` значениях - `'auto' | 'auto-start' | 'auto-end'`\n */\n disableFlipMiddleware?: boolean;\n flipMiddlewareFallbackAxisSideDirection?: FlipMiddlewareOptions['fallbackAxisSideDirection'];\n /**\n * Отступ по главной оси.\n */\n offsetByMainAxis?: number;\n /**\n * Отступ по вспомогательной оси.\n */\n offsetByCrossAxis?: number;\n arrowRef?: ArrowOptions['element'];\n /**\n * Отображать ли стрелку, указывающую на якорный элемент.\n */\n arrow?: boolean;\n /**\n * Высота стрелки. Складывается с `mainAxis`, чтобы стрелка не залезала на якорный элемент.\n */\n arrowHeight?: number;\n /**\n * Безопасная зона вокруг стрелки, чтобы та не выходила за края контента.\n */\n arrowPadding?: number;\n /**\n * Выставлять ширину равной target элементу.\n */\n sameWidth?: boolean;\n /**\n * Массив кастомных модификаторов для Popper (необходимо мемоизировать).\n */\n customMiddlewares?: UseFloatingMiddleware[];\n /**\n * Принудительно скрывает компонент если целевой элемент вышел за область видимости.\n */\n hideWhenReferenceHidden?: boolean;\n}\n\nexport const useFloatingMiddlewaresBootstrap = ({\n placement = 'bottom-start',\n arrowRef = null,\n arrow,\n arrowHeight,\n arrowPadding,\n sameWidth,\n offsetByMainAxis = 0,\n offsetByCrossAxis = 0,\n customMiddlewares,\n hideWhenReferenceHidden,\n disableFlipMiddleware = false,\n flipMiddlewareFallbackAxisSideDirection = '
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/floating/useFloatingMiddlewaresBootstrap/index.ts"],"sourcesContent":["import * as React from 'react';\nimport {\n arrowMiddleware,\n autoPlacementMiddleware,\n flipMiddleware,\n type FlipMiddlewareOptions,\n hideMiddleware,\n offsetMiddleware,\n shiftMiddleware,\n sizeMiddleware,\n} from '../adapters';\nimport { checkIsNotAutoPlacement, getAutoPlacementAlign } from '../functions';\nimport {\n type ArrowOptions,\n type Placement,\n type PlacementWithAuto,\n type UseFloatingMiddleware,\n} from '../types/common';\n\nexport interface UseFloatingMiddlewaresBootstrapOptions {\n /**\n * По умолчанию компонент выберет наилучшее расположение сам, но приоритетное можно задать с помощью этого свойства.\n */\n placement?: PlacementWithAuto;\n /**\n * Указанное значение `placement` форсируется, даже если для выпадающего элемента недостаточно места.\n * Не оказывает влияния при `placement` значениях - `'auto' | 'auto-start' | 'auto-end'`\n */\n disableFlipMiddleware?: boolean;\n /**\n * Задаёт резервный вариант размещения по перпендикулярной оси.\n */\n flipMiddlewareFallbackAxisSideDirection?: FlipMiddlewareOptions['fallbackAxisSideDirection'];\n /**\n * Отступ по главной оси.\n */\n offsetByMainAxis?: number;\n /**\n * Отступ по вспомогательной оси.\n */\n offsetByCrossAxis?: number;\n arrowRef?: ArrowOptions['element'];\n /**\n * Отображать ли стрелку, указывающую на якорный элемент.\n */\n arrow?: boolean;\n /**\n * Высота стрелки. Складывается с `mainAxis`, чтобы стрелка не залезала на якорный элемент.\n */\n arrowHeight?: number;\n /**\n * Безопасная зона вокруг стрелки, чтобы та не выходила за края контента.\n */\n arrowPadding?: number;\n /**\n * Выставлять ширину равной target элементу.\n */\n sameWidth?: boolean;\n /**\n * Массив кастомных модификаторов для Popper (необходимо мемоизировать).\n */\n customMiddlewares?: UseFloatingMiddleware[];\n /**\n * Принудительно скрывает компонент если целевой элемент вышел за область видимости.\n */\n hideWhenReferenceHidden?: boolean;\n}\n\nexport const useFloatingMiddlewaresBootstrap = ({\n placement = 'bottom-start',\n arrowRef = null,\n arrow,\n arrowHeight,\n arrowPadding,\n sameWidth,\n offsetByMainAxis = 0,\n offsetByCrossAxis = 0,\n customMiddlewares,\n hideWhenReferenceHidden,\n disableFlipMiddleware = false,\n flipMiddlewareFallbackAxisSideDirection = 'end',\n}: UseFloatingMiddlewaresBootstrapOptions): {\n middlewares: UseFloatingMiddleware[];\n strictPlacement: Placement | undefined;\n} => {\n return React.useMemo(() => {\n const isAutoPlacement = !checkIsNotAutoPlacement(placement);\n const middlewares: UseFloatingMiddleware[] = [\n offsetMiddleware({\n crossAxis: offsetByCrossAxis,\n mainAxis: arrow && arrowHeight ? offsetByMainAxis + arrowHeight : offsetByMainAxis,\n }),\n ];\n\n const shiftMiddlewareInstance = shiftMiddleware();\n\n // см. https://github.com/floating-ui/floating-ui/blob/%40floating-ui/core%401.7.1/website/pages/docs/flip.mdx#conflict-with-autoplacementjs\n if (isAutoPlacement) {\n middlewares.push(\n autoPlacementMiddleware({ alignment: getAutoPlacementAlign(placement) }),\n shiftMiddlewareInstance,\n );\n } else if (!disableFlipMiddleware) {\n const flipMiddlewareInstance = flipMiddleware({\n crossAxis: 'alignment',\n fallbackAxisSideDirection: flipMiddlewareFallbackAxisSideDirection,\n });\n\n // см. https://github.com/floating-ui/floating-ui/blob/%40floating-ui/core%401.7.1/website/pages/docs/flip.mdx#combining-with-shiftjs\n if (placement.includes('-')) {\n middlewares.push(flipMiddlewareInstance, shiftMiddlewareInstance);\n } else {\n middlewares.push(shiftMiddlewareInstance, flipMiddlewareInstance);\n }\n } else {\n middlewares.push(shiftMiddlewareInstance);\n }\n\n if (sameWidth) {\n middlewares.push(\n sizeMiddleware({\n apply({ rects, elements }) {\n Object.assign(elements.floating.style, {\n width: `${rects.reference.width}px`,\n });\n },\n }),\n );\n }\n\n if (customMiddlewares) {\n middlewares.push(...customMiddlewares);\n }\n\n // см. https://github.com/floating-ui/floating-ui/blob/%40floating-ui/core%401.7.1/website/pages/docs/arrow.mdx#order\n if (arrow) {\n middlewares.push(\n arrowMiddleware({\n element: arrowRef,\n padding: arrowPadding,\n }),\n );\n }\n\n if (hideWhenReferenceHidden) {\n middlewares.push(hideMiddleware());\n }\n\n return { middlewares, strictPlacement: isAutoPlacement ? undefined : placement };\n }, [\n placement,\n offsetByCrossAxis,\n arrow,\n arrowHeight,\n offsetByMainAxis,\n disableFlipMiddleware,\n flipMiddlewareFallbackAxisSideDirection,\n sameWidth,\n customMiddlewares,\n hideWhenReferenceHidden,\n arrowRef,\n arrowPadding,\n ]);\n};\n"],"names":["React","arrowMiddleware","autoPlacementMiddleware","flipMiddleware","hideMiddleware","offsetMiddleware","shiftMiddleware","sizeMiddleware","checkIsNotAutoPlacement","getAutoPlacementAlign","useFloatingMiddlewaresBootstrap","placement","arrowRef","arrow","arrowHeight","arrowPadding","sameWidth","offsetByMainAxis","offsetByCrossAxis","customMiddlewares","hideWhenReferenceHidden","disableFlipMiddleware","flipMiddlewareFallbackAxisSideDirection","useMemo","isAutoPlacement","middlewares","crossAxis","mainAxis","shiftMiddlewareInstance","push","alignment","flipMiddlewareInstance","fallbackAxisSideDirection","includes","apply","rects","elements","Object","assign","floating","style","width","reference","element","padding","strictPlacement","undefined"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SACEC,eAAe,EACfC,uBAAuB,EACvBC,cAAc,EAEdC,cAAc,EACdC,gBAAgB,EAChBC,eAAe,EACfC,cAAc,QACT,iBAAc;AACrB,SAASC,uBAAuB,EAAEC,qBAAqB,QAAQ,kBAAe;AAyD9E,OAAO,MAAMC,kCAAkC,CAAC,EAC9CC,YAAY,cAAc,EAC1BC,WAAW,IAAI,EACfC,KAAK,EACLC,WAAW,EACXC,YAAY,EACZC,SAAS,EACTC,mBAAmB,CAAC,EACpBC,oBAAoB,CAAC,EACrBC,iBAAiB,EACjBC,uBAAuB,EACvBC,wBAAwB,KAAK,EAC7BC,0CAA0C,KAAK,EACR;IAIvC,OAAOtB,MAAMuB,OAAO,CAAC;QACnB,MAAMC,kBAAkB,CAAChB,wBAAwBG;QACjD,MAAMc,cAAuC;YAC3CpB,iBAAiB;gBACfqB,WAAWR;gBACXS,UAAUd,SAASC,cAAcG,mBAAmBH,cAAcG;YACpE;SACD;QAED,MAAMW,0BAA0BtB;QAEhC,4IAA4I;QAC5I,IAAIkB,iBAAiB;YACnBC,YAAYI,IAAI,CACd3B,wBAAwB;gBAAE4B,WAAWrB,sBAAsBE;YAAW,IACtEiB;QAEJ,OAAO,IAAI,CAACP,uBAAuB;YACjC,MAAMU,yBAAyB5B,eAAe;gBAC5CuB,WAAW;gBACXM,2BAA2BV;YAC7B;YAEA,qIAAqI;YACrI,IAAIX,UAAUsB,QAAQ,CAAC,MAAM;gBAC3BR,YAAYI,IAAI,CAACE,wBAAwBH;YAC3C,OAAO;gBACLH,YAAYI,IAAI,CAACD,yBAAyBG;YAC5C;QACF,OAAO;YACLN,YAAYI,IAAI,CAACD;QACnB;QAEA,IAAIZ,WAAW;YACbS,YAAYI,IAAI,CACdtB,eAAe;gBACb2B,OAAM,EAAEC,KAAK,EAAEC,QAAQ,EAAE;oBACvBC,OAAOC,MAAM,CAACF,SAASG,QAAQ,CAACC,KAAK,EAAE;wBACrCC,OAAO,GAAGN,MAAMO,SAAS,CAACD,KAAK,CAAC,EAAE,CAAC;oBACrC;gBACF;YACF;QAEJ;QAEA,IAAItB,mBAAmB;YACrBM,YAAYI,IAAI,IAAIV;QACtB;QAEA,qHAAqH;QACrH,IAAIN,OAAO;YACTY,YAAYI,IAAI,CACd5B,gBAAgB;gBACd0C,SAAS/B;gBACTgC,SAAS7B;YACX;QAEJ;QAEA,IAAIK,yBAAyB;YAC3BK,YAAYI,IAAI,CAACzB;QACnB;QAEA,OAAO;YAAEqB;YAAaoB,iBAAiBrB,kBAAkBsB,YAAYnC;QAAU;IACjF,GAAG;QACDA;QACAO;QACAL;QACAC;QACAG;QACAI;QACAC;QACAN;QACAG;QACAC;QACAR;QACAG;KACD;AACH,EAAE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
|
-
"version": "7.4.
|
|
3
|
+
"version": "7.4.2",
|
|
4
4
|
"name": "@vkontakte/vkui",
|
|
5
5
|
"description": "VKUI library",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
"@vkontakte/icons": "^3.0.0",
|
|
90
90
|
"@vkontakte/vkjs": "^2.0.1",
|
|
91
91
|
"@vkontakte/vkui-date-fns-tz": "^0.0.4",
|
|
92
|
-
"@vkontakte/vkui-floating-ui": "^0.2.
|
|
92
|
+
"@vkontakte/vkui-floating-ui": "^0.2.5",
|
|
93
93
|
"date-fns": "^4.1.0"
|
|
94
94
|
},
|
|
95
95
|
"devDependencies": {
|
|
@@ -27,6 +27,9 @@ export interface UseFloatingMiddlewaresBootstrapOptions {
|
|
|
27
27
|
* Не оказывает влияния при `placement` значениях - `'auto' | 'auto-start' | 'auto-end'`
|
|
28
28
|
*/
|
|
29
29
|
disableFlipMiddleware?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Задаёт резервный вариант размещения по перпендикулярной оси.
|
|
32
|
+
*/
|
|
30
33
|
flipMiddlewareFallbackAxisSideDirection?: FlipMiddlewareOptions['fallbackAxisSideDirection'];
|
|
31
34
|
/**
|
|
32
35
|
* Отступ по главной оси.
|
|
@@ -75,7 +78,7 @@ export const useFloatingMiddlewaresBootstrap = ({
|
|
|
75
78
|
customMiddlewares,
|
|
76
79
|
hideWhenReferenceHidden,
|
|
77
80
|
disableFlipMiddleware = false,
|
|
78
|
-
flipMiddlewareFallbackAxisSideDirection = '
|
|
81
|
+
flipMiddlewareFallbackAxisSideDirection = 'end',
|
|
79
82
|
}: UseFloatingMiddlewaresBootstrapOptions): {
|
|
80
83
|
middlewares: UseFloatingMiddleware[];
|
|
81
84
|
strictPlacement: Placement | undefined;
|
|
@@ -89,19 +92,29 @@ export const useFloatingMiddlewaresBootstrap = ({
|
|
|
89
92
|
}),
|
|
90
93
|
];
|
|
91
94
|
|
|
92
|
-
|
|
95
|
+
const shiftMiddlewareInstance = shiftMiddleware();
|
|
96
|
+
|
|
97
|
+
// см. https://github.com/floating-ui/floating-ui/blob/%40floating-ui/core%401.7.1/website/pages/docs/flip.mdx#conflict-with-autoplacementjs
|
|
93
98
|
if (isAutoPlacement) {
|
|
94
|
-
middlewares.push(autoPlacementMiddleware({ alignment: getAutoPlacementAlign(placement) }));
|
|
95
|
-
} else if (!disableFlipMiddleware) {
|
|
96
99
|
middlewares.push(
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
crossAxis: false,
|
|
100
|
-
}),
|
|
100
|
+
autoPlacementMiddleware({ alignment: getAutoPlacementAlign(placement) }),
|
|
101
|
+
shiftMiddlewareInstance,
|
|
101
102
|
);
|
|
102
|
-
}
|
|
103
|
+
} else if (!disableFlipMiddleware) {
|
|
104
|
+
const flipMiddlewareInstance = flipMiddleware({
|
|
105
|
+
crossAxis: 'alignment',
|
|
106
|
+
fallbackAxisSideDirection: flipMiddlewareFallbackAxisSideDirection,
|
|
107
|
+
});
|
|
103
108
|
|
|
104
|
-
|
|
109
|
+
// см. https://github.com/floating-ui/floating-ui/blob/%40floating-ui/core%401.7.1/website/pages/docs/flip.mdx#combining-with-shiftjs
|
|
110
|
+
if (placement.includes('-')) {
|
|
111
|
+
middlewares.push(flipMiddlewareInstance, shiftMiddlewareInstance);
|
|
112
|
+
} else {
|
|
113
|
+
middlewares.push(shiftMiddlewareInstance, flipMiddlewareInstance);
|
|
114
|
+
}
|
|
115
|
+
} else {
|
|
116
|
+
middlewares.push(shiftMiddlewareInstance);
|
|
117
|
+
}
|
|
105
118
|
|
|
106
119
|
if (sameWidth) {
|
|
107
120
|
middlewares.push(
|
|
@@ -119,7 +132,7 @@ export const useFloatingMiddlewaresBootstrap = ({
|
|
|
119
132
|
middlewares.push(...customMiddlewares);
|
|
120
133
|
}
|
|
121
134
|
|
|
122
|
-
// см. https://floating-ui.
|
|
135
|
+
// см. https://github.com/floating-ui/floating-ui/blob/%40floating-ui/core%401.7.1/website/pages/docs/arrow.mdx#order
|
|
123
136
|
if (arrow) {
|
|
124
137
|
middlewares.push(
|
|
125
138
|
arrowMiddleware({
|