@tamagui/floating 2.0.0-rc.4 → 2.0.0-rc.40
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/cjs/Floating.cjs +7 -5
- package/dist/cjs/Floating.native.js +19 -13
- package/dist/cjs/Floating.native.js.map +1 -1
- package/dist/cjs/index.cjs +46 -13
- package/dist/cjs/index.native.js +46 -13
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/interactions/PopupTriggerMap.cjs +49 -0
- package/dist/cjs/interactions/PopupTriggerMap.native.js +97 -0
- package/dist/cjs/interactions/PopupTriggerMap.native.js.map +1 -0
- package/dist/cjs/interactions/createFloatingEvents.cjs +50 -0
- package/dist/cjs/interactions/createFloatingEvents.native.js +56 -0
- package/dist/cjs/interactions/createFloatingEvents.native.js.map +1 -0
- package/dist/cjs/interactions/safePolygon.cjs +273 -0
- package/dist/cjs/interactions/safePolygon.native.js +284 -0
- package/dist/cjs/interactions/safePolygon.native.js.map +1 -0
- package/dist/cjs/interactions/types.cjs +18 -0
- package/dist/cjs/interactions/types.native.js +21 -0
- package/dist/cjs/interactions/types.native.js.map +1 -0
- package/dist/cjs/interactions/useClick.cjs +124 -0
- package/dist/cjs/interactions/useClick.native.js +132 -0
- package/dist/cjs/interactions/useClick.native.js.map +1 -0
- package/dist/cjs/interactions/useDelayGroup.cjs +115 -0
- package/dist/cjs/interactions/useDelayGroup.native.js +125 -0
- package/dist/cjs/interactions/useDelayGroup.native.js.map +1 -0
- package/dist/cjs/interactions/useFocus.cjs +130 -0
- package/dist/cjs/interactions/useFocus.native.js +139 -0
- package/dist/cjs/interactions/useFocus.native.js.map +1 -0
- package/dist/cjs/interactions/useHover.cjs +357 -0
- package/dist/cjs/interactions/useHover.native.js +373 -0
- package/dist/cjs/interactions/useHover.native.js.map +1 -0
- package/dist/cjs/interactions/useInnerOffset.cjs +128 -0
- package/dist/cjs/interactions/useInnerOffset.native.js +141 -0
- package/dist/cjs/interactions/useInnerOffset.native.js.map +1 -0
- package/dist/cjs/interactions/useInteractions.cjs +105 -0
- package/dist/cjs/interactions/useInteractions.native.js +216 -0
- package/dist/cjs/interactions/useInteractions.native.js.map +1 -0
- package/dist/cjs/interactions/useListNavigation.cjs +418 -0
- package/dist/cjs/interactions/useListNavigation.native.js +433 -0
- package/dist/cjs/interactions/useListNavigation.native.js.map +1 -0
- package/dist/cjs/interactions/useRole.cjs +122 -0
- package/dist/cjs/interactions/useRole.native.js +136 -0
- package/dist/cjs/interactions/useRole.native.js.map +1 -0
- package/dist/cjs/interactions/useTypeahead.cjs +143 -0
- package/dist/cjs/interactions/useTypeahead.native.js +159 -0
- package/dist/cjs/interactions/useTypeahead.native.js.map +1 -0
- package/dist/cjs/interactions/utils.cjs +208 -0
- package/dist/cjs/interactions/utils.native.js +227 -0
- package/dist/cjs/interactions/utils.native.js.map +1 -0
- package/dist/cjs/middleware/inner.cjs +118 -0
- package/dist/cjs/middleware/inner.native.js +130 -0
- package/dist/cjs/middleware/inner.native.js.map +1 -0
- package/dist/cjs/useFloating.cjs +35 -28
- package/dist/cjs/useFloating.native.js +51 -47
- package/dist/cjs/useFloating.native.js.map +1 -1
- package/dist/esm/Floating.native.js +6 -3
- package/dist/esm/Floating.native.js.map +1 -1
- package/dist/esm/index.js +17 -34
- package/dist/esm/index.js.map +1 -6
- package/dist/esm/index.mjs +16 -2
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +16 -2
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/interactions/PopupTriggerMap.mjs +24 -0
- package/dist/esm/interactions/PopupTriggerMap.mjs.map +1 -0
- package/dist/esm/interactions/PopupTriggerMap.native.js +69 -0
- package/dist/esm/interactions/PopupTriggerMap.native.js.map +1 -0
- package/dist/esm/interactions/createFloatingEvents.mjs +25 -0
- package/dist/esm/interactions/createFloatingEvents.mjs.map +1 -0
- package/dist/esm/interactions/createFloatingEvents.native.js +28 -0
- package/dist/esm/interactions/createFloatingEvents.native.js.map +1 -0
- package/dist/esm/interactions/safePolygon.mjs +248 -0
- package/dist/esm/interactions/safePolygon.mjs.map +1 -0
- package/dist/esm/interactions/safePolygon.native.js +256 -0
- package/dist/esm/interactions/safePolygon.native.js.map +1 -0
- package/dist/esm/interactions/types.mjs +2 -0
- package/dist/esm/interactions/types.mjs.map +1 -0
- package/dist/esm/interactions/types.native.js +2 -0
- package/dist/esm/interactions/types.native.js.map +1 -0
- package/dist/esm/interactions/useClick.mjs +99 -0
- package/dist/esm/interactions/useClick.mjs.map +1 -0
- package/dist/esm/interactions/useClick.native.js +104 -0
- package/dist/esm/interactions/useClick.native.js.map +1 -0
- package/dist/esm/interactions/useDelayGroup.mjs +77 -0
- package/dist/esm/interactions/useDelayGroup.mjs.map +1 -0
- package/dist/esm/interactions/useDelayGroup.native.js +84 -0
- package/dist/esm/interactions/useDelayGroup.native.js.map +1 -0
- package/dist/esm/interactions/useFocus.mjs +105 -0
- package/dist/esm/interactions/useFocus.mjs.map +1 -0
- package/dist/esm/interactions/useFocus.native.js +111 -0
- package/dist/esm/interactions/useFocus.native.js.map +1 -0
- package/dist/esm/interactions/useHover.mjs +320 -0
- package/dist/esm/interactions/useHover.mjs.map +1 -0
- package/dist/esm/interactions/useHover.native.js +333 -0
- package/dist/esm/interactions/useHover.native.js.map +1 -0
- package/dist/esm/interactions/useInnerOffset.mjs +92 -0
- package/dist/esm/interactions/useInnerOffset.mjs.map +1 -0
- package/dist/esm/interactions/useInnerOffset.native.js +102 -0
- package/dist/esm/interactions/useInnerOffset.native.js.map +1 -0
- package/dist/esm/interactions/useInteractions.mjs +80 -0
- package/dist/esm/interactions/useInteractions.mjs.map +1 -0
- package/dist/esm/interactions/useInteractions.native.js +188 -0
- package/dist/esm/interactions/useInteractions.native.js.map +1 -0
- package/dist/esm/interactions/useListNavigation.mjs +393 -0
- package/dist/esm/interactions/useListNavigation.mjs.map +1 -0
- package/dist/esm/interactions/useListNavigation.native.js +405 -0
- package/dist/esm/interactions/useListNavigation.native.js.map +1 -0
- package/dist/esm/interactions/useRole.mjs +86 -0
- package/dist/esm/interactions/useRole.mjs.map +1 -0
- package/dist/esm/interactions/useRole.native.js +97 -0
- package/dist/esm/interactions/useRole.native.js.map +1 -0
- package/dist/esm/interactions/useTypeahead.mjs +118 -0
- package/dist/esm/interactions/useTypeahead.mjs.map +1 -0
- package/dist/esm/interactions/useTypeahead.native.js +131 -0
- package/dist/esm/interactions/useTypeahead.native.js.map +1 -0
- package/dist/esm/interactions/utils.mjs +162 -0
- package/dist/esm/interactions/utils.mjs.map +1 -0
- package/dist/esm/interactions/utils.native.js +178 -0
- package/dist/esm/interactions/utils.native.js.map +1 -0
- package/dist/esm/middleware/inner.mjs +82 -0
- package/dist/esm/middleware/inner.mjs.map +1 -0
- package/dist/esm/middleware/inner.native.js +91 -0
- package/dist/esm/middleware/inner.native.js.map +1 -0
- package/dist/esm/useFloating.mjs +8 -3
- package/dist/esm/useFloating.mjs.map +1 -1
- package/dist/esm/useFloating.native.js +25 -23
- package/dist/esm/useFloating.native.js.map +1 -1
- package/package.json +8 -10
- package/src/Floating.native.tsx +1 -0
- package/src/index.ts +49 -0
- package/src/interactions/PopupTriggerMap.ts +30 -0
- package/src/interactions/createFloatingEvents.ts +34 -0
- package/src/interactions/safePolygon.ts +500 -0
- package/src/interactions/types.ts +165 -0
- package/src/interactions/useClick.ts +148 -0
- package/src/interactions/useDelayGroup.ts +114 -0
- package/src/interactions/useFocus.ts +164 -0
- package/src/interactions/useHover.ts +453 -0
- package/src/interactions/useInnerOffset.ts +116 -0
- package/src/interactions/useInteractions.ts +101 -0
- package/src/interactions/useListNavigation.ts +578 -0
- package/src/interactions/useRole.ts +103 -0
- package/src/interactions/useTypeahead.ts +173 -0
- package/src/interactions/utils.ts +234 -0
- package/src/middleware/inner.ts +141 -0
- package/src/useFloating.tsx +13 -1
- package/types/Floating.native.d.ts +1 -0
- package/types/Floating.native.d.ts.map +1 -1
- package/types/index.d.ts +17 -2
- package/types/index.d.ts.map +1 -1
- package/types/interactions/PopupTriggerMap.d.ts +8 -0
- package/types/interactions/PopupTriggerMap.d.ts.map +1 -0
- package/types/interactions/createFloatingEvents.d.ts +7 -0
- package/types/interactions/createFloatingEvents.d.ts.map +1 -0
- package/types/interactions/safePolygon.d.ts +4 -0
- package/types/interactions/safePolygon.d.ts.map +1 -0
- package/types/interactions/types.d.ts +123 -0
- package/types/interactions/types.d.ts.map +1 -0
- package/types/interactions/useClick.d.ts +3 -0
- package/types/interactions/useClick.d.ts.map +1 -0
- package/types/interactions/useDelayGroup.d.ts +23 -0
- package/types/interactions/useDelayGroup.d.ts.map +1 -0
- package/types/interactions/useFocus.d.ts +3 -0
- package/types/interactions/useFocus.d.ts.map +1 -0
- package/types/interactions/useHover.d.ts +6 -0
- package/types/interactions/useHover.d.ts.map +1 -0
- package/types/interactions/useInnerOffset.d.ts +3 -0
- package/types/interactions/useInnerOffset.d.ts.map +1 -0
- package/types/interactions/useInteractions.d.ts +8 -0
- package/types/interactions/useInteractions.d.ts.map +1 -0
- package/types/interactions/useListNavigation.d.ts +3 -0
- package/types/interactions/useListNavigation.d.ts.map +1 -0
- package/types/interactions/useRole.d.ts +3 -0
- package/types/interactions/useRole.d.ts.map +1 -0
- package/types/interactions/useTypeahead.d.ts +3 -0
- package/types/interactions/useTypeahead.d.ts.map +1 -0
- package/types/interactions/utils.d.ts +46 -0
- package/types/interactions/utils.d.ts.map +1 -0
- package/types/middleware/inner.d.ts +14 -0
- package/types/middleware/inner.d.ts.map +1 -0
- package/types/useFloating.d.ts +7 -1
- package/types/useFloating.d.ts.map +1 -1
- package/dist/cjs/Floating.js +0 -15
- package/dist/cjs/Floating.js.map +0 -6
- package/dist/cjs/index.js +0 -34
- package/dist/cjs/index.js.map +0 -6
- package/dist/cjs/useFloating.js +0 -46
- package/dist/cjs/useFloating.js.map +0 -6
- package/dist/esm/Floating.js +0 -2
- package/dist/esm/Floating.js.map +0 -6
- package/dist/esm/useFloating.js +0 -23
- package/dist/esm/useFloating.js.map +0 -6
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { useLayoutEffect, useMemo, useRef } from 'react'
|
|
2
|
+
import { useEvent } from '@tamagui/use-event'
|
|
3
|
+
import type { ElementProps, FloatingInteractionContext, UseTypeaheadProps } from './types'
|
|
4
|
+
import { clearTimeoutIfSet, stopEvent } from './utils'
|
|
5
|
+
|
|
6
|
+
// typeahead: character buffer matching against list items
|
|
7
|
+
// ported from floating-ui/react useTypeahead
|
|
8
|
+
export function useTypeahead(
|
|
9
|
+
context: FloatingInteractionContext,
|
|
10
|
+
props: UseTypeaheadProps
|
|
11
|
+
): ElementProps {
|
|
12
|
+
const { open, dataRef } = context
|
|
13
|
+
const {
|
|
14
|
+
listRef,
|
|
15
|
+
activeIndex,
|
|
16
|
+
onMatch: unstable_onMatch,
|
|
17
|
+
onTypingChange: unstable_onTypingChange,
|
|
18
|
+
enabled = true,
|
|
19
|
+
findMatch = null,
|
|
20
|
+
resetMs = 750,
|
|
21
|
+
ignoreKeys = [],
|
|
22
|
+
selectedIndex = null,
|
|
23
|
+
} = props
|
|
24
|
+
|
|
25
|
+
const timeoutIdRef = useRef(-1)
|
|
26
|
+
const stringRef = useRef('')
|
|
27
|
+
const prevIndexRef = useRef<number | null>(selectedIndex ?? activeIndex ?? -1)
|
|
28
|
+
const matchIndexRef = useRef<number | null>(null)
|
|
29
|
+
|
|
30
|
+
// stable callbacks via useEvent
|
|
31
|
+
const onMatch = useEvent(unstable_onMatch || (() => {}))
|
|
32
|
+
const onTypingChange = useEvent(unstable_onTypingChange || (() => {}))
|
|
33
|
+
|
|
34
|
+
// latest-value refs
|
|
35
|
+
const findMatchRef = useRef(findMatch)
|
|
36
|
+
findMatchRef.current = findMatch
|
|
37
|
+
const ignoreKeysRef = useRef(ignoreKeys)
|
|
38
|
+
ignoreKeysRef.current = ignoreKeys
|
|
39
|
+
|
|
40
|
+
useLayoutEffect(() => {
|
|
41
|
+
if (open) {
|
|
42
|
+
clearTimeoutIfSet(timeoutIdRef)
|
|
43
|
+
matchIndexRef.current = null
|
|
44
|
+
stringRef.current = ''
|
|
45
|
+
}
|
|
46
|
+
}, [open])
|
|
47
|
+
|
|
48
|
+
useLayoutEffect(() => {
|
|
49
|
+
// sync arrow key navigation but not typeahead navigation
|
|
50
|
+
if (open && stringRef.current === '') {
|
|
51
|
+
prevIndexRef.current = selectedIndex ?? activeIndex ?? -1
|
|
52
|
+
}
|
|
53
|
+
}, [open, selectedIndex, activeIndex])
|
|
54
|
+
|
|
55
|
+
const setTypingChange = (value: boolean) => {
|
|
56
|
+
if (value) {
|
|
57
|
+
if (!dataRef.current.typing) {
|
|
58
|
+
dataRef.current.typing = value
|
|
59
|
+
onTypingChange(value)
|
|
60
|
+
}
|
|
61
|
+
} else {
|
|
62
|
+
if (dataRef.current.typing) {
|
|
63
|
+
dataRef.current.typing = value
|
|
64
|
+
onTypingChange(value)
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const onKeyDown = (event: React.KeyboardEvent) => {
|
|
70
|
+
function getMatchingIndex(
|
|
71
|
+
list: Array<string | null>,
|
|
72
|
+
orderedList: Array<string | null>,
|
|
73
|
+
string: string
|
|
74
|
+
) {
|
|
75
|
+
const str = findMatchRef.current
|
|
76
|
+
? findMatchRef.current(orderedList, string)
|
|
77
|
+
: orderedList.find(
|
|
78
|
+
(text) => text?.toLocaleLowerCase().indexOf(string.toLocaleLowerCase()) === 0
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
return str ? list.indexOf(str) : -1
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const listContent = listRef.current
|
|
85
|
+
|
|
86
|
+
if (stringRef.current.length > 0 && stringRef.current[0] !== ' ') {
|
|
87
|
+
if (getMatchingIndex(listContent, listContent, stringRef.current) === -1) {
|
|
88
|
+
setTypingChange(false)
|
|
89
|
+
} else if (event.key === ' ') {
|
|
90
|
+
stopEvent(event)
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if (
|
|
95
|
+
listContent == null ||
|
|
96
|
+
ignoreKeysRef.current.includes(event.key) ||
|
|
97
|
+
// character key
|
|
98
|
+
event.key.length !== 1 ||
|
|
99
|
+
// modifier key
|
|
100
|
+
event.ctrlKey ||
|
|
101
|
+
event.metaKey ||
|
|
102
|
+
event.altKey
|
|
103
|
+
) {
|
|
104
|
+
return
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (open && event.key !== ' ') {
|
|
108
|
+
stopEvent(event)
|
|
109
|
+
setTypingChange(true)
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// bail out if the list contains a word like "llama" or "aaron"
|
|
113
|
+
const allowRapidSuccessionOfFirstLetter = listContent.every((text) =>
|
|
114
|
+
text ? text[0]?.toLocaleLowerCase() !== text[1]?.toLocaleLowerCase() : true
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
// allows the user to cycle through items that start with the same letter
|
|
118
|
+
// in rapid succession
|
|
119
|
+
if (allowRapidSuccessionOfFirstLetter && stringRef.current === event.key) {
|
|
120
|
+
stringRef.current = ''
|
|
121
|
+
prevIndexRef.current = matchIndexRef.current
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
stringRef.current += event.key
|
|
125
|
+
clearTimeoutIfSet(timeoutIdRef)
|
|
126
|
+
timeoutIdRef.current = window.setTimeout(() => {
|
|
127
|
+
stringRef.current = ''
|
|
128
|
+
prevIndexRef.current = matchIndexRef.current
|
|
129
|
+
setTypingChange(false)
|
|
130
|
+
}, resetMs)
|
|
131
|
+
|
|
132
|
+
const prevIndex = prevIndexRef.current
|
|
133
|
+
|
|
134
|
+
const index = getMatchingIndex(
|
|
135
|
+
listContent,
|
|
136
|
+
[
|
|
137
|
+
...listContent.slice((prevIndex || 0) + 1),
|
|
138
|
+
...listContent.slice(0, (prevIndex || 0) + 1),
|
|
139
|
+
],
|
|
140
|
+
stringRef.current
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
if (index !== -1) {
|
|
144
|
+
onMatch(index)
|
|
145
|
+
matchIndexRef.current = index
|
|
146
|
+
} else if (event.key !== ' ') {
|
|
147
|
+
stringRef.current = ''
|
|
148
|
+
setTypingChange(false)
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
const reference: ElementProps['reference'] = useMemo(
|
|
153
|
+
() => ({ onKeyDown: onKeyDown as any }),
|
|
154
|
+
[open, enabled]
|
|
155
|
+
)
|
|
156
|
+
|
|
157
|
+
const floating: ElementProps['floating'] = useMemo(
|
|
158
|
+
() => ({
|
|
159
|
+
onKeyDown: onKeyDown as any,
|
|
160
|
+
onKeyUp(event: React.KeyboardEvent) {
|
|
161
|
+
if (event.key === ' ') {
|
|
162
|
+
setTypingChange(false)
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
}),
|
|
166
|
+
[open, enabled]
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
return useMemo(
|
|
170
|
+
() => (enabled ? { reference, floating } : {}),
|
|
171
|
+
[enabled, reference, floating]
|
|
172
|
+
)
|
|
173
|
+
}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
// shared utilities for interaction hooks, ported from floating-ui/react
|
|
2
|
+
|
|
3
|
+
export function getDocument(node: Element | null | undefined): Document {
|
|
4
|
+
return node?.ownerDocument || document
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export function contains(parent?: Element | null, child?: Element | null): boolean {
|
|
8
|
+
if (!parent || !child) return false
|
|
9
|
+
const rootNode = child.getRootNode?.()
|
|
10
|
+
if (parent.contains(child)) return true
|
|
11
|
+
// shadow DOM support
|
|
12
|
+
if (rootNode && isShadowRoot(rootNode)) {
|
|
13
|
+
let next: any = child
|
|
14
|
+
while (next) {
|
|
15
|
+
if (parent === next) return true
|
|
16
|
+
next = next.parentNode || next.host
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return false
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function isShadowRoot(node: Node): node is ShadowRoot {
|
|
23
|
+
return node instanceof ShadowRoot
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function getTarget(event: Event): EventTarget | null {
|
|
27
|
+
if ('composedPath' in event) {
|
|
28
|
+
return event.composedPath()[0]
|
|
29
|
+
}
|
|
30
|
+
return (event as Event).target
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function activeElement(doc: Document): Element | null {
|
|
34
|
+
let el = doc.activeElement
|
|
35
|
+
while (el?.shadowRoot?.activeElement != null) {
|
|
36
|
+
el = el.shadowRoot.activeElement
|
|
37
|
+
}
|
|
38
|
+
return el
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function isHTMLElement(value: unknown): value is HTMLElement {
|
|
42
|
+
return value instanceof HTMLElement
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function isElement(value: unknown): value is Element {
|
|
46
|
+
return value instanceof Element
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const TYPEABLE_SELECTOR =
|
|
50
|
+
"input:not([type='hidden']):not([disabled])," +
|
|
51
|
+
"[contenteditable]:not([contenteditable='false']),textarea:not([disabled])"
|
|
52
|
+
|
|
53
|
+
export function isTypeableElement(element: unknown): boolean {
|
|
54
|
+
return isHTMLElement(element) && element.matches(TYPEABLE_SELECTOR)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function isTypeableCombobox(element: Element | null): boolean {
|
|
58
|
+
if (!element) return false
|
|
59
|
+
return element.getAttribute('role') === 'combobox' && isTypeableElement(element)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function getPlatform(): string {
|
|
63
|
+
const uaData = (navigator as any).userAgentData as any
|
|
64
|
+
if (uaData?.platform) return uaData.platform
|
|
65
|
+
return navigator.platform
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function getUserAgent(): string {
|
|
69
|
+
const uaData = (navigator as any).userAgentData as any
|
|
70
|
+
if (uaData && Array.isArray(uaData.brands)) {
|
|
71
|
+
return uaData.brands.map(({ brand, version }: any) => `${brand}/${version}`).join(' ')
|
|
72
|
+
}
|
|
73
|
+
return navigator.userAgent
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export function isSafari(): boolean {
|
|
77
|
+
return /apple/i.test(navigator.vendor)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export function isMac(): boolean {
|
|
81
|
+
return getPlatform().toLowerCase().startsWith('mac') && !navigator.maxTouchPoints
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function isJSDOM(): boolean {
|
|
85
|
+
return getUserAgent().includes('jsdom/')
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export function matchesFocusVisible(element: Element | null): boolean {
|
|
89
|
+
if (!element || isJSDOM()) return true
|
|
90
|
+
try {
|
|
91
|
+
return element.matches(':focus-visible')
|
|
92
|
+
} catch {
|
|
93
|
+
return true
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export function isMouseLikePointerType(
|
|
98
|
+
pointerType: string | undefined,
|
|
99
|
+
strict?: boolean
|
|
100
|
+
): boolean {
|
|
101
|
+
const values: Array<string | undefined> = ['mouse', 'pen']
|
|
102
|
+
if (!strict) {
|
|
103
|
+
values.push('', undefined)
|
|
104
|
+
}
|
|
105
|
+
return values.includes(pointerType)
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export function clearTimeoutIfSet(timeoutRef: { current: number }): void {
|
|
109
|
+
if (timeoutRef.current !== -1) {
|
|
110
|
+
clearTimeout(timeoutRef.current)
|
|
111
|
+
timeoutRef.current = -1
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export function stopEvent(event: Event | React.SyntheticEvent): void {
|
|
116
|
+
event.preventDefault()
|
|
117
|
+
event.stopPropagation()
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export function isVirtualClick(event: MouseEvent | PointerEvent): boolean {
|
|
121
|
+
if ((event as any).mozInputSource === 0 && event.isTrusted) return true
|
|
122
|
+
if (isAndroid() && (event as PointerEvent).pointerType) {
|
|
123
|
+
return event.type === 'click' && event.buttons === 1
|
|
124
|
+
}
|
|
125
|
+
return event.detail === 0 && !(event as PointerEvent).pointerType
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export function isVirtualPointerEvent(event: PointerEvent): boolean {
|
|
129
|
+
if (isJSDOM()) return false
|
|
130
|
+
return (
|
|
131
|
+
(!isAndroid() && event.width === 0 && event.height === 0) ||
|
|
132
|
+
(isAndroid() &&
|
|
133
|
+
event.width === 1 &&
|
|
134
|
+
event.height === 1 &&
|
|
135
|
+
event.pressure === 0 &&
|
|
136
|
+
event.detail === 0 &&
|
|
137
|
+
event.pointerType === 'mouse') ||
|
|
138
|
+
(event.width < 1 &&
|
|
139
|
+
event.height < 1 &&
|
|
140
|
+
event.pressure === 0 &&
|
|
141
|
+
event.detail === 0 &&
|
|
142
|
+
event.pointerType === 'touch')
|
|
143
|
+
)
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
function isAndroid(): boolean {
|
|
147
|
+
const re = /android/i
|
|
148
|
+
return re.test(getPlatform()) || re.test(getUserAgent())
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// focus enqueue helper
|
|
152
|
+
let rafId = 0
|
|
153
|
+
export function enqueueFocus(
|
|
154
|
+
el: HTMLElement | null,
|
|
155
|
+
options: { preventScroll?: boolean; cancelPrevious?: boolean; sync?: boolean } = {}
|
|
156
|
+
): void {
|
|
157
|
+
const { preventScroll = false, cancelPrevious = true, sync = false } = options
|
|
158
|
+
cancelPrevious && cancelAnimationFrame(rafId)
|
|
159
|
+
const exec = () => el?.focus({ preventScroll })
|
|
160
|
+
if (sync) {
|
|
161
|
+
exec()
|
|
162
|
+
} else {
|
|
163
|
+
rafId = requestAnimationFrame(exec)
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// list navigation utilities
|
|
168
|
+
|
|
169
|
+
type DisabledIndices = Array<number> | ((index: number) => boolean)
|
|
170
|
+
|
|
171
|
+
export function isListIndexDisabled(
|
|
172
|
+
listRef: { current: Array<HTMLElement | null> },
|
|
173
|
+
index: number,
|
|
174
|
+
disabledIndices?: DisabledIndices
|
|
175
|
+
): boolean {
|
|
176
|
+
if (typeof disabledIndices === 'function') return disabledIndices(index)
|
|
177
|
+
if (disabledIndices) return disabledIndices.includes(index)
|
|
178
|
+
const element = listRef.current[index]
|
|
179
|
+
return (
|
|
180
|
+
element == null ||
|
|
181
|
+
element.hasAttribute('disabled') ||
|
|
182
|
+
element.getAttribute('aria-disabled') === 'true'
|
|
183
|
+
)
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
export function findNonDisabledListIndex(
|
|
187
|
+
listRef: { current: Array<HTMLElement | null> },
|
|
188
|
+
{
|
|
189
|
+
startingIndex = -1,
|
|
190
|
+
decrement = false,
|
|
191
|
+
disabledIndices,
|
|
192
|
+
amount = 1,
|
|
193
|
+
}: {
|
|
194
|
+
startingIndex?: number
|
|
195
|
+
decrement?: boolean
|
|
196
|
+
disabledIndices?: DisabledIndices
|
|
197
|
+
amount?: number
|
|
198
|
+
} = {}
|
|
199
|
+
): number {
|
|
200
|
+
let index = startingIndex
|
|
201
|
+
do {
|
|
202
|
+
index += decrement ? -amount : amount
|
|
203
|
+
} while (
|
|
204
|
+
index >= 0 &&
|
|
205
|
+
index <= listRef.current.length - 1 &&
|
|
206
|
+
isListIndexDisabled(listRef, index, disabledIndices)
|
|
207
|
+
)
|
|
208
|
+
return index
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
export function getMinListIndex(
|
|
212
|
+
listRef: { current: Array<HTMLElement | null> },
|
|
213
|
+
disabledIndices: DisabledIndices | undefined
|
|
214
|
+
): number {
|
|
215
|
+
return findNonDisabledListIndex(listRef, { disabledIndices })
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
export function getMaxListIndex(
|
|
219
|
+
listRef: { current: Array<HTMLElement | null> },
|
|
220
|
+
disabledIndices: DisabledIndices | undefined
|
|
221
|
+
): number {
|
|
222
|
+
return findNonDisabledListIndex(listRef, {
|
|
223
|
+
decrement: true,
|
|
224
|
+
startingIndex: listRef.current.length,
|
|
225
|
+
disabledIndices,
|
|
226
|
+
})
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
export function isIndexOutOfListBounds(
|
|
230
|
+
listRef: { current: Array<HTMLElement | null> },
|
|
231
|
+
index: number
|
|
232
|
+
): boolean {
|
|
233
|
+
return index < 0 || index >= listRef.current.length
|
|
234
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import * as ReactDOM from 'react-dom'
|
|
2
|
+
import { detectOverflow, offset } from '@floating-ui/react-dom'
|
|
3
|
+
import type { Middleware, MiddlewareState } from '@floating-ui/react-dom'
|
|
4
|
+
|
|
5
|
+
// ported from floating-ui/react/_deprecated-inner.ts
|
|
6
|
+
// positions the floating element so an inner list item aligns with the reference
|
|
7
|
+
|
|
8
|
+
export interface InnerProps {
|
|
9
|
+
listRef: React.RefObject<Array<HTMLElement | null>>
|
|
10
|
+
index: number | null
|
|
11
|
+
offset?: number
|
|
12
|
+
overflowRef: React.RefObject<any>
|
|
13
|
+
onFallbackChange?: null | ((fallback: boolean) => void)
|
|
14
|
+
padding?: number
|
|
15
|
+
minItemsVisible?: number
|
|
16
|
+
referenceOverflowThreshold?: number
|
|
17
|
+
scrollRef?: React.RefObject<HTMLElement | null>
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function getArgsWithCustomFloatingHeight(state: MiddlewareState, height: number) {
|
|
21
|
+
return {
|
|
22
|
+
...state,
|
|
23
|
+
rects: {
|
|
24
|
+
...state.rects,
|
|
25
|
+
floating: {
|
|
26
|
+
...state.rects.floating,
|
|
27
|
+
height,
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export const inner = (props: InnerProps): Middleware => ({
|
|
34
|
+
name: 'inner',
|
|
35
|
+
options: props,
|
|
36
|
+
async fn(state: MiddlewareState) {
|
|
37
|
+
const {
|
|
38
|
+
listRef,
|
|
39
|
+
overflowRef,
|
|
40
|
+
onFallbackChange,
|
|
41
|
+
offset: innerOffset = 0,
|
|
42
|
+
index = 0,
|
|
43
|
+
minItemsVisible = 4,
|
|
44
|
+
referenceOverflowThreshold = 0,
|
|
45
|
+
scrollRef,
|
|
46
|
+
padding = 0,
|
|
47
|
+
} = props
|
|
48
|
+
|
|
49
|
+
const {
|
|
50
|
+
rects,
|
|
51
|
+
elements: { floating },
|
|
52
|
+
} = state
|
|
53
|
+
|
|
54
|
+
const item = listRef.current?.[index ?? 0]
|
|
55
|
+
const scrollEl = scrollRef?.current || floating
|
|
56
|
+
|
|
57
|
+
const clientTop = floating.clientTop || scrollEl.clientTop
|
|
58
|
+
const floatingIsBordered = floating.clientTop !== 0
|
|
59
|
+
const scrollElIsBordered = scrollEl.clientTop !== 0
|
|
60
|
+
const floatingIsScrollEl = floating === scrollEl
|
|
61
|
+
|
|
62
|
+
if (!item || index == null) {
|
|
63
|
+
onFallbackChange?.(true)
|
|
64
|
+
return {}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// use the offset middleware to compute the y position that aligns
|
|
68
|
+
// the selected item's center with the reference's center
|
|
69
|
+
const nextArgs = {
|
|
70
|
+
...state,
|
|
71
|
+
...(await offset(
|
|
72
|
+
-item.offsetTop -
|
|
73
|
+
floating.clientTop -
|
|
74
|
+
rects.reference.height / 2 -
|
|
75
|
+
item.offsetHeight / 2 -
|
|
76
|
+
innerOffset
|
|
77
|
+
).fn(state)),
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const detectOverflowOptions = { padding }
|
|
81
|
+
|
|
82
|
+
const overflow = await detectOverflow(
|
|
83
|
+
getArgsWithCustomFloatingHeight(
|
|
84
|
+
nextArgs,
|
|
85
|
+
scrollEl.scrollHeight + clientTop + floating.clientTop
|
|
86
|
+
),
|
|
87
|
+
detectOverflowOptions
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
const refOverflow = await detectOverflow(nextArgs, {
|
|
91
|
+
...detectOverflowOptions,
|
|
92
|
+
elementContext: 'reference',
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
const diffY = Math.max(0, overflow.top)
|
|
96
|
+
const nextY = nextArgs.y + diffY
|
|
97
|
+
const isScrollable = scrollEl.scrollHeight > scrollEl.clientHeight
|
|
98
|
+
const rounder = isScrollable ? (v: number) => v : Math.round
|
|
99
|
+
|
|
100
|
+
const maxHeight = rounder(
|
|
101
|
+
Math.max(
|
|
102
|
+
0,
|
|
103
|
+
scrollEl.scrollHeight +
|
|
104
|
+
((floatingIsBordered && floatingIsScrollEl) || scrollElIsBordered
|
|
105
|
+
? clientTop * 2
|
|
106
|
+
: 0) -
|
|
107
|
+
diffY -
|
|
108
|
+
Math.max(0, overflow.bottom)
|
|
109
|
+
)
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
scrollEl.style.maxHeight = `${maxHeight}px`
|
|
113
|
+
scrollEl.scrollTop = diffY
|
|
114
|
+
|
|
115
|
+
// check if we should fall back to standard positioning
|
|
116
|
+
if (onFallbackChange) {
|
|
117
|
+
const shouldFallback =
|
|
118
|
+
scrollEl.offsetHeight <
|
|
119
|
+
item.offsetHeight * Math.min(minItemsVisible, listRef.current?.length ?? 0) -
|
|
120
|
+
1 ||
|
|
121
|
+
refOverflow.top >= -referenceOverflowThreshold ||
|
|
122
|
+
refOverflow.bottom >= -referenceOverflowThreshold
|
|
123
|
+
|
|
124
|
+
ReactDOM.flushSync(() => onFallbackChange(shouldFallback))
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if (overflowRef) {
|
|
128
|
+
;(overflowRef as any).current = await detectOverflow(
|
|
129
|
+
getArgsWithCustomFloatingHeight(
|
|
130
|
+
{ ...nextArgs, y: nextY },
|
|
131
|
+
scrollEl.offsetHeight + clientTop + floating.clientTop
|
|
132
|
+
),
|
|
133
|
+
detectOverflowOptions
|
|
134
|
+
)
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
return {
|
|
138
|
+
y: nextY,
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
})
|
package/src/useFloating.tsx
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
2
|
|
|
3
3
|
import * as Floating from './Floating'
|
|
4
|
+
import type { PopupTriggerMap } from './interactions/PopupTriggerMap'
|
|
4
5
|
|
|
5
6
|
export type UseFloatingFn = typeof Floating.useFloating
|
|
6
7
|
|
|
@@ -16,11 +17,22 @@ export type UseFloatingReturn = Floating.UseFloatingReturn & {
|
|
|
16
17
|
context?: any
|
|
17
18
|
getFloatingProps?: (props: { ref: any; [key: string]: any }) => any
|
|
18
19
|
getReferenceProps?: (props: { ref: any; [key: string]: any }) => any
|
|
20
|
+
// extended by useFloatingContext for hoverable popovers/tooltips
|
|
21
|
+
open?: boolean
|
|
22
|
+
onHoverReference?: (event: any) => void
|
|
23
|
+
onLeaveReference?: () => void
|
|
24
|
+
triggerElements?: PopupTriggerMap
|
|
19
25
|
}
|
|
20
26
|
|
|
21
|
-
export
|
|
27
|
+
export type UseFloatingOverrideFn = (props?: UseFloatingProps) => UseFloatingReturn
|
|
28
|
+
|
|
29
|
+
export const FloatingOverrideContext = React.createContext<UseFloatingOverrideFn | null>(
|
|
30
|
+
null
|
|
31
|
+
)
|
|
22
32
|
|
|
23
33
|
export const useFloating = (props: UseFloatingProps): UseFloatingReturn => {
|
|
34
|
+
'use no memo'
|
|
35
|
+
|
|
24
36
|
const context = React.useContext(FloatingOverrideContext)
|
|
25
37
|
return (context || Floating.useFloating)?.({
|
|
26
38
|
...props,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ComputePositionReturn } from '@floating-ui/react-native';
|
|
2
2
|
import type { RefObject } from 'react';
|
|
3
3
|
export declare const autoUpdate: () => void;
|
|
4
|
+
export declare const getOverflowAncestors: () => never[];
|
|
4
5
|
export * from '@floating-ui/react-native';
|
|
5
6
|
export declare const platform: null;
|
|
6
7
|
export declare type UseFloatingReturn = Data & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Floating.native.d.ts","sourceRoot":"","sources":["../src/Floating.native.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,eAAO,MAAM,UAAU,YAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"Floating.native.d.ts","sourceRoot":"","sources":["../src/Floating.native.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,eAAO,MAAM,UAAU,YAAW,CAAA;AAClC,eAAO,MAAM,oBAAoB,eAAW,CAAA;AAE5C,cAAc,2BAA2B,CAAA;AAEzC,eAAO,MAAM,QAAQ,MAAO,CAAA;AAE5B,MAAM,CAAC,OAAO,MAAM,iBAAiB,GAAG,IAAI,GAAG;IAC7C,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,YAAY,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAA;IACjC,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAA;IAC7B,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAA;IAC9B,IAAI,EAAE;QACJ,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,CAAA;QACzB,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,CAAA;QACxB,YAAY,EAAE,SAAS,CAAC,GAAG,CAAC,CAAA;QAC5B,YAAY,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAA;QACjC,WAAW,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAA;QAChC,eAAe,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAA;KACrC,CAAA;IACD,QAAQ,EAAE;QACR,SAAS,EAAE,GAAG,CAAA;QACd,QAAQ,EAAE,GAAG,CAAA;QACb,YAAY,EAAE,GAAG,CAAA;KAClB,CAAA;IACD,WAAW,EAAE;QACX,QAAQ,EAAE,CAAC,KAAK,EAAE;YAChB,WAAW,EAAE;gBACX,aAAa,EAAE;oBACb,CAAC,EAAE,MAAM,CAAA;oBACT,CAAC,EAAE,MAAM,CAAA;iBACV,CAAA;aACF,CAAA;SACF,KAAK,IAAI,CAAA;QACV,mBAAmB,EAAE,EAAE,CAAA;KACxB,CAAA;CACF,CAAA;AAED,KAAK,IAAI,GAAG,IAAI,CAAC,qBAAqB,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG;IACnD,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAChB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACjB,CAAA"}
|
package/types/index.d.ts
CHANGED
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
export type { AlignedPlacement, Alignment, ArrowOptions, AutoPlacementOptions, AutoUpdateOptions, Axis, Boundary, ClientRectObject, ComputePositionConfig, ComputePositionReturn, Coords, DetectOverflowOptions, Dimensions, ElementContext, ElementRects, Elements, FlipOptions, FloatingElement, HideOptions, InlineOptions, Length, Middleware, MiddlewareData, MiddlewareReturn, MiddlewareState, NodeScroll, OffsetOptions, Padding, Placement, Platform, Rect, ReferenceElement, ReferenceType, RootBoundary, ShiftOptions, Side, SideObject, SizeOptions, Strategy, UseFloatingData, UseFloatingOptions, VirtualElement, } from './Floating';
|
|
2
|
-
export { arrow, autoPlacement, autoUpdate, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size, } from './Floating';
|
|
3
|
-
export { useFloating, FloatingOverrideContext, type UseFloatingReturn, type UseFloatingProps, type UseFloatingFn, } from './useFloating';
|
|
2
|
+
export { arrow, autoPlacement, autoUpdate, detectOverflow, flip, getOverflowAncestors, hide, inline, limitShift, offset, platform, shift, size, } from './Floating';
|
|
3
|
+
export { useFloating, FloatingOverrideContext, type UseFloatingReturn, type UseFloatingProps, type UseFloatingFn, type UseFloatingOverrideFn, } from './useFloating';
|
|
4
|
+
export { useFloating as useFloatingRaw } from './Floating';
|
|
5
|
+
export { createFloatingEvents } from './interactions/createFloatingEvents';
|
|
6
|
+
export { PopupTriggerMap } from './interactions/PopupTriggerMap';
|
|
7
|
+
export { useInteractions } from './interactions/useInteractions';
|
|
8
|
+
export { useHover } from './interactions/useHover';
|
|
9
|
+
export { safePolygon } from './interactions/safePolygon';
|
|
10
|
+
export { useFocus } from './interactions/useFocus';
|
|
11
|
+
export { useRole } from './interactions/useRole';
|
|
12
|
+
export { useClick } from './interactions/useClick';
|
|
13
|
+
export { useListNavigation } from './interactions/useListNavigation';
|
|
14
|
+
export { useTypeahead } from './interactions/useTypeahead';
|
|
15
|
+
export { useInnerOffset } from './interactions/useInnerOffset';
|
|
16
|
+
export { FloatingDelayGroup, useDelayGroup, useDelayGroupContext, } from './interactions/useDelayGroup';
|
|
17
|
+
export { inner } from './middleware/inner';
|
|
18
|
+
export type { ElementProps, FloatingEvents, FloatingInteractionContext, OpenChangeReason, UseHoverProps, HandleCloseFn, SafePolygonOptions, UseFocusProps, UseRoleProps, UseClickProps, UseListNavigationProps, UseTypeaheadProps, UseInnerOffsetProps, Delay, } from './interactions/types';
|
|
4
19
|
//# sourceMappingURL=index.d.ts.map
|
package/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,gBAAgB,EAChB,SAAS,EACT,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,EACjB,IAAI,EACJ,QAAQ,EACR,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,MAAM,EACN,qBAAqB,EACrB,UAAU,EACV,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,eAAe,EACf,WAAW,EACX,aAAa,EACb,MAAM,EACN,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,aAAa,EACb,OAAO,EACP,SAAS,EACT,QAAQ,EACR,IAAI,EACJ,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,IAAI,EACJ,UAAU,EACV,WAAW,EACX,QAAQ,EACR,eAAe,EACf,kBAAkB,EAClB,cAAc,GACf,MAAM,YAAY,CAAA;AAEnB,OAAO,EACL,KAAK,EACL,aAAa,EACb,UAAU,EACV,cAAc,EACd,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,UAAU,EACV,MAAM,EACN,QAAQ,EACR,KAAK,EACL,IAAI,GACL,MAAM,YAAY,CAAA;AAEnB,OAAO,EACL,WAAW,EACX,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,aAAa,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,gBAAgB,EAChB,SAAS,EACT,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,EACjB,IAAI,EACJ,QAAQ,EACR,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,MAAM,EACN,qBAAqB,EACrB,UAAU,EACV,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,eAAe,EACf,WAAW,EACX,aAAa,EACb,MAAM,EACN,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,aAAa,EACb,OAAO,EACP,SAAS,EACT,QAAQ,EACR,IAAI,EACJ,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,IAAI,EACJ,UAAU,EACV,WAAW,EACX,QAAQ,EACR,eAAe,EACf,kBAAkB,EAClB,cAAc,GACf,MAAM,YAAY,CAAA;AAEnB,OAAO,EACL,KAAK,EACL,aAAa,EACb,UAAU,EACV,cAAc,EACd,IAAI,EACJ,oBAAoB,EACpB,IAAI,EACJ,MAAM,EACN,UAAU,EACV,MAAM,EACN,QAAQ,EACR,KAAK,EACL,IAAI,GACL,MAAM,YAAY,CAAA;AAEnB,OAAO,EACL,WAAW,EACX,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,qBAAqB,GAC3B,MAAM,eAAe,CAAA;AAItB,OAAO,EAAE,WAAW,IAAI,cAAc,EAAE,MAAM,YAAY,CAAA;AAG1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAG1E,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAGhE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,oBAAoB,GACrB,MAAM,8BAA8B,CAAA;AAGrC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAG1C,YAAY,EACV,YAAY,EACZ,cAAc,EACd,0BAA0B,EAC1B,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,aAAa,EACb,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,GACN,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PopupTriggerMap.d.ts","sourceRoot":"","sources":["../../src/interactions/PopupTriggerMap.ts"],"names":[],"mappings":"AAKA,qBAAa,eAAe;IAC1B,OAAO,CAAC,GAAG,CAA6B;IACxC,OAAO,CAAC,QAAQ,CAAqB;IAErC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAShC,MAAM,CAAC,EAAE,EAAE,MAAM;IAQjB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;CAGtC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type FloatingEvents = {
|
|
2
|
+
emit(event: string, data?: any): void;
|
|
3
|
+
on(event: string, handler: (data?: any) => void): void;
|
|
4
|
+
off(event: string, handler: (data?: any) => void): void;
|
|
5
|
+
};
|
|
6
|
+
export declare function createFloatingEvents(): FloatingEvents;
|
|
7
|
+
//# sourceMappingURL=createFloatingEvents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createFloatingEvents.d.ts","sourceRoot":"","sources":["../../src/interactions/createFloatingEvents.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,CAAA;IACrC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAA;IACtD,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAA;CACxD,CAAA;AAED,wBAAgB,oBAAoB,IAAI,cAAc,CAuBrD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safePolygon.d.ts","sourceRoot":"","sources":["../../src/interactions/safePolygon.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAgChE,YAAY,EAAE,kBAAkB,EAAE,CAAA;AAoFlC,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,aAAa,CA+X3E"}
|