@salt-ds/lab 1.0.0-alpha.94 → 1.0.0-alpha.95
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/CHANGELOG.md +110 -0
- package/css/salt-lab.css +28 -22
- package/dist-cjs/index.js +6 -50
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/mega-menu/MegaMenuGroup.js +2 -5
- package/dist-cjs/mega-menu/MegaMenuGroup.js.map +1 -1
- package/dist-cjs/mega-menu/MegaMenuGroups.css.js +6 -0
- package/dist-cjs/mega-menu/MegaMenuGroups.css.js.map +1 -0
- package/dist-cjs/mega-menu/{MegaMenuSection.js → MegaMenuGroups.js} +8 -8
- package/dist-cjs/mega-menu/MegaMenuGroups.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuHeader.js +0 -1
- package/dist-cjs/mega-menu/MegaMenuHeader.js.map +1 -1
- package/dist-cjs/mega-menu/MegaMenuItem.css.js +1 -1
- package/dist-cjs/mega-menu/MegaMenuItem.js +6 -5
- package/dist-cjs/mega-menu/MegaMenuItem.js.map +1 -1
- package/dist-cjs/mega-menu/MegaMenuSupportingActions.css.js +6 -0
- package/dist-cjs/mega-menu/MegaMenuSupportingActions.css.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuSupportingActions.js +31 -0
- package/dist-cjs/mega-menu/MegaMenuSupportingActions.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuSupportingContent.css.js +6 -0
- package/dist-cjs/mega-menu/MegaMenuSupportingContent.css.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuSupportingContent.js +31 -0
- package/dist-cjs/mega-menu/MegaMenuSupportingContent.js.map +1 -0
- package/dist-cjs/mega-menu/useMegaMenuKeyboard.js +2 -2
- package/dist-cjs/mega-menu/useMegaMenuKeyboard.js.map +1 -1
- package/dist-cjs/toolbar-next/ToolbarNextOverflow.js +2 -1
- package/dist-cjs/toolbar-next/ToolbarNextOverflow.js.map +1 -1
- package/dist-cjs/toolbar-next/toolbarNextKeyboardUtils.js +21 -3
- package/dist-cjs/toolbar-next/toolbarNextKeyboardUtils.js.map +1 -1
- package/dist-cjs/toolbar-next/useToolbarNextKeyboardNavigation.js +3 -25
- package/dist-cjs/toolbar-next/useToolbarNextKeyboardNavigation.js.map +1 -1
- package/dist-es/index.js +3 -8
- package/dist-es/index.js.map +1 -1
- package/dist-es/mega-menu/MegaMenuGroup.js +2 -5
- package/dist-es/mega-menu/MegaMenuGroup.js.map +1 -1
- package/dist-es/mega-menu/MegaMenuGroups.css.js +4 -0
- package/dist-es/mega-menu/MegaMenuGroups.css.js.map +1 -0
- package/dist-es/mega-menu/{MegaMenuSection.js → MegaMenuGroups.js} +7 -7
- package/dist-es/mega-menu/MegaMenuGroups.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuHeader.js +0 -1
- package/dist-es/mega-menu/MegaMenuHeader.js.map +1 -1
- package/dist-es/mega-menu/MegaMenuItem.css.js +1 -1
- package/dist-es/mega-menu/MegaMenuItem.js +7 -6
- package/dist-es/mega-menu/MegaMenuItem.js.map +1 -1
- package/dist-es/mega-menu/MegaMenuSupportingActions.css.js +4 -0
- package/dist-es/mega-menu/MegaMenuSupportingActions.css.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuSupportingActions.js +29 -0
- package/dist-es/mega-menu/MegaMenuSupportingActions.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuSupportingContent.css.js +4 -0
- package/dist-es/mega-menu/MegaMenuSupportingContent.css.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuSupportingContent.js +29 -0
- package/dist-es/mega-menu/MegaMenuSupportingContent.js.map +1 -0
- package/dist-es/mega-menu/useMegaMenuKeyboard.js +2 -2
- package/dist-es/mega-menu/useMegaMenuKeyboard.js.map +1 -1
- package/dist-es/toolbar-next/ToolbarNextOverflow.js +2 -1
- package/dist-es/toolbar-next/ToolbarNextOverflow.js.map +1 -1
- package/dist-es/toolbar-next/toolbarNextKeyboardUtils.js +21 -3
- package/dist-es/toolbar-next/toolbarNextKeyboardUtils.js.map +1 -1
- package/dist-es/toolbar-next/useToolbarNextKeyboardNavigation.js +4 -26
- package/dist-es/toolbar-next/useToolbarNextKeyboardNavigation.js.map +1 -1
- package/dist-types/index.d.ts +0 -4
- package/dist-types/mega-menu/MegaMenuGroups.d.ts +8 -0
- package/dist-types/mega-menu/MegaMenuItem.d.ts +3 -2
- package/dist-types/mega-menu/MegaMenuSupportingActions.d.ts +8 -0
- package/dist-types/mega-menu/MegaMenuSupportingContent.d.ts +8 -0
- package/dist-types/mega-menu/index.d.ts +3 -3
- package/dist-types/toolbar-next/useToolbarNextKeyboardNavigation.d.ts +1 -0
- package/package.json +2 -4
- package/dist-cjs/calendar/index.js +0 -61
- package/dist-cjs/calendar/index.js.map +0 -1
- package/dist-cjs/date-input/index.js +0 -23
- package/dist-cjs/date-input/index.js.map +0 -1
- package/dist-cjs/date-picker/index.js +0 -106
- package/dist-cjs/date-picker/index.js.map +0 -1
- package/dist-cjs/localization-provider/index.js +0 -26
- package/dist-cjs/localization-provider/index.js.map +0 -1
- package/dist-cjs/mega-menu/MegaMenuContent.css.js +0 -6
- package/dist-cjs/mega-menu/MegaMenuContent.css.js.map +0 -1
- package/dist-cjs/mega-menu/MegaMenuContent.js +0 -33
- package/dist-cjs/mega-menu/MegaMenuContent.js.map +0 -1
- package/dist-cjs/mega-menu/MegaMenuItemContent.css.js +0 -6
- package/dist-cjs/mega-menu/MegaMenuItemContent.css.js.map +0 -1
- package/dist-cjs/mega-menu/MegaMenuItemContent.js +0 -23
- package/dist-cjs/mega-menu/MegaMenuItemContent.js.map +0 -1
- package/dist-cjs/mega-menu/MegaMenuSection.css.js +0 -6
- package/dist-cjs/mega-menu/MegaMenuSection.css.js.map +0 -1
- package/dist-cjs/mega-menu/MegaMenuSection.js.map +0 -1
- package/dist-cjs/utils/deprecatedExport.js +0 -30
- package/dist-cjs/utils/deprecatedExport.js.map +0 -1
- package/dist-es/calendar/index.js +0 -50
- package/dist-es/calendar/index.js.map +0 -1
- package/dist-es/date-input/index.js +0 -20
- package/dist-es/date-input/index.js.map +0 -1
- package/dist-es/date-picker/index.js +0 -85
- package/dist-es/date-picker/index.js.map +0 -1
- package/dist-es/localization-provider/index.js +0 -20
- package/dist-es/localization-provider/index.js.map +0 -1
- package/dist-es/mega-menu/MegaMenuContent.css.js +0 -4
- package/dist-es/mega-menu/MegaMenuContent.css.js.map +0 -1
- package/dist-es/mega-menu/MegaMenuContent.js +0 -31
- package/dist-es/mega-menu/MegaMenuContent.js.map +0 -1
- package/dist-es/mega-menu/MegaMenuItemContent.css.js +0 -4
- package/dist-es/mega-menu/MegaMenuItemContent.css.js.map +0 -1
- package/dist-es/mega-menu/MegaMenuItemContent.js +0 -21
- package/dist-es/mega-menu/MegaMenuItemContent.js.map +0 -1
- package/dist-es/mega-menu/MegaMenuSection.css.js +0 -4
- package/dist-es/mega-menu/MegaMenuSection.css.js.map +0 -1
- package/dist-es/mega-menu/MegaMenuSection.js.map +0 -1
- package/dist-es/utils/deprecatedExport.js +0 -27
- package/dist-es/utils/deprecatedExport.js.map +0 -1
- package/dist-types/calendar/index.d.ts +0 -13
- package/dist-types/date-input/index.d.ts +0 -3
- package/dist-types/localization-provider/index.d.ts +0 -9
- package/dist-types/mega-menu/MegaMenuContent.d.ts +0 -8
- package/dist-types/mega-menu/MegaMenuItemContent.d.ts +0 -8
- package/dist-types/mega-menu/MegaMenuSection.d.ts +0 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolbarNextOverflow.js","sources":["../src/toolbar-next/ToolbarNextOverflow.tsx"],"sourcesContent":["import {\n flip,\n offset,\n shift,\n size,\n useClick,\n useDismiss,\n useInteractions,\n} from \"@floating-ui/react\";\nimport {\n Button,\n makePrefixer,\n useFloatingComponent,\n useFloatingUI,\n useForkRef,\n useIcon,\n useId,\n useIsomorphicLayoutEffect,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { compute } from \"compute-scroll-into-view\";\nimport {\n Children,\n cloneElement,\n isValidElement,\n type ReactElement,\n type KeyboardEvent as ReactKeyboardEvent,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n type PointerEvent as ReactPointerEvent,\n type RefObject,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { ToolbarContentNext } from \"./ToolbarContentNext\";\nimport toolbarNextOverflowCss from \"./ToolbarNextOverflow.css\";\nimport {\n getToolbarNextOverflowBoundaryKey,\n isTargetInsideOverflowBoundary,\n ToolbarNextOverflowFloatingComponentProvider,\n useToolbarNextOverflowFloatingBoundary,\n} from \"./ToolbarNextOverflowFloatingBoundary\";\nimport {\n getDocumentFocusableElements,\n getToolbarNextFocusMemory,\n getToolbarNextScopeFocusableElements,\n getToolbarNextTabMoveTarget,\n scheduleToolbarNextFocus,\n shouldToolbarNextPreserveNativeTab,\n TOOLBAR_NEXT_GROUP_KEY_ATTR,\n TOOLBAR_NEXT_ITEM_ATTR,\n TOOLBAR_NEXT_OVERFLOW_TRIGGER_ATTR,\n TOOLBAR_NEXT_SCOPE_ROOT_ATTR,\n type ToolbarNextFocusMemory,\n toolbarNextFocusableSelector,\n} from \"./toolbarNextKeyboardUtils\";\nimport type {\n ToolbarNextContentModel,\n ToolbarNextOverflowItem,\n} from \"./toolbarNextUtils\";\nimport { buildContentOverflowRenderSlots } from \"./toolbarNextUtils\";\nimport { useToolbarNextKeyboardNavigation } from \"./useToolbarNextKeyboardNavigation\";\nimport type { ToolbarNextOverflowGroup } from \"./useToolbarNextOverflow\";\n\nconst withBaseName = makePrefixer(\"saltToolbarNextOverflow\");\n\nexport type ToolbarNextItemHostKind = \"main\" | \"measurement\" | \"overflow\";\n\nconst toolbarNextStatefulFocusRootSelector = [\n \".saltDateInput-focused\",\n \".saltInput-focused\",\n].join(\", \");\n\nconst toolbarNextOverflowFocusScrollRootSelector = [\n \".saltComboBox\",\n \".saltDateInput\",\n \".saltDropdown\",\n \".saltInput\",\n \".saltSwitch\",\n].join(\", \");\n\ntype ToolbarNextOverflowOpenModality = \"keyboard\" | \"pointer\" | null;\n\nfunction createToolbarNextFocusEvent(\n eventName: \"blur\" | \"focusout\",\n target: HTMLElement,\n relatedTarget: Element | null,\n) {\n const FocusEventCtor = target.ownerDocument.defaultView?.FocusEvent;\n const eventInit = {\n bubbles: eventName === \"focusout\",\n relatedTarget,\n };\n\n return FocusEventCtor\n ? new FocusEventCtor(eventName, eventInit)\n : new Event(eventName, eventInit);\n}\n\nfunction notifyToolbarNextReparentedFocusLoss(mountNode: HTMLDivElement) {\n const activeElement = mountNode.ownerDocument.activeElement;\n\n if (mountNode.contains(activeElement)) {\n return;\n }\n\n // Browser focus can move to the document when a portaled toolbar item is\n // reparented, without notifying controls that keep their own focused state.\n const staleFocusTargets = Array.from(\n mountNode.querySelectorAll<HTMLElement>(\n toolbarNextStatefulFocusRootSelector,\n ),\n )\n .map((root) =>\n root.querySelector<HTMLElement>(toolbarNextFocusableSelector),\n )\n .filter((target): target is HTMLElement => target != null);\n\n for (const target of staleFocusTargets) {\n const relatedTarget =\n activeElement instanceof Element ? activeElement : null;\n\n target.dispatchEvent(\n createToolbarNextFocusEvent(\"blur\", target, relatedTarget),\n );\n target.dispatchEvent(\n createToolbarNextFocusEvent(\"focusout\", target, relatedTarget),\n );\n }\n}\n\nfunction getToolbarNextOverflowFocusScrollTarget(target: HTMLElement) {\n const itemRoot = target.closest<HTMLElement>(`[${TOOLBAR_NEXT_ITEM_ATTR}]`);\n const controlRoot = target.closest<HTMLElement>(\n toolbarNextOverflowFocusScrollRootSelector,\n );\n\n return controlRoot && itemRoot?.contains(controlRoot) ? controlRoot : target;\n}\n\nfunction getToolbarNextOverflowPanelInlinePadding(target: HTMLElement) {\n const panelContent = target.closest<HTMLElement>(\n `[${TOOLBAR_NEXT_SCOPE_ROOT_ATTR}]`,\n );\n const styles =\n panelContent?.ownerDocument.defaultView?.getComputedStyle(panelContent);\n\n return {\n left: Number.parseFloat(styles?.paddingLeft ?? \"0\") || 0,\n right: Number.parseFloat(styles?.paddingRight ?? \"0\") || 0,\n };\n}\n\nfunction scrollToolbarNextOverflowTargetIntoView(\n panel: HTMLDivElement | null,\n target: HTMLElement,\n) {\n if (!panel || !panel.contains(target)) {\n return;\n }\n\n const scrollTarget = getToolbarNextOverflowFocusScrollTarget(target);\n const actions = compute(scrollTarget, {\n block: \"nearest\",\n boundary: panel,\n inline: \"nearest\",\n scrollMode: \"if-needed\",\n });\n\n for (const { el, left, top } of actions) {\n if (el === panel) {\n const targetRect = scrollTarget.getBoundingClientRect();\n const panelRect = panel.getBoundingClientRect();\n const viewportLeft = panelRect.left + panel.clientLeft;\n const viewportRight = viewportLeft + panel.clientWidth;\n const padding = getToolbarNextOverflowPanelInlinePadding(scrollTarget);\n const nextLeft =\n targetRect.left < viewportLeft + padding.left\n ? left - padding.left\n : targetRect.right > viewportRight - padding.right\n ? left + padding.right\n : left;\n\n el.scrollLeft = Math.max(0, nextLeft);\n } else {\n el.scrollLeft = left;\n }\n\n el.scrollTop = top;\n }\n}\n\nfunction canSeedOverflowFocusMemory(\n focusMemory: ToolbarNextFocusMemory | null | undefined,\n group: ToolbarNextOverflowGroup,\n): focusMemory is Extract<ToolbarNextFocusMemory, { type: \"item\" }> {\n return (\n focusMemory?.type === \"item\" &&\n group.items.some((item) => item.id === focusMemory.itemId)\n );\n}\n\ninterface ToolbarNextOverflowOwnersProps {\n hostNodes: Record<string, HTMLDivElement | null>;\n items: ToolbarNextOverflowItem[];\n}\n\nfunction ToolbarNextOverflowItemOwner({\n host,\n item,\n}: {\n host: HTMLDivElement | null;\n item: ToolbarNextOverflowItem;\n}) {\n const targetWindow = useWindow();\n const [mountNode, setMountNode] = useState<HTMLDivElement | null>(null);\n const mainToolbarTabIndexMemoryRef = useRef(\n new WeakMap<HTMLElement, string | null>(),\n );\n const lastOverflowBoundaryKeyRef = useRef<string | null>(null);\n const currentOverflowBoundaryKey = getToolbarNextOverflowBoundaryKey(host);\n\n if (host) {\n lastOverflowBoundaryKeyRef.current = currentOverflowBoundaryKey;\n }\n\n const boundaryKey = host\n ? currentOverflowBoundaryKey\n : lastOverflowBoundaryKeyRef.current;\n\n useIsomorphicLayoutEffect(() => {\n const nextMountNode = targetWindow?.document.createElement(\"div\");\n\n if (!nextMountNode) {\n return;\n }\n\n nextMountNode.className = withBaseName(\"contentHost\");\n setMountNode(nextMountNode);\n\n return () => {\n nextMountNode.parentElement?.removeChild(nextMountNode);\n };\n }, [targetWindow]);\n\n useIsomorphicLayoutEffect(() => {\n if (!mountNode) {\n return;\n }\n\n if (host) {\n if (mountNode.parentElement !== host) {\n host.appendChild(mountNode);\n notifyToolbarNextReparentedFocusLoss(mountNode);\n }\n\n const isMainToolbarHost =\n host\n .closest(`[${TOOLBAR_NEXT_SCOPE_ROOT_ATTR}]`)\n ?.getAttribute(TOOLBAR_NEXT_SCOPE_ROOT_ATTR) === \"main\";\n\n if (isMainToolbarHost) {\n const focusableElements = Array.from(\n mountNode.querySelectorAll<HTMLElement>(toolbarNextFocusableSelector),\n );\n\n for (const element of focusableElements) {\n const rememberedTabIndex =\n mainToolbarTabIndexMemoryRef.current.get(element);\n\n if (rememberedTabIndex !== undefined) {\n if (rememberedTabIndex == null) {\n element.removeAttribute(\"tabindex\");\n } else {\n element.setAttribute(\"tabindex\", rememberedTabIndex);\n }\n }\n }\n\n for (const element of focusableElements) {\n mainToolbarTabIndexMemoryRef.current.set(\n element,\n element.getAttribute(\"tabindex\"),\n );\n }\n }\n\n return;\n }\n\n notifyToolbarNextReparentedFocusLoss(mountNode);\n mountNode.parentElement?.removeChild(mountNode);\n }, [host, mountNode]);\n\n if (!mountNode) {\n return null;\n }\n\n const clonedItem = cloneElement(\n item.element as ReactElement<Record<string, ReactNode>>,\n {\n [TOOLBAR_NEXT_GROUP_KEY_ATTR]: item.overflowGroupKey,\n [TOOLBAR_NEXT_ITEM_ATTR]: item.id,\n },\n );\n const itemContent = (\n <ToolbarNextOverflowFloatingComponentProvider boundaryKey={boundaryKey}>\n {clonedItem}\n </ToolbarNextOverflowFloatingComponentProvider>\n );\n\n return createPortal(itemContent, mountNode);\n}\n\nexport function ToolbarNextOverflowOwners({\n hostNodes,\n items,\n}: ToolbarNextOverflowOwnersProps) {\n return (\n <>\n {items.map((item) => (\n <ToolbarNextOverflowItemOwner\n host={hostNodes[item.id] ?? null}\n item={item}\n key={item.id}\n />\n ))}\n </>\n );\n}\n\nfunction cloneDecorations(\n itemId: string,\n decorations: ReactElement[],\n slot: \"leading\" | \"trailing\",\n) {\n return Children.toArray(decorations).flatMap((decoration) => {\n if (!isValidElement(decoration)) {\n return [];\n }\n\n return [\n cloneElement(decoration, {\n key: `${itemId}-${slot}-${String(\n decoration.key ??\n (typeof decoration.type === \"string\"\n ? decoration.type\n : \"decoration\"),\n )}`,\n }),\n ];\n });\n}\n\nexport function ToolbarNextOverflowTriggerContent({\n label,\n named,\n}: {\n label: string;\n named: boolean;\n}) {\n const { OverflowIcon } = useIcon();\n\n if (named) {\n return <>{label}</>;\n }\n\n return <OverflowIcon aria-hidden />;\n}\n\nfunction getOverflowTriggerLabel(group: ToolbarNextOverflowGroup) {\n return group.named\n ? `${group.label} overflow. Hidden controls.`\n : \"Overflow. Hidden controls.\";\n}\n\ninterface ToolbarNextOverflowMenuProps {\n focusMemoryRef?: RefObject<ToolbarNextFocusMemory | null>;\n getItemHostRef: (\n id: string,\n kind: ToolbarNextItemHostKind,\n ) => (node: HTMLDivElement | null) => void;\n group: ToolbarNextOverflowGroup;\n onItemFocus?: (itemId: string, controlIndex: number) => void;\n}\n\nexport function ToolbarNextOverflowMenu({\n focusMemoryRef,\n getItemHostRef,\n group,\n onItemFocus,\n}: ToolbarNextOverflowMenuProps) {\n const panelId = useId();\n const [open, setOpen] = useState(false);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const panelContentRef = useRef<HTMLDivElement>(null);\n const [panelContentNode, setPanelContentNode] =\n useState<HTMLDivElement | null>(null);\n const wasOpenRef = useRef(false);\n const focusedOpenPanelRef = useRef(false);\n const openModalityRef = useRef<ToolbarNextOverflowOpenModality>(null);\n const floatingBoundary = useToolbarNextOverflowFloatingBoundary();\n const {\n focusEntryTarget,\n handleScopeBlur,\n handleScopeFocus,\n handleScopeKeyDown,\n handleScopePointerDown,\n rememberedFocusRef,\n } = useToolbarNextKeyboardNavigation({\n includeTabIndexMinusOne: true,\n items: group.items,\n scopeRef: panelContentRef,\n });\n\n const { refs, x, y, strategy, context, elements } = useFloatingUI({\n open,\n onOpenChange(nextOpen, _, reason) {\n setOpen(nextOpen);\n\n if (!nextOpen) {\n openModalityRef.current = null;\n }\n\n if (!nextOpen && reason === \"escape-key\") {\n scheduleToolbarNextFocus(triggerRef.current);\n }\n },\n placement: \"bottom-end\",\n middleware: [\n offset(1),\n size({\n apply({ elements, availableHeight }) {\n Object.assign(elements.floating.style, {\n maxHeight: `${availableHeight}px`,\n });\n },\n }),\n flip(),\n shift({\n padding: 8,\n }),\n ],\n });\n const { getFloatingProps, getReferenceProps } = useInteractions([\n useClick(context),\n useDismiss(context, {\n escapeKey: false,\n outsidePress(event) {\n return !isTargetInsideOverflowBoundary(\n panelContentRef.current,\n floatingBoundary,\n group.key,\n event.target,\n );\n },\n }),\n ]);\n\n const handleTriggerKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLButtonElement>) => {\n if (!open && [\"Enter\", \" \"].includes(event.key)) {\n event.preventDefault();\n openModalityRef.current = \"keyboard\";\n setOpen(true);\n return;\n }\n\n if (open && event.key === \"Escape\") {\n event.preventDefault();\n setOpen(false);\n scheduleToolbarNextFocus(triggerRef.current);\n }\n },\n [open],\n );\n\n const handleTriggerPointerDown = useCallback(\n (event: ReactPointerEvent<HTMLButtonElement>) => {\n if (!open && event.button === 0) {\n openModalityRef.current = \"pointer\";\n }\n },\n [open],\n );\n\n const handleTriggerMouseDown = useCallback(\n (event: ReactMouseEvent<HTMLButtonElement>) => {\n if (!open && event.button === 0) {\n openModalityRef.current = \"pointer\";\n }\n },\n [open],\n );\n\n const handlePanelKeyDown = useCallback((event: KeyboardEvent) => {\n if (event.key === \"Tab\") {\n const panelContent = panelContentRef.current;\n const target = event.target;\n\n if (\n panelContent &&\n target instanceof HTMLElement &&\n shouldToolbarNextPreserveNativeTab(target)\n ) {\n const focusableElements = getDocumentFocusableElements(\n panelContent.ownerDocument,\n );\n const currentIndex = focusableElements.indexOf(target);\n const nextFocusTarget =\n focusableElements[currentIndex + (event.shiftKey ? -1 : 1)];\n\n if (\n currentIndex !== -1 &&\n nextFocusTarget &&\n panelContent.contains(nextFocusTarget)\n ) {\n return;\n }\n }\n }\n\n if (event.key === \"Tab\" && !event.shiftKey) {\n const toolbarRoot = triggerRef.current?.closest<HTMLElement>(\n `[${TOOLBAR_NEXT_SCOPE_ROOT_ATTR}]`,\n );\n const nextFocusTarget = toolbarRoot\n ? getToolbarNextTabMoveTarget(toolbarRoot, false)\n : null;\n\n if (nextFocusTarget) {\n event.preventDefault();\n event.stopPropagation();\n setOpen(false);\n scheduleToolbarNextFocus(nextFocusTarget);\n }\n\n return;\n }\n\n if (event.key === \"Tab\" && event.shiftKey) {\n event.preventDefault();\n event.stopPropagation();\n setOpen(false);\n scheduleToolbarNextFocus(triggerRef.current);\n return;\n }\n\n if (event.key === \"Escape\") {\n event.preventDefault();\n event.stopPropagation();\n setOpen(false);\n scheduleToolbarNextFocus(triggerRef.current);\n }\n }, []);\n\n const handleTriggerRef = useForkRef<HTMLButtonElement>(\n triggerRef,\n refs.setReference,\n );\n const handlePanelRef = useForkRef<HTMLDivElement>(panelRef, refs.setFloating);\n const handlePanelContentRef = useForkRef<HTMLDivElement>(\n panelContentRef,\n setPanelContentNode,\n );\n const handlePanelFocus = useCallback(\n (event: FocusEvent) => {\n handleScopeFocus(event);\n\n const panelContent = panelContentRef.current;\n const target = event.target;\n\n if (!panelContent || !(target instanceof HTMLElement)) {\n return;\n }\n\n const focusMemory = getToolbarNextFocusMemory(panelContent, target, {\n includeTabIndexMinusOne: true,\n });\n\n if (focusMemory?.type !== \"item\") {\n return;\n }\n\n scrollToolbarNextOverflowTargetIntoView(panelRef.current, target);\n onItemFocus?.(focusMemory.itemId, focusMemory.controlIndex);\n },\n [handleScopeFocus, onItemFocus],\n );\n const { Component: FloatingComponent } = useFloatingComponent();\n\n useEffect(() => {\n if (open && !wasOpenRef.current) {\n const externalFocusMemory = focusMemoryRef?.current;\n\n if (canSeedOverflowFocusMemory(externalFocusMemory, group)) {\n rememberedFocusRef.current = externalFocusMemory;\n }\n\n if (openModalityRef.current !== \"pointer\") {\n focusEntryTarget();\n }\n }\n\n wasOpenRef.current = open;\n }, [focusEntryTarget, focusMemoryRef, group, open, rememberedFocusRef]);\n\n useEffect(() => {\n if (!open || !panelContentNode) {\n return;\n }\n\n const handleFocusIn = (event: FocusEvent) => {\n handlePanelFocus(event);\n };\n const handleFocusOut = (event: FocusEvent) => {\n if (\n isTargetInsideOverflowBoundary(\n panelContentRef.current,\n floatingBoundary,\n group.key,\n event.relatedTarget,\n )\n ) {\n return;\n }\n\n handleScopeBlur(event);\n };\n const handleKeyDownCapture = (event: KeyboardEvent) => {\n handleScopeKeyDown(event);\n };\n const handlePointerDownCapture = (event: PointerEvent) => {\n handleScopePointerDown(event);\n };\n const handleKeyDown = (event: KeyboardEvent) => {\n if (!event.defaultPrevented) {\n handlePanelKeyDown(event);\n }\n };\n\n panelContentNode.addEventListener(\"focusin\", handleFocusIn);\n panelContentNode.addEventListener(\"focusout\", handleFocusOut);\n panelContentNode.addEventListener(\"keydown\", handleKeyDownCapture, true);\n panelContentNode.addEventListener(\n \"pointerdown\",\n handlePointerDownCapture,\n true,\n );\n panelContentNode.addEventListener(\"keydown\", handleKeyDown);\n\n return () => {\n panelContentNode.removeEventListener(\"focusin\", handleFocusIn);\n panelContentNode.removeEventListener(\"focusout\", handleFocusOut);\n panelContentNode.removeEventListener(\n \"keydown\",\n handleKeyDownCapture,\n true,\n );\n panelContentNode.removeEventListener(\n \"pointerdown\",\n handlePointerDownCapture,\n true,\n );\n panelContentNode.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [\n handlePanelFocus,\n handlePanelKeyDown,\n handleScopeBlur,\n handleScopeKeyDown,\n handleScopePointerDown,\n floatingBoundary,\n group.key,\n open,\n panelContentNode,\n ]);\n\n useIsomorphicLayoutEffect(() => {\n if (!open) {\n focusedOpenPanelRef.current = false;\n return;\n }\n\n if (\n !panelContentNode ||\n focusedOpenPanelRef.current ||\n openModalityRef.current === \"pointer\"\n ) {\n return;\n }\n\n const getPanelFocusables = () =>\n getToolbarNextScopeFocusableElements(panelContentNode, {\n includeTabIndexMinusOne: true,\n });\n const focusEntryWhenReady = () => {\n const panelFocusables = getPanelFocusables();\n\n if (panelFocusables.length === 0) {\n return false;\n }\n\n focusedOpenPanelRef.current = true;\n focusEntryTarget();\n return true;\n };\n\n if (focusEntryWhenReady()) {\n return;\n }\n\n const panelWindow = panelContentNode.ownerDocument.defaultView;\n const mutationObserverCtor = panelWindow?.MutationObserver;\n const resizeObserverCtor = panelWindow?.ResizeObserver;\n let mutationObserver: MutationObserver | null = null;\n let resizeObserver: ResizeObserver | null = null;\n\n mutationObserver =\n mutationObserverCtor != null\n ? new mutationObserverCtor(() => {\n if (focusEntryWhenReady()) {\n mutationObserver?.disconnect();\n resizeObserver?.disconnect();\n }\n })\n : null;\n resizeObserver =\n resizeObserverCtor != null\n ? new resizeObserverCtor(() => {\n if (focusEntryWhenReady()) {\n mutationObserver?.disconnect();\n resizeObserver?.disconnect();\n }\n })\n : null;\n\n mutationObserver?.observe(panelContentNode, {\n childList: true,\n subtree: true,\n });\n resizeObserver?.observe(panelContentNode);\n\n return () => {\n mutationObserver?.disconnect();\n resizeObserver?.disconnect();\n };\n }, [focusEntryTarget, open, panelContentNode]);\n\n return (\n <div\n className={withBaseName(\"menu\")}\n data-overflowgroup={group.overflowGroup}\n >\n <Button\n appearance=\"transparent\"\n aria-controls={panelId}\n aria-expanded={open}\n aria-label={getOverflowTriggerLabel(group)}\n className={withBaseName(\"trigger\")}\n {...{\n [TOOLBAR_NEXT_GROUP_KEY_ATTR]: group.key,\n [TOOLBAR_NEXT_OVERFLOW_TRIGGER_ATTR]: \"\",\n }}\n {...getReferenceProps({\n onKeyDown: handleTriggerKeyDown,\n onMouseDown: handleTriggerMouseDown,\n onPointerDown: handleTriggerPointerDown,\n })}\n ref={handleTriggerRef}\n sentiment=\"neutral\"\n >\n <ToolbarNextOverflowTriggerContent\n label={group.label}\n named={group.named}\n />\n </Button>\n <FloatingComponent\n {...getFloatingProps({\n role: \"presentation\",\n })}\n className={withBaseName(\"panel\")}\n focusManagerProps={\n context\n ? {\n context,\n initialFocus: -1,\n returnFocus: false,\n modal: false,\n closeOnFocusOut: false,\n }\n : undefined\n }\n id={panelId}\n left={x ?? 0}\n open={open}\n position={strategy}\n ref={handlePanelRef}\n top={y ?? 0}\n width={elements.floating?.offsetWidth}\n height={elements.floating?.offsetHeight}\n >\n <div\n aria-label={`${group.label} overflow`}\n aria-orientation=\"horizontal\"\n className={withBaseName(\"panelContent\")}\n {...{ [TOOLBAR_NEXT_SCOPE_ROOT_ATTR]: group.key }}\n role=\"toolbar\"\n ref={handlePanelContentRef}\n >\n {group.items.map((item, index) => (\n <div\n className={withBaseName(\"panelItem\")}\n key={`${group.id}-${item.id}`}\n >\n {index > 0 &&\n item.leadingDecorations.length > 0 &&\n cloneDecorations(item.id, item.leadingDecorations, \"leading\")}\n <div\n className={withBaseName(\"itemHost\")}\n ref={open ? getItemHostRef(item.id, \"overflow\") : null}\n />\n {cloneDecorations(item.id, item.trailingDecorations, \"trailing\")}\n </div>\n ))}\n </div>\n </FloatingComponent>\n </div>\n );\n}\n\nexport interface ToolbarNextOverflowContentProps {\n focusMemoryRef?: RefObject<ToolbarNextFocusMemory | null>;\n getItemHostRef: (\n id: string,\n kind: ToolbarNextItemHostKind,\n ) => (node: HTMLDivElement | null) => void;\n getItemRef: (id: string) => (node: HTMLDivElement | null) => void;\n getNamedTriggerRef: (id: string) => (node: HTMLDivElement | null) => void;\n getContentRef: (contentKey: string) => (node: HTMLDivElement | null) => void;\n onItemFocus?: (itemId: string, controlIndex: number) => void;\n overflowGroups: ToolbarNextOverflowGroup[];\n overflowedIds: Set<string>;\n content: ToolbarNextContentModel;\n}\n\nexport function ToolbarNextOverflowContent({\n content,\n focusMemoryRef,\n getItemHostRef,\n getItemRef,\n getNamedTriggerRef,\n getContentRef,\n onItemFocus,\n overflowGroups,\n overflowedIds,\n}: ToolbarNextOverflowContentProps) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-toolbar-next-overflow\",\n css: toolbarNextOverflowCss,\n window: targetWindow,\n });\n\n const { className, ...contentProps } = content.props;\n const handleContentRef = useForkRef(content.ref, getContentRef(content.key));\n const overflowGroupByKey = new Map(\n overflowGroups.map((group) => [group.key, group] as const),\n );\n\n const renderSlots = buildContentOverflowRenderSlots(\n content.items,\n overflowedIds,\n new Set(overflowGroups.map((group) => group.key)),\n );\n\n return (\n <ToolbarContentNext\n {...contentProps}\n data-implicit={content.implicit || undefined}\n className={clsx(className, withBaseName(\"content\"))}\n position={content.position}\n ref={handleContentRef}\n >\n {renderSlots.map(\n ({\n item,\n overflowed,\n showLeadingDecorations,\n showTrailingDecorations,\n triggerGroupKey,\n }) => {\n const triggerGroup =\n triggerGroupKey != null\n ? overflowGroupByKey.get(triggerGroupKey)\n : undefined;\n\n return (\n <div\n className={withBaseName(\"slot\")}\n data-align={item.align}\n data-priority={item.overflowPriority}\n key={\n triggerGroup\n ? `${content.key}-${triggerGroup.id}-anchor-${item.id}`\n : item.id\n }\n ref={\n triggerGroup ? getNamedTriggerRef(item.id) : getItemRef(item.id)\n }\n >\n {showLeadingDecorations\n ? cloneDecorations(item.id, item.leadingDecorations, \"leading\")\n : null}\n {!overflowed ? (\n <div className={withBaseName(\"item\")}>\n <div\n className={withBaseName(\"itemHost\")}\n ref={getItemHostRef(item.id, \"main\")}\n />\n </div>\n ) : null}\n {triggerGroup ? (\n <div className={withBaseName(\"item\")}>\n <ToolbarNextOverflowMenu\n focusMemoryRef={focusMemoryRef}\n getItemHostRef={getItemHostRef}\n group={triggerGroup}\n onItemFocus={onItemFocus}\n />\n </div>\n ) : null}\n {showTrailingDecorations\n ? cloneDecorations(\n item.id,\n item.trailingDecorations,\n \"trailing\",\n )\n : null}\n </div>\n );\n },\n )}\n </ToolbarContentNext>\n );\n}\n"],"names":["elements","_a","toolbarNextOverflowCss"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ToolbarNextOverflow.js","sources":["../src/toolbar-next/ToolbarNextOverflow.tsx"],"sourcesContent":["import {\n flip,\n offset,\n shift,\n size,\n useClick,\n useDismiss,\n useInteractions,\n} from \"@floating-ui/react\";\nimport {\n Button,\n makePrefixer,\n useFloatingComponent,\n useFloatingUI,\n useForkRef,\n useIcon,\n useId,\n useIsomorphicLayoutEffect,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { compute } from \"compute-scroll-into-view\";\nimport {\n Children,\n cloneElement,\n isValidElement,\n type ReactElement,\n type KeyboardEvent as ReactKeyboardEvent,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n type PointerEvent as ReactPointerEvent,\n type RefObject,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { ToolbarContentNext } from \"./ToolbarContentNext\";\nimport toolbarNextOverflowCss from \"./ToolbarNextOverflow.css\";\nimport {\n getToolbarNextOverflowBoundaryKey,\n isTargetInsideOverflowBoundary,\n ToolbarNextOverflowFloatingComponentProvider,\n useToolbarNextOverflowFloatingBoundary,\n} from \"./ToolbarNextOverflowFloatingBoundary\";\nimport {\n getDocumentFocusableElements,\n getToolbarNextFocusMemory,\n getToolbarNextScopeFocusableElements,\n getToolbarNextTabMoveTarget,\n scheduleToolbarNextFocus,\n shouldToolbarNextPreserveNativeTab,\n TOOLBAR_NEXT_GROUP_KEY_ATTR,\n TOOLBAR_NEXT_ITEM_ATTR,\n TOOLBAR_NEXT_OVERFLOW_TRIGGER_ATTR,\n TOOLBAR_NEXT_SCOPE_ROOT_ATTR,\n type ToolbarNextFocusMemory,\n toolbarNextFocusableSelector,\n} from \"./toolbarNextKeyboardUtils\";\nimport type {\n ToolbarNextContentModel,\n ToolbarNextOverflowItem,\n} from \"./toolbarNextUtils\";\nimport { buildContentOverflowRenderSlots } from \"./toolbarNextUtils\";\nimport { useToolbarNextKeyboardNavigation } from \"./useToolbarNextKeyboardNavigation\";\nimport type { ToolbarNextOverflowGroup } from \"./useToolbarNextOverflow\";\n\nconst withBaseName = makePrefixer(\"saltToolbarNextOverflow\");\n\nexport type ToolbarNextItemHostKind = \"main\" | \"measurement\" | \"overflow\";\n\nconst toolbarNextStatefulFocusRootSelector = [\n \".saltComboBox-focused\",\n \".saltDateInput-focused\",\n \".saltInput-focused\",\n].join(\", \");\n\nconst toolbarNextOverflowFocusScrollRootSelector = [\n \".saltComboBox\",\n \".saltDateInput\",\n \".saltDropdown\",\n \".saltInput\",\n \".saltSwitch\",\n].join(\", \");\n\ntype ToolbarNextOverflowOpenModality = \"keyboard\" | \"pointer\" | null;\n\nfunction createToolbarNextFocusEvent(\n eventName: \"blur\" | \"focusout\",\n target: HTMLElement,\n relatedTarget: Element | null,\n) {\n const FocusEventCtor = target.ownerDocument.defaultView?.FocusEvent;\n const eventInit = {\n bubbles: eventName === \"focusout\",\n relatedTarget,\n };\n\n return FocusEventCtor\n ? new FocusEventCtor(eventName, eventInit)\n : new Event(eventName, eventInit);\n}\n\nfunction notifyToolbarNextReparentedFocusLoss(mountNode: HTMLDivElement) {\n const activeElement = mountNode.ownerDocument.activeElement;\n\n if (mountNode.contains(activeElement)) {\n return;\n }\n\n // Browser focus can move to the document when a portaled toolbar item is\n // reparented, without notifying controls that keep their own focused state.\n const staleFocusTargets = Array.from(\n mountNode.querySelectorAll<HTMLElement>(\n toolbarNextStatefulFocusRootSelector,\n ),\n )\n .map(\n (root) =>\n root.querySelector<HTMLElement>(\"input\") ??\n root.querySelector<HTMLElement>(toolbarNextFocusableSelector),\n )\n .filter((target): target is HTMLElement => target != null);\n\n for (const target of staleFocusTargets) {\n const relatedTarget =\n activeElement instanceof Element ? activeElement : null;\n\n target.dispatchEvent(\n createToolbarNextFocusEvent(\"blur\", target, relatedTarget),\n );\n target.dispatchEvent(\n createToolbarNextFocusEvent(\"focusout\", target, relatedTarget),\n );\n }\n}\n\nfunction getToolbarNextOverflowFocusScrollTarget(target: HTMLElement) {\n const itemRoot = target.closest<HTMLElement>(`[${TOOLBAR_NEXT_ITEM_ATTR}]`);\n const controlRoot = target.closest<HTMLElement>(\n toolbarNextOverflowFocusScrollRootSelector,\n );\n\n return controlRoot && itemRoot?.contains(controlRoot) ? controlRoot : target;\n}\n\nfunction getToolbarNextOverflowPanelInlinePadding(target: HTMLElement) {\n const panelContent = target.closest<HTMLElement>(\n `[${TOOLBAR_NEXT_SCOPE_ROOT_ATTR}]`,\n );\n const styles =\n panelContent?.ownerDocument.defaultView?.getComputedStyle(panelContent);\n\n return {\n left: Number.parseFloat(styles?.paddingLeft ?? \"0\") || 0,\n right: Number.parseFloat(styles?.paddingRight ?? \"0\") || 0,\n };\n}\n\nfunction scrollToolbarNextOverflowTargetIntoView(\n panel: HTMLDivElement | null,\n target: HTMLElement,\n) {\n if (!panel || !panel.contains(target)) {\n return;\n }\n\n const scrollTarget = getToolbarNextOverflowFocusScrollTarget(target);\n const actions = compute(scrollTarget, {\n block: \"nearest\",\n boundary: panel,\n inline: \"nearest\",\n scrollMode: \"if-needed\",\n });\n\n for (const { el, left, top } of actions) {\n if (el === panel) {\n const targetRect = scrollTarget.getBoundingClientRect();\n const panelRect = panel.getBoundingClientRect();\n const viewportLeft = panelRect.left + panel.clientLeft;\n const viewportRight = viewportLeft + panel.clientWidth;\n const padding = getToolbarNextOverflowPanelInlinePadding(scrollTarget);\n const nextLeft =\n targetRect.left < viewportLeft + padding.left\n ? left - padding.left\n : targetRect.right > viewportRight - padding.right\n ? left + padding.right\n : left;\n\n el.scrollLeft = Math.max(0, nextLeft);\n } else {\n el.scrollLeft = left;\n }\n\n el.scrollTop = top;\n }\n}\n\nfunction canSeedOverflowFocusMemory(\n focusMemory: ToolbarNextFocusMemory | null | undefined,\n group: ToolbarNextOverflowGroup,\n): focusMemory is Extract<ToolbarNextFocusMemory, { type: \"item\" }> {\n return (\n focusMemory?.type === \"item\" &&\n group.items.some((item) => item.id === focusMemory.itemId)\n );\n}\n\ninterface ToolbarNextOverflowOwnersProps {\n hostNodes: Record<string, HTMLDivElement | null>;\n items: ToolbarNextOverflowItem[];\n}\n\nfunction ToolbarNextOverflowItemOwner({\n host,\n item,\n}: {\n host: HTMLDivElement | null;\n item: ToolbarNextOverflowItem;\n}) {\n const targetWindow = useWindow();\n const [mountNode, setMountNode] = useState<HTMLDivElement | null>(null);\n const mainToolbarTabIndexMemoryRef = useRef(\n new WeakMap<HTMLElement, string | null>(),\n );\n const lastOverflowBoundaryKeyRef = useRef<string | null>(null);\n const currentOverflowBoundaryKey = getToolbarNextOverflowBoundaryKey(host);\n\n if (host) {\n lastOverflowBoundaryKeyRef.current = currentOverflowBoundaryKey;\n }\n\n const boundaryKey = host\n ? currentOverflowBoundaryKey\n : lastOverflowBoundaryKeyRef.current;\n\n useIsomorphicLayoutEffect(() => {\n const nextMountNode = targetWindow?.document.createElement(\"div\");\n\n if (!nextMountNode) {\n return;\n }\n\n nextMountNode.className = withBaseName(\"contentHost\");\n setMountNode(nextMountNode);\n\n return () => {\n nextMountNode.parentElement?.removeChild(nextMountNode);\n };\n }, [targetWindow]);\n\n useIsomorphicLayoutEffect(() => {\n if (!mountNode) {\n return;\n }\n\n if (host) {\n if (mountNode.parentElement !== host) {\n host.appendChild(mountNode);\n notifyToolbarNextReparentedFocusLoss(mountNode);\n }\n\n const isMainToolbarHost =\n host\n .closest(`[${TOOLBAR_NEXT_SCOPE_ROOT_ATTR}]`)\n ?.getAttribute(TOOLBAR_NEXT_SCOPE_ROOT_ATTR) === \"main\";\n\n if (isMainToolbarHost) {\n const focusableElements = Array.from(\n mountNode.querySelectorAll<HTMLElement>(toolbarNextFocusableSelector),\n );\n\n for (const element of focusableElements) {\n const rememberedTabIndex =\n mainToolbarTabIndexMemoryRef.current.get(element);\n\n if (rememberedTabIndex !== undefined) {\n if (rememberedTabIndex == null) {\n element.removeAttribute(\"tabindex\");\n } else {\n element.setAttribute(\"tabindex\", rememberedTabIndex);\n }\n }\n }\n\n for (const element of focusableElements) {\n mainToolbarTabIndexMemoryRef.current.set(\n element,\n element.getAttribute(\"tabindex\"),\n );\n }\n }\n\n return;\n }\n\n notifyToolbarNextReparentedFocusLoss(mountNode);\n mountNode.parentElement?.removeChild(mountNode);\n }, [host, mountNode]);\n\n if (!mountNode) {\n return null;\n }\n\n const clonedItem = cloneElement(\n item.element as ReactElement<Record<string, ReactNode>>,\n {\n [TOOLBAR_NEXT_GROUP_KEY_ATTR]: item.overflowGroupKey,\n [TOOLBAR_NEXT_ITEM_ATTR]: item.id,\n },\n );\n const itemContent = (\n <ToolbarNextOverflowFloatingComponentProvider boundaryKey={boundaryKey}>\n {clonedItem}\n </ToolbarNextOverflowFloatingComponentProvider>\n );\n\n return createPortal(itemContent, mountNode);\n}\n\nexport function ToolbarNextOverflowOwners({\n hostNodes,\n items,\n}: ToolbarNextOverflowOwnersProps) {\n return (\n <>\n {items.map((item) => (\n <ToolbarNextOverflowItemOwner\n host={hostNodes[item.id] ?? null}\n item={item}\n key={item.id}\n />\n ))}\n </>\n );\n}\n\nfunction cloneDecorations(\n itemId: string,\n decorations: ReactElement[],\n slot: \"leading\" | \"trailing\",\n) {\n return Children.toArray(decorations).flatMap((decoration) => {\n if (!isValidElement(decoration)) {\n return [];\n }\n\n return [\n cloneElement(decoration, {\n key: `${itemId}-${slot}-${String(\n decoration.key ??\n (typeof decoration.type === \"string\"\n ? decoration.type\n : \"decoration\"),\n )}`,\n }),\n ];\n });\n}\n\nexport function ToolbarNextOverflowTriggerContent({\n label,\n named,\n}: {\n label: string;\n named: boolean;\n}) {\n const { OverflowIcon } = useIcon();\n\n if (named) {\n return <>{label}</>;\n }\n\n return <OverflowIcon aria-hidden />;\n}\n\nfunction getOverflowTriggerLabel(group: ToolbarNextOverflowGroup) {\n return group.named\n ? `${group.label} overflow. Hidden controls.`\n : \"Overflow. Hidden controls.\";\n}\n\ninterface ToolbarNextOverflowMenuProps {\n focusMemoryRef?: RefObject<ToolbarNextFocusMemory | null>;\n getItemHostRef: (\n id: string,\n kind: ToolbarNextItemHostKind,\n ) => (node: HTMLDivElement | null) => void;\n group: ToolbarNextOverflowGroup;\n onItemFocus?: (itemId: string, controlIndex: number) => void;\n}\n\nexport function ToolbarNextOverflowMenu({\n focusMemoryRef,\n getItemHostRef,\n group,\n onItemFocus,\n}: ToolbarNextOverflowMenuProps) {\n const panelId = useId();\n const [open, setOpen] = useState(false);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const panelContentRef = useRef<HTMLDivElement>(null);\n const [panelContentNode, setPanelContentNode] =\n useState<HTMLDivElement | null>(null);\n const wasOpenRef = useRef(false);\n const focusedOpenPanelRef = useRef(false);\n const openModalityRef = useRef<ToolbarNextOverflowOpenModality>(null);\n const floatingBoundary = useToolbarNextOverflowFloatingBoundary();\n const {\n focusEntryTarget,\n handleScopeBlur,\n handleScopeFocus,\n handleScopeKeyDown,\n handleScopePointerDown,\n rememberedFocusRef,\n } = useToolbarNextKeyboardNavigation({\n includeTabIndexMinusOne: true,\n items: group.items,\n scopeRef: panelContentRef,\n });\n\n const { refs, x, y, strategy, context, elements } = useFloatingUI({\n open,\n onOpenChange(nextOpen, _, reason) {\n setOpen(nextOpen);\n\n if (!nextOpen) {\n openModalityRef.current = null;\n }\n\n if (!nextOpen && reason === \"escape-key\") {\n scheduleToolbarNextFocus(triggerRef.current);\n }\n },\n placement: \"bottom-end\",\n middleware: [\n offset(1),\n size({\n apply({ elements, availableHeight }) {\n Object.assign(elements.floating.style, {\n maxHeight: `${availableHeight}px`,\n });\n },\n }),\n flip(),\n shift({\n padding: 8,\n }),\n ],\n });\n const { getFloatingProps, getReferenceProps } = useInteractions([\n useClick(context),\n useDismiss(context, {\n escapeKey: false,\n outsidePress(event) {\n return !isTargetInsideOverflowBoundary(\n panelContentRef.current,\n floatingBoundary,\n group.key,\n event.target,\n );\n },\n }),\n ]);\n\n const handleTriggerKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLButtonElement>) => {\n if (!open && [\"Enter\", \" \"].includes(event.key)) {\n event.preventDefault();\n openModalityRef.current = \"keyboard\";\n setOpen(true);\n return;\n }\n\n if (open && event.key === \"Escape\") {\n event.preventDefault();\n setOpen(false);\n scheduleToolbarNextFocus(triggerRef.current);\n }\n },\n [open],\n );\n\n const handleTriggerPointerDown = useCallback(\n (event: ReactPointerEvent<HTMLButtonElement>) => {\n if (!open && event.button === 0) {\n openModalityRef.current = \"pointer\";\n }\n },\n [open],\n );\n\n const handleTriggerMouseDown = useCallback(\n (event: ReactMouseEvent<HTMLButtonElement>) => {\n if (!open && event.button === 0) {\n openModalityRef.current = \"pointer\";\n }\n },\n [open],\n );\n\n const handlePanelKeyDown = useCallback((event: KeyboardEvent) => {\n if (event.key === \"Tab\") {\n const panelContent = panelContentRef.current;\n const target = event.target;\n\n if (\n panelContent &&\n target instanceof HTMLElement &&\n shouldToolbarNextPreserveNativeTab(target)\n ) {\n const focusableElements = getDocumentFocusableElements(\n panelContent.ownerDocument,\n );\n const currentIndex = focusableElements.indexOf(target);\n const nextFocusTarget =\n focusableElements[currentIndex + (event.shiftKey ? -1 : 1)];\n\n if (\n currentIndex !== -1 &&\n nextFocusTarget &&\n panelContent.contains(nextFocusTarget)\n ) {\n return;\n }\n }\n }\n\n if (event.key === \"Tab\" && !event.shiftKey) {\n const toolbarRoot = triggerRef.current?.closest<HTMLElement>(\n `[${TOOLBAR_NEXT_SCOPE_ROOT_ATTR}]`,\n );\n const nextFocusTarget = toolbarRoot\n ? getToolbarNextTabMoveTarget(toolbarRoot, false)\n : null;\n\n if (nextFocusTarget) {\n event.preventDefault();\n event.stopPropagation();\n setOpen(false);\n scheduleToolbarNextFocus(nextFocusTarget);\n }\n\n return;\n }\n\n if (event.key === \"Tab\" && event.shiftKey) {\n event.preventDefault();\n event.stopPropagation();\n setOpen(false);\n scheduleToolbarNextFocus(triggerRef.current);\n return;\n }\n\n if (event.key === \"Escape\") {\n event.preventDefault();\n event.stopPropagation();\n setOpen(false);\n scheduleToolbarNextFocus(triggerRef.current);\n }\n }, []);\n\n const handleTriggerRef = useForkRef<HTMLButtonElement>(\n triggerRef,\n refs.setReference,\n );\n const handlePanelRef = useForkRef<HTMLDivElement>(panelRef, refs.setFloating);\n const handlePanelContentRef = useForkRef<HTMLDivElement>(\n panelContentRef,\n setPanelContentNode,\n );\n const handlePanelFocus = useCallback(\n (event: FocusEvent) => {\n handleScopeFocus(event);\n\n const panelContent = panelContentRef.current;\n const target = event.target;\n\n if (!panelContent || !(target instanceof HTMLElement)) {\n return;\n }\n\n const focusMemory = getToolbarNextFocusMemory(panelContent, target, {\n includeTabIndexMinusOne: true,\n });\n\n if (focusMemory?.type !== \"item\") {\n return;\n }\n\n scrollToolbarNextOverflowTargetIntoView(panelRef.current, target);\n onItemFocus?.(focusMemory.itemId, focusMemory.controlIndex);\n },\n [handleScopeFocus, onItemFocus],\n );\n const { Component: FloatingComponent } = useFloatingComponent();\n\n useEffect(() => {\n if (open && !wasOpenRef.current) {\n const externalFocusMemory = focusMemoryRef?.current;\n\n if (canSeedOverflowFocusMemory(externalFocusMemory, group)) {\n rememberedFocusRef.current = externalFocusMemory;\n }\n\n if (openModalityRef.current !== \"pointer\") {\n focusEntryTarget();\n }\n }\n\n wasOpenRef.current = open;\n }, [focusEntryTarget, focusMemoryRef, group, open, rememberedFocusRef]);\n\n useEffect(() => {\n if (!open || !panelContentNode) {\n return;\n }\n\n const handleFocusIn = (event: FocusEvent) => {\n handlePanelFocus(event);\n };\n const handleFocusOut = (event: FocusEvent) => {\n if (\n isTargetInsideOverflowBoundary(\n panelContentRef.current,\n floatingBoundary,\n group.key,\n event.relatedTarget,\n )\n ) {\n return;\n }\n\n handleScopeBlur(event);\n };\n const handleKeyDownCapture = (event: KeyboardEvent) => {\n handleScopeKeyDown(event);\n };\n const handlePointerDownCapture = (event: PointerEvent) => {\n handleScopePointerDown(event);\n };\n const handleKeyDown = (event: KeyboardEvent) => {\n if (!event.defaultPrevented) {\n handlePanelKeyDown(event);\n }\n };\n\n panelContentNode.addEventListener(\"focusin\", handleFocusIn);\n panelContentNode.addEventListener(\"focusout\", handleFocusOut);\n panelContentNode.addEventListener(\"keydown\", handleKeyDownCapture, true);\n panelContentNode.addEventListener(\n \"pointerdown\",\n handlePointerDownCapture,\n true,\n );\n panelContentNode.addEventListener(\"keydown\", handleKeyDown);\n\n return () => {\n panelContentNode.removeEventListener(\"focusin\", handleFocusIn);\n panelContentNode.removeEventListener(\"focusout\", handleFocusOut);\n panelContentNode.removeEventListener(\n \"keydown\",\n handleKeyDownCapture,\n true,\n );\n panelContentNode.removeEventListener(\n \"pointerdown\",\n handlePointerDownCapture,\n true,\n );\n panelContentNode.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [\n handlePanelFocus,\n handlePanelKeyDown,\n handleScopeBlur,\n handleScopeKeyDown,\n handleScopePointerDown,\n floatingBoundary,\n group.key,\n open,\n panelContentNode,\n ]);\n\n useIsomorphicLayoutEffect(() => {\n if (!open) {\n focusedOpenPanelRef.current = false;\n return;\n }\n\n if (\n !panelContentNode ||\n focusedOpenPanelRef.current ||\n openModalityRef.current === \"pointer\"\n ) {\n return;\n }\n\n const getPanelFocusables = () =>\n getToolbarNextScopeFocusableElements(panelContentNode, {\n includeTabIndexMinusOne: true,\n });\n const focusEntryWhenReady = () => {\n const panelFocusables = getPanelFocusables();\n\n if (panelFocusables.length === 0) {\n return false;\n }\n\n focusedOpenPanelRef.current = true;\n focusEntryTarget();\n return true;\n };\n\n if (focusEntryWhenReady()) {\n return;\n }\n\n const panelWindow = panelContentNode.ownerDocument.defaultView;\n const mutationObserverCtor = panelWindow?.MutationObserver;\n const resizeObserverCtor = panelWindow?.ResizeObserver;\n let mutationObserver: MutationObserver | null = null;\n let resizeObserver: ResizeObserver | null = null;\n\n mutationObserver =\n mutationObserverCtor != null\n ? new mutationObserverCtor(() => {\n if (focusEntryWhenReady()) {\n mutationObserver?.disconnect();\n resizeObserver?.disconnect();\n }\n })\n : null;\n resizeObserver =\n resizeObserverCtor != null\n ? new resizeObserverCtor(() => {\n if (focusEntryWhenReady()) {\n mutationObserver?.disconnect();\n resizeObserver?.disconnect();\n }\n })\n : null;\n\n mutationObserver?.observe(panelContentNode, {\n childList: true,\n subtree: true,\n });\n resizeObserver?.observe(panelContentNode);\n\n return () => {\n mutationObserver?.disconnect();\n resizeObserver?.disconnect();\n };\n }, [focusEntryTarget, open, panelContentNode]);\n\n return (\n <div\n className={withBaseName(\"menu\")}\n data-overflowgroup={group.overflowGroup}\n >\n <Button\n appearance=\"transparent\"\n aria-controls={panelId}\n aria-expanded={open}\n aria-label={getOverflowTriggerLabel(group)}\n className={withBaseName(\"trigger\")}\n {...{\n [TOOLBAR_NEXT_GROUP_KEY_ATTR]: group.key,\n [TOOLBAR_NEXT_OVERFLOW_TRIGGER_ATTR]: \"\",\n }}\n {...getReferenceProps({\n onKeyDown: handleTriggerKeyDown,\n onMouseDown: handleTriggerMouseDown,\n onPointerDown: handleTriggerPointerDown,\n })}\n ref={handleTriggerRef}\n sentiment=\"neutral\"\n >\n <ToolbarNextOverflowTriggerContent\n label={group.label}\n named={group.named}\n />\n </Button>\n <FloatingComponent\n {...getFloatingProps({\n role: \"presentation\",\n })}\n className={withBaseName(\"panel\")}\n focusManagerProps={\n context\n ? {\n context,\n initialFocus: -1,\n returnFocus: false,\n modal: false,\n closeOnFocusOut: false,\n }\n : undefined\n }\n id={panelId}\n left={x ?? 0}\n open={open}\n position={strategy}\n ref={handlePanelRef}\n top={y ?? 0}\n width={elements.floating?.offsetWidth}\n height={elements.floating?.offsetHeight}\n >\n <div\n aria-label={`${group.label} overflow`}\n aria-orientation=\"horizontal\"\n className={withBaseName(\"panelContent\")}\n {...{ [TOOLBAR_NEXT_SCOPE_ROOT_ATTR]: group.key }}\n role=\"toolbar\"\n ref={handlePanelContentRef}\n >\n {group.items.map((item, index) => (\n <div\n className={withBaseName(\"panelItem\")}\n key={`${group.id}-${item.id}`}\n >\n {index > 0 &&\n item.leadingDecorations.length > 0 &&\n cloneDecorations(item.id, item.leadingDecorations, \"leading\")}\n <div\n className={withBaseName(\"itemHost\")}\n ref={open ? getItemHostRef(item.id, \"overflow\") : null}\n />\n {cloneDecorations(item.id, item.trailingDecorations, \"trailing\")}\n </div>\n ))}\n </div>\n </FloatingComponent>\n </div>\n );\n}\n\nexport interface ToolbarNextOverflowContentProps {\n focusMemoryRef?: RefObject<ToolbarNextFocusMemory | null>;\n getItemHostRef: (\n id: string,\n kind: ToolbarNextItemHostKind,\n ) => (node: HTMLDivElement | null) => void;\n getItemRef: (id: string) => (node: HTMLDivElement | null) => void;\n getNamedTriggerRef: (id: string) => (node: HTMLDivElement | null) => void;\n getContentRef: (contentKey: string) => (node: HTMLDivElement | null) => void;\n onItemFocus?: (itemId: string, controlIndex: number) => void;\n overflowGroups: ToolbarNextOverflowGroup[];\n overflowedIds: Set<string>;\n content: ToolbarNextContentModel;\n}\n\nexport function ToolbarNextOverflowContent({\n content,\n focusMemoryRef,\n getItemHostRef,\n getItemRef,\n getNamedTriggerRef,\n getContentRef,\n onItemFocus,\n overflowGroups,\n overflowedIds,\n}: ToolbarNextOverflowContentProps) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-toolbar-next-overflow\",\n css: toolbarNextOverflowCss,\n window: targetWindow,\n });\n\n const { className, ...contentProps } = content.props;\n const handleContentRef = useForkRef(content.ref, getContentRef(content.key));\n const overflowGroupByKey = new Map(\n overflowGroups.map((group) => [group.key, group] as const),\n );\n\n const renderSlots = buildContentOverflowRenderSlots(\n content.items,\n overflowedIds,\n new Set(overflowGroups.map((group) => group.key)),\n );\n\n return (\n <ToolbarContentNext\n {...contentProps}\n data-implicit={content.implicit || undefined}\n className={clsx(className, withBaseName(\"content\"))}\n position={content.position}\n ref={handleContentRef}\n >\n {renderSlots.map(\n ({\n item,\n overflowed,\n showLeadingDecorations,\n showTrailingDecorations,\n triggerGroupKey,\n }) => {\n const triggerGroup =\n triggerGroupKey != null\n ? overflowGroupByKey.get(triggerGroupKey)\n : undefined;\n\n return (\n <div\n className={withBaseName(\"slot\")}\n data-align={item.align}\n data-priority={item.overflowPriority}\n key={\n triggerGroup\n ? `${content.key}-${triggerGroup.id}-anchor-${item.id}`\n : item.id\n }\n ref={\n triggerGroup ? getNamedTriggerRef(item.id) : getItemRef(item.id)\n }\n >\n {showLeadingDecorations\n ? cloneDecorations(item.id, item.leadingDecorations, \"leading\")\n : null}\n {!overflowed ? (\n <div className={withBaseName(\"item\")}>\n <div\n className={withBaseName(\"itemHost\")}\n ref={getItemHostRef(item.id, \"main\")}\n />\n </div>\n ) : null}\n {triggerGroup ? (\n <div className={withBaseName(\"item\")}>\n <ToolbarNextOverflowMenu\n focusMemoryRef={focusMemoryRef}\n getItemHostRef={getItemHostRef}\n group={triggerGroup}\n onItemFocus={onItemFocus}\n />\n </div>\n ) : null}\n {showTrailingDecorations\n ? cloneDecorations(\n item.id,\n item.trailingDecorations,\n \"trailing\",\n )\n : null}\n </div>\n );\n },\n )}\n </ToolbarContentNext>\n );\n}\n"],"names":["elements","_a","toolbarNextOverflowCss"],"mappings":"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"}
|
|
@@ -271,7 +271,7 @@ function isToolbarNextToggleGroupButton(target) {
|
|
|
271
271
|
return target.tagName === "BUTTON" && target.closest(".saltToggleButtonGroup") != null && isToolbarNextFocusable(target, { includeTabIndexMinusOne: true });
|
|
272
272
|
}
|
|
273
273
|
function getToolbarNextKeyboardPolicy(target) {
|
|
274
|
-
if (target.isContentEditable || isPlainTextInput(target) || isComboBoxInput(target)) {
|
|
274
|
+
if (target.isContentEditable || isPlainTextInput(target) || isComboBoxInput(target) || isPillInputPill(target)) {
|
|
275
275
|
return {
|
|
276
276
|
preserveHorizontalArrows: true,
|
|
277
277
|
preserveNativeTab: true
|
|
@@ -297,6 +297,9 @@ function getToolbarNextKeyboardPolicy(target) {
|
|
|
297
297
|
function isComboBoxInput(target) {
|
|
298
298
|
return target.tagName === "INPUT" && target.closest('[role="combobox"], .saltComboBox') != null;
|
|
299
299
|
}
|
|
300
|
+
function isPillInputPill(target) {
|
|
301
|
+
return target.tagName === "BUTTON" && target.classList.contains("saltPill") && target.closest(".saltPillInput") != null;
|
|
302
|
+
}
|
|
300
303
|
function isDropdownControl(target) {
|
|
301
304
|
return target.closest(".saltDropdown") != null;
|
|
302
305
|
}
|
|
@@ -340,10 +343,25 @@ function isToolbarNextFocusable(target, { includeTabIndexMinusOne = false } = {}
|
|
|
340
343
|
}
|
|
341
344
|
return target.getClientRects().length > 0;
|
|
342
345
|
}
|
|
346
|
+
const toolbarNextFocusEntryOverrides = [
|
|
347
|
+
{ root: ".saltComboBox", interactive: 'input[role="combobox"]' }
|
|
348
|
+
];
|
|
343
349
|
function focusToolbarNextElement(target) {
|
|
344
|
-
|
|
345
|
-
|
|
350
|
+
const focusTarget = resolveToolbarNextFocusEntryTarget(target);
|
|
351
|
+
if (focusTarget == null ? void 0 : focusTarget.isConnected) {
|
|
352
|
+
focusTarget.focus({ preventScroll: true });
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
function resolveToolbarNextFocusEntryTarget(target) {
|
|
356
|
+
if (!target) {
|
|
357
|
+
return target;
|
|
358
|
+
}
|
|
359
|
+
for (const { root, interactive } of toolbarNextFocusEntryOverrides) {
|
|
360
|
+
if (target.matches(root)) {
|
|
361
|
+
return target.querySelector(interactive) ?? target;
|
|
362
|
+
}
|
|
346
363
|
}
|
|
364
|
+
return target;
|
|
347
365
|
}
|
|
348
366
|
function scheduleToolbarNextFocus(target, targetWindow = target == null ? void 0 : target.ownerDocument.defaultView) {
|
|
349
367
|
if (!target) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolbarNextKeyboardUtils.js","sources":["../src/toolbar-next/toolbarNextKeyboardUtils.ts"],"sourcesContent":["import type { ToolbarNextOverflowItem } from \"./toolbarNextUtils\";\n\nexport const TOOLBAR_NEXT_SCOPE_ROOT_ATTR = \"data-salt-toolbar-next-scope-root\";\nexport const TOOLBAR_NEXT_ITEM_ATTR = \"data-salt-toolbar-next-item-id\";\nexport const TOOLBAR_NEXT_GROUP_KEY_ATTR =\n \"data-salt-toolbar-next-overflow-group-key\";\nexport const TOOLBAR_NEXT_OVERFLOW_TRIGGER_ATTR =\n \"data-salt-toolbar-next-overflow-trigger\";\n\nexport const toolbarNextFocusableSelector = [\n \"button\",\n \"[href]\",\n \"input\",\n \"select\",\n \"textarea\",\n \"[tabindex]\",\n].join(\", \");\n\nconst textEntryInputTypes = new Set([\n \"\",\n \"date\",\n \"datetime-local\",\n \"email\",\n \"month\",\n \"number\",\n \"password\",\n \"search\",\n \"tel\",\n \"text\",\n \"time\",\n \"url\",\n \"week\",\n]);\n\nexport type ToolbarNextFocusMemory =\n | {\n controlIndex: number;\n itemId: string;\n scopeIndex: number;\n type: \"item\";\n }\n | {\n groupKey: string;\n scopeIndex: number;\n type: \"overflow-trigger\";\n }\n | {\n scopeIndex: number;\n type: \"scope\";\n };\n\nexport interface ToolbarNextFocusableOptions {\n includeTabIndexMinusOne?: boolean;\n}\n\ninterface ToolbarNextKeyboardPolicy {\n preserveHorizontalArrows: boolean;\n preserveNativeTab: boolean;\n}\n\nexport function getClosestToolbarNextScopeRoot(target: EventTarget | null) {\n if (!(target instanceof Element)) {\n return null;\n }\n\n return target.closest<HTMLElement>(`[${TOOLBAR_NEXT_SCOPE_ROOT_ATTR}]`);\n}\n\nexport function getToolbarNextItemId(target: Element | null) {\n return (\n target\n ?.closest<HTMLElement>(`[${TOOLBAR_NEXT_ITEM_ATTR}]`)\n ?.getAttribute(TOOLBAR_NEXT_ITEM_ATTR) ?? null\n );\n}\n\nexport function isToolbarNextFocusFromPointerTarget(\n focusTarget: HTMLElement,\n pointerTarget: EventTarget | null,\n) {\n if (!(pointerTarget instanceof Node)) {\n return false;\n }\n\n if (focusTarget === pointerTarget || focusTarget.contains(pointerTarget)) {\n return true;\n }\n\n if (!(pointerTarget instanceof Element)) {\n return false;\n }\n\n const focusItemId = getToolbarNextItemId(focusTarget);\n const pointerItemId = getToolbarNextItemId(pointerTarget);\n\n return focusItemId != null && focusItemId === pointerItemId;\n}\n\nexport function getToolbarNextScopeFocusableElements(\n scopeRoot: HTMLElement,\n options: ToolbarNextFocusableOptions = {},\n) {\n return Array.from(\n scopeRoot.querySelectorAll<HTMLElement>(toolbarNextFocusableSelector),\n ).filter((element) => {\n return (\n getClosestToolbarNextScopeRoot(element) === scopeRoot &&\n (isToolbarNextFocusable(element, options) ||\n isToolbarNextToggleGroupButton(element))\n );\n });\n}\n\nexport function getToolbarNextFocusMemory(\n scopeRoot: HTMLElement,\n target: HTMLElement,\n options: ToolbarNextFocusableOptions = {},\n): ToolbarNextFocusMemory | null {\n const scopeElements = getToolbarNextScopeFocusableElements(\n scopeRoot,\n options,\n );\n const scopeIndex = scopeElements.indexOf(target);\n if (scopeIndex === -1) {\n return null;\n }\n\n const groupTrigger = target.closest<HTMLElement>(\n `[${TOOLBAR_NEXT_OVERFLOW_TRIGGER_ATTR}]`,\n );\n const groupKey = groupTrigger?.getAttribute(TOOLBAR_NEXT_GROUP_KEY_ATTR);\n\n if (groupKey) {\n return {\n groupKey,\n scopeIndex,\n type: \"overflow-trigger\",\n };\n }\n\n const itemRoot = target.closest<HTMLElement>(`[${TOOLBAR_NEXT_ITEM_ATTR}]`);\n const itemId = itemRoot?.getAttribute(TOOLBAR_NEXT_ITEM_ATTR);\n\n if (itemRoot && itemId) {\n const itemElements = getToolbarNextItemFocusableElements(\n itemRoot,\n scopeRoot,\n options,\n );\n const controlIndex = itemElements.indexOf(target);\n\n return {\n controlIndex: Math.max(controlIndex, 0),\n itemId,\n scopeIndex,\n type: \"item\",\n };\n }\n\n return {\n scopeIndex,\n type: \"scope\",\n };\n}\n\nexport function resolveToolbarNextFocusTarget(\n scopeRoot: HTMLElement,\n focusMemory: ToolbarNextFocusMemory | null,\n {\n includeTabIndexMinusOne,\n items = [],\n overflowedIds,\n }: {\n items?: ToolbarNextOverflowItem[];\n includeTabIndexMinusOne?: boolean;\n overflowedIds?: Set<string>;\n } = {},\n) {\n const focusableOptions = {\n includeTabIndexMinusOne,\n };\n\n if (!focusMemory) {\n return (\n getToolbarNextScopeFocusableElements(scopeRoot, focusableOptions)[0] ??\n null\n );\n }\n\n const fallback = getToolbarNextFocusFallback(\n scopeRoot,\n focusMemory.scopeIndex,\n focusableOptions,\n );\n\n if (focusMemory.type === \"overflow-trigger\") {\n const trigger = getToolbarNextOverflowTriggerElement(\n scopeRoot,\n focusMemory.groupKey,\n );\n\n if (trigger) {\n return trigger;\n }\n\n const firstVisibleItem = items.find((item) => {\n return item.overflowGroupKey === focusMemory.groupKey;\n });\n\n if (firstVisibleItem) {\n return (\n getToolbarNextFocusableElementForItem(\n scopeRoot,\n firstVisibleItem.id,\n 0,\n focusableOptions,\n ) ?? fallback\n );\n }\n\n return fallback;\n }\n\n if (focusMemory.type === \"item\") {\n const visibleItemTarget = getToolbarNextFocusableElementForItem(\n scopeRoot,\n focusMemory.itemId,\n focusMemory.controlIndex,\n focusableOptions,\n );\n\n if (visibleItemTarget) {\n return visibleItemTarget;\n }\n\n const item = items.find((entry) => entry.id === focusMemory.itemId);\n\n if (item && overflowedIds?.has(item.id)) {\n return (\n getToolbarNextOverflowTriggerElement(\n scopeRoot,\n item.overflowGroupKey,\n ) ?? fallback\n );\n }\n\n return fallback;\n }\n\n return fallback;\n}\n\nexport function getToolbarNextDirectionalMoveTarget(\n scopeRoot: HTMLElement,\n target: HTMLElement,\n key: string,\n options: ToolbarNextFocusableOptions = {},\n) {\n if (key !== \"ArrowLeft\" && key !== \"ArrowRight\") {\n return null;\n }\n\n if (getToolbarNextKeyboardPolicy(target).preserveHorizontalArrows) {\n return null;\n }\n\n const toggleGroupButtons = getToggleGroupButtons(target);\n\n if (toggleGroupButtons.length > 0) {\n const visualDelta = getVisualDelta(scopeRoot, key);\n const currentIndex = toggleGroupButtons.indexOf(target);\n\n if (\n currentIndex === -1 ||\n !isToggleGroupBoundary(\n currentIndex,\n toggleGroupButtons.length,\n visualDelta,\n )\n ) {\n return null;\n }\n }\n\n const scopeElements = getToolbarNextScopeFocusableElements(\n scopeRoot,\n options,\n );\n const currentIndex = scopeElements.indexOf(target);\n\n if (currentIndex === -1 || scopeElements.length <= 1) {\n return null;\n }\n\n const nextIndex =\n (currentIndex + getVisualDelta(scopeRoot, key) + scopeElements.length) %\n scopeElements.length;\n\n return scopeElements[nextIndex] ?? null;\n}\n\nexport function getToolbarNextTabMoveTarget(\n scopeRoot: HTMLElement,\n shiftKey: boolean,\n) {\n const focusableElements = getDocumentFocusableElements(\n scopeRoot.ownerDocument,\n );\n\n if (shiftKey) {\n for (let index = focusableElements.length - 1; index >= 0; index -= 1) {\n const element = focusableElements[index];\n\n if (!element || scopeRoot.contains(element)) {\n continue;\n }\n\n if (\n element.compareDocumentPosition(scopeRoot) &\n Node.DOCUMENT_POSITION_FOLLOWING\n ) {\n return element;\n }\n }\n\n return null;\n }\n\n return (\n focusableElements.find((element) => {\n return (\n !scopeRoot.contains(element) &&\n !!(\n scopeRoot.compareDocumentPosition(element) &\n Node.DOCUMENT_POSITION_FOLLOWING\n )\n );\n }) ?? null\n );\n}\n\nexport function shouldToolbarNextPreserveNativeTab(target: HTMLElement) {\n return getToolbarNextKeyboardPolicy(target).preserveNativeTab;\n}\n\nfunction getToolbarNextItemFocusableElements(\n itemRoot: HTMLElement,\n scopeRoot: HTMLElement,\n options: ToolbarNextFocusableOptions = {},\n) {\n return Array.from(\n itemRoot.querySelectorAll<HTMLElement>(toolbarNextFocusableSelector),\n ).filter((element) => {\n return (\n getClosestToolbarNextScopeRoot(element) === scopeRoot &&\n (isToolbarNextFocusable(element, options) ||\n isToolbarNextToggleGroupButton(element))\n );\n });\n}\n\nfunction getToolbarNextFocusableElementForItem(\n scopeRoot: HTMLElement,\n itemId: string,\n controlIndex: number,\n options: ToolbarNextFocusableOptions = {},\n) {\n const itemRoot = scopeRoot.querySelector<HTMLElement>(\n `[${TOOLBAR_NEXT_ITEM_ATTR}=\"${itemId}\"]`,\n );\n\n if (!itemRoot) {\n return null;\n }\n\n const itemElements = getToolbarNextItemFocusableElements(\n itemRoot,\n scopeRoot,\n options,\n );\n\n return (\n itemElements[Math.min(controlIndex, itemElements.length - 1)] ??\n itemElements[0] ??\n null\n );\n}\n\nfunction getToolbarNextOverflowTriggerElement(\n scopeRoot: HTMLElement,\n groupKey: string,\n) {\n return scopeRoot.querySelector<HTMLElement>(\n `[${TOOLBAR_NEXT_OVERFLOW_TRIGGER_ATTR}][${TOOLBAR_NEXT_GROUP_KEY_ATTR}=\"${groupKey}\"]`,\n );\n}\n\nfunction getToolbarNextFocusFallback(\n scopeRoot: HTMLElement,\n rememberedIndex: number,\n options: ToolbarNextFocusableOptions = {},\n) {\n const focusableElements = getToolbarNextScopeFocusableElements(\n scopeRoot,\n options,\n );\n\n if (focusableElements.length === 0) {\n return null;\n }\n\n return (\n focusableElements[\n Math.max(0, Math.min(rememberedIndex, focusableElements.length - 1))\n ] ?? focusableElements[0]\n );\n}\n\nfunction getVisualDelta(scopeRoot: HTMLElement, key: string) {\n const direction =\n scopeRoot.ownerDocument.defaultView?.getComputedStyle(scopeRoot).direction;\n\n if (key === \"ArrowRight\") {\n return direction === \"rtl\" ? -1 : 1;\n }\n\n return direction === \"rtl\" ? 1 : -1;\n}\n\nfunction isToggleGroupBoundary(\n currentIndex: number,\n length: number,\n visualDelta: number,\n) {\n if (visualDelta > 0) {\n return currentIndex === length - 1;\n }\n\n return currentIndex === 0;\n}\n\nfunction getToggleGroupButtons(target: HTMLElement) {\n const toggleGroup = target.closest<HTMLElement>(\".saltToggleButtonGroup\");\n\n if (!toggleGroup || target.tagName !== \"BUTTON\") {\n return [];\n }\n\n return Array.from(toggleGroup.querySelectorAll<HTMLElement>(\"button\")).filter(\n (button) =>\n isToolbarNextFocusable(button, { includeTabIndexMinusOne: true }),\n );\n}\n\nfunction isToolbarNextToggleGroupButton(target: HTMLElement) {\n return (\n target.tagName === \"BUTTON\" &&\n target.closest(\".saltToggleButtonGroup\") != null &&\n isToolbarNextFocusable(target, { includeTabIndexMinusOne: true })\n );\n}\n\nfunction getToolbarNextKeyboardPolicy(\n target: HTMLElement,\n): ToolbarNextKeyboardPolicy {\n if (\n target.isContentEditable ||\n isPlainTextInput(target) ||\n isComboBoxInput(target)\n ) {\n return {\n preserveHorizontalArrows: true,\n preserveNativeTab: true,\n };\n }\n\n if (isDropdownControl(target)) {\n return {\n preserveHorizontalArrows: false,\n preserveNativeTab: false,\n };\n }\n\n if (\n isSelectLikeControl(target) ||\n target.closest(\".saltDatePickerTrigger\") != null\n ) {\n return {\n preserveHorizontalArrows: false,\n preserveNativeTab: true,\n };\n }\n\n return {\n preserveHorizontalArrows: false,\n preserveNativeTab: false,\n };\n}\n\nfunction isComboBoxInput(target: HTMLElement) {\n return (\n target.tagName === \"INPUT\" &&\n target.closest('[role=\"combobox\"], .saltComboBox') != null\n );\n}\n\nfunction isDropdownControl(target: HTMLElement) {\n return target.closest(\".saltDropdown\") != null;\n}\n\nfunction isSelectLikeControl(target: HTMLElement) {\n return (\n target.tagName === \"SELECT\" ||\n target.closest('[role=\"combobox\"], .saltComboBox, .saltDropdown') != null\n );\n}\n\nfunction isPlainTextInput(target: HTMLElement) {\n if (target.tagName === \"TEXTAREA\") {\n return true;\n }\n\n if (target.tagName !== \"INPUT\") {\n return false;\n }\n\n return textEntryInputTypes.has(\n (target as HTMLInputElement).type.toLowerCase(),\n );\n}\n\nfunction isNativeDisabledFormControl(target: HTMLElement) {\n return (\n \"disabled\" in target &&\n (target as HTMLButtonElement | HTMLInputElement).disabled\n );\n}\n\nexport function isToolbarNextFocusable(\n target: HTMLElement,\n { includeTabIndexMinusOne = false }: ToolbarNextFocusableOptions = {},\n) {\n if (isNativeDisabledFormControl(target)) {\n return false;\n }\n\n if (target.getAttribute(\"aria-hidden\") === \"true\") {\n return false;\n }\n\n if (!includeTabIndexMinusOne && target.getAttribute(\"tabindex\") === \"-1\") {\n return false;\n }\n\n if (target.hidden) {\n return false;\n }\n\n const win = target.ownerDocument.defaultView;\n\n if (!win) {\n return false;\n }\n\n const styles = win.getComputedStyle(target);\n\n if (styles.display === \"none\" || styles.visibility === \"hidden\") {\n return false;\n }\n\n return target.getClientRects().length > 0;\n}\n\nexport function focusToolbarNextElement(\n target: HTMLElement | null | undefined,\n) {\n if (target?.isConnected) {\n target.focus({ preventScroll: true });\n }\n}\n\nexport function scheduleToolbarNextFocus(\n target: HTMLElement | null | undefined,\n targetWindow = target?.ownerDocument.defaultView,\n) {\n if (!target) {\n return () => undefined;\n }\n\n if (targetWindow?.requestAnimationFrame) {\n const frame = targetWindow.requestAnimationFrame(() => {\n focusToolbarNextElement(target);\n });\n\n return () => {\n targetWindow.cancelAnimationFrame(frame);\n };\n }\n\n queueMicrotask(() => {\n focusToolbarNextElement(target);\n });\n\n return () => undefined;\n}\n\nexport function getDocumentFocusableElements(ownerDocument: Document) {\n return Array.from(\n ownerDocument.querySelectorAll<HTMLElement>(toolbarNextFocusableSelector),\n ).filter((element) => isToolbarNextFocusable(element));\n}\n"],"names":["currentIndex"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"toolbarNextKeyboardUtils.js","sources":["../src/toolbar-next/toolbarNextKeyboardUtils.ts"],"sourcesContent":["import type { ToolbarNextOverflowItem } from \"./toolbarNextUtils\";\n\nexport const TOOLBAR_NEXT_SCOPE_ROOT_ATTR = \"data-salt-toolbar-next-scope-root\";\nexport const TOOLBAR_NEXT_ITEM_ATTR = \"data-salt-toolbar-next-item-id\";\nexport const TOOLBAR_NEXT_GROUP_KEY_ATTR =\n \"data-salt-toolbar-next-overflow-group-key\";\nexport const TOOLBAR_NEXT_OVERFLOW_TRIGGER_ATTR =\n \"data-salt-toolbar-next-overflow-trigger\";\n\nexport const toolbarNextFocusableSelector = [\n \"button\",\n \"[href]\",\n \"input\",\n \"select\",\n \"textarea\",\n \"[tabindex]\",\n].join(\", \");\n\nconst textEntryInputTypes = new Set([\n \"\",\n \"date\",\n \"datetime-local\",\n \"email\",\n \"month\",\n \"number\",\n \"password\",\n \"search\",\n \"tel\",\n \"text\",\n \"time\",\n \"url\",\n \"week\",\n]);\n\nexport type ToolbarNextFocusMemory =\n | {\n controlIndex: number;\n itemId: string;\n scopeIndex: number;\n type: \"item\";\n }\n | {\n groupKey: string;\n scopeIndex: number;\n type: \"overflow-trigger\";\n }\n | {\n scopeIndex: number;\n type: \"scope\";\n };\n\nexport interface ToolbarNextFocusableOptions {\n includeTabIndexMinusOne?: boolean;\n}\n\ninterface ToolbarNextKeyboardPolicy {\n preserveHorizontalArrows: boolean;\n preserveNativeTab: boolean;\n}\n\nexport function getClosestToolbarNextScopeRoot(target: EventTarget | null) {\n if (!(target instanceof Element)) {\n return null;\n }\n\n return target.closest<HTMLElement>(`[${TOOLBAR_NEXT_SCOPE_ROOT_ATTR}]`);\n}\n\nexport function getToolbarNextItemId(target: Element | null) {\n return (\n target\n ?.closest<HTMLElement>(`[${TOOLBAR_NEXT_ITEM_ATTR}]`)\n ?.getAttribute(TOOLBAR_NEXT_ITEM_ATTR) ?? null\n );\n}\n\nexport function isToolbarNextFocusFromPointerTarget(\n focusTarget: HTMLElement,\n pointerTarget: EventTarget | null,\n) {\n if (!(pointerTarget instanceof Node)) {\n return false;\n }\n\n if (focusTarget === pointerTarget || focusTarget.contains(pointerTarget)) {\n return true;\n }\n\n if (!(pointerTarget instanceof Element)) {\n return false;\n }\n\n const focusItemId = getToolbarNextItemId(focusTarget);\n const pointerItemId = getToolbarNextItemId(pointerTarget);\n\n return focusItemId != null && focusItemId === pointerItemId;\n}\n\nexport function getToolbarNextScopeFocusableElements(\n scopeRoot: HTMLElement,\n options: ToolbarNextFocusableOptions = {},\n) {\n return Array.from(\n scopeRoot.querySelectorAll<HTMLElement>(toolbarNextFocusableSelector),\n ).filter((element) => {\n return (\n getClosestToolbarNextScopeRoot(element) === scopeRoot &&\n (isToolbarNextFocusable(element, options) ||\n isToolbarNextToggleGroupButton(element))\n );\n });\n}\n\nexport function getToolbarNextFocusMemory(\n scopeRoot: HTMLElement,\n target: HTMLElement,\n options: ToolbarNextFocusableOptions = {},\n): ToolbarNextFocusMemory | null {\n const scopeElements = getToolbarNextScopeFocusableElements(\n scopeRoot,\n options,\n );\n const scopeIndex = scopeElements.indexOf(target);\n if (scopeIndex === -1) {\n return null;\n }\n\n const groupTrigger = target.closest<HTMLElement>(\n `[${TOOLBAR_NEXT_OVERFLOW_TRIGGER_ATTR}]`,\n );\n const groupKey = groupTrigger?.getAttribute(TOOLBAR_NEXT_GROUP_KEY_ATTR);\n\n if (groupKey) {\n return {\n groupKey,\n scopeIndex,\n type: \"overflow-trigger\",\n };\n }\n\n const itemRoot = target.closest<HTMLElement>(`[${TOOLBAR_NEXT_ITEM_ATTR}]`);\n const itemId = itemRoot?.getAttribute(TOOLBAR_NEXT_ITEM_ATTR);\n\n if (itemRoot && itemId) {\n const itemElements = getToolbarNextItemFocusableElements(\n itemRoot,\n scopeRoot,\n options,\n );\n const controlIndex = itemElements.indexOf(target);\n\n return {\n controlIndex: Math.max(controlIndex, 0),\n itemId,\n scopeIndex,\n type: \"item\",\n };\n }\n\n return {\n scopeIndex,\n type: \"scope\",\n };\n}\n\nexport function resolveToolbarNextFocusTarget(\n scopeRoot: HTMLElement,\n focusMemory: ToolbarNextFocusMemory | null,\n {\n includeTabIndexMinusOne,\n items = [],\n overflowedIds,\n }: {\n items?: ToolbarNextOverflowItem[];\n includeTabIndexMinusOne?: boolean;\n overflowedIds?: Set<string>;\n } = {},\n) {\n const focusableOptions = {\n includeTabIndexMinusOne,\n };\n\n if (!focusMemory) {\n return (\n getToolbarNextScopeFocusableElements(scopeRoot, focusableOptions)[0] ??\n null\n );\n }\n\n const fallback = getToolbarNextFocusFallback(\n scopeRoot,\n focusMemory.scopeIndex,\n focusableOptions,\n );\n\n if (focusMemory.type === \"overflow-trigger\") {\n const trigger = getToolbarNextOverflowTriggerElement(\n scopeRoot,\n focusMemory.groupKey,\n );\n\n if (trigger) {\n return trigger;\n }\n\n const firstVisibleItem = items.find((item) => {\n return item.overflowGroupKey === focusMemory.groupKey;\n });\n\n if (firstVisibleItem) {\n return (\n getToolbarNextFocusableElementForItem(\n scopeRoot,\n firstVisibleItem.id,\n 0,\n focusableOptions,\n ) ?? fallback\n );\n }\n\n return fallback;\n }\n\n if (focusMemory.type === \"item\") {\n const visibleItemTarget = getToolbarNextFocusableElementForItem(\n scopeRoot,\n focusMemory.itemId,\n focusMemory.controlIndex,\n focusableOptions,\n );\n\n if (visibleItemTarget) {\n return visibleItemTarget;\n }\n\n const item = items.find((entry) => entry.id === focusMemory.itemId);\n\n if (item && overflowedIds?.has(item.id)) {\n return (\n getToolbarNextOverflowTriggerElement(\n scopeRoot,\n item.overflowGroupKey,\n ) ?? fallback\n );\n }\n\n return fallback;\n }\n\n return fallback;\n}\n\nexport function getToolbarNextDirectionalMoveTarget(\n scopeRoot: HTMLElement,\n target: HTMLElement,\n key: string,\n options: ToolbarNextFocusableOptions = {},\n) {\n if (key !== \"ArrowLeft\" && key !== \"ArrowRight\") {\n return null;\n }\n\n if (getToolbarNextKeyboardPolicy(target).preserveHorizontalArrows) {\n return null;\n }\n\n const toggleGroupButtons = getToggleGroupButtons(target);\n\n if (toggleGroupButtons.length > 0) {\n const visualDelta = getVisualDelta(scopeRoot, key);\n const currentIndex = toggleGroupButtons.indexOf(target);\n\n if (\n currentIndex === -1 ||\n !isToggleGroupBoundary(\n currentIndex,\n toggleGroupButtons.length,\n visualDelta,\n )\n ) {\n return null;\n }\n }\n\n const scopeElements = getToolbarNextScopeFocusableElements(\n scopeRoot,\n options,\n );\n const currentIndex = scopeElements.indexOf(target);\n\n if (currentIndex === -1 || scopeElements.length <= 1) {\n return null;\n }\n\n const nextIndex =\n (currentIndex + getVisualDelta(scopeRoot, key) + scopeElements.length) %\n scopeElements.length;\n\n return scopeElements[nextIndex] ?? null;\n}\n\nexport function getToolbarNextTabMoveTarget(\n scopeRoot: HTMLElement,\n shiftKey: boolean,\n) {\n const focusableElements = getDocumentFocusableElements(\n scopeRoot.ownerDocument,\n );\n\n if (shiftKey) {\n for (let index = focusableElements.length - 1; index >= 0; index -= 1) {\n const element = focusableElements[index];\n\n if (!element || scopeRoot.contains(element)) {\n continue;\n }\n\n if (\n element.compareDocumentPosition(scopeRoot) &\n Node.DOCUMENT_POSITION_FOLLOWING\n ) {\n return element;\n }\n }\n\n return null;\n }\n\n return (\n focusableElements.find((element) => {\n return (\n !scopeRoot.contains(element) &&\n !!(\n scopeRoot.compareDocumentPosition(element) &\n Node.DOCUMENT_POSITION_FOLLOWING\n )\n );\n }) ?? null\n );\n}\n\nexport function shouldToolbarNextPreserveNativeTab(target: HTMLElement) {\n return getToolbarNextKeyboardPolicy(target).preserveNativeTab;\n}\n\nfunction getToolbarNextItemFocusableElements(\n itemRoot: HTMLElement,\n scopeRoot: HTMLElement,\n options: ToolbarNextFocusableOptions = {},\n) {\n return Array.from(\n itemRoot.querySelectorAll<HTMLElement>(toolbarNextFocusableSelector),\n ).filter((element) => {\n return (\n getClosestToolbarNextScopeRoot(element) === scopeRoot &&\n (isToolbarNextFocusable(element, options) ||\n isToolbarNextToggleGroupButton(element))\n );\n });\n}\n\nfunction getToolbarNextFocusableElementForItem(\n scopeRoot: HTMLElement,\n itemId: string,\n controlIndex: number,\n options: ToolbarNextFocusableOptions = {},\n) {\n const itemRoot = scopeRoot.querySelector<HTMLElement>(\n `[${TOOLBAR_NEXT_ITEM_ATTR}=\"${itemId}\"]`,\n );\n\n if (!itemRoot) {\n return null;\n }\n\n const itemElements = getToolbarNextItemFocusableElements(\n itemRoot,\n scopeRoot,\n options,\n );\n\n return (\n itemElements[Math.min(controlIndex, itemElements.length - 1)] ??\n itemElements[0] ??\n null\n );\n}\n\nfunction getToolbarNextOverflowTriggerElement(\n scopeRoot: HTMLElement,\n groupKey: string,\n) {\n return scopeRoot.querySelector<HTMLElement>(\n `[${TOOLBAR_NEXT_OVERFLOW_TRIGGER_ATTR}][${TOOLBAR_NEXT_GROUP_KEY_ATTR}=\"${groupKey}\"]`,\n );\n}\n\nfunction getToolbarNextFocusFallback(\n scopeRoot: HTMLElement,\n rememberedIndex: number,\n options: ToolbarNextFocusableOptions = {},\n) {\n const focusableElements = getToolbarNextScopeFocusableElements(\n scopeRoot,\n options,\n );\n\n if (focusableElements.length === 0) {\n return null;\n }\n\n return (\n focusableElements[\n Math.max(0, Math.min(rememberedIndex, focusableElements.length - 1))\n ] ?? focusableElements[0]\n );\n}\n\nfunction getVisualDelta(scopeRoot: HTMLElement, key: string) {\n const direction =\n scopeRoot.ownerDocument.defaultView?.getComputedStyle(scopeRoot).direction;\n\n if (key === \"ArrowRight\") {\n return direction === \"rtl\" ? -1 : 1;\n }\n\n return direction === \"rtl\" ? 1 : -1;\n}\n\nfunction isToggleGroupBoundary(\n currentIndex: number,\n length: number,\n visualDelta: number,\n) {\n if (visualDelta > 0) {\n return currentIndex === length - 1;\n }\n\n return currentIndex === 0;\n}\n\nfunction getToggleGroupButtons(target: HTMLElement) {\n const toggleGroup = target.closest<HTMLElement>(\".saltToggleButtonGroup\");\n\n if (!toggleGroup || target.tagName !== \"BUTTON\") {\n return [];\n }\n\n return Array.from(toggleGroup.querySelectorAll<HTMLElement>(\"button\")).filter(\n (button) =>\n isToolbarNextFocusable(button, { includeTabIndexMinusOne: true }),\n );\n}\n\nfunction isToolbarNextToggleGroupButton(target: HTMLElement) {\n return (\n target.tagName === \"BUTTON\" &&\n target.closest(\".saltToggleButtonGroup\") != null &&\n isToolbarNextFocusable(target, { includeTabIndexMinusOne: true })\n );\n}\n\nfunction getToolbarNextKeyboardPolicy(\n target: HTMLElement,\n): ToolbarNextKeyboardPolicy {\n if (\n target.isContentEditable ||\n isPlainTextInput(target) ||\n isComboBoxInput(target) ||\n isPillInputPill(target)\n ) {\n return {\n preserveHorizontalArrows: true,\n preserveNativeTab: true,\n };\n }\n\n if (isDropdownControl(target)) {\n return {\n preserveHorizontalArrows: false,\n preserveNativeTab: false,\n };\n }\n\n if (\n isSelectLikeControl(target) ||\n target.closest(\".saltDatePickerTrigger\") != null\n ) {\n return {\n preserveHorizontalArrows: false,\n preserveNativeTab: true,\n };\n }\n\n return {\n preserveHorizontalArrows: false,\n preserveNativeTab: false,\n };\n}\n\nfunction isComboBoxInput(target: HTMLElement) {\n return (\n target.tagName === \"INPUT\" &&\n target.closest('[role=\"combobox\"], .saltComboBox') != null\n );\n}\n\nfunction isPillInputPill(target: HTMLElement) {\n return (\n target.tagName === \"BUTTON\" &&\n target.classList.contains(\"saltPill\") &&\n target.closest(\".saltPillInput\") != null\n );\n}\n\nfunction isDropdownControl(target: HTMLElement) {\n return target.closest(\".saltDropdown\") != null;\n}\n\nfunction isSelectLikeControl(target: HTMLElement) {\n return (\n target.tagName === \"SELECT\" ||\n target.closest('[role=\"combobox\"], .saltComboBox, .saltDropdown') != null\n );\n}\n\nfunction isPlainTextInput(target: HTMLElement) {\n if (target.tagName === \"TEXTAREA\") {\n return true;\n }\n\n if (target.tagName !== \"INPUT\") {\n return false;\n }\n\n return textEntryInputTypes.has(\n (target as HTMLInputElement).type.toLowerCase(),\n );\n}\n\nfunction isNativeDisabledFormControl(target: HTMLElement) {\n return (\n \"disabled\" in target &&\n (target as HTMLButtonElement | HTMLInputElement).disabled\n );\n}\n\nexport function isToolbarNextFocusable(\n target: HTMLElement,\n { includeTabIndexMinusOne = false }: ToolbarNextFocusableOptions = {},\n) {\n if (isNativeDisabledFormControl(target)) {\n return false;\n }\n\n if (target.getAttribute(\"aria-hidden\") === \"true\") {\n return false;\n }\n\n if (!includeTabIndexMinusOne && target.getAttribute(\"tabindex\") === \"-1\") {\n return false;\n }\n\n if (target.hidden) {\n return false;\n }\n\n const win = target.ownerDocument.defaultView;\n\n if (!win) {\n return false;\n }\n\n const styles = win.getComputedStyle(target);\n\n if (styles.display === \"none\" || styles.visibility === \"hidden\") {\n return false;\n }\n\n return target.getClientRects().length > 0;\n}\n\n// Composite controls whose focus root (the element toolbar focus restore lands\n// on) differs from the inner element that handles keyboard interaction.\n// Restoring focus to the root would leave ArrowDown/Enter/Space targeting a\n// non-interactive wrapper, so we redirect to the interactive element\nconst toolbarNextFocusEntryOverrides = [\n { root: \".saltComboBox\", interactive: 'input[role=\"combobox\"]' },\n] as const;\n\nexport function focusToolbarNextElement(\n target: HTMLElement | null | undefined,\n) {\n const focusTarget = resolveToolbarNextFocusEntryTarget(target);\n\n if (focusTarget?.isConnected) {\n focusTarget.focus({ preventScroll: true });\n }\n}\n\nfunction resolveToolbarNextFocusEntryTarget(\n target: HTMLElement | null | undefined,\n) {\n if (!target) {\n return target;\n }\n\n for (const { root, interactive } of toolbarNextFocusEntryOverrides) {\n if (target.matches(root)) {\n return target.querySelector<HTMLElement>(interactive) ?? target;\n }\n }\n\n return target;\n}\n\nexport function scheduleToolbarNextFocus(\n target: HTMLElement | null | undefined,\n targetWindow = target?.ownerDocument.defaultView,\n) {\n if (!target) {\n return () => undefined;\n }\n\n if (targetWindow?.requestAnimationFrame) {\n const frame = targetWindow.requestAnimationFrame(() => {\n focusToolbarNextElement(target);\n });\n\n return () => {\n targetWindow.cancelAnimationFrame(frame);\n };\n }\n\n queueMicrotask(() => {\n focusToolbarNextElement(target);\n });\n\n return () => undefined;\n}\n\nexport function getDocumentFocusableElements(ownerDocument: Document) {\n return Array.from(\n ownerDocument.querySelectorAll<HTMLElement>(toolbarNextFocusableSelector),\n ).filter((element) => isToolbarNextFocusable(element));\n}\n"],"names":["currentIndex"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useRef, useCallback
|
|
1
|
+
import { useRef, useCallback } from 'react';
|
|
2
2
|
import { getToolbarNextFocusMemory, getToolbarNextScopeFocusableElements, TOOLBAR_NEXT_ITEM_ATTR, TOOLBAR_NEXT_OVERFLOW_TRIGGER_ATTR, TOOLBAR_NEXT_GROUP_KEY_ATTR, resolveToolbarNextFocusTarget, focusToolbarNextElement, getClosestToolbarNextScopeRoot, isToolbarNextFocusFromPointerTarget, TOOLBAR_NEXT_SCOPE_ROOT_ATTR, shouldToolbarNextPreserveNativeTab, getToolbarNextTabMoveTarget, getToolbarNextDirectionalMoveTarget } from './toolbarNextKeyboardUtils.js';
|
|
3
3
|
|
|
4
4
|
function useToolbarNextKeyboardNavigation({
|
|
@@ -10,7 +10,6 @@ function useToolbarNextKeyboardNavigation({
|
|
|
10
10
|
const rememberedFocusRef = useRef(null);
|
|
11
11
|
const pointerDownTargetRef = useRef(null);
|
|
12
12
|
const restoringEntryFocusRef = useRef(false);
|
|
13
|
-
const restoreFrameRef = useRef(null);
|
|
14
13
|
const shouldPreserveItemMemoryForTrigger = useCallback(
|
|
15
14
|
(groupKey) => {
|
|
16
15
|
const rememberedFocus = rememberedFocusRef.current;
|
|
@@ -22,16 +21,6 @@ function useToolbarNextKeyboardNavigation({
|
|
|
22
21
|
},
|
|
23
22
|
[items, overflowedIds]
|
|
24
23
|
);
|
|
25
|
-
useEffect(() => {
|
|
26
|
-
return () => {
|
|
27
|
-
var _a;
|
|
28
|
-
const frame = restoreFrameRef.current;
|
|
29
|
-
const win = (_a = scopeRef.current) == null ? void 0 : _a.ownerDocument.defaultView;
|
|
30
|
-
if (frame != null && win) {
|
|
31
|
-
win.cancelAnimationFrame(frame);
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
}, [scopeRef]);
|
|
35
24
|
const rememberTarget = useCallback(
|
|
36
25
|
(target) => {
|
|
37
26
|
const scopeRoot = scopeRef.current;
|
|
@@ -109,20 +98,7 @@ function useToolbarNextKeyboardNavigation({
|
|
|
109
98
|
}, [includeTabIndexMinusOne, items, overflowedIds, scopeRef]);
|
|
110
99
|
const restoreEntryFocus = useCallback((target) => {
|
|
111
100
|
restoringEntryFocusRef.current = true;
|
|
112
|
-
|
|
113
|
-
restoreFrameRef.current = null;
|
|
114
|
-
focusToolbarNextElement(target);
|
|
115
|
-
};
|
|
116
|
-
const win = target.ownerDocument.defaultView;
|
|
117
|
-
if (win == null ? void 0 : win.requestAnimationFrame) {
|
|
118
|
-
const currentFrame = restoreFrameRef.current;
|
|
119
|
-
if (currentFrame != null) {
|
|
120
|
-
win.cancelAnimationFrame(currentFrame);
|
|
121
|
-
}
|
|
122
|
-
restoreFrameRef.current = win.requestAnimationFrame(restoreFocus);
|
|
123
|
-
} else {
|
|
124
|
-
queueMicrotask(restoreFocus);
|
|
125
|
-
}
|
|
101
|
+
focusToolbarNextElement(target);
|
|
126
102
|
}, []);
|
|
127
103
|
const handleScopeFocus = useCallback(
|
|
128
104
|
(event) => {
|
|
@@ -176,6 +152,7 @@ function useToolbarNextKeyboardNavigation({
|
|
|
176
152
|
}
|
|
177
153
|
);
|
|
178
154
|
if (restoreTarget2 && restoreTarget2 !== target) {
|
|
155
|
+
event.stopPropagation();
|
|
179
156
|
restoreEntryFocus(restoreTarget2);
|
|
180
157
|
return;
|
|
181
158
|
}
|
|
@@ -193,6 +170,7 @@ function useToolbarNextKeyboardNavigation({
|
|
|
193
170
|
}
|
|
194
171
|
);
|
|
195
172
|
if (restoreTarget && restoreTarget !== target) {
|
|
173
|
+
event.stopPropagation();
|
|
196
174
|
restoreEntryFocus(restoreTarget);
|
|
197
175
|
return;
|
|
198
176
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useToolbarNextKeyboardNavigation.js","sources":["../src/toolbar-next/useToolbarNextKeyboardNavigation.ts"],"sourcesContent":["import {\n type FocusEventHandler,\n type KeyboardEventHandler,\n type PointerEventHandler,\n type RefObject,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport {\n focusToolbarNextElement,\n getClosestToolbarNextScopeRoot,\n getToolbarNextDirectionalMoveTarget,\n getToolbarNextFocusMemory,\n getToolbarNextScopeFocusableElements,\n getToolbarNextTabMoveTarget,\n isToolbarNextFocusFromPointerTarget,\n resolveToolbarNextFocusTarget,\n shouldToolbarNextPreserveNativeTab,\n TOOLBAR_NEXT_GROUP_KEY_ATTR,\n TOOLBAR_NEXT_ITEM_ATTR,\n TOOLBAR_NEXT_OVERFLOW_TRIGGER_ATTR,\n TOOLBAR_NEXT_SCOPE_ROOT_ATTR,\n type ToolbarNextFocusMemory,\n} from \"./toolbarNextKeyboardUtils\";\nimport type { ToolbarNextOverflowItem } from \"./toolbarNextUtils\";\n\ninterface UseToolbarNextKeyboardNavigationProps {\n includeTabIndexMinusOne?: boolean;\n items?: ToolbarNextOverflowItem[];\n overflowedIds?: Set<string>;\n scopeRef: RefObject<HTMLElement | null>;\n}\n\ninterface ToolbarNextFocusEvent {\n relatedTarget: EventTarget | null;\n target: EventTarget | null;\n}\n\ninterface ToolbarNextKeyDownEvent {\n altKey: boolean;\n ctrlKey: boolean;\n key: string;\n metaKey: boolean;\n preventDefault: () => void;\n shiftKey: boolean;\n stopPropagation: () => void;\n target: EventTarget | null;\n}\n\ninterface ToolbarNextPointerEvent {\n target: EventTarget | null;\n}\n\nexport function useToolbarNextKeyboardNavigation({\n includeTabIndexMinusOne = false,\n items = [],\n overflowedIds,\n scopeRef,\n}: UseToolbarNextKeyboardNavigationProps) {\n const rememberedFocusRef = useRef<ToolbarNextFocusMemory | null>(null);\n const pointerDownTargetRef = useRef<EventTarget | null>(null);\n const restoringEntryFocusRef = useRef(false);\n const restoreFrameRef = useRef<number | null>(null);\n\n const shouldPreserveItemMemoryForTrigger = useCallback(\n (groupKey: string) => {\n const rememberedFocus = rememberedFocusRef.current;\n\n if (rememberedFocus?.type !== \"item\") {\n return false;\n }\n\n const item = items.find((entry) => entry.id === rememberedFocus.itemId);\n\n return (\n item?.overflowGroupKey === groupKey &&\n (overflowedIds == null || overflowedIds.has(item.id))\n );\n },\n [items, overflowedIds],\n );\n\n useEffect(() => {\n return () => {\n const frame = restoreFrameRef.current;\n const win = scopeRef.current?.ownerDocument.defaultView;\n\n if (frame != null && win) {\n win.cancelAnimationFrame(frame);\n }\n };\n }, [scopeRef]);\n\n const rememberTarget = useCallback(\n (target: HTMLElement) => {\n const scopeRoot = scopeRef.current;\n\n if (!scopeRoot) {\n return;\n }\n\n const focusMemory = getToolbarNextFocusMemory(scopeRoot, target, {\n includeTabIndexMinusOne,\n });\n\n if (focusMemory) {\n if (\n focusMemory.type === \"overflow-trigger\" &&\n shouldPreserveItemMemoryForTrigger(focusMemory.groupKey)\n ) {\n return;\n }\n\n rememberedFocusRef.current = focusMemory;\n }\n },\n [includeTabIndexMinusOne, scopeRef, shouldPreserveItemMemoryForTrigger],\n );\n\n const rememberItemFocus = useCallback(\n (itemId: string, controlIndex: number) => {\n const scopeRoot = scopeRef.current;\n\n if (!scopeRoot) {\n return;\n }\n\n const focusables = getToolbarNextScopeFocusableElements(scopeRoot, {\n includeTabIndexMinusOne,\n });\n const itemFocusables = focusables.filter((element) => {\n return (\n element\n .closest<HTMLElement>(`[${TOOLBAR_NEXT_ITEM_ATTR}]`)\n ?.getAttribute(TOOLBAR_NEXT_ITEM_ATTR) === itemId\n );\n });\n const item = items.find((entry) => entry.id === itemId);\n const visibleItemTarget =\n itemFocusables[Math.min(controlIndex, itemFocusables.length - 1)] ??\n itemFocusables[0];\n const overflowTriggerTarget = item\n ? focusables.find((element) => {\n const trigger = element.closest<HTMLElement>(\n `[${TOOLBAR_NEXT_OVERFLOW_TRIGGER_ATTR}]`,\n );\n\n return (\n trigger?.getAttribute(TOOLBAR_NEXT_GROUP_KEY_ATTR) ===\n item.overflowGroupKey\n );\n })\n : undefined;\n const scopeIndex = Math.max(\n focusables.indexOf(visibleItemTarget ?? overflowTriggerTarget),\n rememberedFocusRef.current?.scopeIndex ?? 0,\n );\n const focusMemory: ToolbarNextFocusMemory = {\n controlIndex,\n itemId,\n scopeIndex,\n type: \"item\",\n };\n\n rememberedFocusRef.current = focusMemory;\n },\n [includeTabIndexMinusOne, items, scopeRef],\n );\n\n const focusEntryTarget = useCallback(() => {\n const scopeRoot = scopeRef.current;\n\n if (!scopeRoot) {\n return;\n }\n\n const target = resolveToolbarNextFocusTarget(\n scopeRoot,\n rememberedFocusRef.current,\n {\n items,\n includeTabIndexMinusOne,\n overflowedIds,\n },\n );\n\n if (!target) {\n return;\n }\n\n queueMicrotask(() => {\n focusToolbarNextElement(target);\n });\n }, [includeTabIndexMinusOne, items, overflowedIds, scopeRef]);\n\n const restoreEntryFocus = useCallback((target: HTMLElement) => {\n restoringEntryFocusRef.current = true;\n\n const restoreFocus = () => {\n restoreFrameRef.current = null;\n\n focusToolbarNextElement(target);\n };\n const win = target.ownerDocument.defaultView;\n\n if (win?.requestAnimationFrame) {\n const currentFrame = restoreFrameRef.current;\n if (currentFrame != null) {\n win.cancelAnimationFrame(currentFrame);\n }\n\n restoreFrameRef.current = win.requestAnimationFrame(restoreFocus);\n } else {\n queueMicrotask(restoreFocus);\n }\n }, []);\n\n const handleScopeFocus = useCallback(\n (event: ToolbarNextFocusEvent) => {\n const scopeRoot = scopeRef.current;\n const target = event.target;\n\n if (\n !scopeRoot ||\n !(target instanceof HTMLElement) ||\n getClosestToolbarNextScopeRoot(target) !== scopeRoot\n ) {\n return;\n }\n\n if (restoringEntryFocusRef.current) {\n restoringEntryFocusRef.current = false;\n pointerDownTargetRef.current = null;\n rememberTarget(target);\n return;\n }\n\n const relatedTarget = event.relatedTarget;\n const enteringFromOutside =\n !(relatedTarget instanceof HTMLElement) ||\n getClosestToolbarNextScopeRoot(relatedTarget) !== scopeRoot;\n\n if (!enteringFromOutside) {\n pointerDownTargetRef.current = null;\n rememberTarget(target);\n return;\n }\n\n const targetMemory = getToolbarNextFocusMemory(scopeRoot, target, {\n includeTabIndexMinusOne,\n });\n const pointerDownTarget = pointerDownTargetRef.current;\n pointerDownTargetRef.current = null;\n const focusFromPointerTarget = isToolbarNextFocusFromPointerTarget(\n target,\n pointerDownTarget,\n );\n\n if (focusFromPointerTarget) {\n rememberTarget(target);\n return;\n }\n\n if (targetMemory?.type === \"overflow-trigger\") {\n const shouldPreserve = shouldPreserveItemMemoryForTrigger(\n targetMemory.groupKey,\n );\n if (shouldPreserve) {\n return;\n }\n\n if (rememberedFocusRef.current?.type === \"item\") {\n const restoreTarget = resolveToolbarNextFocusTarget(\n scopeRoot,\n rememberedFocusRef.current,\n {\n items,\n includeTabIndexMinusOne,\n overflowedIds,\n },\n );\n\n if (restoreTarget && restoreTarget !== target) {\n restoreEntryFocus(restoreTarget);\n return;\n }\n }\n\n rememberedFocusRef.current = targetMemory;\n return;\n }\n\n const restoreTarget = resolveToolbarNextFocusTarget(\n scopeRoot,\n rememberedFocusRef.current,\n {\n items,\n includeTabIndexMinusOne,\n overflowedIds,\n },\n );\n\n if (restoreTarget && restoreTarget !== target) {\n restoreEntryFocus(restoreTarget);\n return;\n }\n\n rememberTarget(target);\n },\n [\n includeTabIndexMinusOne,\n items,\n overflowedIds,\n rememberTarget,\n restoreEntryFocus,\n scopeRef,\n shouldPreserveItemMemoryForTrigger,\n ],\n );\n\n const handleFocusCapture = useCallback<FocusEventHandler<HTMLElement>>(\n (event) => {\n handleScopeFocus(event);\n },\n [handleScopeFocus],\n );\n\n const handleScopePointerDown = useCallback(\n (event: ToolbarNextPointerEvent) => {\n const scopeRoot = scopeRef.current;\n const target = event.target;\n\n if (\n !scopeRoot ||\n !(target instanceof Element) ||\n getClosestToolbarNextScopeRoot(target) !== scopeRoot\n ) {\n pointerDownTargetRef.current = null;\n return;\n }\n\n pointerDownTargetRef.current = target;\n },\n [scopeRef],\n );\n\n const handlePointerDownCapture = useCallback<\n PointerEventHandler<HTMLElement>\n >(\n (event) => {\n handleScopePointerDown(event);\n },\n [handleScopePointerDown],\n );\n\n const handleScopeBlur = useCallback(\n (event: ToolbarNextFocusEvent) => {\n const scopeRoot = scopeRef.current;\n const target = event.target;\n\n if (\n !scopeRoot ||\n !(target instanceof HTMLElement) ||\n getClosestToolbarNextScopeRoot(target) !== scopeRoot\n ) {\n return;\n }\n\n const relatedTarget = event.relatedTarget;\n const leavingScope =\n !(relatedTarget instanceof HTMLElement) ||\n getClosestToolbarNextScopeRoot(relatedTarget) !== scopeRoot;\n\n if (leavingScope) {\n rememberTarget(target);\n }\n },\n [rememberTarget, scopeRef],\n );\n\n const handleBlurCapture = useCallback<FocusEventHandler<HTMLElement>>(\n (event) => {\n handleScopeBlur(event);\n },\n [handleScopeBlur],\n );\n\n const handleScopeKeyDown = useCallback(\n (event: ToolbarNextKeyDownEvent) => {\n const scopeRoot = scopeRef.current;\n const target = event.target;\n\n if (\n !scopeRoot ||\n !(target instanceof HTMLElement) ||\n getClosestToolbarNextScopeRoot(target) !== scopeRoot ||\n event.altKey ||\n event.ctrlKey ||\n event.metaKey\n ) {\n return;\n }\n\n if (\n event.key === \"Tab\" &&\n scopeRoot.getAttribute(TOOLBAR_NEXT_SCOPE_ROOT_ATTR) === \"main\" &&\n !shouldToolbarNextPreserveNativeTab(target)\n ) {\n const moveTarget = getToolbarNextTabMoveTarget(\n scopeRoot,\n event.shiftKey,\n );\n\n event.preventDefault();\n event.stopPropagation();\n\n rememberTarget(target);\n queueMicrotask(() => {\n if (moveTarget?.isConnected) {\n focusToolbarNextElement(moveTarget);\n } else {\n target.blur();\n }\n });\n return;\n }\n\n const moveTarget = getToolbarNextDirectionalMoveTarget(\n scopeRoot,\n target,\n event.key,\n { includeTabIndexMinusOne },\n );\n\n if (!moveTarget) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n rememberTarget(moveTarget);\n focusToolbarNextElement(moveTarget);\n },\n [includeTabIndexMinusOne, rememberTarget, scopeRef],\n );\n\n const handleKeyDownCapture = useCallback<KeyboardEventHandler<HTMLElement>>(\n (event) => {\n handleScopeKeyDown(event);\n },\n [handleScopeKeyDown],\n );\n\n const getEntryFocusable = useCallback(() => {\n const scopeRoot = scopeRef.current;\n\n if (!scopeRoot) {\n return null;\n }\n\n return (\n resolveToolbarNextFocusTarget(scopeRoot, rememberedFocusRef.current, {\n items,\n includeTabIndexMinusOne,\n overflowedIds,\n }) ??\n getToolbarNextScopeFocusableElements(scopeRoot, {\n includeTabIndexMinusOne,\n })[0] ??\n null\n );\n }, [includeTabIndexMinusOne, items, overflowedIds, scopeRef]);\n\n return {\n focusEntryTarget,\n getEntryFocusable,\n handleBlurCapture,\n handleFocusCapture,\n handleKeyDownCapture,\n handlePointerDownCapture,\n handleScopeBlur,\n handleScopeFocus,\n handleScopeKeyDown,\n handleScopePointerDown,\n rememberItemFocus,\n rememberedFocusRef,\n };\n}\n"],"names":["_a","restoreTarget","moveTarget"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useToolbarNextKeyboardNavigation.js","sources":["../src/toolbar-next/useToolbarNextKeyboardNavigation.ts"],"sourcesContent":["import {\n type FocusEventHandler,\n type KeyboardEventHandler,\n type PointerEventHandler,\n type RefObject,\n useCallback,\n useRef,\n} from \"react\";\nimport {\n focusToolbarNextElement,\n getClosestToolbarNextScopeRoot,\n getToolbarNextDirectionalMoveTarget,\n getToolbarNextFocusMemory,\n getToolbarNextScopeFocusableElements,\n getToolbarNextTabMoveTarget,\n isToolbarNextFocusFromPointerTarget,\n resolveToolbarNextFocusTarget,\n shouldToolbarNextPreserveNativeTab,\n TOOLBAR_NEXT_GROUP_KEY_ATTR,\n TOOLBAR_NEXT_ITEM_ATTR,\n TOOLBAR_NEXT_OVERFLOW_TRIGGER_ATTR,\n TOOLBAR_NEXT_SCOPE_ROOT_ATTR,\n type ToolbarNextFocusMemory,\n} from \"./toolbarNextKeyboardUtils\";\nimport type { ToolbarNextOverflowItem } from \"./toolbarNextUtils\";\n\ninterface UseToolbarNextKeyboardNavigationProps {\n includeTabIndexMinusOne?: boolean;\n items?: ToolbarNextOverflowItem[];\n overflowedIds?: Set<string>;\n scopeRef: RefObject<HTMLElement | null>;\n}\n\ninterface ToolbarNextFocusEvent {\n relatedTarget: EventTarget | null;\n stopPropagation: () => void;\n target: EventTarget | null;\n}\n\ninterface ToolbarNextKeyDownEvent {\n altKey: boolean;\n ctrlKey: boolean;\n key: string;\n metaKey: boolean;\n preventDefault: () => void;\n shiftKey: boolean;\n stopPropagation: () => void;\n target: EventTarget | null;\n}\n\ninterface ToolbarNextPointerEvent {\n target: EventTarget | null;\n}\n\nexport function useToolbarNextKeyboardNavigation({\n includeTabIndexMinusOne = false,\n items = [],\n overflowedIds,\n scopeRef,\n}: UseToolbarNextKeyboardNavigationProps) {\n const rememberedFocusRef = useRef<ToolbarNextFocusMemory | null>(null);\n const pointerDownTargetRef = useRef<EventTarget | null>(null);\n const restoringEntryFocusRef = useRef(false);\n\n const shouldPreserveItemMemoryForTrigger = useCallback(\n (groupKey: string) => {\n const rememberedFocus = rememberedFocusRef.current;\n\n if (rememberedFocus?.type !== \"item\") {\n return false;\n }\n\n const item = items.find((entry) => entry.id === rememberedFocus.itemId);\n\n return (\n item?.overflowGroupKey === groupKey &&\n (overflowedIds == null || overflowedIds.has(item.id))\n );\n },\n [items, overflowedIds],\n );\n\n const rememberTarget = useCallback(\n (target: HTMLElement) => {\n const scopeRoot = scopeRef.current;\n\n if (!scopeRoot) {\n return;\n }\n\n const focusMemory = getToolbarNextFocusMemory(scopeRoot, target, {\n includeTabIndexMinusOne,\n });\n\n if (focusMemory) {\n if (\n focusMemory.type === \"overflow-trigger\" &&\n shouldPreserveItemMemoryForTrigger(focusMemory.groupKey)\n ) {\n return;\n }\n\n rememberedFocusRef.current = focusMemory;\n }\n },\n [includeTabIndexMinusOne, scopeRef, shouldPreserveItemMemoryForTrigger],\n );\n\n const rememberItemFocus = useCallback(\n (itemId: string, controlIndex: number) => {\n const scopeRoot = scopeRef.current;\n\n if (!scopeRoot) {\n return;\n }\n\n const focusables = getToolbarNextScopeFocusableElements(scopeRoot, {\n includeTabIndexMinusOne,\n });\n const itemFocusables = focusables.filter((element) => {\n return (\n element\n .closest<HTMLElement>(`[${TOOLBAR_NEXT_ITEM_ATTR}]`)\n ?.getAttribute(TOOLBAR_NEXT_ITEM_ATTR) === itemId\n );\n });\n const item = items.find((entry) => entry.id === itemId);\n const visibleItemTarget =\n itemFocusables[Math.min(controlIndex, itemFocusables.length - 1)] ??\n itemFocusables[0];\n const overflowTriggerTarget = item\n ? focusables.find((element) => {\n const trigger = element.closest<HTMLElement>(\n `[${TOOLBAR_NEXT_OVERFLOW_TRIGGER_ATTR}]`,\n );\n\n return (\n trigger?.getAttribute(TOOLBAR_NEXT_GROUP_KEY_ATTR) ===\n item.overflowGroupKey\n );\n })\n : undefined;\n const scopeIndex = Math.max(\n focusables.indexOf(visibleItemTarget ?? overflowTriggerTarget),\n rememberedFocusRef.current?.scopeIndex ?? 0,\n );\n const focusMemory: ToolbarNextFocusMemory = {\n controlIndex,\n itemId,\n scopeIndex,\n type: \"item\",\n };\n\n rememberedFocusRef.current = focusMemory;\n },\n [includeTabIndexMinusOne, items, scopeRef],\n );\n\n const focusEntryTarget = useCallback(() => {\n const scopeRoot = scopeRef.current;\n\n if (!scopeRoot) {\n return;\n }\n\n const target = resolveToolbarNextFocusTarget(\n scopeRoot,\n rememberedFocusRef.current,\n {\n items,\n includeTabIndexMinusOne,\n overflowedIds,\n },\n );\n\n if (!target) {\n return;\n }\n\n queueMicrotask(() => {\n focusToolbarNextElement(target);\n });\n }, [includeTabIndexMinusOne, items, overflowedIds, scopeRef]);\n\n const restoreEntryFocus = useCallback((target: HTMLElement) => {\n restoringEntryFocusRef.current = true;\n focusToolbarNextElement(target);\n }, []);\n\n const handleScopeFocus = useCallback(\n (event: ToolbarNextFocusEvent) => {\n const scopeRoot = scopeRef.current;\n const target = event.target;\n\n if (\n !scopeRoot ||\n !(target instanceof HTMLElement) ||\n getClosestToolbarNextScopeRoot(target) !== scopeRoot\n ) {\n return;\n }\n\n if (restoringEntryFocusRef.current) {\n restoringEntryFocusRef.current = false;\n pointerDownTargetRef.current = null;\n rememberTarget(target);\n return;\n }\n\n const relatedTarget = event.relatedTarget;\n const enteringFromOutside =\n !(relatedTarget instanceof HTMLElement) ||\n getClosestToolbarNextScopeRoot(relatedTarget) !== scopeRoot;\n\n if (!enteringFromOutside) {\n pointerDownTargetRef.current = null;\n rememberTarget(target);\n return;\n }\n\n const targetMemory = getToolbarNextFocusMemory(scopeRoot, target, {\n includeTabIndexMinusOne,\n });\n const pointerDownTarget = pointerDownTargetRef.current;\n pointerDownTargetRef.current = null;\n const focusFromPointerTarget = isToolbarNextFocusFromPointerTarget(\n target,\n pointerDownTarget,\n );\n\n if (focusFromPointerTarget) {\n rememberTarget(target);\n return;\n }\n\n if (targetMemory?.type === \"overflow-trigger\") {\n const shouldPreserve = shouldPreserveItemMemoryForTrigger(\n targetMemory.groupKey,\n );\n if (shouldPreserve) {\n return;\n }\n\n if (rememberedFocusRef.current?.type === \"item\") {\n const restoreTarget = resolveToolbarNextFocusTarget(\n scopeRoot,\n rememberedFocusRef.current,\n {\n items,\n includeTabIndexMinusOne,\n overflowedIds,\n },\n );\n\n if (restoreTarget && restoreTarget !== target) {\n event.stopPropagation();\n restoreEntryFocus(restoreTarget);\n return;\n }\n }\n\n rememberedFocusRef.current = targetMemory;\n return;\n }\n\n const restoreTarget = resolveToolbarNextFocusTarget(\n scopeRoot,\n rememberedFocusRef.current,\n {\n items,\n includeTabIndexMinusOne,\n overflowedIds,\n },\n );\n\n if (restoreTarget && restoreTarget !== target) {\n event.stopPropagation();\n restoreEntryFocus(restoreTarget);\n return;\n }\n\n rememberTarget(target);\n },\n [\n includeTabIndexMinusOne,\n items,\n overflowedIds,\n rememberTarget,\n restoreEntryFocus,\n scopeRef,\n shouldPreserveItemMemoryForTrigger,\n ],\n );\n\n const handleFocusCapture = useCallback<FocusEventHandler<HTMLElement>>(\n (event) => {\n handleScopeFocus(event);\n },\n [handleScopeFocus],\n );\n\n const handleScopePointerDown = useCallback(\n (event: ToolbarNextPointerEvent) => {\n const scopeRoot = scopeRef.current;\n const target = event.target;\n\n if (\n !scopeRoot ||\n !(target instanceof Element) ||\n getClosestToolbarNextScopeRoot(target) !== scopeRoot\n ) {\n pointerDownTargetRef.current = null;\n return;\n }\n\n pointerDownTargetRef.current = target;\n },\n [scopeRef],\n );\n\n const handlePointerDownCapture = useCallback<\n PointerEventHandler<HTMLElement>\n >(\n (event) => {\n handleScopePointerDown(event);\n },\n [handleScopePointerDown],\n );\n\n const handleScopeBlur = useCallback(\n (event: ToolbarNextFocusEvent) => {\n const scopeRoot = scopeRef.current;\n const target = event.target;\n\n if (\n !scopeRoot ||\n !(target instanceof HTMLElement) ||\n getClosestToolbarNextScopeRoot(target) !== scopeRoot\n ) {\n return;\n }\n\n const relatedTarget = event.relatedTarget;\n const leavingScope =\n !(relatedTarget instanceof HTMLElement) ||\n getClosestToolbarNextScopeRoot(relatedTarget) !== scopeRoot;\n\n if (leavingScope) {\n rememberTarget(target);\n }\n },\n [rememberTarget, scopeRef],\n );\n\n const handleBlurCapture = useCallback<FocusEventHandler<HTMLElement>>(\n (event) => {\n handleScopeBlur(event);\n },\n [handleScopeBlur],\n );\n\n const handleScopeKeyDown = useCallback(\n (event: ToolbarNextKeyDownEvent) => {\n const scopeRoot = scopeRef.current;\n const target = event.target;\n\n if (\n !scopeRoot ||\n !(target instanceof HTMLElement) ||\n getClosestToolbarNextScopeRoot(target) !== scopeRoot ||\n event.altKey ||\n event.ctrlKey ||\n event.metaKey\n ) {\n return;\n }\n\n if (\n event.key === \"Tab\" &&\n scopeRoot.getAttribute(TOOLBAR_NEXT_SCOPE_ROOT_ATTR) === \"main\" &&\n !shouldToolbarNextPreserveNativeTab(target)\n ) {\n const moveTarget = getToolbarNextTabMoveTarget(\n scopeRoot,\n event.shiftKey,\n );\n\n event.preventDefault();\n event.stopPropagation();\n\n rememberTarget(target);\n queueMicrotask(() => {\n if (moveTarget?.isConnected) {\n focusToolbarNextElement(moveTarget);\n } else {\n target.blur();\n }\n });\n return;\n }\n\n const moveTarget = getToolbarNextDirectionalMoveTarget(\n scopeRoot,\n target,\n event.key,\n { includeTabIndexMinusOne },\n );\n\n if (!moveTarget) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n rememberTarget(moveTarget);\n focusToolbarNextElement(moveTarget);\n },\n [includeTabIndexMinusOne, rememberTarget, scopeRef],\n );\n\n const handleKeyDownCapture = useCallback<KeyboardEventHandler<HTMLElement>>(\n (event) => {\n handleScopeKeyDown(event);\n },\n [handleScopeKeyDown],\n );\n\n const getEntryFocusable = useCallback(() => {\n const scopeRoot = scopeRef.current;\n\n if (!scopeRoot) {\n return null;\n }\n\n return (\n resolveToolbarNextFocusTarget(scopeRoot, rememberedFocusRef.current, {\n items,\n includeTabIndexMinusOne,\n overflowedIds,\n }) ??\n getToolbarNextScopeFocusableElements(scopeRoot, {\n includeTabIndexMinusOne,\n })[0] ??\n null\n );\n }, [includeTabIndexMinusOne, items, overflowedIds, scopeRef]);\n\n return {\n focusEntryTarget,\n getEntryFocusable,\n handleBlurCapture,\n handleFocusCapture,\n handleKeyDownCapture,\n handlePointerDownCapture,\n handleScopeBlur,\n handleScopeFocus,\n handleScopeKeyDown,\n handleScopePointerDown,\n rememberItemFocus,\n rememberedFocusRef,\n };\n}\n"],"names":["_a","restoreTarget","moveTarget"],"mappings":"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"}
|
package/dist-types/index.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
export * from "./app-header";
|
|
2
2
|
export * from "./breadcrumbs";
|
|
3
3
|
export * from "./button-bar";
|
|
4
|
-
export * from "./calendar";
|
|
5
4
|
export * from "./cascading-menu";
|
|
6
5
|
export * from "./color-chooser";
|
|
7
6
|
export * from "./combo-box";
|
|
@@ -9,8 +8,6 @@ export * from "./combo-box-deprecated";
|
|
|
9
8
|
export type { SelectHandler, SelectionChangeHandler, SelectionStrategy, useCollectionItems, } from "./common-hooks";
|
|
10
9
|
export * from "./contact-details";
|
|
11
10
|
export * from "./content-status";
|
|
12
|
-
export * from "./date-input";
|
|
13
|
-
export * from "./date-picker";
|
|
14
11
|
export * from "./deck-item";
|
|
15
12
|
export * from "./deck-layout";
|
|
16
13
|
export * from "./dropdown";
|
|
@@ -25,7 +22,6 @@ export * from "./list";
|
|
|
25
22
|
export type { ListChangeHandler as ListChangeHandlerDeprecated, ListSelectHandler as ListSelectHandlerDeprecated, } from "./list-deprecated";
|
|
26
23
|
export { ListItemBase as ListItemBaseDeprecated, useListItem as useListItemDeprecated, } from "./list-deprecated";
|
|
27
24
|
export * from "./list-next";
|
|
28
|
-
export * from "./localization-provider";
|
|
29
25
|
export * from "./logo";
|
|
30
26
|
export * from "./mega-menu";
|
|
31
27
|
export * from "./menu-button";
|