@tamagui/floating 3.0.0-beta.924.1 → 3.0.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/cjs/interactions/useInteractions.cjs +35 -45
- package/dist/cjs/interactions/useInteractions.native.cjs +101 -100
- package/dist/cjs/interactions/useInteractions.native.js +101 -100
- package/dist/cjs/interactions/useInteractions.native.js.map +1 -1
- package/dist/cjs/interactions/useListNavigation.cjs +4 -3
- package/dist/cjs/interactions/useListNavigation.native.cjs +5 -4
- package/dist/cjs/interactions/useListNavigation.native.js +5 -4
- package/dist/cjs/interactions/useListNavigation.native.js.map +1 -1
- package/dist/cjs/interactions/utils.native.cjs +3 -10
- package/dist/cjs/interactions/utils.native.js +3 -10
- package/dist/cjs/interactions/utils.native.js.map +1 -1
- package/dist/cjs/middleware/inner.cjs +5 -3
- package/dist/cjs/middleware/inner.native.cjs +10 -7
- package/dist/cjs/middleware/inner.native.js +10 -7
- package/dist/cjs/middleware/inner.native.js.map +1 -1
- package/dist/esm/interactions/useInteractions.mjs +36 -45
- package/dist/esm/interactions/useInteractions.mjs.map +1 -1
- package/dist/esm/interactions/useInteractions.native.js +102 -100
- package/dist/esm/interactions/useInteractions.native.js.map +1 -1
- package/dist/esm/interactions/useListNavigation.mjs +4 -3
- package/dist/esm/interactions/useListNavigation.mjs.map +1 -1
- package/dist/esm/interactions/useListNavigation.native.js +5 -4
- package/dist/esm/interactions/useListNavigation.native.js.map +1 -1
- package/dist/esm/interactions/utils.native.js +3 -10
- package/dist/esm/interactions/utils.native.js.map +1 -1
- package/dist/esm/middleware/inner.mjs +5 -3
- package/dist/esm/middleware/inner.mjs.map +1 -1
- package/dist/esm/middleware/inner.native.js +10 -7
- package/dist/esm/middleware/inner.native.js.map +1 -1
- package/package.json +7 -5
- package/src/interactions/useInteractions.ts +61 -59
- package/src/interactions/useListNavigation.ts +7 -2
- package/src/middleware/inner.ts +20 -9
- package/types/interactions/useInteractions.d.ts +3 -3
- package/types/interactions/useInteractions.d.ts.map +1 -1
- package/types/interactions/useListNavigation.d.ts.map +1 -1
- package/types/middleware/inner.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useListNavigation.native.js","names":[],"sources":["esm/interactions/useListNavigation.native.js"],"sourcesContent":["import { useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport { useEvent } from \"@tamagui/use-event\";\nimport { activeElement, enqueueFocus, findNonDisabledListIndex, getMinListIndex, getMaxListIndex, isHTMLElement, isIndexOutOfListBounds, isTypeableCombobox, isVirtualClick, isVirtualPointerEvent, stopEvent } from \"./utils\";\nvar ARROW_UP = \"ArrowUp\";\nvar ARROW_DOWN = \"ArrowDown\";\nvar ARROW_LEFT = \"ArrowLeft\";\nvar ARROW_RIGHT = \"ArrowRight\";\nfunction doSwitch(orientation, vertical, horizontal) {\n switch (orientation) {\n case \"vertical\":\n return vertical;\n case \"horizontal\":\n return horizontal;\n default:\n return vertical || horizontal;\n }\n}\nfunction isMainOrientationKey(key, orientation) {\n var vertical = key === ARROW_UP || key === ARROW_DOWN;\n var horizontal = key === ARROW_LEFT || key === ARROW_RIGHT;\n return doSwitch(orientation, vertical, horizontal);\n}\nfunction isMainOrientationToEndKey(key, orientation, rtl) {\n var vertical = key === ARROW_DOWN;\n var horizontal = rtl ? key === ARROW_LEFT : key === ARROW_RIGHT;\n return doSwitch(orientation, vertical, horizontal) || key === \"Enter\" || key === \" \" || key === \"\";\n}\nfunction isCrossOrientationOpenKey(key, orientation, rtl) {\n var vertical = rtl ? key === ARROW_LEFT : key === ARROW_RIGHT;\n var horizontal = key === ARROW_DOWN;\n return doSwitch(orientation, vertical, horizontal);\n}\nfunction isCrossOrientationCloseKey(key, orientation, rtl) {\n var vertical = rtl ? key === ARROW_RIGHT : key === ARROW_LEFT;\n var horizontal = key === ARROW_UP;\n return doSwitch(orientation, vertical, horizontal);\n}\nfunction useListNavigation(context, props) {\n var { open, onOpenChange, elements } = context;\n var { listRef, activeIndex, onNavigate: unstable_onNavigate = function() {\n }, enabled = true, selectedIndex = null, allowEscape = false, loop = false, nested = false, rtl = false, virtual = false, focusItemOnOpen = \"auto\", focusItemOnHover = true, openOnArrowKeyDown = true, disabledIndices = void 0, orientation = \"vertical\", scrollItemIntoView = true } = props;\n var typeableComboboxReference = isTypeableCombobox(elements.domReference);\n var focusItemOnOpenRef = useRef(focusItemOnOpen);\n var indexRef = useRef(selectedIndex !== null && selectedIndex !== void 0 ? selectedIndex : -1);\n var keyRef = useRef(null);\n var isPointerModalityRef = useRef(true);\n var previousMountedRef = useRef(!!elements.floating);\n var previousOpenRef = useRef(open);\n var forceSyncFocusRef = useRef(false);\n var forceScrollIntoViewRef = useRef(false);\n var disabledIndicesRef = useRef(disabledIndices);\n disabledIndicesRef.current = disabledIndices;\n var latestOpenRef = useRef(open);\n latestOpenRef.current = open;\n var scrollItemIntoViewRef = useRef(scrollItemIntoView);\n scrollItemIntoViewRef.current = scrollItemIntoView;\n var selectedIndexRef = useRef(selectedIndex);\n selectedIndexRef.current = selectedIndex;\n var stableOnNavigate = useEvent(unstable_onNavigate);\n var [activeId, setActiveId] = useState();\n var onNavigate = useEvent(function() {\n stableOnNavigate(indexRef.current === -1 ? null : indexRef.current);\n });\n var previousOnNavigateRef = useRef(onNavigate);\n var focusItem = useEvent(function() {\n function runFocus(item2) {\n if (virtual) {\n setActiveId(item2.id);\n } else {\n enqueueFocus(item2, {\n sync: forceSyncFocusRef.current,\n preventScroll: true\n });\n }\n }\n var initialItem = listRef.current[indexRef.current];\n var forceScrollIntoView = forceScrollIntoViewRef.current;\n if (initialItem) {\n runFocus(initialItem);\n }\n var scheduler = forceSyncFocusRef.current ? function(v) {\n return v();\n } : requestAnimationFrame;\n scheduler(function() {\n var waitedItem = listRef.current[indexRef.current] || initialItem;\n if (!waitedItem) return;\n if (!initialItem) {\n runFocus(waitedItem);\n }\n var scrollIntoViewOptions = scrollItemIntoViewRef.current;\n var shouldScrollIntoView = scrollIntoViewOptions && waitedItem && (forceScrollIntoView || !isPointerModalityRef.current);\n if (shouldScrollIntoView) {\n var _waitedItem_scrollIntoView;\n (_waitedItem_scrollIntoView = waitedItem.scrollIntoView) === null || _waitedItem_scrollIntoView === void 0 ? void 0 : _waitedItem_scrollIntoView.call(waitedItem, typeof scrollIntoViewOptions === \"boolean\" ? {\n block: \"nearest\",\n inline: \"nearest\"\n } : scrollIntoViewOptions);\n }\n });\n });\n useLayoutEffect(function() {\n if (!enabled) return;\n if (open && elements.floating) {\n if (focusItemOnOpenRef.current && selectedIndex != null) {\n forceScrollIntoViewRef.current = true;\n indexRef.current = selectedIndex;\n onNavigate();\n }\n } else if (previousMountedRef.current) {\n indexRef.current = -1;\n previousOnNavigateRef.current();\n }\n }, [\n enabled,\n open,\n elements.floating,\n selectedIndex,\n onNavigate\n ]);\n useLayoutEffect(function() {\n if (!enabled) return;\n if (!open) return;\n if (!elements.floating) return;\n if (activeIndex == null) {\n forceSyncFocusRef.current = false;\n if (selectedIndexRef.current != null) {\n return;\n }\n if (previousMountedRef.current) {\n indexRef.current = -1;\n focusItem();\n }\n if ((!previousOpenRef.current || !previousMountedRef.current) && focusItemOnOpenRef.current && (keyRef.current != null || focusItemOnOpenRef.current === true && keyRef.current == null)) {\n var runs = 0;\n var waitForListPopulated = function() {\n if (listRef.current[0] == null) {\n if (runs < 2) {\n var scheduler = runs ? requestAnimationFrame : queueMicrotask;\n scheduler(waitForListPopulated);\n }\n runs++;\n } else {\n indexRef.current = keyRef.current == null || isMainOrientationToEndKey(keyRef.current, orientation, rtl) || nested ? getMinListIndex(listRef, disabledIndicesRef.current) : getMaxListIndex(listRef, disabledIndicesRef.current);\n keyRef.current = null;\n onNavigate();\n }\n };\n waitForListPopulated();\n }\n } else if (!isIndexOutOfListBounds(listRef, activeIndex)) {\n indexRef.current = activeIndex;\n focusItem();\n forceScrollIntoViewRef.current = false;\n }\n }, [\n enabled,\n open,\n elements.floating,\n activeIndex,\n selectedIndexRef,\n nested,\n listRef,\n orientation,\n rtl,\n onNavigate,\n focusItem,\n disabledIndicesRef\n ]);\n useLayoutEffect(function() {\n previousOnNavigateRef.current = onNavigate;\n previousOpenRef.current = open;\n previousMountedRef.current = !!elements.floating;\n });\n useLayoutEffect(function() {\n if (!open) {\n keyRef.current = null;\n focusItemOnOpenRef.current = focusItemOnOpen;\n }\n }, [\n open,\n focusItemOnOpen\n ]);\n var hasActiveIndex = activeIndex != null;\n var commonOnKeyDown = useEvent(function(event) {\n isPointerModalityRef.current = false;\n forceSyncFocusRef.current = true;\n if (event.which === 229) {\n return;\n }\n if (!latestOpenRef.current && event.currentTarget === elements.floating) {\n return;\n }\n if (nested && isCrossOrientationCloseKey(event.key, orientation, rtl)) {\n stopEvent(event);\n onOpenChange(false, event.nativeEvent, \"list-navigation\");\n if (isHTMLElement(elements.domReference)) {\n elements.domReference.focus();\n }\n return;\n }\n var currentIndex = indexRef.current;\n var minIndex = getMinListIndex(listRef, disabledIndices);\n var maxIndex = getMaxListIndex(listRef, disabledIndices);\n if (!typeableComboboxReference) {\n if (event.key === \"Home\") {\n stopEvent(event);\n indexRef.current = minIndex;\n onNavigate();\n }\n if (event.key === \"End\") {\n stopEvent(event);\n indexRef.current = maxIndex;\n onNavigate();\n }\n }\n if (isMainOrientationKey(event.key, orientation)) {\n stopEvent(event);\n if (open && !virtual && activeElement(event.currentTarget.ownerDocument) === event.currentTarget) {\n indexRef.current = isMainOrientationToEndKey(event.key, orientation, rtl) ? minIndex : maxIndex;\n onNavigate();\n return;\n }\n if (isMainOrientationToEndKey(event.key, orientation, rtl)) {\n if (loop) {\n indexRef.current = currentIndex >= maxIndex ? allowEscape && currentIndex !== listRef.current.length ? -1 : minIndex : findNonDisabledListIndex(listRef, {\n startingIndex: currentIndex,\n disabledIndices\n });\n } else {\n indexRef.current = Math.min(maxIndex, findNonDisabledListIndex(listRef, {\n startingIndex: currentIndex,\n disabledIndices\n }));\n }\n } else {\n if (loop) {\n indexRef.current = currentIndex <= minIndex ? allowEscape && currentIndex !== -1 ? listRef.current.length : maxIndex : findNonDisabledListIndex(listRef, {\n startingIndex: currentIndex,\n decrement: true,\n disabledIndices\n });\n } else {\n indexRef.current = Math.max(minIndex, findNonDisabledListIndex(listRef, {\n startingIndex: currentIndex,\n decrement: true,\n disabledIndices\n }));\n }\n }\n if (isIndexOutOfListBounds(listRef, indexRef.current)) {\n indexRef.current = -1;\n }\n onNavigate();\n }\n });\n var ariaActiveDescendantProp = useMemo(function() {\n return virtual && open && hasActiveIndex && {\n \"aria-activedescendant\": activeId\n };\n }, [\n virtual,\n open,\n hasActiveIndex,\n activeId\n ]);\n var floating = useMemo(function() {\n return {\n \"aria-orientation\": orientation === \"both\" ? void 0 : orientation,\n ...!typeableComboboxReference ? ariaActiveDescendantProp : {},\n onKeyDown: commonOnKeyDown,\n onPointerMove() {\n isPointerModalityRef.current = true;\n }\n };\n }, [\n ariaActiveDescendantProp,\n commonOnKeyDown,\n orientation,\n typeableComboboxReference\n ]);\n var reference = useMemo(function() {\n function checkVirtualMouse(event) {\n if (focusItemOnOpen === \"auto\" && isVirtualClick(event.nativeEvent)) {\n focusItemOnOpenRef.current = true;\n }\n }\n function checkVirtualPointer(event) {\n focusItemOnOpenRef.current = focusItemOnOpen;\n if (focusItemOnOpen === \"auto\" && isVirtualPointerEvent(event.nativeEvent)) {\n focusItemOnOpenRef.current = true;\n }\n }\n return {\n ...ariaActiveDescendantProp,\n onKeyDown(event) {\n isPointerModalityRef.current = false;\n var isArrowKey = event.key.startsWith(\"Arrow\");\n var isCrossOpenKey = isCrossOrientationOpenKey(event.key, orientation, rtl);\n var isMainKey = isMainOrientationKey(event.key, orientation);\n var isNavigationKey = (nested ? isCrossOpenKey : isMainKey) || event.key === \"Enter\" || event.key.trim() === \"\";\n if (virtual && open) {\n return commonOnKeyDown(event);\n }\n if (!open && !openOnArrowKeyDown && isArrowKey) {\n return;\n }\n if (isNavigationKey) {\n keyRef.current = event.key;\n }\n if (nested) {\n if (isCrossOpenKey) {\n stopEvent(event);\n if (open) {\n indexRef.current = getMinListIndex(listRef, disabledIndicesRef.current);\n onNavigate();\n } else {\n onOpenChange(true, event.nativeEvent, \"list-navigation\");\n }\n }\n return;\n }\n if (isMainKey) {\n if (selectedIndex != null) {\n indexRef.current = selectedIndex;\n }\n stopEvent(event);\n if (!open && openOnArrowKeyDown) {\n onOpenChange(true, event.nativeEvent, \"list-navigation\");\n } else {\n commonOnKeyDown(event);\n }\n if (open) {\n onNavigate();\n }\n }\n },\n onFocus() {\n if (open && !virtual) {\n indexRef.current = -1;\n onNavigate();\n }\n },\n onPointerDown: checkVirtualPointer,\n onPointerEnter: checkVirtualPointer,\n onMouseDown: checkVirtualMouse,\n onClick: checkVirtualMouse\n };\n }, [\n ariaActiveDescendantProp,\n commonOnKeyDown,\n disabledIndicesRef,\n focusItemOnOpen,\n listRef,\n nested,\n onNavigate,\n onOpenChange,\n open,\n openOnArrowKeyDown,\n orientation,\n rtl,\n selectedIndex,\n virtual\n ]);\n var item = useMemo(function() {\n function syncCurrentTarget(currentTarget) {\n if (!latestOpenRef.current) return;\n var index = listRef.current.indexOf(currentTarget);\n if (index !== -1 && indexRef.current !== index) {\n indexRef.current = index;\n onNavigate();\n }\n }\n var itemProps = {\n onFocus(param) {\n var { currentTarget } = param;\n forceSyncFocusRef.current = true;\n syncCurrentTarget(currentTarget);\n },\n onClick: function(param) {\n var { currentTarget } = param;\n return currentTarget.focus({\n preventScroll: true\n });\n },\n // safari\n onMouseMove(param) {\n var { currentTarget } = param;\n forceSyncFocusRef.current = true;\n forceScrollIntoViewRef.current = false;\n if (focusItemOnHover) {\n syncCurrentTarget(currentTarget);\n }\n },\n onPointerLeave(param) {\n var { pointerType } = param;\n if (!isPointerModalityRef.current || pointerType === \"touch\") {\n return;\n }\n forceSyncFocusRef.current = true;\n if (!focusItemOnHover) {\n return;\n }\n indexRef.current = -1;\n onNavigate();\n if (!virtual) {\n var _elements_floating;\n (_elements_floating = elements.floating) === null || _elements_floating === void 0 ? void 0 : _elements_floating.focus({\n preventScroll: true\n });\n }\n }\n };\n return itemProps;\n }, [\n latestOpenRef,\n focusItemOnHover,\n listRef,\n onNavigate,\n virtual,\n elements.floating\n ]);\n return useMemo(function() {\n return enabled ? {\n reference,\n floating,\n item\n } : {};\n }, [\n enabled,\n reference,\n floating,\n item\n ]);\n}\nexport {\n useListNavigation\n};\n//# sourceMappingURL=useListNavigation.js.map\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useListNavigation.native.js","names":[],"sources":["esm/interactions/useListNavigation.native.js"],"sourcesContent":["import { useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport { useEvent } from \"@tamagui/use-event\";\nimport { activeElement, enqueueFocus, findNonDisabledListIndex, getMinListIndex, getMaxListIndex, isHTMLElement, isIndexOutOfListBounds, isTypeableCombobox, isVirtualClick, isVirtualPointerEvent, stopEvent } from \"./utils\";\nvar ARROW_UP = \"ArrowUp\";\nvar ARROW_DOWN = \"ArrowDown\";\nvar ARROW_LEFT = \"ArrowLeft\";\nvar ARROW_RIGHT = \"ArrowRight\";\nfunction doSwitch(orientation, vertical, horizontal) {\n switch (orientation) {\n case \"vertical\":\n return vertical;\n case \"horizontal\":\n return horizontal;\n default:\n return vertical || horizontal;\n }\n}\nfunction isMainOrientationKey(key, orientation) {\n var vertical = key === ARROW_UP || key === ARROW_DOWN;\n var horizontal = key === ARROW_LEFT || key === ARROW_RIGHT;\n return doSwitch(orientation, vertical, horizontal);\n}\nfunction isMainOrientationToEndKey(key, orientation, rtl) {\n var vertical = key === ARROW_DOWN;\n var horizontal = rtl ? key === ARROW_LEFT : key === ARROW_RIGHT;\n return doSwitch(orientation, vertical, horizontal) || key === \"Enter\" || key === \" \" || key === \"\";\n}\nfunction isCrossOrientationOpenKey(key, orientation, rtl) {\n var vertical = rtl ? key === ARROW_LEFT : key === ARROW_RIGHT;\n var horizontal = key === ARROW_DOWN;\n return doSwitch(orientation, vertical, horizontal);\n}\nfunction isCrossOrientationCloseKey(key, orientation, rtl) {\n var vertical = rtl ? key === ARROW_RIGHT : key === ARROW_LEFT;\n var horizontal = key === ARROW_UP;\n return doSwitch(orientation, vertical, horizontal);\n}\nfunction useListNavigation(context, props) {\n var { open, onOpenChange, elements } = context;\n var { listRef, activeIndex, onNavigate: unstable_onNavigate = function() {\n }, enabled = true, selectedIndex = null, allowEscape = false, loop = false, nested = false, rtl = false, virtual = false, focusItemOnOpen = \"auto\", focusItemOnHover = true, openOnArrowKeyDown = true, disabledIndices = void 0, orientation = \"vertical\", scrollItemIntoView = true } = props;\n var typeableComboboxReference = isTypeableCombobox(elements.domReference);\n var focusItemOnOpenRef = useRef(focusItemOnOpen);\n var indexRef = useRef(selectedIndex !== null && selectedIndex !== void 0 ? selectedIndex : -1);\n var keyRef = useRef(null);\n var isPointerModalityRef = useRef(true);\n var previousMountedRef = useRef(!!elements.floating);\n var previousOpenRef = useRef(open);\n var forceSyncFocusRef = useRef(false);\n var forceScrollIntoViewRef = useRef(false);\n var disabledIndicesRef = useRef(disabledIndices);\n disabledIndicesRef.current = disabledIndices;\n var latestOpenRef = useRef(open);\n latestOpenRef.current = open;\n var scrollItemIntoViewRef = useRef(scrollItemIntoView);\n scrollItemIntoViewRef.current = scrollItemIntoView;\n var selectedIndexRef = useRef(selectedIndex);\n selectedIndexRef.current = selectedIndex;\n var stableOnNavigate = useEvent(unstable_onNavigate);\n var [activeId, setActiveId] = useState();\n var onNavigate = useEvent(function() {\n stableOnNavigate(indexRef.current === -1 ? null : indexRef.current);\n });\n var previousOnNavigateRef = useRef(onNavigate);\n var focusItem = useEvent(function() {\n function runFocus(item2) {\n if (virtual) {\n setActiveId(item2.id);\n } else {\n enqueueFocus(item2, {\n sync: forceSyncFocusRef.current,\n preventScroll: true\n });\n }\n }\n var initialItem = listRef.current[indexRef.current];\n var forceScrollIntoView = forceScrollIntoViewRef.current;\n if (initialItem) {\n runFocus(initialItem);\n }\n var scheduler = forceSyncFocusRef.current ? function(v) {\n return v();\n } : requestAnimationFrame;\n scheduler(function() {\n var waitedItem = listRef.current[indexRef.current] || initialItem;\n if (!waitedItem) return;\n if (!initialItem) {\n runFocus(waitedItem);\n }\n var scrollIntoViewOptions = scrollItemIntoViewRef.current;\n var shouldScrollIntoView = scrollIntoViewOptions && waitedItem && (forceScrollIntoView || !isPointerModalityRef.current);\n if (shouldScrollIntoView) {\n var _waitedItem_scrollIntoView;\n (_waitedItem_scrollIntoView = waitedItem.scrollIntoView) === null || _waitedItem_scrollIntoView === void 0 ? void 0 : _waitedItem_scrollIntoView.call(waitedItem, typeof scrollIntoViewOptions === \"boolean\" ? {\n block: \"nearest\",\n inline: \"nearest\"\n } : scrollIntoViewOptions);\n }\n });\n });\n useLayoutEffect(function() {\n if (!enabled) return;\n if (open && elements.floating) {\n if (focusItemOnOpenRef.current && selectedIndex != null) {\n forceScrollIntoViewRef.current = true;\n indexRef.current = selectedIndex;\n onNavigate();\n }\n } else if (previousMountedRef.current) {\n indexRef.current = -1;\n previousOnNavigateRef.current();\n }\n }, [\n enabled,\n open,\n elements.floating,\n selectedIndex,\n onNavigate\n ]);\n useLayoutEffect(function() {\n if (!enabled) return;\n if (!open) return;\n if (!elements.floating) return;\n if (activeIndex == null) {\n forceSyncFocusRef.current = false;\n if (selectedIndexRef.current != null) {\n return;\n }\n if (previousMountedRef.current) {\n indexRef.current = -1;\n focusItem();\n }\n if ((!previousOpenRef.current || !previousMountedRef.current) && focusItemOnOpenRef.current && (keyRef.current != null || focusItemOnOpenRef.current === true && keyRef.current == null)) {\n var runs = 0;\n var waitForListPopulated = function() {\n if (listRef.current[0] == null) {\n if (runs < 2) {\n var scheduler = runs ? requestAnimationFrame : queueMicrotask;\n scheduler(waitForListPopulated);\n }\n runs++;\n } else {\n indexRef.current = keyRef.current == null || isMainOrientationToEndKey(keyRef.current, orientation, rtl) || nested ? getMinListIndex(listRef, disabledIndicesRef.current) : getMaxListIndex(listRef, disabledIndicesRef.current);\n keyRef.current = null;\n onNavigate();\n }\n };\n waitForListPopulated();\n }\n } else if (!isIndexOutOfListBounds(listRef, activeIndex)) {\n indexRef.current = activeIndex;\n focusItem();\n forceScrollIntoViewRef.current = false;\n }\n }, [\n enabled,\n open,\n elements.floating,\n activeIndex,\n selectedIndexRef,\n nested,\n listRef,\n orientation,\n rtl,\n onNavigate,\n focusItem,\n disabledIndicesRef\n ]);\n useLayoutEffect(function() {\n previousOnNavigateRef.current = onNavigate;\n previousOpenRef.current = open;\n previousMountedRef.current = !!elements.floating;\n });\n useLayoutEffect(function() {\n if (!open) {\n keyRef.current = null;\n focusItemOnOpenRef.current = focusItemOnOpen;\n }\n }, [\n open,\n focusItemOnOpen\n ]);\n var hasActiveIndex = activeIndex != null;\n var commonOnKeyDown = useEvent(function(event) {\n isPointerModalityRef.current = false;\n forceSyncFocusRef.current = true;\n if (event.which === 229) {\n return;\n }\n if (!latestOpenRef.current && event.currentTarget === elements.floating) {\n return;\n }\n if (nested && isCrossOrientationCloseKey(event.key, orientation, rtl)) {\n stopEvent(event);\n onOpenChange(false, event.nativeEvent, \"list-navigation\");\n if (isHTMLElement(elements.domReference)) {\n elements.domReference.focus();\n }\n return;\n }\n var currentIndex = indexRef.current;\n var minIndex = getMinListIndex(listRef, disabledIndices);\n var maxIndex = getMaxListIndex(listRef, disabledIndices);\n if (!typeableComboboxReference) {\n if (event.key === \"Home\") {\n stopEvent(event);\n indexRef.current = minIndex;\n onNavigate();\n }\n if (event.key === \"End\") {\n stopEvent(event);\n indexRef.current = maxIndex;\n onNavigate();\n }\n }\n if (isMainOrientationKey(event.key, orientation)) {\n stopEvent(event);\n if (open && !virtual && activeElement(event.currentTarget.ownerDocument) === event.currentTarget) {\n indexRef.current = isMainOrientationToEndKey(event.key, orientation, rtl) ? minIndex : maxIndex;\n onNavigate();\n return;\n }\n if (isMainOrientationToEndKey(event.key, orientation, rtl)) {\n if (loop) {\n indexRef.current = currentIndex >= maxIndex ? allowEscape && currentIndex !== listRef.current.length ? -1 : minIndex : findNonDisabledListIndex(listRef, {\n startingIndex: currentIndex,\n disabledIndices\n });\n } else {\n indexRef.current = Math.min(maxIndex, findNonDisabledListIndex(listRef, {\n startingIndex: currentIndex,\n disabledIndices\n }));\n }\n } else {\n if (loop) {\n indexRef.current = currentIndex <= minIndex ? allowEscape && currentIndex !== -1 ? listRef.current.length : maxIndex : findNonDisabledListIndex(listRef, {\n startingIndex: currentIndex,\n decrement: true,\n disabledIndices\n });\n } else {\n indexRef.current = Math.max(minIndex, findNonDisabledListIndex(listRef, {\n startingIndex: currentIndex,\n decrement: true,\n disabledIndices\n }));\n }\n }\n if (isIndexOutOfListBounds(listRef, indexRef.current)) {\n indexRef.current = -1;\n }\n onNavigate();\n }\n });\n var ariaActiveDescendantProp = useMemo(function() {\n return virtual && open && hasActiveIndex && {\n \"aria-activedescendant\": activeId\n };\n }, [\n virtual,\n open,\n hasActiveIndex,\n activeId\n ]);\n var floating = useMemo(function() {\n return {\n \"aria-orientation\": orientation === \"both\" ? void 0 : orientation,\n ...!typeableComboboxReference ? ariaActiveDescendantProp : {},\n onKeyDown: commonOnKeyDown,\n onPointerMove() {\n isPointerModalityRef.current = true;\n }\n };\n }, [\n ariaActiveDescendantProp,\n commonOnKeyDown,\n orientation,\n typeableComboboxReference\n ]);\n var reference = useMemo(function() {\n function checkVirtualMouse(event) {\n if (focusItemOnOpen === \"auto\" && isVirtualClick(event.nativeEvent)) {\n focusItemOnOpenRef.current = true;\n }\n }\n function checkVirtualPointer(event) {\n focusItemOnOpenRef.current = focusItemOnOpen;\n if (focusItemOnOpen === \"auto\" && isVirtualPointerEvent(event.nativeEvent)) {\n focusItemOnOpenRef.current = true;\n }\n }\n return {\n ...ariaActiveDescendantProp,\n onKeyDown(event) {\n isPointerModalityRef.current = false;\n var isArrowKey = event.key.startsWith(\"Arrow\");\n var isCrossOpenKey = isCrossOrientationOpenKey(event.key, orientation, rtl);\n var isMainKey = isMainOrientationKey(event.key, orientation);\n var isNavigationKey = (nested ? isCrossOpenKey : isMainKey) || event.key === \"Enter\" || event.key.trim() === \"\";\n if (virtual && open) {\n return commonOnKeyDown(event);\n }\n if (!open && !openOnArrowKeyDown && isArrowKey) {\n return;\n }\n if (isNavigationKey) {\n keyRef.current = event.key;\n }\n if (nested) {\n if (isCrossOpenKey) {\n stopEvent(event);\n if (open) {\n indexRef.current = getMinListIndex(listRef, disabledIndicesRef.current);\n onNavigate();\n } else {\n onOpenChange(true, event.nativeEvent, \"list-navigation\");\n }\n }\n return;\n }\n if (isMainKey) {\n if (selectedIndex != null) {\n indexRef.current = selectedIndex;\n }\n stopEvent(event);\n if (!open && openOnArrowKeyDown) {\n onOpenChange(true, event.nativeEvent, \"list-navigation\");\n } else {\n commonOnKeyDown(event);\n }\n if (open) {\n onNavigate();\n }\n }\n },\n onFocus() {\n if (open && !virtual) {\n indexRef.current = -1;\n onNavigate();\n }\n },\n onPointerDown: checkVirtualPointer,\n onPointerEnter: checkVirtualPointer,\n onMouseDown: checkVirtualMouse,\n onClick: checkVirtualMouse\n };\n }, [\n ariaActiveDescendantProp,\n commonOnKeyDown,\n disabledIndicesRef,\n focusItemOnOpen,\n listRef,\n nested,\n onNavigate,\n onOpenChange,\n open,\n openOnArrowKeyDown,\n orientation,\n rtl,\n selectedIndex,\n virtual\n ]);\n var floatingRef = useRef(elements.floating);\n floatingRef.current = elements.floating;\n var item = useMemo(function() {\n function syncCurrentTarget(currentTarget) {\n if (!latestOpenRef.current) return;\n var index = listRef.current.indexOf(currentTarget);\n if (index !== -1 && indexRef.current !== index) {\n indexRef.current = index;\n onNavigate();\n }\n }\n var itemProps = {\n onFocus(param) {\n var { currentTarget } = param;\n forceSyncFocusRef.current = true;\n syncCurrentTarget(currentTarget);\n },\n onClick: function(param) {\n var { currentTarget } = param;\n return currentTarget.focus({\n preventScroll: true\n });\n },\n // safari\n onMouseMove(param) {\n var { currentTarget } = param;\n forceSyncFocusRef.current = true;\n forceScrollIntoViewRef.current = false;\n if (focusItemOnHover) {\n syncCurrentTarget(currentTarget);\n }\n },\n onPointerLeave(param) {\n var { pointerType } = param;\n if (!isPointerModalityRef.current || pointerType === \"touch\") {\n return;\n }\n forceSyncFocusRef.current = true;\n if (!focusItemOnHover) {\n return;\n }\n indexRef.current = -1;\n onNavigate();\n if (!virtual) {\n var _floatingRef_current;\n (_floatingRef_current = floatingRef.current) === null || _floatingRef_current === void 0 ? void 0 : _floatingRef_current.focus({\n preventScroll: true\n });\n }\n }\n };\n return itemProps;\n }, [\n latestOpenRef,\n focusItemOnHover,\n listRef,\n onNavigate,\n virtual\n ]);\n return useMemo(function() {\n return enabled ? {\n reference,\n floating,\n item\n } : {};\n }, [\n enabled,\n reference,\n floating,\n item\n ]);\n}\nexport {\n useListNavigation\n};\n//# sourceMappingURL=useListNavigation.js.map\n"],"mappings":"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"}
|
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
function _instanceof(left, right) {
|
|
2
|
-
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
3
|
-
return !!right[Symbol.hasInstance](left);
|
|
4
|
-
} else {
|
|
5
|
-
return left instanceof right;
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
1
|
function getDocument(node) {
|
|
9
2
|
return (node === null || node === void 0 ? void 0 : node.ownerDocument) || document;
|
|
10
3
|
}
|
|
@@ -23,7 +16,7 @@ function contains(parent, child) {
|
|
|
23
16
|
return false;
|
|
24
17
|
}
|
|
25
18
|
function isShadowRoot(node) {
|
|
26
|
-
return
|
|
19
|
+
return node instanceof ShadowRoot;
|
|
27
20
|
}
|
|
28
21
|
function getTarget(event) {
|
|
29
22
|
if ("composedPath" in event) {
|
|
@@ -40,10 +33,10 @@ function activeElement(doc) {
|
|
|
40
33
|
return el;
|
|
41
34
|
}
|
|
42
35
|
function isHTMLElement(value) {
|
|
43
|
-
return
|
|
36
|
+
return value instanceof HTMLElement;
|
|
44
37
|
}
|
|
45
38
|
function isElement(value) {
|
|
46
|
-
return
|
|
39
|
+
return value instanceof Element;
|
|
47
40
|
}
|
|
48
41
|
var TYPEABLE_SELECTOR = "input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])";
|
|
49
42
|
function isTypeableElement(element) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.native.js","names":[],"sources":["esm/interactions/utils.native.js"],"sourcesContent":["function _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else {\n return left instanceof right;\n }\n}\nfunction getDocument(node) {\n return (node === null || node === void 0 ? void 0 : node.ownerDocument) || document;\n}\nfunction contains(parent, child) {\n var _child_getRootNode;\n if (!parent || !child) return false;\n var rootNode = (_child_getRootNode = child.getRootNode) === null || _child_getRootNode === void 0 ? void 0 : _child_getRootNode.call(child);\n if (parent.contains(child)) return true;\n if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n while (next) {\n if (parent === next) return true;\n next = next.parentNode || next.host;\n }\n }\n return false;\n}\nfunction isShadowRoot(node) {\n return _instanceof(node, ShadowRoot);\n}\nfunction getTarget(event) {\n if (\"composedPath\" in event) {\n return event.composedPath()[0];\n }\n return event.target;\n}\nfunction activeElement(doc) {\n var _el_shadowRoot;\n var el = doc.activeElement;\n while ((el === null || el === void 0 ? void 0 : (_el_shadowRoot = el.shadowRoot) === null || _el_shadowRoot === void 0 ? void 0 : _el_shadowRoot.activeElement) != null) {\n el = el.shadowRoot.activeElement;\n }\n return el;\n}\nfunction isHTMLElement(value) {\n return _instanceof(value, HTMLElement);\n}\nfunction isElement(value) {\n return _instanceof(value, Element);\n}\nvar TYPEABLE_SELECTOR = \"input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])\";\nfunction isTypeableElement(element) {\n return isHTMLElement(element) && element.matches(TYPEABLE_SELECTOR);\n}\nfunction isTypeableCombobox(element) {\n if (!element) return false;\n return element.getAttribute(\"role\") === \"combobox\" && isTypeableElement(element);\n}\nfunction getPlatform() {\n var uaData = navigator.userAgentData;\n if (uaData === null || uaData === void 0 ? void 0 : uaData.platform) return uaData.platform;\n return navigator.platform;\n}\nfunction getUserAgent() {\n var uaData = navigator.userAgentData;\n if (uaData && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function(param) {\n var { brand, version } = param;\n return `${brand}/${version}`;\n }).join(\" \");\n }\n return navigator.userAgent;\n}\nfunction isSafari() {\n return /apple/i.test(navigator.vendor);\n}\nfunction isMac() {\n return getPlatform().toLowerCase().startsWith(\"mac\") && !navigator.maxTouchPoints;\n}\nfunction isJSDOM() {\n return getUserAgent().includes(\"jsdom/\");\n}\nfunction matchesFocusVisible(element) {\n if (!element || isJSDOM()) return true;\n try {\n return element.matches(\":focus-visible\");\n } catch (e) {\n return true;\n }\n}\nfunction isMouseLikePointerType(pointerType, strict) {\n var values = [\n \"mouse\",\n \"pen\"\n ];\n if (!strict) {\n values.push(\"\", void 0);\n }\n return values.includes(pointerType);\n}\nfunction clearTimeoutIfSet(timeoutRef) {\n if (timeoutRef.current !== -1) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = -1;\n }\n}\nfunction stopEvent(event) {\n event.preventDefault();\n event.stopPropagation();\n}\nfunction isVirtualClick(event) {\n if (event.mozInputSource === 0 && event.isTrusted) return true;\n if (isAndroid() && event.pointerType) {\n return event.type === \"click\" && event.buttons === 1;\n }\n return event.detail === 0 && !event.pointerType;\n}\nfunction isVirtualPointerEvent(event) {\n if (isJSDOM()) return false;\n return !isAndroid() && event.width === 0 && event.height === 0 || isAndroid() && event.width === 1 && event.height === 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === \"mouse\" || event.width < 1 && event.height < 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === \"touch\";\n}\nfunction isAndroid() {\n var re = /android/i;\n return re.test(getPlatform()) || re.test(getUserAgent());\n}\nvar rafId = 0;\nfunction enqueueFocus(el) {\n var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n var { preventScroll = false, cancelPrevious = true, sync = false } = options;\n cancelPrevious && cancelAnimationFrame(rafId);\n var exec = function() {\n return el === null || el === void 0 ? void 0 : el.focus({\n preventScroll\n });\n };\n if (sync) {\n exec();\n } else {\n rafId = requestAnimationFrame(exec);\n }\n}\nfunction isListIndexDisabled(listRef, index, disabledIndices) {\n if (typeof disabledIndices === \"function\") return disabledIndices(index);\n if (disabledIndices) return disabledIndices.includes(index);\n var element = listRef.current[index];\n return element == null || element.hasAttribute(\"disabled\") || element.getAttribute(\"aria-disabled\") === \"true\";\n}\nfunction findNonDisabledListIndex(listRef) {\n var { startingIndex = -1, decrement = false, disabledIndices, amount = 1 } = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n var index = startingIndex;\n do {\n index += decrement ? -amount : amount;\n } while (index >= 0 && index <= listRef.current.length - 1 && isListIndexDisabled(listRef, index, disabledIndices));\n return index;\n}\nfunction getMinListIndex(listRef, disabledIndices) {\n return findNonDisabledListIndex(listRef, {\n disabledIndices\n });\n}\nfunction getMaxListIndex(listRef, disabledIndices) {\n return findNonDisabledListIndex(listRef, {\n decrement: true,\n startingIndex: listRef.current.length,\n disabledIndices\n });\n}\nfunction isIndexOutOfListBounds(listRef, index) {\n return index < 0 || index >= listRef.current.length;\n}\nexport {\n activeElement,\n clearTimeoutIfSet,\n contains,\n enqueueFocus,\n findNonDisabledListIndex,\n getDocument,\n getMaxListIndex,\n getMinListIndex,\n getTarget,\n isElement,\n isHTMLElement,\n isIndexOutOfListBounds,\n isListIndexDisabled,\n isMac,\n isMouseLikePointerType,\n isSafari,\n isTypeableCombobox,\n isTypeableElement,\n isVirtualClick,\n isVirtualPointerEvent,\n matchesFocusVisible,\n stopEvent\n};\n//# sourceMappingURL=utils.js.map\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.native.js","names":[],"sources":["esm/interactions/utils.native.js"],"sourcesContent":["function getDocument(node) {\n return (node === null || node === void 0 ? void 0 : node.ownerDocument) || document;\n}\nfunction contains(parent, child) {\n var _child_getRootNode;\n if (!parent || !child) return false;\n var rootNode = (_child_getRootNode = child.getRootNode) === null || _child_getRootNode === void 0 ? void 0 : _child_getRootNode.call(child);\n if (parent.contains(child)) return true;\n if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n while (next) {\n if (parent === next) return true;\n next = next.parentNode || next.host;\n }\n }\n return false;\n}\nfunction isShadowRoot(node) {\n return node instanceof ShadowRoot;\n}\nfunction getTarget(event) {\n if (\"composedPath\" in event) {\n return event.composedPath()[0];\n }\n return event.target;\n}\nfunction activeElement(doc) {\n var _el_shadowRoot;\n var el = doc.activeElement;\n while ((el === null || el === void 0 ? void 0 : (_el_shadowRoot = el.shadowRoot) === null || _el_shadowRoot === void 0 ? void 0 : _el_shadowRoot.activeElement) != null) {\n el = el.shadowRoot.activeElement;\n }\n return el;\n}\nfunction isHTMLElement(value) {\n return value instanceof HTMLElement;\n}\nfunction isElement(value) {\n return value instanceof Element;\n}\nvar TYPEABLE_SELECTOR = \"input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])\";\nfunction isTypeableElement(element) {\n return isHTMLElement(element) && element.matches(TYPEABLE_SELECTOR);\n}\nfunction isTypeableCombobox(element) {\n if (!element) return false;\n return element.getAttribute(\"role\") === \"combobox\" && isTypeableElement(element);\n}\nfunction getPlatform() {\n var uaData = navigator.userAgentData;\n if (uaData === null || uaData === void 0 ? void 0 : uaData.platform) return uaData.platform;\n return navigator.platform;\n}\nfunction getUserAgent() {\n var uaData = navigator.userAgentData;\n if (uaData && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function(param) {\n var { brand, version } = param;\n return `${brand}/${version}`;\n }).join(\" \");\n }\n return navigator.userAgent;\n}\nfunction isSafari() {\n return /apple/i.test(navigator.vendor);\n}\nfunction isMac() {\n return getPlatform().toLowerCase().startsWith(\"mac\") && !navigator.maxTouchPoints;\n}\nfunction isJSDOM() {\n return getUserAgent().includes(\"jsdom/\");\n}\nfunction matchesFocusVisible(element) {\n if (!element || isJSDOM()) return true;\n try {\n return element.matches(\":focus-visible\");\n } catch (e) {\n return true;\n }\n}\nfunction isMouseLikePointerType(pointerType, strict) {\n var values = [\n \"mouse\",\n \"pen\"\n ];\n if (!strict) {\n values.push(\"\", void 0);\n }\n return values.includes(pointerType);\n}\nfunction clearTimeoutIfSet(timeoutRef) {\n if (timeoutRef.current !== -1) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = -1;\n }\n}\nfunction stopEvent(event) {\n event.preventDefault();\n event.stopPropagation();\n}\nfunction isVirtualClick(event) {\n if (event.mozInputSource === 0 && event.isTrusted) return true;\n if (isAndroid() && event.pointerType) {\n return event.type === \"click\" && event.buttons === 1;\n }\n return event.detail === 0 && !event.pointerType;\n}\nfunction isVirtualPointerEvent(event) {\n if (isJSDOM()) return false;\n return !isAndroid() && event.width === 0 && event.height === 0 || isAndroid() && event.width === 1 && event.height === 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === \"mouse\" || event.width < 1 && event.height < 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === \"touch\";\n}\nfunction isAndroid() {\n var re = /android/i;\n return re.test(getPlatform()) || re.test(getUserAgent());\n}\nvar rafId = 0;\nfunction enqueueFocus(el) {\n var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n var { preventScroll = false, cancelPrevious = true, sync = false } = options;\n cancelPrevious && cancelAnimationFrame(rafId);\n var exec = function() {\n return el === null || el === void 0 ? void 0 : el.focus({\n preventScroll\n });\n };\n if (sync) {\n exec();\n } else {\n rafId = requestAnimationFrame(exec);\n }\n}\nfunction isListIndexDisabled(listRef, index, disabledIndices) {\n if (typeof disabledIndices === \"function\") return disabledIndices(index);\n if (disabledIndices) return disabledIndices.includes(index);\n var element = listRef.current[index];\n return element == null || element.hasAttribute(\"disabled\") || element.getAttribute(\"aria-disabled\") === \"true\";\n}\nfunction findNonDisabledListIndex(listRef) {\n var { startingIndex = -1, decrement = false, disabledIndices, amount = 1 } = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n var index = startingIndex;\n do {\n index += decrement ? -amount : amount;\n } while (index >= 0 && index <= listRef.current.length - 1 && isListIndexDisabled(listRef, index, disabledIndices));\n return index;\n}\nfunction getMinListIndex(listRef, disabledIndices) {\n return findNonDisabledListIndex(listRef, {\n disabledIndices\n });\n}\nfunction getMaxListIndex(listRef, disabledIndices) {\n return findNonDisabledListIndex(listRef, {\n decrement: true,\n startingIndex: listRef.current.length,\n disabledIndices\n });\n}\nfunction isIndexOutOfListBounds(listRef, index) {\n return index < 0 || index >= listRef.current.length;\n}\nexport {\n activeElement,\n clearTimeoutIfSet,\n contains,\n enqueueFocus,\n findNonDisabledListIndex,\n getDocument,\n getMaxListIndex,\n getMinListIndex,\n getTarget,\n isElement,\n isHTMLElement,\n isIndexOutOfListBounds,\n isListIndexDisabled,\n isMac,\n isMouseLikePointerType,\n isSafari,\n isTypeableCombobox,\n isTypeableElement,\n isVirtualClick,\n isVirtualPointerEvent,\n matchesFocusVisible,\n stopEvent\n};\n//# sourceMappingURL=utils.js.map\n"],"mappings":"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"}
|
|
@@ -40,12 +40,14 @@ const inner = (props) => ({
|
|
|
40
40
|
elementContext: "reference"
|
|
41
41
|
});
|
|
42
42
|
const diffY = Math.max(0, overflow.top);
|
|
43
|
-
const nextY = nextArgs.y + diffY;
|
|
44
43
|
const isScrollable = scrollEl.scrollHeight > scrollEl.clientHeight;
|
|
45
44
|
const rounder = isScrollable ? (v) => v : Math.round;
|
|
46
|
-
const
|
|
45
|
+
const fullHeight = scrollEl.scrollHeight + (floatingIsBordered && floatingIsScrollEl || scrollElIsBordered ? clientTop * 2 : 0);
|
|
46
|
+
const minimumHeight = item.offsetHeight * Math.min(minItemsVisible, listRef.current?.length ?? 0);
|
|
47
|
+
const maxHeight = rounder(Math.max(0, Math.min(fullHeight, fullHeight - overflow.top - overflow.bottom, Math.max(minimumHeight, fullHeight - diffY - Math.max(0, overflow.bottom)))));
|
|
48
|
+
const nextY = Math.min(nextArgs.y + diffY, nextArgs.y + fullHeight - overflow.bottom - maxHeight);
|
|
47
49
|
scrollEl.style.maxHeight = `${maxHeight}px`;
|
|
48
|
-
scrollEl.scrollTop =
|
|
50
|
+
scrollEl.scrollTop = Math.max(0, nextY - nextArgs.y);
|
|
49
51
|
if (onFallbackChange) {
|
|
50
52
|
const shouldFallback = scrollEl.offsetHeight < item.offsetHeight * Math.min(minItemsVisible, listRef.current?.length ?? 0) - 1 || refOverflow.top >= -referenceOverflowThreshold || refOverflow.bottom >= -referenceOverflowThreshold;
|
|
51
53
|
ReactDOM.flushSync(() => onFallbackChange(shouldFallback));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inner.js","names":[],"sources":["esm/middleware/inner.js"],"sourcesContent":["import * as ReactDOM from \"react-dom\";\nimport { detectOverflow, offset } from \"@floating-ui/react-dom\";\nfunction getArgsWithCustomFloatingHeight(state, height) {\n return {\n ...state,\n rects: {\n ...state.rects,\n floating: {\n ...state.rects.floating,\n height\n }\n }\n };\n}\nconst inner = (props) => ({\n name: \"inner\",\n options: props,\n async fn(state) {\n const {\n listRef,\n overflowRef,\n onFallbackChange,\n offset: innerOffset = 0,\n index = 0,\n minItemsVisible = 4,\n referenceOverflowThreshold = 0,\n scrollRef,\n padding = 0\n } = props;\n const {\n rects,\n elements: { floating }\n } = state;\n const item = listRef.current?.[index ?? 0];\n const scrollEl = scrollRef?.current || floating;\n const clientTop = floating.clientTop || scrollEl.clientTop;\n const floatingIsBordered = floating.clientTop !== 0;\n const scrollElIsBordered = scrollEl.clientTop !== 0;\n const floatingIsScrollEl = floating === scrollEl;\n if (!item || index == null) {\n onFallbackChange?.(true);\n return {};\n }\n const nextArgs = {\n ...state,\n ...await offset(\n -item.offsetTop - floating.clientTop - rects.reference.height / 2 - item.offsetHeight / 2 - innerOffset\n ).fn(state)\n };\n const detectOverflowOptions = { padding };\n const overflow = await detectOverflow(\n getArgsWithCustomFloatingHeight(\n nextArgs,\n scrollEl.scrollHeight + clientTop + floating.clientTop\n ),\n detectOverflowOptions\n );\n const refOverflow = await detectOverflow(nextArgs, {\n ...detectOverflowOptions,\n elementContext: \"reference\"\n });\n const diffY = Math.max(0, overflow.top);\n const
|
|
1
|
+
{"version":3,"file":"inner.js","names":[],"sources":["esm/middleware/inner.js"],"sourcesContent":["import * as ReactDOM from \"react-dom\";\nimport { detectOverflow, offset } from \"@floating-ui/react-dom\";\nfunction getArgsWithCustomFloatingHeight(state, height) {\n return {\n ...state,\n rects: {\n ...state.rects,\n floating: {\n ...state.rects.floating,\n height\n }\n }\n };\n}\nconst inner = (props) => ({\n name: \"inner\",\n options: props,\n async fn(state) {\n const {\n listRef,\n overflowRef,\n onFallbackChange,\n offset: innerOffset = 0,\n index = 0,\n minItemsVisible = 4,\n referenceOverflowThreshold = 0,\n scrollRef,\n padding = 0\n } = props;\n const {\n rects,\n elements: { floating }\n } = state;\n const item = listRef.current?.[index ?? 0];\n const scrollEl = scrollRef?.current || floating;\n const clientTop = floating.clientTop || scrollEl.clientTop;\n const floatingIsBordered = floating.clientTop !== 0;\n const scrollElIsBordered = scrollEl.clientTop !== 0;\n const floatingIsScrollEl = floating === scrollEl;\n if (!item || index == null) {\n onFallbackChange?.(true);\n return {};\n }\n const nextArgs = {\n ...state,\n ...await offset(\n -item.offsetTop - floating.clientTop - rects.reference.height / 2 - item.offsetHeight / 2 - innerOffset\n ).fn(state)\n };\n const detectOverflowOptions = { padding };\n const overflow = await detectOverflow(\n getArgsWithCustomFloatingHeight(\n nextArgs,\n scrollEl.scrollHeight + clientTop + floating.clientTop\n ),\n detectOverflowOptions\n );\n const refOverflow = await detectOverflow(nextArgs, {\n ...detectOverflowOptions,\n elementContext: \"reference\"\n });\n const diffY = Math.max(0, overflow.top);\n const isScrollable = scrollEl.scrollHeight > scrollEl.clientHeight;\n const rounder = isScrollable ? (v) => v : Math.round;\n const fullHeight = scrollEl.scrollHeight + (floatingIsBordered && floatingIsScrollEl || scrollElIsBordered ? clientTop * 2 : 0);\n const minimumHeight = item.offsetHeight * Math.min(minItemsVisible, listRef.current?.length ?? 0);\n const maxHeight = rounder(\n Math.max(\n 0,\n Math.min(\n fullHeight,\n fullHeight - overflow.top - overflow.bottom,\n Math.max(minimumHeight, fullHeight - diffY - Math.max(0, overflow.bottom))\n )\n )\n );\n const nextY = Math.min(\n nextArgs.y + diffY,\n nextArgs.y + fullHeight - overflow.bottom - maxHeight\n );\n scrollEl.style.maxHeight = `${maxHeight}px`;\n scrollEl.scrollTop = Math.max(0, nextY - nextArgs.y);\n if (onFallbackChange) {\n const shouldFallback = scrollEl.offsetHeight < item.offsetHeight * Math.min(minItemsVisible, listRef.current?.length ?? 0) - 1 || refOverflow.top >= -referenceOverflowThreshold || refOverflow.bottom >= -referenceOverflowThreshold;\n ReactDOM.flushSync(() => onFallbackChange(shouldFallback));\n }\n if (overflowRef) {\n ;\n overflowRef.current = await detectOverflow(\n getArgsWithCustomFloatingHeight(\n { ...nextArgs, y: nextY },\n scrollEl.offsetHeight + clientTop + floating.clientTop\n ),\n detectOverflowOptions\n );\n }\n return {\n y: nextY\n };\n }\n});\nexport {\n inner\n};\n//# sourceMappingURL=inner.js.map\n"],"mappings":";;;;AAEA,SAAS,gCAAgC,OAAO,QAAQ;CACtD,OAAO;EACL,GAAG;EACH,OAAO;GACL,GAAG,MAAM;GACT,UAAU;IACR,GAAG,MAAM,MAAM;IACf;GACF;EACF;CACF;AACF;AACA,MAAM,SAAS,WAAW;CACxB,MAAM;CACN,SAAS;CACT,MAAM,GAAG,OAAO;EACd,MAAM,EACJ,SACA,aACA,kBACA,QAAQ,cAAc,GACtB,QAAQ,GACR,kBAAkB,GAClB,6BAA6B,GAC7B,WACA,UAAU,MACR;EACJ,MAAM,EACJ,OACA,UAAU,EAAE,eACV;EACJ,MAAM,OAAO,QAAQ,UAAU,SAAS;EACxC,MAAM,WAAW,WAAW,WAAW;EACvC,MAAM,YAAY,SAAS,aAAa,SAAS;EACjD,MAAM,qBAAqB,SAAS,cAAc;EAClD,MAAM,qBAAqB,SAAS,cAAc;EAClD,MAAM,qBAAqB,aAAa;EACxC,IAAI,CAAC,QAAQ,SAAS,MAAM;GAC1B,mBAAmB,IAAI;GACvB,OAAO,CAAC;EACV;EACA,MAAM,WAAW;GACf,GAAG;GACH,GAAG,MAAM,OACP,CAAC,KAAK,YAAY,SAAS,YAAY,MAAM,UAAU,SAAS,IAAI,KAAK,eAAe,IAAI,WAC9F,CAAC,CAAC,GAAG,KAAK;EACZ;EACA,MAAM,wBAAwB,EAAE,QAAQ;EACxC,MAAM,WAAW,MAAM,eACrB,gCACE,UACA,SAAS,eAAe,YAAY,SAAS,SAC/C,GACA,qBACF;EACA,MAAM,cAAc,MAAM,eAAe,UAAU;GACjD,GAAG;GACH,gBAAgB;EAClB,CAAC;EACD,MAAM,QAAQ,KAAK,IAAI,GAAG,SAAS,GAAG;EACtC,MAAM,eAAe,SAAS,eAAe,SAAS;EACtD,MAAM,UAAU,gBAAgB,MAAM,IAAI,KAAK;EAC/C,MAAM,aAAa,SAAS,gBAAgB,sBAAsB,sBAAsB,qBAAqB,YAAY,IAAI;EAC7H,MAAM,gBAAgB,KAAK,eAAe,KAAK,IAAI,iBAAiB,QAAQ,SAAS,UAAU,CAAC;EAChG,MAAM,YAAY,QAChB,KAAK,IACH,GACA,KAAK,IACH,YACA,aAAa,SAAS,MAAM,SAAS,QACrC,KAAK,IAAI,eAAe,aAAa,QAAQ,KAAK,IAAI,GAAG,SAAS,MAAM,CAAC,CAC3E,CACF,CACF;EACA,MAAM,QAAQ,KAAK,IACjB,SAAS,IAAI,OACb,SAAS,IAAI,aAAa,SAAS,SAAS,SAC9C;EACA,SAAS,MAAM,YAAY,GAAG,UAAU;EACxC,SAAS,YAAY,KAAK,IAAI,GAAG,QAAQ,SAAS,CAAC;EACnD,IAAI,kBAAkB;GACpB,MAAM,iBAAiB,SAAS,eAAe,KAAK,eAAe,KAAK,IAAI,iBAAiB,QAAQ,SAAS,UAAU,CAAC,IAAI,KAAK,YAAY,OAAO,CAAC,8BAA8B,YAAY,UAAU,CAAC;GAC3M,SAAS,gBAAgB,iBAAiB,cAAc,CAAC;EAC3D;EACA,IAAI,aAAa;GACf;GACA,YAAY,UAAU,MAAM,eAC1B,gCACE;IAAE,GAAG;IAAU,GAAG;GAAM,GACxB,SAAS,eAAe,YAAY,SAAS,SAC/C,GACA,qBACF;EACF;EACA,OAAO,EACL,GAAG,MACL;CACF;AACF"}
|
|
@@ -18,7 +18,7 @@ var inner = function(props) {
|
|
|
18
18
|
name: "inner",
|
|
19
19
|
options: props,
|
|
20
20
|
async fn(state) {
|
|
21
|
-
var _listRef_current;
|
|
21
|
+
var _listRef_current, _listRef_current1;
|
|
22
22
|
var { listRef, overflowRef, onFallbackChange, offset: innerOffset = 0, index = 0, minItemsVisible = 4, referenceOverflowThreshold = 0, scrollRef, padding = 0 } = props;
|
|
23
23
|
var { rects, elements: { floating } } = state;
|
|
24
24
|
var item = (_listRef_current = listRef.current) === null || _listRef_current === void 0 ? void 0 : _listRef_current[index !== null && index !== void 0 ? index : 0];
|
|
@@ -42,18 +42,21 @@ var inner = function(props) {
|
|
|
42
42
|
elementContext: "reference"
|
|
43
43
|
});
|
|
44
44
|
var diffY = Math.max(0, overflow.top);
|
|
45
|
-
var nextY = nextArgs.y + diffY;
|
|
46
45
|
var isScrollable = scrollEl.scrollHeight > scrollEl.clientHeight;
|
|
47
46
|
var rounder = isScrollable ? function(v) {
|
|
48
47
|
return v;
|
|
49
48
|
} : Math.round;
|
|
50
|
-
var
|
|
49
|
+
var fullHeight = scrollEl.scrollHeight + (floatingIsBordered && floatingIsScrollEl || scrollElIsBordered ? clientTop * 2 : 0);
|
|
50
|
+
var _listRef_current_length;
|
|
51
|
+
var minimumHeight = item.offsetHeight * Math.min(minItemsVisible, (_listRef_current_length = (_listRef_current1 = listRef.current) === null || _listRef_current1 === void 0 ? void 0 : _listRef_current1.length) !== null && _listRef_current_length !== void 0 ? _listRef_current_length : 0);
|
|
52
|
+
var maxHeight = rounder(Math.max(0, Math.min(fullHeight, fullHeight - overflow.top - overflow.bottom, Math.max(minimumHeight, fullHeight - diffY - Math.max(0, overflow.bottom)))));
|
|
53
|
+
var nextY = Math.min(nextArgs.y + diffY, nextArgs.y + fullHeight - overflow.bottom - maxHeight);
|
|
51
54
|
scrollEl.style.maxHeight = `${maxHeight}px`;
|
|
52
|
-
scrollEl.scrollTop =
|
|
55
|
+
scrollEl.scrollTop = Math.max(0, nextY - nextArgs.y);
|
|
53
56
|
if (onFallbackChange) {
|
|
54
|
-
var
|
|
55
|
-
var
|
|
56
|
-
var shouldFallback = scrollEl.offsetHeight < item.offsetHeight * Math.min(minItemsVisible, (
|
|
57
|
+
var _listRef_current2;
|
|
58
|
+
var _listRef_current_length1;
|
|
59
|
+
var shouldFallback = scrollEl.offsetHeight < item.offsetHeight * Math.min(minItemsVisible, (_listRef_current_length1 = (_listRef_current2 = listRef.current) === null || _listRef_current2 === void 0 ? void 0 : _listRef_current2.length) !== null && _listRef_current_length1 !== void 0 ? _listRef_current_length1 : 0) - 1 || refOverflow.top >= -referenceOverflowThreshold || refOverflow.bottom >= -referenceOverflowThreshold;
|
|
57
60
|
ReactDOM.flushSync(function() {
|
|
58
61
|
return onFallbackChange(shouldFallback);
|
|
59
62
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inner.native.js","names":[],"sources":["esm/middleware/inner.native.js"],"sourcesContent":["import * as ReactDOM from \"react-dom\";\nimport { detectOverflow, offset } from \"@floating-ui/react-dom\";\nfunction getArgsWithCustomFloatingHeight(state, height) {\n return {\n ...state,\n rects: {\n ...state.rects,\n floating: {\n ...state.rects.floating,\n height\n }\n }\n };\n}\nvar inner = function(props) {\n return {\n name: \"inner\",\n options: props,\n async fn(state) {\n var _listRef_current;\n var { listRef, overflowRef, onFallbackChange, offset: innerOffset = 0, index = 0, minItemsVisible = 4, referenceOverflowThreshold = 0, scrollRef, padding = 0 } = props;\n var { rects, elements: { floating } } = state;\n var item = (_listRef_current = listRef.current) === null || _listRef_current === void 0 ? void 0 : _listRef_current[index !== null && index !== void 0 ? index : 0];\n var scrollEl = (scrollRef === null || scrollRef === void 0 ? void 0 : scrollRef.current) || floating;\n var clientTop = floating.clientTop || scrollEl.clientTop;\n var floatingIsBordered = floating.clientTop !== 0;\n var scrollElIsBordered = scrollEl.clientTop !== 0;\n var floatingIsScrollEl = floating === scrollEl;\n if (!item || index == null) {\n onFallbackChange === null || onFallbackChange === void 0 ? void 0 : onFallbackChange(true);\n return {};\n }\n var nextArgs = {\n ...state,\n ...await offset(-item.offsetTop - floating.clientTop - rects.reference.height / 2 - item.offsetHeight / 2 - innerOffset).fn(state)\n };\n var detectOverflowOptions = {\n padding\n };\n var overflow = await detectOverflow(getArgsWithCustomFloatingHeight(nextArgs, scrollEl.scrollHeight + clientTop + floating.clientTop), detectOverflowOptions);\n var refOverflow = await detectOverflow(nextArgs, {\n ...detectOverflowOptions,\n elementContext: \"reference\"\n });\n var diffY = Math.max(0, overflow.top);\n var
|
|
1
|
+
{"version":3,"file":"inner.native.js","names":[],"sources":["esm/middleware/inner.native.js"],"sourcesContent":["import * as ReactDOM from \"react-dom\";\nimport { detectOverflow, offset } from \"@floating-ui/react-dom\";\nfunction getArgsWithCustomFloatingHeight(state, height) {\n return {\n ...state,\n rects: {\n ...state.rects,\n floating: {\n ...state.rects.floating,\n height\n }\n }\n };\n}\nvar inner = function(props) {\n return {\n name: \"inner\",\n options: props,\n async fn(state) {\n var _listRef_current, _listRef_current1;\n var { listRef, overflowRef, onFallbackChange, offset: innerOffset = 0, index = 0, minItemsVisible = 4, referenceOverflowThreshold = 0, scrollRef, padding = 0 } = props;\n var { rects, elements: { floating } } = state;\n var item = (_listRef_current = listRef.current) === null || _listRef_current === void 0 ? void 0 : _listRef_current[index !== null && index !== void 0 ? index : 0];\n var scrollEl = (scrollRef === null || scrollRef === void 0 ? void 0 : scrollRef.current) || floating;\n var clientTop = floating.clientTop || scrollEl.clientTop;\n var floatingIsBordered = floating.clientTop !== 0;\n var scrollElIsBordered = scrollEl.clientTop !== 0;\n var floatingIsScrollEl = floating === scrollEl;\n if (!item || index == null) {\n onFallbackChange === null || onFallbackChange === void 0 ? void 0 : onFallbackChange(true);\n return {};\n }\n var nextArgs = {\n ...state,\n ...await offset(-item.offsetTop - floating.clientTop - rects.reference.height / 2 - item.offsetHeight / 2 - innerOffset).fn(state)\n };\n var detectOverflowOptions = {\n padding\n };\n var overflow = await detectOverflow(getArgsWithCustomFloatingHeight(nextArgs, scrollEl.scrollHeight + clientTop + floating.clientTop), detectOverflowOptions);\n var refOverflow = await detectOverflow(nextArgs, {\n ...detectOverflowOptions,\n elementContext: \"reference\"\n });\n var diffY = Math.max(0, overflow.top);\n var isScrollable = scrollEl.scrollHeight > scrollEl.clientHeight;\n var rounder = isScrollable ? function(v) {\n return v;\n } : Math.round;\n var fullHeight = scrollEl.scrollHeight + (floatingIsBordered && floatingIsScrollEl || scrollElIsBordered ? clientTop * 2 : 0);\n var _listRef_current_length;\n var minimumHeight = item.offsetHeight * Math.min(minItemsVisible, (_listRef_current_length = (_listRef_current1 = listRef.current) === null || _listRef_current1 === void 0 ? void 0 : _listRef_current1.length) !== null && _listRef_current_length !== void 0 ? _listRef_current_length : 0);\n var maxHeight = rounder(Math.max(0, Math.min(fullHeight, fullHeight - overflow.top - overflow.bottom, Math.max(minimumHeight, fullHeight - diffY - Math.max(0, overflow.bottom)))));\n var nextY = Math.min(nextArgs.y + diffY, nextArgs.y + fullHeight - overflow.bottom - maxHeight);\n scrollEl.style.maxHeight = `${maxHeight}px`;\n scrollEl.scrollTop = Math.max(0, nextY - nextArgs.y);\n if (onFallbackChange) {\n var _listRef_current2;\n var _listRef_current_length1;\n var shouldFallback = scrollEl.offsetHeight < item.offsetHeight * Math.min(minItemsVisible, (_listRef_current_length1 = (_listRef_current2 = listRef.current) === null || _listRef_current2 === void 0 ? void 0 : _listRef_current2.length) !== null && _listRef_current_length1 !== void 0 ? _listRef_current_length1 : 0) - 1 || refOverflow.top >= -referenceOverflowThreshold || refOverflow.bottom >= -referenceOverflowThreshold;\n ReactDOM.flushSync(function() {\n return onFallbackChange(shouldFallback);\n });\n }\n if (overflowRef) {\n ;\n overflowRef.current = await detectOverflow(getArgsWithCustomFloatingHeight({\n ...nextArgs,\n y: nextY\n }, scrollEl.offsetHeight + clientTop + floating.clientTop), detectOverflowOptions);\n }\n return {\n y: nextY\n };\n }\n };\n};\nexport {\n inner\n};\n//# sourceMappingURL=inner.js.map\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tamagui/floating",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.1",
|
|
4
|
+
"license": "MIT",
|
|
4
5
|
"source": "src/index.ts",
|
|
5
6
|
"files": [
|
|
6
7
|
"src",
|
|
@@ -36,12 +37,12 @@
|
|
|
36
37
|
"dependencies": {
|
|
37
38
|
"@floating-ui/react-dom": "^2.1.6",
|
|
38
39
|
"@floating-ui/react-native": "^0.10.7",
|
|
39
|
-
"@tamagui/use-event": "3.0.
|
|
40
|
+
"@tamagui/use-event": "3.0.1"
|
|
40
41
|
},
|
|
41
42
|
"devDependencies": {
|
|
42
|
-
"@tamagui/build": "3.0.
|
|
43
|
+
"@tamagui/build": "3.0.1",
|
|
43
44
|
"react": "19.2.3",
|
|
44
|
-
"react-native": "0.
|
|
45
|
+
"react-native": "0.87.1"
|
|
45
46
|
},
|
|
46
47
|
"peerDependencies": {
|
|
47
48
|
"react": ">=19",
|
|
@@ -51,5 +52,6 @@
|
|
|
51
52
|
"type": "git",
|
|
52
53
|
"url": "git+https://github.com/tamagui/tamagui.git",
|
|
53
54
|
"directory": "code/core/floating"
|
|
54
|
-
}
|
|
55
|
+
},
|
|
56
|
+
"releaseSourceCommit": "c156b7cc55e5a6cc5883ebc8189720850ac32dbd"
|
|
55
57
|
}
|
|
@@ -1,82 +1,84 @@
|
|
|
1
|
+
import { useCallback, useMemo } from 'react'
|
|
1
2
|
import type { HTMLProps } from 'react'
|
|
2
3
|
import type { ElementProps } from './types'
|
|
3
4
|
|
|
5
|
+
type PropGetter = (userProps?: Record<string, any>) => Record<string, any>
|
|
6
|
+
|
|
4
7
|
// merges prop getters from multiple interaction hooks.
|
|
5
8
|
// event handlers are chained (all run), first non-undefined return value wins.
|
|
6
9
|
// non-function props: user props override hook props.
|
|
10
|
+
//
|
|
11
|
+
// the getters are memoized on the hook outputs so a consumer can hold the
|
|
12
|
+
// result in context: every interaction hook memoizes its props, so a render
|
|
13
|
+
// that changes none of them keeps the same getters
|
|
7
14
|
export function useInteractions(propsList: Array<ElementProps | void>) {
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const referenceFns = new Map<string, Array<(...args: any[]) => any>>()
|
|
12
|
-
const floatingFns = new Map<string, Array<(...args: any[]) => any>>()
|
|
13
|
-
const itemFns = new Map<string, Array<(...args: any[]) => any>>()
|
|
15
|
+
const referenceDeps = propsList.map((props) => props?.reference)
|
|
16
|
+
const floatingDeps = propsList.map((props) => props?.floating)
|
|
17
|
+
const itemDeps = propsList.map((props) => props?.item)
|
|
14
18
|
|
|
15
|
-
const
|
|
16
|
-
|
|
19
|
+
const getReferenceProps = useCallback<PropGetter>(
|
|
20
|
+
(userProps) => mergeProps(referenceDeps, userProps),
|
|
21
|
+
referenceDeps
|
|
22
|
+
)
|
|
23
|
+
const getFloatingProps = useCallback<PropGetter>(
|
|
24
|
+
(userProps) => mergeProps(floatingDeps, userProps),
|
|
25
|
+
floatingDeps
|
|
26
|
+
)
|
|
27
|
+
const getItemProps = useCallback<PropGetter>(
|
|
28
|
+
(userProps) => mergeProps(itemDeps, userProps, true),
|
|
29
|
+
itemDeps
|
|
30
|
+
)
|
|
17
31
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
return buildProps(referenceFns, referenceStatic, userProps)
|
|
33
|
-
},
|
|
34
|
-
getFloatingProps(userProps?: HTMLProps<HTMLElement>) {
|
|
35
|
-
return buildProps(floatingFns, floatingStatic, userProps)
|
|
36
|
-
},
|
|
37
|
-
getItemProps(userProps?: HTMLProps<HTMLElement>) {
|
|
38
|
-
return buildProps(itemFns, {}, userProps)
|
|
39
|
-
},
|
|
40
|
-
}
|
|
32
|
+
return useMemo(
|
|
33
|
+
() => ({
|
|
34
|
+
getReferenceProps: getReferenceProps as (
|
|
35
|
+
userProps?: HTMLProps<Element>
|
|
36
|
+
) => Record<string, any>,
|
|
37
|
+
getFloatingProps: getFloatingProps as (
|
|
38
|
+
userProps?: HTMLProps<HTMLElement>
|
|
39
|
+
) => Record<string, any>,
|
|
40
|
+
getItemProps: getItemProps as (
|
|
41
|
+
userProps?: HTMLProps<HTMLElement>
|
|
42
|
+
) => Record<string, any>,
|
|
43
|
+
}),
|
|
44
|
+
[getReferenceProps, getFloatingProps, getItemProps]
|
|
45
|
+
)
|
|
41
46
|
}
|
|
42
47
|
|
|
43
|
-
function
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
48
|
+
function mergeProps(
|
|
49
|
+
list: Array<Record<string, any> | ((...args: any[]) => any) | void>,
|
|
50
|
+
userProps?: Record<string, any>,
|
|
51
|
+
objectsOnly = false
|
|
52
|
+
): Record<string, any> {
|
|
53
|
+
const fnMap = new Map<string, Array<(...args: any[]) => any>>()
|
|
54
|
+
// hook static props first, then user props override
|
|
55
|
+
const result: Record<string, any> = {}
|
|
56
|
+
|
|
57
|
+
for (const props of list) {
|
|
58
|
+
if (!props || (objectsOnly && typeof props !== 'object')) continue
|
|
59
|
+
for (const key of Object.keys(props)) {
|
|
60
|
+
const value = (props as Record<string, any>)[key]
|
|
61
|
+
if (typeof value === 'function') {
|
|
62
|
+
let arr = fnMap.get(key)
|
|
63
|
+
if (!arr) {
|
|
64
|
+
arr = []
|
|
65
|
+
fnMap.set(key, arr)
|
|
66
|
+
}
|
|
67
|
+
arr.push(value)
|
|
68
|
+
} else {
|
|
69
|
+
result[key] = value
|
|
54
70
|
}
|
|
55
|
-
arr.push(props[key])
|
|
56
|
-
} else {
|
|
57
|
-
staticMap[key] = props[key]
|
|
58
71
|
}
|
|
59
72
|
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
function buildProps(
|
|
63
|
-
fnMap: Map<string, Array<(...args: any[]) => any>>,
|
|
64
|
-
staticProps: Record<string, any>,
|
|
65
|
-
userProps?: Record<string, any>
|
|
66
|
-
): Record<string, any> {
|
|
67
|
-
// hook static props first, then user props override
|
|
68
|
-
const result: Record<string, any> = { ...staticProps }
|
|
69
73
|
|
|
70
74
|
// merge event handlers from hooks
|
|
71
75
|
for (const [key, fns] of fnMap) {
|
|
72
|
-
|
|
76
|
+
result[key] = (...args: any[]) => {
|
|
73
77
|
for (const fn of fns) {
|
|
74
|
-
const
|
|
75
|
-
if (
|
|
78
|
+
const out = fn(...args)
|
|
79
|
+
if (out !== undefined) return out
|
|
76
80
|
}
|
|
77
81
|
}
|
|
78
|
-
|
|
79
|
-
result[key] = hookHandler
|
|
80
82
|
}
|
|
81
83
|
|
|
82
84
|
// user props override everything — but chain event handlers
|
|
@@ -525,6 +525,11 @@ export function useListNavigation(
|
|
|
525
525
|
virtual,
|
|
526
526
|
])
|
|
527
527
|
|
|
528
|
+
// read at event time so the item props stay stable across the floating
|
|
529
|
+
// element mounting; consumers hold them in context beside every item
|
|
530
|
+
const floatingRef = useRef(elements.floating)
|
|
531
|
+
floatingRef.current = elements.floating
|
|
532
|
+
|
|
528
533
|
const item = useMemo(() => {
|
|
529
534
|
function syncCurrentTarget(currentTarget: HTMLElement | null) {
|
|
530
535
|
if (!latestOpenRef.current) return
|
|
@@ -563,13 +568,13 @@ export function useListNavigation(
|
|
|
563
568
|
onNavigate()
|
|
564
569
|
|
|
565
570
|
if (!virtual) {
|
|
566
|
-
|
|
571
|
+
floatingRef.current?.focus({ preventScroll: true })
|
|
567
572
|
}
|
|
568
573
|
},
|
|
569
574
|
}
|
|
570
575
|
|
|
571
576
|
return itemProps
|
|
572
|
-
}, [latestOpenRef, focusItemOnHover, listRef, onNavigate, virtual
|
|
577
|
+
}, [latestOpenRef, focusItemOnHover, listRef, onNavigate, virtual])
|
|
573
578
|
|
|
574
579
|
return useMemo(
|
|
575
580
|
() => (enabled ? { reference, floating, item } : {}),
|
package/src/middleware/inner.ts
CHANGED
|
@@ -93,24 +93,35 @@ export const inner = (props: InnerProps): Middleware => ({
|
|
|
93
93
|
})
|
|
94
94
|
|
|
95
95
|
const diffY = Math.max(0, overflow.top)
|
|
96
|
-
const nextY = nextArgs.y + diffY
|
|
97
96
|
const isScrollable = scrollEl.scrollHeight > scrollEl.clientHeight
|
|
98
97
|
const rounder = isScrollable ? (v: number) => v : Math.round
|
|
99
|
-
|
|
98
|
+
const fullHeight =
|
|
99
|
+
scrollEl.scrollHeight +
|
|
100
|
+
((floatingIsBordered && floatingIsScrollEl) || scrollElIsBordered
|
|
101
|
+
? clientTop * 2
|
|
102
|
+
: 0)
|
|
103
|
+
const minimumHeight =
|
|
104
|
+
item.offsetHeight * Math.min(minItemsVisible, listRef.current?.length ?? 0)
|
|
105
|
+
|
|
106
|
+
// keep the promised rows visible near a screen edge, moving the list when
|
|
107
|
+
// necessary instead of cropping a list that has room to show them
|
|
100
108
|
const maxHeight = rounder(
|
|
101
109
|
Math.max(
|
|
102
110
|
0,
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
Math.max(0, overflow.bottom)
|
|
111
|
+
Math.min(
|
|
112
|
+
fullHeight,
|
|
113
|
+
fullHeight - overflow.top - overflow.bottom,
|
|
114
|
+
Math.max(minimumHeight, fullHeight - diffY - Math.max(0, overflow.bottom))
|
|
115
|
+
)
|
|
109
116
|
)
|
|
110
117
|
)
|
|
118
|
+
const nextY = Math.min(
|
|
119
|
+
nextArgs.y + diffY,
|
|
120
|
+
nextArgs.y + fullHeight - overflow.bottom - maxHeight
|
|
121
|
+
)
|
|
111
122
|
|
|
112
123
|
scrollEl.style.maxHeight = `${maxHeight}px`
|
|
113
|
-
scrollEl.scrollTop =
|
|
124
|
+
scrollEl.scrollTop = Math.max(0, nextY - nextArgs.y)
|
|
114
125
|
|
|
115
126
|
// check if we should fall back to standard positioning
|
|
116
127
|
if (onFallbackChange) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { HTMLProps } from 'react';
|
|
2
2
|
import type { ElementProps } from './types';
|
|
3
3
|
export declare function useInteractions(propsList: Array<ElementProps | void>): {
|
|
4
|
-
getReferenceProps(userProps?: HTMLProps<Element>)
|
|
5
|
-
getFloatingProps(userProps?: HTMLProps<HTMLElement>)
|
|
6
|
-
getItemProps(userProps?: HTMLProps<HTMLElement>)
|
|
4
|
+
getReferenceProps: (userProps?: HTMLProps<Element>) => Record<string, any>;
|
|
5
|
+
getFloatingProps: (userProps?: HTMLProps<HTMLElement>) => Record<string, any>;
|
|
6
|
+
getItemProps: (userProps?: HTMLProps<HTMLElement>) => Record<string, any>;
|
|
7
7
|
};
|
|
8
8
|
//# sourceMappingURL=useInteractions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInteractions.d.ts","sourceRoot":"","sources":["../../src/interactions/useInteractions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useInteractions.d.ts","sourceRoot":"","sources":["../../src/interactions/useInteractions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAW3C,wBAAgB,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;uBAoBvB,CACtC,SAAS,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,KAC3B,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;sBACc,CACpC,SAAS,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,KAC/B,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;kBACM,CAC5B,SAAS,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,KAC/B,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;EAI7B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useListNavigation.d.ts","sourceRoot":"","sources":["../../src/interactions/useListNavigation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,YAAY,EACZ,0BAA0B,EAC1B,sBAAsB,EACvB,MAAM,SAAS,CAAA;AAgFhB,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,0BAA0B,EACnC,KAAK,EAAE,sBAAsB,GAC5B,YAAY,
|
|
1
|
+
{"version":3,"file":"useListNavigation.d.ts","sourceRoot":"","sources":["../../src/interactions/useListNavigation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,YAAY,EACZ,0BAA0B,EAC1B,sBAAsB,EACvB,MAAM,SAAS,CAAA;AAgFhB,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,0BAA0B,EACnC,KAAK,EAAE,sBAAsB,GAC5B,YAAY,CA4ed"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inner.d.ts","sourceRoot":"","sources":["../../src/middleware/inner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,wBAAwB,CAAA;AAKzE,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,CAAA;IACnD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IACjC,gBAAgB,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC,CAAA;IACvD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,0BAA0B,CAAC,EAAE,MAAM,CAAA;IACnC,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;CAChD;AAeD,eAAO,MAAM,KAAK,UAAW,UAAU,KAAG,
|
|
1
|
+
{"version":3,"file":"inner.d.ts","sourceRoot":"","sources":["../../src/middleware/inner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,wBAAwB,CAAA;AAKzE,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,CAAA;IACnD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IACjC,gBAAgB,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC,CAAA;IACvD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,0BAA0B,CAAC,EAAE,MAAM,CAAA;IACnC,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;CAChD;AAeD,eAAO,MAAM,KAAK,UAAW,UAAU,KAAG,UAuHxC,CAAA"}
|