@salt-ds/lab 1.0.0-alpha.96 → 1.0.0-alpha.97

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.
Files changed (78) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/css/salt-lab.css +1 -201
  3. package/dist-cjs/common-hooks/useSelection.js +6 -3
  4. package/dist-cjs/common-hooks/useSelection.js.map +1 -1
  5. package/dist-cjs/index.js +0 -6
  6. package/dist-cjs/index.js.map +1 -1
  7. package/dist-cjs/list/useList.js +7 -1
  8. package/dist-cjs/list/useList.js.map +1 -1
  9. package/dist-es/common-hooks/useSelection.js +6 -3
  10. package/dist-es/common-hooks/useSelection.js.map +1 -1
  11. package/dist-es/index.js +0 -3
  12. package/dist-es/index.js.map +1 -1
  13. package/dist-es/list/useList.js +7 -1
  14. package/dist-es/list/useList.js.map +1 -1
  15. package/dist-types/index.d.ts +0 -1
  16. package/package.json +2 -2
  17. package/dist-cjs/toolbar-next/ToolbarContentNext.css.js +0 -6
  18. package/dist-cjs/toolbar-next/ToolbarContentNext.css.js.map +0 -1
  19. package/dist-cjs/toolbar-next/ToolbarContentNext.js +0 -32
  20. package/dist-cjs/toolbar-next/ToolbarContentNext.js.map +0 -1
  21. package/dist-cjs/toolbar-next/ToolbarNext.css.js +0 -6
  22. package/dist-cjs/toolbar-next/ToolbarNext.css.js.map +0 -1
  23. package/dist-cjs/toolbar-next/ToolbarNext.js +0 -394
  24. package/dist-cjs/toolbar-next/ToolbarNext.js.map +0 -1
  25. package/dist-cjs/toolbar-next/ToolbarNextOverflow.css.js +0 -6
  26. package/dist-cjs/toolbar-next/ToolbarNextOverflow.css.js.map +0 -1
  27. package/dist-cjs/toolbar-next/ToolbarNextOverflow.js +0 -706
  28. package/dist-cjs/toolbar-next/ToolbarNextOverflow.js.map +0 -1
  29. package/dist-cjs/toolbar-next/ToolbarNextOverflowFloatingBoundary.js +0 -165
  30. package/dist-cjs/toolbar-next/ToolbarNextOverflowFloatingBoundary.js.map +0 -1
  31. package/dist-cjs/toolbar-next/TooltrayNext.css.js +0 -6
  32. package/dist-cjs/toolbar-next/TooltrayNext.css.js.map +0 -1
  33. package/dist-cjs/toolbar-next/TooltrayNext.js +0 -55
  34. package/dist-cjs/toolbar-next/TooltrayNext.js.map +0 -1
  35. package/dist-cjs/toolbar-next/toolbarNextKeyboardUtils.js +0 -409
  36. package/dist-cjs/toolbar-next/toolbarNextKeyboardUtils.js.map +0 -1
  37. package/dist-cjs/toolbar-next/toolbarNextUtils.js +0 -215
  38. package/dist-cjs/toolbar-next/toolbarNextUtils.js.map +0 -1
  39. package/dist-cjs/toolbar-next/useToolbarNextKeyboardNavigation.js +0 -312
  40. package/dist-cjs/toolbar-next/useToolbarNextKeyboardNavigation.js.map +0 -1
  41. package/dist-cjs/toolbar-next/useToolbarNextOverflow.js +0 -745
  42. package/dist-cjs/toolbar-next/useToolbarNextOverflow.js.map +0 -1
  43. package/dist-es/toolbar-next/ToolbarContentNext.css.js +0 -4
  44. package/dist-es/toolbar-next/ToolbarContentNext.css.js.map +0 -1
  45. package/dist-es/toolbar-next/ToolbarContentNext.js +0 -30
  46. package/dist-es/toolbar-next/ToolbarContentNext.js.map +0 -1
  47. package/dist-es/toolbar-next/ToolbarNext.css.js +0 -4
  48. package/dist-es/toolbar-next/ToolbarNext.css.js.map +0 -1
  49. package/dist-es/toolbar-next/ToolbarNext.js +0 -392
  50. package/dist-es/toolbar-next/ToolbarNext.js.map +0 -1
  51. package/dist-es/toolbar-next/ToolbarNextOverflow.css.js +0 -4
  52. package/dist-es/toolbar-next/ToolbarNextOverflow.css.js.map +0 -1
  53. package/dist-es/toolbar-next/ToolbarNextOverflow.js +0 -701
  54. package/dist-es/toolbar-next/ToolbarNextOverflow.js.map +0 -1
  55. package/dist-es/toolbar-next/ToolbarNextOverflowFloatingBoundary.js +0 -159
  56. package/dist-es/toolbar-next/ToolbarNextOverflowFloatingBoundary.js.map +0 -1
  57. package/dist-es/toolbar-next/TooltrayNext.css.js +0 -4
  58. package/dist-es/toolbar-next/TooltrayNext.css.js.map +0 -1
  59. package/dist-es/toolbar-next/TooltrayNext.js +0 -53
  60. package/dist-es/toolbar-next/TooltrayNext.js.map +0 -1
  61. package/dist-es/toolbar-next/toolbarNextKeyboardUtils.js +0 -390
  62. package/dist-es/toolbar-next/toolbarNextKeyboardUtils.js.map +0 -1
  63. package/dist-es/toolbar-next/toolbarNextUtils.js +0 -211
  64. package/dist-es/toolbar-next/toolbarNextUtils.js.map +0 -1
  65. package/dist-es/toolbar-next/useToolbarNextKeyboardNavigation.js +0 -310
  66. package/dist-es/toolbar-next/useToolbarNextKeyboardNavigation.js.map +0 -1
  67. package/dist-es/toolbar-next/useToolbarNextOverflow.js +0 -743
  68. package/dist-es/toolbar-next/useToolbarNextOverflow.js.map +0 -1
  69. package/dist-types/toolbar-next/ToolbarContentNext.d.ts +0 -11
  70. package/dist-types/toolbar-next/ToolbarNext.d.ts +0 -12
  71. package/dist-types/toolbar-next/ToolbarNextOverflow.d.ts +0 -34
  72. package/dist-types/toolbar-next/ToolbarNextOverflowFloatingBoundary.d.ts +0 -16
  73. package/dist-types/toolbar-next/TooltrayNext.d.ts +0 -37
  74. package/dist-types/toolbar-next/index.d.ts +0 -3
  75. package/dist-types/toolbar-next/toolbarNextKeyboardUtils.d.ts +0 -39
  76. package/dist-types/toolbar-next/toolbarNextUtils.d.ts +0 -42
  77. package/dist-types/toolbar-next/useToolbarNextKeyboardNavigation.d.ts +0 -42
  78. package/dist-types/toolbar-next/useToolbarNextOverflow.d.ts +0 -37
@@ -1 +0,0 @@
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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"}
@@ -1,159 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { makePrefixer, useForkRef, useFloatingComponent, FloatingComponentProvider } from '@salt-ds/core';
3
- import { clsx } from 'clsx';
4
- import { createContext, forwardRef, useContext, useRef, useCallback, useEffect, useMemo } from 'react';
5
- import { TOOLBAR_NEXT_SCOPE_ROOT_ATTR } from './toolbarNextKeyboardUtils.js';
6
-
7
- const withBaseName = makePrefixer("saltToolbarNextOverflow");
8
- const ToolbarNextOverflowFloatingBoundaryContext = createContext(null);
9
- const ToolbarNextOverflowFloatingComponentContext = createContext(null);
10
- function isNodeTarget(target) {
11
- return target != null && "nodeType" in target;
12
- }
13
- function containsTarget(element, target) {
14
- if (!element || !isNodeTarget(target)) {
15
- return false;
16
- }
17
- return element === target || element.contains(target);
18
- }
19
- function ToolbarNextOverflowFloatingBoundaryProvider({
20
- children
21
- }) {
22
- const floatingRootsRef = useRef(/* @__PURE__ */ new Map());
23
- const registerFloatingRoot = useCallback(
24
- (boundaryKey, root) => {
25
- let floatingRoots = floatingRootsRef.current.get(boundaryKey);
26
- if (!floatingRoots) {
27
- floatingRoots = /* @__PURE__ */ new Set();
28
- floatingRootsRef.current.set(boundaryKey, floatingRoots);
29
- }
30
- floatingRoots.add(root);
31
- return () => {
32
- const currentFloatingRoots = floatingRootsRef.current.get(boundaryKey);
33
- currentFloatingRoots == null ? void 0 : currentFloatingRoots.delete(root);
34
- if ((currentFloatingRoots == null ? void 0 : currentFloatingRoots.size) === 0) {
35
- floatingRootsRef.current.delete(boundaryKey);
36
- }
37
- };
38
- },
39
- []
40
- );
41
- const isTargetInsideBoundary = useCallback(
42
- (boundaryKey, target) => {
43
- if (!isNodeTarget(target)) {
44
- return false;
45
- }
46
- const floatingRoots = floatingRootsRef.current.get(boundaryKey);
47
- if (!floatingRoots) {
48
- return false;
49
- }
50
- for (const floatingRoot of floatingRoots) {
51
- if (!floatingRoot.isConnected) {
52
- floatingRoots.delete(floatingRoot);
53
- continue;
54
- }
55
- if (floatingRoot === target || floatingRoot.contains(target)) {
56
- return true;
57
- }
58
- }
59
- if (floatingRoots.size === 0) {
60
- floatingRootsRef.current.delete(boundaryKey);
61
- }
62
- return false;
63
- },
64
- []
65
- );
66
- const value = useMemo(
67
- () => ({
68
- isTargetInsideBoundary,
69
- registerFloatingRoot
70
- }),
71
- [isTargetInsideBoundary, registerFloatingRoot]
72
- );
73
- return /* @__PURE__ */ jsx(ToolbarNextOverflowFloatingBoundaryContext.Provider, { value, children });
74
- }
75
- function useToolbarNextOverflowFloatingBoundary() {
76
- return useContext(ToolbarNextOverflowFloatingBoundaryContext);
77
- }
78
- function isTargetInsideOverflowBoundary(panelContent, floatingBoundary, boundaryKey, target) {
79
- if (containsTarget(panelContent, target)) {
80
- return true;
81
- }
82
- return (floatingBoundary == null ? void 0 : floatingBoundary.isTargetInsideBoundary(boundaryKey, target)) ?? false;
83
- }
84
- function getToolbarNextOverflowBoundaryKey(host) {
85
- const scopeRoot = host == null ? void 0 : host.closest(
86
- `[${TOOLBAR_NEXT_SCOPE_ROOT_ATTR}]`
87
- );
88
- const boundaryKey = scopeRoot == null ? void 0 : scopeRoot.getAttribute(TOOLBAR_NEXT_SCOPE_ROOT_ATTR);
89
- return boundaryKey && boundaryKey !== "main" ? boundaryKey : null;
90
- }
91
- const ToolbarNextOverflowFloatingComponent = forwardRef(function ToolbarNextOverflowFloatingComponent2({ className, open, ...props }, ref) {
92
- const componentContext = useContext(
93
- ToolbarNextOverflowFloatingComponentContext
94
- );
95
- const unregisterRef = useRef(null);
96
- const registerRef = useCallback(
97
- (node) => {
98
- var _a, _b;
99
- (_a = unregisterRef.current) == null ? void 0 : _a.call(unregisterRef);
100
- unregisterRef.current = null;
101
- if (node && open) {
102
- unregisterRef.current = (componentContext == null ? void 0 : componentContext.boundaryKey) != null ? ((_b = componentContext.floatingBoundary) == null ? void 0 : _b.registerFloatingRoot(
103
- componentContext.boundaryKey,
104
- node
105
- )) ?? null : null;
106
- }
107
- },
108
- [componentContext, open]
109
- );
110
- const handleRef = useForkRef(ref, registerRef);
111
- useEffect(() => {
112
- return () => {
113
- var _a;
114
- (_a = unregisterRef.current) == null ? void 0 : _a.call(unregisterRef);
115
- unregisterRef.current = null;
116
- };
117
- }, []);
118
- if (!componentContext) {
119
- return null;
120
- }
121
- const { ParentFloatingComponent } = componentContext;
122
- return /* @__PURE__ */ jsx(
123
- ParentFloatingComponent,
124
- {
125
- className: clsx(
126
- className,
127
- componentContext.boundaryKey != null && withBaseName("floatingDescendant")
128
- ),
129
- open,
130
- ...props,
131
- ref: handleRef
132
- }
133
- );
134
- });
135
- function ToolbarNextOverflowFloatingComponentProvider({
136
- boundaryKey,
137
- children
138
- }) {
139
- const { Component: ParentFloatingComponent } = useFloatingComponent();
140
- const floatingBoundary = useToolbarNextOverflowFloatingBoundary();
141
- const value = useMemo(
142
- () => ({
143
- boundaryKey,
144
- floatingBoundary,
145
- ParentFloatingComponent
146
- }),
147
- [boundaryKey, floatingBoundary, ParentFloatingComponent]
148
- );
149
- return /* @__PURE__ */ jsx(ToolbarNextOverflowFloatingComponentContext.Provider, { value, children: /* @__PURE__ */ jsx(
150
- FloatingComponentProvider,
151
- {
152
- Component: ToolbarNextOverflowFloatingComponent,
153
- children
154
- }
155
- ) });
156
- }
157
-
158
- export { ToolbarNextOverflowFloatingBoundaryProvider, ToolbarNextOverflowFloatingComponentProvider, getToolbarNextOverflowBoundaryKey, isTargetInsideOverflowBoundary, useToolbarNextOverflowFloatingBoundary };
159
- //# sourceMappingURL=ToolbarNextOverflowFloatingBoundary.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ToolbarNextOverflowFloatingBoundary.js","sources":["../src/toolbar-next/ToolbarNextOverflowFloatingBoundary.tsx"],"sourcesContent":["import {\n type FloatingComponentProps,\n FloatingComponentProvider,\n type FloatingComponentProviderProps,\n makePrefixer,\n useFloatingComponent,\n useForkRef,\n} from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport {\n createContext,\n forwardRef,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n} from \"react\";\n\nimport { TOOLBAR_NEXT_SCOPE_ROOT_ATTR } from \"./toolbarNextKeyboardUtils\";\n\nconst withBaseName = makePrefixer(\"saltToolbarNextOverflow\");\n\ninterface ToolbarNextOverflowFloatingBoundaryContextValue {\n isTargetInsideBoundary: (\n boundaryKey: string,\n target: EventTarget | null,\n ) => boolean;\n registerFloatingRoot: (boundaryKey: string, root: HTMLElement) => () => void;\n}\n\nconst ToolbarNextOverflowFloatingBoundaryContext =\n createContext<ToolbarNextOverflowFloatingBoundaryContextValue | null>(null);\n\ninterface ToolbarNextOverflowFloatingComponentContextValue {\n boundaryKey: string | null;\n floatingBoundary: ToolbarNextOverflowFloatingBoundaryContextValue | null;\n ParentFloatingComponent: FloatingComponentProviderProps[\"Component\"];\n}\n\nconst ToolbarNextOverflowFloatingComponentContext =\n createContext<ToolbarNextOverflowFloatingComponentContextValue | null>(null);\n\nfunction isNodeTarget(target: EventTarget | null): target is Node {\n return target != null && \"nodeType\" in target;\n}\n\nfunction containsTarget(\n element: HTMLElement | null,\n target: EventTarget | null,\n) {\n if (!element || !isNodeTarget(target)) {\n return false;\n }\n\n return element === target || element.contains(target);\n}\n\nexport function ToolbarNextOverflowFloatingBoundaryProvider({\n children,\n}: {\n children: ReactNode;\n}) {\n const floatingRootsRef = useRef(new Map<string, Set<HTMLElement>>());\n\n const registerFloatingRoot = useCallback(\n (boundaryKey: string, root: HTMLElement) => {\n let floatingRoots = floatingRootsRef.current.get(boundaryKey);\n\n if (!floatingRoots) {\n floatingRoots = new Set<HTMLElement>();\n floatingRootsRef.current.set(boundaryKey, floatingRoots);\n }\n\n floatingRoots.add(root);\n\n return () => {\n const currentFloatingRoots = floatingRootsRef.current.get(boundaryKey);\n\n currentFloatingRoots?.delete(root);\n\n if (currentFloatingRoots?.size === 0) {\n floatingRootsRef.current.delete(boundaryKey);\n }\n };\n },\n [],\n );\n\n const isTargetInsideBoundary = useCallback(\n (boundaryKey: string, target: EventTarget | null) => {\n if (!isNodeTarget(target)) {\n return false;\n }\n\n const floatingRoots = floatingRootsRef.current.get(boundaryKey);\n\n if (!floatingRoots) {\n return false;\n }\n\n for (const floatingRoot of floatingRoots) {\n if (!floatingRoot.isConnected) {\n floatingRoots.delete(floatingRoot);\n continue;\n }\n\n if (floatingRoot === target || floatingRoot.contains(target)) {\n return true;\n }\n }\n\n if (floatingRoots.size === 0) {\n floatingRootsRef.current.delete(boundaryKey);\n }\n\n return false;\n },\n [],\n );\n\n const value = useMemo(\n () => ({\n isTargetInsideBoundary,\n registerFloatingRoot,\n }),\n [isTargetInsideBoundary, registerFloatingRoot],\n );\n\n return (\n <ToolbarNextOverflowFloatingBoundaryContext.Provider value={value}>\n {children}\n </ToolbarNextOverflowFloatingBoundaryContext.Provider>\n );\n}\n\nexport function useToolbarNextOverflowFloatingBoundary() {\n return useContext(ToolbarNextOverflowFloatingBoundaryContext);\n}\n\nexport function isTargetInsideOverflowBoundary(\n panelContent: HTMLElement | null,\n floatingBoundary: ToolbarNextOverflowFloatingBoundaryContextValue | null,\n boundaryKey: string,\n target: EventTarget | null,\n) {\n if (containsTarget(panelContent, target)) {\n return true;\n }\n\n return floatingBoundary?.isTargetInsideBoundary(boundaryKey, target) ?? false;\n}\n\nexport function getToolbarNextOverflowBoundaryKey(host: HTMLElement | null) {\n const scopeRoot = host?.closest<HTMLElement>(\n `[${TOOLBAR_NEXT_SCOPE_ROOT_ATTR}]`,\n );\n const boundaryKey = scopeRoot?.getAttribute(TOOLBAR_NEXT_SCOPE_ROOT_ATTR);\n\n return boundaryKey && boundaryKey !== \"main\" ? boundaryKey : null;\n}\n\nconst ToolbarNextOverflowFloatingComponent = forwardRef<\n HTMLDivElement,\n FloatingComponentProps\n>(function ToolbarNextOverflowFloatingComponent(\n { className, open, ...props },\n ref,\n) {\n const componentContext = useContext(\n ToolbarNextOverflowFloatingComponentContext,\n );\n const unregisterRef = useRef<(() => void) | null>(null);\n const registerRef = useCallback(\n (node: HTMLDivElement | null) => {\n unregisterRef.current?.();\n unregisterRef.current = null;\n\n if (node && open) {\n unregisterRef.current =\n componentContext?.boundaryKey != null\n ? (componentContext.floatingBoundary?.registerFloatingRoot(\n componentContext.boundaryKey,\n node,\n ) ?? null)\n : null;\n }\n },\n [componentContext, open],\n );\n const handleRef = useForkRef<HTMLDivElement>(ref, registerRef);\n\n useEffect(() => {\n return () => {\n unregisterRef.current?.();\n unregisterRef.current = null;\n };\n }, []);\n\n if (!componentContext) {\n return null;\n }\n\n const { ParentFloatingComponent } = componentContext;\n\n return (\n <ParentFloatingComponent\n className={clsx(\n className,\n componentContext.boundaryKey != null &&\n withBaseName(\"floatingDescendant\"),\n )}\n open={open}\n {...props}\n ref={handleRef}\n />\n );\n});\n\nexport function ToolbarNextOverflowFloatingComponentProvider({\n boundaryKey,\n children,\n}: {\n boundaryKey: string | null;\n children: ReactNode;\n}) {\n const { Component: ParentFloatingComponent } = useFloatingComponent();\n const floatingBoundary = useToolbarNextOverflowFloatingBoundary();\n const value = useMemo(\n () => ({\n boundaryKey,\n floatingBoundary,\n ParentFloatingComponent,\n }),\n [boundaryKey, floatingBoundary, ParentFloatingComponent],\n );\n\n return (\n <ToolbarNextOverflowFloatingComponentContext.Provider value={value}>\n <FloatingComponentProvider\n Component={ToolbarNextOverflowFloatingComponent}\n >\n {children}\n </FloatingComponentProvider>\n </ToolbarNextOverflowFloatingComponentContext.Provider>\n );\n}\n"],"names":["ToolbarNextOverflowFloatingComponent"],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- var css_248z = ".saltTooltrayNext {\n display: flex;\n align-items: center;\n flex: 0 0 auto;\n gap: var(--salt-spacing-100);\n min-width: 0;\n}\n\n.saltTooltrayNext > * {\n flex-shrink: 0;\n}\n\n.saltTooltrayNext[data-align=\"end\"] {\n margin-inline-start: auto;\n}\n\n.saltTooltrayNext[data-align=\"center\"] {\n margin-inline-start: auto;\n margin-inline-end: auto;\n}\n";
2
-
3
- export { css_248z as default };
4
- //# sourceMappingURL=TooltrayNext.css.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TooltrayNext.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -1,53 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { makePrefixer } from '@salt-ds/core';
3
- import { useComponentCssInjection } from '@salt-ds/styles';
4
- import { useWindow } from '@salt-ds/window';
5
- import { clsx } from 'clsx';
6
- import { forwardRef } from 'react';
7
- import css_248z from './TooltrayNext.css.js';
8
-
9
- const withBaseName = makePrefixer("saltTooltrayNext");
10
- const TooltrayNext = forwardRef(
11
- function TooltrayNext2({
12
- "aria-label": ariaLabel,
13
- "aria-labelledby": ariaLabelledby,
14
- align = "start",
15
- children,
16
- className,
17
- overflowGroup = "shared",
18
- overflowLabel,
19
- overflowMode = "independent",
20
- overflowPriority = 0,
21
- role,
22
- ...rest
23
- }, ref) {
24
- const targetWindow = useWindow();
25
- useComponentCssInjection({
26
- testId: "salt-tooltray-next",
27
- css: css_248z,
28
- window: targetWindow
29
- });
30
- return /* @__PURE__ */ jsx(
31
- "div",
32
- {
33
- className: clsx(withBaseName(), className),
34
- ...rest,
35
- "data-align": align,
36
- "data-overflow-group": overflowGroup,
37
- "data-overflow-label": overflowLabel,
38
- "data-overflow-mode": overflowMode,
39
- "data-overflow-priority": overflowPriority,
40
- ref,
41
- role,
42
- ...role != null ? {
43
- "aria-label": ariaLabel,
44
- "aria-labelledby": ariaLabelledby
45
- } : {},
46
- children
47
- }
48
- );
49
- }
50
- );
51
-
52
- export { TooltrayNext };
53
- //# sourceMappingURL=TooltrayNext.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TooltrayNext.js","sources":["../src/toolbar-next/TooltrayNext.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { type ComponentPropsWithoutRef, forwardRef } from \"react\";\n\nimport tooltrayCss from \"./TooltrayNext.css\";\n\nexport type TooltrayNextOverflowMode = \"none\" | \"independent\" | \"grouped\";\n\nexport interface TooltrayNextProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"align\"> {\n /**\n * Alignment of the tooltray.\n * - When a `TooltrayNext` is used directly inside `ToolbarNext`, this acts as\n * shorthand for which toolbar band the tray belongs to.\n * - When a `TooltrayNext` is used inside `ToolbarContentNext`, this alignment is\n * local to that content area.\n *\n * Defaults to `\"start\"`.\n */\n align?: \"start\" | \"end\" | \"center\";\n /**\n * Controls how this tray participates in `ToolbarNext` overflow.\n *\n * Defaults to `\"independent\"`.\n */\n overflowMode?: TooltrayNextOverflowMode;\n /**\n * Higher numbers overflow before lower numbers.\n *\n * Defaults to `0`.\n */\n overflowPriority?: number;\n /**\n * Collapse this tray into the shared overflow or a named local overflow.\n *\n * Defaults to `\"shared\"`.\n */\n overflowGroup?: \"shared\" | string;\n /**\n * Accessible label for the named overflow trigger.\n */\n overflowLabel?: string;\n}\n\nconst withBaseName = makePrefixer(\"saltTooltrayNext\");\n\nexport const TooltrayNext = forwardRef<HTMLDivElement, TooltrayNextProps>(\n function TooltrayNext(\n {\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledby,\n align = \"start\",\n children,\n className,\n overflowGroup = \"shared\",\n overflowLabel,\n overflowMode = \"independent\",\n overflowPriority = 0,\n role,\n ...rest\n },\n ref,\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-tooltray-next\",\n css: tooltrayCss,\n window: targetWindow,\n });\n\n return (\n <div\n className={clsx(withBaseName(), className)}\n {...rest}\n data-align={align}\n data-overflow-group={overflowGroup}\n data-overflow-label={overflowLabel}\n data-overflow-mode={overflowMode}\n data-overflow-priority={overflowPriority}\n ref={ref}\n role={role}\n {...(role != null\n ? {\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledby,\n }\n : {})}\n >\n {children}\n </div>\n );\n },\n);\n"],"names":["TooltrayNext","tooltrayCss"],"mappings":";;;;;;;;AA8CA,MAAM,YAAA,GAAe,aAAa,kBAAkB,CAAA;AAE7C,MAAM,YAAA,GAAe,UAAA;AAAA,EAC1B,SAASA,aAAAA,CACP;AAAA,IACE,YAAA,EAAc,SAAA;AAAA,IACd,iBAAA,EAAmB,cAAA;AAAA,IACnB,KAAA,GAAQ,OAAA;AAAA,IACR,QAAA;AAAA,IACA,SAAA;AAAA,IACA,aAAA,GAAgB,QAAA;AAAA,IAChB,aAAA;AAAA,IACA,YAAA,GAAe,aAAA;AAAA,IACf,gBAAA,GAAmB,CAAA;AAAA,IACnB,IAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,EACA;AACA,IAAA,MAAM,eAAe,SAAA,EAAU;AAC/B,IAAA,wBAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,oBAAA;AAAA,MACR,GAAA,EAAKC,QAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,IAAA,CAAK,YAAA,EAAa,EAAG,SAAS,CAAA;AAAA,QACxC,GAAG,IAAA;AAAA,QACJ,YAAA,EAAY,KAAA;AAAA,QACZ,qBAAA,EAAqB,aAAA;AAAA,QACrB,qBAAA,EAAqB,aAAA;AAAA,QACrB,oBAAA,EAAoB,YAAA;AAAA,QACpB,wBAAA,EAAwB,gBAAA;AAAA,QACxB,GAAA;AAAA,QACA,IAAA;AAAA,QACC,GAAI,QAAQ,IAAA,GACT;AAAA,UACE,YAAA,EAAc,SAAA;AAAA,UACd,iBAAA,EAAmB;AAAA,YAErB,EAAC;AAAA,QAEJ;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;;;;"}