@zag-js/popper 0.10.5 → 0.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +106 -0
- package/dist/index.d.ts +106 -3
- package/dist/index.js +277 -7
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +253 -2
- package/dist/index.mjs.map +1 -0
- package/package.json +6 -6
- package/dist/auto-update.d.ts +0 -8
- package/dist/auto-update.js +0 -45
- package/dist/auto-update.mjs +0 -41
- package/dist/get-placement.d.ts +0 -10
- package/dist/get-placement.js +0 -126
- package/dist/get-placement.mjs +0 -121
- package/dist/get-styles.d.ts +0 -29
- package/dist/get-styles.js +0 -42
- package/dist/get-styles.mjs +0 -38
- package/dist/middleware.d.ts +0 -29
- package/dist/middleware.js +0 -58
- package/dist/middleware.mjs +0 -52
- package/dist/types.d.ts +0 -62
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { Placement, Boundary, ComputePositionReturn, VirtualElement } from '@floating-ui/dom';
|
|
2
|
+
export { Placement } from '@floating-ui/dom';
|
|
3
|
+
|
|
4
|
+
type AutoUpdateOptions = {
|
|
5
|
+
ancestorScroll?: boolean;
|
|
6
|
+
ancestorResize?: boolean;
|
|
7
|
+
referenceResize?: boolean;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
type PositioningOptions = {
|
|
11
|
+
/**
|
|
12
|
+
* The strategy to use for positioning
|
|
13
|
+
*/
|
|
14
|
+
strategy?: "absolute" | "fixed";
|
|
15
|
+
/**
|
|
16
|
+
* The initial placement of the floating element
|
|
17
|
+
*/
|
|
18
|
+
placement?: Placement;
|
|
19
|
+
/**
|
|
20
|
+
* The offset of the floating element
|
|
21
|
+
*/
|
|
22
|
+
offset?: {
|
|
23
|
+
mainAxis?: number;
|
|
24
|
+
crossAxis?: number;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* The main axis offset or gap between the reference and floating elements
|
|
28
|
+
*/
|
|
29
|
+
gutter?: number;
|
|
30
|
+
/**
|
|
31
|
+
* The virtual padding around the viewport edges to check for overflow
|
|
32
|
+
*/
|
|
33
|
+
overflowPadding?: number;
|
|
34
|
+
/**
|
|
35
|
+
* Whether to flip the placement
|
|
36
|
+
*/
|
|
37
|
+
flip?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Whether the floating element can overlap the reference element
|
|
40
|
+
* @default false
|
|
41
|
+
*/
|
|
42
|
+
overlap?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Whether to make the floating element same width as the reference element
|
|
45
|
+
*/
|
|
46
|
+
sameWidth?: boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Whether the popover should fit the viewport.
|
|
49
|
+
*/
|
|
50
|
+
fitViewport?: boolean;
|
|
51
|
+
/**
|
|
52
|
+
* The overflow boundary of the reference element
|
|
53
|
+
*/
|
|
54
|
+
boundary?: Boundary | (() => Boundary);
|
|
55
|
+
/**
|
|
56
|
+
* Options to activate auto-update listeners
|
|
57
|
+
*/
|
|
58
|
+
listeners?: boolean | AutoUpdateOptions;
|
|
59
|
+
/**
|
|
60
|
+
* Function called when the placement is computed
|
|
61
|
+
*/
|
|
62
|
+
onComplete?(data: ComputePositionReturn): void;
|
|
63
|
+
/**
|
|
64
|
+
* Function called on cleanup of all listeners
|
|
65
|
+
*/
|
|
66
|
+
onCleanup?: VoidFunction;
|
|
67
|
+
};
|
|
68
|
+
type BasePlacement = "top" | "right" | "bottom" | "left";
|
|
69
|
+
|
|
70
|
+
type MaybeRectElement = HTMLElement | VirtualElement | null;
|
|
71
|
+
type MaybeElement = HTMLElement | null;
|
|
72
|
+
type MaybeFn<T> = T | (() => T);
|
|
73
|
+
declare function getBasePlacement(placement: Placement): BasePlacement;
|
|
74
|
+
declare function getPlacement(referenceOrFn: MaybeFn<MaybeRectElement>, floatingOrFn: MaybeFn<MaybeElement>, opts?: PositioningOptions & {
|
|
75
|
+
defer?: boolean;
|
|
76
|
+
}): () => void;
|
|
77
|
+
|
|
78
|
+
type Options = {
|
|
79
|
+
placement?: Placement;
|
|
80
|
+
};
|
|
81
|
+
declare function getPlacementStyles(options: Options): {
|
|
82
|
+
arrow: {
|
|
83
|
+
readonly [x: string]: string;
|
|
84
|
+
readonly position: "absolute";
|
|
85
|
+
readonly width: string;
|
|
86
|
+
readonly height: string;
|
|
87
|
+
};
|
|
88
|
+
arrowTip: {
|
|
89
|
+
readonly transform: any;
|
|
90
|
+
readonly background: string;
|
|
91
|
+
readonly top: "0";
|
|
92
|
+
readonly left: "0";
|
|
93
|
+
readonly width: "100%";
|
|
94
|
+
readonly height: "100%";
|
|
95
|
+
readonly position: "absolute";
|
|
96
|
+
readonly zIndex: "inherit";
|
|
97
|
+
};
|
|
98
|
+
floating: {
|
|
99
|
+
readonly position: "absolute";
|
|
100
|
+
readonly minWidth: "max-content";
|
|
101
|
+
readonly top: "0px";
|
|
102
|
+
readonly left: "0px";
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
export { PositioningOptions, getBasePlacement, getPlacement, getPlacementStyles };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,106 @@
|
|
|
1
|
-
|
|
2
|
-
export {
|
|
3
|
-
|
|
1
|
+
import { Placement, Boundary, ComputePositionReturn, VirtualElement } from '@floating-ui/dom';
|
|
2
|
+
export { Placement } from '@floating-ui/dom';
|
|
3
|
+
|
|
4
|
+
type AutoUpdateOptions = {
|
|
5
|
+
ancestorScroll?: boolean;
|
|
6
|
+
ancestorResize?: boolean;
|
|
7
|
+
referenceResize?: boolean;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
type PositioningOptions = {
|
|
11
|
+
/**
|
|
12
|
+
* The strategy to use for positioning
|
|
13
|
+
*/
|
|
14
|
+
strategy?: "absolute" | "fixed";
|
|
15
|
+
/**
|
|
16
|
+
* The initial placement of the floating element
|
|
17
|
+
*/
|
|
18
|
+
placement?: Placement;
|
|
19
|
+
/**
|
|
20
|
+
* The offset of the floating element
|
|
21
|
+
*/
|
|
22
|
+
offset?: {
|
|
23
|
+
mainAxis?: number;
|
|
24
|
+
crossAxis?: number;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* The main axis offset or gap between the reference and floating elements
|
|
28
|
+
*/
|
|
29
|
+
gutter?: number;
|
|
30
|
+
/**
|
|
31
|
+
* The virtual padding around the viewport edges to check for overflow
|
|
32
|
+
*/
|
|
33
|
+
overflowPadding?: number;
|
|
34
|
+
/**
|
|
35
|
+
* Whether to flip the placement
|
|
36
|
+
*/
|
|
37
|
+
flip?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Whether the floating element can overlap the reference element
|
|
40
|
+
* @default false
|
|
41
|
+
*/
|
|
42
|
+
overlap?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Whether to make the floating element same width as the reference element
|
|
45
|
+
*/
|
|
46
|
+
sameWidth?: boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Whether the popover should fit the viewport.
|
|
49
|
+
*/
|
|
50
|
+
fitViewport?: boolean;
|
|
51
|
+
/**
|
|
52
|
+
* The overflow boundary of the reference element
|
|
53
|
+
*/
|
|
54
|
+
boundary?: Boundary | (() => Boundary);
|
|
55
|
+
/**
|
|
56
|
+
* Options to activate auto-update listeners
|
|
57
|
+
*/
|
|
58
|
+
listeners?: boolean | AutoUpdateOptions;
|
|
59
|
+
/**
|
|
60
|
+
* Function called when the placement is computed
|
|
61
|
+
*/
|
|
62
|
+
onComplete?(data: ComputePositionReturn): void;
|
|
63
|
+
/**
|
|
64
|
+
* Function called on cleanup of all listeners
|
|
65
|
+
*/
|
|
66
|
+
onCleanup?: VoidFunction;
|
|
67
|
+
};
|
|
68
|
+
type BasePlacement = "top" | "right" | "bottom" | "left";
|
|
69
|
+
|
|
70
|
+
type MaybeRectElement = HTMLElement | VirtualElement | null;
|
|
71
|
+
type MaybeElement = HTMLElement | null;
|
|
72
|
+
type MaybeFn<T> = T | (() => T);
|
|
73
|
+
declare function getBasePlacement(placement: Placement): BasePlacement;
|
|
74
|
+
declare function getPlacement(referenceOrFn: MaybeFn<MaybeRectElement>, floatingOrFn: MaybeFn<MaybeElement>, opts?: PositioningOptions & {
|
|
75
|
+
defer?: boolean;
|
|
76
|
+
}): () => void;
|
|
77
|
+
|
|
78
|
+
type Options = {
|
|
79
|
+
placement?: Placement;
|
|
80
|
+
};
|
|
81
|
+
declare function getPlacementStyles(options: Options): {
|
|
82
|
+
arrow: {
|
|
83
|
+
readonly [x: string]: string;
|
|
84
|
+
readonly position: "absolute";
|
|
85
|
+
readonly width: string;
|
|
86
|
+
readonly height: string;
|
|
87
|
+
};
|
|
88
|
+
arrowTip: {
|
|
89
|
+
readonly transform: any;
|
|
90
|
+
readonly background: string;
|
|
91
|
+
readonly top: "0";
|
|
92
|
+
readonly left: "0";
|
|
93
|
+
readonly width: "100%";
|
|
94
|
+
readonly height: "100%";
|
|
95
|
+
readonly position: "absolute";
|
|
96
|
+
readonly zIndex: "inherit";
|
|
97
|
+
};
|
|
98
|
+
floating: {
|
|
99
|
+
readonly position: "absolute";
|
|
100
|
+
readonly minWidth: "max-content";
|
|
101
|
+
readonly top: "0px";
|
|
102
|
+
readonly left: "0px";
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
export { PositioningOptions, getBasePlacement, getPlacement, getPlacementStyles };
|
package/dist/index.js
CHANGED
|
@@ -1,12 +1,282 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
2
19
|
|
|
3
|
-
|
|
20
|
+
// src/index.ts
|
|
21
|
+
var src_exports = {};
|
|
22
|
+
__export(src_exports, {
|
|
23
|
+
getBasePlacement: () => getBasePlacement,
|
|
24
|
+
getPlacement: () => getPlacement,
|
|
25
|
+
getPlacementStyles: () => getPlacementStyles
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(src_exports);
|
|
4
28
|
|
|
5
|
-
|
|
6
|
-
|
|
29
|
+
// src/get-placement.ts
|
|
30
|
+
var import_dom2 = require("@floating-ui/dom");
|
|
31
|
+
var import_dom_query = require("@zag-js/dom-query");
|
|
32
|
+
var import_utils = require("@zag-js/utils");
|
|
7
33
|
|
|
34
|
+
// src/auto-update.ts
|
|
35
|
+
var import_dom = require("@floating-ui/dom");
|
|
36
|
+
var import_element_rect = require("@zag-js/element-rect");
|
|
37
|
+
var callAll = (...fns) => () => fns.forEach((fn) => fn());
|
|
38
|
+
var isHTMLElement = (el) => {
|
|
39
|
+
return typeof el === "object" && el !== null && el.nodeType === 1;
|
|
40
|
+
};
|
|
41
|
+
var addDomEvent = (el, type, fn, options) => {
|
|
42
|
+
el.addEventListener(type, fn, options);
|
|
43
|
+
return () => el.removeEventListener(type, fn, options);
|
|
44
|
+
};
|
|
45
|
+
function resolveOptions(option) {
|
|
46
|
+
const bool = typeof option === "boolean";
|
|
47
|
+
return {
|
|
48
|
+
ancestorResize: bool ? option : option.ancestorResize ?? true,
|
|
49
|
+
ancestorScroll: bool ? option : option.ancestorScroll ?? true,
|
|
50
|
+
referenceResize: bool ? option : option.referenceResize ?? true
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
function autoUpdate(reference, floating, update, options = false) {
|
|
54
|
+
const { ancestorScroll, ancestorResize, referenceResize } = resolveOptions(options);
|
|
55
|
+
const useAncestors = ancestorScroll || ancestorResize;
|
|
56
|
+
const ancestors = [];
|
|
57
|
+
if (useAncestors && isHTMLElement(reference)) {
|
|
58
|
+
ancestors.push(...(0, import_dom.getOverflowAncestors)(reference));
|
|
59
|
+
}
|
|
60
|
+
function addResizeListeners() {
|
|
61
|
+
let cleanups = [(0, import_element_rect.trackElementRect)(floating, { scope: "size", onChange: update })];
|
|
62
|
+
if (referenceResize && isHTMLElement(reference)) {
|
|
63
|
+
cleanups.push((0, import_element_rect.trackElementRect)(reference, { onChange: update }));
|
|
64
|
+
}
|
|
65
|
+
cleanups.push(callAll(...ancestors.map((el) => addDomEvent(el, "resize", update))));
|
|
66
|
+
return () => cleanups.forEach((fn) => fn());
|
|
67
|
+
}
|
|
68
|
+
function addScrollListeners() {
|
|
69
|
+
return callAll(...ancestors.map((el) => addDomEvent(el, "scroll", update, { passive: true })));
|
|
70
|
+
}
|
|
71
|
+
return callAll(addResizeListeners(), addScrollListeners());
|
|
72
|
+
}
|
|
8
73
|
|
|
74
|
+
// src/middleware.ts
|
|
75
|
+
var toVar = (value) => ({ variable: value, reference: `var(${value})` });
|
|
76
|
+
var cssVars = {
|
|
77
|
+
arrowSize: toVar("--arrow-size"),
|
|
78
|
+
arrowSizeHalf: toVar("--arrow-size-half"),
|
|
79
|
+
arrowBg: toVar("--arrow-background"),
|
|
80
|
+
transformOrigin: toVar("--transform-origin"),
|
|
81
|
+
arrowOffset: toVar("--arrow-offset")
|
|
82
|
+
};
|
|
83
|
+
var getTransformOrigin = (arrow2) => ({
|
|
84
|
+
top: "bottom center",
|
|
85
|
+
"top-start": arrow2 ? `${arrow2.x}px bottom` : "left bottom",
|
|
86
|
+
"top-end": arrow2 ? `${arrow2.x}px bottom` : "right bottom",
|
|
87
|
+
bottom: "top center",
|
|
88
|
+
"bottom-start": arrow2 ? `${arrow2.x}px top` : "top left",
|
|
89
|
+
"bottom-end": arrow2 ? `${arrow2.x}px top` : "top right",
|
|
90
|
+
left: "right center",
|
|
91
|
+
"left-start": arrow2 ? `right ${arrow2.y}px` : "right top",
|
|
92
|
+
"left-end": arrow2 ? `right ${arrow2.y}px` : "right bottom",
|
|
93
|
+
right: "left center",
|
|
94
|
+
"right-start": arrow2 ? `left ${arrow2.y}px` : "left top",
|
|
95
|
+
"right-end": arrow2 ? `left ${arrow2.y}px` : "left bottom"
|
|
96
|
+
});
|
|
97
|
+
var transformOrigin = {
|
|
98
|
+
name: "transformOrigin",
|
|
99
|
+
fn({ placement, elements, middlewareData }) {
|
|
100
|
+
const { arrow: arrow2 } = middlewareData;
|
|
101
|
+
const transformOrigin2 = getTransformOrigin(arrow2)[placement];
|
|
102
|
+
const { floating } = elements;
|
|
103
|
+
floating.style.setProperty(cssVars.transformOrigin.variable, transformOrigin2);
|
|
104
|
+
return {
|
|
105
|
+
data: { transformOrigin: transformOrigin2 }
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
var shiftArrow = (opts) => ({
|
|
110
|
+
name: "shiftArrow",
|
|
111
|
+
fn({ placement, middlewareData }) {
|
|
112
|
+
const { element: arrow2 } = opts;
|
|
113
|
+
if (middlewareData.arrow) {
|
|
114
|
+
const { x, y } = middlewareData.arrow;
|
|
115
|
+
const dir = placement.split("-")[0];
|
|
116
|
+
Object.assign(arrow2.style, {
|
|
117
|
+
left: x != null ? `${x}px` : "",
|
|
118
|
+
top: y != null ? `${y}px` : "",
|
|
119
|
+
[dir]: `calc(100% + ${cssVars.arrowOffset.reference})`
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
return {};
|
|
123
|
+
}
|
|
124
|
+
});
|
|
9
125
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
126
|
+
// src/get-placement.ts
|
|
127
|
+
var defaultOptions = {
|
|
128
|
+
strategy: "absolute",
|
|
129
|
+
placement: "bottom",
|
|
130
|
+
listeners: true,
|
|
131
|
+
gutter: 8,
|
|
132
|
+
flip: true,
|
|
133
|
+
sameWidth: false,
|
|
134
|
+
overflowPadding: 8
|
|
135
|
+
};
|
|
136
|
+
function getPlacementImpl(reference, floating, opts = {}) {
|
|
137
|
+
if (!floating || !reference)
|
|
138
|
+
return;
|
|
139
|
+
const options = Object.assign({}, defaultOptions, opts);
|
|
140
|
+
const arrowEl = floating.querySelector("[data-part=arrow]");
|
|
141
|
+
const middleware = [];
|
|
142
|
+
const boundary = typeof options.boundary === "function" ? options.boundary() : options.boundary;
|
|
143
|
+
if (options.flip) {
|
|
144
|
+
middleware.push(
|
|
145
|
+
(0, import_dom2.flip)({
|
|
146
|
+
boundary,
|
|
147
|
+
padding: options.overflowPadding
|
|
148
|
+
})
|
|
149
|
+
);
|
|
150
|
+
}
|
|
151
|
+
if (options.gutter || options.offset) {
|
|
152
|
+
const arrowOffset = arrowEl ? arrowEl.offsetHeight / 2 : 0;
|
|
153
|
+
const data = options.offset ? options.offset : { mainAxis: options.gutter };
|
|
154
|
+
if (data?.mainAxis != null)
|
|
155
|
+
data.mainAxis += arrowOffset;
|
|
156
|
+
middleware.push((0, import_dom2.offset)(data));
|
|
157
|
+
}
|
|
158
|
+
middleware.push(
|
|
159
|
+
(0, import_dom2.shift)({
|
|
160
|
+
boundary,
|
|
161
|
+
crossAxis: options.overlap,
|
|
162
|
+
padding: options.overflowPadding
|
|
163
|
+
})
|
|
164
|
+
);
|
|
165
|
+
if (arrowEl) {
|
|
166
|
+
middleware.push(
|
|
167
|
+
(0, import_dom2.arrow)({ element: arrowEl, padding: 8 }),
|
|
168
|
+
shiftArrow({ element: arrowEl })
|
|
169
|
+
);
|
|
170
|
+
}
|
|
171
|
+
middleware.push(transformOrigin);
|
|
172
|
+
middleware.push(
|
|
173
|
+
(0, import_dom2.size)({
|
|
174
|
+
padding: options.overflowPadding,
|
|
175
|
+
apply({ rects, availableHeight, availableWidth }) {
|
|
176
|
+
const referenceWidth = Math.round(rects.reference.width);
|
|
177
|
+
floating.style.setProperty("--reference-width", `${referenceWidth}px`);
|
|
178
|
+
floating.style.setProperty("--available-width", `${availableWidth}px`);
|
|
179
|
+
floating.style.setProperty("--available-height", `${availableHeight}px`);
|
|
180
|
+
if (options.sameWidth) {
|
|
181
|
+
Object.assign(floating.style, {
|
|
182
|
+
width: `${referenceWidth}px`,
|
|
183
|
+
minWidth: "unset"
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
if (options.fitViewport) {
|
|
187
|
+
Object.assign(floating.style, {
|
|
188
|
+
maxWidth: `${availableWidth}px`,
|
|
189
|
+
maxHeight: `${availableHeight}px`
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
})
|
|
194
|
+
);
|
|
195
|
+
function compute(config = {}) {
|
|
196
|
+
if (!reference || !floating)
|
|
197
|
+
return;
|
|
198
|
+
const { placement, strategy, onComplete } = options;
|
|
199
|
+
(0, import_dom2.computePosition)(reference, floating, {
|
|
200
|
+
placement,
|
|
201
|
+
middleware,
|
|
202
|
+
strategy,
|
|
203
|
+
...config
|
|
204
|
+
}).then((data) => {
|
|
205
|
+
const x = Math.round(data.x);
|
|
206
|
+
const y = Math.round(data.y);
|
|
207
|
+
Object.assign(floating.style, {
|
|
208
|
+
position: data.strategy,
|
|
209
|
+
top: "0px",
|
|
210
|
+
left: "0px",
|
|
211
|
+
transform: `translate3d(${x}px, ${y}px, 0)`
|
|
212
|
+
});
|
|
213
|
+
onComplete?.(data);
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
compute();
|
|
217
|
+
return (0, import_utils.callAll)(
|
|
218
|
+
options.listeners ? autoUpdate(reference, floating, compute, options.listeners) : void 0,
|
|
219
|
+
options.onCleanup
|
|
220
|
+
);
|
|
221
|
+
}
|
|
222
|
+
function getBasePlacement(placement) {
|
|
223
|
+
return placement.split("-")[0];
|
|
224
|
+
}
|
|
225
|
+
function getPlacement(referenceOrFn, floatingOrFn, opts = {}) {
|
|
226
|
+
const { defer, ...restOptions } = opts;
|
|
227
|
+
const func = defer ? import_dom_query.raf : (v) => v();
|
|
228
|
+
const cleanups = [];
|
|
229
|
+
cleanups.push(
|
|
230
|
+
func(() => {
|
|
231
|
+
const reference = typeof referenceOrFn === "function" ? referenceOrFn() : referenceOrFn;
|
|
232
|
+
const floating = typeof floatingOrFn === "function" ? floatingOrFn() : floatingOrFn;
|
|
233
|
+
cleanups.push(getPlacementImpl(reference, floating, restOptions));
|
|
234
|
+
})
|
|
235
|
+
);
|
|
236
|
+
return () => {
|
|
237
|
+
cleanups.forEach((fn) => fn?.());
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
// src/get-styles.ts
|
|
242
|
+
var ARROW_FLOATING_STYLE = {
|
|
243
|
+
bottom: "rotate(45deg)",
|
|
244
|
+
left: "rotate(135deg)",
|
|
245
|
+
top: "rotate(225deg)",
|
|
246
|
+
right: "rotate(315deg)"
|
|
247
|
+
};
|
|
248
|
+
function getPlacementStyles(options) {
|
|
249
|
+
const { placement = "bottom" } = options;
|
|
250
|
+
return {
|
|
251
|
+
arrow: {
|
|
252
|
+
position: "absolute",
|
|
253
|
+
width: cssVars.arrowSize.reference,
|
|
254
|
+
height: cssVars.arrowSize.reference,
|
|
255
|
+
[cssVars.arrowSizeHalf.variable]: `calc(${cssVars.arrowSize.reference} / 2)`,
|
|
256
|
+
[cssVars.arrowOffset.variable]: `calc(${cssVars.arrowSizeHalf.reference} * -1)`
|
|
257
|
+
},
|
|
258
|
+
arrowTip: {
|
|
259
|
+
transform: ARROW_FLOATING_STYLE[placement.split("-")[0]],
|
|
260
|
+
background: cssVars.arrowBg.reference,
|
|
261
|
+
top: "0",
|
|
262
|
+
left: "0",
|
|
263
|
+
width: "100%",
|
|
264
|
+
height: "100%",
|
|
265
|
+
position: "absolute",
|
|
266
|
+
zIndex: "inherit"
|
|
267
|
+
},
|
|
268
|
+
floating: {
|
|
269
|
+
position: "absolute",
|
|
270
|
+
minWidth: "max-content",
|
|
271
|
+
top: "0px",
|
|
272
|
+
left: "0px"
|
|
273
|
+
}
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
277
|
+
0 && (module.exports = {
|
|
278
|
+
getBasePlacement,
|
|
279
|
+
getPlacement,
|
|
280
|
+
getPlacementStyles
|
|
281
|
+
});
|
|
282
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/get-placement.ts","../src/auto-update.ts","../src/middleware.ts","../src/get-styles.ts"],"sourcesContent":["export { getPlacement, getBasePlacement } from \"./get-placement\"\nexport { getPlacementStyles } from \"./get-styles\"\nexport type { Placement, PositioningOptions } from \"./types\"\n","import type { Middleware, Placement, VirtualElement } from \"@floating-ui/dom\"\nimport { ComputePositionConfig, arrow, computePosition, flip, offset, shift, size } from \"@floating-ui/dom\"\nimport { raf } from \"@zag-js/dom-query\"\nimport { callAll } from \"@zag-js/utils\"\nimport { autoUpdate } from \"./auto-update\"\nimport { shiftArrow, transformOrigin } from \"./middleware\"\nimport type { BasePlacement, PositioningOptions } from \"./types\"\n\nconst defaultOptions: PositioningOptions = {\n strategy: \"absolute\",\n placement: \"bottom\",\n listeners: true,\n gutter: 8,\n flip: true,\n sameWidth: false,\n overflowPadding: 8,\n}\n\ntype MaybeRectElement = HTMLElement | VirtualElement | null\ntype MaybeElement = HTMLElement | null\ntype MaybeFn<T> = T | (() => T)\n\nfunction getPlacementImpl(reference: MaybeRectElement, floating: MaybeElement, opts: PositioningOptions = {}) {\n if (!floating || !reference) return\n\n const options = Object.assign({}, defaultOptions, opts)\n\n /* -----------------------------------------------------------------------------\n * The middleware stack\n * -----------------------------------------------------------------------------*/\n\n const arrowEl = floating.querySelector<HTMLElement>(\"[data-part=arrow]\")\n const middleware: Middleware[] = []\n\n const boundary = typeof options.boundary === \"function\" ? options.boundary() : options.boundary\n\n if (options.flip) {\n middleware.push(\n flip({\n boundary,\n padding: options.overflowPadding,\n }),\n )\n }\n\n if (options.gutter || options.offset) {\n const arrowOffset = arrowEl ? arrowEl.offsetHeight / 2 : 0\n const data = options.offset ? options.offset : { mainAxis: options.gutter }\n if (data?.mainAxis != null) data.mainAxis += arrowOffset\n middleware.push(offset(data))\n }\n\n middleware.push(\n shift({\n boundary,\n crossAxis: options.overlap,\n padding: options.overflowPadding,\n }),\n )\n\n if (arrowEl) {\n // prettier-ignore\n middleware.push(\n arrow({ element: arrowEl, padding: 8 }),\n shiftArrow({ element: arrowEl }),\n )\n }\n\n middleware.push(transformOrigin)\n\n middleware.push(\n size({\n padding: options.overflowPadding,\n apply({ rects, availableHeight, availableWidth }) {\n const referenceWidth = Math.round(rects.reference.width)\n\n floating.style.setProperty(\"--reference-width\", `${referenceWidth}px`)\n floating.style.setProperty(\"--available-width\", `${availableWidth}px`)\n floating.style.setProperty(\"--available-height\", `${availableHeight}px`)\n\n if (options.sameWidth) {\n Object.assign(floating.style, {\n width: `${referenceWidth}px`,\n minWidth: \"unset\",\n })\n }\n\n if (options.fitViewport) {\n Object.assign(floating.style, {\n maxWidth: `${availableWidth}px`,\n maxHeight: `${availableHeight}px`,\n })\n }\n },\n }),\n )\n\n /* -----------------------------------------------------------------------------\n * The actual positioning function\n * -----------------------------------------------------------------------------*/\n\n function compute(config: Omit<ComputePositionConfig, \"platform\"> = {}) {\n if (!reference || !floating) return\n const { placement, strategy, onComplete } = options\n\n computePosition(reference, floating, {\n placement,\n middleware,\n strategy,\n ...config,\n }).then((data) => {\n const x = Math.round(data.x)\n const y = Math.round(data.y)\n\n Object.assign(floating.style, {\n position: data.strategy,\n top: \"0px\",\n left: \"0px\",\n transform: `translate3d(${x}px, ${y}px, 0)`,\n })\n\n onComplete?.(data)\n })\n }\n\n compute()\n\n return callAll(\n options.listeners ? autoUpdate(reference, floating, compute, options.listeners) : undefined,\n options.onCleanup,\n )\n}\n\nexport function getBasePlacement(placement: Placement): BasePlacement {\n return placement.split(\"-\")[0] as BasePlacement\n}\n\nexport function getPlacement(\n referenceOrFn: MaybeFn<MaybeRectElement>,\n floatingOrFn: MaybeFn<MaybeElement>,\n opts: PositioningOptions & { defer?: boolean } = {},\n) {\n const { defer, ...restOptions } = opts\n const func = defer ? raf : (v: any) => v()\n const cleanups: (VoidFunction | undefined)[] = []\n cleanups.push(\n func(() => {\n const reference = typeof referenceOrFn === \"function\" ? referenceOrFn() : referenceOrFn\n const floating = typeof floatingOrFn === \"function\" ? floatingOrFn() : floatingOrFn\n cleanups.push(getPlacementImpl(reference, floating, restOptions))\n }),\n )\n return () => {\n cleanups.forEach((fn) => fn?.())\n }\n}\n","import type { Placement, ReferenceElement } from \"@floating-ui/dom\"\nimport { getOverflowAncestors } from \"@floating-ui/dom\"\nimport { trackElementRect } from \"@zag-js/element-rect\"\n\nexport type { Placement }\n\nexport type AutoUpdateOptions = {\n ancestorScroll?: boolean\n ancestorResize?: boolean\n referenceResize?: boolean\n}\n\ntype Ancestors = ReturnType<typeof getOverflowAncestors>\n\nconst callAll =\n (...fns: VoidFunction[]) =>\n () =>\n fns.forEach((fn) => fn())\n\nconst isHTMLElement = (el: any): el is HTMLElement => {\n return typeof el === \"object\" && el !== null && el.nodeType === 1\n}\n\nconst addDomEvent = (el: HTMLElement, type: string, fn: VoidFunction, options?: boolean | AddEventListenerOptions) => {\n el.addEventListener(type, fn, options)\n return () => el.removeEventListener(type, fn, options)\n}\n\nfunction resolveOptions(option: boolean | AutoUpdateOptions) {\n const bool = typeof option === \"boolean\"\n return {\n ancestorResize: bool ? option : option.ancestorResize ?? true,\n ancestorScroll: bool ? option : option.ancestorScroll ?? true,\n referenceResize: bool ? option : option.referenceResize ?? true,\n }\n}\n\nexport function autoUpdate(\n reference: ReferenceElement,\n floating: HTMLElement,\n update: () => void,\n options: boolean | AutoUpdateOptions = false,\n) {\n const { ancestorScroll, ancestorResize, referenceResize } = resolveOptions(options)\n\n const useAncestors = ancestorScroll || ancestorResize\n const ancestors: Ancestors = []\n\n if (useAncestors && isHTMLElement(reference)) {\n ancestors.push(...getOverflowAncestors(reference))\n }\n\n function addResizeListeners() {\n let cleanups: VoidFunction[] = [trackElementRect(floating, { scope: \"size\", onChange: update })]\n if (referenceResize && isHTMLElement(reference)) {\n cleanups.push(trackElementRect(reference, { onChange: update }))\n }\n cleanups.push(callAll(...ancestors.map((el: any) => addDomEvent(el, \"resize\", update))))\n return () => cleanups.forEach((fn) => fn())\n }\n\n function addScrollListeners() {\n return callAll(...ancestors.map((el: any) => addDomEvent(el, \"scroll\", update, { passive: true })))\n }\n\n return callAll(addResizeListeners(), addScrollListeners())\n}\n","import type { Coords, Middleware } from \"@floating-ui/dom\"\n\n/* -----------------------------------------------------------------------------\n * Shared middleware utils\n * -----------------------------------------------------------------------------*/\n\nconst toVar = (value: string) => ({ variable: value, reference: `var(${value})` })\n\nexport const cssVars = {\n arrowSize: toVar(\"--arrow-size\"),\n arrowSizeHalf: toVar(\"--arrow-size-half\"),\n arrowBg: toVar(\"--arrow-background\"),\n transformOrigin: toVar(\"--transform-origin\"),\n arrowOffset: toVar(\"--arrow-offset\"),\n}\n\n/* -----------------------------------------------------------------------------\n * Transform Origin Middleware\n * -----------------------------------------------------------------------------*/\n\nconst getTransformOrigin = (arrow?: Partial<Coords>) => ({\n top: \"bottom center\",\n \"top-start\": arrow ? `${arrow.x}px bottom` : \"left bottom\",\n \"top-end\": arrow ? `${arrow.x}px bottom` : \"right bottom\",\n bottom: \"top center\",\n \"bottom-start\": arrow ? `${arrow.x}px top` : \"top left\",\n \"bottom-end\": arrow ? `${arrow.x}px top` : \"top right\",\n left: \"right center\",\n \"left-start\": arrow ? `right ${arrow.y}px` : \"right top\",\n \"left-end\": arrow ? `right ${arrow.y}px` : \"right bottom\",\n right: \"left center\",\n \"right-start\": arrow ? `left ${arrow.y}px` : \"left top\",\n \"right-end\": arrow ? `left ${arrow.y}px` : \"left bottom\",\n})\n\nexport const transformOrigin: Middleware = {\n name: \"transformOrigin\",\n fn({ placement, elements, middlewareData }) {\n const { arrow } = middlewareData\n const transformOrigin = getTransformOrigin(arrow)[placement]\n\n const { floating } = elements\n floating.style.setProperty(cssVars.transformOrigin.variable, transformOrigin)\n\n return {\n data: { transformOrigin },\n }\n },\n}\n\n/* -----------------------------------------------------------------------------\n * Arrow Middleware\n * -----------------------------------------------------------------------------*/\n\ntype ArrowOptions = { element: HTMLElement }\n\ntype BasePlacement = \"top\" | \"bottom\" | \"left\" | \"right\"\n\nexport const shiftArrow = (opts: ArrowOptions): Middleware => ({\n name: \"shiftArrow\",\n fn({ placement, middlewareData }) {\n const { element: arrow } = opts\n\n if (middlewareData.arrow) {\n const { x, y } = middlewareData.arrow\n\n const dir = placement.split(\"-\")[0] as BasePlacement\n\n Object.assign(arrow.style, {\n left: x != null ? `${x}px` : \"\",\n top: y != null ? `${y}px` : \"\",\n [dir]: `calc(100% + ${cssVars.arrowOffset.reference})`,\n })\n }\n\n return {}\n },\n})\n","import type { Placement } from \"@floating-ui/dom\"\nimport { cssVars } from \"./middleware\"\n\ntype Options = {\n placement?: Placement\n}\n\nconst ARROW_FLOATING_STYLE = {\n bottom: \"rotate(45deg)\",\n left: \"rotate(135deg)\",\n top: \"rotate(225deg)\",\n right: \"rotate(315deg)\",\n} as const\n\nexport function getPlacementStyles(options: Options) {\n const { placement = \"bottom\" } = options\n\n return {\n arrow: {\n position: \"absolute\",\n width: cssVars.arrowSize.reference,\n height: cssVars.arrowSize.reference,\n [cssVars.arrowSizeHalf.variable]: `calc(${cssVars.arrowSize.reference} / 2)`,\n [cssVars.arrowOffset.variable]: `calc(${cssVars.arrowSizeHalf.reference} * -1)`,\n } as const,\n\n arrowTip: {\n transform: ARROW_FLOATING_STYLE[placement.split(\"-\")[0]],\n background: cssVars.arrowBg.reference,\n top: \"0\",\n left: \"0\",\n width: \"100%\",\n height: \"100%\",\n position: \"absolute\",\n zIndex: \"inherit\",\n } as const,\n\n floating: {\n position: \"absolute\",\n minWidth: \"max-content\",\n top: \"0px\",\n left: \"0px\",\n } as const,\n }\n}\n"],"mappings":"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","names":["import_dom","arrow","transformOrigin"]}
|