@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":"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":["Children","isValidElement","Fragment","ToolbarContentNext","TooltrayNext","Divider","getRefFromChildren"],"mappings":";;;;;;;AA8DO,SAAS,+BAAA,CACd,KAAA,EACA,aAAA,EACA,oBAAA,EACA;AACA,EAAA,MAAM,oBAAA,uBAA2B,GAAA,EAAoB;AAErD,EAAA,KAAA,MAAW,YAAY,oBAAA,EAAsB;AAC3C,IAAA,MAAM,UAAA,GAAa,KAAA,CAAM,IAAA,CAAK,CAAC,IAAA,KAAS;AACtC,MAAA,OAAO,cAAc,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA,IAAK,KAAK,gBAAA,KAAqB,QAAA;AAAA,IACjE,CAAC,CAAA;AAED,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,oBAAA,CAAqB,GAAA,CAAI,UAAA,CAAW,EAAA,EAAI,QAAQ,CAAA;AAAA,IAClD;AAAA,EACF;AAEA,EAAA,MAAM,QAAyC,EAAC;AAChD,EAAA,IAAI,uBAAA,GAA0B,KAAA;AAE9B,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,UAAA,GAAa,aAAA,CAAc,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA;AAC5C,IAAA,MAAM,eAAA,GAAkB,oBAAA,CAAqB,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA;AACxD,IAAA,MAAM,QAAA,GAAW,CAAC,UAAA,IAAc,eAAA,IAAmB,IAAA;AAEnD,IAAA,IAAI,UAAA,IAAc,CAAC,eAAA,EAAiB;AAClC,MAAA;AAAA,IACF;AAEA,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,IAAA;AAAA,MACA,UAAA;AAAA,MACA,sBAAA,EACE,IAAA,CAAK,kBAAA,CAAmB,MAAA,GAAS,KACjC,uBAAA,IACA,QAAA;AAAA,MACF,uBAAA,EACE,CAAC,UAAA,IAAc,IAAA,CAAK,oBAAoB,MAAA,GAAS,CAAA;AAAA,MACnD;AAAA,KACD,CAAA;AAED,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,uBAAA,GAA0B,IAAA;AAAA,IAC5B;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,uBACd,QAAA,EACoB;AACpB,EAAA,MAAM,YAAgC,EAAC;AAEvC,EAAAA,cAAA,CAAS,OAAA,CAAQ,QAAA,EAAU,CAAC,KAAA,KAAU;AACpC,IAAA,IAAI,KAAA,IAAS,IAAA,IAAQ,OAAO,KAAA,KAAU,SAAA,EAAW;AAC/C,MAAA;AAAA,IACF;AAEA,IAAA,IAAIC,oBAAA,CAAe,KAAK,CAAA,IAAK,KAAA,CAAM,SAASC,cAAA,EAAU;AACpD,MAAA,SAAA,CAAU,KAAK,GAAG,sBAAA,CAAuB,KAAA,CAAM,KAAA,CAAM,QAAQ,CAAC,CAAA;AAC9D,MAAA;AAAA,IACF;AAEA,IAAA,SAAA,CAAU,KAAK,KAAK,CAAA;AAAA,EACtB,CAAC,CAAA;AAED,EAAA,OAAO,SAAA;AACT;AAEA,SAAS,4BACP,KAAA,EACgD;AAChD,EAAA,OAAOD,oBAAA,CAAe,KAAK,CAAA,IAAK,KAAA,CAAM,IAAA,KAASE,qCAAA;AACjD;AAEA,SAAS,kBACP,KAAA,EAC0C;AAC1C,EAAA,OAAOF,oBAAA,CAAe,KAAK,CAAA,IAAK,KAAA,CAAM,IAAA,KAASG,yBAAA;AACjD;AAEA,SAAS,iBAAiB,KAAA,EAAgD;AACxE,EAAA,OAAOH,oBAAA,CAAe,KAAK,CAAA,IAAK,KAAA,CAAM,IAAA,KAASI,YAAA;AACjD;AAEA,SAAS,WAAA,CACP,UAAA,EACA,OAAA,EACA,KAAA,EACA;AACA,EAAA,MAAM,UAAA,GACJ,QAAQ,GAAA,IAAO,IAAA,GAAO,OAAO,OAAA,CAAQ,GAAG,CAAA,GAAI,CAAA,KAAA,EAAQ,KAAK,CAAA,CAAA;AAC3D,EAAA,OAAO,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,UAAU,IAAI,KAAK,CAAA,CAAA;AAC7C;AAEA,SAAS,qBAAA,CAAsB,YAAoB,aAAA,EAAuB;AACxE,EAAA,OAAO,kBAAkB,QAAA,GACrB,QAAA,GACA,CAAA,EAAG,UAAU,IAAI,aAAa,CAAA,CAAA;AACpC;AAEA,SAAS,qBAAA,CACP,UACA,UAAA,EACkC;AAvKpC,EAAA,IAAA,EAAA;AAwKE,EAAA,MAAM,iBAAA,GAAoB,uBAAuB,QAAQ,CAAA;AACzD,EAAA,MAAM,QAAmC,EAAC;AAC1C,EAAA,IAAI,4BAA4C,EAAC;AAEjD,EAAA,KAAA,MAAW,SAAS,iBAAA,EAAmB;AACrC,IAAA,IAAI,gBAAA,CAAiB,KAAK,CAAA,EAAG;AAC3B,MAAA,yBAAA,CAA0B,KAAK,KAAK,CAAA;AACpC,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,iBAAA,CAAkB,KAAK,CAAA,EAAG;AAC7B,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM;AAAA,MACJ,KAAA,GAAQ,OAAA;AAAA,MACR,aAAA,GAAgB,QAAA;AAAA,MAChB,aAAA;AAAA,MACA,YAAA,GAAe,aAAA;AAAA,MACf,gBAAA,GAAmB;AAAA,QACjB,KAAA,CAAM,KAAA;AACV,IAAA,MAAM,QAAQ,KAAA,CAAM,MAAA;AAEpB,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,KAAA;AAAA,MACA,OAAA,EAAS,KAAA;AAAA,MACT,EAAA,EAAI,WAAA,CAAY,UAAA,EAAY,KAAA,EAAO,KAAK,CAAA;AAAA,MACxC,kBAAA,EAAoB,yBAAA;AAAA,MACpB,KAAA;AAAA,MACA,aAAA;AAAA,MACA,gBAAA,EAAkB,qBAAA,CAAsB,UAAA,EAAY,aAAa,CAAA;AAAA,MACjE,aAAA;AAAA,MACA,YAAA;AAAA,MACA,gBAAA;AAAA,MACA,UAAA;AAAA,MACA,qBAAqB;AAAC,KACvB,CAAA;AAED,IAAA,yBAAA,GAA4B,EAAC;AAAA,EAC/B;AAEA,EAAA,IAAI,yBAAA,CAA0B,MAAA,GAAS,CAAA,IAAK,KAAA,CAAM,SAAS,CAAA,EAAG;AAC5D,IAAA,CAAA,EAAA,GAAA,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,KAAtB,mBAAyB,mBAAA,CAAoB,IAAA;AAAA,MAC3C,GAAG;AAAA,KAAA;AAAA,EAEP;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,yBACP,QAAA,EACkC;AAClC,EAAA,MAAM,UAAqC,EAAC;AAE5C,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,KAAK,CAAA,IAAK,QAAA,CAAS,SAAQ,EAAG;AAC/C,IAAA,IAAI,CAAC,2BAAA,CAA4B,KAAK,CAAA,EAAG;AACvC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM;AAAA,MACJ,QAAA,EAAU,eAAA;AAAA,MACV,QAAA;AAAA,MACA,GAAG;AAAA,QACD,KAAA,CAAM,KAAA;AACV,IAAA,MAAM,UAAA,GACJ,KAAA,CAAM,GAAA,IAAO,IAAA,GAAO,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,GAAI,CAAA,EAAG,QAAQ,CAAA,SAAA,EAAY,KAAK,CAAA,CAAA;AACtE,IAAA,MAAM,KAAA,GAAQ,qBAAA,CAAsB,eAAA,EAAiB,UAAU,CAAA;AAE/D,IAAA,IAAI,SAAS,IAAA,EAAM;AACjB,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,MACX,QAAA,EAAU,KAAA;AAAA,MACV,KAAA;AAAA,MACA,GAAA,EAAK,UAAA;AAAA,MACL,QAAA;AAAA,MACA,KAAA,EAAO,YAAA;AAAA,MACP,GAAA,EAAKC,wBAAmB,KAAK;AAAA,KAC9B,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,sBAAsB,QAAA,EAA8B;AAC3D,EAAA,MAAM,OAAA,GAAkE;AAAA,IACtE,OAAO,EAAC;AAAA,IACR,QAAQ,EAAC;AAAA,IACT,KAAK;AAAC,GACR;AACA,EAAA,IAAI,eAAA,GAA8C,OAAA;AAElD,EAAA,KAAA,MAAW,SAAS,QAAA,EAAU;AAC5B,IAAA,IAAI,iBAAA,CAAkB,KAAK,CAAA,EAAG;AAC5B,MAAA,eAAA,GAAkB,KAAA,CAAM,MAAM,KAAA,IAAS,OAAA;AACvC,MAAA,OAAA,CAAQ,eAAe,CAAA,CAAE,IAAA,CAAK,KAAK,CAAA;AACnC,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,gBAAA,CAAiB,KAAK,CAAA,EAAG;AAC3B,MAAA,OAAA,CAAQ,eAAe,CAAA,CAAE,IAAA,CAAK,KAAK,CAAA;AACnC,MAAA;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAQ,OAAO,IAAA,CAAK,OAAO,EAAmC,MAAA,CAE5D,CAAC,SAAS,QAAA,KAAa;AACvB,IAAA,MAAM,UAAA,GAAa,GAAG,QAAQ,CAAA,SAAA,CAAA;AAC9B,IAAA,MAAM,YAAA,GAAe,qBAAA,CAAsB,OAAA,CAAQ,QAAQ,GAAG,UAAU,CAAA;AAExE,IAAA,IAAI,YAAA,IAAgB,IAAA,IAAQ,YAAA,CAAa,MAAA,KAAW,CAAA,EAAG;AACrD,MAAA,OAAO,OAAA;AAAA,IACT;AAEA,IAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,MACX,QAAA,EAAU,IAAA;AAAA,MACV,KAAA,EAAO,YAAA;AAAA,MACP,GAAA,EAAK,UAAA;AAAA,MACL,QAAA;AAAA,MACA,OAAO,EAAC;AAAA,MACR,GAAA,EAAK;AAAA,KACN,CAAA;AAED,IAAA,OAAO,OAAA;AAAA,EACT,CAAA,EAAG,EAAE,CAAA;AACP;AAEO,SAAS,yBACd,QAAA,EACkB;AAClB,EAAA,MAAM,iBAAA,GAAoB,uBAAuB,QAAQ,CAAA;AACzD,EAAA,MAAM,qBAAqB,iBAAA,CAAkB,IAAA;AAAA,IAC3C;AAAA,GACF;AACA,EAAA,MAAM,cAAA,GACJ,kBAAA,IAAsB,iBAAA,CAAkB,KAAA,CAAM,2BAA2B,CAAA;AAC3E,EAAA,MAAM,sBAAsB,iBAAA,CAAkB,KAAA;AAAA,IAC5C,CAAC,KAAA,KAAU,iBAAA,CAAkB,KAAK,CAAA,IAAK,iBAAiB,KAAK;AAAA,GAC/D;AAEA,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,MAAM,OAAA,GAAU,yBAAyB,iBAAiB,CAAA;AAE1D,IAAA,IAAI,WAAW,IAAA,EAAM;AACnB,MAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,OAAA,EAAS,EAAC,EAAE;AAAA,IACxC;AAEA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,UAAA;AAAA,MACN;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,mBAAA,EAAqB;AACvB,IAAA,MAAM,OAAA,GAAU,sBAAsB,iBAAiB,CAAA;AAEvD,IAAA,IAAI,WAAW,IAAA,EAAM;AACnB,MAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,OAAA,EAAS,EAAC,EAAE;AAAA,IACxC;AAEA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,MAAA;AAAA,MACN;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,SAAA;AAAA,IACN,SAAS;AAAC,GACZ;AACF;;;;;;"}
@@ -1,312 +0,0 @@
1
- 'use strict';
2
-
3
- var react = require('react');
4
- var toolbarNextKeyboardUtils = require('./toolbarNextKeyboardUtils.js');
5
-
6
- function useToolbarNextKeyboardNavigation({
7
- includeTabIndexMinusOne = false,
8
- items = [],
9
- overflowedIds,
10
- scopeRef
11
- }) {
12
- const rememberedFocusRef = react.useRef(null);
13
- const pointerDownTargetRef = react.useRef(null);
14
- const restoringEntryFocusRef = react.useRef(false);
15
- const shouldPreserveItemMemoryForTrigger = react.useCallback(
16
- (groupKey) => {
17
- const rememberedFocus = rememberedFocusRef.current;
18
- if ((rememberedFocus == null ? void 0 : rememberedFocus.type) !== "item") {
19
- return false;
20
- }
21
- const item = items.find((entry) => entry.id === rememberedFocus.itemId);
22
- return (item == null ? void 0 : item.overflowGroupKey) === groupKey && (overflowedIds == null || overflowedIds.has(item.id));
23
- },
24
- [items, overflowedIds]
25
- );
26
- const rememberTarget = react.useCallback(
27
- (target) => {
28
- const scopeRoot = scopeRef.current;
29
- if (!scopeRoot) {
30
- return;
31
- }
32
- const focusMemory = toolbarNextKeyboardUtils.getToolbarNextFocusMemory(scopeRoot, target, {
33
- includeTabIndexMinusOne
34
- });
35
- if (focusMemory) {
36
- if (focusMemory.type === "overflow-trigger" && shouldPreserveItemMemoryForTrigger(focusMemory.groupKey)) {
37
- return;
38
- }
39
- rememberedFocusRef.current = focusMemory;
40
- }
41
- },
42
- [includeTabIndexMinusOne, scopeRef, shouldPreserveItemMemoryForTrigger]
43
- );
44
- const rememberItemFocus = react.useCallback(
45
- (itemId, controlIndex) => {
46
- var _a;
47
- const scopeRoot = scopeRef.current;
48
- if (!scopeRoot) {
49
- return;
50
- }
51
- const focusables = toolbarNextKeyboardUtils.getToolbarNextScopeFocusableElements(scopeRoot, {
52
- includeTabIndexMinusOne
53
- });
54
- const itemFocusables = focusables.filter((element) => {
55
- var _a2;
56
- return ((_a2 = element.closest(`[${toolbarNextKeyboardUtils.TOOLBAR_NEXT_ITEM_ATTR}]`)) == null ? void 0 : _a2.getAttribute(toolbarNextKeyboardUtils.TOOLBAR_NEXT_ITEM_ATTR)) === itemId;
57
- });
58
- const item = items.find((entry) => entry.id === itemId);
59
- const visibleItemTarget = itemFocusables[Math.min(controlIndex, itemFocusables.length - 1)] ?? itemFocusables[0];
60
- const overflowTriggerTarget = item ? focusables.find((element) => {
61
- const trigger = element.closest(
62
- `[${toolbarNextKeyboardUtils.TOOLBAR_NEXT_OVERFLOW_TRIGGER_ATTR}]`
63
- );
64
- return (trigger == null ? void 0 : trigger.getAttribute(toolbarNextKeyboardUtils.TOOLBAR_NEXT_GROUP_KEY_ATTR)) === item.overflowGroupKey;
65
- }) : void 0;
66
- const scopeIndex = Math.max(
67
- focusables.indexOf(visibleItemTarget ?? overflowTriggerTarget),
68
- ((_a = rememberedFocusRef.current) == null ? void 0 : _a.scopeIndex) ?? 0
69
- );
70
- const focusMemory = {
71
- controlIndex,
72
- itemId,
73
- scopeIndex,
74
- type: "item"
75
- };
76
- rememberedFocusRef.current = focusMemory;
77
- },
78
- [includeTabIndexMinusOne, items, scopeRef]
79
- );
80
- const focusEntryTarget = react.useCallback(() => {
81
- const scopeRoot = scopeRef.current;
82
- if (!scopeRoot) {
83
- return;
84
- }
85
- const target = toolbarNextKeyboardUtils.resolveToolbarNextFocusTarget(
86
- scopeRoot,
87
- rememberedFocusRef.current,
88
- {
89
- items,
90
- includeTabIndexMinusOne,
91
- overflowedIds
92
- }
93
- );
94
- if (!target) {
95
- return;
96
- }
97
- queueMicrotask(() => {
98
- toolbarNextKeyboardUtils.focusToolbarNextElement(target);
99
- });
100
- }, [includeTabIndexMinusOne, items, overflowedIds, scopeRef]);
101
- const restoreEntryFocus = react.useCallback((target) => {
102
- restoringEntryFocusRef.current = true;
103
- toolbarNextKeyboardUtils.focusToolbarNextElement(target);
104
- }, []);
105
- const handleScopeFocus = react.useCallback(
106
- (event) => {
107
- var _a;
108
- const scopeRoot = scopeRef.current;
109
- const target = event.target;
110
- if (!scopeRoot || !(target instanceof HTMLElement) || toolbarNextKeyboardUtils.getClosestToolbarNextScopeRoot(target) !== scopeRoot) {
111
- return;
112
- }
113
- if (restoringEntryFocusRef.current) {
114
- restoringEntryFocusRef.current = false;
115
- pointerDownTargetRef.current = null;
116
- rememberTarget(target);
117
- return;
118
- }
119
- const relatedTarget = event.relatedTarget;
120
- const enteringFromOutside = !(relatedTarget instanceof HTMLElement) || toolbarNextKeyboardUtils.getClosestToolbarNextScopeRoot(relatedTarget) !== scopeRoot;
121
- if (!enteringFromOutside) {
122
- pointerDownTargetRef.current = null;
123
- rememberTarget(target);
124
- return;
125
- }
126
- const targetMemory = toolbarNextKeyboardUtils.getToolbarNextFocusMemory(scopeRoot, target, {
127
- includeTabIndexMinusOne
128
- });
129
- const pointerDownTarget = pointerDownTargetRef.current;
130
- pointerDownTargetRef.current = null;
131
- const focusFromPointerTarget = toolbarNextKeyboardUtils.isToolbarNextFocusFromPointerTarget(
132
- target,
133
- pointerDownTarget
134
- );
135
- if (focusFromPointerTarget) {
136
- rememberTarget(target);
137
- return;
138
- }
139
- if ((targetMemory == null ? void 0 : targetMemory.type) === "overflow-trigger") {
140
- const shouldPreserve = shouldPreserveItemMemoryForTrigger(
141
- targetMemory.groupKey
142
- );
143
- if (shouldPreserve) {
144
- return;
145
- }
146
- if (((_a = rememberedFocusRef.current) == null ? void 0 : _a.type) === "item") {
147
- const restoreTarget2 = toolbarNextKeyboardUtils.resolveToolbarNextFocusTarget(
148
- scopeRoot,
149
- rememberedFocusRef.current,
150
- {
151
- items,
152
- includeTabIndexMinusOne,
153
- overflowedIds
154
- }
155
- );
156
- if (restoreTarget2 && restoreTarget2 !== target) {
157
- event.stopPropagation();
158
- restoreEntryFocus(restoreTarget2);
159
- return;
160
- }
161
- }
162
- rememberedFocusRef.current = targetMemory;
163
- return;
164
- }
165
- const restoreTarget = toolbarNextKeyboardUtils.resolveToolbarNextFocusTarget(
166
- scopeRoot,
167
- rememberedFocusRef.current,
168
- {
169
- items,
170
- includeTabIndexMinusOne,
171
- overflowedIds
172
- }
173
- );
174
- if (restoreTarget && restoreTarget !== target) {
175
- event.stopPropagation();
176
- restoreEntryFocus(restoreTarget);
177
- return;
178
- }
179
- rememberTarget(target);
180
- },
181
- [
182
- includeTabIndexMinusOne,
183
- items,
184
- overflowedIds,
185
- rememberTarget,
186
- restoreEntryFocus,
187
- scopeRef,
188
- shouldPreserveItemMemoryForTrigger
189
- ]
190
- );
191
- const handleFocusCapture = react.useCallback(
192
- (event) => {
193
- handleScopeFocus(event);
194
- },
195
- [handleScopeFocus]
196
- );
197
- const handleScopePointerDown = react.useCallback(
198
- (event) => {
199
- const scopeRoot = scopeRef.current;
200
- const target = event.target;
201
- if (!scopeRoot || !(target instanceof Element) || toolbarNextKeyboardUtils.getClosestToolbarNextScopeRoot(target) !== scopeRoot) {
202
- pointerDownTargetRef.current = null;
203
- return;
204
- }
205
- pointerDownTargetRef.current = target;
206
- },
207
- [scopeRef]
208
- );
209
- const handlePointerDownCapture = react.useCallback(
210
- (event) => {
211
- handleScopePointerDown(event);
212
- },
213
- [handleScopePointerDown]
214
- );
215
- const handleScopeBlur = react.useCallback(
216
- (event) => {
217
- const scopeRoot = scopeRef.current;
218
- const target = event.target;
219
- if (!scopeRoot || !(target instanceof HTMLElement) || toolbarNextKeyboardUtils.getClosestToolbarNextScopeRoot(target) !== scopeRoot) {
220
- return;
221
- }
222
- const relatedTarget = event.relatedTarget;
223
- const leavingScope = !(relatedTarget instanceof HTMLElement) || toolbarNextKeyboardUtils.getClosestToolbarNextScopeRoot(relatedTarget) !== scopeRoot;
224
- if (leavingScope) {
225
- rememberTarget(target);
226
- }
227
- },
228
- [rememberTarget, scopeRef]
229
- );
230
- const handleBlurCapture = react.useCallback(
231
- (event) => {
232
- handleScopeBlur(event);
233
- },
234
- [handleScopeBlur]
235
- );
236
- const handleScopeKeyDown = react.useCallback(
237
- (event) => {
238
- const scopeRoot = scopeRef.current;
239
- const target = event.target;
240
- if (!scopeRoot || !(target instanceof HTMLElement) || toolbarNextKeyboardUtils.getClosestToolbarNextScopeRoot(target) !== scopeRoot || event.altKey || event.ctrlKey || event.metaKey) {
241
- return;
242
- }
243
- if (event.key === "Tab" && scopeRoot.getAttribute(toolbarNextKeyboardUtils.TOOLBAR_NEXT_SCOPE_ROOT_ATTR) === "main" && !toolbarNextKeyboardUtils.shouldToolbarNextPreserveNativeTab(target)) {
244
- const moveTarget2 = toolbarNextKeyboardUtils.getToolbarNextTabMoveTarget(
245
- scopeRoot,
246
- event.shiftKey
247
- );
248
- event.preventDefault();
249
- event.stopPropagation();
250
- rememberTarget(target);
251
- queueMicrotask(() => {
252
- if (moveTarget2 == null ? void 0 : moveTarget2.isConnected) {
253
- toolbarNextKeyboardUtils.focusToolbarNextElement(moveTarget2);
254
- } else {
255
- target.blur();
256
- }
257
- });
258
- return;
259
- }
260
- const moveTarget = toolbarNextKeyboardUtils.getToolbarNextDirectionalMoveTarget(
261
- scopeRoot,
262
- target,
263
- event.key,
264
- { includeTabIndexMinusOne }
265
- );
266
- if (!moveTarget) {
267
- return;
268
- }
269
- event.preventDefault();
270
- event.stopPropagation();
271
- rememberTarget(moveTarget);
272
- toolbarNextKeyboardUtils.focusToolbarNextElement(moveTarget);
273
- },
274
- [includeTabIndexMinusOne, rememberTarget, scopeRef]
275
- );
276
- const handleKeyDownCapture = react.useCallback(
277
- (event) => {
278
- handleScopeKeyDown(event);
279
- },
280
- [handleScopeKeyDown]
281
- );
282
- const getEntryFocusable = react.useCallback(() => {
283
- const scopeRoot = scopeRef.current;
284
- if (!scopeRoot) {
285
- return null;
286
- }
287
- return toolbarNextKeyboardUtils.resolveToolbarNextFocusTarget(scopeRoot, rememberedFocusRef.current, {
288
- items,
289
- includeTabIndexMinusOne,
290
- overflowedIds
291
- }) ?? toolbarNextKeyboardUtils.getToolbarNextScopeFocusableElements(scopeRoot, {
292
- includeTabIndexMinusOne
293
- })[0] ?? null;
294
- }, [includeTabIndexMinusOne, items, overflowedIds, scopeRef]);
295
- return {
296
- focusEntryTarget,
297
- getEntryFocusable,
298
- handleBlurCapture,
299
- handleFocusCapture,
300
- handleKeyDownCapture,
301
- handlePointerDownCapture,
302
- handleScopeBlur,
303
- handleScopeFocus,
304
- handleScopeKeyDown,
305
- handleScopePointerDown,
306
- rememberItemFocus,
307
- rememberedFocusRef
308
- };
309
- }
310
-
311
- exports.useToolbarNextKeyboardNavigation = useToolbarNextKeyboardNavigation;
312
- //# 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":["useRef","useCallback","getToolbarNextFocusMemory","getToolbarNextScopeFocusableElements","_a","TOOLBAR_NEXT_ITEM_ATTR","TOOLBAR_NEXT_OVERFLOW_TRIGGER_ATTR","TOOLBAR_NEXT_GROUP_KEY_ATTR","resolveToolbarNextFocusTarget","focusToolbarNextElement","getClosestToolbarNextScopeRoot","isToolbarNextFocusFromPointerTarget","restoreTarget","TOOLBAR_NEXT_SCOPE_ROOT_ATTR","shouldToolbarNextPreserveNativeTab","moveTarget","getToolbarNextTabMoveTarget","getToolbarNextDirectionalMoveTarget"],"mappings":"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"}