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

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 (195) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/css/salt-lab.css +1 -343
  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 -28
  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 -14
  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 -2
  16. package/package.json +2 -2
  17. package/dist-cjs/mega-menu/MegaMenu.js +0 -76
  18. package/dist-cjs/mega-menu/MegaMenu.js.map +0 -1
  19. package/dist-cjs/mega-menu/MegaMenuActions.css.js +0 -6
  20. package/dist-cjs/mega-menu/MegaMenuActions.css.js.map +0 -1
  21. package/dist-cjs/mega-menu/MegaMenuActions.js +0 -33
  22. package/dist-cjs/mega-menu/MegaMenuActions.js.map +0 -1
  23. package/dist-cjs/mega-menu/MegaMenuAside.css.js +0 -6
  24. package/dist-cjs/mega-menu/MegaMenuAside.css.js.map +0 -1
  25. package/dist-cjs/mega-menu/MegaMenuAside.js +0 -33
  26. package/dist-cjs/mega-menu/MegaMenuAside.js.map +0 -1
  27. package/dist-cjs/mega-menu/MegaMenuContent.css.js +0 -6
  28. package/dist-cjs/mega-menu/MegaMenuContent.css.js.map +0 -1
  29. package/dist-cjs/mega-menu/MegaMenuContent.js +0 -25
  30. package/dist-cjs/mega-menu/MegaMenuContent.js.map +0 -1
  31. package/dist-cjs/mega-menu/MegaMenuContext.js +0 -11
  32. package/dist-cjs/mega-menu/MegaMenuContext.js.map +0 -1
  33. package/dist-cjs/mega-menu/MegaMenuGroup.css.js +0 -6
  34. package/dist-cjs/mega-menu/MegaMenuGroup.css.js.map +0 -1
  35. package/dist-cjs/mega-menu/MegaMenuGroup.js +0 -40
  36. package/dist-cjs/mega-menu/MegaMenuGroup.js.map +0 -1
  37. package/dist-cjs/mega-menu/MegaMenuGroupContext.js +0 -17
  38. package/dist-cjs/mega-menu/MegaMenuGroupContext.js.map +0 -1
  39. package/dist-cjs/mega-menu/MegaMenuGroupHeading.css.js +0 -6
  40. package/dist-cjs/mega-menu/MegaMenuGroupHeading.css.js.map +0 -1
  41. package/dist-cjs/mega-menu/MegaMenuGroupHeading.js +0 -39
  42. package/dist-cjs/mega-menu/MegaMenuGroupHeading.js.map +0 -1
  43. package/dist-cjs/mega-menu/MegaMenuGroups.css.js +0 -6
  44. package/dist-cjs/mega-menu/MegaMenuGroups.css.js.map +0 -1
  45. package/dist-cjs/mega-menu/MegaMenuGroups.js +0 -25
  46. package/dist-cjs/mega-menu/MegaMenuGroups.js.map +0 -1
  47. package/dist-cjs/mega-menu/MegaMenuList.css.js +0 -6
  48. package/dist-cjs/mega-menu/MegaMenuList.css.js.map +0 -1
  49. package/dist-cjs/mega-menu/MegaMenuList.js +0 -43
  50. package/dist-cjs/mega-menu/MegaMenuList.js.map +0 -1
  51. package/dist-cjs/mega-menu/MegaMenuListItem.css.js +0 -6
  52. package/dist-cjs/mega-menu/MegaMenuListItem.css.js.map +0 -1
  53. package/dist-cjs/mega-menu/MegaMenuListItem.js +0 -45
  54. package/dist-cjs/mega-menu/MegaMenuListItem.js.map +0 -1
  55. package/dist-cjs/mega-menu/MegaMenuPanel.css.js +0 -6
  56. package/dist-cjs/mega-menu/MegaMenuPanel.css.js.map +0 -1
  57. package/dist-cjs/mega-menu/MegaMenuPanel.js +0 -88
  58. package/dist-cjs/mega-menu/MegaMenuPanel.js.map +0 -1
  59. package/dist-cjs/mega-menu/MegaMenuTrigger.js +0 -90
  60. package/dist-cjs/mega-menu/MegaMenuTrigger.js.map +0 -1
  61. package/dist-cjs/mega-menu/useMegaMenu.js +0 -15
  62. package/dist-cjs/mega-menu/useMegaMenu.js.map +0 -1
  63. package/dist-cjs/mega-menu/useMegaMenuNavigation.js +0 -282
  64. package/dist-cjs/mega-menu/useMegaMenuNavigation.js.map +0 -1
  65. package/dist-cjs/mega-menu/usePageMargin.js +0 -22
  66. package/dist-cjs/mega-menu/usePageMargin.js.map +0 -1
  67. package/dist-cjs/toolbar-next/ToolbarContentNext.css.js +0 -6
  68. package/dist-cjs/toolbar-next/ToolbarContentNext.css.js.map +0 -1
  69. package/dist-cjs/toolbar-next/ToolbarContentNext.js +0 -32
  70. package/dist-cjs/toolbar-next/ToolbarContentNext.js.map +0 -1
  71. package/dist-cjs/toolbar-next/ToolbarNext.css.js +0 -6
  72. package/dist-cjs/toolbar-next/ToolbarNext.css.js.map +0 -1
  73. package/dist-cjs/toolbar-next/ToolbarNext.js +0 -394
  74. package/dist-cjs/toolbar-next/ToolbarNext.js.map +0 -1
  75. package/dist-cjs/toolbar-next/ToolbarNextOverflow.css.js +0 -6
  76. package/dist-cjs/toolbar-next/ToolbarNextOverflow.css.js.map +0 -1
  77. package/dist-cjs/toolbar-next/ToolbarNextOverflow.js +0 -706
  78. package/dist-cjs/toolbar-next/ToolbarNextOverflow.js.map +0 -1
  79. package/dist-cjs/toolbar-next/ToolbarNextOverflowFloatingBoundary.js +0 -165
  80. package/dist-cjs/toolbar-next/ToolbarNextOverflowFloatingBoundary.js.map +0 -1
  81. package/dist-cjs/toolbar-next/TooltrayNext.css.js +0 -6
  82. package/dist-cjs/toolbar-next/TooltrayNext.css.js.map +0 -1
  83. package/dist-cjs/toolbar-next/TooltrayNext.js +0 -55
  84. package/dist-cjs/toolbar-next/TooltrayNext.js.map +0 -1
  85. package/dist-cjs/toolbar-next/toolbarNextKeyboardUtils.js +0 -409
  86. package/dist-cjs/toolbar-next/toolbarNextKeyboardUtils.js.map +0 -1
  87. package/dist-cjs/toolbar-next/toolbarNextUtils.js +0 -215
  88. package/dist-cjs/toolbar-next/toolbarNextUtils.js.map +0 -1
  89. package/dist-cjs/toolbar-next/useToolbarNextKeyboardNavigation.js +0 -312
  90. package/dist-cjs/toolbar-next/useToolbarNextKeyboardNavigation.js.map +0 -1
  91. package/dist-cjs/toolbar-next/useToolbarNextOverflow.js +0 -745
  92. package/dist-cjs/toolbar-next/useToolbarNextOverflow.js.map +0 -1
  93. package/dist-es/mega-menu/MegaMenu.js +0 -74
  94. package/dist-es/mega-menu/MegaMenu.js.map +0 -1
  95. package/dist-es/mega-menu/MegaMenuActions.css.js +0 -4
  96. package/dist-es/mega-menu/MegaMenuActions.css.js.map +0 -1
  97. package/dist-es/mega-menu/MegaMenuActions.js +0 -31
  98. package/dist-es/mega-menu/MegaMenuActions.js.map +0 -1
  99. package/dist-es/mega-menu/MegaMenuAside.css.js +0 -4
  100. package/dist-es/mega-menu/MegaMenuAside.css.js.map +0 -1
  101. package/dist-es/mega-menu/MegaMenuAside.js +0 -31
  102. package/dist-es/mega-menu/MegaMenuAside.js.map +0 -1
  103. package/dist-es/mega-menu/MegaMenuContent.css.js +0 -4
  104. package/dist-es/mega-menu/MegaMenuContent.css.js.map +0 -1
  105. package/dist-es/mega-menu/MegaMenuContent.js +0 -23
  106. package/dist-es/mega-menu/MegaMenuContent.js.map +0 -1
  107. package/dist-es/mega-menu/MegaMenuContext.js +0 -9
  108. package/dist-es/mega-menu/MegaMenuContext.js.map +0 -1
  109. package/dist-es/mega-menu/MegaMenuGroup.css.js +0 -4
  110. package/dist-es/mega-menu/MegaMenuGroup.css.js.map +0 -1
  111. package/dist-es/mega-menu/MegaMenuGroup.js +0 -38
  112. package/dist-es/mega-menu/MegaMenuGroup.js.map +0 -1
  113. package/dist-es/mega-menu/MegaMenuGroupContext.js +0 -14
  114. package/dist-es/mega-menu/MegaMenuGroupContext.js.map +0 -1
  115. package/dist-es/mega-menu/MegaMenuGroupHeading.css.js +0 -4
  116. package/dist-es/mega-menu/MegaMenuGroupHeading.css.js.map +0 -1
  117. package/dist-es/mega-menu/MegaMenuGroupHeading.js +0 -37
  118. package/dist-es/mega-menu/MegaMenuGroupHeading.js.map +0 -1
  119. package/dist-es/mega-menu/MegaMenuGroups.css.js +0 -4
  120. package/dist-es/mega-menu/MegaMenuGroups.css.js.map +0 -1
  121. package/dist-es/mega-menu/MegaMenuGroups.js +0 -23
  122. package/dist-es/mega-menu/MegaMenuGroups.js.map +0 -1
  123. package/dist-es/mega-menu/MegaMenuList.css.js +0 -4
  124. package/dist-es/mega-menu/MegaMenuList.css.js.map +0 -1
  125. package/dist-es/mega-menu/MegaMenuList.js +0 -41
  126. package/dist-es/mega-menu/MegaMenuList.js.map +0 -1
  127. package/dist-es/mega-menu/MegaMenuListItem.css.js +0 -4
  128. package/dist-es/mega-menu/MegaMenuListItem.css.js.map +0 -1
  129. package/dist-es/mega-menu/MegaMenuListItem.js +0 -43
  130. package/dist-es/mega-menu/MegaMenuListItem.js.map +0 -1
  131. package/dist-es/mega-menu/MegaMenuPanel.css.js +0 -4
  132. package/dist-es/mega-menu/MegaMenuPanel.css.js.map +0 -1
  133. package/dist-es/mega-menu/MegaMenuPanel.js +0 -86
  134. package/dist-es/mega-menu/MegaMenuPanel.js.map +0 -1
  135. package/dist-es/mega-menu/MegaMenuTrigger.js +0 -88
  136. package/dist-es/mega-menu/MegaMenuTrigger.js.map +0 -1
  137. package/dist-es/mega-menu/useMegaMenu.js +0 -13
  138. package/dist-es/mega-menu/useMegaMenu.js.map +0 -1
  139. package/dist-es/mega-menu/useMegaMenuNavigation.js +0 -278
  140. package/dist-es/mega-menu/useMegaMenuNavigation.js.map +0 -1
  141. package/dist-es/mega-menu/usePageMargin.js +0 -20
  142. package/dist-es/mega-menu/usePageMargin.js.map +0 -1
  143. package/dist-es/toolbar-next/ToolbarContentNext.css.js +0 -4
  144. package/dist-es/toolbar-next/ToolbarContentNext.css.js.map +0 -1
  145. package/dist-es/toolbar-next/ToolbarContentNext.js +0 -30
  146. package/dist-es/toolbar-next/ToolbarContentNext.js.map +0 -1
  147. package/dist-es/toolbar-next/ToolbarNext.css.js +0 -4
  148. package/dist-es/toolbar-next/ToolbarNext.css.js.map +0 -1
  149. package/dist-es/toolbar-next/ToolbarNext.js +0 -392
  150. package/dist-es/toolbar-next/ToolbarNext.js.map +0 -1
  151. package/dist-es/toolbar-next/ToolbarNextOverflow.css.js +0 -4
  152. package/dist-es/toolbar-next/ToolbarNextOverflow.css.js.map +0 -1
  153. package/dist-es/toolbar-next/ToolbarNextOverflow.js +0 -701
  154. package/dist-es/toolbar-next/ToolbarNextOverflow.js.map +0 -1
  155. package/dist-es/toolbar-next/ToolbarNextOverflowFloatingBoundary.js +0 -159
  156. package/dist-es/toolbar-next/ToolbarNextOverflowFloatingBoundary.js.map +0 -1
  157. package/dist-es/toolbar-next/TooltrayNext.css.js +0 -4
  158. package/dist-es/toolbar-next/TooltrayNext.css.js.map +0 -1
  159. package/dist-es/toolbar-next/TooltrayNext.js +0 -53
  160. package/dist-es/toolbar-next/TooltrayNext.js.map +0 -1
  161. package/dist-es/toolbar-next/toolbarNextKeyboardUtils.js +0 -390
  162. package/dist-es/toolbar-next/toolbarNextKeyboardUtils.js.map +0 -1
  163. package/dist-es/toolbar-next/toolbarNextUtils.js +0 -211
  164. package/dist-es/toolbar-next/toolbarNextUtils.js.map +0 -1
  165. package/dist-es/toolbar-next/useToolbarNextKeyboardNavigation.js +0 -310
  166. package/dist-es/toolbar-next/useToolbarNextKeyboardNavigation.js.map +0 -1
  167. package/dist-es/toolbar-next/useToolbarNextOverflow.js +0 -743
  168. package/dist-es/toolbar-next/useToolbarNextOverflow.js.map +0 -1
  169. package/dist-types/mega-menu/MegaMenu.d.ts +0 -36
  170. package/dist-types/mega-menu/MegaMenuActions.d.ts +0 -10
  171. package/dist-types/mega-menu/MegaMenuAside.d.ts +0 -9
  172. package/dist-types/mega-menu/MegaMenuContent.d.ts +0 -9
  173. package/dist-types/mega-menu/MegaMenuContext.d.ts +0 -28
  174. package/dist-types/mega-menu/MegaMenuGroup.d.ts +0 -9
  175. package/dist-types/mega-menu/MegaMenuGroupContext.d.ts +0 -12
  176. package/dist-types/mega-menu/MegaMenuGroupHeading.d.ts +0 -13
  177. package/dist-types/mega-menu/MegaMenuGroups.d.ts +0 -8
  178. package/dist-types/mega-menu/MegaMenuList.d.ts +0 -16
  179. package/dist-types/mega-menu/MegaMenuListItem.d.ts +0 -25
  180. package/dist-types/mega-menu/MegaMenuPanel.d.ts +0 -8
  181. package/dist-types/mega-menu/MegaMenuTrigger.d.ts +0 -9
  182. package/dist-types/mega-menu/index.d.ts +0 -11
  183. package/dist-types/mega-menu/useMegaMenu.d.ts +0 -6
  184. package/dist-types/mega-menu/useMegaMenuNavigation.d.ts +0 -16
  185. package/dist-types/mega-menu/usePageMargin.d.ts +0 -6
  186. package/dist-types/toolbar-next/ToolbarContentNext.d.ts +0 -11
  187. package/dist-types/toolbar-next/ToolbarNext.d.ts +0 -12
  188. package/dist-types/toolbar-next/ToolbarNextOverflow.d.ts +0 -34
  189. package/dist-types/toolbar-next/ToolbarNextOverflowFloatingBoundary.d.ts +0 -16
  190. package/dist-types/toolbar-next/TooltrayNext.d.ts +0 -37
  191. package/dist-types/toolbar-next/index.d.ts +0 -3
  192. package/dist-types/toolbar-next/toolbarNextKeyboardUtils.d.ts +0 -39
  193. package/dist-types/toolbar-next/toolbarNextUtils.d.ts +0 -42
  194. package/dist-types/toolbar-next/useToolbarNextKeyboardNavigation.d.ts +0 -42
  195. package/dist-types/toolbar-next/useToolbarNextOverflow.d.ts +0 -37
@@ -1 +0,0 @@
1
- {"version":3,"file":"toolbarNextUtils.js","sources":["../src/toolbar-next/toolbarNextUtils.ts"],"sourcesContent":["import { Divider, getRefFromChildren } from \"@salt-ds/core\";\nimport {\n Children,\n Fragment,\n isValidElement,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from \"react\";\n\nimport {\n ToolbarContentNext,\n type ToolbarContentNextPosition,\n type ToolbarContentNextProps,\n} from \"./ToolbarContentNext\";\nimport {\n TooltrayNext,\n type TooltrayNextOverflowMode,\n type TooltrayNextProps,\n} from \"./TooltrayNext\";\n\nexport type ToolbarNextMode = \"explicit\" | \"flat\" | \"invalid\";\n\ntype ToolbarNextChild = Exclude<ReactNode, boolean | null | undefined>;\n\nexport interface ToolbarNextOverflowItem {\n align: NonNullable<TooltrayNextProps[\"align\"]>;\n element: ReactElement<TooltrayNextProps>;\n id: string;\n leadingDecorations: ReactElement[];\n order: number;\n overflowGroup: string;\n overflowGroupKey: string;\n overflowLabel?: string;\n overflowMode: TooltrayNextOverflowMode;\n overflowPriority: number;\n contentKey: string;\n trailingDecorations: ReactElement[];\n}\n\nexport interface ToolbarNextOverflowRenderSlot {\n item: ToolbarNextOverflowItem;\n overflowed: boolean;\n showLeadingDecorations: boolean;\n showTrailingDecorations: boolean;\n triggerGroupKey?: string;\n}\n\nexport interface ToolbarNextContentModel {\n implicit: boolean;\n items: ToolbarNextOverflowItem[];\n key: string;\n position: ToolbarContentNextPosition;\n props: Omit<ToolbarContentNextProps, \"children\" | \"position\">;\n ref: Ref<HTMLDivElement> | null;\n}\n\nexport interface ToolbarNextModel {\n mode: ToolbarNextMode;\n content: ToolbarNextContentModel[];\n}\n\nexport function buildContentOverflowRenderSlots(\n items: ToolbarNextOverflowItem[],\n overflowedIds: Set<string>,\n activeNamedGroupKeys: Set<string>,\n) {\n const triggerGroupByItemId = new Map<string, string>();\n\n for (const groupKey of activeNamedGroupKeys) {\n const anchorItem = items.find((item) => {\n return overflowedIds.has(item.id) && item.overflowGroupKey === groupKey;\n });\n\n if (anchorItem) {\n triggerGroupByItemId.set(anchorItem.id, groupKey);\n }\n }\n\n const slots: ToolbarNextOverflowRenderSlot[] = [];\n let hasSurvivingPredecessor = false;\n\n for (const item of items) {\n const overflowed = overflowedIds.has(item.id);\n const triggerGroupKey = triggerGroupByItemId.get(item.id);\n const survives = !overflowed || triggerGroupKey != null;\n\n if (overflowed && !triggerGroupKey) {\n continue;\n }\n\n slots.push({\n item,\n overflowed,\n showLeadingDecorations:\n item.leadingDecorations.length > 0 &&\n hasSurvivingPredecessor &&\n survives,\n showTrailingDecorations:\n !overflowed && item.trailingDecorations.length > 0,\n triggerGroupKey,\n });\n\n if (survives) {\n hasSurvivingPredecessor = true;\n }\n }\n\n return slots;\n}\n\nexport function flattenToolbarChildren(\n children: ReactNode,\n): ToolbarNextChild[] {\n const flattened: ToolbarNextChild[] = [];\n\n Children.forEach(children, (child) => {\n if (child == null || typeof child === \"boolean\") {\n return;\n }\n\n if (isValidElement(child) && child.type === Fragment) {\n flattened.push(...flattenToolbarChildren(child.props.children));\n return;\n }\n\n flattened.push(child);\n });\n\n return flattened;\n}\n\nfunction isToolbarContentNextElement(\n child: ToolbarNextChild,\n): child is ReactElement<ToolbarContentNextProps> {\n return isValidElement(child) && child.type === ToolbarContentNext;\n}\n\nfunction isTooltrayElement(\n child: ToolbarNextChild,\n): child is ReactElement<TooltrayNextProps> {\n return isValidElement(child) && child.type === TooltrayNext;\n}\n\nfunction isDividerElement(child: ToolbarNextChild): child is ReactElement {\n return isValidElement(child) && child.type === Divider;\n}\n\nfunction buildItemId(\n contentKey: string,\n element: ReactElement<TooltrayNextProps>,\n order: number,\n) {\n const elementKey =\n element.key != null ? String(element.key) : `tray-${order}`;\n return `${contentKey}-${elementKey}-${order}`;\n}\n\nfunction buildOverflowGroupKey(contentKey: string, overflowGroup: string) {\n return overflowGroup === \"shared\"\n ? \"shared\"\n : `${contentKey}:${overflowGroup}`;\n}\n\nfunction normalizeContentItems(\n children: ReactNode,\n contentKey: string,\n): ToolbarNextOverflowItem[] | null {\n const flattenedChildren = flattenToolbarChildren(children);\n const items: ToolbarNextOverflowItem[] = [];\n let pendingLeadingDecorations: ReactElement[] = [];\n\n for (const child of flattenedChildren) {\n if (isDividerElement(child)) {\n pendingLeadingDecorations.push(child);\n continue;\n }\n\n if (!isTooltrayElement(child)) {\n return null;\n }\n\n const {\n align = \"start\",\n overflowGroup = \"shared\",\n overflowLabel,\n overflowMode = \"independent\",\n overflowPriority = 0,\n } = child.props;\n const order = items.length;\n\n items.push({\n align,\n element: child,\n id: buildItemId(contentKey, child, order),\n leadingDecorations: pendingLeadingDecorations,\n order,\n overflowGroup,\n overflowGroupKey: buildOverflowGroupKey(contentKey, overflowGroup),\n overflowLabel,\n overflowMode,\n overflowPriority,\n contentKey,\n trailingDecorations: [],\n });\n\n pendingLeadingDecorations = [];\n }\n\n if (pendingLeadingDecorations.length > 0 && items.length > 0) {\n items[items.length - 1]?.trailingDecorations.push(\n ...pendingLeadingDecorations,\n );\n }\n\n return items;\n}\n\nfunction normalizeExplicitContent(\n children: ToolbarNextChild[],\n): ToolbarNextContentModel[] | null {\n const content: ToolbarNextContentModel[] = [];\n\n for (const [index, child] of children.entries()) {\n if (!isToolbarContentNextElement(child)) {\n continue;\n }\n\n const {\n children: contentChildren,\n position,\n ...contentProps\n } = child.props;\n const contentKey =\n child.key != null ? String(child.key) : `${position}-content-${index}`;\n const items = normalizeContentItems(contentChildren, contentKey);\n\n if (items == null) {\n return null;\n }\n\n content.push({\n implicit: false,\n items,\n key: contentKey,\n position,\n props: contentProps,\n ref: getRefFromChildren(child),\n });\n }\n\n return content;\n}\n\nfunction normalizeFlatChildren(children: ToolbarNextChild[]) {\n const buckets: Record<ToolbarContentNextPosition, ToolbarNextChild[]> = {\n start: [],\n center: [],\n end: [],\n };\n let currentPosition: ToolbarContentNextPosition = \"start\";\n\n for (const child of children) {\n if (isTooltrayElement(child)) {\n currentPosition = child.props.align ?? \"start\";\n buckets[currentPosition].push(child);\n continue;\n }\n\n if (isDividerElement(child)) {\n buckets[currentPosition].push(child);\n continue;\n }\n\n return null;\n }\n\n return (Object.keys(buckets) as ToolbarContentNextPosition[]).reduce<\n ToolbarNextContentModel[]\n >((content, position) => {\n const contentKey = `${position}-implicit`;\n const contentItems = normalizeContentItems(buckets[position], contentKey);\n\n if (contentItems == null || contentItems.length === 0) {\n return content;\n }\n\n content.push({\n implicit: true,\n items: contentItems,\n key: contentKey,\n position,\n props: {},\n ref: null,\n });\n\n return content;\n }, []);\n}\n\nexport function normalizeToolbarChildren(\n children: ReactNode,\n): ToolbarNextModel {\n const flattenedChildren = flattenToolbarChildren(children);\n const hasContentChildren = flattenedChildren.some(\n isToolbarContentNextElement,\n );\n const hasOnlyContent =\n hasContentChildren && flattenedChildren.every(isToolbarContentNextElement);\n const hasOnlyFlatChildren = flattenedChildren.every(\n (child) => isTooltrayElement(child) || isDividerElement(child),\n );\n\n if (hasOnlyContent) {\n const content = normalizeExplicitContent(flattenedChildren);\n\n if (content == null) {\n return { mode: \"invalid\", content: [] };\n }\n\n return {\n mode: \"explicit\",\n content,\n };\n }\n\n if (hasOnlyFlatChildren) {\n const content = normalizeFlatChildren(flattenedChildren);\n\n if (content == null) {\n return { mode: \"invalid\", content: [] };\n }\n\n return {\n mode: \"flat\",\n content,\n };\n }\n\n return {\n mode: \"invalid\",\n content: [],\n };\n}\n"],"names":[],"mappings":"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"}
@@ -1,310 +0,0 @@
1
- import { useRef, useCallback } from 'react';
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
-
4
- function useToolbarNextKeyboardNavigation({
5
- includeTabIndexMinusOne = false,
6
- items = [],
7
- overflowedIds,
8
- scopeRef
9
- }) {
10
- const rememberedFocusRef = useRef(null);
11
- const pointerDownTargetRef = useRef(null);
12
- const restoringEntryFocusRef = useRef(false);
13
- const shouldPreserveItemMemoryForTrigger = useCallback(
14
- (groupKey) => {
15
- const rememberedFocus = rememberedFocusRef.current;
16
- if ((rememberedFocus == null ? void 0 : rememberedFocus.type) !== "item") {
17
- return false;
18
- }
19
- const item = items.find((entry) => entry.id === rememberedFocus.itemId);
20
- return (item == null ? void 0 : item.overflowGroupKey) === groupKey && (overflowedIds == null || overflowedIds.has(item.id));
21
- },
22
- [items, overflowedIds]
23
- );
24
- const rememberTarget = useCallback(
25
- (target) => {
26
- const scopeRoot = scopeRef.current;
27
- if (!scopeRoot) {
28
- return;
29
- }
30
- const focusMemory = getToolbarNextFocusMemory(scopeRoot, target, {
31
- includeTabIndexMinusOne
32
- });
33
- if (focusMemory) {
34
- if (focusMemory.type === "overflow-trigger" && shouldPreserveItemMemoryForTrigger(focusMemory.groupKey)) {
35
- return;
36
- }
37
- rememberedFocusRef.current = focusMemory;
38
- }
39
- },
40
- [includeTabIndexMinusOne, scopeRef, shouldPreserveItemMemoryForTrigger]
41
- );
42
- const rememberItemFocus = useCallback(
43
- (itemId, controlIndex) => {
44
- var _a;
45
- const scopeRoot = scopeRef.current;
46
- if (!scopeRoot) {
47
- return;
48
- }
49
- const focusables = getToolbarNextScopeFocusableElements(scopeRoot, {
50
- includeTabIndexMinusOne
51
- });
52
- const itemFocusables = focusables.filter((element) => {
53
- var _a2;
54
- return ((_a2 = element.closest(`[${TOOLBAR_NEXT_ITEM_ATTR}]`)) == null ? void 0 : _a2.getAttribute(TOOLBAR_NEXT_ITEM_ATTR)) === itemId;
55
- });
56
- const item = items.find((entry) => entry.id === itemId);
57
- const visibleItemTarget = itemFocusables[Math.min(controlIndex, itemFocusables.length - 1)] ?? itemFocusables[0];
58
- const overflowTriggerTarget = item ? focusables.find((element) => {
59
- const trigger = element.closest(
60
- `[${TOOLBAR_NEXT_OVERFLOW_TRIGGER_ATTR}]`
61
- );
62
- return (trigger == null ? void 0 : trigger.getAttribute(TOOLBAR_NEXT_GROUP_KEY_ATTR)) === item.overflowGroupKey;
63
- }) : void 0;
64
- const scopeIndex = Math.max(
65
- focusables.indexOf(visibleItemTarget ?? overflowTriggerTarget),
66
- ((_a = rememberedFocusRef.current) == null ? void 0 : _a.scopeIndex) ?? 0
67
- );
68
- const focusMemory = {
69
- controlIndex,
70
- itemId,
71
- scopeIndex,
72
- type: "item"
73
- };
74
- rememberedFocusRef.current = focusMemory;
75
- },
76
- [includeTabIndexMinusOne, items, scopeRef]
77
- );
78
- const focusEntryTarget = useCallback(() => {
79
- const scopeRoot = scopeRef.current;
80
- if (!scopeRoot) {
81
- return;
82
- }
83
- const target = resolveToolbarNextFocusTarget(
84
- scopeRoot,
85
- rememberedFocusRef.current,
86
- {
87
- items,
88
- includeTabIndexMinusOne,
89
- overflowedIds
90
- }
91
- );
92
- if (!target) {
93
- return;
94
- }
95
- queueMicrotask(() => {
96
- focusToolbarNextElement(target);
97
- });
98
- }, [includeTabIndexMinusOne, items, overflowedIds, scopeRef]);
99
- const restoreEntryFocus = useCallback((target) => {
100
- restoringEntryFocusRef.current = true;
101
- focusToolbarNextElement(target);
102
- }, []);
103
- const handleScopeFocus = useCallback(
104
- (event) => {
105
- var _a;
106
- const scopeRoot = scopeRef.current;
107
- const target = event.target;
108
- if (!scopeRoot || !(target instanceof HTMLElement) || getClosestToolbarNextScopeRoot(target) !== scopeRoot) {
109
- return;
110
- }
111
- if (restoringEntryFocusRef.current) {
112
- restoringEntryFocusRef.current = false;
113
- pointerDownTargetRef.current = null;
114
- rememberTarget(target);
115
- return;
116
- }
117
- const relatedTarget = event.relatedTarget;
118
- const enteringFromOutside = !(relatedTarget instanceof HTMLElement) || getClosestToolbarNextScopeRoot(relatedTarget) !== scopeRoot;
119
- if (!enteringFromOutside) {
120
- pointerDownTargetRef.current = null;
121
- rememberTarget(target);
122
- return;
123
- }
124
- const targetMemory = getToolbarNextFocusMemory(scopeRoot, target, {
125
- includeTabIndexMinusOne
126
- });
127
- const pointerDownTarget = pointerDownTargetRef.current;
128
- pointerDownTargetRef.current = null;
129
- const focusFromPointerTarget = isToolbarNextFocusFromPointerTarget(
130
- target,
131
- pointerDownTarget
132
- );
133
- if (focusFromPointerTarget) {
134
- rememberTarget(target);
135
- return;
136
- }
137
- if ((targetMemory == null ? void 0 : targetMemory.type) === "overflow-trigger") {
138
- const shouldPreserve = shouldPreserveItemMemoryForTrigger(
139
- targetMemory.groupKey
140
- );
141
- if (shouldPreserve) {
142
- return;
143
- }
144
- if (((_a = rememberedFocusRef.current) == null ? void 0 : _a.type) === "item") {
145
- const restoreTarget2 = resolveToolbarNextFocusTarget(
146
- scopeRoot,
147
- rememberedFocusRef.current,
148
- {
149
- items,
150
- includeTabIndexMinusOne,
151
- overflowedIds
152
- }
153
- );
154
- if (restoreTarget2 && restoreTarget2 !== target) {
155
- event.stopPropagation();
156
- restoreEntryFocus(restoreTarget2);
157
- return;
158
- }
159
- }
160
- rememberedFocusRef.current = targetMemory;
161
- return;
162
- }
163
- const restoreTarget = resolveToolbarNextFocusTarget(
164
- scopeRoot,
165
- rememberedFocusRef.current,
166
- {
167
- items,
168
- includeTabIndexMinusOne,
169
- overflowedIds
170
- }
171
- );
172
- if (restoreTarget && restoreTarget !== target) {
173
- event.stopPropagation();
174
- restoreEntryFocus(restoreTarget);
175
- return;
176
- }
177
- rememberTarget(target);
178
- },
179
- [
180
- includeTabIndexMinusOne,
181
- items,
182
- overflowedIds,
183
- rememberTarget,
184
- restoreEntryFocus,
185
- scopeRef,
186
- shouldPreserveItemMemoryForTrigger
187
- ]
188
- );
189
- const handleFocusCapture = useCallback(
190
- (event) => {
191
- handleScopeFocus(event);
192
- },
193
- [handleScopeFocus]
194
- );
195
- const handleScopePointerDown = useCallback(
196
- (event) => {
197
- const scopeRoot = scopeRef.current;
198
- const target = event.target;
199
- if (!scopeRoot || !(target instanceof Element) || getClosestToolbarNextScopeRoot(target) !== scopeRoot) {
200
- pointerDownTargetRef.current = null;
201
- return;
202
- }
203
- pointerDownTargetRef.current = target;
204
- },
205
- [scopeRef]
206
- );
207
- const handlePointerDownCapture = useCallback(
208
- (event) => {
209
- handleScopePointerDown(event);
210
- },
211
- [handleScopePointerDown]
212
- );
213
- const handleScopeBlur = useCallback(
214
- (event) => {
215
- const scopeRoot = scopeRef.current;
216
- const target = event.target;
217
- if (!scopeRoot || !(target instanceof HTMLElement) || getClosestToolbarNextScopeRoot(target) !== scopeRoot) {
218
- return;
219
- }
220
- const relatedTarget = event.relatedTarget;
221
- const leavingScope = !(relatedTarget instanceof HTMLElement) || getClosestToolbarNextScopeRoot(relatedTarget) !== scopeRoot;
222
- if (leavingScope) {
223
- rememberTarget(target);
224
- }
225
- },
226
- [rememberTarget, scopeRef]
227
- );
228
- const handleBlurCapture = useCallback(
229
- (event) => {
230
- handleScopeBlur(event);
231
- },
232
- [handleScopeBlur]
233
- );
234
- const handleScopeKeyDown = useCallback(
235
- (event) => {
236
- const scopeRoot = scopeRef.current;
237
- const target = event.target;
238
- if (!scopeRoot || !(target instanceof HTMLElement) || getClosestToolbarNextScopeRoot(target) !== scopeRoot || event.altKey || event.ctrlKey || event.metaKey) {
239
- return;
240
- }
241
- if (event.key === "Tab" && scopeRoot.getAttribute(TOOLBAR_NEXT_SCOPE_ROOT_ATTR) === "main" && !shouldToolbarNextPreserveNativeTab(target)) {
242
- const moveTarget2 = getToolbarNextTabMoveTarget(
243
- scopeRoot,
244
- event.shiftKey
245
- );
246
- event.preventDefault();
247
- event.stopPropagation();
248
- rememberTarget(target);
249
- queueMicrotask(() => {
250
- if (moveTarget2 == null ? void 0 : moveTarget2.isConnected) {
251
- focusToolbarNextElement(moveTarget2);
252
- } else {
253
- target.blur();
254
- }
255
- });
256
- return;
257
- }
258
- const moveTarget = getToolbarNextDirectionalMoveTarget(
259
- scopeRoot,
260
- target,
261
- event.key,
262
- { includeTabIndexMinusOne }
263
- );
264
- if (!moveTarget) {
265
- return;
266
- }
267
- event.preventDefault();
268
- event.stopPropagation();
269
- rememberTarget(moveTarget);
270
- focusToolbarNextElement(moveTarget);
271
- },
272
- [includeTabIndexMinusOne, rememberTarget, scopeRef]
273
- );
274
- const handleKeyDownCapture = useCallback(
275
- (event) => {
276
- handleScopeKeyDown(event);
277
- },
278
- [handleScopeKeyDown]
279
- );
280
- const getEntryFocusable = useCallback(() => {
281
- const scopeRoot = scopeRef.current;
282
- if (!scopeRoot) {
283
- return null;
284
- }
285
- return resolveToolbarNextFocusTarget(scopeRoot, rememberedFocusRef.current, {
286
- items,
287
- includeTabIndexMinusOne,
288
- overflowedIds
289
- }) ?? getToolbarNextScopeFocusableElements(scopeRoot, {
290
- includeTabIndexMinusOne
291
- })[0] ?? null;
292
- }, [includeTabIndexMinusOne, items, overflowedIds, scopeRef]);
293
- return {
294
- focusEntryTarget,
295
- getEntryFocusable,
296
- handleBlurCapture,
297
- handleFocusCapture,
298
- handleKeyDownCapture,
299
- handlePointerDownCapture,
300
- handleScopeBlur,
301
- handleScopeFocus,
302
- handleScopeKeyDown,
303
- handleScopePointerDown,
304
- rememberItemFocus,
305
- rememberedFocusRef
306
- };
307
- }
308
-
309
- export { useToolbarNextKeyboardNavigation };
310
- //# sourceMappingURL=useToolbarNextKeyboardNavigation.js.map
@@ -1 +0,0 @@
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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"}