{
  "version": 3,
  "sources": ["../../src/tabs/tablist.tsx"],
  "sourcesContent": ["/**\n * External dependencies\n */\nimport * as Ariakit from '@ariakit/react';\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport warning from '@wordpress/warning';\nimport { forwardRef, useLayoutEffect, useState } from '@wordpress/element';\nimport { useMergeRefs } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\n\nimport { useTabsContext } from './context';\nimport { StyledTabList } from './styles';\nimport { useTrackElementOffsetRect } from '../utils/element-rect';\nimport { useTrackOverflow } from './use-track-overflow';\nimport { useAnimatedOffsetRect } from '../utils/hooks/use-animated-offset-rect';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst DEFAULT_SCROLL_MARGIN = 24;\n\n/**\n * Scrolls a given parent element so that a given rect is visible.\n *\n * The scroll is updated initially and whenever the rect changes.\n */\nfunction useScrollRectIntoView(parent, rect, {\n  margin = DEFAULT_SCROLL_MARGIN\n} = {}) {\n  useLayoutEffect(() => {\n    if (!parent || !rect) {\n      return;\n    }\n    const {\n      scrollLeft: parentScroll\n    } = parent;\n    const parentWidth = parent.getBoundingClientRect().width;\n    const {\n      left: childLeft,\n      width: childWidth\n    } = rect;\n    const parentRightEdge = parentScroll + parentWidth;\n    const childRightEdge = childLeft + childWidth;\n    const rightOverflow = childRightEdge + margin - parentRightEdge;\n    const leftOverflow = parentScroll - (childLeft - margin);\n    let scrollLeft = null;\n    if (leftOverflow > 0) {\n      scrollLeft = parentScroll - leftOverflow;\n    } else if (rightOverflow > 0) {\n      scrollLeft = parentScroll + rightOverflow;\n    }\n    if (scrollLeft !== null) {\n      /**\n       * The optional chaining is used here to avoid unit test failures.\n       * It can be removed when JSDOM supports `Element` scroll methods.\n       * See: https://github.com/WordPress/gutenberg/pull/66498#issuecomment-2441146096\n       */\n      parent.scroll?.({\n        left: scrollLeft\n      });\n    }\n  }, [margin, parent, rect]);\n}\nexport const TabList = forwardRef(function TabList({\n  children,\n  ...otherProps\n}, ref) {\n  const {\n    store\n  } = useTabsContext() ?? {};\n  const selectedId = Ariakit.useStoreState(store, 'selectedId');\n  const activeId = Ariakit.useStoreState(store, 'activeId');\n  const selectOnMove = Ariakit.useStoreState(store, 'selectOnMove');\n  const items = Ariakit.useStoreState(store, 'items');\n  const [parent, setParent] = useState();\n  const refs = useMergeRefs([ref, setParent]);\n  const selectedItem = store?.item(selectedId);\n  const renderedItems = Ariakit.useStoreState(store, 'renderedItems');\n  const selectedItemIndex = renderedItems && selectedItem ? renderedItems.indexOf(selectedItem) : -1;\n  // Use selectedItemIndex as a dependency to force recalculation when the\n  // selected item index changes (elements are swapped / added / removed).\n  const selectedRect = useTrackElementOffsetRect(selectedItem?.element, [selectedItemIndex]);\n\n  // Track overflow to show scroll hints.\n  const overflow = useTrackOverflow(parent, {\n    first: items?.at(0)?.element,\n    last: items?.at(-1)?.element\n  });\n\n  // Size, position, and animate the indicator.\n  useAnimatedOffsetRect(parent, selectedRect, {\n    prefix: 'selected',\n    dataAttribute: 'indicator-animated',\n    transitionEndFilter: event => event.pseudoElement === '::before',\n    roundRect: true\n  });\n\n  // Make sure selected tab is scrolled into view.\n  useScrollRectIntoView(parent, selectedRect);\n  const onBlur = () => {\n    if (!selectOnMove) {\n      return;\n    }\n\n    // When automatic tab selection is on, make sure that the active tab is up\n    // to date with the selected tab when leaving the tablist. This makes sure\n    // that the selected tab will receive keyboard focus when tabbing back into\n    // the tablist.\n    if (selectedId !== activeId) {\n      store?.setActiveId(selectedId);\n    }\n  };\n  if (!store) {\n    globalThis.SCRIPT_DEBUG === true ? warning('`Tabs.TabList` must be wrapped in a `Tabs` component.') : void 0;\n    return null;\n  }\n  return /*#__PURE__*/_jsx(StyledTabList, {\n    ref: refs,\n    store: store,\n    render: props => /*#__PURE__*/_jsx(\"div\", {\n      ...props,\n      // Fallback to -1 to prevent browsers from making the tablist\n      // tabbable when it is a scrolling container.\n      tabIndex: props.tabIndex ?? -1\n    }),\n    onBlur: onBlur,\n    \"data-select-on-move\": selectOnMove ? 'true' : 'false',\n    ...otherProps,\n    className: clsx(overflow.first && 'is-overflowing-first', overflow.last && 'is-overflowing-last', otherProps.className),\n    children: children\n  });\n});"],
  "mappings": "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",
  "names": ["TabList", "warning", "_jsx", "clsx"]
}
